diff --git a/frontend/webpack-stats.pro.json b/frontend/webpack-stats.pro.json index a5b46a0e99e..65485789cf3 100644 --- a/frontend/webpack-stats.pro.json +++ b/frontend/webpack-stats.pro.json @@ -1,807 +1,807 @@ { "status": "done", "assets": { - "static/css/app.ce867cc5.css": { - "name": "static/css/app.ce867cc5.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/app.ce867cc5.css" + "static/css/app.06d6765d.css": { + "name": "static/css/app.06d6765d.css", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/app.06d6765d.css" }, - "static/css/app.ce867cc5.css.map": { - "name": "static/css/app.ce867cc5.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/app.ce867cc5.css.map" + "static/css/app.06d6765d.css.map": { + "name": "static/css/app.06d6765d.css.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/app.06d6765d.css.map" }, - "static/css/commons.2c40b537.css": { - "name": "static/css/commons.2c40b537.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/commons.2c40b537.css" + "static/css/commons.44d6cf61.css": { + "name": "static/css/commons.44d6cf61.css", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/commons.44d6cf61.css" }, - "static/css/commons.2c40b537.css.map": { - "name": "static/css/commons.2c40b537.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/commons.2c40b537.css.map" + "static/css/commons.44d6cf61.css.map": { + "name": "static/css/commons.44d6cf61.css.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/commons.44d6cf61.css.map" }, - "static/css/draft.dfd8ec8b.css": { - "name": "static/css/draft.dfd8ec8b.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/draft.dfd8ec8b.css" + "static/css/draft.99bd13be.css": { + "name": "static/css/draft.99bd13be.css", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/draft.99bd13be.css" }, - "static/css/draft.dfd8ec8b.css.map": { - "name": "static/css/draft.dfd8ec8b.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/draft.dfd8ec8b.css.map" + "static/css/draft.99bd13be.css.map": { + "name": "static/css/draft.99bd13be.css.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/draft.99bd13be.css.map" }, - "static/css/fileHistory.c207f9b1.css": { - "name": "static/css/fileHistory.c207f9b1.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/fileHistory.c207f9b1.css" + "static/css/fileHistory.067ab156.css": { + "name": "static/css/fileHistory.067ab156.css", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/fileHistory.067ab156.css" }, - "static/css/fileHistory.c207f9b1.css.map": { - "name": "static/css/fileHistory.c207f9b1.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/fileHistory.c207f9b1.css.map" + "static/css/fileHistory.067ab156.css.map": { + "name": "static/css/fileHistory.067ab156.css.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/fileHistory.067ab156.css.map" }, "static/css/fileHistoryOld.34922be6.css": { "name": "static/css/fileHistoryOld.34922be6.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/fileHistoryOld.34922be6.css" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/fileHistoryOld.34922be6.css" }, "static/css/fileHistoryOld.34922be6.css.map": { "name": "static/css/fileHistoryOld.34922be6.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/fileHistoryOld.34922be6.css.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/fileHistoryOld.34922be6.css.map" }, - "static/css/historyTrashFileView.d2070387.css": { - "name": "static/css/historyTrashFileView.d2070387.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/historyTrashFileView.d2070387.css" + "static/css/historyTrashFileView.bcf014b6.css": { + "name": "static/css/historyTrashFileView.bcf014b6.css", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/historyTrashFileView.bcf014b6.css" }, - "static/css/historyTrashFileView.d2070387.css.map": { - "name": "static/css/historyTrashFileView.d2070387.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/historyTrashFileView.d2070387.css.map" + "static/css/historyTrashFileView.bcf014b6.css.map": { + "name": "static/css/historyTrashFileView.bcf014b6.css.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/historyTrashFileView.bcf014b6.css.map" }, - "static/css/markdownEditor.c66eb93d.css": { - "name": "static/css/markdownEditor.c66eb93d.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/markdownEditor.c66eb93d.css" + "static/css/markdownEditor.d88bbc1a.css": { + "name": "static/css/markdownEditor.d88bbc1a.css", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/markdownEditor.d88bbc1a.css" }, - "static/css/markdownEditor.c66eb93d.css.map": { - "name": "static/css/markdownEditor.c66eb93d.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/markdownEditor.c66eb93d.css.map" + "static/css/markdownEditor.d88bbc1a.css.map": { + "name": "static/css/markdownEditor.d88bbc1a.css.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/markdownEditor.d88bbc1a.css.map" }, "static/css/orgAdmin.bb6a05c5.css": { "name": "static/css/orgAdmin.bb6a05c5.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/orgAdmin.bb6a05c5.css" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/orgAdmin.bb6a05c5.css" }, "static/css/orgAdmin.bb6a05c5.css.map": { "name": "static/css/orgAdmin.bb6a05c5.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/orgAdmin.bb6a05c5.css.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/orgAdmin.bb6a05c5.css.map" }, "static/css/repoFolderTrash.d4170c41.css": { "name": "static/css/repoFolderTrash.d4170c41.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/repoFolderTrash.d4170c41.css" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/repoFolderTrash.d4170c41.css" }, "static/css/repoFolderTrash.d4170c41.css.map": { "name": "static/css/repoFolderTrash.d4170c41.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/repoFolderTrash.d4170c41.css.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/repoFolderTrash.d4170c41.css.map" }, "static/css/repoHistory.f0ad8622.css": { "name": "static/css/repoHistory.f0ad8622.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/repoHistory.f0ad8622.css" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/repoHistory.f0ad8622.css" }, "static/css/repoHistory.f0ad8622.css.map": { "name": "static/css/repoHistory.f0ad8622.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/repoHistory.f0ad8622.css.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/repoHistory.f0ad8622.css.map" }, "static/css/repoSnapshot.c6bbee77.css": { "name": "static/css/repoSnapshot.c6bbee77.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/repoSnapshot.c6bbee77.css" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/repoSnapshot.c6bbee77.css" }, "static/css/repoSnapshot.c6bbee77.css.map": { "name": "static/css/repoSnapshot.c6bbee77.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/repoSnapshot.c6bbee77.css.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/repoSnapshot.c6bbee77.css.map" }, "static/css/sdocFileHistory.f936c666.css": { "name": "static/css/sdocFileHistory.f936c666.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/sdocFileHistory.f936c666.css" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/sdocFileHistory.f936c666.css" }, "static/css/sdocFileHistory.f936c666.css.map": { "name": "static/css/sdocFileHistory.f936c666.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/sdocFileHistory.f936c666.css.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/sdocFileHistory.f936c666.css.map" }, "static/css/settings.391717d2.css": { "name": "static/css/settings.391717d2.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/settings.391717d2.css" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/settings.391717d2.css" }, "static/css/settings.391717d2.css.map": { "name": "static/css/settings.391717d2.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/settings.391717d2.css.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/settings.391717d2.css.map" }, "static/css/sharedDirView.945789e9.css": { "name": "static/css/sharedDirView.945789e9.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/sharedDirView.945789e9.css" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/sharedDirView.945789e9.css" }, "static/css/sharedDirView.945789e9.css.map": { "name": "static/css/sharedDirView.945789e9.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/sharedDirView.945789e9.css.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/sharedDirView.945789e9.css.map" }, "static/css/sharedFileViewSpreadsheet.ff1ddac7.css": { "name": "static/css/sharedFileViewSpreadsheet.ff1ddac7.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/sharedFileViewSpreadsheet.ff1ddac7.css" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/sharedFileViewSpreadsheet.ff1ddac7.css" }, "static/css/sharedFileViewSpreadsheet.ff1ddac7.css.map": { "name": "static/css/sharedFileViewSpreadsheet.ff1ddac7.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/sharedFileViewSpreadsheet.ff1ddac7.css.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/sharedFileViewSpreadsheet.ff1ddac7.css.map" }, "static/css/sysAdmin.feb7b73d.css": { "name": "static/css/sysAdmin.feb7b73d.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/sysAdmin.feb7b73d.css" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/sysAdmin.feb7b73d.css" }, "static/css/sysAdmin.feb7b73d.css.map": { "name": "static/css/sysAdmin.feb7b73d.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/sysAdmin.feb7b73d.css.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/sysAdmin.feb7b73d.css.map" }, "static/css/TCAccept.05d88392.css": { "name": "static/css/TCAccept.05d88392.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/TCAccept.05d88392.css" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/TCAccept.05d88392.css" }, "static/css/TCAccept.05d88392.css.map": { "name": "static/css/TCAccept.05d88392.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/TCAccept.05d88392.css.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/TCAccept.05d88392.css.map" }, "static/css/TCView.05d88392.css": { "name": "static/css/TCView.05d88392.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/TCView.05d88392.css" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/TCView.05d88392.css" }, "static/css/TCView.05d88392.css.map": { "name": "static/css/TCView.05d88392.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/TCView.05d88392.css.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/TCView.05d88392.css.map" }, "static/css/uploadLink.01103a58.css": { "name": "static/css/uploadLink.01103a58.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/uploadLink.01103a58.css" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/uploadLink.01103a58.css" }, "static/css/uploadLink.01103a58.css.map": { "name": "static/css/uploadLink.01103a58.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/uploadLink.01103a58.css.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/uploadLink.01103a58.css.map" }, "static/css/viewFileSpreadsheet.ff1ddac7.css": { "name": "static/css/viewFileSpreadsheet.ff1ddac7.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/viewFileSpreadsheet.ff1ddac7.css" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/viewFileSpreadsheet.ff1ddac7.css" }, "static/css/viewFileSpreadsheet.ff1ddac7.css.map": { "name": "static/css/viewFileSpreadsheet.ff1ddac7.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/viewFileSpreadsheet.ff1ddac7.css.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/viewFileSpreadsheet.ff1ddac7.css.map" }, - "static/css/wiki.2d406fab.css": { - "name": "static/css/wiki.2d406fab.css", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/wiki.2d406fab.css" + "static/css/wiki.b992029b.css": { + "name": "static/css/wiki.b992029b.css", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/wiki.b992029b.css" }, - "static/css/wiki.2d406fab.css.map": { - "name": "static/css/wiki.2d406fab.css.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/css/wiki.2d406fab.css.map" + "static/css/wiki.b992029b.css.map": { + "name": "static/css/wiki.b992029b.css.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/css/wiki.b992029b.css.map" }, "static/js/305.d8dbbbbc.chunk.js": { "name": "static/js/305.d8dbbbbc.chunk.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/305.d8dbbbbc.chunk.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/305.d8dbbbbc.chunk.js" }, "static/js/305.d8dbbbbc.chunk.js.map": { "name": "static/js/305.d8dbbbbc.chunk.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/305.d8dbbbbc.chunk.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/305.d8dbbbbc.chunk.js.map" }, "static/js/311.e7e04ffb.chunk.js": { "name": "static/js/311.e7e04ffb.chunk.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/311.e7e04ffb.chunk.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/311.e7e04ffb.chunk.js" }, "static/js/311.e7e04ffb.chunk.js.map": { "name": "static/js/311.e7e04ffb.chunk.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/311.e7e04ffb.chunk.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/311.e7e04ffb.chunk.js.map" }, "static/js/379.e48ee7a7.chunk.js": { "name": "static/js/379.e48ee7a7.chunk.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/379.e48ee7a7.chunk.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/379.e48ee7a7.chunk.js" }, "static/js/379.e48ee7a7.chunk.js.map": { "name": "static/js/379.e48ee7a7.chunk.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/379.e48ee7a7.chunk.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/379.e48ee7a7.chunk.js.map" }, "static/js/482.40023cf1.chunk.js": { "name": "static/js/482.40023cf1.chunk.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/482.40023cf1.chunk.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/482.40023cf1.chunk.js" }, "static/js/482.40023cf1.chunk.js.map": { "name": "static/js/482.40023cf1.chunk.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/482.40023cf1.chunk.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/482.40023cf1.chunk.js.map" }, "static/js/54.f8d765ee.chunk.js": { "name": "static/js/54.f8d765ee.chunk.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/54.f8d765ee.chunk.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/54.f8d765ee.chunk.js" }, "static/js/54.f8d765ee.chunk.js.map": { "name": "static/js/54.f8d765ee.chunk.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/54.f8d765ee.chunk.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/54.f8d765ee.chunk.js.map" }, "static/js/545.2cc3d80f.chunk.js": { "name": "static/js/545.2cc3d80f.chunk.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/545.2cc3d80f.chunk.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/545.2cc3d80f.chunk.js" }, "static/js/545.2cc3d80f.chunk.js.map": { "name": "static/js/545.2cc3d80f.chunk.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/545.2cc3d80f.chunk.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/545.2cc3d80f.chunk.js.map" }, "static/js/921.ba8481b9.chunk.js": { "name": "static/js/921.ba8481b9.chunk.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/921.ba8481b9.chunk.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/921.ba8481b9.chunk.js" }, "static/js/921.ba8481b9.chunk.js.map": { "name": "static/js/921.ba8481b9.chunk.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/921.ba8481b9.chunk.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/921.ba8481b9.chunk.js.map" }, "static/js/975.7f1d8705.chunk.js": { "name": "static/js/975.7f1d8705.chunk.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/975.7f1d8705.chunk.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/975.7f1d8705.chunk.js" }, "static/js/975.7f1d8705.chunk.js.map": { "name": "static/js/975.7f1d8705.chunk.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/975.7f1d8705.chunk.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/975.7f1d8705.chunk.js.map" }, "static/js/997.4e7b85c4.chunk.js": { "name": "static/js/997.4e7b85c4.chunk.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/997.4e7b85c4.chunk.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/997.4e7b85c4.chunk.js" }, "static/js/997.4e7b85c4.chunk.js.map": { "name": "static/js/997.4e7b85c4.chunk.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/997.4e7b85c4.chunk.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/997.4e7b85c4.chunk.js.map" }, - "static/js/app.800f919a.js": { - "name": "static/js/app.800f919a.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/app.800f919a.js" + "static/js/app.54217b8e.js": { + "name": "static/js/app.54217b8e.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/app.54217b8e.js" }, - "static/js/app.800f919a.js.LICENSE.txt": { - "name": "static/js/app.800f919a.js.LICENSE.txt", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/app.800f919a.js.LICENSE.txt" + "static/js/app.54217b8e.js.LICENSE.txt": { + "name": "static/js/app.54217b8e.js.LICENSE.txt", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/app.54217b8e.js.LICENSE.txt" }, - "static/js/app.800f919a.js.map": { - "name": "static/js/app.800f919a.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/app.800f919a.js.map" + "static/js/app.54217b8e.js.map": { + "name": "static/js/app.54217b8e.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/app.54217b8e.js.map" }, - "static/js/commons.84df398e.js": { - "name": "static/js/commons.84df398e.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/commons.84df398e.js" + "static/js/commons.34f4be2c.js": { + "name": "static/js/commons.34f4be2c.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/commons.34f4be2c.js" }, - "static/js/commons.84df398e.js.LICENSE.txt": { - "name": "static/js/commons.84df398e.js.LICENSE.txt", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/commons.84df398e.js.LICENSE.txt" + "static/js/commons.34f4be2c.js.LICENSE.txt": { + "name": "static/js/commons.34f4be2c.js.LICENSE.txt", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/commons.34f4be2c.js.LICENSE.txt" }, - "static/js/commons.84df398e.js.map": { - "name": "static/js/commons.84df398e.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/commons.84df398e.js.map" + "static/js/commons.34f4be2c.js.map": { + "name": "static/js/commons.34f4be2c.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/commons.34f4be2c.js.map" }, - "static/js/draft.b5d27191.js": { - "name": "static/js/draft.b5d27191.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/draft.b5d27191.js" + "static/js/draft.5f324749.js": { + "name": "static/js/draft.5f324749.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/draft.5f324749.js" }, - "static/js/draft.b5d27191.js.map": { - "name": "static/js/draft.b5d27191.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/draft.b5d27191.js.map" + "static/js/draft.5f324749.js.map": { + "name": "static/js/draft.5f324749.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/draft.5f324749.js.map" }, - "static/js/fileHistory.88bff865.js": { - "name": "static/js/fileHistory.88bff865.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/fileHistory.88bff865.js" + "static/js/fileHistory.0e76e4d0.js": { + "name": "static/js/fileHistory.0e76e4d0.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/fileHistory.0e76e4d0.js" }, - "static/js/fileHistory.88bff865.js.map": { - "name": "static/js/fileHistory.88bff865.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/fileHistory.88bff865.js.map" + "static/js/fileHistory.0e76e4d0.js.map": { + "name": "static/js/fileHistory.0e76e4d0.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/fileHistory.0e76e4d0.js.map" }, "static/js/fileHistoryOld.3f18f9ad.js": { "name": "static/js/fileHistoryOld.3f18f9ad.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/fileHistoryOld.3f18f9ad.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/fileHistoryOld.3f18f9ad.js" }, "static/js/fileHistoryOld.3f18f9ad.js.map": { "name": "static/js/fileHistoryOld.3f18f9ad.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/fileHistoryOld.3f18f9ad.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/fileHistoryOld.3f18f9ad.js.map" }, "static/js/fileView.f3d13498.js": { "name": "static/js/fileView.f3d13498.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/fileView.f3d13498.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/fileView.f3d13498.js" }, "static/js/fileView.f3d13498.js.map": { "name": "static/js/fileView.f3d13498.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/fileView.f3d13498.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/fileView.f3d13498.js.map" }, - "static/js/historyTrashFileView.11fe180d.js": { - "name": "static/js/historyTrashFileView.11fe180d.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/historyTrashFileView.11fe180d.js" + "static/js/historyTrashFileView.3099654d.js": { + "name": "static/js/historyTrashFileView.3099654d.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/historyTrashFileView.3099654d.js" }, - "static/js/historyTrashFileView.11fe180d.js.map": { - "name": "static/js/historyTrashFileView.11fe180d.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/historyTrashFileView.11fe180d.js.map" + "static/js/historyTrashFileView.3099654d.js.map": { + "name": "static/js/historyTrashFileView.3099654d.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/historyTrashFileView.3099654d.js.map" }, - "static/js/markdownEditor.3ee490c8.js": { - "name": "static/js/markdownEditor.3ee490c8.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/markdownEditor.3ee490c8.js" + "static/js/markdownEditor.0b381ae2.js": { + "name": "static/js/markdownEditor.0b381ae2.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/markdownEditor.0b381ae2.js" }, - "static/js/markdownEditor.3ee490c8.js.LICENSE.txt": { - "name": "static/js/markdownEditor.3ee490c8.js.LICENSE.txt", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/markdownEditor.3ee490c8.js.LICENSE.txt" + "static/js/markdownEditor.0b381ae2.js.LICENSE.txt": { + "name": "static/js/markdownEditor.0b381ae2.js.LICENSE.txt", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/markdownEditor.0b381ae2.js.LICENSE.txt" }, - "static/js/markdownEditor.3ee490c8.js.map": { - "name": "static/js/markdownEditor.3ee490c8.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/markdownEditor.3ee490c8.js.map" + "static/js/markdownEditor.0b381ae2.js.map": { + "name": "static/js/markdownEditor.0b381ae2.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/markdownEditor.0b381ae2.js.map" }, - "static/js/orgAdmin.c982a7fd.js": { - "name": "static/js/orgAdmin.c982a7fd.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/orgAdmin.c982a7fd.js" + "static/js/orgAdmin.6f455ad9.js": { + "name": "static/js/orgAdmin.6f455ad9.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/orgAdmin.6f455ad9.js" }, - "static/js/orgAdmin.c982a7fd.js.LICENSE.txt": { - "name": "static/js/orgAdmin.c982a7fd.js.LICENSE.txt", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/orgAdmin.c982a7fd.js.LICENSE.txt" + "static/js/orgAdmin.6f455ad9.js.LICENSE.txt": { + "name": "static/js/orgAdmin.6f455ad9.js.LICENSE.txt", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/orgAdmin.6f455ad9.js.LICENSE.txt" }, - "static/js/orgAdmin.c982a7fd.js.map": { - "name": "static/js/orgAdmin.c982a7fd.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/orgAdmin.c982a7fd.js.map" + "static/js/orgAdmin.6f455ad9.js.map": { + "name": "static/js/orgAdmin.6f455ad9.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/orgAdmin.6f455ad9.js.map" }, "static/js/repoFolderTrash.28b24f80.js": { "name": "static/js/repoFolderTrash.28b24f80.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/repoFolderTrash.28b24f80.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/repoFolderTrash.28b24f80.js" }, "static/js/repoFolderTrash.28b24f80.js.map": { "name": "static/js/repoFolderTrash.28b24f80.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/repoFolderTrash.28b24f80.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/repoFolderTrash.28b24f80.js.map" }, "static/js/repoHistory.576546cc.js": { "name": "static/js/repoHistory.576546cc.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/repoHistory.576546cc.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/repoHistory.576546cc.js" }, "static/js/repoHistory.576546cc.js.map": { "name": "static/js/repoHistory.576546cc.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/repoHistory.576546cc.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/repoHistory.576546cc.js.map" }, "static/js/repoSnapshot.8c570ae6.js": { "name": "static/js/repoSnapshot.8c570ae6.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/repoSnapshot.8c570ae6.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/repoSnapshot.8c570ae6.js" }, "static/js/repoSnapshot.8c570ae6.js.map": { "name": "static/js/repoSnapshot.8c570ae6.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/repoSnapshot.8c570ae6.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/repoSnapshot.8c570ae6.js.map" }, - "static/js/runtime.028fa1ae.js": { - "name": "static/js/runtime.028fa1ae.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/runtime.028fa1ae.js" + "static/js/runtime.a3d207a7.js": { + "name": "static/js/runtime.a3d207a7.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/runtime.a3d207a7.js" }, - "static/js/runtime.028fa1ae.js.map": { - "name": "static/js/runtime.028fa1ae.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/runtime.028fa1ae.js.map" + "static/js/runtime.a3d207a7.js.map": { + "name": "static/js/runtime.a3d207a7.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/runtime.a3d207a7.js.map" }, - "static/js/sdocFileHistory.5d6a8c34.js": { - "name": "static/js/sdocFileHistory.5d6a8c34.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sdocFileHistory.5d6a8c34.js" + "static/js/sdocFileHistory.01f01c1a.js": { + "name": "static/js/sdocFileHistory.01f01c1a.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sdocFileHistory.01f01c1a.js" }, - "static/js/sdocFileHistory.5d6a8c34.js.map": { - "name": "static/js/sdocFileHistory.5d6a8c34.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sdocFileHistory.5d6a8c34.js.map" + "static/js/sdocFileHistory.01f01c1a.js.map": { + "name": "static/js/sdocFileHistory.01f01c1a.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sdocFileHistory.01f01c1a.js.map" }, - "static/js/sdocPublishedRevision.aeef61c9.js": { - "name": "static/js/sdocPublishedRevision.aeef61c9.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sdocPublishedRevision.aeef61c9.js" + "static/js/sdocPublishedRevision.f8f9e895.js": { + "name": "static/js/sdocPublishedRevision.f8f9e895.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sdocPublishedRevision.f8f9e895.js" }, - "static/js/sdocPublishedRevision.aeef61c9.js.map": { - "name": "static/js/sdocPublishedRevision.aeef61c9.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sdocPublishedRevision.aeef61c9.js.map" + "static/js/sdocPublishedRevision.f8f9e895.js.map": { + "name": "static/js/sdocPublishedRevision.f8f9e895.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sdocPublishedRevision.f8f9e895.js.map" }, - "static/js/search.60173edb.js": { - "name": "static/js/search.60173edb.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/search.60173edb.js" + "static/js/search.164ffc8c.js": { + "name": "static/js/search.164ffc8c.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/search.164ffc8c.js" }, - "static/js/search.60173edb.js.map": { - "name": "static/js/search.60173edb.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/search.60173edb.js.map" + "static/js/search.164ffc8c.js.map": { + "name": "static/js/search.164ffc8c.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/search.164ffc8c.js.map" }, "static/js/settings.4f5512b2.js": { "name": "static/js/settings.4f5512b2.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/settings.4f5512b2.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/settings.4f5512b2.js" }, "static/js/settings.4f5512b2.js.map": { "name": "static/js/settings.4f5512b2.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/settings.4f5512b2.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/settings.4f5512b2.js.map" }, - "static/js/sharedDirView.859e8ccc.js": { - "name": "static/js/sharedDirView.859e8ccc.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedDirView.859e8ccc.js" + "static/js/sharedDirView.ab66951d.js": { + "name": "static/js/sharedDirView.ab66951d.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedDirView.ab66951d.js" }, - "static/js/sharedDirView.859e8ccc.js.map": { - "name": "static/js/sharedDirView.859e8ccc.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedDirView.859e8ccc.js.map" + "static/js/sharedDirView.ab66951d.js.map": { + "name": "static/js/sharedDirView.ab66951d.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedDirView.ab66951d.js.map" }, "static/js/sharedFileViewAudio.cedd033e.js": { "name": "static/js/sharedFileViewAudio.cedd033e.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewAudio.cedd033e.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewAudio.cedd033e.js" }, "static/js/sharedFileViewAudio.cedd033e.js.map": { "name": "static/js/sharedFileViewAudio.cedd033e.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewAudio.cedd033e.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewAudio.cedd033e.js.map" }, "static/js/sharedFileViewDocument.180f58d8.js": { "name": "static/js/sharedFileViewDocument.180f58d8.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewDocument.180f58d8.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewDocument.180f58d8.js" }, "static/js/sharedFileViewDocument.180f58d8.js.map": { "name": "static/js/sharedFileViewDocument.180f58d8.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewDocument.180f58d8.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewDocument.180f58d8.js.map" }, "static/js/sharedFileViewImage.9d0dda04.js": { "name": "static/js/sharedFileViewImage.9d0dda04.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewImage.9d0dda04.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewImage.9d0dda04.js" }, "static/js/sharedFileViewImage.9d0dda04.js.map": { "name": "static/js/sharedFileViewImage.9d0dda04.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewImage.9d0dda04.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewImage.9d0dda04.js.map" }, - "static/js/sharedFileViewMarkdown.7dbe56ed.js": { - "name": "static/js/sharedFileViewMarkdown.7dbe56ed.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewMarkdown.7dbe56ed.js" + "static/js/sharedFileViewMarkdown.03a6a4cd.js": { + "name": "static/js/sharedFileViewMarkdown.03a6a4cd.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewMarkdown.03a6a4cd.js" }, - "static/js/sharedFileViewMarkdown.7dbe56ed.js.map": { - "name": "static/js/sharedFileViewMarkdown.7dbe56ed.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewMarkdown.7dbe56ed.js.map" + "static/js/sharedFileViewMarkdown.03a6a4cd.js.map": { + "name": "static/js/sharedFileViewMarkdown.03a6a4cd.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewMarkdown.03a6a4cd.js.map" }, "static/js/sharedFileViewPDF.a00415f0.js": { "name": "static/js/sharedFileViewPDF.a00415f0.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewPDF.a00415f0.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewPDF.a00415f0.js" }, "static/js/sharedFileViewPDF.a00415f0.js.map": { "name": "static/js/sharedFileViewPDF.a00415f0.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewPDF.a00415f0.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewPDF.a00415f0.js.map" }, - "static/js/sharedFileViewSdoc.4a7b0355.js": { - "name": "static/js/sharedFileViewSdoc.4a7b0355.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewSdoc.4a7b0355.js" + "static/js/sharedFileViewSdoc.21961792.js": { + "name": "static/js/sharedFileViewSdoc.21961792.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewSdoc.21961792.js" }, - "static/js/sharedFileViewSdoc.4a7b0355.js.map": { - "name": "static/js/sharedFileViewSdoc.4a7b0355.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewSdoc.4a7b0355.js.map" + "static/js/sharedFileViewSdoc.21961792.js.map": { + "name": "static/js/sharedFileViewSdoc.21961792.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewSdoc.21961792.js.map" }, "static/js/sharedFileViewSpreadsheet.0ffb4373.js": { "name": "static/js/sharedFileViewSpreadsheet.0ffb4373.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewSpreadsheet.0ffb4373.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewSpreadsheet.0ffb4373.js" }, "static/js/sharedFileViewSpreadsheet.0ffb4373.js.map": { "name": "static/js/sharedFileViewSpreadsheet.0ffb4373.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewSpreadsheet.0ffb4373.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewSpreadsheet.0ffb4373.js.map" }, "static/js/sharedFileViewSVG.5fd43385.js": { "name": "static/js/sharedFileViewSVG.5fd43385.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewSVG.5fd43385.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewSVG.5fd43385.js" }, "static/js/sharedFileViewSVG.5fd43385.js.map": { "name": "static/js/sharedFileViewSVG.5fd43385.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewSVG.5fd43385.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewSVG.5fd43385.js.map" }, - "static/js/sharedFileViewText.2fe6341c.js": { - "name": "static/js/sharedFileViewText.2fe6341c.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewText.2fe6341c.js" + "static/js/sharedFileViewText.757e8d1a.js": { + "name": "static/js/sharedFileViewText.757e8d1a.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewText.757e8d1a.js" }, - "static/js/sharedFileViewText.2fe6341c.js.map": { - "name": "static/js/sharedFileViewText.2fe6341c.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewText.2fe6341c.js.map" + "static/js/sharedFileViewText.757e8d1a.js.map": { + "name": "static/js/sharedFileViewText.757e8d1a.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewText.757e8d1a.js.map" }, "static/js/sharedFileViewUnknown.a0e468e0.js": { "name": "static/js/sharedFileViewUnknown.a0e468e0.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewUnknown.a0e468e0.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewUnknown.a0e468e0.js" }, "static/js/sharedFileViewUnknown.a0e468e0.js.map": { "name": "static/js/sharedFileViewUnknown.a0e468e0.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewUnknown.a0e468e0.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewUnknown.a0e468e0.js.map" }, "static/js/sharedFileViewVideo.6af2fa31.js": { "name": "static/js/sharedFileViewVideo.6af2fa31.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewVideo.6af2fa31.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewVideo.6af2fa31.js" }, "static/js/sharedFileViewVideo.6af2fa31.js.map": { "name": "static/js/sharedFileViewVideo.6af2fa31.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sharedFileViewVideo.6af2fa31.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sharedFileViewVideo.6af2fa31.js.map" }, - "static/js/sysAdmin.6fc63bb6.js": { - "name": "static/js/sysAdmin.6fc63bb6.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sysAdmin.6fc63bb6.js" + "static/js/sysAdmin.91d1d2f2.js": { + "name": "static/js/sysAdmin.91d1d2f2.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sysAdmin.91d1d2f2.js" }, - "static/js/sysAdmin.6fc63bb6.js.LICENSE.txt": { - "name": "static/js/sysAdmin.6fc63bb6.js.LICENSE.txt", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sysAdmin.6fc63bb6.js.LICENSE.txt" + "static/js/sysAdmin.91d1d2f2.js.LICENSE.txt": { + "name": "static/js/sysAdmin.91d1d2f2.js.LICENSE.txt", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sysAdmin.91d1d2f2.js.LICENSE.txt" }, - "static/js/sysAdmin.6fc63bb6.js.map": { - "name": "static/js/sysAdmin.6fc63bb6.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/sysAdmin.6fc63bb6.js.map" + "static/js/sysAdmin.91d1d2f2.js.map": { + "name": "static/js/sysAdmin.91d1d2f2.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/sysAdmin.91d1d2f2.js.map" }, "static/js/TCAccept.c1a15517.js": { "name": "static/js/TCAccept.c1a15517.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/TCAccept.c1a15517.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/TCAccept.c1a15517.js" }, "static/js/TCAccept.c1a15517.js.map": { "name": "static/js/TCAccept.c1a15517.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/TCAccept.c1a15517.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/TCAccept.c1a15517.js.map" }, "static/js/TCView.d87affdd.js": { "name": "static/js/TCView.d87affdd.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/TCView.d87affdd.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/TCView.d87affdd.js" }, "static/js/TCView.d87affdd.js.map": { "name": "static/js/TCView.d87affdd.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/TCView.d87affdd.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/TCView.d87affdd.js.map" }, - "static/js/uploadLink.d3bf7687.js": { - "name": "static/js/uploadLink.d3bf7687.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/uploadLink.d3bf7687.js" + "static/js/uploadLink.8d2b00c1.js": { + "name": "static/js/uploadLink.8d2b00c1.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/uploadLink.8d2b00c1.js" }, - "static/js/uploadLink.d3bf7687.js.map": { - "name": "static/js/uploadLink.d3bf7687.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/uploadLink.d3bf7687.js.map" + "static/js/uploadLink.8d2b00c1.js.map": { + "name": "static/js/uploadLink.8d2b00c1.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/uploadLink.8d2b00c1.js.map" }, "static/js/viewFileDocument.8a503cff.js": { "name": "static/js/viewFileDocument.8a503cff.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/viewFileDocument.8a503cff.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/viewFileDocument.8a503cff.js" }, "static/js/viewFileDocument.8a503cff.js.map": { "name": "static/js/viewFileDocument.8a503cff.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/viewFileDocument.8a503cff.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/viewFileDocument.8a503cff.js.map" }, - "static/js/viewFileSdoc.c9c556b9.js": { - "name": "static/js/viewFileSdoc.c9c556b9.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/viewFileSdoc.c9c556b9.js" + "static/js/viewFileSdoc.6adf9d14.js": { + "name": "static/js/viewFileSdoc.6adf9d14.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/viewFileSdoc.6adf9d14.js" }, - "static/js/viewFileSdoc.c9c556b9.js.map": { - "name": "static/js/viewFileSdoc.c9c556b9.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/viewFileSdoc.c9c556b9.js.map" + "static/js/viewFileSdoc.6adf9d14.js.map": { + "name": "static/js/viewFileSdoc.6adf9d14.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/viewFileSdoc.6adf9d14.js.map" }, "static/js/viewFileSpreadsheet.77d500a4.js": { "name": "static/js/viewFileSpreadsheet.77d500a4.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/viewFileSpreadsheet.77d500a4.js" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/viewFileSpreadsheet.77d500a4.js" }, "static/js/viewFileSpreadsheet.77d500a4.js.map": { "name": "static/js/viewFileSpreadsheet.77d500a4.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/viewFileSpreadsheet.77d500a4.js.map" + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/viewFileSpreadsheet.77d500a4.js.map" }, - "static/js/viewFileText.7b29a2fb.js": { - "name": "static/js/viewFileText.7b29a2fb.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/viewFileText.7b29a2fb.js" + "static/js/viewFileText.dcddd49f.js": { + "name": "static/js/viewFileText.dcddd49f.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/viewFileText.dcddd49f.js" }, - "static/js/viewFileText.7b29a2fb.js.map": { - "name": "static/js/viewFileText.7b29a2fb.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/viewFileText.7b29a2fb.js.map" + "static/js/viewFileText.dcddd49f.js.map": { + "name": "static/js/viewFileText.dcddd49f.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/viewFileText.dcddd49f.js.map" }, - "static/js/wiki.fd7804d0.js": { - "name": "static/js/wiki.fd7804d0.js", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/wiki.fd7804d0.js" + "static/js/wiki.9846d06a.js": { + "name": "static/js/wiki.9846d06a.js", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/wiki.9846d06a.js" }, - "static/js/wiki.fd7804d0.js.map": { - "name": "static/js/wiki.fd7804d0.js.map", - "path": "/Users/lidongze/seafile/seafile-10.0/data/dev/seahub/frontend/build/frontend/static/js/wiki.fd7804d0.js.map" + "static/js/wiki.9846d06a.js.map": { + "name": "static/js/wiki.9846d06a.js.map", + "path": "/home/runner/work/seahub/seahub/frontend/build/frontend/static/js/wiki.9846d06a.js.map" } }, "chunks": { "app": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", - "static/css/app.ce867cc5.css", - "static/js/app.800f919a.js" + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", + "static/css/app.06d6765d.css", + "static/js/app.54217b8e.js" ], "draft": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", - "static/css/draft.dfd8ec8b.css", - "static/js/draft.b5d27191.js" + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", + "static/css/draft.99bd13be.css", + "static/js/draft.5f324749.js" ], "fileHistory": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", - "static/css/fileHistory.c207f9b1.css", - "static/js/fileHistory.88bff865.js" + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", + "static/css/fileHistory.067ab156.css", + "static/js/fileHistory.0e76e4d0.js" ], "fileHistoryOld": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/css/fileHistoryOld.34922be6.css", "static/js/fileHistoryOld.3f18f9ad.js" ], "fileView": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/js/fileView.f3d13498.js" ], "historyTrashFileView": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", - "static/css/historyTrashFileView.d2070387.css", - "static/js/historyTrashFileView.11fe180d.js" + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", + "static/css/historyTrashFileView.bcf014b6.css", + "static/js/historyTrashFileView.3099654d.js" ], "markdownEditor": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", - "static/css/markdownEditor.c66eb93d.css", - "static/js/markdownEditor.3ee490c8.js" + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", + "static/css/markdownEditor.d88bbc1a.css", + "static/js/markdownEditor.0b381ae2.js" ], "orgAdmin": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/css/orgAdmin.bb6a05c5.css", - "static/js/orgAdmin.c982a7fd.js" + "static/js/orgAdmin.6f455ad9.js" ], "repoFolderTrash": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/css/repoFolderTrash.d4170c41.css", "static/js/repoFolderTrash.28b24f80.js" ], "repoHistory": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/css/repoHistory.f0ad8622.css", "static/js/repoHistory.576546cc.js" ], "repoSnapshot": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/css/repoSnapshot.c6bbee77.css", "static/js/repoSnapshot.8c570ae6.js" ], "sdocFileHistory": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/css/sdocFileHistory.f936c666.css", - "static/js/sdocFileHistory.5d6a8c34.js" + "static/js/sdocFileHistory.01f01c1a.js" ], "sdocPublishedRevision": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", - "static/js/sdocPublishedRevision.aeef61c9.js" + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", + "static/js/sdocPublishedRevision.f8f9e895.js" ], "search": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", - "static/js/search.60173edb.js" + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", + "static/js/search.164ffc8c.js" ], "settings": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/css/settings.391717d2.css", "static/js/settings.4f5512b2.js" ], "sharedDirView": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/css/sharedDirView.945789e9.css", - "static/js/sharedDirView.859e8ccc.js" + "static/js/sharedDirView.ab66951d.js" ], "sharedFileViewAudio": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/js/sharedFileViewAudio.cedd033e.js" ], "sharedFileViewDocument": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/js/sharedFileViewDocument.180f58d8.js" ], "sharedFileViewImage": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/js/sharedFileViewImage.9d0dda04.js" ], "sharedFileViewMarkdown": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", - "static/js/sharedFileViewMarkdown.7dbe56ed.js" + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", + "static/js/sharedFileViewMarkdown.03a6a4cd.js" ], "sharedFileViewPDF": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/js/sharedFileViewPDF.a00415f0.js" ], "sharedFileViewSdoc": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", - "static/js/sharedFileViewSdoc.4a7b0355.js" + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", + "static/js/sharedFileViewSdoc.21961792.js" ], "sharedFileViewSpreadsheet": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/css/sharedFileViewSpreadsheet.ff1ddac7.css", "static/js/sharedFileViewSpreadsheet.0ffb4373.js" ], "sharedFileViewSVG": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/js/sharedFileViewSVG.5fd43385.js" ], "sharedFileViewText": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", - "static/js/sharedFileViewText.2fe6341c.js" + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", + "static/js/sharedFileViewText.757e8d1a.js" ], "sharedFileViewUnknown": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/js/sharedFileViewUnknown.a0e468e0.js" ], "sharedFileViewVideo": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/js/sharedFileViewVideo.6af2fa31.js" ], "sysAdmin": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/css/sysAdmin.feb7b73d.css", - "static/js/sysAdmin.6fc63bb6.js" + "static/js/sysAdmin.91d1d2f2.js" ], "TCAccept": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/css/TCAccept.05d88392.css", "static/js/TCAccept.c1a15517.js" ], "TCView": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/css/TCView.05d88392.css", "static/js/TCView.d87affdd.js" ], "uploadLink": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/css/uploadLink.01103a58.css", - "static/js/uploadLink.d3bf7687.js" + "static/js/uploadLink.8d2b00c1.js" ], "viewFileDocument": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/js/viewFileDocument.8a503cff.js" ], "viewFileSdoc": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", - "static/js/viewFileSdoc.c9c556b9.js" + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", + "static/js/viewFileSdoc.6adf9d14.js" ], "viewFileSpreadsheet": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", "static/css/viewFileSpreadsheet.ff1ddac7.css", "static/js/viewFileSpreadsheet.77d500a4.js" ], "viewFileText": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", - "static/js/viewFileText.7b29a2fb.js" + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", + "static/js/viewFileText.dcddd49f.js" ], "wiki": [ - "static/js/runtime.028fa1ae.js", - "static/css/commons.2c40b537.css", - "static/js/commons.84df398e.js", - "static/css/wiki.2d406fab.css", - "static/js/wiki.fd7804d0.js" + "static/js/runtime.a3d207a7.js", + "static/css/commons.44d6cf61.css", + "static/js/commons.34f4be2c.js", + "static/css/wiki.b992029b.css", + "static/js/wiki.9846d06a.js" ] } } \ No newline at end of file diff --git a/locale/ar/LC_MESSAGES/django.mo b/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..e18216cd88f Binary files /dev/null and b/locale/ar/LC_MESSAGES/django.mo differ diff --git a/locale/ar/LC_MESSAGES/djangojs.mo b/locale/ar/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..68cd9dd3621 Binary files /dev/null and b/locale/ar/LC_MESSAGES/djangojs.mo differ diff --git a/locale/bg/LC_MESSAGES/django.mo b/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..1af8fa2c698 Binary files /dev/null and b/locale/bg/LC_MESSAGES/django.mo differ diff --git a/locale/bg/LC_MESSAGES/djangojs.mo b/locale/bg/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..a3e838f736d Binary files /dev/null and b/locale/bg/LC_MESSAGES/djangojs.mo differ diff --git a/locale/bg_BG/LC_MESSAGES/djangojs.mo b/locale/bg_BG/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..a6f138aec0a Binary files /dev/null and b/locale/bg_BG/LC_MESSAGES/djangojs.mo differ diff --git a/locale/ca/LC_MESSAGES/django.mo b/locale/ca/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..0b189e6c9ea Binary files /dev/null and b/locale/ca/LC_MESSAGES/django.mo differ diff --git a/locale/ca/LC_MESSAGES/djangojs.mo b/locale/ca/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..7de1e971d5c Binary files /dev/null and b/locale/ca/LC_MESSAGES/djangojs.mo differ diff --git a/locale/cs/LC_MESSAGES/django.mo b/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..ed11046257b Binary files /dev/null and b/locale/cs/LC_MESSAGES/django.mo differ diff --git a/locale/cs/LC_MESSAGES/djangojs.mo b/locale/cs/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..5ad83d0e292 Binary files /dev/null and b/locale/cs/LC_MESSAGES/djangojs.mo differ diff --git a/locale/cs_CZ/LC_MESSAGES/djangojs.mo b/locale/cs_CZ/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..74b1c6e3b4b Binary files /dev/null and b/locale/cs_CZ/LC_MESSAGES/djangojs.mo differ diff --git a/locale/da_DK/LC_MESSAGES/djangojs.mo b/locale/da_DK/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..1799fd30104 Binary files /dev/null and b/locale/da_DK/LC_MESSAGES/djangojs.mo differ diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..56ed11a0502 Binary files /dev/null and b/locale/de/LC_MESSAGES/django.mo differ diff --git a/locale/de/LC_MESSAGES/djangojs.mo b/locale/de/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..7bd6472defb Binary files /dev/null and b/locale/de/LC_MESSAGES/djangojs.mo differ diff --git a/locale/el/LC_MESSAGES/django.mo b/locale/el/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..1d911ca83f2 Binary files /dev/null and b/locale/el/LC_MESSAGES/django.mo differ diff --git a/locale/el/LC_MESSAGES/djangojs.mo b/locale/el/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..78744ebdfd9 Binary files /dev/null and b/locale/el/LC_MESSAGES/djangojs.mo differ diff --git a/locale/el_GR/LC_MESSAGES/djangojs.mo b/locale/el_GR/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..7b7a22f9bd0 Binary files /dev/null and b/locale/el_GR/LC_MESSAGES/djangojs.mo differ diff --git a/locale/en/LC_MESSAGES/django.mo b/locale/en/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..6c5906d1cd0 Binary files /dev/null and b/locale/en/LC_MESSAGES/django.mo differ diff --git a/locale/en/LC_MESSAGES/djangojs.mo b/locale/en/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..6c5906d1cd0 Binary files /dev/null and b/locale/en/LC_MESSAGES/djangojs.mo differ diff --git a/locale/en_US/LC_MESSAGES/djangojs.mo b/locale/en_US/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..05b1d06271d Binary files /dev/null and b/locale/en_US/LC_MESSAGES/djangojs.mo differ diff --git a/locale/es/LC_MESSAGES/django.mo b/locale/es/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..f0ecfe8d451 Binary files /dev/null and b/locale/es/LC_MESSAGES/django.mo differ diff --git a/locale/es/LC_MESSAGES/djangojs.mo b/locale/es/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..8c8a9d19075 Binary files /dev/null and b/locale/es/LC_MESSAGES/djangojs.mo differ diff --git a/locale/es_AR/LC_MESSAGES/django.mo b/locale/es_AR/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..cf63d436333 Binary files /dev/null and b/locale/es_AR/LC_MESSAGES/django.mo differ diff --git a/locale/es_AR/LC_MESSAGES/djangojs.mo b/locale/es_AR/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..b076eff96fa Binary files /dev/null and b/locale/es_AR/LC_MESSAGES/djangojs.mo differ diff --git a/locale/es_MX/LC_MESSAGES/django.mo b/locale/es_MX/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..8e68333c4f7 Binary files /dev/null and b/locale/es_MX/LC_MESSAGES/django.mo differ diff --git a/locale/es_MX/LC_MESSAGES/djangojs.mo b/locale/es_MX/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..30383da29b9 Binary files /dev/null and b/locale/es_MX/LC_MESSAGES/djangojs.mo differ diff --git a/locale/fi/LC_MESSAGES/django.mo b/locale/fi/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..210b830e51b Binary files /dev/null and b/locale/fi/LC_MESSAGES/django.mo differ diff --git a/locale/fi/LC_MESSAGES/djangojs.mo b/locale/fi/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..ab59edb3880 Binary files /dev/null and b/locale/fi/LC_MESSAGES/djangojs.mo differ diff --git a/locale/fr/LC_MESSAGES/django.mo b/locale/fr/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..7701635ac6a Binary files /dev/null and b/locale/fr/LC_MESSAGES/django.mo differ diff --git a/locale/fr/LC_MESSAGES/djangojs.mo b/locale/fr/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..75493ed1809 Binary files /dev/null and b/locale/fr/LC_MESSAGES/djangojs.mo differ diff --git a/locale/he/LC_MESSAGES/django.mo b/locale/he/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..254bc0b9f99 Binary files /dev/null and b/locale/he/LC_MESSAGES/django.mo differ diff --git a/locale/he/LC_MESSAGES/djangojs.mo b/locale/he/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..c3316a07e12 Binary files /dev/null and b/locale/he/LC_MESSAGES/djangojs.mo differ diff --git a/locale/hr/LC_MESSAGES/djangojs.mo b/locale/hr/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..a0425d0ff43 Binary files /dev/null and b/locale/hr/LC_MESSAGES/djangojs.mo differ diff --git a/locale/hr_HR/LC_MESSAGES/djangojs.mo b/locale/hr_HR/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..1266e0273f0 Binary files /dev/null and b/locale/hr_HR/LC_MESSAGES/djangojs.mo differ diff --git a/locale/hu/LC_MESSAGES/django.mo b/locale/hu/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..eb7408774d9 Binary files /dev/null and b/locale/hu/LC_MESSAGES/django.mo differ diff --git a/locale/hu/LC_MESSAGES/djangojs.mo b/locale/hu/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..5944ad82fd6 Binary files /dev/null and b/locale/hu/LC_MESSAGES/djangojs.mo differ diff --git a/locale/is/LC_MESSAGES/django.mo b/locale/is/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..b82a2f26aab Binary files /dev/null and b/locale/is/LC_MESSAGES/django.mo differ diff --git a/locale/is/LC_MESSAGES/djangojs.mo b/locale/is/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..f6b3c6ce97b Binary files /dev/null and b/locale/is/LC_MESSAGES/djangojs.mo differ diff --git a/locale/it/LC_MESSAGES/django.mo b/locale/it/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..2f053420d8b Binary files /dev/null and b/locale/it/LC_MESSAGES/django.mo differ diff --git a/locale/it/LC_MESSAGES/djangojs.mo b/locale/it/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..c1143327ba0 Binary files /dev/null and b/locale/it/LC_MESSAGES/djangojs.mo differ diff --git a/locale/ja/LC_MESSAGES/django.mo b/locale/ja/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..7c44298faa9 Binary files /dev/null and b/locale/ja/LC_MESSAGES/django.mo differ diff --git a/locale/ja/LC_MESSAGES/djangojs.mo b/locale/ja/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..677d77a690c Binary files /dev/null and b/locale/ja/LC_MESSAGES/djangojs.mo differ diff --git a/locale/ko/LC_MESSAGES/django.mo b/locale/ko/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..80204710180 Binary files /dev/null and b/locale/ko/LC_MESSAGES/django.mo differ diff --git a/locale/ko/LC_MESSAGES/djangojs.mo b/locale/ko/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..827865c1848 Binary files /dev/null and b/locale/ko/LC_MESSAGES/djangojs.mo differ diff --git a/locale/lt/LC_MESSAGES/django.mo b/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..e3eb243b27f Binary files /dev/null and b/locale/lt/LC_MESSAGES/django.mo differ diff --git a/locale/lt/LC_MESSAGES/djangojs.mo b/locale/lt/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..169973a0674 Binary files /dev/null and b/locale/lt/LC_MESSAGES/djangojs.mo differ diff --git a/locale/lv/LC_MESSAGES/django.mo b/locale/lv/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..c21a1c34c94 Binary files /dev/null and b/locale/lv/LC_MESSAGES/django.mo differ diff --git a/locale/lv/LC_MESSAGES/djangojs.mo b/locale/lv/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..7b58bf45ec3 Binary files /dev/null and b/locale/lv/LC_MESSAGES/djangojs.mo differ diff --git a/locale/lv_LV/LC_MESSAGES/djangojs.mo b/locale/lv_LV/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..48f5bb916ff Binary files /dev/null and b/locale/lv_LV/LC_MESSAGES/djangojs.mo differ diff --git a/locale/mk/LC_MESSAGES/django.mo b/locale/mk/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..4be4a0637d2 Binary files /dev/null and b/locale/mk/LC_MESSAGES/django.mo differ diff --git a/locale/mk/LC_MESSAGES/djangojs.mo b/locale/mk/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..3259ca6f00e Binary files /dev/null and b/locale/mk/LC_MESSAGES/djangojs.mo differ diff --git a/locale/nb/LC_MESSAGES/djangojs.mo b/locale/nb/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..c32ac1cf3a7 Binary files /dev/null and b/locale/nb/LC_MESSAGES/djangojs.mo differ diff --git a/locale/nb_NO/LC_MESSAGES/djangojs.mo b/locale/nb_NO/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..53579ab769c Binary files /dev/null and b/locale/nb_NO/LC_MESSAGES/djangojs.mo differ diff --git a/locale/nl/LC_MESSAGES/django.mo b/locale/nl/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..c7b06517ac4 Binary files /dev/null and b/locale/nl/LC_MESSAGES/django.mo differ diff --git a/locale/nl/LC_MESSAGES/djangojs.mo b/locale/nl/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..214386993df Binary files /dev/null and b/locale/nl/LC_MESSAGES/djangojs.mo differ diff --git a/locale/nl_NL/LC_MESSAGES/djangojs.mo b/locale/nl_NL/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..05aa1355dab Binary files /dev/null and b/locale/nl_NL/LC_MESSAGES/djangojs.mo differ diff --git a/locale/pl/LC_MESSAGES/django.mo b/locale/pl/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..4c6587b9c44 Binary files /dev/null and b/locale/pl/LC_MESSAGES/django.mo differ diff --git a/locale/pl/LC_MESSAGES/djangojs.mo b/locale/pl/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..61c389fb32f Binary files /dev/null and b/locale/pl/LC_MESSAGES/djangojs.mo differ diff --git a/locale/pt_BR/LC_MESSAGES/django.mo b/locale/pt_BR/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..8c6ee2d099f Binary files /dev/null and b/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/locale/pt_BR/LC_MESSAGES/djangojs.mo b/locale/pt_BR/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..2fdc9413286 Binary files /dev/null and b/locale/pt_BR/LC_MESSAGES/djangojs.mo differ diff --git a/locale/pt_PT/LC_MESSAGES/djangojs.mo b/locale/pt_PT/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..b1823f642d9 Binary files /dev/null and b/locale/pt_PT/LC_MESSAGES/djangojs.mo differ diff --git a/locale/ru/LC_MESSAGES/django.mo b/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..90ea677feaa Binary files /dev/null and b/locale/ru/LC_MESSAGES/django.mo differ diff --git a/locale/ru/LC_MESSAGES/djangojs.mo b/locale/ru/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..9b8e63ea655 Binary files /dev/null and b/locale/ru/LC_MESSAGES/djangojs.mo differ diff --git a/locale/sk/LC_MESSAGES/django.mo b/locale/sk/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..e2130fdb5e8 Binary files /dev/null and b/locale/sk/LC_MESSAGES/django.mo differ diff --git a/locale/sk_SK/LC_MESSAGES/djangojs.mo b/locale/sk_SK/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..620f5dcdf78 Binary files /dev/null and b/locale/sk_SK/LC_MESSAGES/djangojs.mo differ diff --git a/locale/sl/LC_MESSAGES/django.mo b/locale/sl/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..5e29a5f8cb7 Binary files /dev/null and b/locale/sl/LC_MESSAGES/django.mo differ diff --git a/locale/sl_SI/LC_MESSAGES/djangojs.mo b/locale/sl_SI/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..6fb7015c70f Binary files /dev/null and b/locale/sl_SI/LC_MESSAGES/djangojs.mo differ diff --git a/locale/sv/LC_MESSAGES/django.mo b/locale/sv/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..d905b7a14a7 Binary files /dev/null and b/locale/sv/LC_MESSAGES/django.mo differ diff --git a/locale/sv/LC_MESSAGES/djangojs.mo b/locale/sv/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..0d38fedf2a3 Binary files /dev/null and b/locale/sv/LC_MESSAGES/djangojs.mo differ diff --git a/locale/th/LC_MESSAGES/django.mo b/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..59d1b9c269c Binary files /dev/null and b/locale/th/LC_MESSAGES/django.mo differ diff --git a/locale/th_TH/LC_MESSAGES/djangojs.mo b/locale/th_TH/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..9dbc10f590a Binary files /dev/null and b/locale/th_TH/LC_MESSAGES/djangojs.mo differ diff --git a/locale/tr/LC_MESSAGES/django.mo b/locale/tr/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..0c79ced9580 Binary files /dev/null and b/locale/tr/LC_MESSAGES/django.mo differ diff --git a/locale/tr/LC_MESSAGES/djangojs.mo b/locale/tr/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..fea47624b29 Binary files /dev/null and b/locale/tr/LC_MESSAGES/djangojs.mo differ diff --git a/locale/uk/LC_MESSAGES/django.mo b/locale/uk/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..841ee959d97 Binary files /dev/null and b/locale/uk/LC_MESSAGES/django.mo differ diff --git a/locale/uk/LC_MESSAGES/djangojs.mo b/locale/uk/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..f98aa2c8655 Binary files /dev/null and b/locale/uk/LC_MESSAGES/djangojs.mo differ diff --git a/locale/vi/LC_MESSAGES/django.mo b/locale/vi/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..d27119a24df Binary files /dev/null and b/locale/vi/LC_MESSAGES/django.mo differ diff --git a/locale/vi/LC_MESSAGES/djangojs.mo b/locale/vi/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..53c260b2294 Binary files /dev/null and b/locale/vi/LC_MESSAGES/djangojs.mo differ diff --git a/locale/zh_CN/LC_MESSAGES/django.mo b/locale/zh_CN/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..4712bd15484 Binary files /dev/null and b/locale/zh_CN/LC_MESSAGES/django.mo differ diff --git a/locale/zh_CN/LC_MESSAGES/djangojs.mo b/locale/zh_CN/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..a8ce1a0ad69 Binary files /dev/null and b/locale/zh_CN/LC_MESSAGES/djangojs.mo differ diff --git a/locale/zh_TW/LC_MESSAGES/django.mo b/locale/zh_TW/LC_MESSAGES/django.mo new file mode 100644 index 00000000000..53dc8619dea Binary files /dev/null and b/locale/zh_TW/LC_MESSAGES/django.mo differ diff --git a/locale/zh_TW/LC_MESSAGES/djangojs.mo b/locale/zh_TW/LC_MESSAGES/djangojs.mo new file mode 100644 index 00000000000..5ba8dc0c11c Binary files /dev/null and b/locale/zh_TW/LC_MESSAGES/djangojs.mo differ diff --git a/media/assets/css/bootstrap.min.css b/media/assets/css/bootstrap.min.css new file mode 100644 index 00000000000..13176351c2c --- /dev/null +++ b/media/assets/css/bootstrap.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v4.0.0-alpha.2 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active{outline:0}a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*,::after,::before{text-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}html{-webkit-box-sizing:border-box;box-sizing:border-box}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}@-ms-viewport{width:device-width}@viewport{width:device-width}html{font-size:16px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1rem;line-height:1.5;color:#373a3c;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #818a91}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}a{color:#0275d8;text-decoration:none}a:focus,a:hover{color:#014c8c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}pre{margin-top:0;margin-bottom:1rem}figure{margin:0 0 1rem}img{vertical-align:middle}[role=button]{cursor:pointer}[role=button],a,area,button,input,label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{background-color:transparent}caption{padding-top:.75rem;padding-bottom:.75rem;color:#818a91;text-align:left;caption-side:bottom}th{text-align:left}label{display:inline-block;margin-bottom:.5rem}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,select,textarea{margin:0;line-height:inherit;border-radius:0}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit}input[type=search]{-webkit-box-sizing:inherit;box-sizing:inherit;-webkit-appearance:none}output{display:inline-block}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1{font-size:2.5rem}h2{font-size:2rem}h3{font-size:1.75rem}h4{font-size:1.5rem}h5{font-size:1.25rem}h6{font-size:1rem}.h1{font-size:2.5rem}.h2{font-size:2rem}.h3{font-size:1.75rem}.h4{font-size:1.5rem}.h5{font-size:1.25rem}.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300}.display-2{font-size:5.5rem;font-weight:300}.display-3{font-size:4.5rem;font-weight:300}.display-4{font-size:3.5rem;font-weight:300}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:5px}.dl-horizontal{margin-right:-1.875rem;margin-left:-1.875rem}.dl-horizontal::after{display:table;clear:both;content:""}.initialism{font-size:90%;text-transform:uppercase}.blockquote{padding:.5rem 1rem;margin-bottom:1rem;font-size:1.25rem;border-left:.25rem solid #eceeef}.blockquote-footer{display:block;font-size:80%;line-height:1.5;color:#818a91}.blockquote-footer::before{content:"\2014 \00A0"}.blockquote-reverse{padding-right:1rem;padding-left:0;text-align:right;border-right:.25rem solid #eceeef;border-left:0}.blockquote-reverse .blockquote-footer::before{content:""}.blockquote-reverse .blockquote-footer::after{content:"\00A0 \2014"}.carousel-inner>.carousel-item>a>img,.carousel-inner>.carousel-item>img,.img-fluid{display:block;max-width:100%;height:auto}.img-rounded{border-radius:.3rem}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:.25rem;line-height:1.5;background-color:#fff;border:1px solid #ddd;border-radius:.25rem;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#818a91}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:.2rem .4rem;font-size:90%;color:#bd4147;background-color:#f7f7f9;border-radius:.25rem}kbd{padding:.2rem .4rem;font-size:90%;color:#fff;background-color:#333;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;margin-top:0;margin-bottom:1rem;font-size:90%;line-height:1.5;color:#373a3c}pre code{padding:0;font-size:inherit;color:inherit;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:.9375rem;padding-left:.9375rem;margin-right:auto;margin-left:auto}.container::after{display:table;clear:both;content:""}@media (min-width:544px){.container{max-width:576px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:940px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{padding-right:.9375rem;padding-left:.9375rem;margin-right:auto;margin-left:auto}.container-fluid::after{display:table;clear:both;content:""}.row{margin-right:-.9375rem;margin-left:-.9375rem}.row::after{display:table;clear:both;content:""}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:.9375rem;padding-left:.9375rem}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-1{width:8.333333%}.col-xs-2{width:16.666667%}.col-xs-3{width:25%}.col-xs-4{width:33.333333%}.col-xs-5{width:41.666667%}.col-xs-6{width:50%}.col-xs-7{width:58.333333%}.col-xs-8{width:66.666667%}.col-xs-9{width:75%}.col-xs-10{width:83.333333%}.col-xs-11{width:91.666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.333333%}.col-xs-pull-2{right:16.666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.333333%}.col-xs-pull-5{right:41.666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.333333%}.col-xs-pull-8{right:66.666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.333333%}.col-xs-pull-11{right:91.666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.333333%}.col-xs-push-2{left:16.666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.333333%}.col-xs-push-5{left:41.666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.333333%}.col-xs-push-8{left:66.666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.333333%}.col-xs-push-11{left:91.666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.333333%}.col-xs-offset-2{margin-left:16.666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.333333%}.col-xs-offset-5{margin-left:41.666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.333333%}.col-xs-offset-8{margin-left:66.666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.333333%}.col-xs-offset-11{margin-left:91.666667%}.col-xs-offset-12{margin-left:100%}@media (min-width:544px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.333333%}.col-sm-2{width:16.666667%}.col-sm-3{width:25%}.col-sm-4{width:33.333333%}.col-sm-5{width:41.666667%}.col-sm-6{width:50%}.col-sm-7{width:58.333333%}.col-sm-8{width:66.666667%}.col-sm-9{width:75%}.col-sm-10{width:83.333333%}.col-sm-11{width:91.666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.333333%}.col-sm-pull-2{right:16.666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.333333%}.col-sm-pull-5{right:41.666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.333333%}.col-sm-pull-8{right:66.666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.333333%}.col-sm-pull-11{right:91.666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.333333%}.col-sm-push-2{left:16.666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.333333%}.col-sm-push-5{left:41.666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.333333%}.col-sm-push-8{left:66.666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.333333%}.col-sm-push-11{left:91.666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.333333%}.col-sm-offset-2{margin-left:16.666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.333333%}.col-sm-offset-5{margin-left:41.666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.333333%}.col-sm-offset-8{margin-left:66.666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.333333%}.col-sm-offset-11{margin-left:91.666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.333333%}.col-md-2{width:16.666667%}.col-md-3{width:25%}.col-md-4{width:33.333333%}.col-md-5{width:41.666667%}.col-md-6{width:50%}.col-md-7{width:58.333333%}.col-md-8{width:66.666667%}.col-md-9{width:75%}.col-md-10{width:83.333333%}.col-md-11{width:91.666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.333333%}.col-md-pull-2{right:16.666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.333333%}.col-md-pull-5{right:41.666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.333333%}.col-md-pull-8{right:66.666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.333333%}.col-md-pull-11{right:91.666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.333333%}.col-md-push-2{left:16.666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.333333%}.col-md-push-5{left:41.666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.333333%}.col-md-push-8{left:66.666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.333333%}.col-md-push-11{left:91.666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.333333%}.col-md-offset-2{margin-left:16.666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.333333%}.col-md-offset-5{margin-left:41.666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.333333%}.col-md-offset-8{margin-left:66.666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.333333%}.col-md-offset-11{margin-left:91.666667%}.col-md-offset-12{margin-left:100%}}@media (min-width:992px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.333333%}.col-lg-2{width:16.666667%}.col-lg-3{width:25%}.col-lg-4{width:33.333333%}.col-lg-5{width:41.666667%}.col-lg-6{width:50%}.col-lg-7{width:58.333333%}.col-lg-8{width:66.666667%}.col-lg-9{width:75%}.col-lg-10{width:83.333333%}.col-lg-11{width:91.666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.333333%}.col-lg-pull-2{right:16.666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.333333%}.col-lg-pull-5{right:41.666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.333333%}.col-lg-pull-8{right:66.666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.333333%}.col-lg-pull-11{right:91.666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.333333%}.col-lg-push-2{left:16.666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.333333%}.col-lg-push-5{left:41.666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.333333%}.col-lg-push-8{left:66.666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.333333%}.col-lg-push-11{left:91.666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.333333%}.col-lg-offset-2{margin-left:16.666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.333333%}.col-lg-offset-5{margin-left:41.666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.333333%}.col-lg-offset-8{margin-left:66.666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.333333%}.col-lg-offset-11{margin-left:91.666667%}.col-lg-offset-12{margin-left:100%}}@media (min-width:1200px){.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{float:left}.col-xl-1{width:8.333333%}.col-xl-2{width:16.666667%}.col-xl-3{width:25%}.col-xl-4{width:33.333333%}.col-xl-5{width:41.666667%}.col-xl-6{width:50%}.col-xl-7{width:58.333333%}.col-xl-8{width:66.666667%}.col-xl-9{width:75%}.col-xl-10{width:83.333333%}.col-xl-11{width:91.666667%}.col-xl-12{width:100%}.col-xl-pull-0{right:auto}.col-xl-pull-1{right:8.333333%}.col-xl-pull-2{right:16.666667%}.col-xl-pull-3{right:25%}.col-xl-pull-4{right:33.333333%}.col-xl-pull-5{right:41.666667%}.col-xl-pull-6{right:50%}.col-xl-pull-7{right:58.333333%}.col-xl-pull-8{right:66.666667%}.col-xl-pull-9{right:75%}.col-xl-pull-10{right:83.333333%}.col-xl-pull-11{right:91.666667%}.col-xl-pull-12{right:100%}.col-xl-push-0{left:auto}.col-xl-push-1{left:8.333333%}.col-xl-push-2{left:16.666667%}.col-xl-push-3{left:25%}.col-xl-push-4{left:33.333333%}.col-xl-push-5{left:41.666667%}.col-xl-push-6{left:50%}.col-xl-push-7{left:58.333333%}.col-xl-push-8{left:66.666667%}.col-xl-push-9{left:75%}.col-xl-push-10{left:83.333333%}.col-xl-push-11{left:91.666667%}.col-xl-push-12{left:100%}.col-xl-offset-0{margin-left:0}.col-xl-offset-1{margin-left:8.333333%}.col-xl-offset-2{margin-left:16.666667%}.col-xl-offset-3{margin-left:25%}.col-xl-offset-4{margin-left:33.333333%}.col-xl-offset-5{margin-left:41.666667%}.col-xl-offset-6{margin-left:50%}.col-xl-offset-7{margin-left:58.333333%}.col-xl-offset-8{margin-left:66.666667%}.col-xl-offset-9{margin-left:75%}.col-xl-offset-10{margin-left:83.333333%}.col-xl-offset-11{margin-left:91.666667%}.col-xl-offset-12{margin-left:100%}}.table{width:100%;max-width:100%;margin-bottom:1rem}.table td,.table th{padding:.75rem;line-height:1.5;vertical-align:top;border-top:1px solid #eceeef}.table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.table tbody+tbody{border-top:2px solid #eceeef}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #eceeef}.table-bordered td,.table-bordered th{border:1px solid #eceeef}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover tbody tr:hover{background-color:#f5f5f5}.table-active,.table-active>td,.table-active>th{background-color:#f5f5f5}.table-hover .table-active:hover{background-color:#e8e8e8}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#e8e8e8}.table-success,.table-success>td,.table-success>th{background-color:#dff0d8}.table-hover .table-success:hover{background-color:#d0e9c6}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#d0e9c6}.table-info,.table-info>td,.table-info>th{background-color:#d9edf7}.table-hover .table-info:hover{background-color:#c4e3f3}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#c4e3f3}.table-warning,.table-warning>td,.table-warning>th{background-color:#fcf8e3}.table-hover .table-warning:hover{background-color:#faf2cc}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#faf2cc}.table-danger,.table-danger>td,.table-danger>th{background-color:#f2dede}.table-hover .table-danger:hover{background-color:#ebcccc}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#ebcccc}.table-responsive{display:block;width:100%;min-height:.01%;overflow-x:auto}.thead-inverse th{color:#fff;background-color:#373a3c}.thead-default th{color:#55595c;background-color:#eceeef}.table-inverse{color:#eceeef;background-color:#373a3c}.table-inverse.table-bordered{border:0}.table-inverse td,.table-inverse th,.table-inverse thead th{border-color:#55595c}.table-reflow thead{float:left}.table-reflow tbody{display:block;white-space:nowrap}.table-reflow td,.table-reflow th{border-top:1px solid #eceeef;border-left:1px solid #eceeef}.table-reflow td:last-child,.table-reflow th:last-child{border-right:1px solid #eceeef}.table-reflow tbody:last-child tr:last-child td,.table-reflow tbody:last-child tr:last-child th,.table-reflow tfoot:last-child tr:last-child td,.table-reflow tfoot:last-child tr:last-child th,.table-reflow thead:last-child tr:last-child td,.table-reflow thead:last-child tr:last-child th{border-bottom:1px solid #eceeef}.table-reflow tr{float:left}.table-reflow tr td,.table-reflow tr th{display:block!important;border:1px solid #eceeef}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#55595c;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:.25rem}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{border-color:#66afe9;outline:0}.form-control::-webkit-input-placeholder{color:#999;opacity:1}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999;opacity:1}.form-control::placeholder{color:#999;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#eceeef;opacity:1}.form-control:disabled{cursor:not-allowed}.form-control-file,.form-control-range{display:block}.form-control-label{padding:.375rem .75rem;margin-bottom:0}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:2.25rem}.input-group-sm input[type=date].form-control,.input-group-sm input[type=time].form-control,.input-group-sm input[type=datetime-local].form-control,.input-group-sm input[type=month].form-control,input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:1.8625rem}.input-group-lg input[type=date].form-control,.input-group-lg input[type=time].form-control,.input-group-lg input[type=datetime-local].form-control,.input-group-lg input[type=month].form-control,input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:3.166667rem}}.form-control-static{min-height:2.25rem;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0}.form-control-static.form-control-lg,.form-control-static.form-control-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{padding:.275rem .75rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{padding:.75rem 1.25rem;font-size:1.25rem;line-height:1.333333;border-radius:.3rem}.form-group{margin-bottom:1rem}.checkbox,.radio{position:relative;display:block;margin-bottom:.75rem}.checkbox label,.radio label{padding-left:1.25rem;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox label input:only-child,.radio label input:only-child{position:static}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:.25rem;margin-left:-1.25rem}.checkbox+.checkbox,.radio+.radio{margin-top:-.25rem}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:1.25rem;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:.75rem}input[type=checkbox].disabled,input[type=checkbox]:disabled,input[type=radio].disabled,input[type=radio]:disabled{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label{cursor:not-allowed}.form-control-danger,.form-control-success,.form-control-warning{padding-right:2.25rem;background-repeat:no-repeat;background-position:center right .5625rem;-webkit-background-size:1.4625rem 1.4625rem;background-size:1.4625rem 1.4625rem}.has-success .checkbox,.has-success .checkbox-inline,.has-success .form-control-label,.has-success .radio,.has-success .radio-inline,.has-success .text-help,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#5cb85c}.has-success .form-control{border-color:#5cb85c}.has-success .input-group-addon{color:#5cb85c;background-color:#eaf6ea;border-color:#5cb85c}.has-success .form-control-feedback{color:#5cb85c}.has-success .form-control-success{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjNWNiODVjIiBkPSJNMjMzLjggNjEwYy0xMy4zIDAtMjYtNi0zNC0xNi44TDkwLjUgNDQ4LjhDNzYuMyA0MzAgODAgNDAzLjMgOTguOCAzODljMTguOC0xNC4yIDQ1LjUtMTAuNCA1OS44IDguNGw3MiA5NUw0NTEuMyAyNDJjMTIuNS0yMCAzOC44LTI2LjIgNTguOC0xMy43IDIwIDEyLjQgMjYgMzguNyAxMy43IDU4LjhMMjcwIDU5MGMtNy40IDEyLTIwLjIgMTkuNC0zNC4zIDIwaC0yeiIvPjwvc3ZnPg==)}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .form-control-label,.has-warning .radio,.has-warning .radio-inline,.has-warning .text-help,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#f0ad4e}.has-warning .form-control{border-color:#f0ad4e}.has-warning .input-group-addon{color:#f0ad4e;background-color:#fff;border-color:#f0ad4e}.has-warning .form-control-feedback{color:#f0ad4e}.has-warning .form-control-warning{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZjBhZDRlIiBkPSJNNjAzIDY0MC4ybC0yNzguNS01MDljLTMuOC02LjYtMTAuOC0xMC42LTE4LjUtMTAuNnMtMTQuNyA0LTE4LjUgMTAuNkw5IDY0MC4yYy0zLjcgNi41LTMuNiAxNC40LjIgMjAuOCAzLjggNi41IDEwLjggMTAuNCAxOC4zIDEwLjRoNTU3YzcuNiAwIDE0LjYtNCAxOC40LTEwLjQgMy41LTYuNCAzLjYtMTQuNCAwLTIwLjh6bS0yNjYuNC0zMGgtNjEuMlY1NDloNjEuMnY2MS4yem0wLTEwN2gtNjEuMlYzMDRoNjEuMnYxOTl6Ii8+PC9zdmc+)}.has-danger .checkbox,.has-danger .checkbox-inline,.has-danger .form-control-label,.has-danger .radio,.has-danger .radio-inline,.has-danger .text-help,.has-danger.checkbox label,.has-danger.checkbox-inline label,.has-danger.radio label,.has-danger.radio-inline label{color:#d9534f}.has-danger .form-control{border-color:#d9534f}.has-danger .input-group-addon{color:#d9534f;background-color:#fdf7f7;border-color:#d9534f}.has-danger .form-control-feedback{color:#d9534f}.has-danger .form-control-danger{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MTIgNzkyIj48cGF0aCBmaWxsPSIjZDk1MzRmIiBkPSJNNDQ3IDU0NC40Yy0xNC40IDE0LjQtMzcuNiAxNC40LTUyIDBsLTg5LTkyLjctODkgOTIuN2MtMTQuNSAxNC40LTM3LjcgMTQuNC01MiAwLTE0LjQtMTQuNC0xNC40LTM3LjYgMC01Mmw5Mi40LTk2LjMtOTIuNC05Ni4zYy0xNC40LTE0LjQtMTQuNC0zNy42IDAtNTJzMzcuNi0xNC4zIDUyIDBsODkgOTIuOCA4OS4yLTkyLjdjMTQuNC0xNC40IDM3LjYtMTQuNCA1MiAwIDE0LjMgMTQuNCAxNC4zIDM3LjYgMCA1MkwzNTQuNiAzOTZsOTIuNCA5Ni40YzE0LjQgMTQuNCAxNC40IDM3LjYgMCA1MnoiLz48L3N2Zz4=)}@media (min-width:544px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .form-control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.btn{display:inline-block;padding:.375rem 1rem;font-size:1rem;font-weight:400;line-height:1.5;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:.25rem}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,.btn:hover{text-decoration:none}.btn.focus{text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0}.btn.disabled,.btn:disabled{cursor:not-allowed;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-primary:hover{color:#fff;background-color:#025aa5;border-color:#01549b}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#025aa5;border-color:#01549b}.btn-primary.active,.btn-primary:active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#025aa5;background-image:none;border-color:#01549b}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.btn-primary.dropdown-toggle.focus,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle:hover{color:#fff;background-color:#014682;border-color:#01315a}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary:disabled.focus,.btn-primary:disabled:focus{background-color:#0275d8;border-color:#0275d8}.btn-primary.disabled:hover,.btn-primary:disabled:hover{background-color:#0275d8;border-color:#0275d8}.btn-secondary{color:#373a3c;background-color:#fff;border-color:#ccc}.btn-secondary:hover{color:#373a3c;background-color:#e6e6e6;border-color:#adadad}.btn-secondary.focus,.btn-secondary:focus{color:#373a3c;background-color:#e6e6e6;border-color:#adadad}.btn-secondary.active,.btn-secondary:active,.open>.btn-secondary.dropdown-toggle{color:#373a3c;background-color:#e6e6e6;background-image:none;border-color:#adadad}.btn-secondary.active.focus,.btn-secondary.active:focus,.btn-secondary.active:hover,.btn-secondary:active.focus,.btn-secondary:active:focus,.btn-secondary:active:hover,.open>.btn-secondary.dropdown-toggle.focus,.open>.btn-secondary.dropdown-toggle:focus,.open>.btn-secondary.dropdown-toggle:hover{color:#373a3c;background-color:#d4d4d4;border-color:#8c8c8c}.btn-secondary.disabled.focus,.btn-secondary.disabled:focus,.btn-secondary:disabled.focus,.btn-secondary:disabled:focus{background-color:#fff;border-color:#ccc}.btn-secondary.disabled:hover,.btn-secondary:disabled:hover{background-color:#fff;border-color:#ccc}.btn-info{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#2aabd2}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#2aabd2}.btn-info.active,.btn-info:active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;background-image:none;border-color:#2aabd2}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.btn-info.dropdown-toggle.focus,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle:hover{color:#fff;background-color:#269abc;border-color:#1f7e9a}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info:disabled.focus,.btn-info:disabled:focus{background-color:#5bc0de;border-color:#5bc0de}.btn-info.disabled:hover,.btn-info:disabled:hover{background-color:#5bc0de;border-color:#5bc0de}.btn-success{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#419641}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#419641}.btn-success.active,.btn-success:active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;background-image:none;border-color:#419641}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.btn-success.dropdown-toggle.focus,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle:hover{color:#fff;background-color:#398439;border-color:#2d672d}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success:disabled.focus,.btn-success:disabled:focus{background-color:#5cb85c;border-color:#5cb85c}.btn-success.disabled:hover,.btn-success:disabled:hover{background-color:#5cb85c;border-color:#5cb85c}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#eb9316}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#eb9316}.btn-warning.active,.btn-warning:active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;background-image:none;border-color:#eb9316}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.btn-warning.dropdown-toggle.focus,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle:hover{color:#fff;background-color:#d58512;border-color:#b06d0f}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning:disabled.focus,.btn-warning:disabled:focus{background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning.disabled:hover,.btn-warning:disabled:hover{background-color:#f0ad4e;border-color:#f0ad4e}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#c12e2a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#c12e2a}.btn-danger.active,.btn-danger:active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;background-image:none;border-color:#c12e2a}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.btn-danger.dropdown-toggle.focus,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle:hover{color:#fff;background-color:#ac2925;border-color:#8b211e}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger:disabled.focus,.btn-danger:disabled:focus{background-color:#d9534f;border-color:#d9534f}.btn-danger.disabled:hover,.btn-danger:disabled:hover{background-color:#d9534f;border-color:#d9534f}.btn-primary-outline{color:#0275d8;background-color:transparent;background-image:none;border-color:#0275d8}.btn-primary-outline.active,.btn-primary-outline.focus,.btn-primary-outline:active,.btn-primary-outline:focus,.open>.btn-primary-outline.dropdown-toggle{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-primary-outline:hover{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-primary-outline.disabled.focus,.btn-primary-outline.disabled:focus,.btn-primary-outline:disabled.focus,.btn-primary-outline:disabled:focus{border-color:#43a7fd}.btn-primary-outline.disabled:hover,.btn-primary-outline:disabled:hover{border-color:#43a7fd}.btn-secondary-outline{color:#ccc;background-color:transparent;background-image:none;border-color:#ccc}.btn-secondary-outline.active,.btn-secondary-outline.focus,.btn-secondary-outline:active,.btn-secondary-outline:focus,.open>.btn-secondary-outline.dropdown-toggle{color:#fff;background-color:#ccc;border-color:#ccc}.btn-secondary-outline:hover{color:#fff;background-color:#ccc;border-color:#ccc}.btn-secondary-outline.disabled.focus,.btn-secondary-outline.disabled:focus,.btn-secondary-outline:disabled.focus,.btn-secondary-outline:disabled:focus{border-color:#fff}.btn-secondary-outline.disabled:hover,.btn-secondary-outline:disabled:hover{border-color:#fff}.btn-info-outline{color:#5bc0de;background-color:transparent;background-image:none;border-color:#5bc0de}.btn-info-outline.active,.btn-info-outline.focus,.btn-info-outline:active,.btn-info-outline:focus,.open>.btn-info-outline.dropdown-toggle{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-info-outline:hover{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-info-outline.disabled.focus,.btn-info-outline.disabled:focus,.btn-info-outline:disabled.focus,.btn-info-outline:disabled:focus{border-color:#b0e1ef}.btn-info-outline.disabled:hover,.btn-info-outline:disabled:hover{border-color:#b0e1ef}.btn-success-outline{color:#5cb85c;background-color:transparent;background-image:none;border-color:#5cb85c}.btn-success-outline.active,.btn-success-outline.focus,.btn-success-outline:active,.btn-success-outline:focus,.open>.btn-success-outline.dropdown-toggle{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-success-outline:hover{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-success-outline.disabled.focus,.btn-success-outline.disabled:focus,.btn-success-outline:disabled.focus,.btn-success-outline:disabled:focus{border-color:#a3d7a3}.btn-success-outline.disabled:hover,.btn-success-outline:disabled:hover{border-color:#a3d7a3}.btn-warning-outline{color:#f0ad4e;background-color:transparent;background-image:none;border-color:#f0ad4e}.btn-warning-outline.active,.btn-warning-outline.focus,.btn-warning-outline:active,.btn-warning-outline:focus,.open>.btn-warning-outline.dropdown-toggle{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning-outline:hover{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning-outline.disabled.focus,.btn-warning-outline.disabled:focus,.btn-warning-outline:disabled.focus,.btn-warning-outline:disabled:focus{border-color:#f8d9ac}.btn-warning-outline.disabled:hover,.btn-warning-outline:disabled:hover{border-color:#f8d9ac}.btn-danger-outline{color:#d9534f;background-color:transparent;background-image:none;border-color:#d9534f}.btn-danger-outline.active,.btn-danger-outline.focus,.btn-danger-outline:active,.btn-danger-outline:focus,.open>.btn-danger-outline.dropdown-toggle{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-danger-outline:hover{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-danger-outline.disabled.focus,.btn-danger-outline.disabled:focus,.btn-danger-outline:disabled.focus,.btn-danger-outline:disabled:focus{border-color:#eba5a3}.btn-danger-outline.disabled:hover,.btn-danger-outline:disabled:hover{border-color:#eba5a3}.btn-link{font-weight:400;color:#0275d8;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link:disabled{background-color:transparent}.btn-link,.btn-link:active,.btn-link:focus{border-color:transparent}.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#014c8c;text-decoration:underline;background-color:transparent}.btn-link:disabled:focus,.btn-link:disabled:hover{color:#818a91;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:.75rem 1.25rem;font-size:1.25rem;line-height:1.333333;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .75rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height;-o-transition-property:height;transition-property:height}.dropdown,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-right:.25rem;margin-left:.25rem;vertical-align:middle;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent}.dropdown-toggle:focus{outline:0}.dropup .dropdown-toggle::after{border-top:0;border-bottom:.3em solid}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:1rem;color:#373a3c;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-divider{height:1px;margin:.5rem 0;overflow:hidden;background-color:#e5e5e5}.dropdown-item{display:block;width:100%;padding:3px 20px;clear:both;font-weight:400;line-height:1.5;color:#373a3c;text-align:inherit;white-space:nowrap;background:0 0;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#2b2d2f;text-decoration:none;background-color:#f5f5f5}.dropdown-item.active,.dropdown-item.active:focus,.dropdown-item.active:hover{color:#fff;text-decoration:none;background-color:#0275d8;outline:0}.dropdown-item.disabled,.dropdown-item.disabled:focus,.dropdown-item.disabled:hover{color:#818a91}.dropdown-item.disabled:focus,.dropdown-item.disabled:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:"progid:DXImageTransform.Microsoft.gradient(enabled = false)"}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:.875rem;line-height:1.5;color:#818a91;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:.3em solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:2}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar::after{display:table;clear:both;content:""}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn .caret{margin-left:0}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:.3em .3em 0;border-bottom-width:0}.dropup .btn-group-lg>.btn .caret,.dropup .btn-lg .caret{border-width:0 .3em .3em}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group::after{display:table;clear:both;content:""}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:.25rem;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:.25rem}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:active,.input-group .form-control:focus,.input-group .form-control:hover{z-index:3}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1;color:#55595c;text-align:center;background-color:#eceeef;border:1px solid #ccc;border-radius:.25rem}.input-group-addon.form-control-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:.275rem .75rem;font-size:.875rem;border-radius:.2rem}.input-group-addon.form-control-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:.75rem 1.25rem;font-size:1.25rem;border-radius:.3rem}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:3}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.input-group-btn:last-child>.btn-group:active,.input-group-btn:last-child>.btn-group:focus,.input-group-btn:last-child>.btn-group:hover,.input-group-btn:last-child>.btn:active,.input-group-btn:last-child>.btn:focus,.input-group-btn:last-child>.btn:hover{z-index:3}.c-input{position:relative;display:inline;padding-left:1.5rem;color:#555;cursor:pointer}.c-input>input{position:absolute;z-index:-1;opacity:0}.c-input>input:checked~.c-indicator{color:#fff;background-color:#0074d9}.c-input>input:focus~.c-indicator{-webkit-box-shadow:0 0 0 .075rem #fff,0 0 0 .2rem #0074d9;box-shadow:0 0 0 .075rem #fff,0 0 0 .2rem #0074d9}.c-input>input:active~.c-indicator{color:#fff;background-color:#84c6ff}.c-input+.c-input{margin-left:1rem}.c-indicator{position:absolute;top:0;left:0;display:block;width:1rem;height:1rem;font-size:65%;line-height:1rem;color:#eee;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#eee;background-repeat:no-repeat;background-position:center center;-webkit-background-size:50% 50%;background-size:50% 50%}.c-checkbox .c-indicator{border-radius:.25rem}.c-checkbox input:checked~.c-indicator{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgOCA4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA4IDgiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTYuNCwxTDUuNywxLjdMMi45LDQuNUwyLjEsMy43TDEuNCwzTDAsNC40bDAuNywwLjdsMS41LDEuNWwwLjcsMC43bDAuNy0wLjdsMy41LTMuNWwwLjctMC43TDYuNCwxTDYuNCwxeiINCgkvPg0KPC9zdmc+DQo=)}.c-checkbox input:indeterminate~.c-indicator{background-color:#0074d9;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iOHB4IiBoZWlnaHQ9IjhweCIgdmlld0JveD0iMCAwIDggOCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgOCA4IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Ik0wLDN2Mmg4VjNIMHoiLz4NCjwvc3ZnPg0K)}.c-radio .c-indicator{border-radius:50%}.c-radio input:checked~.c-indicator{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgOCA4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA4IDgiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTQsMUMyLjMsMSwxLDIuMywxLDRzMS4zLDMsMywzczMtMS4zLDMtM1M1LjcsMSw0LDF6Ii8+DQo8L3N2Zz4NCg==)}.c-inputs-stacked .c-input{display:inline}.c-inputs-stacked .c-input::after{display:block;margin-bottom:.25rem;content:""}.c-inputs-stacked .c-input+.c-input{margin-left:0}.c-select{display:inline-block;max-width:100%;-webkit-appearance:none;padding:.375rem 1.75rem .375rem .75rem;padding-right:.75rem\9;color:#55595c;vertical-align:middle;background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAUCAMAAACzvE1FAAAADFBMVEUzMzMzMzMzMzMzMzMKAG/3AAAAA3RSTlMAf4C/aSLHAAAAPElEQVR42q3NMQ4AIAgEQTn//2cLdRKppSGzBYwzVXvznNWs8C58CiussPJj8h6NwgorrKRdTvuV9v16Afn0AYFOB7aYAAAAAElFTkSuQmCC) no-repeat right .75rem center;background-image:none\9;-webkit-background-size:8px 10px;background-size:8px 10px;border:1px solid #ccc;-moz-appearance:none}.c-select:focus{border-color:#51a7e8;outline:0}.c-select::-ms-expand{opacity:0}.c-select-sm{padding-top:3px;padding-bottom:3px;font-size:12px}.c-select-sm:not([multiple]){height:26px;min-height:26px}.file{position:relative;display:inline-block;height:2.5rem;cursor:pointer}.file input{min-width:14rem;margin:0;filter:alpha(opacity=0);opacity:0}.file-custom{position:absolute;top:0;right:0;left:0;z-index:5;height:2.5rem;padding:.5rem 1rem;line-height:1.5;color:#555;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;border:1px solid #ddd;border-radius:.25rem}.file-custom::after{content:"Choose file..."}.file-custom::before{position:absolute;top:-.075rem;right:-.075rem;bottom:-.075rem;z-index:6;display:block;height:2.5rem;padding:.5rem 1rem;line-height:1.5;color:#555;content:"Browse";background-color:#eee;border:1px solid #ddd;border-radius:0 .25rem .25rem 0}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:inline-block}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#818a91}.nav-link.disabled,.nav-link.disabled:focus,.nav-link.disabled:hover{color:#818a91;cursor:not-allowed;background-color:transparent}.nav-inline .nav-item{display:inline-block}.nav-inline .nav-item+.nav-item,.nav-inline .nav-link+.nav-link{margin-left:1rem}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs::after{display:table;clear:both;content:""}.nav-tabs .nav-item{float:left;margin-bottom:-1px}.nav-tabs .nav-item+.nav-item{margin-left:.2rem}.nav-tabs .nav-link{display:block;padding:.5em 1em;border:1px solid transparent;border-radius:.25rem .25rem 0 0}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#eceeef #eceeef #ddd}.nav-tabs .nav-link.disabled,.nav-tabs .nav-link.disabled:focus,.nav-tabs .nav-link.disabled:hover{color:#818a91;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.open .nav-link,.nav-tabs .nav-item.open .nav-link:focus,.nav-tabs .nav-item.open .nav-link:hover,.nav-tabs .nav-link.active,.nav-tabs .nav-link.active:focus,.nav-tabs .nav-link.active:hover{color:#55595c;background-color:#fff;border-color:#ddd #ddd transparent}.nav-pills::after{display:table;clear:both;content:""}.nav-pills .nav-item{float:left}.nav-pills .nav-item+.nav-item{margin-left:.2rem}.nav-pills .nav-link{display:block;padding:.5em 1em;border-radius:.25rem}.nav-pills .nav-item.open .nav-link,.nav-pills .nav-item.open .nav-link:focus,.nav-pills .nav-item.open .nav-link:hover,.nav-pills .nav-link.active,.nav-pills .nav-link.active:focus,.nav-pills .nav-link.active:hover{color:#fff;cursor:default;background-color:#0275d8}.nav-stacked .nav-item{display:block;float:none}.nav-stacked .nav-item+.nav-item{margin-top:.2rem;margin-left:0}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;padding:.5rem 1rem}.navbar::after{display:table;clear:both;content:""}@media (min-width:544px){.navbar{border-radius:.25rem}}.navbar-full{z-index:1000}@media (min-width:544px){.navbar-full{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:544px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0}.navbar-fixed-bottom{bottom:0}.navbar-sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1030;width:100%}@media (min-width:544px){.navbar-sticky-top{border-radius:0}}.navbar-brand{float:left;padding-top:.25rem;padding-bottom:.25rem;margin-right:1rem;font-size:1.25rem}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}.navbar-divider{float:left;width:1px;padding-top:.425rem;padding-bottom:.425rem;margin-right:1rem;margin-left:1rem;overflow:hidden}.navbar-divider::before{content:"\00a0"}.navbar-toggler{padding:.5rem .75rem;font-size:1.25rem;line-height:1;background:0 0;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}@media (min-width:544px){.navbar-toggleable-xs{display:block!important}}@media (min-width:768px){.navbar-toggleable-sm{display:block!important}}@media (min-width:992px){.navbar-toggleable-md{display:block!important}}.navbar-nav .nav-item{float:left}.navbar-nav .nav-link{display:block;padding-top:.425rem;padding-bottom:.425rem}.navbar-nav .nav-link+.nav-link{margin-left:1rem}.navbar-nav .nav-item+.nav-item{margin-left:1rem}.navbar-light .navbar-brand{color:rgba(0,0,0,.8)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.8)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.6)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .active>.nav-link:focus,.navbar-light .navbar-nav .active>.nav-link:hover,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.active:focus,.navbar-light .navbar-nav .nav-link.active:hover,.navbar-light .navbar-nav .nav-link.open,.navbar-light .navbar-nav .nav-link.open:focus,.navbar-light .navbar-nav .nav-link.open:hover,.navbar-light .navbar-nav .open>.nav-link,.navbar-light .navbar-nav .open>.nav-link:focus,.navbar-light .navbar-nav .open>.nav-link:hover{color:rgba(0,0,0,.8)}.navbar-light .navbar-divider{background-color:rgba(0,0,0,.075)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .active>.nav-link:focus,.navbar-dark .navbar-nav .active>.nav-link:hover,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.active:focus,.navbar-dark .navbar-nav .nav-link.active:hover,.navbar-dark .navbar-nav .nav-link.open,.navbar-dark .navbar-nav .nav-link.open:focus,.navbar-dark .navbar-nav .nav-link.open:hover,.navbar-dark .navbar-nav .open>.nav-link,.navbar-dark .navbar-nav .open>.nav-link:focus,.navbar-dark .navbar-nav .open>.nav-link:hover{color:#fff}.navbar-dark .navbar-divider{background-color:rgba(255,255,255,.075)}.card{position:relative;display:block;margin-bottom:.75rem;background-color:#fff;border:1px solid #e5e5e5;border-radius:.25rem}.card-block{padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card>.list-group:first-child .list-group-item:first-child{border-radius:.25rem .25rem 0 0}.card>.list-group:last-child .list-group-item:last-child{border-radius:0 0 .25rem .25rem}.card-header{padding:.75rem 1.25rem;background-color:#f5f5f5;border-bottom:1px solid #e5e5e5}.card-header:first-child{border-radius:.25rem .25rem 0 0}.card-footer{padding:.75rem 1.25rem;background-color:#f5f5f5;border-top:1px solid #e5e5e5}.card-footer:last-child{border-radius:0 0 .25rem .25rem}.card-primary{background-color:#0275d8;border-color:#0275d8}.card-success{background-color:#5cb85c;border-color:#5cb85c}.card-info{background-color:#5bc0de;border-color:#5bc0de}.card-warning{background-color:#f0ad4e;border-color:#f0ad4e}.card-danger{background-color:#d9534f;border-color:#d9534f}.card-primary-outline{background-color:transparent;border-color:#0275d8}.card-secondary-outline{background-color:transparent;border-color:#ccc}.card-info-outline{background-color:transparent;border-color:#5bc0de}.card-success-outline{background-color:transparent;border-color:#5cb85c}.card-warning-outline{background-color:transparent;border-color:#f0ad4e}.card-danger-outline{background-color:transparent;border-color:#d9534f}.card-inverse .card-footer,.card-inverse .card-header{border-bottom:1px solid rgba(255,255,255,.2)}.card-inverse .card-blockquote,.card-inverse .card-footer,.card-inverse .card-header,.card-inverse .card-title{color:#fff}.card-inverse .card-blockquote>footer,.card-inverse .card-link,.card-inverse .card-text{color:rgba(255,255,255,.65)}.card-inverse .card-link:focus,.card-inverse .card-link:hover{color:#fff}.card-blockquote{padding:0;margin-bottom:0;border-left:0}.card-img{border-radius:.25rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img-top{border-radius:.25rem .25rem 0 0}.card-img-bottom{border-radius:0 0 .25rem .25rem}@media (min-width:544px){.card-deck{display:table;table-layout:fixed;border-spacing:1.25rem 0}.card-deck .card{display:table-cell;width:1%;vertical-align:top}.card-deck-wrapper{margin-right:-1.25rem;margin-left:-1.25rem}}@media (min-width:544px){.card-group{display:table;width:100%;table-layout:fixed}.card-group .card{display:table-cell;vertical-align:top}.card-group .card+.card{margin-left:0;border-left:0}.card-group .card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group .card:first-child .card-img-top{border-top-right-radius:0}.card-group .card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group .card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group .card:last-child .card-img-top{border-top-left-radius:0}.card-group .card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group .card:not(:first-child):not(:last-child){border-radius:0}.card-group .card:not(:first-child):not(:last-child) .card-img-bottom,.card-group .card:not(:first-child):not(:last-child) .card-img-top{border-radius:0}}@media (min-width:544px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#eceeef;border-radius:.25rem}.breadcrumb::after{display:table;clear:both;content:""}.breadcrumb>li{float:left}.breadcrumb>li+li::before{padding-right:.5rem;padding-left:.5rem;color:#818a91;content:"/"}.breadcrumb>.active{color:#818a91}.pagination{display:inline-block;padding-left:0;margin-top:1rem;margin-bottom:1rem;border-radius:.25rem}.page-item{display:inline}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link,.page-item.active .page-link:focus,.page-item.active .page-link:hover{z-index:2;color:#fff;cursor:default;background-color:#0275d8;border-color:#0275d8}.page-item.disabled .page-link,.page-item.disabled .page-link:focus,.page-item.disabled .page-link:hover{color:#818a91;cursor:not-allowed;background-color:#fff;border-color:#ddd}.page-link{position:relative;float:left;padding:.5rem .75rem;margin-left:-1px;line-height:1.5;color:#0275d8;text-decoration:none;background-color:#fff;border:1px solid #ddd}.page-link:focus,.page-link:hover{color:#014c8c;background-color:#eceeef;border-color:#ddd}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.333333}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.275rem .75rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.pager{padding-left:0;margin-top:1rem;margin-bottom:1rem;text-align:center;list-style:none}.pager::after{display:table;clear:both;content:""}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eceeef}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover{color:#818a91;cursor:not-allowed;background-color:#fff}.pager .disabled>span{color:#818a91;cursor:not-allowed;background-color:#fff}.pager-next>a,.pager-next>span{float:right}.pager-prev>a,.pager-prev>span{float:left}.label{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.label-default{background-color:#818a91}.label-default[href]:focus,.label-default[href]:hover{background-color:#687077}.label-primary{background-color:#0275d8}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#025aa5}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#eceeef;border-radius:.3rem}@media (min-width:544px){.jumbotron{padding:4rem 2rem}}.jumbotron-hr{border-top-color:#d0d5d8}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{padding:15px;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:35px}.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d0e9c6}.alert-success hr{border-top-color:#c1e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.alert-info hr{border-top-color:#a6d5ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faf2cc}.alert-warning hr{border-top-color:#f7ecb5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebcccc}.alert-danger hr{border-top-color:#e4b9b9}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:block;width:100%;height:1rem;margin-bottom:1rem}.progress[value]{-webkit-appearance:none;color:#0074d9;border:0;-moz-appearance:none;appearance:none}.progress[value]::-webkit-progress-bar{background-color:#eee;border-radius:.25rem}.progress[value]::-webkit-progress-value::before{content:attr(value)}.progress[value]::-webkit-progress-value{background-color:#0074d9;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.progress[value="100"]::-webkit-progress-value{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}@media screen and (min-width:0\0){.progress{background-color:#eee;border-radius:.25rem}.progress-bar{display:inline-block;height:1rem;text-indent:-999rem;background-color:#0074d9;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.progress[width^="0"]{min-width:2rem;color:#818a91;background-color:transparent;background-image:none}.progress[width="100%"]{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}}.progress-striped[value]::-webkit-progress-value{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:1rem 1rem;background-size:1rem 1rem}.progress-striped[value]::-moz-progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}@media screen and (min-width:0\0){.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:1rem 1rem;background-size:1rem 1rem}}.progress-animated[value]::-webkit-progress-value{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-animated[value]::-moz-progress-bar{animation:progress-bar-stripes 2s linear infinite}@media screen and (min-width:0\0){.progress-animated .progress-bar-striped{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}}.progress-success[value]::-webkit-progress-value{background-color:#5cb85c}.progress-success[value]::-moz-progress-bar{background-color:#5cb85c}@media screen and (min-width:0\0){.progress-success .progress-bar{background-color:#5cb85c}}.progress-info[value]::-webkit-progress-value{background-color:#5bc0de}.progress-info[value]::-moz-progress-bar{background-color:#5bc0de}@media screen and (min-width:0\0){.progress-info .progress-bar{background-color:#5bc0de}}.progress-warning[value]::-webkit-progress-value{background-color:#f0ad4e}.progress-warning[value]::-moz-progress-bar{background-color:#f0ad4e}@media screen and (min-width:0\0){.progress-warning .progress-bar{background-color:#f0ad4e}}.progress-danger[value]::-webkit-progress-value{background-color:#d9534f}.progress-danger[value]::-moz-progress-bar{background-color:#d9534f}@media screen and (min-width:0\0){.progress-danger .progress-bar{background-color:#d9534f}}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right{padding-left:10px}.media-left{padding-right:10px}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:0}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-flush .list-group-item{border-width:1px 0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}a.list-group-item,button.list-group-item{width:100%;color:#555;text-align:inherit}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#818a91;cursor:not-allowed;background-color:#eceeef}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#818a91}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#0275d8;border-color:#0275d8}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#a8d6fe}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9{padding-bottom:42.857143%}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.embed-responsive-1by1{padding-bottom:100%}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:transform .3s ease-out,-o-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.in{opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header::after{display:table;clear:both;content:""}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.5}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer::after{display:table;clear:both;content:""}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:544px){.modal-dialog{width:600px;margin:30px auto}.modal-sm{width:300px}}@media (min-width:768px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.875rem;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;opacity:0;line-break:auto}.tooltip.in{opacity:.9}.tooltip.bs-tether-element-attached-bottom,.tooltip.tooltip-top{padding:5px 0;margin-top:-3px}.tooltip.bs-tether-element-attached-bottom .tooltip-arrow,.tooltip.tooltip-top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.bs-tether-element-attached-left,.tooltip.tooltip-right{padding:0 5px;margin-left:3px}.tooltip.bs-tether-element-attached-left .tooltip-arrow,.tooltip.tooltip-right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.bs-tether-element-attached-top,.tooltip.tooltip-bottom{padding:5px 0;margin-top:3px}.tooltip.bs-tether-element-attached-top .tooltip-arrow,.tooltip.tooltip-bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bs-tether-element-attached-right,.tooltip.tooltip-left{padding:0 5px;margin-left:-3px}.tooltip.bs-tether-element-attached-right .tooltip-arrow,.tooltip.tooltip-left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.875rem;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;line-break:auto}.popover.bs-tether-element-attached-bottom,.popover.popover-top{margin-top:-10px}.popover.bs-tether-element-attached-bottom .popover-arrow,.popover.popover-top .popover-arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.bs-tether-element-attached-bottom .popover-arrow::after,.popover.popover-top .popover-arrow::after{bottom:1px;margin-left:-10px;content:"";border-top-color:#fff;border-bottom-width:0}.popover.bs-tether-element-attached-left,.popover.popover-right{margin-left:10px}.popover.bs-tether-element-attached-left .popover-arrow,.popover.popover-right .popover-arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.bs-tether-element-attached-left .popover-arrow::after,.popover.popover-right .popover-arrow::after{bottom:-10px;left:1px;content:"";border-right-color:#fff;border-left-width:0}.popover.bs-tether-element-attached-top,.popover.popover-bottom{margin-top:10px}.popover.bs-tether-element-attached-top .popover-arrow,.popover.popover-bottom .popover-arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,.25)}.popover.bs-tether-element-attached-top .popover-arrow::after,.popover.popover-bottom .popover-arrow::after{top:1px;margin-left:-10px;content:"";border-top-width:0;border-bottom-color:#fff}.popover.bs-tether-element-attached-right,.popover.popover-left{margin-left:-10px}.popover.bs-tether-element-attached-right .popover-arrow,.popover.popover-left .popover-arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:rgba(0,0,0,.25)}.popover.bs-tether-element-attached-right .popover-arrow::after,.popover.popover-left .popover-arrow::after{right:1px;bottom:-10px;content:"";border-right-width:0;border-left-color:#fff}.popover-title{padding:8px 14px;margin:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:-.7rem -.7rem 0 0}.popover-content{padding:9px 14px}.popover-arrow,.popover-arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover-arrow{border-width:11px}.popover-arrow::after{content:"";border-width:10px}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.carousel-item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.carousel-item>a>img,.carousel-inner>.carousel-item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.carousel-item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:transform .6s ease-in-out,-o-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out,-o-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.carousel-item.active.right,.carousel-inner>.carousel-item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.carousel-item.active.left,.carousel-inner>.carousel-item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.carousel-item.active,.carousel-inner>.carousel-item.next.left,.carousel-inner>.carousel-item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);opacity:.5}.carousel-control.left{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-prev::before{content:"\2039"}.carousel-control .icon-next::before{content:"\203a"}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:transparent;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media (min-width:544px){.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .icon-prev{margin-left:-15px}.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix::after{display:table;clear:both;content:""}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-xs-left{float:left!important}.pull-xs-right{float:right!important}.pull-xs-none{float:none!important}@media (min-width:544px){.pull-sm-left{float:left!important}.pull-sm-right{float:right!important}.pull-sm-none{float:none!important}}@media (min-width:768px){.pull-md-left{float:left!important}.pull-md-right{float:right!important}.pull-md-none{float:none!important}}@media (min-width:992px){.pull-lg-left{float:left!important}.pull-lg-right{float:right!important}.pull-lg-none{float:none!important}}@media (min-width:1200px){.pull-xl-left{float:left!important}.pull-xl-right{float:right!important}.pull-xl-none{float:none!important}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.invisible{visibility:hidden!important}.text-hide{font:"0/0" a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-xs-left{text-align:left!important}.text-xs-right{text-align:right!important}.text-xs-center{text-align:center!important}@media (min-width:544px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-normal{font-weight:400}.font-weight-bold{font-weight:700}.font-italic{font-style:italic}.text-muted{color:#818a91}.text-primary{color:#0275d8!important}a.text-primary:focus,a.text-primary:hover{color:#025aa5}.text-success{color:#5cb85c!important}a.text-success:focus,a.text-success:hover{color:#449d44}.text-info{color:#5bc0de!important}a.text-info:focus,a.text-info:hover{color:#31b0d5}.text-warning{color:#f0ad4e!important}a.text-warning:focus,a.text-warning:hover{color:#ec971f}.text-danger{color:#d9534f!important}a.text-danger:focus,a.text-danger:hover{color:#c9302c}.bg-inverse{color:#eceeef;background-color:#373a3c}.bg-faded{background-color:#f7f7f9}.bg-primary{color:#fff!important;background-color:#0275d8!important}a.bg-primary:focus,a.bg-primary:hover{background-color:#025aa5}.bg-success{color:#fff!important;background-color:#5cb85c!important}a.bg-success:focus,a.bg-success:hover{background-color:#449d44}.bg-info{color:#fff!important;background-color:#5bc0de!important}a.bg-info:focus,a.bg-info:hover{background-color:#31b0d5}.bg-warning{color:#fff!important;background-color:#f0ad4e!important}a.bg-warning:focus,a.bg-warning:hover{background-color:#ec971f}.bg-danger{color:#fff!important;background-color:#d9534f!important}a.bg-danger:focus,a.bg-danger:hover{background-color:#c9302c}.m-x-auto{margin-right:auto!important;margin-left:auto!important}.m-a-0{margin:0 0!important}.m-t-0{margin-top:0!important}.m-r-0{margin-right:0!important}.m-b-0{margin-bottom:0!important}.m-l-0{margin-left:0!important}.m-x-0{margin-right:0!important;margin-left:0!important}.m-y-0{margin-top:0!important;margin-bottom:0!important}.m-a-1{margin:1rem 1rem!important}.m-t-1{margin-top:1rem!important}.m-r-1{margin-right:1rem!important}.m-b-1{margin-bottom:1rem!important}.m-l-1{margin-left:1rem!important}.m-x-1{margin-right:1rem!important;margin-left:1rem!important}.m-y-1{margin-top:1rem!important;margin-bottom:1rem!important}.m-a-2{margin:1.5rem 1.5rem!important}.m-t-2{margin-top:1.5rem!important}.m-r-2{margin-right:1.5rem!important}.m-b-2{margin-bottom:1.5rem!important}.m-l-2{margin-left:1.5rem!important}.m-x-2{margin-right:1.5rem!important;margin-left:1.5rem!important}.m-y-2{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-a-3{margin:3rem 3rem!important}.m-t-3{margin-top:3rem!important}.m-r-3{margin-right:3rem!important}.m-b-3{margin-bottom:3rem!important}.m-l-3{margin-left:3rem!important}.m-x-3{margin-right:3rem!important;margin-left:3rem!important}.m-y-3{margin-top:3rem!important;margin-bottom:3rem!important}.p-a-0{padding:0 0!important}.p-t-0{padding-top:0!important}.p-r-0{padding-right:0!important}.p-b-0{padding-bottom:0!important}.p-l-0{padding-left:0!important}.p-x-0{padding-right:0!important;padding-left:0!important}.p-y-0{padding-top:0!important;padding-bottom:0!important}.p-a-1{padding:1rem 1rem!important}.p-t-1{padding-top:1rem!important}.p-r-1{padding-right:1rem!important}.p-b-1{padding-bottom:1rem!important}.p-l-1{padding-left:1rem!important}.p-x-1{padding-right:1rem!important;padding-left:1rem!important}.p-y-1{padding-top:1rem!important;padding-bottom:1rem!important}.p-a-2{padding:1.5rem 1.5rem!important}.p-t-2{padding-top:1.5rem!important}.p-r-2{padding-right:1.5rem!important}.p-b-2{padding-bottom:1.5rem!important}.p-l-2{padding-left:1.5rem!important}.p-x-2{padding-right:1.5rem!important;padding-left:1.5rem!important}.p-y-2{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-a-3{padding:3rem 3rem!important}.p-t-3{padding-top:3rem!important}.p-r-3{padding-right:3rem!important}.p-b-3{padding-bottom:3rem!important}.p-l-3{padding-left:3rem!important}.p-x-3{padding-right:3rem!important;padding-left:3rem!important}.p-y-3{padding-top:3rem!important;padding-bottom:3rem!important}.pos-f-t{position:fixed;top:0;right:0;left:0;z-index:1030}.hidden-xs-up{display:none!important}@media (max-width:543px){.hidden-xs-down{display:none!important}}@media (min-width:544px){.hidden-sm-up{display:none!important}}@media (max-width:767px){.hidden-sm-down{display:none!important}}@media (min-width:768px){.hidden-md-up{display:none!important}}@media (max-width:991px){.hidden-md-down{display:none!important}}@media (min-width:992px){.hidden-lg-up{display:none!important}}@media (max-width:1199px){.hidden-lg-down{display:none!important}}@media (min-width:1200px){.hidden-xl-up{display:none!important}}.hidden-xl-down{display:none!important}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/media/assets/frontend/static/css/TCAccept.05d88392.css b/media/assets/frontend/static/css/TCAccept.05d88392.css new file mode 100644 index 00000000000..32cf4fbc62f --- /dev/null +++ b/media/assets/frontend/static/css/TCAccept.05d88392.css @@ -0,0 +1,2 @@ +body{overflow:hidden}#wrapper{height:100%}.top-header{background:#f4f4f7;border-bottom:1px solid #e8e8e8;flex-shrink:0;padding:.5rem 1rem}.content{max-width:950px} +/*# sourceMappingURL=TCAccept.05d88392.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/TCAccept.05d88392.css.map b/media/assets/frontend/static/css/TCAccept.05d88392.css.map new file mode 100644 index 00000000000..5b2e4878b5e --- /dev/null +++ b/media/assets/frontend/static/css/TCAccept.05d88392.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/TCAccept.05d88392.css","mappings":"AAAA,KACE,eACF,CACA,SACE,WACF,CACA,YACE,kBAAmB,CACnB,+BAAgC,CAEhC,aAAc,CADd,kBAEF,CACA,SACE,eACF","sources":["css/tc-accept.css"],"sourcesContent":["body {\n overflow: hidden;\n}\n#wrapper {\n height: 100%;\n}\n.top-header {\n background: #f4f4f7;\n border-bottom: 1px solid #e8e8e8;\n padding: .5rem 1rem;\n flex-shrink: 0;\n}\n.content {\n max-width: 950px;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/TCView.05d88392.css b/media/assets/frontend/static/css/TCView.05d88392.css new file mode 100644 index 00000000000..0d1ec8f96cb --- /dev/null +++ b/media/assets/frontend/static/css/TCView.05d88392.css @@ -0,0 +1,2 @@ +body{overflow:hidden}#wrapper{height:100%}.top-header{background:#f4f4f7;border-bottom:1px solid #e8e8e8;flex-shrink:0;padding:.5rem 1rem}.content{max-width:950px} +/*# sourceMappingURL=TCView.05d88392.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/TCView.05d88392.css.map b/media/assets/frontend/static/css/TCView.05d88392.css.map new file mode 100644 index 00000000000..075376910e4 --- /dev/null +++ b/media/assets/frontend/static/css/TCView.05d88392.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/TCView.05d88392.css","mappings":"AAAA,KACE,eACF,CACA,SACE,WACF,CACA,YACE,kBAAmB,CACnB,+BAAgC,CAEhC,aAAc,CADd,kBAEF,CACA,SACE,eACF","sources":["css/tc-accept.css"],"sourcesContent":["body {\n overflow: hidden;\n}\n#wrapper {\n height: 100%;\n}\n.top-header {\n background: #f4f4f7;\n border-bottom: 1px solid #e8e8e8;\n padding: .5rem 1rem;\n flex-shrink: 0;\n}\n.content {\n max-width: 950px;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/app.06d6765d.css b/media/assets/frontend/static/css/app.06d6765d.css new file mode 100644 index 00000000000..8bb88360f0f --- /dev/null +++ b/media/assets/frontend/static/css/app.06d6765d.css @@ -0,0 +1,2 @@ +#info-bar{background:#fddaa4;color:#1f0600;padding:4px 10px}#info-bar .close{color:#888;cursor:pointer;font-size:16px;line-height:1}#info-bar-info a{color:#a68558;text-decoration:underline}.activity-details{cursor:pointer;text-decoration:underline}.activity-details:hover{color:#333}.mobile-activity-time{display:inline-block;margin-bottom:.2em}.cur-activity-modifiers{margin-left:-.5rem}.cur-activity-modifiers:hover{background:#f5f5f5;cursor:pointer}.cur-activity-modifiers .toggle-icon{color:#999}.activity-modifier-selector-container{background:#fff;border:1px solid #e8e8e8;margin-top:2px;width:320px;z-index:2}.activity-selected-modifiers{background:#f6f6f6;border-bottom:1px solid #dde2ea;line-height:1;min-height:2rem}.activity-selected-modifier{align-items:center;background:#eaeaea;border-radius:10px;display:inline-flex;margin-right:10px;padding:0 8px 0 2px}.unselect-activity-user{color:#909090;cursor:pointer}.unselect-activity-user:hover{color:#5a5a5a}.activity-user-list{max-height:200px;min-height:4rem}.activity-user-item{cursor:pointer}.activity-user-item:hover{background:#f5f5f5}.activity-user-name{font-size:14px}.share-dialog .share-dialog-content{min-height:28rem}.account-dialog .nav .nav-item{padding:0}.account-dialog .nav .nav-item .nav-link{color:#8a948f;font-weight:400;padding:.5rem 0;transition:none;width:100%}.account-dialog .nav .nav-item .nav-link.active{border-bottom:.125rem solid #ff8000;color:#ff8000;text-decoration:none}.account-dialog .nav-pills .nav-item .nav-link{color:#333;padding:.3125rem 1rem .3125rem 8px}.account-dialog .nav-pills .nav-item .nav-link:hover{background-color:#f5f5f5}.account-dialog .nav-pills .nav-item .nav-link.active{background-color:#ff8000;border:none;color:#fff}.account-dialog table{table-layout:fixed;width:100%}.account-dialog .accounts-list{max-height:400px;overflow:auto}.account-dialog .accounts-list table thead tr{border-bottom:1px solid #efefef;height:2.1875rem}.account-dialog .accounts-list table tbody tr{border-bottom:1px solid #efefef;height:2.5625rem}.account-dialog table th{font-weight:500;padding:.3125rem .1875rem}.account-dialog table td{color:#333;font-size:14px;padding:3px .1875rem;word-break:break-all}.account-dialog table td a{color:inherit;text-decoration:none}.account-dialog .ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.account-dialog .select-module{font-size:16px}.account-dialog .select-module.select-module-icon{height:1.5rem;width:1.5rem}.account-dialog .select-module.select-module-name{margin-left:.5rem}.account-dialog .op-target{word-wrap:break-word;color:#ea7500}.account-dialog{height:calc(100% - 56px);max-width:600px}.account-dialog .account-dialog-content{display:flex;flex-direction:row;min-height:27rem;overflow:hidden;padding:0}.account-dialog-content .account-dialog-side{border-right:1px solid #eee;display:flex;flex:0 0 25%;padding:12px 8px}.account-dialog-content .account-dialog-main{flex:1 1;padding:.5rem 1.5rem 2rem}.account-dialog-content .account-dialog-main .tab-content{flex:1 1}.account-dialog-content .account-dialog-main .tab-pane{height:100%}.account-dialog .wechat-input-content{height:250px}.accounts-manage .accounts-manage-header{border-bottom:1px solid #efefef;padding:.375rem 0}.accounts-manage .accounts-manage-header button{font-weight:400}.accounts-manage .no-accounts{height:400px}.accounts-manage .no-accounts img{width:120px}.accounts-manage .no-accounts p{color:#afafaf;margin-top:1rem}.accounts-manage .accounts-list-body{cursor:pointer;max-height:400px;overflow-y:auto}.accounts-manage td,.accounts-manage th{border-color:#efefef;padding:.5rem .1875rem}.accounts-manage th{color:#999}.accounts-manage .accounts-list-body tr:hover{background-color:#f9f9f9}.accounts-manage .accounts-list-body .account-operation-btn{display:none;margin-right:.2rem}.accounts-manage .accounts-list-body tr:hover .account-operation-btn{align-items:center;cursor:pointer;display:inline-flex;height:24px;justify-content:center;width:24px}.accounts-manage .account-operation-btn .dtable-font{color:#999;font-size:14px}.accounts-manage .account-operation-btn:hover .dtable-font{color:#5a5a5a}.add-account,.edit-account{height:100%}.add-account .add-account-header,.edit-account .edit-account-header{border-bottom:1px solid #efefef;padding:.375rem 0}.add-account .back-btn,.edit-account .back-btn{cursor:pointer;height:18px;width:18px}.add-account .back-btn .dtable-icon-return,.edit-account .back-btn .dtable-icon-return{color:#999;font-size:14px}.add-account .back-btn:hover .dtable-icon-return,.edit-account .back-btn:hover .dtable-icon-return{color:#5a5a5a}.add-account .add-account-header-text,.edit-account .edit-account-header-text{margin-left:.25rem}.add-account .add-account-btn,.edit-account .edit-account-btn{border-color:#ff8000;color:#ff8000;font-weight:400;margin:0;padding-bottom:0;padding-top:0}.add-account .account-loading-tip{margin-top:1rem}.add-account .add-account-btn:hover,.edit-account .edit-account-btn:hover{background-color:transparent}.base-account{height:calc(100% - 38px)}.base-account input[type=checkbox]{margin-top:-2px;vertical-align:middle}.base-account .account-name-desc{margin-top:.375rem}.base-account .base-account-password .input-group .form-control{border-right:none;height:38px}.base-account .base-account-password .input-group .input-group-text{border-radius:0 3px 3px 0;height:38px}.lib-decrypt-form .intro{color:#464646;font-size:1.3em}.lib-decrypt-form .password-input{margin:0 auto;width:50%}.lib-decrypt-form .submit{margin:1.5em auto 1em;width:50%}.tag-list-container{list-style:none;max-height:15rem;overflow:auto}.add-tag-link{color:#666}.add-tag-link:hover{background:#f5f5f5;color:#444;text-decoration:none}.tag-list-item{height:2.5rem}.tag-list-item.hl{background:#f5f5f5}.tag-selected-icon{color:#999}.tag-delete-icon{color:#999;font-size:18px}.tag-delete-icon:hover{color:#444}.tag-dialog-back{color:#888;cursor:pointer;margin-right:10px}.tag-dialog-back:focus,.tag-dialog-back:hover{color:#444}.tag-color-option .colorinput-color:before{display:none}.tag-color-option .color-selected{opacity:0}.tag-color-option .colorinput-input:checked~.colorinput-color .color-selected{opacity:1}.tag-color-popover .popover{max-width:360px}.tag-color-popover .colorinput-color,.tag-color-popover .tag-color{height:20px;width:20px}.tag-color-popover .tag-color-option .colorinput-input:checked~.colorinput-color .color-selected{font-size:12px}.dirents-more-menu{border:1px solid #ccc;border-bottom-left-radius:0;border-bottom-right-radius:2px!important;border-top-left-radius:0;border-top-right-radius:2px!important;height:30px;margin-left:0;padding:4px 15px;width:46px}.dirents-more-menu:hover{background-color:#fff;border:1px solid #ccc}.list-tag-popover .popover{max-width:500px;width:500px}.list-tag-popover .add-tag-link{cursor:pointer}.list-tag-popover .tag-list-footer{align-items:center;border-top:1px solid #dedede;display:flex;flex-wrap:wrap;justify-content:flex-end;padding:1rem}.list-tag-popover .tag-list-footer .item-text{color:#ff8000;cursor:pointer}.list-tag-popover .tag-list-footer a:hover{text-decoration:none}.list-tag-popover .tag-color{height:20px;width:20px}.add-item-btn{align-items:center;background:#fff;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top:1px solid #dedede;cursor:pointer;display:flex;font-size:14px;font-weight:500;height:30px;overflow:hidden;padding:0 10px;position:relative}.add-item-btn:hover{background-color:#f5f5f5}.add-item-btn .dtable-icon-add-table{font-size:12px;font-weight:600;margin-right:10px;-webkit-transform:none;transform:none}.add-item-btn .add-new-option{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.edit-filetag-popover .edit-filetag-popover-input{color:#212529;font-size:14px;height:30px;max-height:30px}.edit-filetag-popover .popover{padding:10px 10px 0;width:200px}.edit-filetag-popover .tag-list-container{padding:10px 0}.edit-filetag-popover .tag-list-container .tag-not-found{opacity:.5}.edit-filetag-popover .tag-list-item{height:30px}.edit-filetag-popover .tag-item{align-items:center;border-radius:10px;display:flex;margin:.25rem 0;max-width:130px;padding:0 .5rem;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.edit-filetag-popover .tag-item .tag-name{color:#fff;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.edit-filetag-popover .add-item-btn{margin:0 -10px}.extra-attributes-dialog .selected-single-select-container{-webkit-appearance:none;appearance:none;background:#fff;border:1px solid rgba(0,40,100,.12);border-radius:3px;height:38px;padding:0 10px;-webkit-user-select:none;-ms-user-select:none;user-select:none;width:100%}.extra-attributes-dialog .selected-single-select-container.disable{background-color:#f8f9fa}.extra-attributes-dialog .selected-single-select-container.focus{border-color:#1991eb!important;box-shadow:0 0 0 2px rgba(70,127,207,.25)}.extra-attributes-dialog .selected-single-select-container:not(.disable):hover{cursor:pointer}.extra-attributes-dialog .selected-single-select-container .fa-caret-down{color:#949494;font-size:16px}.extra-attributes-dialog .selected-single-select-container .single-select-option{border-radius:10px;font-size:13px;line-height:20px;max-width:250px;overflow:hidden;padding:0 10px;text-align:center;text-overflow:ellipsis;white-space:nowrap;width:-webkit-min-content;width:min-content}.single-select-editor-popover .popover,.single-select-editor-popover .popover-inner{max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.single-select-editor-container{background-color:#fff;min-height:160px;overflow:hidden;width:320px}.single-select-editor-container .search-single-selects{padding:10px 10px 0}.single-select-editor-container .search-single-selects input{font-size:14px;max-height:30px}.single-select-editor-container .single-select-editor-content{max-height:200px;min-height:100px;overflow-x:hidden;overflow-y:scroll;padding:10px}.single-select-editor-container .single-select-editor-content .single-select-option-container{align-items:center;border-radius:2px;color:#212529;display:flex;font-size:13px;height:30px;justify-content:space-between;padding-left:12px;width:100%}.single-select-editor-container .single-select-editor-content .single-select-option-container:hover{background-color:#f5f5f5;cursor:pointer}.single-select-editor-container .single-select-editor-content .single-select-option{border-radius:10px;height:20px;line-height:20px;margin-right:10px;overflow:hidden;padding:0 10px;text-align:center;text-overflow:ellipsis;white-space:nowrap}.single-select-editor-container .single-select-editor-content .single-select-option-selected{text-align:center;width:20px}.extra-attributes-dialog .column-name{padding-top:9px}.extra-attributes-dialog .column-item{min-height:56px}.extra-attributes-dialog{margin:28px 0 0}.extra-attributes-dialog .extra-attributes-content-container{height:100%;overflow:hidden}.extra-attributes-dialog .modal-body{overflow-y:scroll;padding:30px}.extra-attributes-dialog .modal-body .form-control.disabled{background-color:#f8f9fa}.apply-properties-dialog .apply-properties{align-items:center;display:flex;height:38px;justify-content:center;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.apply-properties-dialog .apply-properties .loading-tip{display:inline-block;height:16px;margin:0;width:16px}.tip-for-new-file{align-self:flex-start;margin:0 auto;padding:2em 1em}@media (min-width:768px){.tip-for-new-file{padding:5em 8em}}.big-new-file-button{background:#fff;border:1px solid #d1d1d1;border-radius:8px;cursor:pointer;margin:0 .75em 1.5em;padding:.9em 2em 1em;width:160px}.big-new-file-button:focus,.big-new-file-button:hover{border-color:#eb9205;color:#eb8205}.repo-info-bar{border:1px solid #e6e6dd;border-radius:5px;margin:10px 16px 0;padding:10px}.used-tag-list{list-style:none}.used-tag-item{display:inline-block;margin:auto 15px}.used-tag{border-radius:50%;cursor:pointer;display:inline-block;height:12px;width:12px}.used-tag-name{margin:0 .25rem}.used-tag-files{color:#888;font-size:14px}.used-tag-files:hover{cursor:pointer;text-decoration:underline}.file-info{cursor:pointer;display:inline-block;margin:0 15px}.file-info a{color:#333}.info-icon{color:#888;vertical-align:-3px}.readme-dialog-edit{position:absolute;right:16px}.readme-dialog .modal-body{padding:0 30px}.tr-drop-effect{background-color:#f8f8f8}.star-empty{color:#d0d0d0}.dir-icon{max-width:24px;position:relative;text-align:center}.dir-icon .locked{height:1rem;left:50%;position:absolute;top:50%;width:1rem}.tag-list-title{overflow:hidden}.dirent-sdoc-draft-identifier{background:#eee;border-radius:10px;color:#888;display:inline-block;font-size:14px;height:20px;line-height:20px;margin-left:6px;padding:0 8px}.grid-view{align-content:flex-start;display:flex;flex:1 1;flex-wrap:wrap;list-style:none;padding:.625rem 1rem 10rem}.grid-item{line-height:0;padding:10px 4px;position:relative;text-align:center;width:134px}.grid-item:hover .grid-file-img-link{background:#f8f8f8}.grid-item:hover a{color:#eb8205}.grid-file-img-link{border-radius:3px;font-size:0;height:96px;line-height:0;margin:0 auto 6px;position:relative;text-align:center;width:96px}.grid-file-img-link .thumbnail{background:#fff;border:1px solid #ddd;border-radius:1px;max-height:88px;max-width:88px;padding:1px}.grid-file-img-link:before{content:"";display:inline-block;height:100%;vertical-align:middle}.grid-file-name{display:inline-block;font-size:14px;line-height:17px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-break:keep-all}.grid-file-name-link{color:#333;font-size:.875rem}.grid-file-locked-icon{bottom:0;position:absolute;right:10px;width:16px}.grid-selected-active{background-color:#f8f8f8}.grid-link-selected-active{color:#eb8205}.grid-drop-show{background:#f8f8f8}.main-panel{overflow:hidden}.cur-view-content.lib-content-container{padding:0}.view-mode-container{display:flex;flex-direction:row!important;min-height:0;overflow:hidden!important;padding-left:0!important}.dir-colunm-view{display:flex;width:100%}.dir-content-nav{background-color:#fff;border-right:1px solid #eee;display:flex;flex:0 0 25%;flex-direction:column;overflow:hidden}.dir-content-nav:hover{overflow:auto}.dir-content-main{display:flex;flex:1 0 74.5%;flex-direction:column;overflow:auto}.tree-view{border:1px solid rgba(69,170,242,0);flex:1 1;line-height:1.5;margin-left:-9px;padding:12px 12px 12px 0}.tree-view-drop{border:1px solid #45aaf2}.tree-view-drop:before{border-left:1px solid #45aaf2;content:"";display:block;float:left;height:calc(100% + 24px);margin-left:8px;margin-top:-12px}.tree-node-inner{cursor:pointer;height:24px;line-height:1.625;position:relative}.tree-node-inner-hover{background-color:#f5f5f5;border-radius:.25rem}.tree-node-inner .tree-node-text{font-size:14px;line-height:24px;overflow:hidden;padding-left:2.8rem;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 1.5rem)}.tree-node-inner .left-icon{align-items:center;display:flex;left:0;padding-left:1.5rem;position:absolute;top:0}.folder-toggle-icon{align-content:center;color:silver;display:flex;justify-content:center;left:0;line-height:1.625;position:absolute;width:1.5rem}.tree-node-drop{background-color:#ffefb2}.tree-node-icon{color:#b0b0b0;display:inline-block;text-align:center;width:1rem}.tree-node-inner .right-icon{bottom:0;color:#888;font-size:.8125rem;position:absolute;right:.5rem;text-align:center;top:0;width:1rem;z-index:2}.tree-node-inner .right-icon i{font-size:.8125rem;height:100%;line-height:1.625rem!important;vertical-align:middle;width:100%}.tree-node-hight-light{background-color:#ff9800!important;border-radius:4px;color:#fff}.tree-node-hight-light i{color:#fff}.dropdown-menu{min-width:8rem}.parent-path{position:relative}.parent-path .form-text{font-size:.9375rem;margin-left:.25rem;margin-top:0;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.dir-content-main .wiki-page-container{display:flex;flex:1 1;padding:0 1rem 1.25rem}.wiki-page-content{flex:1 1}.wiki-page-content .ml-2{text-decoration:underline}.wiki-page-content .ml-2:hover{color:#eb8205;text-decoration:underline}.wiki-page-content .wiki-open-file{background-color:#fff;border:none;border-radius:50%;bottom:10px;box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12);color:#999;cursor:pointer;font-size:16px;height:40px;right:10px;-webkit-user-select:none;-ms-user-select:none;user-select:none;width:40px;z-index:1050}.wiki-page-content .wiki-open-file i{left:12px;position:absolute;top:12px}.wiki-page-content .wiki-open-file:hover{background-color:#f6f6f6}.wiki-page-content .sf-slate-viewer-scroll-container{background-color:#fff;border:none;overflow:inherit;padding:0}.wiki-page-content .sf-slate-viewer-article-container{display:block;width:100%}.dir-content-main .wiki-page-content .article{border:none;margin:0;max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content;padding:0 10px}.wiki-page-content a{cursor:pointer}.wiki-page-ops{position:fixed;top:10px}@media (min-width:768px){.wiki-page-ops:before{border-left:1px solid #ddd;bottom:3px;content:"";left:-16px;position:absolute;top:3px}}.wiki-page-list-item{line-height:1.6;margin:3px 0;word-break:break-all}.wiki-page-link,.wiki-page-link:hover{color:#444;font-size:1.15em;font-weight:400;margin-left:5px}#wiki-page-last-modified{color:#666;font-size:12px;padding:40px 10px}.dir-content-resize{cursor:ew-resize;flex:0 0 .5%}.readonly-tip-message{align-items:center;background-color:#fefbdc;display:flex;justify-content:center;padding:.25rem 0}.transfer-group-name{line-height:2rem;margin-left:10px}.group-transfer-select .true__dropdown-indicator,.reviewer-select .true__indicator-separator{display:none}.manage-members{max-height:300px;min-height:200px;overflow-y:auto;padding:.5rem 0}.manage-members-table td,.manage-members-table th{text-align:left;vertical-align:middle}.add-members-select .true__indicator-separator{display:none}.add-members{display:flex;justify-content:space-between}.add-members .add-members-select{width:385px}.add-members .btn{width:75px}.group-error{margin-top:10px}.group-manage-members-dialog .search-group-members{background:#f1f1f1;border:1px solid transparent;color:#999;font-size:14px;font-weight:400;margin:12px 0 0}.group-manage-members-dialog .search-group-members.active{background:#fff;border-color:#ccc}.group-manage-members-dialog .search-group-members .input-group-input,.group-manage-members-dialog .search-group-members .input-group-text{background:transparent;border:none;color:inherit}.group-manage-members-dialog .search-group-members.active .input-group-input{color:#495057}.group-manage-members-dialog .search-group-members .input-group-input:focus{box-shadow:none}#group-members-popover,#group-setting-popover{right:0;top:42px}.group-member-list-header{border-bottom:1px solid #e3e3e5;margin-bottom:0;padding-bottom:10px}.group-member-list{border-top:0;margin-top:0;max-height:400px;padding-top:0}.group-member-list .user-item{line-height:2rem}.group-member-list .user-item:hover{background-color:#f8f8f8}.group-member-list .user-item .group-member-name{margin:0 5px;max-width:70%}.group-member-list .user-item .group-member-admin{color:#888;font-size:12px}.department-group-icon{color:#888;margin-left:.25rem}.group-top-op-icon{display:inline-block;font-size:22px;margin:3px 0 0 10px}.cur-view-content-groups .group-list-panel{padding-bottom:1rem}.group-list-panel .group-item-heading{border-bottom:1px solid #e6e6e6;font-size:1rem;font-weight:400;margin:.75rem 0 0;padding:.25rem}.group-list-panel .group-item-empty-tip{border-bottom:1px solid #e5e5e5;color:#a4a4a4;padding:4px 0;text-align:center} +/*# sourceMappingURL=app.06d6765d.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/app.06d6765d.css.map b/media/assets/frontend/static/css/app.06d6765d.css.map new file mode 100644 index 00000000000..58d37c9e5ce --- /dev/null +++ b/media/assets/frontend/static/css/app.06d6765d.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/app.06d6765d.css","mappings":"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","sources":["css/system-notification.css","css/files-activities.css","css/sub-folder-permission.css","css/repo-seatable-integration-dialog.css","css/lib-decrypt.css","css/repo-tag.css","css/dirents-menu.css","components/popover/list-tag-popover.css","css/common-add-tool.css","css/edit-filetag-popover.css","components/dialog/extra-attributes-dialog/editor/single-select/index.css","components/dialog/extra-attributes-dialog/column/index.css","components/dialog/extra-attributes-dialog/index.css","css/apply-folder-properties.css","css/tip-for-new-file.css","css/repo-info-bar.css","css/dirent-list-item.css","css/grid-view.css","css/lib-content-view.css","css/transfer-group-dialog.css","css/manage-members-dialog.css","css/group-view.css","css/groups.css"],"sourcesContent":["#info-bar {\n color: #1f0600;\n padding: 4px 10px;\n background: #fddaa4;\n}\n#info-bar .close {\n font-size: 16px;\n line-height: 1;\n color: #888;\n cursor: pointer;\n}\n#info-bar-info a {\n color: #a68558;\n text-decoration: underline;\n}\n",".activity-details {\n text-decoration: underline;\n cursor: pointer;\n}\n.activity-details:hover {\n color: #333;\n}\n.mobile-activity-time {\n display: inline-block;\n margin-bottom: .2em;\n}\n\n.cur-activity-modifiers {\n margin-left: -0.5rem;\n}\n\n.cur-activity-modifiers:hover {\n background: #f5f5f5;\n cursor: pointer;\n}\n\n.cur-activity-modifiers .toggle-icon {\n color: #999;\n}\n\n.activity-modifier-selector-container {\n width: 320px;\n background: #fff;\n border: 1px solid #e8e8e8;\n margin-top: 2px;\n z-index: 2;\n}\n\n.activity-selected-modifiers {\n min-height: 2rem;\n background: #f6f6f6;\n border-bottom: 1px solid #dde2ea;\n line-height: 1;\n}\n\n.activity-selected-modifier {\n display: inline-flex;\n align-items: center;\n margin-right: 10px;\n padding: 0 8px 0 2px;\n border-radius: 10px;\n background: #eaeaea;\n}\n\n.unselect-activity-user {\n color: #909090;\n cursor: pointer;\n}\n\n.unselect-activity-user:hover {\n color: #5a5a5a;\n}\n\n.activity-user-list {\n min-height: 4rem;\n max-height: 200px;\n}\n\n.activity-user-item {\n cursor: pointer;\n}\n\n.activity-user-item:hover {\n background: #f5f5f5;\n}\n\n.activity-user-name {\n font-size: 14px;\n}\n",".share-dialog .share-dialog-content {\n min-height: 28rem;\n}\n","/* common */\n.account-dialog .nav .nav-item {\n padding: 0;\n}\n\n.account-dialog .nav .nav-item .nav-link {\n padding: 0.5rem 0;\n color: #8a948f;\n font-weight: normal;\n transition: none;\n width: 100%;\n}\n\n.account-dialog .nav .nav-item .nav-link.active {\n color: #ff8000;\n text-decoration: none;\n border-bottom: 0.125rem solid #ff8000;\n}\n\n.account-dialog .nav-pills .nav-item .nav-link {\n padding: .3125rem 1rem .3125rem 8px;\n color: #333;\n}\n\n.account-dialog .nav-pills .nav-item .nav-link:hover {\n background-color: #f5f5f5;\n}\n\n.account-dialog .nav-pills .nav-item .nav-link.active {\n background-color: #ff8000;\n color: #fff;\n border: none;\n}\n\n.account-dialog table {\n width: 100%;\n table-layout: fixed;\n}\n\n.account-dialog .accounts-list {\n max-height: 400px;\n overflow: auto;\n}\n\n.account-dialog .accounts-list table thead tr {\n border-bottom: 1px solid #efefef;\n height: 2.1875rem;\n}\n\n.account-dialog .accounts-list table tbody tr {\n border-bottom: 1px solid #efefef;\n height: 2.5625rem;\n}\n\n.account-dialog table th {\n padding: 0.3125rem 0.1875rem;\n font-weight: 500;\n}\n\n.account-dialog table td {\n padding: 3px 0.1875rem;\n color: #333;\n font-size: 14px;\n word-break: break-all;\n}\n\n.account-dialog table td a {\n text-decoration: none;\n color: inherit;\n}\n\n.account-dialog .ellipsis {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.account-dialog .select-module {\n font-size: 16px;\n}\n\n.account-dialog .select-module.select-module-icon {\n width: 1.5rem;\n height: 1.5rem;\n}\n\n.account-dialog .select-module.select-module-name {\n margin-left: 0.5rem;\n}\n\n.account-dialog .op-target {\n color: #ea7500;\n word-wrap: break-word;\n}\n\n/* custom */\n.account-dialog {\n max-width: 600px;\n height: calc(100% - 56px);\n}\n\n.account-dialog .account-dialog-content {\n padding: 0;\n min-height: 27rem;\n display: flex;\n flex-direction: row;\n overflow: hidden;\n}\n\n.account-dialog-content .account-dialog-side {\n display: flex;\n flex: 0 0 25%;\n padding: 12px 8px;\n border-right: 1px solid #eee;\n}\n\n.account-dialog-content .account-dialog-main {\n flex: 1;\n padding: 0.5rem 1.5rem 2rem;\n}\n\n.account-dialog-content .account-dialog-main .tab-content {\n flex: 1;\n}\n\n.account-dialog-content .account-dialog-main .tab-pane {\n height: 100%;\n}\n\n.account-dialog .wechat-input-content {\n height: 250px;\n}\n\n.accounts-manage .accounts-manage-header {\n border-bottom: 1px solid #efefef;\n padding: .375rem 0;\n}\n\n.accounts-manage .accounts-manage-header button {\n font-weight: normal;\n}\n\n.accounts-manage .no-accounts {\n height: 400px;\n}\n\n.accounts-manage .no-accounts img {\n width: 120px;\n}\n\n.accounts-manage .no-accounts p {\n margin-top: 1rem;\n color: #afafaf;\n}\n\n.accounts-manage .accounts-list-body {\n max-height: 400px;\n overflow-y: auto;\n cursor: pointer;\n}\n\n.accounts-manage th,\n.accounts-manage td {\n padding: .5rem .1875rem;\n border-color: #efefef;\n}\n\n.accounts-manage th {\n color: #999;\n}\n\n.accounts-manage .accounts-list-body tr:hover {\n background-color: #f9f9f9;\n}\n\n.accounts-manage .accounts-list-body .account-operation-btn {\n display: none;\n margin-right: .2rem;\n}\n\n.accounts-manage .accounts-list-body tr:hover .account-operation-btn {\n display: inline-flex;\n width: 24px;\n height: 24px;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n}\n\n.accounts-manage .account-operation-btn .dtable-font {\n font-size: 14px;\n color: #999;\n}\n\n.accounts-manage .account-operation-btn:hover .dtable-font {\n color: #5a5a5a;\n}\n\n.add-account,\n.edit-account {\n height: 100%;\n}\n\n.add-account .add-account-header,\n.edit-account .edit-account-header {\n padding: .375rem 0;\n border-bottom: 1px solid #efefef;\n}\n\n.add-account .back-btn,\n.edit-account .back-btn {\n width: 18px;\n height: 18px;\n cursor: pointer;\n}\n\n.add-account .back-btn .dtable-icon-return,\n.edit-account .back-btn .dtable-icon-return {\n font-size: 14px;\n color: #999;\n}\n\n.add-account .back-btn:hover .dtable-icon-return,\n.edit-account .back-btn:hover .dtable-icon-return {\n color: #5a5a5a;\n}\n\n.add-account .add-account-header-text,\n.edit-account .edit-account-header-text {\n margin-left: .25rem;\n}\n\n.add-account .add-account-btn,\n.edit-account .edit-account-btn {\n margin: 0;\n padding-top: 0;\n padding-bottom: 0;\n font-weight: normal;\n border-color: #ff8000;\n color: #ff8000;\n}\n\n.add-account .account-loading-tip {\n margin-top: 1rem;\n}\n\n.add-account .add-account-btn:hover,\n.edit-account .edit-account-btn:hover {\n background-color: transparent;\n}\n\n.base-account {\n height: calc(100% - 38px);\n}\n\n.base-account input[type=\"checkbox\"] {\n margin-top: -2px;\n vertical-align: middle;\n}\n\n.base-account .account-name-desc {\n margin-top: .375rem;\n}\n\n.base-account .base-account-password .input-group .form-control {\n height: 38px;\n border-right: none;\n}\n\n.base-account .base-account-password .input-group .input-group-text {\n height: 38px;\n border-radius: 0 3px 3px 0;\n}\n\n",".lib-decrypt-form .intro {\n color: #464646;\n font-size: 1.3em;\n}\n.lib-decrypt-form .password-input {\n width: 50%;\n margin: 0 auto;\n}\n.lib-decrypt-form .submit {\n width: 50%;\n margin: 1.5em auto 1em;\n}\n",".tag-list-container {\n max-height: 15rem;\n list-style: none;\n overflow: auto;\n}\n\n.add-tag-link {\n color: #666;\n}\n\n.add-tag-link:hover {\n color: #444;\n text-decoration: none;\n background: #f5f5f5;\n}\n\n.tag-list-item {\n height: 2.5rem;\n}\n\n.tag-list-item.hl {\n background: #f5f5f5;\n}\n\n.tag-selected-icon {\n color: #999;\n}\n\n.tag-delete-icon {\n color: #999;\n font-size: 18px;\n}\n\n.tag-delete-icon:hover {\n color: #444;\n}\n\n.tag-dialog-back {\n color: #888;\n cursor: pointer;\n margin-right: 10px;\n}\n\n.tag-dialog-back:hover,\n.tag-dialog-back:focus {\n color: #444;\n}\n\n/* overwrite the code from seafile-ui */\n.tag-color-option .colorinput-color::before {\n display: none;\n}\n\n.tag-color-option .color-selected {\n opacity: 0;\n}\n\n.tag-color-option .colorinput-input:checked ~ .colorinput-color .color-selected {\n opacity: 1;\n}\n\n/* tag-color */\n.tag-color-popover .popover {\n max-width: 360px;\n}\n\n.tag-color-popover .tag-color {\n width: 20px;\n height: 20px;\n}\n\n.tag-color-popover .colorinput-color {\n width: 20px;\n height: 20px;\n}\n\n.tag-color-popover .tag-color-option .colorinput-input:checked ~ .colorinput-color .color-selected {\n font-size: 12px;\n}\n",".dirents-more-menu {\n margin-left: 0;\n padding: 4px 15px;\n border: 1px solid #ccc;\n border-top-right-radius: 2px !important;\n border-bottom-right-radius: 2px !important;\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n width: 46px;\n height: 30px;\n}\n.dirents-more-menu:hover {\n background-color: #fff;\n border: 1px solid #ccc;\n}\n",".list-tag-popover .popover {\n width: 500px;\n max-width: 500px;\n}\n\n.list-tag-popover .add-tag-link {\n cursor: pointer;\n}\n\n.list-tag-popover .tag-list-footer {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: 1rem;\n border-top: 1px solid #dedede;\n}\n\n.list-tag-popover .tag-list-footer .item-text {\n color: #ff8000;\n cursor: pointer;\n}\n\n.list-tag-popover .tag-list-footer a:hover {\n text-decoration: none;\n}\n\n.list-tag-popover .tag-color {\n width: 20px;\n height: 20px;\n}\n",".add-item-btn {\n cursor: pointer;\n display: flex;\n align-items: center;\n font-size: 14px;\n font-weight: 500;\n border-top: 1px solid #dedede;\n background: #fff;\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n position: relative;\n height: 30px;\n padding: 0 10px;\n overflow: hidden;\n}\n\n.add-item-btn:hover {\n background-color: #f5f5f5;\n}\n\n.add-item-btn .dtable-icon-add-table {\n margin-right: 10px;\n font-size: 12px;\n font-weight: 600;\n transform: none;\n}\n\n.add-item-btn .add-new-option {\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n",".edit-filetag-popover .edit-filetag-popover-input {\n max-height: 30px;\n font-size: 14px;\n color: #212529;\n height: 30px;\n}\n\n.edit-filetag-popover .popover {\n padding: 10px;\n width: 200px;\n padding-bottom: 0px;\n}\n\n.edit-filetag-popover .tag-list-container {\n padding: 10px 0;\n}\n\n.edit-filetag-popover .tag-list-container .tag-not-found {\n opacity: 0.5;\n}\n\n.edit-filetag-popover .tag-list-item {\n height: 30px;\n}\n\n.edit-filetag-popover .tag-item {\n display: flex;\n align-items: center;\n max-width: 130px;\n margin: 0.25rem 0;\n padding: 0 0.5rem;\n width: fit-content;\n border-radius: 10px;\n}\n\n.edit-filetag-popover .tag-item .tag-name {\n color: #fff;\n font-size: 13px;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.edit-filetag-popover .add-item-btn {\n margin: 0 -10px;\n}\n",".extra-attributes-dialog .selected-single-select-container {\n height: 38px;\n width: 100%;\n padding: 0 10px;\n border-radius: 3px;\n user-select: none;\n border: 1px solid rgba(0, 40, 100, .12);\n appearance: none;\n background: #fff;\n}\n\n.extra-attributes-dialog .selected-single-select-container.disable {\n background-color: #f8f9fa;\n}\n\n.extra-attributes-dialog .selected-single-select-container.focus {\n border-color: #1991eb!important;\n box-shadow: 0 0 0 2px rgba(70, 127, 207, .25);\n}\n\n.extra-attributes-dialog .selected-single-select-container:not(.disable):hover {\n cursor: pointer;\n}\n\n.extra-attributes-dialog .selected-single-select-container .fa-caret-down {\n font-size: 16px;\n color: #949494;\n}\n\n.extra-attributes-dialog .selected-single-select-container .single-select-option {\n text-align: center;\n width: min-content;\n max-width: 250px;\n line-height: 20px;\n border-radius: 10px;\n padding: 0 10px;\n font-size: 13px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* editor */\n.single-select-editor-popover .popover,\n.single-select-editor-popover .popover-inner {\n width: fit-content;\n max-width: fit-content;\n}\n\n.single-select-editor-container {\n min-height: 160px;\n width: 320px;\n overflow: hidden;\n background-color: #fff;\n}\n\n.single-select-editor-container .search-single-selects {\n padding: 10px 10px 0;\n}\n\n.single-select-editor-container .search-single-selects input {\n max-height: 30px;\n font-size: 14px;\n}\n\n.single-select-editor-container .single-select-editor-content {\n max-height: 200px;\n min-height: 100px;\n padding: 10px;\n overflow-x: hidden;\n overflow-y: scroll;\n}\n\n.single-select-editor-container .single-select-editor-content .single-select-option-container {\n width: 100%;\n height: 30px;\n border-radius: 2px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 13px;\n color: #212529;\n padding-left: 12px;\n}\n\n.single-select-editor-container .single-select-editor-content .single-select-option-container:hover {\n background-color: #f5f5f5;\n cursor: pointer;\n}\n\n.single-select-editor-container .single-select-editor-content .single-select-option {\n padding: 0 10px;\n height: 20px;\n line-height: 20px;\n text-align: center;\n border-radius: 10px;\n margin-right: 10px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.single-select-editor-container .single-select-editor-content .single-select-option-selected {\n width: 20px;\n text-align: center;\n}\n\n",".extra-attributes-dialog .column-name {\n padding-top: 9px;\n}\n\n.extra-attributes-dialog .column-item {\n min-height: 56px;\n}\n",".extra-attributes-dialog {\n margin: 28px 0 0 0;\n}\n\n.extra-attributes-dialog .extra-attributes-content-container {\n height: 100%;\n overflow: hidden;\n}\n\n.extra-attributes-dialog .modal-body {\n overflow-y: scroll;\n padding: 30px;\n}\n\n.extra-attributes-dialog .modal-body .form-control.disabled {\n background-color: #f8f9fa;\n}\n",".apply-properties-dialog .apply-properties {\n justify-content: center;\n align-items: center;\n width: fit-content;\n display: flex;\n height: 38px;\n}\n\n.apply-properties-dialog .apply-properties .loading-tip {\n display: inline-block;\n height: 16px;\n width: 16px;\n margin: 0;\n}\n",".tip-for-new-file {\n margin: 0 auto;\n padding: 2em 1em;\n align-self: flex-start; /* for repo wiki mode */\n}\n@media (min-width: 768px) {\n .tip-for-new-file {\n padding: 5em 8em;\n }\n}\n.big-new-file-button {\n padding: .9em 2em 1em; \n border-radius: 8px; \n margin: 0 0.75em 1.5em;\n cursor: pointer;\n width: 160px;\n background: #fff;\n border: 1px solid #d1d1d1;\n}\n.big-new-file-button:hover,\n.big-new-file-button:focus {\n border-color: #eb9205;\n color: #eb8205;\n}\n",".repo-info-bar {\n padding: 10px;\n margin: 10px 16px 0;\n border: 1px solid #e6e6dd;\n border-radius: 5px;\n /* background: #f8f8f8; */\n}\n\n.used-tag-list {\n list-style: none;\n}\n\n.used-tag-item {\n display: inline-block;\n margin: auto 15px;\n}\n\n.used-tag {\n display: inline-block;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n cursor: pointer;\n}\n\n.used-tag-name {\n margin: 0 0.25rem;\n}\n\n.used-tag-files {\n color: #888;\n font-size: 14px;\n}\n\n.used-tag-files:hover {\n cursor: pointer;\n text-decoration: underline;\n}\n\n.file-info {\n margin: 0 15px;\n display: inline-block;\n cursor: pointer;\n}\n\n.file-info a {\n color: #333;\n}\n\n.info-icon {\n color: #888;\n vertical-align: -3px;\n}\n\n.readme-dialog-edit {\n position: absolute;\n right: 16px;\n}\n\n.readme-dialog .modal-body {\n padding: 0 30px;\n}\n",".tr-drop-effect {\n background-color: #f8f8f8;\n}\n\n.star-empty {\n color: #d0d0d0;\n}\n\n.dir-icon {\n position: relative;\n text-align: center;\n max-width: 24px;\n}\n\n.dir-icon .locked {\n position: absolute;\n width: 1rem;\n height: 1rem;\n top: 50%;\n left: 50%;\n}\n\n.tag-list-title {\n overflow: hidden;\n}\n\n.dirent-sdoc-draft-identifier {\n display: inline-block;\n font-size: 14px;\n color: #888;\n background: #eee;\n padding: 0 8px;\n height: 20px;\n line-height: 20px;\n border-radius: 10px;\n margin-left: 6px;\n}\n",".grid-view {\n padding: 0.625rem 1rem 10rem;\n list-style: none;\n display: flex;\n flex-wrap: wrap;\n flex: 1;\n align-content: flex-start;\n}\n\n.grid-item {\n width: 134px;\n padding: 10px 4px;\n text-align: center;\n position: relative;\n line-height: 0;\n}\n\n.grid-item:hover .grid-file-img-link {\n background: #f8f8f8;\n}\n\n.grid-item:hover a {\n color: #eb8205;\n}\n\n.grid-file-img-link {\n width: 96px;\n height: 96px;\n margin: 0 auto 6px;\n position: relative;\n border-radius: 3px;\n font-size: 0;\n text-align: center;\n line-height: 0;\n}\n\n.grid-file-img-link .thumbnail {\n max-width: 88px;\n max-height: 88px;\n padding: 1px;\n background: #fff;\n border: 1px solid #ddd;\n border-radius: 1px;\n}\n\n.grid-file-img-link::before {\n content: '';\n display: inline-block;\n vertical-align: middle;\n height: 100%;\n}\n\n.grid-file-name {\n display: inline-block;\n max-width: 100%;\n overflow: hidden;\n word-break: keep-all;\n white-space: nowrap;\n text-overflow: ellipsis;\n line-height: 17px;\n font-size: 14px;\n}\n\n.grid-file-name-link {\n color: #333;\n font-size: 0.875rem;\n}\n\n.grid-file-locked-icon {\n position: absolute;\n bottom: 0;\n right: 10px;\n width: 16px;\n}\n\n.grid-selected-active {\n background-color: #f8f8f8;\n}\n\n.grid-link-selected-active {\n color: #eb8205;\n}\n\n.grid-drop-show {\n background: #f8f8f8;\n}\n",".main-panel {\n overflow: hidden;\n}\n\n.cur-view-content.lib-content-container {\n padding: 0;\n}\n\n.view-mode-container {\n display: flex;\n flex-direction: row !important;\n overflow: hidden !important;\n padding-left: 0 !important;\n min-height: 0;\n}\n\n.dir-colunm-view {\n display: flex;\n width: 100%;\n}\n\n.dir-content-nav {\n flex: 0 0 25%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background-color: #fff;\n border-right: 1px solid #eee;\n}\n\n.dir-content-nav:hover {\n overflow: auto;\n}\n\n.dir-content-main {\n flex: 1 0 74.5%;\n display: flex;\n flex-direction: column;\n overflow: auto;\n}\n\n/*tree view */\n.tree-view {\n margin-left: -9px;\n padding: 12px 12px 12px 0;\n line-height: 1.5;\n flex: 1;\n border: 1px solid rgba(69,170,242,0);\n}\n\n.tree-view-drop {\n border: 1px solid rgba(69,170,242);\n}\n\n.tree-view-drop::before {\n border-left: 1px solid rgba(69,170,242);\n content: '';\n margin-left: 8px;\n height: calc(100% + 24px);\n display: block;\n margin-top: -12px;\n float: left;\n}\n\n.tree-node-inner {\n position: relative;\n height: 24px;\n cursor: pointer;\n line-height: 1.625;\n}\n\n.tree-node-inner-hover {\n background-color: #f5f5f5;\n border-radius: 0.25rem;\n}\n\n.tree-node-inner .tree-node-text {\n padding-left: 2.8rem;\n width: calc(100% - 1.5rem);\n font-size: 14px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 24px;\n}\n\n.tree-node-inner .left-icon {\n position: absolute;\n display:flex;\n align-items:center;\n top: 0;\n left: 0;\n padding-left: 1.5rem;\n}\n\n.folder-toggle-icon {\n position: absolute;\n left: 0;\n color: #c0c0c0;\n line-height: 1.625;\n width: 1.5rem;\n display: flex;\n align-content: center;\n justify-content: center;\n}\n\n.tree-node-drop {\n background-color:rgb(255,239,178);\n}\n\n.tree-node-icon {\n display: inline-block;\n width: 1rem;\n text-align: center;\n color: #b0b0b0;\n}\n\n.tree-node-inner .right-icon {\n position: absolute;\n top: 0;\n right: 0.5rem;\n bottom: 0;\n width: 1rem;\n color: #888; \n z-index: 2; \n font-size: 0.8125rem;\n text-align: center;\n}\n\n.tree-node-inner .right-icon i {\n width: 100%;\n height: 100%;\n vertical-align: middle;\n font-size: 0.8125rem;\n line-height: 1.625rem !important;\n}\n\n.tree-node-hight-light {\n color: #fff;\n border-radius: 4px;\n background-color: #ff9800 !important;\n}\n\n.tree-node-hight-light i {\n color:#fff;\n}\n\n.dropdown-menu {\n min-width: 8rem;\n}\n\n.parent-path {\n position: relative;\n}\n\n.parent-path .form-text {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n margin-top: 0;\n margin-left: 0.25rem;\n font-size: 0.9375rem;\n}\n\n/* file layout */\n.dir-content-main .wiki-page-container {\n padding: 0 1rem 1.25rem;\n display: flex;\n flex: 1;\n}\n\n/* wiki-page-content */\n.wiki-page-content {\n flex: 1;\n}\n\n.wiki-page-content .ml-2 {\n text-decoration: underline;\n}\n\n.wiki-page-content .ml-2:hover {\n text-decoration: underline;\n color:#eb8205;\n}\n\n.wiki-page-content .wiki-open-file {\n width: 40px;\n height: 40px;\n font-size: 16px;\n border-radius: 50%;\n box-shadow: 0 3px 5px -1px rgba(0,0,0,.2), 0 6px 10px 0 rgba(0,0,0,.14), 0 1px 18px 0 rgba(0,0,0,.12);\n user-select: none;\n border: none;\n right: 10px;\n bottom: 10px;\n color: #999;\n z-index: 1050;\n background-color: #fff;\n cursor: pointer;\n}\n\n.wiki-page-content .wiki-open-file i {\n position: absolute;\n top: 12px;\n left: 12px;\n}\n\n.wiki-page-content .wiki-open-file:hover {\n background-color: #f6f6f6;\n}\n\n.wiki-page-content .sf-slate-viewer-scroll-container {\n padding: 0;\n background-color: #fff;\n border: none;\n overflow: inherit;\n}\n\n.wiki-page-content .sf-slate-viewer-article-container {\n display: block;\n width: 100%;\n}\n\n.dir-content-main .wiki-page-content .article {\n margin: 0;\n padding: 0 10px;\n border: none;\n max-width: fit-content;\n}\n\n.wiki-page-content a {\n cursor: pointer;\n}\n.wiki-page-ops {\n position: fixed;\n top: 10px;\n}\n\n@media (min-width: 768px) {\n .wiki-page-ops:before {\n content:'';\n border-left:1px solid #ddd;\n position:absolute;\n top:3px;\n left:-16px;\n bottom:3px;\n }\n}\n\n.wiki-page-list-item {\n word-break:break-all;\n line-height:1.6;\n margin:3px 0;\n}\n\n.wiki-page-link,\n.wiki-page-link:hover {\n font-size:1.15em;\n font-weight:normal;\n color:#444;\n margin-left:5px;\n}\n\n#wiki-page-last-modified {\n padding: 40px 10px;\n font-size:12px;\n color: #666;\n}\n\n.dir-content-resize {\n flex: 0 0 .5%;\n cursor: ew-resize;\n}\n\n.readonly-tip-message {\n display: flex;\n padding: 0.25rem 0;\n background-color: #FEFBDC;\n justify-content: center;\n align-items: center;\n}\n",".transfer-group-name {\n line-height: 2rem;\n margin-left: 10px;\n}\n\n.group-transfer-select .true__dropdown-indicator,\n.reviewer-select .true__indicator-separator {\n display: none;\n}\n",".manage-members {\n min-height: 200px;\n max-height: 300px;\n overflow-y: auto;\n padding: 0.5rem 0;\n}\n\n.manage-members-table th,\n.manage-members-table td {\n vertical-align: middle;\n text-align: left;\n}\n\n.add-members-select .true__indicator-separator {\n display: none;\n}\n\n.add-members {\n display: flex;\n justify-content: space-between;\n}\n\n.add-members .add-members-select {\n width: 385px;\n}\n\n.add-members .btn {\n width: 75px;\n}\n\n.group-error {\n margin-top: 10px;\n}\n\n.group-manage-members-dialog .search-group-members {\n color: #999;\n font-size: 14px;\n font-weight: normal;\n background: #f1f1f1;\n border: 1px solid transparent;\n margin: 12px 0 0;\n}\n\n.group-manage-members-dialog .search-group-members.active {\n background: #fff;\n border-color: #ccc;\n}\n\n.group-manage-members-dialog .search-group-members .input-group-text,\n.group-manage-members-dialog .search-group-members .input-group-input {\n background: transparent;\n color: inherit;\n border: none;\n}\n\n.group-manage-members-dialog .search-group-members.active .input-group-input {\n color: #495057;\n}\n\n.group-manage-members-dialog .search-group-members .input-group-input:focus {\n box-shadow: none;\n}\n","#group-setting-popover,\n#group-members-popover {\n top: 42px;\n right: 0;\n}\n.group-member-list-header {\n border-bottom: 1px solid #e3e3e5;\n padding-bottom: 10px;\n margin-bottom: 0px;\n}\n.group-member-list {\n max-height: 400px;\n border-top: 0;\n margin-top: 0;\n padding-top: 0;\n}\n.group-member-list .user-item {\n line-height: 2rem;\n}\n.group-member-list .user-item:hover {\n background-color: #f8f8f8;\n}\n.group-member-list .user-item .group-member-name {\n margin: 0 5px;\n max-width: 70%;\n}\n.group-member-list .user-item .group-member-admin {\n color: #888;\n font-size: 12px;\n}\n",".department-group-icon {\n margin-left: 0.25rem;\n color:#888;\n}\n\n.group-top-op-icon { /* for cur-view-path*/\n display: inline-block;\n font-size: 22px;\n margin: 3px 0 0 10px;\n}\n\n.cur-view-content-groups .group-list-panel {\n padding-bottom: 1rem;\n}\n\n.group-list-panel .group-item-heading {\n font-size: 1rem;\n font-weight: normal;\n padding: 0.25rem; \n border-bottom: 1px solid #e6e6e6;\n margin: 0.75rem 0 0; \n}\n\n.group-list-panel .group-item-empty-tip {\n color: #a4a4a4;\n text-align: center;\n padding: 4px 0;\n border-bottom: 1px solid #e5e5e5;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/commons.44d6cf61.css b/media/assets/frontend/static/css/commons.44d6cf61.css new file mode 100644 index 00000000000..fe8fd6561ac --- /dev/null +++ b/media/assets/frontend/static/css/commons.44d6cf61.css @@ -0,0 +1,15 @@ +@charset "UTF-8";.paginator .btn{min-width:2.375rem}body{overflow:hidden}.file-view-header{background:#fff;border-bottom:1px solid #c9c9c9;flex-shrink:0;padding:4px 10px}.file-title{font-size:1.2rem;font-weight:700;line-height:1.5;margin-bottom:0}.file-star{color:#999;font-size:.875rem;margin-left:.5rem}.file-star:focus,.file-star:hover{color:#999;text-decoration:none}.file-locked-icon{margin-left:.5rem}.meta-info{font-size:.8125rem}.file-view-content{background:#f4f4f4;border-right:4px solid transparent;padding:30px 0}.file-details-container{-webkit-animation:move .5s ease-in-out 1;animation:move .5s ease-in-out 1;background-color:#fff;box-shadow:-1px 0 3px 0 #ccc;height:100%;position:absolute;right:0;width:300px;z-index:50}.file-view-body .seafile-comment{width:100%}@media (min-width:768px){.file-view-body .seafile-comment{border-left:1px solid #e6e6dd;width:300px}}.image-file-view{position:relative;text-align:center}.image-file-view:before{content:" ";display:inline-block;font-size:0;height:100%;line-height:0;vertical-align:middle}#image-view{background:#fff;border:1px solid #eee;font-size:0;height:auto;line-height:0;max-height:calc(100% - 4px);max-width:calc(100% - 4px);padding:1px;width:auto}#img-next,#img-prev{background:#fff;border-radius:100%;color:#888;height:50px;line-height:50px;position:absolute;text-decoration:none;top:48%;width:50px}#img-prev{left:15px}#img-next{right:15px}#img-next:hover,#img-prev:hover{color:#333}.svg-file-view{position:relative;text-align:center}.svg-file-view:before{content:" ";display:inline-block;font-size:0;height:100%;line-height:0;vertical-align:middle}#svg-view{max-height:100%;max-width:100%}.pdf-file-view{overflow:hidden;position:relative}.pdf-file-view.file-view-content{border:0}.sf-hide{height:0;overflow:hidden}#mainContainer,#outerContainer,#viewerContainer{bottom:0;left:0;position:absolute;right:0;top:0}#viewerContainer{margin-bottom:33px;overflow:auto;padding:10px 0 0}#viewerContainer:focus{outline:none}.pdfViewer .page{background:#fff;border:none;box-shadow:0 0 6px #ccc;margin:0 auto 10px;position:relative}.page .loading-icon{left:50%;position:absolute;top:50%}#toolbarViewerMiddle{left:auto;right:0;-webkit-transform:none;transform:none}select#scaleSelect{background:#fff;font-size:12px;height:24px}#scaleSelectContainer:after{top:4px}#errorWrapper{background:#ff6e6e;color:#0c0c0d;padding:3px 6px}#errorWrapper,.toolbar{left:0;position:absolute;right:0;z-index:998}.toolbar{bottom:0}#toolbarContainer{border-top:1px solid #c9c9c9;box-shadow:none;height:auto}#loadingBar{background:transparent;border:0;height:auto;position:fixed;top:50%;width:auto}input#pageNumber{font-size:12px;height:20px;margin:0 0 0 9px;padding:0 5px}#numPages.toolbarLabel{margin:0;padding:0 7px}#sidebarContainer{background:#fff;border-top:none;bottom:0;position:absolute;top:0}#toolbarSidebar{background:#fff;height:auto}#thumbnailView{padding:0;width:100%}#thumbnails-header .title{font-size:1rem}#thumbnails-header .sf2-icon-x3{font-family:seafile-font2}#thumbnails-header .close-thumbnail-panel{color:#999;font-size:1rem}#thumbnails-header .close-thumbnail-panel:hover{color:#555}#thumbnailView .thumbnail{border:none;border-radius:0;border-radius:initial;float:none;height:auto;margin:0 1px 0 0;max-height:none;max-width:none;padding:10px 0;text-align:center;width:auto}#thumbnailView .thumbnail.selected{background:#f0f0f0}#thumbnailView .thumbnail .thumbnail-page-number{bottom:0;color:#999;font-size:.875rem;position:absolute;right:100%}#thumbnailView .thumbnail .thumbnailImage{border:1px solid #ddd;border-radius:3px}#thumbnailView .thumbnail.selected .thumbnailImage{border:2px solid #ff9800}#sidebarContent{inset-block:51.5px 0}.splitToolbarButton>.toolbarButton{float:none}#overlayContainer{background-color:rgba(0,0,0,.2);display:table;height:100%;position:absolute;width:100%;z-index:999}.dirent-info .img .thumbnail{border:0;border-radius:0;float:none;height:auto;margin:0;padding:0;width:auto}@media print{#wrapper{display:none}}.text-file-view .cm-editor{border:1px solid #ccc;box-shadow:0 0 6px #ccc;height:auto;margin:0 auto;max-width:950px;min-height:300px;width:calc(100% - 40px)}.text-file-view .cm-editor.cm-focused{outline:none}.text-file-view .cm-gutter,.text-file-view .cm-scroll{min-height:300px}.text-file-view{overflow:auto}.sf-code-mirror .cm-editor{font-size:13px;height:100vh}.sf-code-mirror .cm-editor .cm-scroller{overflow-x:visible;overflow-x:initial}@-webkit-keyframes commonLoading{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes commonLoading{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.common-loading-icon{-webkit-animation:commonLoading .9s linear infinite;animation:commonLoading .9s linear infinite;border:2px solid #eee;border-left-color:#aaa;border-radius:50%;display:inline-block;height:20px;width:20px}.common-loading-tip{display:block;margin:0 auto}.sdoc-dropdown-item-with-left-icon .sdoc-dropdown-item-content .sdoc-dropdown-item-content-icon{color:#444}.link-op-menu{background-color:#fff;border:1px solid #e5e5e5;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.08);display:flex;height:36px;padding:7px 8px;position:absolute;z-index:1000}.link-op-menu .link-op-menu-triangle{background:#fff;border-bottom:1px solid rgba(0,40,100,.12);border-right:1px solid rgba(0,40,100,.12);height:8px;position:absolute;right:50%;top:31px;-webkit-transform:rotate(45deg);transform:rotate(45deg);width:8px;z-index:1001}.link-op-menu-link{border-radius:2px;color:#212529;cursor:pointer;font-size:12px;line-height:20px;padding:0 5px}.link-op-menu-link:hover{background:#f1f1f1;color:#212529;text-decoration:none}.link-op-icons{border-left:1px solid #e5e5e5;margin-left:8px}.link-op-icon{align-items:center;border-radius:2px;color:#999;display:flex;margin-left:8px;padding:4px}.link-op-icon .sdocfont{color:#444;font-size:12px}.link-op-icon:hover{background:#f2f2f2}.seafile-ed-hovermenu-mouseclick{background-color:#e5e5e5}.sdoc-tooltip{pointer-events:none}.sdoc-tooltip .tooltip-inner{background-color:#303133;font-weight:lighter;text-align:start}.sdoc-tooltip.bs-tooltip-auto[x-placement^=bottom] .arrow:before{border-bottom-color:#303133}.sdoc-tooltip.bs-tooltip-auto[x-placement^=top]{margin-bottom:-2px}.sdoc-tooltip.bs-tooltip-auto[x-placement^=top] .arrow:before{border-top-color:#303133}.sdoc-tooltip.bs-tooltip-auto[x-placement^=right] .arrow:before{border-right-color:#303133}.sdoc-tooltip.bs-tooltip-auto[x-placement^=left] .arrow:before{border-left-color:#303133}.menu-group .sdoc-color-menu.menu-show{background:#e5e5e5;border-radius:2px}.menu-group .sdoc-color-menu .last-used-color-container{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center}.menu-group .sdoc-color-menu .last-used-color-container.disabled{padding-right:0}.menu-group .sdoc-color-menu .sdoc-color-toggle{align-items:center;display:flex;height:100%;justify-content:center}.menu-group .sdoc-color-menu .last-used-color-container:not(.disabled):hover,.menu-group .sdoc-color-menu .sdoc-color-toggle:hover{background-color:#e5e5e5}.menu-group .sdoc-color-menu.disabled .sdoc-color-toggle{display:none}.sdoc-color-menu .sdoc-color-icon{height:12px;line-height:12px;-webkit-transform:scale(.85);transform:scale(.85);width:12px}.sdoc-color-menu .last-used-color{border:1px solid rgba(0,0,0,.08);border-radius:1px;height:3px;margin-top:1px;width:14px}.sdoc-color-menu-popover .popover{left:-24px!important}.sdoc-color-menu-popover .sdoc-color-dropdown-menu{padding:0 0 12px;width:251px}.sdoc-color-menu-popover .sdoc-color-no-color-container{height:24px;margin-bottom:5px;width:100%}.sdoc-color-menu-popover .sdoc-color-no-color-content{border:1px solid rgba(0,0,0,.12);border-radius:2px;cursor:pointer;font-size:12px;height:100%;line-height:22px;text-align:center;width:100%}.sdoc-color-menu-popover .sdoc-color-default-colors-container{display:flex;flex-wrap:wrap}.sdoc-color-menu-popover .sdoc-color-item{border:.5px solid rgba(0,0,0,.08);height:20px;margin-bottom:3px;margin-right:3px;position:relative;width:20px}.sdoc-color-menu-popover .sdoc-color-item:not(.selected):hover:before{border:1px solid rgba(0,0,0,.24);content:"";height:calc(100% + 5px);left:-2.5px;pointer-events:none;position:absolute;top:-2.5px;width:calc(100% + 5px)}.sdoc-color-menu-popover .sdoc-color-item.selected:after{border:1px solid rgba(0,0,0,.88);content:"";height:calc(100% + 5px);left:-2.5px;pointer-events:none;position:absolute;top:-2.5px;width:calc(100% + 5px)}.sdoc-color-menu-popover .sdoc-color-item:hover{cursor:pointer}.sdoc-color-menu-popover .sdoc-color-item:nth-child(10n){margin-right:0}.sdoc-color-menu-popover .sdoc-color-sub-title{color:rgba(0,0,0,.4);font-size:11px;line-height:16px;margin:7px 0}.sdoc-color-menu-popover .sdoc-colors-divider{border-bottom:1px solid rgba(0,0,0,.08);height:1px;margin:0 0 8px;width:100%}.sdoc-color-menu-popover .sdoc-more-colors{align-items:center;display:flex;font-size:12px;height:30px;justify-content:space-between;padding:0 12px}.sdoc-color-menu-popover .sdoc-more-colors .sdocfont{color:#888;font-size:12px;-webkit-transform:scale(.6);transform:scale(.6)}.sdoc-color-menu-popover .sdoc-more-colors.show-pick{background-color:rgba(51,77,102,.06);cursor:pointer}.sdoc-more-colors-popover .popover{left:10px!important}.menu-group #button-sdoc-highlight-color .sdoc-color-icon{left:1px;position:relative}.menu-group .menu-group-item{background-color:#fff}.menu-group .menu-group-item .sdocfont,.sdoc-menu-with-dropdown .sdoc-menu-with-dropdown-icon .sdocfont{font-size:12px}.menu-group .menu-group-item.sdoc-menu-with-dropdown{align-items:center;border:0!important;display:flex;height:24px;justify-content:center;margin-right:10px;overflow:hidden;padding:0!important;width:36px}.menu-group .menu-group-item.sdoc-menu-with-dropdown.disabled{color:#999;width:24px!important}.sdoc-menu-with-dropdown:not(.disabled):hover{background:#f2f2f2;border-radius:2px}.sdoc-menu-with-dropdown .sdoc-menu-with-dropdown-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.sdoc-menu-with-dropdown .sdoc-menu-with-dropdown-triangle{align-items:center;display:flex;height:24px;justify-content:center;width:12px}.sdoc-menu-with-dropdown .sdoc-menu-with-dropdown-triangle .sdoc-menu-with-dropdown-triangle-icon{color:#999;font-size:12px}.sdoc-code-block-hover-menu-container{height:42px;max-width:250px;position:absolute;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;z-index:101}.sdoc-code-block-hover-menu-container .hover-menu-container{align-items:center;background-color:#fff;border:1px solid #e8e8e8;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.08);display:flex;height:36px;justify-content:space-around;padding:7px 8px;width:100%}.sdoc-code-block-hover-menu-container .hover-menu-container .active{background:#f2f2f2;color:#212529;text-decoration:none}.sdoc-code-block-hover-menu-container .hover-menu-container .op-item{border-radius:2px;color:#212529;font-size:12px;height:100%;line-height:20px;position:relative;text-align:center;width:100%}.sdoc-code-block-hover-menu-container .sdoc-code-block-hover-operation-item.sdoc-code-block-hover-operation-lang .op-item{padding:0 5px}.sdoc-code-block-hover-menu-container .hover-menu-container .sdoc-code-block-hover-operation-lang .icon-font{align-items:center;display:inline-flex;justify-content:center;margin-left:8px}.sdoc-code-block-hover-menu-container .sdoc-code-block-hover-operation-item{height:20px;justify-content:center;text-align:center;width:20px}.sdoc-code-block-hover-menu-container .sdoc-code-block-hover-operation-item.sdoc-code-block-hover-operation-lang{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.sdoc-code-block-hover-menu-container .sdoc-code-block-hover-operation-lang .icon-font{color:#999}.sdoc-code-block-hover-menu-container .sdoc-code-block-hover-operation-divider{background-color:#e5e5e5;height:20px;margin:0 8px;width:1px}.sdoc-code-block-hover-menu-container .hover-menu-container .op-item:hover{background:#f2f2f2;color:#212529;text-decoration:none}.sdoc-code-block-hover-menu-container .icon-font{color:#444;font-size:12px}.sdoc-langs-list-container{background-color:#fff;border:1px solid #dedede;border-radius:4px;box-shadow:0 0 5px #ccc;left:0;overflow-y:hidden;position:absolute;top:38px;width:200px}.sdoc-langs-list-container .sdoc-search-langs{padding:10px 10px 0}.sdoc-langs-list-container .sdoc-search-langs input{font-size:14px;max-height:30px}.sdoc-langs-list-container .langs-list-ul{list-style:none;max-height:280px;min-height:100px;overflow-y:auto;padding:10px}.sdoc-langs-list-container .langs-list-ul .langs-list-li{cursor:pointer;display:flex;font-size:13px;height:30px;justify-content:space-between;line-height:30px;padding-left:12px;position:relative;white-space:nowrap}.sdoc-langs-list-container .langs-list-ul .langs-list-li .active,.sdoc-langs-list-container .langs-list-ul .langs-list-li:hover{background-color:#f5f5f5}.sdoc-langs-list-container .langs-list-ul .langs-list-li .li-check-mark{opacity:0;padding:0 10px}.sdoc-langs-list-container .langs-list-ul .langs-list-li .li-checked{opacity:1}.sdoc-code-block-container{position:relative}.sdoc-code-block-pre{background:#fafafa;border:1px solid #f0f0f0}.sdoc-code-block-pre .sdoc-code-no-wrap{white-space:nowrap}.sdoc-code-block-pre .sdoc-code-no-wrap .sdoc-code-line>span{white-space:pre}.sdoc-code-block-code .sdoc-code-line{counter-increment:number;margin-left:32px;position:relative}.sdoc-code-block-code .sdoc-code-line:before{color:#ccc;content:counter(number);left:-50px;position:absolute;text-align:end;width:40px}.sdoc-code-line +.token.comment,.token.cdata,.token.doctype,.token.prolog{color:#708090}.sdoc-code-line +.token.punctuation{color:#999}.sdoc-code-line +.token.namespace{opacity:.7}.sdoc-code-line +.token.property,.token.boolean,.token.constant,.token.deleted,.token.number,.token.symbol,.token.tag{color:#905;padding:0}.sdoc-code-line +.token.selector,.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.string{color:#690}.language-css .token.string,.sdoc-code-line +.token.operator,.style .token.string,.token.entity,.token.url{color:#9a6e3a}.sdoc-code-line +.token.atrule,.token.attr-value,.token.keyword{color:#07a}.sdoc-code-line +.token.function,.token.class-name{color:#dd4a68}.sdoc-code-line +.token.regex,.token.important,.token.variable{color:#e90}.sdoc-code-line +.sdoc-code-line +.token.important,.token.bold{font-weight:700}.sdoc-code-line +.token.italic{font-style:italic}.sdoc-code-line +.token.entity{cursor:help}.mobile-image-footer-choice .ril__builtinButton{opacity:1}.ril-toolbar .ril__builtinButton{width:30px}.ril__deleteButton{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSJweCIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDojZmZmO2ZpbGwtb3BhY2l0eToxIiBkPSJNMTAuMi41Yy40MDIgMCAuOC4zNTIuODUuNzVsLjIgMS4zNTJoMy42MDJjLjM0NyAwIC42NDguMjk2LjY0OC41OTdzLS4zLjYwMi0uNjQ4LjYwMmgtMS4yNXYxMGMwIC4zOTgtLjIwNC44NDctLjUgMS4xOTktLjM1Mi4zNTItLjc1LjQ1LTEuMjA0LjQ1aC03Ljc1Yy0uNDQ5IDAtLjg5OC0uMi0xLjE5OS0uNDUtLjM0Ny0uMzUyLS41LS43NS0uNS0xLjJ2LTEwaC0xLjNBLjU4MS41ODEgMCAwIDEgLjUgMy4yNWMwLS4zLjMtLjYwMi42NDgtLjYwMkg0Ljd2LS4wOTdsLjItMS4zNTJDNC45NDguODUyIDUuMy41IDUuNzUuNVptLS41NTIgNS42MDJjLS4zOTggMC0uNjk5LjI5Ni0uNjk5LjY5OVYxMmMwIC4zOTguMzAxLjcuNy43LjQwMiAwIC43MDMtLjMwMi43MDMtLjdWNi44NTJjMC0uNDAzLS4zMDEtLjc1LS43MDQtLjc1Wm0tMy4yOTYgMGEuNjgzLjY4MyAwIDAgMC0uNzA0LjY5OVYxMmMwIC4zOTguMzAxLjcuNzA0LjcuMzk4IDAgLjY5OS0uMzAyLjY5OS0uN1Y2Ljg1MmMwLS40MDMtLjMwMS0uNzUtLjctLjc1Wm0wIDAiLz48L3N2Zz4=) no-repeat 50%}.ril__downloadButton{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSJweCIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDojZmZmO2ZpbGwtb3BhY2l0eToxIiBkPSJNOS4xMDIgOC44OThWMS42MDJDOS4xMDIuOTQ5IDguNjAyLjUgOCAuNWMtLjYwMiAwLTEuMTAyLjQ1LTEuMTAyIDEuMTAydjcuMjk2TDQuMiA2LjJhMS4wNDUgMS4wNDUgMCAwIDAtMS41LjA1MWMtLjM5OC4zOTgtLjM5OCAxLjEwMiAwIDEuNUw3LjI1IDEyLjNjLjM5OC40IDEuMTAyLjQgMS41IDBsNC41NS00LjU1Yy40LS4zOTguNC0xLjEwMi4wNTItMS41LS40MDMtLjM5OC0xLjEwMi0uMzk4LTEuNS0uMDVsLS4wNTEuMDVabS03LjUgNC40NTRoMTIuODQ3Yy42MDIgMCAxLjEwMi40NDkgMS4xMDIgMS4wOTcgMCAuNjUzLS41IDEuMDUxLTEuMTUzIDEuMDUxSDEuNjAyQy45NDkgMTUuNS41IDE1LjA1LjUgMTQuMzk4YzAtLjU0Ni40NS0xLjA0NiAxLjEwMi0xLjA0NlptMCAwIi8+PC9zdmc+) no-repeat 50%}.ril__downMoveButton{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSJweCIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDojZmZmO2ZpbGwtb3BhY2l0eToxIiBkPSJNOCAxNS41QTcuNDkyIDcuNDkyIDAgMCAxIC41IDhDLjUgMy44NTIgMy44NTIuNSA4IC41czcuNSAzLjM1MiA3LjUgNy41LTMuMzUyIDcuNS03LjUgNy41Wk04IDIuMTQ4QzQuOCAyLjE0OCAyLjE0OCA0LjgwMSAyLjE0OCA4YzAgMy4yIDIuNjUzIDUuODUyIDUuODUyIDUuODUyIDMuMiAwIDUuODUyLTIuNjUzIDUuODUyLTUuODUyIDAtMy4yLTIuNjUzLTUuODUyLTUuODUyLTUuODUyWm0wIDAiLz48cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDojZmZmO2ZpbGwtb3BhY2l0eToxIiBkPSJNOC41NSAxMGEuOTEuOTEgMCAwIDEtMS4xOTggMEw0LjQ0OSA3LjEwMkM0LjIgNi43NSA0LjIgNi4yNSA0LjUgNS45NDljLjMtLjMuOC0uMzQ3IDEuMTQ4LS4wNWwyLjMwMSAyLjMgMi4zMDEtMi4zYy4yLS4yNS41NS0uMzQ4Ljg1Mi0uMjk3LjI5Ni4wNDYuNTQ2LjI5Ni42NDguNjQ4LjA1LjMtLjA1LjY0OC0uMy44NTJabTAgMCIvPjwvc3ZnPg==) no-repeat 50%}.ril__upMoveButton{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSJweCIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDojZmZmO2ZpbGwtb3BhY2l0eToxIiBkPSJNOCAuNUE3LjQ5MiA3LjQ5MiAwIDAgMCAuNSA4YzAgNC4xNDggMy4zNTIgNy41IDcuNSA3LjVzNy41LTMuMzUyIDcuNS03LjVTMTIuMTQ4LjUgOCAuNVptMCAxMy4zNTJjLTMuMiAwLTUuODUyLTIuNjUzLTUuODUyLTUuODUyIDAtMy4yIDIuNjUzLTUuODUyIDUuODUyLTUuODUyIDMuMiAwIDUuODUyIDIuNjUzIDUuODUyIDUuODUyIDAgMy4yLTIuNjUzIDUuODUyLTUuODUyIDUuODUyWm0wIDAiLz48cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDojZmZmO2ZpbGwtb3BhY2l0eToxIiBkPSJNOC41NSA2YS45MS45MSAwIDAgMC0xLjE5OCAwTDQuNDQ5IDguODk4Yy0uMjUuMzUyLS4yNS44NTIuMDUxIDEuMTUzLjMuMy44LjM0NyAxLjE0OC4wNWwyLjMwMS0yLjMgMi4zMDEgMi4zYy4yLjI1LjU1LjM0OC44NTIuMjk3LjI5Ni0uMDQ2LjU0Ni0uMjk2LjY0OC0uNjQ4LjA1LS4zLS4wNS0uNjQ4LS4zLS44NTJabTAgMCIvPjwvc3ZnPg==) no-repeat 50%}.mobile-image-previewer .ril-toolbar .ril__toolbarRightSide{padding-right:14px}.image-footer-choice.mobile-image-footer-choice{background-color:#000;height:100px;padding:0;z-index:1052}.mobile-image-footer-choice{-ms-flex-pack:justify;-ms-flex-align:center;align-items:center;background:rgba(0,0,0,.6);border-radius:2px;border-top-left-radius:0;border-top-right-radius:0;bottom:0;color:#fff;display:-ms-flexbox;display:flex;height:30px;justify-content:space-between;padding:0 3px;position:absolute;width:100%}.mobile-image-footer-choice .image-footer-icon,.mobile-image-footer-choice .image-footer-icon span{-ms-flex-pack:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;justify-content:center}.mobile-image-footer-choice .image-footer-icon span{color:#dbdbdb;cursor:pointer;height:24px;width:24px}.image-footer-choice.mobile-image-footer-choice .image-footer-icon{-ms-flex-pack:justify;-ms-flex-direction:row-reverse;flex-direction:row-reverse;justify-content:space-between;margin:0 20px;width:100%}.mobile-image-footer-choice .image-footer-icon .image-footer-choice-item{background-color:#333;border-radius:5px;height:40px;width:40px}.ril__outer .ril-toolbar .ril-close{height:53px;width:30px}.ril__outer .ril__toolbarItem{height:50px}.ril__outer .ril__toolbarItem button{opacity:.7}.ril__outer .ril__toolbarItem button:hover{opacity:1}.sdoc-image-hover-menu-container{height:42px;position:absolute;width:auto;z-index:101}.sdoc-image-hover-menu-container .hover-menu-container{align-items:center;background-color:#fff;border:1px solid #e8e8e8;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.08);display:flex;height:36px;justify-content:flex-start;padding:7px 8px}.sdoc-image-hover-menu-container .hover-menu-container>span:not(:last-of-type){border-right:1px solid #e5e5e5;padding:0 8px}.sdoc-image-hover-menu-container .hover-menu-container .op-item{align-items:center;border-radius:2px;color:#212529;display:inline-flex;font-size:12px;height:24px;justify-content:center;min-width:24px;padding:0 5px;position:relative}.sdoc-image-hover-menu-container .hover-menu-container .op-item:hover{background:#f1f1f1;color:#212529;text-decoration:none}.sdoc-image-hover-menu-container .op-group-item:last-child .op-item{margin-left:8px}.sdoc-image-hover-menu-container .hover-menu-container .active{background:#f1f1f1}.sdoc-image-hover-menu-container .hover-menu-container .icon-font{color:#999;font-size:12px}.sdoc-image-hover-menu-container .sdoc-image-popover{align-items:flex-start;background-color:#fff;border:1px solid #e5e6e8;border-radius:2px;box-shadow:0 0 10px #ccc;display:flex;flex-direction:column;position:absolute;top:37px;white-space:nowrap;z-index:101}.sdoc-image-hover-menu-container .align-popover{left:80px;min-width:6rem}.sdoc-image-hover-menu-container .border-popover{align-items:center;flex-direction:row;height:80px;left:115px;padding:0 8px}.sdoc-image-hover-menu-container .border-popover .sdoc-dropdown-menu-item .sdoc-dropdown-item-content .sdoc-check-mark{-webkit-transform:translateX(-24px);transform:translateX(-24px)}.sdoc-image-hover-menu-container .border-popover .sdoc-dropdown-menu-item:hover{background-color:transparent}.sdoc-table-template-inner-popover{background-color:#fff;display:flex;flex-wrap:wrap;height:100%;padding:10px;width:310px}.sdoc-table-template-view-table{border:1px solid #e2e3e6;cursor:pointer;margin:10px 5px;padding:10px}.sdoc-table-template-view-table:hover{box-shadow:0 0 3px 2px #e2e3e6}.sdoc-table-template-view-table .sdoc-table-template-row .sdoc-table-template-cell{border-left:1px solid #e2e3e6;border-right:1px solid #e2e3e6;height:15px;width:28px}.sdoc-table-template-view-table .sdoc-table-template-row{display:flex}.sdoc-table-template-view-table .sdoc-table-template-row:first-child .sdoc-table-template-cell{border:none;border-top:1px solid #e2e3e6}.sdoc-table-template-view-table .sdoc-table-template-row:last-child .sdoc-table-template-cell{border-bottom:1px solid #e2e3e6}.sdoc-table-body-3f495d{background-color:#f1f3f6}.sdoc-table-header-3f495d{background-color:#3f495d;color:#fff}.sdoc-table-body-2367f2{background-color:#e1edff}.sdoc-table-header-2367f2{background-color:#2367f2;color:#fff}.sdoc-table-body-f77d21{background-color:#fff1e8}.sdoc-table-header-f77d21{background-color:#f77d21}.sdoc-table-body-0099f4{background-color:#e1f5ff}.sdoc-table-header-0099f4{background-color:#0099f4}.sdoc-selected-table-size-popover .popover{background-color:#fff;border-radius:2px;max-width:222px;min-height:100px;min-width:100px}.sdoc-selected-table-size-popover .sdoc-selected-table-size-tip{font-size:14px;height:35px;padding:5px 10px 10px;text-align:center}.sdoc-selected-table-size-popover .sdoc-table-size-select{padding:0 10px}.sdoc-selected-table-size-popover .sdoc-table-size-row{border-bottom:1px solid #ccc;flex-direction:row;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.sdoc-selected-table-size-popover .sdoc-table-size-row:first-child{border-top:1px solid #ccc}.sdoc-selected-table-size-popover .sdoc-table-size-cell{border-right:1px solid #ccc;height:15px;width:20px}.sdoc-selected-table-size-popover .sdoc-table-size-row .sdoc-table-size-cell:first-child{border-left:1px solid #ccc}.sdoc-selected-table-size-popover .sdoc-table-size-cell.active{background-color:#ffa94d}.sdoc-selected-table-size-popover .sdoc-table-size-select{margin-top:5px}.sdoc-selected-table-size-container .sdoc-selected-table-tools-container{border-bottom:1px solid #dedede;margin-bottom:10px;padding:10px 0}.sdoc-selected-table-size-popover .sdoc-selected-table-size-custom{align-items:center;display:flex;justify-content:space-between;min-height:32px;padding:0 10px}.sdoc-selected-table-size-popover .sdoc-selected-table-size-custom:hover{background:#f5f5f5;cursor:pointer}.sdoc-table-menu-group .sdoc-menu-with-dropdown .sdoc-menu-with-dropdown-icon{width:24px}.sdoc-table-menu-group .sdoc-menu-with-dropdown .sdoc-menu-with-dropdown-triangle{width:12px}.sdoc-table-menu-group .sdoc-color-menu .last-used-color-container{height:100%}.sdoc-table-menu-popover .sdoc-dropdown-menu-item{font-size:14px}.sdoc-context-menu .sdoc-table-context-menu{display:block;font-size:.875rem}.sdoc-table-context-menu .insert-number{margin-left:50px}.sdoc-table-context-menu .insert-number-input{height:20px;margin-right:.25rem;padding-left:4px;padding-right:4px;text-align:center;transition:none;width:36px}.sdoc-table-context-menu .dropdown-item:hover .insert-number-input{background-color:transparent;border:1px solid #fff;color:#fff}.sdoc-table-context-menu .dropdown-item:disabled .insert-number-input{color:#adb5bd}.sdoc-table-wrapper .sdoc-table-columns-header{height:12px;overflow:hidden;top:-12px;width:100%}.sdoc-table-wrapper .sdoc-table-columns-header .sdoc-table-column-header{background-color:#f3f5f7;border-right:1px solid rgba(0,0,0,.08);flex-shrink:0}.sdoc-table-wrapper .sdoc-table-rows-header{height:100%;left:-12px;position:absolute;top:1px;width:12px}.sdoc-table-wrapper .sdoc-table-row-header{background-color:#f3f5f7;border-bottom:1px solid rgba(0,0,0,.08);width:100%}.sdoc-table-wrapper .sdoc-table-rows-columns-header{background-color:#f3f5f7;border-bottom:1px solid rgba(0,0,0,.08);border-right:1px solid rgba(0,0,0,.08);border-top-left-radius:3px;height:13px;left:-12px;position:absolute;top:-12px;width:13px}.sdoc-table-wrapper .sdoc-table-column-header.range-selected,.sdoc-table-wrapper .sdoc-table-row-header.range-selected,.sdoc-table-wrapper .sdoc-table-rows-columns-header.range-selected{background-color:#81868f!important}.sdoc-table-wrapper .sdoc-table-column-header.range-selected-tip,.sdoc-table-wrapper .sdoc-table-row-header.range-selected-tip,.sdoc-table-wrapper .sdoc-table-rows-columns-header.range-selected-tip{background-color:#e9ebed}.sdoc-table-wrapper .sdoc-table-add-element-icon-content{background-color:#ccc;border-radius:50%;color:#fff;cursor:default;height:12px;line-height:10px;text-align:center;width:12px;z-index:1}.sdoc-table-wrapper .sdoc-table-add-element-icon-content:hover{cursor:pointer}.sdoc-table-wrapper{margin:16px 0;width:100%}.sdoc-table-wrapper+.sdoc-table-wrapper{margin-top:32px}.sdoc-table-wrapper .sdoc-table-scroll-wrapper{cursor:default;max-width:100%;overflow-x:auto;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.sdoc-table-wrapper.scroll .sdoc-table-scroll-wrapper.scroll-at-center:before,.sdoc-table-wrapper.scroll .sdoc-table-scroll-wrapper.scroll-at-right:before{background:linear-gradient(270deg,transparent,rgba(0,0,0,.1));content:"";height:100%;left:0;pointer-events:none;position:absolute;top:0;width:8px}.sdoc-table-wrapper.scroll .sdoc-table-scroll-wrapper.scroll-at-center:after,.sdoc-table-wrapper.scroll .sdoc-table-scroll-wrapper.scroll-at-left:after{background:linear-gradient(90deg,transparent,rgba(0,0,0,.1));content:"";height:100%;pointer-events:none;position:absolute;right:0;top:0;width:8px}.sdoc-table-wrapper .sdoc-table-container{cursor:text;display:grid;overflow:hidden;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.sdoc-table-wrapper .table-row{height:auto}.sdoc-table-wrapper .table-cell{border-bottom:1px solid #ccc;border-right:1px solid #ccc;line-height:1.5;padding:10px;vertical-align:top}.sdoc-table-wrapper .cell-selected{caret-color:transparent;position:relative}.sdoc-table-wrapper .table-row-height-just{bottom:-2.5px;height:5px;left:0;width:100%;z-index:1}.sdoc-table-wrapper .table-row-height-just:hover{cursor:row-resize;z-index:2}.sdoc-table-wrapper .table-row-height-just.resizing .table-row-height-just-color-tip{background-color:#2d7ff9;border-radius:1px;height:2px;margin-top:1.5;width:100%}.sdoc-table-wrapper .table-cell-width-just{height:100%;top:0;width:5px;z-index:1}.sdoc-table-wrapper .table-cell-width-just:hover{cursor:col-resize;z-index:2}.sdoc-table-wrapper .table-cell-width-just.resizing .table-cell-width-just-color-tip{background-color:#2d7ff9;border-radius:1px;height:100%;margin-left:1.5px;width:2px}.sdoc-table-wrapper .background-color-tip-blue{background-color:#2d7ff9!important}.sdoc-table-wrapper .sdoc-table-selected-range .table-cell ::selection{background-color:transparent;background-color:initial}.sdoc-link-hover-menu-container{height:42px;position:absolute;width:auto;z-index:101}.sdoc-link-hover-menu-container .hover-menu-container{align-items:center;background-color:#fff;border:1px solid #e8e8e8;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.08);display:flex;height:36px;justify-content:flex-start;padding:7px 8px}.sdoc-link-hover-menu-container .hover-menu-container>span:not(:last-of-type){border-right:1px solid #e5e5e5;padding-right:8px}.sdoc-link-hover-menu-container .hover-menu-container .op-item{align-items:center;border-radius:2px;color:#212529;display:inline-flex;font-size:12px;height:24px;justify-content:center;min-width:24px;padding:0 5px;position:relative}.sdoc-link-hover-menu-container .hover-menu-container .op-item:hover{background:#f1f1f1;color:#212529;text-decoration:none}.sdoc-link-hover-menu-container .op-group-item:last-child .op-item{margin-left:8px}.sdoc-link-hover-menu-container .hover-menu-container .link-style-icon-active{background:#f1f1f1}.sdoc-link-hover-menu-container .hover-menu-container .op-tooltip:hover:after{align-items:center;background-color:#fff;border:1px solid #e8e8e8;border-radius:3px;box-shadow:0 0 5px #ccc;color:#212529;content:attr(op-item-tooltip);display:flex;font-size:12px;height:30px;justify-content:center;left:-20px;position:absolute;top:-40px;width:70px}.sdoc-link-hover-menu-container .hover-menu-container .icon-font{color:#999;font-size:12px}.sdoc-link-hover-menu-container .sdoc-file-display-style-popover{align-items:flex-start;background-color:#fff;border:1px solid #e5e6e8;border-radius:2px;box-shadow:0 0 10px #ccc;display:flex;flex-direction:column;padding:8px 0;position:absolute;right:-80px;top:37px;white-space:nowrap;z-index:101}.sdoc-file-render:hover{background-color:#e5e5e5}.sdoc-file-render .sdoc-file-link-icon{color:#ff9800;padding-right:5px}.sdoc-file-link-hover-menu-container{height:42px;position:absolute;width:auto;z-index:101}.sdoc-file-link-hover-menu-container .hover-menu-container{align-items:center;background-color:#fff;border:1px solid #e8e8e8;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.08);display:flex;height:36px;justify-content:flex-start;padding:7px 8px}.sdoc-file-link-hover-menu-container .hover-menu-container>span:not(:last-of-type){border-right:1px solid #e5e5e5;padding-right:8px}.sdoc-file-link-hover-menu-container .hover-menu-container .op-item{align-items:center;border-radius:2px;color:#212529;display:inline-flex;font-size:12px;height:24px;justify-content:center;min-width:24px;padding:0 5px;position:relative}.sdoc-file-link-hover-menu-container .hover-menu-container .op-item:hover{background:#f1f1f1;color:#212529;text-decoration:none}.sdoc-file-link-hover-menu-container .op-group-item:last-child .op-item{margin-left:8px}.sdoc-file-link-hover-menu-container .hover-menu-container .link-style-icon-active{background:#f1f1f1}.sdoc-file-link-hover-menu-container .hover-menu-container .op-tooltip:hover:after{align-items:center;background-color:#fff;border:1px solid #e8e8e8;border-radius:3px;box-shadow:0 0 5px #ccc;color:#212529;content:attr(op-item-tooltip);display:flex;font-size:12px;height:30px;justify-content:center;left:-20px;position:absolute;top:-40px;width:70px}.sdoc-file-link-hover-menu-container .hover-menu-container .icon-font{color:#999;font-size:12px}.sdoc-file-link-hover-menu-container .sdoc-file-display-style-popover{align-items:flex-start;background-color:#fff;border:1px solid #e5e6e8;border-radius:2px;box-shadow:0 0 10px #ccc;display:flex;flex-direction:column;padding:8px 0;position:absolute;right:-80px;top:37px;white-space:nowrap;z-index:101}.sdoc-file-link-render:hover{background-color:#e5e5e5}.sdoc-file-card-link{background-color:#f3f3f3;border:1px solid transparent;border-radius:4px;cursor:pointer;display:inline-block;height:50px;margin-bottom:-3px;position:relative;width:420px}.sdoc-file-link-render .sdoc-file-link-icon{color:#ff9800;padding-right:5px}.sdoc-file-card-link .sdoc-file-link-icon :first-child{font-size:24px}.sdoc-file-card-link .sdoc-file-link-icon{left:12px;position:absolute;top:6px}.sdoc-file-card-link .sdoc-file-text-link{left:42px;overflow:hidden;position:absolute;text-overflow:ellipsis;top:16px;white-space:nowrap;width:330px}.sdoc-file-card-link .sdoc-file-text-link a{color:#333;text-decoration:none}.sdoc-callout-white-wrapper{padding:5px 0}.sdoc-callout-container{border-radius:5px;border-style:solid;border-width:1px;padding:10px;position:relative}.sdoc-callout-container .sdoc-callout-placeholder{color:#b8b6b6;left:10px;pointer-events:none;position:absolute;top:15px}.sdoc-callout-color-selector-container{background-color:#fff;border:1px solid #eee;border-radius:3px;padding:10px;position:absolute;z-index:100}.sdoc-callout-color-selector-container .sdoc-color-selector-list{display:flex;margin:0;padding:0}.sdoc-callout-color-selector-container .sdoc-color-selector-list .sdoc-callout-color-item{border-radius:3px;border-style:solid;border-width:1px;cursor:pointer;height:16px;list-style:none;margin-right:10px;position:relative;width:16px}.sdoc-callout-color-selector-container .sdoc-color-selector-list .sdoc-callout-color-item:last-child{margin-right:0}.sdoc-callout-color-selector-container .sdoc-color-selector-list .sdoc-callout-color-item .sdoc-callout-color-checked-icon{font-size:12px;left:1px;position:absolute;top:-2px}.sdoc-rebase-btn-group{color:#aaa}.sdoc-rebase-btn-group .sdoc-rebase-btn{cursor:pointer}.sdoc-rebase-current-changes-start{background-color:#cae8fe}.sdoc-rebase-current-changes{background-color:rgba(202,232,254,.8)}.sdoc-rebase-incoming-changes{background-color:#dee8fe}.sdoc-rebase-current-changes>:first-child,.sdoc-rebase-incoming-changes>:first-child{margin:0;padding:.8em 0 .8em .2em}.sdoc-rebase-incoming-changes-end{background-color:#d4d4fe}.header-menu{align-items:center;border-right:1px solid #e5e6e8;display:flex;height:100%;padding:6px 8px;position:relative;width:140px}.header-menu .header-toggle{align-items:center;cursor:pointer;display:flex;flex:1 1;height:24px;justify-content:space-between;padding-left:5px}.header-menu .header-toggle .active{font-size:14px}.header-menu .header-toggle-disabled{color:#bdbdbd;cursor:inherit}.header-menu .header-toggle:not(.header-toggle-disabled):hover{background:#f2f2f2;border-radius:2px}.header-menu .header-toggle .sdocfont{align-items:center;color:#999;cursor:pointer;display:inline-flex;font-size:12px;height:24px;justify-content:center;margin-left:8px;width:12px}.header-menu .header-popover{align-items:flex-start;background-color:#fff;border:1px solid #e5e6e8;border-radius:2px;box-shadow:0 0 10px #ccc;display:flex;flex-direction:column;left:8px;padding:8px 0;position:absolute;top:42px;width:180px;z-index:101}.header-menu .header-popover .sdoc-dropdown-menu-item{font-size:14px;height:auto;line-height:1;padding:9px 16px 9px 28px}.header-menu .header-popover .sdoc-dropdown-menu-item .sdoc-check-mark{color:#798d99;left:8px;position:absolute;-webkit-transform:scale(.8);transform:scale(.8)}.menu-group .menu-group-item.sdoc-menu-with-dropdown.sdoc-font-family-menu{max-width:76px;width:76px}.menu-group .menu-group-item.sdoc-menu-with-dropdown.sdoc-font-family-menu.disabled{width:70px!important}.sdoc-font-family-menu .sdoc-menu-with-dropdown-icon,.sdoc-font-family-menu .sdoc-menu-with-dropdown-icon div{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:64px}.sdoc-font-family-menu .sdoc-menu-with-dropdown-icon div{color:#212529;padding-left:5px}.menu-group .menu-group-item.sdoc-menu-with-dropdown.sdoc-font-family-menu.disabled .sdoc-menu-with-dropdown-icon{width:70px!important}.menu-group .menu-group-item.sdoc-menu-with-dropdown.sdoc-font-family-menu.disabled .sdoc-menu-with-dropdown-icon div{color:#bdbdbd;padding-right:5px;width:70px}.sdoc-font-family-menu-popover .sdoc-dropdown-menu-title-name{color:gray;cursor:default;font-size:14px;padding:8px 10px}.menu-group .sdoc-menu-with-dropdown.sdoc-font-size-menu{width:46px}.menu-group .sdoc-menu-with-dropdown.sdoc-font-size-menu.disabled{width:34px!important}.menu-group .sdoc-font-size-menu .sdoc-menu-with-dropdown-icon,.menu-group .sdoc-font-size-menu .sdoc-menu-with-dropdown-icon div{font-size:14px;width:34px}.menu-group .sdoc-font-size-menu .sdoc-menu-with-dropdown-icon div{color:#212529;padding-left:5px}.menu-group .sdoc-menu-with-dropdown.sdoc-font-size-menu.disabled .sdoc-menu-with-dropdown-icon div{color:#bdbdbd;padding-right:5px}.sdoc-font-size-menu-popover .sdoc-dropdown-menu-item .sdoc-check-mark{color:#798d99;left:8px;position:absolute;-webkit-transform:scale(.8);transform:scale(.8)}.sdoc-font-size-menu-popover .sdoc-font-size-menu-container{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;overflow-x:hidden;overflow-y:scroll;padding:8px 0}.sdoc-font-size-menu-popover .sdoc-dropdown-menu-item{font-size:14px}.menu-group .menu-group-item.sdoc-insert-toolbar-btn{align-items:center;display:flex;justify-content:space-between;width:76px}.menu-group .menu-group-item.sdoc-insert-toolbar-btn.disabled{color:#bdbdbd;width:64px!important}.menu-group .sdoc-insert-toolbar-btn .sdoc-menu-with-dropdown-icon{flex:1 1;font-size:14px;justify-content:flex-start;padding-left:6px;padding-right:2px}.sdoc-insert-menu-popover .popover{min-width:200px}.sdoc-context-toolbar{background-color:#fff;border:1px solid #e8e8e8;border-radius:3px;box-shadow:0 0 0 0 hsla(0,0%,6%,.05),0 3px 6px hsla(0,0%,6%,.1),0 9px 24px hsla(0,0%,6%,.2);display:none;height:42px;position:absolute;width:auto;z-index:101}.sdoc-side-menu,.sdoc-side-menu-popover{position:absolute}.sdoc-side-menu{background-color:#fff;border:1px solid rgba(0,0,0,.12);border-radius:4px;box-shadow:0 2px 12px 2px rgba(68,73,77,.16);padding:8px 0;-webkit-transform:translateX(-200px);transform:translateX(-200px);width:200px;z-index:999}.sdoc-side-menu-insert-below-popover .popover{background-color:#fff;border-radius:2px;cursor:pointer;left:-6px!important;min-height:120px;min-width:150px}.sdoc-side-toolbar-container{left:0;position:absolute;top:0}.sdoc-side-toolbar-container .sdoc-side-op-icon{border-radius:3px;color:#bdbdbd;cursor:pointer;height:24px;margin-right:1px;padding:0 3px;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.sdoc-side-toolbar-container .sdoc-side-op-icon :first-child{font-size:14px}.sdoc-side-toolbar-container .side-op-icon-active{background-color:#f2f2f2;border-radius:2px}.sdoc-custom-table-size-dialog .sdoc-custom-table-size-container{width:100%}.sdoc-custom-table-size-dialog .sdoc-custom-table-size-item{width:calc(50% - 16px)}.sdoc-files-tree{display:flex;flex:1 1;flex-direction:column;overflow:auto;padding:16px;width:100%}.sdoc-files-tree .sdoc-file-info{border-radius:2px;height:1.5rem;line-height:1.625;overflow:hidden;padding-left:2.8rem;position:relative;text-overflow:ellipsis;white-space:nowrap}.sdoc-files-tree .sdoc-file-info:hover{background:#fdefb9;box-shadow:inset 0 0 1px #999;cursor:pointer}.sdoc-files-tree .sdoc-file-info .sdoc-file-icon-container{height:100%;left:0;padding-left:1.5rem;position:absolute;width:2.8rem}.sdoc-files-tree .sdoc-file-info .sdoc-file-icon{color:#9aa0ac}.sdoc-files-tree .sdoc-file-info.active{background:#ff8000;box-shadow:inset 0 0 1px #999;color:#fff}.sdoc-files-tree .sdoc-file-info.active .sdoc-file-icon{color:#fff}.sdoc-files-tree .sdoc-file-icon-toggle{font-size:12px!important;height:1.5rem;left:0;line-height:1.5rem!important;position:absolute;text-align:center;-webkit-transform:scale(.8);transform:scale(.8);width:1.5rem}.sdoc-files-tree .sdoc-file-info.expanded .sdoc-file-icon-toggle{-webkit-transform:rotate(90deg) scale(.8);transform:rotate(90deg) scale(.8)}.sdoc-files-tree .sdoc-file-info .sdoc-file-name{font-size:14px}.sdoc-files-tree .sdoc-folder-children{padding-left:20px}.sdoc-files-tree .sdoc-folder-children-empty{color:#999;padding:4px 20px}.sdoc-file-select-dialog{max-width:620px}.sdoc-file-select-dialog .sdoc-file-select-modal{width:620px}.sdoc-file-select-dialog .sdoc-file-select-container{display:flex}.sdoc-file-select-dialog .sdoc-file-select-left{border-right:1px solid #e9ecef;padding:12px 8px;width:150px}.sdoc-file-select-dialog .sdoc-file-select-left .sdoc-file-select-nav-item{border-radius:3px;cursor:pointer;display:inline-block;padding:5px 0 5px 8px;width:100%}.sdoc-file-select-dialog .sdoc-file-select-left .sdoc-file-select-nav-item:hover{background-color:#f5f5f5}.sdoc-file-select-dialog .sdoc-file-select-container .sdoc-file-select-left .selected-sdoc-file-select-nav-item{background-color:#ff8000;color:#fff}.sdoc-file-select-dialog .sdoc-file-select-right{display:flex;flex-direction:column;height:440px;padding:0;width:468px}.sdoc-file-select-dialog .sdoc-file-select-footer{align-items:center;border-top:1px solid #e9ecef;display:flex;justify-content:flex-end;padding:1rem}.sdoc-file-select-dialog .highlight-bg-color{background-color:#ff8000;border-color:#ff8000}.sdoc-outline-wrapper{bottom:0;display:flex;margin:20px 30px 20px 16px;min-height:0;position:absolute;top:0;z-index:101}.sdoc-outline{display:flex;flex:1 1;flex-direction:column;font-size:14px;min-height:0;position:relative;width:220px}.sdoc-outline-header{align-items:center;border-bottom:1px solid #dbdbdb;color:#999;display:flex;justify-content:space-between;padding:.25rem 0}.sdoc-outline-header__title{font-size:14px;line-height:1.1;margin:0!important}.sdoc-outline-header__close{cursor:pointer;font-size:14px}.sdoc-outline-header__close:hover{color:#555}.sdoc-outline-list-container{display:flex;flex:1 1;flex-direction:column;list-style:none;overflow-x:hidden;overflow-y:hidden;padding:.5rem 0}.sdoc-outline-list-container:hover{overflow-y:auto}.sdoc-outline-item{cursor:pointer;padding:4px 0}.sdoc-outline-item.active{color:#ff8000}.sdoc-outline-menu{align-items:center;background:#fff;border-radius:0 50% 50% 0;box-shadow:0 0 6px rgba(0,0,0,.12);color:#888;cursor:pointer;display:flex;font-size:14px;height:28px;justify-content:center;left:-16px;line-height:1;position:absolute;top:20px;width:28px}.sdoc-outline-menu.disabled{opacity:.65}.sdoc-outline-menu:not(.disabled):hover{color:#333}.sdoc-editor-container .article{font-size:11pt}.sdoc-editor-container .sdoc-code-block-pre{font-size:10pt}.sdoc-editor-container .article p{margin:0;padding:5px 0}.element-icon{color:#444!important}.sdoc-icon-btn{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.sdoc-icon-btn:hover{cursor:pointer}.sdoc-icon-btn .sdocfont{color:#999;font-size:16px}.sdoc-icon-btn:hover .sdocfont{color:#5a5a5a}.sdoc-editor-container{display:flex;flex:1 1;flex-direction:column;min-height:0}.sdoc-editor-container .sdoc-editor-toolbar{align-items:center;background-color:#fff;border-bottom:1px solid #e5e6e8;display:flex;height:44px;justify-content:center;padding:0 10px;position:relative;-webkit-user-select:none;user-select:none;z-index:102}.sdoc-editor-container .sdoc-editor-content{background:#f5f5f5;display:flex;height:calc(100% - 44px);position:relative;width:100%}.sdoc-editor-container .sdoc-absolute-wrapper{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.sdoc-editor-container .sdoc-scroll-container{bottom:0;left:0;overflow:auto;position:absolute;right:0;top:0;z-index:100}.sdoc-editor-container .sdoc-article-container{margin:0 auto;padding-bottom:20px;padding-top:20px;position:relative;top:0;width:794px}.sdoc-editor-container .sdoc-editor-content .article{background-color:#fff;border:1px solid #e5e6e8;box-shadow:0 0 15px rgba(0,0,0,.06);min-height:800px;padding:40px 60px;width:794px}.sdoc-editor-container .sdoc-editor-content .article>div{caret-color:blue}.sdoc-editor-container .sdoc-editor-content .article .sdoc-drag-cover:before{content:" ";display:inline-block;left:-60px;position:absolute;width:59px}.sdoc-editor-container .sdoc-editor-content .article .sdoc-draging{border-bottom:2px solid #2383e2}.sdoc-editor-container .seafile-block-container{position:relative}.sdoc-editor-container .seafile-block-container .comment-count{align-items:center;background:rgba(0,0,0,.3);border-radius:4px;color:#fff;display:flex;height:15px;justify-content:center;line-height:18px;pointer-events:none;position:absolute;right:-55px;top:0;width:15px}.sdoc-editor-container .seafile-block-container .comment-count__btn{font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.sdoc-editor-container .article .sdoc-header-1,.sdoc-editor-container .article .sdoc-header-2,.sdoc-editor-container .article .sdoc-header-3,.sdoc-editor-container .article .sdoc-header-4,.sdoc-editor-container .article .sdoc-header-5,.sdoc-editor-container .article .sdoc-header-6,.sdoc-editor-container .article .sdoc-header-subtitle,.sdoc-editor-container .article .sdoc-header-title{font-weight:700;line-height:1.1;margin:1.2em 0 .4em}.sdoc-editor-container .article .sdoc-header-2,.sdoc-editor-container .article .sdoc-header-3{line-height:1.5}.sdoc-editor-container .article .sdoc-header-4{line-height:1.125}.sdoc-editor-container .article .list-container{margin:0;padding-left:1.2em!important}.sdoc-editor-container .article .list-container .sdoc-li-blod::marker{font-weight:700}.sdoc-editor-container .article .sdoc-checkbox-container{padding:0 2px}.sdoc-editor-container .article .sdoc-checkbox-container .sdoc-checkbox-input-wrapper{align-items:baseline;display:flex}.sdoc-editor-container .article .sdoc-checkbox-container .sdoc-checkbox-input-wrapper .sdoc-checkbox-input{margin-right:5px;vertical-align:middle}.sdoc-editor-container .article .sdoc-checkbox-container .sdoc-checkbox-input-wrapper .sdoc-checkbox-content-container{width:calc(100% - 1em);word-break:normal}.sdoc-editor-container .article .sdoc-image-wrapper{display:inline-block;padding:6px 6px 6px 0;position:relative}.sdoc-editor-container .article .sdoc-image-inner{display:inline-block;position:relative}.sdoc-editor-container .article .sdoc-image-content{align-items:flex-start;display:flex;flex-direction:column}.sdoc-editor-container .article .sdoc-image-content :first-child{position:relative}.sdoc-editor-container .article .sdoc-image-content .sdoc-image-caption-input-wrapper{background-color:transparent;border:0;color:#8a8f8d;margin-top:8px;outline:none;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}.sdoc-editor-container .article .sdoc-image-content .sdoc-image-caption-input-wrapper::-webkit-input-placeholder{color:#bec0bf}.sdoc-editor-container .article .sdoc-image-content .sdoc-image-caption-input-wrapper::placeholder{color:#bec0bf}.sdoc-editor-container .article .image-selected{box-shadow:0 0 0 2px #007bff}.sdoc-editor-container .article .image-resizer{background-color:#007bff;border:1px solid #fff;bottom:-5px;cursor:se-resize;height:10px;position:absolute;right:-5px;width:10px}.sdoc-editor-container .article .image-full-screen{background-color:#fff;border:1px solid rgba(0,40,100,.12);border-radius:3px;box-shadow:0 2px 5px 0 rgba(0,0,0,.2);display:inline-block;height:26px;line-height:20px;padding:2px;position:absolute;right:-32px;text-align:center;top:0;-webkit-user-select:none!important;user-select:none!important;width:26px;z-index:1000}.sdoc-editor-container .article .image-full-screen:hover{background-color:#efefef;display:block}.sdoc-editor-container .article .image-size{background-color:#4c4c4c;border-radius:3px;bottom:-25px;color:#fff;display:inline-block;font-size:12px;height:22px;left:100%;line-height:12px;padding:5px;position:absolute;-webkit-transform:translateX(5px);transform:translateX(5px);white-space:nowrap;z-index:1}.sdoc-editor-container .article .caret-item .caret-name:before{content:attr(name)}.sdoc-editor-container .article .caret-item .caret-name{display:none}.sdoc-editor-container .article .caret-item:hover .caret-name{display:block}.sdoc-editor-container .article .virtual-link{color:#eb8205}.sdoc-editor-container .article .virtual-link:hover{text-decoration:underline;text-underline-position:under}.sdoc-dropdown-menu,.sdoc-dropdown-menu .sdoc-dropdown-menu-container{min-width:12rem;padding:8px 0}.sdoc-dropdown-menu .sdoc-dropdown-menu-divider{border-top:1px solid #e9ecef;height:0;margin:.5rem 0;overflow:hidden;width:100%}.sdoc-dropdown-menu .sdoc-dropdown-menu-item{align-items:center;display:flex;height:28px;padding:4px 24px;-webkit-user-select:none;user-select:none;width:100%}.sdoc-dropdown-menu .sdoc-dropdown-menu-item.disabled,.sdoc-dropdown-menu .sdoc-dropdown-menu-item.disabled .sdoc-dropdown-item-content-icon{color:#c2c2c2!important}.sdoc-dropdown-menu .sdoc-dropdown-menu-item:hover{background-color:#f5f5f5;cursor:pointer}.sdoc-dropdown-menu .sdoc-dropdown-menu-item.disabled:hover{background-color:transparent;background-color:initial;color:#c2c2c2;cursor:default}.sdoc-dropdown-menu .sdoc-dropdown-menu-item .sdocfont{font-size:12px;line-height:12px}.sdoc-dropdown-menu .sdoc-dropdown-menu-item .sdoc-dropdown-item-content{align-items:center;display:flex;flex:1 1;font-size:14px;justify-content:flex-start}.sdoc-dropdown-menu .sdoc-dropdown-item-content .sdoc-dropdown-item-content-icon{margin-right:10px}.sdoc-dropdown-menu .sdoc-dropdown-item-right-icon{color:#999;-webkit-transform:scale(.6);transform:scale(.6)}.sdoc-dropdown-menu .sdoc-dropdown-item-with-left-icon{min-height:32px;padding:3px 12px}.sdoc-dropdown-menu .sdoc-check-mark{color:#798d99;-webkit-transform:scale(.8);transform:scale(.8)}.sdoc-sub-dropdown-menu .popover{left:-8px!important}.sdoc-sub-dropdown-menu .bs-popover-auto[x-placement^=left]{left:8px!important}.sdoc-comment-caret-list{background:#fff;border:1px solid #ededed;border-radius:5px;max-height:200px;max-width:200px;min-width:150px;overflow:auto;padding:10px 0;position:absolute;z-index:1049}.sdoc-comment-caret-list .comment-participant-item{padding:5px 0}.sdoc-comment-caret-list .comment-participant-item.active,.sdoc-comment-caret-list .comment-participant-item:hover{background:#f5f5f5;cursor:pointer}.sdoc-comment-caret-list .comment-participant-item .comment-participant-container{align-items:center;display:flex;padding:0 8px}.sdoc-comment-caret-list .comment-participant-item .comment-participant-avatar{border-radius:50%;height:16px;vertical-align:middle;width:16px}.sdoc-comment-caret-list .comment-participant-item .comment-participant-name{flex:1 1;font-size:14px;margin-left:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdoc-comment-list-container{position:absolute}.sdoc-comment-list-container .comment-ui-container{background-color:#edf2fa;border-radius:8px;box-shadow:0 0 2px rgba(0,0,0,.04);cursor:pointer;margin-bottom:10px;padding:16px 0}.sdoc-comment-list-container .comment-ui-container.active{background:hsla(0,0%,100%,.92);box-shadow:0 1px 3px rgba(0,0,0,.3),0 4px 8px 3px rgba(0,0,0,.15);left:-24px;position:relative}.sdoc-comment-list-container .comment-item-selected-text-container{align-items:center;border-radius:8px 8px 0 0;display:flex;height:32px;overflow:hidden;padding:6px 16px;width:100%}.sdoc-comment-list-container .comment-item-selected-text-container .sdoc-comment-quote{flex-shrink:0;font-size:12px}.sdoc-comment-list-container .comment-item-selected-text-container .comment-item-selected-text{flex:1 1;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdoc-comment-list-container .comment-item-list{margin:0;max-height:350px;min-width:280px;overflow-x:hidden;overflow-y:auto}.sdoc-comment-list-container .comment-item{cursor:pointer;padding:16px 16px 0;position:relative}.sdoc-comment-list-container .comment-delete-shadow{align-items:center;background-color:rgba(0,0,0,.7);color:#fff;display:flex;flex-direction:column;inset:0;padding-top:10px;position:absolute;z-index:1}.sdoc-comment-list-container .comment-delete-shadow .delete-tip{margin-bottom:10px}.sdoc-comment-list-container .comment-ui-container.active .comment-item:hover{background:#fafafa}.sdoc-comment-list-container .comment-item .comment-author,.sdoc-comment-list-container .comment-item .comment-header{align-items:center;display:flex;justify-content:space-between}.sdoc-comment-list-container .comment-item .comment-content{margin-left:30px;margin-top:10px;padding-bottom:10px;width:222px;word-break:break-all}.sdoc-comment-list-container .comment-header .comment-author__avatar{align-items:center;display:flex}.sdoc-comment-list-container .comment-header .comment-author__avatar img{border-radius:50%;height:32px;width:32px}.sdoc-comment-list-container .comment-header .comment-author__info{align-items:flex-start;cursor:pointer;display:flex;flex-direction:column;justify-content:center;overflow:hidden;padding-left:10px;text-overflow:ellipsis;white-space:nowrap}.sdoc-comment-list-container .comment-header .comment-author__info .name{color:#1f1f1f;font-size:14px;font-weight:500;line-height:20px}.sdoc-comment-list-container .comment-header .comment-author__info .time{align-items:center;color:#444746;display:inline-flex;font-size:12px;line-height:16px}.sdoc-comment-list-container .comment-header .sdoc-unread-message-tip{background-color:#fc6440;border-radius:50%;display:inline-block;height:6px;margin-left:6px;width:6px}.sdoc-comment-list-container .comment-header .sdoc-unread-message-text-tip{background-color:#fc6440;border-radius:8px;color:#fff;display:none;height:16px;margin-left:6px;padding:0 5px}.sdoc-comment-list-container .comment-ui-container:hover .comment-header .sdoc-unread-message-tip{display:none}.sdoc-comment-list-container .comment-ui-container:hover .comment-header .sdoc-unread-message-text-tip{display:inline-block}.sdoc-comment-list-container .comment-ui-container .comment-operation{align-items:center;background-color:#fff;border-radius:50%;color:#464d5a;display:flex;height:32px;justify-content:center;overflow:hidden;padding:0!important;width:32px}.sdoc-comment-list-container .comment-ui-container.active .comment-operation:hover{background-color:#f0f0f0;cursor:pointer}.sdoc-comment-list-container .comment-ui-container .comment-operation .sdoc-confirm{color:#20a0ff;font-weight:800}.sdoc-comment-menu{border-radius:2px;padding:0}.sdoc-popover-menu{background:#fff;height:auto;padding:8px 0;width:140px}.sdoc-popover-menu__item{background-color:transparent;background-color:#fff;color:#202428;cursor:default;font-size:14px;height:28px;padding:4px 24px;vertical-align:middle}.sdoc-popover-menu__item:hover{background-color:#20a0ff;color:#fff}.sdoc-comment-list-container .comment-editor-wrapper{cursor:text;display:flex;flex-direction:column;justify-content:center;padding:0 16px}.sdoc-comment-list-container .comment-editor-wrapper .comment-editor{background:#fff;border:1px solid rgba(0,0,0,.12);border-radius:4px;margin-bottom:10px;max-height:120px;min-height:40px;min-width:240px;overflow:auto;padding:8px;word-break:break-all}.sdoc-comment-list-container .comment-editor-wrapper .comment-editor:empty:before{content:attr(placeholder);opacity:.6}.sdoc-comment-list-container .comment-editor-wrapper .comment-editor:focus-visible{outline:none}.sdoc-comment-list-container .comment-editor-wrapper .comment-editor:focus{border:1px solid rgba(0,0,0,.12)}.sdoc-comment-list-container .comment-editor-wrapper .comment-editor-user-info{align-items:center;display:flex;margin-bottom:10px}.sdoc-comment-list-container .comment-editor-wrapper .comment-editor-user-info .comment-editor-user-img{border-radius:50%;height:30px;margin-right:8px;overflow:hidden;width:30px}.sdoc-comment-list-container .comment-editor-wrapper .comment-editor-user-info .comment-editor-user-name{flex:1 1;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;user-select:none;white-space:nowrap}.sdoc-comment-list-container .comment-editor-wrapper .comment-operations{display:flex;justify-content:flex-end}.sdoc-comment-container .comment-container-right .element-comments-count{align-items:center;color:#999;display:flex;height:16px;justify-content:center;left:-22px;position:absolute;width:16px}.sdoc-comment-container .comment-container-right .element-comments-count:hover{color:#333;cursor:pointer}.sdoc-comment-container .comment-container-right .element-comments-count-value{color:#fff;cursor:pointer;font-size:12px;height:14px;left:0;line-height:13px;pointer-events:none;position:absolute;text-align:center;top:0;width:16px}.sdoc-comments-participants-popover .popover{margin-top:0;max-width:282px}.sdoc-comments-participants-popover .sdoc-comments-participants-editor-container{min-height:160px;width:280px}.sdoc-comments-participants-popover .sdoc-selected-participants{background-color:#f6f6f6;border-bottom:1px solid #dde2ea;border-radius:3px 3px 0 0;min-height:34px;padding:5px}.sdoc-comments-participants-popover .sdoc-selected-participant{align-items:center;background:#eaeaea;border-radius:10px;display:inline-flex;font-size:13px;height:20px;margin-right:10px;padding:0 8px 0 2px}.sdoc-comments-participants-popover .sdoc-selected-participant img{border-radius:50%;height:16px;vertical-align:middle;width:16px}.sdoc-comments-participants-popover .sdoc-selected-participant .sdoc-selected-participant-name{color:#16181b;flex:1 1;margin-left:4px}.sdoc-comments-participants-popover .sdoc-selected-participant .sdoc-selected-participant-delete{align-items:center;cursor:pointer;display:flex;height:20px;justify-content:flex-end;padding-top:1px;width:20px}.sdoc-comments-participants-popover .sdoc-selected-participant .sdoc-selected-participant-delete .sdocfont{color:#909090;display:inline-block;font-size:12px}.sdoc-comments-participants-popover .sdoc-selected-participant .sdoc-selected-participant-delete:hover .sdocfont{color:#5a5a5a}.sdoc-comments-participants-popover .sdoc-search-collaborators{padding:10px}.sdoc-comments-participants-popover .sdoc-search-collaborators input{height:28px}.sdoc-comments-participants-popover .sdoc-searched-collaborators{align-items:center;display:flex;flex-direction:column;max-height:200px;overflow:auto;padding:10px}.sdoc-comments-participants-popover .sdoc-searched-collaborators.sdoc-searched-collaborators-empty-tip{align-items:flex-start;font-size:14px;opacity:.5}.sdoc-comments-participants-popover .sdoc-searched-collaborator{align-items:center;border-radius:2px;clear:both;color:#212529;display:flex;font-size:14px;font-weight:400;height:30px;padding:.25rem 0;width:100%}.sdoc-comments-participants-popover .sdoc-searched-collaborator:hover{background-color:#f8f9fa;cursor:pointer}.sdoc-comments-participants-popover .sdoc-searched-collaborator img{border-radius:50%;height:16px;margin-left:10px;vertical-align:middle;width:16px}.sdoc-comments-participants-popover .sdoc-searched-collaborator .sdoc-selected-participant-name{color:#16181b;flex:1 1;margin-left:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdoc-comments-participants-popover .sdoc-searched-collaborator .sdoc-searched-collaborator-operation{align-items:center;display:flex;height:20px;justify-content:center;width:20px}.sdoc-comments-participants-popover .sdoc-searched-collaborator .sdoc-searched-collaborator-operation .sdocfont{color:#798d99;font-size:12px}.global-comments-popover .comments-panel-body__header .comments-participants-container{align-items:center;display:flex;height:42px;max-width:100%;padding-top:6px;position:relative;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.global-comments-popover .comments-panel-body__header .comments-participants-editor-target{background-color:transparent;height:100%;left:-1px;position:absolute;top:0;width:1px;z-index:-1}.global-comments-popover .comments-panel-body__header .comment-participant-avatar{border-radius:50%;margin-right:-.5rem;vertical-align:middle}.global-comments-popover .comments-panel-body__header .comment-participant-avatar img{background:#ced4da no-repeat 50%/cover;border:2px solid #fff;border-radius:50%;color:#868e96;display:inline-block;font-size:.875rem;font-weight:600;height:28px;line-height:2rem;position:relative;text-align:center;-webkit-user-select:none;user-select:none;vertical-align:bottom;width:28px}.global-comments-popover .comments-panel-body__header .add-comments-participants{align-items:center;background-color:#fff;border:1px solid #fff;border-radius:50%;bottom:-3px;cursor:pointer;display:flex;height:20px;justify-content:center;margin-right:-.5rem;position:relative;width:20px}.global-comments-popover .add-comments-participants .sdocfont{border-radius:50%;color:#ff8000;font-size:16px}.global-comments-popover .comment-participants-more{align-items:center;background-color:rgba(0,0,0,.6);border:2px solid #fff;border-radius:50%;display:flex;height:28px;justify-content:center;left:0;overflow:hidden;position:absolute;top:0;width:28px}.global-comments-popover .comment-participants-more .sdocfont{color:#fff;font-size:12px}.global-comments-popover{height:540px;position:absolute;right:10px;top:50px;width:340px;z-index:103}.global-comments-popover .comments-panel-wrapper{background:#fff;border:1px solid #eaecef;border-radius:4px;box-shadow:0 2px 10px rgba(0,0,0,.12);display:flex;flex-direction:column;height:100%}.global-comments-popover .comments-panel-header{align-items:center;border-bottom:1px solid #eaecef;display:flex;height:46px;justify-content:space-between;padding:0 16px}.global-comments-popover .comments-panel-header .title{color:#212529;font-size:16px;font-weight:500}.global-comments-popover .comments-panel-header .comments-panel-header-right{display:flex}.global-comments-popover .comments-panel-header-right .sdoc-icon-btn:not(:last-child){margin-right:4px}.global-comments-popover .comments-panel-header .sdoc-icon-btn .sdocfont{font-weight:700}.global-comments-popover .comments-panel-body{background-color:#f5f5f5;display:flex;flex:1 1;flex-direction:column;min-height:0;position:relative}.global-comments-popover .comments-panel-body__header{display:flex;flex-direction:column;height:80px;padding:0 16px}.global-comments-popover .comments-panel-body__header .comments-types-count{align-items:center;display:flex;height:38px;justify-content:space-between;padding:16px 0}.global-comments-popover .comments-panel-body__header .comment-type{color:#212529;font-size:12px}.global-comments-popover .comments-panel-body__header .comment-count-tip{color:#999;font-size:12px}.global-comments-popover .comments-panel-body__content{display:flex;flex:1 1;flex-direction:column;overflow:auto;padding:16px}.global-comments-popover .comments-panel-body__content .sdoc-comment-list-container{position:relative}.global-comments-popover .comments-panel-body__content .comment-item-list{max-width:308px}.global-comments-popover .comments-panel-body__content .comment-ui-container.active{left:0}.global-comments-popover .comments-panel-body__content .comment-ui-container.active.sdoc-resolved,.global-comments-popover .comments-panel-body__content .comment-ui-container.sdoc-resolved{background:#f5f5f5}.sdoc-dropdown-menu .dropdown-item{color:#212529;font-size:14px}.global-comments-popover .comments-panel-body .sdoc-doc-comment-editor-container{background-color:#fff;left:16px;position:absolute;top:78px;width:calc(100% - 32px)}.global-comments-popover .sdoc-doc-comment-editor-container .comment-ui-container.active{left:0;margin-bottom:0}.global-comments-popover .sdoc-comment-list-container .comment-ui-container{background-color:#fff;border:1px solid #c7c7c7}.global-comments-popover .sdoc-comment-list-container .comment-item-selected-text-container{background-color:#f5f5f5;border-bottom:1px solid #c7c7c7}.sdoc-comment-container{left:0}.sdoc-comment-container,.sdoc-comment-container .comment-container-main{position:absolute;top:0;width:794px}.sdoc-comment-container .comment-container-right{left:100%;position:absolute}.sdoc-comment-container .comment-container-right .comment-add-wrapper{left:-22px;position:absolute;width:20px}.sdoc-comment-container .comment-container-right .comment-add-wrapper .sdocfont{background-color:#fff;color:#999}.sdoc-comment-container .comment-container-right .comment-add-wrapper .sdocfont:hover{color:#333;cursor:pointer}.sdoc-comment-container .comment-container-right .comment-list-wrapper{left:14px;position:absolute;width:280px}.seahub-switch.small .custom-switch-indicator{border-radius:6px;cursor:pointer;height:12px;width:22px}.seahub-switch.small .custom-switch-indicator.disabled{cursor:default}.seahub-switch.small .custom-switch-indicator:before{height:8px;width:8px}.seahub-switch.small .custom-switch-input:checked~.custom-switch-indicator:before{left:12px}.sf-plain-editor{display:flex;flex:1 1;min-height:0;min-width:0;position:relative}.sf-plain-editor-main{inset:0;position:absolute}.sf-plain-editor-left-panel{background-color:#fff;border-right:1px solid #e6e6dd}.sf-plain-editor-left-panel,.sf-plain-editor-right-panel{height:100%;overflow-x:hidden;overflow-y:scroll;width:50%}.sf-plain-editor-right-panel{background-color:#fafaf9}.rendered-markdown.article{padding:0 20px 20px}.rendered-markdown tbody tr:first-child{font-weight:400}.sdoc-editor-container .sdoc-editor-content.readonly{height:100%}.sdoc-editor-container .sdoc-editor-content.no-outline .sdoc-absolute-wrapper{display:flex;min-height:0;position:relative}.sdoc-editor-container .sdoc-editor-content.no-outline .sdoc-article-container{margin-left:0!important}.sdoc-editor-container.mobile .sdoc-editor-content.readonly .sdoc-article-container{padding:0;width:auto}.sdoc-editor-container.mobile .sdoc-editor-content.readonly .article{padding:1rem;width:100%!important}.sdoc-diff{margin:0 -5px;overflow:hidden;padding:0 5px}.sdoc-editor-page-wrapper .tip-message{color:#999;display:inline-flex;font-size:12px;height:27px;line-height:27px;margin-left:12px;opacity:.75;width:-webkit-max-content;width:max-content}.sdoc-editor-page-wrapper .tip-message .sdocfont{font-size:14px;padding-top:1px}.sdoc-draft-menu{margin-left:.5rem;position:relative}.sdoc-draft-identifier{background:#eee;border-radius:10px;color:#888;cursor:pointer;display:inline-block;font-size:14px;height:20px;line-height:20px;padding:0 8px}.sdoc-draft-identifier:hover{background:#dbdbdb}.sdoc-draft-menu .draft-popover{background-color:#fff;border:1px solid #e5e6e8;border-radius:2px;box-shadow:0 0 10px #e5e6e8;left:0;padding:8px 0;position:absolute;top:25px;width:178px;z-index:10}.sdoc-draft-menu .draft-popover .draft-menu-item{cursor:pointer;padding:4px 12px;width:100%}.sdoc-draft-menu .draft-popover .draft-menu-item:hover{background-color:#f5f5f5}.sdoc-file-tag-quick-review-container{display:flex;margin-left:.5rem}.sdoc-file-tag-quick-review-container .sdoc-review-circle{border:.125rem solid #fff;border-radius:50%;cursor:pointer;display:inline-block;height:1rem;margin-right:-.5rem;width:1rem}.sdoc-editor-page-header .doc-info{align-items:center;display:flex}.sdoc-editor-page-header .doc-info .doc-name{color:#212529;font-size:18px;font-weight:700}.sdoc-editor-page-header .doc-info .doc-icon{color:#999;cursor:pointer;font-size:14px;line-height:1;margin-left:.5rem}.sdoc-editor-page-header .doc-info .doc-icon:hover{color:#333;margin-left:.5rem}.sdoc-editor-page-header .doc-info .sdoc-link{font-size:14px}.sdoc-editor-page-header .doc-info .sdoc-freezed{color:red}.sdoc-editor-page-header .doc-state{font-size:.8125rem}.sdoc-editor-page-header .doc-info .sdoc-revision-avatar{margin-right:6px;width:44px}.sdoc-editor-page-header .sdoc-revision-info .sdoc-revision-avatar{height:44px;margin-right:6px;overflow:hidden;width:44px}.sdoc-editor-page-header .sdoc-revision-avatar img{height:100%;width:100%}.sdoc-editor-page-header .sdoc-revision-info .sdoc-revision-detail{display:flex;flex-direction:column}.sdoc-editor-page-header .sdoc-revision-info .sdoc-revision-order{background:#eee;border-radius:10px;color:#888;cursor:default;display:inline-block;font-size:14px;height:20px;line-height:20px;margin-left:.5rem;padding:0 8px}.sdoc-editor-page-header .sdoc-revision-info .sdoc-revision-published-tip{background:#5eba00;border-radius:10px;color:#fff;cursor:default;display:inline-block;font-size:14px;height:20px;line-height:20px;margin-left:.5rem;padding:0 8px}.sdoc-editor-page-header .sdoc-revision-info .sdoc-revision-source-doc{align-items:center;cursor:pointer;display:inline-flex;height:20px;justify-content:center;margin-left:.5rem;width:20px}.sdoc-editor-page-header .sdoc-revision-info .sdoc-revision-source-doc .sdoc-jump-to{color:#999;font-size:14px}.sdoc-editor-page-header .sdoc-revision-info .sdoc-revision-source-doc:hover .sdoc-jump-to{color:#333}.sdoc-tip-dialog .highlight-bg-color{background-color:#ff8000;border-color:#ff8000}.sdoc-tip-dialog .sdoc-tip-dialog-custom-container{align-items:center;display:flex;flex-direction:column;padding-bottom:40px;padding-top:46px}.sdoc-tip-dialog .sdoc-tip-dialog-custom-container .sdoc-tip-img-container{align-items:center;display:flex;height:140px;justify-content:center;overflow:hidden;width:140px}.sdoc-tip-dialog .sdoc-tip-dialog-custom-container .sdoc-tip-content{padding:10px 16px 64px;text-align:center;width:100%}.sdoc-tip-dialog .sdoc-tip-dialog-custom-container .sdoc-tip-operation-btn{min-width:140px}.sdoc-tip-dialog .sdoc-tip-dialog-custom-container.publishing{height:180px;justify-content:center;padding:2rem}.sdoc-tip-dialog .sdoc-tip-dialog-custom-container.publishing .common-loading-tip{border-width:4px;height:30px;width:30px}.sdoc-tip-dialog .sdoc-tip-dialog-custom-container.publishing .sdoc-tip-content{margin-top:8px;padding:0}.seadoc-switch.small .custom-switch-indicator{border-radius:6px;height:12px;width:22px}.seadoc-switch.small .custom-switch-indicator:before{height:8px;width:8px}.seadoc-switch.small .custom-switch-input:checked~.custom-switch-indicator:before{left:12px}.sdoc-toggle-revision-changes .custom-switch{padding-left:0}.sdoc-more-revision-operations-dropdown .sdoc-more-revision-operations-toggle{align-items:center;background-color:#f0f0f0;border-radius:15px;color:#666;display:flex;height:30px;justify-content:center;width:66px}.sdoc-more-revision-operations-dropdown .sdoc-more-revision-operations-toggle:hover{color:#333;cursor:pointer}.sdoc-more-revision-operations-dropdown .sdoc-more-revision-operations-toggle .sdoc-revise{margin-right:10px}.sdoc-more-revision-operations-dropdown .sdoc-more-revision-operations-toggle .sdocfont{font-size:14px}.sdoc-more-revision-operations-dropdown .dropdown-item{height:64px;padding:12px}.sdoc-more-revision-operations-dropdown .sdoc-more-revision-operation{align-items:flex-start;display:flex;flex-direction:column;width:373px}.sdoc-more-revision-operations-dropdown .sdoc-more-revision-operation-title .sdocfont{font-size:14px;margin-right:6px}.sdoc-more-revision-operations-dropdown .sdoc-more-revision-operation-title-name{color:#212529;font-size:14px}.sdoc-more-revision-operations-dropdown .sdoc-more-revision-operation-describe{color:#999;font-size:13px;padding-left:20px;white-space:break-spaces;width:100%}.sdoc-revision-operation-toggle{color:#999;display:none;font-size:16px}.revisions-body .sdoc-revision:hover .sdoc-revision-operation-toggle,.revisions-dialog .revisions-body .sdoc-revision.operating .sdoc-revision-operation-toggle{display:inline-block}.sdoc-revision-operation-toggle:hover{color:#333;cursor:pointer}.sdoc-revision-menu-popover .popover{margin-top:0}.revisions-dialog{height:calc(100% - 56px);max-width:700px;width:700px}.revisions-dialog .modal-content{height:100%;overflow:hidden}.revisions-dialog .revisions-body{height:calc(100% - 50px);overflow:hidden;padding:0}.revisions-dialog .sdoc-revisions-container{display:flex;flex-direction:column;height:100%;width:100%}.revisions-dialog .sdoc-revisions-container .sdoc-revisions-header{align-items:center;border-bottom:1px solid rgba(0,40,100,.12);display:flex;height:41px;justify-content:center;margin:0 16px;width:calc(100% - 32px)}.revisions-dialog .sdoc-revisions-container .sdoc-revisions-content{flex:1 1;overflow-x:hidden;overflow-y:scroll;padding:0 16px 16px}.revisions-dialog .sdoc-revisions-container .sdoc-revisions-list{align-items:center;display:flex;flex-direction:column;justify-content:center}.revisions-dialog .sdoc-revisions-container.loading{align-items:center;justify-content:center}.revisions-dialog .revisions-body .sdoc-revision{align-items:flex-start;border-bottom:1px solid rgba(0,40,100,.12);display:flex;height:41px;justify-content:center;width:100%}.revisions-dialog .revisions-body .sdoc-revision.operating{background-color:#f5f5f5}.revisions-dialog .revisions-body .sdoc-revision:hover{background-color:#f5f5f5;cursor:pointer}.revisions-dialog .sdoc-revision-name-header,.revisions-dialog .sdoc-revision-time-header,.revisions-dialog .sdoc-revision-user-header{color:#999;padding-left:9px}.revisions-dialog .sdoc-revision .sdoc-revision-name,.revisions-dialog .sdoc-revision .sdoc-revision-user{align-items:center;display:flex;height:100%;overflow:hidden;padding-left:9px}.revisions-dialog .sdoc-revision .sdoc-revision-name-content{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.revisions-dialog .sdoc-revision .sdoc-revision-time{align-items:center;display:flex;height:100%;overflow:hidden;padding-left:9px}.revisions-dialog .revisions-body .sdoc-revision.loading{align-items:center;border-bottom:none;height:40px}.revisions-dialog .sdoc-revision.loading:hover{background-color:transparent;background-color:initial}.revisions-dialog .sdoc-revision-operations{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.sdoc-revisions-count{border:1px solid #e5e5e5;border-radius:3px;color:#666;height:30px;line-height:28px;margin-left:1rem;padding:0 16px;text-align:center;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.sdoc-revisions-count:hover{color:#333;cursor:pointer}.sdoc-revision-changes-container{border:1px solid #e5e5e5;border-radius:3px;height:32px}.sdoc-revision-changes-container .sdoc-revision-changes-divider{border-right:1px solid #e5e5e5;height:100%;width:1px}.sdoc-revision-changes-container .sdoc-revision-changes-last,.sdoc-revision-changes-container .sdoc-revision-changes-next{height:100%;padding:0 8px}.sdoc-revision-changes-container .sdoc-revision-changes-last .sdocfont,.sdoc-revision-changes-container .sdoc-revision-changes-next .sdocfont{color:#000;opacity:.5}.sdoc-revision-changes-container .sdoc-revision-changes-last:hover,.sdoc-revision-changes-container .sdoc-revision-changes-next:hover{background-color:#f5f5f5;cursor:pointer}.sdoc-revision-changes-container .sdoc-revision-changes-last:hover .sdocfont,.sdoc-revision-changes-container .sdoc-revision-changes-next:hover .sdocfont{opacity:.75}.collaborators-popover.popover{max-width:300px;width:300px}.collaborators-popover .popover-container{display:flex;flex-direction:column;justify-content:center;margin:0;max-height:360px;padding:0}.collaborators-popover .popover-header{align-items:center;background:#fff;border-bottom:1px solid #ededed;color:#212529;display:flex;font-size:16px;font-weight:600;height:50px;justify-content:center;min-height:50px}.collaborators-popover .popover-container .content-list{display:flex;flex:1 1;flex-direction:column;min-height:0;overflow:auto;padding:5px 0}.content-list .collaborator-details{align-items:center;display:flex;height:32px;line-height:32px;padding:3px 12px;width:100%}.content-list .collaborator-details:hover{background-color:#f8f8f8}.content-list .collaborator-details .collaborator-tag{background-color:#08db6b;border-radius:50%;height:5px;margin-right:8px;overflow:hidden;width:5px}.content-list .collaborator-details .collaborator-avatar{border-radius:50%;height:20px;margin-right:8px;overflow:hidden;width:20px}.content-list .collaborator-details .collaborator-name{color:#212529;max-width:calc(100% - 20px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdoc-notification-container .sdoc-notification-count{background:#fc6440;border-radius:50%;color:#fff;font-size:12px;min-height:20px;min-width:20px;padding:2px;position:absolute;right:-10px;text-align:center;top:-7px;-webkit-transform:scale(.7);transform:scale(.7)}.sdoc-tag-popover{padding-bottom:0;width:230px}.sdoc-popover-container .sdoc-tag-search-input{margin-bottom:10px}.sdoc-popover-container .sdoc-tag-list-container{max-height:180px;overflow-y:auto}.sdoc-tag-item{align-items:center;cursor:pointer;display:flex;height:30px;justify-content:space-between;padding:3px 10px;width:100%}.sdoc-tag-item:hover{background-color:#eee}.sdoc-tag-item .sdoc-tag-badge-container{align-items:center;display:flex;height:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.sdoc-tag-item .sdoc-tag-badge{font-size:13px;font-weight:400;margin-right:10px;overflow:hidden;text-overflow:ellipsis}.sdoc-tag-item .sdoc-tag-added-mark{width:18px}.sdoc-create-tag{background-color:#fff;border-bottom:none;border-top:1px solid #eee;cursor:pointer;font-size:14px;font-weight:400;overflow:hidden;padding:8px 10px;text-overflow:ellipsis;white-space:nowrap}.sdoc-create-tag:hover{background-color:#f5f5f5}.sdoc-create-tag .add-icon{font-size:13px;font-weight:600;margin-right:6px}.doc-ops,.doc-ops .op-item{align-items:center;display:flex}.doc-ops .op-item{cursor:pointer;margin-left:1rem;position:relative}.doc-ops .op-item .sdocfont{color:#666;cursor:pointer;font-size:18px}.doc-ops .op-item .sdocfont:hover{color:#333;cursor:pointer}.doc-ops .popover-wrapper{width:300px}#root,#wrapper,body,html{height:100%;width:100%}#root,#wrapper{display:flex}.sdoc-editor-page-wrapper{display:flex;flex:1 1;flex-direction:column;min-height:0}.sdoc-editor-page-wrapper .sdoc-editor-page-header{background-color:#fff;border-bottom:1px solid #e5e6e8;flex-shrink:0;height:56px;position:relative;z-index:103}.sdoc-editor-page-wrapper .sdoc-editor-page-content{display:flex;flex:1 1;min-height:0}.error-page{align-items:center;display:flex;flex:1 1;flex-direction:column;justify-content:center;overflow:hidden}.error-page .error-tip{color:red}.error-page .error-button{margin-top:20px}.sdoc-context-menu .dropdown-item:not(:disabled),.sdoc-editor-page-wrapper .dropdown-item{color:#212529}.sdoc-context-menu .dropdown-item:hover{color:#fff}.sdoc-share-permission{border:1px solid rgba(0,0,0,.12);border-radius:4px;font-size:12px;padding:2px 6px}code[class*=language-],pre[class*=language-]{word-wrap:normal;background:none;color:#000;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;-webkit-hyphens:none;hyphens:none;line-height:1.5;tab-size:4;text-align:left;text-shadow:0 1px #fff;white-space:pre;word-break:normal;word-spacing:normal}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{background:#b3d4fc;text-shadow:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{margin:.5em 0;overflow:auto;padding:1em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{border-radius:.3em;padding:.1em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{background:hsla(0,0%,100%,.5);color:#9a6e3a}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.sf-tooltip .tooltip-inner{background-color:#303133;font-weight:lighter;text-align:start}.sf-tooltip.bs-tooltip-auto[x-placement^=bottom] .arrow:before{border-bottom-color:#303133}.sf-tooltip.bs-tooltip-auto[x-placement^=top] .arrow:before{border-top-color:#303133}.sf-tooltip.bs-tooltip-auto[x-placement^=right] .arrow:before{border-right-color:#303133}.sf-tooltip.bs-tooltip-auto[x-placement^=left] .arrow:before{border-left-color:#303133}.sf-header-menu{align-items:center;display:flex;height:100%;padding:6px 8px;position:relative;width:140px}.sf-header-menu.header-toggle-disabled:after{border-top:6px solid #e5e6e8;content:"";position:absolute;right:12px;top:12px}.sf-header-menu.sf-header-popover-showed:after{border-bottom-color:#222428;border-top-color:transparent;content:"";position:absolute;right:12px;top:7px}.sf-header-menu .sf-header-toggle{align-items:center;cursor:pointer;display:flex;flex:1 1;height:24px;justify-content:space-between;padding-left:5px}.sf-header-menu .sf-header-toggle .active{font-size:14px}.sf-header-menu .header-toggle-disabled{color:#bdbdbd;cursor:inherit}.sf-header-menu .sf-header-toggle.sf-header-popover-showed,.sf-header-menu .sf-header-toggle:not(.header-toggle-disabled):hover{background-color:#f2f2f2;border-radius:2px}.sf-header-menu .sf-header-toggle .iconfont{align-items:center;color:#444;cursor:pointer;display:inline-flex;font-size:12px;height:24px;justify-content:center;margin-left:8px;width:12px}.sf-header-menu .sf-header-popover{align-items:flex-start;background-color:#fff;border:1px solid #e5e6e8;border-radius:2px;box-shadow:0 0 10px #ccc;display:flex;flex-direction:column;left:8px;padding:8px 0;position:absolute;top:32px;width:100%;z-index:101}.sf-header-menu .sf-header-popover .sf-dropdown-menu-item{font-size:14px;height:auto;line-height:1;padding:9px 16px 9px 28px;width:100%}.sf-header-menu .sf-header-popover .sf-dropdown-menu-item:hover{background-color:#f2f2f2}.sf-header-menu .sf-header-popover .sf-dropdown-menu-item .sf-check-mark{color:#798d99;left:8px;position:absolute;-webkit-transform:scale(.8);transform:scale(.8)}.menu-group{align-items:center;border-right:1px solid #e5e6e8;color:#444;display:flex;font-size:.75rem;height:100%;justify-content:center;padding:6px 0 6px 8px}.menu-group .menu-group-item{background-color:#fcfcfc;border:none!important;color:#444;height:24px;line-height:24px;margin-right:8px;width:24px}.menu-group .menu-group-item:disabled{color:#bdbdbd}.menu-group .menu-group-item:hover{background-color:#f2f2f2;border-radius:2px}.menu-group .menu-group-item[data-active=true]{color:#eb8205}.menu-group .menu-group-item .iconfont{font-size:13px}.menu-group .menu-group-item.sf-menu-with-dropdown{align-items:center;border:0!important;display:flex;height:24px;justify-content:center;margin-right:10px;overflow:hidden;padding:0!important;width:36px}.menu-group .menu-group-item.sf-menu-with-dropdown.disabled{color:#999;width:24px!important}.sf-menu-with-dropdown:not(.disabled):hover{background:#f2f2f2;border-radius:2px}.sf-menu-with-dropdown .sf-menu-with-dropdown-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.sf-menu-with-dropdown .sf-menu-with-dropdown-triangle{align-items:center;display:flex;height:24px;justify-content:center;padding-right:5px;width:12px}.sf-menu-with-dropdown .sf-menu-with-dropdown-triangle .sf-menu-with-dropdown-triangle-icon{color:#999;font-size:12px}.sf-dropdown-list{align-items:flex-start;align-items:center;background-color:#fff;border:1px solid #e5e6e8;border-radius:2px;box-shadow:0 0 10px #ccc;display:flex;flex-direction:column;left:5px;padding:8px 0;position:absolute;top:30px;z-index:1000}.sf-dropdown-list .sf-dropdown-menu-item-icon{margin-right:8px}.sf-dropdown-list .sf-dropdown-menu-item-text{white-space:nowrap}.sf-dropdown-list .sf-dropdown-list-item{display:flex;font-size:14px;height:auto;line-height:1;padding:9px 16px 9px 28px;width:100%}.sf-dropdown-list .sf-dropdown-list-item:hover{background-color:#f2f2f2}.image-toggle-disabled{color:#bdbdbd;cursor:inherit}.image-popover{align-items:flex-start;background-color:#fff;border:1px solid #e5e6e8;border-radius:2px;box-shadow:0 0 10px #ccc;display:flex;flex-direction:column;left:8px;padding:8px 0;position:absolute;top:42px;z-index:101}.image-popover .image-popover-item{cursor:pointer;font-size:14px;height:auto;line-height:1;margin:0;padding:9px 16px;white-space:nowrap;width:100%}.image-popover .image-popover-item:hover{background-color:#4d9ef8;color:#fff}.image-popover .image-uploader{display:none}@-webkit-keyframes closeWindow{0%{opacity:1}to{opacity:0}}@keyframes closeWindow{0%{opacity:1}to{opacity:0}}.ril__outer{-ms-content-zooming:none;-ms-touch-select:none;background-color:rgba(0,0,0,.85);bottom:0;height:100%;left:0;outline:none;right:0;top:0;-ms-touch-action:none;touch-action:none;-ms-user-select:none;width:100%;z-index:1000}.ril__outerClosing{opacity:0}.ril__image,.ril__imageNext,.ril__imagePrev,.ril__inner{bottom:0;left:0;position:absolute;right:0;top:0}.ril__image,.ril__imageNext,.ril__imagePrev{-ms-content-zooming:none;-ms-touch-select:none;margin:auto;max-width:none;-ms-touch-action:none;touch-action:none;-ms-user-select:none}.ril__imageDiscourager{background-position:50%;background-repeat:no-repeat;background-size:contain}.ril__navButtons{border:none;bottom:0;cursor:pointer;height:34px;margin:auto;opacity:.7;padding:40px 30px;position:absolute;top:0;width:20px}.ril__navButtons:hover{opacity:1}.ril__navButtons:active{opacity:.7}.ril__outer .ril__navButtonPrev{background:url(data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMzIiIGhlaWdodD0iMzIiPjxwYXRoIGQ9Im00MTIgNTE1LjIgMzYxLjYtMzYxLjZjMjIuNC0xOS4yIDIyLjQtNTQuNCAwLTc2LjhzLTU3LjYtMjIuNC03Ni44IDBsLTQwNi40IDQwMGMtMjIuNCAyMi40LTIyLjQgNTcuNiAwIDc2LjhsNDA2LjQgNDAzLjJjMjIuNCAyMi40IDU3LjYgMjIuNCA3Ni44IDBzMjIuNC01Ny42IDAtNzYuOEw0MTIgNTE1LjJ6IiBmaWxsPSIjZmZmIi8+PC9zdmc+) no-repeat 50%;left:0}.ril__outer .ril__navButtonNext{background:url(data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMzIiIGhlaWdodD0iMzIiPjxwYXRoIGQ9Ik02NDAgNTE1LjIgMjc4LjQgMTUzLjZjLTIyLjQtMTkuMi0yMi40LTU0LjQgMC03Ni44czU3LjYtMjIuNCA3Ni44IDBsNDA2LjQgNDAwYzIyLjQgMjIuNCAyMi40IDU3LjYgMCA3Ni44TDM1NS4yIDk1Ni44Yy0yMi40IDIyLjQtNTcuNiAyMi40LTc2LjggMHMtMjIuNC01Ny42IDAtNzYuOEw2NDAgNTE1LjJ6IiBmaWxsPSIjZmZmIi8+PC9zdmc+) no-repeat 50%;right:0}.ril__downloadBlocker{background-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);background-size:cover;bottom:0;left:0;position:absolute;right:0;top:0}.ril__caption,.ril__toolbar{-ms-flex-pack:justify;background-color:rgba(0,0,0,.5);display:-ms-flexbox;display:flex;justify-content:space-between;left:0;position:absolute;right:0}.ril__caption{-ms-flex-pack:center;bottom:0;justify-content:center;max-height:150px;overflow:auto}.ril__captionContent{color:#fff;margin:0 auto;padding:10px 20px}.ril__toolbar{height:50px;top:0}.ril__toolbarSide{height:50px;margin:0}.ril__toolbarLeftSide{-ms-flex:0 1 auto;flex:0 1 auto;overflow:hidden;padding-left:20px;padding-right:0;text-overflow:ellipsis}.ril__toolbarRightSide{-ms-flex:0 0 auto;flex:0 0 auto;padding-left:0;padding-right:20px}.ril__toolbarItem{color:#fff;display:inline-block;font-size:120%;line-height:50px;max-width:100%;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.ril__toolbarItemChild{vertical-align:middle}.ril__builtinButton{border:none;cursor:pointer;height:35px;opacity:.7;width:40px}.ril__builtinButton:hover{opacity:1}.ril__builtinButton:active{outline:none}.ril__builtinButtonDisabled{cursor:default;opacity:.5}.ril__builtinButtonDisabled:hover{opacity:.5}.ril__closeButton{background:url(data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPjxwYXRoIGQ9Ik02MTEuMiA1MTIgOTEyIDIxMS4yYzI4LjgtMjguOCAyOC44LTczLjYgMC05OS4ycy03My42LTI4LjgtOTkuMiAwTDUxMiA0MTIuOCAyMTEuMiAxMTJjLTI4LjgtMjguOC03My42LTI4LjgtOTkuMiAwcy0yOC44IDczLjYgMCA5OS4yTDQxMi44IDUxMiAxMTIgODEyLjhjLTI4LjggMjguOC0yOC44IDczLjYgMCA5OS4yIDI4LjggMjUuNiA3My42IDI4LjggOTkuMiAwTDUxMiA2MTEuMiA4MTIuOCA5MTJjMjguOCAyOC44IDczLjYgMjguOCA5OS4yIDAgMjguOC0yOC44IDI4LjgtNzMuNiAwLTk5LjJMNjExLjIgNTEyeiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg==) no-repeat 50%}.ril__zoomInButton{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCI+PGcgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+PHBhdGggZD0ibTEgMTkgNi02TTkgOGg2TTEyIDV2NiIvPjwvZz48Y2lyY2xlIGN4PSIxMiIgY3k9IjgiIHI9IjciIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIyIi8+PC9zdmc+) no-repeat 50%}.ril__zoomOutButton{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCI+PGcgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+PHBhdGggZD0ibTEgMTkgNi02TTkgOGg2Ii8+PC9nPjxjaXJjbGUgY3g9IjEyIiBjeT0iOCIgcj0iNyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjIiLz48L3N2Zz4=) no-repeat 50%}.ril__rotateButton{background:url(data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiPjxwYXRoIGQ9Im0xMjQuOCAxNjAgNTQuNCA1MS4yQzM0NS42IDI4LjggNjMwLjQgMTYgODEyLjggMTgyLjRTMTAwOCA2MzMuNiA4NDEuNiA4MTYgMzkwLjQgMTAxMS4yIDIwOCA4NDQuOGMtMzguNC0zNS4yLTczLjYtNzYuOC05Ni0xMjQuOC02LjQtOS42LTkuNi0xNi05LjYtMjguOCAwLTMyIDI1LjYtNTQuNCA1NC40LTU0LjQgMTkuMiAwIDM4LjQgOS42IDU0LjQgMzIgODMuMiAxNjYuNCAyODggMjMwLjQgNDU0LjQgMTQ0czIzMC40LTI5MS4yIDE0NC00NTcuNi0yODgtMjMwLjQtNDU0LjQtMTQ0Yy0zNS4yIDE5LjItNjcuMiA0MS42LTk2IDczLjZsNTEuMiA0NC44YzEyLjggMTIuOCAxNiAzOC40IDMuMiA1MS4yLTYuNCA2LjQtMTYgOS42LTI1LjYgOS42TDEwNS42IDQwMGMtMTkuMiAwLTM1LjItMTIuOC0zOC40LTMyTDY0IDE4OC44Yy0zLjItMTkuMiAxMi44LTM1LjIgMzItMzguNCAxMi44LTMuMiAyMi40IDMuMiAyOC44IDkuNnoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=) no-repeat 50%}.ril__outerAnimating{-webkit-animation-name:closeWindow;animation-name:closeWindow}@-webkit-keyframes pointFade{0%,19.999%,to{opacity:0}20%{opacity:1}}@keyframes pointFade{0%,19.999%,to{opacity:0}20%{opacity:1}}.ril__loadingCircle{height:60px;position:relative;width:60px}.ril__loadingCirclePoint{height:100%;left:0;position:absolute;top:0;width:100%}.ril__loadingCirclePoint:before{-webkit-animation:pointFade .8s ease-in-out infinite both;animation:pointFade .8s ease-in-out infinite both;background-color:#fff;border-radius:30%;content:"";display:block;height:30%;margin:0 auto;width:11%}.ril__loadingCirclePoint:first-of-type{-webkit-transform:rotate(0deg);transform:rotate(0deg)}.ril__loadingCirclePoint:first-of-type:before,.ril__loadingCirclePoint:nth-of-type(7):before{-webkit-animation-delay:-.8s;animation-delay:-.8s}.ril__loadingCirclePoint:nth-of-type(2){-webkit-transform:rotate(30deg);transform:rotate(30deg)}.ril__loadingCirclePoint:nth-of-type(8){-webkit-transform:rotate(210deg);transform:rotate(210deg)}.ril__loadingCirclePoint:nth-of-type(2):before,.ril__loadingCirclePoint:nth-of-type(8):before{-webkit-animation-delay:-666ms;animation-delay:-666ms}.ril__loadingCirclePoint:nth-of-type(3){-webkit-transform:rotate(60deg);transform:rotate(60deg)}.ril__loadingCirclePoint:nth-of-type(9){-webkit-transform:rotate(240deg);transform:rotate(240deg)}.ril__loadingCirclePoint:nth-of-type(3):before,.ril__loadingCirclePoint:nth-of-type(9):before{-webkit-animation-delay:-533ms;animation-delay:-533ms}.ril__loadingCirclePoint:nth-of-type(4){-webkit-transform:rotate(90deg);transform:rotate(90deg)}.ril__loadingCirclePoint:nth-of-type(10){-webkit-transform:rotate(270deg);transform:rotate(270deg)}.ril__loadingCirclePoint:nth-of-type(10):before,.ril__loadingCirclePoint:nth-of-type(4):before{-webkit-animation-delay:-.4s;animation-delay:-.4s}.ril__loadingCirclePoint:nth-of-type(5){-webkit-transform:rotate(120deg);transform:rotate(120deg)}.ril__loadingCirclePoint:nth-of-type(11){-webkit-transform:rotate(300deg);transform:rotate(300deg)}.ril__loadingCirclePoint:nth-of-type(11):before,.ril__loadingCirclePoint:nth-of-type(5):before{-webkit-animation-delay:-266ms;animation-delay:-266ms}.ril__loadingCirclePoint:nth-of-type(6){-webkit-transform:rotate(150deg);transform:rotate(150deg)}.ril__loadingCirclePoint:nth-of-type(12){-webkit-transform:rotate(330deg);transform:rotate(330deg)}.ril__loadingCirclePoint:nth-of-type(12):before,.ril__loadingCirclePoint:nth-of-type(6):before{-webkit-animation-delay:-133ms;animation-delay:-133ms}.ril__loadingCirclePoint:nth-of-type(7){-webkit-transform:rotate(180deg);transform:rotate(180deg)}.ril__loadingCirclePoint:nth-of-type(13){-webkit-transform:rotate(1turn);transform:rotate(1turn)}.ril__loadingCirclePoint:nth-of-type(13):before,.ril__loadingCirclePoint:nth-of-type(7):before{-webkit-animation-delay:0ms;animation-delay:0ms}.ril__loadingContainer{bottom:0;left:0;position:absolute;right:0;top:0}.ril__imageNext .ril__loadingContainer,.ril__imagePrev .ril__loadingContainer{display:none}.ril__errorContainer{-ms-flex-align:center;-ms-flex-pack:center;align-items:center;bottom:0;color:#fff;display:-ms-flexbox;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.ril__imageNext .ril__errorContainer,.ril__imagePrev .ril__errorContainer{display:none}.ril__loadingContainer__icon{color:#fff;left:50%;position:absolute;top:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.sf-image-wrapper{display:inline-block;max-width:100%;padding:1px;position:relative}.sf-image-wrapper .sf-image.selected{box-shadow:0 0 0 2px #007bff}.sf-image-wrapper .resizer{background-color:#007bff;border:1px solid #fff;bottom:-5px;cursor:se-resize;height:10px;position:absolute;right:-5px;width:10px}.sf-image-wrapper .full-screen{background-color:#fff;border:1px solid #0028641f;border-radius:3px;box-shadow:0 2px 5px 0 #0003;display:inline-block;height:26px;line-height:20px;padding:2px;position:absolute;right:-32px;text-align:center;top:0;-webkit-user-select:none!important;user-select:none!important;width:26px;z-index:1000}.sf-image-wrapper .full-screen:hover{background-color:#efefef;display:block}.sf-image-wrapper .image-size-info-tooltip{background-color:#4c4c4c;border-radius:3px;bottom:-25px;color:#fff;display:inline-block;font-size:12px;height:22px;left:100%;line-height:12px;padding:5px;position:absolute;-webkit-transform:translateX(5px);transform:translateX(5px);white-space:nowrap;z-index:1}.permission-editor-explanation{word-wrap:break-word;color:#9c9c9c;font-size:12px;padding-left:10px;-webkit-user-select:none;-ms-user-select:none;user-select:none;white-space:pre-wrap;word-break:keep-all}.permission-editor .permission-editor__option{padding-bottom:2px;padding-top:2px}.permission-editor .permission-editor__control .permission-editor-explanation{display:none}.cur-view-content .permission-editor-select .permission-editor__control,.cur-view-content .permission-editor-select .permission-editor__control .permission-editor__input,.cur-view-content .permission-editor-select .permission-editor__control div,.cur-view-content .permission-editor-select .permission-editor__indicators{height:1.5rem;min-height:1.5rem}.cur-view-content .permission-editor-select .permission-editor__value-container div:nth-child(2){margin:0;padding:0}.cur-view-content .permission-editor-select .permission-editor__indicators .permission-editor__indicator{padding:0 .5rem}.permission-editor__menu .permission-editor__option--is-disabled{border-top:1px solid #dedede;color:#9c9c9c}.permission-editor__menu .permission-editor__option--is-disabled:hover{background-color:#f0f0f0!important;color:#9c9c9c!important}.permission-editor-btn-add-custom-permission{align-items:center;display:flex;font-size:12px;line-height:13px;padding:.5rem 0}.permission-editor-btn-add-custom-permission .fa{font-size:12px;line-height:13px;margin-right:.25rem}.permission-editor .btn-add-custom-permission span,.share-dialog-main .permission-editor .permission-editor__placeholder,.share-dialog-main .true__menu,.share-dialog-main .true__placeholder{word-break:keep-all}.sf-virtual-link{color:#eb8205}.sf-virtual-link:hover{text-decoration:underline;text-underline-position:under}.sf-virtual-link.selected{background-color:#e5e5e5}.sf-link-op-menu{background-color:#fff;border:1px solid #e5e5e5;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.08);display:flex;height:36px;padding:7px 8px;position:absolute;z-index:1000}.sf-link-op-menu-link{border-right:1p solid #f1f1f1;color:#212529;font-size:12px;line-height:20px;padding:0 5px}.sf-link-op-menu-link:hover{background:#f1f1f1;color:#212529;cursor:pointer;text-decoration:none}.sf-link-op-icons{border-left:1px solid #e5e5e5;margin-left:8px}.sf-link-op-icon{align-items:center;border-radius:2px;color:#444;display:flex;margin-left:8px;padding:4px}.sf-link-op-icon .iconfont{font-size:12px}.sf-link-op-icon:hover{background:#f2f2f2}.sf-code-block-container{background:#f5f7fa;border-radius:4px;margin:0 0 20px;overflow:hidden;padding:0;position:relative}.sf-lang-selector{align-items:center;-webkit-appearance:none;appearance:none;background:#eee;border:none;border-radius:3px;cursor:pointer;display:flex;font-size:12px;line-height:1;outline:none;padding:2px 5px;position:absolute;right:0;top:0;transition:all .3s;width:-webkit-max-content;width:max-content}.sf-list-line{-webkit-padding-start:24px;display:flex;flex-direction:column;margin:0!important;padding-inline-start:24px}.sf-table-menu-item{position:relative}.sf-table-size-selector-card{background-color:#fff;padding:12px;position:absolute;top:30px;z-index:1}.sf-table-size-selector-card .sf-table-grid-info{margin-bottom:5px;text-align:center;width:100%}.sf-table-size-selector-card .sf-table-selector-cell{border:1px solid #ccc;height:15px;width:20px}.sf-table-size-selector-card .sf-table-row{display:flex}.sf-table-size-selector-card .sf-table-selector-cell.selected{background-color:#ffa94d}.sf-table-container td{position:relative}.sf-table-container .selected-cell{background-color:#fff4e6;caret-color:transparent}.sf-table-container .selected-cell-top:before{border-top:1px double #ffa94d;bottom:0;content:"";left:0;margin:-1px;position:absolute;right:0;top:0;z-index:2}.sf-table-container .selected-cell-bottom:before{border-bottom:1px double #ffa94d;bottom:0;content:"";left:0;margin:-1px;position:absolute;right:0;top:0;z-index:2}.sf-table-container .selected-cell-left:before{border-left:1px double #ffa94d;bottom:0;content:"";left:0;margin:-1px;position:absolute;right:0;top:0;z-index:2}.sf-table-container .selected-cell-right:before{border-right:1px double #ffa94d;bottom:0;content:"";left:0;margin:-1px;position:absolute;right:0;top:0;z-index:2}.sf-context-menu{background-color:#fff;border:1px solid rgba(0,40,100,.12);border-radius:3px;display:flex;flex-direction:column;left:0;position:absolute;top:0;z-index:1000}.sf-context-menu .sf-context-menu-item{background-color:#fff;border:none;clear:both;color:#212529;display:flex;padding:.25rem 1.5rem;white-space:nowrap}.sf-context-menu .sf-context-menu-item:focus,.sf-context-menu .sf-context-menu-item:hover{background-color:#f8f9fa;color:#16181b;text-decoration:none}.sf-context-menu .sf-divider{color:#eee;cursor:default;height:1px;margin:5px 0;width:100%}.seafile-multicolor-icon{fill:currentColor;height:1em;overflow:hidden;width:1em}.seafile-multicolor-icon-monitor{fill:#444;color:#bdbdbd;font-size:14px}.ai-search-refrences{margin-top:10px}.ai-search-refrences .ai-search-refrences-title{margin-bottom:6px}.ai-search-refrences .ai-search-refrences-container{display:flex}.ai-search-refrences .ai-search-refrences-container .ai-search-refrences-detail{border:1px solid #ccc;border-radius:3px;margin-right:8px;max-width:200px;padding:4px 8px}.ai-search-refrences .ai-search-refrences-detail:hover{background-color:#f5f5f5;cursor:pointer}.ai-search-help{border-bottom:1px solid rgba(0,40,100,.12);padding:20px 0}.ai-search-help .ai-search-help-title{margin-bottom:10px}.ai-search-help .ai-search-help-container{display:flex}.ai-search-help .ai-search-help-container .ai-search-help-detail{border:1px solid #ccc;border-radius:3px;margin-right:8px;max-width:200px;padding:4px 8px}.ai-search-help .ai-search-help-detail:hover{background-color:#f5f5f5;cursor:pointer}.search-container.show.ai-search-ask{width:800px}.ai-search-ask .ai-search-ask-header{align-items:center;border-bottom:1px solid rgba(0,40,100,.12);display:flex;padding:1rem}.ai-search-ask .ai-search-ask-header .ai-search-ask-return{cursor:pointer;line-height:10px;padding:0 4px;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.ai-search-ask .ai-search-ask-header .ai-search-ask-return .seafile-multicolor-icon-arrow{opacity:.6}.ai-search-ask .ai-search-ask-header .ai-search-ask-return:hover .seafile-multicolor-icon-arrow{opacity:.8}.ai-search-ask .ai-search-ask-body{display:flex;max-height:400px;overflow-y:auto}.ai-search-ask .ai-search-ask-body .ai-search-ask-body-left{flex-shrink:0;margin-right:1rem}.ai-search-ask .ai-search-ask-body .ai-search-ask-body-right{font-size:14px;line-height:1.8;width:100%}.ai-search-ask .ai-search-ask-footer{border-top:1px solid rgba(0,40,100,.12);margin:0 1rem;padding:1rem 0}.ai-search-ask .ai-search-ask-footer .ai-search-ask-footer-btn{background-color:#fff;cursor:pointer;height:16px;position:absolute;right:8px;top:8px;width:16px}.ai-search-ask .ai-search-ask-footer .ai-search-ask-footer-btn .seafile-multicolor-icon-send{color:#ff8000}.ai-search-ask .ai-search-ask-footer .ai-search-ask-footer-btn:hover .seafile-multicolor-icon-send{color:#d96d00}@media (max-width:768px){.search-container.show.ai-search-ask{width:100%}.ai-search-ask .search-input{box-shadow:none;width:100%!important}}.top-search-file-icon{align-self:center;color:#999;cursor:pointer;font-size:20px;font-weight:800}.notification-wrapper .popover{max-width:300px}.notification-container{background:#fff;border-radius:3px;box-shadow:0 0 5px #ccc;position:absolute;right:-10px;top:-1px;width:320px}.notification-container .notification-header{align-items:center;border-bottom:1px solid #ededed;display:flex;font-size:16px;font-weight:600;height:50px;justify-content:center;position:relative}.notification-container .notification-header .notification-close-icon{color:#000;cursor:pointer;font-weight:700;height:24px;opacity:.5;position:absolute;right:14px;text-align:center;width:24px}.notification-container .notification-header .notification-close-icon:hover{opacity:.75}.notification-container .notification-body{padding:0}.notification-container .notification-body .show-weixin-qrcode{align-items:center;border-bottom:1px solid #ededed;cursor:pointer;display:flex;height:40px;justify-content:flex-start;padding-left:10px}.show-weixin-qrcode .weixin-icon{color:#999;font-size:20px;margin-left:20px}.notification-container .notification-body .mark-notifications{align-items:center;border-bottom:1px solid #ededed;color:#b4b4b4;cursor:pointer;display:flex;height:36px;justify-content:flex-end;padding-right:1rem}.notification-container .notification-body .mark-notifications:hover{text-decoration:underline}.notification-body .notification-list-container{max-height:260px;overflow:auto}.notification-list-container .notification-item{border-bottom:1px solid #ededed;cursor:pointer;padding:14px 16px 14px 10px;position:relative}.notification-list-container .notification-item:last-child{border-bottom:none}.notification-list-container .notification-item:hover{background:#f5f5f5}.notification-list-container .notification-item .notification-item-header{align-items:center;display:flex}.notification-list-container .notification-item .notification-point{background:red;border-radius:50%;display:inline-block;height:8px;margin-right:12px;position:absolute;width:8px}.notification-list-container .notification-item .notification-header-info{display:flex;flex:1 1;justify-content:space-between;margin-left:20px;width:calc(100% - 20px)}.notification-user-detail{display:flex;width:65%}.notification-user-detail img{margin-top:3px}.notification-user-name{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notification-item .notification-header-info .notification-time{color:#b4b4b4;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notification-list-container .notification-item .notification-content-wrapper{font-size:13px}.notification-item .notification-content-quotes{width:8px}.notification-list-container .notification-item .notification-comment-content{max-width:calc(100% - 16px)}.notification-list-container .notification-item .notification-comment-content p{display:inline-block;letter-spacing:1px;margin-bottom:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notification-list-container .notification-item .notification-comment-content p img{height:auto;max-height:60px;max-width:70%}.notification-body .notification-footer{align-items:center;background:#f9f9f9;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top:1px solid #ededed;cursor:pointer;display:flex;height:40px;justify-content:center}.notification-body .notification-footer:hover{text-decoration:underline}.sf-selected-formula{cursor:pointer;display:block;outline:2px solid #007bff;-webkit-user-select:none;user-select:none}.sf-selected-formula .MathJax{margin:0}.formula-dialog-wrapper .form-check-label{margin-bottom:4px}.formula-dialog-wrapper .formula-preview{border:2px dashed #ebebeb;min-height:40px;overflow-x:auto;padding:10px}.cur-view-toolbar{align-items:center;display:flex;flex:1 1;height:32px;position:relative}.border-left-show:before{background-color:#ddd;content:"";height:30px;left:-1px;position:absolute;top:10px;width:1px}.operation-item{background-color:#fff;border:1px solid #ccc;border-radius:2px;font-weight:400;height:30px;line-height:29px;min-width:55px;padding:0 .5rem}.group-operations,.operation-item{margin-right:.25rem}.group-operations .group-op-item{font-size:1.125rem;font-weight:400;min-width:46px;padding:0 .5rem}.detail-btn button,.group-operations .group-op-item,.sf-view-mode-btn{background-color:#fff;border:1px solid #ccc;border-radius:2px;height:30px;line-height:29px}.detail-btn button,.sf-view-mode-btn{color:#aaa;font-size:18px;min-width:2rem;padding:0}.detail-btn button{font-size:15px;padding-top:1px}.sf-view-mode-btn.current-mode{background-color:#ccc!important;color:#fff!important}.common-toolbar{align-items:center;display:flex;margin-left:auto}.common-toolbar>div{margin-left:.5rem}.common-toolbar .logout-icon{align-items:center;color:#ccc;display:flex;height:32px;justify-content:center;margin-left:8px;text-decoration:none;width:32px}.path-toolbar{list-style:none}.path-toolbar .toolbar-item{display:inline-block;margin-left:.75rem;text-align:center}.path-toolbar .toolbar-item a{color:#8a8a8a;font-size:22px}.path-toolbar .toolbar-item a:hover{color:#eb8205;text-decoration:none}@media (max-width:767px){.border-left-show:before{width:0}}.search-mask{background-color:rgba(0,0,0,.2);height:100%;left:0;position:fixed;top:0;width:100%;z-index:1}.search-container{position:relative;z-index:2}.search-container.show{background-color:#fff;border-radius:3px;box-shadow:0 3px 8px 0 rgba(116,129,141,.1);cursor:default;display:flex;flex-direction:column;min-height:200px;overflow:hidden;padding:1rem 0 0 1rem;position:absolute;right:110px;top:10px;width:600px}.search-icon-left{display:flex}.search-icon-right{color:#999;cursor:pointer;display:flex;font-style:normal;min-width:25px;pointer-events:all}.search-icon-right:hover{color:#333;text-decoration:none}.search-icon-arrow{left:auto;right:40px}.search-input{font-size:.875rem;height:1.875rem;width:15rem}.search-container.show .search-input{height:38px}.search-result-container{background-color:#fff;border-radius:0 0 3px 3px;box-shadow:0 3px 8px 0 rgba(116,129,141,.1);left:0;position:absolute;top:2rem;top:60px;width:100%}.dropdown-search-result-container{box-shadow:none;display:flex;flex-direction:column;max-height:300px;overflow:auto;position:relative;top:0}.dropdown-search-result-container .seahub-switch .custom-switch{padding-left:0}.search-result-container .search-result-none{line-height:4rem;text-align:center}.search-result-container .search-result-list{list-style:none;margin:4px 0;padding:0}.search-result-container .search-result-list-container{flex:1 1;overflow:auto}.search-result-container .search-result-item{border-radius:4px;cursor:pointer;display:flex;font-size:.8125rem;margin-right:1rem;padding:10px 0 10px 8px}.search-result-container .search-result-item.search-result-item-highlight,.search-result-container .search-result-item:hover{background-color:#f0f0f0}.search-result-item .item-img{height:36px;width:36px}.search-result-item .lib-item-img{height:36px;padding:4px;width:36px}.search-result-item .item-content{flex:1 1;margin-left:.25rem;overflow-x:hidden}.item-content .item-name a{color:#ea8102!important}.item-content .item-link{color:#7d7d7d;margin:0}.item-content .item-text{margin:0}.item-content .item-text b{font-weight:700}.search-result-container .item-content .item-text{font-size:.8125rem;line-height:1.5;padding:0}.main-panel-south{flex:auto;height:calc(100% - 50px);overflow:auto}.search-page{margin:30px auto;width:65%}.search-page .search-result-container{border-radius:0;box-shadow:none;padding:1.25rem 1rem}.search-page .search-page-container{background:#f7f7f8;padding:1.25rem 1rem}.search-page .search-page-container .search-input{padding-left:.5rem;width:30rem}.search-page .search-page-container .fa-angle-double-down,.search-page .search-page-container .fa-angle-double-up{font-size:1rem}.search-page .advanced-search .search-file-types .search-input{max-width:100%;padding-left:.5rem;width:30rem}.search-page .search-page-container .search-icon-right{left:28rem}.search-page .paginator{margin:1rem 0;text-align:center}.search-page .advanced-search,.search-page .search-filters{color:#747474}.search-page .search-filters{padding-top:10px}.search-page .advanced-search .search-file-types,.search-page .advanced-search .search-repo{padding:5px 0}.search-file-types .search-file-types-form{top:10px}.search-page .advanced-search .search-catalog{border-top:1px dashed #e2e2e2;padding:10px 0}.search-page .advanced-search .search-catalog:first-child{border:none}.search-page .custom-checkbox .custom-control-input:checked~.custom-control-label:before{background-color:#3b88fd}.search-date .ant-input{border:1px solid rgba(0,40,100,.12);border-radius:3px;height:2.375rem;line-height:1.6;padding:.375rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.search-date .select-data-icon{color:#b2b2b2;position:absolute;right:1.5rem;top:.5rem}.search-page .search-result-container .search-result-item{margin-bottom:1rem;padding:0}.search-page .search-result-container .search-result-item:hover{background-color:inherit}.search-page .search-result-item .item-content{margin-left:.8rem}.search-page .search-result-item .item-content .item-link a{color:#8b8b8b!important}.search-page .search-result-container .search-result-item{cursor:default}.rc-calendar tbody tr{height:1.75rem}@media (max-width:767px){.common-toolbar .search{margin:0}.search-icon-container{align-items:center;display:flex;justify-content:center;width:2rem}.search-icon{color:#999;font-size:1.25rem;line-height:1}.search-container{display:flex;justify-content:center;left:0;position:fixed;right:0;top:5rem;z-index:2}.search-input{box-shadow:5px 5px 5px #888;height:2.5rem;width:20rem!important}.search-result-container{left:auto;position:absolute;top:2.5rem;width:20rem}.search-page{height:100%;margin:0;width:100%}.search-page .search-page-container .search-input{box-shadow:none;width:95%!important}.search-page .search-page-container .search-icon-right{left:85%}.search-page .search-result-container{left:0;top:0;width:100%}}.search-result-container .search-mode-container{align-items:center;border-bottom:1px solid #ddd;display:flex;height:40px;margin-right:16px;padding:0 12px}.search-result-container .search-mode-item{align-items:center;border-bottom:2px solid transparent;cursor:pointer;display:flex;font-size:14px;height:40px;line-height:40px;margin-right:30px;-webkit-user-select:none;-ms-user-select:none;user-select:none}.search-result-container .search-mode-item.search-mode-active{border-bottom-color:#ff8001;color:#ff8001}.search-result-container .search-mode-similarity-index-status{align-items:center;display:flex;flex-direction:column;height:64px;justify-content:center}.search-result-container .search-mode-similarity-index-status.index-status-uncreated{cursor:pointer}.visited-search-results-title{color:#999;font-size:.875rem;font-weight:400;margin:7px 0 10px}.notification-list-dialog{height:calc(100% - 56px);max-width:720px;width:720px}.notification-list-dialog .notification-list-content{height:100%}.notification-header-close{display:flex}.notification-header-close .notification-dropdown-toggle{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.notification-header-close .item-dropdown-icon,.notification-header-close .notification-close-icon{color:#000;cursor:pointer;height:24px;opacity:.5;width:24px}.notification-header-close .item-dropdown-icon:hover,.notification-header-close .notification-close-icon:hover{color:#000;opacity:.75}.notification-header-close .item-dropdown-icon{font-weight:400}.notification-header-close .notification-close-icon{font-weight:700}.notification-header-close .dropdown-menu{box-shadow:0 1px 2px 0 rgba(0,0,0,.05);min-width:8rem}.notification-header-close .dtable-dropdown-menu.large.dropdown-menu .dropdown-item{min-height:0;min-height:auto;padding:.25rem 1.5rem}.notification-list-content .notification-modal-body{height:100%;overflow:hidden;padding:0}.notification-modal-body .notification-dialog-body{height:100%;overflow:auto;padding:2rem 1rem}.notification-dialog-body table{overflow-y:auto;table-layout:fixed;width:100%}.notification-modal-body .notification-dialog-body .paginator{height:38px}.notification-dialog-body table thead tr{height:2.1875rem}.notification-dialog-body table th{border-bottom:1px solid #eee;color:#9c9c9c;font-weight:400;line-height:1.6;padding:.3125rem .1875rem;text-align:left}.notification-dialog-body table tbody tr:hover{background:#f5f5f5;cursor:pointer}.notification-dialog-body table td{border-bottom:1px solid #eee;color:#333;font-size:14px;padding:.5rem .1875rem;word-break:break-all}.wechat-dialog-body{padding:3rem}.wechat-dialog-body,.wechat-dialog-message{align-items:center;display:flex;flex-direction:column;justify-content:center}.wechat-dialog-message{color:#666;font-size:14px;margin-top:1rem;width:100%}.notification-dialog-body .empty-tip{background-color:#fff;border-radius:3px;margin:5.5em 1em;padding:30px;text-align:center}.notification-dialog-body .empty-tip .no-items-img-tip{height:100px;width:100px}@media (min-width:768px){.notification-dialog-body .empty-tip{padding:30px 80px}}#notifications{position:relative;width:32px}#notice-icon{display:block;position:relative}@media (max-width:390px){#notifications{margin-left:8px}}#notifications .title{color:#322;font-size:1rem;font-weight:400;line-height:1.5}#notifications .sf2-icon-bell{color:#999;font-size:24px;line-height:1;vertical-align:middle}#notifications .num{background:#fc6440;border-radius:100%;color:#fff;font-size:9px;height:16px;left:12px;line-height:16px;min-width:16px;padding:0 2px;position:absolute;text-align:center;top:-3px}#notice-popover{right:-12px;top:38px}#notice-popover .outer-caret{right:18px}#notice-popover a{font-weight:400}#notice-popover li{border-bottom:1px solid #dfdfe1;padding:9px 0 3px}#notice-popover li.unread{border-left:2px solid #feac74;padding-left:10px;padding-right:10px}#notice-popover li.read{border-left:2px solid transparent;padding-left:10px;padding-right:10px}#notice-popover li:hover{background:#f5f5f7}#notice-popover li.read:hover{background:#f5f5f7;border-left:2px solid #dfdfe1}#notice-popover .avatar{border-radius:1000px;float:left}#notice-popover .brief{font-size:.8125rem;line-height:1.5rem;margin-bottom:1rem;margin-left:40px}#notice-popover .time{clear:both;color:#999;font-size:.8125rem;line-height:1.5rem;margin:0;text-align:right}#notice-popover .view-all{color:#a4a4a4;display:block;padding:7px 0;text-align:center}#notice-popover .sf-popover-close{position:absolute;right:10px;top:17px}#notice-popover .sf-popover-hd{border-bottom:1px solid #dfdfe1;margin:0 10px}#notice-popover .sf-popover-con{max-height:25rem}.keyboard-shortcut-dialog{max-width:500px}.keyboard-shortcut-dialog .modal-body{max-height:390px;overflow:auto}.keyboard-shortcut-container{align-items:center;background-color:#f8f8f8;border-radius:3px;box-sizing:border-box;display:flex;line-height:1.5;margin-top:3px;padding-bottom:.5rem;padding-top:.5rem}.keyboard-shortcut-title{font-size:.9rem}.keyboard-shortcut-container>div:first-child{text-align:right}.keyboard-shortcut-container>div:last-child{padding-left:1rem;padding-right:1rem}.keyboard-shortcut{display:inline-block}.keyboard-shortcut kbd{background-color:hsla(0,0%,100%,.25);border:solid rgba(0,0,0,.1);border-radius:3px;border-width:1px 1px 2px;box-sizing:border-box;color:#333;display:inline-block;font:inherit;font-size:12px;margin-bottom:0;margin-left:1px;margin-right:1px;min-width:12px;padding:1px 3px;text-align:center;text-transform:uppercase}.sf-slate-editor-toolbar{background-color:#fcfcfc!important}.sf-slate-editor-toolbar .sf-slate-article-info-control{color:#555;cursor:pointer;display:flex;height:30px;justify-content:center;line-height:30px;position:absolute;right:20px;width:30px}.sf-slate-editor-toolbar .sf-slate-article-info-control:hover{background-color:#e5e5e5}.sf-slate-editor-toolbar .sf-slate-help-info-control{color:#555;cursor:pointer;display:flex;height:30px;justify-content:center;line-height:30px;position:absolute;right:20px;width:30px}.sf-slate-editor-toolbar .sf-slate-help-info-control>span:hover{color:#333;cursor:pointer}.sf-slate-editor-toolbar .sf-slate-article-info-control .iconfont{font-size:13px}.sf-single-selector .cur-option{cursor:pointer}.sf-single-selector .cur-option .toggle-icon{color:#999}.sf-single-selector .options-container{background:#fff;border:1px solid #e8e8e8;min-width:165px;z-index:2}.sf-single-selector .option-list{max-height:200px;min-height:4rem}.sf-single-selector .option-item{cursor:pointer}.sf-single-selector .option-item:hover{background:#f5f5f5}.sf-single-selector .option-item-text{font-size:14px}.btn-qr-code-icon{font-size:1.5rem;font-weight:400;line-height:1;padding:.375rem}.rc-calendar,.rc-calendar *{box-sizing:border-box}.rc-calendar-hidden{display:none}.rc-calendar-input-wrap{border-bottom:1px solid #e9e9e9;padding:6px;position:relative}.rc-calendar-input-wrap:after{clear:both;content:""}.rc-calendar-date-input-wrap{overflow:hidden}.rc-calendar-time-picker{background-color:#fff;height:217px;position:absolute;top:34px;width:100%}.rc-calendar-time-picker-panel{position:relative;width:100%}.rc-calendar-time-picker-panel .rc-time-picker-panel-input-wrap{display:none}.rc-calendar-time-picker-panel .rc-time-picker-panel-inner{border:none;box-shadow:none}.rc-calendar-time-picker-panel .rc-time-picker-panel-select{max-height:217px;width:84px}.rc-calendar-time-picker-panel .rc-time-picker-panel-select li{padding:0;text-align:center}.rc-calendar-time-picker-wrap{float:left;width:100%}.rc-calendar-time-picker-wrap .rc-time-picker{width:100%}.rc-calendar-time-picker-wrap .rc-time-picker-input{border:1px solid transparent;height:22px;outline:0;padding:0}.rc-calendar-time-picker-wrap .rc-time-picker-icon{display:none}.rc-calendar-input{border:1px solid transparent;color:#666;cursor:text;height:22px;line-height:1.5;outline:0;width:100%}.rc-calendar-input-invalid{border-color:red}.rc-calendar-clear-btn{cursor:pointer;height:20px;line-height:20px;margin:0;overflow:hidden;position:absolute;right:6px;text-align:center;top:6px;width:20px;z-index:9999}.rc-calendar-clear-btn:after{color:#aaa;content:"x";display:inline-block;font-size:12px;line-height:1;transition:color .3s ease;width:20px}.rc-calendar-clear-btn:hover:after{color:#666}.rc-calendar-picker{left:-9999px;position:absolute;top:-9999px;z-index:1000}.rc-calendar-picker-hidden{display:none}.rc-calendar-picker-slide-up-appear,.rc-calendar-picker-slide-up-enter{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1);display:block!important;opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0}.rc-calendar-picker-slide-up-leave{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused;-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34);display:block!important;opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0}.rc-calendar-picker-slide-up-appear.rc-calendar-picker-slide-up-appear-active.rc-calendar-picker-placement-bottomLeft,.rc-calendar-picker-slide-up-appear.rc-calendar-picker-slide-up-appear-active.rc-calendar-picker-placement-bottomRight,.rc-calendar-picker-slide-up-enter.rc-calendar-picker-slide-up-enter-active.rc-calendar-picker-placement-bottomLeft,.rc-calendar-picker-slide-up-enter.rc-calendar-picker-slide-up-enter-active.rc-calendar-picker-placement-bottomRight{-webkit-animation-name:rcDropdownSlideUpIn;animation-name:rcDropdownSlideUpIn;-webkit-animation-play-state:running;animation-play-state:running}.rc-calendar-picker-slide-up-appear.rc-calendar-picker-slide-up-appear-active.rc-calendar-picker-placement-topLeft,.rc-calendar-picker-slide-up-appear.rc-calendar-picker-slide-up-appear-active.rc-calendar-picker-placement-topRight,.rc-calendar-picker-slide-up-enter.rc-calendar-picker-slide-up-enter-active.rc-calendar-picker-placement-topLeft,.rc-calendar-picker-slide-up-enter.rc-calendar-picker-slide-up-enter-active.rc-calendar-picker-placement-topRight{-webkit-animation-name:rcDropdownSlideDownIn;animation-name:rcDropdownSlideDownIn;-webkit-animation-play-state:running;animation-play-state:running}.rc-calendar-picker-slide-up-leave.rc-calendar-picker-slide-up-leave-active.rc-calendar-picker-placement-bottomLeft,.rc-calendar-picker-slide-up-leave.rc-calendar-picker-slide-up-leave-active.rc-calendar-picker-placement-bottomRight{-webkit-animation-name:rcDropdownSlideUpOut;animation-name:rcDropdownSlideUpOut;-webkit-animation-play-state:running;animation-play-state:running}.rc-calendar-picker-slide-up-leave.rc-calendar-picker-slide-up-leave-active.rc-calendar-picker-placement-topLeft,.rc-calendar-picker-slide-up-leave.rc-calendar-picker-slide-up-leave-active.rc-calendar-picker-placement-topRight{-webkit-animation-name:rcDropdownSlideDownOut;animation-name:rcDropdownSlideDownOut;-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes rcDropdownSlideUpIn{0%{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:0 0;transform-origin:0 0}to{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0}}@keyframes rcDropdownSlideUpIn{0%{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:0 0;transform-origin:0 0}to{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0}}@-webkit-keyframes rcDropdownSlideUpOut{0%{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0}to{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:0 0;transform-origin:0 0}}@keyframes rcDropdownSlideUpOut{0%{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0}to{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:0 0;transform-origin:0 0}}@-webkit-keyframes rcDropdownSlideDownIn{0%{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}to{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}}@keyframes rcDropdownSlideDownIn{0%{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}to{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}}@-webkit-keyframes rcDropdownSlideDownOut{0%{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}to{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}}@keyframes rcDropdownSlideDownOut{0%{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}to{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}}.rc-calendar{background-clip:padding-box;background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 5px #ccc;font-family:Arial,Hiragino Sans GB,Microsoft Yahei,"Microsoft Sans Serif",WenQuanYi Micro Hei,sans-serif;font-size:12px;line-height:1.5;list-style:none;outline:none;position:relative;text-align:left;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.rc-calendar-date-panel,.rc-calendar-date-panel-container{display:flex}.rc-calendar-date-panel,.rc-calendar-panel{display:block;outline:none;position:relative}.rc-calendar-week-number{width:286px}.rc-calendar-week-number-cell{text-align:center}.rc-calendar-header{border-bottom:1px solid #ccc;height:34px;line-height:30px;padding:0 10px;text-align:center;-ms-user-select:none;user-select:none;-webkit-user-select:none}.rc-calendar-header>a{display:inline-block;font-weight:700;line-height:34px;padding:0 5px;text-align:center;width:30px}.rc-calendar-header>a:hover{color:#f09f4g;cursor:pointer}.rc-calendar-header .rc-calendar-prev-month-btn{left:25px;position:absolute}.rc-calendar-header .rc-calendar-prev-month-btn:after{content:"‹"}.rc-calendar-header .rc-calendar-next-month-btn{position:absolute;right:25px}.rc-calendar-header .rc-calendar-next-month-btn:after{content:"›"}.rc-calendar-day-select,.rc-calendar-month-select,.rc-calendar-year-select{color:#666;display:inline-block;font-size:12px;font-weight:700;line-height:34px;padding:0 8px}.rc-calendar-day-select:hover,.rc-calendar-month-select:hover,.rc-calendar-year-select:hover{color:#f09f4g;cursor:pointer}.rc-calendar-day-select.rc-calendar-time-status:hover,.rc-calendar-month-select.rc-calendar-time-status:hover,.rc-calendar-year-select.rc-calendar-time-status:hover{color:#666;cursor:pointer}.rc-calendar-next-month-btn,.rc-calendar-next-year-btn,.rc-calendar-prev-month-btn,.rc-calendar-prev-year-btn{color:#999;cursor:pointer;display:inline-block;font-family:Arial,Hiragino Sans GB,Microsoft Yahei,"Microsoft Sans Serif",sans-serif;font-size:16px;line-height:34px;padding:0 5px;position:absolute;top:0}.rc-calendar-next-month-btn:hover,.rc-calendar-next-year-btn:hover,.rc-calendar-prev-month-btn:hover,.rc-calendar-prev-year-btn:hover{color:#f09f4g}.rc-calendar-next-year-btn{right:0}.rc-calendar-next-year-btn:after{content:"»"}.rc-calendar-prev-year-btn{left:0}.rc-calendar-prev-year-btn:after{content:"«"}.rc-calendar-body{height:217px;padding:9px 10px 10px}.rc-calendar-right-panel{height:inherit;width:68px}.rc-calendar-right-panel-header{height:34px;line-height:34px}.rc-calendar-right-panel-header span{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.rc-calendar-right-panel-body{border-left:1px solid #ccc;height:217px;overflow-y:scroll}.rc-calendar-right-panel-body ul{box-sizing:border-box;list-style:none;margin:0;padding:0;width:100%}.rc-calendar-right-panel-body ul li{cursor:pointer;padding:8px 0;text-align:center}.rc-calendar-right-panel-body ul li:hover{color:#e8bf6a}.rc-calendar-right-panel-body .rc-calendar-selected-time{color:#f09f3f}.rc-calendar-right-panel-body::-webkit-scrollbar{width:0}.rc-calendar-right-panel-footer{border-left:1px solid #ccc;height:39px;line-height:34px}.rc-calendar-right-panel-footer span{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rc-calendar-right-panel-footer,.rc-calendar-right-panel-header{color:#999;cursor:pointer;display:flex;font-size:16px;justify-content:center}.rc-calendar-right-panel-footer span:after,.rc-calendar-right-panel-header span:after{content:"›"}.rc-calendar table{background-color:transparent;border-collapse:collapse;max-width:100%;width:100%}.rc-calendar table,.rc-calendar td,.rc-calendar th{border:none}.rc-calendar-table{border-spacing:0;margin-bottom:0}.rc-calendar-column-header{line-height:18px;padding:6px 0;text-align:center;width:33px}.rc-calendar-column-header .rc-calendar-column-header-inner{display:block;font-weight:400}.rc-calendar-week-number-header .rc-calendar-column-header-inner{display:none}.rc-calendar-cell{padding:1px 0}.rc-calendar-date{background:transparent;border-radius:4px 4px;color:#666;display:block;height:26px;line-height:26px;margin:0 auto;padding:0;text-align:center;width:26px}.rc-calendar-date:hover{background:#fcecd9;cursor:pointer}.rc-calendar-selected-day .rc-calendar-date{background:#fcecd9}.rc-calendar-selected-date .rc-calendar-date{background:#f09f3f;color:#fff}.rc-calendar-selected-date .rc-calendar-date:hover{background:#f09f3f}.rc-calendar-today .rc-calendar-date{border:1px solid #f09f3f}.rc-calendar-disabled-cell .rc-calendar-date{background:#f3f3f3;border-radius:0;color:#bcbcbc;cursor:not-allowed;width:auto}.rc-calendar-disabled-cell .rc-calendar-date:hover{background:#f3f3f3}.rc-calendar-disabled-cell-first-of-row .rc-calendar-date{border-bottom-left-radius:4px;border-top-left-radius:4px}.rc-calendar-disabled-cell-last-of-row .rc-calendar-date{border-bottom-right-radius:4px;border-top-right-radius:4px}.rc-calendar-last-month-cell .rc-calendar-date,.rc-calendar-next-month-btn-day .rc-calendar-date{color:#bbb}.rc-calendar-footer{border-top:1px solid #ccc;padding:10px 0;position:relative;text-align:center}.rc-calendar-footer .rc-time-picker{width:90px}.rc-calendar-footer .rc-time-picker-input{height:24px}.rc-calendar-footer-show-ok{text-align:right}.rc-calendar-footer-show-ok .rc-calendar-footer-btn{padding-right:12px}.rc-calendar-footer-show-ok .rc-calendar-time-picker-btn{margin-left:0;padding:0 12px}.rc-calendar-footer-show-ok .rc-calendar-today-btn{float:left;padding-left:12px}.rc-calendar-footer-btn{margin-top:2px}.rc-calendar-footer-btn:after{clear:both;content:"x";font-size:0;height:0;overflow:hidden}.rc-calendar-time-picker-btn{margin-left:10px}.rc-calendar-ok-btn,.rc-calendar-time-picker-btn,.rc-calendar-today-btn{color:#f46830;display:inline-block;text-align:center}.rc-calendar-ok-btn:hover,.rc-calendar-time-picker-btn:hover,.rc-calendar-today-btn:hover{color:#f09f4g;cursor:pointer}.rc-calendar-ok-btn-disabled,.rc-calendar-ok-btn-disabled:hover,.rc-calendar-time-picker-btn-disabled,.rc-calendar-time-picker-btn-disabled:hover,.rc-calendar-today-btn-disabled,.rc-calendar-today-btn-disabled:hover{color:#bbb}.rc-calendar-today-btn{padding-left:10px}.rc-calendar-time-input{background-color:#fff;border:1px solid #d9d9d9;border-radius:6px 6px;color:#666;display:inline-block;height:25px;line-height:1.5;margin:0;padding:4px 10px;position:relative;-webkit-transform:border .3s cubic-bezier(.35,0,.25,1),background .3s cubic-bezier(.35,0,.25,1),box-shadow .3s cubic-bezier(.35,0,.25,1);transform:border .3s cubic-bezier(.35,0,.25,1),background .3s cubic-bezier(.35,0,.25,1),box-shadow .3s cubic-bezier(.35,0,.25,1);width:40px}.rc-calendar-time-input:hover{border-color:#f09f4g}.rc-calendar-time-input:focus{border-color:#f09f4g;box-shadow:0 0 3px #f09f4g}.rc-calendar-time-panel{background:#fff;bottom:0;left:0;outline:none;position:absolute;right:0;top:0;z-index:10}.rc-calendar-time-panel-header{border-bottom:1px solid #ccc;height:34px;line-height:34px;padding:0 10px;position:relative;text-align:center;-ms-user-select:none;user-select:none;-webkit-user-select:none}.rc-calendar-time-panel-body{padding:9px 10px 10px}.rc-calendar-time-panel-title{border-radius:4px;display:inline-block;font-weight:700;height:30px;line-height:22px;padding:4px 5px;text-align:center;width:180px}.rc-calendar-time-panel-table{border-collapse:separate;height:255px;table-layout:fixed;width:100%}.rc-calendar-time-panel-cell{height:42px;text-align:center;vertical-align:middle}.rc-calendar-time-panel-time{border-radius:4px;display:block;line-height:26px;margin:0 auto;width:26px}.rc-calendar-time-panel-time:hover{background:#fcecd9;cursor:pointer}.rc-calendar-time-panel-selected-cell .rc-calendar-time-panel-time,.rc-calendar-time-panel-selected-cell .rc-calendar-time-panel-time:hover{background:#f09f3f;color:#fff}.rc-calendar-month-panel{background:#fff;bottom:0;left:0;outline:none;position:absolute;right:0;top:0;z-index:10}.rc-calendar-month-panel>div{display:flex;flex-direction:column;height:100%}.rc-calendar-month-panel-hidden{display:none}.rc-calendar-month-panel-header{border-bottom:1px solid #ccc;height:34px;line-height:30px;padding:0 10px;position:relative;text-align:center;-ms-user-select:none;user-select:none;-webkit-user-select:none}.rc-calendar-month-panel-header>a{display:inline-block;font-weight:700;padding:4px 5px;text-align:center;width:30px}.rc-calendar-month-panel-header>a:hover{color:#f09f4g;cursor:pointer}.rc-calendar-month-panel-next-year-btn,.rc-calendar-month-panel-prev-year-btn{position:absolute;top:0}.rc-calendar-month-panel-next-year-btn:after{content:"»"}.rc-calendar-month-panel-prev-year-btn{left:0;-webkit-user-select:none;-ms-user-select:none;user-select:none}.rc-calendar-month-panel-prev-year-btn:after{content:"«"}.rc-calendar-month-panel .rc-calendar-month-panel-year-select{width:180px}.rc-calendar-month-panel-year-select-arrow{display:none}.rc-calendar-month-panel-next-year-btn{right:0;-webkit-user-select:none;-ms-user-select:none;user-select:none}.rc-calendar-month-panel-body{flex:1 1;padding:9px 10px 10px}.rc-calendar-month-panel-footer{border-top:1px solid #ccc;line-height:38px}.rc-calendar-month-panel-table{border-collapse:separate;height:100%;table-layout:fixed;width:100%}.rc-calendar-month-panel-cell{text-align:center}.rc-calendar-month-panel-cell .rc-calendar-month-panel-month{background:transparent;border-radius:4px 4px;color:#666;display:block;height:36px;line-height:36px;margin:0 auto;padding:0;text-align:center;width:46px}.rc-calendar-month-panel-cell .rc-calendar-month-panel-month:hover{background:#fcecd9;cursor:pointer}.rc-calendar-month-panel-cell-disabled .rc-calendar-month-panel-month{color:#bfbfbf}.rc-calendar-month-panel-cell-disabled .rc-calendar-month-panel-month:hover{background:#fff;cursor:not-allowed}.rc-calendar-month-panel-selected-cell .rc-calendar-month-panel-month,.rc-calendar-month-panel-selected-cell .rc-calendar-month-panel-month:hover{background:#f09f3f;color:#fff}.rc-calendar-month-header-wrap{height:308px;position:relative}.rc-calendar-year-panel{background:#fff;bottom:0;left:0;outline:none;position:absolute;right:0;top:0;z-index:10}.rc-calendar-year-panel>div{display:flex;flex-direction:column;height:100%}.rc-calendar-year-panel-hidden{display:none}.rc-calendar-year-panel-header{border-bottom:1px solid #ccc;height:34px;line-height:30px;padding:0 10px;position:relative;text-align:center;-ms-user-select:none;user-select:none;-webkit-user-select:none}.rc-calendar-year-panel-header>a{display:inline-block;font-weight:700;padding:4px 5px;text-align:center;width:30px}.rc-calendar-year-panel-header>a:hover{color:#f09f4g;cursor:pointer}.rc-calendar-year-panel-next-decade-btn,.rc-calendar-year-panel-prev-decade-btn{position:absolute;top:0}.rc-calendar-year-panel-next-decade-btn:after{content:"»"}.rc-calendar-year-panel-prev-decade-btn{left:0;-webkit-user-select:none;-ms-user-select:none;user-select:none}.rc-calendar-year-panel-prev-decade-btn:after{content:"«"}.rc-calendar-year-panel .rc-calendar-year-panel-decade-select{width:180px}.rc-calendar-year-panel-decade-select-arrow{display:none}.rc-calendar-year-panel-next-decade-btn{right:0;-webkit-user-select:none;-ms-user-select:none;user-select:none}.rc-calendar-year-panel-body{flex:1 1;padding:9px 10px 10px}.rc-calendar-year-panel-footer{border-top:1px solid #ccc;line-height:38px}.rc-calendar-year-panel-table{border-collapse:separate;height:100%;table-layout:fixed;width:100%}.rc-calendar-year-panel-cell{text-align:center}.rc-calendar-year-panel-year{background:transparent;border-radius:4px 4px;color:#666;display:block;height:36px;line-height:36px;margin:0 auto;padding:0;text-align:center;width:46px}.rc-calendar-year-panel-year:hover{background:#fcecd9;cursor:pointer}.rc-calendar-year-panel-selected-cell .rc-calendar-year-panel-year,.rc-calendar-year-panel-selected-cell .rc-calendar-year-panel-year:hover{background:#f09f3f;color:#fff}.rc-calendar-year-panel-last-decade-cell .rc-calendar-year-panel-year,.rc-calendar-year-panel-next-decade-cell .rc-calendar-year-panel-year{color:rgba(0,0,0,.25);-ms-user-select:none;user-select:none;-webkit-user-select:none}.rc-calendar-decade-panel{background:#fff;bottom:0;display:flex;flex-direction:column;left:0;outline:none;position:absolute;right:0;top:0;z-index:10}.rc-calendar-decade-panel-hidden{display:none}.rc-calendar-decade-panel-header{border-bottom:1px solid #ccc;height:34px;line-height:34px;padding:0 10px;position:relative;text-align:center;-ms-user-select:none;user-select:none;-webkit-user-select:none}.rc-calendar-decade-panel-header>a{display:inline-block;font-weight:700;padding:1px 5px;text-align:center;width:30px}.rc-calendar-decade-panel-header>a:hover{color:#f09f4g;cursor:pointer}.rc-calendar-decade-panel-next-century-btn,.rc-calendar-decade-panel-prev-century-btn{position:absolute;top:0}.rc-calendar-decade-panel-next-century-btn:after{content:"»"}.rc-calendar-decade-panel-prev-century-btn{left:0;-webkit-user-select:none;-ms-user-select:none;user-select:none}.rc-calendar-decade-panel-prev-century-btn:after{content:"«"}.rc-calendar-decade-panel-next-century-btn{right:0;-webkit-user-select:none;-ms-user-select:none;user-select:none}.rc-calendar-decade-panel-body{flex:1 1;padding:9px 10px 10px}.rc-calendar-decade-panel-footer{border-top:1px solid #ccc;line-height:38px}.rc-calendar-decade-panel-table{border-collapse:separate;height:100%;table-layout:fixed;width:100%}.rc-calendar-decade-panel-cell{text-align:center}.rc-calendar-decade-panel-decade{background:transparent;border-radius:4px 4px;color:#666;display:block;height:36px;line-height:36px;margin:0 auto;padding:0;text-align:center}.rc-calendar-decade-panel-decade:hover{background:#fcecd9;cursor:pointer}.rc-calendar-decade-panel-selected-cell .rc-calendar-decade-panel-decade,.rc-calendar-decade-panel-selected-cell .rc-calendar-decade-panel-decade:hover{background:#f09f3f;color:#fff}.rc-calendar-decade-panel-last-century-cell .rc-calendar-decade-panel-decade,.rc-calendar-decade-panel-next-century-cell .rc-calendar-decade-panel-decade{color:rgba(0,0,0,.25);-ms-user-select:none;user-select:none;-webkit-user-select:none}.rc-calendar-range{overflow:hidden;width:502px}.rc-calendar-range-part{position:relative;width:250px}.rc-calendar-range-part .rc-calendar-time-picker{top:69px}.rc-calendar-range-part .rc-calendar-time-picker-panel-select{width:77px}.rc-calendar-range-left{float:left}.rc-calendar-range-left .rc-calendar-time-picker-panel-select:last-child{border-right:1px solid #e9e9e9}.rc-calendar-range-right{float:right}.rc-calendar-range-right .rc-calendar-time-picker-panel{left:21px}.rc-calendar-range-right .rc-calendar-time-picker-panel-select:first-child{border-left:1px solid #e9e9e9}.rc-calendar-range-middle{height:35px;line-height:35px;margin-left:-10px;position:absolute;text-align:center}.rc-calendar-range .rc-calendar-date-panel:after{clear:both;content:".";display:block;height:0;visibility:hidden}.rc-calendar-range .rc-calendar-input-wrap{height:35px}.rc-calendar-range .rc-calendar-input,.rc-calendar-range .rc-time-picker-input{height:22px;padding:1px 7px}.rc-calendar-range .rc-calendar-body,.rc-calendar-range .rc-calendar-decade-panel-body,.rc-calendar-range .rc-calendar-month-panel-body,.rc-calendar-range .rc-calendar-year-panel-body{border-bottom:1px solid #e9e9e9}.rc-calendar-range.rc-calendar-week-number{width:574px}.rc-calendar-range.rc-calendar-week-number .rc-calendar-range-part{width:286px}.rc-calendar-range.rc-calendar-week-number .rc-calendar-range-part .rc-calendar-time-picker{top:69px}.rc-calendar-range.rc-calendar-week-number .rc-calendar-range-part .rc-calendar-time-picker-panel-select{width:89px}.rc-calendar-range.rc-calendar-week-number .rc-calendar-range-right .rc-calendar-time-picker-panel{left:36px}.rc-calendar-range .rc-calendar-decade-panel,.rc-calendar-range .rc-calendar-month-panel,.rc-calendar-range .rc-calendar-year-panel{top:35px}.rc-calendar-range .rc-calendar-month-panel .rc-calendar-year-panel{top:0}.rc-calendar-range .rc-calendar-decade-panel-table,.rc-calendar-range .rc-calendar-month-panel-table,.rc-calendar-range .rc-calendar-year-panel-table{height:198px}.rc-calendar-range .rc-calendar-in-range-cell{background:#ebf4f8;border-radius:0}.rc-calendar-range-bottom{text-align:right}.rc-calendar-range .rc-calendar-footer{border-top:none;padding:0}.rc-calendar-range .rc-calendar-footer-btn{padding:10px 12px 10px 0}.rc-calendar-range .rc-calendar-ok-btn{position:static}.rc-calendar-range .rc-calendar-today-btn{float:left}.rc-calendar-full{width:275px}.rc-calendar-full-header{border-bottom:1px solid #ccc;overflow:hidden;padding:5px 10px;text-align:center;-ms-user-select:none;user-select:none;-webkit-user-select:none}.rc-calendar-full-header-month-select,.rc-calendar-full-header-year-select{float:right;margin-right:5px;width:70px}.rc-calendar-full-header-switcher{display:inline-block;float:right}.rc-calendar-full-header-switcher-normal:hover{border-color:#f09f4g;box-shadow:0 0 2px rgba(45,183,245,.8);cursor:pointer}.rc-calendar-full-header-switcher-focus{background-color:#f09f3f;border-color:#f09f3f;color:#fff}.rc-calendar-full-header-switcher>span{border:1px solid #d9d9d9;color:#666;float:left;height:28px;line-height:24px;padding:0 10px}.rc-calendar-full-header-switcher>span:first-child{border-bottom-left-radius:4px;border-right:none;border-top-left-radius:4px}.rc-calendar-full-header-switcher>span:last-child{border-bottom-right-radius:4px;border-left:none;border-top-right-radius:4px}.rc-calendar-fullscreen{width:auto}.rc-calendar-fullscreen .rc-calendar-full-header{border-bottom:none}.rc-calendar-fullscreen .rc-calendar-column-header{padding-right:12px;text-align:right}.rc-calendar-fullscreen .rc-calendar-cell{padding:0}.rc-calendar-fullscreen .rc-calendar-cell .rc-calendar-date,.rc-calendar-fullscreen .rc-calendar-month-panel-cell .rc-calendar-month-panel-month{border:none;border-radius:0;border-top:2px solid #eee;display:block;height:116px;margin:0 4px;padding-right:8px;text-align:right;width:auto}.rc-calendar-fullscreen .rc-calendar-month-panel-selected-cell .rc-calendar-month-panel-month,.rc-calendar-fullscreen .rc-calendar-selected-day .rc-calendar-date{background-color:#fcecd9;color:#666}.rc-calendar-fullscreen .rc-calendar-month-panel-selected-cell .rc-calendar-month-panel-month,.rc-calendar-fullscreen .rc-calendar-today .rc-calendar-date{border-top-color:#f09f3f;color:#f09f3f}.sf-editor-helper{background-color:#fff;border-left:1px solid #eee;flex:1 0 350px;height:100%;overflow-x:hidden;overflow-y:auto}.sf-editor-helper__header{background-color:#fafaf9;border-bottom:1px solid #eee;box-sizing:border-box;display:flex;font-size:1rem;height:50px;justify-content:space-between;line-height:50px;padding:0 10px}.sf-editor-helper__header .title{font-weight:bolder;margin-bottom:0}.sf-editor-helper__header .help-close{cursor:pointer}.sf-editor-helper__content{box-sizing:border-box;font-size:.8rem;height:calc(100% - 50px);overflow-y:auto;padding:0 15px}.sf-editor-helper .sf-editor-classify-hotkeys{color:#2c2d30;display:flex;flex-direction:column;justify-content:space-between}.sf-editor-helper .sf-editor-classify-hotkeys .hotkey-type{border-bottom:1px solid #eee;font-weight:bolder;line-height:2;margin:10px 0 0}.sf-editor-helper .sf-editor-classify-hotkeys .hotkey-list{list-style:none;padding:0}.sf-editor-helper .sf-editor-classify-hotkeys .hotkey-shortcuts{border-bottom:1px solid #eee;color:#2c2d30;display:flex;justify-content:space-between;padding:10px 0}.sf-editor-helper .sf-editor-classify-hotkeys .hotkey-shortcuts-left{line-height:30px;word-break:break-all}.sf-editor-helper .sf-editor-classify-hotkeys .hotkey-shortcuts-right{min-width:-webkit-max-content;min-width:max-content}.sf-editor-helper .sf-editor-classify-hotkeys .hotkey-shortcuts-right .key{background-color:#e8e8e8;border:1px solid #919191;border-radius:3px;box-shadow:0 1px 0 #919193;display:inline-block;height:30px;line-height:20px;margin-left:5px;padding:3px 5px}.rc-calendar-table{table-layout:auto}.rc-calendar-table tbody tr{height:auto}.rc-calendar-input:focus{border-color:transparent}.sf-editor-outline{border-left:1px solid #ddd;padding:.5rem 1rem .5rem 0}.sf-editor-outline .outline-h2,.sf-editor-outline .outline-h3{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sf-editor-outline .outline-h2{color:#364149;cursor:pointer;line-height:2.5;margin-left:20px;white-space:nowrap}.sf-editor-outline .outline-h2:hover{color:#eb8205}.sf-editor-outline .outline-h3{color:#364149;cursor:pointer;line-height:2.5;margin-left:40px;white-space:nowrap}.sf-editor-outline .outline-h3:hover{color:#eb8205}.sf-editor-outline .empty-container{margin-top:10px;text-align:center}.sf-editor-outline .outline-h2.active,.sf-editor-outline .outline-h3.active{color:#eb8205}.user-option-name{font-size:14px;font-weight:500}.user-option-email{font-size:12px}.sf-article-info-container{background-color:#f5f5f5;display:flex;flex:1 1;flex-direction:column;min-height:0;-webkit-user-select:none;user-select:none}.sf-article-info-container .nav{background-color:#fff;border-bottom:1px solid #eee;flex-shrink:0;flex-wrap:nowrap;height:36px;justify-content:space-around;min-width:125px;padding:10px 0}.sf-article-info-container .nav .nav-item{padding:0 .75rem}.sf-article-info-container .nav .nav-link{margin-right:0;padding:0 .75rem;transition:color .3s}.sf-article-info-container .nav-link{color:#888}.sf-article-info-container .nav .nav-link.active{border-bottom:0;color:#ff9800}.sf-article-info-container .nav .iconfont{font-size:.875rem;font-weight:700}.sf-article-info-container .sf-article-info-content{flex:1 1;font-size:.937rem;min-height:0;overflow:auto}.sf-article-info-container .sf-article-info-content:hover{overflow:auto}.invite-accept-icon{color:green;font-size:1.25rem;font-style:normal;line-height:1;margin-left:.5rem;vertical-align:middle}.invite-link-in-popup,.invite-link-in-popup:hover{text-decoration:none}.invite-link-icon-in-popup{color:#f89a68;cursor:pointer;font-size:.875rem;font-style:normal;line-height:1;margin-left:.5rem;vertical-align:middle}.submit-btn .loading-icon{height:21px;margin:1px auto;width:21px}.sf-markdown-help-wrapper{background-color:#fff;border-left:1px solid #eee;display:none;flex:0 0 300px;height:100%;overflow-x:hidden;overflow-y:auto;width:300px}.sf-markdown-help-wrapper.active{display:flex;flex-direction:column}.user-details-popover{background:#fff;border:1px solid #eee;border-radius:4px;box-shadow:0 0 14px rgba(0,0,0,.14);left:2px;z-index:1000}.user-details-main{border-bottom:1px solid #eee}.user-details-name{font-size:1rem;font-weight:500}.sf-slate-editor-container{display:flex;flex:1 1;flex-direction:column;min-height:0;min-width:0}.sf-slate-editor-container .sf-slate-editor-toolbar{align-items:center;background-color:#fff;border-bottom:1px solid #e5e6e8;display:flex;height:44px;justify-content:center;padding:0 10px;position:relative;-webkit-user-select:none;user-select:none;z-index:102}.sf-slate-editor-container .sf-slate-editor-content{background:#f5f5f5;display:flex;height:calc(100% - 44px);min-height:0;position:relative;width:100%}.sf-slate-editor-container .sf-slate-scroll-container{background-color:#fafaf9;height:100%;overflow:auto;width:100%}.sf-slate-editor-container .sf-slate-scroll-container.isWin::-webkit-scrollbar{height:8px;width:8px}.sf-slate-editor-container .sf-slate-scroll-container.isWin::-webkit-scrollbar-button{display:none}.sf-slate-editor-container .sf-slate-scroll-container.isWin::-webkit-scrollbar-thumb{background-color:#ceced4;border-radius:10px}.sf-slate-editor-container .sf-slate-article-container{flex:1 1;margin:0 auto;max-width:950px;min-width:400px;padding-bottom:20px;padding-top:20px;position:relative}.sf-slate-editor-container .sf-slate-editor-content .article{background-color:#fff;border:1px solid #e5e6e8;box-shadow:0 0 15px rgba(0,0,0,.06);max-width:950px;min-height:1200px;padding:40px 60px}.sf-slate-editor-container .sf-slate-editor-content .article div:first-child{outline:none}@media (max-width:991.8px){.sf-slate-editor-toolbar{justify-content:flex-start!important;overflow-x:auto;padding-right:40px!important}.sf-slate-editor-toolbar::-webkit-scrollbar{display:none}.sf-slate-editor-toolbar .sf-slate-article-info-control,.sf-slate-editor-toolbar .sf-slate-help-info-control{align-items:center;background-color:#fcfcfc;height:43px;padding:0 20px;position:fixed;right:0}.sf-slate-article-container{width:100%}.sf-slate-article-container .article{margin:20px!important;padding:20px 30px}.sf-markdown-help-wrapper{flex:0 0 250px;width:250px!important}}@media (max-width:768px){.sf-slate-editor-container .sf-slate-article-container{flex:1 1;margin:0 auto;max-width:950px;min-width:auto;padding-bottom:0;padding-top:0;position:relative}.sf-slate-article-container .article{border:0!important;margin:0!important;padding:10px 15px!important}}.share-dialog .share-dialog-content{display:flex;flex-direction:column;min-height:27rem;padding:0}@media (min-width:768px){.share-dialog .share-dialog-content{flex-direction:row}}.share-dialog-content .share-dialog-side{border-bottom:1px solid #eee;flex-basis:22%;padding:1rem}.share-dialog .nav .nav-item .nav-link{padding:.3125rem .25rem}@media (min-width:768px){.share-dialog-content .share-dialog-side{border:0;border-right:1px solid #eee;padding:12px 8px}.share-dialog-side .nav{flex-direction:column}.share-dialog-side .nav-pills .nav-item .nav-link{margin:0;padding:.3125rem .5rem;width:100%}}.share-dialog-content .share-dialog-main{display:flex;flex-basis:78%;padding:1rem}.share-dialog-content .share-dialog-main .tab-content{flex:1 1}.share-dialog-content .share-dialog-main .tab-pane{height:100%}.share-list-container{max-height:20rem;min-height:10rem;overflow:auto}#share-link-panel .share-list-container{max-height:23rem;overflow:hidden}#share-link-panel .table-real-container{height:20rem;overflow:auto}.share-dialog-content label{padding:.5rem 0 .25rem}.share-dialog-content label.form-check-label{padding:.25rem 0}.link-operation-content{margin-left:1.25rem}.link-operation-icon{color:#9aa0ac}.tip{color:grey;margin-bottom:1rem}.generate-share-link .passwd,.generate-upload-link .passwd{width:60%}.generate-share-link .permission{margin-left:2.5rem}.generate-link-btn{margin-top:1.125rem}input.expire-input{display:inline-block;height:1.5rem;margin:0 .25rem 0 1.25rem;padding:.25rem;width:4rem}.expire-input-border{border-bottom-right-radius:0;border-top-right-radius:0;height:2.375rem!important;padding:.375rem .75rem!important}.share-dialog-main .permission-editor .permission-editor__menu{width:240px}.expir-span{border:1px solid rgba(0,40,100,.12);border-bottom-right-radius:3px;border-left:none;border-top-right-radius:3px;display:inline-block;font-size:.9375rem;height:2.375rem;line-height:2.25;margin-left:-5px;min-width:2.375rem;padding:0 8px;position:absolute;text-align:center;top:4px}.custom-permission .permission-header{align-items:center;border-bottom:1px solid #efefef;display:flex;justify-content:space-between;padding:.375rem 0}.custom-permission .permission-header .back-icon{color:#999;cursor:pointer;margin-right:10px}.custom-permission .permission-name-desc{margin-top:.375rem}.custom-permission .permission-name-desc label{color:#999;font-size:14px}.custom-permission .permission-name-desc .permission-desc,.custom-permission .permission-name-desc .permission-name{flex:1 1}.custom-permission .permission-name-desc .permission-desc{margin-left:.4rem}.custom-permission .permissions-list-body{max-height:350px;overflow-y:scroll}.empty-loading-page{height:100%;position:fixed;width:100%}.page-centered{left:50%;position:fixed;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.lds-ripple{display:inline-block;height:64px;position:relative;width:64px}.lds-ripple div{-webkit-animation:lds-ripple 1s cubic-bezier(0,.2,.8,1) infinite;animation:lds-ripple 1s cubic-bezier(0,.2,.8,1) infinite;border:4px solid #eb8205;border-radius:50%;opacity:1;position:absolute}.lds-ripple div:nth-child(2){-webkit-animation-delay:-.5s;animation-delay:-.5s}@-webkit-keyframes lds-ripple{0%{height:0;left:28px;opacity:1;top:28px;width:0}to{height:58px;left:-1px;opacity:0;top:-1px;width:58px}}@keyframes lds-ripple{0%{height:0;left:28px;opacity:1;top:28px;width:0}to{height:58px;left:-1px;opacity:0;top:-1px;width:58px}}.sf-slate-viewer-scroll-container{background:#f4f4f4;display:flex;flex:1 1;min-height:0;min-width:0;overflow:auto;padding:30px 0 15px}.sf-slate-viewer-scroll-container.isWin::-webkit-scrollbar{height:8px;width:8px}.sf-slate-viewer-scroll-container.isWin::-webkit-scrollbar-button{display:none}.sf-slate-viewer-scroll-container.isWin::-webkit-scrollbar-thumb{background-color:#ceced4;border-radius:10px}.sf-slate-viewer-scroll-container .sf-slate-viewer-article-container{flex:1 1;margin:0 auto 15px}.sf-slate-viewer-scroll-container.outline .sf-slate-viewer-article-container{margin:0 340px 15px 40px}.sf-slate-viewer-scroll-container .sf-slate-viewer-outline{height:80%;overflow-y:hidden;padding-right:1rem;position:fixed;right:0;top:97px;width:300px}.sf-slate-viewer-scroll-container .sf-slate-viewer-outline:hover{overflow-y:auto}.sf-slate-viewer-scroll-container .article{background:#fff;border:1px solid #e6e6dd;margin:0 auto;max-width:950px;min-height:calc(100% - 15px);padding:40px 60px}@media (max-width:991.98px){.sf-slate-viewer-article-container{margin:0!important;padding:0 10px;width:100%}.sf-slate-viewer-outline{display:none!important}}@media (max-width:768px){.sf-slate-viewer-article-container .article{margin:0!important;padding:20px!important}}.file-chooser-container{border:1px solid rgba(0,40,100,.12);border-radius:3px;font-size:1rem;height:20rem;overflow:auto;padding:.5rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.item-toggle{color:silver;cursor:pointer;height:1.5rem;left:0;line-height:1.5rem!important;position:absolute;text-align:center;top:0;width:1.5rem}.file-chooser-container .list-view{margin-top:.25rem}.list-view-header{padding-left:1.5rem;position:relative}.list-view-header:hover{background-color:#fdefb9}.list-view-header .name{color:#eb8205}.list-view-content{list-style:none;margin:0;padding:0}.file-chooser-item{padding-left:22px;position:relative}.file-chooser-item .item-info{cursor:pointer;height:1.5rem;line-height:1.625;position:relative}.file-chooser-item .item-active{background:#f3af7d!important;border-radius:2px;box-shadow:inset 0 0 1px #999;color:#fff}.file-chooser-item .item-info:hover{background:#fdefb9;border-radius:2px;box-shadow:inset 0 0 1px #999}.file-chooser-item .item-info .name{flex:1 1}.file-chooser-item .item-active .icon{color:#fff!important}.file-chooser-search-input{position:relative}.file-chooser-search-input .search-control{position:absolute;right:.7rem;top:.5rem}.file-chooser-search-input .search-input{width:100%}.file-chooser-search-container{border:1px solid #eee;height:20rem;overflow:auto;padding:10px;position:relative}.file-chooser-search-close{position:absolute;right:-.5rem;top:-.5rem}.searched-active{background:#f3af7d!important;border-radius:2px;box-shadow:inset 0 0 1px #999}.searched-active td{color:#fff}.searched-active .icon{color:#fff!important}.select-open-repo{background:#fdefb9}.file-chooser-table td{border-bottom:1px solid transparent}.file-chooser-item .item-info .item-text{font-size:15px;line-height:24px;overflow:hidden;padding-left:2.8rem;text-overflow:ellipsis;white-space:nowrap}.file-chooser-item .item-info .item-left-icon{align-items:center;display:flex;left:0;padding-left:1.5rem;position:absolute;top:0}#wrapper{height:100%}.shared-file-view-md{height:100%;overflow-y:hidden}.shared-file-view-md-header{background:#f4f4f7;border-bottom:1px solid #e8e8e8;height:53px;justify-content:space-between;padding:8px 16px 4px}.shared-file-view-md-main{height:calc(100% - 53px)}.shared-file-view-head{align-items:center;background:#fff;display:flex;height:60px;justify-content:space-between;margin:0 auto;width:950px}.shared-file-view-head h2{color:#222;font-size:1.4em;font-weight:400;margin-bottom:0}.shared-file-view-head .share-by{margin:0}.shared-file-view-body{background:#f4f4f4;border:1px solid #ededed;height:calc(100% - 60px);overflow:auto;padding:30px 0 15px}.shared-file-view-body.md-view{display:flex;min-height:0;padding:0}.shared-file-view-body .sf-slate-viewer-outline{top:145px!important}@media (max-width:991.98px){.shared-file-view-head{padding:10px 20px;width:100%}}.dialog-operation{align-items:center;display:flex}.dialog-operation .file-internal-link{color:#999;cursor:pointer;font-size:12px;font-weight:700;margin-left:.5rem;margin-top:2px}.dialog-operation .file-internal-link:hover{color:#333}.sf-simple-slate-editor-container{display:flex;flex:1 1;flex-direction:column;min-height:0;min-width:0}.sf-simple-slate-editor-container .sf-slate-editor-toolbar{align-items:center;background-color:#fff;border-bottom:1px solid #e5e6e8;display:flex;height:44px;justify-content:flex-start;padding:0 10px;position:relative;-webkit-user-select:none;user-select:none;z-index:102}.sf-simple-slate-editor-container .sf-slate-editor-content{background:#f5f5f5;display:flex;height:calc(100% - 44px);min-height:0;position:relative;width:100%}.sf-simple-slate-editor-container .sf-slate-scroll-container{height:100%;overflow:auto;width:100%}.sf-simple-slate-editor-container .sf-slate-scroll-container.isWin::-webkit-scrollbar{height:8px;width:8px}.sf-simple-slate-editor-container .sf-slate-scroll-container.isWin::-webkit-scrollbar-button{display:none}.sf-simple-slate-editor-container .sf-slate-scroll-container.isWin::-webkit-scrollbar-thumb{background-color:#ceced4;border-radius:10px}.sf-simple-slate-editor-container .sf-slate-article-container{height:100%;overflow:auto;width:100%}.sf-simple-slate-editor-container .sf-slate-editor-content .article{background-color:#fff;border:none;margin:0;padding:10px}.sf-simple-slate-editor-container .sf-slate-editor-content .article div:first-child{outline:none}.file-tag-list .file-tag-item{align-items:center;border-radius:10px;display:flex;margin:.25rem 0;max-width:180px;padding:0 .5rem;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.file-tag-list .file-tag-item .tag-name{color:#fff;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.detail-container{border-left:1px solid #e8e8e8;display:flex;flex:1 1;flex-direction:column}.detail-header{align-items:center;background-color:#f9f9f9;border-bottom:1px solid #e8e8e8;display:flex;height:40px;justify-content:center;line-height:2.5rem;position:relative}.detail-header .detail-control{color:#b9b9b9;font-size:16px;padding-left:.5rem}.detail-header .detail-control:hover{color:#888}.detail-header .detail-title{align-items:center;display:flex;flex:1 1;justify-content:center;margin-left:.25rem;width:0}.detail-header .detail-title .name{color:#322;font-size:1rem;line-height:1.5rem;margin:0 .5rem 0 .25rem;vertical-align:middle}.detail-body{display:flex;flex:1 1;flex-direction:column;overflow-x:hidden;overflow-y:auto}.dirent-info .img{align-items:center;display:flex;height:10rem;justify-content:center;padding:.5rem 0}.dirent-info .img .thumbnail{display:inline-block;max-height:100%;max-width:calc(100% - 4px)}.dirent-table-container{display:flex;padding:10px 20px 20px}.dirent-table-container tr{border:none}.dirent-table-container table{flex:1 1}.dirent-table-container td,.dirent-table-container th{border:none;padding:5px 3px}.dirent-table-container th{color:#9c9c9c;font-size:13px;font-weight:400;text-align:left}.dirent-table-container td{color:#333;font-size:14px;word-break:break-all}.dirent-table-container .file-tag-container th{list-style:none;padding-top:8px;vertical-align:top}.dirent-table-container .file-tag-container .tag-list{list-style:none}.dirent-table-container .seafile-multicolor-icon.seafile-multicolor-icon-tag{cursor:pointer;height:20px;width:20px}.file-related-files th{vertical-align:top}.file-related-files td i{padding:0}.file-related-files td ul{list-style:none;max-height:100px;overflow-y:scroll;white-space:nowrap}.file-related-files td ul li{margin-bottom:5px;overflow-x:hidden;text-overflow:ellipsis}.file-related-files ul li a,.list-related-file-table tr td a{color:#333}.list-related-file-body{max-height:500px;min-height:200px;overflow-y:scroll}.no-related-file{text-align:center}.sf-add-related-file .alert{margin:.5rem}.sf-add-related-file .related-file-subtitle{display:inline-block;margin-bottom:.5rem}.detail-container .nav-item .nav-link,.detail-container .nav-item .nav-link i{margin:0 auto}.detail-container .edit-file-extra-attributes-btn{background-color:#f0f0f0;border-radius:3px;color:#929292;cursor:pointer;font-size:14px;height:28px;line-height:28px;max-width:100%;min-width:80px;padding:0 10px;text-align:center;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.detail-container .edit-file-extra-attributes-btn:hover{background-color:#dbdbdb;color:#666;cursor:pointer}.file-uploader-container{display:flex}.file-uploader{bottom:99999px;position:fixed}.uploader-list-view{background-color:#fff;border:1px solid #ddd;border-radius:3px;bottom:1px;box-shadow:0 0 6px #ddd;display:flex;flex-direction:column;height:20rem;position:fixed;right:1px;width:35rem;z-index:1050}.uploader-list-header{background-color:#f0f0f0;color:#322;display:flex;font-size:1rem;justify-content:space-between;line-height:1.5;min-height:2.25rem;padding:.375rem .625rem}.uploader-list-header .uploader-options span{color:#b8b8b8;cursor:pointer;display:inline-block;font-size:18px;margin-left:.25rem}.uploader-list-content{background-color:#fff;overflow:auto;padding:0 1rem 1.25rem}.file-upload-item{height:44px}.upload-progress .progress-container{height:24px;padding:4px 0}.upload-progress .progress{height:5px;width:80%}.upload-progress .progress .progress-bar{color:#e83}.upload-progress .progress-text{color:#666;font-size:12px;line-height:12px;margin-top:2px}.upload-operation .saving{word-wrap:break-word;color:#ee8204}.disabled-link{color:#999}#wrapper,.wrapper{display:flex;flex-direction:column;height:100%;width:100%}#header{display:flex}#main{flex:1 1;min-height:0}#main,.side-panel{display:flex;overflow:hidden}.side-panel{flex:0 0 22%;flex-direction:column}.main-panel{display:flex;flex:1 0 78%;flex-direction:column}@media (max-width:767px){.side-panel{background:#f8f8f8;height:100%;left:-300px;max-width:calc(100% - 40px);position:fixed;transition:all .3s ease;width:300px;z-index:1031}}.main-panel-north,.side-panel-north{background:#f4f4f7;border-bottom:1px solid #e8e8e8;display:flex;flex-shrink:0;padding:.5rem 1rem;position:relative;z-index:100}@media (max-width:767px){.side-panel-north{border-right:1px solid #eee}.main-panel-north{padding-bottom:.25rem}}.main-panel-center,.side-panel-center{display:flex;flex:1 1;flex-direction:column;min-height:0;position:relative}.side-panel-center,.side-panel-footer{border-right:1px solid #eee;min-height:0}.cur-view-container{display:flex;flex:1 1 auto;flex-direction:column;min-height:0;overflow:hidden}.cur-view-path{align-items:center;background:#f9f9f9;display:flex;flex-shrink:0;justify-content:space-between;max-height:40px;padding:8px 16px;position:relative}.cur-view-path:after{border-bottom:1px solid #e8e8e8;bottom:0;content:"";left:16px;position:absolute;right:16px}.cur-view-content{display:flex;flex:1 1;flex-direction:column;min-height:0;overflow:auto;padding:0 1rem}.table-container{flex:1 1;padding:0 1rem 10rem;position:relative}.table-drop-active:before{border:1px solid #45aaf2;content:"";display:block;height:100%;left:0;position:absolute;width:100%;z-index:-1}.cur-view-content .article{padding:40px}.cur-view-content .hd{background:#f2f2f2;border-radius:2px;height:48px;margin-bottom:.5em;padding:9px 10px}.cur-view-content .tip{font-size:14px}.cur-view-detail{-webkit-animation:move .5s ease-in-out 1;animation:move .5s ease-in-out 1;background-color:#fff;box-shadow:-1px 0 3px 0 #ccc;display:block;height:100%;position:absolute;right:0;width:300px;z-index:50}@-webkit-keyframes move{0%{opacity:.5;right:-500px}to{opacity:1;right:0}}@keyframes move{0%{opacity:.5;right:-500px}to{opacity:1;right:0}}.cur-view-detail .detail-container{height:100%}.reach-router,div[tabindex="-1"][role=group]{display:flex;flex:1 1;flex-direction:column;min-height:0}.header{align-items:center;background-color:#fff;border-bottom:1px solid #e5e5e5;box-shadow:0 3px 2px -2px hsla(0,0%,78%,.15);display:flex;flex-shrink:0;justify-content:space-between;padding:.625rem}.header .cur-file-info{display:flex;margin-left:.5rem}.header .info-item{align-items:center;display:flex;font-size:1.2rem;font-weight:700;justify-content:center;margin-right:.5rem}.header .file-copywriting{color:#999;font-size:1rem;font-weight:400;margin-left:.5rem}.header .file-feature{background-color:#fbcb09;color:#fff;font-size:1.8rem;height:2.9375rem;width:2.9375rem}.header .file-operation-btn{margin-right:.25rem}.review{padding:0}.review .cur-file-info{margin:0}.review .file-feature{font-size:3rem;height:4.1875rem;width:4.1875rem}.review-state{border:1px solid transparent;border-radius:3px;margin:auto .5rem;position:relative}.review-state-finished{background-color:#dff1cc;border-color:#d2ecb8;color:#316100}.review-state-closed{background-color:#f5d2d2;border-color:#f1c1c0;color:#6b1110}.review-state-closed:focus,.review-state-finished:focus{box-shadow:0 0 0 0}img:not([src]),img[src=""]{opacity:0}.cur-view-path.draft-review-nav,.cur-view-path.share-upload-nav{padding:0 1rem}.cur-view-container .fa-star.fas{color:#999}.path-container{align-items:center;display:flex;max-width:80%;word-break:keep-all}.path-container a,.path-container span{flex-shrink:1;max-height:50px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.path-container span:first-child,.path-container span:last-child{flex-shrink:0}.path-container span.path-file-name,.path-container span.path-repo-name{flex-shrink:1}.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.video-js .vjs-modal-dialog,.vjs-button>.vjs-icon-placeholder:before,.vjs-modal-dialog .vjs-modal-dialog-content{height:100%;left:0;position:absolute;top:0;width:100%}.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.vjs-button>.vjs-icon-placeholder:before{text-align:center}@font-face{font-family:VideoJS;font-style:normal;font-weight:400;src:url(data:application/font-woff;charset=utf-8;base64,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) format("woff")}.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.video-js .vjs-play-control .vjs-icon-placeholder,.vjs-icon-play{font-family:VideoJS;font-style:normal;font-weight:400}.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.video-js .vjs-play-control .vjs-icon-placeholder:before,.vjs-icon-play:before{content:"\f101"}.vjs-icon-play-circle{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-play-circle:before{content:"\f102"}.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder,.vjs-icon-pause{font-family:VideoJS;font-style:normal;font-weight:400}.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before,.vjs-icon-pause:before{content:"\f103"}.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder,.vjs-icon-volume-mute{font-family:VideoJS;font-style:normal;font-weight:400}.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before,.vjs-icon-volume-mute:before{content:"\f104"}.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder,.vjs-icon-volume-low{font-family:VideoJS;font-style:normal;font-weight:400}.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before,.vjs-icon-volume-low:before{content:"\f105"}.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder,.vjs-icon-volume-mid{font-family:VideoJS;font-style:normal;font-weight:400}.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before,.vjs-icon-volume-mid:before{content:"\f106"}.video-js .vjs-mute-control .vjs-icon-placeholder,.vjs-icon-volume-high{font-family:VideoJS;font-style:normal;font-weight:400}.video-js .vjs-mute-control .vjs-icon-placeholder:before,.vjs-icon-volume-high:before{content:"\f107"}.video-js .vjs-fullscreen-control .vjs-icon-placeholder,.vjs-icon-fullscreen-enter{font-family:VideoJS;font-style:normal;font-weight:400}.video-js .vjs-fullscreen-control .vjs-icon-placeholder:before,.vjs-icon-fullscreen-enter:before{content:"\f108"}.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder,.vjs-icon-fullscreen-exit{font-family:VideoJS;font-style:normal;font-weight:400}.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before,.vjs-icon-fullscreen-exit:before{content:"\f109"}.vjs-icon-square{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-square:before{content:"\f10a"}.vjs-icon-spinner{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-spinner:before{content:"\f10b"}.video-js .vjs-subs-caps-button .vjs-icon-placeholder,.video-js .vjs-subtitles-button .vjs-icon-placeholder,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder,.vjs-icon-subtitles{font-family:VideoJS;font-style:normal;font-weight:400}.video-js .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js .vjs-subtitles-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder:before,.vjs-icon-subtitles:before{content:"\f10c"}.video-js .vjs-captions-button .vjs-icon-placeholder,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder,.vjs-icon-captions{font-family:VideoJS;font-style:normal;font-weight:400}.video-js .vjs-captions-button .vjs-icon-placeholder:before,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before,.vjs-icon-captions:before{content:"\f10d"}.video-js .vjs-chapters-button .vjs-icon-placeholder,.vjs-icon-chapters{font-family:VideoJS;font-style:normal;font-weight:400}.video-js .vjs-chapters-button .vjs-icon-placeholder:before,.vjs-icon-chapters:before{content:"\f10e"}.vjs-icon-share{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-share:before{content:"\f10f"}.vjs-icon-cog{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-cog:before{content:"\f110"}.video-js .vjs-play-progress,.video-js .vjs-volume-level,.vjs-icon-circle,.vjs-seek-to-live-control .vjs-icon-placeholder{font-family:VideoJS;font-style:normal;font-weight:400}.video-js .vjs-play-progress:before,.video-js .vjs-volume-level:before,.vjs-icon-circle:before,.vjs-seek-to-live-control .vjs-icon-placeholder:before{content:"\f111"}.vjs-icon-circle-outline{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-circle-outline:before{content:"\f112"}.vjs-icon-circle-inner-circle{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-circle-inner-circle:before{content:"\f113"}.vjs-icon-hd{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-hd:before{content:"\f114"}.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder,.vjs-icon-cancel{font-family:VideoJS;font-style:normal;font-weight:400}.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before,.vjs-icon-cancel:before{content:"\f115"}.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder,.vjs-icon-replay{font-family:VideoJS;font-style:normal;font-weight:400}.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before,.vjs-icon-replay:before{content:"\f116"}.vjs-icon-facebook{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-facebook:before{content:"\f117"}.vjs-icon-gplus{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-gplus:before{content:"\f118"}.vjs-icon-linkedin{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-linkedin:before{content:"\f119"}.vjs-icon-twitter{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-twitter:before{content:"\f11a"}.vjs-icon-tumblr{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-tumblr:before{content:"\f11b"}.vjs-icon-pinterest{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-pinterest:before{content:"\f11c"}.video-js .vjs-descriptions-button .vjs-icon-placeholder,.vjs-icon-audio-description{font-family:VideoJS;font-style:normal;font-weight:400}.video-js .vjs-descriptions-button .vjs-icon-placeholder:before,.vjs-icon-audio-description:before{content:"\f11d"}.video-js .vjs-audio-button .vjs-icon-placeholder,.vjs-icon-audio{font-family:VideoJS;font-style:normal;font-weight:400}.video-js .vjs-audio-button .vjs-icon-placeholder:before,.vjs-icon-audio:before{content:"\f11e"}.vjs-icon-next-item{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-next-item:before{content:"\f11f"}.vjs-icon-previous-item{font-family:VideoJS;font-style:normal;font-weight:400}.vjs-icon-previous-item:before{content:"\f120"}.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder,.vjs-icon-picture-in-picture-enter{font-family:VideoJS;font-style:normal;font-weight:400}.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder:before,.vjs-icon-picture-in-picture-enter:before{content:"\f121"}.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder,.vjs-icon-picture-in-picture-exit{font-family:VideoJS;font-style:normal;font-weight:400}.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder:before,.vjs-icon-picture-in-picture-exit:before{content:"\f122"}.video-js{background-color:#000;box-sizing:border-box;color:#fff;display:block;font-family:Arial,Helvetica,sans-serif;font-size:10px;font-style:normal;font-weight:400;line-height:1;padding:0;position:relative;vertical-align:top;word-break:normal}.video-js:-moz-full-screen{position:absolute}.video-js:-webkit-full-screen{height:100%!important;width:100%!important}.video-js[tabindex="-1"]{outline:none}.video-js *,.video-js :after,.video-js :before{box-sizing:inherit}.video-js ul{font-family:inherit;font-size:inherit;line-height:inherit;list-style-position:outside;margin:0}.video-js.vjs-1-1,.video-js.vjs-16-9,.video-js.vjs-4-3,.video-js.vjs-9-16,.video-js.vjs-fluid{max-width:100%;width:100%}.video-js.vjs-1-1:not(.vjs-audio-only-mode),.video-js.vjs-16-9:not(.vjs-audio-only-mode),.video-js.vjs-4-3:not(.vjs-audio-only-mode),.video-js.vjs-9-16:not(.vjs-audio-only-mode),.video-js.vjs-fluid:not(.vjs-audio-only-mode){height:0}.video-js.vjs-16-9:not(.vjs-audio-only-mode){padding-top:56.25%}.video-js.vjs-4-3:not(.vjs-audio-only-mode){padding-top:75%}.video-js.vjs-9-16:not(.vjs-audio-only-mode){padding-top:177.7777777778%}.video-js.vjs-1-1:not(.vjs-audio-only-mode){padding-top:100%}.video-js .vjs-tech,.video-js.vjs-fill:not(.vjs-audio-only-mode){height:100%;width:100%}.video-js .vjs-tech{left:0;position:absolute;top:0}.video-js.vjs-audio-only-mode .vjs-tech{display:none}body.vjs-full-window{height:100%;margin:0;padding:0}.vjs-full-window .video-js.vjs-fullscreen{bottom:0;left:0;overflow:hidden;position:fixed;right:0;top:0;z-index:1000}.video-js.vjs-fullscreen:not(.vjs-ios-native-fs){height:100%!important;padding-top:0!important;width:100%!important}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-hidden{display:none!important}.vjs-disabled{cursor:default;opacity:.5}.video-js .vjs-offscreen{height:1px;left:-9999px;position:absolute;top:0;width:1px}.vjs-lock-showing{display:block!important;opacity:1!important;visibility:visible!important}.vjs-no-js{background-color:#000;color:#fff;font-family:Arial,Helvetica,sans-serif;font-size:18px;height:150px;margin:0 auto;padding:20px;text-align:center;width:300px}.vjs-no-js a,.vjs-no-js a:visited{color:#66a8cc}.video-js .vjs-big-play-button{background-color:#2b333f;background-color:rgba(43,51,63,.7);border:.06666em solid #fff;border-radius:.3em;cursor:pointer;display:block;font-size:3em;height:1.63332em;left:10px;line-height:1.5em;opacity:1;padding:0;position:absolute;top:10px;transition:all .4s;width:3em}.vjs-big-play-centered .vjs-big-play-button{left:50%;margin-left:-1.5em;margin-top:-.81666em;top:50%}.video-js .vjs-big-play-button:focus,.video-js:hover .vjs-big-play-button{background-color:#73859f;background-color:rgba(115,133,159,.5);border-color:#fff;transition:all 0s}.vjs-controls-disabled .vjs-big-play-button,.vjs-error .vjs-big-play-button,.vjs-has-started .vjs-big-play-button,.vjs-using-native-controls .vjs-big-play-button{display:none}.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause .vjs-big-play-button{display:block}.video-js button{-webkit-appearance:none;appearance:none;background:none;border:none;color:inherit;display:inline-block;font-size:inherit;line-height:inherit;text-decoration:none;text-transform:none;transition:none}.vjs-control .vjs-button{height:100%;width:100%}.video-js .vjs-control.vjs-close-button{cursor:pointer;height:3em;position:absolute;right:0;top:.5em;z-index:2}.video-js .vjs-modal-dialog{background:rgba(0,0,0,.8);background:linear-gradient(180deg,rgba(0,0,0,.8),hsla(0,0%,100%,0));overflow:auto}.video-js .vjs-modal-dialog>*{box-sizing:border-box}.vjs-modal-dialog .vjs-modal-dialog-content{font-size:1.2em;line-height:1.5;padding:20px 24px;z-index:1}.vjs-menu-button{cursor:pointer}.vjs-menu-button.vjs-disabled{cursor:default}.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu{display:none}.vjs-menu .vjs-menu-content{display:block;font-family:Arial,Helvetica,sans-serif;margin:0;overflow:auto;padding:0}.vjs-menu .vjs-menu-content>*{box-sizing:border-box}.vjs-scrubbing .vjs-control.vjs-menu-button:hover .vjs-menu{display:none}.vjs-menu li{font-size:1.2em;line-height:1.4em;list-style:none;margin:0;padding:.2em 0;text-align:center;text-transform:lowercase}.js-focus-visible .vjs-menu li.vjs-menu-item:hover,.vjs-menu li.vjs-menu-item:focus,.vjs-menu li.vjs-menu-item:hover{background-color:#73859f;background-color:rgba(115,133,159,.5)}.js-focus-visible .vjs-menu li.vjs-selected:hover,.vjs-menu li.vjs-selected,.vjs-menu li.vjs-selected:focus,.vjs-menu li.vjs-selected:hover{background-color:#fff;color:#2b333f}.js-focus-visible .vjs-menu :not(.vjs-selected):focus:not(.focus-visible),.video-js .vjs-menu :not(.vjs-selected):focus:not(:focus-visible){background:none}.vjs-menu li.vjs-menu-title{cursor:default;font-size:1em;font-weight:700;line-height:2em;margin:0 0 .3em;padding:0;text-align:center;text-transform:uppercase}.vjs-menu-button-popup .vjs-menu{border-top-color:rgba(43,51,63,.7);bottom:0;display:none;height:0;left:-3em;margin-bottom:1.5em;position:absolute;width:10em}.vjs-menu-button-popup .vjs-menu .vjs-menu-content{background-color:#2b333f;background-color:rgba(43,51,63,.7);bottom:1.5em;max-height:15em;position:absolute;width:100%}.vjs-layout-tiny .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:5em}.vjs-layout-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:10em}.vjs-layout-medium .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:14em}.vjs-layout-huge .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:25em}.vjs-menu-button-popup .vjs-menu.vjs-lock-showing,.vjs-workinghover .vjs-menu-button-popup.vjs-hover .vjs-menu{display:block}.video-js .vjs-menu-button-inline{overflow:hidden;transition:all .4s}.video-js .vjs-menu-button-inline:before{width:2.222222222em}.video-js .vjs-menu-button-inline.vjs-slider-active,.video-js .vjs-menu-button-inline:focus,.video-js .vjs-menu-button-inline:hover,.video-js.vjs-no-flex .vjs-menu-button-inline{width:12em}.vjs-menu-button-inline .vjs-menu{height:100%;left:4em;margin:0;opacity:0;padding:0;position:absolute;top:0;transition:all .4s;width:auto}.vjs-menu-button-inline.vjs-slider-active .vjs-menu,.vjs-menu-button-inline:focus .vjs-menu,.vjs-menu-button-inline:hover .vjs-menu{display:block;opacity:1}.vjs-no-flex .vjs-menu-button-inline .vjs-menu{display:block;opacity:1;position:relative;width:auto}.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu,.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu,.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu{width:auto}.vjs-menu-button-inline .vjs-menu-content{height:100%;margin:0;overflow:hidden;width:auto}.video-js .vjs-control-bar{background-color:#2b333f;background-color:rgba(43,51,63,.7);bottom:0;display:none;height:3em;left:0;position:absolute;right:0;width:100%}.vjs-audio-only-mode .vjs-control-bar,.vjs-has-started .vjs-control-bar{display:flex;opacity:1;transition:visibility .1s,opacity .1s;visibility:visible}.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:0;pointer-events:none;transition:visibility 1s,opacity 1s;visibility:visible}.vjs-controls-disabled .vjs-control-bar,.vjs-error .vjs-control-bar,.vjs-using-native-controls .vjs-control-bar{display:none!important}.vjs-audio-only-mode.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar,.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;pointer-events:auto;visibility:visible}.vjs-has-started.vjs-no-flex .vjs-control-bar{display:table}.video-js .vjs-control{flex:none;height:100%;margin:0;padding:0;position:relative;text-align:center;width:4em}.video-js .vjs-control.vjs-visible-text{padding-left:1em;padding-right:1em;width:auto}.vjs-button>.vjs-icon-placeholder:before{font-size:1.8em;line-height:1.67}.vjs-button>.vjs-icon-placeholder{display:block}.video-js .vjs-control:focus,.video-js .vjs-control:focus:before,.video-js .vjs-control:hover:before{text-shadow:0 0 1em #fff}.video-js :not(.vjs-visible-text)>.vjs-control-text{clip:rect(0 0 0 0);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-no-flex .vjs-control{display:table-cell;vertical-align:middle}.video-js .vjs-custom-control-spacer{display:none}.video-js .vjs-progress-control{align-items:center;cursor:pointer;display:flex;flex:auto;min-width:4em;touch-action:none}.video-js .vjs-progress-control.disabled{cursor:default}.vjs-live .vjs-progress-control{display:none}.vjs-liveui .vjs-progress-control{align-items:center;display:flex}.vjs-no-flex .vjs-progress-control{width:auto}.video-js .vjs-progress-holder{flex:auto;height:.3em;transition:all .2s}.video-js .vjs-progress-control .vjs-progress-holder{margin:0 10px}.video-js .vjs-progress-control:hover .vjs-progress-holder{font-size:1.6666666667em}.video-js .vjs-progress-control:hover .vjs-progress-holder.disabled{font-size:1em}.video-js .vjs-progress-holder .vjs-load-progress,.video-js .vjs-progress-holder .vjs-load-progress div,.video-js .vjs-progress-holder .vjs-play-progress{display:block;height:100%;margin:0;padding:0;position:absolute;width:0}.video-js .vjs-play-progress{background-color:#fff}.video-js .vjs-play-progress:before{font-size:.9em;position:absolute;right:-.5em;top:-.3333333333em;z-index:1}.video-js .vjs-load-progress{background:rgba(115,133,159,.5)}.video-js .vjs-load-progress div{background:rgba(115,133,159,.75)}.video-js .vjs-time-tooltip{background-color:#fff;background-color:hsla(0,0%,100%,.8);border-radius:.3em;color:#000;float:right;font-family:Arial,Helvetica,sans-serif;font-size:1em;padding:6px 8px 8px;pointer-events:none;position:absolute;top:-3.4em;visibility:hidden;z-index:1}.video-js .vjs-progress-holder:focus .vjs-time-tooltip{display:none}.video-js .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-time-tooltip,.video-js .vjs-progress-control:hover .vjs-time-tooltip{display:block;font-size:.6em;visibility:visible}.video-js .vjs-progress-control.disabled:hover .vjs-time-tooltip{font-size:1em}.video-js .vjs-progress-control .vjs-mouse-display{background-color:#000;display:none;height:100%;position:absolute;width:1px;z-index:1}.vjs-no-flex .vjs-progress-control .vjs-mouse-display{z-index:0}.video-js .vjs-progress-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display{opacity:0;transition:visibility 1s,opacity 1s;visibility:hidden}.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display{display:none}.vjs-mouse-display .vjs-time-tooltip{background-color:#000;background-color:rgba(0,0,0,.8);color:#fff}.video-js .vjs-slider{-webkit-touch-callout:none;background-color:#73859f;background-color:rgba(115,133,159,.5);cursor:pointer;margin:0 .45em;padding:0;position:relative;-webkit-user-select:none;-ms-user-select:none;user-select:none}.video-js .vjs-slider.disabled{cursor:default}.video-js .vjs-slider:focus{box-shadow:0 0 1em #fff;text-shadow:0 0 1em #fff}.video-js .vjs-mute-control{cursor:pointer;flex:none}.video-js .vjs-volume-control{cursor:pointer;display:flex;margin-right:1em}.video-js .vjs-volume-control.vjs-volume-horizontal{width:5em}.video-js .vjs-volume-panel .vjs-volume-control{height:1px;margin-left:-1px;opacity:0;visibility:visible;width:1px}.video-js .vjs-volume-panel{transition:width 1s}.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active,.video-js .vjs-volume-panel .vjs-volume-control:active,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control,.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control,.video-js .vjs-volume-panel:active .vjs-volume-control,.video-js .vjs-volume-panel:focus .vjs-volume-control{opacity:1;position:relative;transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s;visibility:visible}.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal{height:3em;margin-right:0;width:5em}.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-vertical,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-vertical,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-vertical{left:-3.5em;transition:left 0s}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active{transition:width .1s;width:10em}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-mute-toggle-only{width:4em}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical{height:8em;left:-3000em;transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s;width:3em}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s}.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{height:3em;opacity:1;position:relative;transition:none;visibility:visible;width:5em}.video-js.vjs-no-flex .vjs-volume-control.vjs-volume-vertical,.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical{bottom:3em;left:.5em;position:absolute}.video-js .vjs-volume-panel{display:flex}.video-js .vjs-volume-bar{margin:1.35em .45em}.vjs-volume-bar.vjs-slider-horizontal{height:.3em;width:5em}.vjs-volume-bar.vjs-slider-vertical{height:5em;margin:1.35em auto;width:.3em}.video-js .vjs-volume-level{background-color:#fff;bottom:0;left:0;position:absolute}.video-js .vjs-volume-level:before{font-size:.9em;position:absolute;z-index:1}.vjs-slider-vertical .vjs-volume-level{width:.3em}.vjs-slider-vertical .vjs-volume-level:before{left:-.3em;top:-.5em;z-index:1}.vjs-slider-horizontal .vjs-volume-level{height:.3em}.vjs-slider-horizontal .vjs-volume-level:before{right:-.5em;top:-.3em}.video-js .vjs-volume-panel.vjs-volume-panel-vertical{width:4em}.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level{height:100%}.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{width:100%}.video-js .vjs-volume-vertical{background-color:#2b333f;background-color:rgba(43,51,63,.7);bottom:8em;height:8em;width:3em}.video-js .vjs-volume-horizontal .vjs-menu{left:-2em}.video-js .vjs-volume-tooltip{background-color:#fff;background-color:hsla(0,0%,100%,.8);border-radius:.3em;color:#000;float:right;font-family:Arial,Helvetica,sans-serif;font-size:1em;padding:6px 8px 8px;pointer-events:none;position:absolute;top:-3.4em;visibility:hidden;z-index:1}.video-js .vjs-volume-control:hover .vjs-progress-holder:focus .vjs-volume-tooltip,.video-js .vjs-volume-control:hover .vjs-volume-tooltip{display:block;font-size:1em;visibility:visible}.video-js .vjs-volume-vertical:hover .vjs-progress-holder:focus .vjs-volume-tooltip,.video-js .vjs-volume-vertical:hover .vjs-volume-tooltip{left:1em;top:-12px}.video-js .vjs-volume-control.disabled:hover .vjs-volume-tooltip{font-size:1em}.video-js .vjs-volume-control .vjs-mouse-display{background-color:#000;display:none;height:1px;position:absolute;width:100%;z-index:1}.video-js .vjs-volume-horizontal .vjs-mouse-display{height:100%;width:1px}.vjs-no-flex .vjs-volume-control .vjs-mouse-display{z-index:0}.video-js .vjs-volume-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-volume-control .vjs-mouse-display{opacity:0;transition:visibility 1s,opacity 1s;visibility:hidden}.video-js.vjs-user-inactive.vjs-no-flex .vjs-volume-control .vjs-mouse-display{display:none}.vjs-mouse-display .vjs-volume-tooltip{background-color:#000;background-color:rgba(0,0,0,.8);color:#fff}.vjs-poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;bottom:0;cursor:pointer;display:inline-block;height:100%;left:0;margin:0;padding:0;position:absolute;right:0;top:0;vertical-align:middle}.vjs-has-started .vjs-poster,.vjs-using-native-controls .vjs-poster{display:none}.vjs-audio.vjs-has-started .vjs-poster,.vjs-has-started.vjs-audio-poster-mode .vjs-poster{display:block}.video-js .vjs-live-control{align-items:flex-start;display:flex;flex:auto;font-size:1em;line-height:3em}.vjs-no-flex .vjs-live-control{display:table-cell;text-align:left;width:auto}.video-js.vjs-liveui .vjs-live-control,.video-js:not(.vjs-live) .vjs-live-control{display:none}.video-js .vjs-seek-to-live-control{align-items:center;cursor:pointer;display:inline-flex;flex:none;font-size:1em;height:100%;line-height:3em;min-width:4em;padding-left:.5em;padding-right:.5em;width:auto}.vjs-no-flex .vjs-seek-to-live-control{display:table-cell;text-align:left;width:auto}.video-js.vjs-live:not(.vjs-liveui) .vjs-seek-to-live-control,.video-js:not(.vjs-live) .vjs-seek-to-live-control{display:none}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge{cursor:auto}.vjs-seek-to-live-control .vjs-icon-placeholder{color:#888;margin-right:.5em}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-icon-placeholder{color:red}.video-js .vjs-time-control{flex:none;font-size:1em;line-height:3em;min-width:2em;padding-left:1em;padding-right:1em;width:auto}.video-js .vjs-current-time,.video-js .vjs-duration,.vjs-live .vjs-time-control,.vjs-no-flex .vjs-current-time,.vjs-no-flex .vjs-duration{display:none}.vjs-time-divider{display:none;line-height:3em}.vjs-live .vjs-time-divider{display:none}.video-js .vjs-play-control{cursor:pointer}.video-js .vjs-play-control .vjs-icon-placeholder{flex:none}.vjs-text-track-display{bottom:3em;left:0;pointer-events:none;position:absolute;right:0;top:0}.video-js.vjs-controls-disabled .vjs-text-track-display,.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display{bottom:1em}.video-js .vjs-text-track{font-size:1.4em;margin-bottom:.1em;text-align:center}.vjs-subtitles{color:#fff}.vjs-captions{color:#fc6}.vjs-tt-cue{display:block}video::-webkit-media-text-track-display{-webkit-transform:translateY(-3em);transform:translateY(-3em)}.video-js.vjs-controls-disabled video::-webkit-media-text-track-display,.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display{-webkit-transform:translateY(-1.5em);transform:translateY(-1.5em)}.video-js .vjs-picture-in-picture-control{cursor:pointer;flex:none}.video-js.vjs-audio-only-mode .vjs-picture-in-picture-control{display:none}.video-js .vjs-fullscreen-control{cursor:pointer;flex:none}.video-js.vjs-audio-only-mode .vjs-fullscreen-control{display:none}.vjs-playback-rate .vjs-playback-rate-value,.vjs-playback-rate>.vjs-menu-button{height:100%;left:0;position:absolute;top:0;width:100%}.vjs-playback-rate .vjs-playback-rate-value{font-size:1.5em;line-height:2;pointer-events:none;text-align:center}.vjs-playback-rate .vjs-menu{left:0;width:4em}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:1.4em;text-align:center}.vjs-error .vjs-error-display:before{color:#fff;content:"X";font-family:Arial,Helvetica,sans-serif;font-size:4em;left:0;line-height:1;margin-top:-.5em;position:absolute;text-align:center;text-shadow:.05em .05em .1em #000;top:50%;vertical-align:middle;width:100%}.vjs-loading-spinner{background-clip:padding-box;border:6px solid rgba(43,51,63,.7);border-radius:25px;box-sizing:border-box;display:none;height:50px;left:50%;margin:-25px 0 0 -25px;opacity:.85;position:absolute;text-align:left;top:50%;visibility:hidden;width:50px}.vjs-seeking .vjs-loading-spinner,.vjs-waiting .vjs-loading-spinner{-webkit-animation:vjs-spinner-show 0s linear .3s forwards;animation:vjs-spinner-show 0s linear .3s forwards;display:block}.vjs-loading-spinner:after,.vjs-loading-spinner:before{border:inherit;border-color:#fff transparent transparent;border-radius:inherit;box-sizing:inherit;content:"";height:inherit;margin:-6px;opacity:1;position:absolute;width:inherit}.vjs-seeking .vjs-loading-spinner:after,.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:before{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:before{border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:after{-webkit-animation-delay:.44s;animation-delay:.44s;border-top-color:#fff}@keyframes vjs-spinner-show{to{visibility:visible}}@-webkit-keyframes vjs-spinner-show{to{visibility:visible}}@keyframes vjs-spinner-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes vjs-spinner-spin{to{-webkit-transform:rotate(1turn)}}@keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}to{border-top-color:#73859f}}@-webkit-keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}to{border-top-color:#73859f}}.video-js.vjs-audio-only-mode .vjs-captions-button{display:none}.vjs-chapters-button .vjs-menu ul{width:24em}.video-js.vjs-audio-only-mode .vjs-descriptions-button{display:none}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder{display:inline-block;margin-bottom:-.1em;vertical-align:middle}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{content:"";font-family:VideoJS;font-size:1.5em;line-height:inherit}.video-js.vjs-audio-only-mode .vjs-subs-caps-button{display:none}.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder{display:inline-block;margin-bottom:-.1em;vertical-align:middle}.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{content:" ";font-family:VideoJS;font-size:1.5em;line-height:inherit}.video-js.vjs-layout-small .vjs-current-time,.video-js.vjs-layout-small .vjs-duration,.video-js.vjs-layout-small .vjs-playback-rate,.video-js.vjs-layout-small .vjs-remaining-time,.video-js.vjs-layout-small .vjs-time-divider,.video-js.vjs-layout-small .vjs-volume-control,.video-js.vjs-layout-tiny .vjs-current-time,.video-js.vjs-layout-tiny .vjs-duration,.video-js.vjs-layout-tiny .vjs-playback-rate,.video-js.vjs-layout-tiny .vjs-remaining-time,.video-js.vjs-layout-tiny .vjs-time-divider,.video-js.vjs-layout-tiny .vjs-volume-control,.video-js.vjs-layout-x-small .vjs-current-time,.video-js.vjs-layout-x-small .vjs-duration,.video-js.vjs-layout-x-small .vjs-playback-rate,.video-js.vjs-layout-x-small .vjs-remaining-time,.video-js.vjs-layout-x-small .vjs-time-divider,.video-js.vjs-layout-x-small .vjs-volume-control{display:none}.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover{width:auto}.video-js.vjs-layout-tiny .vjs-progress-control,.video-js.vjs-layout-x-small .vjs-progress-control{display:none}.video-js.vjs-layout-x-small .vjs-custom-control-spacer{display:block;flex:auto}.video-js.vjs-layout-x-small.vjs-no-flex .vjs-custom-control-spacer{width:auto}.vjs-modal-dialog.vjs-text-track-settings{background-color:#2b333f;background-color:rgba(43,51,63,.75);color:#fff;height:70%}.vjs-text-track-settings .vjs-modal-dialog-content{display:table}.vjs-text-track-settings .vjs-track-settings-colors,.vjs-text-track-settings .vjs-track-settings-controls,.vjs-text-track-settings .vjs-track-settings-font{display:table-cell}.vjs-text-track-settings .vjs-track-settings-controls{text-align:right;vertical-align:bottom}@supports (display:grid){.vjs-text-track-settings .vjs-modal-dialog-content{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr;padding:20px 24px 0}.vjs-track-settings-controls .vjs-default-button{margin-bottom:20px}.vjs-text-track-settings .vjs-track-settings-controls{grid-column:1/-1}.vjs-layout-small .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-tiny .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-x-small .vjs-text-track-settings .vjs-modal-dialog-content{grid-template-columns:1fr}}.vjs-track-setting>select{margin-bottom:.5em;margin-right:1em}.vjs-text-track-settings fieldset{border:none;margin:5px;padding:3px}.vjs-text-track-settings fieldset span{display:inline-block}.vjs-text-track-settings fieldset span>select{max-width:7.3em}.vjs-text-track-settings legend{color:#fff;margin:0 0 5px}.vjs-text-track-settings .vjs-label{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);border:0;display:block;height:1px;margin:0 0 5px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-track-settings-controls button:active,.vjs-track-settings-controls button:focus{background-image:linear-gradient(0deg,#fff 88%,#73859f);outline-style:solid;outline-width:medium}.vjs-track-settings-controls button:hover{color:rgba(43,51,63,.75)}.vjs-track-settings-controls button{background-color:#fff;background-image:linear-gradient(-180deg,#fff 88%,#73859f);border-radius:2px;color:#2b333f;cursor:pointer}.vjs-track-settings-controls .vjs-default-button{margin-right:1em}@media print{.video-js>:not(.vjs-tech):not(.vjs-poster){visibility:hidden}}.vjs-resize-manager{border:none;height:100%;left:0;position:absolute;top:0;width:100%;z-index:-1000}.js-focus-visible .video-js :focus:not(.focus-visible){outline:none}.video-js :focus:not(:focus-visible){outline:none}.video-js{max-height:100%;max-width:800px}.audio-file-view .video-js,.video-js{margin:0 auto;width:calc(100% - 40px)}.audio-file-view .video-js{height:3em;max-width:500px}.audio-file-view .video-js .vjs-fullscreen-control{display:none} +/*# sourceMappingURL=commons.44d6cf61.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/commons.44d6cf61.css.map b/media/assets/frontend/static/css/commons.44d6cf61.css.map new file mode 100644 index 00000000000..1d2e05d001d --- /dev/null +++ b/media/assets/frontend/static/css/commons.44d6cf61.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/commons.44d6cf61.css","mappings":"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aAAc,CAId,WAAY,CAGZ,gBAAiB,CANjB,aAAc,CAId,SAAU,CAGV,iBACF,CACA,uCACE,kBAAmB,CACnB,cACF,CAKA,wJACE,kBAAmB,CACnB,UACF,CACA,0JAME,qBAA0B,CAHzB,oBAAqB,CACjB,gBAAiB,CACtB,wBAEF,CACA,mBAEE,eAAgB,CADhB,WAEF,CACA,wBAEE,iBAAkB,CADlB,WAEF,CACA,iDACE,QACF,CACA,8DACE,UACF,CACA,wBACE,UACF,CACA,yEACE,8BACF,CACA,yBACE,WACF,CACA,wDACE,SACF,CACA,2EACE,6BACF,CACA,0BAIE,WAAY,CACZ,gBAAiB,CAHjB,iBAAkB,CADlB,iBAAkB,CAElB,iBAGF,CACA,iDAIE,UAAW,CAHX,WAAY,CACZ,aAAc,CACd,QAAS,CAET,iBACF,CACA,2CACE,WACF,CACA,+EAGE,WAAY,CADZ,eAEF,CACA,wLAIE,+BACF,CACA,2CACE,WACF,CACA,mEACE,WACF,CACA,4FACE,QACF,CACA,yGACE,UACF,CACA,mGACE,SACF,CACA,oIAGE,QACF,CACA,oEACE,KACF,CACA,sJAGE,YACF,CACA,8CACE,kBAAmB,CACnB,eACF,CACA,0BACE,gBACF,CACA,uCACE,eAAgB,CAChB,SACF,CACA,2CACE,wBACF,CACA,uCACE,eACF,CACA,0CACE,UACF,CACA,kBACE,WACF,CACA,yBAOE,4BAA6B,CAC7B,eAAgB,CAPhB,gBAAiB,CACjB,iBAAkB,CAEjB,oBAAqB,CACjB,gBAAiB,CACtB,wBAGF,CACA,2EAGE,WAAY,CACZ,gBAAiB,CAFjB,UAGF,CACA,kCAEE,oBAAqB,CADrB,WAEF,CACA,+CACE,oBAAqB,CACrB,sCAA2C,CAC3C,cACF,CACA,wCAEE,wBAAyB,CADzB,oBAAqB,CAErB,UACF,CACA,uCAIE,wBAAyB,CAEzB,UAAW,CALX,UAAW,CACX,WAAY,CACZ,gBAAiB,CAEjB,cAEF,CACA,mDAEE,6BAA8B,CAC9B,iBAAkB,CAFlB,0BAGF,CACA,kDAEE,8BAA+B,CAC/B,gBAAiB,CAFjB,2BAGF,CAC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","sources":["../node_modules/@seafile/seafile-calendar/assets/index.css","css/pagination.css","css/file-view.css","css/image-file-view.css","css/svg-file-view.css","css/pdf-file-view.css","components/seafile-codemirror/style.css","css/text-file-view.css","../node_modules/@seafile/seafile-editor/dist/editors/plain-markdown-editor/code-mirror.css","../node_modules/@seafile/sdoc-editor/dist/components/common-loading/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/commons/dropdown-menu-item/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/assets/css/textlink-hovermenu.css","../node_modules/@seafile/sdoc-editor/dist/components/tooltip/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/commons/color-menu/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/commons/menu/menu.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/code-block/hover-menu/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/assets/css/code-block.css","../node_modules/@seafile/sdoc-editor/node_modules/@seafile/react-image-lightbox/style.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/image/hover-menu/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/table/popover/table-template/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/table/render/alternate-color.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/table/popover/table-size-popover/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/table/menu/active-table-menu/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/table/menu/table-context-menu/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/table/render/table-header/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/table/render/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/sdoc-link/hover-menu/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/sdoc-link/render-elem.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/file-link/hover-menu/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/file-link/render-elem.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/callout/render-elem/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/render/element-decorate/rebase-decorate/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/header/menu/style.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/font/menu/font-family/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/font/menu/font-size/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/toolbar/header-toolbar/insert-toolbar/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/toolbar/context-toolbar/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/toolbar/side-toolbar/side-menu.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/toolbar/side-toolbar/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/plugins/table/dialogs/custom-table-size-dialog/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/commons/select-file-dialog/local-files/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/extension/commons/select-file-dialog/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/outline/style.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/assets/css/default.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/assets/css/layout.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/assets/css/sdoc-editor-plugins.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/assets/css/dropdown-menu.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/comment/components/comment-input/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/comment/components/comment-list.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/comment/components/elements-comment-count/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/comment/components/comment-participants-editor/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/comment/components/comment-all-participants/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/comment/components/global-comment/index.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/comment/components/style.css","css/switch.css","../node_modules/@seafile/seafile-editor/dist/editors/plain-markdown-editor/style.css","../node_modules/@seafile/sdoc-editor/dist/basic-sdk/assets/css/simple-viewer.css","../node_modules/@seafile/sdoc-editor/dist/assets/css/diff-viewer.css","../node_modules/@seafile/sdoc-editor/dist/components/tip-message/style.css","../node_modules/@seafile/sdoc-editor/dist/components/draft-dropdown/style.css","../node_modules/@seafile/sdoc-editor/dist/components/doc-operations/tag-operation/file-tag-quick-view/index.css","../node_modules/@seafile/sdoc-editor/dist/components/doc-info/index.css","../node_modules/@seafile/sdoc-editor/dist/components/tip-dialog/index.css","../node_modules/@seafile/sdoc-editor/dist/components/switch/index.css","../node_modules/@seafile/sdoc-editor/dist/components/doc-operations/revision-operations/view-changes/index.css","../node_modules/@seafile/sdoc-editor/dist/components/doc-operations/revision-operations/more-revision-operations/index.css","../node_modules/@seafile/sdoc-editor/dist/components/doc-operations/revision-operations/revisions/revisions-dialog/revision-operation/index.css","../node_modules/@seafile/sdoc-editor/dist/components/doc-operations/revision-operations/revisions/revisions-dialog/index.css","../node_modules/@seafile/sdoc-editor/dist/components/doc-operations/revision-operations/revisions/index.css","../node_modules/@seafile/sdoc-editor/dist/components/doc-operations/revision-operations/changes-count/index.css","../node_modules/@seafile/sdoc-editor/dist/assets/css/collaborator-popover.css","../node_modules/@seafile/sdoc-editor/dist/components/doc-operations/comments-operation/index.css","../node_modules/@seafile/sdoc-editor/dist/components/doc-operations/tag-operation/tag-popover/index.css","../node_modules/@seafile/sdoc-editor/dist/components/doc-operations/style.css","../node_modules/@seafile/sdoc-editor/dist/layout/layout.css","../node_modules/@seafile/sdoc-editor/dist/assets/css/error-page.css","../node_modules/@seafile/sdoc-editor/dist/assets/css/simple-editor.css","../node_modules/@seafile/sdoc-editor/dist/assets/css/simple-viewer.css","../node_modules/@seafile/seafile-editor/node_modules/prismjs/themes/prism.css","../node_modules/@seafile/seafile-editor/dist/extension/commons/tooltip/index.css","../node_modules/@seafile/seafile-editor/dist/extension/plugins/header/menu/style.css","../node_modules/@seafile/seafile-editor/dist/extension/commons/menu/menu.css","../node_modules/@seafile/seafile-editor/dist/extension/plugins/image/menu/style.css","../node_modules/@seafile/react-image-lightbox/style.css","../node_modules/@seafile/seafile-editor/dist/extension/plugins/image/render-element/style.css","css/select-editor.css","../node_modules/@seafile/seafile-editor/dist/extension/plugins/link/render-elem/style.css","../node_modules/@seafile/seafile-editor/dist/extension/plugins/code-block/render-elem/style.css","../node_modules/@seafile/seafile-editor/dist/extension/plugins/list/render-elem/style.css","../node_modules/@seafile/seafile-editor/dist/extension/plugins/table/menu/style.css","../node_modules/@seafile/seafile-editor/dist/extension/plugins/table/render-elem/style.css","css/icon.css","components/search/ai-search-widgets/ai-search-refrences.css","components/search/ai-search-widgets/ai-search-help.css","components/search/ai-search-ask.css","css/top-search-by-name.css","components/common/notification-popover/index.css","../node_modules/@seafile/seafile-editor/dist/extension/plugins/formula/formula.css","css/toolbar.css","css/search.css","css/user-notifications.css","css/notification.css","../node_modules/@seafile/seafile-editor/dist/extension/toolbar/user-help/style.css","../node_modules/@seafile/seafile-editor/dist/extension/toolbar/header-toolbar/style.css","css/single-selector.css","css/btn-qr-code.css","../node_modules/@seafile/seafile-editor/dist/containers/hotkeys-helper/style.css","css/date-and-time-picker.css","../node_modules/@seafile/seafile-editor/dist/containers/outline/style.css","css/user-select.css","../node_modules/@seafile/seafile-editor/dist/containers/article-info/style.css","css/invitations.css","../node_modules/@seafile/seafile-editor/dist/editors/slate-editor/editor-help/style.css","css/share-to-user.css","../node_modules/@seafile/seafile-editor/dist/editors/slate-editor/style.css","css/share-link-dialog.css","../node_modules/@seafile/seafile-editor/dist/containers/loading/style.css","../node_modules/@seafile/seafile-editor/dist/editors/slate-viewer/style.css","css/file-chooser.css","css/shared-file-view.css","components/operations/style.css","../node_modules/@seafile/seafile-editor/dist/editors/simple-slate-editor /style.css","css/file-tag-list.css","css/dirent-detail.css","css/file-uploader.css","css/layout.css","../node_modules/video.js/dist/video-js.css","css/video-file-view.css","css/audio-file-view.css"],"sourcesContent":[".rc-calendar {\n box-sizing: border-box;\n}\n.rc-calendar * {\n box-sizing: border-box;\n}\n.rc-calendar-hidden {\n display: none;\n}\n.rc-calendar-input-wrap {\n position: relative;\n padding: 6px;\n border-bottom: 1px solid #e9e9e9;\n}\n.rc-calendar-input-wrap:after {\n content: '';\n clear: both;\n}\n.rc-calendar-date-input-wrap {\n overflow: hidden;\n}\n.rc-calendar-time-picker {\n position: absolute;\n width: 100%;\n top: 34px;\n background-color: white;\n height: 217px;\n}\n.rc-calendar-time-picker-panel {\n width: 100%;\n position: relative;\n}\n.rc-calendar-time-picker-panel .rc-time-picker-panel-input-wrap {\n display: none;\n}\n.rc-calendar-time-picker-panel .rc-time-picker-panel-inner {\n border: none;\n box-shadow: none;\n}\n.rc-calendar-time-picker-panel .rc-time-picker-panel-select {\n width: 84px;\n max-height: 217px;\n}\n.rc-calendar-time-picker-panel .rc-time-picker-panel-select li {\n text-align: center;\n padding: 0;\n}\n.rc-calendar-time-picker-wrap {\n float: left;\n width: 100%;\n}\n.rc-calendar-time-picker-wrap .rc-time-picker {\n width: 100%;\n}\n.rc-calendar-time-picker-wrap .rc-time-picker-input {\n padding: 0;\n border: 1px solid transparent;\n outline: 0;\n height: 22px;\n}\n.rc-calendar-time-picker-wrap .rc-time-picker-icon {\n display: none;\n}\n.rc-calendar-input {\n border: 1px solid transparent;\n width: 100%;\n color: #666;\n cursor: text;\n line-height: 1.5;\n outline: 0;\n height: 22px;\n}\n.rc-calendar-input-invalid {\n border-color: red;\n}\n.rc-calendar-clear-btn {\n z-index: 9999;\n position: absolute;\n right: 6px;\n cursor: pointer;\n overflow: hidden;\n width: 20px;\n height: 20px;\n text-align: center;\n line-height: 20px;\n top: 6px;\n margin: 0;\n}\n.rc-calendar-clear-btn:after {\n content: \"x\";\n font-size: 12px;\n color: #aaa;\n display: inline-block;\n line-height: 1;\n width: 20px;\n transition: color 0.3s ease;\n}\n.rc-calendar-clear-btn:hover:after {\n color: #666;\n}\n.rc-calendar-picker {\n position: absolute;\n left: -9999px;\n top: -9999px;\n z-index: 1000;\n}\n.rc-calendar-picker-hidden {\n display: none;\n}\n.rc-calendar-picker-slide-up-enter {\n animation-duration: .3s;\n animation-fill-mode: both;\n transform-origin: 0 0;\n display: block !important;\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n animation-play-state: paused;\n}\n.rc-calendar-picker-slide-up-appear {\n animation-duration: .3s;\n animation-fill-mode: both;\n transform-origin: 0 0;\n display: block !important;\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n animation-play-state: paused;\n}\n.rc-calendar-picker-slide-up-leave {\n animation-duration: .3s;\n animation-fill-mode: both;\n transform-origin: 0 0;\n display: block !important;\n opacity: 1;\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n animation-play-state: paused;\n}\n.rc-calendar-picker-slide-up-enter.rc-calendar-picker-slide-up-enter-active.rc-calendar-picker-placement-bottomLeft,\n.rc-calendar-picker-slide-up-enter.rc-calendar-picker-slide-up-enter-active.rc-calendar-picker-placement-bottomRight,\n.rc-calendar-picker-slide-up-appear.rc-calendar-picker-slide-up-appear-active.rc-calendar-picker-placement-bottomLeft,\n.rc-calendar-picker-slide-up-appear.rc-calendar-picker-slide-up-appear-active.rc-calendar-picker-placement-bottomRight {\n animation-name: rcDropdownSlideUpIn;\n animation-play-state: running;\n}\n.rc-calendar-picker-slide-up-enter.rc-calendar-picker-slide-up-enter-active.rc-calendar-picker-placement-topLeft,\n.rc-calendar-picker-slide-up-enter.rc-calendar-picker-slide-up-enter-active.rc-calendar-picker-placement-topRight,\n.rc-calendar-picker-slide-up-appear.rc-calendar-picker-slide-up-appear-active.rc-calendar-picker-placement-topLeft,\n.rc-calendar-picker-slide-up-appear.rc-calendar-picker-slide-up-appear-active.rc-calendar-picker-placement-topRight {\n animation-name: rcDropdownSlideDownIn;\n animation-play-state: running;\n}\n.rc-calendar-picker-slide-up-leave.rc-calendar-picker-slide-up-leave-active.rc-calendar-picker-placement-bottomLeft,\n.rc-calendar-picker-slide-up-leave.rc-calendar-picker-slide-up-leave-active.rc-calendar-picker-placement-bottomRight {\n animation-name: rcDropdownSlideUpOut;\n animation-play-state: running;\n}\n.rc-calendar-picker-slide-up-leave.rc-calendar-picker-slide-up-leave-active.rc-calendar-picker-placement-topLeft,\n.rc-calendar-picker-slide-up-leave.rc-calendar-picker-slide-up-leave-active.rc-calendar-picker-placement-topRight {\n animation-name: rcDropdownSlideDownOut;\n animation-play-state: running;\n}\n@keyframes rcDropdownSlideUpIn {\n 0% {\n opacity: 0;\n transform-origin: 0% 0%;\n transform: scaleY(0);\n }\n 100% {\n opacity: 1;\n transform-origin: 0% 0%;\n transform: scaleY(1);\n }\n}\n@keyframes rcDropdownSlideUpOut {\n 0% {\n opacity: 1;\n transform-origin: 0% 0%;\n transform: scaleY(1);\n }\n 100% {\n opacity: 0;\n transform-origin: 0% 0%;\n transform: scaleY(0);\n }\n}\n@keyframes rcDropdownSlideDownIn {\n 0% {\n opacity: 0;\n transform-origin: 100% 100%;\n transform: scaleY(0);\n }\n 100% {\n opacity: 1;\n transform-origin: 100% 100%;\n transform: scaleY(1);\n }\n}\n@keyframes rcDropdownSlideDownOut {\n 0% {\n opacity: 1;\n transform-origin: 100% 100%;\n transform: scaleY(1);\n }\n 100% {\n opacity: 0;\n transform-origin: 100% 100%;\n transform: scaleY(0);\n }\n}\n.rc-calendar {\n position: relative;\n outline: none;\n font-family: Arial, \"Hiragino Sans GB\", \"Microsoft Yahei\", \"Microsoft Sans Serif\", \"WenQuanYi Micro Hei\", sans-serif;\n width: -webkit-fit-content;\n width: -moz-fit-content;\n width: fit-content;\n list-style: none;\n font-size: 12px;\n text-align: left;\n background-color: #fff;\n border-radius: 3px;\n box-shadow: 0 1px 5px #ccc;\n background-clip: padding-box;\n border: 1px solid #ccc;\n line-height: 1.5;\n}\n.rc-calendar-date-panel,\n.rc-calendar-date-panel-container {\n display: -ms-flexbox;\n display: flex;\n}\n.rc-calendar-date-panel,\n.rc-calendar-panel {\n position: relative;\n outline: none;\n display: block;\n}\n.rc-calendar-week-number {\n width: 286px;\n}\n.rc-calendar-week-number-cell {\n text-align: center;\n}\n.rc-calendar-header {\n padding: 0 10px;\n height: 34px;\n line-height: 30px;\n text-align: center;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-user-select: none;\n border-bottom: 1px solid #ccc;\n}\n.rc-calendar-header > a {\n font-weight: bold;\n display: inline-block;\n padding: 0px 5px;\n line-height: 34px;\n text-align: center;\n width: 30px;\n}\n.rc-calendar-header > a:hover {\n cursor: pointer;\n color: #f09f4g;\n}\n.rc-calendar-header .rc-calendar-prev-month-btn {\n position: absolute;\n left: 25px;\n}\n.rc-calendar-header .rc-calendar-prev-month-btn:after {\n content: '‹';\n}\n.rc-calendar-header .rc-calendar-next-month-btn {\n position: absolute;\n right: 25px;\n}\n.rc-calendar-header .rc-calendar-next-month-btn:after {\n content: '›';\n}\n.rc-calendar-year-select,\n.rc-calendar-month-select,\n.rc-calendar-day-select {\n display: inline-block;\n font-size: 12px;\n font-weight: bold;\n color: #666;\n padding: 0 8px;\n line-height: 34px;\n}\n.rc-calendar-year-select:hover,\n.rc-calendar-month-select:hover,\n.rc-calendar-day-select:hover {\n cursor: pointer;\n color: #f09f4g;\n}\n.rc-calendar-year-select.rc-calendar-time-status:hover,\n.rc-calendar-month-select.rc-calendar-time-status:hover,\n.rc-calendar-day-select.rc-calendar-time-status:hover {\n cursor: pointer;\n color: #666;\n}\n.rc-calendar-prev-month-btn,\n.rc-calendar-next-month-btn,\n.rc-calendar-prev-year-btn,\n.rc-calendar-next-year-btn {\n position: absolute;\n top: 0;\n cursor: pointer;\n color: #999;\n font-family: Arial, \"Hiragino Sans GB\", \"Microsoft Yahei\", \"Microsoft Sans Serif\", sans-serif;\n padding: 0 5px;\n font-size: 16px;\n display: inline-block;\n line-height: 34px;\n}\n.rc-calendar-prev-month-btn:hover,\n.rc-calendar-next-month-btn:hover,\n.rc-calendar-prev-year-btn:hover,\n.rc-calendar-next-year-btn:hover {\n color: #f09f4g;\n}\n.rc-calendar-next-year-btn {\n right: 0;\n}\n.rc-calendar-next-year-btn:after {\n content: '»';\n}\n.rc-calendar-prev-year-btn {\n left: 0;\n}\n.rc-calendar-prev-year-btn:after {\n content: '«';\n}\n.rc-calendar-body {\n padding: 9px 10px 10px;\n height: 217px;\n}\n.rc-calendar-right-panel {\n width: 68px;\n height: inherit;\n}\n.rc-calendar-right-panel-header {\n height: 34px;\n line-height: 34px;\n}\n.rc-calendar-right-panel-header span {\n transform: rotate(-90deg);\n}\n.rc-calendar-right-panel-body {\n height: 217px;\n border-left: 1px solid #ccc;\n overflow-y: scroll;\n}\n.rc-calendar-right-panel-body ul {\n list-style: none;\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n width: 100%;\n}\n.rc-calendar-right-panel-body ul li {\n text-align: center;\n padding: 8px 0;\n cursor: pointer;\n}\n.rc-calendar-right-panel-body ul li:hover {\n color: #e8bf6a;\n}\n.rc-calendar-right-panel-body .rc-calendar-selected-time {\n color: #f09f3f;\n}\n.rc-calendar-right-panel-body::-webkit-scrollbar {\n width: 0;\n}\n.rc-calendar-right-panel-footer {\n height: 39px;\n line-height: 34px;\n border-left: 1px solid #ccc;\n}\n.rc-calendar-right-panel-footer span {\n transform: rotate(90deg);\n}\n.rc-calendar-right-panel-header,\n.rc-calendar-right-panel-footer {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: center;\n justify-content: center;\n cursor: pointer;\n color: #999;\n font-size: 16px;\n}\n.rc-calendar-right-panel-header span:after,\n.rc-calendar-right-panel-footer span:after {\n content: '›';\n}\n.rc-calendar table {\n border-collapse: collapse;\n max-width: 100%;\n background-color: transparent;\n width: 100%;\n}\n.rc-calendar table,\n.rc-calendar td,\n.rc-calendar th,\n.rc-calendar td {\n border: none;\n}\n.rc-calendar-table {\n border-spacing: 0;\n margin-bottom: 0;\n}\n.rc-calendar-column-header {\n line-height: 18px;\n padding: 6px 0;\n width: 33px;\n text-align: center;\n}\n.rc-calendar-column-header .rc-calendar-column-header-inner {\n display: block;\n font-weight: normal;\n}\n.rc-calendar-week-number-header .rc-calendar-column-header-inner {\n display: none;\n}\n.rc-calendar-cell {\n padding: 1px 0;\n}\n.rc-calendar-date {\n display: block;\n margin: 0 auto;\n color: #666;\n border-radius: 4px 4px;\n width: 26px;\n height: 26px;\n padding: 0;\n background: transparent;\n line-height: 26px;\n text-align: center;\n}\n.rc-calendar-date:hover {\n background: #fcecd9;\n cursor: pointer;\n}\n.rc-calendar-selected-day .rc-calendar-date {\n background: #fcecd9;\n}\n.rc-calendar-selected-date .rc-calendar-date {\n background: #f09f3f;\n color: #fff;\n}\n.rc-calendar-selected-date .rc-calendar-date:hover {\n background: #f09f3f;\n}\n.rc-calendar-today .rc-calendar-date {\n border: 1px solid #f09f3f;\n}\n.rc-calendar-disabled-cell .rc-calendar-date {\n cursor: not-allowed;\n color: #bcbcbc;\n background: #f3f3f3;\n border-radius: 0;\n width: auto;\n}\n.rc-calendar-disabled-cell .rc-calendar-date:hover {\n background: #f3f3f3;\n}\n.rc-calendar-disabled-cell-first-of-row .rc-calendar-date {\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.rc-calendar-disabled-cell-last-of-row .rc-calendar-date {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.rc-calendar-last-month-cell .rc-calendar-date,\n.rc-calendar-next-month-btn-day .rc-calendar-date {\n color: #bbb;\n}\n.rc-calendar-footer {\n border-top: 1px solid #ccc;\n padding: 10px 0;\n text-align: center;\n position: relative;\n}\n.rc-calendar-footer .rc-time-picker {\n width: 90px;\n}\n.rc-calendar-footer .rc-time-picker-input {\n height: 24px;\n}\n.rc-calendar-footer-show-ok {\n text-align: right;\n}\n.rc-calendar-footer-show-ok .rc-calendar-footer-btn {\n padding-right: 12px;\n}\n.rc-calendar-footer-show-ok .rc-calendar-time-picker-btn {\n margin-left: 0;\n padding: 0 12px;\n}\n.rc-calendar-footer-show-ok .rc-calendar-today-btn {\n float: left;\n padding-left: 12px;\n}\n.rc-calendar-footer-btn {\n margin-top: 2px;\n}\n.rc-calendar-footer-btn:after {\n content: 'x';\n height: 0;\n font-size: 0;\n overflow: hidden;\n clear: both;\n}\n.rc-calendar-time-picker-btn {\n margin-left: 10px;\n}\n.rc-calendar-today-btn,\n.rc-calendar-ok-btn,\n.rc-calendar-time-picker-btn {\n display: inline-block;\n text-align: center;\n color: #f46830;\n}\n.rc-calendar-today-btn:hover,\n.rc-calendar-ok-btn:hover,\n.rc-calendar-time-picker-btn:hover {\n cursor: pointer;\n color: #f09f4g;\n}\n.rc-calendar-today-btn-disabled,\n.rc-calendar-ok-btn-disabled,\n.rc-calendar-time-picker-btn-disabled {\n color: #bbb;\n}\n.rc-calendar-today-btn-disabled:hover,\n.rc-calendar-ok-btn-disabled:hover,\n.rc-calendar-time-picker-btn-disabled:hover {\n color: #bbb;\n}\n.rc-calendar-today-btn {\n padding-left: 10px;\n}\n.rc-calendar-time-input {\n height: 25px;\n position: relative;\n display: inline-block;\n margin: 0 0;\n padding: 4px 10px;\n border-radius: 6px 6px;\n border: 1px solid #d9d9d9;\n background-color: #ffffff;\n color: #666;\n line-height: 1.5;\n transform: border 0.3s cubic-bezier(0.35, 0, 0.25, 1), background 0.3s cubic-bezier(0.35, 0, 0.25, 1), box-shadow 0.3s cubic-bezier(0.35, 0, 0.25, 1);\n width: 40px;\n}\n.rc-calendar-time-input:hover {\n border-color: #f09f4g;\n}\n.rc-calendar-time-input:focus {\n border-color: #f09f4g;\n box-shadow: 0 0 3px #f09f4g;\n}\n.rc-calendar-time-panel {\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n background: #ffffff;\n z-index: 10;\n position: absolute;\n outline: none;\n}\n.rc-calendar-time-panel-header {\n padding: 0 10px;\n height: 34px;\n line-height: 34px;\n position: relative;\n text-align: center;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-user-select: none;\n border-bottom: 1px solid #ccc;\n}\n.rc-calendar-time-panel-body {\n padding: 9px 10px 10px;\n}\n.rc-calendar-time-panel-title {\n width: 180px;\n font-weight: bold;\n display: inline-block;\n padding: 4px 5px;\n text-align: center;\n height: 30px;\n line-height: 22px;\n border-radius: 4px;\n}\n.rc-calendar-time-panel-table {\n table-layout: fixed;\n width: 100%;\n height: 255px;\n border-collapse: separate;\n}\n.rc-calendar-time-panel-cell {\n text-align: center;\n height: 42px;\n vertical-align: middle;\n}\n.rc-calendar-time-panel-time {\n line-height: 26px;\n display: block;\n border-radius: 4px;\n width: 26px;\n margin: 0 auto;\n}\n.rc-calendar-time-panel-time:hover {\n background: #fcecd9;\n cursor: pointer;\n}\n.rc-calendar-time-panel-selected-cell .rc-calendar-time-panel-time {\n background: #f09f3f;\n color: #fff;\n}\n.rc-calendar-time-panel-selected-cell .rc-calendar-time-panel-time:hover {\n background: #f09f3f;\n color: #fff;\n}\n.rc-calendar-month-panel {\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n background: #ffffff;\n z-index: 10;\n position: absolute;\n outline: none;\n}\n.rc-calendar-month-panel > div {\n height: 100%;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.rc-calendar-month-panel-hidden {\n display: none;\n}\n.rc-calendar-month-panel-header {\n padding: 0 10px;\n height: 34px;\n line-height: 30px;\n position: relative;\n text-align: center;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-user-select: none;\n border-bottom: 1px solid #ccc;\n}\n.rc-calendar-month-panel-header > a {\n font-weight: bold;\n display: inline-block;\n padding: 4px 5px;\n text-align: center;\n width: 30px;\n}\n.rc-calendar-month-panel-header > a:hover {\n cursor: pointer;\n color: #f09f4g;\n}\n.rc-calendar-month-panel-prev-year-btn,\n.rc-calendar-month-panel-next-year-btn {\n position: absolute;\n top: 0;\n}\n.rc-calendar-month-panel-next-year-btn:after {\n content: '»';\n}\n.rc-calendar-month-panel-prev-year-btn {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n left: 0;\n}\n.rc-calendar-month-panel-prev-year-btn:after {\n content: '«';\n}\n.rc-calendar-month-panel .rc-calendar-month-panel-year-select {\n width: 180px;\n}\n.rc-calendar-month-panel-year-select-arrow {\n display: none;\n}\n.rc-calendar-month-panel-next-year-btn {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n right: 0;\n}\n.rc-calendar-month-panel-body {\n -ms-flex: 1;\n flex: 1;\n padding: 9px 10px 10px;\n}\n.rc-calendar-month-panel-footer {\n border-top: 1px solid #ccc;\n line-height: 38px;\n}\n.rc-calendar-month-panel-table {\n table-layout: fixed;\n width: 100%;\n height: 100%;\n border-collapse: separate;\n}\n.rc-calendar-month-panel-cell {\n text-align: center;\n}\n.rc-calendar-month-panel-cell .rc-calendar-month-panel-month {\n display: block;\n width: 46px;\n margin: 0 auto;\n color: #666;\n border-radius: 4px 4px;\n height: 36px;\n padding: 0;\n background: transparent;\n line-height: 36px;\n text-align: center;\n}\n.rc-calendar-month-panel-cell .rc-calendar-month-panel-month:hover {\n background: #fcecd9;\n cursor: pointer;\n}\n.rc-calendar-month-panel-cell-disabled .rc-calendar-month-panel-month {\n color: #bfbfbf;\n}\n.rc-calendar-month-panel-cell-disabled .rc-calendar-month-panel-month:hover {\n background: white;\n cursor: not-allowed;\n}\n.rc-calendar-month-panel-selected-cell .rc-calendar-month-panel-month {\n background: #f09f3f;\n color: #fff;\n}\n.rc-calendar-month-panel-selected-cell .rc-calendar-month-panel-month:hover {\n background: #f09f3f;\n color: #fff;\n}\n.rc-calendar-month-header-wrap {\n position: relative;\n height: 308px;\n}\n.rc-calendar-year-panel {\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n background: #ffffff;\n z-index: 10;\n position: absolute;\n outline: none;\n}\n.rc-calendar-year-panel > div {\n height: 100%;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.rc-calendar-year-panel-hidden {\n display: none;\n}\n.rc-calendar-year-panel-header {\n padding: 0 10px;\n height: 34px;\n line-height: 30px;\n position: relative;\n text-align: center;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-user-select: none;\n border-bottom: 1px solid #ccc;\n}\n.rc-calendar-year-panel-header > a {\n font-weight: bold;\n display: inline-block;\n padding: 4px 5px;\n text-align: center;\n width: 30px;\n}\n.rc-calendar-year-panel-header > a:hover {\n cursor: pointer;\n color: #f09f4g;\n}\n.rc-calendar-year-panel-prev-decade-btn,\n.rc-calendar-year-panel-next-decade-btn {\n position: absolute;\n top: 0;\n}\n.rc-calendar-year-panel-next-decade-btn:after {\n content: '»';\n}\n.rc-calendar-year-panel-prev-decade-btn {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n left: 0;\n}\n.rc-calendar-year-panel-prev-decade-btn:after {\n content: '«';\n}\n.rc-calendar-year-panel .rc-calendar-year-panel-decade-select {\n width: 180px;\n}\n.rc-calendar-year-panel-decade-select-arrow {\n display: none;\n}\n.rc-calendar-year-panel-next-decade-btn {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n right: 0;\n}\n.rc-calendar-year-panel-body {\n -ms-flex: 1;\n flex: 1;\n padding: 9px 10px 10px;\n}\n.rc-calendar-year-panel-footer {\n border-top: 1px solid #ccc;\n line-height: 38px;\n}\n.rc-calendar-year-panel-table {\n table-layout: fixed;\n width: 100%;\n height: 100%;\n border-collapse: separate;\n}\n.rc-calendar-year-panel-cell {\n text-align: center;\n}\n.rc-calendar-year-panel-year {\n display: block;\n width: 46px;\n margin: 0 auto;\n color: #666;\n border-radius: 4px 4px;\n height: 36px;\n padding: 0;\n background: transparent;\n line-height: 36px;\n text-align: center;\n}\n.rc-calendar-year-panel-year:hover {\n background: #fcecd9;\n cursor: pointer;\n}\n.rc-calendar-year-panel-selected-cell .rc-calendar-year-panel-year {\n background: #f09f3f;\n color: #fff;\n}\n.rc-calendar-year-panel-selected-cell .rc-calendar-year-panel-year:hover {\n background: #f09f3f;\n color: #fff;\n}\n.rc-calendar-year-panel-last-decade-cell .rc-calendar-year-panel-year,\n.rc-calendar-year-panel-next-decade-cell .rc-calendar-year-panel-year {\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-user-select: none;\n color: rgba(0, 0, 0, 0.25);\n}\n.rc-calendar-decade-panel {\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n background: #ffffff;\n z-index: 10;\n position: absolute;\n outline: none;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-direction: column;\n flex-direction: column;\n}\n.rc-calendar-decade-panel-hidden {\n display: none;\n}\n.rc-calendar-decade-panel-header {\n padding: 0 10px;\n height: 34px;\n line-height: 34px;\n position: relative;\n text-align: center;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-user-select: none;\n border-bottom: 1px solid #ccc;\n}\n.rc-calendar-decade-panel-header > a {\n font-weight: bold;\n display: inline-block;\n padding: 1px 5px;\n text-align: center;\n width: 30px;\n}\n.rc-calendar-decade-panel-header > a:hover {\n cursor: pointer;\n color: #f09f4g;\n}\n.rc-calendar-decade-panel-prev-century-btn,\n.rc-calendar-decade-panel-next-century-btn {\n position: absolute;\n top: 0;\n}\n.rc-calendar-decade-panel-next-century-btn:after {\n content: '»';\n}\n.rc-calendar-decade-panel-prev-century-btn {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n left: 0;\n}\n.rc-calendar-decade-panel-prev-century-btn:after {\n content: '«';\n}\n.rc-calendar-decade-panel-next-century-btn {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n right: 0;\n}\n.rc-calendar-decade-panel-body {\n -ms-flex: 1;\n flex: 1;\n padding: 9px 10px 10px;\n}\n.rc-calendar-decade-panel-footer {\n border-top: 1px solid #ccc;\n line-height: 38px;\n}\n.rc-calendar-decade-panel-table {\n table-layout: fixed;\n width: 100%;\n height: 100%;\n border-collapse: separate;\n}\n.rc-calendar-decade-panel-cell {\n text-align: center;\n}\n.rc-calendar-decade-panel-decade {\n display: block;\n margin: 0 auto;\n color: #666;\n border-radius: 4px 4px;\n height: 36px;\n padding: 0;\n background: transparent;\n line-height: 36px;\n text-align: center;\n}\n.rc-calendar-decade-panel-decade:hover {\n background: #fcecd9;\n cursor: pointer;\n}\n.rc-calendar-decade-panel-selected-cell .rc-calendar-decade-panel-decade {\n background: #f09f3f;\n color: #fff;\n}\n.rc-calendar-decade-panel-selected-cell .rc-calendar-decade-panel-decade:hover {\n background: #f09f3f;\n color: #fff;\n}\n.rc-calendar-decade-panel-last-century-cell .rc-calendar-decade-panel-decade,\n.rc-calendar-decade-panel-next-century-cell .rc-calendar-decade-panel-decade {\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-user-select: none;\n color: rgba(0, 0, 0, 0.25);\n}\n.rc-calendar-range {\n width: 502px;\n overflow: hidden;\n}\n.rc-calendar-range-part {\n width: 250px;\n position: relative;\n}\n.rc-calendar-range-part .rc-calendar-time-picker {\n top: 69px;\n}\n.rc-calendar-range-part .rc-calendar-time-picker-panel-select {\n width: 77px;\n}\n.rc-calendar-range-left {\n float: left;\n}\n.rc-calendar-range-left .rc-calendar-time-picker-panel-select:last-child {\n border-right: 1px solid #e9e9e9;\n}\n.rc-calendar-range-right {\n float: right;\n}\n.rc-calendar-range-right .rc-calendar-time-picker-panel {\n left: 21px;\n}\n.rc-calendar-range-right .rc-calendar-time-picker-panel-select:first-child {\n border-left: 1px solid #e9e9e9;\n}\n.rc-calendar-range-middle {\n position: absolute;\n margin-left: -10px;\n text-align: center;\n height: 35px;\n line-height: 35px;\n}\n.rc-calendar-range .rc-calendar-date-panel::after {\n content: \".\";\n display: block;\n height: 0;\n clear: both;\n visibility: hidden;\n}\n.rc-calendar-range .rc-calendar-input-wrap {\n height: 35px;\n}\n.rc-calendar-range .rc-calendar-input,\n.rc-calendar-range .rc-time-picker-input {\n padding: 1px 7px;\n height: 22px;\n}\n.rc-calendar-range .rc-calendar-body,\n.rc-calendar-range .rc-calendar-decade-panel-body,\n.rc-calendar-range .rc-calendar-year-panel-body,\n.rc-calendar-range .rc-calendar-month-panel-body {\n border-bottom: 1px solid #e9e9e9;\n}\n.rc-calendar-range.rc-calendar-week-number {\n width: 574px;\n}\n.rc-calendar-range.rc-calendar-week-number .rc-calendar-range-part {\n width: 286px;\n}\n.rc-calendar-range.rc-calendar-week-number .rc-calendar-range-part .rc-calendar-time-picker {\n top: 69px;\n}\n.rc-calendar-range.rc-calendar-week-number .rc-calendar-range-part .rc-calendar-time-picker-panel-select {\n width: 89px;\n}\n.rc-calendar-range.rc-calendar-week-number .rc-calendar-range-right .rc-calendar-time-picker-panel {\n left: 36px;\n}\n.rc-calendar-range .rc-calendar-year-panel,\n.rc-calendar-range .rc-calendar-month-panel,\n.rc-calendar-range .rc-calendar-decade-panel {\n top: 35px;\n}\n.rc-calendar-range .rc-calendar-month-panel .rc-calendar-year-panel {\n top: 0;\n}\n.rc-calendar-range .rc-calendar-decade-panel-table,\n.rc-calendar-range .rc-calendar-year-panel-table,\n.rc-calendar-range .rc-calendar-month-panel-table {\n height: 198px;\n}\n.rc-calendar-range .rc-calendar-in-range-cell {\n background: #ebf4f8;\n border-radius: 0;\n}\n.rc-calendar-range-bottom {\n text-align: right;\n}\n.rc-calendar-range .rc-calendar-footer {\n border-top: none;\n padding: 0;\n}\n.rc-calendar-range .rc-calendar-footer-btn {\n padding: 10px 12px 10px 0;\n}\n.rc-calendar-range .rc-calendar-ok-btn {\n position: static;\n}\n.rc-calendar-range .rc-calendar-today-btn {\n float: left;\n}\n.rc-calendar-full {\n width: 275px;\n}\n.rc-calendar-full-header {\n padding: 5px 10px;\n text-align: center;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-user-select: none;\n border-bottom: 1px solid #ccc;\n overflow: hidden;\n}\n.rc-calendar-full-header-month-select,\n.rc-calendar-full-header-year-select {\n width: 70px;\n float: right;\n margin-right: 5px;\n}\n.rc-calendar-full-header-switcher {\n float: right;\n display: inline-block;\n}\n.rc-calendar-full-header-switcher-normal:hover {\n border-color: #f09f4g;\n box-shadow: 0 0 2px rgba(45, 183, 245, 0.8);\n cursor: pointer;\n}\n.rc-calendar-full-header-switcher-focus {\n border-color: #f09f3f;\n background-color: #f09f3f;\n color: #fff;\n}\n.rc-calendar-full-header-switcher > span {\n float: left;\n height: 28px;\n line-height: 24px;\n border: 1px solid #d9d9d9;\n padding: 0 10px;\n color: #666;\n}\n.rc-calendar-full-header-switcher > span:first-child {\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n border-right: none;\n}\n.rc-calendar-full-header-switcher > span:last-child {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n border-left: none;\n}\n.rc-calendar-fullscreen {\n width: auto;\n}\n.rc-calendar-fullscreen .rc-calendar-full-header {\n border-bottom: none;\n}\n.rc-calendar-fullscreen .rc-calendar-column-header {\n text-align: right;\n padding-right: 12px;\n}\n.rc-calendar-fullscreen .rc-calendar-cell {\n padding: 0;\n}\n.rc-calendar-fullscreen .rc-calendar-cell .rc-calendar-date,\n.rc-calendar-fullscreen .rc-calendar-month-panel-cell .rc-calendar-month-panel-month {\n display: block;\n height: 116px;\n width: auto;\n border-radius: 0;\n margin: 0 4px;\n border: none;\n border-top: 2px solid #eee;\n text-align: right;\n padding-right: 8px;\n}\n.rc-calendar-fullscreen .rc-calendar-selected-day .rc-calendar-date,\n.rc-calendar-fullscreen .rc-calendar-month-panel-selected-cell .rc-calendar-month-panel-month {\n background-color: #fcecd9;\n color: #666;\n}\n.rc-calendar-fullscreen .rc-calendar-today .rc-calendar-date,\n.rc-calendar-fullscreen .rc-calendar-month-panel-selected-cell .rc-calendar-month-panel-month {\n border-top-color: #f09f3f;\n color: #f09f3f;\n}\n",".paginator .btn {\n min-width: 2.375rem;\n}\n","body {\n overflow: hidden;\n}\n#wrapper {\n height: 100%;\n}\n.file-view-header {\n padding: 4px 10px;\n background: #fff;\n border-bottom: 1px solid #c9c9c9;\n flex-shrink: 0;\n}\n.file-title {\n font-size: 1.2rem;\n font-weight: bold;\n line-height: 1.5;\n margin-bottom: 0;\n}\n.file-star {\n font-size: .875rem;\n color: #999; \n margin-left: .5rem;\n}\n.file-star:hover,\n.file-star:focus {\n text-decoration: none;\n color: #999;\n}\n.file-locked-icon {\n margin-left: .5rem;\n}\n.meta-info {\n font-size: .8125rem;\n}\n.file-view-content {\n padding: 30px 0;\n background: #f4f4f4;\n border-right: 4px solid transparent;\n}\n.tip {\n color: #808080;\n}\n\n.file-details-container {\n position: absolute;\n right: 0;\n background-color: #fff;\n width: 300px;\n height: 100%;\n box-shadow: -1px 0 3px 0 #ccc;\n animation: move .5s ease-in-out 1;\n z-index: 50;\n}\n@keyframes move {\n from {\n right: -500px;\n opacity: 0.5;\n }\n to {\n right: 0px;\n opacity: 1;\n }\n}\n /* for mobile */\n.file-view-body .seafile-comment {\n width: 100%;\n}\n@media (min-width: 768px) {\n .file-view-body .seafile-comment {\n width: 300px;\n border-left: 1px solid #e6e6dd;\n }\n}\n",".image-file-view {\n position: relative;\n text-align: center;\n}\n.image-file-view:before {\n content: ' '; \n display: inline-block;\n vertical-align: middle;\n height: 100%;\n font-size: 0;\n line-height: 0;\n}\n#image-view {\n padding: 1px; \n background: #fff;\n border: 1px solid #eee;\n width: auto;\n height: auto;\n max-width: calc(100% - 4px);\n max-height: calc(100% - 4px);\n font-size: 0;\n line-height: 0;\n}\n#img-prev,\n#img-next {\n position:absolute;\n top:48%;\n text-decoration:none;\n color:#888;\n width:50px;\n height:50px;\n background:#fff;\n border-radius:100%;\n line-height:50px;\n}\n#img-prev {\n left:15px;\n}\n#img-next {\n right:15px;\n}\n#img-prev:hover,\n#img-next:hover {\n color:#333;\n}\n",".svg-file-view {\n position: relative;\n text-align: center;\n}\n.svg-file-view:before {\n content: ' '; \n display: inline-block;\n vertical-align: middle;\n height: 100%;\n font-size: 0;\n line-height: 0;\n}\n#svg-view {\n max-width: 100%;\n max-height: 100%;\n}\n",".pdf-file-view {\n overflow: hidden;\n position: relative;\n}\n\n/* for pdf online file view */\n.pdf-file-view.file-view-content {\n border: 0;\n}\n\n.sf-hide {\n height: 0;\n overflow: hidden;\n}\n\n#outerContainer,\n#mainContainer,\n#viewerContainer {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n}\n\n#viewerContainer {\n padding: 10px 0 0;\n overflow: auto;\n margin-bottom: 33px;\n}\n\n#viewerContainer:focus {\n outline: none;\n}\n\n.pdfViewer .page {\n position: relative;\n background: #fff;\n border: none;\n box-shadow: 0 0 6px #ccc;\n margin: 0 auto 10px;\n}\n\n.page .loading-icon {\n position: absolute;\n top: 50%;\n left: 50%;\n}\n\n/* the following lines overwrite lines from web/viewer.css */\n#toolbarViewerMiddle {\n left: auto;\n right: 0;\n transform: none;\n}\n\nselect#scaleSelect {\n background: #fff;\n height: 24px;\n font-size: 12px;\n}\n\n#scaleSelectContainer::after {\n top: 4px;\n}\n\n/* errorWrapper starts */\n#errorWrapper {\n background: #ff6e6e;\n color: #0c0c0d;\n left: 0;\n position: absolute;\n right: 0;\n /*z-index: 1000;*/\n z-index: 998; /* for seahub */\n padding: 3px 6px;\n}\n/* errorWrapper ends */\n\n/* toolbar */\n.toolbar {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n /*z-index: 9999;*/\n z-index: 998; /* 1048: for seahub 'file view' */\n}\n\n#toolbarContainer {\n box-shadow: none;\n border-top: 1px solid #c9c9c9;\n height: auto;\n}\n\n#loadingBar {\n position: fixed;\n top: 50%;\n width: auto;\n height: auto;\n border: 0;\n background: transparent;\n}\n\ninput#pageNumber {\n font-size: 12px;\n height: 20px;\n padding: 0 5px;\n margin: 0 0 0 9px;\n}\n\n#numPages.toolbarLabel {\n margin: 0;\n padding: 0 7px;\n}\n\n/* toolbar ends */\n\n/* sidebar starts */\n#sidebarContainer {\n position: absolute;\n top: 0;\n bottom: 0;\n border-top: none;\n background: #fff;\n}\n\n#toolbarSidebar {\n height: auto;\n background: #fff;\n}\n\n#thumbnailView {\n width: 100%;\n padding: 0;\n}\n\n#thumbnails-header {\n}\n\n#thumbnails-header .title {\n font-size: 1rem;\n}\n\n#thumbnails-header .sf2-icon-x3 {\n font-family: 'seafile-font2';\n}\n\n#thumbnails-header .close-thumbnail-panel {\n font-size: 1rem;\n color: #999;\n}\n\n#thumbnails-header .close-thumbnail-panel:hover {\n color: #555;\n}\n\n#thumbnailView .thumbnail {\n float: none;\n max-width: unset;\n max-height: unset;\n width: auto;\n height: auto;\n padding: 10px 0;\n border: none;\n border-radius: unset;\n margin: 0 1px 0 0;\n text-align: center;\n}\n\n#thumbnailView .thumbnail.selected {\n background: #f0f0f0; \n}\n\n#thumbnailView .thumbnail .thumbnail-page-number {\n font-size: .875rem;\n color: #999;\n position: absolute;\n right: 100%;\n bottom: 0;\n}\n\n#thumbnailView .thumbnail .thumbnailImage {\n border: 1px solid #ddd;\n border-radius: 3px;\n}\n\n#thumbnailView .thumbnail.selected .thumbnailImage {\n border: 2px solid #ff9800;\n}\n\n#sidebarContent {\n inset-block: 51.5px 0;\n}\n\n.splitToolbarButton > .toolbarButton {\n float: none;\n}\n/* sidebar ends */\n\n/* overlay, passwordOverlay */\n#overlayContainer {\n display: table;\n position: absolute;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.2);\n /*z-index: 40000;*/\n z-index: 999; /* 1049: for seahub 'share' dialog */\n}\n\n.dirent-info .img .thumbnail {\n float: none;\n width: auto;\n height: auto;\n margin: 0;\n padding: 0;\n border: 0;\n border-radius: 0;\n}\n\n@media print {\n #wrapper {\n display: none;\n }\n}\n",".text-file-view .cm-editor {\n margin: 0 auto;\n border: 1px solid #ccc;\n box-shadow: 0 0 6px #ccc;\n}\n\n.text-file-view .cm-editor {\n height: auto;\n min-height: 300px;\n width: calc(100% - 40px);\n max-width: 950px;\n}\n\n.text-file-view .cm-editor.cm-focused {\n outline: none;\n}\n\n.text-file-view .cm-scroll {\n min-height: 300px;\n}\n\n.text-file-view .cm-gutter {\n min-height: 300px;\n}\n",".text-file-view {\n overflow: auto;\n}\n",".sf-code-mirror .cm-editor {\n height: 100vh;\n font-size: 13px;\n}\n\n.sf-code-mirror .cm-editor .cm-scroller {\n overflow-x: initial;\n}\n","/** common loading **/\n@-moz-keyframes commonLoading {\n 0% {\n -moz-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -moz-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@-webkit-keyframes commonLoading {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes commonLoading {\n 0% {\n -moz-transform: rotate(0deg);\n -ms-transform: rotate(0deg);\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -moz-transform: rotate(360deg);\n -ms-transform: rotate(360deg);\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n.common-loading-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n border: 2px solid #eee;\n border-left-color: #aaa;\n border-radius: 50%;\n -moz-animation: commonLoading 0.9s infinite linear;\n -webkit-animation: commonLoading 0.9s infinite linear;\n animation: commonLoading 0.9s infinite linear;\n}\n\n.common-loading-tip {\n display: block;\n margin: 0 auto;\n}\n","/* insert element dropdown item */\n.sdoc-dropdown-item-with-left-icon .sdoc-dropdown-item-content .sdoc-dropdown-item-content-icon {\n color: #444;\n}\n",".link-op-menu {\n height: 36px;\n padding: 7px 8px;\n display: flex;\n position: absolute;\n background-color: #fff;\n border: 1px solid #e5e5e5;\n border-radius: 3px;\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);\n z-index: 1000;\n}\n\n.link-op-menu .link-op-menu-triangle {\n width: 8px;\n height: 8px;\n transform: rotate(45deg);\n background: #fff;\n border-right: 1px solid rgba(0, 40, 100, 0.12);\n border-bottom: 1px solid rgba(0, 40, 100, 0.12);\n position: absolute;\n top: 31px;\n right: 50%;\n z-index: 1001;\n}\n\n.link-op-menu-link {\n font-size: 12px;\n color: #212529;\n padding: 0 5px;\n border-radius: 2px;\n line-height: 20px;\n cursor: pointer;\n}\n\n.link-op-menu-link:hover {\n color: #212529;\n text-decoration: none;\n background: #f1f1f1;\n}\n\n.link-op-icons {\n margin-left: 8px;\n border-left: 1px solid #e5e5e5;\n}\n\n.link-op-icon {\n color: #999999;\n padding: 4px;\n border-radius: 2px;\n margin-left: 8px;\n display: flex;\n align-items: center;\n}\n\n.link-op-icon .sdocfont {\n font-size: 12px;\n color: #444;\n}\n\n.link-op-icon:hover {\n background: #f2f2f2;\n}\n\n.seafile-ed-hovermenu-mouseclick {\n background-color: #e5e5e5;\n}\n",".sdoc-tooltip {\n pointer-events: none;\n}\n\n.sdoc-tooltip .tooltip-inner {\n font-weight: lighter;\n text-align: start;\n background-color: #303133;\n}\n\n.sdoc-tooltip.bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n border-bottom-color: #303133;\n}\n\n.sdoc-tooltip.bs-tooltip-auto[x-placement^=\"top\"] {\n margin-bottom: -2px;\n}\n\n.sdoc-tooltip.bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n border-top-color: #303133;\n}\n\n.sdoc-tooltip.bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n border-right-color: #303133;\n}\n\n.sdoc-tooltip.bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n border-left-color: #303133;\n}\n",".menu-group .sdoc-color-menu.menu-show {\n background: #e5e5e5;\n border-radius: 2px;\n}\n\n.menu-group .sdoc-color-menu .last-used-color-container {\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n\n.menu-group .sdoc-color-menu .last-used-color-container.disabled {\n padding-right: 0;\n}\n\n.menu-group .sdoc-color-menu .sdoc-color-toggle {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.menu-group .sdoc-color-menu .sdoc-color-toggle:hover,\n.menu-group .sdoc-color-menu .last-used-color-container:not(.disabled):hover {\n background-color: #E5E5E5;\n}\n\n.menu-group .sdoc-color-menu.disabled .sdoc-color-toggle {\n display: none;\n}\n\n.sdoc-color-menu .sdoc-color-icon {\n height: 12px;\n width: 12px;\n transform: scale(.85);\n line-height: 12px;\n}\n\n.sdoc-color-menu .last-used-color {\n width: 14px;\n height: 3px;\n border-radius: 1px;\n margin-top: 1px;\n border: 1px solid rgba(0, 0, 0, .08);\n}\n\n.sdoc-color-menu-popover .popover {\n left: -24px !important;\n}\n\n.sdoc-color-menu-popover .sdoc-color-dropdown-menu {\n width: 251px;\n padding: 0 0 12px 0;\n}\n\n.sdoc-color-menu-popover .sdoc-color-no-color-container {\n width: 100%;\n height: 24px;\n margin-bottom: 5px;\n}\n\n.sdoc-color-menu-popover .sdoc-color-no-color-content {\n height: 100%;\n width: 100%;\n text-align: center;\n border: 1px solid rgba(0, 0, 0, .12);\n border-radius: 2px;\n font-size: 12px;\n line-height: 22px;\n cursor: pointer;\n}\n\n.sdoc-color-menu-popover .sdoc-color-default-colors-container {\n display: flex;\n flex-wrap: wrap;\n}\n\n.sdoc-color-menu-popover .sdoc-color-item {\n position: relative;\n height: 20px;\n width: 20px;\n margin-right: 3px;\n margin-bottom: 3px;\n border: 0.5px solid rgba(0, 0, 0, .08);\n}\n\n.sdoc-color-menu-popover .sdoc-color-item:not(.selected):hover::before {\n content: '';\n position: absolute;\n width: calc(100% + 5px);\n height: calc((100% + 5px));\n top: -2.5px;\n left: -2.5px;\n pointer-events: none;\n border: 1px solid rgba(0, 0, 0, .24);\n}\n\n.sdoc-color-menu-popover .sdoc-color-item.selected::after {\n content: '';\n position: absolute;\n width: calc(100% + 5px);\n height: calc((100% + 5px));\n top: -2.5px;\n left: -2.5px;\n pointer-events: none;\n border: 1px solid rgba(0, 0, 0, .88);\n}\n\n.sdoc-color-menu-popover .sdoc-color-item:hover {\n cursor: pointer;\n}\n\n.sdoc-color-menu-popover .sdoc-color-item:nth-child(10n) {\n margin-right: 0px;\n}\n\n.sdoc-color-menu-popover .sdoc-color-sub-title {\n font-size: 11px;\n line-height: 16px;\n margin: 7px 0;\n color: rgba(0, 0, 0, 0.4);\n}\n\n.sdoc-color-menu-popover .sdoc-colors-divider {\n width: 100%;\n height: 1px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n margin: 0px 0 8px 0;\n}\n\n.sdoc-color-menu-popover .sdoc-more-colors {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 30px;\n font-size: 12px;\n padding: 0 12px;\n}\n\n.sdoc-color-menu-popover .sdoc-more-colors .sdocfont {\n font-size: 12px;\n transform: scale(.6);\n color: #888;\n}\n\n.sdoc-color-menu-popover .sdoc-more-colors.show-pick {\n cursor: pointer;\n background-color: rgba(51, 77, 102, .06);\n}\n\n.sdoc-more-colors-popover .popover {\n left: 10px !important;\n}\n\n/* commission */\n.menu-group #button-sdoc-highlight-color .sdoc-color-icon {\n position: relative;\n left: 1px;\n}\n",".menu-group {\n height: 100%;\n padding: 6px 0 6px 8px;\n font-size: 0.75rem;\n border-right: 1px solid #e5e6e8;\n color: #444;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.menu-group .menu-group-item {\n width: 24px;\n height: 24px;\n line-height: 24px;\n margin-right: 8px;\n border: none !important;\n color: #444;\n background-color: #fff;\n}\n\n.menu-group .menu-group-item:disabled {\n color: #BDBDBD;\n}\n\n.menu-group .menu-group-item:hover {\n background-color: #F2F2F2;\n border-radius: 2px;\n}\n\n.menu-group .menu-group-item[data-active='true'] {\n color: #eb8205;\n}\n\n.menu-group .menu-group-item .sdocfont,\n.sdoc-menu-with-dropdown .sdoc-menu-with-dropdown-icon .sdocfont {\n font-size: 12px;\n}\n\n/* sdoc-menu-with-dropdown */\n.menu-group .menu-group-item.sdoc-menu-with-dropdown {\n width: 36px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 0 !important;\n padding: 0 !important;\n margin-right: 10px;\n overflow: hidden;\n}\n\n.menu-group .menu-group-item.sdoc-menu-with-dropdown.disabled {\n color: #999;\n width: 24px !important;\n}\n\n.sdoc-menu-with-dropdown:not(.disabled):hover {\n background: #F2F2F2;\n border-radius: 2px;\n}\n\n.sdoc-menu-with-dropdown .sdoc-menu-with-dropdown-icon {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sdoc-menu-with-dropdown .sdoc-menu-with-dropdown-triangle {\n width: 12px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sdoc-menu-with-dropdown .sdoc-menu-with-dropdown-triangle .sdoc-menu-with-dropdown-triangle-icon {\n font-size: 12px;\n color: #999;\n}\n",".sdoc-code-block-hover-menu-container {\n position: absolute;\n height: 42px;\n z-index: 101;\n width: fit-content;\n max-width: 250px;\n}\n\n.sdoc-code-block-hover-menu-container .hover-menu-container {\n height: 36px;\n width: 100%;\n padding: 7px 8px;\n background-color: #fff;\n display: flex;\n justify-content: space-around;\n align-items: center;\n border-radius: 3px;\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);\n border: 1px solid #e8e8e8;\n}\n\n.sdoc-code-block-hover-menu-container .hover-menu-container .active {\n color: #212529;\n text-decoration: none;\n background: #f2f2f2;\n}\n\n.sdoc-code-block-hover-menu-container .hover-menu-container .op-item {\n position: relative;\n height: 100%;\n width: 100%;\n font-size: 12px;\n color: #212529;\n border-radius: 2px;\n text-align: center;\n line-height: 20px;\n}\n\n.sdoc-code-block-hover-menu-container .sdoc-code-block-hover-operation-item.sdoc-code-block-hover-operation-lang .op-item {\n padding: 0 5px;\n}\n\n.sdoc-code-block-hover-menu-container .hover-menu-container .sdoc-code-block-hover-operation-lang .icon-font {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-left: 8px;\n}\n\n.sdoc-code-block-hover-menu-container .sdoc-code-block-hover-operation-item {\n height: 20px;\n width: 20px;\n text-align: center;\n justify-content: center;\n}\n\n.sdoc-code-block-hover-menu-container .sdoc-code-block-hover-operation-item.sdoc-code-block-hover-operation-lang {\n width: fit-content;\n}\n\n.sdoc-code-block-hover-menu-container .sdoc-code-block-hover-operation-lang .icon-font {\n color: #999;\n}\n\n.sdoc-code-block-hover-menu-container .sdoc-code-block-hover-operation-divider {\n height: 20px;\n width: 1px;\n background-color: #e5e5e5;\n margin: 0 8px;\n}\n\n.sdoc-code-block-hover-menu-container .hover-menu-container .op-item:hover {\n color: #212529;\n text-decoration: none;\n background: #f2f2f2;\n}\n\n.sdoc-code-block-hover-menu-container .icon-font {\n font-size: 12px;\n color: #444;\n}\n\n.sdoc-langs-list-container {\n position: absolute;\n top: 38px;\n left: 0px;\n width: 200px;\n overflow-y: hidden;\n background-color: #fff;\n border-radius: 4px;\n box-shadow: 0 0 5px #ccc;\n border: 1px solid #dedede;\n}\n\n.sdoc-langs-list-container .sdoc-search-langs {\n padding: 10px 10px 0;\n}\n\n.sdoc-langs-list-container .sdoc-search-langs input {\n max-height: 30px;\n font-size: 14px;\n}\n\n.sdoc-langs-list-container .langs-list-ul {\n list-style: none;\n overflow-y: auto;\n max-height: 280px;\n min-height: 100px;\n padding: 10px;\n}\n\n.sdoc-langs-list-container .langs-list-ul .langs-list-li {\n position: relative;\n white-space: nowrap;\n cursor: pointer;\n line-height: 30px;\n height: 30px;\n font-size: 13px;\n padding-left: 12px;\n display: flex;\n justify-content: space-between;\n}\n\n.sdoc-langs-list-container .langs-list-ul .langs-list-li:hover {\n background-color: #f5f5f5;;\n}\n\n.sdoc-langs-list-container .langs-list-ul .langs-list-li .active {\n background-color: #f5f5f5;;\n}\n\n.sdoc-langs-list-container .langs-list-ul .langs-list-li .li-check-mark {\n opacity: 0;\n padding: 0 10px;\n}\n\n.sdoc-langs-list-container .langs-list-ul .langs-list-li .li-checked {\n opacity: 1;\n}\n",".sdoc-code-block-container {\n position: relative;\n}\n\n.sdoc-code-block-pre {\n background: #FAFAFA;\n border: 1px solid #f0f0f0;\n}\n\n.sdoc-code-block-pre .sdoc-code-no-wrap {\n white-space: nowrap;\n}\n\n.sdoc-code-block-pre .sdoc-code-no-wrap .sdoc-code-line > span {\n white-space: pre;\n}\n\n.sdoc-code-block-code .sdoc-code-line {\n position: relative;\n counter-increment: number;\n margin-left: 32px;\n}\n\n.sdoc-code-block-code .sdoc-code-line::before {\n content: counter(number);\n color: #ccc;\n width: 40px;\n text-align: end;\n position: absolute;\n left: -50px;\n}\n\n.sdoc-code-line\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n color: slategray;\n}\n\n.sdoc-code-line\n.token.punctuation {\n color: #999;\n}\n\n.sdoc-code-line\n.token.namespace {\n opacity: .7;\n}\n\n.sdoc-code-line\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n color: #905;\n padding: 0rem;\n}\n\n.sdoc-code-line\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n color: #690;\n}\n\n.sdoc-code-line\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n color: #9a6e3a;\n}\n\n.sdoc-code-line\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n color: #07a;\n}\n\n.sdoc-code-line\n.token.function,\n.token.class-name {\n color: #DD4A68;\n}\n\n.sdoc-code-line\n.token.regex,\n.token.important,\n.token.variable {\n color: #e90;\n}\n\n.sdoc-code-line\n.sdoc-code-line\n.token.important,\n.token.bold {\n font-weight: bold;\n}\n\n.sdoc-code-line\n.token.italic {\n font-style: italic;\n}\n\n.sdoc-code-line\n.token.entity {\n cursor: help;\n}\n","@keyframes closeWindow {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n\n.ril__outer {\n background-color: rgba(0, 0, 0, 0.85);\n outline: none;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 1000;\n width: 100%;\n height: 100%;\n -ms-content-zooming: none;\n -ms-user-select: none;\n -ms-touch-select: none;\n touch-action: none;\n}\n\n.ril__outerClosing {\n opacity: 0;\n}\n\n.ril__inner {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n\n.ril__image,\n.ril__imagePrev,\n.ril__imageNext {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n max-width: none;\n -ms-content-zooming: none;\n -ms-user-select: none;\n -ms-touch-select: none;\n touch-action: none;\n}\n\n.ril__imageDiscourager {\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n}\n\n.ril__navButtons {\n border: none;\n position: absolute;\n top: 0;\n bottom: 0;\n width: 20px;\n height: 34px;\n padding: 40px 30px;\n margin: auto;\n cursor: pointer;\n opacity: 0.7;\n}\n.ril__navButtons:hover {\n opacity: 1;\n}\n.ril__navButtons:active {\n opacity: 0.7;\n}\n\n.ril__outer .ril__navButtonPrev {\n left: 0;\n background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjcyMzkyNjY0MTMzIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEyNDkwIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIj48cGF0aCBkPSJNNDEyIDUxNS4ybDM2MS42LTM2MS42YzIyLjQtMTkuMiAyMi40LTU0LjQgMC03Ni44cy01Ny42LTIyLjQtNzYuOCAwbC00MDYuNCA0MDBjLTIyLjQgMjIuNC0yMi40IDU3LjYgMCA3Ni44bDQwNi40IDQwMy4yYzIyLjQgMjIuNCA1Ny42IDIyLjQgNzYuOCAwczIyLjQtNTcuNiAwLTc2LjhsLTM2MS42LTM2NC44eiIgZmlsbD0iI2ZmZmZmZiIgcC1pZD0iMTI0OTEiPjwvcGF0aD48L3N2Zz4=)\n no-repeat center;\n}\n\n.ril__outer .ril__navButtonNext {\n right: 0;\n background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjcyMzkxOTM4MzIwIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjExOTg2IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIj48cGF0aCBkPSJNNjQwIDUxNS4yTDI3OC40IDE1My42Yy0yMi40LTE5LjItMjIuNC01NC40IDAtNzYuOHM1Ny42LTIyLjQgNzYuOCAwbDQwNi40IDQwMGMyMi40IDIyLjQgMjIuNCA1Ny42IDAgNzYuOEwzNTUuMiA5NTYuOGMtMjIuNCAyMi40LTU3LjYgMjIuNC03Ni44IDBzLTIyLjQtNTcuNiAwLTc2LjhMNjQwIDUxNS4yeiIgZmlsbD0iI2ZmZmZmZiIgcC1pZD0iMTE5ODciPjwvcGF0aD48L3N2Zz4=)\n no-repeat center;\n}\n\n.ril__downloadBlocker {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7');\n background-size: cover;\n}\n\n.ril__caption,\n.ril__toolbar {\n background-color: rgba(0, 0, 0, 0.5);\n position: absolute;\n left: 0;\n right: 0;\n display: flex;\n justify-content: space-between;\n}\n\n.ril__caption {\n bottom: 0;\n max-height: 150px;\n overflow: auto;\n justify-content: center;\n}\n\n.ril__captionContent {\n padding: 10px 20px;\n color: #fff;\n margin: 0 auto;\n}\n\n.ril__toolbar {\n top: 0;\n height: 50px;\n}\n\n.ril__toolbarSide {\n height: 50px;\n margin: 0;\n}\n\n.ril__toolbarLeftSide {\n padding-left: 20px;\n padding-right: 0;\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.ril__toolbarRightSide {\n padding-left: 0;\n padding-right: 20px;\n flex: 0 0 auto;\n}\n\n.ril__toolbarItem {\n display: inline-block;\n line-height: 50px;\n padding: 0;\n color: #fff;\n font-size: 120%;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.ril__toolbarItemChild {\n vertical-align: middle;\n}\n\n.ril__builtinButton {\n width: 40px;\n height: 35px;\n cursor: pointer;\n border: none;\n opacity: 0.7;\n}\n\n.mobile-image-footer-choice .ril__builtinButton {\n opacity: 1;\n}\n\n.ril__builtinButton:hover {\n opacity: 1;\n}\n\n.ril__builtinButton:active {\n outline: none;\n}\n\n.ril-toolbar .ril__builtinButton {\n width: 30px;\n}\n\n.ril__builtinButtonDisabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.ril__builtinButtonDisabled:hover {\n opacity: 0.5;\n}\n\n/* ril-toolbar icons: size: 16px * 16px, color: #FFF */\n.ril__deleteButton {\n background: url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTZweCIgaGVpZ2h0PSJweCIgdmlld0JveD0iMCAwIDE2IDE2IiB2ZXJzaW9uPSIxLjEiPgo8ZyBpZD0ic3VyZmFjZTEiPgo8cGF0aCBzdHlsZT0iIHN0cm9rZTpub25lO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTsiIGQ9Ik0gMTAuMTk5MjE5IDAuNSBDIDEwLjYwMTU2MiAwLjUgMTEgMC44NTE1NjIgMTEuMDUwNzgxIDEuMjUgTCAxMS4yNSAyLjYwMTU2MiBMIDE0Ljg1MTU2MiAyLjYwMTU2MiBDIDE1LjE5OTIxOSAyLjYwMTU2MiAxNS41IDIuODk4NDM4IDE1LjUgMy4xOTkyMTkgQyAxNS41IDMuNSAxNS4xOTkyMTkgMy44MDA3ODEgMTQuODUxNTYyIDMuODAwNzgxIEwgMTMuNjAxNTYyIDMuODAwNzgxIEwgMTMuNjAxNTYyIDEzLjgwMDc4MSBDIDEzLjYwMTU2MiAxNC4xOTkyMTkgMTMuMzk4NDM4IDE0LjY0ODQzOCAxMy4xMDE1NjIgMTUgQyAxMi43NSAxNS4zNTE1NjIgMTIuMzUxNTYyIDE1LjQ0OTIxOSAxMS44OTg0MzggMTUuNDQ5MjE5IEwgNC4xNDg0MzggMTUuNDQ5MjE5IEMgMy42OTkyMTkgMTUuNDQ5MjE5IDMuMjUgMTUuMjUgMi45NDkyMTkgMTUgQyAyLjYwMTU2MiAxNC42NDg0MzggMi40NDkyMTkgMTQuMjUgMi40NDkyMTkgMTMuODAwNzgxIEwgMi40NDkyMTkgMy44MDA3ODEgTCAxLjE0ODQzOCAzLjgwMDc4MSBDIDAuODAwNzgxIDMuODUxNTYyIDAuNSAzLjU1MDc4MSAwLjUgMy4yNSBDIDAuNSAyLjk0OTIxOSAwLjgwMDc4MSAyLjY0ODQzOCAxLjE0ODQzOCAyLjY0ODQzOCBMIDQuNjk5MjE5IDIuNjQ4NDM4IEwgNC42OTkyMTkgMi41NTA3ODEgTCA0Ljg5ODQzOCAxLjE5OTIxOSBDIDQuOTQ5MjE5IDAuODUxNTYyIDUuMzAwNzgxIDAuNSA1Ljc1IDAuNSBaIE0gOS42NDg0MzggNi4xMDE1NjIgQyA5LjI1IDYuMTAxNTYyIDguOTQ5MjE5IDYuMzk4NDM4IDguOTQ5MjE5IDYuODAwNzgxIEwgOC45NDkyMTkgMTIgQyA4Ljk0OTIxOSAxMi4zOTg0MzggOS4yNSAxMi42OTkyMTkgOS42NDg0MzggMTIuNjk5MjE5IEMgMTAuMDUwNzgxIDEyLjY5OTIxOSAxMC4zNTE1NjIgMTIuMzk4NDM4IDEwLjM1MTU2MiAxMiBMIDEwLjM1MTU2MiA2Ljg1MTU2MiBDIDEwLjM1MTU2MiA2LjQ0OTIxOSAxMC4wNTA3ODEgNi4xMDE1NjIgOS42NDg0MzggNi4xMDE1NjIgWiBNIDYuMzUxNTYyIDYuMTAxNTYyIEMgNS45NDkyMTkgNi4xMDE1NjIgNS42NDg0MzggNi4zOTg0MzggNS42NDg0MzggNi44MDA3ODEgTCA1LjY0ODQzOCAxMiBDIDUuNjQ4NDM4IDEyLjM5ODQzOCA1Ljk0OTIxOSAxMi42OTkyMTkgNi4zNTE1NjIgMTIuNjk5MjE5IEMgNi43NSAxMi42OTkyMTkgNy4wNTA3ODEgMTIuMzk4NDM4IDcuMDUwNzgxIDEyIEwgNy4wNTA3ODEgNi44NTE1NjIgQyA3LjA1MDc4MSA2LjQ0OTIxOSA2Ljc1IDYuMTAxNTYyIDYuMzUxNTYyIDYuMTAxNTYyIFogTSA2LjM1MTU2MiA2LjEwMTU2MiAiLz4KPC9nPgo8L3N2Zz4K\")\n no-repeat center;\n}\n\n.ril__downloadButton {\n background: url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTZweCIgaGVpZ2h0PSJweCIgdmlld0JveD0iMCAwIDE2IDE2IiB2ZXJzaW9uPSIxLjEiPgo8ZyBpZD0ic3VyZmFjZTEiPgo8cGF0aCBzdHlsZT0iIHN0cm9rZTpub25lO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTsiIGQ9Ik0gOS4xMDE1NjIgOC44OTg0MzggTCA5LjEwMTU2MiAxLjYwMTU2MiBDIDkuMTAxNTYyIDAuOTQ5MjE5IDguNjAxNTYyIDAuNSA4IDAuNSBDIDcuMzk4NDM4IDAuNSA2Ljg5ODQzOCAwLjk0OTIxOSA2Ljg5ODQzOCAxLjYwMTU2MiBMIDYuODk4NDM4IDguODk4NDM4IEwgNC4xOTkyMTkgNi4xOTkyMTkgQyAzLjgwMDc4MSA1LjgwMDc4MSAzLjEwMTU2MiA1LjgwMDc4MSAyLjY5OTIxOSA2LjI1IEMgMi4zMDA3ODEgNi42NDg0MzggMi4zMDA3ODEgNy4zNTE1NjIgMi42OTkyMTkgNy43NSBMIDcuMjUgMTIuMzAwNzgxIEMgNy42NDg0MzggMTIuNjk5MjE5IDguMzUxNTYyIDEyLjY5OTIxOSA4Ljc1IDEyLjMwMDc4MSBMIDEzLjMwMDc4MSA3Ljc1IEMgMTMuNjk5MjE5IDcuMzUxNTYyIDEzLjY5OTIxOSA2LjY0ODQzOCAxMy4zNTE1NjIgNi4yNSBDIDEyLjk0OTIxOSA1Ljg1MTU2MiAxMi4yNSA1Ljg1MTU2MiAxMS44NTE1NjIgNi4xOTkyMTkgQyAxMS44NTE1NjIgNi4xOTkyMTkgMTEuODUxNTYyIDYuMTk5MjE5IDExLjgwMDc4MSA2LjI1IFogTSAxLjYwMTU2MiAxMy4zNTE1NjIgTCAxNC40NDkyMTkgMTMuMzUxNTYyIEMgMTUuMDUwNzgxIDEzLjM1MTU2MiAxNS41NTA3ODEgMTMuODAwNzgxIDE1LjU1MDc4MSAxNC40NDkyMTkgQyAxNS41NTA3ODEgMTUuMTAxNTYyIDE1LjA1MDc4MSAxNS41IDE0LjM5ODQzOCAxNS41IEwgMS42MDE1NjIgMTUuNSBDIDAuOTQ5MjE5IDE1LjUgMC41IDE1LjA1MDc4MSAwLjUgMTQuMzk4NDM4IEMgMC41IDEzLjg1MTU2MiAwLjk0OTIxOSAxMy4zNTE1NjIgMS42MDE1NjIgMTMuMzUxNTYyIFogTSAxLjYwMTU2MiAxMy4zNTE1NjIgIi8+CjwvZz4KPC9zdmc+Cg==\")\n no-repeat center;\n}\n\n.ril__downMoveButton {\n background: url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTZweCIgaGVpZ2h0PSJweCIgdmlld0JveD0iMCAwIDE2IDE2IiB2ZXJzaW9uPSIxLjEiPgo8ZyBpZD0ic3VyZmFjZTEiPgo8cGF0aCBzdHlsZT0iIHN0cm9rZTpub25lO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTsiIGQ9Ik0gOCAxNS41IEMgMy44NTE1NjIgMTUuNSAwLjUgMTIuMTQ4NDM4IDAuNSA4IEMgMC41IDMuODUxNTYyIDMuODUxNTYyIDAuNSA4IDAuNSBDIDEyLjE0ODQzOCAwLjUgMTUuNSAzLjg1MTU2MiAxNS41IDggQyAxNS41IDEyLjE0ODQzOCAxMi4xNDg0MzggMTUuNSA4IDE1LjUgWiBNIDggMi4xNDg0MzggQyA0LjgwMDc4MSAyLjE0ODQzOCAyLjE0ODQzOCA0LjgwMDc4MSAyLjE0ODQzOCA4IEMgMi4xNDg0MzggMTEuMTk5MjE5IDQuODAwNzgxIDEzLjg1MTU2MiA4IDEzLjg1MTU2MiBDIDExLjE5OTIxOSAxMy44NTE1NjIgMTMuODUxNTYyIDExLjE5OTIxOSAxMy44NTE1NjIgOCBDIDEzLjg1MTU2MiA0LjgwMDc4MSAxMS4xOTkyMTkgMi4xNDg0MzggOCAyLjE0ODQzOCBaIE0gOCAyLjE0ODQzOCAiLz4KPHBhdGggc3R5bGU9IiBzdHJva2U6bm9uZTtmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7IiBkPSJNIDguNTUwNzgxIDEwIEMgOC4xOTkyMTkgMTAuMzAwNzgxIDcuNjk5MjE5IDEwLjMwMDc4MSA3LjM1MTU2MiAxMCBMIDQuNDQ5MjE5IDcuMTAxNTYyIEMgNC4xOTkyMTkgNi43NSA0LjE5OTIxOSA2LjI1IDQuNSA1Ljk0OTIxOSBDIDQuODAwNzgxIDUuNjQ4NDM4IDUuMzAwNzgxIDUuNjAxNTYyIDUuNjQ4NDM4IDUuODk4NDM4IEwgNy45NDkyMTkgOC4xOTkyMTkgTCAxMC4yNSA1Ljg5ODQzOCBDIDEwLjQ0OTIxOSA1LjY0ODQzOCAxMC44MDA3ODEgNS41NTA3ODEgMTEuMTAxNTYyIDUuNjAxNTYyIEMgMTEuMzk4NDM4IDUuNjQ4NDM4IDExLjY0ODQzOCA1Ljg5ODQzOCAxMS43NSA2LjI1IEMgMTEuODAwNzgxIDYuNTUwNzgxIDExLjY5OTIxOSA2Ljg5ODQzOCAxMS40NDkyMTkgNy4xMDE1NjIgWiBNIDguNTUwNzgxIDEwICIvPgo8L2c+Cjwvc3ZnPgo=\")\n no-repeat center;\n}\n\n.ril__upMoveButton {\n background: url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTZweCIgaGVpZ2h0PSJweCIgdmlld0JveD0iMCAwIDE2IDE2IiB2ZXJzaW9uPSIxLjEiPgo8ZyBpZD0ic3VyZmFjZTEiPgo8cGF0aCBzdHlsZT0iIHN0cm9rZTpub25lO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTsiIGQ9Ik0gOCAwLjUgQyAzLjg1MTU2MiAwLjUgMC41IDMuODUxNTYyIDAuNSA4IEMgMC41IDEyLjE0ODQzOCAzLjg1MTU2MiAxNS41IDggMTUuNSBDIDEyLjE0ODQzOCAxNS41IDE1LjUgMTIuMTQ4NDM4IDE1LjUgOCBDIDE1LjUgMy44NTE1NjIgMTIuMTQ4NDM4IDAuNSA4IDAuNSBaIE0gOCAxMy44NTE1NjIgQyA0LjgwMDc4MSAxMy44NTE1NjIgMi4xNDg0MzggMTEuMTk5MjE5IDIuMTQ4NDM4IDggQyAyLjE0ODQzOCA0LjgwMDc4MSA0LjgwMDc4MSAyLjE0ODQzOCA4IDIuMTQ4NDM4IEMgMTEuMTk5MjE5IDIuMTQ4NDM4IDEzLjg1MTU2MiA0LjgwMDc4MSAxMy44NTE1NjIgOCBDIDEzLjg1MTU2MiAxMS4xOTkyMTkgMTEuMTk5MjE5IDEzLjg1MTU2MiA4IDEzLjg1MTU2MiBaIE0gOCAxMy44NTE1NjIgIi8+CjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxOyIgZD0iTSA4LjU1MDc4MSA2IEMgOC4xOTkyMTkgNS42OTkyMTkgNy42OTkyMTkgNS42OTkyMTkgNy4zNTE1NjIgNiBMIDQuNDQ5MjE5IDguODk4NDM4IEMgNC4xOTkyMTkgOS4yNSA0LjE5OTIxOSA5Ljc1IDQuNSAxMC4wNTA3ODEgQyA0LjgwMDc4MSAxMC4zNTE1NjIgNS4zMDA3ODEgMTAuMzk4NDM4IDUuNjQ4NDM4IDEwLjEwMTU2MiBMIDcuOTQ5MjE5IDcuODAwNzgxIEwgMTAuMjUgMTAuMTAxNTYyIEMgMTAuNDQ5MjE5IDEwLjM1MTU2MiAxMC44MDA3ODEgMTAuNDQ5MjE5IDExLjEwMTU2MiAxMC4zOTg0MzggQyAxMS4zOTg0MzggMTAuMzUxNTYyIDExLjY0ODQzOCAxMC4xMDE1NjIgMTEuNzUgOS43NSBDIDExLjgwMDc4MSA5LjQ0OTIxOSAxMS42OTkyMTkgOS4xMDE1NjIgMTEuNDQ5MjE5IDguODk4NDM4IFogTSA4LjU1MDc4MSA2ICIvPgo8L2c+Cjwvc3ZnPgo=\")\n no-repeat center;\n}\n\n.ril__closeButton {\n background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjcyMzk1NTkwMTc0IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEzNjUyIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48cGF0aCBkPSJNNjExLjIgNTEybDMwMC44LTMwMC44YzI4LjgtMjguOCAyOC44LTczLjYgMC05OS4ycy03My42LTI4LjgtOTkuMiAwTDUxMiA0MTIuOCAyMTEuMiAxMTJjLTI4LjgtMjguOC03My42LTI4LjgtOTkuMiAwcy0yOC44IDczLjYgMCA5OS4ybDMwMC44IDMwMC44LTMwMC44IDMwMC44Yy0yOC44IDI4LjgtMjguOCA3My42IDAgOTkuMiAyOC44IDI1LjYgNzMuNiAyOC44IDk5LjIgMGwzMDAuOC0zMDAuOCAzMDAuOCAzMDAuOGMyOC44IDI4LjggNzMuNiAyOC44IDk5LjIgMCAyOC44LTI4LjggMjguOC03My42IDAtOTkuMkw2MTEuMiA1MTJ6IiBmaWxsPSIjZmZmZmZmIiBwLWlkPSIxMzY1MyI+PC9wYXRoPjwvc3ZnPg==)\n no-repeat center;\n}\n\n/* ril-caption icons: size: 20px * 20px, color: #FFF */\n.ril__zoomInButton {\n background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCI+PGcgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+PHBhdGggZD0iTTEgMTlsNi02Ii8+PHBhdGggZD0iTTkgOGg2Ii8+PHBhdGggZD0iTTEyIDV2NiIvPjwvZz48Y2lyY2xlIGN4PSIxMiIgY3k9IjgiIHI9IjciIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIyIi8+PC9zdmc+')\n no-repeat center;\n}\n\n.ril__zoomOutButton {\n background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCI+PGcgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+PHBhdGggZD0iTTEgMTlsNi02Ii8+PHBhdGggZD0iTTkgOGg2Ii8+PC9nPjxjaXJjbGUgY3g9IjEyIiBjeT0iOCIgcj0iNyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjIiLz48L3N2Zz4=')\n no-repeat center;\n}\n\n.ril__rotateButton {\n background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjcyMzkyNzI4MTMyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEyODc1IiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48cGF0aCBkPSJNMTI0LjggMTYwbDU0LjQgNTEuMkMzNDUuNiAyOC44IDYzMC40IDE2IDgxMi44IDE4Mi40czE5NS4yIDQ1MS4yIDI4LjggNjMzLjYtNDUxLjIgMTk1LjItNjMzLjYgMjguOGMtMzguNC0zNS4yLTczLjYtNzYuOC05Ni0xMjQuOC02LjQtOS42LTkuNi0xNi05LjYtMjguOCAwLTMyIDI1LjYtNTQuNCA1NC40LTU0LjQgMTkuMiAwIDM4LjQgOS42IDU0LjQgMzIgODMuMiAxNjYuNCAyODggMjMwLjQgNDU0LjQgMTQ0czIzMC40LTI5MS4yIDE0NC00NTcuNi0yODgtMjMwLjQtNDU0LjQtMTQ0Yy0zNS4yIDE5LjItNjcuMiA0MS42LTk2IDczLjZsNTEuMiA0NC44YzEyLjggMTIuOCAxNiAzOC40IDMuMiA1MS4yLTYuNCA2LjQtMTYgOS42LTI1LjYgOS42bC0xODIuNCA5LjZjLTE5LjIgMC0zNS4yLTEyLjgtMzguNC0zMkw2NCAxODguOGMtMy4yLTE5LjIgMTIuOC0zNS4yIDMyLTM4LjQgMTIuOC0zLjIgMjIuNCAzLjIgMjguOCA5LjZ6IiBmaWxsPSIjZmZmZmZmIiBwLWlkPSIxMjg3NiI+PC9wYXRoPjwvc3ZnPg==)\n no-repeat center;\n}\n\n.ril__outerAnimating {\n animation-name: closeWindow;\n}\n\n/* .ril_rotateImageButton {\n transform: rotateY(180deg);\n} */\n\n@keyframes pointFade {\n 0%,\n 19.999%,\n 100% {\n opacity: 0;\n }\n 20% {\n opacity: 1;\n }\n}\n\n.ril__loadingCircle {\n width: 60px;\n height: 60px;\n position: relative;\n}\n\n.ril__loadingCirclePoint {\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n}\n.ril__loadingCirclePoint::before {\n content: '';\n display: block;\n margin: 0 auto;\n width: 11%;\n height: 30%;\n background-color: #fff;\n border-radius: 30%;\n animation: pointFade 800ms infinite ease-in-out both;\n}\n.ril__loadingCirclePoint:nth-of-type(1) {\n transform: rotate(0deg);\n}\n.ril__loadingCirclePoint:nth-of-type(7) {\n transform: rotate(180deg);\n}\n.ril__loadingCirclePoint:nth-of-type(1)::before,\n.ril__loadingCirclePoint:nth-of-type(7)::before {\n animation-delay: -800ms;\n}\n.ril__loadingCirclePoint:nth-of-type(2) {\n transform: rotate(30deg);\n}\n.ril__loadingCirclePoint:nth-of-type(8) {\n transform: rotate(210deg);\n}\n.ril__loadingCirclePoint:nth-of-type(2)::before,\n.ril__loadingCirclePoint:nth-of-type(8)::before {\n animation-delay: -666ms;\n}\n.ril__loadingCirclePoint:nth-of-type(3) {\n transform: rotate(60deg);\n}\n.ril__loadingCirclePoint:nth-of-type(9) {\n transform: rotate(240deg);\n}\n.ril__loadingCirclePoint:nth-of-type(3)::before,\n.ril__loadingCirclePoint:nth-of-type(9)::before {\n animation-delay: -533ms;\n}\n.ril__loadingCirclePoint:nth-of-type(4) {\n transform: rotate(90deg);\n}\n.ril__loadingCirclePoint:nth-of-type(10) {\n transform: rotate(270deg);\n}\n.ril__loadingCirclePoint:nth-of-type(4)::before,\n.ril__loadingCirclePoint:nth-of-type(10)::before {\n animation-delay: -400ms;\n}\n.ril__loadingCirclePoint:nth-of-type(5) {\n transform: rotate(120deg);\n}\n.ril__loadingCirclePoint:nth-of-type(11) {\n transform: rotate(300deg);\n}\n.ril__loadingCirclePoint:nth-of-type(5)::before,\n.ril__loadingCirclePoint:nth-of-type(11)::before {\n animation-delay: -266ms;\n}\n.ril__loadingCirclePoint:nth-of-type(6) {\n transform: rotate(150deg);\n}\n.ril__loadingCirclePoint:nth-of-type(12) {\n transform: rotate(330deg);\n}\n.ril__loadingCirclePoint:nth-of-type(6)::before,\n.ril__loadingCirclePoint:nth-of-type(12)::before {\n animation-delay: -133ms;\n}\n.ril__loadingCirclePoint:nth-of-type(7) {\n transform: rotate(180deg);\n}\n.ril__loadingCirclePoint:nth-of-type(13) {\n transform: rotate(360deg);\n}\n.ril__loadingCirclePoint:nth-of-type(7)::before,\n.ril__loadingCirclePoint:nth-of-type(13)::before {\n animation-delay: 0ms;\n}\n\n.ril__loadingContainer {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n.ril__imagePrev .ril__loadingContainer,\n.ril__imageNext .ril__loadingContainer {\n display: none;\n}\n\n.ril__errorContainer {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #fff;\n}\n.ril__imagePrev .ril__errorContainer,\n.ril__imageNext .ril__errorContainer {\n display: none;\n}\n\n.ril__loadingContainer__icon {\n color: #fff;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translateX(-50%) translateY(-50%);\n}\n\n/* mobile */\n.mobile-image-previewer .ril-toolbar .ril__toolbarRightSide {\n padding-right: 14px;\n}\n\n.image-footer-choice.mobile-image-footer-choice {\n height: 100px;\n background-color: #000;\n z-index: 1052;\n padding: 0;\n}\n\n.mobile-image-footer-choice {\n height: 30px;\n width: 100%;\n border-radius: 2px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n bottom: 0;\n position: absolute;\n color: #fff;\n background: rgba(0, 0, 0, 0.6);\n display: flex;\n padding:0 3px;\n justify-content: space-between;\n align-items: center;\n}\n\n.mobile-image-footer-choice .image-footer-icon {\n display: flex;\n justify-content: center;\n align-items: center\n}\n\n.mobile-image-footer-choice .image-footer-icon span {\n cursor: pointer;\n display: flex;\n width: 24px;\n height: 24px;\n justify-content: center;\n align-items: center;\n color: #dbdbdb;\n}\n\n.image-footer-choice.mobile-image-footer-choice .image-footer-icon {\n width: 100%;\n justify-content: space-between;\n flex-direction: row-reverse;\n margin: 0 20px;\n}\n\n.mobile-image-footer-choice .image-footer-icon .image-footer-choice-item {\n height: 40px;\n width: 40px;\n border-radius: 5px;\n background-color: #333;\n}\n\n.ril__outer .ril-toolbar .ril-close {\n width: 30px;\n height: 53px;\n}\n\n.ril__outer .ril__toolbarItem {\n height: 50px;\n}\n\n.ril__outer .ril__toolbarItem button {\n opacity: 0.7;\n}\n\n.ril__outer .ril__toolbarItem button:hover {\n opacity: 1;\n}\n",".sdoc-image-hover-menu-container {\n position: absolute;\n height: 42px;\n z-index: 101;\n width: auto;\n}\n \n.sdoc-image-hover-menu-container .hover-menu-container {\n height: 36px;\n padding: 7px 8px;\n background-color: #fff;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n border-radius: 3px;\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);\n border: 1px solid #e8e8e8;\n}\n\n.sdoc-image-hover-menu-container .hover-menu-container > span:not(:last-of-type) {\n padding: 0 8px;\n border-right: 1px solid #e5e5e5;\n}\n\n.sdoc-image-hover-menu-container .hover-menu-container .op-item {\n position: relative;\n font-size: 12px;\n color: #212529;\n padding: 0 5px;\n border-radius: 2px;\n min-width: 24px;\n height: 24px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.sdoc-image-hover-menu-container .hover-menu-container .op-item:hover {\n color: #212529;\n text-decoration: none;\n background: #f1f1f1;\n}\n\n.sdoc-image-hover-menu-container .op-group-item:last-child .op-item {\n margin-left: 8px;\n}\n\n.sdoc-image-hover-menu-container .hover-menu-container .active {\n background: #f1f1f1;\n}\n\n.sdoc-image-hover-menu-container .hover-menu-container .icon-font {\n font-size: 12px;\n color: #999999;\n}\n\n.sdoc-image-hover-menu-container .sdoc-image-popover {\n position: absolute;\n top: 37px;\n background-color: #fff;\n border: 1px solid #e5e6e8;\n border-radius: 2px;\n box-shadow: 0 0 10px #ccc;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n z-index: 101;\n white-space: nowrap;\n}\n\n.sdoc-image-hover-menu-container .align-popover {\n left: 80px;\n min-width: 6rem;\n}\n\n.sdoc-image-hover-menu-container .border-popover {\n left: 115px;\n flex-direction: row;\n height: 80px;\n align-items: center;\n padding: 0 8px;\n}\n\n.sdoc-image-hover-menu-container .border-popover .sdoc-dropdown-menu-item .sdoc-dropdown-item-content .sdoc-check-mark {\n transform: translateX(-24px);\n}\n\n.sdoc-image-hover-menu-container .border-popover .sdoc-dropdown-menu-item:hover {\n background-color: transparent;\n}\n",".sdoc-table-template-inner-popover {\n display: flex;\n flex-wrap: wrap;\n padding: 10px;\n width: 310px;\n height: 100%;\n background-color: #fff;\n}\n\n.sdoc-table-template-view-table {\n padding: 10px;\n margin: 10px 5px;\n border: 1px solid #e2e3e6;\n cursor: pointer;\n}\n\n.sdoc-table-template-view-table:hover {\n box-shadow: 0 0 3px 2px #e2e3e6;\n}\n\n.sdoc-table-template-view-table .sdoc-table-template-row .sdoc-table-template-cell {\n width: 28px;\n height: 15px;\n border-left: 1px solid #e2e3e6;\n border-right: 1px solid #e2e3e6;\n}\n\n.sdoc-table-template-view-table .sdoc-table-template-row {\n display: flex;\n}\n\n.sdoc-table-template-view-table .sdoc-table-template-row:first-child .sdoc-table-template-cell {\n border: none;\n border-top: 1px solid #e2e3e6;\n}\n\n.sdoc-table-template-view-table .sdoc-table-template-row:last-child .sdoc-table-template-cell {\n border-bottom: 1px solid #e2e3e6;\n}\n","/* type1 */\n.sdoc-table-body-3f495d {\n background-color: #f1f3f6;\n}\n\n.sdoc-table-header-3f495d {\n background-color: #3f495d;\n color: white;\n}\n\n/* type2 */\n.sdoc-table-body-2367f2 {\n background-color: #e1edff;\n}\n\n.sdoc-table-header-2367f2 {\n background-color: #2367f2;\n color: white;\n}\n\n/* type3 */\n.sdoc-table-body-f77d21 {\n background-color: #fff1e8;\n}\n\n.sdoc-table-header-f77d21 {\n background-color: #f77d21;\n}\n\n/* type4 */\n.sdoc-table-body-0099f4 {\n background-color: #e1f5ff;\n}\n\n.sdoc-table-header-0099f4 {\n background-color: #0099f4;\n}\n",".sdoc-selected-table-size-popover .popover {\n background-color: #fff;\n min-width: 100px;\n min-height: 100px;\n max-width: 222px;\n border-radius: 2px;\n}\n\n.sdoc-selected-table-size-popover .sdoc-selected-table-size-tip {\n text-align: center;\n height: 35px;\n font-size: 14px;\n padding: 5px 10px 10px;\n}\n\n.sdoc-selected-table-size-popover .sdoc-table-size-select {\n padding: 0 10px;\n}\n\n.sdoc-selected-table-size-popover .sdoc-table-size-row {\n flex-direction: row;\n border-bottom: 1px solid #ccc;\n width: fit-content;\n}\n\n.sdoc-selected-table-size-popover .sdoc-table-size-row:first-child {\n border-top: 1px solid #ccc;\n}\n\n.sdoc-selected-table-size-popover .sdoc-table-size-cell {\n border-right: 1px solid #ccc;\n width: 20px;\n height: 15px;\n}\n\n.sdoc-selected-table-size-popover .sdoc-table-size-row .sdoc-table-size-cell:first-child {\n border-left: 1px solid #ccc;\n}\n\n.sdoc-selected-table-size-popover .sdoc-table-size-cell.active {\n background-color: #ffa94d;\n}\n\n.sdoc-selected-table-size-popover .sdoc-table-size-select {\n margin-top: 5px;\n}\n\n.sdoc-selected-table-size-container .sdoc-selected-table-tools-container {\n padding: 10px 0;\n margin-bottom: 10px;\n border-bottom: 1px solid #dedede;\n}\n\n.sdoc-selected-table-size-popover .sdoc-selected-table-size-custom {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0 10px;\n min-height: 32px;\n}\n\n.sdoc-selected-table-size-popover .sdoc-selected-table-size-custom:hover {\n cursor: pointer;\n background: #f5f5f5;\n}\n",".sdoc-table-menu-group .sdoc-menu-with-dropdown .sdoc-menu-with-dropdown-icon {\n width: 24px;\n}\n\n.sdoc-table-menu-group .sdoc-menu-with-dropdown .sdoc-menu-with-dropdown-triangle {\n width: 12px;\n}\n\n.sdoc-table-menu-group .sdoc-color-menu .last-used-color-container {\n height: 100%;\n}\n\n.sdoc-table-menu-popover .sdoc-dropdown-menu-item {\n font-size: 14px;\n}\n",".sdoc-context-menu .sdoc-table-context-menu {\n display: block;\n font-size: 0.875rem;\n}\n\n.sdoc-table-context-menu .insert-number {\n margin-left: 50px;\n}\n\n.sdoc-table-context-menu .insert-number-input {\n width: 36px;\n height: 20px;\n margin-right: .25rem;\n padding-left: 4px;\n padding-right: 4px;\n text-align: center;\n transition: none;\n}\n\n.sdoc-table-context-menu .dropdown-item:hover .insert-number-input {\n background-color: transparent;\n border: 1px solid #fff;\n color: #fff;\n}\n\n.sdoc-table-context-menu .dropdown-item:disabled .insert-number-input {\n color: #adb5bd;\n}\n","/* column-header */\n.sdoc-table-wrapper .sdoc-table-columns-header {\n height: 12px;\n top: -12px;\n width: 100%;\n overflow: hidden;\n}\n\n.sdoc-table-wrapper .sdoc-table-columns-header .sdoc-table-column-header {\n flex-shrink: 0;\n border-right: 1px solid rgba(0, 0, 0, .08);\n background-color: rgb(243, 245, 247);\n}\n\n/* row-header */\n.sdoc-table-wrapper .sdoc-table-rows-header {\n width: 12px;\n height: 100%;\n position: absolute;\n left: -12px;\n top: 1px;\n}\n\n.sdoc-table-wrapper .sdoc-table-row-header {\n width: 100%;\n background-color: rgb(243, 245, 247);\n border-bottom: 1px solid rgba(0, 0, 0, .08);\n}\n\n.sdoc-table-wrapper .sdoc-table-rows-columns-header {\n height: 13px;\n width: 13px;\n position: absolute;\n left: -12px;\n top: -12px;\n background-color: rgb(243, 245, 247);\n border-right: 1px solid rgba(0, 0, 0, .08);\n border-bottom: 1px solid rgba(0, 0, 0, .08);\n border-top-left-radius: 3px;\n}\n\n/* common */\n.sdoc-table-wrapper .sdoc-table-row-header.range-selected,\n.sdoc-table-wrapper .sdoc-table-column-header.range-selected,\n.sdoc-table-wrapper .sdoc-table-rows-columns-header.range-selected {\n background-color: #81868F !important;\n}\n\n.sdoc-table-wrapper .sdoc-table-row-header.range-selected-tip,\n.sdoc-table-wrapper .sdoc-table-column-header.range-selected-tip,\n.sdoc-table-wrapper .sdoc-table-rows-columns-header.range-selected-tip {\n background-color: rgb(233, 235, 237);\n}\n\n/* add-icon */\n.sdoc-table-wrapper .sdoc-table-add-element-icon-content {\n height: 12px;\n width: 12px;\n border-radius: 50%;\n background-color: #ccc;\n color: #fff;\n z-index: 1;\n line-height: 10px;\n text-align: center;\n cursor: default;\n}\n\n.sdoc-table-wrapper .sdoc-table-add-element-icon-content:hover {\n cursor: pointer;\n}\n",".sdoc-table-wrapper {\n width: 100%;\n margin: 16px 0;\n}\n\n.sdoc-table-wrapper + .sdoc-table-wrapper {\n margin-top: 32px;\n}\n\n.sdoc-table-wrapper .sdoc-table-scroll-wrapper {\n max-width: 100%;\n width: fit-content;\n overflow-x: auto;\n cursor: default;\n}\n\n.sdoc-table-wrapper.scroll .sdoc-table-scroll-wrapper.scroll-at-right::before,\n.sdoc-table-wrapper.scroll .sdoc-table-scroll-wrapper.scroll-at-center::before {\n content: '';\n position: absolute;\n pointer-events: none;\n top: 0;\n left: 0;\n width: 8px;\n height: 100%;\n background: linear-gradient(to left, transparent, rgba(0, 0, 0, .1));\n}\n\n.sdoc-table-wrapper.scroll .sdoc-table-scroll-wrapper.scroll-at-center::after,\n.sdoc-table-wrapper.scroll .sdoc-table-scroll-wrapper.scroll-at-left::after {\n content: '';\n position: absolute;\n pointer-events: none;\n top: 0;\n right: 0;\n width: 8px;\n height: 100%;\n background: linear-gradient(to right, transparent, rgba(0, 0, 0, .1));\n}\n\n.sdoc-table-wrapper .sdoc-table-container {\n width: fit-content;\n display: grid;\n overflow: hidden;\n cursor: text;\n}\n\n.sdoc-table-wrapper .table-row {\n height: auto;\n}\n\n.sdoc-table-wrapper .table-cell {\n padding: 10px 10px;\n border-right: 1px solid #ccc;\n border-bottom: 1px solid #ccc;\n line-height: 1.5;\n vertical-align: top;\n}\n\n.sdoc-table-wrapper .cell-selected {\n caret-color: transparent;\n position: relative;\n}\n\n.sdoc-table-wrapper .table-row-height-just {\n width: 100%;\n height: 5px;\n bottom: -2.5px;\n left: 0;\n z-index: 1;\n}\n\n.sdoc-table-wrapper .table-row-height-just:hover {\n cursor: row-resize;\n z-index: 2;\n}\n\n.sdoc-table-wrapper .table-row-height-just.resizing .table-row-height-just-color-tip {\n margin-top: 1.5;\n height: 2px;\n width: 100%;\n background-color: #2d7ff9;\n border-radius: 1px;\n}\n\n.sdoc-table-wrapper .table-cell-width-just {\n height: 100%;\n width: 5px;\n top: 0;\n z-index: 1;\n}\n\n.sdoc-table-wrapper .table-cell-width-just:hover {\n cursor: col-resize;\n z-index: 2;\n}\n\n.sdoc-table-wrapper .table-cell-width-just.resizing .table-cell-width-just-color-tip {\n margin-left: 1.5px;\n height: 100%;\n width: 2px;\n background-color: #2d7ff9;\n border-radius: 1px;\n}\n\n.sdoc-table-wrapper .background-color-tip-blue {\n background-color: #2d7ff9 !important;\n}\n\n.sdoc-table-wrapper .sdoc-table-selected-range .table-cell *::selection {\n background-color: unset;\n}\n",".sdoc-link-hover-menu-container {\n position: absolute;\n height: 42px;\n z-index: 101;\n width: auto;\n}\n \n.sdoc-link-hover-menu-container .hover-menu-container {\n height: 36px;\n padding: 7px 8px;\n background-color: #fff;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n border-radius: 3px;\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);\n border: 1px solid #e8e8e8;\n}\n\n.sdoc-link-hover-menu-container .hover-menu-container > span:not(:last-of-type) {\n padding-right: 8px;\n border-right: 1px solid #e5e5e5;\n}\n\n.sdoc-link-hover-menu-container .hover-menu-container .op-item {\n position: relative;\n font-size: 12px;\n color: #212529;\n padding: 0 5px;\n border-radius: 2px;\n min-width: 24px;\n height: 24px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.sdoc-link-hover-menu-container .hover-menu-container .op-item:hover {\n color: #212529;\n text-decoration: none;\n background: #f1f1f1;\n}\n\n.sdoc-link-hover-menu-container .op-group-item:last-child .op-item {\n margin-left: 8px;\n}\n\n.sdoc-link-hover-menu-container .hover-menu-container .link-style-icon-active {\n background: #f1f1f1;\n}\n\n.sdoc-link-hover-menu-container .hover-menu-container .op-tooltip:hover::after {\n position: absolute;\n color: #212529;\n content: attr(op-item-tooltip);\n top: -40px;\n left: -20px;\n width: 70px;\n height: 30px;\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: #fff;\n border-radius: 3px;\n border: 1px solid #e8e8e8;\n font-size: 12px;\n box-shadow: 0 0 5px #ccc;\n}\n\n.sdoc-link-hover-menu-container .hover-menu-container .icon-font {\n font-size: 12px;\n color: #999999;\n}\n\n.sdoc-link-hover-menu-container .sdoc-file-display-style-popover {\n position: absolute;\n top: 37px;\n right: -80px;\n padding: 8px 0;\n background-color: #fff;\n border: 1px solid #e5e6e8;\n border-radius: 2px;\n box-shadow: 0 0 10px #ccc;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n z-index: 101;\n white-space: nowrap;\n}\n",".sdoc-file-render:hover {\n background-color: #e5e5e5\n}\n\n.sdoc-file-card-link {\n position: relative;\n background-color: #f3f3f3;\n border: 1px solid transparent;\n border-radius: 4px;\n cursor: pointer;\n display: inline-block;\n height: 50px;\n width: 420px;\n margin-bottom: -3px;\n}\n\n.sdoc-file-render .sdoc-file-link-icon {\n padding-right: 5px;\n color: #ff9800;\n}\n\n.sdoc-file-card-link .sdoc-file-link-icon :first-child {\n font-size: 24px;\n}\n\n.sdoc-file-card-link .sdoc-file-link-icon {\n position: absolute;\n top: 6px;\n left: 12px;\n}\n\n.sdoc-file-card-link .sdoc-file-text-link {\n position: absolute;\n top: 16px;\n left: 42px;\n}\n\n.sdoc-file-card-link .sdoc-file-text-link a {\n text-decoration: none;\n color: #333;\n}\n",".sdoc-file-link-hover-menu-container {\n position: absolute;\n height: 42px;\n z-index: 101;\n width: auto;\n}\n \n.sdoc-file-link-hover-menu-container .hover-menu-container {\n height: 36px;\n padding: 7px 8px;\n background-color: #fff;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n border-radius: 3px;\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);\n border: 1px solid #e8e8e8;\n}\n\n.sdoc-file-link-hover-menu-container .hover-menu-container > span:not(:last-of-type) {\n padding-right: 8px;\n border-right: 1px solid #e5e5e5;\n}\n\n.sdoc-file-link-hover-menu-container .hover-menu-container .op-item {\n position: relative;\n font-size: 12px;\n color: #212529;\n padding: 0 5px;\n border-radius: 2px;\n min-width: 24px;\n height: 24px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.sdoc-file-link-hover-menu-container .hover-menu-container .op-item:hover {\n color: #212529;\n text-decoration: none;\n background: #f1f1f1;\n}\n\n.sdoc-file-link-hover-menu-container .op-group-item:last-child .op-item {\n margin-left: 8px;\n}\n\n.sdoc-file-link-hover-menu-container .hover-menu-container .link-style-icon-active {\n background: #f1f1f1;\n}\n\n.sdoc-file-link-hover-menu-container .hover-menu-container .op-tooltip:hover::after {\n position: absolute;\n color: #212529;\n content: attr(op-item-tooltip);\n top: -40px;\n left: -20px;\n width: 70px;\n height: 30px;\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: #fff;\n border-radius: 3px;\n border: 1px solid #e8e8e8;\n font-size: 12px;\n box-shadow: 0 0 5px #ccc;\n}\n\n.sdoc-file-link-hover-menu-container .hover-menu-container .icon-font {\n font-size: 12px;\n color: #999999;\n}\n\n.sdoc-file-link-hover-menu-container .sdoc-file-display-style-popover {\n position: absolute;\n top: 37px;\n right: -80px;\n padding: 8px 0;\n background-color: #fff;\n border: 1px solid #e5e6e8;\n border-radius: 2px;\n box-shadow: 0 0 10px #ccc;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n z-index: 101;\n white-space: nowrap;\n}\n",".sdoc-file-link-render:hover {\n background-color: #e5e5e5\n}\n\n.sdoc-file-card-link {\n position: relative;\n background-color: #f3f3f3;\n border: 1px solid transparent;\n border-radius: 4px;\n cursor: pointer;\n display: inline-block;\n height: 50px;\n width: 420px;\n margin-bottom: -3px;\n}\n\n.sdoc-file-link-render .sdoc-file-link-icon {\n padding-right: 5px;\n color: #ff9800;\n}\n\n.sdoc-file-card-link .sdoc-file-link-icon :first-child {\n font-size: 24px;\n}\n\n.sdoc-file-card-link .sdoc-file-link-icon {\n position: absolute;\n top: 6px;\n left: 12px;\n}\n\n.sdoc-file-card-link .sdoc-file-text-link {\n position: absolute;\n top: 16px;\n left: 42px;\n width: 330px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.sdoc-file-card-link .sdoc-file-text-link a {\n text-decoration: none;\n color: #333;\n}\n",".sdoc-callout-white-wrapper {\n padding: 5px 0;\n}\n\n.sdoc-callout-container {\n position: relative;\n padding: 10px;\n border-width: 1px;\n border-style: solid;\n border-radius: 5px;\n}\n\n.sdoc-callout-container .sdoc-callout-placeholder {\n position: absolute;\n top: 15px;\n left: 10px;\n color: #b8b6b6;\n pointer-events: none;\n}\n\n.sdoc-callout-color-selector-container {\n position: absolute;\n padding: 10px;\n background-color: #fff;\n border: 1px solid #eee;\n border-radius: 3px;\n z-index: 100;\n}\n\n.sdoc-callout-color-selector-container .sdoc-color-selector-list {\n display: flex;\n margin: 0;\n padding: 0;\n}\n\n.sdoc-callout-color-selector-container .sdoc-color-selector-list .sdoc-callout-color-item {\n position: relative;\n margin-right: 10px;\n width: 16px;\n height: 16px;\n list-style: none;\n border-width: 1px;\n border-style: solid;\n border-radius: 3px;\n cursor: pointer;\n}\n\n.sdoc-callout-color-selector-container .sdoc-color-selector-list .sdoc-callout-color-item:last-child {\n margin-right: 0px;\n}\n\n.sdoc-callout-color-selector-container .sdoc-color-selector-list .sdoc-callout-color-item .sdoc-callout-color-checked-icon {\n position: absolute;\n top: -2px;\n font-size: 12px;\n left: 1px;\n}\n",".sdoc-rebase-btn-group {\n color: #aaa;\n}\n\n.sdoc-rebase-btn-group .sdoc-rebase-btn {\n cursor: pointer;\n}\n\n.sdoc-rebase-current-changes-start {\n background-color: rgb(202, 232, 254);\n}\n\n.sdoc-rebase-current-changes {\n background-color: rgba(202, 232, 254, .8);\n}\n\n.sdoc-rebase-incoming-changes {\n background-color: rgb(222, 232, 254);\n}\n\n.sdoc-rebase-incoming-changes > *:first-child,\n.sdoc-rebase-current-changes > *:first-child {\n margin: 0;\n padding: 0.8em 0 0.8em 0.2em;\n}\n\n.sdoc-rebase-incoming-changes-end {\n background-color: rgb(212, 212, 254);\n}\n",".header-menu {\n display: flex;\n height: 100%;\n width: 140px;\n padding: 6px 8px;\n border-right: 1px solid #e5e6e8;\n position: relative;\n align-items: center;\n}\n\n.header-menu .header-toggle {\n flex: 1;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-left: 5px;\n height: 24px;\n cursor: pointer;\n}\n\n.header-menu .header-toggle .active {\n font-size: 14px;\n}\n\n.header-menu .header-toggle-disabled {\n color: #BDBDBD;\n cursor: unset;\n}\n\n.header-menu .header-toggle:not(.header-toggle-disabled):hover {\n background: #F2F2F2;\n border-radius: 2px;\n}\n\n.header-menu .header-toggle .sdocfont {\n color: #999;\n width: 12px;\n height: 24px;\n margin-left: 8px;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n font-size: 12px;\n cursor: pointer;\n}\n\n.header-menu .header-popover {\n position: absolute;\n top: 42px;\n left: 8px;\n padding: 8px 0;\n width: 180px;\n background-color: #fff;\n border: 1px solid #e5e6e8;\n border-radius: 2px;\n box-shadow: 0 0 10px #ccc;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n z-index: 101;\n}\n\n.header-menu .header-popover .sdoc-dropdown-menu-item {\n font-size: 14px;\n height: auto;\n padding: 9px 16px 9px 28px;\n line-height: 1;\n}\n\n.header-menu .header-popover .sdoc-dropdown-menu-item .sdoc-check-mark {\n position: absolute;\n left: 8px;\n transform: scale(.8);\n color: #798d99;\n}\n",".menu-group .menu-group-item.sdoc-menu-with-dropdown.sdoc-font-family-menu {\n width: 76px;\n max-width: 76px;\n}\n\n.menu-group .menu-group-item.sdoc-menu-with-dropdown.sdoc-font-family-menu.disabled {\n width: 70px !important;\n}\n\n.sdoc-font-family-menu .sdoc-menu-with-dropdown-icon,\n.sdoc-font-family-menu .sdoc-menu-with-dropdown-icon div {\n width: 64px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 14px;\n}\n\n.sdoc-font-family-menu .sdoc-menu-with-dropdown-icon div {\n padding-left: 5px;\n color: #212529;\n}\n\n.menu-group .menu-group-item.sdoc-menu-with-dropdown.sdoc-font-family-menu.disabled .sdoc-menu-with-dropdown-icon {\n width: 70px !important;\n}\n\n.menu-group .menu-group-item.sdoc-menu-with-dropdown.sdoc-font-family-menu.disabled .sdoc-menu-with-dropdown-icon div {\n padding-right: 5px;\n width: 70px;\n color: #BDBDBD;\n}\n\n/* sdoc-font-family-menu-popover */\n.sdoc-font-family-menu-popover .sdoc-dropdown-menu-title-name {\n padding: 8px 10px;\n color: gray;\n cursor: default;\n font-size: 14px;\n}\n",".menu-group .sdoc-menu-with-dropdown.sdoc-font-size-menu {\n width: 46px;\n}\n\n.menu-group .sdoc-menu-with-dropdown.sdoc-font-size-menu.disabled {\n width: 34px !important;\n}\n\n.menu-group .sdoc-font-size-menu .sdoc-menu-with-dropdown-icon,\n.menu-group .sdoc-font-size-menu .sdoc-menu-with-dropdown-icon div {\n width: 34px;\n font-size: 14px;\n}\n\n.menu-group .sdoc-font-size-menu .sdoc-menu-with-dropdown-icon div {\n padding-left: 5px;\n color: #212529;\n}\n\n.menu-group .sdoc-menu-with-dropdown.sdoc-font-size-menu.disabled .sdoc-menu-with-dropdown-icon div {\n padding-right: 5px;\n color: #BDBDBD;\n}\n\n.sdoc-font-size-menu-popover .sdoc-dropdown-menu-item .sdoc-check-mark {\n position: absolute;\n left: 8px;\n transform: scale(.8);\n color: #798d99;\n}\n\n.sdoc-font-size-menu-popover .sdoc-font-size-menu-container {\n height: fit-content;\n padding: 8px 0;\n overflow-y: scroll;\n overflow-x: hidden;\n}\n\n.sdoc-font-size-menu-popover .sdoc-dropdown-menu-item {\n font-size: 14px;\n}\n",".menu-group .menu-group-item.sdoc-insert-toolbar-btn {\n width: 76px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.menu-group .menu-group-item.sdoc-insert-toolbar-btn.disabled {\n width: 64px !important; /* 64: 76 - 12 */\n color: #BDBDBD;\n}\n\n.menu-group .sdoc-insert-toolbar-btn .sdoc-menu-with-dropdown-icon {\n flex: 1;\n justify-content: flex-start;\n padding-left: 6px;\n padding-right: 2px;\n font-size: 14px;\n}\n\n.sdoc-insert-menu-popover .popover {\n min-width: 200px;\n}\n",".sdoc-context-toolbar {\n position: absolute;\n display: none;\n width: auto;\n height: 42px;\n z-index: 101;\n background-color: #fff;\n border: 1px solid #e8e8e8;\n border-radius: 3px;\n box-shadow: rgba(15, 15, 15, 0.05) 0px 0px 0px 0px, rgba(15, 15, 15, 0.1) 0px 3px 6px, rgba(15, 15, 15, 0.2) 0px 9px 24px;\n}\n",".sdoc-side-menu-popover {\n position: absolute;\n}\n\n.sdoc-side-menu {\n position: absolute;\n width: 200px;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, .12);\n border-radius: 4px;\n transform: translateX(-200px);\n padding: 8px 0px;\n box-shadow: 0 2px 12px 2px rgba(68, 73, 77, .16);\n z-index: 999;\n}\n\n.sdoc-side-menu-insert-below-popover .popover {\n background-color: #fff;\n min-width: 150px;\n min-height: 120px;\n border-radius: 2px;\n left: -6px !important;\n cursor: pointer;\n}\n",".sdoc-side-toolbar-container {\n position: absolute;\n left: 0px;\n top: 0px;\n}\n\n.sdoc-side-toolbar-container .sdoc-side-op-icon {\n border-radius: 3px;\n padding: 0px 3px;\n height: 24px;\n color: #BDBDBD;\n margin-right: 1px;\n transform: rotate(180deg);\n cursor: pointer;\n}\n\n.sdoc-side-toolbar-container .sdoc-side-op-icon :first-child {\n font-size: 14px;\n}\n\n.sdoc-side-toolbar-container .side-op-icon-active {\n background-color: #F2F2F2;\n border-radius: 2px;\n}\n",".sdoc-custom-table-size-dialog .sdoc-custom-table-size-container {\n width: 100%;\n}\n\n.sdoc-custom-table-size-dialog .sdoc-custom-table-size-item {\n width: calc(50% - 16px);\n}\n",".sdoc-files-tree {\n flex: 1;\n padding: 16px;\n overflow: auto;\n width: 100%;\n display: flex;\n flex-direction: column;\n}\n\n.sdoc-files-tree .sdoc-file-info {\n border-radius: 2px;\n height: 1.5rem;\n line-height: 1.625;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n position: relative;\n padding-left: 2.8rem;\n}\n\n.sdoc-files-tree .sdoc-file-info:hover {\n cursor: pointer;\n background: #fdefb9;\n box-shadow: inset 0 0 1px #999;\n}\n\n.sdoc-files-tree .sdoc-file-info .sdoc-file-icon-container {\n width: 2.8rem;\n height: 100%;\n padding-left: 1.5rem;\n position: absolute;\n left: 0;\n}\n\n.sdoc-files-tree .sdoc-file-info .sdoc-file-icon {\n color: #9aa0ac;\n}\n\n.sdoc-files-tree .sdoc-file-info.active {\n background: #ff8000;\n box-shadow: inset 0 0 1px #999;\n color: #fff;\n}\n\n.sdoc-files-tree .sdoc-file-info.active .sdoc-file-icon {\n color: #fff;\n}\n\n.sdoc-files-tree .sdoc-file-icon-toggle {\n height: 1.5rem;\n width: 1.5rem;\n line-height: 1.5rem !important;\n font-size: 12px !important;\n transform: scale(.8);\n text-align: center;\n position: absolute;\n left: 0;\n}\n\n.sdoc-files-tree .sdoc-file-info.expanded .sdoc-file-icon-toggle {\n transform: rotate(90deg) scale(.8);\n}\n\n.sdoc-files-tree .sdoc-file-info .sdoc-file-name {\n font-size: 14px;\n}\n\n.sdoc-files-tree .sdoc-folder-children {\n padding-left: 20px;\n}\n\n.sdoc-files-tree .sdoc-folder-children-empty {\n color: #999;\n padding: 4px 20px;\n}\n",".sdoc-file-select-dialog {\n max-width: 620px;\n}\n\n.sdoc-file-select-dialog .sdoc-file-select-modal {\n width: 620px;\n}\n\n.sdoc-file-select-dialog .sdoc-file-select-container {\n display: flex;\n}\n\n.sdoc-file-select-dialog .sdoc-file-select-left {\n border-right: 1px solid #e9ecef;\n width: 150px;\n padding: 12px 8px;\n}\n\n.sdoc-file-select-dialog .sdoc-file-select-left .sdoc-file-select-nav-item {\n padding: 5px 0 5px 8px;\n border-radius: 3px;\n display: inline-block;\n cursor: pointer;\n width: 100%;\n}\n\n.sdoc-file-select-dialog .sdoc-file-select-left .sdoc-file-select-nav-item:hover {\n background-color: #f5f5f5;\n}\n\n.sdoc-file-select-dialog .sdoc-file-select-container .sdoc-file-select-left .selected-sdoc-file-select-nav-item {\n background-color: #ff8000;\n color: #fff;\n}\n\n.sdoc-file-select-dialog .sdoc-file-select-right {\n height: 440px;\n width: 468px;\n display: flex;\n padding: 0;\n flex-direction: column;\n}\n\n.sdoc-file-select-dialog .sdoc-file-select-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 1rem;\n border-top: 1px solid #e9ecef;\n}\n\n.sdoc-file-select-dialog .highlight-bg-color {\n background-color: #FF8000;\n border-color: #FF8000;\n}\n",".sdoc-outline-wrapper {\n position: absolute;\n top: 0;\n bottom: 0;\n display: flex;\n margin: 20px 30px 20px 16px;\n min-height: 0;\n z-index: 101;\n}\n\n.sdoc-outline {\n flex: 1;\n width: 220px; \n display: flex;\n min-height: 0;\n flex-direction: column;\n font-size: 14px;\n position: relative;\n}\n\n.sdoc-outline-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0.25rem 0;\n color: #999;\n border-bottom: 1px solid #dbdbdb;\n}\n\n.sdoc-outline-header__title {\n font-size: 14px;\n line-height: 1.1;\n margin: 0 !important;\n}\n\n.sdoc-outline-header__close {\n cursor: pointer;\n font-size: 14px;\n}\n\n.sdoc-outline-header__close:hover {\n color: #555;\n}\n\n.sdoc-outline-list-container {\n list-style: none;\n padding: 0.5rem 0;\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow-x: hidden;\n overflow-y: hidden;\n}\n\n.sdoc-outline-list-container:hover {\n overflow-y: auto;\n}\n\n.sdoc-outline-item {\n padding: 4px 0;\n cursor: pointer;\n}\n\n.sdoc-outline-item.active {\n color: #ff8000;\n}\n\n.sdoc-outline-menu {\n line-height: 1;\n font-size: 14px;\n color: #888;\n cursor: pointer;\n width: 28px;\n height: 28px;\n background: #fff;\n border-radius: 0 50% 50% 0;\n box-shadow: 0 0 6px rgba(0,0,0, 0.12);\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: 20px;\n left: -16px;\n}\n\n.sdoc-outline-menu.disabled {\n opacity: .65;\n}\n\n.sdoc-outline-menu:not(.disabled):hover {\n color: #333;\n}\n","/* modify default css */\n.sdoc-editor-container .article {\n font-size: 11pt;\n}\n\n.sdoc-editor-container .sdoc-code-block-pre {\n font-size: 10pt;\n}\n\n.sdoc-editor-container .article p {\n padding: 5px 0;\n margin: 0;\n}\n\n.element-icon {\n color: #444 !important;\n}\n\n.sdoc-icon-btn {\n height: 24px;\n width: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sdoc-icon-btn:hover {\n cursor: pointer;\n}\n\n.sdoc-icon-btn .sdocfont {\n color: #999;\n font-size: 16px;\n}\n\n.sdoc-icon-btn:hover .sdocfont {\n color: #5a5a5a;\n}\n",".sdoc-editor-container {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n\n.sdoc-editor-container .sdoc-editor-toolbar {\n display: flex;\n justify-content: center;\n height: 44px;\n align-items: center;\n padding: 0 10px;\n background-color: #fff;\n user-select: none;\n border-bottom: 1px solid #e5e6e8;\n position: relative;\n z-index: 102;\n}\n\n.sdoc-editor-container .sdoc-editor-content {\n width: 100%;\n height: calc(100% - 44px);\n display: flex;\n background: #f5f5f5;\n position: relative;\n}\n\n.sdoc-editor-container .sdoc-absolute-wrapper {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n}\n\n.sdoc-editor-container .sdoc-scroll-container {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n z-index: 100;\n overflow: auto;\n}\n\n.sdoc-editor-container .sdoc-article-container {\n position: relative;\n top: 0;\n width: 794px;\n margin: 0 auto;\n padding-top: 20px;\n padding-bottom: 20px;\n}\n\n.sdoc-editor-container .sdoc-editor-content .article {\n width: 794px;\n min-height: 800px;\n padding: 40px 60px;\n background-color: #fff;\n border: 1px solid #e5e6e8;\n box-shadow: 0 0 15px rgba(0, 0, 0, 0.06);\n}\n\n.sdoc-editor-container .sdoc-editor-content .article > div {\n caret-color: blue;\n}\n\n.sdoc-editor-container .sdoc-editor-content .article .sdoc-drag-cover::before {\n content: ' ';\n width: 59px;\n display: inline-block;\n position: absolute;\n left: -60px;\n}\n\n.sdoc-editor-container .sdoc-editor-content .article .sdoc-draging {\n border-bottom: 2px solid rgba(35,131,226);\n}\n\n.sdoc-editor-container .seafile-block-container {\n position: relative;\n}\n\n.sdoc-editor-container .seafile-block-container .comment-count {\n position: absolute;\n right: -55px;\n top: 0px;\n border-radius: 4px;\n width: 15px;\n height: 15px;\n line-height: 18px;\n pointer-events: none;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #fff;\n background: rgba(0, 0, 0, .3);\n}\n\n.sdoc-editor-container .seafile-block-container .comment-count__btn {\n font-size: 12px;\n transform: scale(.75);\n}\n","/* header */\n.sdoc-editor-container .article .sdoc-header-title,\n.sdoc-editor-container .article .sdoc-header-subtitle,\n.sdoc-editor-container .article .sdoc-header-1,\n.sdoc-editor-container .article .sdoc-header-2,\n.sdoc-editor-container .article .sdoc-header-3,\n.sdoc-editor-container .article .sdoc-header-4,\n.sdoc-editor-container .article .sdoc-header-5,\n.sdoc-editor-container .article .sdoc-header-6 {\n line-height: 1.1;\n margin: 1.2em 0 0.4em;\n font-weight: bold;\n}\n\n.sdoc-editor-container .article .sdoc-header-2,\n.sdoc-editor-container .article .sdoc-header-3 {\n line-height: 1.5;\n}\n\n.sdoc-editor-container .article .sdoc-header-4 {\n line-height: 1.125;\n}\n\n/* list */\n.sdoc-editor-container .article .list-container {\n margin: 0;\n /* override seafile-ui padding */\n padding-left: 1.2em !important;\n}\n\n.sdoc-editor-container .article .list-container .sdoc-li-blod::marker {\n font-weight: bold;\n}\n\n/* check list */\n.sdoc-editor-container .article .sdoc-checkbox-container {\n padding: 0px 2px;\n}\n\n.sdoc-editor-container .article .sdoc-checkbox-container .sdoc-checkbox-input-wrapper {\n display: flex;\n align-items: baseline;\n}\n\n.sdoc-editor-container .article .sdoc-checkbox-container .sdoc-checkbox-input-wrapper .sdoc-checkbox-input {\n vertical-align: middle;\n margin-right: 5px;\n}\n\n.sdoc-editor-container .article .sdoc-checkbox-container .sdoc-checkbox-input-wrapper .sdoc-checkbox-content-container {\n word-break:normal;\n width: calc(100% - 1em);\n}\n\n/* image */\n.sdoc-editor-container .article .sdoc-image-wrapper {\n position: relative;\n display: inline-block;\n padding: 6px 6px 6px 0;\n}\n\n.sdoc-editor-container .article .sdoc-image-inner {\n position: relative;\n display: inline-block;\n}\n\n.sdoc-editor-container .article .sdoc-image-content {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n}\n\n.sdoc-editor-container .article .sdoc-image-content :first-child {\n position: relative;\n}\n\n.sdoc-editor-container .article .sdoc-image-content .sdoc-image-caption-input-wrapper {\n border: 0;\n outline: none;\n margin-top: 8px;\n color: #8A8F8D;\n background-color: transparent;\n text-align: center;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.sdoc-editor-container .article .sdoc-image-content .sdoc-image-caption-input-wrapper::placeholder {\n color: #bec0bf\n}\n\n.sdoc-editor-container .article .image-selected {\n box-shadow: 0 0 0 2px #007bff;\n}\n\n.sdoc-editor-container .article .image-resizer {\n width: 10px;\n height: 10px;\n position: absolute;\n right: -5px;\n bottom: -5px;\n background-color: #007bff;\n border: 1px solid #fff;\n cursor: se-resize;\n}\n\n.sdoc-editor-container .article .image-full-screen {\n position: absolute;\n height: 26px;\n display: inline-block;\n width: 26px;\n top: 0;\n right: -32px;\n text-align: center;\n line-height: 20px;\n padding: 2px;\n box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.2);\n border-radius: 3px;\n border: 1px solid rgba(0, 40, 100, 0.12);\n background-color: #fff;\n user-select: none !important;\n z-index: 1000;\n}\n\n.sdoc-editor-container .article .image-full-screen:hover {\n display: block;\n background-color: #efefef;\n}\n\n.sdoc-editor-container .article .image-size {\n display: inline-block;\n padding: 5px;\n white-space: nowrap;\n height: 22px;\n position: absolute;\n bottom: -25px;\n left: 100%;\n z-index: 1;\n transform: translateX(5px);\n border-radius: 3px;\n line-height: 12px;\n color: #fff;\n background-color: #4c4c4c;\n font-size: 12px;\n}\n\n/* caret */\n.sdoc-editor-container .article .caret-item .caret-name::before {\n content: attr(name);\n}\n\n.sdoc-editor-container .article .caret-item .caret-name {\n display: none;\n}\n\n.sdoc-editor-container .article .caret-item:hover .caret-name {\n display: block;\n}\n\n/* link */\n.sdoc-editor-container .article .virtual-link {\n color: #eb8205;\n}\n\n.sdoc-editor-container .article .virtual-link:hover {\n text-decoration: underline;\n text-underline-position: under;\n}\n",".sdoc-dropdown-menu,\n.sdoc-dropdown-menu .sdoc-dropdown-menu-container {\n padding: 8px 0;\n min-width: 12rem;\n}\n\n.sdoc-dropdown-menu .sdoc-dropdown-menu-divider {\n width: 100%;\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.sdoc-dropdown-menu .sdoc-dropdown-menu-item {\n height: 28px;\n width: 100%;\n padding: 4px 24px;\n user-select: none;\n display: flex;\n align-items: center;\n}\n\n.sdoc-dropdown-menu .sdoc-dropdown-menu-item.disabled,\n.sdoc-dropdown-menu .sdoc-dropdown-menu-item.disabled .sdoc-dropdown-item-content-icon {\n color: #c2c2c2 !important;\n}\n\n.sdoc-dropdown-menu .sdoc-dropdown-menu-item:hover {\n background-color: rgb(245, 245, 245);\n cursor: pointer;\n}\n\n.sdoc-dropdown-menu .sdoc-dropdown-menu-item.disabled:hover {\n background-color: unset;\n cursor: default;\n color: #c2c2c2;\n}\n\n.sdoc-dropdown-menu .sdoc-dropdown-menu-item .sdocfont {\n font-size: 12px;\n line-height: 12px;\n}\n\n.sdoc-dropdown-menu .sdoc-dropdown-menu-item .sdoc-dropdown-item-content {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1;\n font-size: 14px;\n}\n\n.sdoc-dropdown-menu .sdoc-dropdown-item-content .sdoc-dropdown-item-content-icon {\n margin-right: 10px;\n}\n\n.sdoc-dropdown-menu .sdoc-dropdown-item-right-icon {\n color: #999;\n transform: scale(.6);\n}\n\n.sdoc-dropdown-menu .sdoc-dropdown-item-with-left-icon {\n min-height: 32px;\n padding: 3px 12px;\n}\n\n.sdoc-dropdown-menu .sdoc-check-mark {\n transform: scale(.8);\n color: #798d99;\n}\n\n/* sub menu */\n.sdoc-sub-dropdown-menu .popover {\n left: -8px !important;\n}\n\n.sdoc-sub-dropdown-menu .bs-popover-auto[x-placement^=\"left\"] {\n left: 8px !important;\n}\n",".sdoc-comment-caret-list {\n background: #fff;\n position: absolute;\n padding: 10px 0;\n max-height: 200px;\n overflow: auto;\n min-width: 150px;\n /* higher than row expand */\n z-index: 1049;\n border-radius: 5px;\n border: 1px solid #ededed;\n max-width: 200px;\n}\n\n.sdoc-comment-caret-list .comment-participant-item {\n padding: 5px 0;\n}\n\n.sdoc-comment-caret-list .comment-participant-item.active,\n.sdoc-comment-caret-list .comment-participant-item:hover {\n background: #f5f5f5;\n cursor: pointer;\n}\n\n.sdoc-comment-caret-list .comment-participant-item .comment-participant-container {\n display: flex;\n align-items: center;\n padding: 0 8px;\n}\n\n.sdoc-comment-caret-list .comment-participant-item .comment-participant-avatar {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n vertical-align: middle;\n}\n\n.sdoc-comment-caret-list .comment-participant-item .comment-participant-name {\n margin-left: 4px;\n font-size: 14px;\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".sdoc-comment-list-container {\n position: absolute;\n}\n\n.sdoc-comment-list-container .comment-ui-container {\n background-color: #edf2fa;\n border-radius: 8px;\n box-shadow: 0 0 2px rgba(0,0,0,.04);\n padding: 16px 0;\n margin-bottom: 10px;\n cursor: pointer;\n}\n\n.sdoc-comment-list-container .comment-ui-container.active {\n position: relative;\n left: -24px;\n background: rgba(255, 255, 255, .92);\n box-shadow: 0 1px 3px rgba(0,0,0,.3), 0 4px 8px 3px rgba(0,0,0,.15);\n}\n\n.sdoc-comment-list-container .comment-item-selected-text-container {\n width: 100%;\n height: 32px;\n display: flex;\n padding: 6px 16px;\n align-items: center;\n overflow: hidden;\n border-radius: 8px 8px 0 0;\n}\n\n.sdoc-comment-list-container .comment-item-selected-text-container .sdoc-comment-quote {\n font-size: 12px;\n flex-shrink: 0;\n}\n\n.sdoc-comment-list-container .comment-item-selected-text-container .comment-item-selected-text {\n flex: 1;\n font-size: 14px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.sdoc-comment-list-container .comment-item-list {\n max-height: 350px;\n min-width: 280px;\n overflow-x: hidden;\n overflow-y: auto;\n margin: 0;\n}\n\n.sdoc-comment-list-container .comment-item {\n position: relative;\n padding: 16px 16px 0;\n cursor: pointer;\n}\n\n.sdoc-comment-list-container .comment-delete-shadow {\n position: absolute;\n inset: 0;\n background-color: rgba(0, 0, 0, .7);\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: 10px;\n color: #fff;\n z-index: 1;\n}\n\n.sdoc-comment-list-container .comment-delete-shadow .delete-tip {\n margin-bottom: 10px;\n}\n\n.sdoc-comment-list-container .comment-ui-container.active .comment-item:hover {\n background: #fafafa;\n}\n\n.sdoc-comment-list-container .comment-item .comment-header,\n.sdoc-comment-list-container .comment-item .comment-author {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.sdoc-comment-list-container .comment-item .comment-content {\n padding-bottom: 10px;\n margin-top: 10px;\n margin-left: 30px;\n width: 222px;\n word-break: break-all;\n}\n\n.sdoc-comment-list-container .comment-header .comment-author__avatar {\n display: flex;\n align-items: center;\n}\n\n.sdoc-comment-list-container .comment-header .comment-author__avatar img {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n}\n\n.sdoc-comment-list-container .comment-header .comment-author__info {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n padding-left: 10px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n}\n\n.sdoc-comment-list-container .comment-header .comment-author__info .name {\n color: #1f1f1f;\n font-size: 14px;\n line-height: 20px;\n font-weight: 500;\n}\n\n.sdoc-comment-list-container .comment-header .comment-author__info .time {\n color: #444746;\n font-size: 12px;\n line-height: 16px;\n display: inline-flex;\n align-items: center;\n}\n\n.sdoc-comment-list-container .comment-header .sdoc-unread-message-tip {\n display: inline-block;\n height: 6px;\n width: 6px;\n border-radius: 50%;\n background-color: #fc6440;\n margin-left: 6px;\n}\n\n.sdoc-comment-list-container .comment-header .sdoc-unread-message-text-tip {\n display: none;\n height: 16px;\n padding: 0 5px;\n border-radius: 8px;\n margin-left: 6px;\n background-color: #fc6440;\n color: #fff;\n}\n\n.sdoc-comment-list-container .comment-ui-container:hover .comment-header .sdoc-unread-message-tip {\n display: none;\n}\n\n.sdoc-comment-list-container .comment-ui-container:hover .comment-header .sdoc-unread-message-text-tip {\n display: inline-block;\n}\n\n.sdoc-comment-list-container .comment-ui-container .comment-operation {\n width: 32px;\n height: 32px;\n padding: 0 !important;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n background-color: #fff;\n color: rgb(70, 77, 90);\n overflow: hidden;\n}\n\n.sdoc-comment-list-container .comment-ui-container.active .comment-operation:hover {\n cursor: pointer;\n background-color: #f0f0f0;\n}\n\n.sdoc-comment-list-container .comment-ui-container .comment-operation .sdoc-confirm {\n color: #20a0ff;\n font-weight: 800;\n}\n\n.sdoc-comment-menu {\n padding: 0;\n border-radius: 2px;\n}\n\n.sdoc-popover-menu {\n background: rgb(255, 255, 255);\n width: 140px;\n padding: 8px 0;\n height: auto;\n}\n\n.sdoc-popover-menu__item {\n padding: 4px 24px;\n height: 28px;\n vertical-align: middle;\n font-size: 14px;\n background-color: transparent;\n cursor: default;\n color: #202428;\n background-color: #fff;\n}\n\n.sdoc-popover-menu__item:hover {\n background-color: #20a0ff;\n color: #fff;\n}\n\n.sdoc-comment-list-container .comment-editor-wrapper {\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding: 0 16px;\n cursor: text;\n}\n\n.sdoc-comment-list-container .comment-editor-wrapper .comment-editor {\n margin-bottom: 10px;\n min-height: 40px;\n max-height: 120px;\n min-width: 240px;\n overflow: auto;\n background: #fff;\n border: 1px solid rgba(0, 0, 0, .12);\n border-radius: 4px;\n padding: 8px;\n word-break: break-all;\n}\n\n.sdoc-comment-list-container .comment-editor-wrapper .comment-editor:empty:before {\n content: attr(placeholder);\n opacity: .6;\n}\n\n.sdoc-comment-list-container .comment-editor-wrapper .comment-editor:focus-visible {\n outline: none;\n}\n\n.sdoc-comment-list-container .comment-editor-wrapper .comment-editor:focus {\n border: 1px solid rgba(0, 0, 0, .12);\n}\n\n.sdoc-comment-list-container .comment-editor-wrapper .comment-editor-user-info {\n display: flex;\n align-items: center;\n margin-bottom: 10px;\n}\n\n.sdoc-comment-list-container .comment-editor-wrapper .comment-editor-user-info .comment-editor-user-img {\n height: 30px;\n width: 30px;\n border-radius: 50%;\n overflow: hidden;\n margin-right: 8px;\n}\n\n.sdoc-comment-list-container .comment-editor-wrapper .comment-editor-user-info .comment-editor-user-name {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n user-select: none;\n}\n\n.sdoc-comment-list-container .comment-editor-wrapper .comment-operations {\n display: flex;\n justify-content: flex-end;\n}\n",".sdoc-comment-container .comment-container-right .element-comments-count {\n position: absolute;\n left: -22px;\n height: 16px;\n width: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #999;\n}\n\n.sdoc-comment-container .comment-container-right .element-comments-count:hover {\n color: #333;\n cursor: pointer;\n}\n\n.sdoc-comment-container .comment-container-right .element-comments-count-value {\n width: 16px;\n height: 14px;\n position: absolute;\n left: 0;\n top: 0;\n cursor: pointer;\n pointer-events: none;\n font-size: 12px;\n color: #fff;\n line-height: 13px;\n text-align: center;\n}\n",".sdoc-comments-participants-popover .popover {\n max-width: 282px;\n margin-top: 0px;\n}\n\n.sdoc-comments-participants-popover .sdoc-comments-participants-editor-container {\n min-height: 160px;\n width: 280px;\n}\n\n.sdoc-comments-participants-popover .sdoc-selected-participants {\n background-color: #f6f6f6;\n padding: 5px;\n border-bottom: 1px solid #dde2ea;\n border-radius: 3px 3px 0 0;\n min-height: 34px;\n}\n\n.sdoc-comments-participants-popover .sdoc-selected-participant {\n display: inline-flex;\n align-items: center;\n height: 20px;\n margin-right: 10px;\n padding: 0 8px 0 2px;\n font-size: 13px;\n border-radius: 10px;\n background: #eaeaea;\n}\n\n.sdoc-comments-participants-popover .sdoc-selected-participant img {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n vertical-align: middle;\n}\n\n.sdoc-comments-participants-popover .sdoc-selected-participant .sdoc-selected-participant-name {\n margin-left: 4px;\n flex: 1 1;\n color: #16181b;\n}\n\n.sdoc-comments-participants-popover .sdoc-selected-participant .sdoc-selected-participant-delete {\n width: 20px;\n height: 20px;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n padding-top: 1px;\n cursor: pointer;\n}\n\n.sdoc-comments-participants-popover .sdoc-selected-participant .sdoc-selected-participant-delete .sdocfont {\n display: inline-block;\n font-size: 12px;\n color: #909090;\n}\n\n.sdoc-comments-participants-popover .sdoc-selected-participant .sdoc-selected-participant-delete:hover .sdocfont {\n color: #5a5a5a;\n}\n\n.sdoc-comments-participants-popover .sdoc-search-collaborators {\n padding: 10px;\n}\n\n.sdoc-comments-participants-popover .sdoc-search-collaborators input {\n height: 28px;\n}\n\n.sdoc-comments-participants-popover .sdoc-searched-collaborators {\n display: flex;\n flex-direction: column;\n align-items: center;\n max-height: 200px;\n padding: 10px;\n overflow: auto;\n}\n\n.sdoc-comments-participants-popover .sdoc-searched-collaborators.sdoc-searched-collaborators-empty-tip {\n opacity: .5;\n font-size: 14px;\n align-items: flex-start;\n}\n\n.sdoc-comments-participants-popover .sdoc-searched-collaborator {\n display: flex;\n align-items: center;\n width: 100%;\n padding: 0.25rem 0;\n clear: both;\n font-weight: 400;\n color: #212529;\n height: 30px;\n border-radius: 2px;\n font-size: 14px;\n}\n\n.sdoc-comments-participants-popover .sdoc-searched-collaborator:hover {\n cursor: pointer;\n background-color: #f8f9fa;\n}\n\n.sdoc-comments-participants-popover .sdoc-searched-collaborator img {\n width: 16px;\n height: 16px;\n margin-left: 10px;\n border-radius: 50%;\n vertical-align: middle;\n}\n\n.sdoc-comments-participants-popover .sdoc-searched-collaborator .sdoc-selected-participant-name {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin-left: 4px;\n color: #16181b;\n}\n\n.sdoc-comments-participants-popover .sdoc-searched-collaborator .sdoc-searched-collaborator-operation {\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sdoc-comments-participants-popover .sdoc-searched-collaborator .sdoc-searched-collaborator-operation .sdocfont {\n font-size: 12px;\n color: #798d99;\n}\n",".global-comments-popover .comments-panel-body__header .comments-participants-container {\n width: fit-content;\n max-width: 100%;\n height: 42px;\n padding-top: 6px;\n display: flex;\n align-items: center;\n position: relative;\n}\n\n.global-comments-popover .comments-panel-body__header .comments-participants-editor-target {\n position: absolute;\n left: -1px;\n top: 0;\n z-index: -1;\n height: 100%;\n width: 1px;\n background-color: transparent;\n}\n\n.global-comments-popover .comments-panel-body__header .comment-participant-avatar {\n border-radius: 50%;\n vertical-align: middle;\n margin-right: -0.5rem;\n}\n\n.global-comments-popover .comments-panel-body__header .comment-participant-avatar img {\n width: 28px;\n height: 28px;\n border: 2px solid #fff;\n line-height: 2rem;\n border-radius: 50%;\n display: inline-block;\n background: #ced4da no-repeat center/cover;\n position: relative;\n text-align: center;\n color: #868e96;\n font-weight: 600;\n vertical-align: bottom;\n font-size: .875rem;\n user-select: none;\n}\n\n.global-comments-popover .comments-panel-body__header .add-comments-participants {\n position: relative;\n bottom: -3px;\n cursor: pointer;\n margin-right: -0.5rem;\n height: 20px;\n width: 20px;\n background-color: #fff;\n border: 1px solid #fff;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.global-comments-popover .add-comments-participants .sdocfont {\n font-size: 16px;\n color: #ff8000;\n border-radius: 50%;\n}\n\n.global-comments-popover .comment-participants-more {\n position: absolute;\n top: 0;\n left: 0;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n background-color: rgba(0, 0, 0, .6);\n border: 2px solid #fff;\n}\n\n.global-comments-popover .comment-participants-more .sdocfont {\n color: #fff;\n font-size: 12px;\n}\n",".global-comments-popover {\n position: absolute;\n right: 10px;\n top: 50px;\n z-index: 103;\n width: 340px;\n height: 540px;\n}\n\n.global-comments-popover .comments-panel-wrapper {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: #fff;\n border: 1px solid #EAECEF;\n border-radius: 4px;\n box-shadow: 0 2px 10px rgba(0, 0, 0, .12);\n}\n\n.global-comments-popover .comments-panel-header {\n padding: 0 16px;\n height: 46px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n border-bottom: 1px solid #EAECEF;\n}\n\n.global-comments-popover .comments-panel-header .title {\n color: #212529;\n font-size: 16px;\n font-weight: 500;\n}\n\n.global-comments-popover .comments-panel-header .comments-panel-header-right {\n display: flex;\n}\n\n.global-comments-popover .comments-panel-header-right .sdoc-icon-btn:not(:last-child) {\n margin-right: 4px;\n}\n\n.global-comments-popover .comments-panel-header .sdoc-icon-btn .sdocfont {\n font-weight: 700;\n}\n\n.global-comments-popover .comments-panel-body {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n position: relative;\n background-color: #F5F5F5;\n}\n\n.global-comments-popover .comments-panel-body__header {\n height: 80px;\n display: flex;\n flex-direction: column;\n padding: 0 16px;\n}\n\n.global-comments-popover .comments-panel-body__header .comments-types-count {\n height: 38px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 0;\n}\n\n.global-comments-popover .comments-panel-body__header .comment-type {\n color: #212529;\n font-size: 12px;\n}\n\n.global-comments-popover .comments-panel-body__header .comment-type{\n color: #212529;\n font-size: 12px;\n}\n\n.global-comments-popover .comments-panel-body__header .comment-count-tip {\n color: #999;\n font-size: 12px;\n}\n\n.global-comments-popover .comments-panel-body__content {\n flex: 1;\n display: flex;\n flex-direction: column;\n padding: 16px;\n overflow: auto;\n}\n\n.global-comments-popover .comments-panel-body__content .sdoc-comment-list-container {\n position: relative;\n}\n\n.global-comments-popover .comments-panel-body__content .comment-item-list {\n max-width: 308px;\n}\n\n.global-comments-popover .comments-panel-body__content .comment-ui-container.active {\n left: 0;\n}\n\n.global-comments-popover .comments-panel-body__content .comment-ui-container.sdoc-resolved {\n background: #f5f5f5;\n}\n\n.global-comments-popover .comments-panel-body__content .comment-ui-container.active.sdoc-resolved {\n background: #f5f5f5;\n}\n\n.sdoc-dropdown-menu .dropdown-item {\n font-size: 14px;\n color: #212529;\n}\n\n/* doc comment add editor */\n.global-comments-popover .comments-panel-body .sdoc-doc-comment-editor-container {\n position: absolute;\n left: 16px;\n width: calc(100% - 32px);\n background-color: #fff;\n top: 78px;\n}\n\n.global-comments-popover .sdoc-doc-comment-editor-container .comment-ui-container.active {\n left: 0;\n margin-bottom: 0;\n}\n\n/* custom */\n.global-comments-popover .sdoc-comment-list-container .comment-ui-container {\n background-color: #FFF;\n border: 1px solid #c7c7c7;\n}\n\n.global-comments-popover .sdoc-comment-list-container .comment-item-selected-text-container {\n background-color: #F5F5F5;\n border-bottom: 1px solid #c7c7c7;\n}\n","/* editor-comment css */\n.sdoc-comment-container {\n position: absolute;\n left: 0;\n top: 0;\n width: 794px;\n}\n\n.sdoc-comment-container .comment-container-main {\n position: absolute;\n width: 794px;\n top: 0;\n}\n\n.sdoc-comment-container .comment-container-right {\n position: absolute;\n left: 100%;\n}\n\n.sdoc-comment-container .comment-container-right .comment-add-wrapper {\n position: absolute;\n left: -22px;\n width: 20px;\n}\n\n.sdoc-comment-container .comment-container-right .comment-add-wrapper .sdocfont {\n color: #999;\n background-color: #FFF;\n}\n\n.sdoc-comment-container .comment-container-right .comment-add-wrapper .sdocfont:hover {\n color: #333;\n cursor: pointer;\n}\n\n.sdoc-comment-container .comment-container-right .comment-list-wrapper {\n position: absolute;\n left: 14px;\n width: 280px;\n}\n",".seahub-switch.small .custom-switch-indicator {\n width: 22px;\n height: 12px;\n border-radius: 6px;\n cursor: pointer;\n}\n\n.seahub-switch.small .custom-switch-indicator.disabled {\n cursor: default;\n}\n\n.seahub-switch.small .custom-switch-indicator:before {\n height: 8px;\n width: 8px;\n}\n\n.seahub-switch.small .custom-switch-input:checked~.custom-switch-indicator:before {\n left: 12px;\n}\n",".sf-plain-editor {\n flex: 1;\n display: flex;\n min-height: 0;\n min-width: 0;\n position: relative;\n}\n\n/* fix plain editor main height */\n.sf-plain-editor-main {\n position: absolute;\n inset: 0;\n}\n\n.sf-plain-editor-left-panel {\n height: 100%;\n width: 50%;\n background-color: #fff;\n border-right: 1px solid rgb(230,230,221);\n overflow-y: scroll;\n overflow-x: hidden;\n}\n\n.sf-plain-editor-right-panel {\n height: 100%;\n width: 50%;\n background-color: rgb(250,250,249);\n overflow-y: scroll;\n overflow-x: hidden;\n}\n\n.rendered-markdown.article {\n padding:0 20px 20px;\n}\n\n.rendered-markdown tbody tr:first-child {\n font-weight: 400;\n}\n",".sdoc-editor-container .sdoc-editor-content.readonly {\n height: 100%;\n}\n\n.sdoc-editor-container .sdoc-editor-content.no-outline .sdoc-absolute-wrapper {\n display: flex;\n position: relative;\n min-height: 0;\n}\n\n.sdoc-editor-container .sdoc-editor-content.no-outline .sdoc-article-container {\n margin-left: 0 !important;\n}\n\n.sdoc-editor-container.mobile .sdoc-editor-content.readonly .sdoc-article-container {\n padding: 0;\n width: auto;\n}\n\n.sdoc-editor-container.mobile .sdoc-editor-content.readonly .article {\n width: 100% !important;\n padding: 1rem;\n}\n",".sdoc-diff {\n padding: 0 5px;\n margin: 0 -5px;\n overflow: hidden;\n}\n",".sdoc-editor-page-wrapper .tip-message {\n margin-left: 12px;\n font-size: 12px;\n opacity: 0.75;\n color: #999;\n width: max-content;\n height: 27px;\n line-height: 27px;\n display: inline-flex;\n}\n\n.sdoc-editor-page-wrapper .tip-message .sdocfont {\n padding-top: 1px;\n font-size: 14px;\n}\n",".sdoc-draft-menu {\n position: relative;\n margin-left: 0.5rem;\n}\n\n.sdoc-draft-identifier {\n display: inline-block;\n font-size: 14px;\n color: #888;\n background: #eee;\n padding: 0 8px; \n height: 20px;\n line-height: 20px;\n border-radius: 10px;\n cursor: pointer;\n}\n\n.sdoc-draft-identifier:hover {\n background: #dbdbdb;\n}\n\n.sdoc-draft-menu .draft-popover {\n position: absolute;\n top: 25px;\n left: 0;\n width: 178px;\n background-color: #fff;\n border: 1px solid #e5e6e8;\n border-radius: 2px;\n padding: 8px 0;\n box-shadow: 0 0 10px #e5e6e8;\n z-index: 10;\n}\n\n.sdoc-draft-menu .draft-popover .draft-menu-item {\n cursor: pointer;\n width: 100%;\n padding: 4px 12px;\n}\n\n.sdoc-draft-menu .draft-popover .draft-menu-item:hover {\n background-color: rgb(245, 245, 245);\n}\n",".sdoc-file-tag-quick-review-container {\n display: flex;\n margin-left: 0.5rem;\n}\n\n.sdoc-file-tag-quick-review-container .sdoc-review-circle {\n display: inline-block;\n height: 1rem;\n width: 1rem;\n margin-right: -0.5rem;\n border: 0.125rem solid #fff;\n border-radius: 50%;\n cursor: pointer;\n}\n",".sdoc-editor-page-header .doc-info {\n display: flex;\n align-items: center;\n}\n\n.sdoc-editor-page-header .doc-info .doc-name {\n font-size: 18px;\n font-weight: 700;\n color: #212529;\n}\n\n.sdoc-editor-page-header .doc-info .doc-icon {\n margin-left: 0.5rem;\n color: #999;\n cursor: pointer;\n font-size: 14px;\n line-height: 1;\n}\n\n.sdoc-editor-page-header .doc-info .doc-icon:hover {\n margin-left: 0.5rem;\n color: #333;\n}\n\n.sdoc-editor-page-header .doc-info .sdoc-link {\n font-size: 14px;\n}\n\n.sdoc-editor-page-header .doc-info .sdoc-freezed {\n color: red;\n}\n\n.sdoc-editor-page-header .doc-state {\n font-size: 0.8125rem;\n}\n\n.sdoc-editor-page-header .doc-info .sdoc-revision-avatar {\n width: 44px;\n margin-right: 6px;\n}\n\n.sdoc-editor-page-header .sdoc-revision-info .sdoc-revision-avatar {\n width: 44px;\n height: 44px;\n margin-right: 6px;\n overflow: hidden;\n}\n\n.sdoc-editor-page-header .sdoc-revision-avatar img {\n height: 100%;\n width: 100%;\n}\n\n.sdoc-editor-page-header .sdoc-revision-info .sdoc-revision-detail {\n display: flex;\n flex-direction: column;\n}\n\n.sdoc-editor-page-header .sdoc-revision-info .sdoc-revision-order {\n display: inline-block;\n font-size: 14px;\n color: #888;\n background: #eee;\n padding: 0 8px; \n height: 20px;\n line-height: 20px;\n border-radius: 10px;\n margin-left: 0.5rem;\n cursor: default;\n}\n\n.sdoc-editor-page-header .sdoc-revision-info .sdoc-revision-published-tip {\n display: inline-block;\n font-size: 14px;\n color: #fff;\n background: #5EBA00;\n padding: 0 8px; \n height: 20px;\n line-height: 20px;\n border-radius: 10px;\n margin-left: 0.5rem;\n cursor: default;\n}\n\n.sdoc-editor-page-header .sdoc-revision-info .sdoc-revision-source-doc {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: 20px;\n width: 20px;\n margin-left: 0.5rem;\n cursor: pointer;\n}\n\n.sdoc-editor-page-header .sdoc-revision-info .sdoc-revision-source-doc .sdoc-jump-to {\n font-size: 14px;\n color: #999;\n}\n\n.sdoc-editor-page-header .sdoc-revision-info .sdoc-revision-source-doc:hover .sdoc-jump-to {\n color: #333;\n}\n",".sdoc-tip-dialog .highlight-bg-color {\n background-color: #FF8000;\n border-color: #FF8000;\n}\n\n.sdoc-tip-dialog .sdoc-tip-dialog-custom-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: 46px;\n padding-bottom: 40px;\n}\n\n.sdoc-tip-dialog .sdoc-tip-dialog-custom-container .sdoc-tip-img-container {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 140px;\n height: 140px;\n overflow: hidden;\n}\n\n.sdoc-tip-dialog .sdoc-tip-dialog-custom-container .sdoc-tip-content {\n width: 100%;\n padding: 10px 16px 64px 16px;\n text-align: center;\n}\n\n.sdoc-tip-dialog .sdoc-tip-dialog-custom-container .sdoc-tip-operation-btn {\n min-width: 140px;\n}\n\n.sdoc-tip-dialog .sdoc-tip-dialog-custom-container.publishing {\n padding: 2rem;\n height: 180px;\n justify-content: center;\n}\n\n.sdoc-tip-dialog .sdoc-tip-dialog-custom-container.publishing .common-loading-tip {\n width: 30px;\n height: 30px;\n border-width: 4px;\n}\n\n.sdoc-tip-dialog .sdoc-tip-dialog-custom-container.publishing .sdoc-tip-content {\n margin-top: 8px;\n padding: 0;\n}\n",".seadoc-switch.small .custom-switch-indicator {\n width: 22px;\n height: 12px;\n border-radius: 6px;\n}\n\n.seadoc-switch.small .custom-switch-indicator:before {\n height: 8px;\n width: 8px;\n}\n\n.seadoc-switch.small .custom-switch-input:checked~.custom-switch-indicator:before {\n left: 12px;\n}\n",".sdoc-toggle-revision-changes .custom-switch {\n padding-left: 0;\n}\n",".sdoc-more-revision-operations-dropdown .sdoc-more-revision-operations-toggle {\n width: 66px;\n height: 30px;\n border-radius: 15px;\n background-color: #F0F0F0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #666;\n}\n\n.sdoc-more-revision-operations-dropdown .sdoc-more-revision-operations-toggle:hover {\n cursor: pointer;\n color: #333;\n}\n\n.sdoc-more-revision-operations-dropdown .sdoc-more-revision-operations-toggle .sdoc-revise {\n margin-right: 10px;\n}\n\n.sdoc-more-revision-operations-dropdown .sdoc-more-revision-operations-toggle .sdocfont {\n font-size: 14px;\n}\n\n.sdoc-more-revision-operations-dropdown .dropdown-item {\n padding: 12px;\n height: 64px;\n}\n\n.sdoc-more-revision-operations-dropdown .sdoc-more-revision-operation {\n width: 373px;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n}\n\n.sdoc-more-revision-operations-dropdown .sdoc-more-revision-operation-title .sdocfont {\n font-size: 14px;\n margin-right: 6px;\n}\n\n.sdoc-more-revision-operations-dropdown .sdoc-more-revision-operation-title-name {\n color: #212529;\n font-size: 14px;\n}\n\n.sdoc-more-revision-operations-dropdown .sdoc-more-revision-operation-describe {\n padding-left: 20px;\n color: #999;\n font-size: 13px;\n width: 100%;\n white-space: break-spaces;\n}\n",".sdoc-revision-operation-toggle {\n display: none;\n font-size: 16px;\n color: #999;\n}\n\n.revisions-body .sdoc-revision:hover .sdoc-revision-operation-toggle,\n.revisions-dialog .revisions-body .sdoc-revision.operating .sdoc-revision-operation-toggle {\n display: inline-block;\n}\n\n.sdoc-revision-operation-toggle:hover {\n cursor: pointer;\n color: #333;\n}\n\n.sdoc-revision-menu-popover .popover {\n margin-top: 0;\n}\n\n",".revisions-dialog {\n width: 700px;\n max-width: 700px;\n height: calc(100% - 56px);\n}\n\n.revisions-dialog .modal-content {\n height: 100%;\n overflow: hidden;\n}\n\n.revisions-dialog .revisions-body {\n height: calc(100% - 50px);\n padding: 0;\n overflow: hidden;\n}\n\n.revisions-dialog .sdoc-revisions-container {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n.revisions-dialog .sdoc-revisions-container .sdoc-revisions-header {\n height: 41px;\n width: calc(100% - 32px);\n border-bottom: 1px solid rgba(0, 40, 100, 0.12);\n margin: 0 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.revisions-dialog .sdoc-revisions-container .sdoc-revisions-content {\n flex: 1;\n overflow-x: hidden;\n overflow-y: scroll;\n padding: 0 16px 16px 16px;\n}\n\n.revisions-dialog .sdoc-revisions-container .sdoc-revisions-list {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.revisions-dialog .sdoc-revisions-container.loading {\n align-items: center;\n justify-content: center;\n}\n\n.revisions-dialog .revisions-body .sdoc-revision {\n height: 41px;\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: flex-start;\n border-bottom: 1px solid rgba(0, 40, 100, 0.12);\n}\n\n.revisions-dialog .revisions-body .sdoc-revision.operating {\n background-color: #f5f5f5;\n}\n\n.revisions-dialog .revisions-body .sdoc-revision:hover {\n cursor: pointer;\n background-color: #f5f5f5;\n}\n\n.revisions-dialog .sdoc-revision-name-header,\n.revisions-dialog .sdoc-revision-user-header,\n.revisions-dialog .sdoc-revision-time-header {\n padding-left: 9px;\n color: #999;\n}\n\n.revisions-dialog .sdoc-revision .sdoc-revision-user {\n height: 100%;\n overflow: hidden;\n display: flex;\n align-items: center;\n padding-left: 9px;\n}\n\n.revisions-dialog .sdoc-revision .sdoc-revision-name {\n height: 100%;\n overflow: hidden;\n display: flex;\n align-items: center;\n padding-left: 9px;\n}\n\n.revisions-dialog .sdoc-revision .sdoc-revision-name-content {\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.revisions-dialog .sdoc-revision .sdoc-revision-time {\n height: 100%;\n padding-left: 9px;\n overflow: hidden;\n display: flex;\n align-items: center;\n}\n\n.revisions-dialog .revisions-body .sdoc-revision.loading {\n height: 40px;\n align-items: center;\n border-bottom: none;\n}\n\n.revisions-dialog .sdoc-revision.loading:hover {\n background-color: unset;\n}\n\n.revisions-dialog .sdoc-revision-operations {\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n",".sdoc-revisions-count {\n height: 30px;\n width: fit-content;\n border: 1px solid #E5E5E5;\n border-radius: 3px;\n line-height: 28px;\n text-align: center;\n padding: 0 16px;\n margin-left: 1rem;\n color: #666;\n}\n\n.sdoc-revisions-count:hover {\n cursor: pointer;\n color: #333;\n}\n",".sdoc-revision-changes-container {\n height: 32px;\n border: 1px solid #e5e5e5;\n border-radius: 3px;\n}\n\n.sdoc-revision-changes-container .sdoc-revision-changes-divider {\n border-right: 1px solid #e5e5e5;\n height: 100%;\n width: 1px;\n}\n\n.sdoc-revision-changes-container .sdoc-revision-changes-last,\n.sdoc-revision-changes-container .sdoc-revision-changes-next {\n padding: 0 8px;\n height: 100%;\n}\n\n.sdoc-revision-changes-container .sdoc-revision-changes-last .sdocfont,\n.sdoc-revision-changes-container .sdoc-revision-changes-next .sdocfont {\n color: #000;\n opacity: .5;\n}\n\n.sdoc-revision-changes-container .sdoc-revision-changes-last:hover,\n.sdoc-revision-changes-container .sdoc-revision-changes-next:hover {\n cursor: pointer;\n background-color: #f5f5f5;\n}\n\n.sdoc-revision-changes-container .sdoc-revision-changes-last:hover .sdocfont,\n.sdoc-revision-changes-container .sdoc-revision-changes-next:hover .sdocfont {\n opacity: .75;\n}\n",".collaborators-popover.popover {\n width: 300px;\n max-width: 300px;\n}\n\n.collaborators-popover .popover-container {\n padding: 0;\n margin: 0;\n max-height: 360px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n\n.collaborators-popover .popover-header {\n height: 50px;\n min-height: 50px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: 600;\n font-size: 16px;\n border-bottom: 1px solid #ededed;\n color: #212529;\n background: #fff;\n}\n\n.collaborators-popover .popover-container .content-list {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: auto;\n padding: 5px 0;\n}\n\n.content-list .collaborator-details {\n height: 32px;\n line-height: 32px;\n width: 100%;\n display: flex;\n align-items: center;\n padding: 3px 12px;\n \n}\n\n.content-list .collaborator-details:hover {\n background-color: #f8f8f8;\n}\n\n.content-list .collaborator-details .collaborator-tag {\n margin-right: 8px;\n height: 5px;\n width: 5px;\n background-color: #08DB6B;\n border-radius: 50%;\n overflow: hidden;\n}\n\n.content-list .collaborator-details .collaborator-avatar {\n margin-right: 8px;\n height: 20px;\n width: 20px;\n border-radius: 50%;\n overflow: hidden;\n}\n\n.content-list .collaborator-details .collaborator-name {\n max-width: calc(100% - 20px);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n color: #212529;\n}\n",".sdoc-notification-container .sdoc-notification-count {\n position: absolute;\n color: #fff;\n font-size: 12px;\n top: -7px;\n right: -10px;\n padding: 2px;\n background: #fc6440;\n border-radius: 50%;\n min-width: 20px;\n min-height: 20px;\n transform: scale(.7);\n text-align: center;\n}\n",".sdoc-tag-popover {\n padding-bottom: 0;\n width: 230px;\n}\n\n.sdoc-popover-container .sdoc-tag-search-input {\n margin-bottom: 10px;\n}\n\n.sdoc-popover-container .sdoc-tag-list-container {\n max-height: 180px;\n overflow-y: auto;\n}\n\n.sdoc-tag-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 3px 10px;\n width: 100%;\n height: 30px;\n cursor: pointer;\n}\n\n.sdoc-tag-item:hover {\n background-color: #eee;\n}\n\n.sdoc-tag-item .sdoc-tag-badge-container {\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.sdoc-tag-item .sdoc-tag-badge {\n margin-right: 10px;\n text-overflow: ellipsis;\n overflow: hidden;\n font-size: 13px;\n font-weight: normal;\n}\n\n.sdoc-tag-item .sdoc-tag-added-mark {\n width: 18px;\n}\n\n.sdoc-create-tag {\n padding: 8px 10px;\n border-top: 1px solid #eee;\n border-bottom: none;\n overflow: hidden;\n font-size: 14px;\n white-space: nowrap;\n font-weight: normal;\n text-overflow: ellipsis;\n background-color: #fff;\n cursor: pointer;\n}\n\n.sdoc-create-tag:hover {\n background-color: #f5f5f5;\n}\n\n.sdoc-create-tag .add-icon {\n margin-right: 6px;\n font-size: 13px;\n font-weight: 600;\n}\n",".doc-ops {\n display: flex;\n align-items: center;\n}\n\n.doc-ops .op-item {\n margin-left: 1rem;\n display: flex;\n align-items: center;\n position: relative;\n cursor: pointer;\n}\n\n.doc-ops .op-item .sdocfont {\n font-size: 18px;\n color: #666;\n cursor: pointer;\n}\n\n.doc-ops .op-item .sdocfont:hover {\n color: #333;\n cursor: pointer;\n}\n\n.doc-ops .popover-wrapper {\n width: 300px;\n}\n","html, body {\n height: 100%;\n width: 100%;\n}\n\n#root, #wrapper {\n height: 100%;\n width: 100%;\n display: flex;\n}\n\n.sdoc-editor-page-wrapper {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n\n.sdoc-editor-page-wrapper .sdoc-editor-page-header {\n border-bottom: 1px solid #e5e6e8;\n flex-shrink: 0;\n height: 56px;\n position: relative;\n z-index: 103;\n background-color: #fff;\n}\n\n.sdoc-editor-page-wrapper .sdoc-editor-page-content {\n flex: 1;\n min-height: 0;\n display: flex;\n}\n",".error-page {\n flex: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n overflow: hidden;\n}\n\n.error-page .error-tip {\n color: red;\n}\n\n.error-page .error-button {\n margin-top: 20px;\n}\n","/* reset common css */\n.sdoc-editor-page-wrapper .dropdown-item,\n.sdoc-context-menu .dropdown-item:not(:disabled) {\n color: #212529;\n}\n\n.sdoc-context-menu .dropdown-item:hover {\n color: #fff;\n}\n",".sdoc-share-permission {\n font-size: 12px;\n padding: 2px 6px;\n border-radius: 4px;\n border: solid 1px rgba(0, 0, 0, 0.12);\n}\n","/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\n\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tcolor: black;\n\tbackground: none;\n\ttext-shadow: 0 1px white;\n\tfont-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;\n\tfont-size: 1em;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\tline-height: 1.5;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre[class*=\"language-\"]::-moz-selection, pre[class*=\"language-\"] ::-moz-selection,\ncode[class*=\"language-\"]::-moz-selection, code[class*=\"language-\"] ::-moz-selection {\n\ttext-shadow: none;\n\tbackground: #b3d4fc;\n}\n\npre[class*=\"language-\"]::selection, pre[class*=\"language-\"] ::selection,\ncode[class*=\"language-\"]::selection, code[class*=\"language-\"] ::selection {\n\ttext-shadow: none;\n\tbackground: #b3d4fc;\n}\n\n@media print {\n\tcode[class*=\"language-\"],\n\tpre[class*=\"language-\"] {\n\t\ttext-shadow: none;\n\t}\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n\tpadding: 1em;\n\tmargin: .5em 0;\n\toverflow: auto;\n}\n\n:not(pre) > code[class*=\"language-\"],\npre[class*=\"language-\"] {\n\tbackground: #f5f2f0;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n\tpadding: .1em;\n\tborder-radius: .3em;\n\twhite-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: slategray;\n}\n\n.token.punctuation {\n\tcolor: #999;\n}\n\n.token.namespace {\n\topacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n\tcolor: #905;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n\tcolor: #690;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n\tcolor: #9a6e3a;\n\t/* This background color was intended by the author of this theme. */\n\tbackground: hsla(0, 0%, 100%, .5);\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n\tcolor: #07a;\n}\n\n.token.function,\n.token.class-name {\n\tcolor: #DD4A68;\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n\tcolor: #e90;\n}\n\n.token.important,\n.token.bold {\n\tfont-weight: bold;\n}\n.token.italic {\n\tfont-style: italic;\n}\n\n.token.entity {\n\tcursor: help;\n}\n",".sf-tooltip .tooltip-inner {\n font-weight: lighter;\n text-align: start;\n background-color: #303133;\n}\n\n.sf-tooltip.bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n border-bottom-color: #303133;\n}\n\n.sf-tooltip.bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n border-top-color: #303133;\n}\n\n.sf-tooltip.bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n border-right-color: #303133;\n}\n\n.sf-tooltip.bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n border-left-color: #303133;\n}\n",".sf-header-menu {\n display: flex;\n height: 100%;\n width: 140px;\n padding: 6px 8px;\n position: relative;\n align-items: center;\n}\n\n.sf-header-menu.header-toggle-disabled::after {\n content: '';\n position: absolute;\n top: 12px;\n right: 12px;\n border-top: 6px solid #e5e6e8;\n}\n\n.sf-header-menu.sf-header-popover-showed::after {\n content: '';\n position: absolute;\n top: 7px;\n right: 12px;\n border-top-color: transparent;\n border-bottom-color: #222428;\n}\n\n.sf-header-menu .sf-header-toggle {\n flex: 1;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-left: 5px;\n height: 24px;\n cursor: pointer;\n}\n\n\n.sf-header-menu .sf-header-toggle .active {\n font-size: 14px;\n}\n\n.sf-header-menu .header-toggle-disabled {\n color: #BDBDBD;\n cursor: unset;\n}\n\n\n.sf-header-menu .sf-header-toggle.sf-header-popover-showed {\n background-color: #f2f2f2;\n border-radius: 2px;\n}\n\n.sf-header-menu .sf-header-toggle:not(.header-toggle-disabled):hover {\n background-color: #f2f2f2;\n border-radius: 2px;\n}\n\n.sf-header-menu .sf-header-toggle .iconfont {\n color: #444;\n width: 12px;\n height: 24px;\n margin-left: 8px;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n font-size: 12px;\n cursor: pointer;\n}\n\n.sf-header-menu .sf-header-popover {\n position: absolute;\n top: 32px;\n left: 8px;\n padding: 8px 0;\n width: 100%;\n background-color: #fff;\n border: 1px solid #e5e6e8;\n border-radius: 2px;\n box-shadow: 0 0 10px #ccc;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n z-index: 101;\n}\n\n.sf-header-menu .sf-header-popover .sf-dropdown-menu-item {\n font-size: 14px;\n height: auto;\n padding: 9px 16px 9px 28px;\n width: 100%;\n line-height: 1;\n}\n\n.sf-header-menu .sf-header-popover .sf-dropdown-menu-item:hover {\n background-color: #F2F2F2;\n}\n\n.sf-header-menu .sf-header-popover .sf-dropdown-menu-item .sf-check-mark {\n position: absolute;\n left: 8px;\n transform: scale(.8);\n color: #798d99;\n}\n",".menu-group {\n height: 100%;\n padding: 6px 0 6px 8px;\n font-size: 0.75rem;\n border-right: 1px solid #e5e6e8;\n color: #444;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.menu-group .menu-group-item {\n width: 24px;\n height: 24px;\n line-height: 24px;\n margin-right: 8px;\n border: none !important;\n color: #444;\n background-color: #fcfcfc;\n}\n\n.menu-group .menu-group-item:disabled {\n color: #BDBDBD;\n}\n\n.menu-group .menu-group-item:hover {\n background-color: #F2F2F2;\n border-radius: 2px;\n}\n\n.menu-group .menu-group-item[data-active='true'] {\n color: #eb8205;\n}\n\n.menu-group .menu-group-item .iconfont {\n font-size: 13px;\n}\n\n/* sf-menu-with-dropdown */\n.menu-group .menu-group-item.sf-menu-with-dropdown {\n width: 36px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 0 !important;\n padding: 0 !important;\n margin-right: 10px;\n overflow: hidden;\n}\n\n.menu-group .menu-group-item.sf-menu-with-dropdown.disabled {\n color: #999;\n width: 24px !important;\n}\n\n.sf-menu-with-dropdown:not(.disabled):hover {\n background: #F2F2F2;\n border-radius: 2px;\n}\n\n.sf-menu-with-dropdown .sf-menu-with-dropdown-icon {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sf-menu-with-dropdown .sf-menu-with-dropdown-triangle {\n width: 12px;\n height: 24px;\n padding-right: 5px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sf-menu-with-dropdown .sf-menu-with-dropdown-triangle .sf-menu-with-dropdown-triangle-icon {\n font-size: 12px;\n color: #999;\n}\n\n.sf-dropdown-list {\n top: 30px;\n left: 5px;\n position: absolute;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n z-index: 1000;\n align-items: center;\n padding: 8px 0;\n background-color: #fff;\n border: 1px solid #e5e6e8;\n border-radius: 2px;\n box-shadow: 0 0 10px #ccc;\n}\n\n.sf-dropdown-list .sf-dropdown-menu-item-icon {\n margin-right: 8px;\n}\n\n.sf-dropdown-list .sf-dropdown-menu-item-text {\n white-space: nowrap;\n}\n\n.sf-dropdown-list .sf-dropdown-list-item {\n display: flex;\n padding: 9px 16px 9px 28px;\n height: auto;\n width: 100%;\n font-size: 14px;\n line-height: 1;\n}\n\n.sf-dropdown-list .sf-dropdown-list-item:hover {\n background-color: #F2F2F2;\n}\n",".image-toggle-disabled {\n color: #BDBDBD;\n cursor: unset;\n}\n\n.image-popover {\n position: absolute;\n top: 42px;\n left: 8px;\n padding: 8px 0;\n background-color: #fff;\n border: 1px solid #e5e6e8;\n border-radius: 2px;\n box-shadow: 0 0 10px #ccc;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n z-index: 101;\n}\n\n.image-popover .image-popover-item {\n margin: 0;\n padding: 9px 16px;\n height: auto;\n width: 100%;\n font-size: 14px;\n line-height: 1;\n white-space: nowrap;\n cursor: pointer;\n}\n\n.image-popover .image-popover-item:hover {\n background-color: #4d9ef8;\n color: #fff;\n}\n\n.image-popover .image-uploader {\n display: none;\n}\n","@keyframes closeWindow {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n\n.ril__outer {\n background-color: rgba(0, 0, 0, 0.85);\n outline: none;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 1000;\n width: 100%;\n height: 100%;\n -ms-content-zooming: none;\n -ms-user-select: none;\n -ms-touch-select: none;\n touch-action: none;\n}\n\n.ril__outerClosing {\n opacity: 0;\n}\n\n.ril__inner {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n\n.ril__image,\n.ril__imagePrev,\n.ril__imageNext {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n max-width: none;\n -ms-content-zooming: none;\n -ms-user-select: none;\n -ms-touch-select: none;\n touch-action: none;\n}\n\n.ril__imageDiscourager {\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n}\n\n.ril__navButtons {\n border: none;\n position: absolute;\n top: 0;\n bottom: 0;\n width: 20px;\n height: 34px;\n padding: 40px 30px;\n margin: auto;\n cursor: pointer;\n opacity: 0.7;\n}\n.ril__navButtons:hover {\n opacity: 1;\n}\n.ril__navButtons:active {\n opacity: 0.7;\n}\n\n.ril__outer .ril__navButtonPrev {\n left: 0;\n background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjcyMzkyNjY0MTMzIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEyNDkwIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIj48cGF0aCBkPSJNNDEyIDUxNS4ybDM2MS42LTM2MS42YzIyLjQtMTkuMiAyMi40LTU0LjQgMC03Ni44cy01Ny42LTIyLjQtNzYuOCAwbC00MDYuNCA0MDBjLTIyLjQgMjIuNC0yMi40IDU3LjYgMCA3Ni44bDQwNi40IDQwMy4yYzIyLjQgMjIuNCA1Ny42IDIyLjQgNzYuOCAwczIyLjQtNTcuNiAwLTc2LjhsLTM2MS42LTM2NC44eiIgZmlsbD0iI2ZmZmZmZiIgcC1pZD0iMTI0OTEiPjwvcGF0aD48L3N2Zz4=)\n no-repeat center;\n}\n\n.ril__outer .ril__navButtonNext {\n right: 0;\n background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjcyMzkxOTM4MzIwIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjExOTg2IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIj48cGF0aCBkPSJNNjQwIDUxNS4yTDI3OC40IDE1My42Yy0yMi40LTE5LjItMjIuNC01NC40IDAtNzYuOHM1Ny42LTIyLjQgNzYuOCAwbDQwNi40IDQwMGMyMi40IDIyLjQgMjIuNCA1Ny42IDAgNzYuOEwzNTUuMiA5NTYuOGMtMjIuNCAyMi40LTU3LjYgMjIuNC03Ni44IDBzLTIyLjQtNTcuNiAwLTc2LjhMNjQwIDUxNS4yeiIgZmlsbD0iI2ZmZmZmZiIgcC1pZD0iMTE5ODciPjwvcGF0aD48L3N2Zz4=)\n no-repeat center;\n}\n\n.ril__downloadBlocker {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7');\n background-size: cover;\n}\n\n.ril__caption,\n.ril__toolbar {\n background-color: rgba(0, 0, 0, 0.5);\n position: absolute;\n left: 0;\n right: 0;\n display: flex;\n justify-content: space-between;\n}\n\n.ril__caption {\n bottom: 0;\n max-height: 150px;\n overflow: auto;\n justify-content: center;\n}\n\n.ril__captionContent {\n padding: 10px 20px;\n color: #fff;\n margin: 0 auto;\n}\n\n.ril__toolbar {\n top: 0;\n height: 50px;\n}\n\n.ril__toolbarSide {\n height: 50px;\n margin: 0;\n}\n\n.ril__toolbarLeftSide {\n padding-left: 20px;\n padding-right: 0;\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.ril__toolbarRightSide {\n padding-left: 0;\n padding-right: 20px;\n flex: 0 0 auto;\n}\n\n.ril__toolbarItem {\n display: inline-block;\n line-height: 50px;\n padding: 0;\n color: #fff;\n font-size: 120%;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.ril__toolbarItemChild {\n vertical-align: middle;\n}\n\n.ril__builtinButton {\n width: 40px;\n height: 35px;\n cursor: pointer;\n border: none;\n opacity: 0.7;\n}\n.ril__builtinButton:hover {\n opacity: 1;\n}\n.ril__builtinButton:active {\n outline: none;\n}\n\n.ril__builtinButtonDisabled {\n cursor: default;\n opacity: 0.5;\n}\n.ril__builtinButtonDisabled:hover {\n opacity: 0.5;\n}\n\n.ril__closeButton {\n background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjcyMzk1NTkwMTc0IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEzNjUyIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48cGF0aCBkPSJNNjExLjIgNTEybDMwMC44LTMwMC44YzI4LjgtMjguOCAyOC44LTczLjYgMC05OS4ycy03My42LTI4LjgtOTkuMiAwTDUxMiA0MTIuOCAyMTEuMiAxMTJjLTI4LjgtMjguOC03My42LTI4LjgtOTkuMiAwcy0yOC44IDczLjYgMCA5OS4ybDMwMC44IDMwMC44LTMwMC44IDMwMC44Yy0yOC44IDI4LjgtMjguOCA3My42IDAgOTkuMiAyOC44IDI1LjYgNzMuNiAyOC44IDk5LjIgMGwzMDAuOC0zMDAuOCAzMDAuOCAzMDAuOGMyOC44IDI4LjggNzMuNiAyOC44IDk5LjIgMCAyOC44LTI4LjggMjguOC03My42IDAtOTkuMkw2MTEuMiA1MTJ6IiBmaWxsPSIjZmZmZmZmIiBwLWlkPSIxMzY1MyI+PC9wYXRoPjwvc3ZnPg==)\n no-repeat center;\n}\n\n.ril__zoomInButton {\n background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCI+PGcgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+PHBhdGggZD0iTTEgMTlsNi02Ii8+PHBhdGggZD0iTTkgOGg2Ii8+PHBhdGggZD0iTTEyIDV2NiIvPjwvZz48Y2lyY2xlIGN4PSIxMiIgY3k9IjgiIHI9IjciIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIyIi8+PC9zdmc+')\n no-repeat center;\n}\n\n.ril__zoomOutButton {\n background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCI+PGcgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+PHBhdGggZD0iTTEgMTlsNi02Ii8+PHBhdGggZD0iTTkgOGg2Ii8+PC9nPjxjaXJjbGUgY3g9IjEyIiBjeT0iOCIgcj0iNyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjIiLz48L3N2Zz4=')\n no-repeat center;\n}\n\n.ril__rotateButton {\n background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjcyMzkyNzI4MTMyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEyODc1IiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48cGF0aCBkPSJNMTI0LjggMTYwbDU0LjQgNTEuMkMzNDUuNiAyOC44IDYzMC40IDE2IDgxMi44IDE4Mi40czE5NS4yIDQ1MS4yIDI4LjggNjMzLjYtNDUxLjIgMTk1LjItNjMzLjYgMjguOGMtMzguNC0zNS4yLTczLjYtNzYuOC05Ni0xMjQuOC02LjQtOS42LTkuNi0xNi05LjYtMjguOCAwLTMyIDI1LjYtNTQuNCA1NC40LTU0LjQgMTkuMiAwIDM4LjQgOS42IDU0LjQgMzIgODMuMiAxNjYuNCAyODggMjMwLjQgNDU0LjQgMTQ0czIzMC40LTI5MS4yIDE0NC00NTcuNi0yODgtMjMwLjQtNDU0LjQtMTQ0Yy0zNS4yIDE5LjItNjcuMiA0MS42LTk2IDczLjZsNTEuMiA0NC44YzEyLjggMTIuOCAxNiAzOC40IDMuMiA1MS4yLTYuNCA2LjQtMTYgOS42LTI1LjYgOS42bC0xODIuNCA5LjZjLTE5LjIgMC0zNS4yLTEyLjgtMzguNC0zMkw2NCAxODguOGMtMy4yLTE5LjIgMTIuOC0zNS4yIDMyLTM4LjQgMTIuOC0zLjIgMjIuNCAzLjIgMjguOCA5LjZ6IiBmaWxsPSIjZmZmZmZmIiBwLWlkPSIxMjg3NiI+PC9wYXRoPjwvc3ZnPg==)\n no-repeat center;\n}\n\n.ril__outerAnimating {\n animation-name: closeWindow;\n}\n\n/* .ril_rotateImageButton {\n transform: rotateY(180deg);\n} */\n\n@keyframes pointFade {\n 0%,\n 19.999%,\n 100% {\n opacity: 0;\n }\n 20% {\n opacity: 1;\n }\n}\n\n.ril__loadingCircle {\n width: 60px;\n height: 60px;\n position: relative;\n}\n\n.ril__loadingCirclePoint {\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n top: 0;\n}\n.ril__loadingCirclePoint::before {\n content: '';\n display: block;\n margin: 0 auto;\n width: 11%;\n height: 30%;\n background-color: #fff;\n border-radius: 30%;\n animation: pointFade 800ms infinite ease-in-out both;\n}\n.ril__loadingCirclePoint:nth-of-type(1) {\n transform: rotate(0deg);\n}\n.ril__loadingCirclePoint:nth-of-type(7) {\n transform: rotate(180deg);\n}\n.ril__loadingCirclePoint:nth-of-type(1)::before,\n.ril__loadingCirclePoint:nth-of-type(7)::before {\n animation-delay: -800ms;\n}\n.ril__loadingCirclePoint:nth-of-type(2) {\n transform: rotate(30deg);\n}\n.ril__loadingCirclePoint:nth-of-type(8) {\n transform: rotate(210deg);\n}\n.ril__loadingCirclePoint:nth-of-type(2)::before,\n.ril__loadingCirclePoint:nth-of-type(8)::before {\n animation-delay: -666ms;\n}\n.ril__loadingCirclePoint:nth-of-type(3) {\n transform: rotate(60deg);\n}\n.ril__loadingCirclePoint:nth-of-type(9) {\n transform: rotate(240deg);\n}\n.ril__loadingCirclePoint:nth-of-type(3)::before,\n.ril__loadingCirclePoint:nth-of-type(9)::before {\n animation-delay: -533ms;\n}\n.ril__loadingCirclePoint:nth-of-type(4) {\n transform: rotate(90deg);\n}\n.ril__loadingCirclePoint:nth-of-type(10) {\n transform: rotate(270deg);\n}\n.ril__loadingCirclePoint:nth-of-type(4)::before,\n.ril__loadingCirclePoint:nth-of-type(10)::before {\n animation-delay: -400ms;\n}\n.ril__loadingCirclePoint:nth-of-type(5) {\n transform: rotate(120deg);\n}\n.ril__loadingCirclePoint:nth-of-type(11) {\n transform: rotate(300deg);\n}\n.ril__loadingCirclePoint:nth-of-type(5)::before,\n.ril__loadingCirclePoint:nth-of-type(11)::before {\n animation-delay: -266ms;\n}\n.ril__loadingCirclePoint:nth-of-type(6) {\n transform: rotate(150deg);\n}\n.ril__loadingCirclePoint:nth-of-type(12) {\n transform: rotate(330deg);\n}\n.ril__loadingCirclePoint:nth-of-type(6)::before,\n.ril__loadingCirclePoint:nth-of-type(12)::before {\n animation-delay: -133ms;\n}\n.ril__loadingCirclePoint:nth-of-type(7) {\n transform: rotate(180deg);\n}\n.ril__loadingCirclePoint:nth-of-type(13) {\n transform: rotate(360deg);\n}\n.ril__loadingCirclePoint:nth-of-type(7)::before,\n.ril__loadingCirclePoint:nth-of-type(13)::before {\n animation-delay: 0ms;\n}\n\n.ril__loadingContainer {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n.ril__imagePrev .ril__loadingContainer,\n.ril__imageNext .ril__loadingContainer {\n display: none;\n}\n\n.ril__errorContainer {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #fff;\n}\n.ril__imagePrev .ril__errorContainer,\n.ril__imageNext .ril__errorContainer {\n display: none;\n}\n\n.ril__loadingContainer__icon {\n color: #fff;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translateX(-50%) translateY(-50%);\n}\n",".sf-image-wrapper {\n position: relative;\n display: inline-block;\n max-width: 100%;\n padding: 1px;\n}\n\n.sf-image-wrapper .sf-image.selected {\n box-shadow: 0 0 0 2px #007bff;\n}\n\n.sf-image-wrapper .resizer {\n width: 10px;\n height: 10px;\n position: absolute;\n right: -5px;\n bottom: -5px;\n background-color: #007bff;\n border: 1px solid #fff;\n cursor: se-resize;\n}\n\n.sf-image-wrapper .full-screen {\n position: absolute;\n height: 26px;\n display: inline-block;\n width: 26px;\n top: 0;\n right: -32px;\n text-align: center;\n line-height: 20px;\n padding: 2px;\n box-shadow: 0 2px 5px 0 #0003;\n border-radius: 3px;\n border: 1px solid #0028641f;\n background-color: #fff;\n user-select: none !important;\n z-index: 1000;\n}\n\n.sf-image-wrapper .full-screen:hover {\n display: block;\n background-color: #efefef;\n}\n\n.sf-image-wrapper .image-size-info-tooltip {\n display: inline-block;\n padding: 5px;\n white-space: nowrap;\n height: 22px;\n position: absolute;\n bottom: -25px;\n left: 100%;\n z-index: 1;\n transform: translateX(5px);\n border-radius: 3px;\n line-height: 12px;\n color: #fff;\n background-color: #4c4c4c;\n font-size: 12px;\n}\n",".permission-editor-explanation {\n user-select: none;\n padding-left: 10px;\n color: #9c9c9c;\n font-size: 12px;\n word-break: keep-all;\n word-wrap: break-word;\n white-space: pre-wrap;\n}\n.permission-editor .permission-editor__option {\n padding-top: 2px;\n padding-bottom: 2px;\n}\n.permission-editor .permission-editor__control .permission-editor-explanation {\n display: none;\n}\n\n.cur-view-content .permission-editor-select .permission-editor__control,\n.cur-view-content .permission-editor-select .permission-editor__control div,\n.cur-view-content .permission-editor-select .permission-editor__control .permission-editor__input,\n.cur-view-content .permission-editor-select .permission-editor__indicators {\n height: 1.5rem;\n min-height: 1.5rem;\n}\n\n.cur-view-content .permission-editor-select .permission-editor__value-container div:nth-child(2) {\n margin: 0;\n padding: 0;\n}\n\n.cur-view-content .permission-editor-select .permission-editor__indicators .permission-editor__indicator {\n padding: 0 0.5rem;\n}\n\n.permission-editor__menu .permission-editor__option--is-disabled {\n color: #9c9c9c;\n border-top: 1px solid #dedede;\n}\n\n.permission-editor__menu .permission-editor__option--is-disabled:hover {\n background-color: #f0f0f0 !important;\n color: #9c9c9c !important;\n}\n\n.permission-editor-btn-add-custom-permission {\n display: flex;\n align-items: center;\n padding: .5rem 0;\n font-size: 12px;\n line-height: 13px;\n}\n\n.permission-editor-btn-add-custom-permission .fa {\n font-size: 12px;\n line-height: 13px;\n margin-right: .25rem;\n}\n\n.share-dialog-main .permission-editor .permission-editor__placeholder,\n.share-dialog-main .true__menu,\n.share-dialog-main .true__placeholder,\n.permission-editor .btn-add-custom-permission span {\n word-break: keep-all;\n}\n",".sf-virtual-link {\n color: #eb8205;\n}\n\n.sf-virtual-link:hover {\n text-decoration: underline;\n text-underline-position: under;\n}\n\n.sf-virtual-link.selected {\n background-color: #e5e5e5;\n}\n\n.sf-link-op-menu {\n height: 36px;\n padding: 7px 8px;\n display: flex;\n position: absolute;\n background-color: #fff;\n border: 1px solid #e5e5e5;\n border-radius: 3px;\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);\n z-index: 1000;\n}\n\n.sf-link-op-menu-link {\n font-size: 12px;\n color: #212529;\n padding: 0 5px;\n border-right: 1p solid #f1f1f1;\n line-height: 20px;\n}\n\n.sf-link-op-menu-link:hover {\n color: #212529;\n text-decoration: none;\n background: #f1f1f1;\n cursor: pointer;\n}\n\n.sf-link-op-icons {\n margin-left: 8px;\n border-left: 1px solid #e5e5e5;\n}\n\n.sf-link-op-icon {\n padding: 4px;\n border-radius: 2px;\n margin-left: 8px;\n display: flex;\n align-items: center;\n color: #444;\n}\n\n.sf-link-op-icon .iconfont {\n font-size: 12px;\n}\n\n.sf-link-op-icon:hover {\n background: #f2f2f2;\n}\n",".sf-code-block-container {\n position: relative;\n margin: 0 0 20px;\n padding: 0;\n border-radius: 4px;\n overflow: hidden;\n background: #f5f7fa;\n}\n\n.sf-lang-selector {\n position: absolute;\n top: 0;\n right: 0;\n display: flex;\n padding: 2px 5px;\n width: max-content;\n border: none;\n border-radius: 3px;\n appearance: none;\n align-items: center;\n line-height: 1;\n font-size: 12px;\n background: #eeeeee;\n cursor: pointer;\n transition: all 0.3s;\n outline: none;\n}\n",".sf-list-line {\n display: flex;\n flex-direction: column;\n margin: 0 !important;\n padding-inline-start: 24px;\n}\n",".sf-table-menu-item {\n position: relative;\n}\n\n.sf-table-size-selector-card {\n position: absolute;\n z-index: 1;\n top: 30px;\n padding: 12px;\n background-color: #fff;\n\n}\n\n.sf-table-size-selector-card .sf-table-grid-info {\n margin-bottom: 5px;\n width: 100%;\n text-align: center;\n}\n\n.sf-table-size-selector-card .sf-table-selector-cell {\n height: 15px;\n width: 20px;\n border: 1px solid #ccc;\n}\n\n.sf-table-size-selector-card .sf-table-row {\n display: flex;\n}\n\n.sf-table-size-selector-card .sf-table-selector-cell.selected {\n background-color: #ffa94d;\n}\n",".sf-table-container td {\n position: relative;\n}\n\n.sf-table-container .selected-cell {\n caret-color: transparent;\n background-color: #fff4e6;\n}\n\n.sf-table-container .selected-cell-top:before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n margin: -1px;\n border-top: 1px double #ffa94d;\n z-index: 2;\n}\n\n.sf-table-container .selected-cell-bottom:before {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n margin: -1px;\n border-bottom: 1px double #ffa94d;\n z-index: 2;\n}\n\n.sf-table-container .selected-cell-left:before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n margin: -1px;\n border-left: 1px double #ffa94d;\n z-index: 2;\n}\n\n.sf-table-container .selected-cell-right:before {\n content: \"\";\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n margin: -1px;\n border-right: 1px double #ffa94d;\n z-index: 2;\n}\n\n.sf-context-menu {\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n /* float: left; */\n z-index: 1000;\n flex-direction: column;\n border: 1px solid rgba(0, 40, 100, 0.12);\n border-radius: 3px;\n background-color: #fff;\n}\n\n.sf-context-menu .sf-context-menu-item {\n display: flex;\n clear: both;\n padding: 0.25rem 1.5rem;\n border: none;\n white-space: nowrap;\n color: #212529;\n background-color: #fff;\n}\n\n.sf-context-menu .sf-context-menu-item:hover,\n.sf-context-menu .sf-context-menu-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.sf-context-menu .sf-divider {\n width: 100%;\n height: 1px;\n margin: 5px 0;\n color: #eee;\n cursor: default;\n}\n",".seafile-multicolor-icon {\n width: 1em; \n height: 1em;\n fill: currentColor;\n overflow: hidden;\n}\n\n.seafile-multicolor-icon-monitor {\n font-size: 14px;\n fill: #444;\n color: #bdbdbd;\n}\n",".ai-search-refrences {\n margin-top: 10px;\n}\n\n.ai-search-refrences .ai-search-refrences-title {\n margin-bottom: 6px;\n}\n\n.ai-search-refrences .ai-search-refrences-container {\n display: flex;\n}\n\n.ai-search-refrences .ai-search-refrences-container .ai-search-refrences-detail {\n border: 1px solid #ccc;\n max-width: 200px;\n margin-right: 8px;\n padding: 4px 8px;\n border-radius: 3px;\n}\n\n.ai-search-refrences .ai-search-refrences-detail:hover {\n cursor: pointer;\n background-color: rgb(245, 245, 245);\n}\n",".ai-search-help {\n padding: 20px 0 20px 0;\n border-bottom: 1px solid rgba(0, 40, 100, 0.12);\n}\n\n.ai-search-help .ai-search-help-title {\n margin-bottom: 10px;\n}\n\n.ai-search-help .ai-search-help-container {\n display: flex;\n}\n\n.ai-search-help .ai-search-help-container .ai-search-help-detail {\n border: 1px solid #ccc;\n max-width: 200px;\n margin-right: 8px;\n padding: 4px 8px;\n border-radius: 3px;\n}\n\n.ai-search-help .ai-search-help-detail:hover {\n cursor: pointer;\n background-color: rgb(245, 245, 245);\n}\n",".search-container.show.ai-search-ask {\n width: 800px;\n}\n\n.ai-search-ask .ai-search-ask-header {\n display: flex;\n align-items: center;\n padding: 1rem;\n border-bottom: 1px solid rgba(0, 40, 100, 0.12);\n}\n\n.ai-search-ask .ai-search-ask-header .ai-search-ask-return {\n padding: 0 4px;\n transform: rotate(180deg);\n line-height: 10px;\n cursor: pointer;\n}\n\n.ai-search-ask .ai-search-ask-header .ai-search-ask-return .seafile-multicolor-icon-arrow {\n opacity: 0.6;\n}\n\n.ai-search-ask .ai-search-ask-header .ai-search-ask-return:hover .seafile-multicolor-icon-arrow {\n opacity: 0.8;\n}\n\n.ai-search-ask .ai-search-ask-body {\n display: flex;\n max-height: 400px;\n overflow-y: auto;\n}\n\n.ai-search-ask .ai-search-ask-body .ai-search-ask-body-left {\n flex-shrink: 0;\n margin-right: 1rem;\n}\n\n.ai-search-ask .ai-search-ask-body .ai-search-ask-body-right {\n line-height: 1.8;\n font-size: 14px;\n width: 100%;\n}\n\n.ai-search-ask .ai-search-ask-footer {\n border-top: 1px solid rgba(0, 40, 100, 0.12);\n margin: 0 1rem;\n padding: 1rem 0;\n}\n\n.ai-search-ask .ai-search-ask-footer .ai-search-ask-footer-btn {\n width: 16px;\n height: 16px;\n position: absolute;\n right: 8px;\n top: 8px;\n background-color: #fff;\n cursor: pointer;\n}\n\n.ai-search-ask .ai-search-ask-footer .ai-search-ask-footer-btn .seafile-multicolor-icon-send {\n color: #ff8000;\n}\n\n.ai-search-ask .ai-search-ask-footer .ai-search-ask-footer-btn:hover .seafile-multicolor-icon-send {\n color: #d96d00;\n}\n\n@media (max-width: 768px) {\n\n .search-container.show.ai-search-ask {\n width: 100%;\n }\n\n .ai-search-ask .search-input {\n box-shadow: none;\n width: 100% !important;\n }\n\n}\n",".top-search-file-icon {\n color: #999;\n font-size: 20px;\n align-self: center;\n font-weight: 800;\n cursor: pointer;\n}\n",".notification-wrapper .popover {\n max-width: 300px;\n}\n\n.notification-container {\n position: absolute;\n background: #fff;\n width: 320px;\n right: -10px;\n top: -1px;\n border-radius: 3px;\n box-shadow: 0 0 5px #ccc;\n}\n\n.notification-container .notification-header {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 50px;\n border-bottom: 1px solid #ededed;\n font-size: 16px;\n font-weight: 600;\n position: relative;\n}\n\n.notification-container .notification-header .notification-close-icon {\n position: absolute;\n right: 14px;\n height: 24px;\n width: 24px;\n text-align: center;\n cursor: pointer;\n color: #000;\n opacity: 0.5;\n font-weight: 700;\n}\n\n.notification-container .notification-header .notification-close-icon:hover {\n opacity: 0.75;\n}\n\n.notification-container .notification-body {\n padding: 0;\n}\n\n.notification-container .notification-body .show-weixin-qrcode {\n cursor: pointer;\n border-bottom: 1px solid #ededed;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding-left: 10px;\n}\n\n.show-weixin-qrcode .weixin-icon {\n color: #999;\n font-size: 20px;\n margin-left: 20px;\n}\n\n.notification-container .notification-body .mark-notifications {\n color: #b4b4b4;\n cursor: pointer;\n border-bottom: 1px solid #ededed;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding-right: 1rem;\n}\n\n.notification-container .notification-body .mark-notifications:hover {\n text-decoration: underline;\n}\n\n.notification-body .notification-list-container {\n max-height: 260px;\n overflow: auto;\n}\n\n.notification-list-container .notification-item {\n padding: 14px 16px 14px 10px;\n border-bottom: 1px solid #ededed;\n position: relative;\n cursor: pointer;\n}\n\n.notification-list-container .notification-item:last-child {\n border-bottom: none;\n}\n\n.notification-list-container .notification-item:hover {\n background: #f5f5f5;\n}\n\n.notification-list-container .notification-item .notification-item-header {\n display: flex;\n align-items: center\n}\n\n.notification-list-container .notification-item .notification-point {\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: red;\n margin-right: 12px;\n position: absolute;\n}\n\n.notification-list-container .notification-item .notification-header-info {\n display: flex;\n justify-content: space-between;\n flex: 1;\n margin-left: 20px;\n width: calc(100% - 20px);\n}\n\n.notification-user-detail {\n display: flex;\n width: 65%;\n}\n\n.notification-user-detail img {\n margin-top: 3px;\n}\n\n.notification-user-name {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n font-weight: 500;\n}\n\n.notification-item .notification-header-info .notification-time {\n color: #b4b4b4;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n font-size: 13px;\n}\n\n.notification-list-container .notification-item .notification-content-wrapper {\n font-size: 13px;\n}\n\n.notification-item .notification-content-quotes {\n width: 8px;\n}\n\n.notification-list-container .notification-item .notification-comment-content {\n max-width: calc(100% - 16px);\n}\n\n.notification-list-container .notification-item .notification-comment-content p {\n display: inline-block;\n letter-spacing: 1px;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n margin-bottom: 0;\n}\n\n.notification-list-container .notification-item .notification-comment-content p img {\n max-width: 70%;\n height: auto;\n max-height: 60px;\n}\n\n.notification-body .notification-footer {\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #f9f9f9;\n cursor: pointer;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n border-top: 1px solid #ededed;\n}\n\n.notification-body .notification-footer:hover {\n text-decoration: underline;\n}\n","/* formula */\n.sf-selected-formula {\n display: block;\n user-select: none;\n outline: 2px solid #007bff;\n cursor: pointer;\n}\n\n.sf-selected-formula .MathJax {\n margin: 0;\n}\n\n.formula-dialog-wrapper .form-check-label {\n margin-bottom: 4px;\n}\n\n.formula-dialog-wrapper .formula-preview {\n padding: 10px;\n border: 2px dashed #ebebeb;\n min-height: 40px;\n overflow-x: auto;\n}\n","\n/* begin toobar-container */\n.cur-view-toolbar {\n position: relative;\n display: flex;\n flex: 1;\n align-items: center;\n height: 32px;\n}\n\n.border-left-show:before {\n position: absolute;\n top: 10px;\n left: -1px;\n width: 1px;\n height: 30px;\n content: '';\n background-color: #ddd;\n}\n\n/* end toolbar-container */\n\n/* file-operation toolbar eg: edit, upload, new, share*/\n.operation-item {\n padding: 0 0.5rem;\n margin-right: 0.25rem;\n height: 30px;\n min-width: 55px;\n background-color: #fff;\n line-height: 29px;\n font-weight: normal;\n border: 1px solid #ccc;\n border-radius: 2px;\n}\n\n.group-operations {\n margin-right: 0.25rem;\n}\n\n.group-operations .group-op-item {\n padding: 0 0.5rem;\n height: 30px;\n min-width: 46px;\n background-color: #fff;\n line-height: 29px;\n font-weight: normal;\n border: 1px solid #ccc;\n border-radius: 2px;\n font-size: 1.125rem;\n}\n/* end file-operation toolbar */\n\n/* begin view-mode toolbar */\n.detail-btn button,\n.sf-view-mode-btn {\n padding: 0;\n height: 30px;\n min-width: 2rem;\n color: #aaa;\n background-color: #fff;\n border: 1px solid #ccc;\n line-height: 29px;\n font-size: 18px;\n border-radius: 2px;\n}\n\n.detail-btn button {\n font-size: 15px;\n padding-top: 1px;\n}\n\n.sf-view-mode-btn.current-mode {\n background-color: #ccc !important;\n color: #fff !important;\n}\n/* end view-mode toolbar */\n\n/* begin common-toolbar */\n.common-toolbar {\n display: flex;\n margin-left: auto;\n align-items: center;\n}\n\n.common-toolbar > div{\n margin-left: .5rem;\n}\n\n.common-toolbar .logout-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n margin-left: 8px;\n text-decoration: none;\n color: #ccc;\n}\n/* end common-toolbar */\n\n/* begin path toolbar */\n.path-toolbar {\n list-style: none;\n}\n\n.path-toolbar .toolbar-item {\n display: inline-block;\n text-align: center;\n margin-left: 0.75rem;\n}\n\n.path-toolbar .toolbar-item a {\n color:#8a8a8a;\n font-size:22px;\n}\n\n\n.path-toolbar .toolbar-item a:hover {\n color:#eb8205;\n text-decoration:none;\n}\n/* end path toolbar */\n\n@media (max-width: 767px) {\n .border-left-show:before {\n width: 0;\n }\n}\n",".search-mask {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.2);\n z-index: 1;\n}\n\n.search-container {\n position: relative;\n z-index: 2;\n}\n\n.search-container.show {\n display: flex;\n flex-direction: column;\n position: absolute;\n top: 10px;\n right: 110px;\n min-height: 200px;\n border-radius: 3px;\n box-shadow: 0 3px 8px 0 rgba(116,129,141,.1);\n background-color: #fff;\n cursor: default;\n overflow: hidden;\n width: 600px;\n padding: 1rem 0rem 0rem 1rem;\n}\n\n.search-icon-left {\n display: flex;\n}\n\n.search-icon-right {\n display: flex;\n cursor: pointer;\n pointer-events: all;\n font-style: normal;\n min-width: 25px;\n color: #999;\n}\n\n.search-icon-right:hover {\n color: #333;\n text-decoration: none;\n}\n\n.search-icon-arrow {\n right: 40px;\n left: auto;\n}\n\n.search-input {\n height: 1.875rem;\n width: 15rem;\n font-size: .875rem;\n}\n\n.search-container.show .search-input {\n height: 38px;\n}\n\n.search-result-container {\n position: absolute;\n top: 2rem;\n left: 0;\n width: 100%;\n background-color: #fff;\n border-radius: 0 0 3px 3px;\n box-shadow: 0 3px 8px 0 rgba(116, 129, 141, 0.1);\n top: 60px;\n}\n\n.dropdown-search-result-container {\n max-height: 300px;\n overflow: auto;\n position: relative;\n top: 0;\n box-shadow: none;\n display: flex;\n flex-direction: column;\n}\n\n.dropdown-search-result-container .seahub-switch .custom-switch {\n padding-left: 0;\n}\n\n.search-result-container .search-result-none {\n text-align: center;\n line-height: 4rem;\n}\n\n.search-result-container .search-result-list {\n margin: 4px 0;\n padding: 0;\n list-style: none;\n}\n\n\n.search-result-container .search-result-list-container {\n overflow: auto;\n flex: 1;\n}\n\n.search-result-container .search-result-item {\n display: flex;\n padding: 10px 0 10px 8px;\n font-size: 0.8125rem;\n cursor: pointer;\n margin-right: 1rem;\n border-radius: 4px;\n}\n\n.search-result-container .search-result-item:hover,\n.search-result-container .search-result-item.search-result-item-highlight {\n background-color: #f0f0f0;\n}\n\n.search-result-item .item-img {\n width: 36px;\n height: 36px;\n}\n.search-result-item .lib-item-img {\n width: 36px;\n height: 36px;\n padding: 4px;\n}\n.search-result-item .item-content {\n flex: 1;\n margin-left: 0.25rem;\n overflow-x: hidden;\n}\n.item-content .item-name a {\n color: #EA8102 !important;\n}\n.item-content .item-link {\n color: #7d7d7d;\n margin: 0;\n}\n.item-content .item-text {\n margin: 0;\n}\n.item-content .item-text b {\n font-weight: bold;\n}\n.search-result-container .item-content .item-text {\n padding: 0;\n font-size: 0.8125rem;\n line-height: 1.5;\n}\n\n.main-panel-south {\n flex: auto;\n overflow: auto;\n height: calc(100% - 50px);\n}\n.search-page {\n margin: 30px auto;\n width: 65%;\n}\n.search-page .search-result-container {\n border-radius: 0;\n box-shadow: none;\n padding: 1.25rem 1rem;\n}\n.search-page .search-page-container {\n padding: 1.25rem 1rem;\n background: #f7f7f8;\n}\n.search-page .search-page-container .search-input {\n padding-left: 0.5rem;\n width: 30rem;\n}\n.search-page .search-page-container .fa-angle-double-up,\n.search-page .search-page-container .fa-angle-double-down {\n font-size: 1rem;\n}\n.search-page .advanced-search .search-file-types .search-input {\n padding-left: 0.5rem;\n width: 30rem;\n max-width: 100%;\n}\n.search-page .search-page-container .search-icon-right {\n left: 28rem;\n}\n.search-page .paginator {\n text-align: center;\n margin: 1rem 0;\n}\n.search-page .advanced-search, .search-page .search-filters {\n color: #747474;\n}\n.search-page .search-filters {\n padding-top: 10px;\n}\n.search-page .advanced-search .search-repo, \n.search-page .advanced-search .search-file-types {\n padding: 5px 0;\n}\n.search-file-types .search-file-types-form {\n top: 10px;\n}\n.search-page .advanced-search .search-catalog {\n border-top: 1px dashed #e2e2e2;\n padding: 10px 0;\n}\n.search-page .advanced-search .search-catalog:first-child {\n border: none;\n}\n.search-page .custom-checkbox .custom-control-input:checked ~ .custom-control-label::before {\n background-color: #3B88FD;\n}\n.search-date .ant-input {\n height: 2.375rem;\n padding: 0.375rem 0.75rem;\n line-height: 1.6;\n border: 1px solid rgba(0, 40, 100, 0.12);\n border-radius: 3px;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.search-date .select-data-icon {\n position: absolute;\n right: 1.5rem;\n top: 0.5rem;\n color: #b2b2b2;\n}\n.search-page .search-result-container .search-result-item {\n padding: 0;\n margin-bottom: 1rem;\n}\n.search-page .search-result-container .search-result-item:hover {\n background-color: inherit;\n}\n.search-page .search-result-item .item-content {\n margin-left: 0.8rem;\n}\n.search-page .search-result-item .item-content .item-link a {\n color: #8b8b8b !important;\n}\n.search-page .search-result-container .search-result-item {\n cursor: default;\n}\n.rc-calendar tbody tr {\n height: 1.75rem;\n}\n\n@media (max-width: 767px) {\n .common-toolbar .search {\n margin: 0;\n }\n \n .search-icon-container {\n display: flex;\n width: 2rem;\n align-items: center;\n justify-content: center;\n }\n\n .search-icon {\n font-size: 1.25rem;\n line-height: 1;\n color: #999;\n }\n\n .search-container {\n position: fixed;\n z-index: 2;\n top: 5rem;\n left: 0;\n right: 0;\n display: flex;\n justify-content: center;\n }\n\n .search-input {\n height: 2.5rem;\n width: 20rem !important;\n box-shadow: 5px 5px 5px #888888;\n }\n\n .search-result-container {\n position: absolute;\n top: 2.5rem;\n left: auto;\n width: 20rem;\n }\n\n .search-page {\n margin: 0;\n width: 100%;\n height: 100%;\n }\n\n .search-page .search-page-container .search-input {\n box-shadow: none;\n width: 95% !important;\n }\n\n .search-page .search-page-container .search-icon-right {\n left: 85%;\n }\n\n .search-page .search-result-container {\n top: 0;\n left: 0;\n width: 100%;\n }\n}\n\n.search-result-container .search-mode-container {\n display: flex;\n align-items: center;\n height: 40px;\n border-bottom: 1px solid #ddd;\n padding: 0 12px;\n margin-right: 16px;\n}\n\n.search-result-container .search-mode-item {\n display: flex;\n align-items: center;\n height: 40px;\n line-height: 40px;\n margin-right: 30px;\n font-size: 14px;\n cursor: pointer;\n border-bottom: 2px solid transparent;\n user-select: none;\n}\n\n.search-result-container .search-mode-item.search-mode-active {\n color: #ff8001;\n border-bottom-color: #ff8001;\n}\n\n.search-result-container .search-mode-similarity-index-status {\n height: 64px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.search-result-container .search-mode-similarity-index-status.index-status-uncreated {\n cursor: pointer;\n}\n\n.visited-search-results-title {\n color: #999;\n font-size: .875rem;\n font-weight: normal;\n margin: 7px 0 10px;\n}\n",".notification-list-dialog {\n width: 720px;\n max-width: 720px;\n height: calc(100% - 56px);\n}\n\n.notification-list-dialog .notification-list-content {\n height: 100%;\n}\n\n.notification-header-close {\n display: flex;\n}\n\n.notification-header-close .notification-dropdown-toggle {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 24px;\n width: 24px\n}\n\n.notification-header-close .item-dropdown-icon,\n.notification-header-close .notification-close-icon {\n height: 24px;\n width: 24px;\n cursor: pointer;\n color: #000;\n opacity: 0.5;\n}\n\n.notification-header-close .notification-close-icon:hover,\n.notification-header-close .item-dropdown-icon:hover {\n color: #000;\n opacity: 0.75;\n}\n\n/* The icon \"...\" do not need to be bold */\n.notification-header-close .item-dropdown-icon {\n font-weight: 400;\n}\n\n/* The icon 'x' needs to be bold */\n.notification-header-close .notification-close-icon {\n font-weight: 700;\n}\n\n.notification-header-close .dropdown-menu {\n min-width: 8rem;\n box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);\n}\n\n.notification-header-close .dtable-dropdown-menu.large.dropdown-menu .dropdown-item {\n padding: 0.25rem 1.5rem;\n min-height: unset;\n}\n\n.notification-list-content .notification-modal-body {\n height: 100%;\n overflow: hidden;\n padding: 0;\n}\n\n.notification-modal-body .notification-dialog-body {\n overflow: auto;\n padding: 2rem 1rem;\n height: 100%;\n}\n\n.notification-dialog-body table {\n width: 100%;\n table-layout: fixed;\n overflow-y: auto;\n}\n\n.notification-modal-body .notification-dialog-body .paginator {\n height: 38px;\n}\n\n.notification-dialog-body table thead tr {\n height: 2.1875rem;\n}\n\n.notification-dialog-body table th {\n padding: 0.3125rem 0.1875rem;\n border-bottom: 1px solid #eee;\n text-align: left;\n font-weight: normal;\n line-height: 1.6;\n color: #9c9c9c;\n}\n\n.notification-dialog-body table tbody tr:hover {\n background: #f5f5f5;\n cursor: pointer;\n}\n\n.notification-dialog-body table td {\n padding: 0.5rem 0.1875rem;\n border-bottom: 1px solid #eee;\n color: #333;\n font-size: 14px;\n word-break: break-all;\n}\n\n.wechat-dialog-body {\n display: flex;\n justify-content: center;\n padding: 3rem;\n flex-direction: column;\n align-items: center;\n}\n\n.wechat-dialog-message {\n width: 100%;\n display: flex;\n justify-content: center;\n flex-direction: column;\n align-items: center;\n margin-top: 1rem;\n color: #666;\n font-size: 14px;\n}\n\n.notification-dialog-body .empty-tip {\n margin: 5.5em 1em;\n border-radius: 3px;\n padding: 30px;\n background-color: #fff;\n text-align: center;\n}\n\n.notification-dialog-body .empty-tip .no-items-img-tip {\n width: 100px;\n height: 100px;\n}\n\n@media (min-width: 768px) {\n .notification-dialog-body .empty-tip {\n padding: 30px 80px;\n }\n}\n","#notifications {\n position: relative;\n width: 32px;\n}\n\n#notice-icon {\n position: relative;\n display: block;\n}\n\n@media (max-width: 390px) {\n #notifications {\n margin-left: 8px;\n }\n}\n\n#notifications .title {\n line-height: 1.5;\n font-size: 1rem;\n color: #322;\n font-weight: normal;\n}\n\n#notifications .sf2-icon-bell {\n font-size: 24px;\n line-height: 1;\n color: #999;\n vertical-align: middle;\n}\n\n#notifications .num {\n position: absolute;\n top: -3px;\n left: 12px;\n padding: 0 2px;\n min-width: 16px;\n height: 16px;\n color: #fff;\n font-size: 9px;\n line-height: 16px;\n text-align: center;\n background: #fc6440;\n border-radius: 100%;\n}\n\n#notice-popover {\n top: 38px;\n right: -12px;\n}\n\n#notice-popover .outer-caret {\n right: 18px;\n}\n\n#notice-popover a {\n font-weight: normal;\n}\n\n#notice-popover li {\n padding: 9px 0 3px;\n border-bottom: 1px solid #dfdfe1;\n}\n\n#notice-popover li.unread {\n padding-right: 10px;\n padding-left: 10px;\n border-left: 2px solid #feac74;\n}\n\n#notice-popover li.read {\n padding-right: 10px;\n padding-left: 10px;\n border-left: 2px solid transparent;\n}\n\n#notice-popover li:hover {\n background: #f5f5f7;\n}\n\n#notice-popover li.read:hover {\n background: #f5f5f7;\n border-left: 2px solid #dfdfe1;\n}\n\n#notice-popover .avatar {\n border-radius: 1000px;\n float: left;\n}\n\n#notice-popover .brief {\n margin-left: 40px;\n margin-bottom: 1rem;\n font-size: 0.8125rem;\n line-height: 1.5rem;\n}\n\n#notice-popover .time {\n margin: 0;\n color: #999;\n text-align: right;\n font-size: 0.8125rem;\n line-height: 1.5rem;\n clear: both;\n}\n\n#notice-popover .view-all {\n display: block;\n padding: 7px 0;\n text-align: center;\n color: #a4a4a4;\n}\n\n#notice-popover .sf-popover-close {\n position: absolute;\n right: 10px;\n top: 17px;\n}\n\n#notice-popover .sf-popover-hd {\n border-bottom: 1px solid #dfdfe1;\n margin: 0 10px;\n}\n\n#notice-popover .sf-popover-con {\n max-height: 25rem;\n}\n",".keyboard-shortcut-dialog {\n max-width: 500px;\n}\n\n.keyboard-shortcut-dialog .modal-body {\n max-height: 390px;\n overflow: auto;\n}\n\n.keyboard-shortcut-container {\n line-height: 1.5;\n border-radius: 3px;\n padding-top: .5rem;\n padding-bottom: .5rem;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n margin-top: 3px;\n background-color: rgb(248, 248, 248);\n}\n\n.keyboard-shortcut-title {\n font-size: 0.9rem;\n}\n\n.keyboard-shortcut-container>div:first-child {\n text-align: right;\n}\n\n.keyboard-shortcut-container>div:last-child {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n\n.keyboard-shortcut {\n display: inline-block;\n}\n\n.keyboard-shortcut kbd {\n font: inherit;\n background-color: hsla(0,0%,100%,0.25);\n border-color: rgba(0,0,0,0.1);\n text-transform: uppercase;\n text-align: center;\n border-radius: 3px;\n color: #333333;\n box-sizing: border-box;\n border-style: solid;\n border-width: 1px;\n display: inline-block;\n border-bottom-width: 2px;\n font-size: 12px;\n margin-left: 1px;\n margin-right: 1px;\n margin-bottom: 0px;\n min-width: 12px;\n padding: 1px 3px;\n}\n",".sf-slate-editor-toolbar {\n background-color: #fcfcfc !important;\n}\n\n.sf-slate-editor-toolbar .sf-slate-article-info-control {\n position: absolute;\n right: 20px;\n height: 30px;\n width: 30px;\n line-height: 30px;\n display: flex;\n justify-content: center;\n cursor: pointer;\n color: #555;\n}\n\n.sf-slate-editor-toolbar .sf-slate-article-info-control:hover {\n background-color: #e5e5e5;\n}\n\n.sf-slate-editor-toolbar .sf-slate-help-info-control {\n position: absolute;\n right: 20px;\n height: 30px;\n width: 30px;\n line-height: 30px;\n display: flex;\n justify-content: center;\n cursor: pointer;\n color: #555;\n}\n\n.sf-slate-editor-toolbar .sf-slate-help-info-control > span:hover {\n cursor: pointer;\n color: #333;\n}\n\n.sf-slate-editor-toolbar .sf-slate-article-info-control .iconfont {\n font-size: 13px;\n}\n",".sf-single-selector .cur-option {\n cursor: pointer;\n}\n\n.sf-single-selector .cur-option .toggle-icon {\n color: #999;\n}\n\n.sf-single-selector .options-container {\n min-width: 165px;\n background: #fff;\n border: 1px solid #e8e8e8;\n z-index: 2;\n}\n\n.sf-single-selector .option-list {\n min-height: 4rem;\n max-height: 200px;\n}\n\n.sf-single-selector .option-item {\n cursor: pointer;\n}\n\n.sf-single-selector .option-item:hover {\n background: #f5f5f5;\n}\n\n.sf-single-selector .option-item-text {\n font-size: 14px;\n}\n",".btn-qr-code-icon {\n font-size: 1.5rem;\n line-height: 1;\n font-weight: normal;\n padding: 0.375rem;\n}\n","\n.sf-editor-helper {\n height: 100%;\n flex: 1 0 350px;\n background-color: #fff;\n overflow-y: auto;\n overflow-x: hidden;\n border-left: 1px solid #eee;\n}\n\n.sf-editor-helper__header {\n height: 50px;\n background-color: rgb(250,250,249);\n display: flex;\n justify-content: space-between;\n padding: 0 10px;\n box-sizing: border-box;\n border-bottom: 1px solid #eee;\n line-height: 50px;\n font-size: 1rem;\n}\n\n.sf-editor-helper__header .title {\n font-weight: bolder;\n margin-bottom: 0;\n}\n\n.sf-editor-helper__header .help-close {\n cursor: pointer;\n}\n\n.sf-editor-helper__content {\n height: calc(100% - 50px);\n overflow-y: auto;\n padding: 0 15px;\n box-sizing: border-box;\n font-size: 0.8rem;\n}\n\n.sf-editor-helper .sf-editor-classify-hotkeys {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n color: #2c2d30;\n /* border-bottom: 1px solid #eee; */\n /* padding: 10px 0; */\n}\n\n.sf-editor-helper .sf-editor-classify-hotkeys .hotkey-type {\n border-bottom: 1px solid #eee;\n line-height: 2;\n font-weight: bolder;\n margin: 10px 0 0 0;\n}\n\n.sf-editor-helper .sf-editor-classify-hotkeys .hotkey-list {\n list-style: none;\n padding: 0;\n}\n\n.sf-editor-helper .sf-editor-classify-hotkeys .hotkey-shortcuts {\n display: flex;\n justify-content: space-between;\n padding: 10px 0;\n border-bottom: 1px solid #eee;\n color: #2c2d30;\n}\n\n.sf-editor-helper .sf-editor-classify-hotkeys .hotkey-shortcuts-left {\n word-break: break-all;\n line-height: 30px;\n}\n\n.sf-editor-helper .sf-editor-classify-hotkeys .hotkey-shortcuts-right {\n min-width: max-content;\n}\n\n.sf-editor-helper .sf-editor-classify-hotkeys .hotkey-shortcuts-right .key {\n display: inline-block;\n border-radius: 3px;\n background-color: #e8e8e8;\n border: 1px solid #919191;\n box-shadow: 0 1px 0 #919193;\n padding: 3px 5px;\n margin-left: 5px;\n height: 30px;\n line-height: 20px;\n}\n\n/* .sf-editor-helper .sf-editor-classify-hotkeys .hotkey-shortcuts-right:not(:first-child) {\n margin-top: 10px;\n} */\n"," /* to overwrite styles from seahub_react.css */\n.rc-calendar-table {\n table-layout: auto;\n}\n.rc-calendar-table tbody tr {\n height: auto;\n}\n\n/* overwrite some styles */\n/* for 'markdown file view -> share -> picker' */\n.rc-calendar-input:focus {\n border-color: transparent;\n}\n",".sf-editor-outline {\n border-left: 1px solid #ddd;\n padding: .5rem 1rem .5rem 0;\n}\n\n.sf-editor-outline .outline-h2, \n.sf-editor-outline .outline-h3 {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.sf-editor-outline .outline-h2 {\n margin-left: 20px;\n line-height: 2.5;\n color:#364149;\n white-space: nowrap;\n cursor:pointer;\n}\n\n.sf-editor-outline .outline-h2:hover {\n color: #eb8205;\n}\n\n.sf-editor-outline .outline-h3 {\n margin-left: 40px;\n line-height: 2.5;\n color:#364149;\n white-space: nowrap;\n cursor:pointer;\n}\n\n.sf-editor-outline .outline-h3:hover {\n color: #eb8205;\n}\n\n.sf-editor-outline .empty-container {\n margin-top: 10px;\n text-align: center;\n}\n\n.sf-editor-outline .outline-h2.active,\n.sf-editor-outline .outline-h3.active {\n color: #eb8205;\n}\n",".user-option-name {\n font-size: 14px;\n font-weight: 500;\n}\n.user-option-email {\n font-size: 12px;\n}\n",".sf-article-info-container {\n flex: 1;\n display: flex;\n flex-direction: column;\n background-color: #f5f5f5;\n user-select: none;\n min-height: 0;\n}\n\n.sf-article-info-container .nav {\n padding: 10px 0;\n min-width: 125px;\n height: 36px;\n border-bottom: 1px solid #eee;\n background-color: #fff;\n justify-content: space-around;\n flex-wrap: nowrap;\n flex-shrink: 0;\n}\n\n.sf-article-info-container .nav .nav-item {\n padding: 0 0.75rem;\n}\n\n.sf-article-info-container .nav .nav-link {\n padding: 0 0.75rem;\n transition: 0.3s color;\n margin-right: 0;\n}\n\n.sf-article-info-container .nav-link {\n color: #888;\n}\n\n.sf-article-info-container .nav .nav-link.active {\n color: #ff9800;\n border-bottom: 0;\n}\n\n.sf-article-info-container .nav .iconfont {\n font-weight: 700;\n font-size: 0.875rem;\n}\n\n.sf-article-info-container .sf-article-info-content {\n flex: 1;\n font-size: 0.937rem;\n min-height: 0;\n overflow: auto;\n}\n\n.sf-article-info-container .sf-article-info-content:hover {\n overflow: auto;\n}\n",".invite-accept-icon {\n color: green;\n margin-left: 0.5rem;\n font-size: 1.25rem;\n font-style: normal;\n line-height: 1;\n vertical-align: middle;\n}\n\n.invite-link-in-popup,\n.invite-link-in-popup:hover {\n text-decoration: none;\n}\n\n.invite-link-icon-in-popup {\n color: #f89a68;\n margin-left: 0.5rem;\n font-size: 0.875rem;\n font-style: normal;\n line-height: 1;\n cursor: pointer;\n vertical-align: middle;\n}\n\n.submit-btn .loading-icon {\n margin: 1px auto;\n width: 21px;\n height: 21px;\n}\n",".sf-markdown-help-wrapper {\n display: none;\n background-color: #fff;\n border-left: 1px solid #eee;\n flex: 0 0 300px;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n width: 300px;\n}\n\n.sf-markdown-help-wrapper.active {\n display: flex;\n flex-direction: column;\n}\n",".user-details-popover {\n border: 1px solid #eee;\n border-radius: 4px;\n box-shadow: 0 0 14px rgba(0, 0, 0, 0.14);\n background: #fff;\n z-index: 1000;\n left: 2px;\n}\n.user-details-main {\n border-bottom: 1px solid #eee;\n}\n.user-details-name {\n font-size: 1rem;\n font-weight: 500;\n}\n",".sf-slate-editor-container {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n min-width: 0;\n}\n\n.sf-slate-editor-container .sf-slate-editor-toolbar {\n display: flex;\n justify-content: center;\n height: 44px;\n align-items: center;\n padding: 0 10px;\n background-color: #fff;\n user-select: none;\n border-bottom: 1px solid #e5e6e8;\n position: relative;\n z-index: 102;\n}\n\n.sf-slate-editor-container .sf-slate-editor-content {\n width: 100%;\n height: calc(100% - 44px);\n display: flex;\n background: #f5f5f5;\n position: relative;\n min-height: 0;\n}\n\n.sf-slate-editor-container .sf-slate-scroll-container {\n height: 100%;\n width: 100%;\n background-color: #fafaf9;\n overflow: auto;\n}\n\n.sf-slate-editor-container .sf-slate-scroll-container.isWin::-webkit-scrollbar{\n width: 8px;\n height: 8px;\n}\n\n.sf-slate-editor-container .sf-slate-scroll-container.isWin::-webkit-scrollbar-button {\n display: none;\n}\n\n.sf-slate-editor-container .sf-slate-scroll-container.isWin::-webkit-scrollbar-thumb {\n background-color: rgb(206, 206, 212);\n border-radius: 10px;\n}\n\n.sf-slate-editor-container .sf-slate-article-container {\n flex: 1;\n position: relative;\n max-width: 950px;\n min-width: 400px;\n margin: 0 auto;\n padding-top: 20px;\n padding-bottom: 20px;\n}\n\n.sf-slate-editor-container .sf-slate-editor-content .article {\n max-width: 950px;\n min-height: 1200px;\n padding: 40px 60px;\n background-color: #fff;\n border: 1px solid #e5e6e8;\n box-shadow: 0 0 15px rgba(0, 0, 0, 0.06);\n}\n\n.sf-slate-editor-container .sf-slate-editor-content .article div:first-child {\n outline: none;\n}\n\n@media (max-width: 991.8px) {\n .sf-slate-editor-toolbar {\n overflow-x: auto;\n padding-right: 40px !important;\n justify-content: flex-start !important;\n }\n\n .sf-slate-editor-toolbar::-webkit-scrollbar{\n display: none;\n }\n\n .sf-slate-editor-toolbar .sf-slate-article-info-control,\n .sf-slate-editor-toolbar .sf-slate-help-info-control {\n right: 0;\n padding: 0 20px;\n height: 43px;\n align-items: center;\n background-color: #fcfcfc;\n position: fixed;\n }\n\n .sf-slate-article-container {\n width: 100%;\n }\n\n .sf-slate-article-container .article {\n margin: 20px !important;\n padding: 20px 30px;\n }\n\n .sf-markdown-help-wrapper {\n width: 250px !important;\n flex: 0 0 250px;\n }\n}\n\n@media (max-width: 768px) {\n .sf-slate-editor-container .sf-slate-article-container {\n flex: 1;\n position: relative;\n max-width: 950px;\n min-width: auto;\n margin: 0 auto;\n padding-top: 0;\n padding-bottom: 0;\n }\n\n .sf-slate-article-container .article {\n margin: 0 !important;\n padding: 10px 15px !important;\n border: 0 !important;\n }\n}\n",".share-dialog .share-dialog-content {\n padding: 0;\n min-height: 27rem;\n display: flex;\n flex-direction: column;\n}\n\n@media (min-width: 768px) {\n .share-dialog .share-dialog-content {\n flex-direction: row;\n }\n}\n\n.share-dialog-content .share-dialog-side {\n /*display: flex;*/\n flex-basis: 22%;\n padding: 1rem;\n border-bottom: 1px solid #eee;\n}\n\n.share-dialog .nav .nav-item .nav-link {\n padding: 0.3125rem 0.25rem;\n}\n\n@media (min-width: 768px) {\n .share-dialog-content .share-dialog-side {\n padding: 12px 8px;\n border: 0;\n border-right: 1px solid #eee;\n }\n .share-dialog-side .nav {\n flex-direction: column;\n }\n .share-dialog-side .nav-pills .nav-item .nav-link {\n width: 100%;\n padding: 0.3125rem 0.5rem;\n margin: 0;\n }\n}\n\n.share-dialog-content .share-dialog-main {\n display: flex;\n flex-basis: 78%;\n padding: 1rem;\n}\n\n.share-dialog-content .share-dialog-main .tab-content {\n flex: 1;\n}\n\n.share-dialog-content .share-dialog-main .tab-pane {\n height: 100%;\n}\n\n.share-list-container {\n max-height: 20rem;\n min-height: 10rem;\n overflow: auto;\n}\n\n#share-link-panel .share-list-container {\n max-height: 23rem;\n overflow: hidden;\n}\n\n#share-link-panel .table-real-container {\n height: 20rem;\n overflow: auto;\n}\n\n.share-dialog-content label {\n padding: 0.5rem 0 0.25rem;\n}\n\n.share-dialog-content label.form-check-label {\n padding: 0.25rem 0;\n}\n\n.link-operation-content {\n margin-left: 1.25rem;\n}\n\n.link-operation-icon {\n color: #9aa0ac;\n}\n\n.tip {\n color: #808080;\n margin-bottom: 1rem;\n}\n\n.generate-share-link .passwd,\n.generate-upload-link .passwd {\n width: 60%;\n}\n\n.generate-share-link .permission {\n margin-left: 2.5rem;\n}\n\n.generate-link-btn {\n margin-top: 1.125rem;\n}\n\ninput.expire-input {\n display: inline-block;\n width: 4rem;\n height: 1.5rem;\n padding: 0.25rem 0.25rem;\n margin: 0 0.25rem 0 1.25rem;\n}\n\n.expire-input-border {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n height: 2.375rem!important;\n padding: 0.375rem 0.75rem!important;\n}\n\n.share-dialog-main .permission-editor .permission-editor__menu {\n width: 240px;\n}\n\n.expir-span {\n border: 1px solid rgba(0, 40, 100, 0.12);\n border-left: none;\n font-size: 0.9375rem;\n margin-left: -5px;\n padding: 0px 8px;\n height: 2.375rem;\n display: inline-block;\n text-align: center;\n position: absolute;\n top: 4px;\n min-width: 2.375rem;\n line-height: 2.25;\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n\n.custom-permission .permission-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: .375rem 0;\n border-bottom: 1px solid #efefef;\n}\n\n.custom-permission .permission-header .back-icon {\n color: #999;\n margin-right: 10px;\n cursor: pointer;\n}\n\n.custom-permission .permission-name-desc {\n margin-top: .375rem;\n}\n.custom-permission .permission-name-desc label {\n font-size: 14px;\n color: #999;\n}\n\n.custom-permission .permission-name-desc .permission-name,\n.custom-permission .permission-name-desc .permission-desc {\n flex: 1;\n}\n\n.custom-permission .permission-name-desc .permission-desc {\n margin-left: .4rem;\n}\n\n.custom-permission .permissions-list-body {\n max-height: 350px;\n overflow-y: scroll;\n}\n",".empty-loading-page {\n position: fixed;\n height: 100%;\n width: 100%;\n}\n\n.page-centered {\n position: fixed;\n top: 50%;\n left: 50%;\n /* bring your own prefixes */\n transform: translate(-50%, -50%);\n}\n\n.lds-ripple {\n display: inline-block;\n position: relative;\n width: 64px;\n height: 64px;\n}\n\n.lds-ripple div {\n position: absolute;\n border: 4px solid #eb8205;\n opacity: 1;\n border-radius: 50%;\n animation: lds-ripple 1s cubic-bezier(0, 0.2, 0.8, 1) infinite;\n}\n\n.lds-ripple div:nth-child(2) {\n animation-delay: -0.5s;\n}\n\n@keyframes lds-ripple {\n 0% {\n top: 28px;\n left: 28px;\n width: 0;\n height: 0;\n opacity: 1;\n }\n 100% {\n top: -1px;\n left: -1px;\n width: 58px;\n height: 58px;\n opacity: 0;\n }\n}\n",".sf-slate-viewer-scroll-container {\n flex: 1;\n display: flex;\n min-height: 0;\n min-width: 0;\n overflow: auto;\n background: #f4f4f4;\n padding: 30px 0 15px;\n}\n\n.sf-slate-viewer-scroll-container.isWin::-webkit-scrollbar{\n width: 8px;\n height: 8px;\n}\n\n.sf-slate-viewer-scroll-container.isWin::-webkit-scrollbar-button {\n display: none;\n}\n\n.sf-slate-viewer-scroll-container.isWin::-webkit-scrollbar-thumb {\n background-color: rgb(206, 206, 212);\n border-radius: 10px;\n}\n\n.sf-slate-viewer-scroll-container .sf-slate-viewer-article-container {\n flex: 1;\n margin: 0 auto 15px;\n}\n\n.sf-slate-viewer-scroll-container.outline .sf-slate-viewer-article-container {\n margin: 0 340px 15px 40px;\n}\n\n.sf-slate-viewer-scroll-container .sf-slate-viewer-outline {\n height: 80%;\n overflow-y: hidden;\n padding-right: 1rem;\n position: fixed;\n right: 0;\n top: 97px;\n width: 300px;\n}\n\n.sf-slate-viewer-scroll-container .sf-slate-viewer-outline:hover {\n overflow-y: auto;\n}\n\n.sf-slate-viewer-scroll-container .article {\n margin: 0 auto;\n padding: 40px 60px;\n max-width: 950px;\n min-height: calc(100% - 15px);\n border: 1px solid #e6e6dd;\n background: #fff;\n}\n\n@media (max-width: 991.98px) {\n .sf-slate-viewer-article-container {\n padding: 0 10px;\n width: 100%;\n margin: 0 !important;\n }\n \n .sf-slate-viewer-outline {\n display: none !important;\n }\n}\n\n@media (max-width: 768px) {\n .sf-slate-viewer-article-container .article {\n margin: 0 !important;\n padding: 20px !important;\n }\n}\n\n\n",".file-chooser-container {\n padding: 0.5rem;\n height: 20rem;\n border: 1px solid rgba(0, 40, 100, 0.12);\n border-radius: 3px;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n overflow: auto;\n font-size: 1rem;\n}\n\n.item-toggle{\n position: absolute;\n height: 1.5rem;\n width: 1.5rem;\n left: 0;\n top: 0;\n line-height: 1.5rem !important;\n text-align: center;\n cursor: pointer;\n color: #c0c0c0;\n}\n\n.file-chooser-container .list-view {\n margin-top: 0.25rem;\n}\n\n.list-view-header {\n position: relative;\n padding-left: 1.5rem;\n}\n.list-view-header:hover {\n background-color: #FDEFB9;\n}\n\n.list-view-header .name {\n color: #eb8205;\n}\n\n.list-view-content {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.file-chooser-item {\n position: relative;\n padding-left: 22px;\n}\n\n.file-chooser-item .item-info {\n height: 1.5rem;\n cursor: pointer;\n position: relative;\n line-height: 1.625;\n}\n\n.file-chooser-item .item-active {\n background: #F3AF7D !important;\n border-radius: 2px;\n box-shadow: inset 0 0 1px #999;\n color: #fff;\n}\n\n .file-chooser-item .item-info:hover {\n background: #FDEFB9;\n border-radius: 2px;\n box-shadow: inset 0 0 1px #999;\n}\n\n.file-chooser-item .item-info .name {\n flex: 1;\n}\n\n.file-chooser-item .item-active .icon {\n color: #fff !important;\n}\n\n.file-chooser-search-input {\n position: relative;\n}\n\n.file-chooser-search-input .search-control {\n position: absolute;\n top: 0.5rem;\n right: 0.7rem;\n}\n\n.file-chooser-search-input .search-input {\n width: 100%;\n}\n\n.file-chooser-search-container {\n height: 20rem;\n position: relative;\n border: 1px solid #eee;\n padding: 10px;\n overflow: auto;\n}\n\n.file-chooser-search-close {\n position: absolute;\n right: -0.5rem;\n top: -0.5rem;\n}\n\n.searched-active {\n background: #F3AF7D !important;\n border-radius: 2px;\n box-shadow: inset 0 0 1px #999;\n}\n\n.searched-active td {\n color: #fff;\n}\n\n.searched-active .icon {\n color: #fff !important;\n}\n\n.select-open-repo {\n background: #FDEFB9;\n}\n\n.file-chooser-table td {\n border-bottom: 1px solid rgba(0, 0, 0, 0);\n}\n\n.file-chooser-item .item-info .item-text {\n padding-left: 2.8rem;\n font-size: 15px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 24px;\n}\n\n.file-chooser-item .item-info .item-left-icon {\n position: absolute;\n display: flex;\n align-items: center;\n top: 0;\n left: 0;\n padding-left: 1.5rem;\n}\n\n\n\n\n","#wrapper {\n height: 100%;\n}\n\n.shared-file-view-md {\n height: 100%;\n overflow-y: hidden;\n}\n\n.shared-file-view-md-header {\n background: #f4f4f7;\n height: 53px;\n border-bottom: 1px solid #e8e8e8;\n padding: 8px 16px 4px;\n justify-content: space-between;\n}\n\n.shared-file-view-md-main {\n height: calc(100% - 53px);\n}\n\n.shared-file-view-head {\n width: 950px;\n height: 60px;\n background: #fff;\n margin: 0 auto;\n display: flex;\n align-items:center;\n justify-content: space-between;\n}\n\n.shared-file-view-head h2 {\n color: #222;\n font-size: 1.4em;\n margin-bottom: 0px;\n font-weight: 400;\n}\n\n.shared-file-view-head .share-by {\n margin: 0;\n}\n\n.shared-file-view-body {\n height: calc(100% - 60px);\n padding: 30px 0 15px;\n background: #f4f4f4;\n border: 1px solid #ededed;\n overflow: auto;\n}\n\n.shared-file-view-body.md-view {\n padding: 0;\n display: flex;\n min-height: 0;\n}\n\n.shared-file-view-body .sf-slate-viewer-outline {\n top: 145px !important;\n}\n\n@media (max-width: 991.98px) {\n .shared-file-view-head {\n width: 100%;\n padding: 10px 20px;\n }\n}\n",".dialog-operation {\n display: flex;\n align-items: center;\n}\n\n.dialog-operation .file-internal-link {\n font-size: 12px;\n font-weight: 700;\n cursor: pointer;\n margin-left: 0.5rem;\n color: #999;\n margin-top: 2px;\n}\n\n.dialog-operation .file-internal-link:hover {\n color: #333;\n}\n",".sf-simple-slate-editor-container {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n min-width: 0;\n}\n\n.sf-simple-slate-editor-container .sf-slate-editor-toolbar {\n display: flex;\n justify-content: flex-start;\n height: 44px;\n align-items: center;\n padding: 0 10px;\n background-color: #fff;\n user-select: none;\n border-bottom: 1px solid #e5e6e8;\n position: relative;\n z-index: 102;\n}\n\n.sf-simple-slate-editor-container .sf-slate-editor-content {\n width: 100%;\n height: calc(100% - 44px);\n display: flex;\n background: #f5f5f5;\n position: relative;\n min-height: 0;\n}\n\n.sf-simple-slate-editor-container .sf-slate-scroll-container {\n height: 100%;\n width: 100%;\n overflow: auto;\n}\n\n.sf-simple-slate-editor-container .sf-slate-scroll-container.isWin::-webkit-scrollbar{\n width: 8px;\n height: 8px;\n}\n\n.sf-simple-slate-editor-container .sf-slate-scroll-container.isWin::-webkit-scrollbar-button {\n display: none;\n}\n\n.sf-simple-slate-editor-container .sf-slate-scroll-container.isWin::-webkit-scrollbar-thumb {\n background-color: rgb(206, 206, 212);\n border-radius: 10px;\n}\n\n/* .sf-simple-slate-editor-container .sf-slate-article-container {\n flex: 1;\n position: relative;\n max-width: 950px;\n min-width: 400px;\n margin: 0 auto;\n padding-top: 20px;\n padding-bottom: 20px;\n} */\n\n.sf-simple-slate-editor-container .sf-slate-article-container {\n height: 100%;\n width: 100%;\n overflow: auto;\n}\n\n.sf-simple-slate-editor-container .sf-slate-editor-content .article {\n margin: 0;\n padding: 10px;\n border: none;\n background-color: #fff;\n}\n\n.sf-simple-slate-editor-container .sf-slate-editor-content .article div:first-child {\n outline: none;\n}\n",".file-tag-list .file-tag-item {\n display: flex;\n align-items: center;\n max-width: 180px;\n margin: 0.25rem 0;\n padding: 0 0.5rem;\n width: fit-content;\n border-radius: 10px;\n}\n\n.file-tag-list .file-tag-item .tag-name {\n color: #fff;\n font-size: 13px;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n}\n",".detail-container {\n flex: 1;\n display: flex;\n flex-direction: column;\n border-left: 1px solid #e8e8e8;\n}\n\n.detail-header {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 2.5rem;\n background-color: #f9f9f9;\n border-bottom: 1px solid #e8e8e8;\n height: 40px;\n}\n\n.detail-header .detail-control {\n padding-left: 0.5rem;\n font-size: 16px;\n color: #b9b9b9;\n}\n\n.detail-header .detail-control:hover {\n color: #888;\n}\n\n.detail-header .detail-title {\n margin-left: 0.25rem;\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n width: 0; /* prevent strut flex layout */\n}\n\n.detail-header .detail-title .name {\n margin: 0 0.5rem 0 0.25rem;\n line-height: 1.5rem;\n vertical-align: middle;\n font-size: 1rem;\n color: #322;\n}\n\n.detail-body {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.dirent-info .img {\n height: 10rem;\n padding: 0.5rem 0;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.dirent-info .img .thumbnail {\n max-width: calc(100% - 4px);\n max-height: 100%;\n display: inline-block;\n}\n\n.dirent-table-container {\n padding: 10px 20px 20px;\n display: flex;\n}\n\n.dirent-table-container tr {\n border: none;\n}\n\n.dirent-table-container table {\n flex: 1;\n}\n\n.dirent-table-container th,\n.dirent-table-container td {\n padding: 5px 3px;\n border: none;\n}\n\n.dirent-table-container th {\n font-size: 13px;\n text-align: left;\n font-weight: normal;\n color: #9c9c9c;\n}\n\n.dirent-table-container td {\n font-size: 14px;\n color: #333;\n word-break: break-all;\n}\n\n.dirent-table-container .file-tag-container th {\n vertical-align: top;\n list-style: none;\n padding-top: 8px;\n}\n\n.dirent-table-container .file-tag-container .tag-list {\n list-style: none;\n}\n\n.dirent-table-container .seafile-multicolor-icon.seafile-multicolor-icon-tag {\n width: 20px;\n height: 20px;\n cursor: pointer;\n}\n\n.file-related-files th {\n vertical-align: top;\n}\n\n.file-related-files td i {\n padding: 0;\n}\n\n.file-related-files td ul {\n list-style: none;\n max-height: 100px;\n overflow-y: scroll;\n white-space: nowrap;\n}\n\n.file-related-files td ul li {\n margin-bottom: 5px;\n overflow-x: hidden;\n text-overflow: ellipsis;\n}\n\n.file-related-files ul li a,\n.list-related-file-table tr td a {\n color: #333;\n}\n\n.list-related-file-body {\n min-height: 200px;\n max-height: 500px;\n overflow-y: scroll;\n}\n\n.no-related-file {\n text-align: center;\n}\n\n.sf-add-related-file .alert {\n margin: 0.5rem;\n}\n\n.sf-add-related-file .related-file-subtitle {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\n.detail-container .nav-item .nav-link, .detail-container .nav-item .nav-link i {\n margin: 0 auto;\n}\n\n.detail-container .edit-file-extra-attributes-btn {\n min-width: 80px;\n width: fit-content;\n max-width: 100%;\n height: 28px;\n line-height: 28px;\n padding: 0 10px;\n background-color: #f0f0f0;\n border-radius: 3px;\n color: #929292;\n font-size: 14px;\n text-align: center;\n cursor: pointer;\n}\n\n.detail-container .edit-file-extra-attributes-btn:hover {\n cursor: pointer;\n background-color: #dbdbdb;\n color: #666;\n}\n",".file-uploader-container {\n display: flex;\n /* flex: 1; */\n}\n\n.file-uploader {\n position: fixed;\n bottom: 99999px;\n}\n\n.uploader-list-view {\n display: flex;\n flex-direction: column;\n position: fixed;\n right: 1px;\n bottom: 1px;\n width: 35rem;\n height: 20rem;\n border: 1px solid #ddd;\n border-radius: 3px;\n box-shadow: 0 0 6px #ddd;\n background-color: #fff;\n z-index: 1050;\n}\n\n.uploader-list-header {\n background-color: #f0f0f0;\n padding: 0.375rem 0.625rem;\n font-size: 1rem;\n line-height: 1.5;\n color: #322;\n display: flex;\n justify-content: space-between;\n min-height: 2.25rem;\n}\n\n.uploader-list-header .uploader-options span{\n display: inline-block;\n margin-left: 0.25rem;\n font-size: 18px;\n color: #b8b8b8;\n cursor: pointer;\n}\n\n.uploader-list-content {\n padding: 0rem 1rem 1.25rem;\n background-color: #fff;\n overflow: auto;\n}\n\n.file-upload-item {\n height: 44px;\n}\n\n.upload-progress .progress-container {\n height: 24px;\n padding: 4px 0;\n}\n\n.upload-progress .progress {\n height: 5px;\n width: 80%;\n}\n\n.upload-progress .progress .progress-bar {\n color: #e83;\n}\n\n.upload-progress .progress-text {\n margin-top: 2px;\n font-size: 12px;\n line-height: 12px;\n color: #666666;\n}\n\n.upload-operation .saving {\n color: #ee8204;\n word-wrap: break-word;\n}\n\n.disabled-link {\n color: #999999;\n}\n","#wrapper, .wrapper {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n/* for top bottom layout*/\n#header {\n display: flex;\n}\n\n/* for left right layout */\n#main {\n flex: 1;\n display: flex;\n min-height: 0;\n overflow: hidden;\n}\n\n.side-panel {\n flex: 0 0 22%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.main-panel {\n flex: 1 0 78%;\n display: flex;\n flex-direction: column;\n}\n\n@media (max-width: 767px) {\n .side-panel {\n position:fixed;\n left:-300px;\n z-index: 1031;\n width: 300px;\n max-width: calc(100% - 40px);\n height:100%;\n background:#f8f8f8;\n -webkit-transition: all 0.3s ease;\n -moz-transition: all 0.3s ease;\n transition: all 0.3s ease;\n }\n}\n\n.side-panel-north,\n.main-panel-north {\n position: relative;\n padding: .5rem 1rem;\n display: flex;\n flex-shrink: 0;\n background: #f4f4f7;\n border-bottom: 1px solid #e8e8e8;\n z-index: 100;\n}\n\n@media (max-width: 767px) {\n .side-panel-north {\n border-right: 1px solid #eee;\n }\n\n .main-panel-north {\n padding-bottom: 0.25rem;\n }\n}\n\n.side-panel-center,\n.main-panel-center {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n position: relative;\n}\n\n.side-panel-center,\n.side-panel-footer {\n min-height: 0;\n border-right: 1px solid #eee;\n}\n\n.cur-view-container {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n overflow: hidden;\n min-height: 0;\n}\n\n.cur-view-path {\n position: relative; /* for the ':after' */\n padding: 8px 16px;\n max-height: 40px;\n background:#f9f9f9;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n justify-content: space-between;\n}\n\n.cur-view-path:after {\n position: absolute;\n left: 16px;\n right: 16px;\n bottom: 0;\n content: '';\n border-bottom: 1px solid #e8e8e8;\n}\n\n.cur-view-content {\n padding: 0rem 1rem;\n flex: 1;\n min-height: 0;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n\n.table-container {\n flex: 1;\n padding: 0 1rem 10rem;\n position: relative;\n}\n\n.table-drop-active::before {\n border: 1px solid rgba(69,170,242); \n content: '';\n position: absolute;\n display: block;\n width: 100%;\n height: 100%;\n left: 0;\n z-index: -1;\n}\n\n.cur-view-content .article {\n padding: 40px;\n}\n\n.cur-view-content .hd {\n padding-bottom: 0;\n margin-bottom: .5em;\n height: 48px;\n padding: 9px 10px;\n background: #f2f2f2;\n border-radius: 2px;\n}\n\n.cur-view-content .tip {\n font-size: 14px;\n}\n\n.cur-view-detail {\n display: block;\n position: absolute;\n right: 0;\n background-color: #fff;\n width: 300px;\n height: 100%;\n box-shadow: -1px 0 3px 0 #ccc;\n animation: move .5s ease-in-out 1;\n z-index: 50;\n}\n\n@keyframes move {\n from {\n right: -500px;\n opacity: 0.5;\n }\n to {\n right: 0px;\n opacity: 1;\n }\n}\n\n.cur-view-detail .detail-container {\n height: 100%;\n}\n\n/* for reach/router */\n.reach-router,\ndiv[tabindex=\"-1\"][role=\"group\"] {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-height: 0;\n}\n\n.header {\n padding: 0.625rem;\n display: flex;\n flex-shrink:0;\n align-items: center;\n justify-content: space-between;\n background-color: #fff;\n border-bottom: 1px solid #e5e5e5;\n box-shadow: 0 3px 2px -2px rgba(200,200,200,.15);\n}\n\n.header .cur-file-info {\n display: flex;\n margin-left: 0.5rem;\n}\n\n.header .info-item {\n display: flex;\n font-size: 1.2rem;\n font-weight: bold;\n margin-right: 0.5rem;\n align-items: center;\n justify-content: center;\n}\n\n.header .file-copywriting {\n margin-left: 0.5rem;\n font-size: 1rem;\n font-weight: normal;\n color: #999;\n}\n\n.header .file-feature {\n width: 2.9375rem;\n height: 2.9375rem;\n font-size: 1.8rem;\n background-color: #fbcb09;\n color: #fff;\n}\n\n.header .file-operation-btn {\n margin-right: 0.25rem;\n}\n\n.review {\n padding: 0;\n}\n\n.review .cur-file-info {\n margin: 0;\n}\n\n.review .file-feature {\n width: 4.1875rem;\n height: 4.1875rem;\n font-size: 3rem;\n}\n\n.review-state {\n position: relative;\n margin: auto 0.5rem;\n border: 1px solid transparent;\n border-radius: 3px;\n}\n\n.review-state-finished {\n color: #316100;\n background-color: #dff1cc;\n border-color: #d2ecb8;\n}\n\n.review-state-closed {\n color: #6b1110;\n background-color: #f5d2d2;\n border-color: #f1c1c0;\n}\n\n.review-state-closed:focus, \n.review-state-finished:focus {\n box-shadow: 0 0 0 0;\n}\n\nimg[src=\"\"],img:not([src]){ /* for first loading img*/\n opacity:0;\n}\n\n.cur-view-path.draft-review-nav,\n.cur-view-path.share-upload-nav {\n padding: 0 1rem;\n}\n\n.cur-view-container .fa-star.fas {\n color: #999;\n}\n\n.path-container {\n display: flex;\n align-items: center;\n word-break: keep-all;\n max-width: 80%;\n}\n.path-container a, .path-container span {\n max-height: 50px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n} \n.path-container span, .path-container a {\n flex-shrink: 1;\n} \n.path-container span:first-child, .path-container span:last-child {\n flex-shrink: 0;\n} \n.path-container span.path-file-name, .path-container span.path-repo-name {\n flex-shrink: 1;\n}\n","@charset \"UTF-8\";\n.vjs-modal-dialog .vjs-modal-dialog-content, .video-js .vjs-modal-dialog, .vjs-button > .vjs-icon-placeholder:before, .video-js .vjs-big-play-button .vjs-icon-placeholder:before {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.vjs-button > .vjs-icon-placeholder:before, .video-js .vjs-big-play-button .vjs-icon-placeholder:before {\n text-align: center;\n}\n\n@font-face {\n font-family: VideoJS;\n src: url(data:application/font-woff;charset=utf-8;base64,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) format(\"woff\");\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-play, .video-js .vjs-play-control .vjs-icon-placeholder, .video-js .vjs-big-play-button .vjs-icon-placeholder:before {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-play:before, .video-js .vjs-play-control .vjs-icon-placeholder:before, .video-js .vjs-big-play-button .vjs-icon-placeholder:before {\n content: \"\\f101\";\n}\n\n.vjs-icon-play-circle {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-play-circle:before {\n content: \"\\f102\";\n}\n\n.vjs-icon-pause, .video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-pause:before, .video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before {\n content: \"\\f103\";\n}\n\n.vjs-icon-volume-mute, .video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-volume-mute:before, .video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before {\n content: \"\\f104\";\n}\n\n.vjs-icon-volume-low, .video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-volume-low:before, .video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before {\n content: \"\\f105\";\n}\n\n.vjs-icon-volume-mid, .video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-volume-mid:before, .video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before {\n content: \"\\f106\";\n}\n\n.vjs-icon-volume-high, .video-js .vjs-mute-control .vjs-icon-placeholder {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-volume-high:before, .video-js .vjs-mute-control .vjs-icon-placeholder:before {\n content: \"\\f107\";\n}\n\n.vjs-icon-fullscreen-enter, .video-js .vjs-fullscreen-control .vjs-icon-placeholder {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-fullscreen-enter:before, .video-js .vjs-fullscreen-control .vjs-icon-placeholder:before {\n content: \"\\f108\";\n}\n\n.vjs-icon-fullscreen-exit, .video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-fullscreen-exit:before, .video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before {\n content: \"\\f109\";\n}\n\n.vjs-icon-square {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-square:before {\n content: \"\\f10a\";\n}\n\n.vjs-icon-spinner {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-spinner:before {\n content: \"\\f10b\";\n}\n\n.vjs-icon-subtitles, .video-js .vjs-subs-caps-button .vjs-icon-placeholder,\n.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder,\n.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder,\n.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder,\n.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder, .video-js .vjs-subtitles-button .vjs-icon-placeholder {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-subtitles:before, .video-js .vjs-subs-caps-button .vjs-icon-placeholder:before,\n.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder:before,\n.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder:before,\n.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder:before,\n.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder:before, .video-js .vjs-subtitles-button .vjs-icon-placeholder:before {\n content: \"\\f10c\";\n}\n\n.vjs-icon-captions, .video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder,\n.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder, .video-js .vjs-captions-button .vjs-icon-placeholder {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-captions:before, .video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before,\n.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before, .video-js .vjs-captions-button .vjs-icon-placeholder:before {\n content: \"\\f10d\";\n}\n\n.vjs-icon-chapters, .video-js .vjs-chapters-button .vjs-icon-placeholder {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-chapters:before, .video-js .vjs-chapters-button .vjs-icon-placeholder:before {\n content: \"\\f10e\";\n}\n\n.vjs-icon-share {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-share:before {\n content: \"\\f10f\";\n}\n\n.vjs-icon-cog {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-cog:before {\n content: \"\\f110\";\n}\n\n.vjs-icon-circle, .vjs-seek-to-live-control .vjs-icon-placeholder, .video-js .vjs-volume-level, .video-js .vjs-play-progress {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-circle:before, .vjs-seek-to-live-control .vjs-icon-placeholder:before, .video-js .vjs-volume-level:before, .video-js .vjs-play-progress:before {\n content: \"\\f111\";\n}\n\n.vjs-icon-circle-outline {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-circle-outline:before {\n content: \"\\f112\";\n}\n\n.vjs-icon-circle-inner-circle {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-circle-inner-circle:before {\n content: \"\\f113\";\n}\n\n.vjs-icon-hd {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-hd:before {\n content: \"\\f114\";\n}\n\n.vjs-icon-cancel, .video-js .vjs-control.vjs-close-button .vjs-icon-placeholder {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-cancel:before, .video-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before {\n content: \"\\f115\";\n}\n\n.vjs-icon-replay, .video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-replay:before, .video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before {\n content: \"\\f116\";\n}\n\n.vjs-icon-facebook {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-facebook:before {\n content: \"\\f117\";\n}\n\n.vjs-icon-gplus {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-gplus:before {\n content: \"\\f118\";\n}\n\n.vjs-icon-linkedin {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-linkedin:before {\n content: \"\\f119\";\n}\n\n.vjs-icon-twitter {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-twitter:before {\n content: \"\\f11a\";\n}\n\n.vjs-icon-tumblr {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-tumblr:before {\n content: \"\\f11b\";\n}\n\n.vjs-icon-pinterest {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-pinterest:before {\n content: \"\\f11c\";\n}\n\n.vjs-icon-audio-description, .video-js .vjs-descriptions-button .vjs-icon-placeholder {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-audio-description:before, .video-js .vjs-descriptions-button .vjs-icon-placeholder:before {\n content: \"\\f11d\";\n}\n\n.vjs-icon-audio, .video-js .vjs-audio-button .vjs-icon-placeholder {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-audio:before, .video-js .vjs-audio-button .vjs-icon-placeholder:before {\n content: \"\\f11e\";\n}\n\n.vjs-icon-next-item {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-next-item:before {\n content: \"\\f11f\";\n}\n\n.vjs-icon-previous-item {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-previous-item:before {\n content: \"\\f120\";\n}\n\n.vjs-icon-picture-in-picture-enter, .video-js .vjs-picture-in-picture-control .vjs-icon-placeholder {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-picture-in-picture-enter:before, .video-js .vjs-picture-in-picture-control .vjs-icon-placeholder:before {\n content: \"\\f121\";\n}\n\n.vjs-icon-picture-in-picture-exit, .video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder {\n font-family: VideoJS;\n font-weight: normal;\n font-style: normal;\n}\n.vjs-icon-picture-in-picture-exit:before, .video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder:before {\n content: \"\\f122\";\n}\n\n.video-js {\n display: block;\n vertical-align: top;\n box-sizing: border-box;\n color: #fff;\n background-color: #000;\n position: relative;\n padding: 0;\n font-size: 10px;\n line-height: 1;\n font-weight: normal;\n font-style: normal;\n font-family: Arial, Helvetica, sans-serif;\n word-break: initial;\n}\n.video-js:-moz-full-screen {\n position: absolute;\n}\n.video-js:-webkit-full-screen {\n width: 100% !important;\n height: 100% !important;\n}\n\n.video-js[tabindex=\"-1\"] {\n outline: none;\n}\n\n.video-js *,\n.video-js *:before,\n.video-js *:after {\n box-sizing: inherit;\n}\n\n.video-js ul {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n list-style-position: outside;\n margin-left: 0;\n margin-right: 0;\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.video-js.vjs-fluid,\n.video-js.vjs-16-9,\n.video-js.vjs-4-3,\n.video-js.vjs-9-16,\n.video-js.vjs-1-1 {\n width: 100%;\n max-width: 100%;\n}\n\n.video-js.vjs-fluid:not(.vjs-audio-only-mode),\n.video-js.vjs-16-9:not(.vjs-audio-only-mode),\n.video-js.vjs-4-3:not(.vjs-audio-only-mode),\n.video-js.vjs-9-16:not(.vjs-audio-only-mode),\n.video-js.vjs-1-1:not(.vjs-audio-only-mode) {\n height: 0;\n}\n\n.video-js.vjs-16-9:not(.vjs-audio-only-mode) {\n padding-top: 56.25%;\n}\n\n.video-js.vjs-4-3:not(.vjs-audio-only-mode) {\n padding-top: 75%;\n}\n\n.video-js.vjs-9-16:not(.vjs-audio-only-mode) {\n padding-top: 177.7777777778%;\n}\n\n.video-js.vjs-1-1:not(.vjs-audio-only-mode) {\n padding-top: 100%;\n}\n\n.video-js.vjs-fill:not(.vjs-audio-only-mode) {\n width: 100%;\n height: 100%;\n}\n\n.video-js .vjs-tech {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.video-js.vjs-audio-only-mode .vjs-tech {\n display: none;\n}\n\nbody.vjs-full-window {\n padding: 0;\n margin: 0;\n height: 100%;\n}\n\n.vjs-full-window .video-js.vjs-fullscreen {\n position: fixed;\n overflow: hidden;\n z-index: 1000;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n}\n\n.video-js.vjs-fullscreen:not(.vjs-ios-native-fs) {\n width: 100% !important;\n height: 100% !important;\n padding-top: 0 !important;\n}\n\n.video-js.vjs-fullscreen.vjs-user-inactive {\n cursor: none;\n}\n\n.vjs-hidden {\n display: none !important;\n}\n\n.vjs-disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n.video-js .vjs-offscreen {\n height: 1px;\n left: -9999px;\n position: absolute;\n top: 0;\n width: 1px;\n}\n\n.vjs-lock-showing {\n display: block !important;\n opacity: 1 !important;\n visibility: visible !important;\n}\n\n.vjs-no-js {\n padding: 20px;\n color: #fff;\n background-color: #000;\n font-size: 18px;\n font-family: Arial, Helvetica, sans-serif;\n text-align: center;\n width: 300px;\n height: 150px;\n margin: 0px auto;\n}\n\n.vjs-no-js a,\n.vjs-no-js a:visited {\n color: #66A8CC;\n}\n\n.video-js .vjs-big-play-button {\n font-size: 3em;\n line-height: 1.5em;\n height: 1.63332em;\n width: 3em;\n display: block;\n position: absolute;\n top: 10px;\n left: 10px;\n padding: 0;\n cursor: pointer;\n opacity: 1;\n border: 0.06666em solid #fff;\n background-color: #2B333F;\n background-color: rgba(43, 51, 63, 0.7);\n border-radius: 0.3em;\n transition: all 0.4s;\n}\n.vjs-big-play-centered .vjs-big-play-button {\n top: 50%;\n left: 50%;\n margin-top: -0.81666em;\n margin-left: -1.5em;\n}\n\n.video-js:hover .vjs-big-play-button,\n.video-js .vjs-big-play-button:focus {\n border-color: #fff;\n background-color: #73859f;\n background-color: rgba(115, 133, 159, 0.5);\n transition: all 0s;\n}\n\n.vjs-controls-disabled .vjs-big-play-button,\n.vjs-has-started .vjs-big-play-button,\n.vjs-using-native-controls .vjs-big-play-button,\n.vjs-error .vjs-big-play-button {\n display: none;\n}\n\n.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause .vjs-big-play-button {\n display: block;\n}\n\n.video-js button {\n background: none;\n border: none;\n color: inherit;\n display: inline-block;\n font-size: inherit;\n line-height: inherit;\n text-transform: none;\n text-decoration: none;\n transition: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.vjs-control .vjs-button {\n width: 100%;\n height: 100%;\n}\n\n.video-js .vjs-control.vjs-close-button {\n cursor: pointer;\n height: 3em;\n position: absolute;\n right: 0;\n top: 0.5em;\n z-index: 2;\n}\n.video-js .vjs-modal-dialog {\n background: rgba(0, 0, 0, 0.8);\n background: linear-gradient(180deg, rgba(0, 0, 0, 0.8), rgba(255, 255, 255, 0));\n overflow: auto;\n}\n\n.video-js .vjs-modal-dialog > * {\n box-sizing: border-box;\n}\n\n.vjs-modal-dialog .vjs-modal-dialog-content {\n font-size: 1.2em;\n line-height: 1.5;\n padding: 20px 24px;\n z-index: 1;\n}\n\n.vjs-menu-button {\n cursor: pointer;\n}\n\n.vjs-menu-button.vjs-disabled {\n cursor: default;\n}\n\n.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu {\n display: none;\n}\n\n.vjs-menu .vjs-menu-content {\n display: block;\n padding: 0;\n margin: 0;\n font-family: Arial, Helvetica, sans-serif;\n overflow: auto;\n}\n\n.vjs-menu .vjs-menu-content > * {\n box-sizing: border-box;\n}\n\n.vjs-scrubbing .vjs-control.vjs-menu-button:hover .vjs-menu {\n display: none;\n}\n\n.vjs-menu li {\n list-style: none;\n margin: 0;\n padding: 0.2em 0;\n line-height: 1.4em;\n font-size: 1.2em;\n text-align: center;\n text-transform: lowercase;\n}\n\n.vjs-menu li.vjs-menu-item:focus,\n.vjs-menu li.vjs-menu-item:hover,\n.js-focus-visible .vjs-menu li.vjs-menu-item:hover {\n background-color: #73859f;\n background-color: rgba(115, 133, 159, 0.5);\n}\n\n.vjs-menu li.vjs-selected,\n.vjs-menu li.vjs-selected:focus,\n.vjs-menu li.vjs-selected:hover,\n.js-focus-visible .vjs-menu li.vjs-selected:hover {\n background-color: #fff;\n color: #2B333F;\n}\n\n.video-js .vjs-menu *:not(.vjs-selected):focus:not(:focus-visible),\n.js-focus-visible .vjs-menu *:not(.vjs-selected):focus:not(.focus-visible) {\n background: none;\n}\n\n.vjs-menu li.vjs-menu-title {\n text-align: center;\n text-transform: uppercase;\n font-size: 1em;\n line-height: 2em;\n padding: 0;\n margin: 0 0 0.3em 0;\n font-weight: bold;\n cursor: default;\n}\n\n.vjs-menu-button-popup .vjs-menu {\n display: none;\n position: absolute;\n bottom: 0;\n width: 10em;\n left: -3em;\n height: 0em;\n margin-bottom: 1.5em;\n border-top-color: rgba(43, 51, 63, 0.7);\n}\n\n.vjs-menu-button-popup .vjs-menu .vjs-menu-content {\n background-color: #2B333F;\n background-color: rgba(43, 51, 63, 0.7);\n position: absolute;\n width: 100%;\n bottom: 1.5em;\n max-height: 15em;\n}\n\n.vjs-layout-tiny .vjs-menu-button-popup .vjs-menu .vjs-menu-content,\n.vjs-layout-x-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content {\n max-height: 5em;\n}\n\n.vjs-layout-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content {\n max-height: 10em;\n}\n\n.vjs-layout-medium .vjs-menu-button-popup .vjs-menu .vjs-menu-content {\n max-height: 14em;\n}\n\n.vjs-layout-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content,\n.vjs-layout-x-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content,\n.vjs-layout-huge .vjs-menu-button-popup .vjs-menu .vjs-menu-content {\n max-height: 25em;\n}\n\n.vjs-workinghover .vjs-menu-button-popup.vjs-hover .vjs-menu,\n.vjs-menu-button-popup .vjs-menu.vjs-lock-showing {\n display: block;\n}\n\n.video-js .vjs-menu-button-inline {\n transition: all 0.4s;\n overflow: hidden;\n}\n\n.video-js .vjs-menu-button-inline:before {\n width: 2.222222222em;\n}\n\n.video-js .vjs-menu-button-inline:hover,\n.video-js .vjs-menu-button-inline:focus,\n.video-js .vjs-menu-button-inline.vjs-slider-active,\n.video-js.vjs-no-flex .vjs-menu-button-inline {\n width: 12em;\n}\n\n.vjs-menu-button-inline .vjs-menu {\n opacity: 0;\n height: 100%;\n width: auto;\n position: absolute;\n left: 4em;\n top: 0;\n padding: 0;\n margin: 0;\n transition: all 0.4s;\n}\n\n.vjs-menu-button-inline:hover .vjs-menu,\n.vjs-menu-button-inline:focus .vjs-menu,\n.vjs-menu-button-inline.vjs-slider-active .vjs-menu {\n display: block;\n opacity: 1;\n}\n\n.vjs-no-flex .vjs-menu-button-inline .vjs-menu {\n display: block;\n opacity: 1;\n position: relative;\n width: auto;\n}\n\n.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu,\n.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu,\n.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu {\n width: auto;\n}\n\n.vjs-menu-button-inline .vjs-menu-content {\n width: auto;\n height: 100%;\n margin: 0;\n overflow: hidden;\n}\n\n.video-js .vjs-control-bar {\n display: none;\n width: 100%;\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 3em;\n background-color: #2B333F;\n background-color: rgba(43, 51, 63, 0.7);\n}\n\n.vjs-has-started .vjs-control-bar,\n.vjs-audio-only-mode .vjs-control-bar {\n display: flex;\n visibility: visible;\n opacity: 1;\n transition: visibility 0.1s, opacity 0.1s;\n}\n\n.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {\n visibility: visible;\n opacity: 0;\n pointer-events: none;\n transition: visibility 1s, opacity 1s;\n}\n\n.vjs-controls-disabled .vjs-control-bar,\n.vjs-using-native-controls .vjs-control-bar,\n.vjs-error .vjs-control-bar {\n display: none !important;\n}\n\n.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar,\n.vjs-audio-only-mode.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar {\n opacity: 1;\n visibility: visible;\n pointer-events: auto;\n}\n\n.vjs-has-started.vjs-no-flex .vjs-control-bar {\n display: table;\n}\n\n.video-js .vjs-control {\n position: relative;\n text-align: center;\n margin: 0;\n padding: 0;\n height: 100%;\n width: 4em;\n flex: none;\n}\n\n.video-js .vjs-control.vjs-visible-text {\n width: auto;\n padding-left: 1em;\n padding-right: 1em;\n}\n\n.vjs-button > .vjs-icon-placeholder:before {\n font-size: 1.8em;\n line-height: 1.67;\n}\n\n.vjs-button > .vjs-icon-placeholder {\n display: block;\n}\n\n.video-js .vjs-control:focus:before,\n.video-js .vjs-control:hover:before,\n.video-js .vjs-control:focus {\n text-shadow: 0em 0em 1em white;\n}\n\n.video-js *:not(.vjs-visible-text) > .vjs-control-text {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.vjs-no-flex .vjs-control {\n display: table-cell;\n vertical-align: middle;\n}\n\n.video-js .vjs-custom-control-spacer {\n display: none;\n}\n\n.video-js .vjs-progress-control {\n cursor: pointer;\n flex: auto;\n display: flex;\n align-items: center;\n min-width: 4em;\n touch-action: none;\n}\n\n.video-js .vjs-progress-control.disabled {\n cursor: default;\n}\n\n.vjs-live .vjs-progress-control {\n display: none;\n}\n\n.vjs-liveui .vjs-progress-control {\n display: flex;\n align-items: center;\n}\n\n.vjs-no-flex .vjs-progress-control {\n width: auto;\n}\n\n.video-js .vjs-progress-holder {\n flex: auto;\n transition: all 0.2s;\n height: 0.3em;\n}\n\n.video-js .vjs-progress-control .vjs-progress-holder {\n margin: 0 10px;\n}\n\n.video-js .vjs-progress-control:hover .vjs-progress-holder {\n font-size: 1.6666666667em;\n}\n\n.video-js .vjs-progress-control:hover .vjs-progress-holder.disabled {\n font-size: 1em;\n}\n\n.video-js .vjs-progress-holder .vjs-play-progress,\n.video-js .vjs-progress-holder .vjs-load-progress,\n.video-js .vjs-progress-holder .vjs-load-progress div {\n position: absolute;\n display: block;\n height: 100%;\n margin: 0;\n padding: 0;\n width: 0;\n}\n\n.video-js .vjs-play-progress {\n background-color: #fff;\n}\n.video-js .vjs-play-progress:before {\n font-size: 0.9em;\n position: absolute;\n right: -0.5em;\n top: -0.3333333333em;\n z-index: 1;\n}\n\n.video-js .vjs-load-progress {\n background: rgba(115, 133, 159, 0.5);\n}\n\n.video-js .vjs-load-progress div {\n background: rgba(115, 133, 159, 0.75);\n}\n\n.video-js .vjs-time-tooltip {\n background-color: #fff;\n background-color: rgba(255, 255, 255, 0.8);\n border-radius: 0.3em;\n color: #000;\n float: right;\n font-family: Arial, Helvetica, sans-serif;\n font-size: 1em;\n padding: 6px 8px 8px 8px;\n pointer-events: none;\n position: absolute;\n top: -3.4em;\n visibility: hidden;\n z-index: 1;\n}\n\n.video-js .vjs-progress-holder:focus .vjs-time-tooltip {\n display: none;\n}\n\n.video-js .vjs-progress-control:hover .vjs-time-tooltip,\n.video-js .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-time-tooltip {\n display: block;\n font-size: 0.6em;\n visibility: visible;\n}\n\n.video-js .vjs-progress-control.disabled:hover .vjs-time-tooltip {\n font-size: 1em;\n}\n\n.video-js .vjs-progress-control .vjs-mouse-display {\n display: none;\n position: absolute;\n width: 1px;\n height: 100%;\n background-color: #000;\n z-index: 1;\n}\n\n.vjs-no-flex .vjs-progress-control .vjs-mouse-display {\n z-index: 0;\n}\n\n.video-js .vjs-progress-control:hover .vjs-mouse-display {\n display: block;\n}\n\n.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display {\n visibility: hidden;\n opacity: 0;\n transition: visibility 1s, opacity 1s;\n}\n\n.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display {\n display: none;\n}\n\n.vjs-mouse-display .vjs-time-tooltip {\n color: #fff;\n background-color: #000;\n background-color: rgba(0, 0, 0, 0.8);\n}\n\n.video-js .vjs-slider {\n position: relative;\n cursor: pointer;\n padding: 0;\n margin: 0 0.45em 0 0.45em;\n /* iOS Safari */\n -webkit-touch-callout: none;\n /* Safari */\n -webkit-user-select: none;\n /* Konqueror HTML */\n /* Firefox */\n -moz-user-select: none;\n /* Internet Explorer/Edge */\n -ms-user-select: none;\n /* Non-prefixed version, currently supported by Chrome and Opera */\n user-select: none;\n background-color: #73859f;\n background-color: rgba(115, 133, 159, 0.5);\n}\n\n.video-js .vjs-slider.disabled {\n cursor: default;\n}\n\n.video-js .vjs-slider:focus {\n text-shadow: 0em 0em 1em white;\n box-shadow: 0 0 1em #fff;\n}\n\n.video-js .vjs-mute-control {\n cursor: pointer;\n flex: none;\n}\n.video-js .vjs-volume-control {\n cursor: pointer;\n margin-right: 1em;\n display: flex;\n}\n\n.video-js .vjs-volume-control.vjs-volume-horizontal {\n width: 5em;\n}\n\n.video-js .vjs-volume-panel .vjs-volume-control {\n visibility: visible;\n opacity: 0;\n width: 1px;\n height: 1px;\n margin-left: -1px;\n}\n\n.video-js .vjs-volume-panel {\n transition: width 1s;\n}\n.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control, .video-js .vjs-volume-panel:active .vjs-volume-control, .video-js .vjs-volume-panel:focus .vjs-volume-control, .video-js .vjs-volume-panel .vjs-volume-control:active, .video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control, .video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active {\n visibility: visible;\n opacity: 1;\n position: relative;\n transition: visibility 0.1s, opacity 0.1s, height 0.1s, width 0.1s, left 0s, top 0s;\n}\n.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-horizontal, .video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal, .video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal, .video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal, .video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control.vjs-volume-horizontal, .video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal {\n width: 5em;\n height: 3em;\n margin-right: 0;\n}\n.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-vertical, .video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-vertical, .video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-vertical, .video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-vertical, .video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control.vjs-volume-vertical, .video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-vertical {\n left: -3.5em;\n transition: left 0s;\n}\n.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover, .video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active, .video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active {\n width: 10em;\n transition: width 0.1s;\n}\n.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-mute-toggle-only {\n width: 4em;\n}\n\n.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical {\n height: 8em;\n width: 3em;\n left: -3000em;\n transition: visibility 1s, opacity 1s, height 1s 1s, width 1s 1s, left 1s 1s, top 1s 1s;\n}\n\n.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal {\n transition: visibility 1s, opacity 1s, height 1s 1s, width 1s, left 1s 1s, top 1s 1s;\n}\n\n.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal {\n width: 5em;\n height: 3em;\n visibility: visible;\n opacity: 1;\n position: relative;\n transition: none;\n}\n\n.video-js.vjs-no-flex .vjs-volume-control.vjs-volume-vertical,\n.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical {\n position: absolute;\n bottom: 3em;\n left: 0.5em;\n}\n\n.video-js .vjs-volume-panel {\n display: flex;\n}\n\n.video-js .vjs-volume-bar {\n margin: 1.35em 0.45em;\n}\n\n.vjs-volume-bar.vjs-slider-horizontal {\n width: 5em;\n height: 0.3em;\n}\n\n.vjs-volume-bar.vjs-slider-vertical {\n width: 0.3em;\n height: 5em;\n margin: 1.35em auto;\n}\n\n.video-js .vjs-volume-level {\n position: absolute;\n bottom: 0;\n left: 0;\n background-color: #fff;\n}\n.video-js .vjs-volume-level:before {\n position: absolute;\n font-size: 0.9em;\n z-index: 1;\n}\n\n.vjs-slider-vertical .vjs-volume-level {\n width: 0.3em;\n}\n.vjs-slider-vertical .vjs-volume-level:before {\n top: -0.5em;\n left: -0.3em;\n z-index: 1;\n}\n\n.vjs-slider-horizontal .vjs-volume-level {\n height: 0.3em;\n}\n.vjs-slider-horizontal .vjs-volume-level:before {\n top: -0.3em;\n right: -0.5em;\n}\n\n.video-js .vjs-volume-panel.vjs-volume-panel-vertical {\n width: 4em;\n}\n\n.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level {\n height: 100%;\n}\n\n.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level {\n width: 100%;\n}\n\n.video-js .vjs-volume-vertical {\n width: 3em;\n height: 8em;\n bottom: 8em;\n background-color: #2B333F;\n background-color: rgba(43, 51, 63, 0.7);\n}\n\n.video-js .vjs-volume-horizontal .vjs-menu {\n left: -2em;\n}\n\n.video-js .vjs-volume-tooltip {\n background-color: #fff;\n background-color: rgba(255, 255, 255, 0.8);\n border-radius: 0.3em;\n color: #000;\n float: right;\n font-family: Arial, Helvetica, sans-serif;\n font-size: 1em;\n padding: 6px 8px 8px 8px;\n pointer-events: none;\n position: absolute;\n top: -3.4em;\n visibility: hidden;\n z-index: 1;\n}\n\n.video-js .vjs-volume-control:hover .vjs-volume-tooltip,\n.video-js .vjs-volume-control:hover .vjs-progress-holder:focus .vjs-volume-tooltip {\n display: block;\n font-size: 1em;\n visibility: visible;\n}\n\n.video-js .vjs-volume-vertical:hover .vjs-volume-tooltip,\n.video-js .vjs-volume-vertical:hover .vjs-progress-holder:focus .vjs-volume-tooltip {\n left: 1em;\n top: -12px;\n}\n\n.video-js .vjs-volume-control.disabled:hover .vjs-volume-tooltip {\n font-size: 1em;\n}\n\n.video-js .vjs-volume-control .vjs-mouse-display {\n display: none;\n position: absolute;\n width: 100%;\n height: 1px;\n background-color: #000;\n z-index: 1;\n}\n\n.video-js .vjs-volume-horizontal .vjs-mouse-display {\n width: 1px;\n height: 100%;\n}\n\n.vjs-no-flex .vjs-volume-control .vjs-mouse-display {\n z-index: 0;\n}\n\n.video-js .vjs-volume-control:hover .vjs-mouse-display {\n display: block;\n}\n\n.video-js.vjs-user-inactive .vjs-volume-control .vjs-mouse-display {\n visibility: hidden;\n opacity: 0;\n transition: visibility 1s, opacity 1s;\n}\n\n.video-js.vjs-user-inactive.vjs-no-flex .vjs-volume-control .vjs-mouse-display {\n display: none;\n}\n\n.vjs-mouse-display .vjs-volume-tooltip {\n color: #fff;\n background-color: #000;\n background-color: rgba(0, 0, 0, 0.8);\n}\n\n.vjs-poster {\n display: inline-block;\n vertical-align: middle;\n background-repeat: no-repeat;\n background-position: 50% 50%;\n background-size: contain;\n background-color: #000000;\n cursor: pointer;\n margin: 0;\n padding: 0;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n height: 100%;\n}\n\n.vjs-has-started .vjs-poster,\n.vjs-using-native-controls .vjs-poster {\n display: none;\n}\n\n.vjs-audio.vjs-has-started .vjs-poster,\n.vjs-has-started.vjs-audio-poster-mode .vjs-poster {\n display: block;\n}\n\n.video-js .vjs-live-control {\n display: flex;\n align-items: flex-start;\n flex: auto;\n font-size: 1em;\n line-height: 3em;\n}\n\n.vjs-no-flex .vjs-live-control {\n display: table-cell;\n width: auto;\n text-align: left;\n}\n\n.video-js:not(.vjs-live) .vjs-live-control,\n.video-js.vjs-liveui .vjs-live-control {\n display: none;\n}\n\n.video-js .vjs-seek-to-live-control {\n align-items: center;\n cursor: pointer;\n flex: none;\n display: inline-flex;\n height: 100%;\n padding-left: 0.5em;\n padding-right: 0.5em;\n font-size: 1em;\n line-height: 3em;\n width: auto;\n min-width: 4em;\n}\n\n.vjs-no-flex .vjs-seek-to-live-control {\n display: table-cell;\n width: auto;\n text-align: left;\n}\n\n.video-js.vjs-live:not(.vjs-liveui) .vjs-seek-to-live-control,\n.video-js:not(.vjs-live) .vjs-seek-to-live-control {\n display: none;\n}\n\n.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge {\n cursor: auto;\n}\n\n.vjs-seek-to-live-control .vjs-icon-placeholder {\n margin-right: 0.5em;\n color: #888;\n}\n\n.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-icon-placeholder {\n color: red;\n}\n\n.video-js .vjs-time-control {\n flex: none;\n font-size: 1em;\n line-height: 3em;\n min-width: 2em;\n width: auto;\n padding-left: 1em;\n padding-right: 1em;\n}\n\n.vjs-live .vjs-time-control {\n display: none;\n}\n\n.video-js .vjs-current-time,\n.vjs-no-flex .vjs-current-time {\n display: none;\n}\n\n.video-js .vjs-duration,\n.vjs-no-flex .vjs-duration {\n display: none;\n}\n\n.vjs-time-divider {\n display: none;\n line-height: 3em;\n}\n\n.vjs-live .vjs-time-divider {\n display: none;\n}\n\n.video-js .vjs-play-control {\n cursor: pointer;\n}\n\n.video-js .vjs-play-control .vjs-icon-placeholder {\n flex: none;\n}\n\n.vjs-text-track-display {\n position: absolute;\n bottom: 3em;\n left: 0;\n right: 0;\n top: 0;\n pointer-events: none;\n}\n\n.video-js.vjs-controls-disabled .vjs-text-track-display,\n.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display {\n bottom: 1em;\n}\n\n.video-js .vjs-text-track {\n font-size: 1.4em;\n text-align: center;\n margin-bottom: 0.1em;\n}\n\n.vjs-subtitles {\n color: #fff;\n}\n\n.vjs-captions {\n color: #fc6;\n}\n\n.vjs-tt-cue {\n display: block;\n}\n\nvideo::-webkit-media-text-track-display {\n transform: translateY(-3em);\n}\n\n.video-js.vjs-controls-disabled video::-webkit-media-text-track-display,\n.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display {\n transform: translateY(-1.5em);\n}\n\n.video-js .vjs-picture-in-picture-control {\n cursor: pointer;\n flex: none;\n}\n.video-js.vjs-audio-only-mode .vjs-picture-in-picture-control {\n display: none;\n}\n\n.video-js .vjs-fullscreen-control {\n cursor: pointer;\n flex: none;\n}\n.video-js.vjs-audio-only-mode .vjs-fullscreen-control {\n display: none;\n}\n\n.vjs-playback-rate > .vjs-menu-button,\n.vjs-playback-rate .vjs-playback-rate-value {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.vjs-playback-rate .vjs-playback-rate-value {\n pointer-events: none;\n font-size: 1.5em;\n line-height: 2;\n text-align: center;\n}\n\n.vjs-playback-rate .vjs-menu {\n width: 4em;\n left: 0em;\n}\n\n.vjs-error .vjs-error-display .vjs-modal-dialog-content {\n font-size: 1.4em;\n text-align: center;\n}\n\n.vjs-error .vjs-error-display:before {\n color: #fff;\n content: \"X\";\n font-family: Arial, Helvetica, sans-serif;\n font-size: 4em;\n left: 0;\n line-height: 1;\n margin-top: -0.5em;\n position: absolute;\n text-shadow: 0.05em 0.05em 0.1em #000;\n text-align: center;\n top: 50%;\n vertical-align: middle;\n width: 100%;\n}\n\n.vjs-loading-spinner {\n display: none;\n position: absolute;\n top: 50%;\n left: 50%;\n margin: -25px 0 0 -25px;\n opacity: 0.85;\n text-align: left;\n border: 6px solid rgba(43, 51, 63, 0.7);\n box-sizing: border-box;\n background-clip: padding-box;\n width: 50px;\n height: 50px;\n border-radius: 25px;\n visibility: hidden;\n}\n\n.vjs-seeking .vjs-loading-spinner,\n.vjs-waiting .vjs-loading-spinner {\n display: block;\n -webkit-animation: vjs-spinner-show 0s linear 0.3s forwards;\n animation: vjs-spinner-show 0s linear 0.3s forwards;\n}\n\n.vjs-loading-spinner:before,\n.vjs-loading-spinner:after {\n content: \"\";\n position: absolute;\n margin: -6px;\n box-sizing: inherit;\n width: inherit;\n height: inherit;\n border-radius: inherit;\n opacity: 1;\n border: inherit;\n border-color: transparent;\n border-top-color: white;\n}\n\n.vjs-seeking .vjs-loading-spinner:before,\n.vjs-seeking .vjs-loading-spinner:after,\n.vjs-waiting .vjs-loading-spinner:before,\n.vjs-waiting .vjs-loading-spinner:after {\n -webkit-animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite;\n animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite;\n}\n\n.vjs-seeking .vjs-loading-spinner:before,\n.vjs-waiting .vjs-loading-spinner:before {\n border-top-color: white;\n}\n\n.vjs-seeking .vjs-loading-spinner:after,\n.vjs-waiting .vjs-loading-spinner:after {\n border-top-color: white;\n -webkit-animation-delay: 0.44s;\n animation-delay: 0.44s;\n}\n\n@keyframes vjs-spinner-show {\n to {\n visibility: visible;\n }\n}\n@-webkit-keyframes vjs-spinner-show {\n to {\n visibility: visible;\n }\n}\n@keyframes vjs-spinner-spin {\n 100% {\n transform: rotate(360deg);\n }\n}\n@-webkit-keyframes vjs-spinner-spin {\n 100% {\n -webkit-transform: rotate(360deg);\n }\n}\n@keyframes vjs-spinner-fade {\n 0% {\n border-top-color: #73859f;\n }\n 20% {\n border-top-color: #73859f;\n }\n 35% {\n border-top-color: white;\n }\n 60% {\n border-top-color: #73859f;\n }\n 100% {\n border-top-color: #73859f;\n }\n}\n@-webkit-keyframes vjs-spinner-fade {\n 0% {\n border-top-color: #73859f;\n }\n 20% {\n border-top-color: #73859f;\n }\n 35% {\n border-top-color: white;\n }\n 60% {\n border-top-color: #73859f;\n }\n 100% {\n border-top-color: #73859f;\n }\n}\n.video-js.vjs-audio-only-mode .vjs-captions-button {\n display: none;\n}\n\n.vjs-chapters-button .vjs-menu ul {\n width: 24em;\n}\n\n.video-js.vjs-audio-only-mode .vjs-descriptions-button {\n display: none;\n}\n\n.video-js .vjs-subs-caps-button + .vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder {\n vertical-align: middle;\n display: inline-block;\n margin-bottom: -0.1em;\n}\n\n.video-js .vjs-subs-caps-button + .vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before {\n font-family: VideoJS;\n content: \"\";\n font-size: 1.5em;\n line-height: inherit;\n}\n\n.video-js.vjs-audio-only-mode .vjs-subs-caps-button {\n display: none;\n}\n\n.video-js .vjs-audio-button + .vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder {\n vertical-align: middle;\n display: inline-block;\n margin-bottom: -0.1em;\n}\n\n.video-js .vjs-audio-button + .vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before {\n font-family: VideoJS;\n content: \" \";\n font-size: 1.5em;\n line-height: inherit;\n}\n\n.video-js.vjs-layout-small .vjs-current-time,\n.video-js.vjs-layout-small .vjs-time-divider,\n.video-js.vjs-layout-small .vjs-duration,\n.video-js.vjs-layout-small .vjs-remaining-time,\n.video-js.vjs-layout-small .vjs-playback-rate,\n.video-js.vjs-layout-small .vjs-volume-control, .video-js.vjs-layout-x-small .vjs-current-time,\n.video-js.vjs-layout-x-small .vjs-time-divider,\n.video-js.vjs-layout-x-small .vjs-duration,\n.video-js.vjs-layout-x-small .vjs-remaining-time,\n.video-js.vjs-layout-x-small .vjs-playback-rate,\n.video-js.vjs-layout-x-small .vjs-volume-control, .video-js.vjs-layout-tiny .vjs-current-time,\n.video-js.vjs-layout-tiny .vjs-time-divider,\n.video-js.vjs-layout-tiny .vjs-duration,\n.video-js.vjs-layout-tiny .vjs-remaining-time,\n.video-js.vjs-layout-tiny .vjs-playback-rate,\n.video-js.vjs-layout-tiny .vjs-volume-control {\n display: none;\n}\n.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover, .video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:active, .video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, .video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover, .video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover, .video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:active, .video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, .video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover, .video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:hover, .video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:active, .video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, .video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover {\n width: auto;\n width: initial;\n}\n.video-js.vjs-layout-x-small .vjs-progress-control, .video-js.vjs-layout-tiny .vjs-progress-control {\n display: none;\n}\n.video-js.vjs-layout-x-small .vjs-custom-control-spacer {\n flex: auto;\n display: block;\n}\n.video-js.vjs-layout-x-small.vjs-no-flex .vjs-custom-control-spacer {\n width: auto;\n}\n\n.vjs-modal-dialog.vjs-text-track-settings {\n background-color: #2B333F;\n background-color: rgba(43, 51, 63, 0.75);\n color: #fff;\n height: 70%;\n}\n\n.vjs-text-track-settings .vjs-modal-dialog-content {\n display: table;\n}\n\n.vjs-text-track-settings .vjs-track-settings-colors,\n.vjs-text-track-settings .vjs-track-settings-font,\n.vjs-text-track-settings .vjs-track-settings-controls {\n display: table-cell;\n}\n\n.vjs-text-track-settings .vjs-track-settings-controls {\n text-align: right;\n vertical-align: bottom;\n}\n\n@supports (display: grid) {\n .vjs-text-track-settings .vjs-modal-dialog-content {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-template-rows: 1fr;\n padding: 20px 24px 0px 24px;\n }\n\n .vjs-track-settings-controls .vjs-default-button {\n margin-bottom: 20px;\n }\n\n .vjs-text-track-settings .vjs-track-settings-controls {\n grid-column: 1/-1;\n }\n\n .vjs-layout-small .vjs-text-track-settings .vjs-modal-dialog-content,\n.vjs-layout-x-small .vjs-text-track-settings .vjs-modal-dialog-content,\n.vjs-layout-tiny .vjs-text-track-settings .vjs-modal-dialog-content {\n grid-template-columns: 1fr;\n }\n}\n.vjs-track-setting > select {\n margin-right: 1em;\n margin-bottom: 0.5em;\n}\n\n.vjs-text-track-settings fieldset {\n margin: 5px;\n padding: 3px;\n border: none;\n}\n\n.vjs-text-track-settings fieldset span {\n display: inline-block;\n}\n\n.vjs-text-track-settings fieldset span > select {\n max-width: 7.3em;\n}\n\n.vjs-text-track-settings legend {\n color: #fff;\n margin: 0 0 5px 0;\n}\n\n.vjs-text-track-settings .vjs-label {\n position: absolute;\n clip: rect(1px 1px 1px 1px);\n clip: rect(1px, 1px, 1px, 1px);\n display: block;\n margin: 0 0 5px 0;\n padding: 0;\n border: 0;\n height: 1px;\n width: 1px;\n overflow: hidden;\n}\n\n.vjs-track-settings-controls button:focus,\n.vjs-track-settings-controls button:active {\n outline-style: solid;\n outline-width: medium;\n background-image: linear-gradient(0deg, #fff 88%, #73859f 100%);\n}\n\n.vjs-track-settings-controls button:hover {\n color: rgba(43, 51, 63, 0.75);\n}\n\n.vjs-track-settings-controls button {\n background-color: #fff;\n background-image: linear-gradient(-180deg, #fff 88%, #73859f 100%);\n color: #2B333F;\n cursor: pointer;\n border-radius: 2px;\n}\n\n.vjs-track-settings-controls .vjs-default-button {\n margin-right: 1em;\n}\n\n@media print {\n .video-js > *:not(.vjs-tech):not(.vjs-poster) {\n visibility: hidden;\n }\n}\n.vjs-resize-manager {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: none;\n z-index: -1000;\n}\n\n.js-focus-visible .video-js *:focus:not(.focus-visible) {\n outline: none;\n}\n\n.video-js *:focus:not(:focus-visible) {\n outline: none;\n}\n",".video-js {\n width: calc(100% - 40px);\n max-width: 800px;\n max-height: 100%;\n margin: 0 auto;\n}\n",".audio-file-view .video-js {\n width: calc(100% - 40px);\n max-width: 500px;\n height: 3em;\n margin: 0 auto;\n}\n.audio-file-view .video-js .vjs-fullscreen-control {\n display: none;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/draft.99bd13be.css b/media/assets/frontend/static/css/draft.99bd13be.css new file mode 100644 index 00000000000..cdac7b5e37e --- /dev/null +++ b/media/assets/frontend/static/css/draft.99bd13be.css @@ -0,0 +1,2 @@ +#wrapper{display:flex;height:100%;width:100%}.header .button-group{align-items:center;display:flex}.header .add-reviewer-btn,.header .common-list-btn{margin-right:.25em}.header .common-list-btn .common-list-btn-number{margin-left:.5em}.main .cur-view-container{background-color:#fafaf9;display:flex;flex-flow:row nowrap;height:100%;width:100%}.main .cur-view-container .cur-view-content{flex:auto;height:100%}.main .cur-view-right-part{flex-shrink:0;height:100%;position:relative;width:300px}.cur-file-info .file-info{display:block;padding-top:10px}.file-info .draft-link,.file-info .view-file-link{color:#1e1e1e;display:block;font-size:.6em;font-weight:400;text-decoration:underline}.file-info .file-review{color:#999;font-size:1rem;font-weight:400}.cur-file-info .last-modification{font-size:.8125rem}.seafile-toggle-diff{display:flex;margin-right:10px}.seafile-toggle-diff .custom-switch .custom-switch-indicator{border:1px solid #e9ecef}.seafile-toggle-diff .custom-switch-input:checked~.custom-switch-indicator{background-color:#f19645}.review-side-panel{background-color:#fff;border-left:1px solid #e6e6dd;height:100%}.review-side-panel-head{background-color:#fafaf9;border-bottom:1px solid #e5e5e5;font-weight:700;line-height:3em;text-align:center}.review-side-panel-body{height:100%;overflow-y:scroll;padding:1rem 1rem 3rem}.review-side-panel-body .dirent-table-container{padding-left:0}.dirent-table-container th{word-wrap:break-word;word-break:normal}.dirent-table-container td a:hover{text-decoration:underline}.review-side-panel-item{border-bottom:1px solid #e6e6dd;padding:1em 0}.review-side-panel-item:last-child{border:0}.review-side-panel-item .author-info,.review-side-panel-item .reviewer-info{align-items:center;display:flex}.review-side-panel-header{color:#666;display:flex;font-size:.8125rem;font-weight:700;justify-content:space-between;margin-bottom:2px}.review-side-panel-item i{color:#c8c8c8;font-size:1rem;margin:5px 5px 0 0}.review-side-panel-item i:hover{color:#a4a4a4;cursor:pointer}.review-side-panel-avatar{height:1.5rem;margin-right:10px;width:1.5rem}.review-side-panel-item .author-name,.review-side-panel-item .reviewer-name{height:2rem;line-height:2rem}.markdown-viewer-render-content{position:relative}.markdown-viewer-render-content tr:nth-child(2n){background-color:#fff}.review-side-panel-nav{margin:0}.review-side-panel-nav .nav-item{padding-top:4px;width:33.3%}.review-side-panel-nav .nav-item .nav-link{margin:0 auto}.review-side-panel-nav .nav-item .nav-link.active{border-color:#f19645;color:#f19645}.review-side-panel-nav .nav-item i{font-size:1rem;padding:0 8px;width:1rem}.review-side-panel .tab-content{height:calc(100% - 38px)}.review-side-panel .tab-content .tab-pane{height:100%}@media (max-width:768px){.markdown-viewer-render-content{margin:0}.header .file-operation-btn{padding:.1rem .25rem}}@media (max-width:992px){.dirent-table-container td,.review-side-panel{font-size:12px!important}} +/*# sourceMappingURL=draft.99bd13be.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/draft.99bd13be.css.map b/media/assets/frontend/static/css/draft.99bd13be.css.map new file mode 100644 index 00000000000..089abe6e29c --- /dev/null +++ b/media/assets/frontend/static/css/draft.99bd13be.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/draft.99bd13be.css","mappings":"AAAA,SAGE,YAAa,CAFb,WAAY,CACZ,UAEF,CAEA,sBAEE,kBAAmB,CADnB,YAEF,CAEA,mDACE,kBACF,CAEA,iDACE,gBACF,CAEA,0BAKE,wBAAyB,CAFzB,YAAa,CACb,oBAAqB,CAFrB,WAAY,CADZ,UAKF,CAEA,4CACE,SAAU,CACV,WACF,CAEA,2BAGE,aAAc,CAFd,WAAY,CAGZ,iBAAkB,CAFlB,WAGF,CAEA,0BACE,aAAc,CACd,gBACF,CAEA,kDAGE,aAAc,CAEd,aAAc,CAHd,cAAe,CAIf,eAAmB,CAFnB,yBAGF,CAEA,wBACE,UAAW,CACX,cAAe,CACf,eACF,CAEA,kCACE,kBACF,CAEA,qBACE,YAAa,CACb,iBACF,CACA,6DACE,wBACF,CACA,2EACE,wBACF,CAEA,mBAEE,qBAAsB,CADtB,6BAA8B,CAE9B,WACF,CACA,wBAGE,wBAAyB,CAFzB,+BAAgC,CAIhC,eAAgB,CAHhB,eAAgB,CAEhB,iBAEF,CACA,wBAGE,WAAY,CADZ,iBAAkB,CADlB,sBAGF,CACA,gDACE,cACF,CACA,2BACE,oBAAqB,CACrB,iBACF,CACA,mCACE,yBACF,CACA,wBACE,+BAAgC,CAChC,aACF,CACA,mCACE,QACF,CACA,4EAGE,kBAAmB,CADnB,YAEF,CACA,0BAKE,UAAW,CAJX,YAAa,CAKb,kBAAoB,CAFpB,eAAiB,CAFjB,6BAA8B,CAC9B,iBAIF,CACA,0BACE,aAAc,CAEd,cAAe,CADf,kBAEF,CACA,gCAEE,aAAc,CADd,cAEF,CACA,0BAEE,aAAc,CADd,iBAAkB,CAElB,YACF,CACA,4EAEE,WAAY,CACZ,gBACF,CAEA,gCACE,iBACF,CAEA,iDACE,qBACF,CAEA,uBACE,QACF,CACA,iCAEE,eAAgB,CADhB,WAEF,CACA,2CACE,aACF,CACA,kDACE,oBAAqB,CACrB,aACF,CACA,mCAEE,cAAe,CADf,aAAc,CAEd,UACF,CACA,gCACE,wBACF,CACA,0CACE,WACF,CAEA,yBACE,gCACE,QACF,CACA,4BACE,oBACF,CACF,CAEA,yBACE,8CACE,wBACF,CACF","sources":["css/draft.css"],"sourcesContent":["#wrapper {\n height: 100%;\n width: 100%;\n display: flex;\n}\n\n.header .button-group {\n display: flex;\n align-items: center;\n}\n\n.header .common-list-btn, .header .add-reviewer-btn {\n margin-right: .25em;\n}\n\n.header .common-list-btn .common-list-btn-number {\n margin-left: .5em;\n}\n\n.main .cur-view-container {\n width: 100%;\n height: 100%;\n display: flex;\n flex-flow: row nowrap;\n background-color: #fafaf9;\n}\n\n.main .cur-view-container .cur-view-content {\n flex: auto;\n height: 100%;\n}\n\n.main .cur-view-right-part {\n height: 100%;\n width: 300px;\n flex-shrink: 0;\n position: relative;\n}\n\n.cur-file-info .file-info {\n display: block;\n padding-top: 10px;\n}\n\n.file-info .view-file-link, \n.file-info .draft-link {\n font-size: .6em;\n color: #1e1e1e;\n text-decoration: underline;\n display: block;\n font-weight: normal;\n}\n\n.file-info .file-review {\n color: #999;\n font-size: 1rem;\n font-weight: 400;\n}\n\n.cur-file-info .last-modification {\n font-size: 0.8125rem;\n}\n\n.seafile-toggle-diff {\n display: flex;\n margin-right: 10px;\n}\n.seafile-toggle-diff .custom-switch .custom-switch-indicator {\n border: 1px solid #e9ecef;\n}\n.seafile-toggle-diff .custom-switch-input:checked ~ .custom-switch-indicator {\n background-color: #f19645;\n}\n\n.review-side-panel {\n border-left: 1px solid #e6e6dd;\n background-color: #fff;\n height: 100%;\n}\n.review-side-panel-head {\n border-bottom: 1px solid #e5e5e5;\n line-height: 3em;\n background-color: #fafaf9;\n text-align: center;\n font-weight: 700;\n}\n.review-side-panel-body {\n padding: 1rem 1rem 3rem;\n overflow-y: scroll;\n height: 100%;\n}\n.review-side-panel-body .dirent-table-container {\n padding-left: 0;\n}\n.dirent-table-container th {\n word-wrap: break-word;\n word-break: normal;\n}\n.dirent-table-container td a:hover {\n text-decoration: underline;\n}\n.review-side-panel-item {\n border-bottom: 1px solid #e6e6dd;\n padding: 1em 0;\n}\n.review-side-panel-item:last-child {\n border: 0;\n}\n.review-side-panel-item .reviewer-info,\n.review-side-panel-item .author-info {\n display: flex;\n align-items: center;\n}\n.review-side-panel-header {\n display: flex;\n justify-content: space-between;\n margin-bottom: 2px;\n font-weight: bold;\n color: #666;\n font-size: 0.8125rem;\n}\n.review-side-panel-item i {\n color: #c8c8c8;\n margin: 5px 5px 0 0;\n font-size: 1rem;\n}\n.review-side-panel-item i:hover {\n cursor: pointer;\n color: #a4a4a4;\n}\n.review-side-panel-avatar {\n margin-right: 10px;\n height: 1.5rem;\n width: 1.5rem;\n}\n.review-side-panel-item .reviewer-name,\n.review-side-panel-item .author-name {\n height: 2rem;\n line-height: 2rem;\n}\n\n.markdown-viewer-render-content {\n position: relative;\n}\n\n.markdown-viewer-render-content tr:nth-child(2n) {\n background-color: #fff;\n}\n\n.review-side-panel-nav {\n margin: 0;\n}\n.review-side-panel-nav .nav-item {\n width: 33.3%;\n padding-top: 4px;\n}\n.review-side-panel-nav .nav-item .nav-link {\n margin: 0 auto;\n}\n.review-side-panel-nav .nav-item .nav-link.active {\n border-color: #f19645;\n color: #f19645;\n}\n.review-side-panel-nav .nav-item i {\n padding: 0 8px;\n font-size: 1rem;\n width: 1rem;\n}\n.review-side-panel .tab-content {\n height: calc(100% - 38px);\n}\n.review-side-panel .tab-content .tab-pane {\n height: 100%;\n}\n\n@media (max-width: 768px) {\n .markdown-viewer-render-content {\n margin: 0px;\n }\n .header .file-operation-btn {\n padding: 0.1rem 0.25rem;\n }\n}\n\n@media (max-width: 992px) {\n .review-side-panel, .dirent-table-container td {\n font-size: 12px !important;\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/fileHistory.067ab156.css b/media/assets/frontend/static/css/fileHistory.067ab156.css new file mode 100644 index 00000000000..1f33eb10057 --- /dev/null +++ b/media/assets/frontend/static/css/fileHistory.067ab156.css @@ -0,0 +1,2 @@ +.item-active{background-color:#fdc297!important;color:#fff}.item-active i{color:#fff}.history-list-item .history-info{flex:1 1;padding:0 .5rem}.history-list-item .history-operation{align-items:center;display:flex;justify-content:center;width:1.5rem}.history-info .time{color:#000}.history-info .owner{align-items:center;color:#888;display:flex;margin-top:.25rem}.owner .squire-icon{background-color:#549b5a;height:.5rem;margin-right:.25rem;width:.5rem}.history-body .dropdown-menu{min-width:8rem}.history-body .dropdown-menu a{color:#6e7687;text-decoration:none}.history-header{align-items:center;background-color:#f4f4f7;border-bottom:1px solid #e8e8e8;display:flex;font-size:1rem;justify-content:space-between;padding:.5rem 1rem}.file-history-header{background-color:#fff;height:50px}.history-header .title{font-size:1.25rem;line-height:1rem}.history-header .title .go-back{color:silver;margin-right:.75rem}.history-header .title .go-back:hover{color:#f93;text-decoration:none}.content-viewer{display:flex;flex:1 1;min-height:0}.content-viewer .sf-slate-viewer-scroll-container{background-color:#fafaf9;display:block;padding:20px 40px}.content-viewer .sf-slate-viewer-article-container .article{max-width:100%;width:100%}.panel-header{border-bottom:1px solid #e8e8e8;font-size:1rem;font-weight:400;height:36px;line-height:1.5;padding:.5rem 0;position:relative;text-align:center;width:100%}.history-body{display:flex;flex:1 1;height:500px;min-height:0;overflow:hidden}.history-list-container{flex:1 1;flex-direction:column;min-height:0;overflow:auto}.history-list-container .history-list-item{display:flex;flex:1 1;padding:5px 10px}.history-list-container .history-list-item:hover{background-color:#ffe7d5}.history-content .main-panel{flex:1 1 auto}.history-content .history-side-panel{background-color:#fff;border-left:1px solid #e5e5e5;display:flex;flex:0 0 auto;flex-direction:column;-webkit-user-select:none;-ms-user-select:none;user-select:none}.history-content .history-side-panel .history-side-panel-title{border-bottom:1px solid #e5e5e5;font-size:1rem;font-weight:bolder;height:50px;line-height:50px;padding:0 10px}@media (min-width:992px){.history-side-panel{width:260px}.history-content .main-panel{max-width:calc(100% - 260px)}}@media (max-width:991.8px){.history-content .main-panel{max-width:calc(100% - 190px)}}@media (max-width:768px){.history-content .main-panel{max-width:100%}.content-viewer .sf-slate-viewer-scroll-container{padding:20px}.content-viewer .sf-slate-viewer-article-container{margin:0;padding:0}.content-viewer .sf-slate-viewer-article-container .article{padding:20px}} +/*# sourceMappingURL=fileHistory.067ab156.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/fileHistory.067ab156.css.map b/media/assets/frontend/static/css/fileHistory.067ab156.css.map new file mode 100644 index 00000000000..3799286d11f --- /dev/null +++ b/media/assets/frontend/static/css/fileHistory.067ab156.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/fileHistory.067ab156.css","mappings":"AAAA,aAEE,kCAAoC,CADpC,UAEF,CAEA,eACE,UACF,CAEA,iCACE,QAAO,CACP,eACF,CAEA,sCAGE,kBAAmB,CADnB,YAAa,CAEb,sBAAuB,CAHvB,YAIF,CAEA,oBACE,UACF,CAEA,qBAIE,kBAAmB,CAFnB,UAAW,CACX,YAAa,CAFb,iBAIF,CAEA,oBAGE,wBAAyB,CADzB,YAAc,CAEd,mBAAqB,CAHrB,WAIF,CAEA,6BACE,cACF,CAEA,+BAEE,aAAc,CADd,oBAEF,CC9CA,gBAGE,kBAAmB,CAEnB,wBAAyB,CADzB,+BAAgC,CAHhC,YAAa,CAKb,cAAe,CAJf,6BAA8B,CAK9B,kBACF,CAEA,qBACE,qBAAsB,CACtB,WACF,CAEA,uBACE,iBAAkB,CAClB,gBACF,CAEA,gCAEE,YAAc,CADd,mBAEF,CAEA,sCACE,UAAa,CACb,oBACF,CAEA,gBAEE,YAAa,CADb,QAAO,CAEP,YACF,CAEA,kDACE,wBAAyB,CAEzB,aAAc,CADd,iBAEF,CAEA,4DAEE,cAAe,CADf,UAEF,CAEA,cAIE,+BAAgC,CAChC,cAAe,CACf,eAAgB,CAEhB,WAAY,CADZ,eAAgB,CALhB,eAAgB,CADhB,iBAAkB,CAQlB,iBAAkB,CANlB,UAOF,CAEA,cACE,YAAa,CACb,QAAO,CAGP,YAAa,CADb,YAAa,CADb,eAGF,CAEA,wBACE,QAAO,CACP,qBAAsB,CACtB,YAAa,CACb,aACF,CAEA,2CAEE,YAAa,CACb,QAAO,CAFP,gBAGF,CAEA,iDACE,wBACF,CAEA,6BACE,aACF,CAEA,qCAIE,qBAAsB,CADtB,6BAA8B,CAE9B,YAAa,CAJb,aAAc,CAKd,qBAAsB,CAJtB,wBAAiB,CAAjB,oBAAiB,CAAjB,gBAKF,CAEA,+DAEE,+BAAgC,CAEhC,cAAe,CAGf,kBAAmB,CANnB,WAAY,CAEZ,gBAAiB,CAEjB,cAGF,CAEA,yBACE,oBACE,WACF,CACA,6BACE,4BACF,CACF,CAEA,2BACE,6BACE,4BACF,CACF,CAEA,yBACE,6BACE,cACF,CACA,kDACE,YACF,CACA,mDACE,QAAS,CACT,SACF,CACA,4DACE,YACF,CACF","sources":["css/history-record-item.css","css/file-history.css"],"sourcesContent":[".item-active {\n color: #fff;\n background-color: #fdc297 !important;\n}\n\n.item-active i {\n color: #fff;\n}\n\n.history-list-item .history-info {\n flex: 1;\n padding: 0 0.5rem;\n}\n\n.history-list-item .history-operation {\n width: 1.5rem;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.history-info .time {\n color: #000;\n}\n\n.history-info .owner {\n margin-top: 0.25rem;\n color: #888;\n display: flex;\n align-items: center;\n}\n\n.owner .squire-icon {\n width: 0.5rem;\n height: 0.5rem;\n background-color: #549b5a;\n margin-right: 0.25rem;\n}\n\n.history-body .dropdown-menu {\n min-width: 8rem;\n}\n\n.history-body .dropdown-menu a {\n text-decoration: none;\n color: #6e7687;\n}\n",".history-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-bottom: 1px solid #e8e8e8;\n background-color: #f4f4f7;\n font-size: 1rem;\n padding: 0.5rem 1rem;\n}\n\n.file-history-header { /* for markdown file history */\n background-color: #fff;\n height: 50px;\n}\n\n.history-header .title {\n font-size: 1.25rem;\n line-height: 1rem;\n}\n\n.history-header .title .go-back {\n margin-right: 0.75rem;\n color: #c0c0c0;\n}\n\n.history-header .title .go-back:hover {\n color:#ff9933;\n text-decoration: none;\n}\n\n.content-viewer {\n flex: 1;\n display: flex;\n min-height: 0;\n}\n\n.content-viewer .sf-slate-viewer-scroll-container {\n background-color: #fafaf9;\n padding: 20px 40px;\n display: block;\n}\n\n.content-viewer .sf-slate-viewer-article-container .article {\n width: 100%;\n max-width: 100%;\n}\n\n.panel-header {\n position: relative;\n padding: .5rem 0;\n width: 100%;\n border-bottom: 1px solid #e8e8e8;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n height: 36px;\n text-align: center;\n}\n\n.history-body {\n display: flex;\n flex: 1;\n overflow: hidden;\n min-height: 0;\n height: 500px;\n}\n\n.history-list-container {\n flex: 1; \n flex-direction: column;\n min-height: 0;\n overflow: auto;\n}\n\n.history-list-container .history-list-item {\n padding: 5px 10px;\n display: flex;\n flex: 1;\n}\n\n.history-list-container .history-list-item:hover {\n background-color: #ffe7d5;\n}\n\n.history-content .main-panel {\n flex: 1 1 auto;\n}\n\n.history-content .history-side-panel {\n flex: 0 0 auto;\n user-select: none;\n border-left: 1px solid #e5e5e5;\n background-color: #fff;\n display: flex;\n flex-direction: column;\n}\n\n.history-content .history-side-panel .history-side-panel-title {\n height: 50px;\n border-bottom: 1px solid #e5e5e5;\n line-height: 50px;\n font-size: 1rem;\n padding: 0 10px;\n /*background-color: rgb(250,250,249);*/\n font-weight: bolder;\n}\n\n@media (min-width:992px) {\n .history-side-panel {\n width: 260px;\n }\n .history-content .main-panel {\n max-width: calc(100% - 260px);\n }\n}\n\n@media (max-width:991.8px) {\n .history-content .main-panel {\n max-width: calc(100% - 190px);\n }\n}\n\n@media (max-width:768px) {\n .history-content .main-panel {\n max-width: 100%;\n }\n .content-viewer .sf-slate-viewer-scroll-container {\n padding: 20px;\n }\n .content-viewer .sf-slate-viewer-article-container {\n margin: 0;\n padding: 0;\n }\n .content-viewer .sf-slate-viewer-article-container .article {\n padding: 20px;\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/fileHistoryOld.34922be6.css b/media/assets/frontend/static/css/fileHistoryOld.34922be6.css new file mode 100644 index 00000000000..1b0d83c8ba3 --- /dev/null +++ b/media/assets/frontend/static/css/fileHistoryOld.34922be6.css @@ -0,0 +1,2 @@ +.old-history-header{align-items:center;background-color:#f4f4f7;border-bottom:1px solid #e8e8e8;display:flex;font-size:1rem;justify-content:space-between;padding:.5rem 1rem}.old-history-main{display:inline!important;min-height:1px;overflow:auto;padding:16px 10% 0;position:relative}.old-history-main .go-back{color:#ccc;float:left;font-size:25px;margin-left:-3rem}.old-history-main .go-back:hover{color:#f93;text-decoration:none}.old-history-main .get-more-btn{background:#efefef;border:0;border-radius:2px;color:#777;padding:.5em 0;width:100%}.old-history-main .get-more-btn:hover{color:#444}.old-history-main p{color:grey;font-size:12px;margin-bottom:1rem;margin-top:0}.old-history-main h2{color:#222;font-size:1.5em;font-weight:700;line-height:1.5}.old-history-main .file-name{word-wrap:break-word;color:#ee8204}.old-history-main .commit-list{margin:8px 0 40px;width:100%}.old-history-main .commit-list .avatar{border-radius:2px;height:16px;vertical-align:middle;width:16px}.old-history-main .commit-list .username{color:#eb8205;font-weight:700;text-decoration:none;vertical-align:middle}.old-history-more-operation i{color:#999;cursor:pointer}.old-history-more-operation a:hover{text-decoration:none}.old-history-more-operation i:hover{color:#666}@media (max-width:768px){.old-history-main .go-back{margin-left:-2rem}} +/*# sourceMappingURL=fileHistoryOld.34922be6.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/fileHistoryOld.34922be6.css.map b/media/assets/frontend/static/css/fileHistoryOld.34922be6.css.map new file mode 100644 index 00000000000..b0755f50f4f --- /dev/null +++ b/media/assets/frontend/static/css/fileHistoryOld.34922be6.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/fileHistoryOld.34922be6.css","mappings":"AAAA,oBAGE,kBAAmB,CAEnB,wBAAyB,CADzB,+BAAgC,CAHhC,YAAa,CAKb,cAAe,CAJf,6BAA8B,CAK9B,kBACF,CAEA,kBAEE,wBAA0B,CAG1B,cAAe,CAFf,aAAc,CAFd,kBAAmB,CAGnB,iBAEF,CAEA,2BAEE,UAAW,CACX,UAAW,CAFX,cAAe,CAGf,iBACF,CAEA,iCACE,UAAa,CACb,oBACF,CAEA,gCAGE,kBAAmB,CACnB,QAAS,CAET,iBAAkB,CADlB,UAAW,CAHX,cAAe,CADf,UAMF,CACA,sCACE,UACF,CAEA,oBACE,UAAc,CACd,cAAe,CAEf,kBAAmB,CADnB,YAEF,CAEA,qBAEE,UAAW,CADX,eAAgB,CAEhB,eAAiB,CACjB,eACF,CAEA,6BAEE,oBAAqB,CADrB,aAEF,CAEA,+BAEE,iBAAkB,CADlB,UAEF,CAEA,uCAGE,iBAAkB,CADlB,WAAY,CAEZ,qBAAsB,CAHtB,UAIF,CAEA,yCAEE,aAAc,CAEd,eAAiB,CADjB,oBAAqB,CAFrB,qBAIF,CAEA,8BACE,UAAW,CACX,cACF,CAEA,oCACE,oBACF,CAEA,oCACE,UACF,CAEA,yBACE,2BACE,iBACF,CACF","sources":["css/file-history-old.css"],"sourcesContent":[".old-history-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-bottom: 1px solid #e8e8e8;\n background-color: #f4f4f7;\n font-size: 1rem;\n padding: 0.5rem 1rem;\n}\n\n.old-history-main {\n padding: 16px 10% 0;\n display: inline !important;\n overflow: auto;\n position: relative;\n min-height: 1px;\n}\n\n.old-history-main .go-back {\n font-size: 25px;\n color: #ccc;\n float: left;\n margin-left: -3rem;\n}\n\n.old-history-main .go-back:hover {\n color:#ff9933;\n text-decoration: none;\n}\n\n.old-history-main .get-more-btn {\n width: 100%;\n padding: .5em 0;\n background: #efefef;\n border: 0;\n color: #777;\n border-radius: 2px;\n}\n.old-history-main .get-more-btn:hover {\n color: #444;\n}\n\n.old-history-main p {\n color: #808080;\n font-size: 12px;\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\n.old-history-main h2 {\n font-size: 1.5em;\n color: #222;\n font-weight: bold;\n line-height: 1.5;\n}\n\n.old-history-main .file-name {\n color: #ee8204;\n word-wrap: break-word;\n} \n\n.old-history-main .commit-list {\n width: 100%;\n margin: 8px 0 40px;\n}\n\n.old-history-main .commit-list .avatar {\n width: 16px;\n height: 16px;\n border-radius: 2px;\n vertical-align: middle;\n}\n\n.old-history-main .commit-list .username {\n vertical-align: middle;\n color: #eb8205;\n text-decoration: none;\n font-weight: bold;\n}\n\n.old-history-more-operation i {\n color: #999;\n cursor: pointer;\n}\n\n.old-history-more-operation a:hover {\n text-decoration: none;\n}\n\n.old-history-more-operation i:hover {\n color: #666;\n}\n\n@media (max-width: 768px) {\n .old-history-main .go-back {\n margin-left: -2rem;\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/historyTrashFileView.bcf014b6.css b/media/assets/frontend/static/css/historyTrashFileView.bcf014b6.css new file mode 100644 index 00000000000..483b85c6e82 --- /dev/null +++ b/media/assets/frontend/static/css/historyTrashFileView.bcf014b6.css @@ -0,0 +1,2 @@ +.file-view-content.md-content{background:#f4f4f4;border-right:none;display:flex;height:100%;padding:0;width:100%}.md-content .sf-slate-viewer-scroll-container .article{border:1px solid #ccc;box-shadow:0 0 6px #ccc;padding:70px 75px}.sdoc-file-view .sdoc-editor-container{background:transparent} +/*# sourceMappingURL=historyTrashFileView.bcf014b6.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/historyTrashFileView.bcf014b6.css.map b/media/assets/frontend/static/css/historyTrashFileView.bcf014b6.css.map new file mode 100644 index 00000000000..d07286ae6dd --- /dev/null +++ b/media/assets/frontend/static/css/historyTrashFileView.bcf014b6.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/historyTrashFileView.bcf014b6.css","mappings":"AAAA,8BAGI,kBAAmB,CACnB,iBAAkB,CAElB,YAAa,CAJb,WAAY,CAGZ,SAAU,CAJV,UAMJ,CAEA,uDACI,qBAAsB,CACtB,uBAAwB,CACxB,iBACJ,CCbA,uCACE,sBACF","sources":["css/md-file-view.css","css/sdoc-file-view.css"],"sourcesContent":[".file-view-content.md-content {\n width: 100%;\n height: 100%;\n background: #f4f4f4;\n border-right: none;\n padding: 0;\n display: flex;\n}\n\n.md-content .sf-slate-viewer-scroll-container .article {\n border: 1px solid #ccc;\n box-shadow: 0 0 6px #ccc;\n padding: 70px 75px;\n}\n",".sdoc-file-view .sdoc-editor-container {\n background: transparent;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/markdownEditor.d88bbc1a.css b/media/assets/frontend/static/css/markdownEditor.d88bbc1a.css new file mode 100644 index 00000000000..f2e2e8e6cf1 --- /dev/null +++ b/media/assets/frontend/static/css/markdownEditor.d88bbc1a.css @@ -0,0 +1,2 @@ +.seafile-btn-view-review{align-items:center;display:flex}.seafile-btn-view-review .tag:hover{cursor:pointer}.topbar-btn-container{align-items:center;display:flex}.btn-new-draft,.seafile-btn-add-review{margin-right:10px}.collab-users-dropdown.dropdown{margin-right:6px}.btn-active[data-active=true]{color:#eb8205}.add-item-btn{align-items:center;background:#fff;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border-top:1px solid #dedede;cursor:pointer;display:flex;font-size:14px;font-weight:500;height:30px;overflow:hidden;padding:0 10px;position:relative}.add-item-btn:hover{background-color:#f5f5f5}.add-item-btn .dtable-icon-add-table{font-size:12px;font-weight:600;margin-right:10px;-webkit-transform:none;transform:none}.add-item-btn .add-new-option{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tag-list-container{list-style:none;max-height:15rem;overflow:auto}.add-tag-link{color:#666}.add-tag-link:hover{background:#f5f5f5;color:#444;text-decoration:none}.tag-list-item{height:2.5rem}.tag-list-item.hl{background:#f5f5f5}.tag-selected-icon{color:#999}.tag-delete-icon{color:#999;font-size:18px}.tag-delete-icon:hover{color:#444}.tag-dialog-back{color:#888;cursor:pointer;margin-right:10px}.tag-dialog-back:focus,.tag-dialog-back:hover{color:#444}.tag-color-option .colorinput-color:before{display:none}.tag-color-option .color-selected{opacity:0}.tag-color-option .colorinput-input:checked~.colorinput-color .color-selected{opacity:1}.tag-color-popover .popover{max-width:360px}.tag-color-popover .colorinput-color,.tag-color-popover .tag-color{height:20px;width:20px}.tag-color-popover .tag-color-option .colorinput-input:checked~.colorinput-color .color-selected{font-size:12px}.edit-filetag-popover .edit-filetag-popover-input{color:#212529;font-size:14px;height:30px;max-height:30px}.edit-filetag-popover .popover{padding:10px 10px 0;width:200px}.edit-filetag-popover .tag-list-container{padding:10px 0}.edit-filetag-popover .tag-list-container .tag-not-found{opacity:.5}.edit-filetag-popover .tag-list-item{height:30px}.edit-filetag-popover .tag-item{align-items:center;border-radius:10px;display:flex;margin:.25rem 0;max-width:130px;padding:0 .5rem;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.edit-filetag-popover .tag-item .tag-name{color:#fff;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.edit-filetag-popover .add-item-btn{margin:0 -10px}.dirent-table-container tr{border:none}.dirent-table-container td,.dirent-table-container th{border:none;padding:5px 3px}.dirent-table-container th{color:#9c9c9c;font-size:13px;font-weight:400;text-align:left}.dirent-table-container td{color:#333;font-size:14px;word-break:break-all}.dirent-table-container .file-tag-container th{list-style:none;padding-top:8px;vertical-align:top}.dirent-table-container .file-tag-container .tag-list{list-style:none}.file-related-files th{vertical-align:top}.file-related-files td i{padding:0}.file-related-files td ul{list-style:none;max-height:100px;overflow-x:hidden;overflow-y:scroll;text-overflow:ellipsis;white-space:nowrap}.file-related-files td ul li{margin-bottom:5px}.file-related-files ul li a,.list-related-file-table tr td a{color:#333}.list-related-file-body{max-height:500px;min-height:200px;overflow-y:scroll}.detail-container .tab-content{height:calc(100% - 73px)}.detail-container .nav-item .nav-link,.detail-container .nav-item .nav-link i{margin:0 auto}#root,body,html{height:100%;width:100%}#root{display:flex;flex-direction:column;min-height:0;min-width:0}.seafile-md-viewer{flex-direction:row;float:none;height:100%;position:relative}.sf-md-viewer-topbar-first,.sf-md-viewer-topbar-first-narrow{align-items:center;background-color:#fff;border-bottom:1px solid #e5e5e5;box-shadow:0 3px 2px -2px hsla(0,0%,78%,.15);flex-shrink:0;padding:4px 10px}.seafile-md-viewer-container{background-color:#fafaf9;display:flex;height:100%;overflow:auto;position:relative;width:100%}.seafile-md-viewer-container.side-panel-on{width:calc(100% - 260px)}.seafile-md-viewer-slate{flex:auto;margin:20px 0 20px 5%;max-width:calc(90% - 260px);position:relative}.seafile-md-viewer-main{background:#fafaf9;flex:auto;overflow:auto;width:70%}.seafile-md-viewer-slate.side-panel-on{margin:20px 5%}.seafile-md-viewer .seafile-editor-outline{background-color:#fafaf9;border-left:0;height:80%;margin:40px auto;overflow-y:hidden;padding:0 .75rem 0 1.25rem;position:fixed;right:5%;top:68px;width:260px;z-index:1}.seafile-md-viewer .seafile-editor-outline:hover{overflow:auto}.seafile-md-viewer .seafile-editor-outline .active{border-left:1px solid #eb8205;color:#eb8205}.seafile-md-viewer .seafile-editor-outline-heading{border-bottom:1px solid #eee;color:#a0a0a0;padding:7px 0}.seafile-editor-outline .outline-h2,.seafile-editor-outline .outline-h3{font-size:14px;height:30px;margin-left:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.seafile-editor-outline .outline-h2{padding-left:20px}.seafile-editor-outline .outline-h3{padding-left:40px}.seafile-md-viewer-side-panel{height:100%;overflow:hidden;position:fixed;right:0;top:87px;width:260px}.seafile-md-viewer-side-panel .seafile-history-side-panel{border-left:1px solid #e6e6dd;height:100%;width:100%}@media (max-width:991.8px){.seafile-editor-outline{display:none}.seafile-md-viewer-slate{margin:20px 40px;max-width:100%;width:calc(100% - 80px)}}@media (max-width:768px){.sf-md-viewer-topbar-first{display:none!important}}@media (min-width:768px){.sf-md-viewer-topbar-first-narrow{display:none!important}}.topbar-file-info{display:inline-block;margin-left:8px;-webkit-user-select:text;-ms-user-select:text;user-select:text}.topbar-file-info .file-title{align-items:center;display:flex;font-size:1.2rem;font-weight:700}.topbar-file-info .file-title .iconfont{font-size:.875rem}.topbar-file-info .file-title .file-star{color:#999;cursor:pointer;font-size:.875rem;margin-left:.5rem;vertical-align:text-bottom}.topbar-file-info .file-title .file-star .star{color:#999}.topbar-file-info .file-state{font-size:.8125rem}.topbar-file-info .file-state .file-modifier-name{margin-right:.5rem}.topbar-file-info .file-state .file-modifier-savedraft{color:#888;margin-left:.5rem}.sf-md-viewer-content{display:flex;flex:1 1;min-height:0;min-width:0}*{margin:0;padding:0}html,input,textarea{background:#eee;font-family:Roboto,sans-serif;line-height:1.4}body{overflow-y:hidden}p{margin:0}:not(pre)>code{background-color:#eee;font-family:monospace;padding:3px}img{max-width:100%}img.active{box-shadow:0 0 0 2px blue}input{background:#fafafa;border:2px solid #ddd;box-sizing:border-box;font-size:.85em;padding:.5em;width:100%}input:focus{border-color:blue;outline:0}input[type=checkbox]{width:auto}a,a:hover{color:#eb8205}.lds-ripple{display:inline-block;height:64px;position:relative;width:64px}.lds-ripple div{-webkit-animation:lds-ripple 1s cubic-bezier(0,.2,.8,1) infinite;animation:lds-ripple 1s cubic-bezier(0,.2,.8,1) infinite;border:4px solid #eb8205;border-radius:50%;opacity:1;position:absolute}.lds-ripple div:nth-child(2){-webkit-animation-delay:-.5s;animation-delay:-.5s}@-webkit-keyframes lds-ripple{0%{height:0;left:28px;opacity:1;top:28px;width:0}to{height:58px;left:-1px;opacity:0;top:-1px;width:58px}}@keyframes lds-ripple{0%{height:0;left:28px;opacity:1;top:28px;width:0}to{height:58px;left:-1px;opacity:0;top:-1px;width:58px}}.empty-loading-page{height:100%;position:fixed;width:100%}.page-centered{left:50%;position:fixed;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)} +/*# sourceMappingURL=markdownEditor.d88bbc1a.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/markdownEditor.d88bbc1a.css.map b/media/assets/frontend/static/css/markdownEditor.d88bbc1a.css.map new file mode 100644 index 00000000000..0aaf40bac85 --- /dev/null +++ b/media/assets/frontend/static/css/markdownEditor.d88bbc1a.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/markdownEditor.d88bbc1a.css","mappings":"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","sources":["pages/markdown-editor/css/header-toolbar.css","css/common-add-tool.css","css/repo-tag.css","css/edit-filetag-popover.css","pages/markdown-editor/css/detail-list-view.css","css/markdown-viewer/markdown-editor.css","index.css"],"sourcesContent":[".seafile-btn-view-review {\n display: flex;\n align-items: center;\n}\n\n.seafile-btn-view-review .tag:hover {\n cursor: pointer;\n}\n\n.topbar-btn-container {\n display: flex;\n align-items: center;\n}\n\n.seafile-btn-add-review {\n margin-right: 10px;\n}\n\n.btn-new-draft {\n margin-right: 10px;\n}\n\n.collab-users-dropdown.dropdown {\n margin-right: 6px;\n}\n\n.btn-active[data-active=true] {\n color: #eb8205;\n}\n",".add-item-btn {\n cursor: pointer;\n display: flex;\n align-items: center;\n font-size: 14px;\n font-weight: 500;\n border-top: 1px solid #dedede;\n background: #fff;\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n position: relative;\n height: 30px;\n padding: 0 10px;\n overflow: hidden;\n}\n\n.add-item-btn:hover {\n background-color: #f5f5f5;\n}\n\n.add-item-btn .dtable-icon-add-table {\n margin-right: 10px;\n font-size: 12px;\n font-weight: 600;\n transform: none;\n}\n\n.add-item-btn .add-new-option {\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n",".tag-list-container {\n max-height: 15rem;\n list-style: none;\n overflow: auto;\n}\n\n.add-tag-link {\n color: #666;\n}\n\n.add-tag-link:hover {\n color: #444;\n text-decoration: none;\n background: #f5f5f5;\n}\n\n.tag-list-item {\n height: 2.5rem;\n}\n\n.tag-list-item.hl {\n background: #f5f5f5;\n}\n\n.tag-selected-icon {\n color: #999;\n}\n\n.tag-delete-icon {\n color: #999;\n font-size: 18px;\n}\n\n.tag-delete-icon:hover {\n color: #444;\n}\n\n.tag-dialog-back {\n color: #888;\n cursor: pointer;\n margin-right: 10px;\n}\n\n.tag-dialog-back:hover,\n.tag-dialog-back:focus {\n color: #444;\n}\n\n/* overwrite the code from seafile-ui */\n.tag-color-option .colorinput-color::before {\n display: none;\n}\n\n.tag-color-option .color-selected {\n opacity: 0;\n}\n\n.tag-color-option .colorinput-input:checked ~ .colorinput-color .color-selected {\n opacity: 1;\n}\n\n/* tag-color */\n.tag-color-popover .popover {\n max-width: 360px;\n}\n\n.tag-color-popover .tag-color {\n width: 20px;\n height: 20px;\n}\n\n.tag-color-popover .colorinput-color {\n width: 20px;\n height: 20px;\n}\n\n.tag-color-popover .tag-color-option .colorinput-input:checked ~ .colorinput-color .color-selected {\n font-size: 12px;\n}\n",".edit-filetag-popover .edit-filetag-popover-input {\n max-height: 30px;\n font-size: 14px;\n color: #212529;\n height: 30px;\n}\n\n.edit-filetag-popover .popover {\n padding: 10px;\n width: 200px;\n padding-bottom: 0px;\n}\n\n.edit-filetag-popover .tag-list-container {\n padding: 10px 0;\n}\n\n.edit-filetag-popover .tag-list-container .tag-not-found {\n opacity: 0.5;\n}\n\n.edit-filetag-popover .tag-list-item {\n height: 30px;\n}\n\n.edit-filetag-popover .tag-item {\n display: flex;\n align-items: center;\n max-width: 130px;\n margin: 0.25rem 0;\n padding: 0 0.5rem;\n width: fit-content;\n border-radius: 10px;\n}\n\n.edit-filetag-popover .tag-item .tag-name {\n color: #fff;\n font-size: 13px;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n}\n\n.edit-filetag-popover .add-item-btn {\n margin: 0 -10px;\n}\n",".dirent-table-container tr {\n border: none;\n}\n\n.dirent-table-container th,\n.dirent-table-container td {\n padding: 5px 3px;\n border: none;\n}\n\n.dirent-table-container th {\n font-size: 13px;\n text-align: left;\n font-weight: normal;\n color: #9c9c9c;\n}\n\n.dirent-table-container td {\n font-size: 14px;\n color: #333;\n word-break: break-all;\n}\n\n.dirent-table-container .file-tag-container th {\n vertical-align: top;\n list-style: none;\n padding-top: 8px;\n}\n\n.dirent-table-container .file-tag-container .tag-list {\n list-style: none;\n}\n\n.file-related-files th {\n vertical-align: top;\n}\n\n.file-related-files td i {\n padding: 0;\n}\n\n.file-related-files td ul {\n list-style: none;\n max-height: 100px;\n overflow-y: scroll;\n white-space: nowrap;\n overflow-x: hidden;\n text-overflow: ellipsis;\n}\n\n.file-related-files td ul li {\n margin-bottom: 5px;\n}\n\n.file-related-files ul li a,\n.list-related-file-table tr td a {\n color: #333;\n}\n\n.list-related-file-body {\n min-height: 200px;\n max-height: 500px;\n overflow-y: scroll;\n}\n\n.detail-container .tab-content {\n height: calc(100% - 73px);\n}\n\n.detail-container .nav-item .nav-link, .detail-container .nav-item .nav-link i {\n margin: 0 auto;\n}\n","html, body, #root {\n width: 100%;\n height: 100%;\n}\n\n#root {\n display: flex;\n flex-direction: column;\n min-height: 0;\n min-width: 0;\n}\n\n.seafile-md-viewer {\n height: 100%;\n flex-direction: row;\n position: relative;\n float: none;\n}\n.sf-md-viewer-topbar-first,\n.sf-md-viewer-topbar-first-narrow {\n padding: 4px 10px;\n background-color: #fff;\n border-bottom: 1px solid #e5e5e5;\n box-shadow: 0 3px 2px -2px rgba(200,200,200,.15);\n flex-shrink:0;\n align-items: center;\n}\n.seafile-md-viewer-container {\n width: 100%;\n background-color: #fafaf9;\n height: 100%;\n position: relative;\n overflow: auto;\n display: flex;\n}\n.seafile-md-viewer-container.side-panel-on {\n width: calc(100% - 260px);\n}\n.seafile-md-viewer-slate {\n flex: auto;\n position: relative;\n margin: 20px 0px 20px 5%;\n max-width: calc(90% - 260px);\n}\n.seafile-md-viewer-main {\n flex: auto;\n overflow: auto;\n background:#fafaf9;\n width: 70%;\n}\n.seafile-md-viewer-slate.side-panel-on {\n margin: 20px 5%;\n}\n/* outline */\n.seafile-md-viewer .seafile-editor-outline {\n background-color: #fafaf9;\n margin: 40px auto;\n padding: 0 0.75rem 0 1.25rem;\n border-left: 0;\n width: 260px;\n position: fixed;\n top: 68px;\n overflow-y: hidden;\n right: 5%;\n z-index: 1;\n height: 80%;\n}\n.seafile-md-viewer .seafile-editor-outline:hover {\n overflow: auto;\n}\n.seafile-md-viewer .seafile-editor-outline .active {\n color: #eb8205;\n border-left: 1px solid #eb8205;\n}\n.seafile-md-viewer .seafile-editor-outline-heading {\n padding: 7px 0;\n border-bottom: 1px solid #eee;\n color: #a0a0a0;\n}\n.seafile-editor-outline .outline-h2, .seafile-editor-outline .outline-h3 {\n height: 30px;\n margin-left: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: 14px;\n}\n.seafile-editor-outline .outline-h2 {\n padding-left: 20px;\n}\n.seafile-editor-outline .outline-h3 {\n padding-left: 40px;\n}\n/* side-panel */\n.seafile-md-viewer-side-panel {\n height: 100%;\n overflow: hidden;\n width: 260px;\n position: fixed;\n right: 0;\n top: 87px;\n}\n.seafile-md-viewer-side-panel .seafile-history-side-panel {\n width: 100%;\n height: 100%;\n}\n.seafile-md-viewer-side-panel .seafile-history-side-panel {\n border-left: 1px solid #e6e6dd;\n}\n@media (max-width:991.8px) {\n .seafile-editor-outline {\n display: none;\n }\n .seafile-md-viewer-slate {\n width: calc(100% - 80px);\n margin: 20px 40px;\n max-width: 100%;\n }\n}\n\n@media (max-width: 768px) {\n .sf-md-viewer-topbar-first {\n display: none !important;\n }\n}\n@media (min-width: 768px) {\n .sf-md-viewer-topbar-first-narrow {\n display: none !important;\n }\n}\n\n/* toolbar */\n.topbar-file-info {\n display: inline-block;\n margin-left: 8px;\n /*\n only select file info text\n */\n user-select: text;\n}\n.topbar-file-info .file-title {\n font-size: 1.2rem;\n font-weight: bold;\n display: flex;\n align-items: center;\n}\n\n.topbar-file-info .file-title .iconfont {\n font-size: 0.875rem;\n}\n\n.topbar-file-info .file-title .file-star {\n font-size: 0.875rem;\n cursor: pointer;\n margin-left: 0.5rem;\n vertical-align: text-bottom;\n color: #999;\n}\n\n.topbar-file-info .file-title .file-star .star {\n color: #999;\n}\n\n.topbar-file-info .file-state {\n font-size: 0.8125rem;\n}\n\n.topbar-file-info .file-state .file-modifier-name {\n margin-right: 0.5rem;\n}\n\n.topbar-file-info .file-state .file-modifier-savedraft {\n margin-left: 0.5rem;\n color: #888;\n}\n\n.sf-md-viewer-content {\n flex: 1;\n display: flex;\n min-height: 0;\n min-width: 0;\n}","* {\n margin: 0;\n padding: 0;\n}\nhtml,\ninput,\ntextarea {\n font-family: 'Roboto', sans-serif;\n line-height: 1.4;\n background: #eee;\n}\n\nbody {\n overflow-y: hidden;\n}\n\np {\n margin: 0;\n}\n\n:not(pre) > code {\n font-family: monospace;\n background-color: #eee;\n padding: 3px;\n}\n\nimg {\n max-width: 100%;\n}\n\nimg.active {\n box-shadow: 0 0 0 2px blue;\n}\n\ninput {\n box-sizing: border-box;\n font-size: 0.85em;\n width: 100%;\n padding: 0.5em;\n border: 2px solid #ddd;\n background: #fafafa;\n}\n\ninput:focus {\n outline: 0;\n border-color: blue;\n}\ninput[type=\"checkbox\"] {\n width: auto;\n}\n\na,\na:hover {\n color: #eb8205;\n}\n\n.lds-ripple {\n display: inline-block;\n position: relative;\n width: 64px;\n height: 64px;\n}\n.lds-ripple div {\n position: absolute;\n border: 4px solid #eb8205;\n opacity: 1;\n border-radius: 50%;\n animation: lds-ripple 1s cubic-bezier(0, 0.2, 0.8, 1) infinite;\n}\n.lds-ripple div:nth-child(2) {\n animation-delay: -0.5s;\n}\n@keyframes lds-ripple {\n 0% {\n top: 28px;\n left: 28px;\n width: 0;\n height: 0;\n opacity: 1;\n }\n 100% {\n top: -1px;\n left: -1px;\n width: 58px;\n height: 58px;\n opacity: 0;\n }\n}\n.empty-loading-page {\n position: fixed;\n height: 100%;\n width: 100%;\n}\n\n.page-centered {\n position: fixed;\n top: 50%;\n left: 50%;\n /* bring your own prefixes */\n transform: translate(-50%, -50%);\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/orgAdmin.bb6a05c5.css b/media/assets/frontend/static/css/orgAdmin.bb6a05c5.css new file mode 100644 index 00000000000..75da4194b37 --- /dev/null +++ b/media/assets/frontend/static/css/orgAdmin.bb6a05c5.css @@ -0,0 +1,2 @@ +.system-statistic-time-range{align-items:center;display:flex;font-size:13px;margin:15px 0 25px}.sys-stat-tool{color:#333;display:flex;font-size:13px}.system-statistic-item{border:1px solid #c5c5c5;cursor:pointer;padding:5px 10px}.sys-stat-tool .item-active,.system-statistic-item:hover{background:#efefef}.system-statistic-input-container{align-items:center;display:flex;margin-left:1rem}.system-statistic-input{height:31px;width:120px}.error-tip{color:red}.statistic-traffic-tab{color:#333;display:flex;font-size:13px;margin-top:10px}.statistic-traffic-tab .statistic-traffic-tab-item{border-bottom:2px solid transparent;color:#8a948f;cursor:pointer;margin-right:10px;padding:3px 0}.statistic-traffic-tab .statistic-traffic-tab-item.active,.statistic-traffic-tab .statistic-traffic-tab-item:hover{border-bottom:2px solid #eb8025;color:#eb8025}.statistic-reports-title{background:#f7f7f7;color:#222;margin-top:15px;padding:3px 10px}.statistic-reports-submit{margin-left:15px}.statistic-reports-wrapper{align-items:center;display:flex;margin-top:15px}.statistic-reports-input{height:30px;width:80px}.statistic-reports-tip{font-size:13px;padding:0 10px}.system-statistic-connect{line-height:1;padding:0 5px}.system-statistic-button{height:31px;margin-left:1rem}.rc-calendar table{table-layout:auto}.rc-calendar tbody tr{height:1.75rem}.web-setting-icon-btn{font-size:1rem;line-height:1.5;min-width:0}.web-setting-icon-btn-submit{color:green}.web-setting-icon-btn-cancel{color:#666}.web-setting-textarea{min-height:7rem}.web-setting-label{word-break:break-word}.paginator{font-size:14px;margin:10px 0;text-align:center}.cur-view-path.org-user-nav{padding:0 1rem}.cur-view-path.org-admin-user-nav{padding:0 16px 1px}.cur-view-path .operation-item{font-size:12px;height:24px;line-height:24px}.cur-view-container .no-group,.cur-view-container .no-libraty,.cur-view-container .no-member{color:#a4a4a4;margin:30px 0;text-align:center}.cur-view-path .sf-heading a{color:#eb8205}.cur-view-subcontainer{margin:10px}.cur-view-subcontainer table{margin:8px 0 40px}.org-departments>div{height:100%}.org-members .cur-view-content{padding-bottom:40px}.cur-view-path button:hover{cursor:pointer}.audit-unselect-item{background:#f2f2f2;border:1px solid #ccc;border-radius:2px;cursor:pointer;display:inline-block;font-size:14px;margin:10px 5px 0;padding:1px 8px}.audit-unselect-item:hover{background-color:#ddd}.no-deco,.no-deco:focus,.no-deco:hover{text-decoration:none}.cur-view-path .nav .nav-item a{padding:7px 10px} +/*# sourceMappingURL=orgAdmin.bb6a05c5.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/orgAdmin.bb6a05c5.css.map b/media/assets/frontend/static/css/orgAdmin.bb6a05c5.css.map new file mode 100644 index 00000000000..da36ab231bf --- /dev/null +++ b/media/assets/frontend/static/css/orgAdmin.bb6a05c5.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/orgAdmin.bb6a05c5.css","mappings":"AAAA,6BAGE,kBAAmB,CADnB,YAAa,CAEb,cAAe,CAHf,kBAIF,CAEA,eAGE,UAAW,CAFX,YAAa,CACb,cAEF,CAEA,uBACE,wBAAyB,CAEzB,cAAe,CADf,gBAEF,CAMA,yDACE,kBACF,CAEA,kCAGE,kBAAmB,CAFnB,YAAa,CACb,gBAEF,CAEA,wBACE,WAAY,CACZ,WACF,CAEA,WACE,SACF,CAEA,uBAGE,UAAW,CAFX,YAAa,CACb,cAAe,CAEf,eACF,CAEA,mDAGE,mCAAoC,CAEpC,aAAc,CADd,cAAe,CAHf,iBAAkB,CAClB,aAIF,CAOA,mHAEE,+BAAgC,CADhC,aAEF,CAEA,yBACE,kBAAmB,CAEnB,UAAc,CADd,eAAgB,CAEhB,gBACF,CAEA,0BACE,gBACF,CAEA,2BAEE,kBAAmB,CADnB,YAAa,CAEb,eACF,CAEA,yBAEE,WAAY,CADZ,UAEF,CAEA,uBAEE,cAAe,CADf,cAEF,CAEA,0BAEE,aAAc,CADd,aAEF,CAEA,yBACE,WAAY,CACZ,gBACF,CAEA,mBACE,iBACF,CAEA,sBACE,cACF,CC9GA,sBACE,cAAe,CACf,eAAgB,CAChB,WACF,CACA,6BACE,WACF,CACA,6BACE,UACF,CACA,sBACE,eACF,CACA,mBACE,qBACF,CChBA,WAGI,cAAe,CADf,aAAc,CADd,iBAGJ,CAEA,4BACI,cACJ,CCRA,kCACE,kBACF,CCFA,+BACE,cAAe,CACf,WAAY,CACZ,gBACF,CACA,6FACE,aAAc,CAEd,aAAc,CADd,iBAEF,CACA,6BACE,aACF,CACA,uBACE,WACF,CACA,6BACE,iBACF,CACA,qBACE,WACF,CACA,+BACE,mBACF,CACA,4BACE,cACF,CC3BA,qBAKE,kBAAmB,CAHnB,qBAAsB,CACtB,iBAAkB,CAGlB,cAAe,CALf,oBAAqB,CAMrB,cAAe,CACf,iBAAkB,CAJlB,eAKF,CACA,2BACE,qBACF,CACA,uCAGE,oBACF,CACA,gCACE,gBACF","sources":["css/system-stat.css","css/system-admin-web-settings.css","css/org-admin-paginator.css","css/org-admin-user.css","css/org-department-item.css","css/org-logs.css"],"sourcesContent":[".system-statistic-time-range {\n margin: 15px 0 25px;\n display: flex;\n align-items: center;\n font-size: 13px;\n}\n\n.sys-stat-tool {\n display: flex;\n font-size: 13px;\n color: #333;\n}\n\n.system-statistic-item {\n border: 1px solid #c5c5c5;\n padding: 5px 10px;\n cursor: pointer;\n}\n\n.system-statistic-item:hover {\n background: #efefef;\n}\n\n.sys-stat-tool .item-active {\n background: #efefef;\n}\n\n.system-statistic-input-container {\n display: flex;\n margin-left: 1rem;\n align-items: center;\n}\n\n.system-statistic-input {\n height: 31px;\n width: 120px;\n}\n\n.error-tip {\n color: red;\n}\n\n.statistic-traffic-tab {\n display: flex;\n font-size: 13px;\n color: #333;\n margin-top: 10px;\n}\n\n.statistic-traffic-tab .statistic-traffic-tab-item {\n margin-right: 10px;\n padding: 3px 0;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n color: #8a948f;\n}\n\n.statistic-traffic-tab .statistic-traffic-tab-item:hover {\n color: #eb8025;\n border-bottom: 2px solid #eb8025;\n}\n\n.statistic-traffic-tab .statistic-traffic-tab-item.active {\n color: #eb8025;\n border-bottom: 2px solid #eb8025;\n}\n\n.statistic-reports-title {\n background: #f7f7f7;\n margin-top: 15px;\n color: #222222;\n padding: 3px 10px;\n}\n\n.statistic-reports-submit {\n margin-left: 15px;\n}\n\n.statistic-reports-wrapper {\n display: flex;\n align-items: center;\n margin-top: 15px;\n}\n\n.statistic-reports-input {\n width: 80px;\n height: 30px;\n}\n\n.statistic-reports-tip {\n padding: 0 10px;\n font-size: 13px;\n}\n\n.system-statistic-connect {\n padding: 0 5px;\n line-height: 1;\n}\n\n.system-statistic-button {\n height: 31px;\n margin-left: 1rem;\n}\n\n.rc-calendar table {\n table-layout: initial;\n}\n\n.rc-calendar tbody tr {\n height: 1.75rem;\n}\n",".web-setting-icon-btn {\n font-size: 1rem;\n line-height: 1.5;\n min-width: 0;\n}\n.web-setting-icon-btn-submit {\n color: green;\n}\n.web-setting-icon-btn-cancel {\n color: #666;\n}\n.web-setting-textarea {\n min-height: 7rem;\n}\n.web-setting-label {\n word-break: break-word;\n}\n",".paginator {\n text-align: center;\n margin: 10px 0;\n font-size: 14px;\n}\n\n.cur-view-path.org-user-nav {\n padding: 0 1rem;\n}\n",".cur-view-path.org-admin-user-nav {\n padding: 0 16px 1px;\n}\n",".cur-view-path .operation-item {\n font-size: 12px;\n height: 24px;\n line-height: 24px;\n}\n.cur-view-container .no-libraty, .cur-view-container .no-member, .cur-view-container .no-group {\n color: #a4a4a4;\n text-align: center;\n margin: 30px 0;\n}\n.cur-view-path .sf-heading a {\n color: #eb8205;\n}\n.cur-view-subcontainer {\n margin: 10px;\n}\n.cur-view-subcontainer table {\n margin: 8px 0 40px;\n}\n.org-departments>div{\n height: 100%;\n}\n.org-members .cur-view-content {\n padding-bottom: 40px;\n}\n.cur-view-path button:hover {\n cursor: pointer;\n}\n",".audit-unselect-item {\n display: inline-block;\n border: 1px solid #ccc;\n border-radius: 2px;\n padding: 1px 8px;\n background: #f2f2f2;\n cursor: pointer;\n font-size: 14px;\n margin: 10px 5px 0;\n}\n.audit-unselect-item:hover {\n background-color: #ddd;\n}\n.no-deco,\n.no-deco:hover,\n.no-deco:focus {\n text-decoration: none;\n}\n.cur-view-path .nav .nav-item a {\n padding: 7px 10px;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/repoFolderTrash.d4170c41.css b/media/assets/frontend/static/css/repoFolderTrash.d4170c41.css new file mode 100644 index 00000000000..8d875f554cf --- /dev/null +++ b/media/assets/frontend/static/css/repoFolderTrash.d4170c41.css @@ -0,0 +1,2 @@ +body{overflow:hidden}#wrapper{height:100%}.top-header{background:#f4f4f7;border-bottom:1px solid #e8e8e8;flex-shrink:0;padding:.5rem 1rem}.go-back{color:silver;font-size:1.75rem;left:-40px;position:absolute;top:-5px}.op-bar{background:#f2f2f2;border-radius:2px;padding:9px 10px}.more{background:#efefef;border:0;color:#777}.more:hover{background:#dfdfdf;color:#000}.clean{border-color:#ccc;border-radius:2px;font-weight:400;height:30px;line-height:28px;min-width:55px;padding:0 .5rem} +/*# sourceMappingURL=repoFolderTrash.d4170c41.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/repoFolderTrash.d4170c41.css.map b/media/assets/frontend/static/css/repoFolderTrash.d4170c41.css.map new file mode 100644 index 00000000000..bcdd1d1e98c --- /dev/null +++ b/media/assets/frontend/static/css/repoFolderTrash.d4170c41.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/repoFolderTrash.d4170c41.css","mappings":"AAAA,KACE,eACF,CACA,SACE,WACF,CACA,YACE,kBAAmB,CACnB,+BAAgC,CAEhC,aAAc,CADd,kBAEF,CACA,SACE,YAAc,CACd,iBAAkB,CAElB,UAAW,CADX,iBAAkB,CAElB,QACF,CACA,QAEE,kBAAmB,CACnB,iBAAkB,CAFlB,gBAGF,CACA,MACE,kBAAmB,CACnB,QAAS,CACT,UACF,CACA,YAEE,kBAAmB,CADnB,UAEF,CACA,OACE,iBAAkB,CAClB,iBAAkB,CAGlB,eAAmB,CAFnB,WAAY,CACZ,gBAAiB,CAGjB,cAAe,CADf,eAEF","sources":["css/repo-folder-trash.css"],"sourcesContent":["body {\n overflow: hidden;\n}\n#wrapper {\n height: 100%;\n}\n.top-header {\n background: #f4f4f7;\n border-bottom: 1px solid #e8e8e8;\n padding: .5rem 1rem;\n flex-shrink: 0;\n}\n.go-back {\n color: #c0c0c0;\n font-size: 1.75rem;\n position: absolute;\n left: -40px;\n top: -5px;\n}\n.op-bar {\n padding: 9px 10px;\n background: #f2f2f2;\n border-radius: 2px;\n}\n.more {\n background: #efefef;\n border: 0;\n color: #777;\n}\n.more:hover {\n color: #000;\n background: #dfdfdf;\n}\n.clean {\n border-color: #ccc;\n border-radius: 2px;\n height: 30px;\n line-height: 28px;\n font-weight: normal;\n padding: 0 0.5rem;\n min-width: 55px;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/repoHistory.f0ad8622.css b/media/assets/frontend/static/css/repoHistory.f0ad8622.css new file mode 100644 index 00000000000..e4563a9a865 --- /dev/null +++ b/media/assets/frontend/static/css/repoHistory.f0ad8622.css @@ -0,0 +1,2 @@ +.commit-detail-item{list-style-type:none}body{overflow:hidden}#wrapper{height:100%}.top-header{background:#f4f4f7;border-bottom:1px solid #e8e8e8;flex-shrink:0;padding:.5rem 1rem}.details{color:#666;font-size:12px;margin-left:.25rem;text-decoration:underline}.commit-label{background:#eee;border-radius:3px;margin:0 2px;padding:1px 5px;white-space:nowrap}.go-back{color:silver;font-size:1.75rem;left:-40px;position:absolute;top:-5px} +/*# sourceMappingURL=repoHistory.f0ad8622.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/repoHistory.f0ad8622.css.map b/media/assets/frontend/static/css/repoHistory.f0ad8622.css.map new file mode 100644 index 00000000000..d781b917a62 --- /dev/null +++ b/media/assets/frontend/static/css/repoHistory.f0ad8622.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/repoHistory.f0ad8622.css","mappings":"AAAA,oBACE,oBACF,CCFA,KACE,eACF,CACA,SACE,WACF,CACA,YACE,kBAAmB,CACnB,+BAAgC,CAEhC,aAAc,CADd,kBAEF,CACA,SAEE,UAAW,CADX,cAAe,CAGf,kBAAmB,CADnB,yBAEF,CACA,cAGE,eAAgB,CAChB,iBAAkB,CAFlB,YAAa,CADb,eAAgB,CAIhB,kBACF,CACA,SACE,YAAc,CACd,iBAAkB,CAElB,UAAW,CADX,iBAAkB,CAElB,QACF","sources":["css/commit-details.css","css/repo-history.css"],"sourcesContent":[".commit-detail-item {\n list-style-type: none;\n}\n","body {\n overflow: hidden;\n}\n#wrapper {\n height: 100%;\n}\n.top-header {\n background: #f4f4f7;\n border-bottom: 1px solid #e8e8e8;\n padding: .5rem 1rem;\n flex-shrink: 0;\n}\n.details {\n font-size: 12px;\n color: #666;\n text-decoration: underline;\n margin-left: .25rem;\n}\n.commit-label {\n padding: 1px 5px;\n margin: 0 2px;\n background: #eee;\n border-radius: 3px;\n white-space: nowrap;\n}\n.go-back {\n color: #c0c0c0;\n font-size: 1.75rem;\n position: absolute;\n left: -40px;\n top: -5px;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/repoSnapshot.c6bbee77.css b/media/assets/frontend/static/css/repoSnapshot.c6bbee77.css new file mode 100644 index 00000000000..7d1f2b7f24b --- /dev/null +++ b/media/assets/frontend/static/css/repoSnapshot.c6bbee77.css @@ -0,0 +1,2 @@ +body{overflow:hidden}#wrapper{height:100%}.top-header{background:#f4f4f7;border-bottom:1px solid #e8e8e8;flex-shrink:0;padding:.5rem 1rem}.go-back{color:silver;font-size:1.75rem;left:-40px;position:absolute;top:-5px}.op-bar{background:#f2f2f2;border-radius:2px;padding:9px 10px}.op-bar-btn{border-color:#ccc;border-radius:2px;font-weight:400;height:30px;line-height:28px;min-width:55px;padding:0 .5rem}.heading-commit-time{font-size:60%;font-weight:400} +/*# sourceMappingURL=repoSnapshot.c6bbee77.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/repoSnapshot.c6bbee77.css.map b/media/assets/frontend/static/css/repoSnapshot.c6bbee77.css.map new file mode 100644 index 00000000000..3275358ddf9 --- /dev/null +++ b/media/assets/frontend/static/css/repoSnapshot.c6bbee77.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/repoSnapshot.c6bbee77.css","mappings":"AAAA,KACE,eACF,CACA,SACE,WACF,CACA,YACE,kBAAmB,CACnB,+BAAgC,CAEhC,aAAc,CADd,kBAEF,CACA,SACE,YAAc,CACd,iBAAkB,CAElB,UAAW,CADX,iBAAkB,CAElB,QACF,CACA,QAEE,kBAAmB,CACnB,iBAAkB,CAFlB,gBAGF,CACA,YACE,iBAAkB,CAClB,iBAAkB,CAGlB,eAAmB,CAFnB,WAAY,CACZ,gBAAiB,CAGjB,cAAe,CADf,eAEF,CACA,qBAEE,aAAc,CADd,eAEF","sources":["css/repo-snapshot.css"],"sourcesContent":["body {\n overflow: hidden;\n}\n#wrapper {\n height: 100%;\n}\n.top-header {\n background: #f4f4f7;\n border-bottom: 1px solid #e8e8e8;\n padding: .5rem 1rem;\n flex-shrink: 0;\n}\n.go-back {\n color: #c0c0c0;\n font-size: 1.75rem;\n position: absolute;\n left: -40px;\n top: -5px;\n}\n.op-bar {\n padding: 9px 10px;\n background: #f2f2f2;\n border-radius: 2px;\n}\n.op-bar-btn {\n border-color: #ccc;\n border-radius: 2px;\n height: 30px;\n line-height: 28px;\n font-weight: normal;\n padding: 0 0.5rem;\n min-width: 55px;\n}\n.heading-commit-time {\n font-weight: normal;\n font-size: 60%;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/sdocFileHistory.f936c666.css b/media/assets/frontend/static/css/sdocFileHistory.f936c666.css new file mode 100644 index 00000000000..494095b8d3e --- /dev/null +++ b/media/assets/frontend/static/css/sdocFileHistory.f936c666.css @@ -0,0 +1,2 @@ +.go-back{color:silver;margin-right:.75rem}.go-back:hover{color:#f93;cursor:pointer}.item-active{background-color:#fdc297!important;color:#fff}.item-active i{color:#fff}.history-list-item .history-info{flex:1 1;padding:0 .5rem}.history-list-item .history-operation{align-items:center;display:flex;justify-content:center;width:1.5rem}.history-info .time{color:#000}.history-info .owner{align-items:center;color:#888;display:flex;margin-top:.25rem}.owner .squire-icon{background-color:#549b5a;height:.5rem;margin-right:.25rem;width:.5rem}.history-body .dropdown-menu{min-width:8rem}.history-body .dropdown-menu a{color:#6e7687;text-decoration:none}.sdoc-file-history .sdoc-file-history-container{flex:1 1;overflow-x:hidden}.sdoc-file-history .sdoc-file-history-header{background-color:#fff;border-bottom:1px solid #e5e5e5;height:50px}.sdoc-file-history .sdoc-file-history-header .sdoc-file-history-header-left{flex:1 1;font-size:1.25rem}.sdoc-file-history .sdoc-file-history-header .file-name{flex:1 1}.sdoc-file-history .sdoc-file-history-header .sdoc-file-history-header-right{height:100%}.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-container{border:1px solid #e5e5e5;border-radius:3px;height:32px}.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-divider{border-right:1px solid #e5e5e5;height:100%;width:1px}.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-last,.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-next{height:100%;padding:0 8px}.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-last .fas,.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-next .fas{color:#000;opacity:.5}.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-last:hover,.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-next:hover{background-color:#f5f5f5;cursor:pointer;opacity:.75}.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-last:hover .fas,.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-next:hover .fas{opacity:.75}.sdoc-file-history .sdoc-file-history-content{background-color:#f5f5f5;flex:1 1;min-height:0;overflow-y:scroll;padding:20px 40px}.sdoc-file-history .sdoc-file-history-content .sdoc-file-history-viewer{background-color:#fff;border:1px solid #e6e6dd;flex:1 1;min-height:120px;width:100%;word-break:break-word}.sdoc-file-history .sdoc-file-history-content .sdoc-scroll-container{overflow:hidden;position:relative!important;width:100%}.sdoc-file-history .sdoc-file-history-content .sdoc-article-container{margin-left:0!important;padding-bottom:0;padding-top:0;width:100%}.sdoc-file-history .sdoc-file-history-content .article{margin:0;width:100%}.sdoc-file-history .sdoc-file-history-panel{border-left:1px solid #e5e5e5;width:260px}.sdoc-file-history .sdoc-file-history-panel .sdoc-file-history-select-range{background-color:#fff;border-bottom:1px solid #e5e5e5;height:50px;padding:10px 18px}.sdoc-file-history .sdoc-file-history-panel .sdoc-file-history-select-range-title{font-size:1rem;font-weight:bolder;height:100%;line-height:29px;width:100%}.sdoc-file-history .sdoc-file-history-panel .sdoc-file-history-diff-switch{border-top:1px solid #e5e5e5;height:50px;padding:0 18px}.sdoc-file-history .sdoc-file-history-diff-switch .custom-switch{align-items:center;cursor:pointer;display:flex;justify-content:space-between;padding-left:0;width:100%}.sdoc-file-history .sdoc-file-history-diff-switch .custom-switch-description{flex:1 1;margin-left:0;padding-right:8px}.sdoc-file-history-versions{flex:1 1;flex-direction:column;min-height:0;overflow:auto}.sdoc-file-history-versions .history-list-item{border-bottom:1px solid #e5e5e5;display:flex;flex:1 1;padding:5px 10px}.sdoc-file-history-versions .history-list-item.history-month-title{padding:5px 16px}.sdoc-file-history-versions .history-list-item:last-child{border-bottom:none}.sdoc-file-history-versions .history-list-item:not(.item-active):hover{background-color:#f5f5f5;cursor:pointer}.sdoc-file-history-versions .history-list-item .history-operation{flex-shrink:0}.sdoc-file-history-versions .history-list-item .history-info{overflow:hidden}.sdoc-file-history-versions .history-list-item .history-info .name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.sdoc-file-history-versions .history-list-item.item-active .history-info .name{color:#ff8000}.sdoc-file-history-versions .history-list-item .history-operation:hover{cursor:pointer}.sdoc-file-history-versions .history-list-item .history-operation a.fas{color:#888}.sdoc-file-history-versions .history-list-item .history-operation:hover a.fas{color:#333}.sdoc-file-history-versions .history-list-item.item-active{background-color:#ffecd9!important}.sdoc-file-history-versions .history-list-item.item-active .history-info .time{color:#ff8000}.history-info .owner{min-height:22.5px}.sdoc-file-history-versions .dropdown-menu{min-width:8rem}.history-content .main-panel{flex:1 1 auto}.history-content .history-side-panel{background-color:#fff;border-left:1px solid #e5e5e5;display:flex;flex:0 0 auto;flex-direction:column;-webkit-user-select:none;-ms-user-select:none;user-select:none}.history-content .history-side-panel .history-side-panel-title{background-color:#fafaf9;border-bottom:1px solid #e5e5e5;font-size:1rem;font-weight:bolder;height:50px;line-height:50px;padding:0 10px}.sdoc-file-history-versions .history-info .rename-container,.sdoc-file-history-versions .history-info .rename-container input{box-sizing:border-box;max-width:100%;min-width:100%;overflow:hidden;width:100%}.sdoc-file-history-versions .history-info .rename-container input:focus{box-shadow:none}.sdoc-file-history-versions .daily-history-detail-toggle-container{display:flex;flex-shrink:0;height:100%;justify-content:center;width:20px}.sdoc-file-history-versions .daily-history-detail-toggle-container .daily-history-detail-toggle{align-items:center;display:flex;height:20px;justify-content:center;width:20px}.sdoc-file-history-versions .daily-history-detail-no-more{height:20px;margin-right:14px;width:20px}.sdoc-file-history-versions .daily-history-detail-toggle .dropdown-toggle{color:#888;font-size:18px;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);transition:all .1s}.sdoc-file-history-versions .daily-history-detail-toggle.daily-history-detail-show .dropdown-toggle{-webkit-transform:none;-webkit-transform:initial;transform:none}.sdoc-file-history-versions .daily-history-detail-toggle .dropdown-toggle:hover{color:#333;cursor:pointer}@media (min-width:992px){.history-side-panel{width:260px}}@media (max-width:768px){.sdoc-file-history .sdoc-file-history-content{padding:0}.sdoc-file-history .sdoc-file-history-content .sdoc-file-history-viewer{border:none}.markdown-viewer-render-content{margin:20px}.markdown-viewer-render-content .diff-view{padding:20px}} +/*# sourceMappingURL=sdocFileHistory.f936c666.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/sdocFileHistory.f936c666.css.map b/media/assets/frontend/static/css/sdocFileHistory.f936c666.css.map new file mode 100644 index 00000000000..6c03b3b3fe4 --- /dev/null +++ b/media/assets/frontend/static/css/sdocFileHistory.f936c666.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/sdocFileHistory.f936c666.css","mappings":"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","sources":["components/common/go-back/index.css","css/history-record-item.css","pages/sdoc/sdoc-file-history/index.css"],"sourcesContent":[".go-back {\n margin-right: 0.75rem;\n color: #c0c0c0;\n}\n\n.go-back:hover {\n color: #ff9933;\n cursor: pointer;\n}\n",".item-active {\n color: #fff;\n background-color: #fdc297 !important;\n}\n\n.item-active i {\n color: #fff;\n}\n\n.history-list-item .history-info {\n flex: 1;\n padding: 0 0.5rem;\n}\n\n.history-list-item .history-operation {\n width: 1.5rem;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.history-info .time {\n color: #000;\n}\n\n.history-info .owner {\n margin-top: 0.25rem;\n color: #888;\n display: flex;\n align-items: center;\n}\n\n.owner .squire-icon {\n width: 0.5rem;\n height: 0.5rem;\n background-color: #549b5a;\n margin-right: 0.25rem;\n}\n\n.history-body .dropdown-menu {\n min-width: 8rem;\n}\n\n.history-body .dropdown-menu a {\n text-decoration: none;\n color: #6e7687;\n}\n",".sdoc-file-history .sdoc-file-history-container {\n flex: 1;\n overflow-x: hidden;\n}\n\n.sdoc-file-history .sdoc-file-history-header {\n height: 50px;\n border-bottom: 1px solid #e5e5e5;\n background-color: #fff;\n}\n\n.sdoc-file-history .sdoc-file-history-header .sdoc-file-history-header-left {\n font-size: 1.25rem;\n flex: 1;\n}\n\n.sdoc-file-history .sdoc-file-history-header .file-name {\n flex: 1;\n}\n\n.sdoc-file-history .sdoc-file-history-header .sdoc-file-history-header-right {\n height: 100%;\n}\n\n.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-container {\n height: 32px;\n border: 1px solid #e5e5e5;\n border-radius: 3px;\n}\n\n.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-divider {\n border-right: 1px solid #e5e5e5;\n height: 100%;\n width: 1px;\n}\n\n.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-last,\n.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-next {\n padding: 0 8px;\n height: 100%;\n}\n\n.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-last .fas,\n.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-next .fas {\n color: #000;\n opacity: .5;\n}\n\n.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-last:hover,\n.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-next:hover {\n cursor: pointer;\n opacity: .75;\n background-color: #F5F5F5;\n}\n\n.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-last:hover .fas,\n.sdoc-file-history .sdoc-file-history-header .sdoc-file-changes-next:hover .fas {\n opacity: .75;\n}\n\n.sdoc-file-history .sdoc-file-history-content {\n flex: 1;\n min-height: 0;\n padding: 20px 40px;\n background-color: #F5F5F5;\n overflow-y: scroll;\n}\n\n.sdoc-file-history .sdoc-file-history-content .sdoc-file-history-viewer {\n width: 100%;\n min-height: 120px;\n flex: 1;\n background-color: #fff;\n word-break: break-word;\n border: 1px solid #e6e6dd;\n}\n\n.sdoc-file-history .sdoc-file-history-content .sdoc-scroll-container {\n position: relative !important;\n overflow: hidden;\n width: 100%;\n}\n\n.sdoc-file-history .sdoc-file-history-content .sdoc-article-container {\n width: 100%;\n padding-top: 0;\n padding-bottom: 0;\n margin-left: 0 !important;\n}\n\n.sdoc-file-history .sdoc-file-history-content .article {\n width: 100%;\n margin: 0;\n}\n\n/* panel */\n.sdoc-file-history .sdoc-file-history-panel {\n width: 260px;\n border-left: 1px solid #e5e5e5;\n}\n\n.sdoc-file-history .sdoc-file-history-panel .sdoc-file-history-select-range {\n padding: 10px 18px;\n height: 50px;;\n border-bottom: 1px solid #e5e5e5;\n background-color: #fff;\n}\n\n.sdoc-file-history .sdoc-file-history-panel .sdoc-file-history-select-range-title {\n height: 100%;\n width: 100%;\n font-size: 1rem;\n font-weight: bolder;\n line-height: 29px;\n}\n\n.sdoc-file-history .sdoc-file-history-panel .sdoc-file-history-diff-switch {\n padding: 0 18px;\n height: 50px;;\n border-top: 1px solid #e5e5e5;\n}\n\n.sdoc-file-history .sdoc-file-history-diff-switch .custom-switch {\n width: 100%;\n padding-left: 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n}\n\n.sdoc-file-history .sdoc-file-history-diff-switch .custom-switch-description {\n margin-left: 0;\n flex: 1;\n padding-right: 8px;\n}\n\n/* history versions */\n.sdoc-file-history-versions {\n flex: 1; \n flex-direction: column;\n min-height: 0;\n overflow: auto;\n}\n\n.sdoc-file-history-versions .history-list-item {\n padding: 5px 10px;\n display: flex;\n flex: 1;\n border-bottom: 1px solid #e5e5e5;\n}\n\n.sdoc-file-history-versions .history-list-item.history-month-title {\n padding: 5px 16px;\n}\n\n.sdoc-file-history-versions .history-list-item:last-child {\n border-bottom: none;\n}\n\n.sdoc-file-history-versions .history-list-item:not(.item-active):hover {\n background-color: #F5F5F5;\n cursor: pointer;\n}\n\n.sdoc-file-history-versions .history-list-item .history-operation {\n flex-shrink: 0;\n}\n\n.sdoc-file-history-versions .history-list-item .history-info {\n overflow: hidden;\n}\n\n.sdoc-file-history-versions .history-list-item .history-info .name {\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.sdoc-file-history-versions .history-list-item.item-active .history-info .name{\n color: #ff8000;\n}\n\n.sdoc-file-history-versions .history-list-item .history-operation:hover {\n cursor: pointer;\n}\n\n.sdoc-file-history-versions .history-list-item .history-operation a.fas {\n color: #888;\n}\n\n.sdoc-file-history-versions .history-list-item .history-operation:hover a.fas {\n color: #333;\n}\n\n.sdoc-file-history-versions .history-list-item.item-active {\n background-color: #FFECD9 !important;\n}\n\n.sdoc-file-history-versions .history-list-item.item-active .history-info .time {\n color: #ff8000;\n}\n\n.history-info .owner {\n min-height: 22.5px;\n}\n\n.sdoc-file-history-versions .dropdown-menu {\n min-width: 8rem;\n}\n\n.history-content .main-panel {\n flex: 1 1 auto;\n}\n\n.history-content .history-side-panel {\n flex: 0 0 auto;\n user-select: none;\n border-left: 1px solid #e5e5e5;\n background-color: #fff;\n display: flex;\n flex-direction: column;\n}\n\n.history-content .history-side-panel .history-side-panel-title {\n height: 50px;\n border-bottom: 1px solid #e5e5e5;\n line-height: 50px;\n font-size: 1rem;\n padding: 0 10px;\n background-color: rgb(250,250,249);\n font-weight: bolder;\n}\n\n.sdoc-file-history-versions .history-info .rename-container,\n.sdoc-file-history-versions .history-info .rename-container input {\n box-sizing: border-box;\n width: 100%;\n max-width: 100%;\n min-width: 100%;\n overflow: hidden;\n}\n\n.sdoc-file-history-versions .history-info .rename-container input:focus {\n box-shadow: none;\n}\n\n.sdoc-file-history-versions .daily-history-detail-toggle-container {\n width: 20px;\n height: 100%;\n display: flex;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.sdoc-file-history-versions .daily-history-detail-toggle-container .daily-history-detail-toggle {\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sdoc-file-history-versions .daily-history-detail-no-more {\n width: 20px;\n height: 20px;\n margin-right: 14px;\n}\n\n.sdoc-file-history-versions .daily-history-detail-toggle .dropdown-toggle {\n font-size: 18px;\n color: #888;\n transform: rotate(-90deg);\n transition: all .1s;\n}\n\n.sdoc-file-history-versions .daily-history-detail-toggle.daily-history-detail-show .dropdown-toggle {\n transform: unset;\n}\n\n.sdoc-file-history-versions .daily-history-detail-toggle .dropdown-toggle:hover {\n color: #333;\n cursor: pointer;\n}\n\n@media (min-width:992px) {\n\n .history-side-panel {\n width: 260px;\n }\n\n}\n\n@media (max-width:768px) {\n\n .sdoc-file-history .sdoc-file-history-content {\n padding: 0;\n }\n\n .sdoc-file-history .sdoc-file-history-content .sdoc-file-history-viewer {\n border: none;\n }\n\n .markdown-viewer-render-content {\n margin: 20px;\n }\n\n .markdown-viewer-render-content .diff-view {\n padding: 20px;\n }\n\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/settings.391717d2.css b/media/assets/frontend/static/css/settings.391717d2.css new file mode 100644 index 00000000000..53876fac3ad --- /dev/null +++ b/media/assets/frontend/static/css/settings.391717d2.css @@ -0,0 +1,2 @@ +body{overflow:hidden}#wrapper{height:100%}.top-header{background:#f4f4f7;border-bottom:1px solid #e8e8e8;flex-shrink:0;padding:.5rem 1rem}.side-panel{border-right:1px solid #eee;flex:0 0 22%;padding:1rem}.main-panel{flex:1 0 78%}.heading{background:#f9f9f9;color:#322;font-size:1rem;font-weight:400;line-height:1.5;margin:0;padding:8px 16px;position:relative}.heading:after{border-bottom:1px solid #e8e8e8;bottom:0;content:"";left:16px;position:absolute;right:16px}.content{overflow:auto;padding:0 1rem 8rem}.setting-item{font-size:.875rem;margin:1em 0 3em}.setting-item-heading{border-bottom:1px solid #ddd;font-size:.9375rem;font-weight:400;margin-bottom:.7rem;padding-bottom:.3rem}.avatar-edit,.user-avatar{border-radius:3px}.avatar-edit{background:rgba(0,0,0,.3);color:#fff;cursor:pointer;font-size:24px;height:80px;left:.75rem;line-height:80px;position:absolute;text-align:center;top:0;width:80px}.user-setting-nav .nav-item .nav-link{border-left:2px solid transparent;color:#333;flex:auto;margin:0;padding-left:1em}.user-setting-nav .nav-item.active .nav-link{border-color:#ff9800;color:#ff9800}.user-setting-nav .nav-item .nav-link:hover{color:#eb8205}.eye-icon{color:#666}.input-tip{color:#666;padding-top:calc(.375rem + 1px)}@media (min-width:768px){.input-tip{padding-left:0}}.language-selector{width:260px}.btn{min-width:60px} +/*# sourceMappingURL=settings.391717d2.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/settings.391717d2.css.map b/media/assets/frontend/static/css/settings.391717d2.css.map new file mode 100644 index 00000000000..80a4bb9b28d --- /dev/null +++ b/media/assets/frontend/static/css/settings.391717d2.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/settings.391717d2.css","mappings":"AAAA,KACE,eACF,CACA,SACE,WACF,CACA,YACE,kBAAmB,CACnB,+BAAgC,CAEhC,aAAc,CADd,kBAEF,CAEA,YAGE,2BAA4B,CAF5B,YAAa,CACb,YAEF,CACA,YACE,YACF,CACA,SAEE,kBAAmB,CAEnB,UAAW,CADX,cAAe,CAEf,eAAmB,CACnB,eAAgB,CAChB,QAAQ,CANR,gBAAiB,CAOjB,iBACF,CACA,eAME,+BAAgC,CAFhC,QAAS,CACT,UAAW,CAHX,SAAU,CADV,iBAAkB,CAElB,UAIF,CACA,SAEE,aAAc,CADd,mBAEF,CACA,cACE,iBAAmB,CACnB,gBACF,CACA,sBAIE,4BAA6B,CAH7B,kBAAoB,CACpB,eAAmB,CAGnB,mBAAqB,CAFrB,oBAGF,CAIA,0BAFE,iBAeF,CAbA,aAOE,yBAA8B,CAC9B,UAAW,CAIX,cAAe,CAHf,cAAe,CAJf,WAAY,CAHZ,WAAa,CAQb,gBAAiB,CATjB,iBAAkB,CAUlB,iBAAkB,CARlB,KAAM,CACN,UASF,CACA,sCAIE,iCAAkC,CAClC,UAAW,CAJX,SAAU,CACV,QAAS,CACT,gBAGF,CACA,6CAEE,oBAAqB,CADrB,aAEF,CACA,4CACE,aACF,CACA,UACE,UACF,CACA,WAEE,UAAW,CADX,+BAEF,CACA,yBACE,WACE,cACF,CACF,CACA,mBACE,WACF,CACA,KACE,cACF","sources":["css/user-settings.css"],"sourcesContent":["body {\n overflow: hidden;\n}\n#wrapper {\n height: 100%;\n}\n.top-header {\n background: #f4f4f7;\n border-bottom: 1px solid #e8e8e8;\n padding: .5rem 1rem;\n flex-shrink: 0;\n}\n\n.side-panel {\n flex: 0 0 22%;\n padding: 1rem;\n border-right: 1px solid #eee;\n}\n.main-panel {\n flex: 1 0 78%;\n}\n.heading {\n padding: 8px 16px;\n background: #f9f9f9;\n font-size: 1rem;\n color: #322;\n font-weight: normal;\n line-height: 1.5;\n margin:0;\n position: relative;\n}\n.heading:after {\n position: absolute;\n left: 16px;\n right: 16px;\n bottom: 0;\n content: '';\n border-bottom: 1px solid #e8e8e8;\n}\n.content {\n padding: 0rem 1rem 8rem;\n overflow: auto;\n}\n.setting-item {\n font-size: 0.875rem;\n margin: 1em 0 3em;\n}\n.setting-item-heading {\n font-size: 0.9375rem;\n font-weight: normal;\n padding-bottom: 0.3rem;\n border-bottom: 1px solid #ddd;\n margin-bottom: 0.7rem;\n}\n.user-avatar {\n border-radius: 3px;\n}\n.avatar-edit {\n position: absolute;\n left: 0.75rem;\n top: 0;\n width: 80px;\n height: 80px;\n border-radius: 3px;\n background: rgba(0, 0, 0, 0.3);\n color: #fff;\n font-size: 24px;\n line-height: 80px;\n text-align: center;\n cursor: pointer;\n}\n.user-setting-nav .nav-item .nav-link {\n flex: auto;\n margin: 0;\n padding-left: 1em;\n border-left: 2px solid transparent;\n color: #333;\n}\n.user-setting-nav .nav-item.active .nav-link {\n color: #ff9800;\n border-color: #ff9800;\n}\n.user-setting-nav .nav-item .nav-link:hover {\n color: #eb8205;\n}\n.eye-icon {\n color: #666;\n}\n.input-tip {\n padding-top: calc(0.375rem + 1px);\n color: #666;\n}\n@media (min-width: 768px) {\n .input-tip {\n padding-left: 0;\n }\n}\n.language-selector {\n width: 260px;\n}\n.btn {\n min-width: 60px;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/sharedDirView.945789e9.css b/media/assets/frontend/static/css/sharedDirView.945789e9.css new file mode 100644 index 00000000000..ca12b047d9b --- /dev/null +++ b/media/assets/frontend/static/css/sharedDirView.945789e9.css @@ -0,0 +1,2 @@ +.repo-info-bar{border:1px solid #e6e6dd;border-radius:5px;margin:10px 16px 0;padding:10px}.used-tag-list{list-style:none}.used-tag-item{display:inline-block;margin:auto 15px}.used-tag{border-radius:50%;cursor:pointer;display:inline-block;height:12px;width:12px}.used-tag-name{margin:0 .25rem}.used-tag-files{color:#888;font-size:14px}.used-tag-files:hover{cursor:pointer;text-decoration:underline}.file-info{cursor:pointer;display:inline-block;margin:0 15px}.file-info a{color:#333}.info-icon{color:#888;vertical-align:-3px}.readme-dialog-edit{position:absolute;right:16px}.readme-dialog .modal-body{padding:0 30px}body{overflow:hidden}#wrapper{height:100%}.top-header{background:#f4f4f7;border-bottom:1px solid #e8e8e8;flex-shrink:0;height:53px;padding:8px 16px 4px}.shared-dir-view-main{margin:0 auto;max-width:950px;padding:15px 0 40px;width:calc(100% - 40px)}.op-bar{background:#f2f2f2;border-radius:2px;padding:9px 10px}.sf-view-mode-btn{background-color:#fff;border:1px solid #ccc;border-radius:2px;color:#aaa;font-size:18px;height:30px;line-height:29px;min-width:2rem;padding:0}.sf-view-mode-btn.current-mode{background-color:#ccc;color:#fff}.shared-dir-op-btn{height:30px;line-height:30px;padding:0 10px}.shared-dir-upload-btn{border:1px solid #ccc}.grid-item .action-icon{background:#fff;border:1px solid #eee;border-radius:3px;margin:0;padding:3px 5px;position:absolute;right:24px;top:10px}.grid-view{align-content:flex-start;display:flex;flex:1 1;flex-wrap:wrap;list-style:none;padding:.625rem 1rem 10rem}.grid-item{line-height:0;padding:10px 4px;position:relative;text-align:center;width:134px}.grid-item:hover .grid-file-img-link{background:#f8f8f8}.grid-item:hover a{color:#eb8205}.grid-file-img-link{border-radius:3px;font-size:0;height:96px;line-height:0;margin:0 auto 6px;position:relative;text-align:center;width:96px}.grid-file-img-link .thumbnail{background:#fff;border:1px solid #ddd;border-radius:1px;max-height:88px;max-width:88px;padding:1px}.grid-file-img-link:before{content:"";display:inline-block;height:100%;vertical-align:middle}.grid-file-name{display:inline-block;font-size:14px;line-height:17px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-break:keep-all}.grid-file-name-link{color:#333;font-size:.875rem}.grid-file-locked-icon{bottom:0;position:absolute;right:10px;width:16px}.grid-selected-active{background-color:#f8f8f8}.grid-link-selected-active{color:#eb8205}.grid-drop-show{background:#f8f8f8} +/*# sourceMappingURL=sharedDirView.945789e9.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/sharedDirView.945789e9.css.map b/media/assets/frontend/static/css/sharedDirView.945789e9.css.map new file mode 100644 index 00000000000..2408ef1c9b9 --- /dev/null +++ b/media/assets/frontend/static/css/sharedDirView.945789e9.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/sharedDirView.945789e9.css","mappings":"AAAA,eAGE,wBAAyB,CACzB,iBAAkB,CAFlB,kBAAmB,CADnB,YAKF,CAEA,eACE,eACF,CAEA,eACE,oBAAqB,CACrB,gBACF,CAEA,UAIE,iBAAkB,CAClB,cAAe,CAJf,oBAAqB,CAErB,WAAY,CADZ,UAIF,CAEA,eACE,eACF,CAEA,gBACE,UAAW,CACX,cACF,CAEA,sBACE,cAAe,CACf,yBACF,CAEA,WAGE,cAAe,CADf,oBAAqB,CADrB,aAGF,CAEA,aACE,UACF,CAEA,WACE,UAAW,CACX,mBACF,CAEA,oBACE,iBAAkB,CAClB,UACF,CAEA,2BACE,cACF,CC7DA,KACE,eACF,CACA,SACE,WACF,CACA,YACE,kBAAmB,CACnB,+BAAgC,CAGhC,aAAc,CADd,WAAY,CADZ,oBAGF,CACA,sBAIE,aAAc,CAFd,eAAgB,CAChB,mBAAoB,CAFpB,uBAIF,CACA,QAEE,kBAAmB,CACnB,iBAAkB,CAFlB,gBAGF,CAEA,kBAKE,qBAAsB,CACtB,qBAAsB,CAGtB,iBAAkB,CALlB,UAAW,CAIX,cAAe,CANf,WAAY,CAKZ,gBAAiB,CAJjB,cAAe,CAFf,SASF,CACA,+BACE,qBAAsB,CACtB,UACF,CACA,mBACE,WAAY,CACZ,gBAAiB,CACjB,cACF,CACA,uBACE,qBACF,CACA,wBAKE,eAAgB,CAChB,qBAAsB,CACtB,iBAAkB,CAClB,QAAS,CAJT,eAAgB,CAHhB,iBAAkB,CAElB,UAAW,CADX,QAOF,CCzDA,WAME,wBAAyB,CAHzB,YAAa,CAEb,QAAO,CADP,cAAe,CAFf,eAAgB,CADhB,0BAMF,CAEA,WAKE,aAAc,CAHd,gBAAiB,CAEjB,iBAAkB,CADlB,iBAAkB,CAFlB,WAKF,CAEA,qCACE,kBACF,CAEA,mBACE,aACF,CAEA,oBAKE,iBAAkB,CAClB,WAAY,CAJZ,WAAY,CAMZ,aAAc,CALd,iBAAkB,CAClB,iBAAkB,CAGlB,iBAAkB,CANlB,UAQF,CAEA,+BAIE,eAAgB,CAChB,qBAAsB,CACtB,iBAAkB,CAJlB,eAAgB,CADhB,cAAe,CAEf,WAIF,CAEA,2BACE,UAAW,CACX,oBAAqB,CAErB,WAAY,CADZ,qBAEF,CAEA,gBACE,oBAAqB,CAOrB,cAAe,CADf,gBAAiB,CALjB,cAAe,CACf,eAAgB,CAGhB,sBAAuB,CADvB,kBAAmB,CADnB,mBAKF,CAEA,qBACE,UAAW,CACX,iBACF,CAEA,uBAEE,QAAS,CADT,iBAAkB,CAElB,UAAW,CACX,UACF,CAEA,sBACE,wBACF,CAEA,2BACE,aACF,CAEA,gBACE,kBACF","sources":["css/repo-info-bar.css","css/shared-dir-view.css","css/grid-view.css"],"sourcesContent":[".repo-info-bar {\n padding: 10px;\n margin: 10px 16px 0;\n border: 1px solid #e6e6dd;\n border-radius: 5px;\n /* background: #f8f8f8; */\n}\n\n.used-tag-list {\n list-style: none;\n}\n\n.used-tag-item {\n display: inline-block;\n margin: auto 15px;\n}\n\n.used-tag {\n display: inline-block;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n cursor: pointer;\n}\n\n.used-tag-name {\n margin: 0 0.25rem;\n}\n\n.used-tag-files {\n color: #888;\n font-size: 14px;\n}\n\n.used-tag-files:hover {\n cursor: pointer;\n text-decoration: underline;\n}\n\n.file-info {\n margin: 0 15px;\n display: inline-block;\n cursor: pointer;\n}\n\n.file-info a {\n color: #333;\n}\n\n.info-icon {\n color: #888;\n vertical-align: -3px;\n}\n\n.readme-dialog-edit {\n position: absolute;\n right: 16px;\n}\n\n.readme-dialog .modal-body {\n padding: 0 30px;\n}\n","body {\n overflow: hidden;\n}\n#wrapper {\n height: 100%;\n}\n.top-header {\n background: #f4f4f7;\n border-bottom: 1px solid #e8e8e8;\n padding: 8px 16px 4px;\n height: 53px;\n flex-shrink: 0;\n}\n.shared-dir-view-main {\n width: calc(100% - 40px);\n max-width: 950px;\n padding: 15px 0 40px;\n margin: 0 auto;\n}\n.op-bar {\n padding: 9px 10px;\n background: #f2f2f2;\n border-radius: 2px;\n}\n\n.sf-view-mode-btn {\n padding: 0;\n height: 30px;\n min-width: 2rem;\n color: #aaa;\n background-color: #fff;\n border: 1px solid #ccc;\n line-height: 29px;\n font-size: 18px;\n border-radius: 2px;\n}\n.sf-view-mode-btn.current-mode {\n background-color: #ccc;\n color: #fff;\n}\n.shared-dir-op-btn {\n height: 30px;\n line-height: 30px;\n padding: 0 10px;\n}\n.shared-dir-upload-btn {\n border: 1px solid #ccc;\n}\n.grid-item .action-icon {\n position: absolute;\n top: 10px;\n right: 24px;\n padding: 3px 5px;\n background: #fff;\n border: 1px solid #eee;\n border-radius: 3px;\n margin: 0;\n}\n",".grid-view {\n padding: 0.625rem 1rem 10rem;\n list-style: none;\n display: flex;\n flex-wrap: wrap;\n flex: 1;\n align-content: flex-start;\n}\n\n.grid-item {\n width: 134px;\n padding: 10px 4px;\n text-align: center;\n position: relative;\n line-height: 0;\n}\n\n.grid-item:hover .grid-file-img-link {\n background: #f8f8f8;\n}\n\n.grid-item:hover a {\n color: #eb8205;\n}\n\n.grid-file-img-link {\n width: 96px;\n height: 96px;\n margin: 0 auto 6px;\n position: relative;\n border-radius: 3px;\n font-size: 0;\n text-align: center;\n line-height: 0;\n}\n\n.grid-file-img-link .thumbnail {\n max-width: 88px;\n max-height: 88px;\n padding: 1px;\n background: #fff;\n border: 1px solid #ddd;\n border-radius: 1px;\n}\n\n.grid-file-img-link::before {\n content: '';\n display: inline-block;\n vertical-align: middle;\n height: 100%;\n}\n\n.grid-file-name {\n display: inline-block;\n max-width: 100%;\n overflow: hidden;\n word-break: keep-all;\n white-space: nowrap;\n text-overflow: ellipsis;\n line-height: 17px;\n font-size: 14px;\n}\n\n.grid-file-name-link {\n color: #333;\n font-size: 0.875rem;\n}\n\n.grid-file-locked-icon {\n position: absolute;\n bottom: 0;\n right: 10px;\n width: 16px;\n}\n\n.grid-selected-active {\n background-color: #f8f8f8;\n}\n\n.grid-link-selected-active {\n color: #eb8205;\n}\n\n.grid-drop-show {\n background: #f8f8f8;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/sharedFileViewSpreadsheet.ff1ddac7.css b/media/assets/frontend/static/css/sharedFileViewSpreadsheet.ff1ddac7.css new file mode 100644 index 00000000000..8acfe6eb0f0 --- /dev/null +++ b/media/assets/frontend/static/css/sharedFileViewSpreadsheet.ff1ddac7.css @@ -0,0 +1,2 @@ +.spreadsheet-file-view{overflow:auto}#spreadsheet-container{background:#fff;border:1px solid #ccc;box-shadow:0 0 6px #ccc;display:block;margin:0 auto;max-width:950px;min-height:100%;width:calc(100% - 40px)} +/*# sourceMappingURL=sharedFileViewSpreadsheet.ff1ddac7.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/sharedFileViewSpreadsheet.ff1ddac7.css.map b/media/assets/frontend/static/css/sharedFileViewSpreadsheet.ff1ddac7.css.map new file mode 100644 index 00000000000..1d75d8e7be1 --- /dev/null +++ b/media/assets/frontend/static/css/sharedFileViewSpreadsheet.ff1ddac7.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/sharedFileViewSpreadsheet.ff1ddac7.css","mappings":"AAAA,uBACI,aACJ,CACA,uBAMI,eAAgB,CAChB,qBAAsB,CACtB,uBAAwB,CAPxB,aAAc,CAId,aAAc,CAFd,eAAgB,CAChB,eAAgB,CAFhB,uBAOJ","sources":["css/spreadsheet-file-view.css"],"sourcesContent":[".spreadsheet-file-view {\n overflow: auto;\n}\n#spreadsheet-container {\n display: block;\n width: calc(100% - 40px);\n max-width: 950px;\n min-height: 100%;\n margin: 0 auto;\n background: #fff;\n border: 1px solid #ccc;\n box-shadow: 0 0 6px #ccc;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/sysAdmin.feb7b73d.css b/media/assets/frontend/static/css/sysAdmin.feb7b73d.css new file mode 100644 index 00000000000..706d54cfdb9 --- /dev/null +++ b/media/assets/frontend/static/css/sysAdmin.feb7b73d.css @@ -0,0 +1,2 @@ +.heading{background:#f9f9f9;color:#322;font-size:1rem;font-weight:400;line-height:1.5;margin:0;padding:8px 16px}.content{display:flex;overflow:auto;padding:0 1rem 8rem}.system-admin-info dd,.system-admin-info dt{color:inherit}.info-item-heading{border-bottom:1px solid #ddd;font-size:1rem;font-weight:400;margin-bottom:.7em;padding-bottom:.2em}.info-item-content{margin-bottom:2em}.btn{min-width:60px}.system-statistic-time-range{align-items:center;display:flex;font-size:13px;margin:15px 0 25px}.sys-stat-tool{color:#333;display:flex;font-size:13px}.system-statistic-item{border:1px solid #c5c5c5;cursor:pointer;padding:5px 10px}.sys-stat-tool .item-active,.system-statistic-item:hover{background:#efefef}.system-statistic-input-container{align-items:center;display:flex;margin-left:1rem}.system-statistic-input{height:31px;width:120px}.error-tip{color:red}.statistic-traffic-tab{color:#333;display:flex;font-size:13px;margin-top:10px}.statistic-traffic-tab .statistic-traffic-tab-item{border-bottom:2px solid transparent;color:#8a948f;cursor:pointer;margin-right:10px;padding:3px 0}.statistic-traffic-tab .statistic-traffic-tab-item.active,.statistic-traffic-tab .statistic-traffic-tab-item:hover{border-bottom:2px solid #eb8025;color:#eb8025}.statistic-reports-title{background:#f7f7f7;color:#222;margin-top:15px;padding:3px 10px}.statistic-reports-submit{margin-left:15px}.statistic-reports-wrapper{align-items:center;display:flex;margin-top:15px}.statistic-reports-input{height:30px;width:80px}.statistic-reports-tip{font-size:13px;padding:0 10px}.system-statistic-connect{line-height:1;padding:0 5px}.system-statistic-button{height:31px;margin-left:1rem}.rc-calendar table{table-layout:auto}.rc-calendar tbody tr{height:1.75rem}.cur-view-path .operation-item{font-size:12px;height:24px;line-height:24px}.cur-view-container .no-group,.cur-view-container .no-libraty,.cur-view-container .no-member{color:#a4a4a4;margin:30px 0;text-align:center}.cur-view-path .sf-heading a{color:#eb8205}.cur-view-subcontainer{margin:10px}.cur-view-subcontainer table{margin:8px 0 40px}.org-departments>div{height:100%}.org-members .cur-view-content{padding-bottom:40px}.cur-view-path button:hover{cursor:pointer}.commit-detail-item{list-style-type:none}.web-setting-icon-btn{font-size:1rem;line-height:1.5;min-width:0}.web-setting-icon-btn-submit{color:green}.web-setting-icon-btn-cancel{color:#666}.web-setting-textarea{min-height:7rem}.web-setting-label{word-break:break-word}.cur-view-content{position:relative}.dir-content-main{height:100%;overflow-y:hidden;padding-right:1rem;position:absolute;right:0;width:75%}.dir-content-main:hover{overflow-y:auto}.dir-content-main table td{line-height:2rem}.dir-content-main .empty-tip{box-shadow:none}.dir-content-main .empty-tip img{height:140px;width:140px}.dir-content-nav{overflow:hidden;position:absolute;width:24%}.dir-content-nav:hover{overflow:auto}.dir-content-resize{border-left:1px solid #eee;height:100%;left:25%;position:absolute;width:1%}.department-children{padding-left:1rem;position:relative}.tree-node-inner{display:flex;padding-right:1rem;position:relative}.tree-node-inner i{color:silver;left:.3rem;position:absolute;top:20%}.tree-node-inner-hover{background-color:#ffefb2;border-radius:.25rem;cursor:pointer}.tree-node-hight-light{background-color:#feac74!important;border-radius:4px;color:#fff}.tree-node-hight-light i{color:#fff}.tree-node-hight-light .attr-action-icon,.tree-node-hight-light .attr-action-icon:focus,.tree-node-hight-light .attr-action-icon:hover{color:#fff!important}.tree-node-icon{padding-right:1.5rem}.tree-node-text{font-size:14px;line-height:24px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 2.5rem)}.tree-view{flex:1 1;padding:12px 12px 12px 0}.form-content .conditions-preview-container{background-color:#f5f5f5;max-height:300px;min-height:38px;overflow:auto;padding:10px}.conditions-preview-wrapper .conditions-preview-container{background-color:#f5f5f5;min-height:300px;overflow:auto;padding:10px}.conditions-preview-container ol,.conditions-preview-container ul{-webkit-padding-start:40px;margin-bottom:1em;padding-inline-start:40px}.conditions-editor-dialog-main{height:600px;overflow:hidden;padding:0} +/*# sourceMappingURL=sysAdmin.feb7b73d.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/sysAdmin.feb7b73d.css.map b/media/assets/frontend/static/css/sysAdmin.feb7b73d.css.map new file mode 100644 index 00000000000..79ccb87bf3f --- /dev/null +++ b/media/assets/frontend/static/css/sysAdmin.feb7b73d.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/sysAdmin.feb7b73d.css","mappings":"AAAA,SAEE,kBAAmB,CAEnB,UAAW,CADX,cAAe,CAEf,eAAmB,CACnB,eAAgB,CAChB,QAAS,CANT,gBAOF,CACA,SACE,YAAa,CAEb,aAAc,CADd,mBAEF,CACA,4CAEE,aACF,CACA,mBAIE,4BAA6B,CAH7B,cAAe,CACf,eAAmB,CAGnB,kBAAoB,CAFpB,mBAGF,CACA,mBACE,iBACF,CACA,KACE,cACF,CC9BA,6BAGE,kBAAmB,CADnB,YAAa,CAEb,cAAe,CAHf,kBAIF,CAEA,eAGE,UAAW,CAFX,YAAa,CACb,cAEF,CAEA,uBACE,wBAAyB,CAEzB,cAAe,CADf,gBAEF,CAMA,yDACE,kBACF,CAEA,kCAGE,kBAAmB,CAFnB,YAAa,CACb,gBAEF,CAEA,wBACE,WAAY,CACZ,WACF,CAEA,WACE,SACF,CAEA,uBAGE,UAAW,CAFX,YAAa,CACb,cAAe,CAEf,eACF,CAEA,mDAGE,mCAAoC,CAEpC,aAAc,CADd,cAAe,CAHf,iBAAkB,CAClB,aAIF,CAOA,mHAEE,+BAAgC,CADhC,aAEF,CAEA,yBACE,kBAAmB,CAEnB,UAAc,CADd,eAAgB,CAEhB,gBACF,CAEA,0BACE,gBACF,CAEA,2BAEE,kBAAmB,CADnB,YAAa,CAEb,eACF,CAEA,yBAEE,WAAY,CADZ,UAEF,CAEA,uBAEE,cAAe,CADf,cAEF,CAEA,0BAEE,aAAc,CADd,aAEF,CAEA,yBACE,WAAY,CACZ,gBACF,CAEA,mBACE,iBACF,CAEA,sBACE,cACF,CC9GA,+BACE,cAAe,CACf,WAAY,CACZ,gBACF,CACA,6FACE,aAAc,CAEd,aAAc,CADd,iBAEF,CACA,6BACE,aACF,CACA,uBACE,WACF,CACA,6BACE,iBACF,CACA,qBACE,WACF,CACA,+BACE,mBACF,CACA,4BACE,cACF,CC3BA,oBACE,oBACF,CCFA,sBACE,cAAe,CACf,eAAgB,CAChB,WACF,CACA,6BACE,WACF,CACA,6BACE,UACF,CACA,sBACE,eACF,CACA,mBACE,qBACF,CChBA,kBACE,iBACF,CACA,kBAGE,WAAY,CAEZ,iBAAkB,CAClB,kBAAmB,CALnB,iBAAkB,CAClB,OAAQ,CAER,SAGF,CACA,wBACE,eACF,CACA,2BACE,gBACF,CACA,6BACE,eACF,CACA,iCAEE,YAAa,CADb,WAEF,CACA,iBAEE,eAAgB,CADhB,iBAAkB,CAElB,SACF,CACA,uBACE,aACF,CACA,oBAKE,0BAA2B,CAF3B,WAAY,CADZ,QAAS,CADT,iBAAkB,CAGlB,QAEF,CACA,qBACE,iBAAkB,CAClB,iBACF,CACA,iBAEE,YAAa,CACb,kBAAmB,CAFnB,iBAGF,CACA,mBAIE,YAAa,CADb,UAAY,CAFZ,iBAAkB,CAClB,OAGF,CACA,uBACE,wBAAyB,CACzB,oBAAsB,CACtB,cACF,CACA,uBAGE,kCAAoC,CADpC,iBAAkB,CADlB,UAGF,CACA,yBACE,UACF,CACA,uIAGE,oBACF,CACA,gBACE,oBACF,CACA,gBAEE,cAAe,CAIf,gBAAiB,CAFjB,eAAgB,CAChB,sBAAuB,CAFvB,kBAAmB,CAFnB,yBAMF,CACA,WAEE,QAAS,CADT,wBAEF,CCtFA,4CAKE,wBAAyB,CAFzB,gBAAiB,CADjB,eAAgB,CAEhB,aAAc,CAHd,YAKF,CAEA,0DAIE,wBAAyB,CAFzB,gBAAiB,CACjB,aAAc,CAFd,YAIF,CAEA,kEAEE,0BAA0B,CAC1B,iBAAkB,CADlB,yBAEF,CAEA,+BAEE,YAAa,CACb,eAAgB,CAFhB,SAGF","sources":["css/system-info.css","css/system-stat.css","css/org-department-item.css","css/commit-details.css","css/system-admin-web-settings.css","css/dingtalk-departments.css","css/terms-conditions-editor.css"],"sourcesContent":[".heading {\n padding: 8px 16px;\n background: #f9f9f9;\n font-size: 1rem;\n color: #322;\n font-weight: normal;\n line-height: 1.5;\n margin: 0;\n}\n.content {\n display: flex;\n padding: 0rem 1rem 8rem;\n overflow: auto;\n}\n.system-admin-info dt,\n.system-admin-info dd {\n color: inherit;\n}\n.info-item-heading {\n font-size: 1rem;\n font-weight: normal;\n padding-bottom: 0.2em;\n border-bottom: 1px solid #ddd;\n margin-bottom: 0.7em;\n}\n.info-item-content {\n margin-bottom: 2em;\n}\n.btn {\n min-width: 60px;\n}\n",".system-statistic-time-range {\n margin: 15px 0 25px;\n display: flex;\n align-items: center;\n font-size: 13px;\n}\n\n.sys-stat-tool {\n display: flex;\n font-size: 13px;\n color: #333;\n}\n\n.system-statistic-item {\n border: 1px solid #c5c5c5;\n padding: 5px 10px;\n cursor: pointer;\n}\n\n.system-statistic-item:hover {\n background: #efefef;\n}\n\n.sys-stat-tool .item-active {\n background: #efefef;\n}\n\n.system-statistic-input-container {\n display: flex;\n margin-left: 1rem;\n align-items: center;\n}\n\n.system-statistic-input {\n height: 31px;\n width: 120px;\n}\n\n.error-tip {\n color: red;\n}\n\n.statistic-traffic-tab {\n display: flex;\n font-size: 13px;\n color: #333;\n margin-top: 10px;\n}\n\n.statistic-traffic-tab .statistic-traffic-tab-item {\n margin-right: 10px;\n padding: 3px 0;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n color: #8a948f;\n}\n\n.statistic-traffic-tab .statistic-traffic-tab-item:hover {\n color: #eb8025;\n border-bottom: 2px solid #eb8025;\n}\n\n.statistic-traffic-tab .statistic-traffic-tab-item.active {\n color: #eb8025;\n border-bottom: 2px solid #eb8025;\n}\n\n.statistic-reports-title {\n background: #f7f7f7;\n margin-top: 15px;\n color: #222222;\n padding: 3px 10px;\n}\n\n.statistic-reports-submit {\n margin-left: 15px;\n}\n\n.statistic-reports-wrapper {\n display: flex;\n align-items: center;\n margin-top: 15px;\n}\n\n.statistic-reports-input {\n width: 80px;\n height: 30px;\n}\n\n.statistic-reports-tip {\n padding: 0 10px;\n font-size: 13px;\n}\n\n.system-statistic-connect {\n padding: 0 5px;\n line-height: 1;\n}\n\n.system-statistic-button {\n height: 31px;\n margin-left: 1rem;\n}\n\n.rc-calendar table {\n table-layout: initial;\n}\n\n.rc-calendar tbody tr {\n height: 1.75rem;\n}\n",".cur-view-path .operation-item {\n font-size: 12px;\n height: 24px;\n line-height: 24px;\n}\n.cur-view-container .no-libraty, .cur-view-container .no-member, .cur-view-container .no-group {\n color: #a4a4a4;\n text-align: center;\n margin: 30px 0;\n}\n.cur-view-path .sf-heading a {\n color: #eb8205;\n}\n.cur-view-subcontainer {\n margin: 10px;\n}\n.cur-view-subcontainer table {\n margin: 8px 0 40px;\n}\n.org-departments>div{\n height: 100%;\n}\n.org-members .cur-view-content {\n padding-bottom: 40px;\n}\n.cur-view-path button:hover {\n cursor: pointer;\n}\n",".commit-detail-item {\n list-style-type: none;\n}\n",".web-setting-icon-btn {\n font-size: 1rem;\n line-height: 1.5;\n min-width: 0;\n}\n.web-setting-icon-btn-submit {\n color: green;\n}\n.web-setting-icon-btn-cancel {\n color: #666;\n}\n.web-setting-textarea {\n min-height: 7rem;\n}\n.web-setting-label {\n word-break: break-word;\n}\n",".cur-view-content {\n position: relative;\n}\n.dir-content-main {\n position: absolute;\n right: 0;\n height: 100%;\n width: 75%;\n overflow-y: hidden;\n padding-right: 1rem;\n}\n.dir-content-main:hover {\n overflow-y: auto;\n}\n.dir-content-main table td {\n line-height: 2rem;\n}\n.dir-content-main .empty-tip {\n box-shadow: none;\n}\n.dir-content-main .empty-tip img {\n width: 140px;\n height: 140px;\n}\n.dir-content-nav {\n position: absolute;\n overflow: hidden;\n width: 24%;\n}\n.dir-content-nav:hover {\n overflow: auto;\n}\n.dir-content-resize {\n position: absolute;\n left: 25%;\n height: 100%;\n width: 1%;\n border-left: 1px solid #eee;\n}\n.department-children {\n padding-left: 1rem;\n position: relative;\n}\n.tree-node-inner {\n position: relative;\n display: flex;\n padding-right: 1rem;\n}\n.tree-node-inner i {\n position: absolute;\n top: 20%;\n left: 0.3rem;\n color: silver;\n}\n.tree-node-inner-hover {\n background-color: #FFEFB2;\n border-radius: 0.25rem;\n cursor: pointer;\n}\n.tree-node-hight-light {\n color: #fff;\n border-radius: 4px;\n background-color: #feac74 !important;\n}\n.tree-node-hight-light i {\n color: #fff;\n}\n.tree-node-hight-light .attr-action-icon,\n.tree-node-hight-light .attr-action-icon:focus,\n.tree-node-hight-light .attr-action-icon:hover {\n color: #fff !important;\n}\n.tree-node-icon {\n padding-right: 1.5rem;\n}\n.tree-node-text {\n width: calc(100% - 2.5rem);\n font-size: 14px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 24px;\n}\n.tree-view {\n padding: 12px 12px 12px 0;\n flex: 1 1;\n}\n",".form-content .conditions-preview-container {\n padding: 10px;\n min-height: 38px;\n max-height: 300px;\n overflow: auto;\n background-color: #f5f5f5;\n}\n\n.conditions-preview-wrapper .conditions-preview-container {\n padding: 10px;\n min-height: 300px;\n overflow: auto;\n background-color: #f5f5f5;\n}\n\n.conditions-preview-container ol,\n.conditions-preview-container ul {\n padding-inline-start: 40px;\n margin-bottom: 1em;\n}\n\n.conditions-editor-dialog-main {\n padding: 0;\n height: 600px;\n overflow: hidden;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/uploadLink.01103a58.css b/media/assets/frontend/static/css/uploadLink.01103a58.css new file mode 100644 index 00000000000..6fbca29a915 --- /dev/null +++ b/media/assets/frontend/static/css/uploadLink.01103a58.css @@ -0,0 +1,2 @@ +body{overflow:hidden}#wrapper{height:100%}.top-header{background:#f4f4f7;border-bottom:1px solid #e8e8e8;flex-shrink:0;padding:.5rem 1rem}#upload-link-panel{border:1px solid #ddd;margin:2em auto;max-width:calc(100% - 20px);width:928px}.shared-by .avatar{height:20px;width:20px}#upload-link-panel .warning-icon{color:#f25041;font-size:48px}#upload-link-panel .tip-list-item{list-style:decimal none inside}#upload-link-drop-zone{background:rgba(255,152,0,.1);border:2px dashed #ff9800;border-radius:4px;padding:28px 0}#upload-link-drop-zone .upload-icon{color:rgba(240,159,63,.8);font-size:60px;line-height:1}.mh-2{min-height:2rem} +/*# sourceMappingURL=uploadLink.01103a58.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/uploadLink.01103a58.css.map b/media/assets/frontend/static/css/uploadLink.01103a58.css.map new file mode 100644 index 00000000000..34ee279bb9b --- /dev/null +++ b/media/assets/frontend/static/css/uploadLink.01103a58.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/uploadLink.01103a58.css","mappings":"AAAA,KACE,eACF,CACA,SACE,WACF,CACA,YACE,kBAAmB,CACnB,+BAAgC,CAEhC,aAAc,CADd,kBAEF,CAEA,mBAGE,qBAAsB,CACtB,eAAgB,CAFhB,2BAA4B,CAD5B,WAIF,CACA,mBAEE,WAAY,CADZ,UAEF,CACA,iCACE,aAAc,CACd,cACF,CACA,kCACE,8BACF,CACA,uBACE,6BAAkC,CAClC,yBAA0B,CAC1B,iBAAkB,CAClB,cACF,CACA,oCACE,yBAA8B,CAC9B,cAAe,CACf,aACF,CACA,MACE,eACF","sources":["css/upload-link.css"],"sourcesContent":["body {\n overflow: hidden;\n}\n#wrapper {\n height: 100%;\n}\n.top-header {\n background: #f4f4f7;\n border-bottom: 1px solid #e8e8e8;\n padding: .5rem 1rem;\n flex-shrink: 0;\n}\n\n#upload-link-panel {\n width: 928px;\n max-width: calc(100% - 20px);\n border: 1px solid #ddd;\n margin: 2em auto;\n}\n.shared-by .avatar {\n width: 20px;\n height: 20px;\n}\n#upload-link-panel .warning-icon {\n color: #f25041;\n font-size: 48px;\n}\n#upload-link-panel .tip-list-item {\n list-style: decimal inside none;\n}\n#upload-link-drop-zone {\n background: rgba(255, 152, 0, 0.1);\n border: 2px dashed #ff9800;\n border-radius: 4px;\n padding: 28px 0;\n}\n#upload-link-drop-zone .upload-icon {\n color: rgba(240, 159, 63, 0.8);\n font-size: 60px;\n line-height: 1;\n}\n.mh-2 {\n min-height: 2rem;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/viewFileSpreadsheet.ff1ddac7.css b/media/assets/frontend/static/css/viewFileSpreadsheet.ff1ddac7.css new file mode 100644 index 00000000000..1200dea6915 --- /dev/null +++ b/media/assets/frontend/static/css/viewFileSpreadsheet.ff1ddac7.css @@ -0,0 +1,2 @@ +.spreadsheet-file-view{overflow:auto}#spreadsheet-container{background:#fff;border:1px solid #ccc;box-shadow:0 0 6px #ccc;display:block;margin:0 auto;max-width:950px;min-height:100%;width:calc(100% - 40px)} +/*# sourceMappingURL=viewFileSpreadsheet.ff1ddac7.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/viewFileSpreadsheet.ff1ddac7.css.map b/media/assets/frontend/static/css/viewFileSpreadsheet.ff1ddac7.css.map new file mode 100644 index 00000000000..2235cce2899 --- /dev/null +++ b/media/assets/frontend/static/css/viewFileSpreadsheet.ff1ddac7.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/viewFileSpreadsheet.ff1ddac7.css","mappings":"AAAA,uBACI,aACJ,CACA,uBAMI,eAAgB,CAChB,qBAAsB,CACtB,uBAAwB,CAPxB,aAAc,CAId,aAAc,CAFd,eAAgB,CAChB,eAAgB,CAFhB,uBAOJ","sources":["css/spreadsheet-file-view.css"],"sourcesContent":[".spreadsheet-file-view {\n overflow: auto;\n}\n#spreadsheet-container {\n display: block;\n width: calc(100% - 40px);\n max-width: 950px;\n min-height: 100%;\n margin: 0 auto;\n background: #fff;\n border: 1px solid #ccc;\n box-shadow: 0 0 6px #ccc;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/css/wiki.b992029b.css b/media/assets/frontend/static/css/wiki.b992029b.css new file mode 100644 index 00000000000..ce1a5d99261 --- /dev/null +++ b/media/assets/frontend/static/css/wiki.b992029b.css @@ -0,0 +1,2 @@ +.wiki-nav-content{margin-top:18px}.wiki-nav-content.no-children{margin-left:1rem}.wiki-nav-content a,.wiki-nav-content span{color:#4d5156;display:block;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wiki-nav-content a:hover,.wiki-nav-content-highlight a{color:#eb8205;text-decoration:none}.switch-btn{color:silver;cursor:pointer;font-size:12px;left:0;padding-right:10px;position:absolute;top:2px}.side-panel{height:100%;-webkit-user-select:none;-ms-user-select:none;user-select:none}.side-panel .nav{border-bottom:1px solid #eee;height:36px;min-width:125px;padding-bottom:10px;padding-top:10px}.side-panel .nav-link{color:#888}.side-panel .nav-link.active{color:#eb8205}.side-panel-content{font-size:.875rem;height:calc(100% - 36px);overflow:auto;padding-bottom:8px;padding-top:8px}.image-view{background-color:#fff;border-radius:3px;box-shadow:0 0 10px #aaa;font-size:0;height:150px;line-height:150px;overflow:hidden;position:absolute;text-align:center;width:200px;z-index:1004}.image-view img{max-height:100%;max-width:100%}.image-view i{-webkit-animation:rotate 1.5s ease infinite;animation:rotate 1.5s ease infinite;color:#eb8205;font-size:30px;height:100%;line-height:150px;text-align:center;width:100%}@-webkit-keyframes rotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.outline-h2{color:#364149;cursor:pointer;line-height:2.5;margin-left:20px;white-space:nowrap}.outline-h2:hover{color:#eb8205}.outline-h3{color:#364149;cursor:pointer;line-height:2.5;margin-left:40px;white-space:nowrap}.outline-h3:hover{color:#eb8205}.tree-view{line-height:1.5;padding:0 12px}.tree-node-inner{cursor:pointer;height:24px;line-height:1.625;position:relative}.tree-node-inner-hover{background-color:#ffefb2;border-radius:.25rem}.tree-node-inner .tree-node-text{font-size:14px;line-height:24px;overflow:hidden;padding-left:2.8rem;text-overflow:ellipsis;white-space:nowrap;width:calc(100% - 1rem)}.tree-node-inner .left-icon{align-items:center;padding-left:1.5rem;top:0}.folder-toggle-icon,.tree-node-inner .left-icon{display:flex;justify-content:center;left:0;position:absolute}.folder-toggle-icon{align-content:center;color:silver;line-height:1.625;width:1.5rem}.tree-node-icon{color:#b0b0b0;display:inline-block;text-align:center;width:1rem}.tree-node-inner .right-icon{bottom:0;color:#888;font-size:.8125rem;position:absolute;right:1rem;text-align:center;top:0;width:1.5rem;z-index:2}.tree-node-inner .right-icon i{font-size:.8125rem;height:100%;line-height:1.625rem!important;vertical-align:middle;width:100%}.tree-node-hight-light{background-color:#feac74!important;border-radius:4px;color:#fff}.tree-node-hight-light i{color:#fff}.dropdown-menu{min-width:8rem}.parent-path{position:relative}.parent-path .form-text{font-size:.9375rem;margin-left:.25rem;margin-top:0;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.wiki-side-panel .panel-top{background:#fff}.wiki-side-nav{border-right:1px solid #eee;display:flex;flex:auto;flex-direction:column;overflow:hidden}.wiki-pages-heading{background-color:#f9f9f9;border-bottom:1px solid #e8e8e8;font-size:1rem;font-weight:400;height:40px;line-height:1.5;margin-bottom:0;padding:.5rem 0 .5rem 2rem;position:relative}.heading-icon{color:#888;font-size:.8125rem;position:absolute;right:1rem;top:25%}.wiki-pages-container{flex:1 1;overflow:hidden;padding-bottom:10px}.wiki-pages-container:hover{overflow:auto}.wiki-pages-container .tree-view{margin-left:-10px;margin-top:14px;padding-left:0}img[src=""]{opacity:0}.wiki-side-panel{display:flex;flex:0 0 20%;flex-direction:column;overflow:hidden}@media (max-width:767px){.wiki-side-panel{z-index:1051}}.wiki-main-panel{display:flex;flex:1 0 80%;flex-direction:column;min-height:0}.wiki-main-panel .main-panel-north{background-color:#fff}.cur-view-content .wiki-page-container{display:flex;flex:1 1;margin:0 -1rem -1.25rem;overflow-y:auto;padding:30px 1rem 1.25rem 30px}.cur-view-content .wiki-page-content{padding-right:30px;width:calc(100% - 200px)}@media (max-width:991.98px){.cur-view-content .wiki-page-container{padding:30px 14px 0}.cur-view-content .wiki-page-content{padding-right:0;width:100%}}.wiki-page-container .article{margin:0;padding:0 10px}.wiki-page-container .article h1{margin-top:0}.wiki-page-container .article span[data-url]{cursor:pointer}.wiki-page-container .article .ml-2{text-decoration:underline}.wiki-page-container .article .ml-2:hover{color:#eb8205;text-decoration:underline}.wiki-page-container .outline-h2,.wiki-page-container .outline-h3{color:#4d5156;font-size:12px;height:24px}.wiki-page-container .outline-h2.active,.wiki-page-container .outline-h3.active{color:#eb8205}.wiki-page-container .sf-slate-viewer-scroll-container{background-color:#fff!important;overflow:inherit;padding:0!important}.wiki-page-container .sf-slate-viewer-article-container{margin:0!important}.wiki-page-container .article{border:none}.wiki-page-container .sf-slate-viewer-outline{top:79px;width:200px}@media (max-width:767px){.wiki-page-container .article{padding:0!important}}#wiki-page-last-modified{color:#666;font-size:12px;padding:40px 10px} +/*# sourceMappingURL=wiki.b992029b.css.map*/ \ No newline at end of file diff --git a/media/assets/frontend/static/css/wiki.b992029b.css.map b/media/assets/frontend/static/css/wiki.b992029b.css.map new file mode 100644 index 00000000000..f73331bbd50 --- /dev/null +++ b/media/assets/frontend/static/css/wiki.b992029b.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/wiki.b992029b.css","mappings":"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","sources":["pages/wiki/index-md-viewer/style.css","css/side-panel.css","pages/wiki/wiki.css"],"sourcesContent":[".wiki-nav-content {\n margin-top: 18px;\n}\n\n.wiki-nav-content.no-children {\n margin-left: 1rem;\n}\n\n.wiki-nav-content a, \n.wiki-nav-content span {\n color: #4d5156;\n font-size: 14px;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n display: block;\n}\n\n.wiki-nav-content a:hover {\n text-decoration: none;\n color: #eb8205;\n}\n\n.wiki-nav-content-highlight a {\n text-decoration: none;\n color: #eb8205;\n}\n\n.switch-btn {\n position: absolute;\n left: 0;\n top: 2px;\n color: #c0c0c0;\n cursor: pointer;\n font-size: 12px;\n padding-right: 10px;\n}\n","/*\n the main reason to icon can not be align is that .folder has a real width it take the place\n of .tree-node-inner causing tree-node-icon not aligned , use absolute can make sure .tree-node-icon\n is always at the far left of .tree-node-inner\n*/\n.side-panel {\n user-select: none;\n height:100%;\n}\n.side-panel .nav {\n border-bottom: 1px solid #eee;\n padding-top: 10px;\n padding-bottom: 10px;\n min-width: 125px;\n height: 36px;\n}\n.side-panel .nav-link {\n color: #888;\n}\n.side-panel .nav-link.active {\n color: #eb8205;\n}\n.side-panel-content {\n padding-top: 8px;\n padding-bottom: 8px;\n height: calc(100% - 36px);\n overflow: auto;\n font-size: 0.875rem;\n}\n\n.image-view {\n width: 200px;\n height: 150px;\n position: absolute;\n background-color: #fff;\n z-index: 1004;\n box-shadow: 0 0 10px #aaa;\n border-radius: 3px;\n line-height: 150px;\n overflow: hidden;\n font-size: 0;\n text-align: center;\n}\n\n.image-view img {\n max-width: 100%;\n max-height: 100%;\n}\n\n.image-view i {\n width: 100%;\n height: 100%;\n text-align: center;\n line-height: 150px;\n font-size: 30px;\n color: #eb8205;\n -moz-animation: rotate 1.5s ease infinite;\n -webkit-animation: rotate 1.5s ease infinite;\n animation: rotate 1.5s ease infinite;\n}\n\n@keyframes rotate {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.outline-h2 {\n margin-left: 20px;\n line-height: 2.5;\n color:#364149;\n white-space: nowrap;\n cursor:pointer;\n}\n.outline-h2:hover {\n color: #eb8205;\n}\n.outline-h3 {\n margin-left: 40px;\n line-height: 2.5;\n color:#364149;\n white-space: nowrap;\n cursor:pointer;\n}\n.outline-h3:hover {\n color: #eb8205;\n}\n\n/*tree view */\n.tree-view {\n padding: 0 12px;\n line-height: 1.5;\n}\n\n.tree-node-inner {\n position: relative;\n height: 24px;\n cursor: pointer;\n line-height: 1.625;\n}\n\n.tree-node-inner-hover {\n background-color: rgb(255,239,178);\n border-radius: 0.25rem;\n}\n\n.tree-node-inner .tree-node-text {\n padding-left: 2.8rem;\n width: calc(100% - 1rem);\n font-size: 14px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 24px;\n}\n\n.tree-node-inner .left-icon {\n position: absolute;\n display:flex;\n justify-content:center;\n align-items:center;\n top: 0;\n left: 0;\n padding-left: 1.5rem;\n}\n\n.folder-toggle-icon {\n position: absolute;\n left: 0;\n color: #c0c0c0;\n line-height: 1.625;\n width: 1.5rem;\n display: flex;\n align-content: center;\n justify-content: center;\n}\n\n.tree-node-icon {\n display: inline-block;\n width: 1rem;\n text-align: center;\n color: #b0b0b0;\n}\n\n.tree-node-inner .right-icon {\n position: absolute;\n top: 0;\n right: 1rem;\n bottom: 0;\n width: 1.5rem;\n color: #888; \n z-index: 2; \n font-size: 0.8125rem;\n text-align: center;\n}\n\n.tree-node-inner .right-icon i {\n width: 100%;\n height: 100%;\n vertical-align: middle;\n font-size: 0.8125rem;\n line-height: 1.625rem !important;\n}\n\n.tree-node-hight-light {\n color: #fff;\n border-radius: 4px;\n background-color: #feac74 !important;\n}\n\n.tree-node-hight-light i {\n color:#fff;\n}\n\n.dropdown-menu {\n min-width: 8rem;\n}\n\n.parent-path {\n position: relative;\n}\n\n.parent-path .form-text {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n margin-top: 0;\n margin-left: 0.25rem;\n font-size: 0.9375rem;\n}\n\n",".wiki-side-panel .panel-top {\n background: #fff;\n}\n.wiki-side-nav {\n flex:auto;\n display:flex;\n flex-direction:column;\n overflow:hidden; /* for ff */\n border-right:1px solid #eee;\n}\n\n.wiki-pages-heading {\n position: relative;\n font-size: 1rem;\n font-weight: normal;\n padding: 0.5rem 0 0.5rem 2rem;\n border-bottom: 1px solid #e8e8e8;\n line-height: 1.5;\n height: 40px;\n background-color: #f9f9f9;\n margin-bottom: 0;\n}\n.heading-icon {\n position: absolute;\n right: 1rem;\n top: 25%;\n color: #888; \n font-size: 0.8125rem;\n}\n.wiki-pages-container {\n flex: 1;\n overflow: hidden;\n padding-bottom: 10px;\n}\n.wiki-pages-container:hover {\n overflow: auto;\n}\n.wiki-pages-container .tree-view {\n margin-left: -10px;\n margin-top: 14px;\n padding-left:0;\n}\n\nimg[src=\"\"] {\n opacity: 0;\n}\n\n.wiki-side-panel {\n flex: 0 0 20%;\n display:flex;\n flex-direction:column;\n overflow:hidden;\n}\n\n@media (max-width: 767px) {\n .wiki-side-panel {\n z-index: 1051;\n }\n}\n\n.wiki-main-panel {\n flex: 1 0 80%;\n display:flex;\n flex-direction:column;\n min-height: 0;\n}\n\n.wiki-main-panel .main-panel-north {\n background-color: #fff;\n}\n\n.cur-view-content .wiki-page-container {\n margin: 0 -1rem -1.25rem;\n padding: 30px 1rem 1.25rem;\n display: flex;\n flex: 1;\n padding-left: 30px;\n overflow-y: auto;\n}\n\n.cur-view-content .wiki-page-content {\n width: calc(100% - 200px);\n padding-right: 30px;\n}\n\n@media (max-width: 991.98px) {\n .cur-view-content .wiki-page-container {\n padding: 0 14px;\n padding-top: 30px;\n }\n .cur-view-content .wiki-page-content {\n width: 100%;\n padding-right: 0;\n }\n}\n\n.wiki-page-container .article {\n margin: 0;\n padding: 0 10px;\n}\n\n.wiki-page-container .article h1 {\n margin-top: 0;\n}\n\n.wiki-page-container .article span[data-url] {\n cursor: pointer;\n}\n\n.wiki-page-container .article .ml-2 {\n text-decoration: underline;\n}\n\n.wiki-page-container .article .ml-2:hover {\n text-decoration: underline;\n color:#eb8205;\n}\n\n.wiki-page-container .outline-h2,\n.wiki-page-container .outline-h3 {\n height: 24px;\n font-size: 12px;\n color: #4d5156;\n}\n\n.wiki-page-container .outline-h2.active,\n.wiki-page-container .outline-h3.active { \n color: #eb8205;\n}\n\n.wiki-page-container .sf-slate-viewer-scroll-container {\n background-color: #fff !important;\n padding: 0px !important;\n overflow: inherit;\n}\n\n.wiki-page-container .sf-slate-viewer-article-container {\n margin: 0 !important;\n}\n\n.wiki-page-container .article {\n border: none;\n}\n\n.wiki-page-container .sf-slate-viewer-outline {\n top: 79px;\n width: 200px;\n}\n\n@media (max-width: 767px) {\n .wiki-page-container .article {\n padding: 0 !important;\n }\n}\n\n#wiki-page-last-modified {\n padding: 40px 10px;\n font-size:12px;\n color: #666;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/js/305.d8dbbbbc.chunk.js b/media/assets/frontend/static/js/305.d8dbbbbc.chunk.js new file mode 100644 index 00000000000..73cb6099629 --- /dev/null +++ b/media/assets/frontend/static/js/305.d8dbbbbc.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkseahub_frontend=self.webpackChunkseahub_frontend||[]).push([[305],{6305:function(e,t,r){r.r(t),r.d(t,{css:function(){return _},gss:function(){return S},keywords:function(){return q},less:function(){return O},mkCSS:function(){return i},sCSS:function(){return C}});var o=r(1413);function i(e){var t,r,i=(e=(0,o.Z)((0,o.Z)({},K),e)).inline,a=e.tokenHooks,n=e.documentTypes||{},l=e.mediaTypes||{},s=e.mediaFeatures||{},c=e.mediaValueKeywords||{},d=e.propertyKeywords||{},p=e.nonStandardPropertyKeywords||{},u=e.fontProperties||{},m=e.counterDescriptors||{},g=e.colorKeywords||{},h=e.valueKeywords||{},b=e.allowNested,f=e.lineComment,k=!0===e.supportsAtComponent,y=!1!==e.highlightNonStandardPropertyKeywords;function w(e,r){return t=r,e}function v(e,t){var r=e.next();if(a[r]){var o=a[r](e,t);if(!1!==o)return o}return"@"==r?(e.eatWhile(/[\w\\\-]/),w("def",e.current())):"="==r||("~"==r||"|"==r)&&e.eat("=")?w(null,"compare"):'"'==r||"'"==r?(t.tokenize=x(r),t.tokenize(e,t)):"#"==r?(e.eatWhile(/[\w\\\-]/),w("atom","hash")):"!"==r?(e.match(/^\s*\w*/),w("keyword","important")):/\d/.test(r)||"."==r&&e.eat(/\d/)?(e.eatWhile(/[\w.%]/),w("number","unit")):"-"!==r?/[,+>*\/]/.test(r)?w(null,"select-op"):"."==r&&e.match(/^-?[_a-z][_a-z0-9-]*/i)?w("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(r)?w(null,r):e.match(/^[\w-.]+(?=\()/)?(/^(url(-prefix)?|domain|regexp)$/i.test(e.current())&&(t.tokenize=z),w("variableName.function","variable")):/[\w\\\-]/.test(r)?(e.eatWhile(/[\w\\\-]/),w("property","word")):w(null,null):/[\d.]/.test(e.peek())?(e.eatWhile(/[\w.%]/),w("number","unit")):e.match(/^-[\w\\\-]*/)?(e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?w("def","variable-definition"):w("variableName","variable")):e.match(/^\w+-/)?w("meta","meta"):void 0}function x(e){return function(t,r){for(var o,i=!1;null!=(o=t.next());){if(o==e&&!i){")"==e&&t.backUp(1);break}i=!i&&"\\"==o}return(o==e||!i&&")"!=e)&&(r.tokenize=null),w("string","string")}}function z(e,t){return e.next(),e.match(/^\s*[\"\')]/,!1)?t.tokenize=null:t.tokenize=x(")"),w(null,"(")}function P(e,t,r){this.type=e,this.indent=t,this.prev=r}function q(e,t,r,o){return e.context=new P(r,t.indentation()+(!1===o?0:t.indentUnit),e.context),r}function _(e){return e.context.prev&&(e.context=e.context.prev),e.context.type}function B(e,t,r){return S[r.context.type](e,t,r)}function C(e,t,r,o){for(var i=o||1;i>0;i--)r.context=r.context.prev;return B(e,t,r)}function O(e){var t=e.current().toLowerCase();r=h.hasOwnProperty(t)?"atom":g.hasOwnProperty(t)?"keyword":"variable"}var S={top:function(e,t,o){if("{"==e)return q(o,t,"block");if("}"==e&&o.context.prev)return _(o);if(k&&/@component/i.test(e))return q(o,t,"atComponentBlock");if(/^@(-moz-)?document$/i.test(e))return q(o,t,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/i.test(e))return q(o,t,"atBlock");if(/^@(font-face|counter-style)/i.test(e))return o.stateArg=e,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(e))return"keyframes";if(e&&"@"==e.charAt(0))return q(o,t,"at");if("hash"==e)r="builtin";else if("word"==e)r="tag";else{if("variable-definition"==e)return"maybeprop";if("interpolation"==e)return q(o,t,"interpolation");if(":"==e)return"pseudo";if(b&&"("==e)return q(o,t,"parens")}return o.context.type},block:function(e,t,o){if("word"==e){var i=t.current().toLowerCase();return d.hasOwnProperty(i)?(r="property","maybeprop"):p.hasOwnProperty(i)?(r=y?"string.special":"property","maybeprop"):b?(r=t.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(r="error","maybeprop")}return"meta"==e?"block":b||"hash"!=e&&"qualifier"!=e?S.top(e,t,o):(r="error","block")},maybeprop:function(e,t,r){return":"==e?q(r,t,"prop"):B(e,t,r)},prop:function(e,t,o){if(";"==e)return _(o);if("{"==e&&b)return q(o,t,"propBlock");if("}"==e||"{"==e)return C(e,t,o);if("("==e)return q(o,t,"parens");if("hash"!=e||/^#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(t.current())){if("word"==e)O(t);else if("interpolation"==e)return q(o,t,"interpolation")}else r="error";return"prop"},propBlock:function(e,t,o){return"}"==e?_(o):"word"==e?(r="property","maybeprop"):o.context.type},parens:function(e,t,r){return"{"==e||"}"==e?C(e,t,r):")"==e?_(r):"("==e?q(r,t,"parens"):"interpolation"==e?q(r,t,"interpolation"):("word"==e&&O(t),"parens")},pseudo:function(e,t,o){return"meta"==e?"pseudo":"word"==e?(r="variableName.constant",o.context.type):B(e,t,o)},documentTypes:function(e,t,o){return"word"==e&&n.hasOwnProperty(t.current())?(r="tag",o.context.type):S.atBlock(e,t,o)},atBlock:function(e,t,o){if("("==e)return q(o,t,"atBlock_parens");if("}"==e||";"==e)return C(e,t,o);if("{"==e)return _(o)&&q(o,t,b?"block":"top");if("interpolation"==e)return q(o,t,"interpolation");if("word"==e){var i=t.current().toLowerCase();r="only"==i||"not"==i||"and"==i||"or"==i?"keyword":l.hasOwnProperty(i)?"attribute":s.hasOwnProperty(i)?"property":c.hasOwnProperty(i)?"keyword":d.hasOwnProperty(i)?"property":p.hasOwnProperty(i)?y?"string.special":"property":h.hasOwnProperty(i)?"atom":g.hasOwnProperty(i)?"keyword":"error"}return o.context.type},atComponentBlock:function(e,t,o){return"}"==e?C(e,t,o):"{"==e?_(o)&&q(o,t,b?"block":"top",!1):("word"==e&&(r="error"),o.context.type)},atBlock_parens:function(e,t,r){return")"==e?_(r):"{"==e||"}"==e?C(e,t,r,2):S.atBlock(e,t,r)},restricted_atBlock_before:function(e,t,o){return"{"==e?q(o,t,"restricted_atBlock"):"word"==e&&"@counter-style"==o.stateArg?(r="variable","restricted_atBlock_before"):B(e,t,o)},restricted_atBlock:function(e,t,o){return"}"==e?(o.stateArg=null,_(o)):"word"==e?(r="@font-face"==o.stateArg&&!u.hasOwnProperty(t.current().toLowerCase())||"@counter-style"==o.stateArg&&!m.hasOwnProperty(t.current().toLowerCase())?"error":"property","maybeprop"):"restricted_atBlock"},keyframes:function(e,t,o){return"word"==e?(r="variable","keyframes"):"{"==e?q(o,t,"top"):B(e,t,o)},at:function(e,t,o){return";"==e?_(o):"{"==e||"}"==e?C(e,t,o):("word"==e?r="tag":"hash"==e&&(r="builtin"),"at")},interpolation:function(e,t,o){return"}"==e?_(o):"{"==e||";"==e?C(e,t,o):("word"==e?r="variable":"variable"!=e&&"("!=e&&")"!=e&&(r="error"),"interpolation")}};return{name:e.name,startState:function(){return{tokenize:null,state:i?"block":"top",stateArg:null,context:new P(i?"block":"top",0,null)}},token:function(e,o){if(!o.tokenize&&e.eatSpace())return null;var i=(o.tokenize||v)(e,o);return i&&"object"==typeof i&&(t=i[1],i=i[0]),r=i,"comment"!=t&&(o.state=S[o.state](t,e,o)),r},indent:function(e,t,r){var o=e.context,i=t&&t.charAt(0),a=o.indent;return"prop"!=o.type||"}"!=i&&")"!=i||(o=o.prev),o.prev&&("}"!=i||"block"!=o.type&&"top"!=o.type&&"interpolation"!=o.type&&"restricted_atBlock"!=o.type?(")"!=i||"parens"!=o.type&&"atBlock_parens"!=o.type)&&("{"!=i||"at"!=o.type&&"atBlock"!=o.type)||(a=Math.max(0,o.indent-r.unit)):a=(o=o.prev).indent),a},languageData:{indentOnInput:/^\s*\}$/,commentTokens:{line:f,block:{open:"/*",close:"*/"}},autocomplete:j}}}function a(e){for(var t={},r=0;r*\\/]/.test(ch)) {\n return ret(null, \"select-op\");\n } else if (ch == \".\" && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) {\n return ret(\"qualifier\", \"qualifier\");\n } else if (/[:;{}\\[\\]\\(\\)]/.test(ch)) {\n return ret(null, ch);\n } else if (stream.match(/^[\\w-.]+(?=\\()/)) {\n if (/^(url(-prefix)?|domain|regexp)$/i.test(stream.current())) {\n state.tokenize = tokenParenthesized;\n }\n return ret(\"variableName.function\", \"variable\");\n } else if (/[\\w\\\\\\-]/.test(ch)) {\n stream.eatWhile(/[\\w\\\\\\-]/);\n return ret(\"property\", \"word\");\n } else {\n return ret(null, null);\n }\n }\n\n function tokenString(quote) {\n return function(stream, state) {\n var escaped = false, ch;\n while ((ch = stream.next()) != null) {\n if (ch == quote && !escaped) {\n if (quote == \")\") stream.backUp(1);\n break;\n }\n escaped = !escaped && ch == \"\\\\\";\n }\n if (ch == quote || !escaped && quote != \")\") state.tokenize = null;\n return ret(\"string\", \"string\");\n };\n }\n\n function tokenParenthesized(stream, state) {\n stream.next(); // Must be '('\n if (!stream.match(/^\\s*[\\\"\\')]/, false))\n state.tokenize = tokenString(\")\");\n else\n state.tokenize = null;\n return ret(null, \"(\");\n }\n\n // Context management\n\n function Context(type, indent, prev) {\n this.type = type;\n this.indent = indent;\n this.prev = prev;\n }\n\n function pushContext(state, stream, type, indent) {\n state.context = new Context(type, stream.indentation() + (indent === false ? 0 : stream.indentUnit), state.context);\n return type;\n }\n\n function popContext(state) {\n if (state.context.prev)\n state.context = state.context.prev;\n return state.context.type;\n }\n\n function pass(type, stream, state) {\n return states[state.context.type](type, stream, state);\n }\n function popAndPass(type, stream, state, n) {\n for (var i = n || 1; i > 0; i--)\n state.context = state.context.prev;\n return pass(type, stream, state);\n }\n\n // Parser\n\n function wordAsValue(stream) {\n var word = stream.current().toLowerCase();\n if (valueKeywords.hasOwnProperty(word))\n override = \"atom\";\n else if (colorKeywords.hasOwnProperty(word))\n override = \"keyword\";\n else\n override = \"variable\";\n }\n\n var states = {};\n\n states.top = function(type, stream, state) {\n if (type == \"{\") {\n return pushContext(state, stream, \"block\");\n } else if (type == \"}\" && state.context.prev) {\n return popContext(state);\n } else if (supportsAtComponent && /@component/i.test(type)) {\n return pushContext(state, stream, \"atComponentBlock\");\n } else if (/^@(-moz-)?document$/i.test(type)) {\n return pushContext(state, stream, \"documentTypes\");\n } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) {\n return pushContext(state, stream, \"atBlock\");\n } else if (/^@(font-face|counter-style)/i.test(type)) {\n state.stateArg = type;\n return \"restricted_atBlock_before\";\n } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) {\n return \"keyframes\";\n } else if (type && type.charAt(0) == \"@\") {\n return pushContext(state, stream, \"at\");\n } else if (type == \"hash\") {\n override = \"builtin\";\n } else if (type == \"word\") {\n override = \"tag\";\n } else if (type == \"variable-definition\") {\n return \"maybeprop\";\n } else if (type == \"interpolation\") {\n return pushContext(state, stream, \"interpolation\");\n } else if (type == \":\") {\n return \"pseudo\";\n } else if (allowNested && type == \"(\") {\n return pushContext(state, stream, \"parens\");\n }\n return state.context.type;\n };\n\n states.block = function(type, stream, state) {\n if (type == \"word\") {\n var word = stream.current().toLowerCase();\n if (propertyKeywords.hasOwnProperty(word)) {\n override = \"property\";\n return \"maybeprop\";\n } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) {\n override = highlightNonStandardPropertyKeywords ? \"string.special\" : \"property\";\n return \"maybeprop\";\n } else if (allowNested) {\n override = stream.match(/^\\s*:(?:\\s|$)/, false) ? \"property\" : \"tag\";\n return \"block\";\n } else {\n override = \"error\";\n return \"maybeprop\";\n }\n } else if (type == \"meta\") {\n return \"block\";\n } else if (!allowNested && (type == \"hash\" || type == \"qualifier\")) {\n override = \"error\";\n return \"block\";\n } else {\n return states.top(type, stream, state);\n }\n };\n\n states.maybeprop = function(type, stream, state) {\n if (type == \":\") return pushContext(state, stream, \"prop\");\n return pass(type, stream, state);\n };\n\n states.prop = function(type, stream, state) {\n if (type == \";\") return popContext(state);\n if (type == \"{\" && allowNested) return pushContext(state, stream, \"propBlock\");\n if (type == \"}\" || type == \"{\") return popAndPass(type, stream, state);\n if (type == \"(\") return pushContext(state, stream, \"parens\");\n\n if (type == \"hash\" && !/^#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(stream.current())) {\n override = \"error\";\n } else if (type == \"word\") {\n wordAsValue(stream);\n } else if (type == \"interpolation\") {\n return pushContext(state, stream, \"interpolation\");\n }\n return \"prop\";\n };\n\n states.propBlock = function(type, _stream, state) {\n if (type == \"}\") return popContext(state);\n if (type == \"word\") { override = \"property\"; return \"maybeprop\"; }\n return state.context.type;\n };\n\n states.parens = function(type, stream, state) {\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state);\n if (type == \")\") return popContext(state);\n if (type == \"(\") return pushContext(state, stream, \"parens\");\n if (type == \"interpolation\") return pushContext(state, stream, \"interpolation\");\n if (type == \"word\") wordAsValue(stream);\n return \"parens\";\n };\n\n states.pseudo = function(type, stream, state) {\n if (type == \"meta\") return \"pseudo\";\n\n if (type == \"word\") {\n override = \"variableName.constant\";\n return state.context.type;\n }\n return pass(type, stream, state);\n };\n\n states.documentTypes = function(type, stream, state) {\n if (type == \"word\" && documentTypes.hasOwnProperty(stream.current())) {\n override = \"tag\";\n return state.context.type;\n } else {\n return states.atBlock(type, stream, state);\n }\n };\n\n states.atBlock = function(type, stream, state) {\n if (type == \"(\") return pushContext(state, stream, \"atBlock_parens\");\n if (type == \"}\" || type == \";\") return popAndPass(type, stream, state);\n if (type == \"{\") return popContext(state) && pushContext(state, stream, allowNested ? \"block\" : \"top\");\n\n if (type == \"interpolation\") return pushContext(state, stream, \"interpolation\");\n\n if (type == \"word\") {\n var word = stream.current().toLowerCase();\n if (word == \"only\" || word == \"not\" || word == \"and\" || word == \"or\")\n override = \"keyword\";\n else if (mediaTypes.hasOwnProperty(word))\n override = \"attribute\";\n else if (mediaFeatures.hasOwnProperty(word))\n override = \"property\";\n else if (mediaValueKeywords.hasOwnProperty(word))\n override = \"keyword\";\n else if (propertyKeywords.hasOwnProperty(word))\n override = \"property\";\n else if (nonStandardPropertyKeywords.hasOwnProperty(word))\n override = highlightNonStandardPropertyKeywords ? \"string.special\" : \"property\";\n else if (valueKeywords.hasOwnProperty(word))\n override = \"atom\";\n else if (colorKeywords.hasOwnProperty(word))\n override = \"keyword\";\n else\n override = \"error\";\n }\n return state.context.type;\n };\n\n states.atComponentBlock = function(type, stream, state) {\n if (type == \"}\")\n return popAndPass(type, stream, state);\n if (type == \"{\")\n return popContext(state) && pushContext(state, stream, allowNested ? \"block\" : \"top\", false);\n if (type == \"word\")\n override = \"error\";\n return state.context.type;\n };\n\n states.atBlock_parens = function(type, stream, state) {\n if (type == \")\") return popContext(state);\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state, 2);\n return states.atBlock(type, stream, state);\n };\n\n states.restricted_atBlock_before = function(type, stream, state) {\n if (type == \"{\")\n return pushContext(state, stream, \"restricted_atBlock\");\n if (type == \"word\" && state.stateArg == \"@counter-style\") {\n override = \"variable\";\n return \"restricted_atBlock_before\";\n }\n return pass(type, stream, state);\n };\n\n states.restricted_atBlock = function(type, stream, state) {\n if (type == \"}\") {\n state.stateArg = null;\n return popContext(state);\n }\n if (type == \"word\") {\n if ((state.stateArg == \"@font-face\" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) ||\n (state.stateArg == \"@counter-style\" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase())))\n override = \"error\";\n else\n override = \"property\";\n return \"maybeprop\";\n }\n return \"restricted_atBlock\";\n };\n\n states.keyframes = function(type, stream, state) {\n if (type == \"word\") { override = \"variable\"; return \"keyframes\"; }\n if (type == \"{\") return pushContext(state, stream, \"top\");\n return pass(type, stream, state);\n };\n\n states.at = function(type, stream, state) {\n if (type == \";\") return popContext(state);\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state);\n if (type == \"word\") override = \"tag\";\n else if (type == \"hash\") override = \"builtin\";\n return \"at\";\n };\n\n states.interpolation = function(type, stream, state) {\n if (type == \"}\") return popContext(state);\n if (type == \"{\" || type == \";\") return popAndPass(type, stream, state);\n if (type == \"word\") override = \"variable\";\n else if (type != \"variable\" && type != \"(\" && type != \")\") override = \"error\";\n return \"interpolation\";\n };\n\n return {\n name: parserConfig.name,\n startState: function() {\n return {tokenize: null,\n state: inline ? \"block\" : \"top\",\n stateArg: null,\n context: new Context(inline ? \"block\" : \"top\", 0, null)};\n },\n\n token: function(stream, state) {\n if (!state.tokenize && stream.eatSpace()) return null;\n var style = (state.tokenize || tokenBase)(stream, state);\n if (style && typeof style == \"object\") {\n type = style[1];\n style = style[0];\n }\n override = style;\n if (type != \"comment\")\n state.state = states[state.state](type, stream, state);\n return override;\n },\n\n indent: function(state, textAfter, iCx) {\n var cx = state.context, ch = textAfter && textAfter.charAt(0);\n var indent = cx.indent;\n if (cx.type == \"prop\" && (ch == \"}\" || ch == \")\")) cx = cx.prev;\n if (cx.prev) {\n if (ch == \"}\" && (cx.type == \"block\" || cx.type == \"top\" ||\n cx.type == \"interpolation\" || cx.type == \"restricted_atBlock\")) {\n // Resume indentation from parent context.\n cx = cx.prev;\n indent = cx.indent;\n } else if (ch == \")\" && (cx.type == \"parens\" || cx.type == \"atBlock_parens\") ||\n ch == \"{\" && (cx.type == \"at\" || cx.type == \"atBlock\")) {\n // Dedent relative to current context.\n indent = Math.max(0, cx.indent - iCx.unit);\n }\n }\n return indent;\n },\n\n languageData: {\n indentOnInput: /^\\s*\\}$/,\n commentTokens: {line: lineComment, block: {open: \"/*\", close: \"*/\"}},\n autocomplete: allWords\n }\n };\n};\n\nfunction keySet(array) {\n var keys = {};\n for (var i = 0; i < array.length; ++i) {\n keys[array[i].toLowerCase()] = true;\n }\n return keys;\n}\n\nvar documentTypes_ = [\n \"domain\", \"regexp\", \"url\", \"url-prefix\"\n], documentTypes = keySet(documentTypes_);\n\nvar mediaTypes_ = [\n \"all\", \"aural\", \"braille\", \"handheld\", \"print\", \"projection\", \"screen\",\n \"tty\", \"tv\", \"embossed\"\n], mediaTypes = keySet(mediaTypes_);\n\nvar mediaFeatures_ = [\n \"width\", \"min-width\", \"max-width\", \"height\", \"min-height\", \"max-height\",\n \"device-width\", \"min-device-width\", \"max-device-width\", \"device-height\",\n \"min-device-height\", \"max-device-height\", \"aspect-ratio\",\n \"min-aspect-ratio\", \"max-aspect-ratio\", \"device-aspect-ratio\",\n \"min-device-aspect-ratio\", \"max-device-aspect-ratio\", \"color\", \"min-color\",\n \"max-color\", \"color-index\", \"min-color-index\", \"max-color-index\",\n \"monochrome\", \"min-monochrome\", \"max-monochrome\", \"resolution\",\n \"min-resolution\", \"max-resolution\", \"scan\", \"grid\", \"orientation\",\n \"device-pixel-ratio\", \"min-device-pixel-ratio\", \"max-device-pixel-ratio\",\n \"pointer\", \"any-pointer\", \"hover\", \"any-hover\", \"prefers-color-scheme\",\n \"dynamic-range\", \"video-dynamic-range\"\n], mediaFeatures = keySet(mediaFeatures_);\n\nvar mediaValueKeywords_ = [\n \"landscape\", \"portrait\", \"none\", \"coarse\", \"fine\", \"on-demand\", \"hover\",\n \"interlace\", \"progressive\",\n \"dark\", \"light\",\n \"standard\", \"high\"\n], mediaValueKeywords = keySet(mediaValueKeywords_);\n\nvar propertyKeywords_ = [\n \"align-content\", \"align-items\", \"align-self\", \"alignment-adjust\",\n \"alignment-baseline\", \"all\", \"anchor-point\", \"animation\", \"animation-delay\",\n \"animation-direction\", \"animation-duration\", \"animation-fill-mode\",\n \"animation-iteration-count\", \"animation-name\", \"animation-play-state\",\n \"animation-timing-function\", \"appearance\", \"azimuth\", \"backdrop-filter\",\n \"backface-visibility\", \"background\", \"background-attachment\",\n \"background-blend-mode\", \"background-clip\", \"background-color\",\n \"background-image\", \"background-origin\", \"background-position\",\n \"background-position-x\", \"background-position-y\", \"background-repeat\",\n \"background-size\", \"baseline-shift\", \"binding\", \"bleed\", \"block-size\",\n \"bookmark-label\", \"bookmark-level\", \"bookmark-state\", \"bookmark-target\",\n \"border\", \"border-bottom\", \"border-bottom-color\", \"border-bottom-left-radius\",\n \"border-bottom-right-radius\", \"border-bottom-style\", \"border-bottom-width\",\n \"border-collapse\", \"border-color\", \"border-image\", \"border-image-outset\",\n \"border-image-repeat\", \"border-image-slice\", \"border-image-source\",\n \"border-image-width\", \"border-left\", \"border-left-color\", \"border-left-style\",\n \"border-left-width\", \"border-radius\", \"border-right\", \"border-right-color\",\n \"border-right-style\", \"border-right-width\", \"border-spacing\", \"border-style\",\n \"border-top\", \"border-top-color\", \"border-top-left-radius\",\n \"border-top-right-radius\", \"border-top-style\", \"border-top-width\",\n \"border-width\", \"bottom\", \"box-decoration-break\", \"box-shadow\", \"box-sizing\",\n \"break-after\", \"break-before\", \"break-inside\", \"caption-side\", \"caret-color\",\n \"clear\", \"clip\", \"color\", \"color-profile\", \"column-count\", \"column-fill\",\n \"column-gap\", \"column-rule\", \"column-rule-color\", \"column-rule-style\",\n \"column-rule-width\", \"column-span\", \"column-width\", \"columns\", \"contain\",\n \"content\", \"counter-increment\", \"counter-reset\", \"crop\", \"cue\", \"cue-after\",\n \"cue-before\", \"cursor\", \"direction\", \"display\", \"dominant-baseline\",\n \"drop-initial-after-adjust\", \"drop-initial-after-align\",\n \"drop-initial-before-adjust\", \"drop-initial-before-align\", \"drop-initial-size\",\n \"drop-initial-value\", \"elevation\", \"empty-cells\", \"fit\", \"fit-content\", \"fit-position\",\n \"flex\", \"flex-basis\", \"flex-direction\", \"flex-flow\", \"flex-grow\",\n \"flex-shrink\", \"flex-wrap\", \"float\", \"float-offset\", \"flow-from\", \"flow-into\",\n \"font\", \"font-family\", \"font-feature-settings\", \"font-kerning\",\n \"font-language-override\", \"font-optical-sizing\", \"font-size\",\n \"font-size-adjust\", \"font-stretch\", \"font-style\", \"font-synthesis\",\n \"font-variant\", \"font-variant-alternates\", \"font-variant-caps\",\n \"font-variant-east-asian\", \"font-variant-ligatures\", \"font-variant-numeric\",\n \"font-variant-position\", \"font-variation-settings\", \"font-weight\", \"gap\",\n \"grid\", \"grid-area\", \"grid-auto-columns\", \"grid-auto-flow\", \"grid-auto-rows\",\n \"grid-column\", \"grid-column-end\", \"grid-column-gap\", \"grid-column-start\",\n \"grid-gap\", \"grid-row\", \"grid-row-end\", \"grid-row-gap\", \"grid-row-start\",\n \"grid-template\", \"grid-template-areas\", \"grid-template-columns\",\n \"grid-template-rows\", \"hanging-punctuation\", \"height\", \"hyphens\", \"icon\",\n \"image-orientation\", \"image-rendering\", \"image-resolution\", \"inline-box-align\",\n \"inset\", \"inset-block\", \"inset-block-end\", \"inset-block-start\", \"inset-inline\",\n \"inset-inline-end\", \"inset-inline-start\", \"isolation\", \"justify-content\",\n \"justify-items\", \"justify-self\", \"left\", \"letter-spacing\", \"line-break\",\n \"line-height\", \"line-height-step\", \"line-stacking\", \"line-stacking-ruby\",\n \"line-stacking-shift\", \"line-stacking-strategy\", \"list-style\",\n \"list-style-image\", \"list-style-position\", \"list-style-type\", \"margin\",\n \"margin-bottom\", \"margin-left\", \"margin-right\", \"margin-top\", \"marks\",\n \"marquee-direction\", \"marquee-loop\", \"marquee-play-count\", \"marquee-speed\",\n \"marquee-style\", \"mask-clip\", \"mask-composite\", \"mask-image\", \"mask-mode\",\n \"mask-origin\", \"mask-position\", \"mask-repeat\", \"mask-size\",\"mask-type\",\n \"max-block-size\", \"max-height\", \"max-inline-size\",\n \"max-width\", \"min-block-size\", \"min-height\", \"min-inline-size\", \"min-width\",\n \"mix-blend-mode\", \"move-to\", \"nav-down\", \"nav-index\", \"nav-left\", \"nav-right\",\n \"nav-up\", \"object-fit\", \"object-position\", \"offset\", \"offset-anchor\",\n \"offset-distance\", \"offset-path\", \"offset-position\", \"offset-rotate\",\n \"opacity\", \"order\", \"orphans\", \"outline\", \"outline-color\", \"outline-offset\",\n \"outline-style\", \"outline-width\", \"overflow\", \"overflow-style\",\n \"overflow-wrap\", \"overflow-x\", \"overflow-y\", \"padding\", \"padding-bottom\",\n \"padding-left\", \"padding-right\", \"padding-top\", \"page\", \"page-break-after\",\n \"page-break-before\", \"page-break-inside\", \"page-policy\", \"pause\",\n \"pause-after\", \"pause-before\", \"perspective\", \"perspective-origin\", \"pitch\",\n \"pitch-range\", \"place-content\", \"place-items\", \"place-self\", \"play-during\",\n \"position\", \"presentation-level\", \"punctuation-trim\", \"quotes\",\n \"region-break-after\", \"region-break-before\", \"region-break-inside\",\n \"region-fragment\", \"rendering-intent\", \"resize\", \"rest\", \"rest-after\",\n \"rest-before\", \"richness\", \"right\", \"rotate\", \"rotation\", \"rotation-point\",\n \"row-gap\", \"ruby-align\", \"ruby-overhang\", \"ruby-position\", \"ruby-span\",\n \"scale\", \"scroll-behavior\", \"scroll-margin\", \"scroll-margin-block\",\n \"scroll-margin-block-end\", \"scroll-margin-block-start\", \"scroll-margin-bottom\",\n \"scroll-margin-inline\", \"scroll-margin-inline-end\",\n \"scroll-margin-inline-start\", \"scroll-margin-left\", \"scroll-margin-right\",\n \"scroll-margin-top\", \"scroll-padding\", \"scroll-padding-block\",\n \"scroll-padding-block-end\", \"scroll-padding-block-start\",\n \"scroll-padding-bottom\", \"scroll-padding-inline\", \"scroll-padding-inline-end\",\n \"scroll-padding-inline-start\", \"scroll-padding-left\", \"scroll-padding-right\",\n \"scroll-padding-top\", \"scroll-snap-align\", \"scroll-snap-type\",\n \"shape-image-threshold\", \"shape-inside\", \"shape-margin\", \"shape-outside\",\n \"size\", \"speak\", \"speak-as\", \"speak-header\", \"speak-numeral\",\n \"speak-punctuation\", \"speech-rate\", \"stress\", \"string-set\", \"tab-size\",\n \"table-layout\", \"target\", \"target-name\", \"target-new\", \"target-position\",\n \"text-align\", \"text-align-last\", \"text-combine-upright\", \"text-decoration\",\n \"text-decoration-color\", \"text-decoration-line\", \"text-decoration-skip\",\n \"text-decoration-skip-ink\", \"text-decoration-style\", \"text-emphasis\",\n \"text-emphasis-color\", \"text-emphasis-position\", \"text-emphasis-style\",\n \"text-height\", \"text-indent\", \"text-justify\", \"text-orientation\",\n \"text-outline\", \"text-overflow\", \"text-rendering\", \"text-shadow\",\n \"text-size-adjust\", \"text-space-collapse\", \"text-transform\",\n \"text-underline-position\", \"text-wrap\", \"top\", \"touch-action\", \"transform\", \"transform-origin\",\n \"transform-style\", \"transition\", \"transition-delay\", \"transition-duration\",\n \"transition-property\", \"transition-timing-function\", \"translate\",\n \"unicode-bidi\", \"user-select\", \"vertical-align\", \"visibility\", \"voice-balance\",\n \"voice-duration\", \"voice-family\", \"voice-pitch\", \"voice-range\", \"voice-rate\",\n \"voice-stress\", \"voice-volume\", \"volume\", \"white-space\", \"widows\", \"width\",\n \"will-change\", \"word-break\", \"word-spacing\", \"word-wrap\", \"writing-mode\", \"z-index\",\n // SVG-specific\n \"clip-path\", \"clip-rule\", \"mask\", \"enable-background\", \"filter\", \"flood-color\",\n \"flood-opacity\", \"lighting-color\", \"stop-color\", \"stop-opacity\", \"pointer-events\",\n \"color-interpolation\", \"color-interpolation-filters\",\n \"color-rendering\", \"fill\", \"fill-opacity\", \"fill-rule\", \"image-rendering\",\n \"marker\", \"marker-end\", \"marker-mid\", \"marker-start\", \"paint-order\", \"shape-rendering\", \"stroke\",\n \"stroke-dasharray\", \"stroke-dashoffset\", \"stroke-linecap\", \"stroke-linejoin\",\n \"stroke-miterlimit\", \"stroke-opacity\", \"stroke-width\", \"text-rendering\",\n \"baseline-shift\", \"dominant-baseline\", \"glyph-orientation-horizontal\",\n \"glyph-orientation-vertical\", \"text-anchor\", \"writing-mode\",\n], propertyKeywords = keySet(propertyKeywords_);\n\nvar nonStandardPropertyKeywords_ = [\n \"accent-color\", \"aspect-ratio\", \"border-block\", \"border-block-color\", \"border-block-end\",\n \"border-block-end-color\", \"border-block-end-style\", \"border-block-end-width\",\n \"border-block-start\", \"border-block-start-color\", \"border-block-start-style\",\n \"border-block-start-width\", \"border-block-style\", \"border-block-width\",\n \"border-inline\", \"border-inline-color\", \"border-inline-end\",\n \"border-inline-end-color\", \"border-inline-end-style\",\n \"border-inline-end-width\", \"border-inline-start\", \"border-inline-start-color\",\n \"border-inline-start-style\", \"border-inline-start-width\",\n \"border-inline-style\", \"border-inline-width\", \"content-visibility\", \"margin-block\",\n \"margin-block-end\", \"margin-block-start\", \"margin-inline\", \"margin-inline-end\",\n \"margin-inline-start\", \"overflow-anchor\", \"overscroll-behavior\", \"padding-block\", \"padding-block-end\",\n \"padding-block-start\", \"padding-inline\", \"padding-inline-end\",\n \"padding-inline-start\", \"scroll-snap-stop\", \"scrollbar-3d-light-color\",\n \"scrollbar-arrow-color\", \"scrollbar-base-color\", \"scrollbar-dark-shadow-color\",\n \"scrollbar-face-color\", \"scrollbar-highlight-color\", \"scrollbar-shadow-color\",\n \"scrollbar-track-color\", \"searchfield-cancel-button\", \"searchfield-decoration\",\n \"searchfield-results-button\", \"searchfield-results-decoration\", \"shape-inside\", \"zoom\"\n], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_);\n\nvar fontProperties_ = [\n \"font-display\", \"font-family\", \"src\", \"unicode-range\", \"font-variant\",\n \"font-feature-settings\", \"font-stretch\", \"font-weight\", \"font-style\"\n], fontProperties = keySet(fontProperties_);\n\nvar counterDescriptors_ = [\n \"additive-symbols\", \"fallback\", \"negative\", \"pad\", \"prefix\", \"range\",\n \"speak-as\", \"suffix\", \"symbols\", \"system\"\n], counterDescriptors = keySet(counterDescriptors_);\n\nvar colorKeywords_ = [\n \"aliceblue\", \"antiquewhite\", \"aqua\", \"aquamarine\", \"azure\", \"beige\",\n \"bisque\", \"black\", \"blanchedalmond\", \"blue\", \"blueviolet\", \"brown\",\n \"burlywood\", \"cadetblue\", \"chartreuse\", \"chocolate\", \"coral\", \"cornflowerblue\",\n \"cornsilk\", \"crimson\", \"cyan\", \"darkblue\", \"darkcyan\", \"darkgoldenrod\",\n \"darkgray\", \"darkgreen\", \"darkgrey\", \"darkkhaki\", \"darkmagenta\", \"darkolivegreen\",\n \"darkorange\", \"darkorchid\", \"darkred\", \"darksalmon\", \"darkseagreen\",\n \"darkslateblue\", \"darkslategray\", \"darkslategrey\", \"darkturquoise\", \"darkviolet\",\n \"deeppink\", \"deepskyblue\", \"dimgray\", \"dimgrey\", \"dodgerblue\", \"firebrick\",\n \"floralwhite\", \"forestgreen\", \"fuchsia\", \"gainsboro\", \"ghostwhite\",\n \"gold\", \"goldenrod\", \"gray\", \"grey\", \"green\", \"greenyellow\", \"honeydew\",\n \"hotpink\", \"indianred\", \"indigo\", \"ivory\", \"khaki\", \"lavender\",\n \"lavenderblush\", \"lawngreen\", \"lemonchiffon\", \"lightblue\", \"lightcoral\",\n \"lightcyan\", \"lightgoldenrodyellow\", \"lightgray\", \"lightgreen\", \"lightgrey\", \"lightpink\",\n \"lightsalmon\", \"lightseagreen\", \"lightskyblue\", \"lightslategray\", \"lightslategrey\",\n \"lightsteelblue\", \"lightyellow\", \"lime\", \"limegreen\", \"linen\", \"magenta\",\n \"maroon\", \"mediumaquamarine\", \"mediumblue\", \"mediumorchid\", \"mediumpurple\",\n \"mediumseagreen\", \"mediumslateblue\", \"mediumspringgreen\", \"mediumturquoise\",\n \"mediumvioletred\", \"midnightblue\", \"mintcream\", \"mistyrose\", \"moccasin\",\n \"navajowhite\", \"navy\", \"oldlace\", \"olive\", \"olivedrab\", \"orange\", \"orangered\",\n \"orchid\", \"palegoldenrod\", \"palegreen\", \"paleturquoise\", \"palevioletred\",\n \"papayawhip\", \"peachpuff\", \"peru\", \"pink\", \"plum\", \"powderblue\",\n \"purple\", \"rebeccapurple\", \"red\", \"rosybrown\", \"royalblue\", \"saddlebrown\",\n \"salmon\", \"sandybrown\", \"seagreen\", \"seashell\", \"sienna\", \"silver\", \"skyblue\",\n \"slateblue\", \"slategray\", \"slategrey\", \"snow\", \"springgreen\", \"steelblue\", \"tan\",\n \"teal\", \"thistle\", \"tomato\", \"turquoise\", \"violet\", \"wheat\", \"white\",\n \"whitesmoke\", \"yellow\", \"yellowgreen\"\n], colorKeywords = keySet(colorKeywords_);\n\nvar valueKeywords_ = [\n \"above\", \"absolute\", \"activeborder\", \"additive\", \"activecaption\", \"afar\",\n \"after-white-space\", \"ahead\", \"alias\", \"all\", \"all-scroll\", \"alphabetic\", \"alternate\",\n \"always\", \"amharic\", \"amharic-abegede\", \"antialiased\", \"appworkspace\",\n \"arabic-indic\", \"armenian\", \"asterisks\", \"attr\", \"auto\", \"auto-flow\", \"avoid\", \"avoid-column\", \"avoid-page\",\n \"avoid-region\", \"axis-pan\", \"background\", \"backwards\", \"baseline\", \"below\", \"bidi-override\", \"binary\",\n \"bengali\", \"blink\", \"block\", \"block-axis\", \"blur\", \"bold\", \"bolder\", \"border\", \"border-box\",\n \"both\", \"bottom\", \"break\", \"break-all\", \"break-word\", \"brightness\", \"bullets\", \"button\",\n \"buttonface\", \"buttonhighlight\", \"buttonshadow\", \"buttontext\", \"calc\", \"cambodian\",\n \"capitalize\", \"caps-lock-indicator\", \"caption\", \"captiontext\", \"caret\",\n \"cell\", \"center\", \"checkbox\", \"circle\", \"cjk-decimal\", \"cjk-earthly-branch\",\n \"cjk-heavenly-stem\", \"cjk-ideographic\", \"clear\", \"clip\", \"close-quote\",\n \"col-resize\", \"collapse\", \"color\", \"color-burn\", \"color-dodge\", \"column\", \"column-reverse\",\n \"compact\", \"condensed\", \"conic-gradient\", \"contain\", \"content\", \"contents\",\n \"content-box\", \"context-menu\", \"continuous\", \"contrast\", \"copy\", \"counter\", \"counters\", \"cover\", \"crop\",\n \"cross\", \"crosshair\", \"cubic-bezier\", \"currentcolor\", \"cursive\", \"cyclic\", \"darken\", \"dashed\", \"decimal\",\n \"decimal-leading-zero\", \"default\", \"default-button\", \"dense\", \"destination-atop\",\n \"destination-in\", \"destination-out\", \"destination-over\", \"devanagari\", \"difference\",\n \"disc\", \"discard\", \"disclosure-closed\", \"disclosure-open\", \"document\",\n \"dot-dash\", \"dot-dot-dash\",\n \"dotted\", \"double\", \"down\", \"drop-shadow\", \"e-resize\", \"ease\", \"ease-in\", \"ease-in-out\", \"ease-out\",\n \"element\", \"ellipse\", \"ellipsis\", \"embed\", \"end\", \"ethiopic\", \"ethiopic-abegede\",\n \"ethiopic-abegede-am-et\", \"ethiopic-abegede-gez\", \"ethiopic-abegede-ti-er\",\n \"ethiopic-abegede-ti-et\", \"ethiopic-halehame-aa-er\",\n \"ethiopic-halehame-aa-et\", \"ethiopic-halehame-am-et\",\n \"ethiopic-halehame-gez\", \"ethiopic-halehame-om-et\",\n \"ethiopic-halehame-sid-et\", \"ethiopic-halehame-so-et\",\n \"ethiopic-halehame-ti-er\", \"ethiopic-halehame-ti-et\", \"ethiopic-halehame-tig\",\n \"ethiopic-numeric\", \"ew-resize\", \"exclusion\", \"expanded\", \"extends\", \"extra-condensed\",\n \"extra-expanded\", \"fantasy\", \"fast\", \"fill\", \"fill-box\", \"fixed\", \"flat\", \"flex\", \"flex-end\", \"flex-start\", \"footnotes\",\n \"forwards\", \"from\", \"geometricPrecision\", \"georgian\", \"grayscale\", \"graytext\", \"grid\", \"groove\",\n \"gujarati\", \"gurmukhi\", \"hand\", \"hangul\", \"hangul-consonant\", \"hard-light\", \"hebrew\",\n \"help\", \"hidden\", \"hide\", \"higher\", \"highlight\", \"highlighttext\",\n \"hiragana\", \"hiragana-iroha\", \"horizontal\", \"hsl\", \"hsla\", \"hue\", \"hue-rotate\", \"icon\", \"ignore\",\n \"inactiveborder\", \"inactivecaption\", \"inactivecaptiontext\", \"infinite\",\n \"infobackground\", \"infotext\", \"inherit\", \"initial\", \"inline\", \"inline-axis\",\n \"inline-block\", \"inline-flex\", \"inline-grid\", \"inline-table\", \"inset\", \"inside\", \"intrinsic\", \"invert\",\n \"italic\", \"japanese-formal\", \"japanese-informal\", \"justify\", \"kannada\",\n \"katakana\", \"katakana-iroha\", \"keep-all\", \"khmer\",\n \"korean-hangul-formal\", \"korean-hanja-formal\", \"korean-hanja-informal\",\n \"landscape\", \"lao\", \"large\", \"larger\", \"left\", \"level\", \"lighter\", \"lighten\",\n \"line-through\", \"linear\", \"linear-gradient\", \"lines\", \"list-item\", \"listbox\", \"listitem\",\n \"local\", \"logical\", \"loud\", \"lower\", \"lower-alpha\", \"lower-armenian\",\n \"lower-greek\", \"lower-hexadecimal\", \"lower-latin\", \"lower-norwegian\",\n \"lower-roman\", \"lowercase\", \"ltr\", \"luminosity\", \"malayalam\", \"manipulation\", \"match\", \"matrix\", \"matrix3d\",\n \"media-play-button\", \"media-slider\", \"media-sliderthumb\",\n \"media-volume-slider\", \"media-volume-sliderthumb\", \"medium\",\n \"menu\", \"menulist\", \"menulist-button\",\n \"menutext\", \"message-box\", \"middle\", \"min-intrinsic\",\n \"mix\", \"mongolian\", \"monospace\", \"move\", \"multiple\", \"multiple_mask_images\", \"multiply\", \"myanmar\", \"n-resize\",\n \"narrower\", \"ne-resize\", \"nesw-resize\", \"no-close-quote\", \"no-drop\",\n \"no-open-quote\", \"no-repeat\", \"none\", \"normal\", \"not-allowed\", \"nowrap\",\n \"ns-resize\", \"numbers\", \"numeric\", \"nw-resize\", \"nwse-resize\", \"oblique\", \"octal\", \"opacity\", \"open-quote\",\n \"optimizeLegibility\", \"optimizeSpeed\", \"oriya\", \"oromo\", \"outset\",\n \"outside\", \"outside-shape\", \"overlay\", \"overline\", \"padding\", \"padding-box\",\n \"painted\", \"page\", \"paused\", \"persian\", \"perspective\", \"pinch-zoom\", \"plus-darker\", \"plus-lighter\",\n \"pointer\", \"polygon\", \"portrait\", \"pre\", \"pre-line\", \"pre-wrap\", \"preserve-3d\",\n \"progress\", \"push-button\", \"radial-gradient\", \"radio\", \"read-only\",\n \"read-write\", \"read-write-plaintext-only\", \"rectangle\", \"region\",\n \"relative\", \"repeat\", \"repeating-linear-gradient\", \"repeating-radial-gradient\",\n \"repeating-conic-gradient\", \"repeat-x\", \"repeat-y\", \"reset\", \"reverse\",\n \"rgb\", \"rgba\", \"ridge\", \"right\", \"rotate\", \"rotate3d\", \"rotateX\", \"rotateY\",\n \"rotateZ\", \"round\", \"row\", \"row-resize\", \"row-reverse\", \"rtl\", \"run-in\", \"running\",\n \"s-resize\", \"sans-serif\", \"saturate\", \"saturation\", \"scale\", \"scale3d\", \"scaleX\", \"scaleY\", \"scaleZ\", \"screen\",\n \"scroll\", \"scrollbar\", \"scroll-position\", \"se-resize\", \"searchfield\",\n \"searchfield-cancel-button\", \"searchfield-decoration\",\n \"searchfield-results-button\", \"searchfield-results-decoration\", \"self-start\", \"self-end\",\n \"semi-condensed\", \"semi-expanded\", \"separate\", \"sepia\", \"serif\", \"show\", \"sidama\",\n \"simp-chinese-formal\", \"simp-chinese-informal\", \"single\",\n \"skew\", \"skewX\", \"skewY\", \"skip-white-space\", \"slide\", \"slider-horizontal\",\n \"slider-vertical\", \"sliderthumb-horizontal\", \"sliderthumb-vertical\", \"slow\",\n \"small\", \"small-caps\", \"small-caption\", \"smaller\", \"soft-light\", \"solid\", \"somali\",\n \"source-atop\", \"source-in\", \"source-out\", \"source-over\", \"space\", \"space-around\", \"space-between\", \"space-evenly\", \"spell-out\", \"square\",\n \"square-button\", \"start\", \"static\", \"status-bar\", \"stretch\", \"stroke\", \"stroke-box\", \"sub\",\n \"subpixel-antialiased\", \"svg_masks\", \"super\", \"sw-resize\", \"symbolic\", \"symbols\", \"system-ui\", \"table\",\n \"table-caption\", \"table-cell\", \"table-column\", \"table-column-group\",\n \"table-footer-group\", \"table-header-group\", \"table-row\", \"table-row-group\",\n \"tamil\",\n \"telugu\", \"text\", \"text-bottom\", \"text-top\", \"textarea\", \"textfield\", \"thai\",\n \"thick\", \"thin\", \"threeddarkshadow\", \"threedface\", \"threedhighlight\",\n \"threedlightshadow\", \"threedshadow\", \"tibetan\", \"tigre\", \"tigrinya-er\",\n \"tigrinya-er-abegede\", \"tigrinya-et\", \"tigrinya-et-abegede\", \"to\", \"top\",\n \"trad-chinese-formal\", \"trad-chinese-informal\", \"transform\",\n \"translate\", \"translate3d\", \"translateX\", \"translateY\", \"translateZ\",\n \"transparent\", \"ultra-condensed\", \"ultra-expanded\", \"underline\", \"unidirectional-pan\", \"unset\", \"up\",\n \"upper-alpha\", \"upper-armenian\", \"upper-greek\", \"upper-hexadecimal\",\n \"upper-latin\", \"upper-norwegian\", \"upper-roman\", \"uppercase\", \"urdu\", \"url\",\n \"var\", \"vertical\", \"vertical-text\", \"view-box\", \"visible\", \"visibleFill\", \"visiblePainted\",\n \"visibleStroke\", \"visual\", \"w-resize\", \"wait\", \"wave\", \"wider\",\n \"window\", \"windowframe\", \"windowtext\", \"words\", \"wrap\", \"wrap-reverse\", \"x-large\", \"x-small\", \"xor\",\n \"xx-large\", \"xx-small\"\n], valueKeywords = keySet(valueKeywords_);\n\nvar allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_)\n .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_)\n .concat(valueKeywords_);\n\nexport const keywords = {properties: propertyKeywords_, colors: colorKeywords_,\n fonts: fontProperties_, values: valueKeywords_, all: allWords}\n\nconst defaults = {\n documentTypes: documentTypes,\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n fontProperties: fontProperties,\n counterDescriptors: counterDescriptors,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n tokenHooks: {\n \"/\": function(stream, state) {\n if (!stream.eat(\"*\")) return false;\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n }\n }\n}\n\nexport const css = mkCSS({name: \"css\"})\n\nfunction tokenCComment(stream, state) {\n var maybeEnd = false, ch;\n while ((ch = stream.next()) != null) {\n if (maybeEnd && ch == \"/\") {\n state.tokenize = null;\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return [\"comment\", \"comment\"];\n}\n\nexport const sCSS = mkCSS({\n name: \"scss\",\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n fontProperties: fontProperties,\n allowNested: true,\n lineComment: \"//\",\n tokenHooks: {\n \"/\": function(stream, state) {\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return [\"comment\", \"comment\"];\n } else if (stream.eat(\"*\")) {\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n } else {\n return [\"operator\", \"operator\"];\n }\n },\n \":\": function(stream) {\n if (stream.match(/^\\s*\\{/, false))\n return [null, null]\n return false;\n },\n \"$\": function(stream) {\n stream.match(/^[\\w-]+/);\n if (stream.match(/^\\s*:/, false))\n return [\"def\", \"variable-definition\"];\n return [\"variableName.special\", \"variable\"];\n },\n \"#\": function(stream) {\n if (!stream.eat(\"{\")) return false;\n return [null, \"interpolation\"];\n }\n }\n})\n\nexport const less = mkCSS({\n name: \"less\",\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n fontProperties: fontProperties,\n allowNested: true,\n lineComment: \"//\",\n tokenHooks: {\n \"/\": function(stream, state) {\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return [\"comment\", \"comment\"];\n } else if (stream.eat(\"*\")) {\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n } else {\n return [\"operator\", \"operator\"];\n }\n },\n \"@\": function(stream) {\n if (stream.eat(\"{\")) return [null, \"interpolation\"];\n if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\\b/i, false)) return false;\n stream.eatWhile(/[\\w\\\\\\-]/);\n if (stream.match(/^\\s*:/, false))\n return [\"def\", \"variable-definition\"];\n return [\"variableName\", \"variable\"];\n },\n \"&\": function() {\n return [\"atom\", \"atom\"];\n }\n }\n})\n\nexport const gss = mkCSS({\n name: \"gss\",\n documentTypes: documentTypes,\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n fontProperties: fontProperties,\n counterDescriptors: counterDescriptors,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n supportsAtComponent: true,\n tokenHooks: {\n \"/\": function(stream, state) {\n if (!stream.eat(\"*\")) return false;\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n }\n }\n})\n"],"names":["mkCSS","parserConfig","type","override","inline","_objectSpread","defaults","tokenHooks","documentTypes","mediaTypes","mediaFeatures","mediaValueKeywords","propertyKeywords","nonStandardPropertyKeywords","fontProperties","counterDescriptors","colorKeywords","valueKeywords","allowNested","lineComment","supportsAtComponent","highlightNonStandardPropertyKeywords","ret","style","tp","tokenBase","stream","state","ch","next","result","eatWhile","current","eat","tokenize","tokenString","match","test","tokenParenthesized","peek","quote","escaped","backUp","Context","indent","prev","this","pushContext","context","indentation","indentUnit","popContext","pass","states","popAndPass","n","i","wordAsValue","word","toLowerCase","hasOwnProperty","stateArg","charAt","top","_stream","atBlock","name","startState","token","eatSpace","textAfter","iCx","cx","Math","max","unit","languageData","indentOnInput","commentTokens","line","block","open","close","autocomplete","allWords","keySet","array","keys","length","documentTypes_","mediaTypes_","mediaFeatures_","mediaValueKeywords_","propertyKeywords_","nonStandardPropertyKeywords_","fontProperties_","colorKeywords_","valueKeywords_","concat","keywords","properties","colors","fonts","values","all","tokenCComment","css","maybeEnd","sCSS","skipToEnd","less","gss"],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/js/311.e7e04ffb.chunk.js b/media/assets/frontend/static/js/311.e7e04ffb.chunk.js new file mode 100644 index 00000000000..dd2e502f29f --- /dev/null +++ b/media/assets/frontend/static/js/311.e7e04ffb.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkseahub_frontend=self.webpackChunkseahub_frontend||[]).push([[311],{88311:function(r,e,t){t.r(e),t.d(e,{rpmChanges:function(){return o},rpmSpec:function(){return m}});var n=/^-+$/,a=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ?\d{1,2} \d{2}:\d{2}(:\d{2})? [A-Z]{3,4} \d{4} - /,c=/^[\w+.-]+@[\w.-]+/,o={name:"rpmchanges",token:function(r){if(r.sol()){if(r.match(n))return"tag";if(r.match(a))return"tag"}return r.match(c)?"string":(r.next(),null)}},i=/^(i386|i586|i686|x86_64|ppc64le|ppc64|ppc|ia64|s390x|s390|sparc64|sparcv9|sparc|noarch|alphaev6|alpha|hppa|mipsel)/,u=/^[a-zA-Z0-9()]+:/,p=/^%(debug_package|package|description|prep|build|install|files|clean|changelog|preinstall|preun|postinstall|postun|pretrans|posttrans|pre|post|triggerin|triggerun|verifyscript|check|triggerpostun|triggerprein|trigger)/,s=/^%(ifnarch|ifarch|if)/,l=/^%(else|endif)/,f=/^(\!|\?|\<\=|\<|\>\=|\>|\=\=|\&\&|\|\|)/,m={name:"rpmspec",startState:function(){return{controlFlow:!1,macroParameters:!1,section:!1}},token:function(r,e){if("#"==r.peek())return r.skipToEnd(),"comment";if(r.sol()){if(r.match(u))return"header";if(r.match(p))return"atom"}if(r.match(/^\$\w+/))return"def";if(r.match(/^\$\{\w+\}/))return"def";if(r.match(l))return"keyword";if(r.match(s))return e.controlFlow=!0,"keyword";if(e.controlFlow){if(r.match(f))return"operator";if(r.match(/^(\d+)/))return"number";r.eol()&&(e.controlFlow=!1)}if(r.match(i))return r.eol()&&(e.controlFlow=!1),"number";if(r.match(/^%[\w]+/))return r.match("(")&&(e.macroParameters=!0),"keyword";if(e.macroParameters){if(r.match(/^\d+/))return"number";if(r.match(")"))return e.macroParameters=!1,"keyword"}return r.match(/^%\{\??[\w \-\:\!]+\}/)?(r.eol()&&(e.controlFlow=!1),"def"):(r.next(),null)}}}}]); +//# sourceMappingURL=311.e7e04ffb.chunk.js.map \ No newline at end of file diff --git a/media/assets/frontend/static/js/311.e7e04ffb.chunk.js.map b/media/assets/frontend/static/js/311.e7e04ffb.chunk.js.map new file mode 100644 index 00000000000..2b80cbfdbd1 --- /dev/null +++ b/media/assets/frontend/static/js/311.e7e04ffb.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/311.e7e04ffb.chunk.js","mappings":"qMAAA,IAAIA,EAAkB,OAClBC,EAAa,sIACbC,EAAc,oBAELC,EAAa,CACxBC,KAAM,aACNC,MAAO,SAASC,GACd,GAAIA,EAAOC,MAAO,CAChB,GAAID,EAAOE,MAAMR,GAAoB,MAAO,MAC5C,GAAIM,EAAOE,MAAMP,GAAe,MAAO,KACzC,CACA,OAAIK,EAAOE,MAAMN,GAAuB,UACxCI,EAAOG,OACA,KACT,GAKEC,EAAO,qHAEPC,EAAW,mBACXC,EAAU,2NACVC,EAAuB,wBACvBC,EAAsB,iBACtBC,EAAY,0CAEHC,EAAU,CACrBZ,KAAM,UACNa,WAAY,WACV,MAAO,CACLC,aAAa,EACbC,iBAAiB,EACjBP,SAAS,EAEb,EACAP,MAAO,SAAUC,EAAQc,GAEvB,GAAU,KADDd,EAAOe,OACqB,OAApBf,EAAOgB,YAAoB,UAE5C,GAAIhB,EAAOC,MAAO,CAChB,GAAID,EAAOE,MAAMG,GAAa,MAAO,SACrC,GAAIL,EAAOE,MAAMI,GAAY,MAAO,MACtC,CAEA,GAAIN,EAAOE,MAAM,UAAa,MAAO,MACrC,GAAIF,EAAOE,MAAM,cAAiB,MAAO,MAEzC,GAAIF,EAAOE,MAAMM,GAAwB,MAAO,UAChD,GAAIR,EAAOE,MAAMK,GAEf,OADAO,EAAMF,aAAc,EACb,UAET,GAAIE,EAAMF,YAAa,CACrB,GAAIZ,EAAOE,MAAMO,GAAc,MAAO,WACtC,GAAIT,EAAOE,MAAM,UAAa,MAAO,SACjCF,EAAOiB,QAASH,EAAMF,aAAc,EAC1C,CAEA,GAAIZ,EAAOE,MAAME,GAEf,OADIJ,EAAOiB,QAASH,EAAMF,aAAc,GACjC,SAIT,GAAIZ,EAAOE,MAAM,WAEf,OADIF,EAAOE,MAAM,OAAQY,EAAMD,iBAAkB,GAC1C,UAET,GAAIC,EAAMD,gBAAiB,CACzB,GAAIb,EAAOE,MAAM,QAAW,MAAO,SACnC,GAAIF,EAAOE,MAAM,KAEf,OADAY,EAAMD,iBAAkB,EACjB,SAEX,CAGA,OAAIb,EAAOE,MAAM,0BACXF,EAAOiB,QAASH,EAAMF,aAAc,GACjC,QAGTZ,EAAOG,OACA,KACT,E","sources":["../node_modules/@codemirror/legacy-modes/mode/rpm.js"],"sourcesContent":["var headerSeparator = /^-+$/;\nvar headerLine = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ?\\d{1,2} \\d{2}:\\d{2}(:\\d{2})? [A-Z]{3,4} \\d{4} - /;\nvar simpleEmail = /^[\\w+.-]+@[\\w.-]+/;\n\nexport const rpmChanges = {\n name: \"rpmchanges\",\n token: function(stream) {\n if (stream.sol()) {\n if (stream.match(headerSeparator)) { return 'tag'; }\n if (stream.match(headerLine)) { return 'tag'; }\n }\n if (stream.match(simpleEmail)) { return 'string'; }\n stream.next();\n return null;\n }\n}\n\n// Quick and dirty spec file highlighting\n\nvar arch = /^(i386|i586|i686|x86_64|ppc64le|ppc64|ppc|ia64|s390x|s390|sparc64|sparcv9|sparc|noarch|alphaev6|alpha|hppa|mipsel)/;\n\nvar preamble = /^[a-zA-Z0-9()]+:/;\nvar section = /^%(debug_package|package|description|prep|build|install|files|clean|changelog|preinstall|preun|postinstall|postun|pretrans|posttrans|pre|post|triggerin|triggerun|verifyscript|check|triggerpostun|triggerprein|trigger)/;\nvar control_flow_complex = /^%(ifnarch|ifarch|if)/; // rpm control flow macros\nvar control_flow_simple = /^%(else|endif)/; // rpm control flow macros\nvar operators = /^(\\!|\\?|\\<\\=|\\<|\\>\\=|\\>|\\=\\=|\\&\\&|\\|\\|)/; // operators in control flow macros\n\nexport const rpmSpec = {\n name: \"rpmspec\",\n startState: function () {\n return {\n controlFlow: false,\n macroParameters: false,\n section: false\n };\n },\n token: function (stream, state) {\n var ch = stream.peek();\n if (ch == \"#\") { stream.skipToEnd(); return \"comment\"; }\n\n if (stream.sol()) {\n if (stream.match(preamble)) { return \"header\"; }\n if (stream.match(section)) { return \"atom\"; }\n }\n\n if (stream.match(/^\\$\\w+/)) { return \"def\"; } // Variables like '$RPM_BUILD_ROOT'\n if (stream.match(/^\\$\\{\\w+\\}/)) { return \"def\"; } // Variables like '${RPM_BUILD_ROOT}'\n\n if (stream.match(control_flow_simple)) { return \"keyword\"; }\n if (stream.match(control_flow_complex)) {\n state.controlFlow = true;\n return \"keyword\";\n }\n if (state.controlFlow) {\n if (stream.match(operators)) { return \"operator\"; }\n if (stream.match(/^(\\d+)/)) { return \"number\"; }\n if (stream.eol()) { state.controlFlow = false; }\n }\n\n if (stream.match(arch)) {\n if (stream.eol()) { state.controlFlow = false; }\n return \"number\";\n }\n\n // Macros like '%make_install' or '%attr(0775,root,root)'\n if (stream.match(/^%[\\w]+/)) {\n if (stream.match('(')) { state.macroParameters = true; }\n return \"keyword\";\n }\n if (state.macroParameters) {\n if (stream.match(/^\\d+/)) { return \"number\";}\n if (stream.match(')')) {\n state.macroParameters = false;\n return \"keyword\";\n }\n }\n\n // Macros like '%{defined fedora}'\n if (stream.match(/^%\\{\\??[\\w \\-\\:\\!]+\\}/)) {\n if (stream.eol()) { state.controlFlow = false; }\n return \"def\";\n }\n\n stream.next();\n return null;\n }\n};\n\n"],"names":["headerSeparator","headerLine","simpleEmail","rpmChanges","name","token","stream","sol","match","next","arch","preamble","section","control_flow_complex","control_flow_simple","operators","rpmSpec","startState","controlFlow","macroParameters","state","peek","skipToEnd","eol"],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/js/379.e48ee7a7.chunk.js b/media/assets/frontend/static/js/379.e48ee7a7.chunk.js new file mode 100644 index 00000000000..d9286eb9a22 --- /dev/null +++ b/media/assets/frontend/static/js/379.e48ee7a7.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkseahub_frontend=self.webpackChunkseahub_frontend||[]).push([[379],{50379:function(e,t,n){function r(e){for(var t={},n=e.split(" "),r=0;r!=&|~^\/]/,o=e.support||{},u=e.hooks||{},d=e.dateSQL||{date:!0,time:!0,timestamp:!0},m=!1!==e.backslashStringEscapes,p=e.brackets||/^[\{}\(\)\[\]]/,g=e.punctuation||/^[;.,:]/;function h(e,s){var l=e.next();if(u[l]){var c=u[l](e,s);if(!1!==c)return c}if(o.hexNumber&&("0"==l&&e.match(/^[xX][0-9a-fA-F]+/)||("x"==l||"X"==l)&&e.match(/^'[0-9a-fA-F]*'/)))return"number";if(o.binaryNumber&&(("b"==l||"B"==l)&&e.match(/^'[01]+'/)||"0"==l&&e.match(/^b[01]*/)))return"number";if(l.charCodeAt(0)>47&&l.charCodeAt(0)<58)return e.match(/^[0-9]*(\.[0-9]+)?([eE][-+]?[0-9]+)?/),o.decimallessFloat&&e.match(/^\.(?!\.)/),"number";if("?"==l&&(e.eatSpace()||e.eol()||e.eat(";")))return"macroName";if("'"==l||'"'==l&&o.doubleQuote)return s.tokenize=b(l),s.tokenize(e,s);if((o.nCharCast&&("n"==l||"N"==l)||o.charsetCast&&"_"==l&&e.match(/[a-z][a-z0-9]*/i))&&("'"==e.peek()||'"'==e.peek()))return"keyword";if(o.escapeConstant&&("e"==l||"E"==l)&&("'"==e.peek()||'"'==e.peek()&&o.doubleQuote))return s.tokenize=function(e,t){return(t.tokenize=b(e.next(),!0))(e,t)},"keyword";if(o.commentSlashSlash&&"/"==l&&e.eat("/"))return e.skipToEnd(),"comment";if(o.commentHash&&"#"==l||"-"==l&&e.eat("-")&&(!o.commentSpaceRequired||e.eat(" ")))return e.skipToEnd(),"comment";if("/"==l&&e.eat("*"))return s.tokenize=f(1),s.tokenize(e,s);if("."!=l){if(i.test(l))return e.eatWhile(i),"operator";if(p.test(l))return"bracket";if(g.test(l))return e.eatWhile(g),"punctuation";if("{"==l&&(e.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/)||e.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/)))return"number";e.eatWhile(/^[_\w\d]/);var m=e.current().toLowerCase();return d.hasOwnProperty(m)&&(e.match(/^( )+'[^']*'/)||e.match(/^( )+"[^"]*"/))?"number":r.hasOwnProperty(m)?"atom":a.hasOwnProperty(m)?"type":n.hasOwnProperty(m)?"keyword":t.hasOwnProperty(m)?"builtin":null}return o.zerolessFloat&&e.match(/^(?:\d+(?:e[+-]?\d+)?)/i)?"number":e.match(/^\.+/)?null:o.ODBCdotTable&&e.match(/^[\w\d_$#]+/)?"type":void 0}function b(e,t){return function(r,a){for(var n,i=!1;null!=(n=r.next());){if(n==e&&!i){a.tokenize=h;break}i=(m||t)&&!i&&"\\"==n}return"string"}}function f(e){return function(t,r){var a=t.match(/^.*?(\/\*|\*\/)/);return a?"/*"==a[1]?r.tokenize=f(e+1):r.tokenize=e>1?f(e-1):h:t.skipToEnd(),"comment"}}function _(e,t,r){t.context={prev:t.context,indent:e.indentation(),col:e.column(),type:r}}return{name:"sql",startState:function(){return{tokenize:h,context:null}},token:function(e,t){if(e.sol()&&t.context&&null==t.context.align&&(t.context.align=!1),t.tokenize==h&&e.eatSpace())return null;var r=t.tokenize(e,t);if("comment"==r)return r;t.context&&null==t.context.align&&(t.context.align=!0);var a=e.current();return"("==a?_(e,t,")"):"["==a?_(e,t,"]"):t.context&&t.context.type==a&&function(e){e.indent=e.context.indent,e.context=e.context.prev}(t),r},indent:function(e,t,r){var a=e.context;if(!a)return null;var n=t.charAt(0)==a.type;return a.align?a.col+(n?0:1):a.indent+(n?0:r.unit)},languageData:{commentTokens:{line:o.commentSlashSlash?"//":o.commentHash?"#":"--",block:{open:"/*",close:"*/"}},closeBrackets:{brackets:["(","[","{","'",'"',"`"]}}}}function n(e){for(var t;null!=(t=e.next());)if("`"==t&&!e.eat("`"))return"string.special";return e.backUp(e.current().length-1),e.eatWhile(/\w/)?"string.special":null}function i(e){return e.eat("@")&&(e.match("session."),e.match("local."),e.match("global.")),e.eat("'")?(e.match(/^.*'/),"string.special"):e.eat('"')?(e.match(/^.*"/),"string.special"):e.eat("`")?(e.match(/^.*`/),"string.special"):e.match(/^[0-9a-zA-Z$\.\_]+/)?"string.special":null}function o(e){return e.eat("N")?"atom":e.match(/^[a-zA-Z.#!?]/)?"string.special":null}r.r(t),r.d(t,{cassandra:function(){return h},esper:function(){return w},gpSQL:function(){return v},gql:function(){return y},hive:function(){return f},mariaDB:function(){return p},msSQL:function(){return d},mySQL:function(){return m},pgSQL:function(){return _},plSQL:function(){return b},sparkSQL:function(){return x},sql:function(){return a},sqlite:function(){return g},standardSQL:function(){return u}});var s="alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit ";function l(e){for(var t={},r=e.split(" "),a=0;a!=^\&|\/]/,brackets:/^[\{}\(\)]/,punctuation:/^[;.,:/]/,backslashStringEscapes:!1,dateSQL:l("date datetimeoffset datetime2 smalldatetime datetime time"),hooks:{"@":i}}),m=a({client:l("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),keywords:l(s+"accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),builtin:l("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),atoms:l("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^]/,dateSQL:l("date time timestamp"),support:l("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),hooks:{"@":i,"`":n,"\\":o}}),p=a({client:l("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),keywords:l(s+"accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group group_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),builtin:l("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),atoms:l("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^]/,dateSQL:l("date time timestamp"),support:l("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),hooks:{"@":i,"`":n,"\\":o}}),g=a({client:l("auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width"),keywords:l(s+"abort action add after all analyze attach autoincrement before begin cascade case cast check collate column commit conflict constraint cross current_date current_time current_timestamp database default deferrable deferred detach each else end escape except exclusive exists explain fail for foreign full glob if ignore immediate index indexed initially inner instead intersect isnull key left limit match natural no notnull null of offset outer plan pragma primary query raise recursive references regexp reindex release rename replace restrict right rollback row savepoint temp temporary then to transaction trigger unique using vacuum view virtual when with without"),builtin:l("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text clob bigint int int2 int8 integer float double char varchar date datetime year unsigned signed numeric real"),atoms:l("null current_date current_time current_timestamp"),operatorChars:/^[*+\-%<>!=&|/~]/,dateSQL:l("date time timestamp datetime"),support:l("decimallessFloat zerolessFloat"),identifierQuote:'"',hooks:{"@":i,":":i,"?":i,$:i,'"':function(e){for(var t;null!=(t=e.next());)if('"'==t&&!e.eat('"'))return"string.special";return e.backUp(e.current().length-1),e.eatWhile(/\w/)?"string.special":null},"`":n}}),h=a({client:{},keywords:l("add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime"),builtin:l("ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint"),atoms:l("false true infinity NaN"),operatorChars:/^[<>=]/,dateSQL:{},support:l("commentSlashSlash decimallessFloat"),hooks:{}}),b=a({client:l("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"),keywords:l("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"),builtin:l("abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least length lengthb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml"),operatorChars:/^[*\/+\-%<>!=~]/,dateSQL:l("date time timestamp"),support:l("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber")}),f=a({keywords:l("select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with admin authorization char compact compactions conf cube current current_date current_timestamp day decimal defined dependency directories elem_type exchange file following for grouping hour ignore inner interval jar less logical macro minute month more none noscan over owner partialscan preceding pretty principals protection reload rewrite role roles rollup rows second server sets skewed transactions truncate unbounded unset uri user values window year"),builtin:l("bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype key_type utctimestamp value_type varchar"),atoms:l("false true null unknown"),operatorChars:/^[*+\-%<>!=]/,dateSQL:l("date timestamp"),support:l("ODBCdotTable doubleQuote binaryNumber hexNumber")}),_=a({client:l("source"),keywords:l(s+"a abort abs absent absolute access according action ada add admin after aggregate alias all allocate also alter always analyse analyze and any are array array_agg array_max_cardinality as asc asensitive assert assertion assignment asymmetric at atomic attach attribute attributes authorization avg backward base64 before begin begin_frame begin_partition bernoulli between bigint binary bit bit_length blob blocked bom boolean both breadth by c cache call called cardinality cascade cascaded case cast catalog catalog_name ceil ceiling chain char char_length character character_length character_set_catalog character_set_name character_set_schema characteristics characters check checkpoint class class_origin clob close cluster coalesce cobol collate collation collation_catalog collation_name collation_schema collect column column_name columns command_function command_function_code comment comments commit committed concurrently condition condition_number configuration conflict connect connection connection_name constant constraint constraint_catalog constraint_name constraint_schema constraints constructor contains content continue control conversion convert copy corr corresponding cost count covar_pop covar_samp create cross csv cube cume_dist current current_catalog current_date current_default_transform_group current_path current_role current_row current_schema current_time current_timestamp current_transform_group_for_type current_user cursor cursor_name cycle data database datalink datatype date datetime_interval_code datetime_interval_precision day db deallocate debug dec decimal declare default defaults deferrable deferred defined definer degree delete delimiter delimiters dense_rank depends depth deref derived desc describe descriptor detach detail deterministic diagnostics dictionary disable discard disconnect dispatch distinct dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue do document domain double drop dump dynamic dynamic_function dynamic_function_code each element else elseif elsif empty enable encoding encrypted end end_frame end_partition endexec enforced enum equals errcode error escape event every except exception exclude excluding exclusive exec execute exists exit exp explain expression extension external extract false family fetch file filter final first first_value flag float floor following for force foreach foreign fortran forward found frame_row free freeze from fs full function functions fusion g general generated get global go goto grant granted greatest group grouping groups handler having header hex hierarchy hint hold hour id identity if ignore ilike immediate immediately immutable implementation implicit import in include including increment indent index indexes indicator info inherit inherits initially inline inner inout input insensitive insert instance instantiable instead int integer integrity intersect intersection interval into invoker is isnull isolation join k key key_member key_type label lag language large last last_value lateral lead leading leakproof least left length level library like like_regex limit link listen ln load local localtime localtimestamp location locator lock locked log logged loop lower m map mapping match matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text method min minute minvalue mod mode modifies module month more move multiset mumps name names namespace national natural nchar nclob nesting new next nfc nfd nfkc nfkd nil no none normalize normalized not nothing notice notify notnull nowait nth_value ntile null nullable nullif nulls number numeric object occurrences_regex octet_length octets of off offset oids old on only open operator option options or order ordering ordinality others out outer output over overlaps overlay overriding owned owner p pad parallel parameter parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partial partition pascal passing passthrough password path percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding precision prepare prepared preserve primary print_strict_params prior privileges procedural procedure procedures program public publication query quote raise range rank read reads real reassign recheck recovery recursive ref references referencing refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex relative release rename repeatable replace replica requiring reset respect restart restore restrict result result_oid return returned_cardinality returned_length returned_octet_length returned_sqlstate returning returns reverse revoke right role rollback rollup routine routine_catalog routine_name routine_schema routines row row_count row_number rows rowtype rule savepoint scale schema schema_name schemas scope scope_catalog scope_name scope_schema scroll search second section security select selective self sensitive sequence sequences serializable server server_name session session_user set setof sets share show similar simple size skip slice smallint snapshot some source space specific specific_name specifictype sql sqlcode sqlerror sqlexception sqlstate sqlwarning sqrt stable stacked standalone start state statement static statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time system_user t table table_name tables tablesample tablespace temp template temporary text then ties time timestamp timezone_hour timezone_minute to token top_level_count trailing transaction transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex translation treat trigger trigger_catalog trigger_name trigger_schema trim trim_array true truncate trusted type types uescape unbounded uncommitted under unencrypted union unique unknown unlink unlisten unlogged unnamed unnest until untyped update upper uri usage use_column use_variable user user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema using vacuum valid validate validator value value_of values var_pop var_samp varbinary varchar variable_conflict variadic varying verbose version versioning view views volatile warning when whenever where while whitespace width_bucket window with within without work wrapper write xml xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate year yes zone"),builtin:l("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"),atoms:l("false true null unknown"),operatorChars:/^[*\/+\-%<>!=&|^\/#@?~]/,backslashStringEscapes:!1,dateSQL:l("date time timestamp"),support:l("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast escapeConstant")}),y=a({keywords:l("ancestor and asc by contains desc descendant distinct from group has in is limit offset on order select superset where"),atoms:l("false true"),builtin:l("blob datetime first key __key__ string integer double boolean null"),operatorChars:/^[*+\-%<>!=]/}),v=a({client:l("source"),keywords:l("abort absolute access action active add admin after aggregate all also alter always analyse analyze and any array as asc assertion assignment asymmetric at authorization backward before begin between bigint binary bit boolean both by cache called cascade cascaded case cast chain char character characteristics check checkpoint class close cluster coalesce codegen collate column comment commit committed concurrency concurrently configuration connection constraint constraints contains content continue conversion copy cost cpu_rate_limit create createdb createexttable createrole createuser cross csv cube current current_catalog current_date current_role current_schema current_time current_timestamp current_user cursor cycle data database day deallocate dec decimal declare decode default defaults deferrable deferred definer delete delimiter delimiters deny desc dictionary disable discard distinct distributed do document domain double drop dxl each else enable encoding encrypted end enum errors escape every except exchange exclude excluding exclusive execute exists explain extension external extract false family fetch fields filespace fill filter first float following for force foreign format forward freeze from full function global grant granted greatest group group_id grouping handler hash having header hold host hour identity if ignore ilike immediate immutable implicit in including inclusive increment index indexes inherit inherits initially inline inner inout input insensitive insert instead int integer intersect interval into invoker is isnull isolation join key language large last leading least left level like limit list listen load local localtime localtimestamp location lock log login mapping master match maxvalue median merge minute minvalue missing mode modifies modify month move name names national natural nchar new newline next no nocreatedb nocreateexttable nocreaterole nocreateuser noinherit nologin none noovercommit nosuperuser not nothing notify notnull nowait null nullif nulls numeric object of off offset oids old on only operator option options or order ordered others out outer over overcommit overlaps overlay owned owner parser partial partition partitions passing password percent percentile_cont percentile_disc placing plans position preceding precision prepare prepared preserve primary prior privileges procedural procedure protocol queue quote randomly range read readable reads real reassign recheck recursive ref references reindex reject relative release rename repeatable replace replica reset resource restart restrict returning returns revoke right role rollback rollup rootpartition row rows rule savepoint scatter schema scroll search second security segment select sequence serializable session session_user set setof sets share show similar simple smallint some split sql stable standalone start statement statistics stdin stdout storage strict strip subpartition subpartitions substring superuser symmetric sysid system table tablespace temp template temporary text then threshold ties time timestamp to trailing transaction treat trigger trim true truncate trusted type unbounded uncommitted unencrypted union unique unknown unlisten until update user using vacuum valid validation validator value values varchar variadic varying verbose version view volatile web when where whitespace window with within without work writable write xml xmlattributes xmlconcat xmlelement xmlexists xmlforest xmlparse xmlpi xmlroot xmlserialize year yes zone"),builtin:l("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"),atoms:l("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^\/#@?~]/,dateSQL:l("date time timestamp"),support:l("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast")}),x=a({keywords:l("add after all alter analyze and anti archive array as asc at between bucket buckets by cache cascade case cast change clear cluster clustered codegen collection column columns comment commit compact compactions compute concatenate cost create cross cube current current_date current_timestamp database databases data dbproperties defined delete delimited deny desc describe dfs directories distinct distribute drop else end escaped except exchange exists explain export extended external false fields fileformat first following for format formatted from full function functions global grant group grouping having if ignore import in index indexes inner inpath inputformat insert intersect interval into is items join keys last lateral lazy left like limit lines list load local location lock locks logical macro map minus msck natural no not null nulls of on optimize option options or order out outer outputformat over overwrite partition partitioned partitions percent preceding principals purge range recordreader recordwriter recover reduce refresh regexp rename repair replace reset restrict revoke right rlike role roles rollback rollup row rows schema schemas select semi separated serde serdeproperties set sets show skewed sort sorted start statistics stored stratify struct table tables tablesample tblproperties temp temporary terminated then to touch transaction transactions transform true truncate unarchive unbounded uncache union unlock unset use using values view when where window with"),builtin:l("tinyint smallint int bigint boolean float double string binary timestamp decimal array map struct uniontype delimited serde sequencefile textfile rcfile inputformat outputformat"),atoms:l("false true null"),operatorChars:/^[*\/+\-%<>!=~&|^]/,dateSQL:l("date time timestamp"),support:l("ODBCdotTable doubleQuote zerolessFloat")}),w=a({client:l("source"),keywords:l("alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit after all and as at asc avedev avg between by case cast coalesce count create current_timestamp day days delete define desc distinct else end escape events every exists false first from full group having hour hours in inner insert instanceof into irstream is istream join last lastweekday left limit like max match_recognize matches median measures metadatasql min minute minutes msec millisecond milliseconds not null offset on or order outer output partition pattern prev prior regexp retain-union retain-intersection right rstream sec second seconds select set some snapshot sql stddev sum then true unidirectional until update variable weekday when where window"),builtin:{},atoms:l("false true null"),operatorChars:/^[*+\-%<>!=&|^\/#@?~]/,dateSQL:l("time"),support:l("decimallessFloat zerolessFloat binaryNumber hexNumber")})}}]); +//# sourceMappingURL=482.40023cf1.chunk.js.map \ No newline at end of file diff --git a/media/assets/frontend/static/js/482.40023cf1.chunk.js.map b/media/assets/frontend/static/js/482.40023cf1.chunk.js.map new file mode 100644 index 00000000000..a8501f58d22 --- /dev/null +++ b/media/assets/frontend/static/js/482.40023cf1.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/482.40023cf1.chunk.js","mappings":"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","sources":["../node_modules/@codemirror/legacy-modes/mode/sql.js"],"sourcesContent":["export function sql(parserConfig) {\n var client = parserConfig.client || {},\n atoms = parserConfig.atoms || {\"false\": true, \"true\": true, \"null\": true},\n builtin = parserConfig.builtin || set(defaultBuiltin),\n keywords = parserConfig.keywords || set(sqlKeywords),\n operatorChars = parserConfig.operatorChars || /^[*+\\-%<>!=&|~^\\/]/,\n support = parserConfig.support || {},\n hooks = parserConfig.hooks || {},\n dateSQL = parserConfig.dateSQL || {\"date\" : true, \"time\" : true, \"timestamp\" : true},\n backslashStringEscapes = parserConfig.backslashStringEscapes !== false,\n brackets = parserConfig.brackets || /^[\\{}\\(\\)\\[\\]]/,\n punctuation = parserConfig.punctuation || /^[;.,:]/\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n\n // call hooks from the mime type\n if (hooks[ch]) {\n var result = hooks[ch](stream, state);\n if (result !== false) return result;\n }\n\n if (support.hexNumber &&\n ((ch == \"0\" && stream.match(/^[xX][0-9a-fA-F]+/))\n || (ch == \"x\" || ch == \"X\") && stream.match(/^'[0-9a-fA-F]*'/))) {\n // hex\n // ref: http://dev.mysql.com/doc/refman/5.5/en/hexadecimal-literals.html\n return \"number\";\n } else if (support.binaryNumber &&\n (((ch == \"b\" || ch == \"B\") && stream.match(/^'[01]+'/))\n || (ch == \"0\" && stream.match(/^b[01]*/)))) {\n // bitstring\n // ref: http://dev.mysql.com/doc/refman/5.5/en/bit-field-literals.html\n return \"number\";\n } else if (ch.charCodeAt(0) > 47 && ch.charCodeAt(0) < 58) {\n // numbers\n // ref: http://dev.mysql.com/doc/refman/5.5/en/number-literals.html\n stream.match(/^[0-9]*(\\.[0-9]+)?([eE][-+]?[0-9]+)?/);\n support.decimallessFloat && stream.match(/^\\.(?!\\.)/);\n return \"number\";\n } else if (ch == \"?\" && (stream.eatSpace() || stream.eol() || stream.eat(\";\"))) {\n // placeholders\n return \"macroName\";\n } else if (ch == \"'\" || (ch == '\"' && support.doubleQuote)) {\n // strings\n // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html\n state.tokenize = tokenLiteral(ch);\n return state.tokenize(stream, state);\n } else if ((((support.nCharCast && (ch == \"n\" || ch == \"N\"))\n || (support.charsetCast && ch == \"_\" && stream.match(/[a-z][a-z0-9]*/i)))\n && (stream.peek() == \"'\" || stream.peek() == '\"'))) {\n // charset casting: _utf8'str', N'str', n'str'\n // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html\n return \"keyword\";\n } else if (support.escapeConstant && (ch == \"e\" || ch == \"E\")\n && (stream.peek() == \"'\" || (stream.peek() == '\"' && support.doubleQuote))) {\n // escape constant: E'str', e'str'\n // ref: https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS-ESCAPE\n state.tokenize = function(stream, state) {\n return (state.tokenize = tokenLiteral(stream.next(), true))(stream, state);\n }\n return \"keyword\";\n } else if (support.commentSlashSlash && ch == \"/\" && stream.eat(\"/\")) {\n // 1-line comment\n stream.skipToEnd();\n return \"comment\";\n } else if ((support.commentHash && ch == \"#\")\n || (ch == \"-\" && stream.eat(\"-\") && (!support.commentSpaceRequired || stream.eat(\" \")))) {\n // 1-line comments\n // ref: https://kb.askmonty.org/en/comment-syntax/\n stream.skipToEnd();\n return \"comment\";\n } else if (ch == \"/\" && stream.eat(\"*\")) {\n // multi-line comments\n // ref: https://kb.askmonty.org/en/comment-syntax/\n state.tokenize = tokenComment(1);\n return state.tokenize(stream, state);\n } else if (ch == \".\") {\n // .1 for 0.1\n if (support.zerolessFloat && stream.match(/^(?:\\d+(?:e[+-]?\\d+)?)/i))\n return \"number\";\n if (stream.match(/^\\.+/))\n return null\n // .table_name (ODBC)\n // // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html\n if (support.ODBCdotTable && stream.match(/^[\\w\\d_$#]+/))\n return \"type\";\n } else if (operatorChars.test(ch)) {\n // operators\n stream.eatWhile(operatorChars);\n return \"operator\";\n } else if (brackets.test(ch)) {\n // brackets\n return \"bracket\";\n } else if (punctuation.test(ch)) {\n // punctuation\n stream.eatWhile(punctuation);\n return \"punctuation\";\n } else if (ch == '{' &&\n (stream.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/) || stream.match(/^( )*(d|D|t|T|ts|TS)( )*\"[^\"]*\"( )*}/))) {\n // dates (weird ODBC syntax)\n // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html\n return \"number\";\n } else {\n stream.eatWhile(/^[_\\w\\d]/);\n var word = stream.current().toLowerCase();\n // dates (standard SQL syntax)\n // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html\n if (dateSQL.hasOwnProperty(word) && (stream.match(/^( )+'[^']*'/) || stream.match(/^( )+\"[^\"]*\"/)))\n return \"number\";\n if (atoms.hasOwnProperty(word)) return \"atom\";\n if (builtin.hasOwnProperty(word)) return \"type\";\n if (keywords.hasOwnProperty(word)) return \"keyword\";\n if (client.hasOwnProperty(word)) return \"builtin\";\n return null;\n }\n }\n\n // 'string', with char specified in quote escaped by '\\'\n function tokenLiteral(quote, backslashEscapes) {\n return function(stream, state) {\n var escaped = false, ch;\n while ((ch = stream.next()) != null) {\n if (ch == quote && !escaped) {\n state.tokenize = tokenBase;\n break;\n }\n escaped = (backslashStringEscapes || backslashEscapes) && !escaped && ch == \"\\\\\";\n }\n return \"string\";\n };\n }\n function tokenComment(depth) {\n return function(stream, state) {\n var m = stream.match(/^.*?(\\/\\*|\\*\\/)/)\n if (!m) stream.skipToEnd()\n else if (m[1] == \"/*\") state.tokenize = tokenComment(depth + 1)\n else if (depth > 1) state.tokenize = tokenComment(depth - 1)\n else state.tokenize = tokenBase\n return \"comment\"\n }\n }\n\n function pushContext(stream, state, type) {\n state.context = {\n prev: state.context,\n indent: stream.indentation(),\n col: stream.column(),\n type: type\n };\n }\n\n function popContext(state) {\n state.indent = state.context.indent;\n state.context = state.context.prev;\n }\n\n return {\n name: \"sql\",\n\n startState: function() {\n return {tokenize: tokenBase, context: null};\n },\n\n token: function(stream, state) {\n if (stream.sol()) {\n if (state.context && state.context.align == null)\n state.context.align = false;\n }\n if (state.tokenize == tokenBase && stream.eatSpace()) return null;\n\n var style = state.tokenize(stream, state);\n if (style == \"comment\") return style;\n\n if (state.context && state.context.align == null)\n state.context.align = true;\n\n var tok = stream.current();\n if (tok == \"(\")\n pushContext(stream, state, \")\");\n else if (tok == \"[\")\n pushContext(stream, state, \"]\");\n else if (state.context && state.context.type == tok)\n popContext(state);\n return style;\n },\n\n indent: function(state, textAfter, iCx) {\n var cx = state.context;\n if (!cx) return null;\n var closing = textAfter.charAt(0) == cx.type;\n if (cx.align) return cx.col + (closing ? 0 : 1);\n else return cx.indent + (closing ? 0 : iCx.unit);\n },\n\n languageData: {\n commentTokens: {\n line: support.commentSlashSlash ? \"//\" : support.commentHash ? \"#\" : \"--\",\n block: {open: \"/*\", close: \"*/\"}\n },\n closeBrackets: {brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"`\"]}\n }\n };\n};\n\n// `identifier`\nfunction hookIdentifier(stream) {\n // MySQL/MariaDB identifiers\n // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"`\" && !stream.eat(\"`\")) return \"string.special\";\n }\n stream.backUp(stream.current().length - 1);\n return stream.eatWhile(/\\w/) ? \"string.special\" : null;\n}\n\n// \"identifier\"\nfunction hookIdentifierDoublequote(stream) {\n // Standard SQL /SQLite identifiers\n // ref: http://web.archive.org/web/20160813185132/http://savage.net.au/SQL/sql-99.bnf.html#delimited%20identifier\n // ref: http://sqlite.org/lang_keywords.html\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"\\\"\" && !stream.eat(\"\\\"\")) return \"string.special\";\n }\n stream.backUp(stream.current().length - 1);\n return stream.eatWhile(/\\w/) ? \"string.special\" : null;\n}\n\n// variable token\nfunction hookVar(stream) {\n // variables\n // @@prefix.varName @varName\n // varName can be quoted with ` or ' or \"\n // ref: http://dev.mysql.com/doc/refman/5.5/en/user-variables.html\n if (stream.eat(\"@\")) {\n stream.match('session.');\n stream.match('local.');\n stream.match('global.');\n }\n\n if (stream.eat(\"'\")) {\n stream.match(/^.*'/);\n return \"string.special\";\n } else if (stream.eat('\"')) {\n stream.match(/^.*\"/);\n return \"string.special\";\n } else if (stream.eat(\"`\")) {\n stream.match(/^.*`/);\n return \"string.special\";\n } else if (stream.match(/^[0-9a-zA-Z$\\.\\_]+/)) {\n return \"string.special\";\n }\n return null;\n};\n\n// short client keyword token\nfunction hookClient(stream) {\n // \\N means NULL\n // ref: http://dev.mysql.com/doc/refman/5.5/en/null-values.html\n if (stream.eat(\"N\")) {\n return \"atom\";\n }\n // \\g, etc\n // ref: http://dev.mysql.com/doc/refman/5.5/en/mysql-commands.html\n return stream.match(/^[a-zA-Z.#!?]/) ? \"string.special\" : null;\n}\n\n// these keywords are used by all SQL dialects (however, a mode can still overwrite it)\nvar sqlKeywords = \"alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit \";\n\n// turn a space-separated list into an array\nfunction set(str) {\n var obj = {}, words = str.split(\" \");\n for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n return obj;\n}\n\nvar defaultBuiltin = \"bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric\"\n\n// A generic SQL Mode. It's not a standard, it just try to support what is generally supported\nexport const standardSQL = sql({\n keywords: set(sqlKeywords + \"begin\"),\n builtin: set(defaultBuiltin),\n atoms: set(\"false true null unknown\"),\n dateSQL: set(\"date time timestamp\"),\n support: set(\"ODBCdotTable doubleQuote binaryNumber hexNumber\")\n});\n\nexport const msSQL = sql({\n client: set(\"$partition binary_checksum checksum connectionproperty context_info current_request_id error_line error_message error_number error_procedure error_severity error_state formatmessage get_filestream_transaction_context getansinull host_id host_name isnull isnumeric min_active_rowversion newid newsequentialid rowcount_big xact_state object_id\"),\n keywords: set(sqlKeywords + \"begin trigger proc view index for add constraint key primary foreign collate clustered nonclustered declare exec go if use index holdlock nolock nowait paglock readcommitted readcommittedlock readpast readuncommitted repeatableread rowlock serializable snapshot tablock tablockx updlock with\"),\n builtin: set(\"bigint numeric bit smallint decimal smallmoney int tinyint money float real char varchar text nchar nvarchar ntext binary varbinary image cursor timestamp hierarchyid uniqueidentifier sql_variant xml table \"),\n atoms: set(\"is not null like and or in left right between inner outer join all any some cross unpivot pivot exists\"),\n operatorChars: /^[*+\\-%<>!=^\\&|\\/]/,\n brackets: /^[\\{}\\(\\)]/,\n punctuation: /^[;.,:/]/,\n backslashStringEscapes: false,\n dateSQL: set(\"date datetimeoffset datetime2 smalldatetime datetime time\"),\n hooks: {\n \"@\": hookVar\n }\n});\n\nexport const mySQL = sql({\n client: set(\"charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee\"),\n keywords: set(sqlKeywords + \"accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat\"),\n builtin: set(\"bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric\"),\n atoms: set(\"false true null unknown\"),\n operatorChars: /^[*+\\-%<>!=&|^]/,\n dateSQL: set(\"date time timestamp\"),\n support: set(\"ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired\"),\n hooks: {\n \"@\": hookVar,\n \"`\": hookIdentifier,\n \"\\\\\": hookClient\n }\n});\n\nexport const mariaDB = sql({\n client: set(\"charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee\"),\n keywords: set(sqlKeywords + \"accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group group_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat\"),\n builtin: set(\"bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric\"),\n atoms: set(\"false true null unknown\"),\n operatorChars: /^[*+\\-%<>!=&|^]/,\n dateSQL: set(\"date time timestamp\"),\n support: set(\"ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired\"),\n hooks: {\n \"@\": hookVar,\n \"`\": hookIdentifier,\n \"\\\\\": hookClient\n }\n});\n\n// provided by the phpLiteAdmin project - phpliteadmin.org\nexport const sqlite = sql({\n // commands of the official SQLite client, ref: https://www.sqlite.org/cli.html#dotcmd\n client: set(\"auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width\"),\n // ref: http://sqlite.org/lang_keywords.html\n keywords: set(sqlKeywords + \"abort action add after all analyze attach autoincrement before begin cascade case cast check collate column commit conflict constraint cross current_date current_time current_timestamp database default deferrable deferred detach each else end escape except exclusive exists explain fail for foreign full glob if ignore immediate index indexed initially inner instead intersect isnull key left limit match natural no notnull null of offset outer plan pragma primary query raise recursive references regexp reindex release rename replace restrict right rollback row savepoint temp temporary then to transaction trigger unique using vacuum view virtual when with without\"),\n // SQLite is weakly typed, ref: http://sqlite.org/datatype3.html. This is just a list of some common types.\n builtin: set(\"bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text clob bigint int int2 int8 integer float double char varchar date datetime year unsigned signed numeric real\"),\n // ref: http://sqlite.org/syntax/literal-value.html\n atoms: set(\"null current_date current_time current_timestamp\"),\n // ref: http://sqlite.org/lang_expr.html#binaryops\n operatorChars: /^[*+\\-%<>!=&|/~]/,\n // SQLite is weakly typed, ref: http://sqlite.org/datatype3.html. This is just a list of some common types.\n dateSQL: set(\"date time timestamp datetime\"),\n support: set(\"decimallessFloat zerolessFloat\"),\n identifierQuote: \"\\\"\", //ref: http://sqlite.org/lang_keywords.html\n hooks: {\n // bind-parameters ref:http://sqlite.org/lang_expr.html#varparam\n \"@\": hookVar,\n \":\": hookVar,\n \"?\": hookVar,\n \"$\": hookVar,\n // The preferred way to escape Identifiers is using double quotes, ref: http://sqlite.org/lang_keywords.html\n \"\\\"\": hookIdentifierDoublequote,\n // there is also support for backticks, ref: http://sqlite.org/lang_keywords.html\n \"`\": hookIdentifier\n }\n});\n\n// the query language used by Apache Cassandra is called CQL, but this mime type\n// is called Cassandra to avoid confusion with Contextual Query Language\nexport const cassandra = sql({\n client: { },\n keywords: set(\"add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime\"),\n builtin: set(\"ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint\"),\n atoms: set(\"false true infinity NaN\"),\n operatorChars: /^[<>=]/,\n dateSQL: { },\n support: set(\"commentSlashSlash decimallessFloat\"),\n hooks: { }\n});\n\n// this is based on Peter Raganitsch's 'plsql' mode\nexport const plSQL = sql({\n client: set(\"appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap\"),\n keywords: set(\"abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work\"),\n builtin: set(\"abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least length lengthb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml\"),\n operatorChars: /^[*\\/+\\-%<>!=~]/,\n dateSQL: set(\"date time timestamp\"),\n support: set(\"doubleQuote nCharCast zerolessFloat binaryNumber hexNumber\")\n});\n\n// Created to support specific hive keywords\nexport const hive = sql({\n keywords: set(\"select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with admin authorization char compact compactions conf cube current current_date current_timestamp day decimal defined dependency directories elem_type exchange file following for grouping hour ignore inner interval jar less logical macro minute month more none noscan over owner partialscan preceding pretty principals protection reload rewrite role roles rollup rows second server sets skewed transactions truncate unbounded unset uri user values window year\"),\n builtin: set(\"bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype key_type utctimestamp value_type varchar\"),\n atoms: set(\"false true null unknown\"),\n operatorChars: /^[*+\\-%<>!=]/,\n dateSQL: set(\"date timestamp\"),\n support: set(\"ODBCdotTable doubleQuote binaryNumber hexNumber\")\n});\n\nexport const pgSQL = sql({\n client: set(\"source\"),\n // For PostgreSQL - https://www.postgresql.org/docs/11/sql-keywords-appendix.html\n // For pl/pgsql lang - https://github.com/postgres/postgres/blob/REL_11_2/src/pl/plpgsql/src/pl_scanner.c\n keywords: set(sqlKeywords + \"a abort abs absent absolute access according action ada add admin after aggregate alias all allocate also alter always analyse analyze and any are array array_agg array_max_cardinality as asc asensitive assert assertion assignment asymmetric at atomic attach attribute attributes authorization avg backward base64 before begin begin_frame begin_partition bernoulli between bigint binary bit bit_length blob blocked bom boolean both breadth by c cache call called cardinality cascade cascaded case cast catalog catalog_name ceil ceiling chain char char_length character character_length character_set_catalog character_set_name character_set_schema characteristics characters check checkpoint class class_origin clob close cluster coalesce cobol collate collation collation_catalog collation_name collation_schema collect column column_name columns command_function command_function_code comment comments commit committed concurrently condition condition_number configuration conflict connect connection connection_name constant constraint constraint_catalog constraint_name constraint_schema constraints constructor contains content continue control conversion convert copy corr corresponding cost count covar_pop covar_samp create cross csv cube cume_dist current current_catalog current_date current_default_transform_group current_path current_role current_row current_schema current_time current_timestamp current_transform_group_for_type current_user cursor cursor_name cycle data database datalink datatype date datetime_interval_code datetime_interval_precision day db deallocate debug dec decimal declare default defaults deferrable deferred defined definer degree delete delimiter delimiters dense_rank depends depth deref derived desc describe descriptor detach detail deterministic diagnostics dictionary disable discard disconnect dispatch distinct dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue do document domain double drop dump dynamic dynamic_function dynamic_function_code each element else elseif elsif empty enable encoding encrypted end end_frame end_partition endexec enforced enum equals errcode error escape event every except exception exclude excluding exclusive exec execute exists exit exp explain expression extension external extract false family fetch file filter final first first_value flag float floor following for force foreach foreign fortran forward found frame_row free freeze from fs full function functions fusion g general generated get global go goto grant granted greatest group grouping groups handler having header hex hierarchy hint hold hour id identity if ignore ilike immediate immediately immutable implementation implicit import in include including increment indent index indexes indicator info inherit inherits initially inline inner inout input insensitive insert instance instantiable instead int integer integrity intersect intersection interval into invoker is isnull isolation join k key key_member key_type label lag language large last last_value lateral lead leading leakproof least left length level library like like_regex limit link listen ln load local localtime localtimestamp location locator lock locked log logged loop lower m map mapping match matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text method min minute minvalue mod mode modifies module month more move multiset mumps name names namespace national natural nchar nclob nesting new next nfc nfd nfkc nfkd nil no none normalize normalized not nothing notice notify notnull nowait nth_value ntile null nullable nullif nulls number numeric object occurrences_regex octet_length octets of off offset oids old on only open operator option options or order ordering ordinality others out outer output over overlaps overlay overriding owned owner p pad parallel parameter parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partial partition pascal passing passthrough password path percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding precision prepare prepared preserve primary print_strict_params prior privileges procedural procedure procedures program public publication query quote raise range rank read reads real reassign recheck recovery recursive ref references referencing refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex relative release rename repeatable replace replica requiring reset respect restart restore restrict result result_oid return returned_cardinality returned_length returned_octet_length returned_sqlstate returning returns reverse revoke right role rollback rollup routine routine_catalog routine_name routine_schema routines row row_count row_number rows rowtype rule savepoint scale schema schema_name schemas scope scope_catalog scope_name scope_schema scroll search second section security select selective self sensitive sequence sequences serializable server server_name session session_user set setof sets share show similar simple size skip slice smallint snapshot some source space specific specific_name specifictype sql sqlcode sqlerror sqlexception sqlstate sqlwarning sqrt stable stacked standalone start state statement static statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time system_user t table table_name tables tablesample tablespace temp template temporary text then ties time timestamp timezone_hour timezone_minute to token top_level_count trailing transaction transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex translation treat trigger trigger_catalog trigger_name trigger_schema trim trim_array true truncate trusted type types uescape unbounded uncommitted under unencrypted union unique unknown unlink unlisten unlogged unnamed unnest until untyped update upper uri usage use_column use_variable user user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema using vacuum valid validate validator value value_of values var_pop var_samp varbinary varchar variable_conflict variadic varying verbose version versioning view views volatile warning when whenever where while whitespace width_bucket window with within without work wrapper write xml xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate year yes zone\"),\n // https://www.postgresql.org/docs/11/datatype.html\n builtin: set(\"bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml\"),\n atoms: set(\"false true null unknown\"),\n operatorChars: /^[*\\/+\\-%<>!=&|^\\/#@?~]/,\n backslashStringEscapes: false,\n dateSQL: set(\"date time timestamp\"),\n support: set(\"ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast escapeConstant\")\n});\n\n// Google's SQL-like query language, GQL\nexport const gql = sql({\n keywords: set(\"ancestor and asc by contains desc descendant distinct from group has in is limit offset on order select superset where\"),\n atoms: set(\"false true\"),\n builtin: set(\"blob datetime first key __key__ string integer double boolean null\"),\n operatorChars: /^[*+\\-%<>!=]/\n});\n\n// Greenplum\nexport const gpSQL = sql({\n client: set(\"source\"),\n //https://github.com/greenplum-db/gpdb/blob/master/src/include/parser/kwlist.h\n keywords: set(\"abort absolute access action active add admin after aggregate all also alter always analyse analyze and any array as asc assertion assignment asymmetric at authorization backward before begin between bigint binary bit boolean both by cache called cascade cascaded case cast chain char character characteristics check checkpoint class close cluster coalesce codegen collate column comment commit committed concurrency concurrently configuration connection constraint constraints contains content continue conversion copy cost cpu_rate_limit create createdb createexttable createrole createuser cross csv cube current current_catalog current_date current_role current_schema current_time current_timestamp current_user cursor cycle data database day deallocate dec decimal declare decode default defaults deferrable deferred definer delete delimiter delimiters deny desc dictionary disable discard distinct distributed do document domain double drop dxl each else enable encoding encrypted end enum errors escape every except exchange exclude excluding exclusive execute exists explain extension external extract false family fetch fields filespace fill filter first float following for force foreign format forward freeze from full function global grant granted greatest group group_id grouping handler hash having header hold host hour identity if ignore ilike immediate immutable implicit in including inclusive increment index indexes inherit inherits initially inline inner inout input insensitive insert instead int integer intersect interval into invoker is isnull isolation join key language large last leading least left level like limit list listen load local localtime localtimestamp location lock log login mapping master match maxvalue median merge minute minvalue missing mode modifies modify month move name names national natural nchar new newline next no nocreatedb nocreateexttable nocreaterole nocreateuser noinherit nologin none noovercommit nosuperuser not nothing notify notnull nowait null nullif nulls numeric object of off offset oids old on only operator option options or order ordered others out outer over overcommit overlaps overlay owned owner parser partial partition partitions passing password percent percentile_cont percentile_disc placing plans position preceding precision prepare prepared preserve primary prior privileges procedural procedure protocol queue quote randomly range read readable reads real reassign recheck recursive ref references reindex reject relative release rename repeatable replace replica reset resource restart restrict returning returns revoke right role rollback rollup rootpartition row rows rule savepoint scatter schema scroll search second security segment select sequence serializable session session_user set setof sets share show similar simple smallint some split sql stable standalone start statement statistics stdin stdout storage strict strip subpartition subpartitions substring superuser symmetric sysid system table tablespace temp template temporary text then threshold ties time timestamp to trailing transaction treat trigger trim true truncate trusted type unbounded uncommitted unencrypted union unique unknown unlisten until update user using vacuum valid validation validator value values varchar variadic varying verbose version view volatile web when where whitespace window with within without work writable write xml xmlattributes xmlconcat xmlelement xmlexists xmlforest xmlparse xmlpi xmlroot xmlserialize year yes zone\"),\n builtin: set(\"bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml\"),\n atoms: set(\"false true null unknown\"),\n operatorChars: /^[*+\\-%<>!=&|^\\/#@?~]/,\n dateSQL: set(\"date time timestamp\"),\n support: set(\"ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast\")\n});\n\n// Spark SQL\nexport const sparkSQL = sql({\n keywords: set(\"add after all alter analyze and anti archive array as asc at between bucket buckets by cache cascade case cast change clear cluster clustered codegen collection column columns comment commit compact compactions compute concatenate cost create cross cube current current_date current_timestamp database databases data dbproperties defined delete delimited deny desc describe dfs directories distinct distribute drop else end escaped except exchange exists explain export extended external false fields fileformat first following for format formatted from full function functions global grant group grouping having if ignore import in index indexes inner inpath inputformat insert intersect interval into is items join keys last lateral lazy left like limit lines list load local location lock locks logical macro map minus msck natural no not null nulls of on optimize option options or order out outer outputformat over overwrite partition partitioned partitions percent preceding principals purge range recordreader recordwriter recover reduce refresh regexp rename repair replace reset restrict revoke right rlike role roles rollback rollup row rows schema schemas select semi separated serde serdeproperties set sets show skewed sort sorted start statistics stored stratify struct table tables tablesample tblproperties temp temporary terminated then to touch transaction transactions transform true truncate unarchive unbounded uncache union unlock unset use using values view when where window with\"),\n builtin: set(\"tinyint smallint int bigint boolean float double string binary timestamp decimal array map struct uniontype delimited serde sequencefile textfile rcfile inputformat outputformat\"),\n atoms: set(\"false true null\"),\n operatorChars: /^[*\\/+\\-%<>!=~&|^]/,\n dateSQL: set(\"date time timestamp\"),\n support: set(\"ODBCdotTable doubleQuote zerolessFloat\")\n});\n\n// Esper\nexport const esper = sql({\n client: set(\"source\"),\n // http://www.espertech.com/esper/release-5.5.0/esper-reference/html/appendix_keywords.html\n keywords: set(\"alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit after all and as at asc avedev avg between by case cast coalesce count create current_timestamp day days delete define desc distinct else end escape events every exists false first from full group having hour hours in inner insert instanceof into irstream is istream join last lastweekday left limit like max match_recognize matches median measures metadatasql min minute minutes msec millisecond milliseconds not null offset on or order outer output partition pattern prev prior regexp retain-union retain-intersection right rstream sec second seconds select set some snapshot sql stddev sum then true unidirectional until update variable weekday when where window\"),\n builtin: {},\n atoms: set(\"false true null\"),\n operatorChars: /^[*+\\-%<>!=&|^\\/#@?~]/,\n dateSQL: set(\"time\"),\n support: set(\"decimallessFloat zerolessFloat binaryNumber hexNumber\")\n});\n\n/*\n How options are used by SQL Mode\n =================================================\n\n keywords:\n A list of keywords you want to be highlighted.\n builtin:\n A list of builtin types you want to be highlighted (if you want types to be of class \"builtin\" instead of \"keyword\").\n operatorChars:\n All characters that must be handled as operators.\n client:\n Commands parsed and executed by the client (not the server).\n support:\n A list of supported syntaxes which are not common, but are supported by more than 1 DBMS.\n * ODBCdotTable: .tableName\n * zerolessFloat: .1\n * doubleQuote\n * nCharCast: N'string'\n * charsetCast: _utf8'string'\n * commentHash: use # char for comments\n * commentSlashSlash: use // for comments\n * commentSpaceRequired: require a space after -- for comments\n atoms:\n Keywords that must be highlighted as atoms,. Some DBMS's support more atoms than others:\n UNKNOWN, INFINITY, UNDERFLOW, NaN...\n dateSQL:\n Used for date/time SQL standard syntax, because not all DBMS's support same temporal types.\n*/\n"],"names":["sql","parserConfig","client","atoms","builtin","set","defaultBuiltin","keywords","sqlKeywords","operatorChars","support","hooks","dateSQL","backslashStringEscapes","brackets","punctuation","tokenBase","stream","state","ch","next","result","hexNumber","match","binaryNumber","charCodeAt","decimallessFloat","eatSpace","eol","eat","doubleQuote","tokenize","tokenLiteral","nCharCast","charsetCast","peek","escapeConstant","commentSlashSlash","skipToEnd","commentHash","commentSpaceRequired","tokenComment","test","eatWhile","word","current","toLowerCase","hasOwnProperty","zerolessFloat","ODBCdotTable","quote","backslashEscapes","escaped","depth","m","pushContext","type","context","prev","indent","indentation","col","column","name","startState","token","sol","align","style","tok","popContext","textAfter","iCx","cx","closing","charAt","unit","languageData","commentTokens","line","block","open","close","closeBrackets","hookIdentifier","backUp","length","hookVar","hookClient","str","obj","words","split","i","standardSQL","msSQL","mySQL","mariaDB","sqlite","identifierQuote","cassandra","plSQL","hive","pgSQL","gql","gpSQL","sparkSQL","esper"],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/js/54.f8d765ee.chunk.js b/media/assets/frontend/static/js/54.f8d765ee.chunk.js new file mode 100644 index 00000000000..111ca68553d --- /dev/null +++ b/media/assets/frontend/static/js/54.f8d765ee.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkseahub_frontend=self.webpackChunkseahub_frontend||[]).push([[54],{28054:function(e,t,n){function r(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}n.r(t),n.d(t,{cython:function(){return f},mkPython:function(){return c},python:function(){return u}});var i=r(["and","or","not","is"]),a=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in","False","True"],o=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];function s(e){return e.scopes[e.scopes.length-1]}function c(e){for(var t="error",n=e.delimiters||e.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/,c=[e.singleOperators,e.doubleOperators,e.doubleDelimiters,e.tripleDelimiters,e.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/],l=0;li?v(e,n):a0&&x(e,n)&&(o+=" "+t),o}return k(e,n)}function k(r,a,o){if(r.eatSpace())return null;if(!o&&r.match(/^#.*/))return"comment";if(r.match(/^[0-9\.]/,!1)){var s=!1;if(r.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)&&(s=!0),r.match(/^[\d_]+\.\d*/)&&(s=!0),r.match(/^\.\d+/)&&(s=!0),s)return r.eat(/J/i),"number";var l=!1;if(r.match(/^0x[0-9a-f_]+/i)&&(l=!0),r.match(/^0b[01_]+/i)&&(l=!0),r.match(/^0o[0-7_]+/i)&&(l=!0),r.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)&&(r.eat(/J/i),l=!0),r.match(/^0(?![\dx])/i)&&(l=!0),l)return r.eat(/L/i),"number"}if(r.match(h))return-1!==r.current().toLowerCase().indexOf("f")?(a.tokenize=function(n,r){for(;"rubf".indexOf(n.charAt(0).toLowerCase())>=0;)n=n.substr(1);var i=1==n.length,a="string";function o(e){return function(t,n){var r=k(t,n,!0);return"punctuation"==r&&("{"==t.current()?n.tokenize=o(e+1):"}"==t.current()&&(n.tokenize=e>1?o(e-1):s)),r}}function s(s,c){for(;!s.eol();)if(s.eatWhile(/[^'"\{\}\\]/),s.eat("\\")){if(s.next(),i&&s.eol())return a}else{if(s.match(n))return c.tokenize=r,a;if(s.match("{{"))return a;if(s.match("{",!1))return c.tokenize=o(0),s.current()?a:c.tokenize(s,c);if(s.match("}}"))return a;if(s.match("}"))return t;s.eat(/['"]/)}if(i){if(e.singleLineStringErrors)return t;c.tokenize=r}return a}return s.isString=!0,s}(r.current(),a.tokenize),a.tokenize(r,a)):(a.tokenize=function(n,r){for(;"rubf".indexOf(n.charAt(0).toLowerCase())>=0;)n=n.substr(1);var i=1==n.length,a="string";function o(o,s){for(;!o.eol();)if(o.eatWhile(/[^'"\\]/),o.eat("\\")){if(o.next(),i&&o.eol())return a}else{if(o.match(n))return s.tokenize=r,a;o.eat(/['"]/)}if(i){if(e.singleLineStringErrors)return t;s.tokenize=r}return a}return o.isString=!0,o}(r.current(),a.tokenize),a.tokenize(r,a));for(var u=0;u1&&s(t).offset>n;){if("py"!=s(t).type)return!0;t.scopes.pop()}return s(t).offset!=n}function _(e,n){e.sol()&&(n.beginningOfLine=!0,n.dedent=!1);var r=n.tokenize(e,n),i=e.current();if(n.beginningOfLine&&"@"==i)return e.match(m,!1)?"meta":d?"operator":t;if(/\S/.test(i)&&(n.beginningOfLine=!1),"variable"!=r&&"builtin"!=r||"meta"!=n.lastToken||(r="meta"),"pass"!=i&&"return"!=i||(n.dedent=!0),"lambda"==i&&(n.lambda=!0),":"==i&&!n.lambda&&"py"==s(n).type&&e.match(/^\s*(?:#|$)/,!1)&&v(e,n),1==i.length&&!/string|comment/.test(r)){var a="[({".indexOf(i);if(-1!=a&&function(e,t,n){var r=e.match(/^[\s\[\{\(]*(?:#|$)/,!1)?null:e.column()+1;t.scopes.push({offset:t.indent+(u||e.indentUnit),type:n,align:r})}(e,n,"])}".slice(a,a+1)),-1!=(a="])}".indexOf(i))){if(s(n).type!=i)return t;n.indent=n.scopes.pop().offset-(u||e.indentUnit)}}return n.dedent&&e.eol()&&"py"==s(n).type&&n.scopes.length>1&&n.scopes.pop(),r}return{name:"python",startState:function(){return{tokenize:y,scopes:[{offset:0,type:"py",align:null}],indent:0,lastToken:null,lambda:!1,dedent:0}},token:function(e,n){var r=n.errorToken;r&&(n.errorToken=!1);var i=_(e,n);return i&&"comment"!=i&&(n.lastToken="keyword"==i||"punctuation"==i?e.current():i),"punctuation"==i&&(i=null),e.eol()&&n.lambda&&(n.lambda=!1),r?t:i},indent:function(e,t,n){if(e.tokenize!=y)return e.tokenize.isString?null:0;var r=s(e),i=r.type==t.charAt(0)||"py"==r.type&&!e.dedent&&/^(else:|elif |except |finally:)/.test(t);return null!=r.align?r.align-(i?1:0):r.offset-(i?u||n.unit:0)},languageData:{autocomplete:a.concat(o).concat(["exec","print"]),indentOnInput:/^\s*([\}\]\)]|else:|elif |except |finally:)$/,commentTokens:{line:"#"},closeBrackets:{brackets:["(","[","{","'",'"',"'''",'"""']}}}}var l,u=c({}),f=c({extra_keywords:(l="by cdef cimport cpdef ctypedef enum except extern gil include nogil property public readonly struct union DEF IF ELIF ELSE",l.split(" "))})}}]); +//# sourceMappingURL=54.f8d765ee.chunk.js.map \ No newline at end of file diff --git a/media/assets/frontend/static/js/54.f8d765ee.chunk.js.map b/media/assets/frontend/static/js/54.f8d765ee.chunk.js.map new file mode 100644 index 00000000000..c050a5563e6 --- /dev/null +++ b/media/assets/frontend/static/js/54.f8d765ee.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/54.f8d765ee.chunk.js","mappings":"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","sources":["../node_modules/@codemirror/legacy-modes/mode/python.js"],"sourcesContent":["function wordRegexp(words) {\n return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\");\n}\n\nvar wordOperators = wordRegexp([\"and\", \"or\", \"not\", \"is\"]);\nvar commonKeywords = [\"as\", \"assert\", \"break\", \"class\", \"continue\",\n \"def\", \"del\", \"elif\", \"else\", \"except\", \"finally\",\n \"for\", \"from\", \"global\", \"if\", \"import\",\n \"lambda\", \"pass\", \"raise\", \"return\",\n \"try\", \"while\", \"with\", \"yield\", \"in\", \"False\", \"True\"];\nvar commonBuiltins = [\"abs\", \"all\", \"any\", \"bin\", \"bool\", \"bytearray\", \"callable\", \"chr\",\n \"classmethod\", \"compile\", \"complex\", \"delattr\", \"dict\", \"dir\", \"divmod\",\n \"enumerate\", \"eval\", \"filter\", \"float\", \"format\", \"frozenset\",\n \"getattr\", \"globals\", \"hasattr\", \"hash\", \"help\", \"hex\", \"id\",\n \"input\", \"int\", \"isinstance\", \"issubclass\", \"iter\", \"len\",\n \"list\", \"locals\", \"map\", \"max\", \"memoryview\", \"min\", \"next\",\n \"object\", \"oct\", \"open\", \"ord\", \"pow\", \"property\", \"range\",\n \"repr\", \"reversed\", \"round\", \"set\", \"setattr\", \"slice\",\n \"sorted\", \"staticmethod\", \"str\", \"sum\", \"super\", \"tuple\",\n \"type\", \"vars\", \"zip\", \"__import__\", \"NotImplemented\",\n \"Ellipsis\", \"__debug__\"];\n\nfunction top(state) {\n return state.scopes[state.scopes.length - 1];\n}\n\nexport function mkPython(parserConf) {\n var ERRORCLASS = \"error\";\n\n var delimiters = parserConf.delimiters || parserConf.singleDelimiters || /^[\\(\\)\\[\\]\\{\\}@,:`=;\\.\\\\]/;\n // (Backwards-compatibility with old, cumbersome config system)\n var operators = [parserConf.singleOperators, parserConf.doubleOperators, parserConf.doubleDelimiters, parserConf.tripleDelimiters,\n parserConf.operators || /^([-+*/%\\/&|^]=?|[<>=]+|\\/\\/=?|\\*\\*=?|!=|[~!@]|\\.\\.\\.)/]\n for (var i = 0; i < operators.length; i++) if (!operators[i]) operators.splice(i--, 1)\n\n var hangingIndent = parserConf.hangingIndent;\n\n var myKeywords = commonKeywords, myBuiltins = commonBuiltins;\n if (parserConf.extra_keywords != undefined)\n myKeywords = myKeywords.concat(parserConf.extra_keywords);\n\n if (parserConf.extra_builtins != undefined)\n myBuiltins = myBuiltins.concat(parserConf.extra_builtins);\n\n var py3 = !(parserConf.version && Number(parserConf.version) < 3)\n if (py3) {\n // since http://legacy.python.org/dev/peps/pep-0465/ @ is also an operator\n var identifiers = parserConf.identifiers|| /^[_A-Za-z\\u00A1-\\uFFFF][_A-Za-z0-9\\u00A1-\\uFFFF]*/;\n myKeywords = myKeywords.concat([\"nonlocal\", \"None\", \"aiter\", \"anext\", \"async\", \"await\", \"breakpoint\", \"match\", \"case\"]);\n myBuiltins = myBuiltins.concat([\"ascii\", \"bytes\", \"exec\", \"print\"]);\n var stringPrefixes = new RegExp(\"^(([rbuf]|(br)|(rb)|(fr)|(rf))?('{3}|\\\"{3}|['\\\"]))\", \"i\");\n } else {\n var identifiers = parserConf.identifiers|| /^[_A-Za-z][_A-Za-z0-9]*/;\n myKeywords = myKeywords.concat([\"exec\", \"print\"]);\n myBuiltins = myBuiltins.concat([\"apply\", \"basestring\", \"buffer\", \"cmp\", \"coerce\", \"execfile\",\n \"file\", \"intern\", \"long\", \"raw_input\", \"reduce\", \"reload\",\n \"unichr\", \"unicode\", \"xrange\", \"None\"]);\n var stringPrefixes = new RegExp(\"^(([rubf]|(ur)|(br))?('{3}|\\\"{3}|['\\\"]))\", \"i\");\n }\n var keywords = wordRegexp(myKeywords);\n var builtins = wordRegexp(myBuiltins);\n\n // tokenizers\n function tokenBase(stream, state) {\n var sol = stream.sol() && state.lastToken != \"\\\\\"\n if (sol) state.indent = stream.indentation()\n // Handle scope changes\n if (sol && top(state).type == \"py\") {\n var scopeOffset = top(state).offset;\n if (stream.eatSpace()) {\n var lineOffset = stream.indentation();\n if (lineOffset > scopeOffset)\n pushPyScope(stream, state);\n else if (lineOffset < scopeOffset && dedent(stream, state) && stream.peek() != \"#\")\n state.errorToken = true;\n return null;\n } else {\n var style = tokenBaseInner(stream, state);\n if (scopeOffset > 0 && dedent(stream, state))\n style += \" \" + ERRORCLASS;\n return style;\n }\n }\n return tokenBaseInner(stream, state);\n }\n\n function tokenBaseInner(stream, state, inFormat) {\n if (stream.eatSpace()) return null;\n\n // Handle Comments\n if (!inFormat && stream.match(/^#.*/)) return \"comment\";\n\n // Handle Number Literals\n if (stream.match(/^[0-9\\.]/, false)) {\n var floatLiteral = false;\n // Floats\n if (stream.match(/^[\\d_]*\\.\\d+(e[\\+\\-]?\\d+)?/i)) { floatLiteral = true; }\n if (stream.match(/^[\\d_]+\\.\\d*/)) { floatLiteral = true; }\n if (stream.match(/^\\.\\d+/)) { floatLiteral = true; }\n if (floatLiteral) {\n // Float literals may be \"imaginary\"\n stream.eat(/J/i);\n return \"number\";\n }\n // Integers\n var intLiteral = false;\n // Hex\n if (stream.match(/^0x[0-9a-f_]+/i)) intLiteral = true;\n // Binary\n if (stream.match(/^0b[01_]+/i)) intLiteral = true;\n // Octal\n if (stream.match(/^0o[0-7_]+/i)) intLiteral = true;\n // Decimal\n if (stream.match(/^[1-9][\\d_]*(e[\\+\\-]?[\\d_]+)?/)) {\n // Decimal literals may be \"imaginary\"\n stream.eat(/J/i);\n // TODO - Can you have imaginary longs?\n intLiteral = true;\n }\n // Zero by itself with no other piece of number.\n if (stream.match(/^0(?![\\dx])/i)) intLiteral = true;\n if (intLiteral) {\n // Integer literals may be \"long\"\n stream.eat(/L/i);\n return \"number\";\n }\n }\n\n // Handle Strings\n if (stream.match(stringPrefixes)) {\n var isFmtString = stream.current().toLowerCase().indexOf('f') !== -1;\n if (!isFmtString) {\n state.tokenize = tokenStringFactory(stream.current(), state.tokenize);\n return state.tokenize(stream, state);\n } else {\n state.tokenize = formatStringFactory(stream.current(), state.tokenize);\n return state.tokenize(stream, state);\n }\n }\n\n for (var i = 0; i < operators.length; i++)\n if (stream.match(operators[i])) return \"operator\"\n\n if (stream.match(delimiters)) return \"punctuation\";\n\n if (state.lastToken == \".\" && stream.match(identifiers))\n return \"property\";\n\n if (stream.match(keywords) || stream.match(wordOperators))\n return \"keyword\";\n\n if (stream.match(builtins))\n return \"builtin\";\n\n if (stream.match(/^(self|cls)\\b/))\n return \"self\";\n\n if (stream.match(identifiers)) {\n if (state.lastToken == \"def\" || state.lastToken == \"class\")\n return \"def\";\n return \"variable\";\n }\n\n // Handle non-detected items\n stream.next();\n return inFormat ? null :ERRORCLASS;\n }\n\n function formatStringFactory(delimiter, tokenOuter) {\n while (\"rubf\".indexOf(delimiter.charAt(0).toLowerCase()) >= 0)\n delimiter = delimiter.substr(1);\n\n var singleline = delimiter.length == 1;\n var OUTCLASS = \"string\";\n\n function tokenNestedExpr(depth) {\n return function(stream, state) {\n var inner = tokenBaseInner(stream, state, true)\n if (inner == \"punctuation\") {\n if (stream.current() == \"{\") {\n state.tokenize = tokenNestedExpr(depth + 1)\n } else if (stream.current() == \"}\") {\n if (depth > 1) state.tokenize = tokenNestedExpr(depth - 1)\n else state.tokenize = tokenString\n }\n }\n return inner\n }\n }\n\n function tokenString(stream, state) {\n while (!stream.eol()) {\n stream.eatWhile(/[^'\"\\{\\}\\\\]/);\n if (stream.eat(\"\\\\\")) {\n stream.next();\n if (singleline && stream.eol())\n return OUTCLASS;\n } else if (stream.match(delimiter)) {\n state.tokenize = tokenOuter;\n return OUTCLASS;\n } else if (stream.match('{{')) {\n // ignore {{ in f-str\n return OUTCLASS;\n } else if (stream.match('{', false)) {\n // switch to nested mode\n state.tokenize = tokenNestedExpr(0)\n if (stream.current()) return OUTCLASS;\n else return state.tokenize(stream, state)\n } else if (stream.match('}}')) {\n return OUTCLASS;\n } else if (stream.match('}')) {\n // single } in f-string is an error\n return ERRORCLASS;\n } else {\n stream.eat(/['\"]/);\n }\n }\n if (singleline) {\n if (parserConf.singleLineStringErrors)\n return ERRORCLASS;\n else\n state.tokenize = tokenOuter;\n }\n return OUTCLASS;\n }\n tokenString.isString = true;\n return tokenString;\n }\n\n function tokenStringFactory(delimiter, tokenOuter) {\n while (\"rubf\".indexOf(delimiter.charAt(0).toLowerCase()) >= 0)\n delimiter = delimiter.substr(1);\n\n var singleline = delimiter.length == 1;\n var OUTCLASS = \"string\";\n\n function tokenString(stream, state) {\n while (!stream.eol()) {\n stream.eatWhile(/[^'\"\\\\]/);\n if (stream.eat(\"\\\\\")) {\n stream.next();\n if (singleline && stream.eol())\n return OUTCLASS;\n } else if (stream.match(delimiter)) {\n state.tokenize = tokenOuter;\n return OUTCLASS;\n } else {\n stream.eat(/['\"]/);\n }\n }\n if (singleline) {\n if (parserConf.singleLineStringErrors)\n return ERRORCLASS;\n else\n state.tokenize = tokenOuter;\n }\n return OUTCLASS;\n }\n tokenString.isString = true;\n return tokenString;\n }\n\n function pushPyScope(stream, state) {\n while (top(state).type != \"py\") state.scopes.pop()\n state.scopes.push({offset: top(state).offset + stream.indentUnit,\n type: \"py\",\n align: null})\n }\n\n function pushBracketScope(stream, state, type) {\n var align = stream.match(/^[\\s\\[\\{\\(]*(?:#|$)/, false) ? null : stream.column() + 1\n state.scopes.push({offset: state.indent + (hangingIndent || stream.indentUnit),\n type: type,\n align: align})\n }\n\n function dedent(stream, state) {\n var indented = stream.indentation();\n while (state.scopes.length > 1 && top(state).offset > indented) {\n if (top(state).type != \"py\") return true;\n state.scopes.pop();\n }\n return top(state).offset != indented;\n }\n\n function tokenLexer(stream, state) {\n if (stream.sol()) {\n state.beginningOfLine = true;\n state.dedent = false;\n }\n\n var style = state.tokenize(stream, state);\n var current = stream.current();\n\n // Handle decorators\n if (state.beginningOfLine && current == \"@\")\n return stream.match(identifiers, false) ? \"meta\" : py3 ? \"operator\" : ERRORCLASS;\n\n if (/\\S/.test(current)) state.beginningOfLine = false;\n\n if ((style == \"variable\" || style == \"builtin\")\n && state.lastToken == \"meta\")\n style = \"meta\";\n\n // Handle scope changes.\n if (current == \"pass\" || current == \"return\")\n state.dedent = true;\n\n if (current == \"lambda\") state.lambda = true;\n if (current == \":\" && !state.lambda && top(state).type == \"py\" && stream.match(/^\\s*(?:#|$)/, false))\n pushPyScope(stream, state);\n\n if (current.length == 1 && !/string|comment/.test(style)) {\n var delimiter_index = \"[({\".indexOf(current);\n if (delimiter_index != -1)\n pushBracketScope(stream, state, \"])}\".slice(delimiter_index, delimiter_index+1));\n\n delimiter_index = \"])}\".indexOf(current);\n if (delimiter_index != -1) {\n if (top(state).type == current) state.indent = state.scopes.pop().offset - (hangingIndent || stream.indentUnit)\n else return ERRORCLASS;\n }\n }\n if (state.dedent && stream.eol() && top(state).type == \"py\" && state.scopes.length > 1)\n state.scopes.pop();\n\n return style;\n }\n\n return {\n name: \"python\",\n\n startState: function() {\n return {\n tokenize: tokenBase,\n scopes: [{offset: 0, type: \"py\", align: null}],\n indent: 0,\n lastToken: null,\n lambda: false,\n dedent: 0\n };\n },\n\n token: function(stream, state) {\n var addErr = state.errorToken;\n if (addErr) state.errorToken = false;\n var style = tokenLexer(stream, state);\n\n if (style && style != \"comment\")\n state.lastToken = (style == \"keyword\" || style == \"punctuation\") ? stream.current() : style;\n if (style == \"punctuation\") style = null;\n\n if (stream.eol() && state.lambda)\n state.lambda = false;\n return addErr ? ERRORCLASS : style;\n },\n\n indent: function(state, textAfter, cx) {\n if (state.tokenize != tokenBase)\n return state.tokenize.isString ? null : 0;\n\n var scope = top(state)\n var closing = scope.type == textAfter.charAt(0) ||\n scope.type == \"py\" && !state.dedent && /^(else:|elif |except |finally:)/.test(textAfter)\n if (scope.align != null)\n return scope.align - (closing ? 1 : 0)\n else\n return scope.offset - (closing ? hangingIndent || cx.unit : 0)\n },\n\n languageData: {\n autocomplete: commonKeywords.concat(commonBuiltins).concat([\"exec\", \"print\"]),\n indentOnInput: /^\\s*([\\}\\]\\)]|else:|elif |except |finally:)$/,\n commentTokens: {line: \"#\"},\n closeBrackets: {brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"'''\", '\"\"\"']}\n }\n };\n};\n\nvar words = function(str) { return str.split(\" \"); };\n\nexport const python = mkPython({})\n\nexport const cython = mkPython({\n extra_keywords: words(\"by cdef cimport cpdef ctypedef enum except \"+\n \"extern gil include nogil property public \"+\n \"readonly struct union DEF IF ELIF ELSE\")\n})\n"],"names":["wordRegexp","words","RegExp","join","wordOperators","commonKeywords","commonBuiltins","top","state","scopes","length","mkPython","parserConf","ERRORCLASS","delimiters","singleDelimiters","operators","singleOperators","doubleOperators","doubleDelimiters","tripleDelimiters","i","splice","hangingIndent","myKeywords","myBuiltins","undefined","extra_keywords","concat","extra_builtins","py3","version","Number","identifiers","stringPrefixes","keywords","builtins","tokenBase","stream","sol","lastToken","indent","indentation","type","scopeOffset","offset","eatSpace","lineOffset","pushPyScope","dedent","peek","errorToken","style","tokenBaseInner","inFormat","match","floatLiteral","eat","intLiteral","current","toLowerCase","indexOf","tokenize","delimiter","tokenOuter","charAt","substr","singleline","OUTCLASS","tokenNestedExpr","depth","inner","tokenString","eol","eatWhile","next","singleLineStringErrors","isString","formatStringFactory","tokenStringFactory","pop","push","indentUnit","align","indented","tokenLexer","beginningOfLine","test","lambda","delimiter_index","column","pushBracketScope","slice","name","startState","token","addErr","textAfter","cx","scope","closing","unit","languageData","autocomplete","indentOnInput","commentTokens","line","closeBrackets","brackets","str","python","cython","split"],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/js/545.2cc3d80f.chunk.js b/media/assets/frontend/static/js/545.2cc3d80f.chunk.js new file mode 100644 index 00000000000..3dd5aebd54b --- /dev/null +++ b/media/assets/frontend/static/js/545.2cc3d80f.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkseahub_frontend=self.webpackChunkseahub_frontend||[]).push([[545],{98545:function(e,t,r){function n(e){var t,r,n=e.statementIndent,a=e.jsonld,i=e.json||a,o=e.typescript,u=e.wordCharacters||/[\w$\xa1-\uffff]/,c=function(){function e(e){return{type:e,style:"keyword"}}var t=e("keyword a"),r=e("keyword b"),n=e("keyword c"),a=e("keyword d"),i=e("operator"),o={type:"atom",style:"atom"};return{if:e("if"),while:t,with:t,else:r,do:r,try:r,finally:r,return:a,break:a,continue:a,new:e("new"),delete:n,void:n,throw:n,debugger:e("debugger"),var:e("var"),const:e("var"),let:e("var"),function:e("function"),catch:e("catch"),for:e("for"),switch:e("switch"),case:e("case"),default:e("default"),in:i,typeof:i,instanceof:i,true:o,false:o,null:o,undefined:o,NaN:o,Infinity:o,this:e("this"),class:e("class"),super:e("atom"),yield:n,export:e("export"),import:e("import"),extends:n,await:n}}(),s=/[+\-*&%=<>!?|~^@]/,f=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function l(e,n,a){return t=e,r=a,n}function d(e,t){var r,n=e.next();if('"'==n||"'"==n)return t.tokenize=(r=n,function(e,t){var n,i=!1;if(a&&"@"==e.peek()&&e.match(f))return t.tokenize=d,l("jsonld-keyword","meta");for(;null!=(n=e.next())&&(n!=r||i);)i=!i&&"\\"==n;return i||(t.tokenize=d),l("string","string")}),t.tokenize(e,t);if("."==n&&e.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return l("number","number");if("."==n&&e.match(".."))return l("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(n))return l(n);if("="==n&&e.eat(">"))return l("=>","operator");if("0"==n&&e.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return l("number","number");if(/\d/.test(n))return e.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),l("number","number");if("/"==n)return e.eat("*")?(t.tokenize=m,m(e,t)):e.eat("/")?(e.skipToEnd(),l("comment","comment")):function(e,t,r){return t.tokenize==d&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(t.lastType)||"quasi"==t.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(r||0)))}(e,t,1)?(function(e){for(var t,r=!1,n=!1;null!=(t=e.next());){if(!r){if("/"==t&&!n)return;"["==t?n=!0:n&&"]"==t&&(n=!1)}r=!r&&"\\"==t}}(e),e.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),l("regexp","string.special")):(e.eat("="),l("operator","operator",e.current()));if("`"==n)return t.tokenize=p,p(e,t);if("#"==n&&"!"==e.peek())return e.skipToEnd(),l("meta","meta");if("#"==n&&e.eatWhile(u))return l("variable","property");if("<"==n&&e.match("!--")||"-"==n&&e.match("->")&&!/\S/.test(e.string.slice(0,e.start)))return e.skipToEnd(),l("comment","comment");if(s.test(n))return">"==n&&t.lexical&&">"==t.lexical.type||(e.eat("=")?"!"!=n&&"="!=n||e.eat("="):/[<>*+\-|&?]/.test(n)&&(e.eat(n),">"==n&&e.eat(n))),"?"==n&&e.eat(".")?l("."):l("operator","operator",e.current());if(u.test(n)){e.eatWhile(u);var i=e.current();if("."!=t.lastType){if(c.propertyIsEnumerable(i)){var o=c[i];return l(o.type,o.style,i)}if("async"==i&&e.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/,!1))return l("async","keyword",i)}return l("variable","variable",i)}}function m(e,t){for(var r,n=!1;r=e.next();){if("/"==r&&n){t.tokenize=d;break}n="*"==r}return l("comment","comment")}function p(e,t){for(var r,n=!1;null!=(r=e.next());){if(!n&&("`"==r||"$"==r&&e.eat("{"))){t.tokenize=d;break}n=!n&&"\\"==r}return l("quasi","string.special",e.current())}var k="([{}])";function v(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var r=e.string.indexOf("=>",e.start);if(!(r<0)){if(o){var n=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start,r));n&&(r=n.index)}for(var a=0,i=!1,c=r-1;c>=0;--c){var s=e.string.charAt(c),f=k.indexOf(s);if(f>=0&&f<3){if(!a){++c;break}if(0==--a){"("==s&&(i=!0);break}}else if(f>=3&&f<6)++a;else if(u.test(s))i=!0;else if(/["'\/`]/.test(s))for(;;--c){if(0==c)return;if(e.string.charAt(c-1)==s&&"\\"!=e.string.charAt(c-2)){c--;break}}else if(i&&!a){++c;break}}i&&!a&&(t.fatArrowAt=c)}}var y={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,import:!0,"jsonld-keyword":!0};function w(e,t,r,n,a,i){this.indented=e,this.column=t,this.type=r,this.prev=a,this.info=i,null!=n&&(this.align=n)}function b(e,t){for(var r=e.localVars;r;r=r.next)if(r.name==t)return!0;for(var n=e.context;n;n=n.prev)for(r=n.vars;r;r=r.next)if(r.name==t)return!0}var h={state:null,column:null,marked:null,cc:null};function x(){for(var e=arguments.length-1;e>=0;e--)h.cc.push(arguments[e])}function g(){return x.apply(null,arguments),!0}function V(e,t){for(var r=t;r;r=r.next)if(r.name==e)return!0;return!1}function A(t){var r=h.state;if(h.marked="def",r.context)if("var"==r.lexical.info&&r.context&&r.context.block){var n=z(t,r.context);if(null!=n)return void(r.context=n)}else if(!V(t,r.localVars))return void(r.localVars=new $(t,r.localVars));e.globalVars&&!V(t,r.globalVars)&&(r.globalVars=new $(t,r.globalVars))}function z(e,t){if(t){if(t.block){var r=z(e,t.prev);return r?r==t.prev?t:new T(r,t.vars,!0):null}return V(e,t.vars)?t:new T(t.prev,new $(e,t.vars),!1)}return null}function j(e){return"public"==e||"private"==e||"protected"==e||"abstract"==e||"readonly"==e}function T(e,t,r){this.prev=e,this.vars=t,this.block=r}function $(e,t){this.name=e,this.next=t}var _=new $("this",new $("arguments",null));function O(){h.state.context=new T(h.state.context,h.state.localVars,!1),h.state.localVars=_}function q(){h.state.context=new T(h.state.context,h.state.localVars,!0),h.state.localVars=null}function E(){h.state.localVars=h.state.context.vars,h.state.context=h.state.context.prev}function I(e,t){var r=function(){var r=h.state,n=r.indented;if("stat"==r.lexical.type)n=r.lexical.indented;else for(var a=r.lexical;a&&")"==a.type&&a.align;a=a.prev)n=a.indented;r.lexical=new w(n,h.stream.column(),e,null,r.lexical,t)};return r.lex=!0,r}function C(){var e=h.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function S(e){return function t(r){return r==e?g():";"==e||"}"==r||")"==r||"]"==r?x():g(t)}}function N(e,t){return"var"==e?g(I("vardef",t),he,S(";"),C):"keyword a"==e?g(I("form"),D,N,C):"keyword b"==e?g(I("form"),N,C):"keyword d"==e?h.stream.match(/^\s*$/,!1)?g():g(I("stat"),U,S(";"),C):"debugger"==e?g(S(";")):"{"==e?g(I("}"),q,ae,C,E):";"==e?g():"if"==e?("else"==h.state.lexical.info&&h.state.cc[h.state.cc.length-1]==C&&h.state.cc.pop()(),g(I("form"),D,N,C,je)):"function"==e?g(Oe):"for"==e?g(I("form"),q,Te,N,E,C):"class"==e||o&&"interface"==t?(h.marked="keyword",g(I("form","class"==e?e:t),Se,C)):"variable"==e?o&&"declare"==t?(h.marked="keyword",g(N)):o&&("module"==t||"enum"==t||"type"==t)&&h.stream.match(/^\s*\w/,!1)?(h.marked="keyword","enum"==t?g(Le):"type"==t?g(Ee,S("operator"),se,S(";")):g(I("form"),xe,S("{"),I("}"),ae,C,C)):o&&"namespace"==t?(h.marked="keyword",g(I("form"),W,N,C)):o&&"abstract"==t?(h.marked="keyword",g(N)):g(I("stat"),X):"switch"==e?g(I("form"),D,S("{"),I("}","switch"),q,ae,C,C,E):"case"==e?g(W,S(":")):"default"==e?g(S(":")):"catch"==e?g(I("form"),O,P,N,C,E):"export"==e?g(I("stat"),Be,C):"import"==e?g(I("stat"),Fe,C):"async"==e?g(N):"@"==t?g(W,N):x(I("stat"),W,S(";"),C)}function P(e){if("("==e)return g(Ie,S(")"))}function W(e,t){return F(e,t,!1)}function B(e,t){return F(e,t,!0)}function D(e){return"("!=e?x():g(I(")"),U,S(")"),C)}function F(e,t,r){if(h.state.fatArrowAt==h.stream.start){var n=r?M:L;if("("==e)return g(O,I(")"),re(Ie,")"),C,S("=>"),n,E);if("variable"==e)return x(O,xe,S("=>"),n,E)}var a=r?H:G;return y.hasOwnProperty(e)?g(a):"function"==e?g(Oe,a):"class"==e||o&&"interface"==t?(h.marked="keyword",g(I("form"),Ce,C)):"keyword c"==e||"async"==e?g(r?B:W):"("==e?g(I(")"),U,S(")"),C,a):"operator"==e||"spread"==e?g(r?B:W):"["==e?g(I("]"),Ke,C,a):"{"==e?ne(Z,"}",null,a):"quasi"==e?x(J,a):"new"==e?g(function(e){return function(t){return"."==t?g(e?R:Q):"variable"==t&&o?g(ye,e?H:G):x(e?B:W)}}(r)):g()}function U(e){return e.match(/[;\}\)\],]/)?x():x(W)}function G(e,t){return","==e?g(U):H(e,t,!1)}function H(e,t,r){var n=0==r?G:H,a=0==r?W:B;return"=>"==e?g(O,r?M:L,E):"operator"==e?/\+\+|--/.test(t)||o&&"!"==t?g(n):o&&"<"==t&&h.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/,!1)?g(I(">"),re(se,">"),C,n):"?"==t?g(W,S(":"),a):g(a):"quasi"==e?x(J,n):";"!=e?"("==e?ne(B,")","call",n):"."==e?g(Y,n):"["==e?g(I("]"),U,S("]"),C,n):o&&"as"==t?(h.marked="keyword",g(se,n)):"regexp"==e?(h.state.lastType=h.marked="operator",h.stream.backUp(h.stream.pos-h.stream.start-1),g(a)):void 0:void 0}function J(e,t){return"quasi"!=e?x():"${"!=t.slice(t.length-2)?g(J):g(U,K)}function K(e){if("}"==e)return h.marked="string.special",h.state.tokenize=p,g(J)}function L(e){return v(h.stream,h.state),x("{"==e?N:W)}function M(e){return v(h.stream,h.state),x("{"==e?N:B)}function Q(e,t){if("target"==t)return h.marked="keyword",g(G)}function R(e,t){if("target"==t)return h.marked="keyword",g(H)}function X(e){return":"==e?g(C,N):x(G,S(";"),C)}function Y(e){if("variable"==e)return h.marked="property",g()}function Z(e,t){return"async"==e?(h.marked="property",g(Z)):"variable"==e||"keyword"==h.style?(h.marked="property","get"==t||"set"==t?g(ee):(o&&h.state.fatArrowAt==h.stream.start&&(r=h.stream.match(/^\s*:\s*/,!1))&&(h.state.fatArrowAt=h.stream.pos+r[0].length),g(te))):"number"==e||"string"==e?(h.marked=a?"property":h.style+" property",g(te)):"jsonld-keyword"==e?g(te):o&&j(t)?(h.marked="keyword",g(Z)):"["==e?g(W,ie,S("]"),te):"spread"==e?g(B,te):"*"==t?(h.marked="keyword",g(Z)):":"==e?x(te):void 0;var r}function ee(e){return"variable"!=e?x(te):(h.marked="property",g(Oe))}function te(e){return":"==e?g(B):"("==e?x(Oe):void 0}function re(e,t,r){function n(a,i){if(r?r.indexOf(a)>-1:","==a){var o=h.state.lexical;return"call"==o.info&&(o.pos=(o.pos||0)+1),g((function(r,n){return r==t||n==t?x():x(e)}),n)}return a==t||i==t?g():r&&r.indexOf(";")>-1?x(e):g(S(t))}return function(r,a){return r==t||a==t?g():x(e,n)}}function ne(e,t,r){for(var n=3;n"),se):"quasi"==e?x(me,ve):void 0}function fe(e){if("=>"==e)return g(se)}function le(e){return e.match(/[\}\)\]]/)?g():","==e||";"==e?g(le):x(de,le)}function de(e,t){return"variable"==e||"keyword"==h.style?(h.marked="property",g(de)):"?"==t||"number"==e||"string"==e?g(de):":"==e?g(se):"["==e?g(S("variable"),oe,S("]"),de):"("==e?x(qe,de):e.match(/[;\}\)\],]/)?void 0:g()}function me(e,t){return"quasi"!=e?x():"${"!=t.slice(t.length-2)?g(me):g(se,pe)}function pe(e){if("}"==e)return h.marked="string.special",h.state.tokenize=p,g(me)}function ke(e,t){return"variable"==e&&h.stream.match(/^\s*[?:]/,!1)||"?"==t?g(ke):":"==e?g(se):"spread"==e?g(ke):x(se)}function ve(e,t){return"<"==t?g(I(">"),re(se,">"),C,ve):"|"==t||"."==e||"&"==t?g(se):"["==e?g(se,S("]"),ve):"extends"==t||"implements"==t?(h.marked="keyword",g(se)):"?"==t?g(se,S(":"),se):void 0}function ye(e,t){if("<"==t)return g(I(">"),re(se,">"),C,ve)}function we(){return x(se,be)}function be(e,t){if("="==t)return g(se)}function he(e,t){return"enum"==t?(h.marked="keyword",g(Le)):x(xe,ie,Ae,ze)}function xe(e,t){return o&&j(t)?(h.marked="keyword",g(xe)):"variable"==e?(A(t),g()):"spread"==e?g(xe):"["==e?ne(Ve,"]"):"{"==e?ne(ge,"}"):void 0}function ge(e,t){return"variable"!=e||h.stream.match(/^\s*:/,!1)?("variable"==e&&(h.marked="property"),"spread"==e?g(xe):"}"==e?x():"["==e?g(W,S("]"),S(":"),ge):g(S(":"),xe,Ae)):(A(t),g(Ae))}function Ve(){return x(xe,Ae)}function Ae(e,t){if("="==t)return g(B)}function ze(e){if(","==e)return g(he)}function je(e,t){if("keyword b"==e&&"else"==t)return g(I("form","else"),N,C)}function Te(e,t){return"await"==t?g(Te):"("==e?g(I(")"),$e,C):void 0}function $e(e){return"var"==e?g(he,_e):"variable"==e?g(_e):x(_e)}function _e(e,t){return")"==e?g():";"==e?g(_e):"in"==t||"of"==t?(h.marked="keyword",g(W,_e)):x(W,_e)}function Oe(e,t){return"*"==t?(h.marked="keyword",g(Oe)):"variable"==e?(A(t),g(Oe)):"("==e?g(O,I(")"),re(Ie,")"),C,ue,N,E):o&&"<"==t?g(I(">"),re(we,">"),C,Oe):void 0}function qe(e,t){return"*"==t?(h.marked="keyword",g(qe)):"variable"==e?(A(t),g(qe)):"("==e?g(O,I(")"),re(Ie,")"),C,ue,E):o&&"<"==t?g(I(">"),re(we,">"),C,qe):void 0}function Ee(e,t){return"keyword"==e||"variable"==e?(h.marked="type",g(Ee)):"<"==t?g(I(">"),re(we,">"),C):void 0}function Ie(e,t){return"@"==t&&g(W,Ie),"spread"==e?g(Ie):o&&j(t)?(h.marked="keyword",g(Ie)):o&&"this"==e?g(ie,Ae):x(xe,ie,Ae)}function Ce(e,t){return"variable"==e?Se(e,t):Ne(e,t)}function Se(e,t){if("variable"==e)return A(t),g(Ne)}function Ne(e,t){return"<"==t?g(I(">"),re(we,">"),C,Ne):"extends"==t||"implements"==t||o&&","==e?("implements"==t&&(h.marked="keyword"),g(o?se:W,Ne)):"{"==e?g(I("}"),Pe,C):void 0}function Pe(e,t){return"async"==e||"variable"==e&&("static"==t||"get"==t||"set"==t||o&&j(t))&&h.stream.match(/^\s+#?[\w$\xa1-\uffff]/,!1)?(h.marked="keyword",g(Pe)):"variable"==e||"keyword"==h.style?(h.marked="property",g(We,Pe)):"number"==e||"string"==e?g(We,Pe):"["==e?g(W,ie,S("]"),We,Pe):"*"==t?(h.marked="keyword",g(Pe)):o&&"("==e?x(qe,Pe):";"==e||","==e?g(Pe):"}"==e?g():"@"==t?g(W,Pe):void 0}function We(e,t){if("!"==t||"?"==t)return g(We);if(":"==e)return g(se,Ae);if("="==t)return g(B);var r=h.state.lexical.prev;return x(r&&"interface"==r.info?qe:Oe)}function Be(e,t){return"*"==t?(h.marked="keyword",g(Je,S(";"))):"default"==t?(h.marked="keyword",g(W,S(";"))):"{"==e?g(re(De,"}"),Je,S(";")):x(N)}function De(e,t){return"as"==t?(h.marked="keyword",g(S("variable"))):"variable"==e?x(B,De):void 0}function Fe(e){return"string"==e?g():"("==e?x(W):"."==e?x(G):x(Ue,Ge,Je)}function Ue(e,t){return"{"==e?ne(Ue,"}"):("variable"==e&&A(t),"*"==t&&(h.marked="keyword"),g(He))}function Ge(e){if(","==e)return g(Ue,Ge)}function He(e,t){if("as"==t)return h.marked="keyword",g(Ue)}function Je(e,t){if("from"==t)return h.marked="keyword",g(W)}function Ke(e){return"]"==e?g():x(re(B,"]"))}function Le(){return x(I("form"),xe,S("{"),I("}"),re(Me,"}"),C,C)}function Me(){return x(xe,Ae)}return O.lex=q.lex=!0,E.lex=!0,C.lex=!0,{name:e.name,startState:function(t){var r={tokenize:d,lastType:"sof",cc:[],lexical:new w(-t,0,"block",!1),localVars:e.localVars,context:e.localVars&&new T(null,null,!1),indented:0};return e.globalVars&&"object"==typeof e.globalVars&&(r.globalVars=e.globalVars),r},token:function(e,n){if(e.sol()&&(n.lexical.hasOwnProperty("align")||(n.lexical.align=!1),n.indented=e.indentation(),v(e,n)),n.tokenize!=m&&e.eatSpace())return null;var a=n.tokenize(e,n);return"comment"==t?a:(n.lastType="operator"!=t||"++"!=r&&"--"!=r?t:"incdec",function(e,t,r,n,a){var o=e.cc;for(h.state=e,h.stream=a,h.marked=null,h.cc=o,h.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;)if((o.length?o.pop():i?W:N)(r,n)){for(;o.length&&o[o.length-1].lex;)o.pop()();return h.marked?h.marked:"variable"==r&&b(e,n)?"variableName.local":t}}(n,a,t,r,e))},indent:function(t,r,a){if(t.tokenize==m||t.tokenize==p)return null;if(t.tokenize!=d)return 0;var i,o=r&&r.charAt(0),u=t.lexical;if(!/^\s*else\b/.test(r))for(var c=t.cc.length-1;c>=0;--c){var f=t.cc[c];if(f==C)u=u.prev;else if(f!=je&&f!=E)break}for(;("stat"==u.type||"form"==u.type)&&("}"==o||(i=t.cc[t.cc.length-1])&&(i==G||i==H)&&!/^[,\.=+\-*:?[\(]/.test(r));)u=u.prev;n&&")"==u.type&&"stat"==u.prev.type&&(u=u.prev);var l=u.type,k=o==l;return"vardef"==l?u.indented+("operator"==t.lastType||","==t.lastType?u.info.length+1:0):"form"==l&&"{"==o?u.indented:"form"==l?u.indented+a.unit:"stat"==l?u.indented+(function(e,t){return"operator"==e.lastType||","==e.lastType||s.test(t.charAt(0))||/[,.]/.test(t.charAt(0))}(t,r)?n||a.unit:0):"switch"!=u.info||k||0==e.doubleIndentSwitch?u.align?u.column+(k?0:1):u.indented+(k?0:a.unit):u.indented+(/^(?:case|default)\b/.test(r)?a.unit:2*a.unit)},languageData:{indentOnInput:/^\s*(?:case .*?:|default:|\{|\})$/,commentTokens:i?void 0:{line:"//",block:{open:"/*",close:"*/"}},closeBrackets:{brackets:["(","[","{","'",'"',"`"]},wordChars:"$"}}}r.r(t),r.d(t,{javascript:function(){return a},json:function(){return i},jsonld:function(){return o},typescript:function(){return u}});var a=n({name:"javascript"}),i=n({name:"json",json:!0}),o=n({name:"json",jsonld:!0}),u=n({name:"typescript",typescript:!0})}}]); +//# sourceMappingURL=545.2cc3d80f.chunk.js.map \ No newline at end of file diff --git a/media/assets/frontend/static/js/545.2cc3d80f.chunk.js.map b/media/assets/frontend/static/js/545.2cc3d80f.chunk.js.map new file mode 100644 index 00000000000..73b4581f9ef --- /dev/null +++ b/media/assets/frontend/static/js/545.2cc3d80f.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/545.2cc3d80f.chunk.js","mappings":"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","sources":["../node_modules/@codemirror/legacy-modes/mode/javascript.js"],"sourcesContent":["function mkJavaScript(parserConfig) {\n var statementIndent = parserConfig.statementIndent;\n var jsonldMode = parserConfig.jsonld;\n var jsonMode = parserConfig.json || jsonldMode;\n var isTS = parserConfig.typescript;\n var wordRE = parserConfig.wordCharacters || /[\\w$\\xa1-\\uffff]/;\n\n // Tokenizer\n\n var keywords = function(){\n function kw(type) {return {type: type, style: \"keyword\"};}\n var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\"), D = kw(\"keyword d\");\n var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\n\n return {\n \"if\": kw(\"if\"), \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\n \"return\": D, \"break\": D, \"continue\": D, \"new\": kw(\"new\"), \"delete\": C, \"void\": C, \"throw\": C,\n \"debugger\": kw(\"debugger\"), \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\n \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\n \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\n \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom,\n \"this\": kw(\"this\"), \"class\": kw(\"class\"), \"super\": kw(\"atom\"),\n \"yield\": C, \"export\": kw(\"export\"), \"import\": kw(\"import\"), \"extends\": C,\n \"await\": C\n };\n }();\n\n var isOperatorChar = /[+\\-*&%=<>!?|~^@]/;\n var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/;\n\n function readRegexp(stream) {\n var escaped = false, next, inSet = false;\n while ((next = stream.next()) != null) {\n if (!escaped) {\n if (next == \"/\" && !inSet) return;\n if (next == \"[\") inSet = true;\n else if (inSet && next == \"]\") inSet = false;\n }\n escaped = !escaped && next == \"\\\\\";\n }\n }\n\n // Used as scratch variables to communicate multiple values without\n // consing up tons of objects.\n var type, content;\n function ret(tp, style, cont) {\n type = tp; content = cont;\n return style;\n }\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"' || ch == \"'\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n } else if (ch == \".\" && stream.match(/^\\d[\\d_]*(?:[eE][+\\-]?[\\d_]+)?/)) {\n return ret(\"number\", \"number\");\n } else if (ch == \".\" && stream.match(\"..\")) {\n return ret(\"spread\", \"meta\");\n } else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n return ret(ch);\n } else if (ch == \"=\" && stream.eat(\">\")) {\n return ret(\"=>\", \"operator\");\n } else if (ch == \"0\" && stream.match(/^(?:x[\\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)) {\n return ret(\"number\", \"number\");\n } else if (/\\d/.test(ch)) {\n stream.match(/^[\\d_]*(?:n|(?:\\.[\\d_]*)?(?:[eE][+\\-]?[\\d_]+)?)?/);\n return ret(\"number\", \"number\");\n } else if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize = tokenComment;\n return tokenComment(stream, state);\n } else if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return ret(\"comment\", \"comment\");\n } else if (expressionAllowed(stream, state, 1)) {\n readRegexp(stream);\n stream.match(/^\\b(([gimyus])(?![gimyus]*\\2))+\\b/);\n return ret(\"regexp\", \"string.special\");\n } else {\n stream.eat(\"=\");\n return ret(\"operator\", \"operator\", stream.current());\n }\n } else if (ch == \"`\") {\n state.tokenize = tokenQuasi;\n return tokenQuasi(stream, state);\n } else if (ch == \"#\" && stream.peek() == \"!\") {\n stream.skipToEnd();\n return ret(\"meta\", \"meta\");\n } else if (ch == \"#\" && stream.eatWhile(wordRE)) {\n return ret(\"variable\", \"property\")\n } else if (ch == \"<\" && stream.match(\"!--\") ||\n (ch == \"-\" && stream.match(\"->\") && !/\\S/.test(stream.string.slice(0, stream.start)))) {\n stream.skipToEnd()\n return ret(\"comment\", \"comment\")\n } else if (isOperatorChar.test(ch)) {\n if (ch != \">\" || !state.lexical || state.lexical.type != \">\") {\n if (stream.eat(\"=\")) {\n if (ch == \"!\" || ch == \"=\") stream.eat(\"=\")\n } else if (/[<>*+\\-|&?]/.test(ch)) {\n stream.eat(ch)\n if (ch == \">\") stream.eat(ch)\n }\n }\n if (ch == \"?\" && stream.eat(\".\")) return ret(\".\")\n return ret(\"operator\", \"operator\", stream.current());\n } else if (wordRE.test(ch)) {\n stream.eatWhile(wordRE);\n var word = stream.current()\n if (state.lastType != \".\") {\n if (keywords.propertyIsEnumerable(word)) {\n var kw = keywords[word]\n return ret(kw.type, kw.style, word)\n }\n if (word == \"async\" && stream.match(/^(\\s|\\/\\*([^*]|\\*(?!\\/))*?\\*\\/)*[\\[\\(\\w]/, false))\n return ret(\"async\", \"keyword\", word)\n }\n return ret(\"variable\", \"variable\", word)\n }\n }\n\n function tokenString(quote) {\n return function(stream, state) {\n var escaped = false, next;\n if (jsonldMode && stream.peek() == \"@\" && stream.match(isJsonldKeyword)){\n state.tokenize = tokenBase;\n return ret(\"jsonld-keyword\", \"meta\");\n }\n while ((next = stream.next()) != null) {\n if (next == quote && !escaped) break;\n escaped = !escaped && next == \"\\\\\";\n }\n if (!escaped) state.tokenize = tokenBase;\n return ret(\"string\", \"string\");\n };\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize = tokenBase;\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return ret(\"comment\", \"comment\");\n }\n\n function tokenQuasi(stream, state) {\n var escaped = false, next;\n while ((next = stream.next()) != null) {\n if (!escaped && (next == \"`\" || next == \"$\" && stream.eat(\"{\"))) {\n state.tokenize = tokenBase;\n break;\n }\n escaped = !escaped && next == \"\\\\\";\n }\n return ret(\"quasi\", \"string.special\", stream.current());\n }\n\n var brackets = \"([{}])\";\n // This is a crude lookahead trick to try and notice that we're\n // parsing the argument patterns for a fat-arrow function before we\n // actually hit the arrow token. It only works if the arrow is on\n // the same line as the arguments and there's no strange noise\n // (comments) in between. Fallback is to only notice when we hit the\n // arrow, and not declare the arguments as locals for the arrow\n // body.\n function findFatArrow(stream, state) {\n if (state.fatArrowAt) state.fatArrowAt = null;\n var arrow = stream.string.indexOf(\"=>\", stream.start);\n if (arrow < 0) return;\n\n if (isTS) { // Try to skip TypeScript return type declarations after the arguments\n var m = /:\\s*(?:\\w+(?:<[^>]*>|\\[\\])?|\\{[^}]*\\})\\s*$/.exec(stream.string.slice(stream.start, arrow))\n if (m) arrow = m.index\n }\n\n var depth = 0, sawSomething = false;\n for (var pos = arrow - 1; pos >= 0; --pos) {\n var ch = stream.string.charAt(pos);\n var bracket = brackets.indexOf(ch);\n if (bracket >= 0 && bracket < 3) {\n if (!depth) { ++pos; break; }\n if (--depth == 0) { if (ch == \"(\") sawSomething = true; break; }\n } else if (bracket >= 3 && bracket < 6) {\n ++depth;\n } else if (wordRE.test(ch)) {\n sawSomething = true;\n } else if (/[\"'\\/`]/.test(ch)) {\n for (;; --pos) {\n if (pos == 0) return\n var next = stream.string.charAt(pos - 1)\n if (next == ch && stream.string.charAt(pos - 2) != \"\\\\\") { pos--; break }\n }\n } else if (sawSomething && !depth) {\n ++pos;\n break;\n }\n }\n if (sawSomething && !depth) state.fatArrowAt = pos;\n }\n\n // Parser\n\n var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true,\n \"regexp\": true, \"this\": true, \"import\": true, \"jsonld-keyword\": true};\n\n function JSLexical(indented, column, type, align, prev, info) {\n this.indented = indented;\n this.column = column;\n this.type = type;\n this.prev = prev;\n this.info = info;\n if (align != null) this.align = align;\n }\n\n function inScope(state, varname) {\n for (var v = state.localVars; v; v = v.next)\n if (v.name == varname) return true;\n for (var cx = state.context; cx; cx = cx.prev) {\n for (var v = cx.vars; v; v = v.next)\n if (v.name == varname) return true;\n }\n }\n\n function parseJS(state, style, type, content, stream) {\n var cc = state.cc;\n // Communicate our context to the combinators.\n // (Less wasteful than consing up a hundred closures on every call.)\n cx.state = state; cx.stream = stream; cx.marked = null; cx.cc = cc; cx.style = style;\n\n if (!state.lexical.hasOwnProperty(\"align\"))\n state.lexical.align = true;\n\n while(true) {\n var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n if (combinator(type, content)) {\n while(cc.length && cc[cc.length - 1].lex)\n cc.pop()();\n if (cx.marked) return cx.marked;\n if (type == \"variable\" && inScope(state, content)) return \"variableName.local\";\n return style;\n }\n }\n }\n\n // Combinator utils\n\n var cx = {state: null, column: null, marked: null, cc: null};\n function pass() {\n for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n }\n function cont() {\n pass.apply(null, arguments);\n return true;\n }\n function inList(name, list) {\n for (var v = list; v; v = v.next) if (v.name == name) return true\n return false;\n }\n function register(varname) {\n var state = cx.state;\n cx.marked = \"def\";\n if (state.context) {\n if (state.lexical.info == \"var\" && state.context && state.context.block) {\n // FIXME function decls are also not block scoped\n var newContext = registerVarScoped(varname, state.context)\n if (newContext != null) {\n state.context = newContext\n return\n }\n } else if (!inList(varname, state.localVars)) {\n state.localVars = new Var(varname, state.localVars)\n return\n }\n }\n // Fall through means this is global\n if (parserConfig.globalVars && !inList(varname, state.globalVars))\n state.globalVars = new Var(varname, state.globalVars)\n }\n function registerVarScoped(varname, context) {\n if (!context) {\n return null\n } else if (context.block) {\n var inner = registerVarScoped(varname, context.prev)\n if (!inner) return null\n if (inner == context.prev) return context\n return new Context(inner, context.vars, true)\n } else if (inList(varname, context.vars)) {\n return context\n } else {\n return new Context(context.prev, new Var(varname, context.vars), false)\n }\n }\n\n function isModifier(name) {\n return name == \"public\" || name == \"private\" || name == \"protected\" || name == \"abstract\" || name == \"readonly\"\n }\n\n // Combinators\n\n function Context(prev, vars, block) { this.prev = prev; this.vars = vars; this.block = block }\n function Var(name, next) { this.name = name; this.next = next }\n\n var defaultVars = new Var(\"this\", new Var(\"arguments\", null))\n function pushcontext() {\n cx.state.context = new Context(cx.state.context, cx.state.localVars, false)\n cx.state.localVars = defaultVars\n }\n function pushblockcontext() {\n cx.state.context = new Context(cx.state.context, cx.state.localVars, true)\n cx.state.localVars = null\n }\n pushcontext.lex = pushblockcontext.lex = true\n function popcontext() {\n cx.state.localVars = cx.state.context.vars\n cx.state.context = cx.state.context.prev\n }\n popcontext.lex = true\n function pushlex(type, info) {\n var result = function() {\n var state = cx.state, indent = state.indented;\n if (state.lexical.type == \"stat\") indent = state.lexical.indented;\n else for (var outer = state.lexical; outer && outer.type == \")\" && outer.align; outer = outer.prev)\n indent = outer.indented;\n state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);\n };\n result.lex = true;\n return result;\n }\n function poplex() {\n var state = cx.state;\n if (state.lexical.prev) {\n if (state.lexical.type == \")\")\n state.indented = state.lexical.indented;\n state.lexical = state.lexical.prev;\n }\n }\n poplex.lex = true;\n\n function expect(wanted) {\n function exp(type) {\n if (type == wanted) return cont();\n else if (wanted == \";\" || type == \"}\" || type == \")\" || type == \"]\") return pass();\n else return cont(exp);\n };\n return exp;\n }\n\n function statement(type, value) {\n if (type == \"var\") return cont(pushlex(\"vardef\", value), vardef, expect(\";\"), poplex);\n if (type == \"keyword a\") return cont(pushlex(\"form\"), parenExpr, statement, poplex);\n if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n if (type == \"keyword d\") return cx.stream.match(/^\\s*$/, false) ? cont() : cont(pushlex(\"stat\"), maybeexpression, expect(\";\"), poplex);\n if (type == \"debugger\") return cont(expect(\";\"));\n if (type == \"{\") return cont(pushlex(\"}\"), pushblockcontext, block, poplex, popcontext);\n if (type == \";\") return cont();\n if (type == \"if\") {\n if (cx.state.lexical.info == \"else\" && cx.state.cc[cx.state.cc.length - 1] == poplex)\n cx.state.cc.pop()();\n return cont(pushlex(\"form\"), parenExpr, statement, poplex, maybeelse);\n }\n if (type == \"function\") return cont(functiondef);\n if (type == \"for\") return cont(pushlex(\"form\"), pushblockcontext, forspec, statement, popcontext, poplex);\n if (type == \"class\" || (isTS && value == \"interface\")) {\n cx.marked = \"keyword\"\n return cont(pushlex(\"form\", type == \"class\" ? type : value), className, poplex)\n }\n if (type == \"variable\") {\n if (isTS && value == \"declare\") {\n cx.marked = \"keyword\"\n return cont(statement)\n } else if (isTS && (value == \"module\" || value == \"enum\" || value == \"type\") && cx.stream.match(/^\\s*\\w/, false)) {\n cx.marked = \"keyword\"\n if (value == \"enum\") return cont(enumdef);\n else if (value == \"type\") return cont(typename, expect(\"operator\"), typeexpr, expect(\";\"));\n else return cont(pushlex(\"form\"), pattern, expect(\"{\"), pushlex(\"}\"), block, poplex, poplex)\n } else if (isTS && value == \"namespace\") {\n cx.marked = \"keyword\"\n return cont(pushlex(\"form\"), expression, statement, poplex)\n } else if (isTS && value == \"abstract\") {\n cx.marked = \"keyword\"\n return cont(statement)\n } else {\n return cont(pushlex(\"stat\"), maybelabel);\n }\n }\n if (type == \"switch\") return cont(pushlex(\"form\"), parenExpr, expect(\"{\"), pushlex(\"}\", \"switch\"), pushblockcontext,\n block, poplex, poplex, popcontext);\n if (type == \"case\") return cont(expression, expect(\":\"));\n if (type == \"default\") return cont(expect(\":\"));\n if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, maybeCatchBinding, statement, poplex, popcontext);\n if (type == \"export\") return cont(pushlex(\"stat\"), afterExport, poplex);\n if (type == \"import\") return cont(pushlex(\"stat\"), afterImport, poplex);\n if (type == \"async\") return cont(statement)\n if (value == \"@\") return cont(expression, statement)\n return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n }\n function maybeCatchBinding(type) {\n if (type == \"(\") return cont(funarg, expect(\")\"))\n }\n function expression(type, value) {\n return expressionInner(type, value, false);\n }\n function expressionNoComma(type, value) {\n return expressionInner(type, value, true);\n }\n function parenExpr(type) {\n if (type != \"(\") return pass()\n return cont(pushlex(\")\"), maybeexpression, expect(\")\"), poplex)\n }\n function expressionInner(type, value, noComma) {\n if (cx.state.fatArrowAt == cx.stream.start) {\n var body = noComma ? arrowBodyNoComma : arrowBody;\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, expect(\"=>\"), body, popcontext);\n else if (type == \"variable\") return pass(pushcontext, pattern, expect(\"=>\"), body, popcontext);\n }\n\n var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;\n if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);\n if (type == \"function\") return cont(functiondef, maybeop);\n if (type == \"class\" || (isTS && value == \"interface\")) { cx.marked = \"keyword\"; return cont(pushlex(\"form\"), classExpression, poplex); }\n if (type == \"keyword c\" || type == \"async\") return cont(noComma ? expressionNoComma : expression);\n if (type == \"(\") return cont(pushlex(\")\"), maybeexpression, expect(\")\"), poplex, maybeop);\n if (type == \"operator\" || type == \"spread\") return cont(noComma ? expressionNoComma : expression);\n if (type == \"[\") return cont(pushlex(\"]\"), arrayLiteral, poplex, maybeop);\n if (type == \"{\") return contCommasep(objprop, \"}\", null, maybeop);\n if (type == \"quasi\") return pass(quasi, maybeop);\n if (type == \"new\") return cont(maybeTarget(noComma));\n return cont();\n }\n function maybeexpression(type) {\n if (type.match(/[;\\}\\)\\],]/)) return pass();\n return pass(expression);\n }\n\n function maybeoperatorComma(type, value) {\n if (type == \",\") return cont(maybeexpression);\n return maybeoperatorNoComma(type, value, false);\n }\n function maybeoperatorNoComma(type, value, noComma) {\n var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;\n var expr = noComma == false ? expression : expressionNoComma;\n if (type == \"=>\") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);\n if (type == \"operator\") {\n if (/\\+\\+|--/.test(value) || isTS && value == \"!\") return cont(me);\n if (isTS && value == \"<\" && cx.stream.match(/^([^<>]|<[^<>]*>)*>\\s*\\(/, false))\n return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, me);\n if (value == \"?\") return cont(expression, expect(\":\"), expr);\n return cont(expr);\n }\n if (type == \"quasi\") { return pass(quasi, me); }\n if (type == \";\") return;\n if (type == \"(\") return contCommasep(expressionNoComma, \")\", \"call\", me);\n if (type == \".\") return cont(property, me);\n if (type == \"[\") return cont(pushlex(\"]\"), maybeexpression, expect(\"]\"), poplex, me);\n if (isTS && value == \"as\") { cx.marked = \"keyword\"; return cont(typeexpr, me) }\n if (type == \"regexp\") {\n cx.state.lastType = cx.marked = \"operator\"\n cx.stream.backUp(cx.stream.pos - cx.stream.start - 1)\n return cont(expr)\n }\n }\n function quasi(type, value) {\n if (type != \"quasi\") return pass();\n if (value.slice(value.length - 2) != \"${\") return cont(quasi);\n return cont(maybeexpression, continueQuasi);\n }\n function continueQuasi(type) {\n if (type == \"}\") {\n cx.marked = \"string.special\";\n cx.state.tokenize = tokenQuasi;\n return cont(quasi);\n }\n }\n function arrowBody(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expression);\n }\n function arrowBodyNoComma(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expressionNoComma);\n }\n function maybeTarget(noComma) {\n return function(type) {\n if (type == \".\") return cont(noComma ? targetNoComma : target);\n else if (type == \"variable\" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma)\n else return pass(noComma ? expressionNoComma : expression);\n };\n }\n function target(_, value) {\n if (value == \"target\") { cx.marked = \"keyword\"; return cont(maybeoperatorComma); }\n }\n function targetNoComma(_, value) {\n if (value == \"target\") { cx.marked = \"keyword\"; return cont(maybeoperatorNoComma); }\n }\n function maybelabel(type) {\n if (type == \":\") return cont(poplex, statement);\n return pass(maybeoperatorComma, expect(\";\"), poplex);\n }\n function property(type) {\n if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n }\n function objprop(type, value) {\n if (type == \"async\") {\n cx.marked = \"property\";\n return cont(objprop);\n } else if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n if (value == \"get\" || value == \"set\") return cont(getterSetter);\n var m // Work around fat-arrow-detection complication for detecting typescript typed arrow params\n if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\\s*:\\s*/, false)))\n cx.state.fatArrowAt = cx.stream.pos + m[0].length\n return cont(afterprop);\n } else if (type == \"number\" || type == \"string\") {\n cx.marked = jsonldMode ? \"property\" : (cx.style + \" property\");\n return cont(afterprop);\n } else if (type == \"jsonld-keyword\") {\n return cont(afterprop);\n } else if (isTS && isModifier(value)) {\n cx.marked = \"keyword\"\n return cont(objprop)\n } else if (type == \"[\") {\n return cont(expression, maybetype, expect(\"]\"), afterprop);\n } else if (type == \"spread\") {\n return cont(expressionNoComma, afterprop);\n } else if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(objprop);\n } else if (type == \":\") {\n return pass(afterprop)\n }\n }\n function getterSetter(type) {\n if (type != \"variable\") return pass(afterprop);\n cx.marked = \"property\";\n return cont(functiondef);\n }\n function afterprop(type) {\n if (type == \":\") return cont(expressionNoComma);\n if (type == \"(\") return pass(functiondef);\n }\n function commasep(what, end, sep) {\n function proceed(type, value) {\n if (sep ? sep.indexOf(type) > -1 : type == \",\") {\n var lex = cx.state.lexical;\n if (lex.info == \"call\") lex.pos = (lex.pos || 0) + 1;\n return cont(function(type, value) {\n if (type == end || value == end) return pass()\n return pass(what)\n }, proceed);\n }\n if (type == end || value == end) return cont();\n if (sep && sep.indexOf(\";\") > -1) return pass(what)\n return cont(expect(end));\n }\n return function(type, value) {\n if (type == end || value == end) return cont();\n return pass(what, proceed);\n };\n }\n function contCommasep(what, end, info) {\n for (var i = 3; i < arguments.length; i++)\n cx.cc.push(arguments[i]);\n return cont(pushlex(end, info), commasep(what, end), poplex);\n }\n function block(type) {\n if (type == \"}\") return cont();\n return pass(statement, block);\n }\n function maybetype(type, value) {\n if (isTS) {\n if (type == \":\") return cont(typeexpr);\n if (value == \"?\") return cont(maybetype);\n }\n }\n function maybetypeOrIn(type, value) {\n if (isTS && (type == \":\" || value == \"in\")) return cont(typeexpr)\n }\n function mayberettype(type) {\n if (isTS && type == \":\") {\n if (cx.stream.match(/^\\s*\\w+\\s+is\\b/, false)) return cont(expression, isKW, typeexpr)\n else return cont(typeexpr)\n }\n }\n function isKW(_, value) {\n if (value == \"is\") {\n cx.marked = \"keyword\"\n return cont()\n }\n }\n function typeexpr(type, value) {\n if (value == \"keyof\" || value == \"typeof\" || value == \"infer\" || value == \"readonly\") {\n cx.marked = \"keyword\"\n return cont(value == \"typeof\" ? expressionNoComma : typeexpr)\n }\n if (type == \"variable\" || value == \"void\") {\n cx.marked = \"type\"\n return cont(afterType)\n }\n if (value == \"|\" || value == \"&\") return cont(typeexpr)\n if (type == \"string\" || type == \"number\" || type == \"atom\") return cont(afterType);\n if (type == \"[\") return cont(pushlex(\"]\"), commasep(typeexpr, \"]\", \",\"), poplex, afterType)\n if (type == \"{\") return cont(pushlex(\"}\"), typeprops, poplex, afterType)\n if (type == \"(\") return cont(commasep(typearg, \")\"), maybeReturnType, afterType)\n if (type == \"<\") return cont(commasep(typeexpr, \">\"), typeexpr)\n if (type == \"quasi\") return pass(quasiType, afterType)\n }\n function maybeReturnType(type) {\n if (type == \"=>\") return cont(typeexpr)\n }\n function typeprops(type) {\n if (type.match(/[\\}\\)\\]]/)) return cont()\n if (type == \",\" || type == \";\") return cont(typeprops)\n return pass(typeprop, typeprops)\n }\n function typeprop(type, value) {\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\"\n return cont(typeprop)\n } else if (value == \"?\" || type == \"number\" || type == \"string\") {\n return cont(typeprop)\n } else if (type == \":\") {\n return cont(typeexpr)\n } else if (type == \"[\") {\n return cont(expect(\"variable\"), maybetypeOrIn, expect(\"]\"), typeprop)\n } else if (type == \"(\") {\n return pass(functiondecl, typeprop)\n } else if (!type.match(/[;\\}\\)\\],]/)) {\n return cont()\n }\n }\n function quasiType(type, value) {\n if (type != \"quasi\") return pass();\n if (value.slice(value.length - 2) != \"${\") return cont(quasiType);\n return cont(typeexpr, continueQuasiType);\n }\n function continueQuasiType(type) {\n if (type == \"}\") {\n cx.marked = \"string.special\";\n cx.state.tokenize = tokenQuasi;\n return cont(quasiType);\n }\n }\n function typearg(type, value) {\n if (type == \"variable\" && cx.stream.match(/^\\s*[?:]/, false) || value == \"?\") return cont(typearg)\n if (type == \":\") return cont(typeexpr)\n if (type == \"spread\") return cont(typearg)\n return pass(typeexpr)\n }\n function afterType(type, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType)\n if (value == \"|\" || type == \".\" || value == \"&\") return cont(typeexpr)\n if (type == \"[\") return cont(typeexpr, expect(\"]\"), afterType)\n if (value == \"extends\" || value == \"implements\") { cx.marked = \"keyword\"; return cont(typeexpr) }\n if (value == \"?\") return cont(typeexpr, expect(\":\"), typeexpr)\n }\n function maybeTypeArgs(_, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType)\n }\n function typeparam() {\n return pass(typeexpr, maybeTypeDefault)\n }\n function maybeTypeDefault(_, value) {\n if (value == \"=\") return cont(typeexpr)\n }\n function vardef(_, value) {\n if (value == \"enum\") {cx.marked = \"keyword\"; return cont(enumdef)}\n return pass(pattern, maybetype, maybeAssign, vardefCont);\n }\n function pattern(type, value) {\n if (isTS && isModifier(value)) { cx.marked = \"keyword\"; return cont(pattern) }\n if (type == \"variable\") { register(value); return cont(); }\n if (type == \"spread\") return cont(pattern);\n if (type == \"[\") return contCommasep(eltpattern, \"]\");\n if (type == \"{\") return contCommasep(proppattern, \"}\");\n }\n function proppattern(type, value) {\n if (type == \"variable\" && !cx.stream.match(/^\\s*:/, false)) {\n register(value);\n return cont(maybeAssign);\n }\n if (type == \"variable\") cx.marked = \"property\";\n if (type == \"spread\") return cont(pattern);\n if (type == \"}\") return pass();\n if (type == \"[\") return cont(expression, expect(']'), expect(':'), proppattern);\n return cont(expect(\":\"), pattern, maybeAssign);\n }\n function eltpattern() {\n return pass(pattern, maybeAssign)\n }\n function maybeAssign(_type, value) {\n if (value == \"=\") return cont(expressionNoComma);\n }\n function vardefCont(type) {\n if (type == \",\") return cont(vardef);\n }\n function maybeelse(type, value) {\n if (type == \"keyword b\" && value == \"else\") return cont(pushlex(\"form\", \"else\"), statement, poplex);\n }\n function forspec(type, value) {\n if (value == \"await\") return cont(forspec);\n if (type == \"(\") return cont(pushlex(\")\"), forspec1, poplex);\n }\n function forspec1(type) {\n if (type == \"var\") return cont(vardef, forspec2);\n if (type == \"variable\") return cont(forspec2);\n return pass(forspec2)\n }\n function forspec2(type, value) {\n if (type == \")\") return cont()\n if (type == \";\") return cont(forspec2)\n if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression, forspec2) }\n return pass(expression, forspec2)\n }\n function functiondef(type, value) {\n if (value == \"*\") {cx.marked = \"keyword\"; return cont(functiondef);}\n if (type == \"variable\") {register(value); return cont(functiondef);}\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, mayberettype, statement, popcontext);\n if (isTS && value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, functiondef)\n }\n function functiondecl(type, value) {\n if (value == \"*\") {cx.marked = \"keyword\"; return cont(functiondecl);}\n if (type == \"variable\") {register(value); return cont(functiondecl);}\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, mayberettype, popcontext);\n if (isTS && value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, functiondecl)\n }\n function typename(type, value) {\n if (type == \"keyword\" || type == \"variable\") {\n cx.marked = \"type\"\n return cont(typename)\n } else if (value == \"<\") {\n return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex)\n }\n }\n function funarg(type, value) {\n if (value == \"@\") cont(expression, funarg)\n if (type == \"spread\") return cont(funarg);\n if (isTS && isModifier(value)) { cx.marked = \"keyword\"; return cont(funarg); }\n if (isTS && type == \"this\") return cont(maybetype, maybeAssign)\n return pass(pattern, maybetype, maybeAssign);\n }\n function classExpression(type, value) {\n // Class expressions may have an optional name.\n if (type == \"variable\") return className(type, value);\n return classNameAfter(type, value);\n }\n function className(type, value) {\n if (type == \"variable\") {register(value); return cont(classNameAfter);}\n }\n function classNameAfter(type, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, classNameAfter)\n if (value == \"extends\" || value == \"implements\" || (isTS && type == \",\")) {\n if (value == \"implements\") cx.marked = \"keyword\";\n return cont(isTS ? typeexpr : expression, classNameAfter);\n }\n if (type == \"{\") return cont(pushlex(\"}\"), classBody, poplex);\n }\n function classBody(type, value) {\n if (type == \"async\" ||\n (type == \"variable\" &&\n (value == \"static\" || value == \"get\" || value == \"set\" || (isTS && isModifier(value))) &&\n cx.stream.match(/^\\s+#?[\\w$\\xa1-\\uffff]/, false))) {\n cx.marked = \"keyword\";\n return cont(classBody);\n }\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n return cont(classfield, classBody);\n }\n if (type == \"number\" || type == \"string\") return cont(classfield, classBody);\n if (type == \"[\")\n return cont(expression, maybetype, expect(\"]\"), classfield, classBody)\n if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(classBody);\n }\n if (isTS && type == \"(\") return pass(functiondecl, classBody)\n if (type == \";\" || type == \",\") return cont(classBody);\n if (type == \"}\") return cont();\n if (value == \"@\") return cont(expression, classBody)\n }\n function classfield(type, value) {\n if (value == \"!\" || value == \"?\") return cont(classfield)\n if (type == \":\") return cont(typeexpr, maybeAssign)\n if (value == \"=\") return cont(expressionNoComma)\n var context = cx.state.lexical.prev, isInterface = context && context.info == \"interface\"\n return pass(isInterface ? functiondecl : functiondef)\n }\n function afterExport(type, value) {\n if (value == \"*\") { cx.marked = \"keyword\"; return cont(maybeFrom, expect(\";\")); }\n if (value == \"default\") { cx.marked = \"keyword\"; return cont(expression, expect(\";\")); }\n if (type == \"{\") return cont(commasep(exportField, \"}\"), maybeFrom, expect(\";\"));\n return pass(statement);\n }\n function exportField(type, value) {\n if (value == \"as\") { cx.marked = \"keyword\"; return cont(expect(\"variable\")); }\n if (type == \"variable\") return pass(expressionNoComma, exportField);\n }\n function afterImport(type) {\n if (type == \"string\") return cont();\n if (type == \"(\") return pass(expression);\n if (type == \".\") return pass(maybeoperatorComma);\n return pass(importSpec, maybeMoreImports, maybeFrom);\n }\n function importSpec(type, value) {\n if (type == \"{\") return contCommasep(importSpec, \"}\");\n if (type == \"variable\") register(value);\n if (value == \"*\") cx.marked = \"keyword\";\n return cont(maybeAs);\n }\n function maybeMoreImports(type) {\n if (type == \",\") return cont(importSpec, maybeMoreImports)\n }\n function maybeAs(_type, value) {\n if (value == \"as\") { cx.marked = \"keyword\"; return cont(importSpec); }\n }\n function maybeFrom(_type, value) {\n if (value == \"from\") { cx.marked = \"keyword\"; return cont(expression); }\n }\n function arrayLiteral(type) {\n if (type == \"]\") return cont();\n return pass(commasep(expressionNoComma, \"]\"));\n }\n function enumdef() {\n return pass(pushlex(\"form\"), pattern, expect(\"{\"), pushlex(\"}\"), commasep(enummember, \"}\"), poplex, poplex)\n }\n function enummember() {\n return pass(pattern, maybeAssign);\n }\n\n function isContinuedStatement(state, textAfter) {\n return state.lastType == \"operator\" || state.lastType == \",\" ||\n isOperatorChar.test(textAfter.charAt(0)) ||\n /[,.]/.test(textAfter.charAt(0));\n }\n\n function expressionAllowed(stream, state, backUp) {\n return state.tokenize == tokenBase &&\n /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\\[{}\\(,;:]|=>)$/.test(state.lastType) ||\n (state.lastType == \"quasi\" && /\\{\\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))))\n }\n\n // Interface\n\n return {\n name: parserConfig.name,\n\n startState: function(indentUnit) {\n var state = {\n tokenize: tokenBase,\n lastType: \"sof\",\n cc: [],\n lexical: new JSLexical(-indentUnit, 0, \"block\", false),\n localVars: parserConfig.localVars,\n context: parserConfig.localVars && new Context(null, null, false),\n indented: 0\n };\n if (parserConfig.globalVars && typeof parserConfig.globalVars == \"object\")\n state.globalVars = parserConfig.globalVars;\n return state;\n },\n\n token: function(stream, state) {\n if (stream.sol()) {\n if (!state.lexical.hasOwnProperty(\"align\"))\n state.lexical.align = false;\n state.indented = stream.indentation();\n findFatArrow(stream, state);\n }\n if (state.tokenize != tokenComment && stream.eatSpace()) return null;\n var style = state.tokenize(stream, state);\n if (type == \"comment\") return style;\n state.lastType = type == \"operator\" && (content == \"++\" || content == \"--\") ? \"incdec\" : type;\n return parseJS(state, style, type, content, stream);\n },\n\n indent: function(state, textAfter, cx) {\n if (state.tokenize == tokenComment || state.tokenize == tokenQuasi) return null;\n if (state.tokenize != tokenBase) return 0;\n var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top\n // Kludge to prevent 'maybelse' from blocking lexical scope pops\n if (!/^\\s*else\\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {\n var c = state.cc[i];\n if (c == poplex) lexical = lexical.prev;\n else if (c != maybeelse && c != popcontext) break;\n }\n while ((lexical.type == \"stat\" || lexical.type == \"form\") &&\n (firstChar == \"}\" || ((top = state.cc[state.cc.length - 1]) &&\n (top == maybeoperatorComma || top == maybeoperatorNoComma) &&\n !/^[,\\.=+\\-*:?[\\(]/.test(textAfter))))\n lexical = lexical.prev;\n if (statementIndent && lexical.type == \")\" && lexical.prev.type == \"stat\")\n lexical = lexical.prev;\n var type = lexical.type, closing = firstChar == type;\n\n if (type == \"vardef\") return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? lexical.info.length + 1 : 0);\n else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n else if (type == \"form\") return lexical.indented + cx.unit;\n else if (type == \"stat\")\n return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || cx.unit : 0);\n else if (lexical.info == \"switch\" && !closing && parserConfig.doubleIndentSwitch != false)\n return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? cx.unit : 2 * cx.unit);\n else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n else return lexical.indented + (closing ? 0 : cx.unit);\n },\n\n languageData: {\n indentOnInput: /^\\s*(?:case .*?:|default:|\\{|\\})$/,\n commentTokens: jsonMode ? undefined : {line: \"//\", block: {open: \"/*\", close: \"*/\"}},\n closeBrackets: {brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"`\"]},\n wordChars: \"$\"\n }\n };\n};\n\nexport const javascript = mkJavaScript({name: \"javascript\"})\nexport const json = mkJavaScript({name: \"json\", json: true})\nexport const jsonld = mkJavaScript({name: \"json\", jsonld: true})\nexport const typescript = mkJavaScript({name: \"typescript\", typescript: true})\n"],"names":["mkJavaScript","parserConfig","type","content","statementIndent","jsonldMode","jsonld","jsonMode","json","isTS","typescript","wordRE","wordCharacters","keywords","kw","style","A","B","C","D","operator","atom","isOperatorChar","isJsonldKeyword","ret","tp","cont","tokenBase","stream","state","quote","ch","next","tokenize","escaped","peek","match","test","eat","tokenComment","skipToEnd","backUp","lastType","string","slice","pos","expressionAllowed","inSet","readRegexp","current","tokenQuasi","eatWhile","start","lexical","word","propertyIsEnumerable","maybeEnd","brackets","findFatArrow","fatArrowAt","arrow","indexOf","m","exec","index","depth","sawSomething","charAt","bracket","atomicTypes","JSLexical","indented","column","align","prev","info","this","inScope","varname","v","localVars","name","cx","context","vars","marked","cc","pass","i","arguments","length","push","apply","inList","list","register","block","newContext","registerVarScoped","Var","globalVars","inner","Context","isModifier","defaultVars","pushcontext","pushblockcontext","popcontext","pushlex","result","indent","outer","lex","poplex","expect","wanted","exp","statement","value","vardef","parenExpr","maybeexpression","pop","maybeelse","functiondef","forspec","className","enumdef","typename","typeexpr","pattern","expression","maybelabel","maybeCatchBinding","afterExport","afterImport","funarg","expressionInner","expressionNoComma","noComma","body","arrowBodyNoComma","arrowBody","commasep","maybeop","maybeoperatorNoComma","maybeoperatorComma","hasOwnProperty","classExpression","arrayLiteral","contCommasep","objprop","quasi","targetNoComma","target","maybeTypeArgs","maybeTarget","me","expr","property","continueQuasi","_","getterSetter","afterprop","maybetype","what","end","sep","proceed","maybetypeOrIn","mayberettype","isKW","afterType","typeprops","typearg","maybeReturnType","quasiType","typeprop","functiondecl","continueQuasiType","typeparam","maybeTypeDefault","maybeAssign","vardefCont","eltpattern","proppattern","_type","forspec1","forspec2","classNameAfter","classBody","classfield","maybeFrom","exportField","importSpec","maybeMoreImports","maybeAs","enummember","startState","indentUnit","token","sol","indentation","eatSpace","parseJS","textAfter","top","firstChar","c","closing","unit","isContinuedStatement","doubleIndentSwitch","languageData","indentOnInput","commentTokens","undefined","line","open","close","closeBrackets","wordChars","javascript"],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/js/921.ba8481b9.chunk.js b/media/assets/frontend/static/js/921.ba8481b9.chunk.js new file mode 100644 index 00000000000..d7e5b6df1ee --- /dev/null +++ b/media/assets/frontend/static/js/921.ba8481b9.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkseahub_frontend=self.webpackChunkseahub_frontend||[]).push([[921],{9921:function(e,t,n){n.r(t),n.d(t,{clojure:function(){return g}});var r=["false","nil","true"],a=[".","catch","def","do","if","monitor-enter","monitor-exit","new","quote","recur","set!","throw","try","var"],s=["*","*'","*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-namespace-maps*","*print-readably*","*read-eval*","*reader-resolver*","*source-path*","*suppress-read*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","+","+'","-","-'","->","->>","->ArrayChunk","->Eduction","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods","..","/","<","<=","=","==",">",">=","EMPTY-NODE","Inst","StackTraceElement->vec","Throwable->map","accessor","aclone","add-classpath","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","amap","ancestors","and","any?","apply","areduce","array-map","as->","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assert","assoc","assoc!","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","binding","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","boolean?","booleans","bound-fn","bound-fn*","bound?","bounded-count","butlast","byte","byte-array","bytes","bytes?","case","cast","cat","char","char-array","char-escape-string","char-name-string","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","coll?","comment","commute","comp","comparator","compare","compare-and-set!","compile","complement","completing","concat","cond","cond->","cond->>","condp","conj","conj!","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","declare","dedupe","default-data-readers","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype","delay","delay?","deliver","denominator","deref","derive","descendants","destructure","disj","disj!","dissoc","dissoc!","distinct","distinct?","doall","dorun","doseq","dosync","dotimes","doto","double","double-array","double?","doubles","drop","drop-last","drop-while","eduction","empty","empty?","ensure","ensure-reduced","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-data","ex-info","extend","extend-protocol","extend-type","extenders","extends?","false?","ffirst","file-seq","filter","filterv","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn","fn?","fnext","fnil","for","force","format","frequencies","future","future-call","future-cancel","future-cancelled?","future-done?","future?","gen-class","gen-interface","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","halt-when","hash","hash-combine","hash-map","hash-ordered-coll","hash-set","hash-unordered-coll","ident?","identical?","identity","if-let","if-not","if-some","ifn?","import","in-ns","inc","inc'","indexed?","init-proxy","inst-ms","inst-ms*","inst?","instance?","int","int-array","int?","integer?","interleave","intern","interpose","into","into-array","ints","io!","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","lazy-cat","lazy-seq","let","letfn","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","locking","long","long-array","longs","loop","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-entry?","map-indexed","map?","mapcat","mapv","max","max-key","memfn","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mix-collection-hash","mod","munge","name","namespace","namespace-munge","nat-int?","neg-int?","neg?","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","or","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop","pop!","pop-thread-bindings","pos-int?","pos?","pr","pr-str","prefer-method","prefers","primitives-classnames","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy","proxy-call-with-super","proxy-mappings","proxy-name","proxy-super","push-thread-bindings","pvalues","qualified-ident?","qualified-keyword?","qualified-symbol?","quot","rand","rand-int","rand-nth","random-sample","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read-line","read-string","reader-conditional","reader-conditional?","realized?","record?","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","refer-clojure","reify","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-watch","repeat","repeatedly","replace","replicate","require","reset!","reset-meta!","reset-vals!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","run!","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seqable?","seque","sequence","sequential?","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","simple-ident?","simple-keyword?","simple-symbol?","slurp","some","some->","some->>","some-fn","some?","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","swap-vals!","symbol","symbol?","sync","tagged-literal","tagged-literal?","take","take-last","take-nth","take-while","test","the-ns","thread-bound?","time","to-array","to-array-2d","trampoline","transduce","transient","tree-seq","true?","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unquote","unquote-splicing","unreduced","unsigned-bit-shift-right","update","update-in","update-proxy","uri?","use","uuid?","val","vals","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","volatile!","volatile?","vreset!","vswap!","when","when-first","when-let","when-not","when-some","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn","xml-seq","zero?","zipmap"],o=y(r),i=y(a),c=y(s),d=y(["->","->>","as->","binding","bound-fn","case","catch","comment","cond","cond->","cond->>","condp","def","definterface","defmethod","defn","defmacro","defprotocol","defrecord","defstruct","deftype","do","doseq","dotimes","doto","extend","extend-protocol","extend-type","fn","for","future","if","if-let","if-not","if-some","let","letfn","locking","loop","ns","proxy","reify","struct-map","some->","some->>","try","when","when-first","when-let","when-not","when-some","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn"]),l=/^(?:[\\\[\]\s"(),;@^`{}~]|$)/,u=/^(?:[+\-]?\d+(?:(?:N|(?:[eE][+\-]?\d+))|(?:\.?\d*(?:M|(?:[eE][+\-]?\d+))?)|\/\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?(?=[\\\[\]\s"#'(),;@^`{}~]|$))/,p=/^(?:\\(?:backspace|formfeed|newline|return|space|tab|o[0-7]{3}|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{4}|.)?(?=[\\\[\]\s"(),;@^`{}~]|$))/,m=/^(?:(?:[^\\\/\[\]\d\s"#'(),;@^`{}~.][^\\\[\]\s"(),;@^`{}~.\/]*(?:\.[^\\\/\[\]\d\s"#'(),;@^`{}~.][^\\\[\]\s"(),;@^`{}~.\/]*)*\/)?(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*(?=[\\\[\]\s"(),;@^`{}~]|$))/;function f(e,t){if(e.eatSpace()||e.eat(","))return["space",null];if(e.match(u))return[null,"number"];if(e.match(p))return[null,"string.special"];if(e.eat(/^"/))return(t.tokenize=h)(e,t);if(e.eat(/^[(\[{]/))return["open","bracket"];if(e.eat(/^[)\]}]/))return["close","bracket"];if(e.eat(/^;/))return e.skipToEnd(),["space","comment"];if(e.eat(/^[#'@^`~]/))return[null,"meta"];var n=e.match(m),r=n&&n[0];return r?"comment"===r&&"("===t.lastToken?(t.tokenize=b)(e,t):k(r,o)||":"===r.charAt(0)?["symbol","atom"]:k(r,i)||k(r,c)?["symbol","keyword"]:"("===t.lastToken?["symbol","builtin"]:["symbol","variable"]:(e.next(),e.eatWhile((function(e){return!k(e,l)})),[null,"error"])}function h(e,t){for(var n,r=!1;n=e.next();){if('"'===n&&!r){t.tokenize=f;break}r=!r&&"\\"===n}return[null,"string"]}function b(e,t){for(var n,r=1;n=e.next();)if(")"===n&&r--,"("===n&&r++,0===r){e.backUp(1),t.tokenize=f;break}return["space","comment"]}function y(e){for(var t={},n=0;n\", \"->>\", \"->ArrayChunk\", \"->Eduction\", \"->Vec\", \"->VecNode\",\n \"->VecSeq\", \"-cache-protocol-fn\", \"-reset-methods\", \"..\", \"/\", \"<\", \"<=\",\n \"=\", \"==\", \">\", \">=\", \"EMPTY-NODE\", \"Inst\", \"StackTraceElement->vec\",\n \"Throwable->map\", \"accessor\", \"aclone\", \"add-classpath\", \"add-watch\",\n \"agent\", \"agent-error\", \"agent-errors\", \"aget\", \"alength\", \"alias\",\n \"all-ns\", \"alter\", \"alter-meta!\", \"alter-var-root\", \"amap\", \"ancestors\",\n \"and\", \"any?\", \"apply\", \"areduce\", \"array-map\", \"as->\", \"aset\",\n \"aset-boolean\", \"aset-byte\", \"aset-char\", \"aset-double\", \"aset-float\",\n \"aset-int\", \"aset-long\", \"aset-short\", \"assert\", \"assoc\", \"assoc!\",\n \"assoc-in\", \"associative?\", \"atom\", \"await\", \"await-for\", \"await1\",\n \"bases\", \"bean\", \"bigdec\", \"bigint\", \"biginteger\", \"binding\", \"bit-and\",\n \"bit-and-not\", \"bit-clear\", \"bit-flip\", \"bit-not\", \"bit-or\", \"bit-set\",\n \"bit-shift-left\", \"bit-shift-right\", \"bit-test\", \"bit-xor\", \"boolean\",\n \"boolean-array\", \"boolean?\", \"booleans\", \"bound-fn\", \"bound-fn*\",\n \"bound?\", \"bounded-count\", \"butlast\", \"byte\", \"byte-array\", \"bytes\",\n \"bytes?\", \"case\", \"cast\", \"cat\", \"char\", \"char-array\",\n \"char-escape-string\", \"char-name-string\", \"char?\", \"chars\", \"chunk\",\n \"chunk-append\", \"chunk-buffer\", \"chunk-cons\", \"chunk-first\", \"chunk-next\",\n \"chunk-rest\", \"chunked-seq?\", \"class\", \"class?\", \"clear-agent-errors\",\n \"clojure-version\", \"coll?\", \"comment\", \"commute\", \"comp\", \"comparator\",\n \"compare\", \"compare-and-set!\", \"compile\", \"complement\", \"completing\",\n \"concat\", \"cond\", \"cond->\", \"cond->>\", \"condp\", \"conj\", \"conj!\", \"cons\",\n \"constantly\", \"construct-proxy\", \"contains?\", \"count\", \"counted?\",\n \"create-ns\", \"create-struct\", \"cycle\", \"dec\", \"dec'\", \"decimal?\",\n \"declare\", \"dedupe\", \"default-data-readers\", \"definline\", \"definterface\",\n \"defmacro\", \"defmethod\", \"defmulti\", \"defn\", \"defn-\", \"defonce\",\n \"defprotocol\", \"defrecord\", \"defstruct\", \"deftype\", \"delay\", \"delay?\",\n \"deliver\", \"denominator\", \"deref\", \"derive\", \"descendants\", \"destructure\",\n \"disj\", \"disj!\", \"dissoc\", \"dissoc!\", \"distinct\", \"distinct?\", \"doall\",\n \"dorun\", \"doseq\", \"dosync\", \"dotimes\", \"doto\", \"double\", \"double-array\",\n \"double?\", \"doubles\", \"drop\", \"drop-last\", \"drop-while\", \"eduction\",\n \"empty\", \"empty?\", \"ensure\", \"ensure-reduced\", \"enumeration-seq\",\n \"error-handler\", \"error-mode\", \"eval\", \"even?\", \"every-pred\", \"every?\",\n \"ex-data\", \"ex-info\", \"extend\", \"extend-protocol\", \"extend-type\",\n \"extenders\", \"extends?\", \"false?\", \"ffirst\", \"file-seq\", \"filter\",\n \"filterv\", \"find\", \"find-keyword\", \"find-ns\", \"find-protocol-impl\",\n \"find-protocol-method\", \"find-var\", \"first\", \"flatten\", \"float\",\n \"float-array\", \"float?\", \"floats\", \"flush\", \"fn\", \"fn?\", \"fnext\", \"fnil\",\n \"for\", \"force\", \"format\", \"frequencies\", \"future\", \"future-call\",\n \"future-cancel\", \"future-cancelled?\", \"future-done?\", \"future?\",\n \"gen-class\", \"gen-interface\", \"gensym\", \"get\", \"get-in\", \"get-method\",\n \"get-proxy-class\", \"get-thread-bindings\", \"get-validator\", \"group-by\",\n \"halt-when\", \"hash\", \"hash-combine\", \"hash-map\", \"hash-ordered-coll\",\n \"hash-set\", \"hash-unordered-coll\", \"ident?\", \"identical?\", \"identity\",\n \"if-let\", \"if-not\", \"if-some\", \"ifn?\", \"import\", \"in-ns\", \"inc\", \"inc'\",\n \"indexed?\", \"init-proxy\", \"inst-ms\", \"inst-ms*\", \"inst?\", \"instance?\",\n \"int\", \"int-array\", \"int?\", \"integer?\", \"interleave\", \"intern\",\n \"interpose\", \"into\", \"into-array\", \"ints\", \"io!\", \"isa?\", \"iterate\",\n \"iterator-seq\", \"juxt\", \"keep\", \"keep-indexed\", \"key\", \"keys\", \"keyword\",\n \"keyword?\", \"last\", \"lazy-cat\", \"lazy-seq\", \"let\", \"letfn\", \"line-seq\",\n \"list\", \"list*\", \"list?\", \"load\", \"load-file\", \"load-reader\",\n \"load-string\", \"loaded-libs\", \"locking\", \"long\", \"long-array\", \"longs\",\n \"loop\", \"macroexpand\", \"macroexpand-1\", \"make-array\", \"make-hierarchy\",\n \"map\", \"map-entry?\", \"map-indexed\", \"map?\", \"mapcat\", \"mapv\", \"max\",\n \"max-key\", \"memfn\", \"memoize\", \"merge\", \"merge-with\", \"meta\",\n \"method-sig\", \"methods\", \"min\", \"min-key\", \"mix-collection-hash\", \"mod\",\n \"munge\", \"name\", \"namespace\", \"namespace-munge\", \"nat-int?\", \"neg-int?\",\n \"neg?\", \"newline\", \"next\", \"nfirst\", \"nil?\", \"nnext\", \"not\", \"not-any?\",\n \"not-empty\", \"not-every?\", \"not=\", \"ns\", \"ns-aliases\", \"ns-imports\",\n \"ns-interns\", \"ns-map\", \"ns-name\", \"ns-publics\", \"ns-refers\",\n \"ns-resolve\", \"ns-unalias\", \"ns-unmap\", \"nth\", \"nthnext\", \"nthrest\",\n \"num\", \"number?\", \"numerator\", \"object-array\", \"odd?\", \"or\", \"parents\",\n \"partial\", \"partition\", \"partition-all\", \"partition-by\", \"pcalls\", \"peek\",\n \"persistent!\", \"pmap\", \"pop\", \"pop!\", \"pop-thread-bindings\", \"pos-int?\",\n \"pos?\", \"pr\", \"pr-str\", \"prefer-method\", \"prefers\",\n \"primitives-classnames\", \"print\", \"print-ctor\", \"print-dup\",\n \"print-method\", \"print-simple\", \"print-str\", \"printf\", \"println\",\n \"println-str\", \"prn\", \"prn-str\", \"promise\", \"proxy\",\n \"proxy-call-with-super\", \"proxy-mappings\", \"proxy-name\", \"proxy-super\",\n \"push-thread-bindings\", \"pvalues\", \"qualified-ident?\",\n \"qualified-keyword?\", \"qualified-symbol?\", \"quot\", \"rand\", \"rand-int\",\n \"rand-nth\", \"random-sample\", \"range\", \"ratio?\", \"rational?\",\n \"rationalize\", \"re-find\", \"re-groups\", \"re-matcher\", \"re-matches\",\n \"re-pattern\", \"re-seq\", \"read\", \"read-line\", \"read-string\",\n \"reader-conditional\", \"reader-conditional?\", \"realized?\", \"record?\",\n \"reduce\", \"reduce-kv\", \"reduced\", \"reduced?\", \"reductions\", \"ref\",\n \"ref-history-count\", \"ref-max-history\", \"ref-min-history\", \"ref-set\",\n \"refer\", \"refer-clojure\", \"reify\", \"release-pending-sends\", \"rem\",\n \"remove\", \"remove-all-methods\", \"remove-method\", \"remove-ns\",\n \"remove-watch\", \"repeat\", \"repeatedly\", \"replace\", \"replicate\", \"require\",\n \"reset!\", \"reset-meta!\", \"reset-vals!\", \"resolve\", \"rest\",\n \"restart-agent\", \"resultset-seq\", \"reverse\", \"reversible?\", \"rseq\",\n \"rsubseq\", \"run!\", \"satisfies?\", \"second\", \"select-keys\", \"send\",\n \"send-off\", \"send-via\", \"seq\", \"seq?\", \"seqable?\", \"seque\", \"sequence\",\n \"sequential?\", \"set\", \"set-agent-send-executor!\",\n \"set-agent-send-off-executor!\", \"set-error-handler!\", \"set-error-mode!\",\n \"set-validator!\", \"set?\", \"short\", \"short-array\", \"shorts\", \"shuffle\",\n \"shutdown-agents\", \"simple-ident?\", \"simple-keyword?\", \"simple-symbol?\",\n \"slurp\", \"some\", \"some->\", \"some->>\", \"some-fn\", \"some?\", \"sort\",\n \"sort-by\", \"sorted-map\", \"sorted-map-by\", \"sorted-set\", \"sorted-set-by\",\n \"sorted?\", \"special-symbol?\", \"spit\", \"split-at\", \"split-with\", \"str\",\n \"string?\", \"struct\", \"struct-map\", \"subs\", \"subseq\", \"subvec\", \"supers\",\n \"swap!\", \"swap-vals!\", \"symbol\", \"symbol?\", \"sync\", \"tagged-literal\",\n \"tagged-literal?\", \"take\", \"take-last\", \"take-nth\", \"take-while\", \"test\",\n \"the-ns\", \"thread-bound?\", \"time\", \"to-array\", \"to-array-2d\",\n \"trampoline\", \"transduce\", \"transient\", \"tree-seq\", \"true?\", \"type\",\n \"unchecked-add\", \"unchecked-add-int\", \"unchecked-byte\", \"unchecked-char\",\n \"unchecked-dec\", \"unchecked-dec-int\", \"unchecked-divide-int\",\n \"unchecked-double\", \"unchecked-float\", \"unchecked-inc\",\n \"unchecked-inc-int\", \"unchecked-int\", \"unchecked-long\",\n \"unchecked-multiply\", \"unchecked-multiply-int\", \"unchecked-negate\",\n \"unchecked-negate-int\", \"unchecked-remainder-int\", \"unchecked-short\",\n \"unchecked-subtract\", \"unchecked-subtract-int\", \"underive\", \"unquote\",\n \"unquote-splicing\", \"unreduced\", \"unsigned-bit-shift-right\", \"update\",\n \"update-in\", \"update-proxy\", \"uri?\", \"use\", \"uuid?\", \"val\", \"vals\",\n \"var-get\", \"var-set\", \"var?\", \"vary-meta\", \"vec\", \"vector\", \"vector-of\",\n \"vector?\", \"volatile!\", \"volatile?\", \"vreset!\", \"vswap!\", \"when\",\n \"when-first\", \"when-let\", \"when-not\", \"when-some\", \"while\",\n \"with-bindings\", \"with-bindings*\", \"with-in-str\", \"with-loading-context\",\n \"with-local-vars\", \"with-meta\", \"with-open\", \"with-out-str\",\n \"with-precision\", \"with-redefs\", \"with-redefs-fn\", \"xml-seq\", \"zero?\",\n \"zipmap\"];\nvar haveBodyParameter = [\n \"->\", \"->>\", \"as->\", \"binding\", \"bound-fn\", \"case\", \"catch\", \"comment\",\n \"cond\", \"cond->\", \"cond->>\", \"condp\", \"def\", \"definterface\", \"defmethod\",\n \"defn\", \"defmacro\", \"defprotocol\", \"defrecord\", \"defstruct\", \"deftype\",\n \"do\", \"doseq\", \"dotimes\", \"doto\", \"extend\", \"extend-protocol\",\n \"extend-type\", \"fn\", \"for\", \"future\", \"if\", \"if-let\", \"if-not\", \"if-some\",\n \"let\", \"letfn\", \"locking\", \"loop\", \"ns\", \"proxy\", \"reify\", \"struct-map\",\n \"some->\", \"some->>\", \"try\", \"when\", \"when-first\", \"when-let\", \"when-not\",\n \"when-some\", \"while\", \"with-bindings\", \"with-bindings*\", \"with-in-str\",\n \"with-loading-context\", \"with-local-vars\", \"with-meta\", \"with-open\",\n \"with-out-str\", \"with-precision\", \"with-redefs\", \"with-redefs-fn\"];\n\nvar atom = createLookupMap(atoms);\nvar specialForm = createLookupMap(specialForms);\nvar coreSymbol = createLookupMap(coreSymbols);\nvar hasBodyParameter = createLookupMap(haveBodyParameter);\nvar delimiter = /^(?:[\\\\\\[\\]\\s\"(),;@^`{}~]|$)/;\nvar numberLiteral = /^(?:[+\\-]?\\d+(?:(?:N|(?:[eE][+\\-]?\\d+))|(?:\\.?\\d*(?:M|(?:[eE][+\\-]?\\d+))?)|\\/\\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?(?=[\\\\\\[\\]\\s\"#'(),;@^`{}~]|$))/;\nvar characterLiteral = /^(?:\\\\(?:backspace|formfeed|newline|return|space|tab|o[0-7]{3}|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{4}|.)?(?=[\\\\\\[\\]\\s\"(),;@^`{}~]|$))/;\n\n// simple-namespace := /^[^\\\\\\/\\[\\]\\d\\s\"#'(),;@^`{}~.][^\\\\\\[\\]\\s\"(),;@^`{}~.\\/]*/\n// simple-symbol := /^(?:\\/|[^\\\\\\/\\[\\]\\d\\s\"#'(),;@^`{}~][^\\\\\\[\\]\\s\"(),;@^`{}~]*)/\n// qualified-symbol := ((<.>)*)?\nvar qualifiedSymbol = /^(?:(?:[^\\\\\\/\\[\\]\\d\\s\"#'(),;@^`{}~.][^\\\\\\[\\]\\s\"(),;@^`{}~.\\/]*(?:\\.[^\\\\\\/\\[\\]\\d\\s\"#'(),;@^`{}~.][^\\\\\\[\\]\\s\"(),;@^`{}~.\\/]*)*\\/)?(?:\\/|[^\\\\\\/\\[\\]\\d\\s\"#'(),;@^`{}~][^\\\\\\[\\]\\s\"(),;@^`{}~]*)*(?=[\\\\\\[\\]\\s\"(),;@^`{}~]|$))/;\n\nfunction base(stream, state) {\n if (stream.eatSpace() || stream.eat(\",\")) return [\"space\", null];\n if (stream.match(numberLiteral)) return [null, \"number\"];\n if (stream.match(characterLiteral)) return [null, \"string.special\"];\n if (stream.eat(/^\"/)) return (state.tokenize = inString)(stream, state);\n if (stream.eat(/^[(\\[{]/)) return [\"open\", \"bracket\"];\n if (stream.eat(/^[)\\]}]/)) return [\"close\", \"bracket\"];\n if (stream.eat(/^;/)) {stream.skipToEnd(); return [\"space\", \"comment\"];}\n if (stream.eat(/^[#'@^`~]/)) return [null, \"meta\"];\n\n var matches = stream.match(qualifiedSymbol);\n var symbol = matches && matches[0];\n\n if (!symbol) {\n // advance stream by at least one character so we don't get stuck.\n stream.next();\n stream.eatWhile(function (c) {return !is(c, delimiter);});\n return [null, \"error\"];\n }\n\n if (symbol === \"comment\" && state.lastToken === \"(\")\n return (state.tokenize = inComment)(stream, state);\n if (is(symbol, atom) || symbol.charAt(0) === \":\") return [\"symbol\", \"atom\"];\n if (is(symbol, specialForm) || is(symbol, coreSymbol)) return [\"symbol\", \"keyword\"];\n if (state.lastToken === \"(\") return [\"symbol\", \"builtin\"]; // other operator\n\n return [\"symbol\", \"variable\"];\n}\n\nfunction inString(stream, state) {\n var escaped = false, next;\n\n while (next = stream.next()) {\n if (next === \"\\\"\" && !escaped) {state.tokenize = base; break;}\n escaped = !escaped && next === \"\\\\\";\n }\n\n return [null, \"string\"];\n}\n\nfunction inComment(stream, state) {\n var parenthesisCount = 1;\n var next;\n\n while (next = stream.next()) {\n if (next === \")\") parenthesisCount--;\n if (next === \"(\") parenthesisCount++;\n if (parenthesisCount === 0) {\n stream.backUp(1);\n state.tokenize = base;\n break;\n }\n }\n\n return [\"space\", \"comment\"];\n}\n\nfunction createLookupMap(words) {\n var obj = {};\n\n for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n\n return obj;\n}\n\nfunction is(value, test) {\n if (test instanceof RegExp) return test.test(value);\n if (test instanceof Object) return test.propertyIsEnumerable(value);\n}\n\nexport const clojure = {\n name: \"clojure\",\n startState: function () {\n return {\n ctx: {prev: null, start: 0, indentTo: 0},\n lastToken: null,\n tokenize: base\n };\n },\n\n token: function (stream, state) {\n if (stream.sol() && (typeof state.ctx.indentTo !== \"number\"))\n state.ctx.indentTo = state.ctx.start + 1;\n\n var typeStylePair = state.tokenize(stream, state);\n var type = typeStylePair[0];\n var style = typeStylePair[1];\n var current = stream.current();\n\n if (type !== \"space\") {\n if (state.lastToken === \"(\" && state.ctx.indentTo === null) {\n if (type === \"symbol\" && is(current, hasBodyParameter))\n state.ctx.indentTo = state.ctx.start + stream.indentUnit;\n else state.ctx.indentTo = \"next\";\n } else if (state.ctx.indentTo === \"next\") {\n state.ctx.indentTo = stream.column();\n }\n\n state.lastToken = current;\n }\n\n if (type === \"open\")\n state.ctx = {prev: state.ctx, start: stream.column(), indentTo: null};\n else if (type === \"close\") state.ctx = state.ctx.prev || state.ctx;\n\n return style;\n },\n\n indent: function (state) {\n var i = state.ctx.indentTo;\n\n return (typeof i === \"number\") ?\n i :\n state.ctx.start + 1;\n },\n\n languageData: {\n closeBrackets: {brackets: [\"(\", \"[\", \"{\", '\"']},\n commentTokens: {line: \";;\"},\n autocomplete: [].concat(atoms, specialForms, coreSymbols)\n }\n};\n"],"names":["atoms","specialForms","coreSymbols","atom","createLookupMap","specialForm","coreSymbol","hasBodyParameter","delimiter","numberLiteral","characterLiteral","qualifiedSymbol","base","stream","state","eatSpace","eat","match","tokenize","inString","skipToEnd","matches","symbol","lastToken","inComment","is","charAt","next","eatWhile","c","escaped","parenthesisCount","backUp","words","obj","i","length","value","test","RegExp","Object","propertyIsEnumerable","clojure","name","startState","ctx","prev","start","indentTo","token","sol","typeStylePair","type","style","current","indentUnit","column","indent","languageData","closeBrackets","brackets","commentTokens","line","autocomplete","concat"],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/js/975.7f1d8705.chunk.js b/media/assets/frontend/static/js/975.7f1d8705.chunk.js new file mode 100644 index 00000000000..2ad515c8f60 --- /dev/null +++ b/media/assets/frontend/static/js/975.7f1d8705.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkseahub_frontend=self.webpackChunkseahub_frontend||[]).push([[975],{19975:function(e,r,o){function t(e){var r={as:"keyword",do:"keyword",else:"keyword",end:"keyword",exception:"keyword",fun:"keyword",functor:"keyword",if:"keyword",in:"keyword",include:"keyword",let:"keyword",of:"keyword",open:"keyword",rec:"keyword",struct:"keyword",then:"keyword",type:"keyword",val:"keyword",while:"keyword",with:"keyword"},o=e.extraWords||{};for(var t in o)o.hasOwnProperty(t)&&(r[t]=e.extraWords[t]);var n=[];for(var i in r)n.push(i);function d(o,t){var n=o.next();if('"'===n)return t.tokenize=k,t.tokenize(o,t);if("{"===n&&o.eat("|"))return t.longString=!0,t.tokenize=y,t.tokenize(o,t);if("("===n&&o.match(/^\*(?!\))/))return t.commentLevel++,t.tokenize=w,t.tokenize(o,t);if("~"===n||"?"===n)return o.eatWhile(/\w/),"variableName.special";if("`"===n)return o.eatWhile(/\w/),"quote";if("/"===n&&e.slashComments&&o.eat("/"))return o.skipToEnd(),"comment";if(/\d/.test(n))return"0"===n&&o.eat(/[bB]/)&&o.eatWhile(/[01]/),"0"===n&&o.eat(/[xX]/)&&o.eatWhile(/[0-9a-fA-F]/),"0"===n&&o.eat(/[oO]/)?o.eatWhile(/[0-7]/):(o.eatWhile(/[\d_]/),o.eat(".")&&o.eatWhile(/[\d]/),o.eat(/[eE]/)&&o.eatWhile(/[\d\-+]/)),"number";if(/[+\-*&%=<>!?|@\.~:]/.test(n))return"operator";if(/[\w\xa1-\uffff]/.test(n)){o.eatWhile(/[\w\xa1-\uffff]/);var i=o.current();return r.hasOwnProperty(i)?r[i]:"variable"}return null}function k(e,r){for(var o,t=!1,n=!1;null!=(o=e.next());){if('"'===o&&!n){t=!0;break}n=!n&&"\\"===o}return t&&!n&&(r.tokenize=d),"string"}function w(e,r){for(var o,t;r.commentLevel>0&&null!=(t=e.next());)"("===o&&"*"===t&&r.commentLevel++,"*"===o&&")"===t&&r.commentLevel--,o=t;return r.commentLevel<=0&&(r.tokenize=d),"comment"}function y(e,r){for(var o,t;r.longString&&null!=(t=e.next());)"|"===o&&"}"===t&&(r.longString=!1),o=t;return r.longString||(r.tokenize=d),"string"}return{startState:function(){return{tokenize:d,commentLevel:0,longString:!1}},token:function(e,r){return e.eatSpace()?null:r.tokenize(e,r)},languageData:{autocomplete:n,commentTokens:{line:e.slashComments?"//":void 0,block:{open:"(*",close:"*)"}}}}}o.r(r),o.d(r,{fSharp:function(){return i},oCaml:function(){return n},sml:function(){return d}});var n=t({name:"ocaml",extraWords:{and:"keyword",assert:"keyword",begin:"keyword",class:"keyword",constraint:"keyword",done:"keyword",downto:"keyword",external:"keyword",function:"keyword",initializer:"keyword",lazy:"keyword",match:"keyword",method:"keyword",module:"keyword",mutable:"keyword",new:"keyword",nonrec:"keyword",object:"keyword",private:"keyword",sig:"keyword",to:"keyword",try:"keyword",value:"keyword",virtual:"keyword",when:"keyword",raise:"builtin",failwith:"builtin",true:"builtin",false:"builtin",asr:"builtin",land:"builtin",lor:"builtin",lsl:"builtin",lsr:"builtin",lxor:"builtin",mod:"builtin",or:"builtin",raise_notrace:"builtin",trace:"builtin",exit:"builtin",print_string:"builtin",print_endline:"builtin",int:"type",float:"type",bool:"type",char:"type",string:"type",unit:"type",List:"builtin"}}),i=t({name:"fsharp",extraWords:{abstract:"keyword",assert:"keyword",base:"keyword",begin:"keyword",class:"keyword",default:"keyword",delegate:"keyword","do!":"keyword",done:"keyword",downcast:"keyword",downto:"keyword",elif:"keyword",extern:"keyword",finally:"keyword",for:"keyword",function:"keyword",global:"keyword",inherit:"keyword",inline:"keyword",interface:"keyword",internal:"keyword",lazy:"keyword","let!":"keyword",match:"keyword",member:"keyword",module:"keyword",mutable:"keyword",namespace:"keyword",new:"keyword",null:"keyword",override:"keyword",private:"keyword",public:"keyword","return!":"keyword",return:"keyword",select:"keyword",static:"keyword",to:"keyword",try:"keyword",upcast:"keyword","use!":"keyword",use:"keyword",void:"keyword",when:"keyword","yield!":"keyword",yield:"keyword",atomic:"keyword",break:"keyword",checked:"keyword",component:"keyword",const:"keyword",constraint:"keyword",constructor:"keyword",continue:"keyword",eager:"keyword",event:"keyword",external:"keyword",fixed:"keyword",method:"keyword",mixin:"keyword",object:"keyword",parallel:"keyword",process:"keyword",protected:"keyword",pure:"keyword",sealed:"keyword",tailcall:"keyword",trait:"keyword",virtual:"keyword",volatile:"keyword",List:"builtin",Seq:"builtin",Map:"builtin",Set:"builtin",Option:"builtin",int:"builtin",string:"builtin",not:"builtin",true:"builtin",false:"builtin",raise:"builtin",failwith:"builtin"},slashComments:!0}),d=t({name:"sml",extraWords:{abstype:"keyword",and:"keyword",andalso:"keyword",case:"keyword",datatype:"keyword",fn:"keyword",handle:"keyword",infix:"keyword",infixr:"keyword",local:"keyword",nonfix:"keyword",op:"keyword",orelse:"keyword",raise:"keyword",withtype:"keyword",eqtype:"keyword",sharing:"keyword",sig:"keyword",signature:"keyword",structure:"keyword",where:"keyword",true:"keyword",false:"keyword",int:"builtin",real:"builtin",string:"builtin",char:"builtin",bool:"builtin"},slashComments:!0})}}]); +//# sourceMappingURL=975.7f1d8705.chunk.js.map \ No newline at end of file diff --git a/media/assets/frontend/static/js/975.7f1d8705.chunk.js.map b/media/assets/frontend/static/js/975.7f1d8705.chunk.js.map new file mode 100644 index 00000000000..9a3a8356067 --- /dev/null +++ b/media/assets/frontend/static/js/975.7f1d8705.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/975.7f1d8705.chunk.js","mappings":"wHAAA,SAASA,EAAOC,GACd,IAAIC,EAAQ,CACV,GAAM,UACN,GAAM,UACN,KAAQ,UACR,IAAO,UACP,UAAa,UACb,IAAO,UACP,QAAW,UACX,GAAM,UACN,GAAM,UACN,QAAW,UACX,IAAO,UACP,GAAM,UACN,KAAQ,UACR,IAAO,UACP,OAAU,UACV,KAAQ,UACR,KAAQ,UACR,IAAO,UACP,MAAS,UACT,KAAQ,WAGNC,EAAaF,EAAaE,YAAc,CAAC,EAC7C,IAAK,IAAIC,KAAQD,EACXA,EAAWE,eAAeD,KAC5BF,EAAME,GAAQH,EAAaE,WAAWC,IAG1C,IAAIE,EAAY,GAChB,IAAK,IAAIC,KAAKL,EAASI,EAAUE,KAAKD,GAEtC,SAASE,EAAUC,EAAQC,GACzB,IAAIC,EAAKF,EAAOG,OAEhB,GAAW,MAAPD,EAEF,OADAD,EAAMG,SAAWC,EACVJ,EAAMG,SAASJ,EAAQC,GAEhC,GAAW,MAAPC,GACEF,EAAOM,IAAI,KAGb,OAFAL,EAAMM,YAAa,EACnBN,EAAMG,SAAWI,EACVP,EAAMG,SAASJ,EAAQC,GAGlC,GAAW,MAAPC,GACEF,EAAOS,MAAM,aAGf,OAFAR,EAAMS,eACNT,EAAMG,SAAWO,EACVV,EAAMG,SAASJ,EAAQC,GAGlC,GAAW,MAAPC,GAAqB,MAAPA,EAEhB,OADAF,EAAOY,SAAS,MACT,uBAET,GAAW,MAAPV,EAEF,OADAF,EAAOY,SAAS,MACT,QAET,GAAW,MAAPV,GAAcX,EAAasB,eAAiBb,EAAOM,IAAI,KAEzD,OADAN,EAAOc,YACA,UAET,GAAI,KAAKC,KAAKb,GAgBZ,MAfW,MAAPA,GAAcF,EAAOM,IAAI,SAC3BN,EAAOY,SAAS,QACL,MAAPV,GAAcF,EAAOM,IAAI,SAC7BN,EAAOY,SAAS,eACL,MAAPV,GAAcF,EAAOM,IAAI,QAC7BN,EAAOY,SAAS,UAEhBZ,EAAOY,SAAS,SACZZ,EAAOM,IAAI,MACbN,EAAOY,SAAS,QAEdZ,EAAOM,IAAI,SACbN,EAAOY,SAAS,YAGb,SAET,GAAK,sBAAsBG,KAAKb,GAC9B,MAAO,WAET,GAAI,kBAAkBa,KAAKb,GAAK,CAC9BF,EAAOY,SAAS,mBAChB,IAAII,EAAMhB,EAAOiB,UACjB,OAAOzB,EAAMG,eAAeqB,GAAOxB,EAAMwB,GAAO,UAClD,CACA,OAAO,IACT,CAEA,SAASX,EAAYL,EAAQC,GAE3B,IADA,IAAIE,EAAMe,GAAM,EAAOC,GAAU,EACA,OAAzBhB,EAAOH,EAAOG,SAAiB,CACrC,GAAa,MAATA,IAAiBgB,EAAS,CAC5BD,GAAM,EACN,KACF,CACAC,GAAWA,GAAoB,OAAThB,CACxB,CAIA,OAHIe,IAAQC,IACVlB,EAAMG,SAAWL,GAEZ,QACT,CAEA,SAASY,EAAaX,EAAQC,GAE5B,IADA,IAAImB,EAAMjB,EACJF,EAAMS,aAAe,GAA+B,OAAzBP,EAAOH,EAAOG,SAChC,MAATiB,GAAyB,MAATjB,GAAcF,EAAMS,eAC3B,MAATU,GAAyB,MAATjB,GAAcF,EAAMS,eACxCU,EAAOjB,EAKT,OAHIF,EAAMS,cAAgB,IACxBT,EAAMG,SAAWL,GAEZ,SACT,CAEA,SAASS,EAAgBR,EAAQC,GAE/B,IADA,IAAImB,EAAMjB,EACHF,EAAMM,YAAwC,OAAzBJ,EAAOH,EAAOG,SAC3B,MAATiB,GAAyB,MAATjB,IAAcF,EAAMM,YAAa,GACrDa,EAAOjB,EAKT,OAHKF,EAAMM,aACTN,EAAMG,SAAWL,GAEZ,QACT,CAEA,MAAO,CACLsB,WAAY,WAAY,MAAO,CAACjB,SAAUL,EAAWW,aAAc,EAAGH,YAAY,EAAO,EACzFe,MAAO,SAAStB,EAAQC,GACtB,OAAID,EAAOuB,WAAmB,KACvBtB,EAAMG,SAASJ,EAAQC,EAChC,EAEAuB,aAAc,CACZC,aAAc7B,EACd8B,cAAe,CACbC,KAAMpC,EAAasB,cAAgB,UAAOe,EAC1CC,MAAO,CAACC,KAAM,KAAMC,MAAO,QAInC,C,gGAEO,IAAMC,EAAQ1C,EAAO,CAC1B2C,KAAM,QACNxC,WAAY,CACV,IAAO,UACP,OAAU,UACV,MAAS,UACT,MAAS,UACT,WAAc,UACd,KAAQ,UACR,OAAU,UACV,SAAY,UACZ,SAAY,UACZ,YAAe,UACf,KAAQ,UACR,MAAS,UACT,OAAU,UACV,OAAU,UACV,QAAW,UACX,IAAO,UACP,OAAU,UACV,OAAU,UACV,QAAW,UACX,IAAO,UACP,GAAM,UACN,IAAO,UACP,MAAS,UACT,QAAW,UACX,KAAQ,UAGR,MAAS,UACT,SAAY,UACZ,KAAQ,UACR,MAAS,UAGT,IAAO,UACP,KAAQ,UACR,IAAO,UACP,IAAO,UACP,IAAO,UACP,KAAQ,UACR,IAAO,UACP,GAAM,UAGN,cAAiB,UACjB,MAAS,UACT,KAAQ,UACR,aAAgB,UAChB,cAAiB,UAEhB,IAAO,OACP,MAAS,OACT,KAAQ,OACR,KAAQ,OACR,OAAU,OACV,KAAQ,OAGR,KAAQ,aAIAyC,EAAS5C,EAAO,CAC3B2C,KAAM,SACNxC,WAAY,CACV,SAAY,UACZ,OAAU,UACV,KAAQ,UACR,MAAS,UACT,MAAS,UACT,QAAW,UACX,SAAY,UACZ,MAAO,UACP,KAAQ,UACR,SAAY,UACZ,OAAU,UACV,KAAQ,UACR,OAAU,UACV,QAAW,UACX,IAAO,UACP,SAAY,UACZ,OAAU,UACV,QAAW,UACX,OAAU,UACV,UAAa,UACb,SAAY,UACZ,KAAQ,UACR,OAAQ,UACR,MAAS,UACT,OAAU,UACV,OAAU,UACV,QAAW,UACX,UAAa,UACb,IAAO,UACP,KAAQ,UACR,SAAY,UACZ,QAAW,UACX,OAAU,UACV,UAAW,UACX,OAAU,UACV,OAAU,UACV,OAAU,UACV,GAAM,UACN,IAAO,UACP,OAAU,UACV,OAAQ,UACR,IAAO,UACP,KAAQ,UACR,KAAQ,UACR,SAAU,UACV,MAAS,UAGT,OAAU,UACV,MAAS,UACT,QAAW,UACX,UAAa,UACb,MAAS,UACT,WAAc,UACd,YAAe,UACf,SAAY,UACZ,MAAS,UACT,MAAS,UACT,SAAY,UACZ,MAAS,UACT,OAAU,UACV,MAAS,UACT,OAAU,UACV,SAAY,UACZ,QAAW,UACX,UAAa,UACb,KAAQ,UACR,OAAU,UACV,SAAY,UACZ,MAAS,UACT,QAAW,UACX,SAAY,UAGZ,KAAQ,UACR,IAAO,UACP,IAAO,UACP,IAAO,UACP,OAAU,UACV,IAAO,UACP,OAAU,UACV,IAAO,UACP,KAAQ,UACR,MAAS,UAET,MAAS,UACT,SAAY,WAEdoB,eAAe,IAGJsB,EAAM7C,EAAO,CACxB2C,KAAM,MACNxC,WAAY,CACV,QAAW,UACX,IAAO,UACP,QAAW,UACX,KAAQ,UACR,SAAY,UACZ,GAAM,UACN,OAAU,UACV,MAAS,UACT,OAAU,UACV,MAAS,UACT,OAAU,UACV,GAAM,UACN,OAAU,UACV,MAAS,UACT,SAAY,UACZ,OAAU,UACV,QAAW,UACX,IAAO,UACP,UAAa,UACb,UAAa,UACb,MAAS,UACT,KAAQ,UACR,MAAS,UAGT,IAAO,UACP,KAAQ,UACR,OAAU,UACV,KAAQ,UACR,KAAQ,WAEVoB,eAAe,G","sources":["../node_modules/@codemirror/legacy-modes/mode/mllike.js"],"sourcesContent":["function mlLike(parserConfig) {\n var words = {\n 'as': 'keyword',\n 'do': 'keyword',\n 'else': 'keyword',\n 'end': 'keyword',\n 'exception': 'keyword',\n 'fun': 'keyword',\n 'functor': 'keyword',\n 'if': 'keyword',\n 'in': 'keyword',\n 'include': 'keyword',\n 'let': 'keyword',\n 'of': 'keyword',\n 'open': 'keyword',\n 'rec': 'keyword',\n 'struct': 'keyword',\n 'then': 'keyword',\n 'type': 'keyword',\n 'val': 'keyword',\n 'while': 'keyword',\n 'with': 'keyword'\n };\n\n var extraWords = parserConfig.extraWords || {};\n for (var prop in extraWords) {\n if (extraWords.hasOwnProperty(prop)) {\n words[prop] = parserConfig.extraWords[prop];\n }\n }\n var hintWords = [];\n for (var k in words) { hintWords.push(k); }\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n\n if (ch === '\"') {\n state.tokenize = tokenString;\n return state.tokenize(stream, state);\n }\n if (ch === '{') {\n if (stream.eat('|')) {\n state.longString = true;\n state.tokenize = tokenLongString;\n return state.tokenize(stream, state);\n }\n }\n if (ch === '(') {\n if (stream.match(/^\\*(?!\\))/)) {\n state.commentLevel++;\n state.tokenize = tokenComment;\n return state.tokenize(stream, state);\n }\n }\n if (ch === '~' || ch === '?') {\n stream.eatWhile(/\\w/);\n return 'variableName.special';\n }\n if (ch === '`') {\n stream.eatWhile(/\\w/);\n return 'quote';\n }\n if (ch === '/' && parserConfig.slashComments && stream.eat('/')) {\n stream.skipToEnd();\n return 'comment';\n }\n if (/\\d/.test(ch)) {\n if (ch === '0' && stream.eat(/[bB]/)) {\n stream.eatWhile(/[01]/);\n } if (ch === '0' && stream.eat(/[xX]/)) {\n stream.eatWhile(/[0-9a-fA-F]/)\n } if (ch === '0' && stream.eat(/[oO]/)) {\n stream.eatWhile(/[0-7]/);\n } else {\n stream.eatWhile(/[\\d_]/);\n if (stream.eat('.')) {\n stream.eatWhile(/[\\d]/);\n }\n if (stream.eat(/[eE]/)) {\n stream.eatWhile(/[\\d\\-+]/);\n }\n }\n return 'number';\n }\n if ( /[+\\-*&%=<>!?|@\\.~:]/.test(ch)) {\n return 'operator';\n }\n if (/[\\w\\xa1-\\uffff]/.test(ch)) {\n stream.eatWhile(/[\\w\\xa1-\\uffff]/);\n var cur = stream.current();\n return words.hasOwnProperty(cur) ? words[cur] : 'variable';\n }\n return null\n }\n\n function tokenString(stream, state) {\n var next, end = false, escaped = false;\n while ((next = stream.next()) != null) {\n if (next === '\"' && !escaped) {\n end = true;\n break;\n }\n escaped = !escaped && next === '\\\\';\n }\n if (end && !escaped) {\n state.tokenize = tokenBase;\n }\n return 'string';\n };\n\n function tokenComment(stream, state) {\n var prev, next;\n while(state.commentLevel > 0 && (next = stream.next()) != null) {\n if (prev === '(' && next === '*') state.commentLevel++;\n if (prev === '*' && next === ')') state.commentLevel--;\n prev = next;\n }\n if (state.commentLevel <= 0) {\n state.tokenize = tokenBase;\n }\n return 'comment';\n }\n\n function tokenLongString(stream, state) {\n var prev, next;\n while (state.longString && (next = stream.next()) != null) {\n if (prev === '|' && next === '}') state.longString = false;\n prev = next;\n }\n if (!state.longString) {\n state.tokenize = tokenBase;\n }\n return 'string';\n }\n\n return {\n startState: function() {return {tokenize: tokenBase, commentLevel: 0, longString: false};},\n token: function(stream, state) {\n if (stream.eatSpace()) return null;\n return state.tokenize(stream, state);\n },\n\n languageData: {\n autocomplete: hintWords,\n commentTokens: {\n line: parserConfig.slashComments ? \"//\" : undefined,\n block: {open: \"(*\", close: \"*)\"}\n }\n }\n };\n};\n\nexport const oCaml = mlLike({\n name: \"ocaml\",\n extraWords: {\n 'and': 'keyword',\n 'assert': 'keyword',\n 'begin': 'keyword',\n 'class': 'keyword',\n 'constraint': 'keyword',\n 'done': 'keyword',\n 'downto': 'keyword',\n 'external': 'keyword',\n 'function': 'keyword',\n 'initializer': 'keyword',\n 'lazy': 'keyword',\n 'match': 'keyword',\n 'method': 'keyword',\n 'module': 'keyword',\n 'mutable': 'keyword',\n 'new': 'keyword',\n 'nonrec': 'keyword',\n 'object': 'keyword',\n 'private': 'keyword',\n 'sig': 'keyword',\n 'to': 'keyword',\n 'try': 'keyword',\n 'value': 'keyword',\n 'virtual': 'keyword',\n 'when': 'keyword',\n\n // builtins\n 'raise': 'builtin',\n 'failwith': 'builtin',\n 'true': 'builtin',\n 'false': 'builtin',\n\n // Pervasives builtins\n 'asr': 'builtin',\n 'land': 'builtin',\n 'lor': 'builtin',\n 'lsl': 'builtin',\n 'lsr': 'builtin',\n 'lxor': 'builtin',\n 'mod': 'builtin',\n 'or': 'builtin',\n\n // More Pervasives\n 'raise_notrace': 'builtin',\n 'trace': 'builtin',\n 'exit': 'builtin',\n 'print_string': 'builtin',\n 'print_endline': 'builtin',\n\n 'int': 'type',\n 'float': 'type',\n 'bool': 'type',\n 'char': 'type',\n 'string': 'type',\n 'unit': 'type',\n\n // Modules\n 'List': 'builtin'\n }\n});\n\nexport const fSharp = mlLike({\n name: \"fsharp\",\n extraWords: {\n 'abstract': 'keyword',\n 'assert': 'keyword',\n 'base': 'keyword',\n 'begin': 'keyword',\n 'class': 'keyword',\n 'default': 'keyword',\n 'delegate': 'keyword',\n 'do!': 'keyword',\n 'done': 'keyword',\n 'downcast': 'keyword',\n 'downto': 'keyword',\n 'elif': 'keyword',\n 'extern': 'keyword',\n 'finally': 'keyword',\n 'for': 'keyword',\n 'function': 'keyword',\n 'global': 'keyword',\n 'inherit': 'keyword',\n 'inline': 'keyword',\n 'interface': 'keyword',\n 'internal': 'keyword',\n 'lazy': 'keyword',\n 'let!': 'keyword',\n 'match': 'keyword',\n 'member': 'keyword',\n 'module': 'keyword',\n 'mutable': 'keyword',\n 'namespace': 'keyword',\n 'new': 'keyword',\n 'null': 'keyword',\n 'override': 'keyword',\n 'private': 'keyword',\n 'public': 'keyword',\n 'return!': 'keyword',\n 'return': 'keyword',\n 'select': 'keyword',\n 'static': 'keyword',\n 'to': 'keyword',\n 'try': 'keyword',\n 'upcast': 'keyword',\n 'use!': 'keyword',\n 'use': 'keyword',\n 'void': 'keyword',\n 'when': 'keyword',\n 'yield!': 'keyword',\n 'yield': 'keyword',\n\n // Reserved words\n 'atomic': 'keyword',\n 'break': 'keyword',\n 'checked': 'keyword',\n 'component': 'keyword',\n 'const': 'keyword',\n 'constraint': 'keyword',\n 'constructor': 'keyword',\n 'continue': 'keyword',\n 'eager': 'keyword',\n 'event': 'keyword',\n 'external': 'keyword',\n 'fixed': 'keyword',\n 'method': 'keyword',\n 'mixin': 'keyword',\n 'object': 'keyword',\n 'parallel': 'keyword',\n 'process': 'keyword',\n 'protected': 'keyword',\n 'pure': 'keyword',\n 'sealed': 'keyword',\n 'tailcall': 'keyword',\n 'trait': 'keyword',\n 'virtual': 'keyword',\n 'volatile': 'keyword',\n\n // builtins\n 'List': 'builtin',\n 'Seq': 'builtin',\n 'Map': 'builtin',\n 'Set': 'builtin',\n 'Option': 'builtin',\n 'int': 'builtin',\n 'string': 'builtin',\n 'not': 'builtin',\n 'true': 'builtin',\n 'false': 'builtin',\n\n 'raise': 'builtin',\n 'failwith': 'builtin'\n },\n slashComments: true\n});\n\nexport const sml = mlLike({\n name: \"sml\",\n extraWords: {\n 'abstype': 'keyword',\n 'and': 'keyword',\n 'andalso': 'keyword',\n 'case': 'keyword',\n 'datatype': 'keyword',\n 'fn': 'keyword',\n 'handle': 'keyword',\n 'infix': 'keyword',\n 'infixr': 'keyword',\n 'local': 'keyword',\n 'nonfix': 'keyword',\n 'op': 'keyword',\n 'orelse': 'keyword',\n 'raise': 'keyword',\n 'withtype': 'keyword',\n 'eqtype': 'keyword',\n 'sharing': 'keyword',\n 'sig': 'keyword',\n 'signature': 'keyword',\n 'structure': 'keyword',\n 'where': 'keyword',\n 'true': 'keyword',\n 'false': 'keyword',\n\n // types\n 'int': 'builtin',\n 'real': 'builtin',\n 'string': 'builtin',\n 'char': 'builtin',\n 'bool': 'builtin'\n },\n slashComments: true\n});\n"],"names":["mlLike","parserConfig","words","extraWords","prop","hasOwnProperty","hintWords","k","push","tokenBase","stream","state","ch","next","tokenize","tokenString","eat","longString","tokenLongString","match","commentLevel","tokenComment","eatWhile","slashComments","skipToEnd","test","cur","current","end","escaped","prev","startState","token","eatSpace","languageData","autocomplete","commentTokens","line","undefined","block","open","close","oCaml","name","fSharp","sml"],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/js/997.4e7b85c4.chunk.js b/media/assets/frontend/static/js/997.4e7b85c4.chunk.js new file mode 100644 index 00000000000..b44acf5d6d6 --- /dev/null +++ b/media/assets/frontend/static/js/997.4e7b85c4.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkseahub_frontend=self.webpackChunkseahub_frontend||[]).push([[997],{89997:function(e,t,T){function n(e){for(var t={},T=e.split(" "),n=0;n\n
\n \n \n
\n
\n
\n

\n
\n \n
\n
\n \n
\n
\n \n {gettext('Cancel')}\n
\n
\n
\n \n );\n }\n}\n\nReactDom.render(, document.getElementById('wrapper'));\n"],"names":["csrfToken","window","app","pageOptions","_window$tc","tc","termsName","formAction","formTerms","formReturnTo","logoutURL","termsText","TCAccept","_React$Component","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","value","_jsxs","className","children","_jsx","Logo","Account","dangerouslySetInnerHTML","__html","TermsPreviewWidget","content","action","method","type","name","Button","gettext","href","React","ReactDom","document","getElementById"],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/js/TCView.d87affdd.js b/media/assets/frontend/static/js/TCView.d87affdd.js new file mode 100644 index 00000000000..02762c61ff7 --- /dev/null +++ b/media/assets/frontend/static/js/TCView.d87affdd.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkseahub_frontend=self.webpackChunkseahub_frontend||[]).push([[90],{30507:function(e,n,t){var s=t(15671),r=t(43144),c=t(60136),a=t(29388),u=t(72791),i=t(54164),l=t(263),o=t(55516),d=t(60534),h=(t(94704),t(80184)),x=window.tc,f=x.termsName,m=x.termsText,j=function(e){(0,c.Z)(t,e);var n=(0,a.Z)(t);function t(){return(0,s.Z)(this,t),n.apply(this,arguments)}return(0,r.Z)(t,[{key:"render",value:function(){return(0,h.jsxs)("div",{className:"h-100 d-flex flex-column",children:[(0,h.jsxs)("div",{className:"top-header d-flex justify-content-between",children:[(0,h.jsx)(l.Z,{}),(0,h.jsx)(o.Z,{})]}),(0,h.jsx)("div",{className:"o-auto",children:(0,h.jsxs)("div",{className:"py-4 px-4 my-6 mx-auto content",children:[(0,h.jsx)("h2",{dangerouslySetInnerHTML:{__html:f}}),(0,h.jsx)("div",{className:"article",children:(0,h.jsx)(d.Z,{content:m})})]})})]})}}]),t}(u.Component);i.render((0,h.jsx)(j,{}),document.getElementById("wrapper"))},94704:function(){}},function(e){e.O(0,[351],(function(){return n=30507,e(e.s=n);var n}));e.O()}]); +//# sourceMappingURL=TCView.d87affdd.js.map \ No newline at end of file diff --git a/media/assets/frontend/static/js/TCView.d87affdd.js.map b/media/assets/frontend/static/js/TCView.d87affdd.js.map new file mode 100644 index 00000000000..2b000617afd --- /dev/null +++ b/media/assets/frontend/static/js/TCView.d87affdd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/TCView.d87affdd.js","mappings":"kPAQAA,EAGIC,OAAOC,GAFTC,EAASH,EAATG,UACAC,EAASJ,EAATI,UAGIC,EAAM,SAAAC,IAAAC,EAAAA,EAAAA,GAAAF,EAAAC,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAJ,GAAA,SAAAA,IAAA,OAAAK,EAAAA,EAAAA,GAAA,KAAAL,GAAAG,EAAAG,MAAA,KAAAC,UAAA,CAmBT,OAnBSC,EAAAA,EAAAA,GAAAR,EAAA,EAAAS,IAAA,SAAAC,MAEV,WACE,OACEC,EAAAA,EAAAA,MAAA,OAAKC,UAAU,2BAA0BC,SAAA,EACvCF,EAAAA,EAAAA,MAAA,OAAKC,UAAU,4CAA2CC,SAAA,EACxDC,EAAAA,EAAAA,KAACC,EAAAA,EAAI,KACLD,EAAAA,EAAAA,KAACE,EAAAA,EAAO,QAEVF,EAAAA,EAAAA,KAAA,OAAKF,UAAU,SAAQC,UACrBF,EAAAA,EAAAA,MAAA,OAAKC,UAAU,iCAAgCC,SAAA,EAC7CC,EAAAA,EAAAA,KAAA,MAAIG,wBAAyB,CAACC,OAAQpB,MACtCgB,EAAAA,EAAAA,KAAA,OAAKF,UAAU,UAASC,UACtBC,EAAAA,EAAAA,KAACK,EAAAA,EAAkB,CAACC,QAASrB,aAMzC,KAACC,CAAA,CAnBS,CAASqB,EAAAA,WAsBrBC,EAAAA,QAAgBR,EAAAA,EAAAA,KAACd,EAAM,IAAKuB,SAASC,eAAe,W","sources":["tc-view.js"],"sourcesContent":["import React from 'react';\nimport ReactDom from 'react-dom';\nimport Logo from './components/logo';\nimport Account from './components/common/account';\nimport TermsPreviewWidget from './components/terms-preview-widget';\n\nimport './css/tc-accept.css';\n\nconst {\n termsName,\n termsText\n} = window.tc;\n\nclass TCView extends React.Component {\n\n render() {\n return (\n
\n
\n \n \n
\n
\n
\n

\n
\n \n
\n
\n
\n
\n );\n }\n}\n\nReactDom.render(, document.getElementById('wrapper'));\n"],"names":["_window$tc","window","tc","termsName","termsText","TCView","_React$Component","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","value","_jsxs","className","children","_jsx","Logo","Account","dangerouslySetInnerHTML","__html","TermsPreviewWidget","content","React","ReactDom","document","getElementById"],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/js/app.54217b8e.js b/media/assets/frontend/static/js/app.54217b8e.js new file mode 100644 index 00000000000..735d695db1d --- /dev/null +++ b/media/assets/frontend/static/js/app.54217b8e.js @@ -0,0 +1,3 @@ +/*! For license information please see app.54217b8e.js.LICENSE.txt */ +(self.webpackChunkseahub_frontend=self.webpackChunkseahub_frontend||[]).push([[143],{7995:function(e,t,n){"use strict";var i=n(15671),s=n(43144),r=n(60136),o=n(29388),a=n(72791),l=n(54164),c=n(4918),h=n(24805),p=n.n(h),d=n(62298),u=n(53585),m=n(95996),g=n(80184),f=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).close=function(){if(s.setState({isClosed:!0}),navigator.cookieEnabled){var e=new Date,t=document.cookie.split("; "),n=!1,i=u.JR+"_";e.setTime(e.getTime()+12096e5),i+="; expires="+e.toGMTString()+"; path="+u.ze;for(var r=0,o=t.length;r ",p]});break;case"delete":e=(0,u.ih)("Deleted library"),t=s.repo_name;break;case"recover":e=(0,u.ih)("Restored library"),t=p;break;case"clean-up-trash":e=(0,u.ih)("Cleaned trash"),t=0==s.days?(0,u.ih)("Removed all items from trash."):(0,u.ih)("Removed items older than {n} days from trash.").replace("{n}",s.days),l=!0}else if("draft"==s.obj_type){var f="".concat(u.ze,"lib/").concat(s.repo_id,"/file").concat(m.c.encodePath(s.path)),v=(0,g.jsx)("a",{href:f,target:"_blank",rel:"noreferrer",children:s.name});e=(0,u.ih)("Publish draft"),t=v,l=!0}else if("files"==s.obj_type){var x="".concat(u.ze,"lib/").concat(s.repo_id,"/file").concat(m.c.encodePath(s.path));s.name.endsWith("(draft).md")&&(x=u.xx+"/drafts/"+s.draft_id+"/");var D="').concat(s.name,"");s.name.endsWith("(draft).md")&&!s.draft_id&&(D=s.name);var w=s.createdFilesCount-1,j=(0,u.ih)("{file} and {n} other files").replace("{file}",D).replace("{n}",w);e=(0,u.ih)("Created {n} files").replace("{n}",s.createdFilesCount),t=(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("p",{className:"m-0 d-inline",dangerouslySetInnerHTML:{__html:j}}),n&&(0,g.jsx)("button",{type:"button",onClick:this.onListCreatedFilesToggle,className:"activity-details text-secondary ml-2 border-0 p-0 bg-transparent",children:(0,u.ih)("details")})]}),l=!0}else if("file"==s.obj_type){var y=s.name.endsWith("(draft).md"),S=y?u.xx+"/drafts/"+s.draft_id+"/":"".concat(u.ze,"lib/").concat(s.repo_id,"/file").concat(m.c.encodePath(s.path)),b=(0,g.jsx)("a",{href:S,target:"_blank",rel:"noreferrer",children:s.name});switch(y&&!s.draft_id&&(b=s.name),s.op_type){case"create":e=y?(0,u.ih)("Created draft"):(0,u.ih)("Created file"),t=b,l=!0;break;case"delete":e=y?(0,u.ih)("Deleted draft"):(0,u.ih)("Deleted file"),t=s.name,l=!0;break;case"recover":e=(0,u.ih)("Restored file"),t=b,l=!0;break;case"rename":e=(0,u.ih)("Renamed file"),t=(0,g.jsxs)("span",{children:[s.old_name," => ",b]}),l=!0;break;case"move":var k=(0,g.jsx)("a",{href:S,children:s.path});e=(0,u.ih)("Moved file"),t=(0,g.jsxs)("span",{children:[s.old_path," => ",k]}),l=!0;break;case"edit":e=y?(0,u.ih)("Updated draft"):(0,u.ih)("Updated file"),t=b,l=!0}}else{var I=u.ze+"library/"+s.repo_id+"/"+encodeURIComponent(s.repo_name)+m.c.encodePath(s.path),N=(0,g.jsx)("a",{href:I,target:"_blank",rel:"noreferrer",children:s.name});switch(s.op_type){case"create":e=(0,u.ih)("Created folder"),t=N,l=!0;break;case"delete":e=(0,u.ih)("Deleted folder"),t=s.name,l=!0;break;case"recover":e=(0,u.ih)("Restored folder"),t=N,l=!0;break;case"rename":e=(0,u.ih)("Renamed folder"),t=(0,g.jsxs)("span",{children:[s.old_name," => ",N]}),l=!0;break;case"move":var M=(0,g.jsx)("a",{href:I,children:s.path});e=(0,u.ih)("Moved folder"),t=(0,g.jsxs)("span",{children:[s.old_path," => ",M]}),l=!0}}var Z=!0;if(r>0){var P=o[r-1].time;Z=!A()(s.time).isSame(P,"day")}return(0,g.jsxs)(a.Fragment,{children:[Z&&(0,g.jsx)("tr",{children:(0,g.jsx)("td",{colSpan:n?5:3,className:"border-top-0",children:A()(s.time).format("YYYY-MM-DD")})}),n?(0,g.jsxs)("tr",{children:[(0,g.jsx)("td",{className:"text-center",children:(0,g.jsx)("img",{src:s.avatar_url,alt:"",width:"32",height:"32",className:"avatar"})}),(0,g.jsx)("td",{children:(0,g.jsx)("a",{href:c,children:s.author_name})}),(0,g.jsx)("td",{children:e}),(0,g.jsxs)("td",{children:[t,l&&(0,g.jsx)("br",{}),l&&d]}),(0,g.jsx)("td",{className:"text-secondary",children:(0,g.jsx)("time",{datetime:s.time,is:"relative-time",title:A()(s.time).format("llll"),children:A()(s.time).fromNow()})})]}):(0,g.jsxs)("tr",{children:[(0,g.jsx)("td",{className:"text-center align-top",children:(0,g.jsx)("img",{src:s.avatar_url,alt:"",width:"32",height:"32",className:"avatar"})}),(0,g.jsxs)("td",{children:[(0,g.jsx)("a",{href:c,children:s.author_name}),(0,g.jsx)("p",{className:"m-0 text-secondary",children:e}),t]}),(0,g.jsxs)("td",{className:"text-right align-top",children:[(0,g.jsx)("span",{className:"text-secondary mobile-activity-time",children:(0,g.jsx)("time",{datetime:s.time,is:"relative-time",title:A()(s.time).format("llll"),children:A()(s.time).fromNow()})}),l&&(0,g.jsx)("br",{}),l&&p]})]}),this.state.isListCreatedFiles&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(te,{activity:s,toggleCancel:this.onListCreatedFilesToggle})})]})}}]),n}(a.Component);A().locale(window.app.config.lang);var ie=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=m.c.isDesktop(),t=this.props,n=t.items,i=t.isLoadingMore;if(!n.length)return(0,g.jsx)(O.Z,{children:(0,g.jsx)("p",{children:(0,u.ih)("No more activities")})});var s=(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"8%"}),(0,g.jsx)("th",{width:"15%",children:(0,u.ih)("User")}),(0,g.jsx)("th",{width:"20%",children:(0,u.ih)("Operation")}),(0,g.jsxs)("th",{width:"37%",children:[(0,u.ih)("File")," / ",(0,u.ih)("Library")]}),(0,g.jsx)("th",{width:"20%",children:(0,u.ih)("Time")})]})}),r=(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"15%"}),(0,g.jsx)("th",{width:"53%"}),(0,g.jsx)("th",{width:"32%"})]})});return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsxs)("table",{className:"table-hover table-thead-hidden",children:[e?s:r,(0,g.jsx)("tbody",{children:n.map((function(t,i){return(0,g.jsx)(ne,{isDesktop:e,item:t,index:i,items:n},i)}))})]}),i?(0,g.jsx)("span",{className:"loading-icon loading-tip"}):""]})}}]),n}(a.Component),se=ie,re=n(54555),oe=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).handleOutsideClick=function(e){s.state.isPopoverOpen&&!s.userSelector.contains(e.target)&&s.togglePopover()},s.togglePopover=function(){s.setState({isPopoverOpen:!s.state.isPopoverOpen},(function(){if(!s.state.isPopoverOpen){var e=s.props.availableUsers.filter((function(e){return e.isSelected}));s.props.setTargetUsers(e)}}))},s.onToggleClick=function(e){e.stopPropagation(),s.togglePopover()},s.onQueryChange=function(e){s.setState({query:e.target.value})},s.toggleSelectItem=function(e,t){e.stopPropagation(),s.props.toggleSelectUser(t)},s.state={isPopoverOpen:!1,query:""},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){document.addEventListener("click",this.handleOutsideClick)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.handleOutsideClick)}},{key:"render",value:function(){var e=this,t=this.state,n=t.isPopoverOpen,i=t.query,s=this.props,r=s.currentSelectedUsers,o=s.availableUsers,a=o.filter((function(e){return e.isSelected})),l=i.trim()?o.filter((function(e){return-1!=e.email.indexOf(i.trim())})):o;return(0,g.jsxs)("div",{className:"mt-4 position-relative",children:[(0,g.jsxs)("span",{className:"cur-activity-modifiers d-inline-block p-2 rounded",onClick:this.onToggleClick,children:[r.length>0?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)("span",{children:(0,u.ih)("Modified by:")}),(0,g.jsx)("span",{className:"d-inline-block ml-1",children:r.map((function(e){return e.name})).join(", ")})]}):(0,u.ih)("Modified by"),(0,g.jsx)("i",{className:"fas fa-caret-down ml-2 toggle-icon"})]}),n&&(0,g.jsxs)("div",{className:"position-absolute activity-modifier-selector-container rounded shadow",ref:function(t){return e.userSelector=t},children:[(0,g.jsx)("ul",{className:"activity-selected-modifiers px-3 py-1 list-unstyled",children:a.map((function(t,n){return(0,g.jsxs)("li",{className:"activity-selected-modifier",children:[(0,g.jsx)("img",{src:t.avatar_url,className:"avatar w-5 h-5",alt:""}),(0,g.jsx)("span",{className:"activity-user-name ml-2",children:t.name}),(0,g.jsx)("i",{className:"sf2-icon-close unselect-activity-user ml-2",onClick:function(n){e.toggleSelectItem(n,t)}})]},n)}))}),(0,g.jsx)("div",{className:"px-3 pt-3",children:(0,g.jsx)(re.Z,{type:"text",placeholder:(0,u.ih)("Search users"),value:i,onChange:this.onQueryChange})}),(0,g.jsx)("ul",{className:"activity-user-list list-unstyled p-3 o-auto",children:l.map((function(t,n){return(0,g.jsxs)("li",{className:"activity-user-item h-6 p-1 rounded d-flex justify-content-between align-items-center",onClick:function(n){e.toggleSelectItem(n,t)},children:[(0,g.jsxs)("div",{children:[(0,g.jsx)("img",{src:t.avatar_url,className:"avatar w-5 h-5",alt:""}),(0,g.jsx)("span",{className:"activity-user-name ml-2",children:t.name})]}),t.isSelected&&(0,g.jsx)("i",{className:"sf2-icon-tick text-gray font-weight-bold"})]},n)}))})]})]})}}]),n}(a.Component);A().locale(window.app.config.lang);var ae=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).mergePublishEvents=function(e){e.forEach((function(e){"publish"===e.op_type&&(s.curPathList.push(e.path),s.oldPathList.push(e.old_path))}));for(var t=[],n=0;n=n&&s.setState({isLoadingMore:!0},(function(){s.getMore()}))}},s.state={errorMsg:"",isFirstLoading:!0,isLoadingMore:!1,currentPage:1,hasMore:!0,allItems:[],items:[],availableUsers:[],targetUsers:[]},s.avatarSize=72,s.curPathList=[],s.oldPathList=[],s.availableUserEmails=new Set,s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=this.state,n=t.currentPage,i=t.availableUsers;w.I.listActivities(n,this.avatarSize).then((function(t){var s=e.mergePublishEvents(t.data.events);(s=e.mergeFileCreateEvents(s)).forEach((function(t){e.availableUserEmails.has(t.author_email)||(e.availableUserEmails.add(t.author_email),i.push({email:t.author_email,name:t.author_name,avatar_url:t.avatar_url,isSelected:!1}))})),e.setState({allItems:s,items:e.filterEvents(s),availableUsers:i,currentPage:n+1,isFirstLoading:!1,hasMore:!0}),e.state.items.length<25&&e.getMore()})).catch((function(t){e.setState({isFirstLoading:!1,errorMsg:m.c.getErrorMsg(t,!0)})}))}},{key:"getMore",value:function(){var e=this,t=this.state,n=t.currentPage,i=t.availableUsers,s=t.targetUsers;w.I.listActivities(n,this.avatarSize).then((function(t){var r=e.mergePublishEvents(t.data.events);(r=e.mergeFileCreateEvents(r)).forEach((function(t){e.availableUserEmails.has(t.author_email)||(e.availableUserEmails.add(t.author_email),i.push({email:t.author_email,name:t.author_name,avatar_url:t.avatar_url,isSelected:!1}))}));var o=e.filterEvents(r);e.setState({allItems:[].concat((0,K.Z)(e.state.allItems),(0,K.Z)(r)),items:[].concat((0,K.Z)(e.state.items),(0,K.Z)(o)),availableUsers:i,currentPage:n+1,isLoadingMore:!1,hasMore:0!==t.data.events.length}),e.state.items.length<25&&e.state.hasMore&&(s.length&&100==n||e.getMore())})).catch((function(t){e.setState({isLoadingMore:!1,errorMsg:m.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){var e=this.props.onlyMine,t=this.state,n=t.targetUsers,i=t.availableUsers;return(0,g.jsx)("div",{className:"main-panel-center",children:(0,g.jsxs)("div",{className:"cur-view-container",id:"activities",children:[(0,g.jsx)("div",{className:"cur-view-path",children:(0,g.jsxs)("ul",{className:"nav",children:[(0,g.jsx)("li",{className:"nav-item",children:(0,g.jsx)(c.rU,{to:"".concat(u.ze,"dashboard/"),className:"nav-link".concat(e?"":" active"),children:(0,u.ih)("All Activities")})}),(0,g.jsx)("li",{className:"nav-item",children:(0,g.jsx)(c.rU,{to:"".concat(u.ze,"my-activities/"),className:"nav-link".concat(e?" active":""),children:(0,u.ih)("My Activities")})})]})}),(0,g.jsxs)("div",{className:"cur-view-content d-block",onScroll:this.handleScroll,children:[this.state.isFirstLoading&&(0,g.jsx)(R.Z,{}),!this.state.isFirstLoading&&this.state.errorMsg&&(0,g.jsx)("p",{className:"error text-center",children:this.state.errorMsg}),!this.state.isFirstLoading&&(0,g.jsxs)(a.Fragment,{children:[!e&&(0,g.jsx)(oe,{availableUsers:i,currentSelectedUsers:n,setTargetUsers:this.setTargetUsers,toggleSelectUser:this.toggleSelectUser}),(0,g.jsx)(se,{items:this.state.items,isLoadingMore:this.state.isLoadingMore})]})]})]})})}}]),n}(a.Component),le=ae,ce=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){return(0,g.jsx)(le,{onlyMine:!0})}}]),n}(a.Component),he=ce,pe=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.data,t=e.loading,n=e.errorMsg,i=e.items;if(t)return(0,g.jsx)(R.Z,{});if(n)return(0,g.jsx)("p",{className:"error text-center",children:n});var s=(0,g.jsxs)(O.Z,{children:[(0,g.jsx)("h2",{children:(0,u.ih)("No favorites")}),(0,g.jsx)("p",{children:(0,u.ih)("You have not added any libraries, folders or files to your favorites yet. A favorite gives you quick access to your most frequently used objects. You can add a library, folder or file to your favorites by clicking the star to the left of its name.")})]}),r=(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"4%"}),(0,g.jsx)("th",{width:"40%",children:(0,u.ih)("Name")}),(0,g.jsx)("th",{width:"32%",children:(0,u.ih)("Library")}),(0,g.jsx)("th",{width:"18%",children:(0,u.ih)("Last Update")}),(0,g.jsx)("th",{width:"6%"})]})}),o=(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"12%"}),(0,g.jsx)("th",{width:"80%"}),(0,g.jsx)("th",{width:"8%"})]})}),a=m.c.isDesktop();return i.length?(0,g.jsxs)("table",{className:"table-hover ".concat(a?"":"table-thead-hidden"),children:[a?r:o,(0,g.jsx)(de,{items:i})]}):s}}]),n}(a.Component),de=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).state={items:s.props.items},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){this.getThumbnails()}},{key:"getThumbnails",value:function(){var e=this.state.items.filter((function(e){return(m.c.imageCheck(e.obj_name)||u.eA&&m.c.videoCheck(e.obj_name))&&!e.repo_encrypted}));if(0!=e.length){var t=e.length,n=this;!function i(s){var r=e[s];w.I.createThumbnail(r.repo_id,r.path,48).then((function(e){r.encoded_thumbnail_src=e.data.encoded_thumbnail_src})).catch((function(e){})).then((function(){s0&&t.forEach((function(t){e.push(t.id+"")})),s.customPermissions=e),s.customPermissions},s.state={isLoading:!0,currentOption:s.props.currentPerm,customPermissions:[]},s.customPermissions=null,s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){this.props.repoID?this.listCustomPermissions():this.setState({isLoading:!1})}},{key:"render",value:function(){var e=this,t=this.state,n=t.isLoading,i=t.currentOption,s=[];return n||(s=this.getPermissions()),(0,g.jsx)(d.Z,{isOpen:!0,toggle:this.props.toggleDialog,children:(0,g.jsxs)(b.Z,{style:{maxHeight:"400px",overflow:"auto"},children:[n&&(0,g.jsx)(R.Z,{}),!n&&s.map((function(t,n){return(0,g.jsxs)("div",{className:"d-flex",children:[(0,g.jsx)("input",{id:"option-".concat(n),className:"mt-1",type:"radio",name:"permission",value:t,checked:i==t,onChange:e.switchOption}),(0,g.jsxs)("label",{htmlFor:"option-".concat(n),className:"ml-2",children:[e.translatePermission(t),(0,g.jsx)("p",{className:"text-secondary small m-0",children:e.translateExplanation(t)})]})]},n)}))]})})}}]),n}(a.Component),be=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){var e;(0,i.Z)(this,n);for(var s=arguments.length,r=new Array(s),o=0;o0&&(0,g.jsx)("span",{className:"sf3-font sf3-font-sort action-icon",onClick:this.toggleSortOptionsDialog})]}),(0,g.jsx)("div",{className:"cur-view-content",children:(0,g.jsx)(Be,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.items,sortBy:this.state.sortBy,sortOrder:this.state.sortOrder,sortItems:this.sortItems,onRemoveLink:this.onRemoveLink})})]})}),this.state.isSortOptionsDialogOpen&&(0,g.jsx)(Oe,{toggleDialog:this.toggleSortOptionsDialog,sortBy:this.state.sortBy,sortOrder:this.state.sortOrder,sortOptions:this.sortOptions,sortItems:this.sortItems}),this.state.isCleanInvalidShareLinksDialogOpen&&(0,g.jsx)(Re.Z,{title:(0,u.ih)("Clean invalid share links"),message:(0,u.ih)("Are you sure you want to clean invalid share links?"),executeOperation:this.cleanInvalidShareLinks,confirmBtnText:(0,u.ih)("Clean"),toggleDialog:this.toggleCleanInvalidShareLinksDialog})]})}}]),n}(a.Component),We=n(36681),Ve=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,s=t.items;if(n)return(0,g.jsx)(R.Z,{});if(i)return(0,g.jsx)("p",{className:"error text-center",children:i});var r=(0,g.jsxs)(O.Z,{children:[(0,g.jsx)("h2",{children:(0,u.ih)("No upload links")}),(0,g.jsx)("p",{children:(0,u.ih)("You have not created any upload links yet. An upload link allows anyone to upload files to a folder or library. You can create an upload link for a folder or library by clicking the share icon to the right of its name.")})]}),o=m.c.isDesktop(),a=(0,g.jsxs)("table",{className:"table-hover ".concat(o?"":"table-thead-hidden"),children:[(0,g.jsx)("thead",{children:o?(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"4%"}),(0,g.jsx)("th",{width:"30%",children:(0,u.ih)("Name")}),(0,g.jsx)("th",{width:"24%",children:(0,u.ih)("Library")}),(0,g.jsx)("th",{width:"16%",children:(0,u.ih)("Visits")}),(0,g.jsx)("th",{width:"16%",children:(0,u.ih)("Expiration")}),(0,g.jsx)("th",{width:"10%"})]}):(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"12%"}),(0,g.jsx)("th",{width:"80%"}),(0,g.jsx)("th",{width:"8%"})]})}),(0,g.jsx)("tbody",{children:s.map((function(t,n){return(0,g.jsx)(qe,{isDesktop:o,item:t,onRemoveLink:e.props.onRemoveLink},n)}))})]});return s.length?a:r}}]),n}(a.Component),qe=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).toggleOpMenu=function(){s.setState({isOpMenuOpen:!s.state.isOpMenuOpen})},s.toggleLinkDialog=function(){s.setState({isLinkDialogOpen:!s.state.isLinkDialogOpen})},s.handleMouseOver=function(){s.setState({isOpIconShown:!0})},s.handleMouseOut=function(){s.setState({isOpIconShown:!1})},s.viewLink=function(e){e.preventDefault(),s.toggleLinkDialog()},s.removeLink=function(e){e.preventDefault(),s.props.onRemoveLink(s.props.item)},s.renderExpiration=function(){var e=s.props.item;if(!e.expire_date)return"--";var t=A()(e.expire_date).format("YYYY-MM-DD"),n=A()(e.expire_date).format("YYYY-MM-DD HH:mm:ss");return(0,g.jsx)("span",{className:e.is_expired?"error":"",title:n,children:t})},s.state={isOpIconShown:!1,isOpMenuOpen:!1,isLinkDialogOpen:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item,t=this.state,n=t.isOpIconShown,i=t.isLinkDialogOpen,s=m.c.getFolderIconUrl(!1),r="".concat(u.ze,"library/").concat(e.repo_id,"/").concat(encodeURIComponent(e.repo_name)),o="".concat(r).concat(m.c.encodePath(e.path)),l=""===e.obj_id?(0,g.jsx)("span",{style:{color:"red"},children:(0,u.ih)("(deleted)")}):null,h=(0,g.jsxs)("tr",{onMouseOver:this.handleMouseOver,onMouseOut:this.handleMouseOut,onFocus:this.handleMouseOver,children:[(0,g.jsx)("td",{children:(0,g.jsx)("img",{src:s,alt:"",width:"24"})}),(0,g.jsxs)("td",{children:[(0,g.jsx)(c.rU,{to:o,children:e.obj_name}),l]}),(0,g.jsx)("td",{children:(0,g.jsx)(c.rU,{to:r,children:e.repo_name})}),(0,g.jsx)("td",{children:e.view_cnt}),(0,g.jsx)("td",{children:this.renderExpiration()}),(0,g.jsxs)("td",{children:[!e.is_expired&&(0,g.jsx)("a",{href:"#",className:"sf2-icon-link action-icon ".concat(n?"":"invisible"),title:(0,u.ih)("View"),"aria-label":(0,u.ih)("View"),role:"button",onClick:this.viewLink}),(0,g.jsx)("a",{href:"#",className:"sf2-icon-delete action-icon ".concat(n?"":"invisible"),title:(0,u.ih)("Remove"),"aria-label":(0,u.ih)("Remove"),role:"button",onClick:this.removeLink})]})]}),p=(0,g.jsxs)("tr",{children:[(0,g.jsx)("td",{children:(0,g.jsx)("img",{src:s,alt:"",width:"24"})}),(0,g.jsxs)("td",{children:[(0,g.jsx)(c.rU,{to:o,children:e.obj_name}),(0,g.jsx)("br",{}),(0,g.jsx)("span",{children:e.repo_name}),(0,g.jsx)("br",{}),(0,g.jsxs)("span",{className:"item-meta-info",children:[(0,u.ih)("Visits"),": ",e.view_cnt]}),(0,g.jsxs)("span",{className:"item-meta-info",children:[(0,u.ih)("Expiration"),": ",this.renderExpiration()]})]}),(0,g.jsx)("td",{children:(0,g.jsxs)(U.Z,{isOpen:this.state.isOpMenuOpen,toggle:this.toggleOpMenu,children:[(0,g.jsx)(z.Z,{tag:"i",className:"sf-dropdown-toggle fa fa-ellipsis-v ml-0",title:(0,u.ih)("More Operations"),"data-toggle":"dropdown","aria-expanded":this.state.isOpMenuOpen}),(0,g.jsxs)("div",{className:this.state.isOpMenuOpen?"":"d-none",onClick:this.toggleOpMenu,children:[(0,g.jsx)("div",{className:"mobile-operation-menu-bg-layer"}),(0,g.jsxs)("div",{className:"mobile-operation-menu",children:[!e.is_expired&&(0,g.jsx)(G.Z,{className:"mobile-menu-item",onClick:this.viewLink,children:(0,u.ih)("View")}),(0,g.jsx)(G.Z,{className:"mobile-menu-item",onClick:this.removeLink,children:(0,u.ih)("Remove")})]})]})]})})]});return(0,g.jsxs)(a.Fragment,{children:[this.props.isDesktop?h:p,i&&(0,g.jsx)(Te.Z,{link:e.link,toggleDialog:this.toggleLinkDialog})]})}}]),n}(a.Component),Ke=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onRemoveLink=function(e){w.I.deleteUploadLink(e.token).then((function(){var t=s.state.items.filter((function(t){return t.token!==e.token}));s.setState({items:t});var n=(0,u.ih)("Successfully deleted 1 item.");j.Z.success(n)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.toggleCleanInvalidUploadLinksDialog=function(){s.setState({isCleanInvalidUploadLinksDialogOpen:!s.state.isCleanInvalidUploadLinksDialogOpen})},s.cleanInvalidUploadLinks=function(){w.I.cleanInvalidUploadLinks().then((function(e){var t=s.state.items.filter((function(e){return""!==e.obj_id})).filter((function(e){return!e.is_expired}));s.setState({items:t}),j.Z.success((0,u.ih)("Successfully cleaned invalid upload links."))})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.state={isCleanInvalidUploadLinksDialogOpen:!1,loading:!0,errorMsg:"",items:[]},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){this.listUserUploadLinks()}},{key:"listUserUploadLinks",value:function(){var e=this;w.I.listUserUploadLinks().then((function(t){var n=t.data.map((function(e){return new We.Z(e)}));e.setState({loading:!1,items:n})})).catch((function(t){e.setState({loading:!1,errorMsg:m.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(Ue,{onShowSidePanel:this.props.onShowSidePanel,onSearchedClick:this.props.onSearchedClick,children:(0,g.jsx)($.Z,{className:"operation-item d-none d-md-block",onClick:this.toggleCleanInvalidUploadLinksDialog,children:(0,u.ih)("Clean invalid upload links")})}),(0,g.jsx)("div",{className:"main-panel-center",children:(0,g.jsxs)("div",{className:"cur-view-container",children:[(0,g.jsx)("div",{className:"cur-view-path share-upload-nav",children:(0,g.jsxs)("ul",{className:"nav",children:[u.Fl&&(0,g.jsx)("li",{className:"nav-item",children:(0,g.jsx)(c.rU,{to:"".concat(u.ze,"share-admin-share-links/"),className:"nav-link",children:(0,u.ih)("Share Links")})}),(0,g.jsx)("li",{className:"nav-item",children:(0,g.jsx)(c.rU,{to:"".concat(u.ze,"share-admin-upload-links/"),className:"nav-link active",children:(0,u.ih)("Upload Links")})})]})}),(0,g.jsx)("div",{className:"cur-view-content",children:(0,g.jsx)(Ve,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.items,onRemoveLink:this.onRemoveLink})})]})}),this.state.isCleanInvalidUploadLinksDialogOpen&&(0,g.jsx)(Re.Z,{title:(0,u.ih)("Clean invalid upload links"),message:(0,u.ih)("Are you sure you want to clean invalid upload links?"),executeOperation:this.cleanInvalidUploadLinks,confirmBtnText:(0,u.ih)("Clean"),toggleDialog:this.toggleCleanInvalidUploadLinksDialog})]})}}]),n}(a.Component),Ye=n(57808),Je=(0,s.Z)((function e(t){(0,i.Z)(this,e),this.repo_id=t.repo_id,this.repo_name=t.repo_name,this.permission=t.permission,this.size_original=t.size,this.size=m.c.bytesToSize(t.size),this.owner_name=t.owner_name,this.owner_email=t.owner_email,this.owner_contact_email=t.owner_contact_email,this.encrypted=t.encrypted,this.last_modified=t.last_modified,this.modifier_contact_email=t.modifier_contact_email,this.modifier_email=t.modifier_email,this.modifier_name=t.modifier_name,this.type=t.type,this.starred=t.starred,this.monitored=t.monitored,this.status=t.status,this.storage_name=t.storage_name,void 0!=t.is_admin&&(this.is_admin=t.is_admin)}));var Xe=function(){return(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"12%",children:(0,g.jsx)("span",{className:"sr-only",children:(0,u.ih)("Library Type")})}),(0,g.jsx)("th",{width:"80%"}),(0,g.jsx)("th",{width:"8%",children:(0,g.jsx)("span",{className:"sr-only",children:(0,u.ih)("Actions")})})]})})},Qe=n(65953),$e=n(98290),et=n(42309),tt=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.repoID;return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("span",{id:"watching-".concat(e),className:"ml-1",children:(0,g.jsx)(et.Z,{symbol:"monitor"})}),(0,g.jsx)($e.Z,{placement:"bottom",target:"#watching-".concat(e),children:(0,u.ih)("You are watching file changes of this library.")})]})}}]),n}(a.Component),nt=tt,it=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).freezeItem=function(e){s.setState({isItemFreezed:e})},s.sortByName=function(e){e.preventDefault();var t="asc"==s.props.sortOrder?"desc":"asc";s.props.sortItems("name",t)},s.sortByTime=function(e){e.preventDefault();var t="asc"==s.props.sortOrder?"desc":"asc";s.props.sortItems("time",t)},s.sortBySize=function(e){e.preventDefault();var t="asc"==s.props.sortOrder?"desc":"asc";s.props.sortItems("size",t)},s.state={isItemFreezed:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,s=t.items,r=t.sortBy,o=t.sortOrder,a=(0,g.jsxs)(O.Z,{children:[(0,g.jsx)("h2",{children:(0,u.ih)("No shared libraries")}),(0,g.jsx)("p",{children:(0,u.ih)("No libraries have been shared directly with you. A shared library can be shared with full or restricted permission. If you need access to a library owned by another user, ask the user to share the library with you.")})]});if(n)return(0,g.jsx)(R.Z,{});if(i)return(0,g.jsx)("p",{className:"error text-center",children:i});var l="name"==r,c="time"==r,h="size"==r,p="asc"==o?(0,g.jsx)("span",{className:"fas fa-caret-up"}):(0,g.jsx)("span",{className:"fas fa-caret-down"}),d=(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"4%"}),(0,g.jsx)("th",{width:"4%",children:(0,g.jsx)("span",{className:"sr-only",children:(0,u.ih)("Library Type")})}),(0,g.jsx)("th",{width:"34%",children:(0,g.jsxs)("a",{className:"d-block table-sort-op",href:"#",onClick:this.sortByName,children:[(0,u.ih)("Name")," ",l&&p]})}),(0,g.jsx)("th",{width:"10%",children:(0,g.jsx)("span",{className:"sr-only",children:(0,u.ih)("Actions")})}),(0,g.jsx)("th",{width:"14%",children:(0,g.jsxs)("a",{className:"d-block table-sort-op",href:"#",onClick:this.sortBySize,children:[(0,u.ih)("Size")," ",h&&p]})}),(0,g.jsx)("th",{width:"18%",children:(0,g.jsxs)("a",{className:"d-block table-sort-op",href:"#",onClick:this.sortByTime,children:[(0,u.ih)("Last Update")," ",c&&p]})}),(0,g.jsx)("th",{width:"16%",children:(0,u.ih)("Owner")})]})}),f=m.c.isDesktop(),v=(0,g.jsxs)("table",{className:f?"":"table-thead-hidden",children:[f?d:(0,g.jsx)(Xe,{}),(0,g.jsx)("tbody",{children:s.map((function(t,n){return(0,g.jsx)(st,{data:t,isDesktop:f,isItemFreezed:e.state.isItemFreezed,freezeItem:e.freezeItem,onMonitorRepo:e.props.onMonitorRepo},n)}))})]});return s.length?v:a}}]),n}(a.Component),st=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).toggleOpMenu=function(){s.setState({isOpMenuOpen:!s.state.isOpMenuOpen},(function(){s.props.freezeItem(s.state.isOpMenuOpen)}))},s.handleMouseOver=function(){s.props.isItemFreezed||s.setState({highlight:!0,showOpIcon:!0})},s.handleMouseOut=function(){s.props.isItemFreezed||s.setState({highlight:!1,showOpIcon:!1})},s.share=function(e){e.preventDefault(),s.setState({isShowSharedDialog:!0})},s.leaveShare=function(e){e.preventDefault();var t,n=s.props.data;if(-1==n.owner_email.indexOf("@seafile_group")){var i={share_type:"personal",from:n.owner_email};t=w.I.leaveShareRepo(n.repo_id,i)}else t=w.I.leaveShareGroupOwnedRepo(n.repo_id);t.then((function(e){s.setState({unshared:!0});var t=(0,u.ih)("Successfully unshared {name}").replace("{name}",n.repo_name);j.Z.success(t)})).catch((function(e){var t=m.c.getErrorMsg(e);t===(0,u.ih)("Error")&&(t=(0,u.ih)("Failed to unshare {name}").replace("{name}",n.repo_name)),(0,j.Z)(t)}))},s.toggleShareDialog=function(){s.setState({isShowSharedDialog:!1})},s.onToggleStarRepo=function(e){e.preventDefault();var t=s.props.data.repo_name;s.state.isStarred?w.I.unstarItem(s.props.data.repo_id,"/").then((function(){s.setState({isStarred:!s.state.isStarred});var e=(0,u.ih)("Successfully unstarred {library_name_placeholder}.").replace("{library_name_placeholder}",t);j.Z.success(e)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)})):w.I.starItem(s.props.data.repo_id,"/").then((function(){s.setState({isStarred:!s.state.isStarred});var e=(0,u.ih)("Successfully starred {library_name_placeholder}.").replace("{library_name_placeholder}",t);j.Z.success(e)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.visitRepo=function(){(0,c.c4)(s.repoURL)},s.watchFileChanges=function(){var e=s.props.data;w.I.monitorRepo(e.repo_id).then((function(){s.props.onMonitorRepo(e,!0)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.unwatchFileChanges=function(){var e=s.props.data;w.I.unMonitorRepo(e.repo_id).then((function(){s.props.onMonitorRepo(e,!1)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.state={highlight:!1,showOpIcon:!1,unshared:!1,isShowSharedDialog:!1,isStarred:s.props.data.starred,isOpMenuOpen:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){if(this.state.unshared)return null;var e=this.props.data;e.icon_url=m.c.getLibIconUrl(e),e.icon_title=m.c.getLibIconTitle(e);var t=this.state.showOpIcon?"":" invisible",n="op-icon sf2-icon-share repo-share-btn"+t,i="op-icon sf2-icon-x3"+t,s=this.repoURL="".concat(u.ze,"library/").concat(e.repo_id,"/").concat(m.c.encodePath(e.repo_name),"/"),r=u._y&&("r"==e.permission||"rw"==e.permission),o=(0,g.jsxs)(a.Fragment,{children:[(0,g.jsxs)("tr",{className:this.state.highlight?"tr-highlight":"",onMouseOver:this.handleMouseOver,onMouseOut:this.handleMouseOut,onFocus:this.handleMouseOver,children:[(0,g.jsx)("td",{className:"text-center",children:(0,g.jsx)("a",{href:"#",role:"button","aria-label":this.state.isStarred?(0,u.ih)("Unstar"):(0,u.ih)("Star"),onClick:this.onToggleStarRepo,children:(0,g.jsx)("i",{className:"fa-star ".concat(this.state.isStarred?"fas":"far star-empty")})})}),(0,g.jsx)("td",{children:(0,g.jsx)("img",{src:e.icon_url,title:e.icon_title,alt:e.icon_title,width:"24"})}),(0,g.jsx)("td",{children:(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(c.rU,{to:s,children:e.repo_name}),e.monitored&&(0,g.jsx)(nt,{repoID:e.repo_id})]})}),(0,g.jsxs)("td",{children:[u._y&&e.is_admin&&(0,g.jsx)("a",{href:"#",className:n,title:(0,u.ih)("Share"),role:"button","aria-label":(0,u.ih)("Share"),onClick:this.share}),(0,g.jsx)("a",{href:"#",className:i,title:(0,u.ih)("Leave Share"),role:"button","aria-label":(0,u.ih)("Leave Share"),onClick:this.leaveShare}),r&&(0,g.jsxs)(U.Z,{isOpen:this.state.isOpMenuOpen,toggle:this.toggleOpMenu,children:[(0,g.jsx)(z.Z,{tag:"i",role:"button",tabIndex:"0",className:"sf-dropdown-toggle sf2-icon-caret-down".concat(t),title:(0,u.ih)("More Operations"),"aria-label":(0,u.ih)("More Operations"),"data-toggle":"dropdown","aria-expanded":this.state.isOpMenuOpen}),(0,g.jsx)(B.Z,{children:(0,g.jsx)(G.Z,{onClick:e.monitored?this.unwatchFileChanges:this.watchFileChanges,children:e.monitored?(0,u.ih)("Unwatch File Changes"):(0,u.ih)("Watch File Changes")})})]})]}),(0,g.jsx)("td",{children:e.size}),(0,g.jsx)("td",{title:A()(e.last_modified).format("llll"),children:A()(e.last_modified).fromNow()}),(0,g.jsx)("td",{title:e.owner_contact_email,children:e.owner_name})]}),this.state.isShowSharedDialog&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Qe.Z,{itemType:"library",itemName:e.repo_name,itemPath:"/",repoID:e.repo_id,repoEncrypted:e.encrypted,enableDirPrivateShare:!0,userPerm:e.permission,isAdmin:!0,toggleDialog:this.toggleShareDialog})})]}),l=(0,g.jsxs)(a.Fragment,{children:[(0,g.jsxs)("tr",{onMouseOver:this.handleMouseOver,onMouseOut:this.handleMouseOut,children:[(0,g.jsx)("td",{onClick:this.visitRepo,children:(0,g.jsx)("img",{src:e.icon_url,title:e.icon_title,alt:e.icon_title,width:"24"})}),(0,g.jsxs)("td",{onClick:this.visitRepo,children:[(0,g.jsx)(c.rU,{to:s,children:e.repo_name}),e.monitored&&(0,g.jsx)(nt,{repoID:e.repo_id}),(0,g.jsx)("br",{}),(0,g.jsx)("span",{className:"item-meta-info",title:e.owner_contact_email,children:e.owner_name}),(0,g.jsx)("span",{className:"item-meta-info",children:e.size}),(0,g.jsx)("span",{className:"item-meta-info",title:A()(e.last_modified).format("llll"),children:A()(e.last_modified).fromNow()})]}),(0,g.jsx)("td",{children:(0,g.jsxs)(U.Z,{isOpen:this.state.isOpMenuOpen,toggle:this.toggleOpMenu,children:[(0,g.jsx)(z.Z,{tag:"i",className:"sf-dropdown-toggle fa fa-ellipsis-v ml-0",title:(0,u.ih)("More Operations"),"data-toggle":"dropdown","aria-expanded":this.state.isOpMenuOpen}),(0,g.jsxs)("div",{className:this.state.isOpMenuOpen?"":"d-none",onClick:this.toggleOpMenu,children:[(0,g.jsx)("div",{className:"mobile-operation-menu-bg-layer"}),(0,g.jsxs)("div",{className:"mobile-operation-menu",children:[(0,g.jsx)(G.Z,{className:"mobile-menu-item",onClick:this.onToggleStarRepo,children:this.state.isStarred?(0,u.ih)("Unstar"):(0,u.ih)("Star")}),u._y&&e.is_admin&&(0,g.jsx)(G.Z,{className:"mobile-menu-item",onClick:this.share,children:(0,u.ih)("Share")}),(0,g.jsx)(G.Z,{className:"mobile-menu-item",onClick:this.leaveShare,children:(0,u.ih)("Leave Share")}),r&&(0,g.jsx)(G.Z,{className:"mobile-menu-item",onClick:e.monitored?this.unwatchFileChanges:this.watchFileChanges,children:e.monitored?(0,u.ih)("Unwatch File Changes"):(0,u.ih)("Watch File Changes")})]})]})]})})]}),this.state.isShowSharedDialog&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Qe.Z,{itemType:"library",itemName:e.repo_name,itemPath:"/",repoID:e.repo_id,repoEncrypted:e.encrypted,enableDirPrivateShare:!0,userPerm:e.permission,isAdmin:!0,toggleDialog:this.toggleShareDialog})})]});return this.props.isDesktop?o:l}}]),n}(a.Component),rt=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).sortItems=function(e,t){Ye.ZP.save("seafile-repo-dir-sort-by",e),Ye.ZP.save("seafile-repo-dir-sort-order",t),s.setState({sortBy:e,sortOrder:t,items:m.c.sortRepos(s.state.items,e,t)})},s.toggleSortOptionsDialog=function(){s.setState({isSortOptionsDialogOpen:!s.state.isSortOptionsDialogOpen})},s.onMonitorRepo=function(e,t){var n=s.state.items.map((function(n){return n.repo_id===e.repo_id&&(n.monitored=t),n}));s.setState({items:n})},s.state={loading:!0,errorMsg:"",items:[],sortBy:Ye.ZP.load("seafile-repo-dir-sort-by")||"name",sortOrder:Ye.ZP.load("seafile-repo-dir-sort-order")||"asc",isSortOptionsDialogOpen:!1},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;w.I.listRepos({type:"shared"}).then((function(t){var n=t.data.repos.map((function(e){return new Je(e)}));e.setState({loading:!1,items:m.c.sortRepos(n,e.state.sortBy,e.state.sortOrder)})})).catch((function(t){e.setState({loading:!1,errorMsg:m.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("div",{className:"main-panel-center",children:(0,g.jsxs)("div",{className:"cur-view-container",children:[(0,g.jsxs)("div",{className:"cur-view-path",children:[(0,g.jsx)("h3",{className:"sf-heading m-0",children:(0,u.ih)("Shared with me")}),!m.c.isDesktop()&&this.state.items.length>0&&(0,g.jsx)("span",{className:"sf3-font sf3-font-sort action-icon",onClick:this.toggleSortOptionsDialog})]}),(0,g.jsx)("div",{className:"cur-view-content",children:(0,g.jsx)(it,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.items,sortBy:this.state.sortBy,sortOrder:this.state.sortOrder,sortItems:this.sortItems,onMonitorRepo:this.onMonitorRepo})})]})}),this.state.isSortOptionsDialogOpen&&(0,g.jsx)(Oe,{toggleDialog:this.toggleSortOptionsDialog,sortBy:this.state.sortBy,sortOrder:this.state.sortOrder,sortItems:this.sortItems})]})}}]),n}(a.Component),ot=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,s=t.items,r=(0,g.jsxs)(O.Z,{children:[(0,g.jsx)("h2",{children:(0,u.ih)("No libraries have been shared with you")}),(0,g.jsx)("p",{children:(0,u.ih)("No libraries have been shared with you from other servers.")})]});if(n)return(0,g.jsx)(R.Z,{});if(i)return(0,g.jsx)("p",{className:"error text-center",children:i});var o=(0,g.jsxs)("table",{children:[(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"4%"}),(0,g.jsx)("th",{width:"20%",children:(0,u.ih)("Name")}),(0,g.jsx)("th",{width:"20%",children:(0,u.ih)("Shared by")}),(0,g.jsx)("th",{width:"26%",children:(0,u.ih)("At server")}),(0,g.jsx)("th",{width:"20%",children:(0,u.ih)("Time")}),(0,g.jsx)("th",{width:"10%"})]})}),(0,g.jsx)("tbody",{children:s.map((function(t,n){return(0,g.jsx)(at,{item:t,leaveShare:e.props.leaveShare},n)}))})]});return s.length?o:r}}]),n}(a.Component),at=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).handleMouseOver=function(){s.setState({isOpIconShown:!0})},s.handleMouseOut=function(){s.setState({isOpIconShown:!1})},s.leaveShare=function(e){e.preventDefault(),s.props.leaveShare(s.props.item)},s.state={isOpIconShown:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item,t=this.state.isOpIconShown;e.icon_url=m.c.getLibIconUrl(e),e.icon_title=m.c.getLibIconTitle(e);var n="".concat(u.ze,"remote-library/").concat(this.props.item.provider_id,"/").concat(this.props.item.repo_id,"/").concat(m.c.encodePath(this.props.item.repo_name),"/");return(0,g.jsxs)("tr",{onMouseOver:this.handleMouseOver,onMouseOut:this.handleMouseOut,onFocus:this.handleMouseOver,children:[(0,g.jsx)("td",{children:(0,g.jsx)("img",{src:e.icon_url,title:e.icon_title,alt:e.icon_title,width:"24"})}),(0,g.jsx)("td",{children:(0,g.jsx)(c.rU,{to:n,children:e.repo_name})}),(0,g.jsx)("td",{children:e.from_user}),(0,g.jsx)("td",{children:e.from_server_url}),(0,g.jsx)("td",{title:A()(e.last_modified).format("llll"),children:A()(e.ctime).fromNow()}),(0,g.jsx)("td",{children:(0,g.jsx)("a",{href:"#",role:"button",className:"action-icon sf2-icon-x3 ".concat(t?"":"invisible"),title:(0,u.ih)("Leave Share"),"aria-label":(0,u.ih)("Leave Share"),onClick:this.leaveShare})})]})}}]),n}(a.Component),lt=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).leaveShare=function(e){var t=e.id,n=e.repo_name;w.I.deleteOCMShareReceived(t).then((function(e){var i=s.state.items.filter((function(e){return e.id!=t}));s.setState({items:i}),j.Z.success((0,u.ih)("Successfully unshared {name}").replace("{name}",n))})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.state={loading:!0,errorMsg:"",items:[]},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;w.I.listOCMSharesReceived().then((function(t){e.setState({loading:!1,items:t.data.ocm_share_received_list})})).catch((function(t){e.setState({loading:!1,errorMsg:m.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){return(0,g.jsx)(a.Fragment,{children:(0,g.jsx)("div",{className:"main-panel-center",children:(0,g.jsxs)("div",{className:"cur-view-container",children:[(0,g.jsx)("div",{className:"cur-view-path",children:(0,g.jsx)("h3",{className:"sf-heading m-0",children:(0,u.ih)("Shared from other servers")})}),(0,g.jsx)("div",{className:"cur-view-content",children:(0,g.jsx)(ot,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.items,leaveShare:this.leaveShare})})]})})})}}]),n}(a.Component),ct=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).getAllReceivedShares=function(){var e=w.I.server+"/ocm-via-webdav/received-shares/";w.I.req.get(e).then((function(e){s.setState({loading:!1,shareID:"",path:"",items:e.data.received_share_list})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.leaveShare=function(e){var t=e.id,n=e.name,i=w.I.server+"/ocm-via-webdav/received-shares/"+t+"/";w.I.req.delete(i).then((function(e){var i=s.state.items.filter((function(e){return e.id!=t}));s.setState({items:i}),j.Z.success((0,u.ih)("Successfully unshared {name}").replace("{name}",n))})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.openFolder=function(e){s.setState({loading:!0});var t=w.I.server+"/ocm-via-webdav/received-shares/"+e.id+"/?path="+e.path;w.I.req.get(t).then((function(t){s.setState({loading:!1,shareID:e.id,path:t.data.parent_dir,items:t.data.received_share_list})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onPathClick=function(e){s.setState({loading:!0});var t=w.I.server+"/ocm-via-webdav/received-shares/"+s.state.shareID+"/?path="+e;w.I.req.get(t).then((function(e){s.setState({loading:!1,items:e.data.received_share_list,path:e.data.parent_dir})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.state={loading:!0,shareID:"",path:"",items:[],errorMsg:""},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){this.getAllReceivedShares()}},{key:"render",value:function(){return(0,g.jsx)(a.Fragment,{children:(0,g.jsx)("div",{className:"main-panel-center",children:(0,g.jsxs)("div",{className:"cur-view-container",children:[(0,g.jsx)("div",{className:"cur-view-path align-items-center",children:(0,g.jsx)(dt,{shareID:this.state.shareID,currentPath:this.state.path,onPathClick:this.onPathClick,getAllReceivedShares:this.getAllReceivedShares})}),(0,g.jsx)("div",{className:"cur-view-content",children:(0,g.jsx)(ht,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.items,path:this.state.path,leaveShare:this.leaveShare,openFolder:this.openFolder})})]})})})}}]),n}(a.Component),ht=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){return(0,i.Z)(this,n),t.call(this,e)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,s=t.items,r=t.path,o=(0,g.jsxs)(O.Z,{children:[(0,g.jsx)("h2",{children:(0,u.ih)("No libraries have been shared with you")}),(0,g.jsx)("p",{children:(0,u.ih)("No libraries have been shared with you from other servers.")})]});if(n)return(0,g.jsx)(R.Z,{});if(i)return(0,g.jsx)("p",{className:"error text-center",children:i});var a=(0,g.jsxs)("table",{children:[(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"5%"}),(0,g.jsx)("th",{width:"30%",children:(0,u.ih)("Name")}),(0,g.jsx)("th",{width:"35%",children:(0,u.ih)("Shared By")}),(0,g.jsx)("th",{width:"20%",children:(0,u.ih)("Time")}),(0,g.jsx)("th",{width:"5%"}),(0,g.jsx)("th",{width:"5%"})]})}),(0,g.jsx)("tbody",{children:s.map((function(t,n){return(0,g.jsx)(pt,{item:t,path:r,leaveShare:e.props.leaveShare,openFolder:e.props.openFolder},n)}))})]});return s.length?a:o}}]),n}(a.Component),pt=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).handleMouseOver=function(){s.setState({isOpIconShown:!0})},s.handleMouseOut=function(){s.setState({isOpIconShown:!1})},s.downloadFile=function(){var e=u.ze+"ocm-via-webdav/download-received-file/?share_id="+s.props.item.id+"&path="+s.props.item.path;window.location.href=e},s.leaveShare=function(e){e.preventDefault(),s.props.leaveShare(s.props.item)},s.openFolder=function(e){e.preventDefault(),s.props.openFolder(s.props.item)},s.state={isOpIconShown:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item,t=this.state.isOpIconShown;return e.is_dir?e.icon_url=m.c.getFolderIconUrl():e.icon_url=m.c.getFileIconUrl(e.name),(0,g.jsxs)("tr",{onMouseOver:this.handleMouseOver,onMouseOut:this.handleMouseOut,children:[(0,g.jsx)("td",{children:(0,g.jsx)("img",{src:e.icon_url,width:"24",alt:""})}),(0,g.jsx)("td",{children:e.is_dir?(0,g.jsx)("a",{href:"#",onClick:this.openFolder,children:e.name}):e.name}),(0,g.jsx)("td",{children:e.shared_by}),(0,g.jsx)("td",{title:A()(e.last_modified).format("llll"),children:A()(e.ctime).fromNow()}),(0,g.jsx)("td",{children:e.is_dir?"":(0,g.jsx)("a",{href:"#",className:"action-icon sf2-icon-download ".concat(t?"":"invisible"),title:(0,u.ih)("Download"),onClick:this.downloadFile})}),(0,g.jsx)("td",{children:this.props.path?"":(0,g.jsx)("a",{href:"#",className:"action-icon sf2-icon-x3 ".concat(t?"":"invisible"),title:(0,u.ih)("Leave Share"),onClick:this.leaveShare})})]})}}]),n}(a.Component),dt=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onPathClick=function(e){var t=m.c.getEventData(e,"path");s.props.onPathClick(t)},s.turnPathToLink=function(e){var t=(e=e.slice(1,e.length-1)).split("/"),n="";return t.map((function(e,i){return i===t.length-1?(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("span",{className:"path-split",children:"/"}),(0,g.jsx)("span",{className:"path-file-name",children:e})]},i):(0===i?n="/":n+=e+"/",(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("span",{className:"path-split",children:"/"}),(0,g.jsx)("a",{className:"path-link","data-path":n,onClick:s.onPathClick,children:e})]},i))}))},s.state={},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.turnPathToLink(this.props.currentPath);return(0,g.jsxs)("div",{className:"path-container",children:[(0,g.jsx)("a",{href:"#",onClick:this.props.getAllReceivedShares,children:(0,u.ih)("All")}),e]})}}]),n}(a.Component),ut=ct,mt=n(55294),gt=n(55516),ft=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){return(0,g.jsxs)("div",{className:"main-panel-north ".concat(this.props.children?"border-left-show":""),children:[(0,g.jsxs)("div",{className:"cur-view-toolbar",children:[(0,g.jsx)("span",{className:"sf2-icon-menu side-nav-toggle hidden-md-up d-md-none",title:"Side Nav Menu"}),(0,g.jsx)("div",{className:"operation",children:this.props.children})]}),(0,g.jsx)("div",{className:"common-toolbar",children:(0,g.jsx)(gt.Z,{isAdminPanel:!1})})]})}}]),n}(a.Component),vt=ft,xt=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){var e;(0,i.Z)(this,n);for(var s=arguments.length,r=new Array(s),o=0;o-1)return e=(0,u.ih)("Name should not include '/'."),this.setState({errMessage:e}),!1;if(this.state.encrypt){var n=this.state.password1.trim(),i=this.state.password2.trim();if(!n.length)return e=(0,u.ih)("Please enter password"),this.setState({errMessage:e}),!1;if(!i.length)return e=(0,u.ih)("Please enter the password again"),this.setState({errMessage:e}),!1;if(n.length0&&(0,g.jsxs)(ge.Z,{children:[(0,g.jsx)(fe.Z,{children:(0,u.ih)("Template")}),(0,g.jsx)(kt.ME,{defaultValue:this.templateOptions[0],options:this.templateOptions,onChange:this.handlelibraryTemplatesInputChange,value:this.templateOptions.find((function(t){return t.value===e.state.library_template}))||null})]}),u.al.length>0&&(0,g.jsxs)(ge.Z,{children:[(0,g.jsx)(fe.Z,{children:(0,u.ih)("Storage Backend")}),(0,g.jsx)(kt.ME,{defaultValue:this.storageOptions[0],options:this.storageOptions,onChange:this.handleStorageInputChange,value:this.storageOptions.find((function(t){return t.value===e.state.storage_id}))||null})]}),"group"===this.props.libraryType&&(0,g.jsxs)(ge.Z,{children:[(0,g.jsx)(fe.Z,{for:"exampleSelect",children:(0,u.ih)("Permission")}),(0,g.jsxs)(re.Z,{type:"select",name:"select",id:"exampleSelect",onChange:this.onPermissionChange,value:this.state.permission,children:[(0,g.jsx)("option",{value:"rw",children:(0,u.ih)("Read-Write")}),(0,g.jsx)("option",{value:"r",children:(0,u.ih)("Read-Only")})]})]}),u.l3&&(0,g.jsxs)("div",{children:[(0,g.jsxs)(ge.Z,{check:!0,children:[(0,g.jsx)(re.Z,{type:"checkbox",id:"encrypt",onChange:this.onEncrypted}),(0,g.jsx)(fe.Z,{for:"encrypt",children:(0,u.ih)("Encrypt")})]}),!this.state.disabled&&(0,g.jsxs)(ge.Z,{children:[(0,g.jsx)(fe.Z,{for:"passwd1",children:(0,u.ih)("Password")}),(0,g.jsxs)("span",{className:"tip",children:[" ",(0,u.ih)("(at least {placeholder} characters)").replace("{placeholder}",u.gl)]}),(0,g.jsx)(re.Z,{id:"passwd1",type:"password",disabled:this.state.disabled,value:this.state.password1,onChange:this.handlePassword1Change,autoComplete:"new-password"})]}),!this.state.disabled&&(0,g.jsxs)(ge.Z,{children:[(0,g.jsx)(fe.Z,{for:"passwd2",children:(0,u.ih)("Password again")}),(0,g.jsx)(re.Z,{id:"passwd2",type:"password",disabled:this.state.disabled,value:this.state.password2,onChange:this.handlePassword2Change,autoComplete:"new-password"})]})]})]}),this.state.errMessage&&(0,g.jsx)(bt.Z,{color:"danger",children:this.state.errMessage})]}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:this.toggle,children:(0,u.ih)("Cancel")}),(0,g.jsx)($.Z,{color:"primary",onClick:this.handleSubmit,disabled:!this.state.isSubmitBtnActive,children:(0,u.ih)("Submit")})]})]})}}]),n}(a.Component),Nt=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onCreateRepo=function(e){s.props.onCreateRepo(e),s.onCreateToggle()},s.onCreateToggle=function(){s.setState({isCreateRepoDialogShow:!s.state.isCreateRepoDialogShow})},s.toggleMore=function(){s.setState({isOpen:!s.state.isOpen})},s.onDropdownToggleKeyDown=function(e){"Enter"!=e.key&&"Space"!=e.key||s.toggleMore()},s.visitDeletedviaKey=function(e){"Enter"!=e.key&&"Space"!=e.key||(0,c.c4)("".concat(u.ze,"my-libs/deleted/"))},s.state={isCreateRepoDialogShow:!1,isOpen:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsxs)("div",{className:"cur-view-toolbar",children:[(0,g.jsx)("span",{className:"sf2-icon-menu side-nav-toggle hidden-md-up d-md-none",title:"Side Nav Menu",onClick:this.props.onShowSidePanel}),m.c.isDesktop()?(0,g.jsxs)("div",{className:"operation",children:[(0,g.jsxs)("button",{className:"btn btn-secondary operation-item",title:(0,u.ih)("New Library"),onClick:this.onCreateToggle,children:[(0,g.jsx)("i",{className:"fas fa-plus-square text-secondary mr-1"}),(0,u.ih)("New Library")]}),(0,g.jsxs)(U.Z,{isOpen:this.state.isOpen,toggle:this.toggleMore,children:[(0,g.jsx)(z.Z,{className:"btn btn-secondary operation-item",onKeyDown:this.onDropdownToggleKeyDown,children:(0,u.ih)("More")}),(0,g.jsx)(B.Z,{children:(0,g.jsx)(G.Z,{className:"link-dropdown-container",onKeyDown:this.visitDeletedviaKey,children:(0,g.jsx)(c.rU,{className:"link-dropdown-item",to:u.ze+"my-libs/deleted/",children:(0,u.ih)("Deleted Libraries")})})})]})]}):(0,g.jsx)("span",{className:"sf2-icon-plus mobile-toolbar-icon",title:(0,u.ih)("New Library"),onClick:this.onCreateToggle})]}),this.state.isCreateRepoDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(It,{libraryType:this.props.libraryType,onCreateRepo:this.onCreateRepo,onCreateToggle:this.onCreateToggle})})]})}}]),n}(a.Component),Mt=(n(90099),function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).getFileCounts=function(e){w.I.getRepoInfo(e.repo_id).then((function(e){s.setState({fileCount:e.data.file_count})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.state={fileCount:0},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this.props.currentRepo;this.getFileCounts(e)}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){e.currentRepo.repo_id!==this.props.currentRepo.repo_id&&this.getFileCounts(e.currentRepo)}},{key:"render",value:function(){var e=this.props.currentRepo,t=m.c.getLibIconUrl(e),n=m.c.getLibIconUrl(e,!0);return(0,g.jsxs)("div",{className:"detail-container",children:[(0,g.jsxs)("div",{className:"detail-header",children:[(0,g.jsx)("div",{className:"detail-control sf2-icon-x1",onClick:this.props.closeDetails}),(0,g.jsxs)("div",{className:"detail-title dirent-title",children:[(0,g.jsx)("img",{src:t,width:"24",height:"24",alt:""})," ",(0,g.jsx)("span",{className:"name ellipsis",title:e.repo_name,children:e.repo_name})]})]}),(0,g.jsxs)("div",{className:"detail-body dirent-info",children:[(0,g.jsx)("div",{className:"img",children:(0,g.jsx)("img",{src:n,height:"96",alt:""})}),(0,g.jsx)("div",{className:"dirent-table-container",children:(0,g.jsxs)("table",{className:"table-thead-hidden",children:[(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"35%"}),(0,g.jsx)("th",{width:"65%"})]})}),(0,g.jsxs)("tbody",{children:[(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{children:(0,u.ih)("Files")}),(0,g.jsx)("td",{children:this.state.fileCount})]}),(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{children:(0,u.ih)("Size")}),(0,g.jsx)("td",{children:e.size})]}),(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{children:(0,u.ih)("Last Update")}),(0,g.jsx)("td",{children:A()(e.last_modified).fromNow()})]})]})]})})]})]})}}]),n}(a.Component)),Zt=n(7767),Pt=n(33028),Ft=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).submit=function(){var e=s.state.keepDays;s.state.autoHistory&&(e=s.state.expireDays);var t=s.props.repoID;if(/^-?\d+$/.test(e)){var n=(0,u.ih)("Successfully set library history.");w.I.setRepoHistoryLimit(t,e).then((function(e){j.Z.success(n),s.setState({keepDays:e.data.keep_days}),s.props.toggleDialog()})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))}else s.setState({errorInfo:(0,u.ih)("Please enter a non-negative integer")})},s.handleKeyDown=function(e){"Enter"===e.key&&(s.submit(),e.preventDefault())},s.onChange=function(e){var t=e.target.value;s.setState({keepDays:t,expireDays:t})},s.setLimitDays=function(e){"allHistory"===e?s.setState({keepDays:-1,disabled:!0}):"noHistory"===e?s.setState({keepDays:0,disabled:!0}):s.setState({disabled:!1}),s.setState({allHistory:"allHistory"===e,noHistory:"noHistory"===e,autoHistory:"autoHistory"===e})},s.state={keepDays:-1,expireDays:30,disabled:!0,allHistory:!0,noHistory:!1,autoHistory:!1,errorInfo:""},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;w.I.getRepoHistoryLimit(this.props.repoID).then((function(t){e.setState({keepDays:t.data.keep_days,allHistory:t.data.keep_days<0,noHistory:0===t.data.keep_days,autoHistory:t.data.keep_days>0,disabled:!(t.data.keep_days>0),expireDays:t.data.keep_days>0?t.data.keep_days:30})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))}},{key:"render",value:function(){var e=this,t=this.props.itemName;return(0,g.jsxs)(d.Z,{isOpen:!0,toggle:this.props.toggleDialog,children:[(0,g.jsxs)(J.Z,{toggle:this.props.toggleDialog,children:[(0,g.jsx)("span",{className:"op-target",title:t,children:t})," ",(0,u.ih)("History Setting")]}),(0,g.jsx)(b.Z,{children:(0,g.jsxs)(Ct.Z,{children:[!u.Qo&&(0,g.jsx)(ge.Z,{children:(0,g.jsx)(fe.Z,{className:"error",children:(0,u.ih)("Setting library history is disabled by Admin.")})}),(0,g.jsxs)(ge.Z,{check:!0,children:[(0,g.jsx)(re.Z,{type:"radio",name:"radio1",checked:this.state.allHistory,disabled:!u.Qo,onChange:function(){e.setLimitDays("allHistory")}})," ",(0,g.jsx)(fe.Z,{children:(0,u.ih)("Keep full history")})]}),(0,g.jsxs)(ge.Z,{check:!0,children:[(0,g.jsx)(re.Z,{type:"radio",name:"radio1",checked:this.state.noHistory,disabled:!u.Qo,onChange:function(){e.setLimitDays("noHistory")}})," ",(0,g.jsx)(fe.Z,{children:(0,u.ih)("Don't keep history")})]}),(0,g.jsxs)(ge.Z,{check:!0,children:[(0,g.jsx)(re.Z,{type:"radio",name:"radio1",checked:this.state.autoHistory,disabled:!u.Qo,onChange:function(){e.setLimitDays("autoHistory")}})," ",(0,g.jsx)(fe.Z,{children:(0,u.ih)("Only keep a period of history:")}),(0,g.jsx)(re.Z,{type:"text",className:"expire-input",value:this.state.expireDays,onChange:this.onChange,disabled:this.state.disabled,onKeyDown:this.handleKeyDown})," ",(0,g.jsx)(fe.Z,{children:(0,g.jsx)("span",{children:(0,u.ih)("days")})})]}),this.state.errorInfo&&(0,g.jsx)(bt.Z,{color:"danger",children:this.state.errorInfo})]})}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:this.props.toggleDialog,children:(0,u.ih)("Cancel")}),(0,g.jsx)($.Z,{color:"primary",onClick:this.submit,children:(0,u.ih)("Submit")})]})]})}}]),n}(a.Component),_t=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).handleOldPasswordInputChange=function(e){s.setState({oldPassword:e.target.value})},s.handleNewPasswordInputChange=function(e){s.setState({newPassword:e.target.value})},s.handleNewPasswordAgainInputChange=function(e){s.setState({newPasswordAgain:e.target.value})},s.formSubmit=function(e){var t=s.state,n=t.oldPassword,i=t.newPassword,r=t.newPasswordAgain;return n?i?i.length",t=(0,u.ih)("New password has been sent to your email {mail}. Please check your mailbox. If you don\u2019t receive the password, please check if your email address is properly configured.").replace("{mail}",e);return(0,g.jsxs)(d.Z,{isOpen:!0,toggle:this.props.toggleDialog,children:[(0,g.jsx)(J.Z,{toggle:this.props.toggleDialog,children:(0,u.ih)("Reset library password")}),(0,g.jsxs)(b.Z,{children:[this.state.showLoading&&(0,g.jsx)("span",{children:(0,u.ih)("Sending new password...")}),this.state.showSuccess&&(0,g.jsx)("div",{dangerouslySetInnerHTML:{__html:t}}),this.state.showError&&(0,g.jsx)("span",{className:"err-message",children:this.state.errMessage})]})]})}}]),n}(a.Component),Lt=n(72233),Ot=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).handleInputChange=function(e){s.setState({inputValue:e})},s.formSubmit=function(){var e=s.state.inputValue;if(e&&e.length){s.setState({submitBtnDisabled:!0});var t=s.props,n=t.repoID,i=t.repoName,r=e.map((function(e,t){return e.value})).join(",");w.I.addNewRepoLabels(n,r).then((function(e){var t=(0,u.ih)("Successfully added label(s) for library {placeholder}").replace("{placeholder}",i);j.Z.success(t),s.props.toggleDialog()})).catch((function(e){var t=m.c.getErrorMsg(e);s.setState({formErrorMsg:t,submitBtnDisabled:!1})}))}else s.setState({formErrorMsg:(0,u.ih)("It is required.")})},s.state={isLoading:!0,existingLabels:null,errorMsg:"",submitBtnDisabled:!1},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;w.I.getAllRepoSnapshotLabels().then((function(t){e.setState({isLoading:!1,existingLabels:t.data,errorMsg:""})})).catch((function(t){var n=m.c.getErrorMsg(t);e.setState({isLoading:!1,errorMsg:n})}))}},{key:"render",value:function(){return(0,g.jsxs)(d.Z,{isOpen:!0,toggle:this.props.toggleDialog,children:[(0,g.jsx)(J.Z,{toggle:this.props.toggleDialog,children:(0,u.ih)("Label Current State")}),(0,g.jsx)(b.Z,{children:(0,g.jsx)(Rt,{data:this.state,handleChange:this.handleInputChange})}),this.state.existingLabels&&(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)("button",{className:"btn btn-secondary",onClick:this.props.toggleDialog,children:(0,u.ih)("Cancel")}),(0,g.jsx)("button",{className:"btn btn-primary",disabled:this.state.submitBtnDisabled,onClick:this.formSubmit,children:(0,u.ih)("Submit")})]})]})}}]),n}(a.Component),Rt=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.data,t=e.isLoading,n=e.errorMsg,i=e.existingLabels,s=e.formErrorMsg;return t?(0,g.jsx)(R.Z,{}):n?(0,g.jsx)("p",{className:"error mt-4 text-center",children:n}):(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(Lt.Z,{isMulti:!0,onChange:this.props.handleChange,placeholder:"",options:i.map((function(e,t){return{label:e,value:e}}))}),s&&(0,g.jsx)("p",{className:"error m-0 mt-2",children:s})]})}}]),n}(a.Component),Et=Ot,At=n(47976),Ut=n(55146),zt=n(13327),Bt=n(99574),Gt=n(71757),Ht=n(82377),Wt=n(51840),Vt=n(32487),qt=n(71218),Kt=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onMouseEnter=function(){s.setState({isOperationShow:!0})},s.onMouseLeave=function(){s.setState({isOperationShow:!1})},s.deleteUserFolderPermission=function(){var e=s.props.item;s.props.deleteUserFolderPermission(e)},s.onChangeUserFolderPerm=function(e){var t=s.props.item;s.props.onChangeUserFolderPerm(t.repo_id,e,t.folder_path,t.user_email)},s.state={isOperationShow:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item,t=e.permission;return(0,g.jsxs)("tr",{onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,onFocus:this.onMouseEnter,children:[(0,g.jsx)("td",{children:(0,g.jsx)("a",{href:"".concat(u.ze,"profile/").concat(encodeURIComponent(e.user_email),"/"),target:"_blank",rel:"noreferrer",children:e.user_name})}),this.props.showPath&&(0,g.jsx)("td",{children:(0,g.jsx)("a",{href:"".concat(u.ze,"library/").concat(e.repo_id,"/").concat(m.c.encodePath(this.props.repoName+e.folder_path)),children:e.folder_name})}),(0,g.jsx)("td",{children:(0,g.jsx)(je.Z,{isTextMode:!0,autoFocus:!0,isEditIconShow:this.state.isOperationShow,currentPermission:t,permissions:this.props.permissions,onPermissionChanged:this.onChangeUserFolderPerm})}),(0,g.jsx)("td",{children:(0,g.jsx)("span",{tabIndex:"0",role:"button",className:"sf2-icon-x3 action-icon ".concat(this.state.isOperationShow?"":"hide"),onClick:this.deleteUserFolderPermission,onKeyDown:m.c.onKeyDown,title:(0,u.ih)("Delete"),"aria-label":(0,u.ih)("Delete")})})]})}}]),n}(a.Component),Yt=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).handleUserSelectChange=function(e){s.setState({selectedUsers:e})},s.setPermission=function(e){s.setState({permission:e})},s.addUserFolderPerm=function(){var e=s.state.selectedUsers,t=s.props.folderPath||s.state.folderPath;if(!e||!e.length||!t)return!1;var n=e.map((function(e,t){return e.email}));(s.props.isDepartmentRepo?w.I.addDepartmentRepoUserFolderPerm(s.props.repoID,s.state.permission,t,n):w.I.addUserFolderPerm(s.props.repoID,s.state.permission,t,n)).then((function(e){var t=[];if(e.data.failed.length>0)for(var n=0;n0&&this.state.errorMsg.map((function(e,t){var n="";return n=e.user_email?e.user_email+": "+e.error_msg:e,(0,g.jsx)("tr",{children:(0,g.jsx)("td",{colSpan:3,children:(0,g.jsx)("p",{className:"error",children:n})})},t)}))]})]}),(0,g.jsx)("div",{className:"share-list-container",children:(0,g.jsxs)("table",{className:"table-thead-hidden w-xs-250",children:[i,(0,g.jsx)("tbody",{children:n.map((function(n,i){return(0,g.jsx)(Kt,{item:n,permissions:e.permissions,deleteUserFolderPermission:e.deleteUserFolderPermItem,onChangeUserFolderPerm:e.onChangeUserFolderPerm,showPath:t,repoName:e.props.repoName},i)}))})]})})]})}}]),n}(a.Component),Jt=Yt,Xt=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onMouseEnter=function(){s.setState({isOperationShow:!0})},s.onMouseLeave=function(){s.setState({isOperationShow:!1})},s.deleteGroupPermissionItem=function(){var e=s.props.item;s.props.deleteGroupPermissionItem(e)},s.onChangeGroupPermission=function(e){var t=s.props.item;s.props.onChangeGroupPermission(t,e)},s.state={isOperationShow:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item;return(0,g.jsxs)("tr",{onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,onFocus:this.onMouseEnter,children:[(0,g.jsx)("td",{children:(0,g.jsx)("a",{href:"".concat(u.ze,"group/").concat(e.group_id,"/"),target:"_blank",rel:"noreferrer",children:e.group_name})}),this.props.showPath&&(0,g.jsx)("td",{children:(0,g.jsx)("a",{href:"".concat(u.ze,"library/").concat(e.repo_id,"/").concat(m.c.encodePath(this.props.repoName+e.folder_path)),children:e.folder_name})}),(0,g.jsx)("td",{children:(0,g.jsx)(je.Z,{isTextMode:!0,autoFocus:!0,isEditIconShow:this.state.isOperationShow,currentPermission:e.permission,permissions:this.props.permissions,onPermissionChanged:this.onChangeGroupPermission})}),(0,g.jsx)("td",{children:(0,g.jsx)("span",{tabIndex:"0",role:"button",className:"sf2-icon-x3 action-icon ".concat(this.state.isOperationShow?"":"hide"),onClick:this.deleteGroupPermissionItem,onKeyDown:m.c.onKeyDown,title:(0,u.ih)("Delete"),"aria-label":(0,u.ih)("Delete")})})]})}}]),n}(a.Component),Qt=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).handleSelectChange=function(e){s.setState({selectedOption:e})},s.loadOptions=function(){w.I.shareableGroups().then((function(e){s.options=e.data.map((function(e,t){return{id:e.id,label:e.name,value:e.name}}))}))},s.listGroupPermissionItems=function(){var e=s.props,t=e.isDepartmentRepo,n=e.repoID,i=e.folderPath;(t?w.I.listDepartmentRepoGroupFolderPerm(n,i):w.I.listGroupFolderPerm(n,i)).then((function(e){0!==e.data.length&&s.setState({groupPermissionItems:e.data})}))},s.setPermission=function(e){s.setState({permission:e})},s.addGroupFolderPerm=function(){var e=s.state.selectedOption,t=s.props.folderPath||s.state.folderPath;if(!e||!t)return!1;(s.props.isDepartmentRepo?w.I.addDepartmentRepoGroupFolderPerm(s.props.repoID,s.state.permission,t,e.id):w.I.addGroupFolderPerm(s.props.repoID,s.state.permission,t,e.id)).then((function(e){var t=[];if(e.data.failed.length>0)for(var n=0;n0&&this.state.errorMsg.map((function(e,t){var n=e.group_id+": "+e.error_msg;return(0,g.jsx)("tr",{children:(0,g.jsx)("td",{colSpan:3,children:(0,g.jsx)("p",{className:"error",children:n})})},t)}))]})]}),(0,g.jsx)("div",{className:"share-list-container",children:(0,g.jsxs)("table",{className:"table-thead-hidden w-xs-250",children:[n,(0,g.jsx)("tbody",{children:this.state.groupPermissionItems.map((function(n,i){return(0,g.jsx)(Xt,{item:n,permissions:e.permissions,deleteGroupPermissionItem:e.deleteGroupPermissionItem,onChangeGroupPermission:e.onChangeGroupPermission,showPath:t,repoName:e.props.repoName},i)}))})]})})]})}}]),n}(a.Component),$t=Qt,en=(n(36491),function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).toggle=function(e){s.state.activeTab!==e&&s.setState({activeTab:e})},s.renderContent=function(){var e=s.state.activeTab;return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("div",{className:"share-dialog-side",children:(0,g.jsxs)(At.Z,{pills:!0,children:[(0,g.jsx)(Ut.Z,{role:"tab","aria-selected":"userPermission"===e,"aria-controls":"user-perm-panel",children:(0,g.jsx)(zt.Z,{className:"userPermission"===e?"active":"",onClick:s.toggle.bind((0,D.Z)(s),"userPermission"),tabIndex:"0",onKeyDown:m.c.onKeyDown,children:(0,u.ih)("User Permission")})}),(0,g.jsx)(Ut.Z,{role:"tab","aria-selected":"groupPermission"===e,"aria-controls":"group-perm-panel",children:(0,g.jsx)(zt.Z,{className:"groupPermission"===e?"active":"",onClick:s.toggle.bind((0,D.Z)(s),"groupPermission"),tabIndex:"0",onKeyDown:m.c.onKeyDown,children:(0,u.ih)("Group Permission")})})]})}),(0,g.jsx)("div",{className:"share-dialog-main",children:(0,g.jsxs)(Bt.Z,{activeTab:s.state.activeTab,children:[(0,g.jsx)(Gt.Z,{tabId:"userPermission",role:"tabpanel",id:"user-perm-panel",children:(0,g.jsx)(Jt,{repoID:s.props.repoID,repoName:s.props.repoName,folderPath:s.props.folderPath,isDepartmentRepo:s.props.isDepartmentRepo})}),(0,g.jsx)(Gt.Z,{tabId:"groupPermission",role:"tabpanel",id:"group-perm-panel",children:(0,g.jsx)($t,{repoID:s.props.repoID,repoName:s.props.repoName,folderPath:s.props.folderPath,isDepartmentRepo:s.props.isDepartmentRepo})})]})})]})},s.state={activeTab:"userPermission"},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.repoName,n=e.folderName;return(0,g.jsx)("div",{children:(0,g.jsxs)(d.Z,{isOpen:!0,style:{maxWidth:"980px"},className:"share-dialog",toggle:this.props.toggleDialog,children:[(0,g.jsx)(J.Z,{toggle:this.props.toggleDialog,children:(0,g.jsx)("span",{children:t?m.c.generateDialogTitle((0,u.ih)("{placeholder} Folder Permission"),t):m.c.generateDialogTitle((0,u.ih)("Set {placeholder}'s permission"),n)})}),(0,g.jsx)(b.Z,{className:"dialog-list-container share-dialog-content",role:"tablist",children:this.renderContent()})]})})}}]),n}(a.Component)),tn=n(67145),nn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onMenuItemClick=function(e){var t=m.c.getEventData(e,"toggle");s.props.onMenuItemClick(t)},s.onMenuItemKeyDown=function(e){"Enter"!=e.key&&"Space"!=e.key||s.onMenuItemClick(e)},s.onDropdownToggleClick=function(e){s.toggleOperationMenu(e)},s.onDropdownToggleKeyDown=function(e){"Enter"!=e.key&&"Space"!=e.key||s.onDropdownToggleClick(e)},s.toggleOperationMenu=function(e){var t=e.target?e.target.dataset:null;t&&t.toggle&&"Rename"===t.toggle?s.setState({isItemMenuShow:!s.state.isItemMenuShow}):s.setState({isItemMenuShow:!s.state.isItemMenuShow},(function(){s.state.isItemMenuShow?s.props.onFreezedItem():s.props.onUnfreezedItem()}))},s.toggleAdvancedMenuShown=function(e){s.setState({isAdvancedMenuShown:!0})},s.toggleAdvancedMenu=function(e){e.stopPropagation(),s.setState({isAdvancedMenuShown:!s.state.isAdvancedMenuShown},(function(){s.toggleOperationMenu(e)}))},s.onDropDownMouseMove=function(e){s.state.isAdvancedMenuShown&&e.target&&"dropdown-item"===e.target.className&&s.setState({isAdvancedMenuShown:!1})},s.generatorOperations=function(){var e=s.props.repo,t=u._y&&e.encrypted&&u.yV&&u.aZ,n=["Rename","Transfer"];if(u.n_&&n.push("Folder Permission"),n.push("Share Admin","Divider"),e.encrypted&&n.push("Change Password"),t&&n.push("Reset Password"),u._y){var i=e.monitored?"Unwatch File Changes":"Watch File Changes";n.push(i)}n.push("Divider","History Setting","Advanced");for(var r=0;r'+m.c.HTMLescape(e.repo_name)+"",n=(0,u.ih)("{placeholder} API Token").replace("{placeholder}",t);return(0,g.jsxs)(d.Z,{isOpen:!0,style:{maxWidth:"800px"},toggle:this.props.onRepoAPITokenToggle,children:[(0,g.jsx)(J.Z,{toggle:this.props.onRepoAPITokenToggle,children:(0,g.jsx)("p",{dangerouslySetInnerHTML:{__html:n},className:"m-0"})}),(0,g.jsx)(b.Z,{children:(0,g.jsx)("div",{className:"o-auto",children:this.renderContent()})})]})}}]),n}(a.Component),pn=n(74165),dn=n(15861),un=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.accountName,n=e.closeDialog;return(0,g.jsxs)(d.Z,{isOpen:!0,toggle:n,children:[(0,g.jsx)(J.Z,{toggle:n,children:(0,u.ih)("Delete SeaTable base")}),(0,g.jsx)(b.Z,{children:(0,g.jsx)("p",{className:"pb-6",children:(0,u.ih)("Are you sure to delete SeaTable {accountName}?").replace("{accountName}",t)})}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:n,children:(0,u.ih)("Cancel")}),(0,g.jsx)($.Z,{color:"primary",onClick:this.props.onDeleteSeatables,children:(0,u.ih)("Delete")})]})]})}}]),n}(a.Component),mn=un,gn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).openDialog=function(){s.setState({isShowDialog:!0})},s.closeDialog=function(){s.setState({isShowDialog:!1})},s.onDeleteSeatables=function(){var e=s.props.setting;s.props.deleteStableAccountSetting(e,"seatable_account_manage"),s.closeDialog()},s.state={isShowDialog:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state.isShowDialog,t=this.props,n=t.setting,i=t.t,s=t.index,r=n.base_api_token,o=n.base_name,a=n.seatable_server_url;return(0,g.jsxs)("tr",{children:[(0,g.jsx)("td",{width:"30%",className:"text-truncate",title:o,"aria-label":o,children:o}),(0,g.jsx)("td",{id:"abc-".concat(s),width:"55%",className:"text-truncate",title:a,"aria-label":a,children:a}),(0,g.jsxs)("td",{width:"15%",children:[(0,g.jsx)("span",{className:"account-operation-btn",onClick:this.props.editSeatableSettingAccount.bind(this,r),title:(0,u.ih)("Edit"),"aria-label":(0,u.ih)("Edit"),children:(0,g.jsx)("i",{className:"sf2-icon-edit",style:{color:"#999"}})}),(0,g.jsx)("span",{className:"account-operation-btn",onClick:this.openDialog,title:(0,u.ih)("Delete"),"aria-label":(0,u.ih)("Delete"),children:(0,g.jsx)("i",{className:"sf2-icon-delete",style:{color:"#999"}})})]}),e&&(0,g.jsx)(mn,{t:i,accountName:o,onDeleteSeatables:this.onDeleteSeatables,closeDialog:this.closeDialog})]},"account-".concat(r))}}]),n}(a.Component),fn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){var e;(0,i.Z)(this,n);for(var s=arguments.length,r=new Array(s),o=0;o'+m.c.HTMLescape(o.repo_name)+"",l=(0,u.ih)("{placeholder} SeaTable integration").replace("{placeholder}",a);return(0,g.jsxs)(d.Z,{isOpen:!0,toggle:r,className:"account-dialog",children:[(0,g.jsx)(J.Z,{toggle:r,children:(0,g.jsx)("p",{dangerouslySetInnerHTML:{__html:l},className:"m-0"})}),(0,g.jsx)(b.Z,{className:"account-dialog-content",children:(0,g.jsxs)("div",{className:"account-dialog-main",children:[i===wn&&(0,g.jsx)(vn,{seatableSettings:n,changeStatus:function(){return e.changeStatus(jn)},editSeatableSettingAccount:this.editSeatableSettingAccount,deleteStableAccountSetting:this.deleteStableAccountSetting}),i===jn&&(0,g.jsx)(Dn,{changeStatus:function(){return e.changeStatus(wn)},onSubmit:this.onSubmit}),i===yn&&(0,g.jsx)(Dn,{currentDtableInfo:s,changeStatus:function(){return e.changeStatus(wn)},onSubmit:this.onSubmit})]})})]})}}]),n}(a.Component),Cn=Sn,bn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onMouseEnter=function(){s.setState({isOperationShow:!0})},s.onMouseLeave=function(){s.setState({isOperationShow:!1})},s.onDeleteLink=function(e){e.preventDefault(),s.props.deleteItem(s.props.item)},s.state={isOperationShow:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e,t=this.props.item,n="/"===t.path?"/":t.path.slice(0,t.path.length-1);return e=t.is_dir?"".concat(u.ze,"library/").concat(t.repo_id,"/").concat(encodeURIComponent(t.repo_name)).concat(m.c.encodePath(n)):"".concat(u.ze,"lib/").concat(t.repo_id,"/file").concat(m.c.encodePath(t.path)),(0,g.jsxs)("tr",{onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,onFocus:this.onMouseEnter,children:[(0,g.jsx)("td",{className:"name",children:t.creator_name}),(0,g.jsx)("td",{children:t.is_dir?(0,g.jsx)(c.rU,{to:e,children:t.obj_name}):(0,g.jsx)("a",{href:e,target:"_blank",rel:"noreferrer",children:t.obj_name})}),(0,g.jsx)("td",{children:(0,g.jsx)("a",{href:t.link,target:"_blank",rel:"noreferrer",children:t.link})}),(0,g.jsx)("td",{children:(0,g.jsx)("span",{tabIndex:"0",role:"button",className:"sf2-icon-x3 action-icon ".concat(this.state.isOperationShow?"":"invisible"),onClick:this.onDeleteLink,onKeyDown:m.c.onKeyDown,title:(0,u.ih)("Delete"),"aria-label":(0,u.ih)("Delete")})})]})}}]),n}(a.Component),kn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).deleteItem=function(e){w.I.deleteRepoShareLink(s.props.repo.repo_id,e.token).then((function(){var t=s.state.items.filter((function(t){return t.token!==e.token}));s.setState({items:t});var n=(0,u.ih)("Successfully deleted 1 item");j.Z.success(n)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.state={loading:!0,errorMsg:"",items:[]},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;w.I.listRepoShareLinks(this.props.repo.repo_id).then((function(t){e.setState({loading:!1,items:t.data})})).catch((function(t){e.setState({loading:!1,errorMsg:m.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){var e=this,t=this.state,n=t.loading,i=t.errorMsg,s=t.items;return(0,g.jsxs)(a.Fragment,{children:[n&&(0,g.jsx)(R.Z,{}),!n&&i&&(0,g.jsx)("p",{className:"error text-center mt-8",children:i}),!n&&!i&&!s.length&&(0,g.jsx)(O.Z,{forDialog:!0,children:(0,g.jsx)("p",{className:"text-secondary",children:(0,u.ih)("No share links")})}),!n&&!i&&s.length>0&&(0,g.jsxs)("table",{className:"table-hover",children:[(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"22%",children:(0,u.ih)("Creator")}),(0,g.jsx)("th",{width:"20%",children:(0,u.ih)("Name")}),(0,g.jsx)("th",{width:"50%",children:(0,u.ih)("Link")}),(0,g.jsx)("th",{width:"8%"})]})}),(0,g.jsx)("tbody",{children:s.map((function(t,n){return(0,g.jsx)(bn,{item:t,deleteItem:e.deleteItem},n)}))})]})]})}}]),n}(a.Component),In=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onMouseEnter=function(){s.setState({isOperationShow:!0})},s.onMouseLeave=function(){s.setState({isOperationShow:!1})},s.onDeleteLink=function(e){e.preventDefault(),s.props.deleteItem(s.props.item)},s.state={isOperationShow:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item,t="/"===e.path?"/":e.path.slice(0,e.path.length-1),n="".concat(u.ze,"library/").concat(e.repo_id,"/").concat(encodeURIComponent(e.repo_name)).concat(m.c.encodePath(t));return(0,g.jsxs)("tr",{onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,onFocus:this.onMouseEnter,children:[(0,g.jsx)("td",{className:"name",children:e.creator_name}),(0,g.jsx)("td",{children:(0,g.jsx)(c.rU,{to:n,children:e.obj_name})}),(0,g.jsx)("td",{children:(0,g.jsx)("a",{href:e.link,target:"_blank",rel:"noreferrer",children:e.link})}),(0,g.jsx)("td",{children:(0,g.jsx)("span",{tabIndex:"0",role:"button",className:"sf2-icon-x3 action-icon ".concat(this.state.isOperationShow?"":"invisible"),onClick:this.onDeleteLink,onKeyDown:m.c.onKeyDown,title:(0,u.ih)("Delete"),"aria-label":(0,u.ih)("Delete")})})]})}}]),n}(a.Component),Nn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).deleteItem=function(e){w.I.deleteRepoUploadLink(s.props.repo.repo_id,e.token).then((function(){var t=s.state.items.filter((function(t){return t.token!==e.token}));s.setState({items:t});var n=(0,u.ih)("Successfully deleted 1 item");j.Z.success(n)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.state={loading:!0,errorMsg:"",items:[]},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;w.I.listRepoUploadLinks(this.props.repo.repo_id).then((function(t){e.setState({loading:!1,items:t.data})})).catch((function(t){e.setState({loading:!1,errorMsg:m.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){var e=this,t=this.state,n=t.loading,i=t.errorMsg,s=t.items;return(0,g.jsxs)(a.Fragment,{children:[n&&(0,g.jsx)(R.Z,{}),!n&&i&&(0,g.jsx)("p",{className:"error text-center mt-8",children:i}),!n&&!i&&!s.length&&(0,g.jsx)(O.Z,{forDialog:!0,children:(0,g.jsx)("p",{className:"text-secondary",children:(0,u.ih)("No upload links")})}),!n&&!i&&s.length>0&&(0,g.jsxs)("table",{className:"table-hover",children:[(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"22%",children:(0,u.ih)("Creator")}),(0,g.jsx)("th",{width:"20%",children:(0,u.ih)("Name")}),(0,g.jsx)("th",{width:"50%",children:(0,u.ih)("Link")}),(0,g.jsx)("th",{width:"8%"})]})}),(0,g.jsx)("tbody",{children:s.map((function(t,n){return(0,g.jsx)(In,{item:t,deleteItem:e.deleteItem},n)}))})]})]})}}]),n}(a.Component),Mn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onMouseEnter=function(){s.setState({isOperationShow:!0})},s.onMouseLeave=function(){s.setState({isOperationShow:!1})},s.onDeleteLink=function(e){e.preventDefault(),s.props.deleteItem(s.props.item)},s.changePerm=function(e){var t=s.props.item;w.I.updateShareToUserItemPermission(t.repo_id,t.path,"user",t.share_to,e).then((function(){s.setState({permission:e})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onEditPermission=function(e){e.nativeEvent.stopImmediatePropagation(),s.setState({isShowPermEditor:!0})},s.state={permission:s.props.item.permission,isOperationShow:!1,isShowPermEditor:!1},s.permissions=["rw","r"],u._y&&("/"===s.props.item.path&&s.props.isRepoOwner&&s.permissions.push("admin"),s.permissions.push("cloud-edit","preview")),s}return(0,s.Z)(n,[{key:"render",value:function(){var e,t=this.props.item,n="/"===t.path?"/":t.path.slice(0,t.path.length-1);return e="".concat(u.ze,"library/").concat(t.repo_id,"/").concat(encodeURIComponent(t.repo_name)).concat(m.c.encodePath(n)),(0,g.jsxs)("tr",{onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,onFocus:this.onMouseEnter,children:[(0,g.jsx)("td",{children:(0,g.jsx)(c.rU,{to:e,children:m.c.getFolderName(t.path)})}),(0,g.jsx)("td",{className:"name",children:t.share_to_name}),(0,g.jsxs)("td",{children:[!this.state.isShowPermEditor&&(0,g.jsxs)("div",{children:[(0,g.jsx)("span",{children:t.permission_name||m.c.sharePerms(this.state.permission)}),this.state.isOperationShow&&(0,g.jsx)("a",{href:"#",role:"button","aria-label":(0,u.ih)("Edit"),title:(0,u.ih)("Edit"),className:"fa fa-pencil-alt attr-action-icon",onClick:this.onEditPermission})]}),this.state.isShowPermEditor&&(0,g.jsx)(je.Z,{repoID:t.repo_id,isTextMode:!0,isEditIconShow:this.state.isOperationShow,isEditing:!0,currentPermission:this.state.permission,permissions:this.permissions,onPermissionChanged:this.changePerm})]}),(0,g.jsx)("td",{children:(0,g.jsx)("span",{tabIndex:"0",role:"button",className:"sf2-icon-x3 action-icon ".concat(this.state.isOperationShow?"":"invisible"),onClick:this.onDeleteLink,onKeyDown:m.c.onKeyDown,title:(0,u.ih)("Delete"),"aria-label":(0,u.ih)("Delete")})})]})}}]),n}(a.Component),Zn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).deleteItem=function(e){w.I.deleteShareToUserItem(e.repo_id,e.path,"user",e.share_to).then((function(t){var n=s.state.items.filter((function(t){return t.path+t.share_to!==e.path+e.share_to}));s.setState({items:n});var i=(0,u.ih)("Successfully deleted 1 item");j.Z.success(i)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.state={loading:!0,errorMsg:"",items:[]},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;w.I.getAllRepoFolderShareInfo(this.props.repo.repo_id,"user").then((function(t){e.setState({loading:!1,items:t.data.share_info_list})})).catch((function(t){e.setState({loading:!1,errorMsg:m.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){var e=this,t=this.state,n=t.loading,i=t.errorMsg,s=t.items,r=this.props.repo.owner_email===u.b6;return(0,g.jsxs)(a.Fragment,{children:[n&&(0,g.jsx)(R.Z,{}),!n&&i&&(0,g.jsx)("p",{className:"error text-center mt-8",children:i}),!n&&!i&&!s.length&&(0,g.jsx)(O.Z,{forDialog:!0,children:(0,g.jsx)("p",{className:"text-secondary",children:(0,u.ih)("No user shares")})}),!n&&!i&&s.length>0&&(0,g.jsxs)("table",{className:"table-hover",children:[(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"30%",children:(0,u.ih)("Name")}),(0,g.jsx)("th",{width:"30%",children:(0,u.ih)("User")}),(0,g.jsx)("th",{width:"30%",children:(0,u.ih)("Permission")}),(0,g.jsx)("th",{width:"10%"})]})}),(0,g.jsx)("tbody",{children:s.map((function(t,n){return(0,g.jsx)(Mn,{item:t,deleteItem:e.deleteItem,isRepoOwner:r},n)}))})]})]})}}]),n}(a.Component),Pn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onMouseEnter=function(){s.setState({isOperationShow:!0})},s.onMouseLeave=function(){s.setState({isOperationShow:!1})},s.onDeleteLink=function(e){e.preventDefault(),s.props.deleteItem(s.props.item)},s.changePerm=function(e){var t=s.props.item;w.I.updateShareToGroupItemPermission(t.repo_id,t.path,"group",t.share_to,e).then((function(){s.setState({permission:e})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onEditPermission=function(e){e.nativeEvent.stopImmediatePropagation(),s.setState({isShowPermEditor:!0})},s.state={permission:s.props.item.permission,isOperationShow:!1,isShowPermEditor:!1},s.permissions=["rw","r"],u._y&&("/"===s.props.item.path&&s.props.isRepoOwner&&s.permissions.push("admin"),s.permissions.push("cloud-edit","preview")),s}return(0,s.Z)(n,[{key:"render",value:function(){var e,t=this.props.item,n="/"===t.path?"/":t.path.slice(0,t.path.length-1);return e="".concat(u.ze,"library/").concat(t.repo_id,"/").concat(encodeURIComponent(t.repo_name)).concat(m.c.encodePath(n)),(0,g.jsxs)("tr",{onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,onFocus:this.onMouseEnter,children:[(0,g.jsx)("td",{children:(0,g.jsx)(c.rU,{to:e,children:m.c.getFolderName(t.path)})}),(0,g.jsx)("td",{className:"name",children:t.share_to_name}),(0,g.jsxs)("td",{children:[!this.state.isShowPermEditor&&(0,g.jsxs)("div",{children:[(0,g.jsx)("span",{children:t.permission_name||m.c.sharePerms(this.state.permission)}),this.state.isOperationShow&&(0,g.jsx)("a",{href:"#",role:"button","aria-label":(0,u.ih)("Edit"),title:(0,u.ih)("Edit"),className:"fa fa-pencil-alt attr-action-icon",onClick:this.onEditPermission})]}),this.state.isShowPermEditor&&(0,g.jsx)(je.Z,{repoID:t.repo_id,isTextMode:!0,isEditIconShow:this.state.isOperationShow,isEditing:!0,currentPermission:this.state.permission,permissions:this.permissions,onPermissionChanged:this.changePerm})]}),(0,g.jsx)("td",{children:(0,g.jsx)("span",{tabIndex:"0",role:"button",className:"sf2-icon-x3 action-icon ".concat(this.state.isOperationShow?"":"invisible"),onClick:this.onDeleteLink,onKeyDown:m.c.onKeyDown,title:(0,u.ih)("Delete"),"aria-label":(0,u.ih)("Delete")})})]})}}]),n}(a.Component),Fn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).deleteItem=function(e){w.I.deleteShareToGroupItem(e.repo_id,e.path,"group",e.share_to).then((function(t){var n=s.state.items.filter((function(t){return t.path+t.share_to!==e.path+e.share_to}));s.setState({items:n});var i=(0,u.ih)("Successfully deleted 1 item");j.Z.success(i)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.state={loading:!0,errorMsg:"",items:[]},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;w.I.getAllRepoFolderShareInfo(this.props.repo.repo_id,"group").then((function(t){e.setState({loading:!1,items:t.data.share_info_list})})).catch((function(t){e.setState({loading:!1,errorMsg:m.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){var e=this,t=this.state,n=t.loading,i=t.errorMsg,s=t.items,r=this.props.repo.owner_email===u.b6;return(0,g.jsxs)(a.Fragment,{children:[n&&(0,g.jsx)(R.Z,{}),!n&&i&&(0,g.jsx)("p",{className:"error text-center mt-8",children:i}),!n&&!i&&!s.length&&(0,g.jsx)(O.Z,{forDialog:!0,children:(0,g.jsx)("p",{className:"text-secondary",children:(0,u.ih)("No group shares")})}),!n&&!i&&s.length>0&&(0,g.jsxs)("table",{className:"table-hover",children:[(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"30%",children:(0,u.ih)("Name")}),(0,g.jsx)("th",{width:"30%",children:(0,u.ih)("Group")}),(0,g.jsx)("th",{width:"30%",children:(0,u.ih)("Permission")}),(0,g.jsx)("th",{width:"10%"})]})}),(0,g.jsx)("tbody",{children:s.map((function(t,n){return(0,g.jsx)(Pn,{item:t,deleteItem:e.deleteItem,isRepoOwner:r},n)}))})]})]})}}]),n}(a.Component),_n=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).getInitialActiveTab=function(){return s.enableShareLink?"shareLink":s.enableUploadLink?"uploadLink":"shareToUser"},s.toggle=function(e){s.state.activeTab!==e&&s.setState({activeTab:e})},s.onTabKeyDown=function(e){"Enter"!=e.key&&"Space"!=e.key||e.target.click()},s.enableShareLink=!s.props.repo.encrypted&&u.Fl,s.enableUploadLink=!s.props.repo.encrypted&&u.$g,s.state={activeTab:s.getInitialActiveTab()},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state.activeTab,t=this.props.repo.repo_name;return(0,g.jsx)("div",{children:(0,g.jsxs)(d.Z,{isOpen:!0,style:{maxWidth:"760px"},className:"share-dialog",toggle:this.props.toggleDialog,children:[(0,g.jsxs)(J.Z,{toggle:this.props.toggleDialog,children:[(0,g.jsx)("span",{className:"op-target",title:t,children:t})," ",(0,u.ih)("Share Admin")]}),(0,g.jsx)(b.Z,{className:"dialog-list-container share-dialog-content",role:"tablist",children:(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("div",{className:"share-dialog-side",children:(0,g.jsxs)(At.Z,{pills:!0,children:[this.enableShareLink&&(0,g.jsx)(Ut.Z,{role:"tab","aria-selected":"shareLink"===e,"aria-controls":"share-link-panel",children:(0,g.jsx)(zt.Z,{className:"shareLink"===e?"active":"",onClick:this.toggle.bind(this,"shareLink"),tabIndex:"0",onKeyDown:this.onTabKeyDown,children:(0,u.ih)("Share Links")})}),this.enableUploadLink&&(0,g.jsx)(Ut.Z,{role:"tab","aria-selected":"uploadLink"===e,"aria-controls":"upload-link-panel",children:(0,g.jsx)(zt.Z,{className:"uploadLink"===e?"active":"",onClick:this.toggle.bind(this,"uploadLink"),tabIndex:"0",onKeyDown:this.onTabKeyDown,children:(0,u.ih)("Upload Links")})}),(0,g.jsx)(Ut.Z,{role:"tab","aria-selected":"shareToUser"===e,"aria-controls":"share-to-user-panel",children:(0,g.jsx)(zt.Z,{className:"shareToUser"===e?"active":"",onClick:this.toggle.bind(this,"shareToUser"),tabIndex:"0",onKeyDown:this.onTabKeyDown,children:(0,u.ih)("User Shares")})}),(0,g.jsx)(Ut.Z,{role:"tab","aria-selected":"shareToGroup"===e,"aria-controls":"share-to-group-panel",children:(0,g.jsx)(zt.Z,{className:"shareToGroup"===e?"active":"",onClick:this.toggle.bind(this,"shareToGroup"),tabIndex:"0",onKeyDown:this.onTabKeyDown,children:(0,u.ih)("Group Shares")})})]})}),(0,g.jsx)("div",{className:"share-dialog-main",children:(0,g.jsxs)(Bt.Z,{activeTab:this.state.activeTab,children:[this.enableShareLink&&"shareLink"===e&&(0,g.jsx)(Gt.Z,{tabId:"shareLink",role:"tabpanel",id:"share-link-panel",children:(0,g.jsx)(kn,{repo:this.props.repo})}),this.enableUploadLink&&"uploadLink"===e&&(0,g.jsx)(Gt.Z,{tabId:"uploadLink",role:"tabpanel",id:"upload-link-panel",children:(0,g.jsx)(Nn,{repo:this.props.repo})}),"shareToUser"===e&&(0,g.jsx)(Gt.Z,{tabId:"shareToUser",role:"tabpanel",id:"share-to-user-panel",children:(0,g.jsx)(Zn,{repo:this.props.repo})}),"shareToGroup"===e&&(0,g.jsx)(Gt.Z,{tabId:"shareToGroup",role:"tabpanel",id:"share-to-group-panel",children:(0,g.jsx)(Fn,{repo:this.props.repo})})]})})]})})]})})}}]),n}(a.Component),Tn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).submit=function(){var e;if(s.state.isAutoDel){e=s.state.autoDelDays;if(!/^-?\d+$/.test(e)||e<=0)return void s.setState({errorInfo:(0,u.ih)("Please enter a positive integer")})}else e=0;var t=s.props.repoID;w.I.setRepoOldFilesAutoDelDays(t,e).then((function(e){s.props.toggleDialog(),j.Z.success((0,u.ih)("Successfully set it."))})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.handleKeyDown=function(e){"Enter"===e.key&&(s.submit(),e.preventDefault())},s.onChange=function(e){var t=e.target.value;s.setState({autoDelDays:t})},s.updateRadioCheck=function(e){"noAutoDel"===e?s.setState({isAutoDel:!1}):"autoDel"===e&&s.setState({isAutoDel:!0})},s.state={autoDelDays:0,isAutoDel:!1,errorInfo:""},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;w.I.getRepoOldFilesAutoDelDays(this.props.repoID).then((function(t){e.setState({autoDelDays:t.data.auto_delete_days,isAutoDel:t.data.auto_delete_days>0})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))}},{key:"render",value:function(){var e=this;return(0,g.jsxs)(d.Z,{isOpen:!0,toggle:this.props.toggleDialog,children:[(0,g.jsx)(J.Z,{toggle:this.props.toggleDialog,children:(0,u.ih)("Auto deletion")}),(0,g.jsx)(b.Z,{children:(0,g.jsxs)(Ct.Z,{children:[(0,g.jsxs)(ge.Z,{check:!0,children:[(0,g.jsx)(re.Z,{type:"radio",name:"radio1",checked:!this.state.isAutoDel,onChange:function(){e.updateRadioCheck("noAutoDel")}})," ",(0,g.jsx)(fe.Z,{children:(0,u.ih)("Do not automatically delete files")})]}),(0,g.jsxs)(ge.Z,{check:!0,children:[(0,g.jsx)(re.Z,{type:"radio",name:"radio1",checked:this.state.isAutoDel,onChange:function(){e.updateRadioCheck("autoDel")}})," ",(0,g.jsx)(fe.Z,{children:(0,u.ih)("Automatically delete files that are not modified within certain days:")}),(0,g.jsx)(re.Z,{type:"text",className:"expire-input",value:this.state.autoDelDays,disabled:!this.state.isAutoDel,onChange:this.onChange,onKeyDown:this.handleKeyDown})," ",(0,g.jsx)(fe.Z,{children:(0,g.jsx)("span",{children:(0,u.ih)("days")})})]}),this.state.errorInfo&&(0,g.jsx)(bt.Z,{color:"danger",children:this.state.errorInfo})]})}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:this.props.toggleDialog,children:(0,u.ih)("Cancel")}),(0,g.jsx)($.Z,{color:"primary",onClick:this.submit,children:(0,u.ih)("Submit")})]})]})}}]),n}(a.Component),Ln=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onFocus=function(){s.props.isItemFreezed||s.setState({isOpIconShow:!0})},s.onMouseEnter=function(){s.props.isItemFreezed||s.setState({isOpIconShow:!0,highlight:!0})},s.onMouseLeave=function(){s.props.isItemFreezed||s.setState({isOpIconShow:!1,highlight:!1})},s.onMenuItemClick=function(e){switch(e){case"Star":case"Unstar":s.onToggleStarRepo();break;case"Share":s.onShareToggle();break;case"Delete":s.onDeleteToggle();break;case"Rename":s.onRenameToggle();break;case"Transfer":s.onTransferToggle();break;case"History Setting":s.onHistorySettingToggle();break;case"Change Password":s.onChangePasswordToggle();break;case"Reset Password":s.onResetPasswordToggle();break;case"Watch File Changes":s.watchFileChanges();break;case"Unwatch File Changes":s.unwatchFileChanges();break;case"Folder Permission":s.onFolderPermissionToggle();break;case"Label Current State":s.onLabelToggle();break;case"API Token":s.onAPITokenToggle();break;case"Share Admin":s.toggleRepoShareAdminDialog();break;case"Old Files Auto Delete":s.toggleOldFilesAutoDelDialog();break;case"SeaTable integration":s.onSeaTableIntegrationToggle()}},s.visitRepo=function(){!s.state.isRenaming&&s.props.repo.repo_name&&(0,c.c4)(s.repoURL)},s.onRepoClick=function(){s.props.onRepoClick(s.props.repo)},s.onToggleStarRepo=function(e){e.preventDefault();var t=s.props.repo.repo_name;s.state.isStarred?w.I.unstarItem(s.props.repo.repo_id,"/").then((function(){s.setState({isStarred:!s.state.isStarred});var e=(0,u.ih)("Successfully unstarred {library_name_placeholder}.").replace("{library_name_placeholder}",t);j.Z.success(e)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)})):w.I.starItem(s.props.repo.repo_id,"/").then((function(){s.setState({isStarred:!s.state.isStarred});var e=(0,u.ih)("Successfully starred {library_name_placeholder}.").replace("{library_name_placeholder}",t);j.Z.success(e)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.watchFileChanges=function(){var e=s.props.repo;w.I.monitorRepo(e.repo_id).then((function(){s.props.onMonitorRepo(e,!0)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.unwatchFileChanges=function(){var e=s.props.repo;w.I.unMonitorRepo(e.repo_id).then((function(){s.props.onMonitorRepo(e,!1)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onShareToggle=function(e){void 0!=e&&e.preventDefault(),s.setState({isShareDialogShow:!s.state.isShareDialogShow})},s.onDeleteToggle=function(e){e.preventDefault(),s.setState({isDeleteDialogShow:!s.state.isDeleteDialogShow})},s.onRenameToggle=function(){s.props.onFreezedItem(),s.setState({isRenaming:!s.state.isRenaming})},s.onTransferToggle=function(){s.setState({isTransferDialogShow:!s.state.isTransferDialogShow})},s.onHistorySettingToggle=function(){s.setState({isHistorySettingDialogShow:!s.state.isHistorySettingDialogShow})},s.onChangePasswordToggle=function(){s.setState({isChangePasswordDialogShow:!s.state.isChangePasswordDialogShow})},s.onResetPasswordToggle=function(){s.setState({isResetPasswordDialogShow:!s.state.isResetPasswordDialogShow})},s.onLabelToggle=function(){s.setState({isLabelRepoStateDialogOpen:!s.state.isLabelRepoStateDialogOpen})},s.onFolderPermissionToggle=function(){s.setState({isFolderPermissionDialogShow:!s.state.isFolderPermissionDialogShow})},s.onAPITokenToggle=function(){s.setState({isAPITokenDialogShow:!s.state.isAPITokenDialogShow})},s.onSeaTableIntegrationToggle=function(){s.setState({isSeaTableIntegrationShow:!s.state.isSeaTableIntegrationShow})},s.toggleRepoShareAdminDialog=function(){s.setState({isRepoShareAdminDialogOpen:!s.state.isRepoShareAdminDialogOpen})},s.toggleOldFilesAutoDelDialog=function(){s.setState({isOldFilesAutoDelDialogOpen:!s.state.isOldFilesAutoDelDialogOpen})},s.onUnfreezedItem=function(){s.setState({highlight:!1,isOpIconShow:!1}),s.props.onUnfreezedItem()},s.onRenameConfirm=function(e){var t=s.props.repo,n=t.repo_id;w.I.renameRepo(n,e).then((function(){s.props.onRenameRepo(t,e),s.onRenameCancel()})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onRenameCancel=function(){s.props.onUnfreezedItem(),s.setState({isRenaming:!s.state.isRenaming})},s.onTransferRepo=function(e){var t=s.props.repo.repo_id;w.I.transferRepo(t,e.email).then((function(e){s.props.onTransferRepo(t);var n=(0,u.ih)("Successfully transferred the library.");j.Z.success(n)})).catch((function(e){e.response?j.Z.danger(e.response.data.error_msg||(0,u.ih)("Error"),{duration:3}):j.Z.danger((0,u.ih)("Failed. Please check the network."),{duration:3})})),s.onTransferToggle()},s.onDeleteRepo=function(e){w.I.deleteRepo(e.repo_id).then((function(t){s.setState({isRepoDeleted:!0,isDeleteDialogShow:!1}),s.props.onDeleteRepo(e);var n=e.repo_name,i=(0,u.ih)("Successfully deleted {name}.").replace("{name}",n);j.Z.success(i)})).catch((function(t){var n=m.c.getErrorMsg(t);if(n===(0,u.ih)("Error")){var i=e.repo_name;n=(0,u.ih)("Failed to delete {name}.").replace("{name}",i)}j.Z.danger(n),s.setState({isRepoDeleted:!1})}))},s.renderPCUI=function(){var e=s.props.repo,t=m.c.getLibIconUrl(e),n=m.c.getLibIconTitle(e),i="".concat(u.ze,"library/").concat(e.repo_id,"/").concat(m.c.encodePath(e.repo_name),"/");return(0,g.jsxs)("tr",{className:s.state.highlight?"tr-highlight":"",onMouseEnter:s.onMouseEnter,onMouseLeave:s.onMouseLeave,onClick:s.onRepoClick,onFocus:s.onFocus,children:[(0,g.jsx)("td",{className:"text-center",children:(0,g.jsx)("a",{href:"#",role:"button","aria-label":s.state.isStarred?(0,u.ih)("Unstar"):(0,u.ih)("Star"),onClick:s.onToggleStarRepo,children:(0,g.jsx)("i",{className:"fa-star ".concat(s.state.isStarred?"fas":"far star-empty")})})}),(0,g.jsx)("td",{children:(0,g.jsx)("img",{src:t,title:n,alt:n,width:"24"})}),(0,g.jsxs)("td",{children:[s.state.isRenaming&&(0,g.jsx)(tn.Z,{name:e.repo_name,onRenameConfirm:s.onRenameConfirm,onRenameCancel:s.onRenameCancel}),!s.state.isRenaming&&e.repo_name&&(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(c.rU,{to:i,children:e.repo_name}),e.monitored&&(0,g.jsx)(nt,{repoID:e.repo_id})]}),!s.state.isRenaming&&!e.repo_name&&(0,u.ih)("Broken (please contact your administrator to fix this library)")]}),(0,g.jsx)("td",{children:e.repo_name&&s.state.isOpIconShow&&(0,g.jsxs)("div",{children:[(0,g.jsx)("a",{href:"#",className:"op-icon sf2-icon-share",title:(0,u.ih)("Share"),role:"button","aria-label":(0,u.ih)("Share"),onClick:s.onShareToggle}),(0,g.jsx)("a",{href:"#",className:"op-icon sf2-icon-delete",title:(0,u.ih)("Delete"),role:"button","aria-label":(0,u.ih)("Delete"),onClick:s.onDeleteToggle}),(0,g.jsx)(sn,{isPC:!0,repo:s.props.repo,onMenuItemClick:s.onMenuItemClick,onFreezedItem:s.props.onFreezedItem,onUnfreezedItem:s.onUnfreezedItem})]})}),(0,g.jsx)("td",{children:e.size}),u.al.length>0&&(0,g.jsx)("td",{children:e.storage_name}),(0,g.jsx)("td",{title:A()(e.last_modified).format("llll"),children:A()(e.last_modified).fromNow()})]})},s.renderMobileUI=function(){var e=s.props.repo,t=m.c.getLibIconUrl(e),n=m.c.getLibIconTitle(e),i=s.repoURL="".concat(u.ze,"library/").concat(e.repo_id,"/").concat(m.c.encodePath(e.repo_name),"/");return(0,g.jsxs)("tr",{className:s.state.highlight?"tr-highlight":"",onMouseEnter:s.onMouseEnter,onMouseLeave:s.onMouseLeave,onClick:s.onRepoClick,children:[(0,g.jsx)("td",{onClick:s.visitRepo,children:(0,g.jsx)("img",{src:t,title:n,alt:n,width:"24"})}),(0,g.jsxs)("td",{onClick:s.visitRepo,children:[s.state.isRenaming&&(0,g.jsx)(tn.Z,{name:e.repo_name,onRenameConfirm:s.onRenameConfirm,onRenameCancel:s.onRenameCancel}),!s.state.isRenaming&&e.repo_name&&(0,g.jsxs)("div",{children:[(0,g.jsx)(c.rU,{to:i,children:e.repo_name}),e.monitored&&(0,g.jsx)(nt,{repoID:e.repo_id})]}),!s.state.isRenaming&&!e.repo_name&&(0,g.jsx)("div",{children:"(gettext('Broken (please contact your administrator to fix this library)'))"}),(0,g.jsx)("span",{className:"item-meta-info",children:e.size}),(0,g.jsx)("span",{className:"item-meta-info",title:A()(e.last_modified).format("llll"),children:A()(e.last_modified).fromNow()})]}),(0,g.jsx)("td",{children:e.repo_name&&(0,g.jsx)(sn,{repo:s.props.repo,isStarred:s.state.isStarred,onMenuItemClick:s.onMenuItemClick,onFreezedItem:s.props.onFreezedItem,onUnfreezedItem:s.onUnfreezedItem})})]})},s.state={isOpIconShow:!1,isStarred:s.props.repo.starred,isRenaming:!1,isShareDialogShow:!1,isDeleteDialogShow:!1,isTransferDialogShow:!1,isHistorySettingDialogShow:!1,isChangePasswordDialogShow:!1,isResetPasswordDialogShow:!1,isLabelRepoStateDialogOpen:!1,isFolderPermissionDialogShow:!1,isAPITokenDialogShow:!1,isSeaTableIntegrationShow:!1,isRepoShareAdminDialogOpen:!1,isRepoDeleted:!1,isOldFilesAutoDelDialogOpen:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.repo;return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(p(),{query:"(min-width: 768px)",children:this.renderPCUI()}),(0,g.jsx)(p(),{query:"(max-width: 767.8px)",children:this.renderMobileUI()}),this.state.isShareDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Qe.Z,{itemType:"library",itemName:e.repo_name,itemPath:"/",repoID:e.repo_id,repoEncrypted:e.encrypted,enableDirPrivateShare:!0,userPerm:e.permission,toggleDialog:this.onShareToggle})}),this.state.isDeleteDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Zt.Z,{repo:e,isRepoDeleted:this.state.isRepoDeleted,onDeleteRepo:this.onDeleteRepo,toggle:this.onDeleteToggle})}),this.state.isTransferDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Pt.Z,{itemName:e.repo_name,submit:this.onTransferRepo,toggleDialog:this.onTransferToggle})}),this.state.isHistorySettingDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Ft,{repoID:e.repo_id,itemName:e.repo_name,toggleDialog:this.onHistorySettingToggle})}),this.state.isChangePasswordDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(_t,{repoID:e.repo_id,repoName:e.repo_name,toggleDialog:this.onChangePasswordToggle})}),this.state.isResetPasswordDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Tt,{repoID:e.repo_id,toggleDialog:this.onResetPasswordToggle})}),this.state.isLabelRepoStateDialogOpen&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Et,{repoID:e.repo_id,repoName:e.repo_name,toggleDialog:this.onLabelToggle})}),this.state.isFolderPermissionDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(en,{toggleDialog:this.onFolderPermissionToggle,repoID:e.repo_id,repoName:e.repo_name})}),this.state.isAPITokenDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(hn,{repo:e,onRepoAPITokenToggle:this.onAPITokenToggle})}),this.state.isSeaTableIntegrationShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Cn,{repo:e,onSeaTableIntegrationToggle:this.onSeaTableIntegrationToggle})}),this.state.isRepoShareAdminDialogOpen&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(_n,{repo:e,toggleDialog:this.toggleRepoShareAdminDialog})}),this.state.isOldFilesAutoDelDialogOpen&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Tn,{repoID:e.repo_id,toggleDialog:this.toggleOldFilesAutoDelDialog})})]})}}]),n}(a.Component),On=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onFreezedItem=function(){s.setState({isItemFreezed:!0})},s.onUnfreezedItem=function(){s.setState({isItemFreezed:!1})},s.sortByName=function(e){e.preventDefault();var t="asc"==s.props.sortOrder?"desc":"asc";s.props.sortRepoList("name",t)},s.sortByTime=function(e){e.preventDefault();var t="asc"==s.props.sortOrder?"desc":"asc";s.props.sortRepoList("time",t)},s.sortBySize=function(e){e.preventDefault();var t="asc"==s.props.sortOrder?"desc":"asc";s.props.sortRepoList("size",t)},s.renderRepoListView=function(){return(0,g.jsx)(a.Fragment,{children:s.props.repoList.map((function(e){return(0,g.jsx)(Ln,{repo:e,isItemFreezed:s.state.isItemFreezed,onFreezedItem:s.onFreezedItem,onUnfreezedItem:s.onUnfreezedItem,onRenameRepo:s.props.onRenameRepo,onDeleteRepo:s.props.onDeleteRepo,onTransferRepo:s.props.onTransferRepo,onMonitorRepo:s.props.onMonitorRepo,onRepoClick:s.props.onRepoClick},e.repo_id)}))})},s.renderPCUI=function(){var e=u.al.length>0,t="asc"===s.props.sortOrder?(0,g.jsx)("span",{className:"fas fa-caret-up"}):(0,g.jsx)("span",{className:"fas fa-caret-down"});return(0,g.jsxs)("table",{children:[(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"4%"}),(0,g.jsx)("th",{width:"4%",children:(0,g.jsx)("span",{className:"sr-only",children:(0,u.ih)("Library Type")})}),(0,g.jsx)("th",{width:e?"33%":"38%",children:(0,g.jsxs)("a",{className:"d-block table-sort-op",href:"#",onClick:s.sortByName,children:[(0,u.ih)("Name")," ","name"===s.props.sortBy&&t]})}),(0,g.jsx)("th",{width:"14%",children:(0,g.jsx)("span",{className:"sr-only",children:(0,u.ih)("Actions")})}),(0,g.jsx)("th",{width:e?"15%":"20%",children:(0,g.jsxs)("a",{className:"d-block table-sort-op",href:"#",onClick:s.sortBySize,children:[(0,u.ih)("Size")," ","size"===s.props.sortBy&&t]})}),e?(0,g.jsx)("th",{width:"15%",children:(0,u.ih)("Storage Backend")}):null,(0,g.jsx)("th",{width:e?"15%":"20%",children:(0,g.jsxs)("a",{className:"d-block table-sort-op",href:"#",onClick:s.sortByTime,children:[(0,u.ih)("Last Update")," ","time"===s.props.sortBy&&t]})})]})}),(0,g.jsx)("tbody",{children:s.renderRepoListView()})]})},s.renderMobileUI=function(){return(0,g.jsxs)("table",{className:"table-thead-hidden",children:[(0,g.jsx)(Xe,{}),(0,g.jsx)("tbody",{children:s.renderRepoListView()})]})},s.state={isItemFreezed:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(p(),{query:"(min-width: 768px)",children:this.renderPCUI()}),(0,g.jsx)(p(),{query:"(max-width: 767.8px)",children:this.renderMobileUI()})]})}}]),n}(a.Component),Rn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){var e;(0,i.Z)(this,n);for(var s=arguments.length,r=new Array(s),o=0;o0&&(0,g.jsx)("span",{className:"sf3-font sf3-font-sort action-icon",onClick:this.toggleSortOptionsDialog})]}),(0,g.jsxs)("div",{className:"cur-view-content",children:[this.state.isLoading&&(0,g.jsx)(R.Z,{}),!this.state.isLoading&&this.state.errorMsg&&(0,g.jsx)("p",{className:"error text-center mt-8",children:this.state.errorMsg}),!this.state.isLoading&&!this.state.errorMsg&&0===this.state.repoList.length&&this.emptyTip,!this.state.isLoading&&!this.state.errorMsg&&this.state.repoList.length>0&&(0,g.jsx)(On,{sortBy:this.state.sortBy,sortOrder:this.state.sortOrder,repoList:this.state.repoList,onRenameRepo:this.onRenameRepo,onDeleteRepo:this.onDeleteRepo,onTransferRepo:this.onTransferRepo,onMonitorRepo:this.onMonitorRepo,onRepoClick:this.onRepoClick,sortRepoList:this.sortRepoList})]})]}),!this.state.isLoading&&!this.state.errorMsg&&this.state.isGuideForNewDialogOpen&&(0,g.jsx)(En,{toggleDialog:this.toggleGuideForNewDialog}),this.state.isSortOptionsDialogOpen&&(0,g.jsx)(Oe,{toggleDialog:this.toggleSortOptionsDialog,sortBy:this.state.sortBy,sortOrder:this.state.sortOrder,sortItems:this.sortRepoList}),this.state.isShowDetails&&(0,g.jsx)("div",{className:"cur-view-detail",children:(0,g.jsx)(Mt,{currentRepo:this.state.currentRepo,closeDetails:this.closeDetails})})]})]})}}]),n}(a.Component);A().locale(u.KQ);var Un=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).refreshDeletedRepoList=function(e){var t=s.state.deletedRepoList.filter((function(t){return t.repo_id!==e}));s.setState({deletedRepoList:t})},s.state={deletedRepoList:[],isLoading:!0},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;w.I.listDeletedRepo().then((function(t){e.setState({deletedRepoList:t.data,isLoading:!1})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))}},{key:"render",value:function(){return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("div",{className:"main-panel-north",children:(0,g.jsx)(Ee.Z,{onSearchedClick:this.props.onSearchedClick})}),(0,g.jsx)("div",{className:"main-panel-center",children:(0,g.jsxs)("div",{className:"cur-view-container",children:[(0,g.jsx)("div",{className:"cur-view-path",children:(0,g.jsxs)("div",{className:"path-container",children:[(0,g.jsx)(c.rU,{to:u.ze+"my-libs/",children:(0,u.ih)("My Libraries")}),(0,g.jsx)("span",{className:"path-split",children:"/"}),(0,g.jsx)("span",{children:(0,u.ih)("Deleted Libraries")})]})}),(0,g.jsxs)("div",{className:"cur-view-content",children:[this.state.isLoading&&(0,g.jsx)(R.Z,{}),!this.state.isLoading&&0===this.state.deletedRepoList.length&&(0,g.jsxs)(O.Z,{children:[(0,g.jsx)("h2",{children:(0,u.ih)("No deleted libraries")}),(0,g.jsx)("p",{children:(0,u.ih)("You have not deleted any libraries in the last {placeholder} days. A deleted library will be cleaned automatically after this period.").replace("{placeholder}",u.UR)})]}),0!==this.state.deletedRepoList.length&&(0,g.jsxs)("div",{children:[(0,g.jsx)("p",{className:"tip mt-2",children:(0,u.ih)("Tip: libraries deleted {placeholder} days ago will be cleaned automatically.").replace("{placeholder}",u.UR)}),(0,g.jsx)(zn,{deletedRepoList:this.state.deletedRepoList,refreshDeletedRepoList:this.refreshDeletedRepoList})]})]})]})})]})}}]),n}(a.Component),zn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props.deletedRepoList;return(0,g.jsxs)("table",{children:[(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{style:{width:"4%"}}),(0,g.jsx)("th",{style:{width:"52%"},children:(0,u.ih)("Name")}),(0,g.jsx)("th",{style:{width:"30%"},children:(0,u.ih)("Deleted Time")}),(0,g.jsx)("th",{style:{width:"14%"}})]})}),(0,g.jsx)("tbody",{children:t&&t.map((function(t){return(0,g.jsx)(Bn,{repo:t,refreshDeletedRepoList:e.props.refreshDeletedRepoList},t.repo_id)}))})]})}}]),n}(a.Component),Bn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onMouseEnter=function(){s.props.isItemFreezed||s.setState({hideRestoreMenu:!1,highlight:!0})},s.onMouseLeave=function(){s.props.isItemFreezed||s.setState({hideRestoreMenu:!0,highlight:!1})},s.restoreDeletedRepo=function(e){e.preventDefault();var t=s.props.repo.repo_id,n=s.props.repo.repo_name;w.I.restoreDeletedRepo(t).then((function(e){var i=(0,u.ih)("Successfully restored the library.")+" "+n;j.Z.success(i),s.props.refreshDeletedRepoList(t)})).catch((function(e){var t=m.c.getErrorMsg(e);t===(0,u.ih)("Error")&&(t=(0,u.ih)("Failed. Please check the network.")),j.Z.danger(t)}))},s.state={hideRestoreMenu:!0,highlight:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=A().utc(this.props.repo.del_time).toDate();e=A()(e).fromNow();var t=m.c.getLibIconUrl(this.props.repo);return(0,g.jsxs)("tr",{className:this.state.highlight?"tr-highlight":"",onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,tabIndex:"0",onFocus:this.onMouseEnter,children:[(0,g.jsx)("td",{className:"text-center",children:(0,g.jsx)("img",{src:t,alt:"",width:"24"})}),(0,g.jsx)("td",{className:"name",children:this.props.repo.repo_name}),(0,g.jsx)("td",{className:"update",children:e}),(0,g.jsx)("td",{children:(0,g.jsx)("a",{href:"#",onClick:this.restoreDeletedRepo,title:(0,u.ih)("Restore"),role:"button","aria-label":(0,u.ih)("Restore"),className:"sf2-icon-reply action-icon ".concat(this.state.highlight?"":"vh")})})]})}}]),n}(a.Component),Gn=Un,Hn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){var e;(0,i.Z)(this,n);for(var s=arguments.length,r=new Array(s),o=0;o-1,r=t.owner_email===u.b6,o=t.is_admin,a=[];if(u._y){if(-1!=t.owner_email.indexOf("@seafile_group")){if(i){if(t.owner_email==n.id+"@seafile_group"){if(s.isDeparementOnwerGroupMember=!0,a=["Rename"],u.n_&&a.push("Folder Permission"),a.push("Share Admin","Divider"),t.encrypted&&a.push("Change Password"),t.encrypted&&u.yV&&u.aZ&&a.push("Reset Password"),"r"==t.permission||"rw"==t.permission){var l=t.monitored?"Unwatch File Changes":"Watch File Changes";a.push(l)}return a.push("Divider","History Setting","Details"),m.c.isDesktop()&&a.push("Advanced"),a}a.push("Unshare")}}else(r||o)&&a.push("Share"),(i||r||o)&&a.push("Unshare");if("r"==t.permission||"rw"==t.permission){var c=t.monitored?"Unwatch File Changes":"Watch File Changes";a.push(c)}}else r&&a.push("Share"),(i||r)&&a.push("Unshare");return a},s.generatorMobileMenu=function(){var e=[];if(s.props.libraryType&&"public"===s.props.libraryType){var t=s.props.repo.owner_email===u.b6;(u.AU||t)&&e.push("Unshare")}else e=s.generatorOperations(),s.isDeparementOnwerGroupMember&&(e.unshift("Unshare"),e.unshift("Share"));return e.length?(0,g.jsxs)(U.Z,{isOpen:s.state.isItemMenuShow,toggle:s.toggleOperationMenu,children:[(0,g.jsx)(z.Z,{tag:"i",className:"sf-dropdown-toggle fa fa-ellipsis-v ml-0",title:(0,u.ih)("More Operations"),"data-toggle":"dropdown","aria-expanded":s.state.isItemMenuShow,onClick:s.clickOperationMenuToggle}),(0,g.jsxs)("div",{className:"".concat(s.state.isItemMenuShow?"":"d-none"),onClick:s.toggleOperationMenu,children:[(0,g.jsx)("div",{className:"mobile-operation-menu-bg-layer"}),(0,g.jsx)("div",{className:"mobile-operation-menu",children:e.map((function(e,t){return(0,g.jsx)(G.Z,{"data-toggle":e,onClick:s.onMenuItemClick,children:s.translateMenuItem(e)},t)}))})]})]}):null},s.generatorPCMenu=function(){var e=[];if(s.props.libraryType&&"public"===s.props.libraryType){var t=s.props.repo.owner_email===u.b6;(u.AU||t)&&e.push("Unshare")}else e=s.generatorOperations();var n=(0,g.jsx)("a",{href:"#",className:"op-icon sf2-icon-share",title:(0,u.ih)("Share"),role:"button","aria-label":(0,u.ih)("Share"),onClick:s.onItemShare}),i=(0,g.jsx)("a",{href:"#",className:"op-icon sf2-icon-x3",title:(0,u.ih)("Unshare"),role:"button","aria-label":(0,u.ih)("Unshare"),onClick:s.onItemUnshare}),r=(0,g.jsx)("a",{href:"#",className:"op-icon sf2-icon-delete",title:(0,u.ih)("Delete"),role:"button","aria-label":(0,u.ih)("Delete"),onClick:s.onItemDeleteToggle});if(s.isDeparementOnwerGroupMember){var o=s.getAdvancedOperations();return(0,g.jsxs)(a.Fragment,{children:[n,r,(0,g.jsxs)(U.Z,{isOpen:s.state.isItemMenuShow,toggle:s.toggleOperationMenu,children:[(0,g.jsx)(z.Z,{className:"sf-dropdown-toggle sf2-icon-caret-down border-0 p-0",title:(0,u.ih)("More Operations"),"data-toggle":"dropdown","aria-expanded":s.state.isItemMenuShow,"aria-haspopup":!0,style:{minWidth:"0"},onClick:s.clickOperationMenuToggle,onKeyDown:s.onDropdownToggleKeyDown}),(0,g.jsx)(B.Z,{onMouseMove:s.onDropDownMouseMove,children:e.map((function(e,t){return"Divider"==e?(0,g.jsx)(G.Z,{divider:!0},t):"Advanced"==e?(0,g.jsxs)(U.Z,{direction:"right",className:"w-100",isOpen:s.state.isAdvancedMenuShown,toggle:s.toggleAdvancedMenu,onMouseMove:function(e){e.stopPropagation()},children:[(0,g.jsx)(z.Z,{caret:!0,className:"dropdown-item font-weight-normal rounded-0 d-flex justify-content-between align-items-center pr-2",onMouseEnter:s.toggleAdvancedMenuShown,children:s.translateMenuItem(e)}),(0,g.jsx)(B.Z,{children:o.map((function(e,t){return(0,g.jsx)(G.Z,{"data-toggle":e,onClick:s.onMenuItemClick,onKeyDown:s.onMenuItemKeyDown,children:s.translateMenuItem(e)},t)}))})]},t):(0,g.jsx)(G.Z,{"data-toggle":e,onClick:s.onMenuItemClick,onKeyDown:s.onMenuItemKeyDown,children:s.translateMenuItem(e)},t)}))})]})]})}return(0,g.jsx)(a.Fragment,{children:e.map((function(e){switch(e){case"Share":return(0,g.jsx)(a.Fragment,{children:n},e);case"Unshare":return(0,g.jsx)(a.Fragment,{children:i},e);case"Watch File Changes":case"Unwatch File Changes":return(0,g.jsxs)(U.Z,{isOpen:s.state.isItemMenuShow,toggle:s.toggleOperationMenu,children:[(0,g.jsx)(z.Z,{className:"sf-dropdown-toggle sf2-icon-caret-down border-0 p-0",title:(0,u.ih)("More Operations"),"data-toggle":"dropdown","aria-expanded":s.state.isItemMenuShow,"aria-haspopup":!0,style:{minWidth:"0"},onClick:s.clickOperationMenuToggle,onKeyDown:s.onDropdownToggleKeyDown}),(0,g.jsx)(B.Z,{children:[e].map((function(e,t){return(0,g.jsx)(G.Z,{"data-toggle":e,onClick:s.onMenuItemClick,onKeyDown:s.onMenuItemKeyDown,children:s.translateMenuItem(e)},t)}))})]},e);default:return null}}))})},s.onToggleStarRepo=function(e){e.preventDefault();var t=s.props.repo.repo_name;s.state.isStarred?w.I.unstarItem(s.props.repo.repo_id,"/").then((function(){s.setState({isStarred:!s.state.isStarred});var e=(0,u.ih)("Successfully unstarred {library_name_placeholder}.").replace("{library_name_placeholder}",t);j.Z.success(e)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)})):w.I.starItem(s.props.repo.repo_id,"/").then((function(){s.setState({isStarred:!s.state.isStarred});var e=(0,u.ih)("Successfully starred {library_name_placeholder}.").replace("{library_name_placeholder}",t);j.Z.success(e)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.renderPCUI=function(){var e=s.getRepoComputeParams(),t=e.iconUrl,n=e.iconTitle,i=e.libPath,r=s.props.repo;return(0,g.jsx)(a.Fragment,{children:(0,g.jsxs)("tr",{className:s.state.highlight?"tr-highlight":"",onMouseEnter:s.onMouseEnter,onMouseOver:s.onMouseOver,onMouseLeave:s.onMouseLeave,onFocus:s.onMouseEnter,children:[(0,g.jsx)("td",{className:"text-center",children:(0,g.jsx)("a",{href:"#",role:"button","aria-label":s.state.isStarred?(0,u.ih)("Unstar"):(0,u.ih)("Star"),onClick:s.onToggleStarRepo,children:(0,g.jsx)("i",{className:"fa-star ".concat(s.state.isStarred?"fas":"far star-empty")})})}),(0,g.jsx)("td",{children:(0,g.jsx)("img",{src:t,title:n,alt:n,width:"24"})}),(0,g.jsx)("td",{children:s.state.isRenaming?(0,g.jsx)(tn.Z,{name:r.repo_name,onRenameConfirm:s.onRenameConfirm,onRenameCancel:s.onRenameCancel}):(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(c.rU,{to:i,children:r.repo_name}),r.monitored&&(0,g.jsx)(nt,{repoID:r.repo_id})]})}),(0,g.jsx)("td",{children:s.state.isOperationShow&&s.generatorPCMenu()}),(0,g.jsx)("td",{children:r.size}),(0,g.jsx)("td",{title:A()(r.last_modified).format("llll"),children:A()(r.last_modified).fromNow()}),(0,g.jsx)("td",{title:r.owner_contact_email,children:r.owner_name})]})})},s.visitRepo=function(){s.state.isRenaming||(0,c.c4)(s.repoURL)},s.renderMobileUI=function(){var e=s.getRepoComputeParams(),t=e.iconUrl,n=e.iconTitle,i=e.libPath,r=s.props.repo;return s.repoURL=i,(0,g.jsx)(a.Fragment,{children:(0,g.jsxs)("tr",{className:s.state.highlight?"tr-highlight":"",onMouseEnter:s.onMouseEnter,onMouseOver:s.onMouseOver,onMouseLeave:s.onMouseLeave,children:[(0,g.jsx)("td",{onClick:s.visitRepo,children:(0,g.jsx)("img",{src:t,title:n,width:"24",alt:n})}),(0,g.jsxs)("td",{onClick:s.visitRepo,children:[s.state.isRenaming?(0,g.jsx)(tn.Z,{name:r.repo_name,onRenameConfirm:s.onRenameConfirm,onRenameCancel:s.onRenameCancel}):(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(c.rU,{to:i,children:r.repo_name}),r.monitored&&(0,g.jsx)(nt,{repoID:r.repo_id})]}),(0,g.jsx)("br",{}),(0,g.jsx)("span",{className:"item-meta-info",title:r.owner_contact_email,children:r.owner_name}),(0,g.jsx)("span",{className:"item-meta-info",children:r.size}),(0,g.jsx)("span",{className:"item-meta-info",title:A()(r.last_modified).format("llll"),children:A()(r.last_modified).fromNow()})]}),(0,g.jsx)("td",{children:s.generatorMobileMenu()})]})})},s.state={highlight:!1,isOperationShow:!1,isItemMenuShow:!1,isAdvancedMenuShown:!1,isShowSharedDialog:!1,isRenaming:!1,isStarred:s.props.repo.starred,isFolderPermissionDialogOpen:!1,isHistorySettingDialogShow:!1,isDeleteDialogShow:!1,isAPITokenDialogShow:!1,isRepoShareAdminDialogOpen:!1,isRepoDeleted:!1,isChangePasswordDialogShow:!1,isResetPasswordDialogShow:!1,isOldFilesAutoDelDialogOpen:!1},s.isDeparementOnwerGroupMember=!1,s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.repo,t=e.owner_email.indexOf("@seafile_group")>-1;return(0,g.jsxs)(a.Fragment,{children:[m.c.isDesktop()?this.renderPCUI():this.renderMobileUI(),this.state.isShowSharedDialog&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Qe.Z,{itemType:"library",itemName:e.repo_name,itemPath:"/",repoID:e.repo_id,repoEncrypted:e.encrypted,enableDirPrivateShare:!0,userPerm:e.permission,isAdmin:e.is_admin,isGroupOwnedRepo:t,toggleDialog:this.toggleShareDialog})}),this.state.isFolderPermissionDialogOpen&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(en,{toggleDialog:this.onItemFolderPermissionToggle,repoID:e.repo_id,repoName:e.repo_name,isDepartmentRepo:!0})}),this.state.isDeleteDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Zt.Z,{repo:this.props.repo,isRepoDeleted:this.state.isRepoDeleted,onDeleteRepo:this.onItemDelete,toggle:this.onItemDeleteToggle})}),this.state.isHistorySettingDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Ft,{repoID:e.repo_id,itemName:e.repo_name,toggleDialog:this.onHistorySettingToggle})}),this.state.isAPITokenDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(hn,{repo:e,onRepoAPITokenToggle:this.onAPITokenToggle})}),this.state.isRepoShareAdminDialogOpen&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(_n,{repo:e,toggleDialog:this.toggleRepoShareAdminDialog})}),this.state.isChangePasswordDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(_t,{repoID:e.repo_id,repoName:e.repo_name,toggleDialog:this.onChangePasswordToggle})}),this.state.isResetPasswordDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Tt,{repoID:e.repo_id,toggleDialog:this.onResetPasswordToggle})}),this.state.isOldFilesAutoDelDialogOpen&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Tn,{repoID:e.repo_id,toggleDialog:this.toggleOldFilesAutoDelDialog})})]})}}]),n}(a.Component),qn=Vn,Kn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).sortByName=function(e){e.preventDefault();var t="asc"==s.props.sortOrder?"desc":"asc";s.props.sortItems("name",t)},s.sortByTime=function(e){e.preventDefault();var t="asc"==s.props.sortOrder?"desc":"asc";s.props.sortItems("time",t)},s.sortBySize=function(e){e.preventDefault();var t="asc"==s.props.sortOrder?"desc":"asc";s.props.sortItems("size",t)},s.getSortMetaData=function(){return{sortByName:"name"==s.props.sortBy,sortByTime:"time"==s.props.sortBy,sortBySize:"size"==s.props.sortBy,sortIcon:"asc"==s.props.sortOrder?(0,g.jsx)("span",{className:"fas fa-caret-up"}):(0,g.jsx)("span",{className:"fas fa-caret-down"})}},s.onFreezedItem=function(){s.setState({isItemFreezed:!0})},s.onUnfreezedItem=function(){s.setState({isItemFreezed:!1})},s.onItemRename=function(e,t){if(s.props.repoList.some((function(e){return e.name===t}))){var n=(0,u.ih)('The name "{name}" is already taken. Please choose a different name.');return n=n.replace("{name}",m.c.HTMLescape(t)),j.Z.danger(n),!1}s.props.onItemRename(e,t)},s.renderRepoListView=function(){return(0,g.jsx)(a.Fragment,{children:s.props.repoList.map((function(e){return(0,g.jsx)(qn,{repo:e,libraryType:s.props.libraryType,currentGroup:s.props.currentGroup,isItemFreezed:s.state.isItemFreezed,onFreezedItem:s.onFreezedItem,onUnfreezedItem:s.onUnfreezedItem,onItemUnshare:s.props.onItemUnshare,onItemDelete:s.props.onItemDelete,onItemDetails:s.props.onItemDetails,onItemRename:s.props.onItemRename,onMonitorRepo:s.props.onMonitorRepo},e.repo_id)}))})},s.renderPCUI=function(){var e=void 0===s.props.isShowTableThread||s.props.isShowTableThread,t=s.getSortMetaData(),n=t.sortByName,i=t.sortByTime,r=t.sortBySize,o=t.sortIcon;return(0,g.jsxs)("table",{className:e?"":"table-thead-hidden",children:[(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"4%"}),(0,g.jsx)("th",{width:"4%",children:(0,g.jsx)("span",{className:"sr-only",children:(0,u.ih)("Library Type")})}),(0,g.jsx)("th",{width:"36%",children:(0,g.jsxs)("a",{className:"d-block table-sort-op",href:"#",onClick:s.sortByName,children:[(0,u.ih)("Name")," ",n&&o]})}),(0,g.jsx)("th",{width:"12%",children:(0,g.jsx)("span",{className:"sr-only",children:(0,u.ih)("Actions")})}),(0,g.jsx)("th",{width:"14%",children:(0,g.jsxs)("a",{className:"d-block table-sort-op",href:"#",onClick:s.sortBySize,children:[(0,u.ih)("Size")," ",r&&o]})}),(0,g.jsx)("th",{width:"14%",children:(0,g.jsxs)("a",{className:"d-block table-sort-op",href:"#",onClick:s.sortByTime,children:[(0,u.ih)("Last Update")," ",i&&o]})}),(0,g.jsx)("th",{width:"16%",children:(0,u.ih)("Owner")})]})}),(0,g.jsx)("tbody",{children:s.renderRepoListView()})]})},s.renderMobileUI=function(){return(0,g.jsxs)("table",{className:"table-thead-hidden",children:[(0,g.jsx)(Xe,{}),(0,g.jsx)("tbody",{children:s.renderRepoListView()})]})},s.state={isItemFreezed:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=m.c.isDesktop()?this.renderPCUI():this.renderMobileUI();return this.props.hasNextPage?(0,g.jsxs)(a.Fragment,{children:[e,(0,g.jsx)(R.Z,{})]}):e}}]),n}(a.Component),Yn=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onCreateRepo=function(e){w.I.createPublicRepo(e).then((function(e){var t={repo_id:e.data.id,repo_name:e.data.name,permission:e.data.permission,size:e.data.size,owner_name:e.data.owner_name,owner_email:e.data.owner,mtime:e.data.mtime,encrypted:e.data.encrypted},n=new Je(t),i=s.addRepoItem(n);s.setState({repoList:i}),s.onCreateRepoToggle()})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onRepoSelectedHandler=function(e){e.forEach((function(e){w.I.selectOwnedRepoToPublic(e.repo_id,{share_type:"public",permission:e.sharePermission}).then((function(){var t=s.addRepoItem(e);s.setState({repoList:t})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))}))},s.onItemUnshare=function(e){w.I.unshareRepo(e.repo_id,{share_type:"public"}).then((function(){var t=s.state.repoList.filter((function(t){return t.repo_id!==e.repo_id}));s.setState({repoList:t});var n=(0,u.ih)("Successfully unshared {name}").replace("{name}",e.repo_name);j.Z.success(n)})).catch((function(t){var n=m.c.getErrorMsg(t);n===(0,u.ih)("Error")&&(n=(0,u.ih)("Failed to unshare {name}").replace("{name}",e.repo_name)),(0,j.Z)(n)}))},s.onItemDelete=function(){},s.addRepoItem=function(e){for(var t=!1,n=0,i=s.state.repoList,r=0;r0&&(0,g.jsx)("span",{className:"sf3-font sf3-font-sort action-icon",onClick:this.toggleSortOptionsDialog})]}),(0,g.jsxs)("div",{className:"cur-view-content",children:[this.state.isLoading&&(0,g.jsx)(R.Z,{}),!this.state.isLoading&&e&&e,!this.state.isLoading&&0===this.state.repoList.length&&t,!this.state.isLoading&&this.state.repoList.length>0&&(0,g.jsx)(Kn,{libraryType:this.state.libraryType,repoList:this.state.repoList,sortBy:this.state.sortBy,sortOrder:this.state.sortOrder,sortItems:this.sortItems,onItemUnshare:this.onItemUnshare,onItemDelete:this.onItemDelete})]})]})}),this.state.isSortOptionsDialogOpen&&(0,g.jsx)(Oe,{toggleDialog:this.toggleSortOptionsDialog,sortBy:this.state.sortBy,sortOrder:this.state.sortOrder,sortItems:this.sortItems}),this.state.isCreateRepoDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(It,{libraryType:this.state.libraryType,onCreateToggle:this.onCreateRepoToggle,onCreateRepo:this.onCreateRepo})}),this.state.isSelectRepoDialpgShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Wn,{onRepoSelectedHandler:this.onRepoSelectedHandler,onShareRepoDialogClose:this.onSelectRepoToggle})})]})}}]),n}(a.Component),Jn=Yn,Xn=n(242),Qn=n.n(Xn),$n=""!==u.NZ?Qn()(u.NZ):void 0,ei=new(function(){function e(){(0,i.Z)(this,e)}return(0,s.Z)(e,[{key:"watchRepo",value:function(e,t){$n&&($n.emit("repo_update",{request:"watch_update",repo_id:e,user:{name:u.u2,username:u.b6,contact_email:u.Ru}}),$n.on("repo_update",t))}},{key:"unwatchRepo",value:function(e,t){$n&&($n.emit("repo_update",{request:"unwatch_update",repo_id:e,user:{name:u.u2,username:u.b6,contact_email:u.Ru}}),$n.off("repo_update",t))}}]),e}()),ti=n(52423),ni=n(57050),ii=n(25335),si=n(84385),ri=n(84690),oi=n(21761),ai=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).handleSubmit=function(e){var t=s.props.repoID,n=s.state.password;w.I.setRepoDecryptPassword(t,n).then((function(e){s.props.onLibDecryptDialog()})).catch((function(e){s.setState({showError:!0})})),e.preventDefault()},s.handleKeyDown=function(e){"Enter"==e.key&&s.handleSubmit(e)},s.handleChange=function(e){s.setState({password:e.target.value,showError:!1})},s.toggle=function(){window.location.href=u.ze},s.state={password:"",showError:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){return(0,g.jsx)(d.Z,{isOpen:!0,toggle:this.toggle,children:(0,g.jsxs)(b.Z,{children:[(0,g.jsx)("button",{type:"button",className:"close",onClick:this.toggle,children:(0,g.jsx)("span",{"aria-hidden":"true",children:"\xd7"})}),(0,g.jsxs)(Ct.Z,{className:"lib-decrypt-form text-center",children:[(0,g.jsx)("img",{src:"".concat(u.si,"img/lock.png"),alt:"","aria-hidden":"true"}),(0,g.jsx)("p",{className:"intro",children:(0,u.ih)("This library is password protected")}),this.state.showError&&(0,g.jsx)("p",{className:"error",children:(0,u.ih)("Wrong password")}),(0,g.jsx)("input",{type:"password",name:"password",className:"form-control password-input",autoComplete:"off",onKeyDown:this.handleKeyDown,placeholder:(0,u.ih)("Password"),onChange:this.handleChange}),(0,g.jsx)("button",{type:"submit",className:"btn btn-primary submit",onClick:this.handleSubmit,children:(0,u.ih)("Submit")}),(0,g.jsxs)("p",{className:"tip",children:["* ",(0,u.ih)("The password will be kept in the server for only 1 hour.")]})]})]})})}}]),n}(a.Component),li=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){var e;(0,i.Z)(this,n);for(var s=arguments.length,r=new Array(s),o=0;o0){var r=s.state.childName.substring(0,e),o=s.state.childName.substring(e);s.setState({childName:r+"(draft)"+o,isMarkdownDraft:!s.state.isMarkdownDraft})}else 0===e?s.setState({childName:"(draft)"+s.state.childName,isMarkdownDraft:!s.state.isMarkdownDraft}):s.setState({isMarkdownDraft:!s.state.isMarkdownDraft})},s.checkDuplicatedName=function(){return s.props.checkDuplicatedName(s.state.childName)},s.onAfterModelOpened=function(){s.newInput.current&&(s.newInput.current.focus(),s.newInput.current.setSelectionRange(0,0))},s.toggleMarkSdocDraft=function(e){s.setState({isSdocDraft:e.target.checked})},s.state={parentPath:"",childName:e.fileType||"",isMarkdownDraft:!1,isSdocDraft:!1,errMessage:"",isSubmitBtnActive:!1},s.newInput=a.createRef(),s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this.props.parentPath;"/"===e[e.length-1]?this.setState({parentPath:e}):this.setState({parentPath:e+"/"})}},{key:"render",value:function(){var e=this.props.toggleDialog;return(0,g.jsxs)(d.Z,{isOpen:!0,toggle:e,onOpened:this.onAfterModelOpened,children:[(0,g.jsx)(J.Z,{toggle:e,children:(0,u.ih)("New File")}),(0,g.jsxs)(b.Z,{children:[(0,g.jsx)(Ct.Z,{children:(0,g.jsxs)(ge.Z,{children:[(0,g.jsx)(fe.Z,{for:"fileName",children:(0,u.ih)("Name")}),(0,g.jsx)(re.Z,{id:"fileName",onKeyDown:this.handleKeyDown,innerRef:this.newInput,value:this.state.childName,onChange:this.handleChange})]})}),this.state.errMessage&&(0,g.jsx)(bt.Z,{color:"danger",className:"mt-2",children:this.state.errMessage})]}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:e,children:(0,u.ih)("Cancel")}),(0,g.jsx)($.Z,{color:"primary",onClick:this.handleSubmit,disabled:!this.state.isSubmitBtnActive,children:(0,u.ih)("Submit")})]})]})}}]),n}(a.Component),di=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).toggleMobileOpMenu=function(){s.setState({isMobileOpMenuOpen:!s.state.isMobileOpMenuOpen})},s.hideOperationMenu=function(){s.setState({isUploadMenuShow:!1,isCreateMenuShow:!1})},s.toggleOperationMenu=function(e){e.nativeEvent.stopImmediatePropagation();var t=e.target.getBoundingClientRect(),n={position:"fixed",display:"block",left:t.left,top:t.bottom};s.setState({operationMenuStyle:n})},s.onUploadClick=function(e){s.toggleOperationMenu(e),s.setState({isUploadMenuShow:!s.state.isUploadMenuShow,isCreateMenuShow:!1})},s.onUploadFile=function(e){s.setState({isUploadMenuShow:!1}),s.props.onUploadFile(e)},s.onUploadFolder=function(e){s.setState({isUploadMenuShow:!1}),s.props.onUploadFolder(e)},s.onCreateClick=function(e){s.toggleOperationMenu(e),s.setState({isCreateMenuShow:!s.state.isCreateMenuShow,isUploadMenuShow:!1})},s.onShareClick=function(){s.setState({isShareDialogShow:!s.state.isShareDialogShow})},s.onCreateFolderToggle=function(){s.setState({isCreateFolderDialogShow:!s.state.isCreateFolderDialogShow})},s.onCreateFileToggle=function(){s.setState({isCreateFileDialogShow:!s.state.isCreateFileDialogShow,fileType:""})},s.onCreateMarkdownToggle=function(){s.setState({isCreateFileDialogShow:!s.state.isCreateFileDialogShow,fileType:".md"})},s.onCreateExcelToggle=function(){s.setState({isCreateFileDialogShow:!s.state.isCreateFileDialogShow,fileType:".xlsx"})},s.onCreatePPTToggle=function(){s.setState({isCreateFileDialogShow:!s.state.isCreateFileDialogShow,fileType:".pptx"})},s.onCreateWordToggle=function(){s.setState({isCreateFileDialogShow:!s.state.isCreateFileDialogShow,fileType:".docx"})},s.onCreateSeaDocToggle=function(){s.setState({isCreateFileDialogShow:!s.state.isCreateFileDialogShow,fileType:".sdoc"})},s.onAddFolder=function(e){s.setState({isCreateFolderDialogShow:!1}),s.props.onAddFolder(e)},s.checkDuplicatedName=function(e){return s.props.direntList.some((function(t){return t.name===e}))},s.state={fileType:".md",isCreateFileDialogShow:!1,isCreateFolderDialogShow:!1,isUploadMenuShow:!1,isCreateMenuShow:!1,isShareDialogShow:!1,operationMenuStyle:"",isMobileOpMenuOpen:!1},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){document.addEventListener("click",this.hideOperationMenu)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.hideOperationMenu)}},{key:"render",value:function(){var e=this.props,t=e.path,n=e.repoName,i=e.userPerm,s="/"===t?"library":"dir",r="/"==t?n:m.c.getFolderName(t),o=m.c.getUserPermission(i),l=o.isCustomPermission,c=o.customPermission,h=!0,p=!0;if(l){var d=c.permission;h=d.upload,p=d.create}var f=null;if(m.c.isDesktop()){var v=this.props.showShareBtn;f=(0,g.jsxs)(a.Fragment,{children:[h&&(0,g.jsx)(a.Fragment,{children:m.c.isSupportUploadFolder()?(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("button",{className:"btn btn-secondary operation-item",onClick:this.onUploadClick,"aria-haspopup":"true","aria-expanded":this.state.isUploadMenuShow,"aria-controls":"upload-menu",children:(0,u.ih)("Upload")}),this.state.isUploadMenuShow&&(0,g.jsxs)("div",{className:"menu dropdown-menu",style:this.state.operationMenuStyle,role:"menu",id:"upload-menu",children:[(0,g.jsx)("button",{type:"button",className:"dropdown-item",onClick:this.onUploadFile,role:"menuitem",children:(0,u.ih)("Upload Files")}),(0,g.jsx)("button",{type:"button",className:"dropdown-item",onClick:this.onUploadFolder,role:"menuitem",children:(0,u.ih)("Upload Folder")})]})]}):(0,g.jsx)("button",{className:"btn btn-secondary operation-item",title:(0,u.ih)("Upload"),onClick:this.onUploadFile,children:(0,u.ih)("Upload")})}),p&&(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("button",{className:"btn btn-secondary operation-item",onClick:this.onCreateClick,"aria-haspopup":"true","aria-expanded":this.state.isUploadMenuShow,"aria-controls":"new-menu",children:(0,u.ih)("New")}),this.state.isCreateMenuShow&&(0,g.jsxs)("div",{className:"menu dropdown-menu",style:this.state.operationMenuStyle,role:"menu",id:"new-menu",children:[(0,g.jsx)("button",{className:"dropdown-item",onClick:this.onCreateFolderToggle,role:"menuitem",children:(0,u.ih)("New Folder")}),(0,g.jsx)("button",{className:"dropdown-item",onClick:this.onCreateFileToggle,children:(0,u.ih)("New File")}),(0,g.jsx)("div",{className:"dropdown-divider"}),(0,g.jsx)("button",{className:"dropdown-item",onClick:this.onCreateMarkdownToggle,role:"menuitem",children:(0,u.ih)("New Markdown File")}),(0,g.jsx)("button",{className:"dropdown-item",onClick:this.onCreateExcelToggle,role:"menuitem",children:(0,u.ih)("New Excel File")}),(0,g.jsx)("button",{className:"dropdown-item",onClick:this.onCreatePPTToggle,role:"menuitem",children:(0,u.ih)("New PowerPoint File")}),(0,g.jsx)("button",{className:"dropdown-item",onClick:this.onCreateWordToggle,role:"menuitem",children:(0,u.ih)("New Word File")}),u.np&&(0,g.jsxs)("button",{className:"dropdown-item",onClick:this.onCreateSeaDocToggle,role:"menuitem",children:[(0,u.ih)("New SeaDoc File")," (beta)"]})]})]}),v&&(0,g.jsx)("button",{className:"btn btn-secondary operation-item",title:(0,u.ih)("Share"),onClick:this.onShareClick,children:(0,u.ih)("Share")})]})}else f=(0,g.jsxs)(U.Z,{isOpen:this.state.isMobileOpMenuOpen,toggle:this.toggleMobileOpMenu,children:[(0,g.jsx)(z.Z,{tag:"span",className:"sf2-icon-plus mobile-toolbar-icon"}),(0,g.jsxs)(B.Z,{children:[h&&(0,g.jsx)(G.Z,{onClick:this.onUploadFile,children:(0,u.ih)("Upload")}),p&&(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(G.Z,{onClick:this.onCreateFolderToggle,children:(0,u.ih)("New Folder")}),(0,g.jsx)(G.Z,{onClick:this.onCreateFileToggle,children:(0,u.ih)("New File")})]})]})]});return(0,g.jsxs)(a.Fragment,{children:[("rw"===i||"admin"===i||"cloud-edit"===i||l)&&(0,g.jsx)("div",{className:"dir-operation",children:f}),m.c.isDesktop()&&(0,g.jsx)(ci,{currentMode:this.props.currentMode,switchViewMode:this.props.switchViewMode,isCustomPermission:l}),this.state.isCreateFileDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(pi,{parentPath:this.props.path,fileType:this.state.fileType,onAddFile:this.props.onAddFile,checkDuplicatedName:this.checkDuplicatedName,toggleDialog:this.onCreateFileToggle})}),this.state.isCreateFolderDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(hi.Z,{parentPath:this.props.path,onAddFolder:this.onAddFolder,checkDuplicatedName:this.checkDuplicatedName,addFolderCancel:this.onCreateFolderToggle})}),this.state.isShareDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Qe.Z,{itemType:s,itemName:r,itemPath:this.props.path,repoID:this.props.repoID,repoEncrypted:this.props.repoEncrypted,enableDirPrivateShare:this.props.enableDirPrivateShare,userPerm:this.props.userPerm,isGroupOwnedRepo:this.props.isGroupOwnedRepo,toggleDialog:this.onShareClick})})]})}}]),n}(a.Component),ui=di,mi=n(3888),gi=n(69498),fi=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).handleSubmit=function(){s.props.isMutipleOperation?s.moveItems():s.moveItem()},s.moveItems=function(){var e=s.props.repoID,t=s.state,n=t.repo,i=t.selectedPath,r=(0,u.ih)("Invalid destination path");if(n&&""!==i){var o=s.props.selectedDirentList,a=[];if(o.forEach((function(e){var t=m.c.joinPath(s.props.path,e.name);a.push(t)})),a.some((function(e){return e===i})))s.setState({errMessage:r});else if(i&&i===s.props.path&&n.repo_id===e)s.setState({errMessage:r});else{var l="";if(a.some((function(e){var t=i.length>e.length&&i.indexOf(e)>-1;return t&&(l=e),t})))return r=(r=(r=(0,u.ih)("Can not move directory %(src)s to its subdirectory %(des)s")).replace("%(src)s",l)).replace("%(des)s",i),void s.setState({errMessage:r});s.props.onItemsMove(n,i),s.toggle()}}else s.setState({errMessage:r})},s.moveItem=function(){var e=s.props.repoID,t=s.state,n=t.repo,i=t.selectedPath,r=m.c.joinPath(s.props.path,s.props.dirent.name),o=(0,u.ih)("Invalid destination path");if(!n||n.repo_id===e&&""===i)s.setState({errMessage:o});else if(i&&r===i)s.setState({errMessage:o});else if(i&&s.props.path===i&&n.repo_id===e)s.setState({errMessage:o});else{if(i&&i.length>r.length&&i.indexOf(r)>-1)return o=(o=(o=(0,u.ih)("Can not move directory %(src)s to its subdirectory %(des)s")).replace("%(src)s",r)).replace("%(des)s",i),void s.setState({errMessage:o});s.props.onItemMove(n,s.props.dirent,i,s.props.path),s.toggle()}},s.toggle=function(){s.props.onCancelMove()},s.onDirentItemClick=function(e,t){s.setState({repo:e,selectedPath:t,errMessage:""})},s.onRepoItemClick=function(e){s.setState({repo:e,selectedPath:"/",errMessage:""})},s.state={repo:{repo_id:s.props.repoID},selectedPath:s.props.path,errMessage:""},s}return(0,s.Z)(n,[{key:"shouldComponentUpdate",value:function(e,t){return this.state.errMessage!==t.errMessage}},{key:"render",value:function(){var e=(0,u.ih)("Move {placeholder} to");e=this.props.isMutipleOperation?(0,u.ih)("Move selected item(s) to:"):e.replace("{placeholder}",''+m.c.HTMLescape(this.props.dirent.name)+"");var t=this.props.repoEncrypted?"only_current_library":"current_repo_and_other_repos",n=this.props,i=n.dirent,s=n.selectedDirentList,r=(i||s[0]).permission;return m.c.getUserPermission(r).isCustomPermission&&(t="only_current_library"),(0,g.jsxs)(d.Z,{isOpen:!0,toggle:this.toggle,children:[(0,g.jsx)(J.Z,{toggle:this.toggle,children:(0,g.jsx)("div",{dangerouslySetInnerHTML:{__html:e}})}),(0,g.jsxs)(b.Z,{children:[(0,g.jsx)(qt.Z,{repoID:this.props.repoID,currentPath:this.props.path,onDirentItemClick:this.onDirentItemClick,onRepoItemClick:this.onRepoItemClick,mode:t}),this.state.errMessage&&(0,g.jsx)(bt.Z,{color:"danger",className:"mt-2",children:this.state.errMessage})]}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:this.toggle,children:(0,u.ih)("Cancel")}),(0,g.jsx)($.Z,{color:"primary",onClick:this.handleSubmit,children:(0,u.ih)("Submit")})]})]})}}]),n}(a.Component),vi=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).handleSubmit=function(){s.props.isMutipleOperation?s.copyItems():s.copyItem()},s.copyItems=function(){var e=s.state,t=e.repo,n=e.selectedPath,i=(0,u.ih)("Invalid destination path");if(t&&""!==n){var r=s.props.selectedDirentList,o=[];if(r.forEach((function(e){var t=m.c.joinPath(s.props.path,e.name);o.push(t)})),o.some((function(e){return e===n})))s.setState({errMessage:i});else{var a="";if(o.some((function(e){var t=n.length>e.length&&n.indexOf(e)>-1;return t&&(a=e),t})))return i=(i=(i=(0,u.ih)("Can not move directory %(src)s to its subdirectory %(des)s")).replace("%(src)s",a)).replace("%(des)s",n),void s.setState({errMessage:i});s.props.onItemsCopy(t,n),s.toggle()}}else s.setState({errMessage:i})},s.copyItem=function(){var e=s.state,t=e.repo,n=e.repoID,i=e.selectedPath,r=m.c.joinPath(s.props.path,s.props.dirent.name),o=(0,u.ih)("Invalid destination path");if(!t||t.repo_id===n&&""===i)s.setState({errMessage:o});else if(i&&r===i)s.setState({errMessage:o});else{if(i&&i.length>r.length&&i.indexOf(r)>-1)return o=(o=(o=(0,u.ih)("Can not copy directory %(src)s to its subdirectory %(des)s")).replace("%(src)s",r)).replace("%(des)s",i),void s.setState({errMessage:o});s.props.onItemCopy(t,s.props.dirent,i,s.props.path),s.toggle()}},s.toggle=function(){s.props.onCancelCopy()},s.onDirentItemClick=function(e,t){s.setState({repo:e,selectedPath:t,errMessage:""})},s.onRepoItemClick=function(e){s.setState({repo:e,selectedPath:"/",errMessage:""})},s.state={repo:{repo_id:s.props.repoID},selectedPath:s.props.path,errMessage:""},s}return(0,s.Z)(n,[{key:"shouldComponentUpdate",value:function(e,t){return this.state.errMessage!==t.errMessage}},{key:"render",value:function(){var e=(0,u.ih)("Copy {placeholder} to");e=this.props.isMutipleOperation?(0,u.ih)("Copy selected item(s) to:"):e.replace("{placeholder}",''+m.c.HTMLescape(this.props.dirent.name)+"");var t=this.props.repoEncrypted?"only_current_library":"current_repo_and_other_repos";return(0,g.jsxs)(d.Z,{isOpen:!0,toggle:this.toggle,children:[(0,g.jsx)(J.Z,{toggle:this.toggle,children:(0,g.jsx)("div",{dangerouslySetInnerHTML:{__html:e}})}),(0,g.jsxs)(b.Z,{children:[(0,g.jsx)(qt.Z,{repoID:this.props.repoID,currentPath:this.props.path,onDirentItemClick:this.onDirentItemClick,onRepoItemClick:this.onRepoItemClick,mode:t}),this.state.errMessage&&(0,g.jsx)(bt.Z,{color:"danger",className:"mt-2",children:this.state.errMessage})]}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:this.toggle,children:(0,u.ih)("Cancel")}),(0,g.jsx)($.Z,{color:"primary",onClick:this.handleSubmit,children:(0,u.ih)("Submit")})]})]})}}]),n}(a.Component),xi=n(22642),Di=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).inputNewName=function(e){s.setState({tagName:e.target.value}),s.state.errorMsg&&s.setState({errorMsg:""})},s.selectTagcolor=function(e){s.setState({tagColor:e.target.value})},s.createTag=function(){var e=s.state.tagName,t=s.state.tagColor,n=s.props.repoID;w.I.createRepoTag(n,e,t).then((function(e){var t=e.data.repo_tag.repo_tag_id;s.props.onRepoTagCreated&&s.props.onRepoTagCreated(t),s.props.toggleCancel()})).catch((function(t){var n;500===t.response.status?n=(0,u.ih)("Internal Server Error"):400===t.response.status&&(n=(n=(0,u.ih)('Tag "{name}" already exists.')).replace("{name}",m.c.HTMLescape(e))),s.setState({errorMsg:n})}))},s.handleKeyDown=function(e){"Enter"===e.key&&s.createTag()},s.state={tagName:"",tagColor:xi.QQ[0],newTag:{},errorMsg:""},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=!!this.state.tagName.trim();return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsxs)(J.Z,{toggle:this.props.onClose,children:[(0,g.jsx)("span",{className:"tag-dialog-back fas fa-sm fa-arrow-left",onClick:this.props.toggleCancel,"aria-label":(0,u.ih)("Back")}),(0,u.ih)("New Tag")]}),(0,g.jsx)(b.Z,{children:(0,g.jsxs)("div",{role:"form",className:"tag-create",children:[(0,g.jsxs)("div",{className:"form-group",children:[(0,g.jsx)("label",{className:"form-label",children:(0,u.ih)("Name")}),(0,g.jsx)(re.Z,{onKeyDown:this.handleKeyDown,autoFocus:!0,value:this.state.tagName,onChange:this.inputNewName}),(0,g.jsx)("div",{className:"mt-2",children:(0,g.jsx)("span",{className:"error",children:this.state.errorMsg})})]}),(0,g.jsxs)("div",{className:"form-group",children:[(0,g.jsx)("label",{className:"form-label",children:(0,u.ih)("Select a color")}),(0,g.jsx)("div",{className:"d-flex justify-content-between",children:xi.QQ.map((function(t,n){return(0,g.jsx)("div",{className:"tag-color-option",onChange:e.selectTagcolor,children:(0,g.jsxs)("label",{className:"colorinput",children:[0===n?(0,g.jsx)("input",{name:"color",type:"radio",value:t,className:"colorinput-input",defaultChecked:!0,onClick:e.selectTagcolor}):(0,g.jsx)("input",{name:"color",type:"radio",value:t,className:"colorinput-input",onClick:e.selectTagcolor}),(0,g.jsx)("span",{className:"colorinput-color rounded-circle d-flex align-items-center justify-content-center",style:{backgroundColor:t},children:(0,g.jsx)("i",{className:"fas fa-check color-selected"})})]})},n)}))})]})]})}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:this.props.toggleCancel,children:(0,u.ih)("Cancel")}),t?(0,g.jsx)($.Z,{color:"primary",onClick:this.createTag,children:(0,u.ih)("Save")}):(0,g.jsx)($.Z,{color:"primary",disabled:!0,children:(0,u.ih)("Save")})]})]})}}]),n}(a.Component);n(39849);var wi,ji=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onMouseEnter=function(){s.setState({isTagHighlighted:!0})},s.onMouseLeave=function(){s.setState({isTagHighlighted:!1})},s.getRepoTagIdList=function(){return(s.props.fileTagList||[]).map((function(e){return e.repo_tag_id}))},s.onEditFileTag=function(){var e=s.props,t=e.repoID,n=e.repoTag,i=e.filePath,r=s.getRepoTagIdList();if(-1===r.indexOf(n.id)){var o=n.id;w.I.addFileTag(t,i,o).then((function(){r=s.getRepoTagIdList(),s.props.onFileTagChanged()})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))}else{for(var a=null,l=s.props.fileTagList,c=0;c-1?{isValid:t=!1,errMessage:n=(0,u.ih)("Name should not include '/'.")}:{isValid:t,errMessage:n}:{isValid:t=!1,errMessage:n=(0,u.ih)("Name is required.")}},s.checkDuplicatedName=function(){return s.props.checkDuplicatedName(s.state.newName)},s.onAfterModelOpened=function(){if(s.newInput.current){s.newInput.current.focus();var e=s.props.dirent;if("file"===e.type){var t=e.name.lastIndexOf(".md");s.newInput.current.setSelectionRange(0,t,"forward")}else s.newInput.current.setSelectionRange(0,-1)}},s.state={newName:"",errMessage:"",isSubmitBtnActive:!1},s.newInput=a.createRef(),s}return(0,s.Z)(n,[{key:"UNSAFE_componentWillMount",value:function(){this.setState({newName:this.props.dirent.name})}},{key:"componentDidMount",value:function(){var e=this.props.dirent;this.changeState(e)}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){this.changeState(e.dirent)}},{key:"render",value:function(){var e=this.props.dirent.type;return(0,g.jsxs)(d.Z,{isOpen:!0,toggle:this.toggle,onOpened:this.onAfterModelOpened,children:[(0,g.jsx)(J.Z,{toggle:this.toggle,children:"file"===e?(0,u.ih)("Rename File"):(0,u.ih)("Rename Folder")}),(0,g.jsxs)(b.Z,{children:[(0,g.jsx)("p",{children:"file"===e?(0,u.ih)("New file name"):(0,u.ih)("New folder name")}),(0,g.jsx)(re.Z,{onKeyDown:this.handleKeyDown,innerRef:this.newInput,value:this.state.newName,onChange:this.handleChange}),this.state.errMessage&&(0,g.jsx)(bt.Z,{color:"danger",className:"mt-2",children:this.state.errMessage})]}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:this.toggle,children:(0,u.ih)("Cancel")}),(0,g.jsx)($.Z,{color:"primary",onClick:this.handleSubmit,disabled:!this.state.isSubmitBtnActive,children:(0,u.ih)("Submit")})]})]})}}]),n}(a.Component),ki=n(2169),Ii=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onMoveToggle=function(){s.setState({isMoveDialogShow:!s.state.isMoveDialogShow})},s.onCopyToggle=function(){s.setState({isCopyDialogShow:!s.state.isCopyDialogShow})},s.onItemsDelete=function(){s.props.onItemsDelete()},s.onItemsDownload=function(){var e=s.props,t=e.path,n=e.repoID,i=e.selectedDirentList;if(i.length){if(1===i.length&&!i[0].isDir()){var r=m.c.joinPath(t,i[0].name),o=gi.Z.getUrl({type:"download_file_url",repoID:n,filePath:r});return void(location.href=o)}if(u.Zb){var a=s.props.selectedDirentList.map((function(e){return e.name}));w.I.zipDownload(n,t,a).then((function(e){var t=e.data.zip_token;location.href="".concat(u.gc,"zip/").concat(t)})).catch((function(e){var t=m.c.getErrorMsg(e);s.setState({isLoading:!1,errorMsg:t})}))}else s.setState({isZipDialogOpen:!0})}},s.closeZipDialog=function(){s.setState({isZipDialogOpen:!1})},s.checkDuplicatedName=function(e){return m.c.checkDuplicatedNameInList(s.props.direntList,e)},s.onItemRename=function(e){var t=s.props.selectedDirentList[0];s.props.onItemRename(t,e)},s.onPermissionItem=function(){s.setState({showLibContentViewDialogs:!s.state.showLibContentViewDialogs,isPermissionDialogOpen:!s.state.isPermissionDialogOpen})},s.onMarkAsDraft=function(e){var t=s.props.repoID,n=s.getDirentPath(e);w.I.sdocMarkAsDraft(t,n).then((function(t){s.props.updateDirent(e,"is_sdoc_draft",!0)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onUnmarkAsDraft=function(e){var t=s.props.repoID,n=s.getDirentPath(e);w.I.sdocUnmarkAsDraft(t,n).then((function(t){s.props.updateDirent(e,"is_sdoc_draft",!1)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onStartRevise=function(e){var t=s.props.repoID,n=s.getDirentPath(e);w.I.sdocStartRevise(t,n).then((function(e){var n=u.ze+"lib/"+t+"/file"+m.c.encodePath(e.data.file_path);window.open(n)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.getDirentMenuList=function(e){var t=s.props.isRepoOwner,n=s.props.currentRepoInfo,i=m.c.getDirentOperationList(t,n,e,!0),r=["Move","Copy","Delete","Download"];return i="dir"==e.type?i.filter((function(e,t){return-1==r.indexOf(e.key)&&"Divider"!=e})):i.filter((function(e,t){return-1==r.indexOf(e.key)}))},s.onMenuItemClick=function(e){var t=s.props.selectedDirentList[0];switch(e){case"Share":s.setState({showLibContentViewDialogs:!0,showShareDialog:!0});break;case"Rename":s.setState({showLibContentViewDialogs:!0,isRenameDialogOpen:!0});break;case"Permission":s.onPermissionItem();break;case"Tags":s.listFileTags(t);break;case"Lock":s.lockFile(t);break;case"Unlock":s.unlockFile(t);break;case"Mark as draft":s.onMarkAsDraft(t);break;case"Unmark as draft":s.onUnmarkAsDraft(t);break;case"History":s.onHistory(t);break;case"Access Log":s.onAccessLog(t);break;case"Properties":s.props.showDirentDetail("info");break;case"Open via Client":s.onOpenViaClient(t)}},s.lockFile=function(e){var t=s.getDirentPath(e);w.I.lockfile(s.props.repoID,t).then((function(t){t.data.is_locked&&(s.props.updateDirent(e,"is_locked",!0),s.props.updateDirent(e,"locked_by_me",!0),s.props.updateDirent(e,"lock_owner_name",u.u2),s.props.unSelectDirent())})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.unlockFile=function(e){var t=s.getDirentPath(e);w.I.unlockfile(s.props.repoID,t).then((function(t){t.data.is_locked||(s.props.updateDirent(e,"is_locked",!1),s.props.updateDirent(e,"locked_by_me",!1),s.props.updateDirent(e,"lock_owner_name",""),s.props.unSelectDirent())})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onOpenViaClient=function(e){var t=s.getDirentPath(e),n=gi.Z.getUrl({type:"open_via_client",repoID:s.props.repoID,filePath:t});location.href=n},s.onHistory=function(e){var t=s.getDirentPath(e),n=gi.Z.getUrl({type:"file_revisions",repoID:s.props.repoID,filePath:t});location.href=n},s.onAccessLog=function(e){var t=s.getDirentPath(e),n=u.ze+"repo/file-access/"+s.props.repoID+"/?p="+encodeURIComponent(t);window.open(n)},s.toggleCancel=function(){s.setState({showLibContentViewDialogs:!1,showShareDialog:!1,showEditFileTagDialog:!1,isRenameDialogOpen:!1,isPermissionDialogOpen:!1})},s.listFileTags=function(e){var t=s.getDirentPath(e);w.I.listFileTags(s.props.repoID,t).then((function(e){for(var t=e.data.file_tags,n=0,i=t.length;n0&&s.forEach((function(e){o+=e.name+" "})),(0,g.jsxs)("div",{className:"path-container",children:[this.props.pathPrefix&&this.props.pathPrefix.map((function(t,n){return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(c.rU,{to:t.url,className:"normal",onClick:function(n){return e.onTabNavClick(n,t.name,t.id)},children:(0,u.ih)(t.showName)}),(0,g.jsx)("span",{className:"path-split",children:"/"})]},n)})),this.props.pathPrefix&&0===this.props.pathPrefix.length&&(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(c.rU,{to:u.ze+"my-libs/",className:"normal",onClick:function(t){return e.onTabNavClick(t,"my-libs")},children:(0,u.ih)("Libraries")}),(0,g.jsx)("span",{className:"path-split",children:"/"})]}),!this.props.pathPrefix&&(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(c.rU,{href:u.ze+"my-libs/",className:"normal",onClick:function(t){return e.onTabNavClick(t,"my-libs")},children:(0,u.ih)("Libraries")}),(0,g.jsx)("span",{className:"path-split",children:"/"})]}),"/"===n||""===n?(0,g.jsx)("span",{className:"path-repo-name",children:i}):(0,g.jsx)("a",{className:"path-link","data-path":"/",onClick:this.onPathClick,children:i}),r,this.props.isViewFile&&(0,g.jsx)(_i.O,{repoID:this.props.repoID,path:this.props.currentPath}),this.props.isViewFile&&0!==s.length&&(0,g.jsxs)("span",{id:"column-mode-file-tags",className:"tag-list tag-list-stacked align-middle ml-1 d-flex align-items-center",children:[s.map((function(e,t){return(0,g.jsx)("span",{className:"file-tag",style:{zIndex:t,backgroundColor:e.color}},e.id)})),(0,g.jsx)($e.Z,{target:"column-mode-file-tags",placement:"bottom",children:o})]})]})}}]),n}(a.Component),Li=Ti,Oi={randomUUID:"undefined"!==typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)},Ri=new Uint8Array(16);function Ei(){if(!wi&&!(wi="undefined"!==typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return wi(Ri)}for(var Ai=[],Ui=0;Ui<256;++Ui)Ai.push((Ui+256).toString(16).slice(1));function zi(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return Ai[e[t+0]]+Ai[e[t+1]]+Ai[e[t+2]]+Ai[e[t+3]]+"-"+Ai[e[t+4]]+Ai[e[t+5]]+"-"+Ai[e[t+6]]+Ai[e[t+7]]+"-"+Ai[e[t+8]]+Ai[e[t+9]]+"-"+Ai[e[t+10]]+Ai[e[t+11]]+Ai[e[t+12]]+Ai[e[t+13]]+Ai[e[t+14]]+Ai[e[t+15]]}var Bi=function(e,t,n){if(Oi.randomUUID&&!t&&!e)return Oi.randomUUID();var i=(e=e||{}).random||(e.rng||Ei)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t){n=n||0;for(var s=0;s<16;++s)t[n+s]=i[s];return t}return zi(i)},Gi=n(23727),Hi=n(58579),Wi=n(44260),Vi=(n(39849),function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).togglePopover=function(){s.setState({isPopoverOpen:!s.state.isPopoverOpen})},s.selectTagColor=function(e){var t=e.target.value,n=s.props,i=n.repoID,r=n.tag,o=r.id,a=r.name;w.I.updateRepoTag(i,o,a,t).then((function(){s.setState({tagColor:t,isPopoverOpen:!s.state.isPopoverOpen})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.state={tagColor:s.props.tag.color,isPopoverOpen:!1},s}return(0,s.Z)(n,[{key:"UNSAFE_componentWillReceiveProps",value:function(e){e.tag.color!==this.props.tag.color&&this.setState({tagColor:e.tag.color})}},{key:"render",value:function(){var e=this,t=this.state,n=t.isPopoverOpen,i=t.tagColor,s=this.props.tag,r=s.id,o=s.color,a=(0,K.Z)(xi.QQ);return-1==a.indexOf(o)&&a.unshift(o),(0,g.jsxs)("div",{children:[(0,g.jsx)("span",{id:"tag-".concat(r,"-color"),className:"tag-color cursor-pointer rounded-circle d-flex align-items-center justify-content-center",style:{backgroundColor:i},onClick:this.togglePopover,children:(0,g.jsx)("i",{className:"fas fa-caret-down text-white"})}),(0,g.jsx)(Hi.Z,{target:"tag-".concat(r,"-color"),isOpen:n,placement:"bottom",toggle:this.togglePopover,className:"tag-color-popover mw-100",children:(0,g.jsx)(Wi.Z,{className:"p-2",children:(0,g.jsx)("div",{className:"d-flex justify-content-between",children:a.map((function(t,n){return(0,g.jsx)("div",{className:"tag-color-option mx-1",children:(0,g.jsxs)("label",{className:"colorinput",children:[(0,g.jsx)("input",{name:"color",type:"radio",value:t,className:"colorinput-input",defaultChecked:t==i,onClick:e.selectTagColor}),(0,g.jsx)("span",{className:"colorinput-color rounded-circle d-flex align-items-center justify-content-center",style:{backgroundColor:t},children:(0,g.jsx)("i",{className:"fas fa-check color-selected"})})]})},n)}))})})})]})}}]),n}(a.Component)),qi=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).toggleMode=function(){s.setState({isEditing:!s.state.isEditing},(function(){s.state.isEditing&&s.input.current.focus()}))},s.updateTagName=function(e){var t=e.target.value,n=s.props,i=n.repoID,r=n.tag,o=r.id,a=r.color;w.I.updateRepoTag(i,o,t,a).then((function(){s.setState({tagName:t})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onInputKeyDown=function(e){"Enter"==e.key?(s.toggleMode(),s.updateTagName(e)):"Escape"==e.key&&(e.nativeEvent.stopImmediatePropagation(),s.toggleMode())},s.onInputBlur=function(e){s.toggleMode(),s.updateTagName(e)},s.state={tagName:s.props.tag.name,isEditing:!1},s.input=a.createRef(),s}return(0,s.Z)(n,[{key:"UNSAFE_componentWillReceiveProps",value:function(e){e.tag.name!==this.props.tag.name&&this.setState({tagName:e.tag.name})}},{key:"render",value:function(){var e=this.state,t=e.isEditing,n=e.tagName;return(0,g.jsx)("div",{className:"mx-2 flex-fill d-flex",children:t?(0,g.jsx)("input",{type:"text",ref:this.input,defaultValue:n,onBlur:this.onInputBlur,onKeyDown:this.onInputKeyDown,className:"flex-fill form-control-sm form-control"}):(0,g.jsx)("span",{onClick:this.toggleMode,className:"cursor-pointer flex-fill",children:n})})}}]),n}(a.Component),Ki=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onMouseOver=function(){s.setState({isTagHighlighted:!0})},s.onMouseOut=function(){s.setState({isTagHighlighted:!1})},s.deleteTag=function(){s.props.onDeleteTag(s.props.item)},s.state={isTagHighlighted:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state.isTagHighlighted,t=this.props,n=t.item,i=t.repoID;return(0,g.jsxs)("li",{className:"tag-list-item px-4 d-flex justify-content-between align-items-center ".concat(e?"hl":""),onMouseOver:this.onMouseOver,onMouseOut:this.onMouseOut,children:[(0,g.jsx)(Vi,{repoID:i,tag:n}),(0,g.jsx)(qi,{repoID:i,tag:n}),(0,g.jsx)("button",{className:"tag-delete-icon sf2-icon-delete border-0 px-0 bg-transparent cursor-pointer ".concat(e?"":"invisible"),onClick:this.deleteTag,"aria-label":(0,u.ih)("Delete"),title:(0,u.ih)("Delete")})]})}}]),n}(a.Component),Yi=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).togglePopover=function(){s.setState({isPopoverOpen:!s.state.isPopoverOpen})},s.selectTagColor=function(e){var t=e.target.value;s.props.updateVirtualTag(s.props.tag,{color:t}),s.setState({tagColor:t,isPopoverOpen:!s.state.isPopoverOpen})},s.state={tagColor:s.props.tag.color,isPopoverOpen:!1},s}return(0,s.Z)(n,[{key:"UNSAFE_componentWillReceiveProps",value:function(e){e.tag.color!==this.props.tag.color&&this.setState({tagColor:e.tag.color})}},{key:"render",value:function(){var e=this,t=this.state,n=t.isPopoverOpen,i=t.tagColor,s=this.props.tag,r=s.id,o=s.color,a=(0,K.Z)(xi.QQ);return-1==a.indexOf(o)&&a.unshift(o),(0,g.jsxs)("div",{children:[(0,g.jsx)("span",{id:"tag-".concat(r,"-color"),className:"tag-color cursor-pointer rounded-circle d-flex align-items-center justify-content-center",style:{backgroundColor:i},onClick:this.togglePopover,children:(0,g.jsx)("i",{className:"fas fa-caret-down text-white"})}),(0,g.jsx)(Hi.Z,{target:"tag-".concat(r,"-color"),isOpen:n,placement:"bottom",toggle:this.togglePopover,className:"tag-color-popover mw-100",children:(0,g.jsx)(Wi.Z,{className:"p-2",children:(0,g.jsx)("div",{className:"d-flex justify-content-between",children:a.map((function(t,n){return(0,g.jsx)("div",{className:"tag-color-option mx-1",children:(0,g.jsxs)("label",{className:"colorinput",children:[(0,g.jsx)("input",{name:"color",type:"radio",value:t,className:"colorinput-input",defaultChecked:t==i,onClick:e.selectTagColor}),(0,g.jsx)("span",{className:"colorinput-color rounded-circle d-flex align-items-center justify-content-center",style:{backgroundColor:t},children:(0,g.jsx)("i",{className:"fas fa-check color-selected"})})]})},n)}))})})})]})}}]),n}(a.Component),Ji=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).toggleMode=function(){s.setState({isEditing:!s.state.isEditing})},s.updateTagName=function(e){var t=e.target.value;s.props.updateVirtualTag(s.props.tag,{name:t}),s.setState({tagName:t})},s.onInputKeyDown=function(e){"Enter"==e.key?(s.toggleMode(),s.updateTagName(e)):"Escape"==e.key&&(e.nativeEvent.stopImmediatePropagation(),s.toggleMode())},s.onInputBlur=function(e){s.toggleMode(),s.updateTagName(e)},s.state={tagName:s.props.tag.name,isEditing:!0},s.input=a.createRef(),s}return(0,s.Z)(n,[{key:"UNSAFE_componentWillReceiveProps",value:function(e){e.tag.name!==this.props.tag.name&&this.setState({tagName:e.tag.name})}},{key:"componentDidMount",value:function(){var e=this;setTimeout((function(){e.input.current.focus()}),1)}},{key:"render",value:function(){var e=this.state,t=e.isEditing,n=e.tagName;return(0,g.jsx)("div",{className:"mx-2 flex-fill d-flex",children:t?(0,g.jsx)("input",{type:"text",ref:this.input,defaultValue:n,onBlur:this.onInputBlur,onKeyDown:this.onInputKeyDown,className:"flex-fill form-control-sm form-control"}):(0,g.jsx)("span",{onClick:this.toggleMode,className:"cursor-pointer flex-fill",style:{width:100,height:20},children:n})})}}]),n}(a.Component),Xi=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onMouseOver=function(){s.setState({isTagHighlighted:!0})},s.onMouseOut=function(){s.setState({isTagHighlighted:!1})},s.deleteVirtualTag=function(){s.props.deleteVirtualTag(s.props.item)},s.state={isTagHighlighted:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state.isTagHighlighted,t=this.props,n=t.item,i=t.repoID;return(0,g.jsxs)("li",{className:"tag-list-item px-4 d-flex justify-content-between align-items-center ".concat(e?"hl":""),onMouseOver:this.onMouseOver,onMouseOut:this.onMouseOut,children:[(0,g.jsx)(Yi,{repoID:i,tag:n,updateVirtualTag:this.props.updateVirtualTag}),(0,g.jsx)(Ji,{repoID:i,tag:n,updateVirtualTag:this.props.updateVirtualTag}),(0,g.jsx)("button",{className:"tag-delete-icon sf2-icon-delete border-0 px-0 bg-transparent cursor-pointer ".concat(e?"":"invisible"),onClick:this.deleteVirtualTag,"aria-label":(0,u.ih)("Delete"),title:(0,u.ih)("Delete")})]})}}]),n}(a.Component),Qi=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).toggleTooltip=function(){s.setState({showTooltip:!s.state.showTooltip})},s.onClickImport=function(){s.importOptionsInput.click()},s.importTagsInputChange=function(){if(s.importOptionsInput.files&&s.importOptionsInput.files.length){var e=new FileReader;e.onload=s.onImportTags.bind((0,D.Z)(s)),e.onerror=s.onImportTagsError.bind((0,D.Z)(s)),e.readAsText(s.importOptionsInput.files[0])}else j.Z.warning((0,u.ih)("Please select a file"))},s.getValidTags=function(e){var t=[],n={};s.props.repotagList.forEach((function(e){return n[e.name]=!0}));for(var i=0;i0){var o=e.color,a=t.name;w.I.createRepoTag(n,a,o).then((function(e){i[r]=new ii.Z(e.data.repo_tag),s.setState({repotagList:i})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))}},s.state={repotagList:[]},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){this.loadTags()}},{key:"render",value:function(){var e=this;return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("ul",{className:"tag-list tag-list-container my-2",children:this.state.repotagList.map((function(t,n){return t.is_virtual?(0,g.jsx)(Xi,{item:t,repoID:e.props.repoID,deleteVirtualTag:e.deleteVirtualTag,updateVirtualTag:e.updateVirtualTag},n):(0,g.jsx)(Ki,{item:t,repoID:e.props.repoID,onDeleteTag:e.onDeleteTag},n)}))}),(0,g.jsxs)("div",{className:"add-tag-link px-4 py-2 d-flex align-items-center",onClick:this.createVirtualTag,children:[(0,g.jsx)("span",{className:"sf2-icon-plus mr-2"}),(0,u.ih)("Create a new tag")]}),(0,g.jsx)(Qi,{toggle:this.props.onListTagCancel,repotagList:this.state.repotagList,updateTags:this.updateTags,repoID:this.props.repoID})]})}}]),n}(a.Component),es=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onMouseDown=function(e){e.stopPropagation()},s.toggleRepoTag=function(e){e.stopPropagation(),s.setState({isListRepoTagShow:!s.state.isListRepoTagShow})},s.hidePopover=function(e){if(e)for(var t=e.target;t;){if("string"===typeof t.className&&t.className.includes("tag-color-popover"))return;t=t.parentNode}s.setState({isListRepoTagShow:!1})},s.toggleCancel=function(){s.setState({isListRepoTagShow:!1})},s.state={isListRepoTagShow:!1},s.tagsIconID="tags-icon-".concat(Bi()),s}return(0,s.Z)(n,[{key:"isMarkdownFile",value:function(e){return m.c.getFileName(e).includes(".md")}},{key:"render",value:function(){var e=this.props,t=e.repoID,n=e.userPerm,i=e.currentPath;if("rw"!==n)return"";if(this.isMarkdownFile(i))return"";var s=null;if(m.c.getFileName(i)){var r=u.ze+"repo/"+t+"/trash/?path="+encodeURIComponent(i);s=(0,g.jsxs)("ul",{className:"path-toolbar",children:[(0,g.jsx)("li",{className:"toolbar-item",children:(0,g.jsx)("a",{className:"op-link sf2-icon-tag",href:"#",id:this.tagsIconID,role:"button",onClick:this.toggleRepoTag,onMouseDown:this.onMouseDown,title:(0,u.ih)("Tags"),"aria-label":(0,u.ih)("Tags")})}),(0,g.jsx)("li",{className:"toolbar-item",children:(0,g.jsx)("a",{className:"op-link sf2-icon-recycle",href:r,title:(0,u.ih)("Trash"),"aria-label":(0,u.ih)("Trash")})})]})}else{var o=u.ze+"repo/"+t+"/trash/",a=u.ze+"repo/history/"+t+"/";s=(0,g.jsxs)("ul",{className:"path-toolbar",children:[(0,g.jsx)("li",{className:"toolbar-item",children:(0,g.jsx)("a",{className:"op-link sf2-icon-tag",href:"#",id:this.tagsIconID,role:"button",onClick:this.toggleRepoTag,onMouseDown:this.onMouseDown,title:(0,u.ih)("Tags"),"aria-label":(0,u.ih)("Tags")})}),(0,g.jsx)("li",{className:"toolbar-item",children:(0,g.jsx)("a",{className:"op-link sf2-icon-recycle",href:o,title:(0,u.ih)("Trash"),"aria-label":(0,u.ih)("Trash")})}),(0,g.jsx)("li",{className:"toolbar-item",children:(0,g.jsx)("a",{className:"op-link sf2-icon-history",href:a,title:(0,u.ih)("History"),"aria-label":(0,u.ih)("History")})})]})}return(0,g.jsxs)(g.Fragment,{children:[s,this.state.isListRepoTagShow&&(0,g.jsx)(Gi.Z,{popoverClassName:"list-tag-popover",target:this.tagsIconID,hideSeahubPopover:this.hidePopover,hideSeahubPopoverWithEsc:this.hidePopover,canHideSeahubPopover:!0,boundariesElement:document.body,placement:"bottom-end",children:(0,g.jsx)($i,{repoID:t,onListTagCancel:this.toggleCancel})})]})}}]),n}(a.Component),ts=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).toggleSortOptionsDialog=function(){s.setState({isSortOptionsDialogOpen:!s.state.isSortOptionsDialogOpen})},s.state={isSortOptionsDialogOpen:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=m.c.isDesktop();return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(Li,{repoName:this.props.repoName,pathPrefix:this.props.pathPrefix,currentPath:this.props.currentPath,onPathClick:this.props.onPathClick,onTabNavClick:this.props.onTabNavClick,repoID:this.props.repoID,isViewFile:this.props.isViewFile,fileTags:this.props.fileTags}),e&&(0,g.jsx)(es,{repoID:this.props.repoID,repoName:this.props.repoName,userPerm:this.props.userPerm,currentPath:this.props.currentPath,updateUsedRepoTags:this.props.updateUsedRepoTags,onDeleteRepoTag:this.props.onDeleteRepoTag}),!e&&this.props.direntList.length>0&&(0,g.jsx)("span",{className:"sf3-font sf3-font-sort action-icon",onClick:this.toggleSortOptionsDialog}),this.state.isSortOptionsDialogOpen&&(0,g.jsx)(Oe,{toggleDialog:this.toggleSortOptionsDialog,sortBy:this.props.sortBy,sortOrder:this.props.sortOrder,sortItems:this.props.sortItems})]})}}]),n}(a.Component),ns=n(62139),is=n(1413),ss=n(70366),rs=n(45526),os=n(27988);var as=function(e){var t=e.column.name;return(0,g.jsx)(os.Z,{md:3,className:"d-flex column-name",children:(0,g.jsx)("div",{className:"w-100 text-truncate",children:t||""})})},ls=n(4942),cs=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).blurInput=function(){setTimeout((function(){s.inputRef.current&&s.inputRef.current.blur()}),1)},s.onBlur=function(){var e=s.props,t=e.column,n=e.onCommit,i={};i[t.key]=s.state.value.trim(),n(i,t)},s.onChange=function(e){var t=e.target.value;t!==s.state.value&&s.setState({value:t})},s.onCut=function(e){e.stopPropagation()},s.onPaste=function(e){e.stopPropagation()},s.onKeyDown=function(e){if(e.keyCode===xi.mW.Esc)return e.stopPropagation(),void s.blurInput();var t=e.currentTarget,n=t.selectionStart,i=t.selectionEnd,r=t.value;(e.keyCode===xi.mW.ChineseInputMethod||e.keyCode===xi.mW.LeftArrow&&0===n||e.keyCode===xi.mW.RightArrow&&i===r.length)&&e.stopPropagation()},s.state={value:e.row[e.column.key]||""},s.inputRef=a.createRef(),s}return(0,s.Z)(n,[{key:"UNSAFE_componentWillReceiveProps",value:function(e){var t=e.row[e.column.key];t!==this.state.value&&this.setState({value:t})}},{key:"render",value:function(){var e=this.props.column,t=this.state.value;return(0,g.jsx)("input",{type:"text",onBlur:this.onBlur,onCut:this.onCut,onPaste:this.onPaste,onChange:this.onChange,className:"form-control",value:t||"",onKeyDown:this.onKeyDown,disabled:!e.editable,ref:this.inputRef})}}]),n}(a.Component),hs=cs;var ps=function(e){var t=e.column,n=e.row[t.key],i=t.data||{},s=i.result_type,r=i.format;return s===xi.HC.DATE?(0,g.jsx)("div",{className:"form-control disabled",children:(0,rs.n4)(n,r)}):s===xi.HC.STRING?n:"object"===typeof n?null:(0,g.jsx)(g.Fragment,{})},ds=n(81694),us=n.n(ds),ms=n(44115),gs=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onCompositionStart=function(){s.isInputtingChinese=!0},s.onChange=function(e){s.timer&&clearTimeout(s.timer);var t=s.props,n=t.onChange,i=t.wait,r=e.target.value;s.setState({searchValue:r||""},(function(){s.isInputtingChinese||(s.timer=setTimeout((function(){n&&n(s.state.searchValue.trim())}),i))}))},s.onCompositionEnd=function(e){s.isInputtingChinese=!1,s.onChange(e)},s.setFocus=function(e){if(s.inputRef!==document.activeElement&&(s.inputRef.focus(),e)){var t=s.state.searchValue.length;s.inputRef.setSelectionRange(0,t)}},s.state={searchValue:e.value},s.isInputtingChinese=!1,s.timer=null,s.inputRef=null,s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;this.props.autoFocus&&this.inputRef&&this.inputRef!==document.activeElement&&setTimeout((function(){e.inputRef.focus()}),0)}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){e.value!==this.props.value&&this.setState({searchValue:e.value})}},{key:"componentWillUnmount",value:function(){this.timer&&clearTimeout(this.timer),this.timer=null,this.inputRef=null}},{key:"render",value:function(){var e=this,t=this.props,n=t.placeholder,i=t.autoFocus,s=t.className,r=t.onKeyDown,o=t.disabled,a=t.style,l=this.state.searchValue;return(0,g.jsx)("input",{type:"text",value:l,className:us()("form-control",s),onChange:this.onChange,autoFocus:i,placeholder:n,onCompositionStart:this.onCompositionStart,onCompositionEnd:this.onCompositionEnd,onKeyDown:r,disabled:o,style:a,ref:function(t){return e.inputRef=t}})}}]),n}(a.Component);gs.defaultProps={wait:100,disabled:!1,value:""};var fs,vs=gs,xs=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;(0,i.Z)(this,n),(s=t.call(this,e)).getCascadeColumnValue=function(e){var t=e.column,n=e.row,i=e.columns,s=(t.data||{}).cascade_column_key;return s&&i.find((function(e){return e.key===s}))?n[s]:""},s.getSelectColumnOptions=function(e){var t=e.column,n=e.row,i=e.columns,s=(0,rs.T8)(t),r=t.data||{},o=r.cascade_column_key,a=r.cascade_settings;if(o&&i.find((function(e){return e.key===o}))){var l=n[o];if(!l)return[];var c=a[l];return c&&Array.isArray(c)&&0!==c.length?s.filter((function(e){return c.includes(e.id)})):[]}return s},s.toggle=function(){s.ref.toggle(),s.props.onUpdateState()},s.onChangeSearch=function(e){if(s.state.searchVal!==e){var t=e.toLowerCase(),n=t?s.options.filter((function(e){return e.name&&e.name.toLowerCase().indexOf(t)>-1})):s.options;s.setState({searchVal:e,filteredOptions:n})}},s.onSelectOption=function(e){var t=s.props.column;s.setState({value:e},(function(){s.props.onCommit((0,ls.Z)({},t.key,e),t),s.toggle()}))};var r=s.getSelectColumnOptions(e);return s.state={value:e.row[e.column.key],searchVal:"",highlightIndex:-1,maxItemNum:0,itemHeight:0,filteredOptions:r},s.options=r,s.timer=null,s.editorKey="single-select-editor-".concat(e.column.key),s}return(0,s.Z)(n,[{key:"UNSAFE_componentWillReceiveProps",value:function(e){this.getCascadeColumnValue(this.props)!==this.getCascadeColumnValue(e)&&(this.options=this.getSelectColumnOptions(e),this.setState({filteredOptions:this.options}))}},{key:"render",value:function(){var e=this,t=this.state,n=t.value,i=t.filteredOptions,s=this.props.column;return(0,g.jsx)(ms.Z,{target:this.editorKey,className:"single-select-editor-popover",trigger:"legacy",placement:"bottom-start",hideArrow:!0,toggle:this.toggle,ref:function(t){return e.ref=t},children:(0,g.jsxs)("div",{className:"single-select-editor-container",children:[(0,g.jsx)("div",{className:"search-single-selects",children:(0,g.jsx)(vs,{placeholder:(0,u.ih)("Find an option"),onKeyDown:this.onKeyDown,onChange:this.onChangeSearch,autoFocus:!0})}),(0,g.jsx)("div",{className:"single-select-editor-content",children:i.map((function(t){var i=n===t.id,r={backgroundColor:t.color,color:t.textColor||null,maxWidth:Math.max(138,s.width?s.width-62:0)};return(0,g.jsxs)("div",{className:"single-select-option-container",onClick:e.onSelectOption.bind(e,i?null:t.id),children:[(0,g.jsx)("div",{className:"single-select-option",style:r,children:t.name}),(0,g.jsx)("div",{className:"single-select-option-selected",children:i&&(0,g.jsx)("i",{})})]},t.id)}))})]})})}}]),n}(a.Component),Ds=xs,ws=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;(0,i.Z)(this,n),(s=t.call(this,e)).updateState=function(){s.setState({isShowSingleSelect:!s.state.isShowSingleSelect})},s.onCommit=function(e,t){s.props.onCommit(e,t)};var r=e.column;return s.options=(0,rs.T8)(r),s.state={isShowSingleSelect:!1},s.editorKey="single-select-editor-".concat(r.key),s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state.isShowSingleSelect,t=this.props,n=t.column,i=t.row[n.key],s=this.options.find((function(e){return e.id===i})),r=s?{backgroundColor:s.color,color:s.textColor||null}:{backgroundColor:xi.yR},o=s?s.name:(0,u.ih)(xi.sL);return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)("div",{id:this.editorKey,className:us()("selected-single-select-container",{disable:!n.editable,focus:e}),children:(0,g.jsxs)("div",{className:"single-select-inner w-100 h-100 d-flex align-items-center justify-content-between",children:[(0,g.jsx)("div",{children:i&&(0,g.jsx)("div",{className:"single-select-option",style:r,title:o,children:o})}),n.editable&&(0,g.jsx)("i",{className:"fas fa-caret-down"})]})}),n.editable&&(0,g.jsx)(Ds,{column:n,row:this.props.row,columns:this.props.columns,onCommit:this.onCommit,onUpdateState:this.updateState})]})}}]),n}(a.Component),js=ws,ys=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;(0,i.Z)(this,n),(s=t.call(this,e)).onChange=function(e){var t=s.props.column.data,n=t&&t.format?t.format:xi.Ul,i=null;t&&"custom_currency"===t.format&&(i=t.currency_symbol);var r=e.target.value.trim();if((0,rs.V5)()||!(r.indexOf(".\u3002")>-1)){var o=(0,rs.MS)(r,n,i);o!==s.state.value&&s.setState({value:o})}},s.onKeyDown=function(e){var t=e.currentTarget,n=t.selectionStart,i=t.selectionEnd,r=t.value;e.keyCode===xi.mW.Enter||e.keyCode===xi.mW.Esc?(e.preventDefault(),s.input.blur()):(e.keyCode===xi.mW.LeftArrow&&0===n||e.keyCode===xi.mW.RightArrow&&i===r.length)&&e.stopPropagation()},s.onBlur=function(){var e=s.state.value,t=s.props.column;s.props.onCommit((0,ls.Z)({},t.key,(0,rs.ap)(e,t.data)),t)},s.setInputRef=function(e){return s.input=e,s.input},s.onPaste=function(e){e.stopPropagation()},s.onCut=function(e){e.stopPropagation()};var r=e.row,o=e.column,a=r[o.key];return s.state={value:(0,rs.d8)(a,o.data)},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.column;return(0,g.jsx)("input",{ref:this.setInputRef,type:"text",className:"form-control",value:this.state.value,onBlur:this.onBlur,onPaste:this.onPaste,onCut:this.onCut,onKeyDown:this.onKeyDown,onChange:this.onChange,disabled:!e.editable})}}]),n}(a.Component),Ss=ys,Cs=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.column,n=e.row,i=t.data,s=t.key,r=(0,rs.n4)(n[s],i?i.format:"");return(0,g.jsx)("input",{type:"text",className:"form-control",value:r,disabled:!0})}}]),n}(a.Component),bs=Cs,ks=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.column,n=e.row,i=t.key,s=(0,rs.n4)(n[i],"YYYY-MM-DD HH:mm:ss")||"";return(0,g.jsx)("div",{className:"form-control",style:{width:320},children:s})}}]),n}(a.Component),Is=ks,Ns=(fs={},(0,ls.Z)(fs,xi.EM.TEXT,hs),(0,ls.Z)(fs,xi.EM.FORMULA,ps),(0,ls.Z)(fs,xi.EM.SINGLE_SELECT,js),(0,ls.Z)(fs,xi.EM.NUMBER,Ss),(0,ls.Z)(fs,xi.EM.DATE,bs),(0,ls.Z)(fs,xi.EM.CTIME,Is),(0,ls.Z)(fs,xi.EM.MTIME,Is),fs),Ms=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.column,n=e.row,i=e.columns,s=Ns[t.type]||Ns.text;return(0,g.jsxs)("div",{className:"pb-4 row column-item",children:[(0,g.jsx)(as,{column:t}),(0,g.jsx)(os.Z,{md:9,className:"d-flex align-items-center extra-attribute-item-info",children:(0,g.jsx)(s,{column:t,row:n,columns:i,onCommit:this.props.onCommit})})]})}}]),n}(a.Component),Zs=Ms,Ps=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;(0,i.Z)(this,n),(s=t.call(this,e)).startAnimation=function(e){!0===s.state.animationEnd&&e&&e(),setTimeout((function(){var t=s.modalRef.current.firstChild,n=s.getDialogStyle(),i=n.width,r=n.maxWidth,o=n.marginLeft,a=n.height;t.style.width="".concat(i,"px"),t.style.maxWidth="".concat(r,"px"),t.style.marginLeft="".concat(o,"px"),t.style.height="".concat(a,"px"),t.style.marginRight="unset",t.style.marginTop="28px",setTimeout((function(){s.setState({animationEnd:!0},(function(){t.style.transition="none",e&&e()}))}),280)}),1)},s.getFormatUpdateData=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=s.state.columns,n={},i=function(i){var s=t.find((function(e){return e.key===i}));if(s&&s.editable){var r=s.type,o=s.name,a=e[i];if(r===xi.EM.SINGLE_SELECT){var l=(0,rs.T8)(s).find((function(e){return e.id===a}));n[o]=l?l.name:""}else n[s.name]=e[i]}};for(var r in e)i(r);return n},s.getData=function(){var e=s.props,t=e.repoID,n=e.filePath;w.I.getFileExtendedProperties(t,n).then((function(e){var t=e.data,n=t.row,i=t.metadata,r=t.editable_columns;s.isExist=Boolean(n._id),s.setState({row:n,columns:(0,rs.s2)(i,r,s.isEmptyFile),isLoading:!1,errorMsg:""})})).catch((function(e){var t=m.c.getErrorMsg(e);s.setState({isLoading:!1,errorMsg:t})}))},s.createData=function(e){var t=s.props,n=t.repoID,i=t.filePath;w.I.newFileExtendedProperties(n,i,e).then((function(e){s.isExist=!0;var t=e.data.row;s.setState({row:t,isLoading:!1,errorMsg:""})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger((0,u.ih)(t))}))},s.updateData=function(e,t){var n=(0,is.Z)((0,is.Z)({},s.state.row),e);s.setState({row:n},(function(){var t=s.getFormatUpdateData(e),n=s.props,i=n.repoID,r=n.filePath;s.isExist?w.I.updateFileExtendedProperties(i,r,t).then((function(e){s.setState({update:{},row:e.data.row})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger((0,u.ih)(t))})):s.createData(t)}))},s.onHotKey=function(e){(0,ss.ZP)("esc",e)&&s.onToggle()},s.onToggle=function(){s.props.onToggle()},s.getDialogStyle=function(){return{width:800,maxWidth:800,marginLeft:(window.innerWidth-800)/2,height:xi.KF}},s.getInitStyle=function(){var e=window.innerWidth;return{width:"".concat(e-80,"px"),maxWidth:"".concat(e-80,"px"),marginLeft:"".concat(80,"px"),height:"".concat(100,"px"),marginRight:"".concat(80,"px"),marginTop:"30%",transition:"all .3s"}},s.renderColumns=function(){var e=s.state,t=e.isLoading,n=e.errorMsg,i=e.columns,r=e.row,o=e.update;if(t)return(0,g.jsx)("div",{className:"w-100 h-100 d-flex align-items-center justify-content-center",children:(0,g.jsx)(R.Z,{})});if(n)return(0,g.jsx)("div",{className:"w-100 h-100 d-flex align-items-center justify-content-center error-message",children:(0,u.ih)(n)});var a=(0,is.Z)((0,is.Z)({},r),o);return(0,g.jsx)(g.Fragment,{children:i.map((function(e){return(0,g.jsx)(Zs,{column:e,row:a,columns:i,onCommit:s.updateData},e.key)}))})},s.renderContent=function(){return s.state.animationEnd?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(J.Z,{toggle:s.onToggle,children:(0,u.ih)("Edit extra properties")}),(0,g.jsx)(b.Z,{children:s.renderColumns()})]}):null};var r=e.direntDetail,o=e.direntType;if(s.state={animationEnd:!1,isLoading:!0,update:{},row:{},columns:[],errorMsg:""},"dir"===o)s.isEmptyFile=!1;else{var l=(null===r||void 0===r?void 0:r.id)||"";s.isEmptyFile=l==="0".repeat(l.length)}return s.isExist=!1,s.modalRef=a.createRef(),s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){this.startAnimation(this.getData),window.addEventListener("keydown",this.onHotKey)}},{key:"componentWillUnmount",value:function(){window.removeEventListener("keydown",this.onHotKey)}},{key:"render",value:function(){var e=this.state.animationEnd;return(0,g.jsx)(d.Z,{isOpen:!0,className:"extra-attributes-dialog",style:e?this.getDialogStyle():this.getInitStyle(),zIndex:xi.Ue.f,contentClassName:"extra-attributes-content-container",modalClassName:"extra-attributes-modal",wrapClassName:"extra-attributes",fade:!1,innerRef:this.modalRef,toggle:this.onToggle,children:this.renderContent()})}}]),n}(a.Component),Fs=Ps,_s=n(44031),Ts=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).submit=function(){var e=s.props,t=e.repoID,n=e.path;s.setState({submitting:!0}),w.I.applyFolderExtendedProperties(t,n).then((function(){j.Z.success((0,u.ih)("Successfully applied the properties.")),s.props.toggle()})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t),s.setState({submitting:!1})}))},s.state={submitting:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state.submitting;return(0,g.jsxs)(d.Z,{isOpen:!0,toggle:this.props.toggle,className:"apply-properties-dialog",children:[(0,g.jsx)(J.Z,{toggle:this.props.toggle,children:(0,u.ih)("Apply properties")}),(0,g.jsx)(b.Z,{children:(0,g.jsx)("p",{children:(0,u.ih)("Are you sure you want to apply the properties to all the files inside the folder?")})}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:this.props.toggle,disabled:e,children:(0,u.ih)("Cancel")}),(0,g.jsx)($.Z,{color:"primary",className:"flex-shrink-0 apply-properties",disabled:e,onClick:this.submit,children:e?(0,g.jsx)(R.Z,{}):(0,g.jsx)(g.Fragment,{children:(0,u.ih)("Submit")})})]})]})}}]),n}(a.Component),Ls=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).getDirentPosition=function(){var e=s.props.repoInfo,t=s.getDirentPath(),n=e.repo_name;if("/"!==t){var i=t.lastIndexOf("/");n+=t.slice(0,i)}return n},s.onEditFileTagToggle=function(){s.setState({isEditFileTagShow:!s.state.isEditFileTagShow})},s.onFileTagChanged=function(){var e=s.getDirentPath();s.props.onFileTagChanged(s.props.dirent,e)},s.getDirentPath=function(){if(m.c.isMarkdownFile(s.props.path))return s.props.path;var e=s.props,t=e.dirent,n=e.path;return m.c.joinPath(n,t.name)},s.toggleExtraPropertiesDialog=function(){s.setState({isShowExtraProperties:!s.state.isShowExtraProperties})},s.toggleApplyPropertiesDialog=function(){s.setState({isShowApplyProperties:!s.state.isShowApplyProperties})},s.renderTags=function(){var e=s.props,t=e.direntType,n=e.direntDetail,i=s.getDirentPosition();return"dir"===t?(0,g.jsxs)("table",{className:"table-thead-hidden",children:[(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"35%"}),(0,g.jsx)("th",{width:"65%"})]})}),(0,g.jsxs)("tbody",{children:[(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{children:(0,u.ih)("Location")}),(0,g.jsx)("td",{children:i})]}),(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{children:(0,u.ih)("Last Update")}),(0,g.jsx)("td",{children:A()(n.mtime).format("YYYY-MM-DD")})]}),"rw"===n.permission&&u.EG&&(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("tr",{className:"file-extra-attributes",children:(0,g.jsx)("th",{colSpan:2,children:(0,g.jsx)("div",{className:"edit-file-extra-attributes-btn",onClick:s.toggleExtraPropertiesDialog,children:(0,u.ih)("Edit extra properties")})})}),(0,g.jsx)("tr",{className:"file-extra-attributes",children:(0,g.jsx)("th",{colSpan:2,children:(0,g.jsx)("div",{className:"edit-file-extra-attributes-btn text-truncate",onClick:s.toggleApplyPropertiesDialog,title:(0,u.ih)("Apply properties to files inside the folder"),children:(0,u.ih)("Apply properties to files inside the folder")})})})]})]})]}):(0,g.jsxs)("table",{className:"table-thead-hidden",children:[(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"35%"}),(0,g.jsx)("th",{width:"65%"})]})}),(0,g.jsxs)("tbody",{children:[(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{children:(0,u.ih)("Size")}),(0,g.jsx)("td",{children:m.c.bytesToSize(n.size)})]}),(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{children:(0,u.ih)("Location")}),(0,g.jsx)("td",{children:i})]}),(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{children:(0,u.ih)("Last Update")}),(0,g.jsx)("td",{children:A()(n.last_modified).fromNow()})]}),(0,g.jsxs)("tr",{className:"file-tag-container",children:[(0,g.jsx)("th",{children:(0,u.ih)("Tags")}),(0,g.jsxs)("td",{children:[(0,g.jsx)(_s.Z,{fileTagList:s.props.fileTagList}),(0,g.jsx)("span",{onClick:s.onEditFileTagToggle,id:s.tagListTitleID,children:(0,g.jsx)(et.Z,{symbol:"tag"})})]})]}),"rw"===n.permission&&u.EG&&(0,g.jsx)("tr",{className:"file-extra-attributes",children:(0,g.jsx)("th",{colSpan:2,children:(0,g.jsx)("div",{className:"edit-file-extra-attributes-btn",onClick:s.toggleExtraPropertiesDialog,children:(0,u.ih)("Edit extra properties")})})})]})]})},s.state={isEditFileTagShow:!1,isShowExtraProperties:!1,isShowApplyProperties:!1},s.tagListTitleID="detail-list-view-tags-".concat(Bi()),s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.direntType,n=e.direntDetail,i=e.fileTagList,s=this.getDirentPath();return(0,g.jsxs)(a.Fragment,{children:[this.renderTags(),this.state.isEditFileTagShow&&(0,g.jsx)(ns.Z,{repoID:this.props.repoID,filePath:s,fileTagList:i,toggleCancel:this.onEditFileTagToggle,onFileTagChanged:this.onFileTagChanged,target:this.tagListTitleID,isEditFileTagShow:this.state.isEditFileTagShow}),this.state.isShowExtraProperties&&(0,g.jsx)(Fs,{repoID:this.props.repoID,filePath:s,direntType:t,direntDetail:n,onToggle:this.toggleExtraPropertiesDialog}),this.state.isShowApplyProperties&&(0,g.jsx)(Ts,{toggle:this.toggleApplyPropertiesDialog,repoID:this.props.repoID,path:s})]})}}]),n}(a.Component);Ls.defaultProps={fileTagList:[]};var Os=Ls,Rs=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).loadDirentInfo=function(e,t,n){if(e){var i=m.c.joinPath(t,e.name);s.updateDetailView(e,i)}else{var r=m.c.getDirName(t);w.I.listDir(n,r).then((function(e){for(var n=e.data.dirent_list,i=null,r=0;r0&&t.includes(s.props.dirent)){s.props.onShowDirentsDraggablePreview(),e.dataTransfer.setDragImage(s.refs.empty_content,0,0);var n=t.map((function(e){var t=s.getDirentPath(e);return{nodeDirent:e,nodeParentPath:s.props.path,nodeRootPath:t}}));return n=JSON.stringify(n),void e.dataTransfer.setData("applicaiton/drag-item-info",n)}e.dataTransfer&&e.dataTransfer.setDragImage&&e.dataTransfer.setDragImage(s.refs.drag_icon,15,15);var i=s.getDirentPath(s.props.dirent),r={nodeDirent:s.props.dirent,nodeParentPath:s.props.path,nodeRootPath:i};r=JSON.stringify(r),e.dataTransfer.setData("applicaiton/drag-item-info",r)},s.onItemDragEnter=function(e){if(m.c.isIEBrower()||!s.state.canDrag)return!1;"dir"===s.props.dirent.type&&(e.stopPropagation(),s.setState({isDropTipshow:!0}))},s.onItemDragOver=function(e){if(m.c.isIEBrower()||!s.state.canDrag)return!1;"copy"!==e.dataTransfer.dropEffect&&(e.preventDefault(),e.dataTransfer.dropEffect="move")},s.onItemDragLeave=function(e){if(m.c.isIEBrower()||!s.state.canDrag)return!1;"dir"===s.props.dirent.type&&e.stopPropagation(),s.setState({isDropTipshow:!1})},s.onItemDragDrop=function(e){if(m.c.isIEBrower()||!s.state.canDrag)return!1;if(s.setState({isDropTipshow:!1}),!e.dataTransfer.files.length&&"dir"===s.props.dirent.type){e.stopPropagation();var t=e.dataTransfer.getData("applicaiton/drag-item-info");if(t=JSON.parse(t),Array.isArray(t)){var n=t.map((function(e){return e.nodeRootPath})),i=m.c.joinPath(s.props.path,s.props.dirent.name);if(n.some((function(e){return e===i})))return;s.props.onItemsMove(s.props.currentRepoInfo,i)}else{var r=t,o=r.nodeDirent,a=r.nodeParentPath,l=r.nodeRootPath,c=s.props.dirent;if(o.name!==c.name&&("dir"!==c.type||"dir"!==o.type||a===s.props.path||-1===s.props.path.indexOf(l))){var h=m.c.joinPath(s.props.path,s.props.dirent.name);s.onItemMove(s.props.currentRepoInfo,o,h,a)}}}},s.onItemMouseDown=function(e){s.props.onItemMouseDown(e)},s.onItemContextMenu=function(e){var t=s.props.dirent;s.props.onItemContextMenu(e,t)},s.renderItemOperation=function(){var e=s.props,t=e.dirent,n=e.currentRepoInfo,i=e.selectedDirentList,r=!0,o=!0,l=(0,D.Z)(s),c=l.isCustomPermission,h=l.customPermission;if(c){var p=h.permission;r=p.download,o=p.delete}var d=m.c.isHasPermissionToShare(n,t.permission,t);return(0,g.jsx)(a.Fragment,{children:i.length>1?(0,g.jsx)(a.Fragment,{children:s.state.isOperationShow&&!t.isSelected&&(0,g.jsxs)("div",{className:"operations",children:[("rw"===t.permission||"r"===t.permission||c&&r)&&(0,g.jsx)("a",{href:"#",className:"op-icon sf2-icon-download",title:(0,u.ih)("Download"),role:"button","aria-label":(0,u.ih)("Download"),onClick:s.onItemDownload}),d&&(0,g.jsx)("a",{href:"#",className:"op-icon sf2-icon-share",title:(0,u.ih)("Share"),role:"button","aria-label":(0,u.ih)("Share"),onClick:s.onItemShare}),("rw"===t.permission||"cloud-edit"===t.permission||c&&o)&&(0,g.jsx)("a",{href:"#",className:"op-icon sf2-icon-delete",title:(0,u.ih)("Delete"),role:"button","aria-label":(0,u.ih)("Delete"),onClick:s.onItemDelete}),(0,g.jsx)(ki.Z,{item:s.props.dirent,toggleClass:"sf2-icon-caret-down",isHandleContextMenuEvent:!0,getMenuList:s.props.getDirentItemMenuList,onMenuItemClick:s.onMenuItemClick,unfreezeItem:s.unfreezeItem,freezeItem:s.props.freezeItem})]})}):(0,g.jsx)(a.Fragment,{children:s.state.isOperationShow&&(0,g.jsxs)("div",{className:"operations",children:[("rw"===t.permission||"r"===t.permission||c&&r)&&(0,g.jsx)("a",{href:"#",className:"op-icon sf2-icon-download",title:(0,u.ih)("Download"),role:"button","aria-label":(0,u.ih)("Download"),onClick:s.onItemDownload}),d&&(0,g.jsx)("a",{href:"#",className:"op-icon sf2-icon-share",title:(0,u.ih)("Share"),role:"button","aria-label":(0,u.ih)("Share"),onClick:s.onItemShare}),("rw"===t.permission||"cloud-edit"===t.permission||c&&o)&&(0,g.jsx)("a",{href:"#",className:"op-icon sf2-icon-delete",title:(0,u.ih)("Delete"),role:"button","aria-label":(0,u.ih)("Delete"),onClick:s.onItemDelete}),(0,g.jsx)(ki.Z,{item:s.props.dirent,toggleClass:"sf2-icon-caret-down",isHandleContextMenuEvent:!0,getMenuList:s.props.getDirentItemMenuList,onMenuItemClick:s.onMenuItemClick,unfreezeItem:s.unfreezeItem,freezeItem:s.props.freezeItem})]})})})};var r=s.props.dirent,o=m.c.getUserPermission(r.permission),l=o.isCustomPermission,c=o.customPermission;if(s.isCustomPermission=l,s.customPermission=c,s.canPreview=!0,s.canDrag="rw"===r.permission,l){var h=c.permission,p=h.preview,d=h.modify;s.canPreview=p||d,s.canDrag=d}return s.state={isOperationShow:!1,highlight:!1,isZipDialogOpen:!1,isMoveDialogShow:!1,isCopyDialogShow:!1,isShareDialogShow:!1,isMutipleOperation:!1,canDrag:s.canDrag,isShowTagTooltip:!1,isDragTipShow:!1,isDropTipshow:!1,isEditFileTagShow:!1,isPermissionDialogOpen:!1,isOpMenuOpen:!1},s.tagListTitleID="tag-list-title-".concat(Bi()),s}return(0,s.Z)(n,[{key:"UNSAFE_componentWillReceiveProps",value:function(e){var t=this;e.isItemFreezed===this.props.isItemFreezed||e.isItemFreezed||this.setState({highlight:!1,isOperationShow:!1},(function(){e.activeDirent&&e.activeDirent.name===e.dirent.name&&t.setState({isOperationShow:!0})}))}},{key:"render",value:function(){var e=this,t=this.props,n=t.path,i=t.dirent,s=t.activeDirent,r=m.c.joinPath(n,i.name),o="";this.props.currentRepoInfo&&(o=u.ze+"library/"+this.props.repoID+"/"+this.props.currentRepoInfo.repo_name+m.c.encodePath(r));var l=u.ze+"lib/"+this.props.repoID+"/file"+m.c.encodePath(r);i.is_sdoc_revision&&i.revision_id&&(l=u.ze+"lib/"+this.props.repoID+"/revisions/"+i.revision_id+"/");var c=m.c.getDirentIcon(i),h=this.state.highlight?"tr-highlight ":"";h+=this.state.isDropTipshow?"tr-drop-effect":"",h+=s&&s.name===i.name?"tr-active":"",h+=i.isSelected?"tr-active":"";var d=i.is_freezed?(0,u.ih)("Frozen by {name}"):(0,u.ih)("locked by {name}");d=d.replace("{name}",i.lock_owner_name);var f=m.c.isDesktop(),v=this.state.canDrag,x="".concat(u.si,"img/file-").concat(i.is_freezed?"freezed":"locked","-32.png"),D=i.is_freezed?(0,u.ih)("freezed"):(0,u.ih)("locked"),w=(0,g.jsxs)("tr",{className:h,draggable:v,onFocus:this.onMouseEnter,onMouseEnter:this.onMouseEnter,onMouseOver:this.onMouseOver,onMouseLeave:this.onMouseLeave,onClick:this.onDirentClick,onDragStart:this.onItemDragStart,onDragEnter:this.onItemDragEnter,onDragOver:this.onItemDragOver,onDragLeave:this.onItemDragLeave,onDrop:this.onItemDragDrop,onMouseDown:this.onItemMouseDown,onContextMenu:this.onItemContextMenu,children:[(0,g.jsx)("td",{className:"pl10 ".concat(this.state.isDragTipShow?"tr-drag-effect":""),children:(0,g.jsx)("input",{type:"checkbox",className:"vam",onChange:this.onItemSelected,checked:i.isSelected})}),(0,g.jsx)("td",{className:"pl10",children:void 0!==i.starred&&(0,g.jsx)("a",{href:"#",role:"button","aria-label":i.starred?(0,u.ih)("Unstar"):(0,u.ih)("Star"),onClick:this.onItemStarred,children:(0,g.jsx)("i",{className:"fa-star ".concat(i.starred?"fas":"far star-empty")})})}),(0,g.jsx)("td",{className:"pl10",children:(0,g.jsxs)("div",{className:"dir-icon",children:[this.canPreview&&i.encoded_thumbnail_src?(0,g.jsx)("img",{ref:"drag_icon",src:"".concat(u.ze).concat(i.encoded_thumbnail_src),className:"thumbnail cursor-pointer",onClick:this.onItemClick,alt:""}):(0,g.jsx)("img",{ref:"drag_icon",src:c,width:"24",alt:""}),i.is_locked&&(0,g.jsx)("img",{className:"locked",src:x,alt:D,title:d}),(0,g.jsx)("div",{ref:"empty_content",style:{position:"absolute",width:"1px",height:"1px"}})]})}),(0,g.jsxs)("td",{className:"name",children:[this.state.isRenameing&&(0,g.jsx)(tn.Z,{hasSuffix:"dir"!==i.type,name:i.name,onRenameConfirm:this.onRenameConfirm,onRenameCancel:this.onRenameCancel}),!this.state.isRenameing&&(0,g.jsx)(a.Fragment,{children:i.isDir()||this.canPreview?(0,g.jsx)("a",{href:"dir"===i.type?o:l,onClick:this.onItemClick,children:i.name}):(0,g.jsx)("a",{className:"sf-link",onClick:this.onItemClick,children:i.name})})]}),(0,g.jsxs)("td",{className:"tag-list-title",children:["dir"!==i.type&&i.file_tags&&i.file_tags.length>0&&(0,g.jsx)("div",{id:this.tagListTitleID,className:"dirent-item tag-list tag-list-stacked",children:i.file_tags.map((function(e,t){return(0,g.jsx)(Gs,{fileTag:e,length:i.file_tags.length,index:t},t)}))}),"dir"!==i.type&&(!i.file_tags||0==i.file_tags.length)&&(0,g.jsx)("div",{id:this.tagListTitleID,className:"dirent-item tag-list tag-list-stacked"})]}),(0,g.jsx)("td",{className:"operation",children:this.renderItemOperation()}),(0,g.jsx)("td",{className:"file-size",children:i.size&&i.size}),(0,g.jsx)("td",{className:"last-update",title:A().unix(i.mtime).format("llll"),children:i.mtime_relative})]}),j=(0,g.jsxs)("tr",{children:[(0,g.jsx)("td",{onClick:this.onItemClick,children:(0,g.jsxs)("div",{className:"dir-icon",children:[this.canPreview&&i.encoded_thumbnail_src?(0,g.jsx)("img",{src:"".concat(u.ze).concat(i.encoded_thumbnail_src),className:"thumbnail cursor-pointer",alt:""}):(0,g.jsx)("img",{src:c,width:"24",alt:""}),i.is_locked&&(0,g.jsx)("img",{className:"locked",src:x,alt:D,title:d})]})}),(0,g.jsxs)("td",{onClick:this.onItemClick,children:[this.state.isRenameing&&(0,g.jsx)(tn.Z,{hasSuffix:"dir"!==i.type,name:i.name,onRenameConfirm:this.onRenameConfirm,onRenameCancel:this.onRenameCancel}),!this.state.isRenameing&&(0,g.jsx)(a.Fragment,{children:i.isDir()||this.canPreview?(0,g.jsx)("a",{href:"dir"===i.type?o:l,children:i.name}):(0,g.jsx)("a",{className:"sf-link",children:i.name})}),(0,g.jsx)("br",{}),i.size&&(0,g.jsx)("span",{className:"item-meta-info",children:i.size}),(0,g.jsx)("span",{className:"item-meta-info",children:i.mtime_relative})]}),(0,g.jsx)("td",{children:(0,g.jsxs)(U.Z,{isOpen:this.state.isOpMenuOpen,toggle:this.toggleOpMenu,children:[(0,g.jsx)(z.Z,{tag:"i",className:"sf-dropdown-toggle fa fa-ellipsis-v ml-0",title:(0,u.ih)("More Operations"),"data-toggle":"dropdown","aria-expanded":this.state.isOpMenuOpen}),(0,g.jsxs)("div",{className:this.state.isOpMenuOpen?"":"d-none",onClick:this.toggleOpMenu,children:[(0,g.jsx)("div",{className:"mobile-operation-menu-bg-layer"}),(0,g.jsxs)("div",{className:"mobile-operation-menu",children:[void 0!==i.starred&&(0,g.jsx)(G.Z,{className:"mobile-menu-item",onClick:this.onItemStarred,children:i.starred?(0,u.ih)("Unstar"):(0,u.ih)("Star")}),this.props.getDirentItemMenuList(i,!0).map((function(t,n){return"Divider"!=t&&"Open via Client"!=t.key?(0,g.jsx)(G.Z,{className:"mobile-menu-item","data-op":t.key,onClick:e.onMobileMenuItemClick,children:t.value},n):null}))]})]})]})})]});return(0,g.jsxs)(a.Fragment,{children:[f?w:j,this.state.isMoveDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(fi,{path:this.props.path,repoID:this.props.repoID,dirent:this.props.dirent,isMutipleOperation:this.state.isMutipleOperation,onItemMove:this.props.onItemMove,onCancelMove:this.onItemMoveToggle,repoEncrypted:this.props.repoEncrypted})}),this.state.isCopyDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(vi,{path:this.props.path,repoID:this.props.repoID,dirent:this.props.dirent,isMutipleOperation:this.state.isMutipleOperation,onItemCopy:this.props.onItemCopy,onCancelCopy:this.onItemCopyToggle,repoEncrypted:this.props.repoEncrypted})}),(0,g.jsx)(p(),{query:"(min-width: 768px)",children:this.state.isEditFileTagShow&&(0,g.jsx)(ns.Z,{repoID:this.props.repoID,fileTagList:i.file_tags,filePath:r,toggleCancel:this.onEditFileTagToggle,onFileTagChanged:this.onFileTagChanged,target:this.tagListTitleID,isEditFileTagShow:this.state.isEditFileTagShow})}),(0,g.jsx)(p(),{query:"(max-width: 767.8px)",children:this.state.isEditFileTagShow&&(0,g.jsx)(Si,{repoID:this.props.repoID,fileTagList:i.file_tags,filePath:r,toggleCancel:this.onEditFileTagToggle,onFileTagChanged:this.onFileTagChanged})}),this.state.isZipDialogOpen&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Ci.Z,{repoID:this.props.repoID,path:this.props.path,target:this.props.dirent.name,toggleDialog:this.closeZipDialog})}),this.state.isShareDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Qe.Z,{itemType:i.type,itemName:i.name,itemPath:r,userPerm:i.permission,repoID:this.props.repoID,repoEncrypted:this.props.repoEncrypted,enableDirPrivateShare:this.props.enableDirPrivateShare,isGroupOwnedRepo:this.props.isGroupOwnedRepo,toggleDialog:this.closeSharedDialog})}),this.state.isPermissionDialogOpen&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(en,{toggleDialog:this.onPermissionItem,repoID:this.props.repoID,folderPath:r,folderName:i.name,isDepartmentRepo:this.props.isGroupOwnedRepo})})]})}}]),n}(a.Component),Ws=n(99832),Vs=n(60925),qs=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){var e;(0,i.Z)(this,n);for(var s=arguments.length,r=new Array(s),o=0;o0&&!s.state.activeDirent||(s.setState({activeDirent:e}),s.props.onDirentClick(e))},s.sortByName=function(e){e.preventDefault();var t="asc"==s.props.sortOrder?"desc":"asc";s.props.sortItems("name",t)},s.sortByTime=function(e){e.preventDefault();var t="asc"==s.props.sortOrder?"desc":"asc";s.props.sortItems("time",t)},s.sortBySize=function(e){e.preventDefault();var t="asc"==s.props.sortOrder?"desc":"asc";s.props.sortItems("size",t)},s.prepareImageItem=function(e){var t=e.name,n=s.props.repoID,i=m.c.encodePath(m.c.joinPath(s.props.path,t)),r="".concat(u.ze,"repo/").concat(n,"/raw").concat(i);return{name:t,url:"".concat(u.ze,"lib/").concat(n,"/file").concat(i),src:r}},s.showImagePopup=function(e){var t=s.props.fullDirentList.filter((function(e){return m.c.imageCheck(e.name)})),n=t.map((function(e){return s.prepareImageItem(e)}));s.setState({isImagePopupOpen:!0,imageItems:n,imageIndex:t.indexOf(e)})},s.moveToPrevImage=function(){var e=s.state.imageItems.length;s.setState((function(t){return{imageIndex:(t.imageIndex+e-1)%e}}))},s.moveToNextImage=function(){var e=s.state.imageItems.length;s.setState((function(t){return{imageIndex:(t.imageIndex+1)%e}}))},s.closeImagePopup=function(){s.setState({isImagePopupOpen:!1})},s.onCreateFileToggle=function(e){s.setState({isCreateFileDialogShow:!s.state.isCreateFileDialogShow,fileType:e||""})},s.onCreateFolderToggle=function(){s.setState({isCreateFolderDialogShow:!s.state.isCreateFolderDialogShow})},s.onAddFolder=function(e){s.setState({isCreateFolderDialogShow:!1}),s.props.onAddFolder(e)},s.checkDuplicatedName=function(e){return s.props.direntList.some((function(t){return t.name===e}))},s.onMoveToggle=function(){s.setState({isMoveDialogShow:!s.state.isMoveDialogShow})},s.onCopyToggle=function(){s.setState({isCopyDialogShow:!s.state.isCopyDialogShow})},s.onItemsDownload=function(){var e=s.props,t=e.path,n=e.repoID,i=e.selectedDirentList;if(i.length){if(1===i.length&&!i[0].isDir()){var r=m.c.joinPath(t,i[0].name),o=gi.Z.getUrl({type:"download_file_url",repoID:n,filePath:r});return void(location.href=o)}var a=i.map((function(e){return e.name}));s.setState({isProgressDialogShow:!0,downloadItems:a})}},s.onCloseZipDownloadDialog=function(){s.setState({isProgressDialogShow:!1})},s.onMouseDown=function(e){e.stopPropagation(),e.button},s.handleContextClick=function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;e.preventDefault(),e.stopPropagation();var r=e.clientX||e.touches&&e.touches[0].pageX,o=e.clientY||e.touches&&e.touches[0].pageY;s.props.posX&&(r-=s.props.posX),s.props.posY&&(o-=s.props.posY),(0,Vs.SC)();var a={id:t,position:{x:r,y:o},target:e.target,currentObject:i,menuList:n};0!==n.length&&(0,Vs.AE)(a)},s.onContainerClick=function(){(0,Vs.SC)(),s.state.activeDirent&&s.onDirentClick(null)},s.onContainerMouseDown=function(e){s.onMouseDown(e)},s.onContainerContextMenu=function(e){e.preventDefault();var t=s.props.userPerm,n=m.c.getUserPermission(s.props.userPerm),i=n.isCustomPermission,r=n.customPermission;if("admin"===t||"rw"===t||i){var o=zs.Z.NEW_FOLDER,a=zs.Z.NEW_FILE,l=zs.Z.NEW_MARKDOWN_FILE,c=zs.Z.NEW_EXCEL_FILE,h=zs.Z.NEW_POWERPOINT_FILE,p=zs.Z.NEW_WORD_FILE,d=zs.Z.NEW_SEADOC_FILE,g=[o,a,"Divider",l,c,h,p];if(u.np&&g.push(d),0===s.props.selectedDirentList.length){if(i)if(!r.permission.create)return;var f=g;s.handleContextClick(e,"dirent-container-menu",f)}else if(1===s.props.selectedDirentList.length)if(s.state.activeDirent){if(s.onDirentClick(null),e.preventDefault(),e.persist(),i)if(!r.permission.modify)return;setTimeout((function(){var t=g;s.handleContextClick(e,"dirent-container-menu",t)}),0)}else{var v=s.props.selectedDirentList[0],x=s.getDirentItemMenuList(v,!0);s.handleContextClick(e,"dirent-item-menu",x,v)}else{var D=[];if(i){var w=r.permission,j=w.modify,y=w.copy,S=w.download,C=w.delete;j&&D.push(zs.Z.MOVE),y&&D.push(zs.Z.COPY),S&&D.push(zs.Z.DOWNLOAD),C&&D.push(zs.Z.DELETE)}else D=[zs.Z.MOVE,zs.Z.COPY,zs.Z.DOWNLOAD,zs.Z.DELETE];s.handleContextClick(e,"dirents-menu",D)}}},s.onContainerMenuItemClick=function(e){switch(e){case"New Folder":s.onCreateFolderToggle();break;case"New File":s.onCreateFileToggle();break;case"New Markdown File":s.onCreateFileToggle(".md");break;case"New Excel File":s.onCreateFileToggle(".xlsx");break;case"New PowerPoint File":s.onCreateFileToggle(".pptx");break;case"New Word File":s.onCreateFileToggle(".docx");break;case"New SeaDoc File":s.onCreateFileToggle(".sdoc")}(0,Vs.SC)()},s.onDirentsMenuItemClick=function(e){switch(e){case"Move":s.onMoveToggle();break;case"Copy":s.onCopyToggle();break;case"Download":s.onItemsDownload();break;case"Delete":s.props.onItemsDelete()}(0,Vs.SC)()},s.onThreadMouseDown=function(e){s.onMouseDown(e)},s.onThreadContextMenu=function(e){e.stopPropagation()},s.onItemMouseDown=function(e){s.onMouseDown(e)},s.onItemContextMenu=function(e,t){if(!(s.props.selectedDirentList.length>1)){s.onDirentClick(t);var n=s.getDirentItemMenuList(t,!0);s.handleContextClick(e,"dirent-item-menu",n,t)}},s.setDirentItemRef=function(e){return function(t){s.direntItems[e]=t}},s.onMenuItemClick=function(e,t,n){var i=s.getDirentIndex(t);s.direntItems[i].onMenuItemClick(e,n),(0,Vs.SC)()},s.onShowMenu=function(e){s.freezeItem()},s.onHideMenu=function(e){s.unfreezeItem()},s.getDirentIndex=function(e){for(var t=s.props.direntList,n=0,i=0;i0&&(o=er()(t.name).slice(0,7),l=t.file_tags.map((function(e){return e.name})).join(" "));var c="";this.props.currentRepoInfo&&(c=u.ze+"library/"+this.props.repoID+"/"+this.props.currentRepoInfo.repo_name+m.c.encodePath(i));var h=u.ze+"lib/"+this.props.repoID+"/file"+m.c.encodePath(i);t.is_sdoc_revision&&t.revision_id&&(h=u.ze+"lib/"+this.props.repoID+"/revisions/"+t.revision_id+"/");var p="grid-file-img-link cursor-pointer";p+=this.state.isGridSelected?" grid-selected-active":" ",p+=this.state.isGridDropTipShow?" grid-drop-show":" ";var d=t.is_freezed?(0,u.ih)("Frozen by {name}"):(0,u.ih)("locked by {name}");d=d.replace("{name}",t.lock_owner_name);var f="".concat(u.si,"img/file-").concat(t.is_freezed?"freezed":"locked","-32.png"),v=t.is_freezed?(0,u.ih)("freezed"):(0,u.ih)("locked");return(0,g.jsx)(a.Fragment,{children:(0,g.jsxs)("li",{className:"grid-item",onContextMenu:this.onGridItemContextMenu,onMouseDown:this.onGridItemMouseDown,children:[(0,g.jsxs)("div",{className:p,draggable:this.canDrag,onClick:this.onItemClick,onDragStart:this.onGridItemDragStart,onDragEnter:this.onGridItemDragEnter,onDragOver:this.onGridItemDragOver,onDragLeave:this.onGridItemDragLeave,onDrop:this.onGridItemDragDrop,children:[this.canPreview&&t.encoded_thumbnail_src?(0,g.jsx)("img",{src:"".concat(u.ze).concat(r),ref:this.gridIcon,className:"thumbnail",onClick:this.onItemClick,alt:""}):(0,g.jsx)("img",{src:s,ref:this.gridIcon,width:"96",alt:""}),t.is_locked&&(0,g.jsx)("img",{className:"grid-file-locked-icon",src:f,alt:v,title:d})]}),(0,g.jsxs)("div",{className:"grid-file-name",onDragStart:this.onGridItemDragStart,draggable:this.canDrag,children:["dir"!==t.type&&t.file_tags&&t.file_tags.length>0&&(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("div",{id:"tag-list-title-".concat(o),className:"dirent-item tag-list tag-list-stacked d-inline-block align-middle",children:t.file_tags.map((function(e,n){var i=t.file_tags.length;return(0,g.jsx)("span",{className:"file-tag",style:{zIndex:i-n,backgroundColor:e.color}},e.id)}))}),(0,g.jsx)($e.Z,{target:"tag-list-title-".concat(o),placement:"bottom",children:l})]}),t.isDir()||this.canPreview?(0,g.jsx)("a",{className:"grid-file-name-link ".concat(this.state.isGridSelected?"grid-link-selected-active":""),href:"dir"===t.type?c:h,onClick:this.onItemLinkClick,children:t.name}):(0,g.jsx)("a",{className:"sf-link grid-file-name-link ".concat(this.state.isGridSelected?"grid-link-selected-active":""),onClick:this.onItemLinkClick,children:t.name})]})]})})}}]),n}(a.Component),nr=(n(12188),function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onCreateFileToggle=function(e){s.setState({isCreateFileDialogShow:!s.state.isCreateFileDialogShow,fileType:e||""})},s.onGridItemClick=function(e){(0,Vs.SC)(),s.setState({activeDirent:e}),s.props.onGridItemClick(e)},s.onMoveToggle=function(){s.setState({isMoveDialogShow:!s.state.isMoveDialogShow})},s.onCopyToggle=function(){s.setState({isCopyDialogShow:!s.state.isCopyDialogShow})},s.onAddFolder=function(e){s.setState({isCreateFolderDialogShow:!1}),s.props.onAddFolder(e)},s.onItemShare=function(e){e.nativeEvent.stopImmediatePropagation(),s.setState({isShareDialogShow:!s.state.isShareDialogShow})},s.closeSharedDialog=function(){s.setState({isShareDialogShow:!s.state.isShareDialogShow})},s.onItemDelete=function(e,t){t.nativeEvent.stopImmediatePropagation(),s.props.onItemDelete(e)},s.onItemConvert=function(e,t,n){t.nativeEvent.stopImmediatePropagation(),s.props.onItemConvert(e,n)},s.onMenuItemClick=function(e,t,n){switch((0,Vs.SC)(),e){case"Download":s.onItemDownload(t,n);break;case"Share":s.onItemShare(n);break;case"Delete":s.onItemDelete(t,n);break;case"Rename":s.onItemRenameToggle();break;case"Move":s.onItemMoveToggle();break;case"Copy":s.onItemCopyToggle();break;case"Freeze Document":s.onFreezeDocument(t);break;case"Convert to Markdown":s.onItemConvert(t,n,"markdown");break;case"Convert to sdoc":s.onItemConvert(t,n,"sdoc");break;case"Tags":s.onEditFileTagToggle();break;case"Permission":s.onPermissionItem();break;case"Unlock":s.onUnlockItem(t);break;case"Lock":s.onLockItem(t);break;case"Mark as draft":s.onMarkAsDraft(t);break;case"Unmark as draft":s.onUnmarkAsDraft(t);break;case"History":s.onHistory(t);break;case"New Folder":s.onCreateFolderToggle(t);break;case"New File":s.onCreateFileToggle("");break;case"New Markdown File":s.onCreateFileToggle(".md");break;case"New Excel File":s.onCreateFileToggle(".xlsx");break;case"New PowerPoint File":s.onCreateFileToggle(".pptx");break;case"New Word File":s.onCreateFileToggle(".docx");break;case"New SeaDoc File":s.onCreateFileToggle(".sdoc");break;case"Access Log":s.onAccessLog(t);break;case"Properties":s.props.showDirentDetail("info");break;case"Open via Client":s.onOpenViaClient(t)}},s.onEditFileTagToggle=function(){s.setState({isEditFileTagShow:!s.state.isEditFileTagShow})},s.onFileTagChanged=function(){var e=s.state.activeDirent?s.state.activeDirent:"",t=m.c.joinPath(s.props.path,e.name);s.props.onFileTagChanged(e,t)},s.getDirentPath=function(e){var t=s.props.path;return"/"===t?t+e.name:t+"/"+e.name},s.closeZipDialog=function(){s.setState({isZipDialogOpen:!1})},s.onItemDownload=function(e,t){t.nativeEvent.stopImmediatePropagation();var n=e,i=s.props.repoID,r=s.getDirentPath(n);if("dir"===n.type)s.setState({isZipDialogOpen:!0});else{var o=gi.Z.getUrl({type:"download_file_url",repoID:i,filePath:r});location.href=o}},s.onCreateFolderToggle=function(){s.setState({isCreateFolderDialogShow:!s.state.isCreateFolderDialogShow})},s.onItemRenameToggle=function(){s.setState({isRenameDialogShow:!s.state.isRenameDialogShow})},s.onItemMoveToggle=function(){s.setState({isMoveDialogShow:!s.state.isMoveDialogShow})},s.onItemCopyToggle=function(){s.setState({isCopyDialogShow:!s.state.isCopyDialogShow})},s.onPermissionItem=function(){s.setState({isPermissionDialogOpen:!s.state.isPermissionDialogOpen})},s.onLockItem=function(e){var t=s.props.repoID,n=s.getDirentPath(e);w.I.lockfile(t,n).then((function(){s.props.updateDirent(e,"is_locked",!0),s.props.updateDirent(e,"locked_by_me",!0);var t=u.b6.split("@");s.props.updateDirent(e,"lock_owner_name",t[0])})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onFreezeDocument=function(e){var t=s.props.repoID,n=s.getDirentPath(e);w.I.lockfile(t,n,-1).then((function(){s.props.updateDirent(e,"is_freezed",!0),s.props.updateDirent(e,"is_locked",!0),s.props.updateDirent(e,"locked_by_me",!0);var t=u.b6.split("@");s.props.updateDirent(e,"lock_owner_name",t[0])})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onUnlockItem=function(e){var t=s.props.repoID,n=s.getDirentPath(e);w.I.unlockfile(t,n).then((function(){s.props.updateDirent(e,"is_locked",!1),s.props.updateDirent(e,"locked_by_me",!1),s.props.updateDirent(e,"lock_owner_name","")})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onMarkAsDraft=function(e){var t=s.props.repoID,n=s.getDirentPath(e);w.I.sdocMarkAsDraft(t,n).then((function(t){s.props.updateDirent(e,"is_sdoc_draft",!0)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onUnmarkAsDraft=function(e){var t=s.props.repoID,n=s.getDirentPath(e);w.I.sdocUnmarkAsDraft(t,n).then((function(t){s.props.updateDirent(e,"is_sdoc_draft",!1)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onHistory=function(e){var t=s.props.repoID,n=s.getDirentPath(e),i=gi.Z.getUrl({type:"file_revisions",repoID:t,filePath:n});location.href=i},s.onAccessLog=function(e){var t=s.getDirentPath(e),n=u.ze+"repo/file-access/"+s.props.repoID+"/?p="+encodeURIComponent(t);window.open(n)},s.onOpenViaClient=function(e){var t=s.props.repoID,n=s.getDirentPath(e),i=gi.Z.getUrl({type:"open_via_client",repoID:t,filePath:n});location.href=i},s.onItemRename=function(e){s.props.onItemRename(s.state.activeDirent,e)},s.prepareImageItem=function(e){var t=e.name,n=s.props.repoID,i=m.c.encodePath(m.c.joinPath(s.props.path,t)),r="".concat(u.ze,"repo/").concat(n,"/raw").concat(i);return{name:t,url:"".concat(u.ze,"lib/").concat(n,"/file").concat(i),src:r}},s.showImagePopup=function(e){var t=s.props.fullDirentList.filter((function(e){return m.c.imageCheck(e.name)})),n=t.map((function(e){return s.prepareImageItem(e)}));s.setState({isImagePopupOpen:!0,imageItems:n,imageIndex:t.indexOf(e)})},s.closeImagePopup=function(){s.setState({isImagePopupOpen:!1})},s.moveToPrevImage=function(){var e=s.state.imageItems.length;s.setState((function(t){return{imageIndex:(t.imageIndex+e-1)%e}}))},s.moveToNextImage=function(){var e=s.state.imageItems.length;s.setState((function(t){return{imageIndex:(t.imageIndex+1)%e}}))},s.checkDuplicatedName=function(e){return m.c.checkDuplicatedNameInList(s.props.direntList,e)},s.onMouseDown=function(e){e.stopPropagation(),e.button},s.onGridContainerMouseDown=function(e){s.onMouseDown(e)},s.onGridItemMouseDown=function(e){s.onMouseDown(e)},s.gridContainerClick=function(){(0,Vs.SC)(),s.props.isDirentDetailShow||s.onGridItemClick(null)},s.onGridContainerContextMenu=function(e){e.preventDefault();var t=s.props.userPerm;if("admin"===t||"rw"===t){var n=zs.Z.NEW_FOLDER,i=zs.Z.NEW_FILE,r=zs.Z.NEW_MARKDOWN_FILE,o=zs.Z.NEW_EXCEL_FILE,a=zs.Z.NEW_POWERPOINT_FILE,l=zs.Z.NEW_WORD_FILE,c=zs.Z.NEW_SEADOC_FILE,h=[n,i,"Divider",r,o,a,l];u.np&&h.push(c),s.handleContextClick(e,"dirent-grid-container-menu",h)}},s.onGridItemContextMenu=function(e,t){var n=s.getDirentItemMenuList(t,!0);s.handleContextClick(e,"grid-item-contextmenu",n,t),s.props.onGridItemClick&&s.props.onGridItemClick(t)},s.handleContextClick=function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;e.preventDefault(),e.stopPropagation();var r=e.clientX||e.touches&&e.touches[0].pageX,o=e.clientY||e.touches&&e.touches[0].pageY;s.props.posX&&(r-=s.props.posX),s.props.posY&&(o-=s.props.posY),(0,Vs.SC)(),s.setState({activeDirent:i});var a={id:t,position:{x:r,y:o},target:e.target,currentObject:i,menuList:n};0!==n.length&&(0,Vs.AE)(a)},s.getDirentItemMenuList=function(e,t){var n=s.isRepoOwner,i=s.props.currentRepoInfo;return m.c.getDirentOperationList(n,i,e,t)},s.state={isImagePopupOpen:!1,imageItems:[],imageIndex:0,isShareDialogShow:!1,isMoveDialogShow:!1,isCopyDialogShow:!1,isEditFileTagShow:!1,isZipDialogOpen:!1,isRenameDialogShow:!1,isCreateFolderDialogShow:!1,isCreateFileDialogShow:!1,fileType:"",isPermissionDialogOpen:!1,isMutipleOperation:!1,isGridItemFreezed:!1,activeDirent:null},s.isRepoOwner=e.currentRepoInfo.owner_email===u.b6,s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.direntList,i=t.path,s=this.state.activeDirent?this.state.activeDirent:"",r=m.c.joinPath(i,s.name);return this.props.isDirentListLoading?(0,g.jsx)(R.Z,{}):(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("ul",{className:"grid-view",onClick:this.gridContainerClick,onContextMenu:this.onGridContainerContextMenu,onMouseDown:this.onGridContainerMouseDown,children:0!==n.length&&n.map((function(t,n){return(0,g.jsx)(tr,{dirent:t,repoID:e.props.repoID,path:e.props.path,onItemClick:e.props.onItemClick,currentRepoInfo:e.props.currentRepoInfo,showImagePopup:e.showImagePopup,onGridItemContextMenu:e.onGridItemContextMenu,onItemMove:e.props.onItemMove,onGridItemMouseDown:e.onGridItemMouseDown,onGridItemClick:e.onGridItemClick,activeDirent:e.state.activeDirent},n)}))}),(0,g.jsx)(Ws.Z,{id:"grid-item-contextmenu",onMenuItemClick:this.onMenuItemClick}),(0,g.jsx)(Ws.Z,{id:"dirent-grid-container-menu",onMenuItemClick:this.onMenuItemClick}),this.state.isCreateFolderDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(hi.Z,{parentPath:this.props.path,onAddFolder:this.onAddFolder,checkDuplicatedName:this.checkDuplicatedName,addFolderCancel:this.onCreateFolderToggle})}),this.state.isCreateFileDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(pi,{parentPath:this.props.path,fileType:this.state.fileType,onAddFile:this.props.onAddFile,checkDuplicatedName:this.checkDuplicatedName,toggleDialog:this.onCreateFileToggle})}),this.state.isMoveDialogShow&&(0,g.jsx)(fi,{path:this.props.path,repoID:this.props.repoID,repoEncrypted:this.props.currentRepoInfo.encrypted,isMutipleOperation:this.state.isMutipleOperation,onItemMove:this.props.onItemMove,onCancelMove:this.onMoveToggle,dirent:this.state.activeDirent}),this.state.isZipDialogOpen&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Ci.Z,{repoID:this.props.repoID,path:this.props.path,target:s.name,toggleDialog:this.closeZipDialog})}),this.state.isCopyDialogShow&&(0,g.jsx)(vi,{path:this.props.path,repoID:this.props.repoID,repoEncrypted:this.props.currentRepoInfo.encrypted,isMutipleOperation:this.state.isMutipleOperation,onItemCopy:this.props.onItemCopy,onCancelCopy:this.onCopyToggle,dirent:this.state.activeDirent}),this.state.isEditFileTagShow&&(0,g.jsx)(Si,{repoID:this.props.repoID,fileTagList:s.file_tags,filePath:r,toggleCancel:this.onEditFileTagToggle,onFileTagChanged:this.onFileTagChanged}),this.state.isShareDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Qe.Z,{itemType:s.type,itemName:s.name,itemPath:r,userPerm:s.permission,repoID:this.props.repoID,repoEncrypted:!1,enableDirPrivateShare:this.props.enableDirPrivateShare,isGroupOwnedRepo:this.props.isGroupOwnedRepo,toggleDialog:this.closeSharedDialog})}),this.state.isRenameDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(bi,{dirent:this.state.activeDirent,onRename:this.onItemRename,checkDuplicatedName:this.checkDuplicatedName,toggleCancel:this.onItemRenameToggle})}),this.state.isPermissionDialogOpen&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(en,{toggleDialog:this.onPermissionItem,repoID:this.props.repoID,folderPath:r,folderName:s.name,isDepartmentRepo:this.props.isGroupOwnedRepo})}),this.state.isImagePopupOpen&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Bs.Z,{imageItems:this.state.imageItems,imageIndex:this.state.imageIndex,closeImagePopup:this.closeImagePopup,moveToPrevImage:this.moveToPrevImage,moveToNextImage:this.moveToNextImage})})]})}}]),n}(a.Component)),ir=nr,sr=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){return"/"===this.props.path&&0===this.props.direntList.length?(0,g.jsx)(As,{path:this.props.path,isDirentListLoading:this.props.isDirentListLoading,onAddFile:this.props.onAddFile}):(0,g.jsxs)(a.Fragment,{children:[this.props.isRepoInfoBarShow&&(0,g.jsx)(Us.Z,{repoID:this.props.repoID,currentPath:this.props.path,draftCounts:this.props.draftCounts,usedRepoTags:this.props.usedRepoTags,updateUsedRepoTags:this.props.updateUsedRepoTags,onFileTagChanged:this.props.onFileTagChanged}),(0,g.jsx)(ir,{path:this.props.path,repoID:this.props.repoID,currentRepoInfo:this.props.currentRepoInfo,isGroupOwnedRepo:this.props.isGroupOwnedRepo,userPerm:this.props.userPerm,enableDirPrivateShare:this.props.enableDirPrivateShare,direntList:this.props.direntList,fullDirentList:this.props.fullDirentList,onAddFile:this.props.onAddFile,onItemClick:this.props.onItemClick,onItemDelete:this.props.onItemDelete,onItemMove:this.props.onItemMove,onItemCopy:this.props.onItemCopy,onItemConvert:this.props.onItemConvert,isDirentListLoading:this.props.isDirentListLoading,updateDirent:this.props.updateDirent,onRenameNode:this.props.onRenameNode,showDirentDetail:this.props.showDirentDetail,onGridItemClick:this.props.onGridItemClick,isDirentDetailShow:this.props.isDirentDetailShow,onItemRename:this.props.onItemRename,onAddFolder:this.props.onAddFolder,onFileTagChanged:this.props.onFileTagChanged})]})}}]),n}(a.Component),rr=sr,or=n(95046),ar=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).handleChange=function(e){e.target.value.trim()?s.setState({isSubmitBtnActive:!0}):s.setState({isSubmitBtnActive:!1}),s.setState({newName:e.target.value})},s.handleSubmit=function(){var e=s.validateInput(),t=e.isValid,n=e.errMessage;if(t)if(s.checkDuplicatedName()){var i=(0,u.ih)('The name "{name}" is already taken. Please choose a different name.');i=i.replace("{name}",m.c.HTMLescape(s.state.newName)),s.setState({errMessage:i})}else s.props.onRename(s.state.newName);else s.setState({errMessage:n})},s.handleKeyDown=function(e){"Enter"===e.key&&s.handleSubmit()},s.toggle=function(){s.props.toggleCancel()},s.changeState=function(e){var t=e.object.name;s.setState({newName:t})},s.validateInput=function(){var e=s.state.newName.trim(),t=!0,n="";return e?e.indexOf("/")>-1?{isValid:t=!1,errMessage:n=(0,u.ih)("Name should not include '/'.")}:{isValid:t,errMessage:n}:{isValid:t=!1,errMessage:n=(0,u.ih)("Name is required.")}},s.checkDuplicatedName=function(){return s.props.checkDuplicatedName(s.state.newName)},s.onAfterModelOpened=function(){if(s.newInput.current){var e=s.props.currentNode,t=e.object.type;if(s.newInput.current.focus(),"file"===t){var n=e.object.name.lastIndexOf(".md");s.newInput.current.setSelectionRange(0,n,"forward")}else s.newInput.current.setSelectionRange(0,-1)}},s.state={newName:"",errMessage:"",isSubmitBtnActive:!1},s.newInput=a.createRef(),s}return(0,s.Z)(n,[{key:"UNSAFE_componentWillMount",value:function(){this.setState({newName:this.props.currentNode.object.name})}},{key:"componentDidMount",value:function(){var e=this.props.currentNode;this.changeState(e)}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){this.changeState(e.currentNode)}},{key:"render",value:function(){var e=this.props.currentNode.object.type;return(0,g.jsxs)(d.Z,{isOpen:!0,toggle:this.toggle,onOpened:this.onAfterModelOpened,children:[(0,g.jsx)(J.Z,{toggle:this.toggle,children:"file"===e?(0,u.ih)("Rename File"):(0,u.ih)("Rename Folder")}),(0,g.jsxs)(b.Z,{children:[(0,g.jsx)("p",{children:"file"===e?(0,u.ih)("New file name"):(0,u.ih)("New folder name")}),(0,g.jsx)(re.Z,{onKeyDown:this.handleKeyDown,innerRef:this.newInput,placeholder:"newName",value:this.state.newName,onChange:this.handleChange}),this.state.errMessage&&(0,g.jsx)(bt.Z,{color:"danger",className:"mt-2",children:this.state.errMessage})]}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:this.toggle,children:(0,u.ih)("Cancel")}),(0,g.jsx)($.Z,{color:"primary",onClick:this.handleSubmit,disabled:!this.state.isSubmitBtnActive,children:(0,u.ih)("Submit")})]})]})}}]),n}(a.Component),lr=ar,cr=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onNodeClick=function(e){s.setState({opNode:e}),m.c.imageCheck(e.object.name)?s.showNodeImagePopup(e):s.props.onNodeClick(e)},s.onMenuItemClick=function(e,t){switch(s.setState({opNode:t}),e){case"New Folder":t?s.onAddFolderToggle():s.onAddFolderToggle("root");break;case"New File":t?s.onAddFileToggle():s.onAddFileToggle("root");break;case"Rename":s.onRenameToggle();break;case"Delete":s.onDeleteNode(t);break;case"Copy":s.onCopyToggle();break;case"Move":s.onMoveToggle();break;case"Open in New Tab":s.onOpenFile(t)}},s.onAddFileToggle=function(e){if("root"===e){var t=s.props.treeData.root;s.setState({isAddFileDialogShow:!s.state.isAddFileDialogShow,opNode:t})}else s.setState({isAddFileDialogShow:!s.state.isAddFileDialogShow})},s.onAddFolderToggle=function(e){if("root"===e){var t=s.props.treeData.root;s.setState({isAddFolderDialogShow:!s.state.isAddFolderDialogShow,opNode:t})}else s.setState({isAddFolderDialogShow:!s.state.isAddFolderDialogShow})},s.onRenameToggle=function(){s.setState({isRenameDialogShow:!s.state.isRenameDialogShow})},s.onCopyToggle=function(){s.setState({isCopyDialogShow:!s.state.isCopyDialogShow})},s.onMoveToggle=function(){s.setState({isMoveDialogShow:!s.state.isMoveDialogShow})},s.onAddFolderNode=function(e){s.setState({isAddFolderDialogShow:!s.state.isAddFolderDialogShow}),s.props.onAddFolderNode(e)},s.onRenameNode=function(e){s.setState({isRenameDialogShow:!s.state.isRenameDialogShow});var t=s.state.opNode;s.props.onRenameNode(t,e)},s.onDeleteNode=function(e){s.props.onDeleteNode(e)},s.onOpenFile=function(e){var t=u.ze+"lib/"+s.props.repoID+"/file"+m.c.encodePath(e.path);window.open(t,"_blank")},s.checkDuplicatedName=function(e){var t=s.state.opNode;return(t.parentNode?t.parentNode:t).children.map((function(e){return e.object})).some((function(t){return t.name===e}))},s.showNodeImagePopup=function(e){var t=e.parentNode.children.filter((function(e){return m.c.imageCheck(e.object.name)})).map((function(e){return e.object.name}));s.setState({isNodeImagePopupOpen:!0,imageNodeItems:s.prepareImageItems(e),imageIndex:t.indexOf(e.object.name)})},s.prepareImageItems=function(e){var t=e.parentNode.children.filter((function(e){return m.c.imageCheck(e.object.name)})),n=!s.props.currentRepoInfo.encrypted;return t.map((function(t){return function(t){var i=t.object.name,r=m.c.encodePath(m.c.joinPath(e.parentNode.path,i)),o="gif"===i.substr(i.lastIndexOf(".")+1).toLowerCase(),a=s.props.repoID,l="";return l=n&&!o?"".concat(u.ze,"thumbnail/").concat(a,"/").concat(u.fp).concat(r):"".concat(u.ze,"repo/").concat(a,"/raw").concat(r),{name:i,url:"".concat(u.ze,"lib/").concat(a,"/file").concat(r),src:l}}(t)}))},s.closeNodeImagePopup=function(){s.setState({isNodeImagePopupOpen:!1})},s.moveToPrevImage=function(){var e=s.state.imageNodeItems.length;s.setState((function(t){return{imageIndex:(t.imageIndex+e-1)%e}}))},s.moveToNextImage=function(){var e=s.state.imageNodeItems.length;s.setState((function(t){return{imageIndex:(t.imageIndex+1)%e}}))},s.stopTreeScrollPropagation=function(e){e.stopPropagation()},s.state={opNode:null,isAddFileDialogShow:!1,isAddFolderDialogShow:!1,isRenameDialogShow:!1,isNodeImagePopupOpen:!1,imageNodeItems:[],imageIndex:0,isCopyDialogShow:!1,isMoveDialogShow:!1,isMutipleOperation:!1},s.isNodeMenuShow=!0,s}return(0,s.Z)(n,[{key:"UNSAFE_componentWillReceiveProps",value:function(e){this.setState({opNode:e.currentNode})}},{key:"render",value:function(){var e=this.props.navRate?"0 0 "+100*this.props.navRate+"%":"0 0 25%",t=this.props.inResizing?"none":"";return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("div",{className:"dir-content-nav",role:"navigation",style:{flex:e,userSelect:t},onScroll:this.stopTreeScrollPropagation,children:this.props.isTreeDataLoading?(0,g.jsx)(R.Z,{}):(0,g.jsx)(or.Z,{userPerm:this.props.userPerm,isNodeMenuShow:this.isNodeMenuShow,treeData:this.props.treeData,currentPath:this.props.currentPath,onNodeClick:this.onNodeClick,onNodeExpanded:this.props.onNodeExpanded,onNodeCollapse:this.props.onNodeCollapse,onMenuItemClick:this.onMenuItemClick,onFreezedItem:this.onFreezedItem,onUnFreezedItem:this.onUnFreezedItem,onItemMove:this.props.onItemMove,currentRepoInfo:this.props.currentRepoInfo,selectedDirentList:this.props.selectedDirentList,onItemsMove:this.props.onItemsMove})}),this.state.isAddFolderDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(hi.Z,{parentPath:this.state.opNode.path,onAddFolder:this.onAddFolderNode,checkDuplicatedName:this.checkDuplicatedName,addFolderCancel:this.onAddFolderToggle})}),this.state.isAddFileDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(pi,{parentPath:this.state.opNode.path,onAddFile:this.props.onAddFileNode,checkDuplicatedName:this.checkDuplicatedName,toggleDialog:this.onAddFileToggle})}),this.state.isRenameDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(lr,{currentNode:this.state.opNode,onRename:this.onRenameNode,checkDuplicatedName:this.checkDuplicatedName,toggleCancel:this.onRenameToggle})}),this.state.isCopyDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(vi,{path:this.state.opNode.parentNode.path,repoID:this.props.repoID,dirent:this.state.opNode.object,onItemCopy:this.props.onItemCopy,repoEncrypted:this.props.currentRepoInfo.encrypted,onCancelCopy:this.onCopyToggle,isMutipleOperation:this.state.isMutipleOperation})}),this.state.isMoveDialogShow&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(fi,{path:this.state.opNode.parentNode.path,repoID:this.props.repoID,dirent:this.state.opNode.object,onItemMove:this.props.onItemMove,repoEncrypted:this.props.currentRepoInfo.encrypted,onCancelMove:this.onMoveToggle,isMutipleOperation:this.state.isMutipleOperation})}),this.state.isNodeImagePopupOpen&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(Bs.Z,{imageItems:this.state.imageNodeItems,imageIndex:this.state.imageIndex,closeImagePopup:this.closeNodeImagePopup,moveToPrevImage:this.moveToPrevImage,moveToNextImage:this.moveToNextImage})})]})}}]),n}(a.Component);cr.defaultProps={navRate:.25};var hr=cr,pr=n(50699),dr=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){var e;(0,i.Z)(this,n);for(var s=arguments.length,r=new Array(s),o=0;o.4?s.setState({inResizing:!1,navRate:.38}):s.setState({navRate:n})},s.setCookie=function(e,t){var n=e+"="+t+";";document.cookie=n},s.getCookie=function(e){for(var t=e+"=",n=document.cookie.split(";"),i=0,s=n.length;i=t.scrollHeight&&s.props.onListContainerScroll()},s.state={currentDirent:null},s.errMessage=(0,g.jsx)("div",{className:"message err-tip",children:(0,u.ih)("Folder does not exist.")}),s}return(0,s.Z)(n,[{key:"UNSAFE_componentWillReceiveProps",value:function(e){e.path===this.props.path&&e.updateDetail===this.props.updateDetail||this.setState({currentDirent:null})}},{key:"render",value:function(){var e=this.props,t=e.path,n=e.repoID,i=e.usedRepoTags,s=e.draftCounts,r=!1;return"/"===t&&(0===i.length&&0===s||(r=!0)),(0,g.jsxs)(a.Fragment,{children:[(0,g.jsxs)("div",{className:"cur-view-container",children:["read-only"===this.props.currentRepoInfo.status&&(0,g.jsx)("div",{className:"readonly-tip-message",children:(0,u.ih)("This library has been set to read-only by admin and cannot be updated.")}),(0,g.jsx)("div",{className:"cur-view-path",children:(0,g.jsx)(ts,{repoID:n,repoName:this.props.currentRepoInfo.repo_name,pathPrefix:this.props.pathPrefix,currentPath:this.props.path,userPerm:this.props.userPerm,isViewFile:this.props.isViewFile,onTabNavClick:this.props.onTabNavClick,onPathClick:this.onPathClick,updateUsedRepoTags:this.props.updateUsedRepoTags,fileTags:this.props.fileTags,onDeleteRepoTag:this.props.onDeleteRepoTag,direntList:this.props.direntList,sortBy:this.props.sortBy,sortOrder:this.props.sortOrder,sortItems:this.props.sortItems})}),(0,g.jsxs)("div",{className:"cur-view-content lib-content-container ".concat("column"===this.props.currentMode?"view-mode-container":""),onScroll:this.onItemsScroll,children:[!this.props.pathExist&&this.errMessage,this.props.pathExist&&(0,g.jsxs)(a.Fragment,{children:["list"===this.props.currentMode&&(0,g.jsx)(Qs,{path:this.props.path,repoID:n,currentRepoInfo:this.props.currentRepoInfo,isGroupOwnedRepo:this.props.isGroupOwnedRepo,userPerm:this.props.userPerm,enableDirPrivateShare:this.props.enableDirPrivateShare,isRepoInfoBarShow:r,usedRepoTags:this.props.usedRepoTags,draftCounts:this.props.draftCounts,updateUsedRepoTags:this.props.updateUsedRepoTags,isDirentListLoading:this.props.isDirentListLoading,direntList:this.props.direntList,fullDirentList:this.props.fullDirentList,sortBy:this.props.sortBy,sortOrder:this.props.sortOrder,sortItems:this.props.sortItems,onAddFolder:this.props.onAddFolder,onAddFile:this.props.onAddFile,onItemClick:this.onItemClick,onItemSelected:this.onItemSelected,onItemDelete:this.onItemDelete,onItemRename:this.props.onItemRename,onItemMove:this.onItemMove,onItemCopy:this.props.onItemCopy,onItemConvert:this.props.onItemConvert,onDirentClick:this.onDirentClick,updateDirent:this.props.updateDirent,isAllItemSelected:this.props.isAllDirentSelected,onAllItemSelected:this.props.onAllDirentSelected,selectedDirentList:this.props.selectedDirentList,onItemsMove:this.props.onItemsMove,onItemsCopy:this.props.onItemsCopy,onItemsDelete:this.props.onItemsDelete,onFileTagChanged:this.props.onFileTagChanged,showDirentDetail:this.props.showDirentDetail,loadDirentList:this.props.loadDirentList}),"grid"===this.props.currentMode&&(0,g.jsx)(rr,{path:this.props.path,repoID:n,currentRepoInfo:this.props.currentRepoInfo,isGroupOwnedRepo:this.props.isGroupOwnedRepo,userPerm:this.props.userPerm,enableDirPrivateShare:this.props.enableDirPrivateShare,onRenameNode:this.props.onRenameNode,isRepoInfoBarShow:r,usedRepoTags:this.props.usedRepoTags,draftCounts:this.props.draftCounts,updateUsedRepoTags:this.props.updateUsedRepoTags,isDirentListLoading:this.props.isDirentListLoading,direntList:this.props.direntList,fullDirentList:this.props.fullDirentList,onAddFile:this.props.onAddFile,onItemClick:this.onItemClick,onItemDelete:this.props.onItemDelete,onItemMove:this.onItemMove,onItemCopy:this.props.onItemCopy,onItemConvert:this.props.onItemConvert,updateDirent:this.props.updateDirent,onAddFolder:this.props.onAddFolder,showDirentDetail:this.props.showDirentDetail,onGridItemClick:this.onGridItemClick,isDirentDetailShow:this.props.isDirentDetailShow,onItemRename:this.props.onItemRename,onFileTagChanged:this.props.onFileTagChanged}),"column"===this.props.currentMode&&(0,g.jsx)(gr,{path:this.props.path,repoID:n,currentRepoInfo:this.props.currentRepoInfo,isGroupOwnedRepo:this.props.isGroupOwnedRepo,userPerm:this.props.userPerm,enableDirPrivateShare:this.props.enableDirPrivateShare,isTreeDataLoading:this.props.isTreeDataLoading,treeData:this.props.treeData,currentNode:this.props.currentNode,onNodeClick:this.props.onNodeClick,onNodeCollapse:this.props.onNodeCollapse,onNodeExpanded:this.props.onNodeExpanded,onAddFolderNode:this.props.onAddFolder,onAddFileNode:this.props.onAddFile,onRenameNode:this.props.onRenameNode,onDeleteNode:this.props.onDeleteNode,isViewFile:this.props.isViewFile,isFileLoading:this.props.isFileLoading,isFileLoadedErr:this.props.isFileLoadedErr,hash:this.props.hash,isDraft:this.props.isDraft,hasDraft:this.props.hasDraft,goDraftPage:this.props.goDraftPage,filePermission:this.props.filePermission,content:this.props.content,lastModified:this.props.lastModified,latestContributor:this.props.latestContributor,onLinkClick:this.props.onLinkClick,isRepoInfoBarShow:r,usedRepoTags:this.props.usedRepoTags,draftCounts:this.props.draftCounts,updateUsedRepoTags:this.props.updateUsedRepoTags,isDirentListLoading:this.props.isDirentListLoading,direntList:this.props.direntList,fullDirentList:this.props.fullDirentList,sortBy:this.props.sortBy,sortOrder:this.props.sortOrder,sortItems:this.props.sortItems,onAddFolder:this.props.onAddFolder,onAddFile:this.props.onAddFile,onItemClick:this.onItemClick,onItemSelected:this.onItemSelected,onItemDelete:this.onItemDelete,onItemRename:this.props.onItemRename,onItemMove:this.onItemMove,onItemCopy:this.props.onItemCopy,onItemConvert:this.props.onItemConvert,onDirentClick:this.onDirentClick,updateDirent:this.props.updateDirent,isAllItemSelected:this.props.isAllDirentSelected,onAllItemSelected:this.props.onAllDirentSelected,selectedDirentList:this.props.selectedDirentList,onItemsMove:this.props.onItemsMove,onItemsCopy:this.props.onItemsCopy,onItemsDelete:this.props.onItemsDelete,onFileTagChanged:this.props.onFileTagChanged,showDirentDetail:this.props.showDirentDetail})]})]})]}),this.props.isDirentDetailShow&&(0,g.jsx)(a.Fragment,{children:(0,g.jsx)("div",{className:"cur-view-detail",children:"/"!==this.props.path||this.state.currentDirent?(0,g.jsx)(Es,{repoID:n,path:this.props.path,dirent:this.state.currentDirent,currentRepoInfo:this.props.currentRepoInfo,fileTags:this.props.isViewFile?this.props.fileTags:[],onFileTagChanged:this.props.onFileTagChanged,onItemDetailsClose:this.props.closeDirentDetail,direntDetailPanelTab:this.props.direntDetailPanelTab}):(0,g.jsx)(Mt,{currentRepo:this.props.currentRepoInfo,closeDetails:this.props.closeDirentDetail})})})]})}}]),n}(a.Component),vr=n(53008),xr=n.n(vr),Dr="uploading",wr="error",jr="isSaving",yr="uploaded",Sr=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onUploadCancel=function(e){e.preventDefault(),s.props.onUploadCancel(s.props.resumableFile)},s.onUploadRetry=function(e){e.preventDefault(),s.props.onUploadRetry(s.props.resumableFile)},s.formatFileSize=function(e){return"number"!==typeof e?"":e>=1e9?(e/1e9).toFixed(1)+" G":e>=1e6?(e/1e6).toFixed(1)+" M":e>=1e3?(e/1e3).toFixed(1)+" K":e.toFixed(1)+" B"},s.state={uploadState:Dr},s}return(0,s.Z)(n,[{key:"UNSAFE_componentWillReceiveProps",value:function(e){var t=e.resumableFile,n=Dr;t.error?n=wr:(0!==t.remainingTime||t.isSaved||(n=jr),t.isSaved&&(n=yr)),this.setState({uploadState:n})}},{key:"render",value:function(){var e=this.props.resumableFile,t=Math.round(100*e.progress()),n=e.error,i=e.newFileName,s=this.formatFileSize(e.size);return(0,g.jsxs)("tr",{className:"file-upload-item",children:[(0,g.jsx)("td",{className:"upload-name",children:(0,g.jsx)("div",{className:"ellipsis",title:i,children:i})}),(0,g.jsx)("td",{className:"ellipsis",children:(0,g.jsx)("span",{className:"file-size",title:s,children:s})}),(0,g.jsxs)("td",{className:"upload-progress ellipsis",children:[(this.state.uploadState===Dr||this.state.uploadState===jr)&&(0,g.jsxs)(a.Fragment,{children:[e.size>=1e8&&(0,g.jsxs)(a.Fragment,{children:[e.isUploading()&&(0,g.jsxs)("div",{className:"progress-container",children:[(0,g.jsx)("div",{className:"progress",children:(0,g.jsx)("div",{className:"progress-bar",role:"progressbar",style:{width:"".concat(t,"%")},"aria-valuenow":t,"aria-valuemin":"0","aria-valuemax":"100"})}),-1===e.remainingTime&&(0,g.jsx)("div",{className:"progress-text",children:(0,u.ih)("Preparing to upload...")}),e.remainingTime>0&&(0,g.jsxs)("div",{className:"progress-text",children:[(0,u.ih)("Remaining")," ",m.c.formatTime(e.remainingTime)]}),0===e.remainingTime&&(0,g.jsx)("div",{className:"progress-text",children:(0,u.ih)("Indexing...")})]}),!e.isUploading()&&(0,g.jsx)("div",{className:"progress-container d-flex align-items-center",children:(0,g.jsx)("div",{className:"progress",children:(0,g.jsx)("div",{className:"progress-bar",role:"progressbar",style:{width:"".concat(t,"%")},"aria-valuenow":t,"aria-valuemin":"0","aria-valuemax":"100"})})})]}),e.size<1e8&&(0,g.jsx)("div",{className:"progress-container d-flex align-items-center",children:(0,g.jsx)("div",{className:"progress",children:(0,g.jsx)("div",{className:"progress-bar",role:"progressbar",style:{width:"".concat(t,"%")},"aria-valuenow":t,"aria-valuemin":"0","aria-valuemax":"100"})})})]}),this.state.uploadState===wr&&(0,g.jsx)("div",{className:"message err-message ml-0",dangerouslySetInnerHTML:{__html:n}})]}),(0,g.jsx)("td",{className:"upload-operation ellipsis",children:(0,g.jsxs)(a.Fragment,{children:[this.state.uploadState===Dr&&(0,g.jsx)("a",{href:"#",onClick:this.onUploadCancel,children:(0,u.ih)("Cancel")}),this.state.uploadState===wr&&(0,g.jsx)("a",{href:"#",onClick:this.onUploadRetry,children:(0,u.ih)("Retry")}),this.state.uploadState===jr&&(0,g.jsx)("span",{className:"saving",children:(0,u.ih)("Saving...")}),this.state.uploadState===yr&&(0,g.jsx)("span",{className:"uploaded",children:(0,u.ih)("Uploaded")})]})})]})}}]),n}(a.Component),Cr=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.file,t=(0,u.ih)("Please upload files less than {placeholder}M").replace("{placeholder}",u.Og);return(0,g.jsxs)("tr",{className:"file-upload-item",children:[(0,g.jsx)("td",{className:"upload-name",children:(0,g.jsx)("div",{className:"ellipsis",title:e.name,children:e.name})}),(0,g.jsx)("td",{colSpan:3,className:"error",children:t})]})}}]),n}(a.Component),br=Cr,kr=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onCancelAllUploading=function(){s.props.onCancelAllUploading()},s.onMinimizeUpload=function(e){e.nativeEvent.stopImmediatePropagation(),s.setState({isMinimized:!s.state.isMinimized})},s.onCloseUpload=function(e){e.nativeEvent.stopImmediatePropagation(),s.props.onCloseUploadDialog()},s.state={isMinimized:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=m.c.formatBitRate(this.props.uploadBitrate),n=(0,u.ih)("File Upload"),i=(0,u.ih)("File Uploading...")+" "+this.props.totalProgress+"% ("+t+")",s=(0,g.jsx)("span",{className:"sf2-icon-minus",onClick:this.onMinimizeUpload}),r=(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("span",{className:"sf2-icon-minus",onClick:this.onMinimizeUpload}),(0,g.jsx)("span",{className:"sf2-icon-x1",onClick:this.onCloseUpload})]}),o=this.props,l=o.totalProgress,c=o.allFilesUploaded,h=o.retryFileList;return(0,g.jsxs)("div",{className:"uploader-list-view mw-100",style:{height:this.state.isMinimized?"2.25rem":"20rem"},children:[(0,g.jsxs)("div",{className:"uploader-list-header",children:[(0,g.jsx)("div",{className:"title",children:100===l?n:i}),(0,g.jsx)("div",{className:"uploader-options",children:100===l||c?r:s})]}),(0,g.jsxs)("div",{className:"uploader-list-content",children:[(0,g.jsxs)("div",{className:"text-right mt-2",children:[h.length>0?(0,g.jsx)("span",{className:"cursor-pointer",onClick:this.props.onUploadRetryAll,children:(0,u.ih)("Retry All")}):(0,g.jsx)("span",{className:"cursor-pointer disabled-link",children:(0,u.ih)("Retry All")}),c?(0,g.jsx)("span",{className:"cursor-pointer ml-3 disabled-link",children:(0,u.ih)("Cancel All")}):(0,g.jsx)("span",{className:"cursor-pointer ml-3",onClick:this.onCancelAllUploading,children:(0,u.ih)("Cancel All")})]}),(0,g.jsxs)("table",{className:"table-thead-hidden",children:[(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"30%",children:(0,u.ih)("name")}),(0,g.jsx)("th",{width:"20%",children:(0,u.ih)("size")}),(0,g.jsx)("th",{width:"30%",children:(0,u.ih)("progress")}),(0,g.jsx)("th",{width:"20%",children:(0,u.ih)("state")})]})}),(0,g.jsxs)("tbody",{children:[this.props.forbidUploadFileList.map((function(e,t){return(0,g.jsx)(br,{file:e},t)})),this.props.uploadFileList.map((function(t,n){return(0,g.jsx)(Sr,{resumableFile:t,onUploadCancel:e.props.onUploadCancel,onUploadRetry:e.props.onUploadRetry},n)}))]})]})]})]})}}]),n}(a.Component),Ir=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){var e;(0,i.Z)(this,n);for(var s=arguments.length,r=new Array(s),o=0;o0&&0===t.length&&s.setState({isUploadProgressDialogShow:!0,totalProgress:100})},s.setUploadFileList=function(){var e=s.resumable.files;s.setState({uploadFileList:e,isUploadProgressDialogShow:!0}),m.c.registerGlobalVariable("uploader","isUploadProgressDialogShow",!0)},s.onFileProgress=function(e){var t=s.getBitrate(),n=s.state.uploadFileList.map((function(n){if(n.uniqueIdentifier===e.uniqueIdentifier&&t){var i=8*(n.size-n.size*n.progress()),s=Math.floor(i/t);n.remainingTime=s}return n}));s.setState({uploadBitrate:t,uploadFileList:n})},s.getBitrate=function(){var e=0,t=0,n=(new Date).getTime();if(s.resumable.files.forEach((function(t){e+=t.progress()*t.size})),s.timestamp){var i=n-s.timestamp;if(i'+m.c.HTMLescape(o)+"",l=(0,u.ih)("Are you sure you want to delete %s ?").replace("%s",a),c="";return(t>0||n>0)&&(c=(0,u.ih)("This folder has been shared to {user_amount} user(s) and {group_amount} group(s).").replace("{user_amount}",t).replace("{group_amount}",n)),(0,g.jsxs)(d.Z,{isOpen:!0,toggle:r,children:[(0,g.jsx)(J.Z,{toggle:r,children:(0,u.ih)("Delete Folder")}),(0,g.jsxs)(b.Z,{children:[(0,g.jsx)("p",{dangerouslySetInnerHTML:{__html:l}}),c&&(0,g.jsx)("p",{className:"error",children:c})]}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:r,children:(0,u.ih)("Cancel")}),(0,g.jsx)($.Z,{color:"primary",onClick:this.deleteFolder,children:(0,u.ih)("Delete")})]})]})}}]),n}(a.Component),_r=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).showDirentDetail=function(e){e?s.setState({direntDetailPanelTab:e},(function(){s.setState({isDirentDetailShow:!0})})):s.setState({direntDetailPanelTab:"",isDirentDetailShow:!0})},s.toggleDirentDetail=function(){s.setState({direntDetailPanelTab:"",isDirentDetailShow:!s.state.isDirentDetailShow})},s.closeDirentDetail=function(){s.setState({isDirentDetailShow:!1,direntDetailPanelTab:""})},s.onpopstate=function(e){if(e.state&&e.state.key){if("/"===s.state.path)return;s.loadDirentList("/"),s.setState({path:"/",isViewFile:!1})}else if(e.state&&e.state.path){var t=e.state.path;if("column"===s.state.currentMode&&m.c.isMarkdownFile(t))return void s.showFile(t);s.loadDirentList(t),s.setState({path:t,isViewFile:!1})}},s.onRepoUpdateEvent=function(){var e=new Date;if(!(parseFloat(e-s.lastModifyTime)/1e3<=5)){var t=s.props.repoID,n=s.state,i=n.path,r=n.dirID;"column"===s.state.currentMode?s.state.isViewFile?s.updateColumnMarkdownData(i):w.I.dirMetaData(t,i).then((function(e){e.data.id!==r&&s.loadDirentList(i)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)})):w.I.dirMetaData(t,i).then((function(e){e.data.id!==r&&s.loadDirentList(i)})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))}},s.updateUsedRepoTags=function(){var e=s.props.repoID;w.I.listRepoTags(e).then((function(e){var t=[];e.data.repo_tags.forEach((function(e){var n=new ii.Z(e);n.fileCount>0&&t.push(n)})),s.setState({usedRepoTags:t})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.updateColumnMarkdownData=function(e){var t=s.props.repoID;s.setState({path:e,isViewFile:!0}),w.I.getFileInfo(t,e).then((function(n){var i=n.data,r=i.mtime,o=i.permission,a=i.last_modifier_name,l=i.is_draft,c=i.has_draft,h=i.draft_id;w.I.getFileDownloadLink(t,e).then((function(e){w.I.getFileContent(e.data).then((function(e){s.state.content!==e.data&&s.setState({isFileLoading:!0}),s.setState({content:e.data,filePermission:o,latestContributor:a,lastModified:A().unix(r).fromNow(),isFileLoading:!1,isFileLoadedErr:!1,isDraft:l,hasDraft:c,draftID:h})}))}))})).catch((function(){s.setState({isFileLoading:!1,isFileLoadedErr:!0})}))},s.loadDirData=function(e){var t=s.props.repoID;ei.watchRepo(t,s.onRepoUpdateEvent),s.updateUsedRepoTags(),u.NT&&w.I.getRepoDraftCounts(t).then((function(e){s.setState({draftCounts:e.data.draft_counts})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)})),m.c.isMarkdownFile(e)?w.I.getFileInfo(s.props.repoID,e).then((function(){"column"!==s.state.currentMode&&(Ye.ZP.save("seafile_view_mode","column"),s.setState({currentMode:"column"})),s.loadSidePanel(e),s.showFile(e)})).catch((function(){"column"===s.state.currentMode?(s.loadSidePanel(e),s.showDir(e)):s.showDir(e)})):"column"===s.state.currentMode?(s.loadSidePanel(e),s.showDir(e)):s.showDir(e)},s.loadSidePanel=function(e){var t=s.props.repoID;"/"===e?w.I.listDir(t,"/").then((function(e){var t=e.data,n=t.dirent_list,i=t.user_perm,r=s.state.treeData;s.addResponseListToNode(n,r.root),s.setState({isTreeDataLoading:!1,treeData:r,userPerm:i})})).catch((function(){s.setState({isTreeDataLoading:!1})})):s.loadNodeAndParentsByPath(e)},s.showDir=function(e){var t=s.props.repoID;if(s.state.isSessionExpired||s.setState({isDirentListLoading:!0,isViewFile:!1,selectedDirentList:[]}),s.loadDirentList(e),s.resetShowLength(),s.isNeedUpdateHistoryState){var n=s.state.currentRepoInfo,i=u.ze+"library/"+t+"/"+encodeURIComponent(n.repo_name)+m.c.encodePath(e);window.history.pushState({url:i,path:e},e,i)}else s.isNeedUpdateHistoryState=!0},s.showFile=function(e){var t=s.props.repoID;"column"===s.state.currentMode&&w.I.listFileTags(t,e).then((function(e){var t=e.data.file_tags.map((function(e){return new ni.Z(e)}));s.setState({fileTags:t})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)})),s.setState({isFileLoading:!0,path:e,isViewFile:!0}),w.I.getFileInfo(t,e).then((function(n){var i=n.data,r=i.mtime,o=i.permission,a=i.last_modifier_name,l=i.is_draft,c=i.has_draft,h=i.draft_id;w.I.getFileDownloadLink(t,e).then((function(e){w.I.getFileContent(e.data).then((function(e){s.setState({content:e.data,filePermission:o,latestContributor:a,lastModified:A().unix(r).fromNow(),isFileLoading:!1,isFileLoadedErr:!1,isDraft:l,hasDraft:c,draftID:h})}))}))})).catch((function(e){var t=m.c.getErrorMsg(e,!0);e.response&&403===e.response.status||j.Z.danger(t),s.setState({isFileLoading:!1,isFileLoadedErr:!0})}));var n=s.state.currentRepoInfo,i=u.ze+"library/"+t+"/"+encodeURIComponent(n.repo_name)+m.c.encodePath(e);window.history.pushState({url:i,path:e},e,i)},s.loadDirentList=function(e){var t=s.props.repoID;w.I.listDir(t,e,{with_thumbnail:!0}).then((function(n){var i=[];n.data.dirent_list.forEach((function(e){var t=new ti.Z(e);i.push(t)})),s.setState({pathExist:!0,userPerm:n.data.user_perm,isDirentListLoading:!1,direntList:m.c.sortDirents(i,s.state.sortBy,s.state.sortOrder),dirID:n.data.dir_id,path:e,isSessionExpired:!1}),!s.state.repoEncrypted&&i.length&&s.getThumbnails(t,e,s.state.direntList),s.state.currentRepoInfo.is_admin&&(s.foldersSharedOut?s.identifyFoldersSharedOut():(s.foldersSharedOut=[],w.I.getAllRepoFolderShareInfo(t).then((function(e){e.data.share_info_list.forEach((function(e){-1===s.foldersSharedOut.indexOf(e.path)&&s.foldersSharedOut.push(e.path)})),s.identifyFoldersSharedOut()}))))})).catch((function(e){m.c.getErrorMsg(e,!0),e.response&&403===e.response.status?s.setState({isDirentListLoading:!1}):s.setState({isDirentListLoading:!1,pathExist:!1})}))},s.identifyFoldersSharedOut=function(){var e=s.state,t=e.path,n=e.direntList;0!=s.foldersSharedOut.length&&(n.forEach((function(e){"dir"==e.type&&-1!==s.foldersSharedOut.indexOf(m.c.joinPath(t,e.name)+"/")&&(e.has_been_shared_out=!0)})),s.setState({direntList:n}))},s.onListContainerScroll=function(){var e=s.state.itemsShowLength+100;s.setState({itemsShowLength:e})},s.resetShowLength=function(){s.setState({itemsShowLength:100})},s.getThumbnails=function(e,t,n){var i=n.filter((function(e){return(m.c.imageCheck(e.name)||u.eA&&m.c.videoCheck(e.name))&&!e.encoded_thumbnail_src}));if(0!=i.length){var r=(0,D.Z)(s),o=i.length;!function s(a){var l=i[a],c=[t,l.name].join("/");w.I.createThumbnail(e,c,48).then((function(e){l.encoded_thumbnail_src=e.data.encoded_thumbnail_src})).catch((function(e){})).then((function(){a1?(0,u.ih)("Restored {name} and {n} other items"):(0,u.ih)("Restored {name}");r=r.replace("{name}",n[0].path.split("/").pop()).replace("{n}",n.length-1),j.Z.success(r)}if(i.length){var o=i.length>1?(0,u.ih)("Failed to restore {name} and {n} other items"):(0,u.ih)("Failed to restore {name}");o=o.replace("{name}",i[0].path.split("/").pop()).replace("{n}",i.length-1),j.Z.danger(o)}})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onDeleteItems=function(){var e=s.props.repoID,t=s.getSelectedDirentPaths(),n=s.getSelectedDirentNames();s.setState({updateDetail:!s.state.updateDetail}),w.I.deleteMutipleDirents(e,s.state.path,n).then((function(e){"column"===s.state.currentMode&&s.deleteTreeNodes(t),s.deleteDirents(n);var i="";i=t.length>1?(i=(i=(0,u.ih)("Successfully deleted {name} and {n} other items.")).replace("{name}",n[0])).replace("{n}",n.length-1):(i=(0,u.ih)("Successfully deleted {name}.")).replace("{name}",n[0]);var r=(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)("span",{children:i}),(0,g.jsx)("a",{className:"action-link p-0 ml-1",href:"#",onClick:s.restoreDeletedDirents.bind((0,D.Z)(s),e.data.commit_id,t),children:(0,u.ih)("Undo")})]});j.Z.success(r,{duration:5})})).catch((function(e){var t=m.c.getErrorMsg(e);t===(0,u.ih)("Error")&&(t=(t=(t=(0,u.ih)("Failed to delete {name} and {n} other items.")).replace("{name}",n[0])).replace("{n}",n.length-1)),j.Z.danger(t)}))},s.onAddFolder=function(e){var t=s.props.repoID;w.I.createDir(t,e).then((function(){var t=m.c.getFileName(e),n=m.c.getDirName(e);"column"===s.state.currentMode&&s.addNodeToTree(t,n,"dir"),n!==s.state.path||s.state.isViewFile||s.addDirent(t,"dir")})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onAddFile=function(e,t,n){var i=s.props.repoID;w.I.createFile(i,e,t).then((function(t){var r=m.c.getFileName(e),o=m.c.getDirName(e);if("column"===s.state.currentMode&&s.addNodeToTree(r,o,"file"),o===s.state.path&&!s.state.isViewFile){if(n)return void w.I.sdocMarkAsDraft(i,e).then((function(e){s.addDirent(r,"file",e.data.size,n)})).catch((function(e){var n=m.c.getErrorMsg(e);j.Z.danger(n),s.addDirent(r,"file",t.data.size)}));s.addDirent(r,"file",t.data.size)}})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.switchViewMode=function(e){if(e!==s.state.currentMode)if("detail"!==e){Ye.ZP.save("seafile_view_mode",e);var t=s.state.path;if("column"===s.state.currentMode&&s.state.isViewFile){t=m.c.getDirName(t),s.setState({path:t,isViewFile:!1});var n=s.state.currentRepoInfo,i=u.ze+"library/"+n.repo_id+"/"+encodeURIComponent(n.repo_name)+m.c.encodePath(t);window.history.pushState({url:i,path:t},t,i)}"column"===e&&s.loadSidePanel(s.state.path),s.isNeedUpdateHistoryState=!1,s.setState({currentMode:e}),s.showDir(t)}else s.toggleDirentDetail()},s.onSearchedClick=function(e){var t=e.is_dir?e.path.slice(0,e.path.length-1):e.path;if(s.state.currentPath!==t)if("column"===s.state.currentMode){for(var n=-1,i=m.c.getPaths(t),r=0;r1&&void 0!==arguments[1]?arguments[1]:null,n=m.c.getFileName(e);if(t!==s.state.path){var i=s.state.direntList.filter((function(e){return e.name!==n}));s.recaculateSelectedStateAfterDirentDeleted(n,i),s.setState({direntList:i})}else s.loadDirentList(s.state.path)},s.moveDirents=function(e){var t=s.state.direntList.filter((function(t){return-1===e.indexOf(t.name)}));s.setState({direntList:t,selectedDirentList:[],isDirentSelected:!1,isAllDirentSelected:!1})},s.updateDirent=function(e,t,n){var i=s.state.direntList.map((function(i){return i.name===e.name&&(i[t]=n),i}));s.setState({direntList:i})},s.loadTreeNodeByPath=function(e){var t=s.props.repoID,n=s.state.treeData.clone(),i=n.getNodeByPath(e);i.isLoaded?(n.getNodeByPath(i.parentNode.path).isExpanded=!0,s.setState({treeData:n,currentNode:i})):w.I.listDir(t,i.path).then((function(e){s.addResponseListToNode(e.data.dirent_list,i),n.getNodeByPath(i.parentNode.path).isExpanded=!0,s.setState({treeData:n,currentNode:i})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.loadNodeAndParentsByPath=function(e){var t=s.props.repoID,n=s.state.treeData.clone();m.c.isMarkdownFile(e)&&(e=m.c.getDirName(e)),w.I.listDir(t,e,{with_parents:!0}).then((function(e){for(var t=e.data,i=t.dirent_list,r=t.user_perm,o={},a=0;a0&&(n=n.filter((function(t){return t.name!==e}))),s.setState({selectedDirentList:n,isDirentSelected:n.length>0,isAllDirentSelected:n.length===t.length})},s.onLibDecryptDialog=function(){s.setState({libNeedDecrypt:!1}),s.loadDirData(s.state.path)},s.goDraftPage=function(){window.open(u.ze+"drafts/"+s.state.draftID+"/")},s.sortItems=function(e,t){Ye.ZP.save("seafile-repo-dir-sort-by",e),Ye.ZP.save("seafile-repo-dir-sort-order",t),s.setState({sortBy:e,sortOrder:t,items:m.c.sortDirents(s.state.direntList,e,t)})},s.onUploadFile=function(e){e.nativeEvent.stopImmediatePropagation(),s.uploader.onFileUpload()},s.onUploadFolder=function(e){e.nativeEvent.stopImmediatePropagation(),s.uploader.onFolderUpload()},s.onToolbarFileTagChanged=function(){var e=s.props.repoID,t=s.state.path;w.I.listFileTags(e,t).then((function(e){var t=e.data.file_tags.map((function(e){return new ni.Z(e)}));s.setState({fileTags:t})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.unSelectDirent=function(){s.setState({isDirentSelected:!1,selectedDirentList:[]});s.onDirentSelected({})},s.onDeleteRepoTag=function(e){var t=s.state.direntList.map((function(t){if(t.file_tags){var n=t.file_tags.filter((function(t){return t.repo_tag_id!==e}));t.file_tags=n}return t}));s.setState({direntList:t}),s.updateUsedRepoTags()},s.handleSubmit=function(e){var t={share_type:"personal",from:s.state.currentRepoInfo.owner_email};w.I.leaveShareRepo(s.props.repoID,t).then((function(e){(0,c.c4)(u.ze+"shared-libs/")})).catch((function(e){var t=m.c.getErrorMsg(e,!0);j.Z.danger(t)})),e.preventDefault()},s.state={currentMode:Ye.ZP.load("seafile_view_mode")||"list",path:"",pathExist:!0,isViewFile:!1,hash:"",currentRepoInfo:null,repoName:"",repoEncrypted:!1,libNeedDecrypt:!1,isGroupOwnedRepo:!1,userPerm:"",selectedDirentList:[],isDraft:!1,hasDraft:!1,fileTags:[],draftID:"",draftCounts:0,usedRepoTags:[],isTreeDataLoading:!0,treeData:oi.Z.buildTree(),currentNode:null,isFileLoading:!0,isFileLoadedErr:!1,filePermission:"",content:"",lastModified:"",latestContributor:"",isDirentListLoading:!0,direntList:[],isDirentSelected:!1,sortBy:Ye.ZP.load("seafile-repo-dir-sort-by")||"name",sortOrder:Ye.ZP.load("seafile-repo-dir-sort-order")||"asc",isAllDirentSelected:!1,dirID:"",errorMsg:"",isDirentDetailShow:!1,direntDetailPanelTab:"",updateDetail:!1,itemsShowLength:100,isSessionExpired:!1,isCopyMoveProgressDialogShow:!1,isDeleteFolderDialogOpen:!1,asyncCopyMoveTaskId:"",asyncOperationType:"move",asyncOperationProgress:0,asyncOperatedFilesLength:0},s.oldonpopstate=window.onpopstate,window.onpopstate=s.onpopstate,s.lastModifyTime=new Date,s.isNeedUpdateHistoryState=!0,s.currentMoveItemName="",s.currentMoveItemPath="",s}return(0,s.Z)(n,[{key:"UNSAFE_componentWillMount",value:function(){var e=window.location.hash;"#"===e.slice(0,1)&&this.setState({hash:e})}},{key:"componentDidMount",value:function(){var e=(0,dn.Z)((0,pn.Z)().mark((function e(){var t,n,i,s,r,o,a,l,c;return(0,pn.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this.props.repoID,n=window.location.href.split("#")[0],n=decodeURIComponent(n),(i=(i=n.slice(n.indexOf(t)+t.length+1)).slice(i.indexOf("/"))).length>1&&"/"===i[i.length-1]&&(i=i.slice(0,i.length-1)),e.prev=6,e.next=9,w.I.getRepoInfo(t);case 9:if(s=e.sent,r=new si.Z(s.data),o=r.owner_email.indexOf("@seafile_group")>-1,this.setState({currentRepoInfo:r}),!r.permission.startsWith("custom-")){e.next=19;break}return a=r.permission.split("-")[1],e.next=17,w.I.getCustomPermission(t,a);case 17:l=e.sent,window.custom_permission=l.data.permission;case 19:this.isNeedUpdateHistoryState=!1,this.setState({repoName:r.repo_name,libNeedDecrypt:r.lib_need_decrypt,repoEncrypted:r.encrypted,isGroupOwnedRepo:o,path:i}),r.lib_need_decrypt||this.loadDirData(i),e.next=27;break;case 24:e.prev=24,e.t0=e.catch(6),e.t0.response?403==e.t0.response.status?(this.setState({isDirentListLoading:!1,errorMsg:(0,u.ih)("Permission denied")}),c=(0,u.ih)("Permission denied"),j.Z.danger(c)):404==e.t0.response.status?this.setState({isDirentListLoading:!1,errorMsg:(0,u.ih)("Library share permission not found.")}):this.setState({isDirentListLoading:!1,errorMsg:(0,u.ih)("Error")}):this.setState({isDirentListLoading:!1,errorMsg:(0,u.ih)("Please check the network.")});case 27:case"end":return e.stop()}}),e,this,[[6,24]])})));return function(){return e.apply(this,arguments)}}()},{key:"componentWillUnmount",value:function(){window.onpopstate=this.oldonpopstate,ei.unwatchRepo(this.props.repoID,this.onRepoUpdateEvent)}},{key:"componentDidUpdate",value:function(){this.lastModifyTime=new Date}},{key:"getAsyncCopyMoveProgress",value:function(){var e=(0,dn.Z)((0,pn.Z)().mark((function e(){var t,n,i,s,r,o,a,l,c,h;return(0,pn.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=this.state,n=t.asyncOperationType,i=t.asyncCopyMoveTaskId,e.prev=1,e.next=4,w.I.queryAsyncOperationProgress(i);case 4:if(s=e.sent,!(r=s.data).failed){e.next=12;break}return o=(0,u.ih)("Failed to move files to another library."),"copy"===n&&(o=(0,u.ih)("Failed to copy files to another library.")),j.Z.danger(o),this.setState({asyncOperationProgress:0,isCopyMoveProgressDialogShow:!1}),e.abrupt("return");case 12:if(!r.successful){e.next=19;break}return"move"===n&&(this.currentMoveItemName&&this.currentMoveItemPath?("column"===this.state.currentMode&&this.deleteTreeNode(this.currentMoveItemPath),this.moveDirent(this.currentMoveItemName),this.currentMoveItemName="",this.currentMoveItemPath=""):("column"===this.state.currentMode&&(a=this.getSelectedDirentPaths(),this.deleteTreeNodes(a)),l=this.getSelectedDirentNames(),this.moveDirents(l))),this.setState({isCopyMoveProgressDialogShow:!1}),c=(0,u.ih)("Successfully moved files to another library."),"copy"===n&&(c=(0,u.ih)("Successfully copied files to another library.")),j.Z.success(c),e.abrupt("return");case 19:h=r.total?parseInt((r.done/r.total*100).toFixed(2)):0,this.getAsyncCopyMoveProgress(),this.setState({asyncOperationProgress:h}),e.next=27;break;case 24:e.prev=24,e.t0=e.catch(1),this.setState({asyncOperationProgress:0,isCopyMoveProgressDialogShow:!1});case 27:case"end":return e.stop()}}),e,this,[[1,24]])})));return function(){return e.apply(this,arguments)}}()},{key:"renameItemAjaxCallback",value:function(e,t){"column"===this.state.currentMode&&this.renameTreeNode(e,t),this.renameDirent(e,t)}},{key:"deleteItem",value:function(e,t){var n=this,i=this.props.repoID;t?this.setState({folderToDelete:e},(function(){n.toggleDeleteFolderDialog()})):w.I.deleteFile(i,e).then((function(i){n.deleteItemAjaxCallback(e,t);var s=m.c.getFileName(e),r=(0,u.ih)("Successfully deleted {name}").replace("{name}",s),o=(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)("span",{children:r}),(0,g.jsx)("a",{className:"action-link p-0 ml-1",href:"#",onClick:n.restoreDeletedDirents.bind(n,i.data.commit_id,[e]),children:(0,u.ih)("Undo")})]});j.Z.success(o,{duration:5})})).catch((function(t){var n=m.c.getErrorMsg(t);if(n===(0,u.ih)("Error")){var i=m.c.getFileName(e);n=(0,u.ih)("Failed to delete {name}").replace("{name}",i)}j.Z.danger(n)}))}},{key:"deleteItemAjaxCallback",value:function(e){"column"===this.state.currentMode&&this.deleteTreeNode(e),this.deleteDirent(e)}},{key:"deleteDirent",value:function(e){if(e===this.state.path){var t=m.c.getDirName(e);this.showDir(t)}else if(m.c.isChildPath(e,this.state.path)){var n=m.c.getFileName(e),i=this.state.direntList.filter((function(e){return e.name!==n}));this.recaculateSelectedStateAfterDirentDeleted(n,i),this.setState({direntList:i})}else if(m.c.isAncestorPath(e,this.state.path)){var s=m.c.getDirName(e);this.showDir(s)}}},{key:"createTreeNode",value:function(e,t){var n=this.createDirent(e,t);return new ri.Z({object:n})}},{key:"createDirent",value:function(e,t,n,i){var s=this.state.userPerm,r={name:e,type:t,mtime:(new Date).getTime()/1e3,size:n,permission:s};return i&&(r.is_sdoc_draft=i),new ti.Z(r)}},{key:"render",value:function(){var e=this;if(this.state.libNeedDecrypt)return(0,g.jsx)(C.Z,{children:(0,g.jsx)(ai,{repoID:this.props.repoID,onLibDecryptDialog:this.onLibDecryptDialog})});if(this.state.errorMsg)return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("p",{className:"error mt-6 text-center",children:this.state.errorMsg}),(0,g.jsx)("button",{type:"submit",className:"btn btn-primary submit",onClick:this.handleSubmit,children:(0,u.ih)("Leave Share")})]});if(!this.state.currentRepoInfo)return"";var t=!1,n=this.state,i=n.currentRepoInfo,s=n.userPerm,r=n.isCopyMoveProgressDialogShow,o=n.isDeleteFolderDialogOpen,l=m.c.isHasPermissionToShare(i,s),c=i.owner_email===u.b6,h=i.is_virtual,p=i.is_admin;h||!c&&!p||(t=!0);var d=this.state.direntList.filter((function(t,n){return n0&&s.setState({errMessage:e.data.failed})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.toggleItemFreezed=function(e){s.setState({isItemFreezed:e})},s.handleScroll=function(e){var t=s.state,n=t.page,i=t.hasNextPage,r=t.isLoadingMore;if(i&&!r){var o=e.target.clientHeight,a=e.target.scrollHeight;o+e.target.scrollTop+1>=a&&s.setState({isLoadingMore:!0},(function(){s.listGroupMembers(n+1)}))}},s.changeMember=function(e){s.setState({groupMembers:s.state.groupMembers.map((function(t){return t.email==e.email&&(t=e),t}))})},s.deleteMember=function(e){var t=s.state.groupMembers;t.splice(t.indexOf(e),1),s.setState({groupMembers:t})},s.searchMembers=function(e){var t=s.state.groupMembers,n=e.target.value,i=n.trim().toLowerCase(),r=t.filter((function(e){return e.name.toLowerCase().indexOf(i)>-1}));s.setState({keyword:n,membersFound:r})},s.clearSearch=function(){s.setState({keyword:"",membersFound:[]})},s.onSearchInputFocus=function(){s.setState({searchActive:!0})},s.onSearchInputBlur=function(){s.setState({searchActive:!1})},s.state={isLoading:!0,isLoadingMore:!1,groupMembers:[],page:1,perPage:100,hasNextPage:!1,selectedOption:null,errMessage:[],isItemFreezed:!1,searchActive:!1,keyword:"",membersFound:[]},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){this.listGroupMembers(this.state.page)}},{key:"render",value:function(){var e=this.state,t=e.isLoading,n=e.hasNextPage,i=e.groupMembers,s=e.keyword,r=e.membersFound,o=e.searchActive;return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("p",{className:"mb-2",children:(0,u.ih)("Add group member")}),(0,g.jsxs)("div",{className:"add-members",children:[(0,g.jsx)(Vt.Z,{placeholder:(0,u.ih)("Search users"),onSelectChange:this.onSelectChange,ref:"userSelect",isMulti:!0,className:"add-members-select"}),this.state.selectedOption?(0,g.jsx)($.Z,{color:"secondary",onClick:this.addGroupMember,children:(0,u.ih)("Submit")}):(0,g.jsx)($.Z,{color:"secondary",disabled:!0,children:(0,u.ih)("Submit")})]}),this.state.errMessage.length>0&&this.state.errMessage.map((function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return(0,g.jsx)("div",{className:"group-error error",children:e.error_msg},t)})),i.length>10&&(0,g.jsxs)(Ht.Z,{className:"search-group-members rounded ".concat(o?"active":""),children:[(0,g.jsx)(xn.Z,{children:(0,g.jsx)("i",{className:"fas fa-search","aria-hidden":!0})}),(0,g.jsx)(re.Z,{type:"text",className:"input-group-input px-0",placeholder:(0,u.ih)("Search group members"),value:s,onChange:this.searchMembers,onFocus:this.onSearchInputFocus,onBlur:this.onSearchInputBlur}),s&&(0,g.jsx)(xn.Z,{children:(0,g.jsx)("i",{className:"sf2-icon-x1","aria-hidden":!0,onClick:this.clearSearch})})]}),(0,g.jsx)("div",{className:"manage-members",onScroll:s.trim()?function(){}:this.handleScroll,children:t?(0,g.jsx)(R.Z,{}):(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(zr,{groupMembers:s.trim()?r:i,changeMember:this.changeMember,deleteMember:this.deleteMember,groupID:this.props.groupID,isOwner:this.props.isOwner,isItemFreezed:this.state.isItemFreezed,toggleItemFreezed:this.toggleItemFreezed}),!s.trim()&&n&&(0,g.jsx)(R.Z,{})]})})]})}}]),n}(a.Component),Gr=Br,Hr=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,i.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.groupID,n=e.isOwner,i=e.toggleManageMembersDialog;return(0,g.jsxs)(d.Z,{isOpen:!0,toggle:i,className:"group-manage-members-dialog",children:[(0,g.jsx)(J.Z,{toggle:i,children:(0,u.ih)("Manage group members")}),(0,g.jsx)(b.Z,{className:"pb-0",children:(0,g.jsx)(Gr,{groupID:t,isOwner:n})})]})}}]),n}(a.Component),Wr=Hr,Vr=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).leaveGroup=function(){w.I.quitGroup(s.props.groupID,u.b6).then((function(e){s.props.onGroupChanged()})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s}return(0,s.Z)(n,[{key:"render",value:function(){return(0,g.jsxs)(d.Z,{isOpen:!0,toggle:this.props.toggleLeaveGroupDialog,children:[(0,g.jsx)(J.Z,{toggle:this.props.toggleLeaveGroupDialog,children:(0,u.ih)("Leave Group")}),(0,g.jsx)(b.Z,{children:(0,g.jsx)("p",{children:(0,u.ih)("Really want to leave this group?")})}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:this.props.toggleLeaveGroupDialog,children:(0,u.ih)("Cancel")}),(0,g.jsx)($.Z,{color:"primary",onClick:this.leaveGroup,children:(0,u.ih)("Leave")})]})]})}}]),n}(a.Component),qr=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).loadGroup=function(e){w.I.getGroup(e).then((function(e){var t=new y(e.data),n=s.getEmptyTip(t),i=t.admins.indexOf(u.b6)>-1,r=t.owner===u.b6,o=0!==t.parent_group_id;s.setState({emptyTip:n,currentGroup:t,isStaff:i,isDepartmentGroup:o,isOwner:r,currentPage:1,repoList:[]},(function(){s.loadRepos(s.state.currentPage)}))})).catch((function(e){s.setState({isLoading:!1,errMessage:m.c.getErrorMsg(e,!0)})}))},s.loadRepos=function(e){var t=s.state.perPage;w.I.listGroupRepos(s.props.groupID,e,t).then((function(n){var i=!0;n.data.length=a&&s.setState({isLoadingMore:!0},(function(){s.loadRepos(n+1)}))}},s.state={isLoading:!0,isLoadingMore:!1,errMessage:"",emptyTip:null,currentGroup:null,currentRepo:null,isStaff:!1,isOwner:!1,sortBy:Ye.ZP.load("seafile-repo-dir-sort-by")||"name",sortOrder:Ye.ZP.load("seafile-repo-dir-sort-order")||"asc",isSortOptionsDialogOpen:!1,repoList:[],currentPage:1,perPage:300,hasNextPage:!1,libraryType:"group",isCreateRepoDialogShow:!1,isDepartmentGroup:!1,showGroupDropdown:!1,showGroupMembersPopover:!1,showRenameGroupDialog:!1,showDismissGroupDialog:!1,showTransferGroupDialog:!1,showImportMembersDialog:!1,showManageMembersDialog:!1,groupMembers:[],isShowDetails:!1,isLeaveGroupDialogOpen:!1},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this.props.groupID;this.loadGroup(e)}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){e.groupID!==this.props.groupID&&this.loadGroup(e.groupID)}},{key:"render",value:function(){var e=this,t=this.state,n=t.errMessage,i=t.emptyTip,s=t.currentGroup,r=t.isDepartmentGroup,o=t.isStaff,l=!1;s&&(0===s.parent_group_id||s.admins.indexOf(u.b6)>-1)&&(l=!0);var h=0;return r&&s.group_quota&&(h=s.group_quota_usage/s.group_quota*100+"%"),(0,g.jsxs)(a.Fragment,{children:[(0,g.jsxs)("div",{className:"main-panel-north border-left-show",children:[(0,g.jsxs)("div",{className:"cur-view-toolbar",children:[(0,g.jsx)("span",{className:"sf2-icon-menu side-nav-toggle hidden-md-up d-md-none",title:"Side Nav Menu",onClick:this.props.onShowSidePanel}),(0,g.jsx)("div",{className:"operation",children:(!r&&u.cA||r&&o)&&(m.c.isDesktop()?(0,g.jsxs)("button",{className:"btn btn-secondary operation-item",title:(0,u.ih)("New Library"),onClick:this.onCreateRepoToggle,children:[(0,g.jsx)("i",{className:"fas fa-plus-square text-secondary mr-1"}),(0,u.ih)("New Library")]}):(0,g.jsx)("span",{className:"sf2-icon-plus mobile-toolbar-icon",title:(0,u.ih)("New Library"),onClick:this.onCreateRepoToggle}))})]}),(0,g.jsx)(Ee.Z,{onSearchedClick:this.props.onSearchedClick})]}),(0,g.jsxs)("div",{className:"main-panel-center flex-row",children:[(0,g.jsxs)("div",{className:"cur-view-container",children:[(0,g.jsx)("div",{className:"cur-view-path",children:s&&(0,g.jsxs)(a.Fragment,{children:[(0,g.jsxs)("div",{className:"path-container",children:[(0,g.jsx)(c.rU,{to:"".concat(u.ze,"groups/"),onClick:function(){return e.onTabNavClick("groups")},children:(0,u.ih)("Groups")}),(0,g.jsx)("span",{className:"path-split",children:"/"}),(0,g.jsx)("span",{children:s.name}),r&&(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)("span",{className:"department-group-icon fas fa-building",title:(0,u.ih)("This is a special group representing a department.")}),s.group_quota>0&&(0,g.jsx)("span",{className:"department-usage-container",children:(0,g.jsxs)("div",{className:"department-usage",children:[(0,g.jsx)("span",{id:"quota-bar",className:"department-quota-bar",children:(0,g.jsx)("span",{id:"quota-usage",className:"usage",style:{width:h}})}),(0,g.jsxs)("span",{className:"department-quota-info",children:[m.c.bytesToSize(s.group_quota_usage)," / ",m.c.bytesToSize(s.group_quota)]})]})})]})]}),(0,g.jsxs)("div",{className:"path-tool",children:[l&&(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(rn.Z,{className:"sf2-icon-cog1 action-icon group-top-action-icon",title:(0,u.ih)("Settings"),op:this.toggleGroupDropdown}),this.state.showGroupDropdown&&(0,g.jsxs)("div",{className:"sf-popover",id:"group-setting-popover",children:[(0,g.jsxs)("div",{className:"sf-popover-hd sf-popover-title",children:[(0,g.jsx)("span",{children:(0,u.ih)("Settings")}),(0,g.jsx)("a",{href:"#",className:"sf-popover-close js-close sf2-icon-x1 action-icon",role:"button","aria-label":(0,u.ih)("Close"),onClick:this.toggleGroupDropdown})]}),(0,g.jsxs)("div",{className:"sf-popover-con",children:[(this.state.isStaff||this.state.isOwner)&&(0,g.jsxs)("ul",{className:"sf-popover-list",children:[(0,g.jsx)("li",{children:(0,g.jsx)("a",{href:"#",className:"sf-popover-item",onClick:this.toggleRenameGroupDialog,children:(0,u.ih)("Rename")})}),this.state.isOwner&&(0,g.jsx)("li",{children:(0,g.jsx)("a",{href:"#",className:"sf-popover-item",onClick:this.toggleTransferGroupDialog,children:(0,u.ih)("Transfer")})})]}),(this.state.isStaff||this.state.isOwner)&&(0,g.jsxs)("ul",{className:"sf-popover-list",children:[(0,g.jsx)("li",{children:(0,g.jsx)("a",{href:"#",className:"sf-popover-item",onClick:this.toggleImportMembersDialog,children:(0,u.ih)("Import Members")})}),(0,g.jsx)("li",{children:(0,g.jsx)("a",{href:"#",className:"sf-popover-item",onClick:this.toggleManageMembersDialog,children:(0,u.ih)("Manage Members")})})]}),this.state.isOwner&&(0,g.jsx)("ul",{className:"sf-popover-list",children:(0,g.jsx)("li",{children:(0,g.jsx)("a",{href:"#",className:"sf-popover-item",onClick:this.toggleDismissGroupDialog,children:(0,u.ih)("Delete Group")})})}),!this.state.isOwner&&!r&&(0,g.jsx)("ul",{className:"sf-popover-list",children:(0,g.jsx)("li",{children:(0,g.jsx)("a",{href:"#",className:"sf-popover-item",onClick:this.toggleLeaveGroupDialog,children:(0,u.ih)("Leave Group")})})})]})]})]}),(0,g.jsx)("a",{href:"#",className:"sf2-icon-user2 action-icon group-top-action-icon",title:(0,u.ih)("Members"),id:"groupMembers",onClick:function(){return e.toggleGroupMembersPopover("open")}}),this.state.showGroupMembersPopover&&(0,g.jsxs)("div",{className:"sf-popover",id:"group-members-popover",children:[(0,g.jsxs)("div",{className:"sf-popover-hd sf-popover-title group-member-list-header",children:[(0,g.jsx)("span",{children:(0,u.ih)("Members")}),(0,g.jsx)("a",{href:"#",className:"sf-popover-close js-close sf2-icon-x1 action-icon",onClick:this.toggleGroupMembersPopover})]}),(0,g.jsx)("div",{className:"sf-popover-con",children:(0,g.jsx)("ul",{className:"sf-popover-list group-member-list",children:this.state.groupMembers.map((function(t,n){return(0,g.jsx)("li",{children:(0,g.jsxs)("a",{href:"#",className:"sf-popover-item user-item d-flex",children:[(0,g.jsx)("img",{src:t.avatar_url,alt:"",className:"group-member-avatar avatar"}),(0,g.jsxs)("span",{className:"txt-item ellipsis d-flex",children:[(0,g.jsx)("span",{className:"group-member-name ellipsis",children:t.name}),(0,g.jsx)("span",{className:"group-member-admin",children:e.translateRole(t.role)})]})]})},n)}))})})]}),!m.c.isDesktop()&&this.state.repoList.length>0&&(0,g.jsx)("span",{className:"sf3-font sf3-font-sort action-icon",onClick:this.toggleSortOptionsDialog}),this.state.isSortOptionsDialogOpen&&(0,g.jsx)(Oe,{toggleDialog:this.toggleSortOptionsDialog,sortBy:this.state.sortBy,sortOrder:this.state.sortOrder,sortItems:this.sortItems})]})]})}),(0,g.jsxs)("div",{className:"cur-view-content d-block",onScroll:this.handleScroll,children:[this.state.isLoading&&(0,g.jsx)(R.Z,{}),!this.state.isLoading&&n&&(0,g.jsx)("div",{className:"error text-center mt-2",children:n}),!this.state.isLoading&&0===this.state.repoList.length&&i,!this.state.isLoading&&this.state.repoList.length>0&&(0,g.jsx)(Kn,{repoList:this.state.repoList,hasNextPage:this.state.hasNextPage,currentGroup:this.state.currentGroup,sortBy:this.state.sortBy,sortOrder:this.state.sortOrder,sortItems:this.sortItems,onItemUnshare:this.onItemUnshare,onItemDelete:this.onItemDelete,onItemDetails:this.onItemDetails,onItemRename:this.onItemRename,onMonitorRepo:this.onMonitorRepo})]})]}),this.state.isShowDetails&&(0,g.jsx)("div",{className:"cur-view-detail",children:(0,g.jsx)(Mt,{currentRepo:this.state.currentRepo,closeDetails:this.closeDetails})})]}),this.state.isCreateRepoDialogShow&&!this.state.isDepartmentGroup&&(0,g.jsx)(C.Z,{children:(0,g.jsx)(It,{libraryType:this.state.libraryType,onCreateToggle:this.onCreateRepoToggle,onCreateRepo:this.onCreateRepo})}),this.state.isCreateRepoDialogShow&&this.state.isDepartmentGroup&&(0,g.jsx)(It,{isAdmin:this.state.isAdmin,onCreateToggle:this.onCreateRepoToggle,onCreateRepo:this.onCreateRepo,libraryType:"department"}),this.state.showRenameGroupDialog&&(0,g.jsx)(Or,{showRenameGroupDialog:this.state.showRenameGroupDialog,toggleRenameGroupDialog:this.toggleRenameGroupDialog,loadGroup:this.loadGroup,groupID:this.props.groupID,onGroupChanged:this.props.onGroupChanged,currentGroupName:s.name}),this.state.showDismissGroupDialog&&(0,g.jsx)(Lr,{showDismissGroupDialog:this.state.showDismissGroupDialog,toggleDismissGroupDialog:this.toggleDismissGroupDialog,loadGroup:this.loadGroup,groupID:this.props.groupID,onGroupChanged:this.props.onGroupChanged}),this.state.showTransferGroupDialog&&(0,g.jsx)(Rr,{toggleTransferGroupDialog:this.toggleTransferGroupDialog,groupID:this.props.groupID,onGroupChanged:this.props.onGroupChanged}),this.state.showImportMembersDialog&&(0,g.jsx)(Er,{toggleImportMembersDialog:this.toggleImportMembersDialog,importMembersInBatch:this.importMembersInBatch}),this.state.showManageMembersDialog&&(0,g.jsx)(Wr,{toggleManageMembersDialog:this.toggleManageMembersDialog,groupID:this.props.groupID,onGroupChanged:this.props.onGroupChanged,isOwner:this.state.isOwner}),this.state.isLeaveGroupDialogOpen&&(0,g.jsx)(Vr,{toggleLeaveGroupDialog:this.toggleLeaveGroupDialog,groupID:this.props.groupID,onGroupChanged:this.props.onGroupChanged})]})}}]),n}(a.Component),Kr=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){return(0,i.Z)(this,n),t.call(this,e)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.onShowSidePanel,n=e.onSearchedClick;return(0,g.jsxs)("div",{className:"main-panel-north border-left-show",children:[(0,g.jsxs)("div",{className:"cur-view-toolbar",children:[(0,g.jsx)("span",{title:"Side Nav Menu",onClick:t,className:"sf2-icon-menu side-nav-toggle hidden-md-up d-md-none"}),u.Wz&&(0,g.jsxs)("div",{className:"operation",children:[(0,g.jsx)(p(),{query:"(min-width: 768px)",children:(0,g.jsxs)($.Z,{color:"btn btn-secondary operation-item",onClick:this.props.toggleAddGroupModal,children:[(0,g.jsx)("i",{className:"fas fa-plus-square text-secondary mr-1"}),(0,u.ih)("New Group")]})}),(0,g.jsx)(p(),{query:"(max-width: 767.8px)",children:(0,g.jsx)("span",{className:"sf2-icon-plus mobile-toolbar-icon",title:(0,u.ih)("New Group"),onClick:this.props.toggleAddGroupModal})})]})]}),(0,g.jsx)(Ee.Z,{searchPlaceholder:this.props.searchPlaceholder,onSearchedClick:n})]})}}]),n}(a.Component),Yr=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).handleGroupChange=function(e){var t=e.target.value;t.trim()?s.setState({isSubmitBtnActive:!0}):s.setState({isSubmitBtnActive:!1}),s.setState({groupName:t}),s.state.errorMsg&&s.setState({errorMsg:""})},s.handleSubmitGroup=function(){var e=s.state.groupName.trim();if(e){var t=(0,D.Z)(s);w.I.createGroup(e).then((function(e){t.props.onCreateGroup()})).catch((function(e){var t=m.c.getErrorMsg(e);s.setState({errorMsg:t})}))}else s.setState({errorMsg:(0,u.ih)("Name is required")});s.setState({groupName:""})},s.handleKeyDown=function(e){13===e.keyCode&&(s.handleSubmitGroup(),e.preventDefault())},s.state={groupName:"",errorMsg:"",isSubmitBtnActive:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){return(0,g.jsxs)(d.Z,{isOpen:this.props.showAddGroupModal,toggle:this.props.toggleAddGroupModal,autoFocus:!1,children:[(0,g.jsx)(J.Z,{toggle:this.props.toggleAddGroupModal,children:(0,u.ih)("New Group")}),(0,g.jsxs)(b.Z,{children:[(0,g.jsx)("label",{htmlFor:"groupName",children:(0,u.ih)("Name")}),(0,g.jsx)(re.Z,{type:"text",id:"groupName",value:this.state.groupName,onChange:this.handleGroupChange,onKeyDown:this.handleKeyDown,autoFocus:!0}),(0,g.jsx)("span",{className:"error",children:this.state.errorMsg})]}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:this.props.toggleAddGroupModal,children:(0,u.ih)("Cancel")}),(0,g.jsx)($.Z,{color:"primary",onClick:this.handleSubmitGroup,disabled:!this.state.isSubmitBtnActive,children:(0,u.ih)("Submit")})]})]})}}]),n}(a.Component),Jr=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onItemUnshare=function(e){var t=s.props.group;w.I.unshareRepoToGroup(e.repo_id,t.id).then((function(){var t=s.state.repoList.filter((function(t){return t.repo_id!==e.repo_id}));s.setState({repoList:t})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onItemDelete=function(e){var t=s.state.repoList.filter((function(t){return t.repo_id!==e.repo_id}));s.setState({repoList:t})},s.onItemRename=function(e,t){var n=s.props.group;w.I.renameGroupOwnedLibrary(n.id,e.repo_id,t).then((function(n){var i=s.state.repoList.map((function(n){return n.repo_id===e.repo_id&&(n.repo_name=t),n}));s.setState({repoList:i})})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t)}))},s.onMonitorRepo=function(e,t){var n=s.state.repoList.map((function(n){return n.repo_id===e.repo_id&&(n.monitored=t),n}));s.setState({repoList:n})},s.state={repoList:[]},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this.props.group.repos.map((function(e){return new Je(e)}));this.setState({repoList:e})}},{key:"render",value:function(){var e=this.props.group,t=(0,g.jsx)("p",{className:"group-item-empty-tip",children:(0,u.ih)("No libraries")});return(0,g.jsxs)("div",{className:"group-list-panel",children:[(0,g.jsx)("h4",{className:"group-item-heading ellipsis",children:(0,g.jsx)("a",{href:"".concat(u.ze,"group/").concat(e.id,"/"),title:e.name,children:e.name})}),0===this.state.repoList.length?t:(0,g.jsx)(Kn,{isShowTableThread:!1,isShowRepoOwner:!1,currentGroup:this.props.group,repoList:this.state.repoList,onItemUnshare:this.onItemUnshare,onItemDelete:this.onItemDelete,onItemDetails:this.props.onItemDetails,onItemRename:this.onItemRename,onMonitorRepo:this.onMonitorRepo})]})}}]),n}(a.Component),Xr=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).listGroups=function(){w.I.listGroups(!0).then((function(e){var t=e.data.map((function(e){return new y(e)}));s.setState({isLoading:!1,groupList:t.sort((function(e,t){return e.name.toLowerCase()'+m.c.HTMLescape(this.props.accepter)+"",i=(0,u.ih)("Are you sure to revoke access of user {placeholder} ?").replace("{placeholder}",n);return(0,g.jsxs)(d.Z,{isOpen:!0,toggle:e,children:[(0,g.jsx)(J.Z,{toggle:e,children:(0,u.ih)("Revoke Access")}),(0,g.jsx)(b.Z,{children:(0,g.jsx)("p",{dangerouslySetInnerHTML:{__html:i}})}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:e,children:(0,u.ih)("Cancel")}),(0,g.jsx)($.Z,{className:"submit-btn",color:"primary",onClick:this.onRevokeInvitation,disabled:t,children:t?(0,g.jsx)(R.Z,{}):(0,u.ih)("Submit")})]})]})}}]),n}(a.Component),no=to,io=(n(61515),function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).toggleOpMenu=function(){s.setState({isOpMenuOpen:!s.state.isOpMenuOpen})},s.onMouseEnter=function(){s.setState({isOpIconShown:!0})},s.onMouseLeave=function(){s.setState({isOpIconShown:!1})},s.deleteItem=function(e){e.preventDefault(),s.setState({isOpIconShown:!1});var t=s.props.invitation.token;w.I.deleteInvitation(t).then((function(e){s.setState({deleted:!0}),j.Z.success((0,u.ih)("Successfully deleted 1 item."))})).catch((function(e){var t=m.c.getErrorMsg(e);j.Z.danger(t),s.setState({isOpIconShown:!0})}))},s.revokeItem=function(){s.setState({deleted:!0})},s.toggleRevokeDialog=function(e){e.preventDefault(),s.setState({isRevokeDialogOpen:!s.state.isRevokeDialogOpen})},s.state={isOpIconShown:!1,isOpMenuOpen:!1,isRevokeDialogOpen:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state,t=e.isOpIconShown,n=e.deleted,i=e.isRevokeDialogOpen;if(n)return null;var s=this.props.invitation,r=(0,g.jsxs)("tr",{onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,onFocus:this.onMouseEnter,tabIndex:"0",children:[(0,g.jsx)("td",{children:s.accepter}),(0,g.jsx)("td",{children:A()(s.invite_time).format("YYYY-MM-DD")}),(0,g.jsx)("td",{children:A()(s.expire_time).format("YYYY-MM-DD")}),(0,g.jsx)("td",{children:s.accept_time&&(0,g.jsx)("i",{className:"sf2-icon-tick invite-accept-icon"})}),(0,g.jsx)("td",{children:t&&(s.accept_time?(0,g.jsx)("a",{href:"#",role:"button",className:"action-icon sf3-font sf3-font-cancel-invitation",title:(0,u.ih)("Revoke Access"),"aria-label":(0,u.ih)("Revoke Access"),onClick:this.toggleRevokeDialog}):(0,g.jsx)("a",{href:"#",role:"button",className:"action-icon sf2-icon-x3",title:(0,u.ih)("Delete"),"aria-label":(0,u.ih)("Delete"),onClick:this.deleteItem}))})]}),o=(0,g.jsxs)("tr",{children:[(0,g.jsxs)("td",{children:[s.accepter,(0,g.jsx)("br",{}),(0,g.jsxs)("span",{className:"item-meta-info",children:[A()(s.invite_time).format("YYYY-MM-DD"),(0,g.jsxs)("span",{className:"small",children:["(",(0,u.ih)("Invite Time"),")"]})]}),(0,g.jsxs)("span",{className:"item-meta-info",children:[A()(s.expire_time).format("YYYY-MM-DD"),(0,g.jsxs)("span",{className:"small",children:["(",(0,u.ih)("Expiration"),")"]})]}),(0,g.jsx)("span",{className:"item-meta-info",children:s.accept_time&&(0,u.ih)("Accepted")})]}),(0,g.jsx)("td",{children:(0,g.jsxs)(U.Z,{isOpen:this.state.isOpMenuOpen,toggle:this.toggleOpMenu,children:[(0,g.jsx)(z.Z,{tag:"i",className:"sf-dropdown-toggle fa fa-ellipsis-v ml-0",title:(0,u.ih)("More Operations"),"data-toggle":"dropdown","aria-expanded":this.state.isOpMenuOpen}),(0,g.jsxs)("div",{className:this.state.isOpMenuOpen?"":"d-none",onClick:this.toggleOpMenu,children:[(0,g.jsx)("div",{className:"mobile-operation-menu-bg-layer"}),(0,g.jsx)("div",{className:"mobile-operation-menu",children:s.accept_time?(0,g.jsx)(G.Z,{className:"mobile-menu-item",onClick:this.toggleRevokeDialog,children:(0,u.ih)("Revoke Access")}):(0,g.jsx)(G.Z,{className:"mobile-menu-item",onClick:this.deleteItem,children:(0,u.ih)("Delete")})})]})]})})]});return(0,g.jsxs)(a.Fragment,{children:[this.props.isDesktop?r:o,i&&(0,g.jsx)(no,{accepter:s.accepter,token:s.token,revokeInvitation:this.revokeItem,toggleDialog:this.toggleRevokeDialog})]})}}]),n}(a.Component)),so=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){return(0,i.Z)(this,n),t.call(this,e)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.data,t=e.loading,n=e.errorMsg,i=e.invitationsList;if(t)return(0,g.jsx)(R.Z,{});if(n)return(0,g.jsx)("p",{className:"error text-center mt-2",children:n});if(!i.length)return(0,g.jsxs)(O.Z,{children:[(0,g.jsx)("h2",{children:(0,u.ih)("No guest invitations")}),(0,g.jsx)("p",{children:(0,u.ih)('You have not invited any guests yet. A guest can access shared libraries through the web interface allowing more efficient ways to collaborate than through links. You can invite a guest by clicking the "Invite Guest" button in the menu bar.')})]});var s=m.c.isDesktop();return(0,g.jsxs)("table",{className:"table-hover".concat(s?"":" table-thead-hidden"),children:[(0,g.jsx)("thead",{children:s?(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"25%",children:(0,u.ih)("Email")}),(0,g.jsx)("th",{width:"20%",children:(0,u.ih)("Invite Time")}),(0,g.jsx)("th",{width:"20%",children:(0,u.ih)("Expiration")}),(0,g.jsx)("th",{width:"18%",children:(0,u.ih)("Accepted")}),(0,g.jsx)("th",{width:"7%"})]}):(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"92%"}),(0,g.jsx)("th",{width:"8%"})]})}),(0,g.jsx)("tbody",{children:i.map((function(e,t){return(0,g.jsx)(io,{isDesktop:s,invitation:e},t)}))})]})}}]),n}(a.Component),ro=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onInvitePeople=function(e){e.push.apply(e,s.state.invitationsList),s.setState({invitationsList:e})},s.toggleInvitePeopleDialog=function(){s.setState({isInvitePeopleDialogOpen:!s.state.isInvitePeopleDialogOpen})},s.state={loading:!0,errorMsg:"",invitationsList:[],isInvitePeopleDialogOpen:!1},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;w.I.listInvitations().then((function(t){e.setState({invitationsList:t.data,loading:!1})})).catch((function(t){e.setState({loading:!1,errorMsg:m.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(Qr,{onShowSidePanel:this.props.onShowSidePanel,onSearchedClick:this.props.onSearchedClick,toggleInvitePeopleDialog:this.toggleInvitePeopleDialog}),(0,g.jsx)("div",{className:"main-panel-center flex-row",children:(0,g.jsxs)("div",{className:"cur-view-container",children:[(0,g.jsx)("div",{className:"cur-view-path",children:(0,g.jsx)("h3",{className:"sf-heading",children:(0,u.ih)("Invite Guest")})}),(0,g.jsx)("div",{className:"cur-view-content",children:(0,g.jsx)(so,{data:this.state})})]})}),this.state.isInvitePeopleDialogOpen&&(0,g.jsx)(eo,{onInvitePeople:this.onInvitePeople,toggleDialog:this.toggleInvitePeopleDialog})]})}}]),n}(a.Component),oo=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).inputNewName=function(e){event.target.value.trim()?s.setState({isSubmitBtnActive:!0}):s.setState({isSubmitBtnActive:!1}),s.setState({name:e.target.value})},s.handleKeyDown=function(e){"Enter"===e.key&&s.handleSubmit()},s.handleSubmit=function(){var e=s.state,t=e.isExist,n=e.name,i=e.repoID;s.props.addWiki(t,n,i),s.props.toggleCancel()},s.toggle=function(){s.props.toggleCancel()},s.state={isExist:!1,name:"",repoID:"",isSubmitBtnActive:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){return(0,g.jsxs)(d.Z,{isOpen:!0,autoFocus:!1,toggle:this.toggle,children:[(0,g.jsx)(J.Z,{toggle:this.toggle,children:(0,u.ih)("New Wiki")}),(0,g.jsxs)(b.Z,{children:[(0,g.jsx)("label",{className:"form-label",children:(0,u.ih)("Name")}),(0,g.jsx)(re.Z,{onKeyDown:this.handleKeyDown,autoFocus:!0,value:this.state.name,onChange:this.inputNewName})]}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:this.toggle,children:(0,u.ih)("Cancel")}),(0,g.jsx)($.Z,{color:"primary",onClick:this.handleSubmit,disabled:!this.state.isSubmitBtnActive,children:(0,u.ih)("Submit")})]})]})}}]),n}(a.Component),ao=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onChange=function(e){s.setState({repoID:e.repo_id})},s.handleSubmit=function(){var e=s.state.repoID;s.props.addWiki(e),s.props.toggleCancel()},s.toggle=function(){s.props.toggleCancel()},s.state={repos:[],repoID:""},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;w.I.listRepos().then((function(t){var n=t.data.repos.filter((function(e){switch(e.type){case"mine":return!e.encrypted;case"shared":return!e.encrypted&&e.is_admin;default:return!e.encrypted&&!t.data.repos.some((function(t){return t.type!=e.type&&t.repo_id==e.repo_id}))}})).map((function(e){return new Je(e)}));n=m.c.sortRepos(n,"name","asc"),e.setState({repos:n})}))}},{key:"render",value:function(){var e=this;return(0,g.jsxs)(d.Z,{isOpen:!0,toggle:this.toggle,children:[(0,g.jsx)(J.Z,{toggle:this.toggle,children:(0,u.ih)("Publish a Library")}),(0,g.jsx)(b.Z,{className:"dialog-list-container",children:(0,g.jsxs)("table",{children:[(0,g.jsx)("thead",{children:(0,g.jsxs)("tr",{children:[(0,g.jsx)("th",{width:"6%"}),(0,g.jsx)("th",{width:"9%"}),(0,g.jsx)("th",{width:"55%",children:(0,u.ih)("Name")}),(0,g.jsx)("th",{width:"30%",children:(0,u.ih)("Last Update")})]})}),(0,g.jsx)("tbody",{children:this.state.repos.map((function(t,n){return(0,g.jsxs)("tr",{children:[(0,g.jsx)("td",{className:"text-center",children:(0,g.jsx)("input",{type:"radio",className:"vam",name:"repo",value:t.repo_id,onChange:e.onChange.bind(e,t)})}),(0,g.jsx)("td",{className:"text-center",children:(0,g.jsx)("img",{src:m.c.getLibIconUrl(t,!1),width:"24",title:m.c.getLibIconTitle(t),alt:m.c.getLibIconTitle(t)})}),(0,g.jsx)("td",{children:t.repo_name}),(0,g.jsx)("td",{children:A()(t.last_modified).fromNow()})]},n)}))})]})}),(0,g.jsxs)(Q.Z,{children:[(0,g.jsx)($.Z,{color:"secondary",onClick:this.toggle,children:(0,u.ih)("Cancel")}),this.state.repoID?(0,g.jsx)($.Z,{color:"primary",onClick:this.handleSubmit,children:(0,u.ih)("Submit")}):(0,g.jsx)($.Z,{color:"primary",disabled:!0,children:(0,u.ih)("Submit")})]})]})}}]),n}(a.Component),lo=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(){var e;(0,i.Z)(this,n);for(var s=arguments.length,r=new Array(s),o=0;o-1)&&(n=s.generatorPrefix(e,t)),s.setState({currentTab:e,pathPrefix:n},(function(){var e=s.state,t=e.currentTab,n=e.pathPrefix;window.history.replaceState({currentTab:t,pathPrefix:n},null)})),m.c.isDesktop()||s.state.isSidePanelClosed||s.setState({isSidePanelClosed:!0})},s.generatorPrefix=function(e,t){var n=[];if(t){var i={url:u.ze+"groups/",showName:"Groups",name:"groups",id:null},r={url:u.ze+"group/"+t+"/",showName:e,name:e,id:t};n.push(i),n.push(r)}else{var o={url:u.ze+e+"/",showName:s.getTabShowName(e),name:e,id:null};n.push(o)}return n},s.getTabShowName=function(e){return"my-libs"===e?"Libraries":"shared-libs"===e?"Shared with me":"org"===e?"Shared with all":void 0},s.toggleSidePanel=function(){s.setState({isSidePanelClosed:!s.state.isSidePanelClosed})},s.state={isOpen:!1,isSidePanelClosed:!1,draftCounts:0,draftList:[],isLoadingDraft:!0,currentTab:"/",pathPrefix:[]},s.dirViewPanels=["my-libs","shared-libs","org"],window.onpopstate=s.onpopstate,s}return(0,s.Z)(n,[{key:"UNSAFE_componentWillMount",value:function(){m.c.isDesktop()||this.setState({isSidePanelClosed:!0})}},{key:"componentDidMount",value:function(){this.navigateClientUrlToLib();var e=window.location.href.split("/");u.NT&&this.getDrafts(),this.setState({currentTab:e[e.length-2]})}},{key:"render",value:function(){var e=this.state,t=e.currentTab,n=e.isSidePanelClosed,i=u.cA?(0,g.jsx)(An,{path:u.ze,onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick}):(0,g.jsx)(Co,{path:u.ze,onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick});return(0,g.jsxs)(a.Fragment,{children:[(0,g.jsx)(v,{}),(0,g.jsxs)("div",{id:"main",children:[(0,g.jsx)(Z,{isSidePanelClosed:this.state.isSidePanelClosed,onCloseSidePanel:this.onCloseSidePanel,currentTab:t,tabItemClick:this.tabItemClick,draftCounts:this.state.draftCounts}),(0,g.jsx)(F,{children:(0,g.jsxs)(c.F0,{className:"reach-router",children:[i,(0,g.jsx)(Do,{path:u.ze+"dashboard",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick}),(0,g.jsx)(wo,{path:u.ze+"my-activities",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick}),(0,g.jsx)(jo,{path:u.ze+"drafts",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick,children:(0,g.jsx)(q,{path:"/",getDrafts:this.getDrafts,isLoadingDraft:this.state.isLoadingDraft,draftList:this.state.draftList,updateDraftsList:this.updateDraftsList})}),(0,g.jsx)(yo,{path:u.ze+"starred",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick}),(0,g.jsx)(So,{path:u.ze+"linked-devices",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick}),(0,g.jsx)(Io,{path:u.ze+"share-admin-libs",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick}),(0,g.jsx)(No,{path:u.ze+"share-admin-folders",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick}),(0,g.jsx)(He,{path:u.ze+"share-admin-share-links",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick}),(0,g.jsx)(Ke,{path:u.ze+"share-admin-upload-links",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick}),(0,g.jsx)(Co,{path:u.ze+"shared-libs",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick}),(0,g.jsx)(bo,{path:u.ze+"shared-with-ocm",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick}),(0,g.jsx)(ko,{path:u.ze+"ocm-via-webdav",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick}),(0,g.jsx)(An,{path:u.ze+"my-libs",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick}),(0,g.jsx)(Gn,{path:u.ze+"my-libs/deleted/",onSearchedClick:this.onSearchedClick}),(0,g.jsx)(Tr,{path:u.ze+"library/:repoID/*",pathPrefix:this.state.pathPrefix,onMenuClick:this.onShowSidePanel,onTabNavClick:this.tabItemClick}),(0,g.jsx)(St,{path:u.ze+"remote-library/:providerID/:repoID/*",pathPrefix:this.state.pathPrefix,onMenuClick:this.onShowSidePanel,onTabNavClick:this.tabItemClick}),(0,g.jsx)(Xr,{path:u.ze+"groups",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick}),(0,g.jsx)(qr,{path:u.ze+"group/:groupID",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick,onTabNavClick:this.tabItemClick,onGroupChanged:this.onGroupChanged}),(0,g.jsx)(go,{path:u.ze+"published",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick}),(0,g.jsx)(Jn,{path:u.ze+"org/",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick,onTabNavClick:this.tabItemClick}),(0,g.jsx)(ro,{path:u.ze+"invitations/",onShowSidePanel:this.onShowSidePanel,onSearchedClick:this.onSearchedClick})]})}),(0,g.jsx)(p(),{query:"(max-width: 767.8px)",children:(0,g.jsx)(d.Z,{zIndex:"1030",isOpen:!n,toggle:this.toggleSidePanel,contentClassName:"d-none"})})]})]})}}]),n}(a.Component);l.render((0,g.jsx)(Mo,{}),document.getElementById("wrapper"))},23727:function(e,t,n){"use strict";var i=n(1413),s=n(15671),r=n(43144),o=n(60136),a=n(29388),l=n(72791),c=n(58579),h=n(22642),p=n(80184),d=function(e){(0,o.Z)(n,e);var t=(0,a.Z)(n);function n(){var e;(0,s.Z)(this,n);for(var i=arguments.length,r=new Array(i),o=0;o2&&void 0!==arguments[2]?arguments[2]:window;"function"===typeof window.CustomEvent?n=new window.CustomEvent(e,{detail:t}):(n=document.createEvent("CustomEvent")).initCustomEvent(e,!1,!0,t),i&&(i.dispatchEvent(n),s()(r.h,t))}function c(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;l(o,s()({},e,{type:o}),t)}function h(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;l(a,s()({},e,{type:a}),t)}},99832:function(e,t,n){"use strict";var i=n(15671),s=n(43144),r=n(60136),o=n(29388),a=n(72791),l=n(17650),c=n(60925),h=n(77338),p=n(95996),d=n(80184),u=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).registerHandlers=function(){document.addEventListener("mousedown",s.handleOutsideClick),document.addEventListener("touchstart",s.handleOutsideClick),document.addEventListener("scroll",s.handleHide),document.addEventListener("contextmenu",s.handleHide),document.addEventListener("keydown",s.handleKeyNavigation),window.addEventListener("resize",s.handleHide)},s.unregisterHandlers=function(){document.removeEventListener("mousedown",s.handleOutsideClick),document.removeEventListener("touchstart",s.handleOutsideClick),document.removeEventListener("scroll",s.handleHide),document.removeEventListener("contextmenu",s.handleHide),document.removeEventListener("keydown",s.handleKeyNavigation),window.removeEventListener("resize",s.handleHide)},s.handleShow=function(e){if(e.detail.id===s.props.id){var t=e.detail.position,n=t.x,i=t.y,r=e.detail,o=r.currentObject,a=r.menuList;s.setState({isVisible:!0,x:n,y:i,currentObject:o,menuList:a}),s.registerHandlers(),(0,h._N)(s.props.onShowMenu,e)}},s.handleHide=function(e){!s.state.isVisible||e.detail&&e.detail.id&&e.detail.id!==s.props.id||(s.unregisterHandlers(),s.setState({isVisible:!1}),(0,h._N)(s.props.onHideMenu,e))},s.handleOutsideClick=function(e){s.menu.contains(e.target)||(0,c.SC)()},s.handleMouseLeave=function(e){e.preventDefault(),s.props.hideOnLeave&&(0,c.SC)()},s.handleContextMenu=function(e){s.handleHide(e)},s.handleKeyNavigation=function(e){!1!==s.state.isVisible&&(e.preventDefault(),s.hideMenu(e))},s.hideMenu=function(e){27!==e.keyCode&&13!==e.keyCode||(0,c.SC)()},s.getMenuPosition=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n={top:t,left:e};if(!s.menu)return n;var i=window,r=i.innerWidth,o=i.innerHeight,a=s.menu.getBoundingClientRect();return t+a.height>o&&(n.top-=a.height),e+a.width>r&&(n.left-=a.width),n.top<0&&(n.top=a.height0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n={top:t,left:e};if(!s.menu)return n;var i=window,r=i.innerWidth,o=i.innerHeight,a=s.menu.getBoundingClientRect();return n.left=e-a.width,t+a.height>o&&(n.top-=a.height),n.left<0&&(n.left+=a.width),n.top<0&&(n.top=a.heightr&&(n.left=a.width1?t-1:0),i=1;i-1&&s.setHighlightIndex(s.state.highlightIndex-1);else if(e.keyCode===y.mW.DownArrow){var i=s.state.searchVal.trim(),r=s.state.repotagList.filter((function(e){return e.name.includes(i)}));s.state.highlightIndex0&&n.map((function(t,n){return(0,u.jsx)(j,{index:n,highlightIndex:e.state.highlightIndex,setHighlightIndex:e.setHighlightIndex,repoTag:t,repoID:e.props.repoID,filePath:e.props.filePath,fileTagList:e.props.fileTagList,onFileTagChanged:e.props.onFileTagChanged},t.id)}))]}),i&&(0,u.jsx)(m,{callBack:this.createNewTag,footerName:"".concat((0,l.ih)("Create a new tag")," '").concat(t,"'")})]})}}]),n}(a.Component))},67145:function(e,t,n){"use strict";var i=n(15671),s=n(43144),r=n(60136),o=n(29388),a=n(72791),l=n(53585),c=n(95996),h=n(51832),p=n(80184),d=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onClick=function(e){s.inputRef.current.contains(e.target)||s.onRenameConfirm()},s.onChange=function(e){s.setState({name:e.target.value})},s.onKeyDown=function(e){e.keyCode===c.c.keyCodes.enter?s.onRenameConfirm(e):e.keyCode===c.c.keyCodes.esc&&s.onRenameCancel(e),e.nativeEvent.stopImmediatePropagation()},s.onRenameConfirm=function(e){e&&e.nativeEvent.stopImmediatePropagation();var t=s.state.name.trim();if(t!==s.props.name){var n=s.validateInput(),i=n.isValid,r=n.errMessage;i?s.props.onRenameConfirm(t):(h.Z.danger(r),s.props.onRenameCancel())}else s.props.onRenameCancel()},s.onRenameCancel=function(e){e.nativeEvent.stopImmediatePropagation(),s.props.onRenameCancel()},s.validateInput=function(){var e=s.state.name.trim(),t=!0,n="";return e?e.indexOf("/")>-1?{isValid:t=!1,errMessage:n=(0,l.ih)("Name should not include '/'.")}:{isValid:t,errMessage:n}:{isValid:t=!1,errMessage:n=(0,l.ih)("Name is required.")}},s.state={name:e.name},s.inputRef=a.createRef(),s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;if(this.inputRef.current.focus(),this.props.hasSuffix){var t=this.props.name.lastIndexOf(".");this.inputRef.current.setSelectionRange(0,t,"forward")}else this.inputRef.current.setSelectionRange(0,-1);setTimeout((function(){document.addEventListener("click",e.onClick)}),1)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.onClick)}},{key:"render",value:function(){return(0,p.jsx)("div",{className:"rename-container",children:(0,p.jsx)("input",{ref:this.inputRef,value:this.state.name,onChange:this.onChange,onKeyDown:this.onKeyDown})})}}]),n}(a.Component);t.Z=d},1652:function(e,t,n){"use strict";n.d(t,{Z:function(){return I}});var i=n(15671),s=n(43144),r=n(60136),o=n(29388),a=n(72791),l=n(53885),c=n(62298),h=n(4292),p=n(95234),d=n(95060),u=n(81815),m=n(72426),g=n.n(m),f=n(53585),v=n(22228),x=n(95996),D=n(51832),w=n(80184),j=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onFileTagChanged=function(e){var t=e.parent_path,n={name:e.filename},i="/"===t?t+e.filename:t+"/"+e.filename;s.props.onFileTagChanged(n,i)},s.onDeleteTaggedFile=function(e){var t=s.props.repoID,n=e.file_tag_id;v.I.deleteFileTag(t,n).then((function(t){s.getTaggedFiles(),s.props.updateUsedRepoTags(),s.props.onFileTagChanged&&!e.file_deleted&&s.onFileTagChanged(e)})).catch((function(e){var t=x.c.getErrorMsg(e);D.Z.danger(t)}))},s.getTaggedFiles=function(){var e=s.props,t=e.repoID,n=e.currentTag,i=e.shareLinkToken;(i?v.I.getShareLinkTaggedFiles(i,n.id):v.I.listTaggedFiles(t,n.id)).then((function(e){var t=[];void 0!==e.data.tagged_files&&e.data.tagged_files.forEach((function(e){var n=e;t.push(n)})),s.setState({taggedFileList:t})})).catch((function(e){var t=x.c.getErrorMsg(e);D.Z.danger(t)}))},s.state={taggedFileList:[]},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){this.getTaggedFiles()}},{key:"render",value:function(){var e=this,t=this.state.taggedFileList;return(0,w.jsxs)(c.Z,{isOpen:!0,style:{maxWidth:"678px"},children:[(0,w.jsx)(h.Z,{toggle:this.props.onClose,children:(0,f.ih)("Tagged Files")}),(0,w.jsx)(p.Z,{className:"dialog-list-container",children:(0,w.jsxs)("table",{children:[(0,w.jsx)("thead",{children:(0,w.jsxs)("tr",{children:[(0,w.jsx)("th",{width:"50%",className:"ellipsis",children:(0,f.ih)("Name")}),(0,w.jsx)("th",{width:"20%",children:(0,f.ih)("Size")}),(0,w.jsx)("th",{width:"22%",children:(0,f.ih)("Last Update")}),(0,w.jsx)("th",{width:"8%"})]})}),(0,w.jsx)("tbody",{children:t.map((function(t,n){return(0,w.jsx)(y,{repoID:e.props.repoID,taggedFile:t,onDeleteTaggedFile:e.onDeleteTaggedFile,shareLinkToken:e.props.shareLinkToken,enableFileDownload:e.props.enableFileDownload},n)}))})]})}),(0,w.jsx)(d.Z,{children:(0,w.jsx)(u.Z,{color:"secondary",onClick:this.props.toggleCancel,children:(0,f.ih)("Close")})})]})}}]),n}(a.Component),y=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onMouseEnter=function(){s.setState({active:!0})},s.onMouseLeave=function(){s.setState({active:!1})},s.deleteFile=function(e){e.preventDefault(),s.props.onDeleteTaggedFile(s.props.taggedFile)},s.state={active:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.taggedFile,n=e.shareLinkToken,i=e.enableFileDownload,s=t.parent_path?x.c.joinPath(t.parent_path,t.filename):"",r=n?f.ze+"d/"+n+"/files/?p="+x.c.encodePath(s):f.ze+"lib/"+this.props.repoID+"/file"+x.c.encodePath(s);return(0,w.jsxs)("tr",{onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,onFocus:this.onMouseEnter,children:[t.file_deleted?(0,w.jsx)(a.Fragment,{children:(0,w.jsxs)("td",{colSpan:"3",className:"name",children:[t.filename," ",(0,w.jsx)("span",{style:{color:"red"},children:(0,f.ih)("deleted")})]})}):(0,w.jsxs)(a.Fragment,{children:[(0,w.jsx)("td",{children:(0,w.jsx)("a",{href:r,target:"_blank",className:"d-inline-block w-100 ellipsis",title:t.filename,rel:"noreferrer",children:t.filename})}),(0,w.jsx)("td",{children:x.c.bytesToSize(t.size)}),(0,w.jsx)("td",{children:g().unix(t.mtime).fromNow()})]}),(0,w.jsxs)("td",{children:[!n&&(0,w.jsx)("a",{href:"#",role:"button","aria-label":(0,f.ih)("Delete"),title:(0,f.ih)("Delete"),className:"action-icon sf2-icon-x3".concat(this.state.active?"":" invisible"),onClick:this.deleteFile}),n&&i&&(0,w.jsx)("a",{className:"action-icon sf2-icon-download".concat(this.state.active?"":" invisible"),href:"".concat(r,"&dl=1"),title:(0,f.ih)("Download"),"aria-label":(0,f.ih)("Download")})]})]})}}]),n}(a.Component),S=n(39571),C=(0,s.Z)((function e(t){(0,i.Z)(this,e),this.created=t.created_at,this.createdStr=g()(new Date(t.created_at).getTime()).format("YYYY-MM-DD HH:mm"),this.id=t.id,this.ownerNickname=t.owner_nickname,this.originRepoID=t.origin_repo_id,this.draftFilePath=t.draft_file_path})),b=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onDeleteDraftItem=function(e){S.Z.deleteDraft(e.id).then((function(){var t=s.state.drafts.filter((function(t){return t.id!==e.id}));s.setState({drafts:t});var n=(0,f.ih)("Successfully deleted draft %(draft)s.");n=n.replace("%(draft)s",e.draftFilePath),D.Z.success(n)})).catch((function(){var t=(0,f.ih)("Failed to delete draft %(draft)s.");t=t.replace("%(draft)s",e.draftFilePath),D.Z.danger(t)}))},s.toggle=function(){s.props.toggle()},s.state={drafts:[]},s}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;v.I.listRepoDrafts(this.props.repoID).then((function(t){var n=t.data.drafts.map((function(e){return new C(e)}));e.setState({drafts:n})}))}},{key:"render",value:function(){var e=this;return(0,w.jsxs)(c.Z,{isOpen:!0,toggle:this.toggle,children:[(0,w.jsx)(h.Z,{toggle:this.toggle,children:(0,f.ih)("Drafts")}),(0,w.jsx)(p.Z,{className:"dialog-list-container",children:(0,w.jsxs)("table",{children:[(0,w.jsx)("thead",{children:(0,w.jsxs)("tr",{children:[(0,w.jsx)("th",{width:"50%",className:"ellipsis",children:(0,f.ih)("Name")}),(0,w.jsx)("th",{width:"20%",children:(0,f.ih)("Owner")}),(0,w.jsx)("th",{width:"20%",children:(0,f.ih)("Last Update")}),(0,w.jsx)("th",{width:"10%"})]})}),(0,w.jsx)("tbody",{children:this.state.drafts.map((function(t,n){return(0,w.jsx)(k,{draftItem:t,onDeleteDraftItem:e.onDeleteDraftItem},n)}))})]})}),(0,w.jsx)(d.Z,{children:(0,w.jsx)(u.Z,{color:"secondary",onClick:this.toggle,children:(0,f.ih)("Close")})})]})}}]),n}(a.Component),k=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onMouseEnter=function(){s.setState({active:!0})},s.onMouseLeave=function(){s.setState({active:!1})},s.state={active:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.draftItem,t=f.ze+"drafts/"+e.id+"/",n=this.state.active?"action-icon sf2-icon-x3":"action-icon vh sf2-icon-x3";return(0,w.jsxs)("tr",{onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,children:[(0,w.jsx)("td",{className:"name",children:(0,w.jsx)("a",{href:t,target:"_blank",rel:"noreferrer",children:x.c.getFileName(e.draftFilePath)})}),(0,w.jsx)("td",{children:e.ownerNickname}),(0,w.jsx)("td",{children:g()(e.createdStr).fromNow()}),(0,w.jsx)("td",{children:(0,w.jsx)("i",{className:n,onClick:this.props.onDeleteDraftItem.bind(this,e)})})]})}}]),n}(a.Component),I=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;return(0,i.Z)(this,n),(s=t.call(this,e)).onListTaggedFiles=function(e){s.setState({currentTag:e,isListTaggedFileShow:!s.state.isListTaggedFileShow})},s.onCloseDialog=function(){s.setState({isListTaggedFileShow:!1})},s.toggleDrafts=function(){s.setState({showRepoDrafts:!s.state.showRepoDrafts})},s.state={currentTag:null,isListTaggedFileShow:!1,showRepoDrafts:!1},s}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.repoID,i=t.usedRepoTags,s=t.draftCounts,r=t.className;return void 0===s&&(s=0),(0,w.jsxs)("div",{className:"repo-info-bar ".concat(r||""),children:[i.length>0&&(0,w.jsx)("ul",{className:"used-tag-list",children:i.map((function(t){return(0,w.jsxs)("li",{className:"used-tag-item",children:[(0,w.jsx)("span",{className:"used-tag",style:{backgroundColor:t.color}}),(0,w.jsx)("span",{className:"used-tag-name",title:t.name,children:t.name}),(0,w.jsx)("button",{type:"button",className:"used-tag-files border-0 bg-transparent",onClick:e.onListTaggedFiles.bind(e,t),children:t.fileCount>1?t.fileCount+" files":t.fileCount+" file"})]},t.id)}))}),this.state.isListTaggedFileShow&&(0,w.jsx)(l.Z,{children:(0,w.jsx)(j,{repoID:n,currentTag:this.state.currentTag,onClose:this.onCloseDialog,toggleCancel:this.onListTaggedFiles,updateUsedRepoTags:this.props.updateUsedRepoTags,onFileTagChanged:this.props.onFileTagChanged,shareLinkToken:this.props.shareLinkToken,enableFileDownload:this.props.enableFileDownload})}),this.state.showRepoDrafts&&(0,w.jsx)(l.Z,{children:(0,w.jsx)(b,{toggle:this.toggleDrafts,repoID:this.props.repoID})})]})}}]),n}(a.Component)},95046:function(e,t,n){"use strict";n.d(t,{Z:function(){return f}});var i=n(15671),s=n(43144),r=n(60136),o=n(29388),a=n(72791),l=n(93191),c=n(53585),h=n(2169),p=n(95996),d=n(80184),u=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;(0,i.Z)(this,n),(s=t.call(this,e)).onMouseEnter=function(){s.props.isItemFreezed||s.setState({isShowOperationMenu:!0,isHighlight:!0})},s.onMouseOver=function(){s.props.isItemFreezed||s.setState({isShowOperationMenu:!0,isHighlight:!0})},s.onMouseLeave=function(){s.props.isItemFreezed||s.setState({isShowOperationMenu:!1,isHighlight:!1})},s.onNodeClick=function(){var e=s.props.node.object;if(e.isDir())s.props.onNodeClick(s.props.node);else{var t=p.c.getUserPermission(e.permission),n=t.isCustomPermission,i=t.customPermission;if(n){var r=i.permission,o=r.preview,a=r.modify;if(!o&&!a)return}s.props.onNodeClick(s.props.node)}},s.onLoadToggle=function(e){e.stopPropagation();var t=s.props.node;t.isExpanded?s.props.onNodeCollapse(t):s.props.onNodeExpanded(t)},s.onNodeDragStart=function(e){if(p.c.isIEBrower()||!s.canDrag)return!1;s.props.onNodeDragStart(e,s.props.node)},s.onNodeDragEnter=function(e){if(p.c.isIEBrower()||!s.canDrag)return!1;"dir"===s.props.node.object.type&&s.setState({isNodeDropShow:!0}),s.props.onNodeDragEnter(e,s.props.node)},s.onNodeDragMove=function(e){if(p.c.isIEBrower()||!s.canDrag)return!1;s.props.onNodeDragMove(e)},s.onNodeDragLeave=function(e){if(p.c.isIEBrower()||!s.canDrag)return!1;s.setState({isNodeDropShow:!1}),s.props.onNodeDragLeave(e,s.props.node)},s.onNodeDrop=function(e){if(p.c.isIEBrower()||!s.canDrag)return!1;e.stopPropagation(),s.setState({isNodeDropShow:!1}),s.props.onNodeDrop(e,s.props.node)},s.unfreezeItem=function(){s.setState({isShowOperationMenu:!1}),s.props.unfreezeItem()},s.onMenuItemClick=function(e,t,n){s.props.onMenuItemClick(e,n)},s.onItemMouseDown=function(e){e.stopPropagation(),e.button},s.onItemContextMenu=function(e){s.handleContextClick(e)},s.handleContextClick=function(e){s.props.handleContextClick(e,s.props.node),s.setState({isShowOperationMenu:!1})},s.getNodeTypeAndIcon=function(){var e=s.props.node,t="",n="";if("dir"===e.object.type)t=(0,d.jsx)("i",{className:"far fa-folder"}),n="dir";else{var i=e.object.name.lastIndexOf(".");if(-1===i)t=(0,d.jsx)("i",{className:"far fa-file"}),n="file";else{var r=e.object.name.slice(i).toLowerCase();".png"===r||".jpg"===r||".jpeg"===r||".gif"===r||".bmp"===r?(t=(0,d.jsx)("i",{className:"far fa-image"}),n="image"):".md"===r||".markdown"===r?(t=(0,d.jsx)("i",{className:"far fa-file-alt"}),n="file"):(t=(0,d.jsx)("i",{className:"far fa-file"}),n="file")}}return{icon:t,type:n}},s.calculateMenuList=function(e){var t=l.Z.NEW_FOLDER,n=l.Z.NEW_FILE,i=l.Z.COPY,r=l.Z.MOVE,o=l.Z.RENAME,a=l.Z.DELETE,c=l.Z.OPEN_VIA_CLIENT,h=[o,a,i,r,c];"dir"===e.object.type&&(h=[t,n,i,r,o,a]);var d=s.props.userPerm,u=p.c.getUserPermission(d),m=u.isCustomPermission,g=u.customPermission;if(!m)return h;h=[];var f=g.permission,v=f.create,x=f.modify,D=f.delete,w=f.copy;return"dir"===e.object.type&&v&&h.push(t,n),w&&h.push(i),x&&h.push(r,o),D&&h.push(a),"dir"!==e.object.type&&h.push(c),h},s.renderChildren=function(){var e=s.props,t=e.node,i=e.paddingLeft;return t.hasChildren()?(0,d.jsx)("div",{className:"children",style:{paddingLeft:i},children:t.children.map((function(e){return(0,d.jsx)(n,{node:e,paddingLeft:i,userPerm:s.props.userPerm,currentPath:s.props.currentPath,isNodeMenuShow:s.props.isNodeMenuShow,isItemFreezed:s.props.isItemFreezed,onNodeClick:s.props.onNodeClick,onNodeCollapse:s.props.onNodeCollapse,onNodeExpanded:s.props.onNodeExpanded,freezeItem:s.props.freezeItem,onMenuItemClick:s.props.onMenuItemClick,unfreezeItem:s.unfreezeItem,onNodeDragStart:s.props.onNodeDragStart,onNodeDragMove:s.props.onNodeDragMove,onNodeDrop:s.props.onNodeDrop,onNodeDragEnter:s.props.onNodeDragEnter,onNodeDragLeave:s.props.onNodeDragLeave,handleContextClick:s.props.handleContextClick},e.path)}))}):""},s.state={isHighlight:!1,isShowOperationMenu:!1,isNodeDropShow:!1};var r=e.userPerm;s.canDrag="rw"===r;var o=p.c.getUserPermission(r),a=o.isCustomPermission,c=o.customPermission;if(a){var h=c.permission.modify;s.canDrag=h}return s}return(0,s.Z)(n,[{key:"UNSAFE_componentWillReceiveProps",value:function(e){e.isItemFreezed||this.setState({isShowOperationMenu:!1,isHighlight:!1})}},{key:"render",value:function(){var e=this.props,t=e.currentPath,n=e.node,i=e.isNodeMenuShow,s=e.userPerm,r=this.getNodeTypeAndIcon(),o=r.type,a=r.icon,l=this.state.isHighlight?"tree-node-inner-hover ":"";n.path===t&&(l="tree-node-hight-light");var u=p.c.getUserPermission(s).isCustomPermission;return(0,d.jsxs)("div",{className:"tree-node",children:[(0,d.jsxs)("div",{type:o,className:"tree-node-inner text-nowrap ".concat(l," ").concat("/"===n.path?"hide":""," ").concat(this.state.isNodeDropShow?"tree-node-drop":""),title:n.object.name,onMouseEnter:this.onMouseEnter,onMouseOver:this.onMouseOver,onMouseLeave:this.onMouseLeave,onMouseDown:this.onItemMouseDown,onContextMenu:this.onItemContextMenu,onClick:this.onNodeClick,children:[(0,d.jsx)("div",{className:"tree-node-text",draggable:this.canDrag,onDragStart:this.onNodeDragStart,onDragEnter:this.onNodeDragEnter,onDragLeave:this.onNodeDragLeave,onDragOver:this.onNodeDragMove,onDrop:this.onNodeDrop,children:n.object.name}),(0,d.jsxs)("div",{className:"left-icon",children:["dir"===o&&(!n.isLoaded||n.isLoaded&&n.hasChildren())&&(0,d.jsx)("i",{className:"folder-toggle-icon fa ".concat(n.isExpanded?"fa-caret-down":"fa-caret-right"),onMouseDown:function(e){return e.stopPropagation()},onClick:this.onLoadToggle}),(0,d.jsx)("i",{className:"tree-node-icon",children:a})]}),i&&(0,d.jsx)("div",{className:"right-icon",children:("rw"===s||c.rd||u)&&this.state.isShowOperationMenu&&(0,d.jsx)(h.Z,{item:this.props.node,toggleClass:"fas fa-ellipsis-v",getMenuList:this.calculateMenuList,onMenuItemClick:this.onMenuItemClick,freezeItem:this.props.freezeItem,unfreezeItem:this.unfreezeItem})})]}),n.isExpanded&&this.renderChildren()]})}}]),n}(a.Component),m=n(99832),g=n(60925),f=function(e){(0,r.Z)(n,e);var t=(0,o.Z)(n);function n(e){var s;(0,i.Z)(this,n),(s=t.call(this,e)).onItemMove=function(e,t,n,i){s.props.onItemMove(e,t,n,i)},s.onNodeDragStart=function(e,t){if(p.c.isIEBrower())return!1;var n={nodeDirent:t.object,nodeParentPath:t.parentNode.path,nodeRootPath:t.path};n=JSON.stringify(n),e.dataTransfer.effectAllowed="move",e.dataTransfer.setData("applicaiton/drag-item-info",n)},s.onNodeDragEnter=function(e,t){if(p.c.isIEBrower()||!s.canDrop)return!1;e.persist(),"tree-view tree "===e.target.className&&s.setState({isTreeViewDropTipShow:!0})},s.onNodeDragMove=function(e){if(p.c.isIEBrower()||!s.canDrop)return!1;e.preventDefault(),e.dataTransfer.dropEffect="move"},s.onNodeDragLeave=function(e,t){if(p.c.isIEBrower()||!s.canDrop)return!1;"tree-view tree tree-view-drop"===e.target.className&&s.setState({isTreeViewDropTipShow:!1})},s.onContainerClick=function(e){(0,g.SC)()},s.onNodeClick=function(e){(0,g.SC)(),s.props.onNodeClick(e)},s.onNodeDrop=function(e,t){if(p.c.isIEBrower()||!s.canDrop)return!1;if(!e.dataTransfer.files.length){var n=e.dataTransfer.getData("applicaiton/drag-item-info"),i=n=JSON.parse(n),r=i.nodeDirent,o=i.nodeParentPath,a=i.nodeRootPath,l=t;if(Array.isArray(n))return l?void s.onMoveItems(n,l,s.props.currentRepoInfo,l.path):("/"===n[0].nodeParentPath||s.props.onItemsMove(s.props.currentRepoInfo,"/"),void s.setState({isTreeViewDropTipShow:!1}));if(!l)return"/"===o||s.onItemMove(s.props.currentRepoInfo,r,"/",o),void s.setState({isTreeViewDropTipShow:!1});if("dir"===l.object.type&&o!==l.path&&(o!==l.parentNode.path||l.object.name!==r.name)){if("dir"===l.object.type&&"dir"===r.type)if(l.parentNode.path!==o)if(p.c.getPaths(l.path).includes(a))return;s.onItemMove(s.props.currentRepoInfo,r,l.path,o)}}},s.onMoveItems=function(e,t,n,i){var r=[],o=p.c.getPaths(i);(e.forEach((function(e){var t=e.nodeRootPath;r.push(t)})),"dir"===t.object.type)&&(r.some((function(e){return e===i}))||e[0].nodeParentPath&&e[0].nodeParentPath===t.path||r.some((function(e){return o.includes(e)}))||s.props.onItemsMove(n,i))},s.freezeItem=function(){s.setState({isItemFreezed:!0})},s.unfreezeItem=function(){s.setState({isItemFreezed:!1})},s.onMenuItemClick=function(e,t){s.props.onMenuItemClick(e,t),(0,g.SC)()},s.onMouseDown=function(e){e.stopPropagation(),e.button},s.onContextMenu=function(e){e.preventDefault();var t=s.props.currentRepoInfo;if("admin"!==t.permission&&"rw"!==t.permission)return"";s.handleContextClick(e)},s.handleContextClick=function(e,t){if(e.preventDefault(),e.stopPropagation(),s.props.isNodeMenuShow){var n=e.clientX||e.touches&&e.touches[0].pageX,i=e.clientY||e.touches&&e.touches[0].pageY;s.props.posX&&(n-=s.props.posX),s.props.posY&&(i-=s.props.posY),(0,g.SC)();var r=s.getMenuList(t),o={id:"tree-node-contextmenu",position:{x:n,y:i},target:e.target,currentObject:t,menuList:r};(0,g.AE)(o)}},s.getMenuList=function(e){var t=[],n=l.Z.NEW_FOLDER,i=l.Z.NEW_FILE,r=l.Z.COPY,o=l.Z.MOVE,a=l.Z.RENAME,c=l.Z.DELETE,h=l.Z.OPEN_VIA_CLIENT;if(!e)return[n,i];t="dir"===e.object.type?[n,i,r,o,a,c]:[a,c,r,o,h];var d=s.props.userPerm,u=p.c.getUserPermission(d),m=u.isCustomPermission,g=u.customPermission;if(!m)return t;t=[];var f=g.permission,v=f.create,x=f.modify,D=f.delete,w=f.copy;return e?("dir"===e.object.type&&v&&t.push(n,i),w&&t.push(r),x&&t.push(o,a),D&&t.push(c),"dir"!==e.object.type&&t.push(h),t):(v&&t.push(n,i),t)},s.onShowMenu=function(){s.freezeItem()},s.onHideMenu=function(){s.unfreezeItem()},s.state={isItemFreezed:!1,isTreeViewDropTipShow:!1};var r=e.userPerm;s.canDrop="rw"===r;var o=p.c.getUserPermission(r),a=o.isCustomPermission,c=o.customPermission;if(a){var h=c.permission.modify;s.canDrop=h}return s}return(0,s.Z)(n,[{key:"render",value:function(){return(0,d.jsxs)("div",{className:"tree-view tree ".concat(this.state.isTreeViewDropTipShow&&this.canDrop?"tree-view-drop":""),onDrop:this.onNodeDrop,onDragEnter:this.onNodeDragEnter,onDragLeave:this.onNodeDragLeave,onMouseDown:this.onMouseDown,onContextMenu:this.onContextMenu,onClick:this.onContainerClick,children:[(0,d.jsx)(u,{userPerm:this.props.userPerm,node:this.props.treeData.root,currentPath:this.props.currentPath,paddingLeft:20,isNodeMenuShow:this.props.isNodeMenuShow,isItemFreezed:this.state.isItemFreezed,onNodeClick:this.onNodeClick,onMenuItemClick:this.props.onMenuItemClick,onNodeExpanded:this.props.onNodeExpanded,onNodeCollapse:this.props.onNodeCollapse,onNodeDragStart:this.onNodeDragStart,freezeItem:this.freezeItem,unfreezeItem:this.unfreezeItem,onNodeDragMove:this.onNodeDragMove,onNodeDrop:this.onNodeDrop,onNodeDragEnter:this.onNodeDragEnter,onNodeDragLeave:this.onNodeDragLeave,handleContextClick:this.handleContextClick}),(0,d.jsx)(m.Z,{id:"tree-node-contextmenu",onMenuItemClick:this.onMenuItemClick,onHideMenu:this.onHideMenu,onShowMenu:this.onShowMenu})]})}}]),n}(a.Component)},50699:function(e,t,n){"use strict";var i=n(1413),s=n(15671),r=n(43144),o=n(60136),a=n(29388),l=n(72791),c=n(4788),h=n(53585),p=n(63446),d=n(95996),u=n(80184),m="wiki-page-content",g=function(e){(0,o.Z)(n,e);var t=(0,a.Z)(n);function n(e){var r;return(0,s.Z)(this,n),(r=t.call(this,e)).onLinkClick=function(e){e.preventDefault(),e.stopPropagation();for(var t,n=e.target;!n.dataset||!n.dataset.url;)n=n.parentNode;n&&(t=n.dataset.url,r.props.onLinkClick(t))},r.changeInlineNode=function(e){var t,n;if("image"==e.type&&h.O6){if(t=e.data.src,new RegExp(h.xx+"/lib/"+h.Jv+"/file.*raw=1").test(t)){var i=t.indexOf("/file"),s=t.indexOf("?");n=t.substring(i+5,s)}else{if(!/^\.\.\/*/.test(t)&&!/^\.\/*/.test(t))return;var o=r.props.path,a=o.slice(0,o.lastIndexOf("/"))+"/"+t;n=d.c.pathNormalize(a)}e.data.src=h.xx+"/view-image-via-public-wiki/?slug="+h.oF+"&path="+n}else if("link"==e.type)if(t=e.url,d.c.isInternalFileLink(t,h.Jv))if(d.c.isInternalMarkdownLink(t,h.Jv)){var l=d.c.getPathFromInternalMarkdownLink(t,h.Jv);e.url=h.xx+"/published/"+h.oF+l}else e.url=t.replace(/(.*)lib\/([-0-9a-f]{36})\/file(.*)/g,(function(e,t,n,i){return"".concat(t,"d/").concat(h.lI,"/files/?p=").concat(i,"&dl=1")}));else if(d.c.isInternalDirLink(t,h.Jv)){var c=d.c.getPathFromInternalDirLink(t,h.Jv);e.url=h.xx+"/published/"+h.oF+c}return e},r.modifyValueBeforeRender=function(e){return d.c.changeMarkdownNodes(e,r.changeInlineNode)},r.renderMarkdown=function(){var e=r.props,t=e.isTOCShow,n=void 0===t||t,s=e.isWiki,o=e.markdownContent,a=(0,i.Z)({isShowOutline:n,mathJaxSource:"".concat(h.si,"js/mathjax/tex-svg.js"),value:o,scrollRef:r.scrollRef},s&&{beforeRenderCallback:r.modifyValueBeforeRender});return(0,u.jsx)(c.av,(0,i.Z)({},a))},r.scrollRef=l.createRef(),r}return(0,r.Z)(n,[{key:"componentDidMount",value:function(){var e=c.Nd.getInstance();this.unsubscribeLinkClick=e.subscribe(c.rj.ON_LINK_CLICK,this.onLinkClick)}},{key:"componentWillUnmount",value:function(){this.unsubscribeLinkClick()}},{key:"render",value:function(){if(this.props.isFileLoading)return(0,u.jsx)(p.Z,{});var e="".concat(this.props.repoID?m+" w-100":m);return(0,u.jsx)("div",{ref:this.scrollRef,className:"wiki-page-container",children:(0,u.jsxs)("div",{className:e,children:[this.props.children,this.renderMarkdown(),(0,u.jsxs)("p",{id:"wiki-page-last-modified",children:[(0,h.ih)("Last modified by")," ",this.props.latestContributor,", ",(0,u.jsx)("span",{children:this.props.lastModified})]})]})})}}]),n}(l.Component);c.av.defaultProps={isWiki:!1},t.Z=g},57186:function(e){function t(){}e.exports=function(e,n,i){var s=!1;return i=i||t,r.count=e,0===e?n():r;function r(e,t){if(r.count<=0)throw new Error("after called too many times");--r.count,e?(s=!0,n(e),n=i):0!==r.count||s||n(null,t)}}},59873:function(e){e.exports=function(e,t,n){var i=e.byteLength;if(t=t||0,n=n||i,e.slice)return e.slice(t,n);if(t<0&&(t+=i),n<0&&(n+=i),n>i&&(n=i),t>=i||t>=n||0===i)return new ArrayBuffer(0);for(var s=new Uint8Array(e),r=new Uint8Array(n-t),o=t,a=0;o0&&e.jitter<=1?e.jitter:0,this.attempts=0}e.exports=t,t.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),n=Math.floor(t*this.jitter*e);e=0==(1&Math.floor(10*t))?e-n:e+n}return 0|Math.min(e,this.max)},t.prototype.reset=function(){this.attempts=0},t.prototype.setMin=function(e){this.ms=e},t.prototype.setMax=function(e){this.max=e},t.prototype.setJitter=function(e){this.jitter=e}},60934:function(e,t){!function(e){"use strict";t.encode=function(t){var n,i=new Uint8Array(t),s=i.length,r="";for(n=0;n>2],r+=e[(3&i[n])<<4|i[n+1]>>4],r+=e[(15&i[n+1])<<2|i[n+2]>>6],r+=e[63&i[n+2]];return s%3===2?r=r.substring(0,r.length-1)+"=":s%3===1&&(r=r.substring(0,r.length-2)+"=="),r},t.decode=function(t){var n,i,s,r,o,a=.75*t.length,l=t.length,c=0;"="===t[t.length-1]&&(a--,"="===t[t.length-2]&&a--);var h=new ArrayBuffer(a),p=new Uint8Array(h);for(n=0;n>4,p[c++]=(15&s)<<4|r>>2,p[c++]=(3&r)<<6|63&o;return h}}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")},15665:function(e){var t="undefined"!==typeof t?t:"undefined"!==typeof WebKitBlobBuilder?WebKitBlobBuilder:"undefined"!==typeof MSBlobBuilder?MSBlobBuilder:"undefined"!==typeof MozBlobBuilder&&MozBlobBuilder,n=function(){try{return 2===new Blob(["hi"]).size}catch(e){return!1}}(),i=n&&function(){try{return 2===new Blob([new Uint8Array([1,2])]).size}catch(e){return!1}}(),s=t&&t.prototype.append&&t.prototype.getBlob;function r(e){return e.map((function(e){if(e.buffer instanceof ArrayBuffer){var t=e.buffer;if(e.byteLength!==t.byteLength){var n=new Uint8Array(e.byteLength);n.set(new Uint8Array(t,e.byteOffset,e.byteLength)),t=n.buffer}return t}return e}))}function o(e,n){n=n||{};var i=new t;return r(e).forEach((function(e){i.append(e)})),n.type?i.getBlob(n.type):i.getBlob()}function a(e,t){return new Blob(r(e),t||{})}"undefined"!==typeof Blob&&(o.prototype=Blob.prototype,a.prototype=Blob.prototype),e.exports=n?i?Blob:a:s?o:void 0},94870:function(e){var t=[].slice;e.exports=function(e,n){if("string"==typeof n&&(n=e[n]),"function"!=typeof n)throw new Error("bind() requires a function");var i=t.call(arguments,2);return function(){return n.apply(e,i.concat(t.call(arguments)))}}},79773:function(e){function t(e){if(e)return function(e){for(var n in t.prototype)e[n]=t.prototype[n];return e}(e)}e.exports=t,t.prototype.on=t.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},t.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},t.prototype.off=t.prototype.removeListener=t.prototype.removeAllListeners=t.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n,i=this._callbacks["$"+e];if(!i)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var s=0;s0&&(this.extraHeaders=t.extraHeaders),t.localAddress&&(this.localAddress=t.localAddress)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingIntervalTimer=null,this.pingTimeoutTimer=null,this.open()}e.exports=h,h.priorWebsocketSuccess=!1,s(h.prototype),h.protocol=a.protocol,h.Socket=h,h.Transport=n(11221),h.transports=n(36624),h.parser=n(92103),h.prototype.createTransport=function(e){r('creating transport "%s"',e);var t=function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}(this.query);t.EIO=a.protocol,t.transport=e;var n=this.transportOptions[e]||{};return this.id&&(t.sid=this.id),new i[e]({query:t,socket:this,agent:n.agent||this.agent,hostname:n.hostname||this.hostname,port:n.port||this.port,secure:n.secure||this.secure,path:n.path||this.path,forceJSONP:n.forceJSONP||this.forceJSONP,jsonp:n.jsonp||this.jsonp,forceBase64:n.forceBase64||this.forceBase64,enablesXDR:n.enablesXDR||this.enablesXDR,withCredentials:n.withCredentials||this.withCredentials,timestampRequests:n.timestampRequests||this.timestampRequests,timestampParam:n.timestampParam||this.timestampParam,policyPort:n.policyPort||this.policyPort,pfx:n.pfx||this.pfx,key:n.key||this.key,passphrase:n.passphrase||this.passphrase,cert:n.cert||this.cert,ca:n.ca||this.ca,ciphers:n.ciphers||this.ciphers,rejectUnauthorized:n.rejectUnauthorized||this.rejectUnauthorized,perMessageDeflate:n.perMessageDeflate||this.perMessageDeflate,extraHeaders:n.extraHeaders||this.extraHeaders,forceNode:n.forceNode||this.forceNode,localAddress:n.localAddress||this.localAddress,requestTimeout:n.requestTimeout||this.requestTimeout,protocols:n.protocols||void 0,isReactNative:this.isReactNative})},h.prototype.open=function(){var e;if(this.rememberUpgrade&&h.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))e="websocket";else{if(0===this.transports.length){var t=this;return void setTimeout((function(){t.emit("error","No transports available")}),0)}e=this.transports[0]}this.readyState="opening";try{e=this.createTransport(e)}catch(n){return this.transports.shift(),void this.open()}e.open(),this.setTransport(e)},h.prototype.setTransport=function(e){r("setting transport %s",e.name);var t=this;this.transport&&(r("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners()),this.transport=e,e.on("drain",(function(){t.onDrain()})).on("packet",(function(e){t.onPacket(e)})).on("error",(function(e){t.onError(e)})).on("close",(function(){t.onClose("transport close")}))},h.prototype.probe=function(e){r('probing transport "%s"',e);var t=this.createTransport(e,{probe:1}),n=!1,i=this;function s(){if(i.onlyBinaryUpgrades){var s=!this.supportsBinary&&i.transport.supportsBinary;n=n||s}n||(r('probe transport "%s" opened',e),t.send([{type:"ping",data:"probe"}]),t.once("packet",(function(s){if(!n)if("pong"===s.type&&"probe"===s.data){if(r('probe transport "%s" pong',e),i.upgrading=!0,i.emit("upgrading",t),!t)return;h.priorWebsocketSuccess="websocket"===t.name,r('pausing current transport "%s"',i.transport.name),i.transport.pause((function(){n||"closed"!==i.readyState&&(r("changing transport and sending upgrade packet"),d(),i.setTransport(t),t.send([{type:"upgrade"}]),i.emit("upgrade",t),t=null,i.upgrading=!1,i.flush())}))}else{r('probe transport "%s" failed',e);var o=new Error("probe error");o.transport=t.name,i.emit("upgradeError",o)}})))}function o(){n||(n=!0,d(),t.close(),t=null)}function a(n){var s=new Error("probe error: "+n);s.transport=t.name,o(),r('probe transport "%s" failed because of error: %s',e,n),i.emit("upgradeError",s)}function l(){a("transport closed")}function c(){a("socket closed")}function p(e){t&&e.name!==t.name&&(r('"%s" works - aborting "%s"',e.name,t.name),o())}function d(){t.removeListener("open",s),t.removeListener("error",a),t.removeListener("close",l),i.removeListener("close",c),i.removeListener("upgrading",p)}h.priorWebsocketSuccess=!1,t.once("open",s),t.once("error",a),t.once("close",l),this.once("close",c),this.once("upgrading",p),t.open()},h.prototype.onOpen=function(){if(r("socket open"),this.readyState="open",h.priorWebsocketSuccess="websocket"===this.transport.name,this.emit("open"),this.flush(),"open"===this.readyState&&this.upgrade&&this.transport.pause){r("starting upgrade probes");for(var e=0,t=this.upgrades.length;e';i=document.createElement(e)}catch(t){(i=document.createElement("iframe")).name=n.iframeId,i.src="javascript:0"}i.id=n.iframeId,n.form.appendChild(i),n.iframe=i}this.form.action=this.uri(),h(),e=e.replace(l,"\\\n"),this.area.value=e.replace(a,"\\n");try{this.form.submit()}catch(p){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"===n.iframe.readyState&&c()}:this.iframe.onload=c}},59812:function(e,t,n){var i=n(96537),s=n(1857),r=n(79773),o=n(10993),a=n(36693)("engine.io-client:polling-xhr"),l=n(80888);function c(){}function h(e){if(s.call(this,e),this.requestTimeout=e.requestTimeout,this.extraHeaders=e.extraHeaders,"undefined"!==typeof location){var t="https:"===location.protocol,n=location.port;n||(n=t?443:80),this.xd="undefined"!==typeof location&&e.hostname!==location.hostname||n!==e.port,this.xs=e.secure!==t}}function p(e){this.method=e.method||"GET",this.uri=e.uri,this.xd=!!e.xd,this.xs=!!e.xs,this.async=!1!==e.async,this.data=void 0!==e.data?e.data:null,this.agent=e.agent,this.isBinary=e.isBinary,this.supportsBinary=e.supportsBinary,this.enablesXDR=e.enablesXDR,this.withCredentials=e.withCredentials,this.requestTimeout=e.requestTimeout,this.pfx=e.pfx,this.key=e.key,this.passphrase=e.passphrase,this.cert=e.cert,this.ca=e.ca,this.ciphers=e.ciphers,this.rejectUnauthorized=e.rejectUnauthorized,this.extraHeaders=e.extraHeaders,this.create()}if(e.exports=h,e.exports.Request=p,o(h,s),h.prototype.supportsBinary=!0,h.prototype.request=function(e){return(e=e||{}).uri=this.uri(),e.xd=this.xd,e.xs=this.xs,e.agent=this.agent||!1,e.supportsBinary=this.supportsBinary,e.enablesXDR=this.enablesXDR,e.withCredentials=this.withCredentials,e.pfx=this.pfx,e.key=this.key,e.passphrase=this.passphrase,e.cert=this.cert,e.ca=this.ca,e.ciphers=this.ciphers,e.rejectUnauthorized=this.rejectUnauthorized,e.requestTimeout=this.requestTimeout,e.extraHeaders=this.extraHeaders,new p(e)},h.prototype.doWrite=function(e,t){var n="string"!==typeof e&&void 0!==e,i=this.request({method:"POST",data:e,isBinary:n}),s=this;i.on("success",t),i.on("error",(function(e){s.onError("xhr post error",e)})),this.sendXhr=i},h.prototype.doPoll=function(){a("xhr poll");var e=this.request(),t=this;e.on("data",(function(e){t.onData(e)})),e.on("error",(function(e){t.onError("xhr poll error",e)})),this.pollXhr=e},r(p.prototype),p.prototype.create=function(){var e={agent:this.agent,xdomain:this.xd,xscheme:this.xs,enablesXDR:this.enablesXDR};e.pfx=this.pfx,e.key=this.key,e.passphrase=this.passphrase,e.cert=this.cert,e.ca=this.ca,e.ciphers=this.ciphers,e.rejectUnauthorized=this.rejectUnauthorized;var t=this.xhr=new i(e),n=this;try{a("xhr open %s: %s",this.method,this.uri),t.open(this.method,this.uri,this.async);try{if(this.extraHeaders)for(var s in t.setDisableHeaderCheck&&t.setDisableHeaderCheck(!0),this.extraHeaders)this.extraHeaders.hasOwnProperty(s)&&t.setRequestHeader(s,this.extraHeaders[s])}catch(r){}if("POST"===this.method)try{this.isBinary?t.setRequestHeader("Content-type","application/octet-stream"):t.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(r){}try{t.setRequestHeader("Accept","*/*")}catch(r){}"withCredentials"in t&&(t.withCredentials=this.withCredentials),this.requestTimeout&&(t.timeout=this.requestTimeout),this.hasXDR()?(t.onload=function(){n.onLoad()},t.onerror=function(){n.onError(t.responseText)}):t.onreadystatechange=function(){if(2===t.readyState)try{var e=t.getResponseHeader("Content-Type");(n.supportsBinary&&"application/octet-stream"===e||"application/octet-stream; charset=UTF-8"===e)&&(t.responseType="arraybuffer")}catch(r){}4===t.readyState&&(200===t.status||1223===t.status?n.onLoad():setTimeout((function(){n.onError("number"===typeof t.status?t.status:0)}),0))},a("xhr data %s",this.data),t.send(this.data)}catch(r){return void setTimeout((function(){n.onError(r)}),0)}"undefined"!==typeof document&&(this.index=p.requestsCount++,p.requests[this.index]=this)},p.prototype.onSuccess=function(){this.emit("success"),this.cleanup()},p.prototype.onData=function(e){this.emit("data",e),this.onSuccess()},p.prototype.onError=function(e){this.emit("error",e),this.cleanup(!0)},p.prototype.cleanup=function(e){if("undefined"!==typeof this.xhr&&null!==this.xhr){if(this.hasXDR()?this.xhr.onload=this.xhr.onerror=c:this.xhr.onreadystatechange=c,e)try{this.xhr.abort()}catch(t){}"undefined"!==typeof document&&delete p.requests[this.index],this.xhr=null}},p.prototype.onLoad=function(){var e;try{var t;try{t=this.xhr.getResponseHeader("Content-Type")}catch(n){}e=("application/octet-stream"===t||"application/octet-stream; charset=UTF-8"===t)&&this.xhr.response||this.xhr.responseText}catch(n){this.onError(n)}null!=e&&this.onData(e)},p.prototype.hasXDR=function(){return"undefined"!==typeof XDomainRequest&&!this.xs&&this.enablesXDR},p.prototype.abort=function(){this.cleanup()},p.requestsCount=0,p.requests={},"undefined"!==typeof document)if("function"===typeof attachEvent)attachEvent("onunload",d);else if("function"===typeof addEventListener){addEventListener("onpagehide"in l?"pagehide":"unload",d,!1)}function d(){for(var e in p.requests)p.requests.hasOwnProperty(e)&&p.requests[e].abort()}},1857:function(e,t,n){var i=n(11221),s=n(55988),r=n(92103),o=n(10993),a=n(65590),l=n(36693)("engine.io-client:polling");e.exports=h;var c=null!=new(n(96537))({xdomain:!1}).responseType;function h(e){var t=e&&e.forceBase64;c&&!t||(this.supportsBinary=!1),i.call(this,e)}o(h,i),h.prototype.name="polling",h.prototype.doOpen=function(){this.poll()},h.prototype.pause=function(e){var t=this;function n(){l("paused"),t.readyState="paused",e()}if(this.readyState="pausing",this.polling||!this.writable){var i=0;this.polling&&(l("we are currently polling - waiting to pause"),i++,this.once("pollComplete",(function(){l("pre-pause polling complete"),--i||n()}))),this.writable||(l("we are currently writing - waiting to pause"),i++,this.once("drain",(function(){l("pre-pause writing complete"),--i||n()})))}else n()},h.prototype.poll=function(){l("polling"),this.polling=!0,this.doPoll(),this.emit("poll")},h.prototype.onData=function(e){var t=this;l("polling got data %s",e);r.decodePayload(e,this.socket.binaryType,(function(e,n,i){if("opening"===t.readyState&&"open"===e.type&&t.onOpen(),"close"===e.type)return t.onClose(),!1;t.onPacket(e)})),"closed"!==this.readyState&&(this.polling=!1,this.emit("pollComplete"),"open"===this.readyState?this.poll():l('ignoring poll - transport state "%s"',this.readyState))},h.prototype.doClose=function(){var e=this;function t(){l("writing close packet"),e.write([{type:"close"}])}"open"===this.readyState?(l("transport open - closing"),t()):(l("transport not open - deferring close"),this.once("open",t))},h.prototype.write=function(e){var t=this;this.writable=!1;var n=function(){t.writable=!0,t.emit("drain")};r.encodePayload(e,this.supportsBinary,(function(e){t.doWrite(e,n)}))},h.prototype.uri=function(){var e=this.query||{},t=this.secure?"https":"http",n="";return!1!==this.timestampRequests&&(e[this.timestampParam]=a()),this.supportsBinary||e.sid||(e.b64=1),e=s.encode(e),this.port&&("https"===t&&443!==Number(this.port)||"http"===t&&80!==Number(this.port))&&(n=":"+this.port),e.length&&(e="?"+e),t+"://"+(-1!==this.hostname.indexOf(":")?"["+this.hostname+"]":this.hostname)+n+this.path+e}},9747:function(e,t,n){var i,s,r=n(19778).lW,o=n(11221),a=n(92103),l=n(55988),c=n(10993),h=n(65590),p=n(36693)("engine.io-client:websocket");if("undefined"!==typeof WebSocket?i=WebSocket:"undefined"!==typeof self&&(i=self.WebSocket||self.MozWebSocket),"undefined"===typeof window)try{s=n(77020)}catch(m){}var d=i||s;function u(e){e&&e.forceBase64&&(this.supportsBinary=!1),this.perMessageDeflate=e.perMessageDeflate,this.usingBrowserWebSocket=i&&!e.forceNode,this.protocols=e.protocols,this.usingBrowserWebSocket||(d=s),o.call(this,e)}e.exports=u,c(u,o),u.prototype.name="websocket",u.prototype.supportsBinary=!0,u.prototype.doOpen=function(){if(this.check()){var e=this.uri(),t=this.protocols,n={};this.isReactNative||(n.agent=this.agent,n.perMessageDeflate=this.perMessageDeflate,n.pfx=this.pfx,n.key=this.key,n.passphrase=this.passphrase,n.cert=this.cert,n.ca=this.ca,n.ciphers=this.ciphers,n.rejectUnauthorized=this.rejectUnauthorized),this.extraHeaders&&(n.headers=this.extraHeaders),this.localAddress&&(n.localAddress=this.localAddress);try{this.ws=this.usingBrowserWebSocket&&!this.isReactNative?t?new d(e,t):new d(e):new d(e,t,n)}catch(i){return this.emit("error",i)}void 0===this.ws.binaryType&&(this.supportsBinary=!1),this.ws.supports&&this.ws.supports.binary?(this.supportsBinary=!0,this.ws.binaryType="nodebuffer"):this.ws.binaryType="arraybuffer",this.addEventListeners()}},u.prototype.addEventListeners=function(){var e=this;this.ws.onopen=function(){e.onOpen()},this.ws.onclose=function(){e.onClose()},this.ws.onmessage=function(t){e.onData(t.data)},this.ws.onerror=function(t){e.onError("websocket error",t)}},u.prototype.write=function(e){var t=this;this.writable=!1;for(var n=e.length,i=0,s=n;i=31||"undefined"!==typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},t.enable(s())},49707:function(e,t,n){function i(e){var n;function i(){if(i.enabled){var e=i,s=+new Date,r=s-(n||s);e.diff=r,e.prev=n,e.curr=s,n=s;for(var o=new Array(arguments.length),a=0;a0)return function(e){if((e=String(e)).length>100)return;var o=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!o)return;var a=parseFloat(o[1]);switch((o[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return a*r;case"days":case"day":case"d":return a*s;case"hours":case"hour":case"hrs":case"hr":case"h":return a*i;case"minutes":case"minute":case"mins":case"min":case"m":return a*n;case"seconds":case"second":case"secs":case"sec":case"s":return a*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return a;default:return}}(e);if("number"===c&&!1===isNaN(e))return a.long?o(l=e,s,"day")||o(l,i,"hour")||o(l,n,"minute")||o(l,t,"second")||l+" ms":function(e){if(e>=s)return Math.round(e/s)+"d";if(e>=i)return Math.round(e/i)+"h";if(e>=n)return Math.round(e/n)+"m";if(e>=t)return Math.round(e/t)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},92103:function(e,t,n){var i,s=n(57660),r=n(98801),o=n(59873),a=n(57186),l=n(66397);"undefined"!==typeof ArrayBuffer&&(i=n(60934));var c="undefined"!==typeof navigator&&/Android/i.test(navigator.userAgent),h="undefined"!==typeof navigator&&/PhantomJS/i.test(navigator.userAgent),p=c||h;t.protocol=3;var d=t.packets={open:0,close:1,ping:2,pong:3,message:4,upgrade:5,noop:6},u=s(d),m={type:"error",data:"parser error"},g=n(15665);function f(e,t,n){for(var i=new Array(e.length),s=a(e.length,n),r=function(e,n,s){t(n,(function(t,n){i[e]=n,s(t,i)}))},o=0;o1?{type:u[s],data:e.substring(1)}:{type:u[s]}:m}s=new Uint8Array(e)[0];var r=o(e,1);return g&&"blob"===n&&(r=new g([r])),{type:u[s],data:r}},t.decodeBase64Packet=function(e,t){var n=u[e.charAt(0)];if(!i)return{type:n,data:{base64:!0,data:e.substr(1)}};var s=i.decode(e.substr(1));return"blob"===t&&g&&(s=new g([s])),{type:n,data:s}},t.encodePayload=function(e,n,i){"function"===typeof n&&(i=n,n=null);var s=r(e);if(n&&s)return g&&!p?t.encodePayloadAsBlob(e,i):t.encodePayloadAsArrayBuffer(e,i);if(!e.length)return i("0:");f(e,(function(e,i){t.encodePacket(e,!!s&&n,!1,(function(e){i(null,function(e){return e.length+":"+e}(e))}))}),(function(e,t){return i(t.join(""))}))},t.decodePayload=function(e,n,i){if("string"!==typeof e)return t.decodePayloadAsBinary(e,n,i);var s;if("function"===typeof n&&(i=n,n=null),""===e)return i(m,0,1);for(var r,o,a="",l=0,c=e.length;l0;){for(var a=new Uint8Array(s),l=0===a[0],c="",h=1;255!==a[h];h++){if(c.length>310)return i(m,0,1);c+=a[h]}s=o(s,2+c.length),c=parseInt(c);var p=o(s,0,c);if(l)try{p=String.fromCharCode.apply(null,new Uint8Array(p))}catch(g){var d=new Uint8Array(p);p="";for(h=0;h=55296&&t<=56319&&s=55296&&e<=57343){if(t)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value");return!1}return!0}function a(e,t){return s(e>>t&63|128)}function l(e,t){if(0==(4294967168&e))return s(e);var n="";return 0==(4294965248&e)?n=s(e>>6&31|192):0==(4294901760&e)?(o(e,t)||(e=65533),n=s(e>>12&15|224),n+=a(e,6)):0==(4292870144&e)&&(n=s(e>>18&7|240),n+=a(e,12),n+=a(e,6)),n+=s(63&e|128)}function c(){if(i>=n)throw Error("Invalid byte index");var e=255&t[i];if(i++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function h(e){var s,r;if(i>n)throw Error("Invalid byte index");if(i==n)return!1;if(s=255&t[i],i++,0==(128&s))return s;if(192==(224&s)){if((r=(31&s)<<6|c())>=128)return r;throw Error("Invalid continuation byte")}if(224==(240&s)){if((r=(15&s)<<12|c()<<6|c())>=2048)return o(r,e)?r:65533;throw Error("Invalid continuation byte")}if(240==(248&s)&&(r=(7&s)<<18|c()<<12|c()<<6|c())>=65536&&r<=1114111)return r;throw Error("Invalid UTF-8 detected")}e.exports={version:"2.1.2",encode:function(e,t){for(var n=!1!==(t=t||{}).strict,i=r(e),s=i.length,o=-1,a="";++o65535&&(r+=s((t-=65536)>>>10&1023|55296),t=56320|1023&t),r+=s(t);return r}(c)}}},98801:function(e,t,n){var i=n(19778).lW,s=n(89588),r=Object.prototype.toString,o="function"===typeof Blob||"undefined"!==typeof Blob&&"[object BlobConstructor]"===r.call(Blob),a="function"===typeof File||"undefined"!==typeof File&&"[object FileConstructor]"===r.call(File);e.exports=function e(t){if(!t||"object"!==typeof t)return!1;if(s(t)){for(var n=0,r=t.length;n0&&!this.encoding){var e=this.packetBuffer.shift();this.packet(e)}},u.prototype.cleanup=function(){c("cleanup");for(var e=this.subs.length,t=0;t=this._reconnectionAttempts)c("reconnect failed"),this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var t=this.backoff.duration();c("will wait %dms before reconnect attempt",t),this.reconnecting=!0;var n=setTimeout((function(){e.skipReconnect||(c("attempting reconnect"),e.emitAll("reconnect_attempt",e.backoff.attempts),e.emitAll("reconnecting",e.backoff.attempts),e.skipReconnect||e.open((function(t){t?(c("reconnect attempt error"),e.reconnecting=!1,e.reconnect(),e.emitAll("reconnect_error",t.data)):(c("reconnect success"),e.onreconnect())})))}),t);this.subs.push({destroy:function(){clearTimeout(n)}})}},u.prototype.onreconnect=function(){var e=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",e)}},91457:function(e){e.exports=function(e,t,n){return e.on(t,n),{destroy:function(){e.removeListener(t,n)}}}},11927:function(e,t,n){var i=n(99512),s=n(79773),r=n(21364),o=n(91457),a=n(94870),l=n(60918)("socket.io-client:socket"),c=n(55988),h=n(98801);e.exports=u;var p={connect:1,connect_error:1,connect_timeout:1,connecting:1,disconnect:1,error:1,reconnect:1,reconnect_attempt:1,reconnect_failed:1,reconnect_error:1,reconnecting:1,ping:1,pong:1},d=s.prototype.emit;function u(e,t,n){this.io=e,this.nsp=t,this.json=this,this.ids=0,this.acks={},this.receiveBuffer=[],this.sendBuffer=[],this.connected=!1,this.disconnected=!0,this.flags={},n&&n.query&&(this.query=n.query),this.io.autoConnect&&this.open()}s(u.prototype),u.prototype.subEvents=function(){if(!this.subs){var e=this.io;this.subs=[o(e,"open",a(this,"onopen")),o(e,"packet",a(this,"onpacket")),o(e,"close",a(this,"onclose"))]}},u.prototype.open=u.prototype.connect=function(){return this.connected||(this.subEvents(),this.io.reconnecting||this.io.open(),"open"===this.io.readyState&&this.onopen(),this.emit("connecting")),this},u.prototype.send=function(){var e=r(arguments);return e.unshift("message"),this.emit.apply(this,e),this},u.prototype.emit=function(e){if(p.hasOwnProperty(e))return d.apply(this,arguments),this;var t=r(arguments),n={type:(void 0!==this.flags.binary?this.flags.binary:h(t))?i.BINARY_EVENT:i.EVENT,data:t,options:{}};return n.options.compress=!this.flags||!1!==this.flags.compress,"function"===typeof t[t.length-1]&&(l("emitting packet with ack id %d",this.ids),this.acks[this.ids]=t.pop(),n.id=this.ids++),this.connected?this.packet(n):this.sendBuffer.push(n),this.flags={},this},u.prototype.packet=function(e){e.nsp=this.nsp,this.io.packet(e)},u.prototype.onopen=function(){if(l("transport is open - connecting"),"/"!==this.nsp)if(this.query){var e="object"===typeof this.query?c.encode(this.query):this.query;l("sending connect packet with query %s",e),this.packet({type:i.CONNECT,query:e})}else this.packet({type:i.CONNECT})},u.prototype.onclose=function(e){l("close (%s)",e),this.connected=!1,this.disconnected=!0,delete this.id,this.emit("disconnect",e)},u.prototype.onpacket=function(e){var t=e.nsp===this.nsp,n=e.type===i.ERROR&&"/"===e.nsp;if(t||n)switch(e.type){case i.CONNECT:this.onconnect();break;case i.EVENT:case i.BINARY_EVENT:this.onevent(e);break;case i.ACK:case i.BINARY_ACK:this.onack(e);break;case i.DISCONNECT:this.ondisconnect();break;case i.ERROR:this.emit("error",e.data)}},u.prototype.onevent=function(e){var t=e.data||[];l("emitting event %j",t),null!=e.id&&(l("attaching ack callback to event"),t.push(this.ack(e.id))),this.connected?d.apply(this,t):this.receiveBuffer.push(t)},u.prototype.ack=function(e){var t=this,n=!1;return function(){if(!n){n=!0;var s=r(arguments);l("sending ack %j",s),t.packet({type:h(s)?i.BINARY_ACK:i.ACK,id:e,data:s})}}},u.prototype.onack=function(e){var t=this.acks[e.id];"function"===typeof t?(l("calling ack %s with %j",e.id,e.data),t.apply(this,e.data),delete this.acks[e.id]):l("bad ack %s",e.id)},u.prototype.onconnect=function(){this.connected=!0,this.disconnected=!1,this.emitBuffered(),this.emit("connect")},u.prototype.emitBuffered=function(){var e;for(e=0;e=31||"undefined"!==typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},t.enable(s())},12701:function(e,t,n){function i(e){var n;function i(){if(i.enabled){var e=i,s=+new Date,r=s-(n||s);e.diff=r,e.prev=n,e.curr=s,n=s;for(var o=new Array(arguments.length),a=0;a0)return function(e){if((e=String(e)).length>100)return;var o=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!o)return;var a=parseFloat(o[1]);switch((o[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return a*r;case"days":case"day":case"d":return a*s;case"hours":case"hour":case"hrs":case"hr":case"h":return a*i;case"minutes":case"minute":case"mins":case"min":case"m":return a*n;case"seconds":case"second":case"secs":case"sec":case"s":return a*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return a;default:return}}(e);if("number"===c&&!1===isNaN(e))return a.long?o(l=e,s,"day")||o(l,i,"hour")||o(l,n,"minute")||o(l,t,"second")||l+" ms":function(e){if(e>=s)return Math.round(e/s)+"d";if(e>=i)return Math.round(e/i)+"h";if(e>=n)return Math.round(e/n)+"m";if(e>=t)return Math.round(e/t)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},88252:function(e,t,n){var i=n(36085),s=n(55052),r=Object.prototype.toString,o="function"===typeof Blob||"undefined"!==typeof Blob&&"[object BlobConstructor]"===r.call(Blob),a="function"===typeof File||"undefined"!==typeof File&&"[object FileConstructor]"===r.call(File);function l(e,t){if(!e)return e;if(s(e)){var n={_placeholder:!0,num:t.length};return t.push(e),n}if(i(e)){for(var r=new Array(e.length),o=0;o=0&&e.num=31||"undefined"!==typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},t.enable(s())},28178:function(e,t,n){function i(e){var n;function i(){if(i.enabled){var e=i,s=+new Date,r=s-(n||s);e.diff=r,e.prev=n,e.curr=s,n=s;for(var o=new Array(arguments.length),a=0;a0)return function(e){if((e=String(e)).length>100)return;var o=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!o)return;var a=parseFloat(o[1]);switch((o[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return a*r;case"days":case"day":case"d":return a*s;case"hours":case"hour":case"hrs":case"hr":case"h":return a*i;case"minutes":case"minute":case"mins":case"min":case"m":return a*n;case"seconds":case"second":case"secs":case"sec":case"s":return a*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return a;default:return}}(e);if("number"===c&&!1===isNaN(e))return a.long?o(l=e,s,"day")||o(l,i,"hour")||o(l,n,"minute")||o(l,t,"second")||l+" ms":function(e){if(e>=s)return Math.round(e/s)+"d";if(e>=i)return Math.round(e/i)+"h";if(e>=n)return Math.round(e/n)+"m";if(e>=t)return Math.round(e/t)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},21364:function(e){e.exports=function(e,t){for(var n=[],i=(t=t||0)||0;i0);return t}function l(){var e=a(+new Date);return e!==t?(r=0,t=e):e+"."+a(r++)}for(;o {\n this.setState({isClosed: true});\n\n if (navigator.cookieEnabled) {\n let date = new Date(),\n cookies = document.cookie.split('; '),\n infoIDExist = false,\n newInfoID = curNoteID + '_';\n date.setTime(date.getTime() + 14*24*60*60*1000);\n newInfoID += '; expires=' + date.toGMTString() + '; path=' + siteRoot;\n for (var i = 0, len = cookies.length; i < len; i++) {\n if (cookies[i].split('=')[0] == 'info_id') {\n infoIDExist = true;\n document.cookie = 'info_id=' + cookies[i].split('=')[1] + newInfoID;\n break;\n }\n }\n if (!infoIDExist) {\n document.cookie = 'info_id=' + newInfoID;\n }\n }\n };\n\n render() {\n if (!curNoteMsg || this.state.isClosed) {\n return null;\n }\n\n return (\n
\n

\n \n
\n );\n }\n}\n\nexport default SystemNotification;\n","class Group {\n constructor(object) {\n this.id= object.id;\n this.name = object.name;\n this.owner = object.owner;\n this.admins = object.admins || [];\n this.avatar_url = object.avatar_url;\n this.created_at = object.created_at;\n this.parent_group_id = object.parent_group_id;\n this.wiki_enabled = object.wiki_enabled;\n this.repos = object.repos || [];\n this.group_quota = object.group_quota;\n this.group_quota_usage = object.group_quota_usage;\n }\n}\n\nexport default Group;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { gettext, siteRoot, canAddRepo, canGenerateShareLink, canGenerateUploadLink, canInvitePeople, dtableWebServer, enableOCM, enableOCMViaWebdav } from '../utils/constants';\nimport { seafileAPI } from '../utils/seafile-api';\nimport { Utils } from '../utils/utils';\nimport toaster from './toast';\nimport Group from '../models/group';\n\nimport { canViewOrg, isDocs, isPro, isDBSqlite3, customNavItems } from '../utils/constants';\n\nconst propTypes = {\n currentTab: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n tabItemClick: PropTypes.func.isRequired,\n draftCounts: PropTypes.number,\n};\n\nclass MainSideNav extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n groupsExtended: false,\n sharedExtended: false,\n closeSideBar:false,\n groupItems: [],\n };\n\n this.listHeight = 24; //for caculate tabheight\n this.groupsHeight = 0;\n this.adminHeight = 0;\n }\n\n grpsExtend = () => {\n this.setState({\n groupsExtended: !this.state.groupsExtended,\n });\n this.loadGroups();\n };\n\n shExtend = () => {\n this.setState({\n sharedExtended: !this.state.sharedExtended,\n });\n };\n\n loadGroups = () => {\n let _this = this;\n seafileAPI.listGroups().then(res =>{\n let groupList = res.data.map(item => {\n let group = new Group(item);\n return group;\n });\n\n this.groupsHeight = (groupList.length + 1) * _this.listHeight;\n _this.setState({\n groupItems: groupList.sort((a, b) => {\n return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1;\n })\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n tabItemClick = (e, param, id) => {\n if (window.uploader &&\n window.uploader.isUploadProgressDialogShow &&\n window.uploader.totalProgress !== 100) {\n if (!window.confirm(gettext('A file is being uploaded. Are you sure you want to leave this page?'))) {\n e.preventDefault();\n return false;\n }\n window.uploader.isUploadProgressDialogShow = false;\n }\n this.props.tabItemClick(param, id);\n };\n\n onDTableClick = () => {\n let url = dtableWebServer;\n window.open(url);\n };\n\n getActiveClass = (tab) => {\n return this.props.currentTab === tab ? 'active' : '';\n };\n\n renderSharedGroups() {\n let style = {height: 0};\n if (this.state.groupsExtended) {\n style = {height: this.groupsHeight};\n }\n return (\n
    \n
  • \n this.tabItemClick(e, 'groups')}>\n #\n {gettext('All Groups')}\n \n
  • \n {this.state.groupItems.map(item => {\n return (\n
  • \n this.tabItemClick(e, item.name, item.id)}>\n #\n {item.name}\n \n
  • \n );\n })}\n
\n );\n }\n\n renderSharedAdmin() {\n let height = 0;\n if (this.state.sharedExtended) {\n if (!this.adminHeight) {\n this.adminHeight = 3 * this.listHeight;\n }\n height = this.adminHeight;\n }\n let style = {height: height};\n\n let linksNavItem = null;\n if (canGenerateShareLink) {\n linksNavItem = (\n
  • \n this.tabItemClick(e, 'share-admin-share-links')}>\n #\n {gettext('Links')}\n \n
  • \n );\n } else if (canGenerateUploadLink) {\n linksNavItem = (\n
  • \n this.tabItemClick(e, 'share-admin-upload-links')}>\n #\n {gettext('Links')}\n \n
  • \n );\n }\n return (\n
      \n {canAddRepo && (\n
    • \n this.tabItemClick(e, 'share-admin-libs')}>\n #\n {gettext('Libraries')}\n \n
    • \n )}\n
    • \n this.tabItemClick(e, 'share-admin-folders')}>\n #\n {gettext('Folders')}\n \n
    • \n {linksNavItem}\n
    \n );\n }\n\n renderCustomNavItems() {\n return (\n customNavItems.map((item, idx) => {\n return (\n
  • \n \n \n {item.desc}\n \n
  • \n );\n })\n );\n }\n\n render() {\n let showActivity = isDocs || isPro || !isDBSqlite3;\n return (\n
    \n
    \n

    {gettext('Files')}

    \n
      \n {canAddRepo && (\n
    • \n this.tabItemClick(e, 'my-libs')}>\n \n {gettext('My Libraries')}\n \n
    • \n )}\n
    • \n this.tabItemClick(e, 'shared-libs')}>\n \n {gettext('Shared with me')}\n \n
    • \n { canViewOrg &&\n
    • this.tabItemClick(e, 'org')}>\n \n \n {gettext('Shared with all')}\n \n
    • \n }\n
    • \n \n \n {gettext('Shared with groups')}\n \n \n {this.renderSharedGroups()}\n
    • \n {enableOCM &&\n
    • \n this.tabItemClick(e, 'shared-with-ocm')}>\n \n {gettext('Shared from other servers')}\n \n
    • \n }\n {enableOCMViaWebdav &&\n
    • \n this.tabItemClick(e, 'ocm-via-webdav')}>\n \n {gettext('Shared from other servers')}\n \n
    • \n }\n
    \n\n\n

    {gettext('Tools')}

    \n
      \n
    • \n this.tabItemClick(e, 'starred')}>\n \n {gettext('Favorites')}\n \n
    • \n {showActivity &&\n
    • \n this.tabItemClick(e, 'dashboard')}>\n \n {gettext('Activities')}\n \n
    • \n }\n
    • \n this.tabItemClick(e, 'published')}>\n \n {gettext('Published Libraries')}\n \n
    • \n {/*isDocs &&\n
    • this.tabItemClick(e, 'drafts')}>\n \n \n {gettext('Drafts')}\n {this.props.draftCounts > 0 && {this.props.draftCounts}}\n \n
    • \n */}\n
    • \n this.tabItemClick(e, 'linked-devices')}>\n \n {gettext('Linked Devices')}\n \n
    • \n {canInvitePeople &&\n
    • \n this.tabItemClick(e, 'invitations')}>\n \n {gettext('Invite Guest')}\n \n
    • \n }\n
    • \n \n \n {gettext('Share Admin')}\n \n \n {this.renderSharedAdmin()}\n
    • \n {customNavItems && this.renderCustomNavItems()}\n
    \n
    \n\n {dtableWebServer &&\n
    \n \n SeaTable\n \n
    \n }\n
    \n );\n }\n}\n\nMainSideNav.propTypes = propTypes;\n\nexport default MainSideNav;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalBody } from 'reactstrap';\nimport { gettext, lang, mediaUrl, logoPath, logoWidth, logoHeight, siteTitle, seafileVersion, additionalAboutDialogLinks, aboutDialogCustomHtml } from '../../utils/constants';\n\nconst propTypes = {\n onCloseAboutDialog: PropTypes.func.isRequired,\n};\n\nclass AboutDialog extends React.Component {\n\n renderExternalAboutLinks = () => {\n if (additionalAboutDialogLinks && (typeof additionalAboutDialogLinks) === 'object') {\n let keys = Object.keys(additionalAboutDialogLinks);\n return keys.map((key, index) => {\n return {key};\n });\n }\n return null;\n };\n\n render() {\n let href = lang === 'zh-cn' ? 'http://seafile.com/about/' : 'http://seafile.com/en/about/';\n const { onCloseAboutDialog: toggleDialog } = this.props;\n\n if (aboutDialogCustomHtml) {\n return (\n \n \n \n
    \n
    \n
    \n );\n } else {\n return (\n \n \n \n
    \n

    \"logo\"

    \n

    {gettext('Server Version: ')}{seafileVersion}
    © {(new Date()).getFullYear()} {gettext('Seafile')}

    \n

    {this.renderExternalAboutLinks()}

    \n

    {gettext('About Us')}

    \n
    \n
    \n
    \n );\n }\n }\n}\n\nAboutDialog.propTypes = propTypes;\n\nexport default AboutDialog;\n","import React, { Fragment } from 'react';\nimport { gettext, siteRoot, enableTC, sideNavFooterCustomHtml, additionalAppBottomLinks } from '../utils/constants';\nimport ModalPortal from './modal-portal';\nimport AboutDialog from './dialog/about-dialog';\n\nclass SideNavFooter extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isAboutDialogShow: false,\n };\n }\n\n onAboutDialogToggle = (e) => {\n e.preventDefault();\n this.setState({isAboutDialogShow: !this.state.isAboutDialogShow});\n };\n\n renderExternalAppLinks = () => {\n if (additionalAppBottomLinks && (typeof additionalAppBottomLinks) === 'object') {\n let keys = Object.keys(additionalAppBottomLinks);\n return keys.map((key, index) => {\n return {key};\n });\n }\n return null;\n };\n\n render() {\n\n if (sideNavFooterCustomHtml) {\n return (
    );\n }\n return (\n \n
    \n {gettext('Help')}\n {gettext('About')}\n {enableTC && {gettext('Terms')}}\n {this.renderExternalAppLinks()}\n \n {' '}\n {gettext('Clients')}\n \n
    \n {this.state.isAboutDialogShow && (\n \n \n \n )}\n
    \n );\n }\n}\n\nexport default SideNavFooter;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Logo from './logo';\nimport MainSideNav from './main-side-nav';\nimport SideNavFooter from './side-nav-footer';\n\nconst propTypes = {\n isSidePanelClosed: PropTypes.bool.isRequired,\n currentTab: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n onCloseSidePanel: PropTypes.func.isRequired,\n tabItemClick: PropTypes.func.isRequired,\n draftCounts: PropTypes.number,\n};\n\nclass SidePanel extends React.Component {\n\n render() {\n return (\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n );\n }\n}\n\nSidePanel.propTypes = propTypes;\n\nexport default SidePanel;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nconst propTypes = {\n children: PropTypes.object.isRequired,\n};\n\nclass MainPanel extends Component {\n\n render() {\n return (\n
    \n {this.props.children}\n
    \n );\n }\n}\n\nMainPanel.propTypes = propTypes;\n\nexport default MainPanel;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\n\nconst propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.array,\n PropTypes.object\n ]).isRequired,\n};\n\nclass DraftsView extends React.Component {\n render() {\n return (\n
    \n
    \n
    \n
    \n

    {gettext('Drafts')}

    \n
    \n
    \n {this.props.children}\n
    \n
    \n );\n }\n}\n\nDraftsView.propTypes = propTypes;\n\nexport default DraftsView;\n","import React from 'react';\nimport moment from 'moment';\nimport PropTypes from 'prop-types';\nimport { Dropdown, DropdownMenu, DropdownToggle, DropdownItem } from 'reactstrap';\nimport { gettext, siteRoot, lang } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nmoment.locale(lang);\nconst propTypes = {\n draft: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n onDeleteHandler: PropTypes.func.isRequired,\n onPublishHandler: PropTypes.func.isRequired,\n};\n\nclass DraftListItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isMenuIconShow: false,\n isItemMenuShow: false,\n highlight: false,\n };\n }\n\n onMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isMenuIconShow: true,\n highlight: true,\n });\n }\n };\n\n onMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isMenuIconShow: false,\n highlight: false,\n });\n }\n };\n\n onDropdownToggleClick = (e) => {\n e.preventDefault();\n this.toggleOperationMenu(e);\n };\n\n toggleOperationMenu = (e) => {\n e.stopPropagation();\n this.setState(\n {isItemMenuShow: !this.state.isItemMenuShow }, () => {\n if (this.state.isItemMenuShow) {\n this.props.onFreezedItem();\n } else {\n this.setState({\n highlight: false,\n isMenuIconShow: false,\n });\n this.props.onUnfreezedItem();\n }\n }\n );\n };\n\n onDeleteHandler = () => {\n this.props.onDeleteHandler(this.props.draft);\n };\n\n onPublishHandler = () => {\n this.props.onPublishHandler(this.props.draft);\n };\n\n render() {\n let draft = this.props.draft;\n let repoID = draft.origin_repo_id;\n let filePath = draft.draft_file_path;\n let fileName = Utils.getFileName(filePath);\n let draftUrl = siteRoot + 'drafts/' + draft.id + '/';\n let libraryUrl = siteRoot + 'library/' + repoID + '/' + encodeURIComponent(draft.repo_name) + '/' ;\n let localTime = moment.utc(draft.updated_at).toDate();\n localTime = moment(localTime).fromNow();\n\n let iconUrl = Utils.getFileIconUrl(fileName);\n return (\n \n \n \n {fileName}\n \n \n {draft.repo_name}\n \n {localTime}\n \n {this.state.isMenuIconShow && (\n \n \n \n {gettext('Delete')}\n {draft.status == 'open' &&\n {gettext('Publish')}\n }\n \n \n )}\n \n \n );\n }\n}\n\nDraftListItem.propTypes = propTypes;\n\nexport default DraftListItem;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport DraftListItem from './draft-list-item';\n\nconst propTypes = {\n draftList: PropTypes.array.isRequired,\n onDeleteHandler: PropTypes.func.isRequired,\n onPublishHandler: PropTypes.func.isRequired,\n};\n\nclass DraftListView extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false,\n };\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n render() {\n let drafts = this.props.draftList;\n return (\n \n \n \n \n \n \n \n \n \n \n \n { drafts && drafts.map((draft) => {\n return (\n \n );\n })}\n \n
    {/*img*/}{gettext('Name')}{gettext('Library')}{gettext('Last Update')}
    \n );\n }\n}\n\nDraftListView.propTypes = propTypes;\n\nexport default DraftListView;\n","import React, { Fragment } from 'react';\nimport { gettext } from '../../utils/constants';\nimport editUtilities from '../../utils/editor-utilities';\nimport { Utils } from '../../utils/utils';\nimport PropTypes from 'prop-types';\nimport toaster from '../../components/toast';\nimport EmptyTip from '../../components/empty-tip';\nimport Loading from '../../components/loading';\nimport DraftListView from '../../components/draft-list-view/draft-list-view';\n\nconst propTypes = {\n isLoadingDraft: PropTypes.bool.isRequired,\n updateDraftsList: PropTypes.func.isRequired,\n draftList: PropTypes.array.isRequired,\n getDrafts: PropTypes.func.isRequired,\n};\n\nclass DraftContent extends React.Component {\n\n componentDidMount() {\n this.props.getDrafts();\n }\n\n onDeleteHandler = (draft) => {\n // let draft = this.state.currentDraft;\n let draft_name = Utils.getFileName(draft.draft_file_path);\n editUtilities.deleteDraft(draft.id).then(res => {\n this.props.updateDraftsList(draft.id);\n let msg_s = gettext('Successfully deleted draft %(draft)s.');\n msg_s = msg_s.replace('%(draft)s', draft_name);\n toaster.success(msg_s);\n }).catch(() => {\n let msg_s = gettext('Failed to delete draft %(draft)s.');\n msg_s = msg_s.replace('%(draft)s', draft_name);\n toaster.danger(msg_s);\n });\n };\n\n onPublishHandler = (draft) => {\n // let draft = this.state.currentDraft;\n let draft_name = Utils.getFileName(draft.draft_file_path);\n editUtilities.publishDraft(draft.id).then(res => {\n this.props.updateDraftsList(draft.id);\n let msg_s = gettext('Successfully published draft %(draft)s.');\n msg_s = msg_s.replace('%(draft)s', draft_name);\n toaster.success(msg_s);\n }).catch(() => {\n let msg_s = gettext('Failed to publish draft %(draft)s.');\n msg_s = msg_s.replace('%(draft)s', draft_name);\n toaster.danger(msg_s);\n });\n };\n\n render() {\n return (\n
    \n {this.props.isLoadingDraft && }\n {!this.props.isLoadingDraft && (\n \n {this.props.draftList.length === 0 && (\n \n

    {gettext('No draft yet')}

    \n

    {gettext('Draft is a way to let you collaborate with others on files. You can create a draft from a file, edit the draft and then ask for a review. The original file will be updated only after the draft has been reviewed.')}

    \n
    \n )}\n {this.props.draftList.length !==0 && (\n \n )}\n
    \n )}\n
    \n );\n }\n}\n\nDraftContent.propTypes = propTypes;\n\nexport default DraftContent;\n","class Acticity {\n constructor(json) {\n this.repo_id = json.repo_id;\n this.repo_name = json.repo_name;\n this.obj_type = json.obj_type;\n this.commit_id = json.commit_id;\n this.path = json.path;\n this.name = json.name;\n this.author_email = json.author_email;\n this.author_name = json.author_name;\n this.author_contact_email = json.author_contact_email;\n this.avatar_url = json.avatar_url;\n this.time = json.time;\n this.op_type = json.op_type;\n this.createdFilesCount = 0;\n this.createdFilesList = [];\n if (json.op_type === 'clean-up-trash') {\n this.days = json.days;\n } else if (json.op_type === 'rename' && json.obj_type === 'repo') {\n this.old_repo_name = json.old_repo_name;\n } else if (json.op_type === 'move' && ['dir', 'file'].includes(json.obj_type)) {\n this.old_path = json.old_path;\n } else if (json.op_type === 'rename' && ['dir', 'file'].includes(json.obj_type)) {\n this.old_path = json.old_path;\n this.old_name = json.old_name;\n } else if (json.op_type === 'publish') {\n this.old_path = json.old_path;\n } else if (json.name.endsWith('(draft).md')) {\n this.draft_id = json.draft_id;\n }\n }\n}\n\nexport default Acticity;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Table } from 'reactstrap';\nimport { gettext, siteRoot, serviceURL } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n activity: PropTypes.object.isRequired,\n toggleCancel: PropTypes.func.isRequired,\n};\n\nclass ListCreatedFileDialog extends React.Component {\n\n toggle = (activity) => {\n this.props.toggleCancel(activity);\n };\n\n render() {\n let activity = this.props.activity;\n return (\n \n {gettext('Created Files')}\n \n \n \n \n \n \n \n \n \n {\n activity.createdFilesList.map((item, index) => {\n let fileURL = `${siteRoot}lib/${item.repo_id}/file${Utils.encodePath(item.path)}`;\n if (item.name.endsWith('(draft).md')) {\n fileURL = serviceURL + '/drafts/' + item.draft_id + '/';\n }\n let fileLink = {item.name};\n if (item.name.endsWith('(draft).md') && !item.draft_id) {\n fileLink = item.name;\n }\n return (\n \n \n \n \n );\n })\n }\n \n
    {gettext('Name')}{gettext('Time')}
    {fileLink}{moment(item.time).fromNow()}
    \n
    \n \n \n \n
    \n );\n }\n}\n\nListCreatedFileDialog.propTypes = propTypes;\n\nexport default ListCreatedFileDialog;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { gettext, siteRoot, serviceURL } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport ListCreatedFileDialog from '../../components/dialog/list-created-files-dialog';\nimport ModalPortal from '../../components/modal-portal';\n\nimport '../../css/files-activities.css';\n\nmoment.locale(window.app.config.lang);\n\nconst activityPropTypes = {\n item: PropTypes.object.isRequired,\n index: PropTypes.number.isRequired,\n items: PropTypes.array.isRequired,\n isDesktop: PropTypes.bool.isRequired,\n};\n\nclass ActivityItem extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isListCreatedFiles: false,\n };\n }\n\n onListCreatedFilesToggle = () => {\n this.setState({\n isListCreatedFiles: !this.state.isListCreatedFiles,\n });\n };\n\n render() {\n const isDesktop = this.props.isDesktop;\n let {item, index, items} = this.props;\n let op, details, moreDetails = false;\n let userProfileURL = `${siteRoot}profile/${encodeURIComponent(item.author_email)}/`;\n\n let libURL = siteRoot + 'library/' + item.repo_id + '/' + encodeURIComponent(item.repo_name) + '/';\n let libLink = {item.repo_name};\n let smallLibLink = {item.repo_name};\n\n if (item.obj_type == 'repo') {\n switch(item.op_type) {\n case 'create':\n op = gettext('Created library');\n details = libLink;\n break;\n case 'rename':\n op = gettext('Renamed library');\n details = {item.old_repo_name} => {libLink};\n break;\n case 'delete':\n op = gettext('Deleted library');\n details = item.repo_name;\n break;\n case 'recover':\n op = gettext('Restored library');\n details = libLink;\n break;\n case 'clean-up-trash':\n op = gettext('Cleaned trash');\n if (item.days == 0) {\n details = gettext('Removed all items from trash.');\n } else {\n details = gettext('Removed items older than {n} days from trash.').replace('{n}', item.days);\n }\n moreDetails = true;\n break;\n }\n } else if (item.obj_type == 'draft') {\n let fileURL = `${siteRoot}lib/${item.repo_id}/file${Utils.encodePath(item.path)}`;\n let fileLink = {item.name};\n op = gettext('Publish draft');\n details = fileLink;\n moreDetails = true;\n } else if (item.obj_type == 'files') {\n let fileURL = `${siteRoot}lib/${item.repo_id}/file${Utils.encodePath(item.path)}`;\n if (item.name.endsWith('(draft).md')) {\n fileURL = serviceURL + '/drafts/' + item.draft_id + '/';\n }\n let fileLink = `${item.name}`;\n if (item.name.endsWith('(draft).md') && !item.draft_id) {\n fileLink = item.name;\n }\n let fileCount = item.createdFilesCount - 1;\n let firstLine = gettext('{file} and {n} other files')\n .replace('{file}', fileLink)\n .replace('{n}', fileCount);\n op = gettext('Created {n} files').replace('{n}', item.createdFilesCount);\n details = (\n \n

    \n {isDesktop && }\n
    \n );\n moreDetails = true;\n } else if (item.obj_type == 'file') {\n const isDraft = item.name.endsWith('(draft).md');\n const fileURL = isDraft ? serviceURL + '/drafts/' + item.draft_id + '/' :\n `${siteRoot}lib/${item.repo_id}/file${Utils.encodePath(item.path)}`;\n let fileLink = {item.name};\n if (isDraft && !item.draft_id) {\n fileLink = item.name;\n }\n switch (item.op_type) {\n case 'create':\n op = isDraft ? gettext('Created draft') : gettext('Created file');\n details = fileLink;\n moreDetails = true;\n break;\n case 'delete':\n op = isDraft ? gettext('Deleted draft') : gettext('Deleted file');\n details = item.name;\n moreDetails = true;\n break;\n case 'recover':\n op = gettext('Restored file');\n details = fileLink;\n moreDetails = true;\n break;\n case 'rename':\n op = gettext('Renamed file');\n details = {item.old_name} => {fileLink};\n moreDetails = true;\n break;\n case 'move':\n // eslint-disable-next-line\n const filePathLink = {item.path};\n op = gettext('Moved file');\n details = {item.old_path} => {filePathLink};\n moreDetails = true;\n break;\n case 'edit': // update\n op = isDraft ? gettext('Updated draft') : gettext('Updated file');\n details = fileLink;\n moreDetails = true;\n break;\n }\n } else { // dir\n let dirURL = siteRoot + 'library/' + item.repo_id + '/' + encodeURIComponent(item.repo_name) + Utils.encodePath(item.path);\n let dirLink = {item.name};\n switch (item.op_type) {\n case 'create':\n op = gettext('Created folder');\n details = dirLink;\n moreDetails = true;\n break;\n case 'delete':\n op = gettext('Deleted folder');\n details = item.name;\n moreDetails = true;\n break;\n case 'recover':\n op = gettext('Restored folder');\n details = dirLink;\n moreDetails = true;\n break;\n case 'rename':\n op = gettext('Renamed folder');\n details = {item.old_name} => {dirLink};\n moreDetails = true;\n break;\n case 'move':\n // eslint-disable-next-line\n const dirPathLink = {item.path};\n op = gettext('Moved folder');\n details = {item.old_path} => {dirPathLink};\n moreDetails = true;\n break;\n }\n }\n\n let isShowDate = true;\n if (index > 0) {\n let lastEventTime = items[index - 1].time;\n isShowDate = moment(item.time).isSame(lastEventTime, 'day') ? false : true;\n }\n\n return (\n \n {isShowDate &&\n \n {moment(item.time).format('YYYY-MM-DD')}\n \n }\n {isDesktop ? (\n \n \n \"\"\n \n \n {item.author_name}\n \n {op}\n \n {details}\n {moreDetails &&
    }\n {moreDetails && smallLibLink}\n \n \n \n \n \n ) : (\n \n \n \"\"\n \n \n {item.author_name}\n

    {op}

    \n {details}\n \n \n \n \n \n {moreDetails &&
    }\n {moreDetails && libLink}\n \n \n )}\n {this.state.isListCreatedFiles &&\n \n \n \n }\n
    \n );\n }\n}\n\nActivityItem.propTypes = activityPropTypes;\n\nexport default ActivityItem;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport EmptyTip from '../../components/empty-tip';\nimport ActivityItem from './activity-item';\n\nimport '../../css/files-activities.css';\n\nmoment.locale(window.app.config.lang);\n\nconst contentPropTypes = {\n isLoadingMore: PropTypes.bool.isRequired,\n items: PropTypes.array.isRequired,\n};\n\nclass FileActivitiesContent extends Component {\n\n render() {\n const isDesktop = Utils.isDesktop();\n let { items, isLoadingMore } = this.props;\n\n if (!items.length) {\n return

    {gettext('No more activities')}

    ;\n }\n\n const desktopThead = (\n \n \n {/* avatar */}\n {gettext('User')}\n {gettext('Operation')}\n {gettext('File')} / {gettext('Library')}\n {gettext('Time')}\n \n \n );\n\n const mobileThead = (\n \n \n \n \n \n \n \n );\n\n return (\n \n \n {isDesktop ? desktopThead : mobileThead}\n \n {items.map((item, index) => {\n return (\n \n );\n })}\n \n
    \n {isLoadingMore ? : ''}\n
    \n );\n }\n}\n\nFileActivitiesContent.propTypes = contentPropTypes;\n\nexport default FileActivitiesContent;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Input } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\n\nimport '../../css/files-activities.css';\n\nconst propTypes = {\n availableUsers: PropTypes.array.isRequired,\n currentSelectedUsers: PropTypes.array.isRequired,\n setTargetUsers: PropTypes.func.isRequired,\n toggleSelectUser: PropTypes.func.isRequired\n};\n\nclass UserSelector extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isPopoverOpen: false,\n query: ''\n };\n }\n\n componentDidMount() {\n document.addEventListener('click', this.handleOutsideClick);\n }\n\n componentWillUnmount() {\n document.removeEventListener('click', this.handleOutsideClick);\n }\n\n handleOutsideClick = (e) => {\n const { isPopoverOpen } = this.state;\n if (isPopoverOpen && !this.userSelector.contains(e.target)) {\n this.togglePopover();\n }\n };\n\n togglePopover = () => {\n this.setState({\n isPopoverOpen: !this.state.isPopoverOpen\n }, () => {\n if (!this.state.isPopoverOpen) {\n const { availableUsers } = this.props;\n const selectedUsers = availableUsers.filter(item => item.isSelected);\n this.props.setTargetUsers(selectedUsers);\n }\n });\n };\n\n onToggleClick = (e) => {\n e.stopPropagation();\n this.togglePopover();\n };\n\n onQueryChange = (e) => {\n this.setState({\n query: e.target.value\n });\n };\n\n toggleSelectItem = (e, targetItem) => {\n e.stopPropagation();\n this.props.toggleSelectUser(targetItem);\n };\n\n render() {\n const { isPopoverOpen, query } = this.state;\n const { currentSelectedUsers, availableUsers } = this.props;\n const selectedUsers = availableUsers.filter(item => item.isSelected);\n const filteredAvailableUsers = query.trim() ? availableUsers.filter(item => item.email.indexOf(query.trim()) != -1) : availableUsers;\n return (\n
    \n \n {currentSelectedUsers.length > 0 ? (\n <>\n {gettext('Modified by:')}\n {currentSelectedUsers.map(item => item.name).join(', ')}\n \n ) : gettext('Modified by')}\n \n \n {isPopoverOpen && (\n
    this.userSelector = ref}>\n
      \n {selectedUsers.map((item, index) => {\n return (\n
    • \n \"\"\n {item.name}\n {this.toggleSelectItem(e, item);}}>\n
    • \n );\n })}\n
    \n
    \n \n
    \n
      \n {filteredAvailableUsers.map((item, index) => {\n return (\n
    • {this.toggleSelectItem(e, item);}}>\n
      \n \"\"\n {item.name}\n
      \n {item.isSelected && }\n
    • \n );\n })}\n
    \n
    \n )}\n
    \n );\n }\n}\n\nUserSelector.propTypes = propTypes;\n\nexport default UserSelector;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { gettext, siteRoot, username } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport Loading from '../../components/loading';\nimport Activity from '../../models/activity';\nimport FileActivitiesContent from './content';\nimport UserSelector from './user-selector';\n\nimport '../../css/files-activities.css';\n\nmoment.locale(window.app.config.lang);\n\nconst propTypes = {\n onlyMine: PropTypes.bool\n};\n\nclass FilesActivities extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n errorMsg: '',\n isFirstLoading: true,\n isLoadingMore: false,\n currentPage: 1,\n hasMore: true,\n allItems: [],\n items: [],\n availableUsers: [],\n targetUsers: []\n };\n this.avatarSize = 72;\n this.curPathList = [];\n this.oldPathList = [];\n this.availableUserEmails = new Set();\n }\n\n componentDidMount() {\n let { currentPage, availableUsers } = this.state;\n seafileAPI.listActivities(currentPage, this.avatarSize).then(res => {\n // {\"events\":[...]}\n let events = this.mergePublishEvents(res.data.events);\n events = this.mergeFileCreateEvents(events);\n events.forEach(item => {\n if (!this.availableUserEmails.has(item.author_email)) {\n this.availableUserEmails.add(item.author_email);\n availableUsers.push({\n email: item.author_email,\n name: item.author_name,\n avatar_url: item.avatar_url,\n isSelected: false\n });\n }\n });\n this.setState({\n allItems: events,\n items: this.filterEvents(events),\n availableUsers: availableUsers,\n currentPage: currentPage + 1,\n isFirstLoading: false,\n hasMore: true,\n });\n if (this.state.items.length < 25) {\n this.getMore();\n }\n }).catch(error => {\n this.setState({\n isFirstLoading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n mergePublishEvents = (events) => {\n events.forEach((item) => {\n if (item.op_type === 'publish') {\n this.curPathList.push(item.path);\n this.oldPathList.push(item.old_path);\n }\n });\n let actuallyEvents = [];\n for (var i = 0; i < events.length; i++) {\n if (events[i].obj_type === 'file') {\n if (events[i].op_type === 'delete' && this.oldPathList.includes(events[i].path)) {\n this.oldPathList.splice(this.oldPathList.indexOf(events[i].path), 1);\n } else if (events[i].op_type === 'edit' && this.curPathList.includes(events[i].path)) {\n this.curPathList.splice(this.curPathList.indexOf(events[i].path), 1);\n } else if (events[i].op_type === 'rename' && this.oldPathList.includes(events[i].old_path)) {\n this.oldPathList.splice(this.oldPathList.indexOf(events[i].old_path), 1);\n } else {\n actuallyEvents.push(events[i]);\n }\n } else {\n actuallyEvents.push(events[i]);\n }\n }\n return actuallyEvents;\n };\n\n mergeFileCreateEvents = (events) => {\n let actuallyEvents = [];\n let multiFilesActivity = null;\n for (var i = 0; i < events.length; i++) {\n let isFulfilCondition = events[i].obj_type === 'file' &&\n events[i].op_type === 'create' &&\n events[i + 1] &&\n events[i + 1].obj_type === 'file' &&\n events[i + 1].op_type === 'create' &&\n events[i + 1].repo_name === events[i].repo_name &&\n events[i + 1].author_email === events[i].author_email;\n if (multiFilesActivity != null) {\n multiFilesActivity.createdFilesCount++;\n multiFilesActivity.createdFilesList.push(events[i]);\n if (isFulfilCondition) {\n continue;\n } else {\n actuallyEvents.push(multiFilesActivity);\n multiFilesActivity = null;\n }\n } else {\n if (isFulfilCondition) {\n multiFilesActivity = new Activity(events[i]);\n multiFilesActivity.obj_type = 'files';\n multiFilesActivity.createdFilesCount++;\n multiFilesActivity.createdFilesList.push(events[i]);\n } else {\n actuallyEvents.push(events[i]);\n }\n }\n }\n return actuallyEvents;\n };\n\n getMore() {\n const { currentPage, availableUsers, targetUsers } = this.state;\n seafileAPI.listActivities(currentPage, this.avatarSize).then(res => {\n // {\"events\":[...]}\n let events = this.mergePublishEvents(res.data.events);\n events = this.mergeFileCreateEvents(events);\n events.forEach(item => {\n if (!this.availableUserEmails.has(item.author_email)) {\n this.availableUserEmails.add(item.author_email);\n availableUsers.push({\n email: item.author_email,\n name: item.author_name,\n avatar_url: item.avatar_url,\n isSelected: false\n });\n }\n });\n const filteredEvents = this.filterEvents(events);\n this.setState({\n allItems: [...this.state.allItems, ...events],\n items: [...this.state.items, ...filteredEvents],\n availableUsers: availableUsers,\n currentPage: currentPage + 1,\n isLoadingMore: false,\n hasMore: res.data.events.length === 0 ? false : true\n });\n if (this.state.items.length < 25 && this.state.hasMore) {\n if (!(targetUsers.length && currentPage == 100)) {\n this.getMore();\n }\n }\n }).catch(error => {\n this.setState({\n isLoadingMore: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n filterEvents = (events) => {\n const { onlyMine } = this.props;\n const { targetUsers } = this.state;\n\n if (onlyMine) {\n return events.filter(item => item.author_email == username);\n } else if (targetUsers.length) {\n return events.filter(item => targetUsers.map(item => item.email).indexOf(item.author_email) != -1);\n } else {\n return events;\n }\n };\n\n setTargetUsers = (selectedUsers) => {\n this.setState({\n targetUsers: selectedUsers\n }, () => {\n const items = this.filterEvents(this.state.allItems);\n this.setState({\n items: items\n }, () => {\n if (items.length < 25 && this.state.hasMore) {\n this.getMore();\n }\n });\n });\n };\n\n toggleSelectUser = (user) => {\n const { availableUsers } = this.state;\n this.setState({\n availableUsers: availableUsers.map(item => {\n if (item.email == user.email) {\n item.isSelected = !user.isSelected;\n }\n return item;\n })\n });\n };\n\n handleScroll = (event) => {\n if (!this.state.isLoadingMore && this.state.hasMore) {\n const clientHeight = event.target.clientHeight;\n const scrollHeight = event.target.scrollHeight;\n const scrollTop = event.target.scrollTop;\n const isBottom = (clientHeight + scrollTop + 1 >= scrollHeight);\n if (isBottom) { // scroll to the bottom\n this.setState({isLoadingMore: true}, () => {\n this.getMore();\n });\n }\n }\n };\n\n render() {\n const { onlyMine } = this.props;\n const { targetUsers, availableUsers } = this.state;\n return (\n
    \n
    \n
    \n
      \n
    • \n {gettext('All Activities')}\n
    • \n
    • \n {gettext('My Activities')}\n
    • \n
    \n
    \n
    \n {this.state.isFirstLoading && }\n {(!this.state.isFirstLoading && this.state.errorMsg) &&\n

    {this.state.errorMsg}

    \n }\n {!this.state.isFirstLoading && (\n \n {!onlyMine && (\n \n )}\n \n \n )\n }\n
    \n
    \n
    \n );\n }\n}\n\nFilesActivities.propTypes = propTypes;\n\nexport default FilesActivities;\n","import React, { Component } from 'react';\nimport FilesActivities from './files-activities';\n\nclass MyFilesActivities extends Component {\n\n render() {\n return ;\n }\n}\n\nexport default MyFilesActivities;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown, DropdownToggle, DropdownItem } from 'reactstrap';\nimport { Link, navigate } from '@gatsbyjs/reach-router';\nimport moment from 'moment';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport { gettext, siteRoot, enableVideoThumbnail } from '../../utils/constants';\nimport EmptyTip from '../../components/empty-tip';\nimport Loading from '../../components/loading';\nimport toaster from '../../components/toast';\n\nclass Content extends Component {\n\n render() {\n const {loading, errorMsg, items} = this.props.data;\n\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No favorites')}

    \n

    {gettext('You have not added any libraries, folders or files to your favorites yet. A favorite gives you quick access to your most frequently used objects. You can add a library, folder or file to your favorites by clicking the star to the left of its name.')}

    \n
    \n );\n\n const desktopThead = (\n \n \n \n {gettext('Name')}\n {gettext('Library')}\n {gettext('Last Update')}\n \n \n \n );\n const mobileThead = (\n \n \n \n \n \n \n \n );\n\n const isDesktop = Utils.isDesktop();\n return items.length ? (\n \n {isDesktop ? desktopThead : mobileThead}\n \n
    \n ) : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n data: PropTypes.object,\n items: PropTypes.array,\n};\n\nclass TableBody extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n items: this.props.items\n };\n }\n\n componentDidMount() {\n this.getThumbnails();\n }\n\n getThumbnails() {\n let items = this.state.items.filter((item) => {\n return (Utils.imageCheck(item.obj_name) || (enableVideoThumbnail && Utils.videoCheck(item.obj_name))) && !item.repo_encrypted;\n });\n if (items.length == 0) {\n return ;\n }\n\n const len = items.length;\n const thumbnailSize = 48;\n const _this = this;\n let getThumbnail = function(i) {\n const curItem = items[i];\n seafileAPI.createThumbnail(curItem.repo_id, curItem.path, thumbnailSize).then((res) => {\n curItem.encoded_thumbnail_src = res.data.encoded_thumbnail_src;\n }).catch((error) => {\n // do nothing\n }).then(() => {\n if (i < len - 1) {\n getThumbnail(++i);\n } else {\n // when done, `setState()`\n _this.setState({\n items: _this.state.items\n });\n }\n });\n };\n getThumbnail(0);\n }\n\n render() {\n\n let listItems = this.state.items.map(function(item, index) {\n\n if (item.path === '/') {\n item.item_icon_url = Utils.getDefaultLibIconUrl(false);\n } else {\n item.item_icon_url = item.is_dir ? Utils.getFolderIconUrl(false) : Utils.getFileIconUrl(item.obj_name);\n }\n\n item.encoded_path = Utils.encodePath(item.path);\n\n item.thumbnail_url = item.encoded_thumbnail_src ? `${siteRoot}${item.encoded_thumbnail_src}` : '';\n item.dirent_view_url = item.is_dir ? `${siteRoot}library/${item.repo_id}/${item.repo_name}${item.encoded_path}` : `${siteRoot}lib/${item.repo_id}/file${item.encoded_path}`;\n // item is folder or file\n if (item.encoded_path !== '/') {\n item.dirent_view_url = item.dirent_view_url.replace(/\\/+$/, '');\n }\n\n item.mtime_relative = moment(item.mtime).fromNow();\n\n\n return ;\n }, this);\n\n return (\n {listItems}\n );\n }\n}\n\nTableBody.propTypes = {\n data: PropTypes.object,\n items: PropTypes.array,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n showOpIcon: false,\n unstarred: false,\n isOpMenuOpen: false // for mobile\n };\n }\n\n toggleOpMenu = () => {\n this.setState({\n isOpMenuOpen: !this.state.isOpMenuOpen\n });\n };\n\n handleMouseOver = () => {\n this.setState({\n showOpIcon: true\n });\n };\n\n handleMouseOut = () => {\n this.setState({\n showOpIcon: false\n });\n };\n\n unstar = (e) => {\n e.preventDefault();\n\n const data = this.props.data;\n seafileAPI.unstarItem(data.repo_id, data.path).then((res) => {\n this.setState({unstarred: true});\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n visitItem = () => {\n const data = this.props.data;\n if (data.is_dir) {\n navigate(data.dirent_view_url);\n } else {\n window.open(data.dirent_view_url);\n }\n };\n\n render() {\n\n if (this.state.unstarred) {\n return null;\n }\n\n const data = this.props.data;\n\n let opClasses = 'sf2-icon-x3 unstar action-icon';\n opClasses += this.state.showOpIcon ? '' : ' invisible';\n const linkUrl = data.dirent_view_url;\n\n const desktopItem = (\n \n \n {\n data.thumbnail_url ?\n \"\" :\n {gettext('icon')}\n }\n \n \n { data.is_dir ?\n {data.obj_name} :\n {data.obj_name}\n }\n \n {data.repo_name}\n \n \n \n \n \n );\n\n const mobileItem = (\n \n \n {\n data.thumbnail_url ?\n \"\" :\n {gettext('icon')}\n }\n \n \n { data.is_dir ?\n {data.obj_name} :\n {data.obj_name}\n }\n
    \n {data.repo_name}\n \n \n \n \n \n
    \n
    \n
    \n {gettext('Unstar')}\n
    \n
    \n
    \n \n \n );\n\n return Utils.isDesktop() ? desktopItem : mobileItem;\n }\n}\n\nItem.propTypes = {\n data: PropTypes.object,\n items: PropTypes.array,\n};\n\nclass Starred extends Component {\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n items: []\n };\n }\n\n componentDidMount() {\n seafileAPI.listStarredItems().then((res) => {\n this.setState({\n loading: false,\n items: res.data.starred_item_list\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n render() {\n return (\n
    \n
    \n
    \n

    {gettext('Favorites')}

    \n
    \n
    \n \n
    \n
    \n
    \n );\n }\n}\n\nexport default Starred;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button, FormGroup, Label, Input } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\n\nconst propTypes = {\n executeOperation: PropTypes.func.isRequired,\n toggleDialog: PropTypes.func.isRequired\n};\n\nclass ConfirmUnlinkDevice extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isChecked: false\n };\n }\n\n toggle = () => {\n this.props.toggleDialog();\n };\n\n executeOperation = () => {\n this.toggle();\n this.props.executeOperation(this.state.isChecked);\n };\n\n onInputChange = (e) => {\n this.setState({\n isChecked: e.target.checked\n });\n };\n\n render() {\n return (\n \n {gettext('Unlink device')}\n \n

    {gettext('Are you sure you want to unlink this device?')}

    \n \n \n \n
    \n \n \n \n \n
    \n );\n }\n}\n\nConfirmUnlinkDevice.propTypes = propTypes;\n\nexport default ConfirmUnlinkDevice;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown, DropdownToggle, DropdownItem } from 'reactstrap';\nimport moment from 'moment';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { gettext } from '../../utils/constants';\nimport toaster from '../../components/toast';\nimport EmptyTip from '../../components/empty-tip';\nimport ConfirmUnlinkDeviceDialog from '../../components/dialog/confirm-unlink-device';\nimport { Utils } from '../../utils/utils';\n\nclass Content extends Component {\n\n render() {\n const {loading, errorMsg, items} = this.props.data;\n\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No linked devices')}

    \n

    {gettext('You have not accessed your files with any client (desktop or mobile) yet. Configure clients on your devices to access your data more comfortably.')}

    \n
    \n );\n\n const desktopThead = (\n \n \n {gettext('Platform')}\n {gettext('Device Name')}\n {gettext('IP')}\n {gettext('Last Access')}\n \n \n \n );\n const mobileThead = (\n \n \n \n \n \n \n );\n\n const isDesktop = Utils.isDesktop();\n return items.length ? (\n \n {isDesktop ? desktopThead : mobileThead}\n \n {items.map((item, index) => {\n return ;\n })}\n \n
    \n ): emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n data: PropTypes.object.isRequired,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpMenuOpen: false, // for mobile\n isOpIconShown: false,\n unlinked: false,\n isConfirmUnlinkDialogOpen: false\n };\n }\n\n toggleOpMenu = () => {\n this.setState({\n isOpMenuOpen: !this.state.isOpMenuOpen\n });\n };\n\n handleMouseOver = () => {\n this.setState({\n isOpIconShown: true\n });\n };\n\n handleMouseOut = () => {\n this.setState({\n isOpIconShown: false\n });\n };\n\n toggleDialog = () => {\n this.setState({\n isConfirmUnlinkDialogOpen: !this.state.isConfirmUnlinkDialogOpen\n });\n };\n\n handleClick = (e) => {\n e.preventDefault();\n\n const data = this.props.data;\n if (data.is_desktop_client) {\n this.toggleDialog();\n } else {\n const wipeDevice = true;\n this.unlinkDevice(wipeDevice);\n }\n };\n\n unlinkDevice = (wipeDevice) => {\n const data = this.props.data;\n seafileAPI.unlinkDevice(data.platform, data.device_id, wipeDevice).then((res) => {\n this.setState({\n unlinked: true\n });\n let msg = gettext('Successfully unlinked %(name)s.');\n msg = msg.replace('%(name)s', data.device_name);\n toaster.success(msg);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n if (this.state.unlinked) {\n return null;\n }\n\n const data = this.props.data;\n\n let opClasses = 'sf2-icon-delete unlink-device action-icon';\n opClasses += this.state.isOpIconShown ? '' : ' invisible';\n\n const desktopItem = (\n \n {data.platform}\n {data.device_name}\n {data.last_login_ip}\n {moment(data.last_accessed).fromNow()}\n \n \n \n \n );\n\n const mobileItem = (\n \n \n {data.device_name}
    \n {data.last_login_ip}\n {moment(data.last_accessed).fromNow()}\n {data.platform}\n \n \n \n \n
    \n
    \n
    \n {gettext('Unlink')}\n
    \n
    \n
    \n \n \n );\n\n return (\n \n {this.props.isDesktop ? desktopItem : mobileItem}\n {this.state.isConfirmUnlinkDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n isDesktop: PropTypes.bool.isRequired,\n data: PropTypes.object.isRequired,\n};\n\nclass LinkedDevices extends Component {\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n items: []\n };\n }\n\n componentDidMount() {\n seafileAPI.listLinkedDevices().then((res) => {\n this.setState({\n loading: false,\n items: res.data\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n render() {\n return (\n
    \n
    \n
    \n

    {gettext('Linked Devices')}

    \n
    \n
    \n \n
    \n
    \n
    \n );\n }\n}\n\nexport default LinkedDevices;\n","class SharedRepoInfo {\n\n constructor(object) {\n this.repo_id = object.repo_id;\n this.repo_name = object.repo_name;\n this.share_type = object.share_type;\n this.share_permission = object.share_permission;\n this.share_permission_name = object.share_permission_name;\n this.modifier_name = object.modifier_name;\n this.modifier_email = object.modifier_email;\n this.modifier_contact_email = object.modifier_contact_email;\n this.encrypted = object.encrypted;\n if (this.share_type === 'personal') {\n this.is_admin = object.is_admin;\n this.user_name = object.user_name;\n this.user_email = object.user_email;\n this.contact_email = object.contact_email;\n } else if (this.share_type === 'group') {\n this.is_admin = object.is_admin;\n this.group_id = object.group_id;\n this.group_name = object.group_name;\n }\n }\n\n}\n\nexport default SharedRepoInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalBody } from 'reactstrap';\nimport { Utils } from '../../utils/utils';\nimport CustomPermission from '../../models/custom-permission';\nimport Loading from '../loading';\nimport toaster from '../toast';\nimport { seafileAPI } from '../../utils/seafile-api';\n\nconst propTypes = {\n repoID: PropTypes.string,\n currentPerm: PropTypes.string.isRequired,\n permissions: PropTypes.array.isRequired,\n changePerm: PropTypes.func.isRequired,\n toggleDialog: PropTypes.func.isRequired\n};\n\nclass PermSelect extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n isLoading: true,\n currentOption: this.props.currentPerm,\n customPermissions: []\n };\n\n this.customPermissions = null;\n }\n\n componentDidMount() {\n if (this.props.repoID) {\n this.listCustomPermissions();\n } else {\n this.setState({isLoading: false});\n }\n }\n\n listCustomPermissions = () => {\n const { repoID } = this.props;\n seafileAPI.listCustomPermissions(repoID).then(res => {\n const { permission_list: permissions } = res.data;\n const customPermissions = permissions.map(item => new CustomPermission(item));\n this.setState({\n isLoading: false,\n customPermissions: customPermissions\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n this.setState({isLoading: false});\n });\n };\n\n switchOption = (e) => {\n if (!e.target.checked) {\n return;\n }\n\n const currentOption = e.target.value;\n this.setState({\n currentOption: currentOption\n });\n\n this.props.changePerm(currentOption);\n this.props.toggleDialog();\n };\n\n translatePermission = (permission) => {\n let value = Utils.sharePerms(permission);\n if (!value) {\n const { customPermissions } = this.state;\n const item = customPermissions.find(item => item.id + '' === permission);\n value = item && item.name;\n }\n return value;\n };\n\n translateExplanation = (explanation) => {\n let value = Utils.sharePermsExplanation(explanation);\n if (!value) {\n const { customPermissions } = this.state;\n const item = customPermissions.find(item => item.id + '' === explanation);\n value = item && item.description;\n }\n return value;\n };\n\n getPermissions = () => {\n const { permissions } = this.props;\n let newPermissions = permissions.slice();\n const { customPermissions } = this.state;\n if (!this.customPermissions) {\n if (customPermissions.length > 0) {\n customPermissions.forEach(item => {\n newPermissions.push(item.id + '');\n });\n }\n this.customPermissions = newPermissions;\n }\n return this.customPermissions;\n };\n\n\n render() {\n const { isLoading, currentOption } = this.state;\n let permissions = [];\n if (!isLoading) {\n permissions = this.getPermissions();\n }\n\n return (\n \n \n {isLoading && }\n {!isLoading && permissions.map((item, index) => {\n return (\n
    \n \n \n
    \n );\n })}\n
    \n
    \n );\n }\n}\n\nPermSelect.propTypes = propTypes;\n\nexport default PermSelect;\n","import React, { Fragment, Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { Dropdown, DropdownToggle, DropdownItem } from 'reactstrap';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { gettext, siteRoot, isPro } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../../components/toast';\nimport EmptyTip from '../../components/empty-tip';\nimport SharePermissionEditor from '../../components/select-editor/share-permission-editor';\nimport SharedRepoInfo from '../../models/shared-repo-info';\nimport PermSelect from '../../components/dialog/perm-select';\n\nclass Content extends Component {\n\n sortByName = (e) => {\n e.preventDefault();\n const sortBy = 'name';\n const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';\n this.props.sortItems(sortBy, sortOrder);\n };\n\n render() {\n const { loading, errorMsg, items, sortBy, sortOrder } = this.props;\n\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No libraries shared')}

    \n

    {gettext('You have not shared any libraries with other users yet. You can share a library with other users by clicking the share icon to the right of a library\\'s name in \"My Libraries\".')}

    \n
    \n );\n\n // sort\n const sortByName = sortBy == 'name';\n const sortIcon = sortOrder == 'asc' ? : ;\n\n const isDesktop = Utils.isDesktop();\n const table = (\n \n \n {isDesktop ? (\n \n \n \n \n \n \n \n ) : (\n \n \n \n \n \n )}\n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {/*icon*/}{gettext('Name')} {sortByName && sortIcon}{gettext('Share To')}{gettext('Permission')}
    \n );\n\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n sortItems: PropTypes.func.isRequired,\n sortBy: PropTypes.string.isRequired,\n sortOrder: PropTypes.string.isRequired,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n\n let item = this.props.item;\n this.state = {\n share_permission: item.share_permission,\n share_permission_name: item.share_permission_name,\n is_admin: item.is_admin,\n isOpIconShown: false,\n isOpMenuOpen: false, // for mobile\n isPermSelectDialogOpen: false, // for mobile\n unshared: false,\n isShowPermEditor: false,\n };\n let permissions = ['rw', 'r'];\n this.permissions = permissions;\n this.showAdmin = isPro && (item.share_type !== 'public');\n if (this.showAdmin) {\n permissions.push('admin');\n }\n if (isPro) {\n permissions.push('cloud-edit', 'preview');\n }\n }\n\n toggleOpMenu = () => {\n this.setState({\n isOpMenuOpen: !this.state.isOpMenuOpen\n });\n };\n\n togglePermSelectDialog = () => {\n this.setState({\n isPermSelectDialogOpen: !this.state.isPermSelectDialogOpen\n });\n };\n\n onMouseEnter = () => {\n this.setState({isOpIconShown: true});\n };\n\n onMouseLeave = () => {\n this.setState({isOpIconShown: false});\n };\n\n changePerm = (permission) => {\n const item = this.props.item;\n const share_type = item.share_type;\n let options = {\n 'share_type': share_type,\n 'permission': permission\n };\n if (share_type == 'personal') {\n options.user = item.user_email;\n } else if (share_type == 'group') {\n options.group_id = item.group_id;\n }\n\n seafileAPI.updateRepoSharePerm(item.repo_id, options).then(() => {\n this.setState({\n share_permission: permission == 'admin' ? 'rw' : permission,\n is_admin: permission == 'admin',\n });\n toaster.success(gettext('Successfully modified permission.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n unshare = (e) => {\n e.preventDefault();\n\n const item = this.props.item;\n const share_type = item.share_type;\n let options = {\n 'share_type': share_type\n };\n if (share_type == 'personal') {\n options.user = item.user_email;\n } else if (share_type == 'group') {\n options.group_id = item.group_id;\n }\n\n seafileAPI.unshareRepo(item.repo_id, options).then((res) => {\n this.setState({\n unshared: true\n });\n let message = gettext('Successfully unshared {name}').replace('{name}', item.repo_name);\n toaster.success(message);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster(errMessage);\n });\n };\n\n onEditPermission = (event) => {\n event.nativeEvent.stopImmediatePropagation();\n this.setState({isShowPermEditor: true});\n };\n\n render() {\n if (this.state.unshared) {\n return null;\n }\n\n let { share_permission, share_permission_name, is_admin, isOpIconShown, isPermSelectDialogOpen, isShowPermEditor } = this.state;\n let item = this.props.item;\n Object.assign(item, {\n share_permission: share_permission,\n is_admin: is_admin\n });\n\n let iconUrl = Utils.getLibIconUrl(item);\n let iconTitle = Utils.getLibIconTitle(item);\n let repoUrl = `${siteRoot}library/${item.repo_id}/${encodeURIComponent(item.repo_name)}/`;\n\n\n let shareTo;\n const shareType = item.share_type;\n if (shareType == 'personal') {\n shareTo = item.user_name;\n } else if (shareType == 'group') {\n shareTo = item.group_name;\n } else if (shareType == 'public') {\n shareTo = gettext('all members');\n }\n\n if (this.showAdmin && is_admin) {\n share_permission = 'admin';\n }\n\n // custom defined permission\n if (share_permission.startsWith('custom-')) {\n share_permission = share_permission.slice(7);\n }\n\n const desktopItem = (\n \n {iconTitle}\n {item.repo_name}\n \n {item.share_type == 'personal' ? {shareTo} : shareTo}\n \n \n {!isShowPermEditor && (\n
    \n {Utils.sharePerms(share_permission) || share_permission_name}\n {isOpIconShown && (\n \n \n )}\n
    \n )}\n {isShowPermEditor && (\n \n )}\n \n \n \n );\n\n const mobileItem = (\n \n \n {iconTitle}\n \n {item.repo_name}\n {Utils.sharePerms(share_permission)}\n
    \n {`${gettext('Share To:')} ${shareTo}`}\n \n \n \n \n
    \n
    \n
    \n {gettext('Permission')}\n {gettext('Unshare')}\n
    \n
    \n
    \n \n \n {isPermSelectDialogOpen && (\n \n )}\n
    \n );\n\n return this.props.isDesktop ? desktopItem : mobileItem;\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n isDesktop: PropTypes.bool.isRequired,\n};\n\nclass ShareAdminLibraries extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n items: [],\n sortBy: 'name', // 'name' or 'time'\n sortOrder: 'asc' // 'asc' or 'desc'\n };\n }\n\n componentDidMount() {\n seafileAPI.listSharedRepos().then((res) => {\n let items = res.data.map(item => {\n return new SharedRepoInfo(item);\n });\n this.setState({\n loading: false,\n items: Utils.sortRepos(items, this.state.sortBy, this.state.sortOrder)\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n sortItems = (sortBy, sortOrder) => {\n this.setState({\n sortBy: sortBy,\n sortOrder: sortOrder,\n items: Utils.sortRepos(this.state.items, sortBy, sortOrder)\n });\n };\n\n render() {\n return (\n
    \n
    \n
    \n

    {gettext('Libraries')}

    \n
    \n
    \n \n
    \n
    \n
    \n );\n }\n}\n\nexport default ShareAdminLibraries;\n","class SharedFolderInfo {\n\n constructor(object) {\n this.path = object.path;\n this.folder_name = object.folder_name;\n this.repo_id = object.repo_id;\n this.repo_name = object.repo_name;\n this.share_type = object.share_type;\n this.share_permission = object.share_permission;\n this.share_permission_name = object.share_permission_name;\n if (object.share_type === 'group') {\n this.group_id = object.group_id;\n this.group_name = object.group_name;\n } else {\n this.user_name = object.user_name;\n this.user_email = object.user_email;\n this.contact_email = object.contact_email;\n }\n }\n\n}\n\nexport default SharedFolderInfo;\n","import React, { Fragment, Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { Dropdown, DropdownToggle, DropdownItem } from 'reactstrap';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport { gettext, siteRoot, isPro } from '../../utils/constants';\nimport Loading from '../../components/loading';\nimport EmptyTip from '../../components/empty-tip';\nimport toaster from '../../components/toast';\nimport SharePermissionEditor from '../../components/select-editor/share-permission-editor';\nimport SharedFolderInfo from '../../models/shared-folder-info';\nimport PermSelect from '../../components/dialog/perm-select';\n\nclass Content extends Component {\n\n sortByName = (e) => {\n e.preventDefault();\n const sortBy = 'name';\n const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';\n this.props.sortItems(sortBy, sortOrder);\n };\n\n render() {\n const { loading, errorMsg, items, sortBy, sortOrder } = this.props;\n\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No folders shared')}

    \n

    {gettext('You have not shared any folders with other users yet. You can share a folder with other users by clicking the share icon to the right of a folder\\'s name.')}

    \n
    \n );\n\n // sort\n const sortByName = sortBy == 'name';\n const sortIcon = sortOrder == 'asc' ? : ;\n\n const isDesktop = Utils.isDesktop();\n const table = (\n \n \n {isDesktop ? (\n \n \n \n \n \n \n \n ) : (\n \n \n \n \n \n )}\n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {/*icon*/}{gettext('Name')} {sortByName && sortIcon}{gettext('Share To')}{gettext('Permission')}
    \n );\n\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n sortItems: PropTypes.func.isRequired,\n sortBy: PropTypes.string.isRequired,\n sortOrder: PropTypes.string.isRequired,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n share_permission: this.props.item.share_permission,\n share_permission_name: this.props.item.share_permission_name,\n isOpIconShown: false,\n isOpMenuOpen: false, // for mobile\n isPermSelectDialogOpen: false, // for mobile\n unshared: false,\n isShowPermEditor: false,\n };\n\n this.permissions = ['rw', 'r'];\n if (isPro) {\n this.permissions.push('cloud-edit', 'preview');\n }\n }\n\n toggleOpMenu = () => {\n this.setState({\n isOpMenuOpen: !this.state.isOpMenuOpen\n });\n };\n\n togglePermSelectDialog = () => {\n this.setState({\n isPermSelectDialogOpen: !this.state.isPermSelectDialogOpen\n });\n };\n\n onMouseEnter = () => {\n this.setState({isOpIconShown: true});\n };\n\n onMouseLeave = () => {\n this.setState({isOpIconShown: false});\n };\n\n unshare = (e) => {\n e.preventDefault();\n\n const item = this.props.item;\n let options = {\n 'p': item.path\n };\n if (item.share_type == 'personal') {\n Object.assign(options, {\n 'share_type': 'user',\n 'username': item.user_email\n });\n } else {\n Object.assign(options, {\n 'share_type': item.share_type, // 'group'\n 'group_id': item.group_id\n });\n }\n\n seafileAPI.unshareFolder(item.repo_id, options).then((res) => {\n this.setState({\n unshared: true\n });\n let message = gettext('Successfully unshared {name}').replace('{name}', item.folder_name);\n toaster.success(message);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster(errMessage);\n });\n };\n\n changePerm = (permission) => {\n const item = this.props.item;\n const postData = {\n 'permission': permission\n };\n let options = {\n 'p': item.path\n };\n if (item.share_type == 'personal') {\n Object.assign(options, {\n 'share_type': 'user',\n 'username': item.user_email\n });\n } else {\n Object.assign(options, {\n 'share_type': item.share_type, // 'group'\n 'group_id': item.group_id\n });\n }\n\n seafileAPI.updateFolderSharePerm(item.repo_id, postData, options).then((res) => {\n this.setState({share_permission: permission});\n toaster.success(gettext('Successfully modified permission.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onEditPermission = (event) => {\n event.nativeEvent.stopImmediatePropagation();\n this.setState({isShowPermEditor: true});\n };\n\n render() {\n if (this.state.unshared) {\n return null;\n }\n\n const item = this.props.item;\n let { share_permission, share_permission_name, isOpIconShown, isPermSelectDialogOpen, isShowPermEditor } = this.state;\n\n let is_readonly = false;\n if (share_permission == 'r' || share_permission == 'preview') {\n is_readonly = true;\n }\n let iconUrl = Utils.getFolderIconUrl(is_readonly);\n let iconTitle = Utils.getFolderIconTitle({\n 'permission': share_permission\n });\n let folderUrl = `${siteRoot}library/${item.repo_id}/${encodeURIComponent(item.repo_name)}${Utils.encodePath(item.path)}`;\n\n // custom defined permission\n if (share_permission.startsWith('custom-')) {\n share_permission = share_permission.slice(7);\n }\n const desktopItem = (\n \n {iconTitle}\n {item.folder_name}\n \n {item.share_type == 'personal' ?\n {item.user_name} : item.group_name}\n \n \n {!isShowPermEditor && (\n
    \n {Utils.sharePerms(share_permission) || share_permission_name}\n {isOpIconShown && (\n \n \n )}\n
    \n )}\n {isShowPermEditor && (\n \n )}\n \n \n \n );\n\n const mobileItem = (\n \n \n {iconTitle}\n \n {item.folder_name}\n {Utils.sharePerms(share_permission)}\n
    \n {`${gettext('Share To:')} ${item.share_type == 'personal' ? item.user_name : item.group_name}`}\n \n \n \n \n
    \n
    \n
    \n {gettext('Permission')}\n {gettext('Unshare')}\n
    \n
    \n
    \n \n \n {isPermSelectDialogOpen &&(\n \n )}\n
    \n );\n\n return this.props.isDesktop ? desktopItem : mobileItem;\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n isDesktop: PropTypes.bool.isRequired,\n};\n\nclass ShareAdminFolders extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n items: [],\n sortBy: 'name',\n sortOrder: 'asc' // 'asc' or 'desc'\n };\n }\n\n _sortItems = (items, sortBy, sortOrder) => {\n let comparator;\n\n switch (`${sortBy}-${sortOrder}`) {\n case 'name-asc':\n comparator = function(a, b) {\n var result = Utils.compareTwoWord(a.folder_name, b.folder_name);\n return result;\n };\n break;\n case 'name-desc':\n comparator = function(a, b) {\n var result = Utils.compareTwoWord(a.folder_name, b.folder_name);\n return -result;\n };\n break;\n }\n\n items.sort(comparator);\n return items;\n };\n\n sortItems = (sortBy, sortOrder) => {\n this.setState({\n sortBy: sortBy,\n sortOrder: sortOrder,\n items: this._sortItems(this.state.items, sortBy, sortOrder)\n });\n };\n\n componentDidMount() {\n seafileAPI.listSharedFolders().then((res) => {\n let items = res.data.map(item => {\n return new SharedFolderInfo(item);\n });\n this.setState({\n loading: false,\n items: this._sortItems(items, this.state.sortBy, this.state.sortOrder)\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n render() {\n return (\n
    \n
    \n
    \n

    {gettext('Folders')}

    \n
    \n
    \n \n
    \n
    \n
    \n );\n }\n}\n\nexport default ShareAdminFolders;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalBody } from 'reactstrap';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n currentPerm: PropTypes.string.isRequired,\n permissions: PropTypes.array.isRequired,\n changePerm: PropTypes.func.isRequired,\n toggleDialog: PropTypes.func.isRequired\n};\n\nclass ShareLinkPermissionSelect extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n currentOption: this.props.currentPerm\n };\n }\n\n switchOption = (e) => {\n if (!e.target.checked) {\n return;\n }\n\n const currentOption = e.target.value;\n this.setState({\n currentOption: currentOption\n });\n\n this.props.changePerm(currentOption);\n this.props.toggleDialog();\n };\n\n render() {\n const options = this.props.permissions;\n const { currentOption } = this.state;\n\n return (\n \n \n {options.map((item, index) => {\n return (\n
    \n \n \n
    \n );\n })}\n
    \n
    \n );\n }\n}\n\nShareLinkPermissionSelect.propTypes = propTypes;\n\nexport default ShareLinkPermissionSelect;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalBody } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\n\nconst propTypes = {\n toggleDialog: PropTypes.func.isRequired,\n sortBy: PropTypes.string.isRequired,\n sortOrder: PropTypes.string.isRequired,\n sortOptions: PropTypes.array,\n sortItems: PropTypes.func.isRequired\n};\n\nclass SortOptions extends React.Component {\n\n constructor(props) {\n super(props);\n this.sortOptions = this.props.sortOptions || [\n {value: 'name-asc', text: gettext('By name ascending')},\n {value: 'name-desc', text: gettext('By name descending')},\n {value: 'size-asc', text: gettext('By size ascending')},\n {value: 'size-desc', text: gettext('By size descending')},\n {value: 'time-asc', text: gettext('By time ascending')},\n {value: 'time-desc', text: gettext('By time descending')}\n ];\n const { sortBy, sortOrder } = this.props;\n this.state = {\n currentOption: `${sortBy}-${sortOrder}`\n };\n }\n\n switchOption = (e) => {\n if (!e.target.checked) {\n return;\n }\n\n this.setState({\n currentOption: e.target.value\n });\n\n const [sortBy, sortOrder] = e.target.value.split('-');\n this.props.sortItems(sortBy, sortOrder);\n this.props.toggleDialog();\n };\n\n render() {\n return (\n \n \n {this.sortOptions.map((item, index) => {\n return (\n \n \n
    \n
    \n );\n })}\n
    \n
    \n );\n }\n}\n\nSortOptions.propTypes = propTypes;\n\nexport default SortOptions;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport CommonToolbar from './common-toolbar';\n\nconst propTypes = {\n onShowSidePanel: PropTypes.func.isRequired,\n onSearchedClick: PropTypes.func.isRequired,\n searchPlaceholder: PropTypes.string,\n children: PropTypes.object\n};\n\nclass TopToolbar extends React.Component {\n\n render() {\n const { onShowSidePanel, onSearchedClick } = this.props;\n return (\n
    \n
    \n \n \n {this.props.children}\n
    \n \n
    \n );\n }\n}\n\nTopToolbar.propTypes = propTypes;\n\nexport default TopToolbar;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport moment from 'moment';\nimport { Dropdown, DropdownToggle, DropdownItem, Button } from 'reactstrap';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport { isPro, gettext, siteRoot, canGenerateUploadLink } from '../../utils/constants';\nimport ShareLink from '../../models/share-link';\nimport Loading from '../../components/loading';\nimport toaster from '../../components/toast';\nimport EmptyTip from '../../components/empty-tip';\nimport ShareLinkPermissionSelect from '../../components/dialog/share-link-permission-select';\nimport ShareAdminLink from '../../components/dialog/share-admin-link';\nimport SortOptionsDialog from '../../components/dialog/sort-options';\nimport CommonOperationConfirmationDialog from '../../components/dialog/common-operation-confirmation-dialog';\nimport TopToolbar from '../../components/toolbar/top-toolbar';\nimport Selector from '../../components/single-selector';\n\nconst contentPropTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n sortBy: PropTypes.string.isRequired,\n sortOrder: PropTypes.string.isRequired,\n sortItems: PropTypes.func.isRequired,\n onRemoveLink: PropTypes.func.isRequired\n};\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n toggleItemFreezed = (isFreezed) => {\n this.setState({ isItemFreezed: isFreezed });\n };\n\n sortByName = (e) => {\n e.preventDefault();\n const sortBy = 'name';\n const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';\n this.props.sortItems(sortBy, sortOrder);\n };\n\n sortByTime = (e) => {\n e.preventDefault();\n const sortBy = 'time';\n const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';\n this.props.sortItems(sortBy, sortOrder);\n };\n\n render() {\n const { loading, errorMsg, items, sortBy, sortOrder } = this.props;\n\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No share links')}

    \n

    {gettext('You have not created any share links yet. A share link can be used to share files and folders with anyone. You can create a share link for a file or folder by clicking the share icon to the right of its name.')}

    \n
    \n );\n\n // sort\n const sortByName = sortBy == 'name';\n const sortByTime = sortBy == 'time';\n const sortIcon = sortOrder == 'asc' ? : ;\n\n const isDesktop = Utils.isDesktop();\n // only for some columns\n const columnWidths = isPro ? ['14%', '7%', '14%'] : ['21%', '14%', '20%'];\n const table = (\n \n \n {isDesktop ? (\n \n \n \n \n {isPro && }\n \n \n \n \n ) : (\n \n \n \n \n \n )}\n \n \n {items.map((item, index) => {\n return (\n );\n })}\n \n
    {/*icon*/}{gettext('Name')} {sortByName && sortIcon}{gettext('Library')}{gettext('Permission')}{gettext('Visits')}{gettext('Expiration')} {sortByTime && sortIcon}{/*Operations*/}
    \n );\n\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = contentPropTypes;\n\nconst itemPropTypes = {\n item: PropTypes.object.isRequired,\n isDesktop: PropTypes.bool.isRequired,\n onRemoveLink: PropTypes.func.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n toggleItemFreezed: PropTypes.func.isRequired\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n highlight: false,\n isOpIconShown: false,\n isOpMenuOpen: false, // for mobile\n isPermSelectDialogOpen: false, // for mobile\n isLinkDialogOpen: false,\n permissionOptions: [],\n currentPermission: '',\n };\n }\n\n componentDidMount() {\n if (isPro) {\n this.updatePermissionOptions();\n }\n }\n\n updatePermissionOptions = () => {\n const item = this.props.item;\n let itemType = item.is_dir ? (item.path === '/' ? 'library' : 'dir') : 'file';\n let permission = item.repo_folder_permission;\n let permissionOptions = Utils.getShareLinkPermissionList(itemType, permission, item.path, item.can_edit);\n let currentPermission = Utils.getShareLinkPermissionStr(this.props.item.permissions);\n this.setState({\n permissionOptions: permissionOptions,\n currentPermission: currentPermission\n });\n };\n\n toggleOpMenu = () => {\n this.setState({\n isOpMenuOpen: !this.state.isOpMenuOpen\n });\n };\n\n togglePermSelectDialog = () => {\n this.setState({\n isPermSelectDialogOpen: !this.state.isPermSelectDialogOpen\n });\n };\n\n toggleLinkDialog = () => {\n this.setState({\n isLinkDialogOpen: !this.state.isLinkDialogOpen\n });\n };\n\n handleMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n viewLink = (e) => {\n e.preventDefault();\n this.toggleLinkDialog();\n };\n\n removeLink = (e) => {\n e.preventDefault();\n this.props.onRemoveLink(this.props.item);\n };\n\n renderExpiration = () => {\n const item = this.props.item;\n if (!item.expire_date) {\n return '--';\n }\n const expire_date = moment(item.expire_date).format('YYYY-MM-DD');\n const expire_time = moment(item.expire_date).format('YYYY-MM-DD HH:mm:ss');\n return ({expire_date});\n };\n\n // for 'selector' in desktop\n changePermission = (permOption) => {\n this.changePerm(permOption.value);\n };\n\n changePerm = (permission) => {\n const item = this.props.item;\n const permissionDetails = Utils.getShareLinkPermissionObject(permission).permissionDetails;\n seafileAPI.updateShareLink(item.token, JSON.stringify(permissionDetails)).then(() => {\n this.setState({\n currentPermission: permission\n });\n let message = gettext('Successfully modified permission.');\n toaster.success(message);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const item = this.props.item;\n const { currentPermission, permissionOptions , isOpIconShown, isPermSelectDialogOpen, isLinkDialogOpen } = this.state;\n this.permOptions = permissionOptions.map(item => {\n return {\n value: item,\n text: Utils.getShareLinkPermissionObject(item).text,\n isSelected: item == currentPermission\n };\n });\n const currentSelectedPermOption = this.permOptions.filter(item => item.isSelected)[0] || {};\n\n let iconUrl, objUrl;\n if (item.is_dir) {\n let path = item.path === '/' ? '/' : item.path.slice(0, item.path.length - 1);\n iconUrl = Utils.getFolderIconUrl(false);\n objUrl = `${siteRoot}library/${item.repo_id}/${encodeURIComponent(item.repo_name)}${Utils.encodePath(path)}`;\n } else {\n iconUrl = Utils.getFileIconUrl(item.obj_name);\n objUrl = `${siteRoot}lib/${item.repo_id}/file${Utils.encodePath(item.path)}`;\n }\n\n const deletedTip = item.obj_id === '' ? {gettext('(deleted)')} : null;\n const desktopItem = (\n \n \"\"\n \n {item.is_dir ?\n {item.obj_name} :\n {item.obj_name}\n }\n {deletedTip}\n \n {item.repo_name}\n {isPro &&\n \n \n \n }\n {item.view_cnt}\n {this.renderExpiration()}\n \n {!item.is_expired && }\n \n \n \n );\n\n const mobileItem = (\n \n \n \"\"\n \n {item.is_dir ?\n {item.obj_name} :\n {item.obj_name}\n }\n {isPro && {Utils.getShareLinkPermissionObject(currentPermission).text}}\n
    \n {item.repo_name}
    \n {gettext('Visits')}: {item.view_cnt}\n {gettext('Expiration')}: {this.renderExpiration()}\n \n \n \n \n
    \n
    \n
    \n {(isPro && !item.is_expired) && {gettext('Permission')}}\n {!item.is_expired && {gettext('View')}}\n {gettext('Remove')}\n
    \n
    \n
    \n \n \n {isPermSelectDialogOpen &&\n \n }\n
    \n );\n\n return (\n \n {this.props.isDesktop ? desktopItem : mobileItem}\n {isLinkDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = itemPropTypes;\n\nconst propTypes = {\n onShowSidePanel: PropTypes.func.isRequired,\n onSearchedClick: PropTypes.func.isRequired\n};\n\nclass ShareAdminShareLinks extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isCleanInvalidShareLinksDialogOpen: false,\n loading: true,\n errorMsg: '',\n items: [],\n sortBy: 'name', // 'name' or 'time'\n sortOrder: 'asc' // 'asc' or 'desc'\n };\n\n // for mobile\n this.sortOptions = [\n {value: 'name-asc', text: gettext('By name ascending')},\n {value: 'name-desc', text: gettext('By name descending')},\n {value: 'time-asc', text: gettext('By expiration ascending')},\n {value: 'time-desc', text: gettext('By expiration descending')}\n ];\n }\n\n _sortItems = (items, sortBy, sortOrder) => {\n let comparator;\n\n switch (`${sortBy}-${sortOrder}`) {\n case 'name-asc':\n comparator = function(a, b) {\n var result = Utils.compareTwoWord(a.obj_name, b.obj_name);\n return result;\n };\n break;\n case 'name-desc':\n comparator = function(a, b) {\n var result = Utils.compareTwoWord(a.obj_name, b.obj_name);\n return -result;\n };\n break;\n case 'time-asc':\n comparator = function(a, b) {\n return a.expire_date < b.expire_date ? -1 : 1;\n };\n break;\n case 'time-desc':\n comparator = function(a, b) {\n return a.expire_date < b.expire_date ? 1 : -1;\n };\n break;\n\n // no default\n }\n\n items.sort((a, b) => {\n if (a.is_dir && !b.is_dir) {\n return -1;\n } else if (!a.is_dir && b.is_dir) {\n return 1;\n } else {\n return comparator(a, b);\n }\n });\n return items;\n };\n\n sortItems = (sortBy, sortOrder) => {\n this.setState({\n sortBy: sortBy,\n sortOrder: sortOrder,\n items: this._sortItems(this.state.items, sortBy, sortOrder)\n });\n };\n\n componentDidMount() {\n this.listUserShareLinks();\n }\n\n listUserShareLinks() {\n seafileAPI.listUserShareLinks().then((res) => {\n let items = res.data.map(item => {\n return new ShareLink(item);\n });\n this.setState({\n loading: false,\n items: this._sortItems(items, this.state.sortBy, this.state.sortOrder)\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n onRemoveLink = (item) => {\n seafileAPI.deleteShareLink(item.token).then(() => {\n let items = this.state.items.filter(uploadItem => {\n return uploadItem.token !== item.token;\n });\n this.setState({items: items});\n let message = gettext('Successfully deleted 1 item.');\n toaster.success(message);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n toggleSortOptionsDialog = () => {\n this.setState({\n isSortOptionsDialogOpen: !this.state.isSortOptionsDialogOpen\n });\n };\n\n toggleCleanInvalidShareLinksDialog = () => {\n this.setState({isCleanInvalidShareLinksDialogOpen: !this.state.isCleanInvalidShareLinksDialogOpen});\n };\n\n cleanInvalidShareLinks = () => {\n seafileAPI.cleanInvalidShareLinks().then(res => {\n const newItems = this.state.items.filter(item => item.obj_id !== '').filter(item => !item.is_expired);\n this.setState({items: newItems});\n toaster.success(gettext('Successfully cleaned invalid share links.'));\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n return (\n \n \n\n \n \n
    \n
    \n
    \n
      \n
    • \n {gettext('Share Links')}\n
    • \n {canGenerateUploadLink && (\n
    • {gettext('Upload Links')}
    • \n )}\n
    \n {(!Utils.isDesktop() && this.state.items.length > 0) && }\n
    \n
    \n \n
    \n
    \n
    \n {this.state.isSortOptionsDialogOpen &&\n \n }\n {this.state.isCleanInvalidShareLinksDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nShareAdminShareLinks.propTypes = propTypes;\n\nexport default ShareAdminShareLinks;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport moment from 'moment';\nimport { Dropdown, DropdownToggle, DropdownItem, Button } from 'reactstrap';\nimport { gettext, siteRoot, canGenerateShareLink } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../../components/toast';\nimport Loading from '../../components/loading';\nimport EmptyTip from '../../components/empty-tip';\nimport UploadLink from '../../models/upload-link';\nimport ShareAdminLink from '../../components/dialog/share-admin-link';\nimport CommonOperationConfirmationDialog from '../../components/dialog/common-operation-confirmation-dialog';\nimport TopToolbar from '../../components/toolbar/top-toolbar';\n\nconst contentPropTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n onRemoveLink: PropTypes.func.isRequired\n};\n\nclass Content extends Component {\n\n render() {\n const { loading, errorMsg, items } = this.props;\n\n if (loading) {\n return ;\n }\n if (errorMsg) {\n return

    {errorMsg}

    ;\n }\n\n const emptyTip = (\n \n

    {gettext('No upload links')}

    \n

    {gettext('You have not created any upload links yet. An upload link allows anyone to upload files to a folder or library. You can create an upload link for a folder or library by clicking the share icon to the right of its name.')}

    \n
    \n );\n\n const isDesktop = Utils.isDesktop();\n const table = (\n \n \n {isDesktop ? (\n \n \n \n \n \n \n \n \n ) : (\n \n \n \n \n \n )}\n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {/*icon*/}{gettext('Name')}{gettext('Library')}{gettext('Visits')}{gettext('Expiration')}{/*Operations*/}
    \n );\n\n return items.length ? table : emptyTip;\n }\n}\n\nContent.propTypes = contentPropTypes;\n\nconst itemPropTypes = {\n isDesktop: PropTypes.bool.isRequired,\n item: PropTypes.object.isRequired,\n onRemoveLink: PropTypes.func.isRequired\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n isOpMenuOpen: false, // for mobile\n isLinkDialogOpen: false\n };\n }\n\n toggleOpMenu = () => {\n this.setState({\n isOpMenuOpen: !this.state.isOpMenuOpen\n });\n };\n\n toggleLinkDialog = () => {\n this.setState({\n isLinkDialogOpen: !this.state.isLinkDialogOpen\n });\n };\n\n handleMouseOver = () => {\n this.setState({isOpIconShown: true});\n };\n\n handleMouseOut = () => {\n this.setState({isOpIconShown: false});\n };\n\n viewLink = (e) => {\n e.preventDefault();\n this.toggleLinkDialog();\n };\n\n removeLink = (e) => {\n e.preventDefault();\n this.props.onRemoveLink(this.props.item);\n };\n\n renderExpiration = () => {\n const item = this.props.item;\n if (!item.expire_date) {\n return '--';\n }\n const expire_date = moment(item.expire_date).format('YYYY-MM-DD');\n const expire_time = moment(item.expire_date).format('YYYY-MM-DD HH:mm:ss');\n return ({expire_date});\n };\n\n render() {\n let item = this.props.item;\n const { isOpIconShown, isLinkDialogOpen } = this.state;\n\n const iconUrl = Utils.getFolderIconUrl(false);\n const repoUrl = `${siteRoot}library/${item.repo_id}/${encodeURIComponent(item.repo_name)}`;\n const objUrl = `${repoUrl}${Utils.encodePath(item.path)}`;\n\n const deletedTip = item.obj_id === '' ? {gettext('(deleted)')} : null;\n const desktopItem = (\n \n \"\"\n {item.obj_name}{deletedTip}\n {item.repo_name}\n {item.view_cnt}\n {this.renderExpiration()}\n \n {!item.is_expired && }\n \n \n \n );\n\n const mobileItem = (\n \n \"\"\n \n {item.obj_name}\n
    \n {item.repo_name}
    \n {gettext('Visits')}: {item.view_cnt}\n {gettext('Expiration')}: {this.renderExpiration()}\n \n \n \n \n
    \n
    \n
    \n {!item.is_expired && {gettext('View')}}\n {gettext('Remove')}\n
    \n
    \n
    \n \n \n );\n return (\n \n {this.props.isDesktop ? desktopItem : mobileItem}\n {isLinkDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = itemPropTypes;\n\nconst propTypes = {\n onShowSidePanel: PropTypes.func.isRequired,\n onSearchedClick: PropTypes.func.isRequired\n};\n\nclass ShareAdminUploadLinks extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isCleanInvalidUploadLinksDialogOpen: false,\n loading: true,\n errorMsg: '',\n items: []\n };\n }\n\n componentDidMount() {\n this.listUserUploadLinks();\n }\n\n listUserUploadLinks() {\n seafileAPI.listUserUploadLinks().then((res) => {\n let items = res.data.map(item => {\n return new UploadLink(item);\n });\n this.setState({\n loading: false,\n items: items\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n onRemoveLink = (item) => {\n seafileAPI.deleteUploadLink(item.token).then(() => {\n let items = this.state.items.filter(uploadItem => {\n return uploadItem.token !== item.token;\n });\n this.setState({items: items});\n const message = gettext('Successfully deleted 1 item.');\n toaster.success(message);\n }).catch((error) => {\n const errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n toggleCleanInvalidUploadLinksDialog = () => {\n this.setState({isCleanInvalidUploadLinksDialogOpen: !this.state.isCleanInvalidUploadLinksDialogOpen});\n };\n\n cleanInvalidUploadLinks = () => {\n seafileAPI.cleanInvalidUploadLinks().then(res => {\n const newItems = this.state.items.filter(item => item.obj_id !== '').filter(item => !item.is_expired);\n this.setState({items: newItems});\n toaster.success(gettext('Successfully cleaned invalid upload links.'));\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n return (\n \n \n \n \n
    \n
    \n
    \n
      \n {canGenerateShareLink && (\n
    • {gettext('Share Links')}
    • \n )}\n
    • {gettext('Upload Links')}
    • \n
    \n
    \n
    \n \n
    \n
    \n
    \n {this.state.isCleanInvalidUploadLinksDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nShareAdminUploadLinks.propTypes = propTypes;\n\nexport default ShareAdminUploadLinks;\n","import { Utils } from '../utils/utils';\n\nclass Repo {\n constructor(object) {\n this.repo_id = object.repo_id;\n this.repo_name = object.repo_name;\n this.permission = object.permission;\n this.size_original = object.size;\n this.size = Utils.bytesToSize(object.size);\n this.owner_name = object.owner_name;\n this.owner_email = object.owner_email;\n this.owner_contact_email = object.owner_contact_email;\n this.encrypted = object.encrypted;\n this.last_modified = object.last_modified;\n this.modifier_contact_email = object.modifier_contact_email;\n this.modifier_email = object.modifier_email;\n this.modifier_name = object.modifier_name;\n this.type = object.type;\n this.starred = object.starred;\n this.monitored = object.monitored;\n this.status = object.status;\n this.storage_name = object.storage_name;\n if (object.is_admin != undefined) {\n this.is_admin = object.is_admin;\n }\n }\n}\n\nexport default Repo;\n","import React from 'react';\nimport { gettext } from '../utils/constants';\n\nfunction LibsMobileThead() {\n return (\n \n \n {gettext('Library Type')}\n \n {gettext('Actions')}\n \n \n );\n}\n\nexport default LibsMobileThead;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { UncontrolledTooltip } from 'reactstrap';\nimport Icon from '../components/icon';\nimport { gettext } from '../utils/constants';\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired\n};\n\nclass RepoMonitoredIcon extends React.Component {\n\n render() {\n const { repoID } = this.props;\n return (\n \n \n \n \n \n {gettext('You are watching file changes of this library.')}\n \n \n );\n }\n}\n\nRepoMonitoredIcon.propTypes = propTypes;\n\nexport default RepoMonitoredIcon;\n","import React, { Component, Fragment } from 'react';\nimport { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport cookie from 'react-cookies';\nimport { Link, navigate } from '@gatsbyjs/reach-router';\nimport { gettext, siteRoot, isPro } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../../components/toast';\nimport Repo from '../../models/repo';\nimport Loading from '../../components/loading';\nimport EmptyTip from '../../components/empty-tip';\nimport LibsMobileThead from '../../components/libs-mobile-thead';\nimport ModalPotal from '../../components/modal-portal';\nimport ShareDialog from '../../components/dialog/share-dialog';\nimport SortOptionsDialog from '../../components/dialog/sort-options';\nimport RepoMonitoredIcon from '../../components/repo-monitored-icon';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n freezeItem = (freezed) => {\n this.setState({\n isItemFreezed: freezed\n });\n };\n\n sortByName = (e) => {\n e.preventDefault();\n const sortBy = 'name';\n const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';\n this.props.sortItems(sortBy, sortOrder);\n };\n\n sortByTime = (e) => {\n e.preventDefault();\n const sortBy = 'time';\n const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';\n this.props.sortItems(sortBy, sortOrder);\n };\n\n sortBySize = (e) => {\n e.preventDefault();\n const sortBy = 'size';\n const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';\n this.props.sortItems(sortBy, sortOrder);\n };\n\n render() {\n const { loading, errorMsg, items, sortBy, sortOrder } = this.props;\n\n const emptyTip = (\n \n

    {gettext('No shared libraries')}

    \n

    {gettext('No libraries have been shared directly with you. A shared library can be shared with full or restricted permission. If you need access to a library owned by another user, ask the user to share the library with you.')}

    \n
    \n );\n\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n // sort\n const sortByName = sortBy == 'name';\n const sortByTime = sortBy == 'time';\n const sortBySize = sortBy == 'size';\n const sortIcon = sortOrder == 'asc' ? : ;\n\n const desktopThead = (\n \n \n \n {gettext('Library Type')}\n {gettext('Name')} {sortByName && sortIcon}\n {gettext('Actions')}\n {gettext('Size')} {sortBySize && sortIcon}\n {gettext('Last Update')} {sortByTime && sortIcon}\n {gettext('Owner')}\n \n \n );\n\n const isDesktop = Utils.isDesktop();\n const table = (\n \n {isDesktop ? desktopThead : }\n \n {items.map((item, index) => {\n return ;\n })}\n \n
    \n );\n\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n sortBy: PropTypes.string.isRequired,\n sortOrder: PropTypes.string.isRequired,\n sortItems: PropTypes.func.isRequired,\n onMonitorRepo: PropTypes.func.isRequired\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n highlight: false,\n showOpIcon: false,\n unshared: false,\n isShowSharedDialog: false,\n isStarred: this.props.data.starred,\n isOpMenuOpen: false\n };\n }\n\n toggleOpMenu = () => {\n this.setState({\n isOpMenuOpen: !this.state.isOpMenuOpen\n }, () => {\n this.props.freezeItem(this.state.isOpMenuOpen);\n });\n };\n\n handleMouseOver = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n highlight: true,\n showOpIcon: true\n });\n }\n };\n\n handleMouseOut = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n highlight: false,\n showOpIcon: false\n });\n }\n };\n\n share = (e) => {\n e.preventDefault();\n this.setState({isShowSharedDialog: true});\n };\n\n leaveShare = (e) => {\n e.preventDefault();\n\n const data = this.props.data;\n\n let request;\n if (data.owner_email.indexOf('@seafile_group') == -1) {\n let options = {\n 'share_type': 'personal',\n 'from': data.owner_email\n };\n request = seafileAPI.leaveShareRepo(data.repo_id, options);\n } else {\n request = seafileAPI.leaveShareGroupOwnedRepo(data.repo_id);\n }\n\n request.then((res) => {\n this.setState({unshared: true});\n let message = gettext('Successfully unshared {name}').replace('{name}', data.repo_name);\n toaster.success(message);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n if (errMessage === gettext('Error')) {\n errMessage = gettext('Failed to unshare {name}').replace('{name}', data.repo_name);\n }\n toaster(errMessage);\n });\n };\n\n toggleShareDialog = () => {\n this.setState({isShowSharedDialog: false});\n };\n\n onToggleStarRepo = (e) => {\n e.preventDefault();\n const repoName = this.props.data.repo_name;\n if (this.state.isStarred) {\n seafileAPI.unstarItem(this.props.data.repo_id, '/').then(() => {\n this.setState({isStarred: !this.state.isStarred});\n const msg = gettext('Successfully unstarred {library_name_placeholder}.')\n .replace('{library_name_placeholder}', repoName);\n toaster.success(msg);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n } else {\n seafileAPI.starItem(this.props.data.repo_id, '/').then(() => {\n this.setState({isStarred: !this.state.isStarred});\n const msg = gettext('Successfully starred {library_name_placeholder}.')\n .replace('{library_name_placeholder}', repoName);\n toaster.success(msg);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n };\n\n visitRepo = () => {\n navigate(this.repoURL);\n };\n\n watchFileChanges = () => {\n const { data: repo } = this.props;\n seafileAPI.monitorRepo(repo.repo_id).then(() => {\n this.props.onMonitorRepo(repo, true);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n unwatchFileChanges = () => {\n const { data: repo } = this.props;\n seafileAPI.unMonitorRepo(repo.repo_id).then(() => {\n this.props.onMonitorRepo(repo, false);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n if (this.state.unshared) {\n return null;\n }\n\n const data = this.props.data;\n\n data.icon_url = Utils.getLibIconUrl(data);\n data.icon_title = Utils.getLibIconTitle(data);\n\n let iconVisibility = this.state.showOpIcon ? '' : ' invisible';\n let shareIconClassName = 'op-icon sf2-icon-share repo-share-btn' + iconVisibility;\n let leaveShareIconClassName = 'op-icon sf2-icon-x3' + iconVisibility;\n let shareRepoUrl = this.repoURL = `${siteRoot}library/${data.repo_id}/${Utils.encodePath(data.repo_name)}/`;\n\n // at present, only repo shared with 'r', 'rw' can be monitored.(Fri Feb 10 16:24:49 CST 2023)\n const enableMonitorRepo = isPro && (data.permission == 'r' || data.permission == 'rw');\n\n const desktopItem = (\n \n \n \n \n \n \n \n {data.icon_title}\n \n \n {data.repo_name}\n {data.monitored && }\n \n \n \n {(isPro && data.is_admin) &&\n \n }\n \n {enableMonitorRepo &&\n \n \n \n {data.monitored ? gettext('Unwatch File Changes') : gettext('Watch File Changes')}\n \n \n }\n \n {data.size}\n {moment(data.last_modified).fromNow()}\n {data.owner_name}\n \n {this.state.isShowSharedDialog && (\n \n \n \n )}\n \n );\n\n const mobileItem = (\n \n \n {data.icon_title}\n \n {data.repo_name}\n {data.monitored && }\n
    \n {data.owner_name}\n {data.size}\n {moment(data.last_modified).fromNow()}\n \n \n \n \n
    \n
    \n
    \n {this.state.isStarred ? gettext('Unstar') : gettext('Star')}\n {(isPro && data.is_admin) && {gettext('Share')}}\n {gettext('Leave Share')}\n {enableMonitorRepo && {data.monitored ? gettext('Unwatch File Changes') : gettext('Watch File Changes')}}\n
    \n
    \n
    \n \n \n {this.state.isShowSharedDialog && (\n \n \n \n )}\n
    \n );\n\n return this.props.isDesktop ? desktopItem : mobileItem;\n }\n}\n\nItem.propTypes = {\n isDesktop: PropTypes.bool.isRequired,\n data: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n freezeItem: PropTypes.func.isRequired,\n onMonitorRepo: PropTypes.func.isRequired\n};\n\nclass SharedLibraries extends Component {\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n items: [],\n sortBy: cookie.load('seafile-repo-dir-sort-by') || 'name', // 'name' or 'time' or 'size'\n sortOrder: cookie.load('seafile-repo-dir-sort-order') || 'asc', // 'asc' or 'desc'\n isSortOptionsDialogOpen: false\n };\n }\n\n componentDidMount() {\n seafileAPI.listRepos({type:'shared'}).then((res) => {\n let repoList = res.data.repos.map((item) => {\n return new Repo(item);\n });\n this.setState({\n loading: false,\n items: Utils.sortRepos(repoList, this.state.sortBy, this.state.sortOrder)\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n sortItems = (sortBy, sortOrder) => {\n cookie.save('seafile-repo-dir-sort-by', sortBy);\n cookie.save('seafile-repo-dir-sort-order', sortOrder);\n this.setState({\n sortBy: sortBy,\n sortOrder: sortOrder,\n items: Utils.sortRepos(this.state.items, sortBy, sortOrder)\n });\n };\n\n toggleSortOptionsDialog = () => {\n this.setState({\n isSortOptionsDialogOpen: !this.state.isSortOptionsDialogOpen\n });\n };\n\n onMonitorRepo = (repo, monitored) => {\n let items = this.state.items.map(item => {\n if (item.repo_id === repo.repo_id) {\n item.monitored = monitored;\n }\n return item;\n });\n this.setState({items: items});\n };\n\n render() {\n return (\n \n
    \n
    \n
    \n

    {gettext('Shared with me')}

    \n {(!Utils.isDesktop() && this.state.items.length > 0) && }\n
    \n
    \n \n
    \n
    \n
    \n {this.state.isSortOptionsDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nexport default SharedLibraries;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { gettext, siteRoot } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../../components/toast';\nimport Loading from '../../components/loading';\nimport EmptyTip from '../../components/empty-tip';\n\nclass Content extends Component {\n\n render() {\n const { loading, errorMsg, items } = this.props;\n\n const emptyTip = (\n \n

    {gettext('No libraries have been shared with you')}

    \n

    {gettext('No libraries have been shared with you from other servers.')}

    \n
    \n );\n\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ;\n })}\n \n
    {gettext('Name')}{gettext('Shared by')}{gettext('At server')}{gettext('Time')}{/* operations */}
    \n );\n\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n leaveShare: PropTypes.func.isRequired,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false\n };\n }\n\n handleMouseOver = () => {\n this.setState({\n isOpIconShown: true\n });\n };\n\n handleMouseOut = () => {\n this.setState({\n isOpIconShown: false\n });\n };\n\n leaveShare = (e) => {\n e.preventDefault();\n this.props.leaveShare(this.props.item);\n };\n\n render() {\n const item = this.props.item;\n const { isOpIconShown } = this.state;\n\n item.icon_url = Utils.getLibIconUrl(item);\n item.icon_title = Utils.getLibIconTitle(item);\n\n let shareRepoUrl =`${siteRoot}remote-library/${this.props.item.provider_id}/${this.props.item.repo_id}/${Utils.encodePath(this.props.item.repo_name)}/`;\n return (\n \n {item.icon_title}\n {item.repo_name}\n {item.from_user}\n {item.from_server_url}\n {moment(item.ctime).fromNow()}\n \n \n \n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n leaveShare: PropTypes.func.isRequired,\n};\n\nclass SharedWithOCM extends Component {\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n items: []\n };\n }\n\n componentDidMount() {\n seafileAPI.listOCMSharesReceived().then((res) => {\n this.setState({\n loading: false,\n items: res.data.ocm_share_received_list\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n leaveShare = (item) => {\n const { id, repo_name } = item;\n seafileAPI.deleteOCMShareReceived(id).then((res) => {\n let items = this.state.items.filter(item => {\n return item.id != id;\n });\n this.setState({items: items});\n toaster.success(gettext('Successfully unshared {name}').replace('{name}', repo_name));\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n return (\n \n
    \n
    \n
    \n

    {gettext('Shared from other servers')}

    \n
    \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default SharedWithOCM;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { gettext, siteRoot } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../../components/toast';\nimport Loading from '../../components/loading';\nimport EmptyTip from '../../components/empty-tip';\n\nclass OCMViaWebdav extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n shareID: '',\n path: '',\n items: [],\n errorMsg: '',\n };\n }\n\n componentDidMount() {\n this.getAllReceivedShares();\n }\n\n getAllReceivedShares = () => {\n const url = seafileAPI.server + '/ocm-via-webdav/received-shares/';\n seafileAPI.req.get(url).then((res) => {\n this.setState({\n loading: false,\n shareID: '',\n path: '',\n items: res.data.received_share_list,\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n leaveShare = (item) => {\n const { id, name } = item;\n const url = seafileAPI.server + '/ocm-via-webdav/received-shares/' + id + '/';\n seafileAPI.req.delete(url).then((res) => {\n let items = this.state.items.filter(item => {\n return item.id != id;\n });\n this.setState({items: items});\n toaster.success(gettext('Successfully unshared {name}').replace('{name}', name));\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n openFolder = (item) => {\n\n this.setState({\n loading: true,\n });\n\n const url = seafileAPI.server + '/ocm-via-webdav/received-shares/' + item.id + '/?path=' + item.path;\n seafileAPI.req.get(url).then((res) => {\n this.setState({\n loading: false,\n shareID: item.id,\n path: res.data.parent_dir,\n items: res.data.received_share_list,\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onPathClick = (path) => {\n\n this.setState({\n loading: true,\n });\n\n const url = seafileAPI.server + '/ocm-via-webdav/received-shares/' + this.state.shareID + '/?path=' + path;\n seafileAPI.req.get(url).then((res) => {\n this.setState({\n loading: false,\n items: res.data.received_share_list,\n path: res.data.parent_dir,\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n return (\n \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\n\nclass Content extends Component {\n\n static propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n path: PropTypes.string.isRequired,\n };\n\n constructor(props) {\n super(props);\n }\n\n render() {\n const { loading, errorMsg, items, path } = this.props;\n const emptyTip = (\n \n

    {gettext('No libraries have been shared with you')}

    \n

    {gettext('No libraries have been shared with you from other servers.')}

    \n
    \n );\n\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ;\n })}\n \n
    {gettext('Name')}{gettext('Shared By')}{gettext('Time')}{/* operations */}{/* operations */}
    \n );\n\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n data: PropTypes.object.isRequired,\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n path: PropTypes.string.isRequired,\n leaveShare: PropTypes.func.isRequired,\n openFolder: PropTypes.func.isRequired,\n};\n\nclass Item extends Component {\n\n static propTypes = {\n item: PropTypes.object.isRequired\n };\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false\n };\n }\n\n handleMouseOver = () => {\n this.setState({\n isOpIconShown: true\n });\n };\n\n handleMouseOut = () => {\n this.setState({\n isOpIconShown: false\n });\n };\n\n downloadFile = () => {\n let downloadUrl = siteRoot + 'ocm-via-webdav/download-received-file/?share_id=' + this.props.item.id + '&path=' + this.props.item.path;\n window.location.href = downloadUrl;\n };\n\n leaveShare = (e) => {\n e.preventDefault();\n this.props.leaveShare(this.props.item);\n };\n\n openFolder = (e) => {\n e.preventDefault();\n this.props.openFolder(this.props.item);\n };\n\n render() {\n const item = this.props.item;\n const { isOpIconShown } = this.state;\n\n if (item.is_dir) {\n item.icon_url = Utils.getFolderIconUrl();\n } else {\n item.icon_url = Utils.getFileIconUrl(item.name);\n }\n return (\n \n \"\"\n \n {item.is_dir ? {item.name} : item.name}\n \n {item.shared_by}\n {moment(item.ctime).fromNow()}\n {item.is_dir ? '' : }\n \n {this.props.path ? '' : }\n \n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n path: PropTypes.string.isRequired,\n leaveShare: PropTypes.func.isRequired,\n openFolder: PropTypes.func.isRequired,\n};\n\nclass DirPath extends React.Component {\n\n static propTypes = {\n currentPath: PropTypes.string.isRequired,\n onPathClick: PropTypes.func.isRequired,\n getAllReceivedShares: PropTypes.func.isRequired,\n };\n\n constructor(props) {\n super(props);\n this.state = {\n };\n }\n\n onPathClick = (e) => {\n let path = Utils.getEventData(e, 'path');\n this.props.onPathClick(path);\n };\n\n turnPathToLink = (path) => {\n path = path.slice(1, path.length - 1);\n let pathList = path.split('/');\n let nodePath = '';\n let pathElem = pathList.map((item, index) => {\n if (index === (pathList.length - 1)) {\n return (\n \n /\n {item}\n \n );\n } else {\n if (index === 0) {\n nodePath = '/';\n } else {\n nodePath += item + '/';\n }\n return (\n \n /\n {item}\n \n );\n }\n });\n return pathElem;\n };\n\n render() {\n let pathElem = this.turnPathToLink(this.props.currentPath);\n return (\n
    \n {gettext('All')}\n {pathElem}\n
    \n );\n }\n}\n\nDirPath.propTypes = {\n shareID: PropTypes.string.isRequired,\n currentPath: PropTypes.string.isRequired,\n onPathClick: PropTypes.func.isRequired,\n getAllReceivedShares: PropTypes.func.isRequired,\n};\n\nexport default OCMViaWebdav;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Account from '../../components/common/account';\n\nconst propTypes = {\n children: PropTypes.object\n};\n\nclass MainPanelTopbar extends Component {\n\n render() {\n return (\n
    \n
    \n \n
    \n {this.props.children}\n
    \n
    \n
    \n \n
    \n
    \n );\n }\n}\n\nMainPanelTopbar.propTypes = propTypes;\n\nexport default MainPanelTopbar;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { siteRoot, gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n repoName: PropTypes.string.isRequired,\n currentPath: PropTypes.string.isRequired,\n onPathClick: PropTypes.func.isRequired,\n onTabNavClick: PropTypes.func.isRequired,\n repoID: PropTypes.string.isRequired,\n};\n\nclass DirPath extends React.Component {\n\n onPathClick = (e) => {\n let path = Utils.getEventData(e, 'path');\n this.props.onPathClick(path);\n };\n\n turnPathToLink = (path) => {\n path = path[path.length - 1] === '/' ? path.slice(0, path.length - 1) : path;\n let pathList = path.split('/');\n let nodePath = '';\n let pathElem = pathList.map((item, index) => {\n if (item === '') {\n return null;\n }\n if (index === (pathList.length - 1)) {\n return (\n \n /\n {item}\n \n );\n } else {\n nodePath += '/' + item;\n return (\n \n /\n {item}\n \n );\n }\n });\n return pathElem;\n };\n\n render() {\n let { currentPath, repoName } = this.props;\n let pathElem = this.turnPathToLink(currentPath);\n\n return (\n
    \n this.props.onTabNavClick('shared-with-ocm')}>{gettext('All')}\n /\n {(currentPath === '/' || currentPath === '') ?\n {repoName}:\n {repoName}\n }\n {pathElem}\n
    \n );\n }\n}\n\nDirPath.propTypes = propTypes;\n\nexport default DirPath;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport moment from 'moment';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport Loading from '../../components/loading';\n\nclass DirentItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false\n };\n }\n\n handleMouseOver = () => {\n this.setState({\n isOpIconShown: true\n });\n };\n\n handleMouseOut = () => {\n this.setState({\n isOpIconShown: false\n });\n };\n\n openFolder = () => {\n this.props.openFolder(this.props.dirent);\n };\n\n downloadDirent = (e) => {\n e.preventDefault();\n this.props.downloadDirent(this.props.dirent);\n };\n\n render () {\n let { isOpIconShown } = this.state;\n let { dirent } = this.props;\n let iconUrl = Utils.getDirentIcon(dirent);\n\n return (\n \n \n \n \n {dirent.is_file ?\n dirent.name :\n {dirent.name}\n }\n \n \n {isOpIconShown && dirent.is_file &&\n \n }\n \n {Utils.bytesToSize(dirent.size)}\n {moment(dirent.mtime).fromNow()}\n \n \n );\n }\n}\n\nDirentItem.propTypes = {\n dirent: PropTypes.object.isRequired,\n openFolder: PropTypes.func.isRequired,\n deleteDirent: PropTypes.func.isRequired,\n downloadDirent: PropTypes.func.isRequired,\n};\n\nclass DirContent extends React.Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n let { loading, errorMsg, direntList } = this.props;\n\n if (loading) {\n return ;\n }\n\n if (errorMsg) {\n return

    {errorMsg}

    ;\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n {direntList.map((dirent, index) => {\n return ;\n })}\n \n
    {/*icon*/}{gettext('Name')}{/*operation*/}{gettext('Size')}{gettext('Last Update')}
    \n
    \n );\n }\n}\n\nDirContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n direntList: PropTypes.array.isRequired,\n openFolder: PropTypes.func.isRequired,\n deleteDirent: PropTypes.func.isRequired,\n downloadDirent: PropTypes.func.isRequired,\n};\n\nexport default DirContent;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'reactstrap';\nimport axios from 'axios';\nimport { Utils } from '../../utils/utils';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { siteRoot, gettext } from '../../utils/constants';\nimport toaster from '../../components/toast';\nimport MainPanelTopbar from './remote-dir-topbar';\nimport DirPathBar from './remote-dir-path';\nimport DirContent from './remote-dir-content';\n\nclass Dirent {\n constructor(obj) {\n this.name = obj.name;\n this.mtime = obj.mtime;\n this.size = obj.size;\n this.is_file = obj.type === 'file';\n }\n\n isDir() {\n return !this.is_file;\n }\n}\n\nclass DirView extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n repoName: '',\n path: '',\n direntList: [],\n isNewFolderDialogOpen: false,\n userPerm: '',\n };\n this.fileInput = React.createRef();\n }\n\n componentDidMount () {\n this.loadDirentList('/');\n }\n\n onPathClick = (path) => {\n this.loadDirentList(path);\n };\n\n openFolder = (dirent) => {\n let direntPath = Utils.joinPath(this.state.path, dirent.name);\n if (!dirent.is_file) {\n this.loadDirentList(direntPath);\n }\n };\n\n loadDirentList = (path) => {\n const { providerID, repoID } = this.props;\n seafileAPI.listOCMRepoDir(providerID, repoID, path).then(res => {\n const { repo_name: repoName, dirent_list, user_perm } = res.data;\n let direntList = [];\n dirent_list.forEach(item => {\n let dirent = new Dirent(item);\n direntList.push(dirent);\n });\n this.setState({\n loading: false,\n repoName: repoName,\n direntList: direntList,\n path: path,\n userPerm: user_perm,\n }, () => {\n let url =`${siteRoot}remote-library/${providerID}/${repoID}/${repoName}${Utils.encodePath(path)}`;\n window.history.replaceState({url: url, path: path}, path, url);\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n downloadDirent = (dirent) => {\n let path = Utils.joinPath(this.state.path, dirent.name);\n seafileAPI.getOCMRepoDownloadURL(this.props.providerID, this.props.repoID, path).then(res => {\n location.href = res.data;\n }).catch((err) => {\n let errMessage = Utils.getErrorMsg(err);\n toaster.danger(errMessage);\n });\n };\n\n openFileInput = () => {\n this.fileInput.current.click();\n };\n\n onFileInputChange = () => {\n if (!this.fileInput.current.files.length) {\n return;\n }\n const file = this.fileInput.current.files[0];\n\n let { path } = this.state;\n let { providerID, repoID } = this.props;\n seafileAPI.getOCMRepoUploadURL(providerID, repoID, path).then(res => {\n let formData = new FormData();\n formData.append('parent_dir', path);\n formData.append('file', file);\n axios.post(res.data, formData).then(res => {\n const fileObj = res.data[0];\n let newDirent = new Dirent({\n 'type': 'file',\n 'name': fileObj.name,\n 'size': fileObj.size,\n 'mtime': (new Date()).getTime()\n });\n let direntList = this.state.direntList;\n const dirs = direntList.filter(item => { return !item.is_file; });\n direntList.splice(dirs.length, 0, newDirent);\n this.setState({\n direntList: direntList\n });\n });\n }).catch((err) => {\n let errMessage = Utils.getErrorMsg(err);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const { loading, errorMsg,\n repoName, direntList, path, userPerm } = this.state;\n const { repoID } = this.props;\n\n return (\n \n \n \n \n {userPerm === 'rw' &&\n \n }\n \n \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nDirView.propTypes = {\n repoID: PropTypes.string,\n providerID: PropTypes.string,\n onTabNavClick: PropTypes.func.isRequired,\n};\n\nexport default DirView;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, Input, ModalBody, ModalFooter, Form, FormGroup, Label, Alert } from 'reactstrap';\nimport { gettext, enableEncryptedLibrary, repoPasswordMinLength, storages, libraryTemplates } from '../../utils/constants';\nimport { SeahubSelect } from '../common/select';\n\nconst propTypes = {\n libraryType: PropTypes.string.isRequired,\n onCreateRepo: PropTypes.func.isRequired,\n onCreateToggle: PropTypes.func.isRequired,\n};\n\nclass CreateRepoDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n repoName: '',\n disabled: true,\n encrypt: false,\n password1: '',\n password2: '',\n errMessage: '',\n permission: 'rw',\n storage_id: storages.length ? storages[0].id : '',\n library_template: libraryTemplates.length ? libraryTemplates[0] : '',\n isSubmitBtnActive: false,\n };\n this.templateOptions = [];\n this.storageOptions = [];\n if (Array.isArray(libraryTemplates) && libraryTemplates.length) {\n this.templateOptions = libraryTemplates.map((item) => { return {value: item, label: item}; });\n }\n if (Array.isArray(storages) && storages.length) {\n this.storageOptions = storages.map((item) => { return {value: item.id, label: item.name}; });\n }\n }\n\n handleRepoNameChange = (e) => {\n if (!e.target.value.trim()) {\n this.setState({isSubmitBtnActive: false});\n } else {\n this.setState({isSubmitBtnActive: true});\n }\n\n this.setState({repoName: e.target.value});\n };\n\n handlePassword1Change = (e) => {\n this.setState({password1: e.target.value});\n };\n\n handlePassword2Change = (e) => {\n this.setState({password2: e.target.value});\n };\n\n handleSubmit = () => {\n let isValid = this.validateInputParams();\n if (isValid) {\n let repoData = this.prepareRepoData();\n if (this.props.libraryType === 'department') {\n this.props.onCreateRepo(repoData, 'department');\n return;\n }\n this.props.onCreateRepo(repoData);\n }\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.handleSubmit();\n e.preventDefault();\n }\n };\n\n toggle = () => {\n this.props.onCreateToggle();\n };\n\n validateInputParams() {\n let errMessage = '';\n let repoName = this.state.repoName.trim();\n if (!repoName.length) {\n errMessage = gettext('Name is required');\n this.setState({errMessage: errMessage});\n return false;\n }\n if (repoName.indexOf('/') > -1) {\n errMessage = gettext('Name should not include \\'/\\'.');\n this.setState({errMessage: errMessage});\n return false;\n }\n if (this.state.encrypt) {\n let password1 = this.state.password1.trim();\n let password2 = this.state.password2.trim();\n if (!password1.length) {\n errMessage = gettext('Please enter password');\n this.setState({errMessage: errMessage});\n return false;\n }\n if (!password2.length) {\n errMessage = gettext('Please enter the password again');\n this.setState({errMessage: errMessage});\n return false;\n }\n if (password1.length < repoPasswordMinLength) {\n errMessage = gettext('Password is too short');\n this.setState({errMessage: errMessage});\n return false;\n }\n if (password1 !== password2) {\n errMessage = gettext('Passwords don\\'t match');\n this.setState({errMessage: errMessage});\n return false;\n }\n }\n return true;\n }\n\n onPermissionChange = (e) => {\n let permission = e.target.value;\n this.setState({permission: permission});\n };\n\n handleStorageInputChange = (selectedItem) => {\n this.setState({storage_id: selectedItem.value});\n };\n\n handlelibraryTemplatesInputChange = (selectedItem) => {\n this.setState({library_template: selectedItem.value});\n };\n\n onEncrypted = (e) => {\n let isChecked = e.target.checked;\n this.setState({\n encrypt: isChecked,\n disabled: !isChecked\n });\n };\n\n prepareRepoData = () => {\n let libraryType = this.props.libraryType;\n\n let repoName = this.state.repoName.trim();\n let password = this.state.encrypt ? this.state.password1 : '';\n let permission = this.state.permission;\n\n let repo = null;\n if (libraryType === 'mine' || libraryType === 'public') {\n repo = {\n name: repoName,\n passwd: password\n };\n }\n if (libraryType === 'group') {\n repo = {\n repo_name: repoName,\n password: password,\n permission: permission,\n };\n }\n if (libraryType === 'department') {\n repo = {\n repo_name: repoName,\n passwd: password,\n };\n }\n\n const storage_id = this.state.storage_id;\n if (storage_id) {\n repo.storage_id = storage_id;\n }\n\n const library_template = this.state.library_template;\n if (library_template) {\n repo.library_template = library_template;\n }\n\n return repo;\n };\n\n render() {\n return (\n \n {gettext('New Library')}\n \n
    \n \n \n \n \n\n {libraryTemplates.length > 0 && (\n \n \n opt.value === this.state.library_template) || null}\n />\n \n )}\n\n {storages.length > 0 && (\n \n \n opt.value === this.state.storage_id) || null}\n />\n \n )}\n\n {this.props.libraryType === 'group' && (\n \n \n \n \n \n \n \n )}\n {enableEncryptedLibrary &&\n
    \n \n \n \n \n {!this.state.disabled &&\n \n {/* todo translate */}\n {' '}{gettext('(at least {placeholder} characters)').replace('{placeholder}', repoPasswordMinLength)}\n \n \n }\n {!this.state.disabled &&\n \n \n \n \n }\n
    \n }\n
    \n {this.state.errMessage && {this.state.errMessage}}\n
    \n \n \n \n \n
    \n );\n }\n}\n\nCreateRepoDialog.propTypes = propTypes;\n\nexport default CreateRepoDialog;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Utils } from '../../utils/utils';\nimport { Link, navigate } from '@gatsbyjs/reach-router';\nimport { siteRoot, gettext } from '../../utils/constants';\nimport ModalPortal from '../modal-portal';\nimport CreateRepoDialog from '../dialog/create-repo-dialog';\nimport { DropdownToggle, Dropdown, DropdownMenu, DropdownItem } from 'reactstrap';\n\nconst propTypes = {\n libraryType: PropTypes.string.isRequired,\n onCreateRepo: PropTypes.func.isRequired,\n onShowSidePanel: PropTypes.func.isRequired,\n};\n\nclass RepoViewToolbar extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isCreateRepoDialogShow: false,\n isOpen: false,\n };\n }\n\n onCreateRepo = (repo) => {\n this.props.onCreateRepo(repo);\n this.onCreateToggle();\n };\n\n onCreateToggle = () => {\n this.setState({isCreateRepoDialogShow: !this.state.isCreateRepoDialogShow});\n };\n\n toggleMore = () => {\n this.setState({ isOpen: !this.state.isOpen });\n };\n\n onDropdownToggleKeyDown = (e) => {\n if (e.key == 'Enter' || e.key == 'Space') {\n this.toggleMore();\n }\n };\n\n visitDeletedviaKey = (e) => {\n if (e.key == 'Enter' || e.key == 'Space') {\n navigate(`${siteRoot}my-libs/deleted/`);\n }\n };\n\n render() {\n return (\n \n
    \n \n {Utils.isDesktop() ? (\n
    \n \n \n \n {gettext('More')}\n \n \n \n {gettext('Deleted Libraries')}\n \n \n \n
    \n ) : (\n \n )}\n
    \n {this.state.isCreateRepoDialogShow && (\n \n \n \n )}\n
    \n );\n }\n}\n\nRepoViewToolbar.propTypes = propTypes;\n\nexport default RepoViewToolbar;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { Utils } from '../../utils/utils';\nimport { gettext } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport toaster from '../toast';\nimport '../../css/dirent-detail.css';\n\nconst propTypes = {\n currentRepo: PropTypes.object.isRequired,\n closeDetails: PropTypes.func.isRequired,\n};\n\nclass LibDetail extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n fileCount: 0,\n };\n }\n\n componentDidMount() {\n let repo = this.props.currentRepo;\n this.getFileCounts(repo);\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.currentRepo.repo_id !== this.props.currentRepo.repo_id) {\n this.getFileCounts(nextProps.currentRepo);\n }\n }\n\n getFileCounts = (repo) => {\n seafileAPI.getRepoInfo(repo.repo_id).then(res => {\n this.setState({fileCount: res.data.file_count});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n let repo = this.props.currentRepo;\n let smallIconUrl = Utils.getLibIconUrl(repo);\n let bigIconUrl = Utils.getLibIconUrl(repo, true);\n\n return (\n
    \n
    \n
    \n
    \n \"\"{' '}\n {repo.repo_name}\n
    \n
    \n
    \n
    \n \"\"\n
    \n
    \n \n \n \n \n \n \n \n \n \n
    {gettext('Files')}{this.state.fileCount}
    {gettext('Size')}{repo.size}
    {gettext('Last Update')}{ moment(repo.last_modified).fromNow()}
    \n
    \n
    \n
    \n );\n }\n}\n\nLibDetail.propTypes = propTypes;\n\nexport default LibDetail;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Form, FormGroup, Label, Input, Alert } from 'reactstrap';\nimport { gettext, enableRepoHistorySetting } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../toast';\n\nconst propTypes = {\n itemName: PropTypes.string.isRequired,\n toggleDialog: PropTypes.func.isRequired,\n repoID: PropTypes.string.isRequired,\n};\n\nclass LibHistorySetting extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n keepDays: -1,\n expireDays: 30,\n disabled: true,\n allHistory: true,\n noHistory: false,\n autoHistory: false,\n errorInfo: ''\n };\n }\n\n componentDidMount() {\n seafileAPI.getRepoHistoryLimit(this.props.repoID).then(res => {\n this.setState({\n keepDays: res.data.keep_days,\n allHistory: res.data.keep_days < 0 ? true : false,\n noHistory: res.data.keep_days === 0 ? true : false,\n autoHistory: res.data.keep_days > 0 ? true : false,\n disabled: res.data.keep_days > 0 ? false : true,\n expireDays: res.data.keep_days > 0 ? res.data.keep_days : 30,\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n\n submit = () => {\n let days = this.state.keepDays;\n if (this.state.autoHistory) {\n days = this.state.expireDays;\n }\n let repoID = this.props.repoID;\n let reg = /^-?\\d+$/;\n let flag = reg.test(days);\n if (flag) {\n let message = gettext('Successfully set library history.');\n seafileAPI.setRepoHistoryLimit(repoID, days).then(res => {\n toaster.success(message);\n this.setState({keepDays: res.data.keep_days});\n this.props.toggleDialog();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n } else {\n this.setState({\n errorInfo: gettext('Please enter a non-negative integer'),\n });\n }\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.submit();\n e.preventDefault();\n }\n };\n\n onChange = (e) => {\n let num = e.target.value;\n this.setState({\n keepDays: num,\n expireDays: num,\n });\n };\n\n setLimitDays = (type) => {\n if (type === 'allHistory') {\n this.setState({\n keepDays: -1,\n disabled: true\n });\n } else if (type === 'noHistory') {\n this.setState({\n keepDays: 0,\n disabled: true\n });\n } else {\n this.setState({\n disabled: false\n });\n }\n\n this.setState({\n allHistory: type === 'allHistory' ? true : false,\n noHistory: type === 'noHistory' ? true : false,\n autoHistory: type === 'autoHistory' ? true : false,\n });\n };\n\n render() {\n const itemName = this.props.itemName;\n return (\n \n \n {itemName}{' '}\n {gettext('History Setting')}\n \n \n
    \n {!enableRepoHistorySetting &&\n \n \n \n }\n \n {this.setLimitDays('allHistory');}}/>{' '}\n \n \n \n {this.setLimitDays('noHistory');}}/>{' '}\n \n \n \n {this.setLimitDays('autoHistory');}}/>{' '}\n \n {' '}\n \n \n {this.state.errorInfo && {this.state.errorInfo}}\n
    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nLibHistorySetting.propTypes = propTypes;\n\nexport default LibHistorySetting;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Alert } from 'reactstrap';\nimport { gettext, repoPasswordMinLength } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport toaster from '../toast';\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n repoName: PropTypes.string.isRequired,\n toggleDialog: PropTypes.func.isRequired\n};\n\nclass ChangeRepoPasswordDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n oldPassword: '',\n newPassword: '',\n newPasswordAgain: '',\n submitBtnDisabled: false,\n errorMsg: ''\n };\n }\n\n handleOldPasswordInputChange = (e) => {\n this.setState({\n oldPassword: e.target.value\n });\n };\n\n handleNewPasswordInputChange = (e) => {\n this.setState({\n newPassword: e.target.value\n });\n };\n\n handleNewPasswordAgainInputChange = (e) => {\n this.setState({\n newPasswordAgain: e.target.value\n });\n };\n\n formSubmit = (e) => {\n const { oldPassword, newPassword, newPasswordAgain } = this.state;\n if (!oldPassword) {\n this.setState({\n errorMsg: gettext('Please enter the old password')\n });\n return false;\n }\n if (!newPassword) {\n this.setState({\n errorMsg: gettext('Please enter a new password')\n });\n return false;\n }\n if (newPassword.length < repoPasswordMinLength) {\n this.setState({\n errorMsg: gettext('New password is too short')\n });\n return false;\n }\n if (!newPasswordAgain) {\n this.setState({\n errorMsg: gettext('Please enter the new password again')\n });\n return false;\n }\n if (newPassword != newPasswordAgain) {\n this.setState({\n errorMsg: gettext('New passwords don\\'t match')\n });\n return false;\n }\n\n this.setState({\n submitBtnDisabled: true\n });\n seafileAPI.changeEncryptedRepoPassword(this.props.repoID, oldPassword, newPassword)\n .then(() => {\n this.props.toggleDialog();\n toaster.success(gettext('Successfully changed library password.'));\n }).catch((error) => {\n let errorMsg = Utils.getErrorMsg(error);\n this.setState({\n errorMsg: errorMsg,\n submitBtnDisabled: false\n });\n });\n };\n\n\n render() {\n const { repoName, toggleDialog } = this.props;\n\n return (\n \n \n \n {Utils.generateDialogTitle(gettext('Change Password of Library {placeholder}'), repoName)}\n \n \n \n
    \n
    \n
    \n {gettext('(at least {placeholder} characters)').replace('{placeholder}', repoPasswordMinLength)}
    \n
    \n
    \n
    \n {this.state.errorMsg && {this.state.errorMsg}}\n
    \n
    \n \n \n \n
    \n );\n }\n}\n\nChangeRepoPasswordDialog.propTypes = propTypes;\n\nexport default ChangeRepoPasswordDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap';\nimport { gettext, contactEmail } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n toggleDialog: PropTypes.func.isRequired,\n};\n\nclass ResetEncryptedRepoPasswordDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n errMessage: '',\n showLoading: true,\n showSuccess: false,\n showError: false,\n };\n }\n\n componentDidMount() {\n seafileAPI.resetAndSendEncryptedRepoPassword(this.props.repoID).then((res) => {\n this.setState({showLoading: false});\n this.setState({showSuccess: true});\n }).catch((error) => {\n if (error.response) {\n this.setState({\n errMessage: error.response.data.error_msg\n });\n this.setState({showLoading: false});\n this.setState({showError: true});\n }\n });\n }\n\n render() {\n\n let user_email = '' + contactEmail + '';\n let message = gettext('New password has been sent to your email {mail}. Please check your mailbox. If you don’t receive the password, please check if your email address is properly configured.').replace('{mail}', user_email);\n\n return (\n \n \n {gettext('Reset library password')}\n \n \n {this.state.showLoading && (\n {gettext('Sending new password...')}\n )}\n {this.state.showSuccess && (\n
    \n )}\n {this.state.showError && (\n {this.state.errMessage}\n )}\n \n \n );\n }\n}\n\nResetEncryptedRepoPasswordDialog.propTypes = propTypes;\n\nexport default ResetEncryptedRepoPasswordDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport CreatableSelect from 'react-select/creatable';\nimport { gettext } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport Loading from '../loading';\nimport toaster from '../toast';\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n repoName: PropTypes.string.isRequired,\n toggleDialog: PropTypes.func.isRequired\n};\n\nclass LabelRepoStateDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: true,\n existingLabels: null,\n errorMsg: '',\n submitBtnDisabled: false\n };\n }\n\n componentDidMount() {\n seafileAPI.getAllRepoSnapshotLabels().then((res) => {\n this.setState({\n isLoading: false,\n existingLabels: res.data,\n errorMsg: ''\n });\n }).catch((error) => {\n let errorMsg = Utils.getErrorMsg(error);\n this.setState({\n isLoading: false,\n errorMsg: errorMsg\n });\n });\n }\n\n handleInputChange = (value) => {\n this.setState({\n inputValue: value\n });\n };\n\n formSubmit = () => {\n const inputValue = this.state.inputValue;\n\n if (!inputValue || !inputValue.length) { // undefined or []\n this.setState({\n formErrorMsg: gettext('It is required.')\n });\n return;\n }\n\n this.setState({\n submitBtnDisabled: true\n });\n\n const {repoID, repoName} = this.props;\n const labels = inputValue.map((item, index) => item.value).join(',');\n seafileAPI.addNewRepoLabels(repoID, labels).then((res) => {\n const msg = gettext('Successfully added label(s) for library {placeholder}').replace('{placeholder}', repoName);\n toaster.success(msg);\n this.props.toggleDialog();\n }).catch((error) => {\n let errorMsg = Utils.getErrorMsg(error);\n this.setState({\n formErrorMsg: errorMsg,\n submitBtnDisabled: false\n });\n });\n };\n\n render() {\n return (\n \n {gettext('Label Current State')}\n \n \n \n {this.state.existingLabels && (\n \n \n \n \n )}\n \n );\n }\n}\n\nclass Content extends React.Component {\n\n render() {\n const { isLoading, errorMsg, existingLabels, formErrorMsg } = this.props.data;\n\n if (isLoading) {\n return ;\n }\n\n if (errorMsg) {\n return

    {errorMsg}

    ;\n }\n\n return (\n \n { return {label: item, value: item}; })}\n />\n {formErrorMsg &&

    {formErrorMsg}

    }\n
    \n );\n }\n}\n\nContent.propTypes = {\n data: PropTypes.object.isRequired,\n handleChange: PropTypes.func.isRequired,\n};\n\nLabelRepoStateDialog.propTypes = propTypes;\n\nexport default LabelRepoStateDialog;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext, isPro, siteRoot } from '../../utils/constants';\nimport { Button, Input, InputGroup, InputGroupAddon } from 'reactstrap';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport UserSelect from '../user-select';\nimport SharePermissionEditor from '../select-editor/share-permission-editor';\nimport FileChooser from '../file-chooser/file-chooser';\n\nclass UserItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOperationShow: false\n };\n }\n\n onMouseEnter = () => {\n this.setState({isOperationShow: true});\n };\n\n onMouseLeave = () => {\n this.setState({isOperationShow: false});\n };\n\n deleteUserFolderPermission = () => {\n let item = this.props.item;\n this.props.deleteUserFolderPermission(item);\n };\n\n onChangeUserFolderPerm = (permission) => {\n let item = this.props.item;\n this.props.onChangeUserFolderPerm(item.repo_id, permission, item.folder_path, item.user_email);\n };\n\n render() {\n let item = this.props.item;\n let currentPermission = item.permission;\n return (\n \n \n {item.user_name}\n \n {this.props.showPath &&\n \n {item.folder_name}\n \n }\n \n \n \n \n \n \n \n \n );\n }\n}\n\nUserItem.propTypes = {\n item: PropTypes.object.isRequired,\n permissions: PropTypes.array.isRequired,\n deleteUserFolderPermission: PropTypes.func.isRequired,\n onChangeUserFolderPerm: PropTypes.func.isRequired,\n showPath: PropTypes.bool.isRequired,\n repoName: PropTypes.string.isRequired,\n handleChange: PropTypes.func.isRequired,\n};\n\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n isDepartmentRepo: PropTypes.bool,\n folderPath: PropTypes.string.isRequired,\n repoName: PropTypes.string.isRequired,\n};\n\n\nclass LibSubFolderSetUserPermissionDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selectedUsers: null,\n errorMsg: [],\n permission: 'rw',\n userFolderPermItems: [],\n folderPath: '',\n showFileChooser: false\n };\n if (!isPro) {\n this.permissions = ['r', 'rw'];\n } else {\n this.permissions = ['r', 'rw', 'cloud-edit', 'preview', 'invisible'];\n }\n }\n\n handleUserSelectChange = (option) => {\n this.setState({selectedUsers: option});\n };\n\n componentDidMount() {\n const {repoID, folderPath, isDepartmentRepo} = this.props;\n const request = isDepartmentRepo ?\n seafileAPI.listDepartmentRepoUserFolderPerm(repoID, folderPath) :\n seafileAPI.listUserFolderPerm(repoID, folderPath);\n request.then((res) => {\n if (res.data.length !== 0) {\n this.setState({userFolderPermItems: res.data});\n }\n });\n }\n\n setPermission = (permission) => {\n this.setState({permission: permission});\n };\n\n addUserFolderPerm = () => {\n const { selectedUsers } = this.state;\n const folderPath = this.props.folderPath || this.state.folderPath;\n if (!selectedUsers || !selectedUsers.length || !folderPath) { // selectedUsers: null or []\n return false;\n }\n\n const users = selectedUsers.map((item, index) => item.email);\n\n const request = this.props.isDepartmentRepo ?\n seafileAPI.addDepartmentRepoUserFolderPerm(this.props.repoID, this.state.permission, folderPath, users) :\n seafileAPI.addUserFolderPerm(this.props.repoID, this.state.permission, folderPath, users);\n request.then(res => {\n let errorMsg = [];\n if (res.data.failed.length > 0) {\n for (let i = 0; i < res.data.failed.length; i++) {\n errorMsg[i] = res.data.failed[i];\n }\n }\n this.setState({\n errorMsg: errorMsg,\n userFolderPermItems: this.state.userFolderPermItems.concat(res.data.success),\n selectedUsers: null,\n permission: 'rw',\n folderPath: '',\n });\n this.refs.userSelect.clearSelect();\n }).catch((error) => {\n let errorMsg = '';\n if (error.response) {\n if (error.response.data && error.response.data['error_msg']) {\n errorMsg = error.response.data['error_msg'];\n } else {\n errorMsg = gettext('Error');\n }\n } else {\n errorMsg = gettext('Please check the network.');\n }\n this.setState({\n errorMsg: [errorMsg]\n });\n });\n };\n\n deleteUserFolderPermItem = (item) => {\n const request = this.props.isDepartmentRepo ?\n seafileAPI.deleteDepartmentRepoUserFolderPerm(item.repo_id, item.permission, item.folder_path, item.user_email) :\n seafileAPI.deleteUserFolderPerm(item.repo_id, item.permission, item.folder_path, item.user_email);\n request.then(res => {\n this.setState({\n userFolderPermItems: this.state.userFolderPermItems.filter(deletedItem => {\n return deletedItem != item;\n })\n });\n });\n };\n\n onChangeUserFolderPerm = (repoID, permission, folderPath, userEmail) => {\n const request = this.props.isDepartmentRepo ?\n seafileAPI.updateDepartmentRepoUserFolderPerm(repoID, permission, folderPath, userEmail) :\n seafileAPI.updateUserFolderPerm(repoID, permission, folderPath, userEmail);\n request.then(res => {\n let userFolderPermItems = this.state.userFolderPermItems.map(item => {\n if (item.user_email === userEmail && item.folder_path === folderPath) {\n item.permission = permission;\n }\n return item;\n });\n this.setState({userFolderPermItems: userFolderPermItems});\n });\n };\n\n onSetSubFolder = (e) => {\n this.setState({\n folderPath: e.target.value\n });\n };\n\n toggleFileChooser = () => {\n this.setState({\n showFileChooser: !this.state.showFileChooser,\n folderPath: ''\n });\n };\n\n toggleSubFolder = (repo, path, item) => {\n this.setState({\n folderPath: path,\n });\n };\n\n handleFileChooserSubmit = () => {\n this.setState({\n showFileChooser: !this.state.showFileChooser\n });\n };\n\n onRepoItemClick = () => {\n this.setState({\n folderPath: '/'\n });\n };\n\n render() {\n let showPath = this.props.folderPath ? false : true;\n let { userFolderPermItems } = this.state;\n\n if (this.state.showFileChooser) {\n return (\n
    \n \n
    \n \n \n
    \n
    \n );\n }\n\n const thead = (\n \n \n {gettext('User')}\n {showPath &&\n {gettext('Folder')}\n }\n {gettext('Permission')}\n \n \n \n );\n return (\n \n \n {thead}\n \n \n \n {showPath &&\n \n }\n \n \n \n {this.state.errorMsg.length > 0 &&\n this.state.errorMsg.map((item, index) => {\n let errMessage = '';\n if (item.user_email) {\n errMessage = item.user_email + ': ' + item.error_msg;\n } else {\n errMessage = item;\n }\n return (\n \n \n \n );\n })\n }\n \n
    \n \n \n \n \n \n \n \n \n \n \n

    {errMessage}

    \n
    \n \n {thead}\n \n {userFolderPermItems.map((item, index) => {\n return (\n \n );\n })}\n \n
    \n
    \n
    \n );\n }\n}\n\nLibSubFolderSetUserPermissionDialog.propTypes = propTypes;\n\nexport default LibSubFolderSetUserPermissionDialog;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Input, InputGroup, InputGroupAddon } from 'reactstrap';\nimport { gettext, isPro, siteRoot } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport SharePermissionEditor from '../select-editor/share-permission-editor';\nimport FileChooser from '../file-chooser/file-chooser';\nimport { SeahubSelect, NoGroupMessage } from '../common/select';\n\nclass GroupItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOperationShow: false\n };\n }\n\n onMouseEnter = () => {\n this.setState({isOperationShow: true});\n };\n\n onMouseLeave = () => {\n this.setState({isOperationShow: false});\n };\n\n deleteGroupPermissionItem = () => {\n let item = this.props.item;\n this.props.deleteGroupPermissionItem(item);\n };\n\n onChangeGroupPermission = (permission) => {\n let item = this.props.item;\n this.props.onChangeGroupPermission(item, permission);\n };\n\n render() {\n let item = this.props.item;\n return (\n \n \n {item.group_name}\n \n {this.props.showPath &&\n \n {item.folder_name}\n \n }\n \n \n \n \n \n \n \n \n );\n }\n}\n\nGroupItem.propTypes = {\n item: PropTypes.object.isRequired,\n permissions: PropTypes.array.isRequired,\n deleteUserFolderPermission: PropTypes.func.isRequired,\n onChangeUserFolderPerm: PropTypes.func.isRequired,\n showPath: PropTypes.bool.isRequired,\n repoName: PropTypes.string.isRequired,\n handleChange: PropTypes.func.isRequired,\n deleteGroupPermissionItem: PropTypes.func.isRequired,\n onChangeGroupPermission: PropTypes.func.isRequired,\n};\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n isDepartmentRepo: PropTypes.bool,\n repoName: PropTypes.string,\n folderPath: PropTypes.string,\n};\n\nclass LibSubFolderSetGroupPermissionDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selectedOption: null,\n errorMsg: [],\n permission: 'rw',\n groupPermissionItems: [],\n folderPath: '',\n showFileChooser: false\n };\n this.options = [];\n if (!isPro) {\n this.permissions = ['r', 'rw'];\n } else {\n this.permissions = ['r', 'rw', 'cloud-edit', 'preview', 'invisible'];\n }\n }\n\n handleSelectChange = (option) => {\n this.setState({selectedOption: option});\n };\n\n componentDidMount() {\n this.loadOptions();\n this.listGroupPermissionItems();\n }\n\n loadOptions = () => {\n seafileAPI.shareableGroups().then((res) => {\n this.options = res.data.map((item, index) => {\n return {\n id: item.id,\n label: item.name,\n value: item.name\n };\n });\n });\n };\n\n listGroupPermissionItems = () => {\n const { isDepartmentRepo, repoID, folderPath } = this.props;\n const request = isDepartmentRepo ?\n seafileAPI.listDepartmentRepoGroupFolderPerm(repoID, folderPath) :\n seafileAPI.listGroupFolderPerm(repoID, folderPath);\n request.then((res) => {\n if (res.data.length !== 0) {\n this.setState({\n groupPermissionItems: res.data\n });\n }\n });\n };\n\n setPermission = (permission) => {\n this.setState({permission: permission});\n };\n\n addGroupFolderPerm = () => {\n const { selectedOption } = this.state;\n const folderPath = this.props.folderPath || this.state.folderPath;\n if (!selectedOption || !folderPath) {\n return false;\n }\n\n const request = this.props.isDepartmentRepo ?\n seafileAPI.addDepartmentRepoGroupFolderPerm(this.props.repoID, this.state.permission, folderPath, selectedOption.id) :\n seafileAPI.addGroupFolderPerm(this.props.repoID, this.state.permission, folderPath, selectedOption.id);\n request.then(res => {\n let errorMsg = [];\n if (res.data.failed.length > 0) {\n for (let i = 0; i < res.data.failed.length; i++) {\n errorMsg[i] = res.data.failed[i];\n }\n }\n\n this.setState({\n errorMsg: errorMsg,\n groupPermissionItems: this.state.groupPermissionItems.concat(res.data.success),\n selectedOption: null,\n permission: 'rw',\n folderPath: ''\n });\n }).catch((error) => {\n let errorMsg = '';\n if (error.response) {\n if (error.response.data && error.response.data['error_msg']) {\n errorMsg = error.response.data['error_msg'];\n } else {\n errorMsg = gettext('Error');\n }\n } else {\n errorMsg = gettext('Please check the network.');\n }\n this.setState({\n errorMsg: [errorMsg]\n });\n });\n };\n\n deleteGroupPermissionItem = (item) => {\n const request = this.props.isDepartmentRepo ?\n seafileAPI.deleteDepartmentRepoGroupFolderPerm(item.repo_id, item.permission, item.folder_path, item.group_id) :\n seafileAPI.deleteGroupFolderPerm(item.repo_id, item.permission, item.folder_path, item.group_id);\n request.then(() => {\n this.setState({\n groupPermissionItems: this.state.groupPermissionItems.filter(deletedItem => { return deletedItem != item; })\n });\n });\n };\n\n onChangeGroupPermission = (item, permission) => {\n const request = this.props.isDepartmentRepo ?\n seafileAPI.updateDepartmentRepoGroupFolderPerm(item.repo_id, permission, item.folder_path, item.group_id) :\n seafileAPI.updateGroupFolderPerm(item.repo_id, permission, item.folder_path, item.group_id);\n request.then(() => {\n this.updateGroupPermission(item, permission);\n });\n };\n\n updateGroupPermission = (item, permission) => {\n let groupID = item.group_id;\n let groupPermissionItems = this.state.groupPermissionItems.map(sharedItem => {\n let sharedItemGroupID = sharedItem.group_id;\n if (groupID === sharedItemGroupID && item.folder_path === sharedItem.folder_path) {\n sharedItem.permission = permission;\n }\n return sharedItem;\n });\n this.setState({groupPermissionItems: groupPermissionItems});\n };\n\n onSetSubFolder = (e) => {\n this.setState({\n folderPath: e.target.value\n });\n };\n\n toggleFileChooser = () => {\n this.setState({\n showFileChooser: !this.state.showFileChooser,\n folderPath: ''\n });\n };\n\n toggleSubFolder = (repo, path, item) => {\n this.setState({\n folderPath: path,\n });\n };\n\n handleSubmit = () => {\n this.setState({\n showFileChooser: !this.state.showFileChooser\n });\n };\n\n onRepoItemClick = () => {\n this.setState({\n folderPath: '/'\n });\n };\n\n render() {\n let showPath = this.props.folderPath ? false : true;\n\n if (this.state.showFileChooser) {\n return (\n
    \n \n
    \n \n \n
    \n
    \n );\n }\n\n const thead = (\n \n \n {gettext('Group')}\n {showPath &&\n {gettext('Folder')}\n }\n {gettext('Permission')}\n \n \n \n );\n return (\n \n \n {thead}\n \n \n \n {showPath &&\n \n }\n \n \n \n {this.state.errorMsg.length > 0 &&\n this.state.errorMsg.map((item, index) => {\n let errMessage = item.group_id + ': ' + item.error_msg;\n return (\n \n \n \n );\n })\n }\n \n
    \n \n \n \n \n \n \n \n \n \n \n

    {errMessage}

    \n
    \n \n {thead}\n \n {this.state.groupPermissionItems.map((item, index) => {\n return (\n \n );\n })}\n \n
    \n
    \n
    \n );\n }\n}\n\nLibSubFolderSetGroupPermissionDialog.propTypes = propTypes;\n\nexport default LibSubFolderSetGroupPermissionDialog;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody, TabContent, TabPane, Nav, NavItem, NavLink } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport LibSubFolderSetUserPermissionDialog from './lib-sub-folder-set-user-permission-dialog';\nimport LibSubFolderSetGroupPermissionDialog from './lib-sub-folder-set-group-permission-dialog';\nimport '../../css/share-link-dialog.css';\nimport '../../css/sub-folder-permission.css';\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n repoName: PropTypes.string,\n isDepartmentRepo: PropTypes.bool,\n folderPath: PropTypes.string,\n folderName: PropTypes.string,\n toggleDialog: PropTypes.func.isRequired\n};\n\nclass LibSubFolderPermissionDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n activeTab: 'userPermission'\n };\n }\n\n toggle = (tab) => {\n if (this.state.activeTab !== tab) {\n this.setState({activeTab: tab});\n }\n };\n\n renderContent = () => {\n const activeTab = this.state.activeTab;\n\n return (\n \n
    \n \n
    \n
    \n \n \n \n \n \n \n \n \n
    \n
    \n );\n };\n\n render() {\n const { repoName, folderName } = this.props;\n return (\n
    \n \n \n {repoName ? Utils.generateDialogTitle(gettext('{placeholder} Folder Permission'), repoName) : Utils.generateDialogTitle(gettext('Set {placeholder}\\'s permission'), folderName)}\n \n \n {this.renderContent()}\n \n \n
    \n );\n }\n}\n\nLibSubFolderPermissionDialog.propTypes = propTypes;\n\nexport default LibSubFolderPermissionDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown, DropdownMenu, DropdownToggle, DropdownItem } from 'reactstrap';\nimport { gettext, isPro, folderPermEnabled, enableRepoSnapshotLabel, enableResetEncryptedRepoPassword, isEmailConfigured, enableRepoAutoDel, enableSeaTableIntegration } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n isPC: PropTypes.bool,\n repo: PropTypes.object.isRequired,\n isStarred: PropTypes.bool,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n onMenuItemClick: PropTypes.func.isRequired,\n};\n\nclass MylibRepoMenu extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemMenuShow: false,\n isAdvancedMenuShown: false\n };\n }\n\n onMenuItemClick = (e) => {\n let operation = Utils.getEventData(e, 'toggle');\n this.props.onMenuItemClick(operation);\n };\n\n onMenuItemKeyDown = (e) => {\n if (e.key == 'Enter' || e.key == 'Space') {\n this.onMenuItemClick(e);\n }\n };\n\n onDropdownToggleClick = (e) => {\n this.toggleOperationMenu(e);\n };\n\n onDropdownToggleKeyDown = (e) => {\n if (e.key == 'Enter' || e.key == 'Space') {\n this.onDropdownToggleClick(e);\n }\n };\n\n toggleOperationMenu = (e) => {\n let dataset = e.target ? e.target.dataset : null;\n if (dataset && dataset.toggle && dataset.toggle === 'Rename') {\n this.setState({isItemMenuShow: !this.state.isItemMenuShow});\n return;\n }\n\n this.setState(\n {isItemMenuShow: !this.state.isItemMenuShow},\n () => {\n if (this.state.isItemMenuShow) {\n this.props.onFreezedItem();\n } else {\n this.props.onUnfreezedItem();\n }\n }\n );\n };\n\n toggleAdvancedMenuShown = (e) => {\n this.setState({ isAdvancedMenuShown: true });\n };\n\n toggleAdvancedMenu = (e) => {\n e.stopPropagation();\n this.setState({ isAdvancedMenuShown: !this.state.isAdvancedMenuShown }, () => {\n this.toggleOperationMenu(e);\n });\n };\n\n onDropDownMouseMove = (e) => {\n if (this.state.isAdvancedMenuShown && e.target && e.target.className === 'dropdown-item') {\n this.setState({\n isAdvancedMenuShown: false\n });\n }\n };\n\n generatorOperations = () => {\n let repo = this.props.repo;\n let showResetPasswordMenuItem = isPro && repo.encrypted && enableResetEncryptedRepoPassword && isEmailConfigured;\n let operations = ['Rename', 'Transfer'];\n if (folderPermEnabled) {\n operations.push('Folder Permission');\n }\n operations.push('Share Admin', 'Divider');\n\n if (repo.encrypted) {\n operations.push('Change Password');\n }\n if (showResetPasswordMenuItem) {\n operations.push('Reset Password');\n }\n\n if (isPro) {\n const monitorOp = repo.monitored ? 'Unwatch File Changes' : 'Watch File Changes';\n operations.push(monitorOp);\n }\n\n operations.push('Divider', 'History Setting', 'Advanced');\n // Remove adjacent excess 'Divider'\n for (let i = 0; i < operations.length; i++) {\n if (operations[i] === 'Divider' && operations[i + 1] === 'Divider') {\n operations.splice(i, 1);\n i--;\n }\n }\n return operations;\n };\n\n getAdvancedOperations = () => {\n const operations = [];\n operations.push('API Token');\n if (this.props.isPC && enableRepoSnapshotLabel) {\n operations.push('Label Current State');\n }\n if (enableRepoAutoDel) {\n operations.push('Old Files Auto Delete');\n }\n if (enableSeaTableIntegration) {\n operations.push('SeaTable integration');\n }\n return operations;\n };\n\n translateOperations = (item) => {\n let translateResult = '';\n switch(item) {\n case 'Star':\n translateResult = gettext('Star');\n break;\n case 'Unstar':\n translateResult = gettext('Unstar');\n break;\n case 'Share':\n translateResult = gettext('Share');\n break;\n case 'Delete':\n translateResult = gettext('Delete');\n break;\n case 'Rename':\n translateResult = gettext('Rename');\n break;\n case 'Transfer':\n translateResult = gettext('Transfer');\n break;\n case 'History Setting':\n translateResult = gettext('History Setting');\n break;\n case 'Change Password':\n translateResult = gettext('Change Password');\n break;\n case 'Reset Password':\n translateResult = gettext('Reset Password');\n break;\n case 'Watch File Changes':\n translateResult = gettext('Watch File Changes');\n break;\n case 'Unwatch File Changes':\n translateResult = gettext('Unwatch File Changes');\n break;\n case 'Folder Permission':\n translateResult = gettext('Folder Permission');\n break;\n case 'Label Current State':\n translateResult = gettext('Label Current State');\n break;\n case 'API Token':\n translateResult = 'API Token'; // translation is not needed here\n break;\n case 'Share Admin':\n translateResult = gettext('Share Admin');\n break;\n case 'Old Files Auto Delete':\n translateResult = gettext('Auto Deletion Setting');\n break;\n case 'Advanced':\n translateResult = gettext('Advanced');\n break;\n case 'SeaTable integration':\n translateResult = gettext('SeaTable integration');\n break;\n default:\n break;\n }\n\n return translateResult;\n };\n\n render() {\n let operations = this.generatorOperations();\n const advancedOperations = this.getAdvancedOperations();\n\n // pc menu\n if (this.props.isPC) {\n return (\n \n \n \n {operations.map((item, index)=> {\n if (item == 'Divider') {\n return ;\n } else if (item == 'Advanced') {\n return (\n {e.stopPropagation();}}\n >\n \n {this.translateOperations(item)}\n \n \n {advancedOperations.map((item, index)=> {\n return ({this.translateOperations(item)});\n })}\n \n \n );\n } else {\n return ({this.translateOperations(item)});\n }\n })}\n \n \n );\n }\n\n // mobile menu\n operations.pop(); // removed the last item 'Advanced'\n operations.unshift('Delete');\n operations.unshift('Share');\n this.props.isStarred ? operations.unshift('Unstar') : operations.unshift('Star');\n\n return (\n \n \n
    \n
    \n
    \n {operations.map((item, index) => {\n if (item != 'Divider') {\n return ({this.translateOperations(item)});\n }\n return null;\n })}\n
    \n
    \n
    \n );\n }\n}\n\nMylibRepoMenu.propTypes = propTypes;\n\nexport default MylibRepoMenu;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport OpIcon from '../op-icon';\nimport { SeahubSelect } from '../common/select';\n\nconst propTypes = {\n isTextMode: PropTypes.bool.isRequired,\n isEditIconShow: PropTypes.bool.isRequired,\n currentPermission: PropTypes.string.isRequired,\n onPermissionChanged: PropTypes.func.isRequired,\n};\n\nclass RepoAPITokenPermissionEditor extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isEditing: false,\n };\n this.options = [\n { value: 'rw', label:
    {gettext('Read-Write')}
    },\n { value: 'r', label:
    {gettext('Read-Only')}
    }\n ];\n }\n\n componentDidMount() {\n document.addEventListener('click', this.onHideSelect);\n }\n\n componentWillUnmount() {\n document.removeEventListener('click', this.onHideSelect);\n }\n\n onHideSelect = () => {\n this.setState({ isEditing: false });\n };\n\n onEditPermission = (e) => {\n e.nativeEvent.stopImmediatePropagation();\n this.setState({ isEditing: true });\n };\n\n onPermissionChanged = (e) => {\n if (e.value !== this.props.currentPermission) {\n this.props.onPermissionChanged(e.value);\n }\n this.setState({ isEditing: false });\n };\n\n onSelectHandler = (e) => {\n e.nativeEvent.stopImmediatePropagation();\n };\n\n render() {\n const { currentPermission, isTextMode } = this.props;\n let optionTranslation = currentPermission === 'rw' ? gettext('Read-Write') : gettext('Read-Only');\n return (\n
    \n {(isTextMode && !this.state.isEditing) ?\n \n {optionTranslation}\n {this.props.isEditIconShow &&\n \n }\n \n :\n opt.value === currentPermission) || null}\n />\n }\n
    \n );\n }\n}\n\nRepoAPITokenPermissionEditor.propTypes = propTypes;\n\nexport default RepoAPITokenPermissionEditor;\n","import React, {Fragment} from 'react';\nimport PropTypes from 'prop-types';\nimport {gettext} from '../../utils/constants';\nimport {Modal, ModalHeader, ModalBody, Button, Input} from 'reactstrap';\nimport RepoAPITokenPermissionEditor from '../select-editor/repo-api-token-permission-editor';\nimport {seafileAPI} from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../toast';\nimport copy from 'copy-to-clipboard';\nimport Loading from '../loading';\nimport OpIcon from '../op-icon';\n\nconst apiTokenItemPropTypes = {\n item: PropTypes.object.isRequired,\n deleteAPIToken: PropTypes.func.isRequired,\n updateAPIToken: PropTypes.func.isRequired,\n};\n\nclass APITokenItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOperationShow: false,\n };\n }\n\n onMouseEnter = () => {\n this.setState({isOperationShow: true});\n };\n\n onMouseLeave = () => {\n this.setState({isOperationShow: false});\n };\n\n onDeleteAPIToken = () => {\n this.props.deleteAPIToken(this.props.item.app_name);\n };\n\n onUpdateAPIToken = (permission) => {\n this.props.updateAPIToken(this.props.item.app_name, permission);\n };\n\n onCopyAPIToken = () => {\n let api_token = this.props.item.api_token;\n copy(api_token);\n toaster.success(gettext('API token is copied to the clipboard.'));\n };\n\n render() {\n let item = this.props.item;\n\n return (\n \n {item.app_name}\n \n \n \n \n {item.api_token}\n {this.state.isOperationShow &&\n \n }\n \n \n \n \n \n );\n }\n}\n\nAPITokenItem.propTypes = apiTokenItemPropTypes;\n\nconst propTypes = {\n repo: PropTypes.object.isRequired,\n onRepoAPITokenToggle: PropTypes.func.isRequired,\n};\n\nclass RepoAPITokenDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n apiTokenList: [],\n permission: 'rw',\n appName: '',\n errorMsg: '',\n loading: true,\n isSubmitBtnActive: true,\n };\n this.repo = this.props.repo;\n }\n\n listAPITokens = () => {\n seafileAPI.listRepoAPITokens(this.repo.repo_id).then((res) => {\n this.setState({\n apiTokenList: res.data.repo_api_tokens,\n loading: false,\n });\n }).catch(error => {\n if (error.response.status === 403) {\n this.setState({\n errorMsg: gettext('Permission denied'),\n });\n } else {\n this.handleError(error);\n }\n });\n };\n\n onInputChange = (e) => {\n let appName = e.target.value;\n this.setState({\n appName: appName,\n });\n };\n\n onKeyDown = (e) => {\n if (e.keyCode === 13) {\n e.preventDefault();\n this.addAPIToken();\n }\n };\n\n setPermission = (permission) => {\n this.setState({permission: permission});\n };\n\n addAPIToken = () => {\n if (!this.state.appName) {\n return;\n }\n\n this.setState({\n isSubmitBtnActive: false,\n });\n const {appName, permission, apiTokenList} = this.state;\n\n seafileAPI.addRepoAPIToken(this.repo.repo_id, appName, permission).then((res) => {\n apiTokenList.push(res.data);\n this.setState({\n apiTokenList: apiTokenList,\n isSubmitBtnActive: true,\n });\n }).catch(error => {\n this.handleError(error);\n this.setState({\n isSubmitBtnActive: true,\n });\n });\n };\n\n deleteAPIToken = (appName) => {\n seafileAPI.deleteRepoAPIToken(this.repo.repo_id, appName).then((res) => {\n const apiTokenList = this.state.apiTokenList.filter(item => {\n return item.app_name !== appName;\n });\n this.setState({\n apiTokenList: apiTokenList,\n });\n }).catch(error => {\n this.handleError(error);\n });\n };\n\n updateAPIToken = (appName, permission) => {\n seafileAPI.updateRepoAPIToken(this.repo.repo_id, appName, permission).then((res) => {\n let apiTokenList = this.state.apiTokenList.filter(item => {\n if (item.app_name === appName) {\n item.permission = permission;\n }\n return item;\n });\n this.setState({\n apiTokenList: apiTokenList,\n });\n }).catch(error => {\n this.handleError(error);\n });\n };\n\n handleError = (e) => {\n if (e.response) {\n toaster.danger(e.response.data.error_msg || e.response.data.detail || gettext('Error'), {duration: 3});\n } else {\n toaster.danger(gettext('Please check the network.'), {duration: 3});\n }\n };\n\n componentDidMount() {\n this.listAPITokens();\n }\n\n renderContent = () => {\n const renderAPITokenList = this.state.apiTokenList.map((item, index) => {\n return (\n \n );\n });\n\n const thead = (\n \n \n {gettext('App Name')}\n {gettext('Permission')}\n API Token\n \n \n \n );\n return (\n \n {this.state.errorMsg &&\n

    {this.state.errorMsg}

    \n }\n {!this.state.errorMsg &&\n \n \n {thead}\n \n \n \n \n \n \n \n \n
    \n \n \n \n --\n \n
    \n
    \n {this.state.apiTokenList.length !== 0 &&\n \n {thead}\n \n {renderAPITokenList}\n \n
    \n }\n
    \n {this.state.loading && }\n
    \n }\n
    \n );\n };\n\n render() {\n let repo = this.repo;\n\n const itemName = '' + Utils.HTMLescape(repo.repo_name) + '';\n const title = gettext('{placeholder} API Token').replace('{placeholder}', itemName);\n return (\n \n \n

    \n
    \n \n
    \n {this.renderContent()}\n
    \n
    \n \n );\n }\n}\n\nRepoAPITokenDialog.propTypes = propTypes;\n\nexport default RepoAPITokenDialog;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\n\nclass DeleteSeatablesDialog extends Component {\n\n static propTypes = {\n t: PropTypes.func,\n accountName: PropTypes.string,\n onDeleteSeatables: PropTypes.func,\n closeDialog: PropTypes.func,\n };\n\n render () {\n const { accountName, closeDialog } = this.props;\n return (\n \n {gettext('Delete SeaTable base')}\n \n

    {gettext('Are you sure to delete SeaTable {accountName}?').replace('{accountName}', accountName)}

    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nexport default DeleteSeatablesDialog;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport DeleteSeatablesDialog from './delete-seatables-dialog';\nimport { gettext } from '../../utils/constants';\n\nclass SeatableAccountItem extends Component {\n\n constructor (props) {\n super(props);\n this.state = {\n isShowDialog: false,\n };\n }\n\n static propTypes = {\n t: PropTypes.func,\n editSeatableSettingAccount: PropTypes.func,\n deleteStableAccountSetting: PropTypes.func,\n setting: PropTypes.object,\n index: PropTypes.number,\n };\n\n openDialog = () => {\n this.setState({isShowDialog: true});\n };\n\n closeDialog = () => {\n this.setState({isShowDialog: false});\n };\n\n onDeleteSeatables = () => {\n const { setting } = this.props;\n this.props.deleteStableAccountSetting(setting, 'seatable_account_manage');\n this.closeDialog();\n };\n\n render() {\n const { isShowDialog } = this.state;\n const { setting, t, index } = this.props;\n const { base_api_token, base_name, seatable_server_url } = setting;\n return (\n \n {base_name}\n \n {seatable_server_url}\n \n \n \n \n \n \n \n \n \n {isShowDialog &&\n \n }\n \n );\n }\n}\n\nexport default SeatableAccountItem;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'reactstrap';\nimport { gettext, mediaUrl } from '../../utils/constants';\nimport SeatableAccountItem from './seatable-account-setting-item';\n\nclass SeatableAccountSettingList extends Component {\n\n static propTypes = {\n accounts: PropTypes.array,\n changeStatus: PropTypes.func,\n editSeatableSettingAccount: PropTypes.func,\n seatableSettings: PropTypes.array,\n deleteStableAccountSetting: PropTypes.func,\n };\n\n renderContent = () => {\n const { seatableSettings } = this.props;\n if (!Array.isArray(seatableSettings) || seatableSettings.length === 0) {\n return (\n
    \n {gettext('No\n

    {gettext('No SeaTable bases')}

    \n
    \n );\n }\n return (\n <>\n \n \n \n \n \n \n \n \n
    {gettext('SeaTable base name')}{gettext('SeaTable server URL')}
    \n
    \n \n \n {seatableSettings.map((setting, index) => {\n return (\n \n );\n })}\n \n
    \n
    \n \n );\n };\n\n render() {\n return (\n
    \n
    \n {'SeaTable'}\n \n
    \n
    \n {this.renderContent()}\n
    \n
    \n );\n }\n}\n\nexport default SeatableAccountSettingList;\n","import React, { Component } from 'react';\nimport { Alert, Input, FormGroup, Label, InputGroup, InputGroupText } from 'reactstrap';\nimport PropTypes from 'prop-types';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { gettext } from '../../utils/constants';\n\nclass AddSeatableAccountSetting extends Component {\n\n static propTypes = {\n t: PropTypes.func,\n changeStatus: PropTypes.func,\n onSubmit: PropTypes.func,\n currentDtableInfo: PropTypes.object,\n addSeatableAccountSetting: PropTypes.func,\n };\n\n constructor(props) {\n super(props);\n const { currentDtableInfo } = props;\n this.state = {\n errMessage: '',\n base_name: currentDtableInfo?.base_name || '',\n seatable_url: currentDtableInfo?.seatable_url || '',\n seatable_api_token: currentDtableInfo?.base_api_token || '',\n successMessage: null,\n stage: 'toCheck', // toCheck: need to check -> toSubmit: need to submit\n passwordType: 'password'\n };\n }\n\n onChangeBaseName = (event) => {\n let value = event.target.value;\n if (value === this.state.base_name) {\n return;\n }\n this.setState({\n base_name: value,\n errMessage: '',\n });\n };\n\n onChangeSeatableUrl = (event) => {\n let value = event.target.value;\n if (value === this.state.seatable_url) {\n return;\n }\n this.setState({\n seatable_url: value,\n successMessage: null,\n stage: 'toCheck',\n errMessage: '',\n });\n };\n\n onChangeSeatableApiToken = (event) => {\n let value = event.target.value;\n if (value === this.state.seatable_api_token) {\n return;\n }\n this.setState({\n seatable_api_token: value,\n successMessage: null,\n stage: 'toCheck',\n errMessage: '',\n });\n };\n\n addSeatableAccountSetting = () => {\n let { base_name, seatable_url, seatable_api_token } = this.state;\n base_name = base_name.trim();\n seatable_url = seatable_url.trim();\n seatable_api_token = seatable_api_token.trim();\n let errMessage = '';\n if (!base_name) {\n errMessage = gettext('SeaTable base name is required');\n }\n else if (!seatable_url) {\n errMessage = gettext('SeaTable server URL is required');\n }\n else if (!seatable_api_token) {\n errMessage = gettext('SeaTable API token is required');\n }\n\n this.setState({errMessage});\n if (errMessage) return;\n let detail = {\n base_name,\n seatable_url,\n seatable_api_token\n };\n this.props.onSubmit(detail, 'seatable_account_manage');\n };\n\n testSeatableAPIToken = async () => {\n const { seatable_url, seatable_api_token } = this.state;\n seafileAPI.req.defaults.headers.Authorization = `Token ${seatable_api_token}`;\n const [res, err] = await seafileAPI.req.get(`${seatable_url}api/v2.1/dtable/app-access-token/`).then(res => [res, null]).catch((err) => [null, err]);\n if (res) {\n this.setState({\n successMessage: res.data,\n stage: 'toSubmit',\n });\n }\n if (err) {\n this.setState({\n errMessage: gettext('URL or SeaTable API token is invalid'),\n });\n }\n };\n\n togglePasswordShow = () => {\n if (this.state.passwordType === 'password') {\n this.setState({passwordType: 'text'});\n } else {\n this.setState({passwordType: 'password'});\n }\n };\n\n render() {\n const { errMessage, stage, successMessage, base_name, seatable_url, seatable_api_token, passwordType } = this.state;\n return (\n
    \n
    \n \n \n \n \n {gettext('Add SeaTable Integration')}\n \n {stage === 'toCheck' ? gettext('Check') : gettext('Submit')}\n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n {errMessage && {errMessage}}\n {successMessage && (\n \n \n {gettext('Successfully connected to SeaTable')}\n \n )}\n
    \n
    \n );\n }\n}\n\nexport default AddSeatableAccountSetting;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap';\nimport SeatableAccountSettingList from '../seatable-integration-account-setting-widgets/seatable-account-setting-list.js';\nimport AddSeatableAccountSetting from '../../components/seatable-integration-account-setting-widgets/add-seatable-account-setting.js';\nimport toaster from '../toast';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport { gettext, internalFilePath, dirPath } from '../../utils/constants';\n\nimport '../../css/repo-seatable-integration-dialog.css';\n\nconst propTypes = {\n repo: PropTypes.object.isRequired,\n onSeaTableIntegrationToggle: PropTypes.func.isRequired,\n};\n\nconst STATUS = {\n SEATABLE_ACCOUNT_MANAGE: 'seatable_account_manage',\n ADD_SETABLE_ACCOUNT: 'add_seatable_account',\n UPDATE_SEATABLE_ACCOUNT: 'update_seatable_account'\n};\n\nclass RepoSeaTableIntegrationDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n activeTab: 'SeaTable',\n seatableSettings: [],\n baseApiToken: '',\n isPasswordVisible: false,\n isShowDialog: false,\n currentDtableInfo: {},\n status: STATUS.SEATABLE_ACCOUNT_MANAGE,\n };\n this.repo = this.props.repo;\n }\n\n componentDidMount() {\n this.getSeatableSettings();\n }\n\n getSeatableSettings = async (status) => {\n seafileAPI.req.defaults.headers.Authorization = null;\n const [downloadLinkRes] = await seafileAPI.getFileDownloadLink(this.repo.repo_id, internalFilePath).then(res => [res, null]).catch((err) => [null, err]);\n if (downloadLinkRes && downloadLinkRes.data) {\n const fileInfoRes = await seafileAPI.getFileContent(downloadLinkRes.data);\n if (fileInfoRes?.data && fileInfoRes.data) {\n this.setState({\n seatableSettings: fileInfoRes.data\n });\n status && this.setState({ status });\n }\n }\n };\n\n changeTab = (tab) => {\n if (this.state.activeTab !== tab) {\n this.setState({activeTab: tab});\n }\n };\n\n changeStatus = (status) => {\n this.setState({status});\n };\n\n getFile = (detail, fileList) => {\n const { base_name, seatable_url, seatable_api_token } = detail;\n let content = [{\n 'base_name': base_name,\n 'seatable_server_url': seatable_url,\n 'base_api_token': seatable_api_token\n }];\n\n if (fileList && fileList.length !== 0) {\n const index = fileList?.findIndex((item) => item.base_api_token === seatable_api_token);\n if (index !== -1) {\n fileList[index] = content[0];\n } else {\n fileList.push(content[0]);\n }\n content = fileList;\n }\n\n const fileName = internalFilePath.split('/')[2];\n const fileContent = JSON.stringify(content);\n const newFile = new File([fileContent], fileName);\n return newFile;\n };\n\n editSeatableSettingAccount = (baseApiToken) => {\n const { seatableSettings } = this.state;\n this.setState({\n status: STATUS.UPDATE_SEATABLE_ACCOUNT,\n currentDtableInfo: seatableSettings.find((item) => item.base_api_token === baseApiToken)\n });\n };\n\n deleteStableAccountSetting = async (setting, status) => {\n const { base_api_token } = setting;\n seafileAPI.req.defaults.headers.Authorization = null;\n const [downloadLinkRes] = await seafileAPI.getFileDownloadLink(this.repo.repo_id, internalFilePath).then(res => [res, null]).catch((err) => [null, err]);\n if (downloadLinkRes && downloadLinkRes.data) {\n const fileInfoRes = await seafileAPI.getFileContent(downloadLinkRes.data);\n if (fileInfoRes?.data) {\n const fileList = fileInfoRes.data;\n const index = fileList?.findIndex((item) => item.base_api_token === base_api_token);\n if (index !== -1) {\n fileList.splice(index, 1);\n const fileContent = JSON.stringify(fileList);\n const fileName = internalFilePath.split('/')[2];\n const newFile = new File([fileContent], fileName);\n const updateLink = await seafileAPI.getUpdateLink(this.repo.repo_id, internalFilePath.slice(0, 10));\n await seafileAPI.updateFile(updateLink.data, internalFilePath, fileName, newFile).catch(err => {toaster.danger(gettext(err.message));});\n this.getSeatableSettings(status);\n }\n }\n }\n };\n\n onSubmit = async (detail, status) => {\n seafileAPI.req.defaults.headers.Authorization = null;\n const [downloadLinkRes, err] = await seafileAPI.getFileDownloadLink(this.repo.repo_id, internalFilePath).then(res => [res, null]).catch((err) => [null, err]);\n // Contains configuration files\n if (downloadLinkRes && downloadLinkRes.data) {\n const fileInfoRes = await seafileAPI.getFileContent(downloadLinkRes.data);\n if (fileInfoRes?.data) {\n const newFile = this.getFile(detail, fileInfoRes.data);\n const updateLink = await seafileAPI.getUpdateLink(this.repo.repo_id, internalFilePath.slice(0, 10));\n const fileName = internalFilePath.split('/')[2];\n await seafileAPI.updateFile(updateLink.data, internalFilePath, fileName, newFile).catch(err => {toaster.danger(gettext(err.message));});\n this.getSeatableSettings(status);\n }\n }\n // No configuration file\n if (err) {\n const uploadLink = await seafileAPI.getFileServerUploadLink(this.repo.repo_id, dirPath);\n const newFile = this.getFile(detail);\n const formData = new FormData();\n formData.append('file', newFile);\n formData.append('relative_path', internalFilePath.split('/')[1]);\n formData.append('parent_dir', dirPath);\n await seafileAPI.uploadImage(uploadLink.data + '?ret-json=1', formData).catch(err => {toaster.danger(gettext(err.message));});\n this.getSeatableSettings(status);\n }\n };\n\n render() {\n const { seatableSettings, status, currentDtableInfo } = this.state;\n const { onSeaTableIntegrationToggle } = this.props;\n let repo = this.repo;\n const itemName = '' + Utils.HTMLescape(repo.repo_name) + '';\n const title = gettext('{placeholder} SeaTable integration').replace('{placeholder}', itemName);\n\n return (\n \n \n

    \n
    \n \n
    \n {status === STATUS.SEATABLE_ACCOUNT_MANAGE && (\n this.changeStatus(STATUS.ADD_SETABLE_ACCOUNT)}\n editSeatableSettingAccount={this.editSeatableSettingAccount}\n deleteStableAccountSetting={this.deleteStableAccountSetting}\n />\n )}\n {status === STATUS.ADD_SETABLE_ACCOUNT && (\n this.changeStatus(STATUS.SEATABLE_ACCOUNT_MANAGE)}\n onSubmit={this.onSubmit}\n />\n )}\n {status === STATUS.UPDATE_SEATABLE_ACCOUNT && (\n this.changeStatus(STATUS.SEATABLE_ACCOUNT_MANAGE)}\n onSubmit={this.onSubmit}\n />\n )}\n
    \n
    \n
    \n );\n }\n}\n\nRepoSeaTableIntegrationDialog.propTypes = propTypes;\n\nexport default RepoSeaTableIntegrationDialog;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext, siteRoot } from '../../../utils/constants';\nimport Loading from '../../../components/loading';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\n\nconst itemPropTypes = {\n item: PropTypes.object.isRequired,\n deleteItem: PropTypes.func.isRequired\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOperationShow: false\n };\n }\n\n onMouseEnter = () => {\n this.setState({isOperationShow: true});\n };\n\n onMouseLeave = () => {\n this.setState({isOperationShow: false});\n };\n\n onDeleteLink = (e) => {\n e.preventDefault();\n this.props.deleteItem(this.props.item);\n };\n\n render() {\n let objUrl;\n let item = this.props.item;\n let path = item.path === '/' ? '/' : item.path.slice(0, item.path.length - 1);\n\n if (item.is_dir) {\n objUrl = `${siteRoot}library/${item.repo_id}/${encodeURIComponent(item.repo_name)}${Utils.encodePath(path)}`;\n } else {\n objUrl = `${siteRoot}lib/${item.repo_id}/file${Utils.encodePath(item.path)}`;\n }\n\n return (\n \n {item.creator_name}\n \n {item.is_dir ?\n {item.obj_name}\n :\n {item.obj_name}\n }\n \n \n {item.link}\n \n \n \n \n \n \n );\n }\n}\n\nItem.propTypes = itemPropTypes;\n\nconst propTypes = {\n repo: PropTypes.object.isRequired,\n};\n\nclass RepoShareAdminShareLinks extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n items: []\n };\n }\n\n componentDidMount() {\n seafileAPI.listRepoShareLinks(this.props.repo.repo_id).then((res) => {\n this.setState({\n loading: false,\n items: res.data,\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n deleteItem = (item) => {\n seafileAPI.deleteRepoShareLink(this.props.repo.repo_id, item.token).then(() => {\n let items = this.state.items.filter(linkItem => {\n return linkItem.token !== item.token;\n });\n this.setState({items: items});\n let message = gettext('Successfully deleted 1 item');\n toaster.success(message);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const { loading, errorMsg, items } = this.state;\n return (\n \n {loading && }\n {!loading && errorMsg &&

    {errorMsg}

    }\n {!loading && !errorMsg && !items.length &&\n \n

    {gettext('No share links')}

    \n
    \n }\n {!loading && !errorMsg && items.length > 0 &&\n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return (\n \n );\n })}\n \n
    {gettext('Creator')}{gettext('Name')}{gettext('Link')}
    \n }\n
    \n );\n }\n}\n\nRepoShareAdminShareLinks.propTypes = propTypes;\n\nexport default RepoShareAdminShareLinks;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext, siteRoot } from '../../../utils/constants';\nimport Loading from '../../../components/loading';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\n\nconst itemPropTypes = {\n item: PropTypes.object.isRequired,\n deleteItem: PropTypes.func.isRequired\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOperationShow: false\n };\n }\n\n onMouseEnter = () => {\n this.setState({isOperationShow: true});\n };\n\n onMouseLeave = () => {\n this.setState({isOperationShow: false});\n };\n\n onDeleteLink = (e) => {\n e.preventDefault();\n this.props.deleteItem(this.props.item);\n };\n\n render() {\n let item = this.props.item;\n let path = item.path === '/' ? '/' : item.path.slice(0, item.path.length - 1);\n let objUrl = `${siteRoot}library/${item.repo_id}/${encodeURIComponent(item.repo_name)}${Utils.encodePath(path)}`;\n\n return (\n \n {item.creator_name}\n \n {item.obj_name}\n \n \n {item.link}\n \n \n \n \n \n \n );\n }\n}\n\nItem.propTypes = itemPropTypes;\n\nconst propTypes = {\n repo: PropTypes.object.isRequired,\n};\n\nclass RepoShareAdminUploadLinks extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n items: [],\n };\n }\n\n componentDidMount() {\n seafileAPI.listRepoUploadLinks(this.props.repo.repo_id).then((res) => {\n this.setState({\n loading: false,\n items: res.data,\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n deleteItem = (item) => {\n seafileAPI.deleteRepoUploadLink(this.props.repo.repo_id, item.token).then(() => {\n let items = this.state.items.filter(linkItem => {\n return linkItem.token !== item.token;\n });\n this.setState({items: items});\n let message = gettext('Successfully deleted 1 item');\n toaster.success(message);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const { loading, errorMsg, items } = this.state;\n return (\n \n {loading && }\n {!loading && errorMsg &&

    {errorMsg}

    }\n {!loading && !errorMsg && !items.length &&\n \n

    {gettext('No upload links')}

    \n
    \n }\n {!loading && !errorMsg && items.length > 0 &&\n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return (\n \n );\n })}\n \n
    {gettext('Creator')}{gettext('Name')}{gettext('Link')}
    \n }\n
    \n );\n }\n}\n\nRepoShareAdminUploadLinks.propTypes = propTypes;\n\nexport default RepoShareAdminUploadLinks;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext, siteRoot, isPro, username } from '../../../utils/constants';\nimport Loading from '../../../components/loading';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport SharePermissionEditor from '../../../components/select-editor/share-permission-editor';\n\nconst itemPropTypes = {\n item: PropTypes.object.isRequired,\n deleteItem: PropTypes.func.isRequired,\n isRepoOwner: PropTypes.bool.isRequired\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n permission: this.props.item.permission,\n isOperationShow: false,\n isShowPermEditor: false,\n };\n this.permissions = ['rw', 'r'];\n if (isPro) {\n if (this.props.item.path === '/' && this.props.isRepoOwner) {\n this.permissions.push('admin');\n }\n this.permissions.push('cloud-edit', 'preview');\n }\n }\n\n onMouseEnter = () => {\n this.setState({isOperationShow: true});\n };\n\n onMouseLeave = () => {\n this.setState({isOperationShow: false});\n };\n\n onDeleteLink = (e) => {\n e.preventDefault();\n this.props.deleteItem(this.props.item);\n };\n\n changePerm = (permission) => {\n const item = this.props.item;\n seafileAPI.updateShareToUserItemPermission(item.repo_id, item.path, 'user', item.share_to, permission).then(() => {\n this.setState({\n permission: permission,\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onEditPermission = (event) => {\n event.nativeEvent.stopImmediatePropagation();\n this.setState({isShowPermEditor: true});\n };\n\n render() {\n\n let objUrl;\n let item = this.props.item;\n let path = item.path === '/' ? '/' : item.path.slice(0, item.path.length - 1);\n\n objUrl = `${siteRoot}library/${item.repo_id}/${encodeURIComponent(item.repo_name)}${Utils.encodePath(path)}`;\n\n return (\n \n \n {Utils.getFolderName(item.path)}\n \n {item.share_to_name}\n \n {!this.state.isShowPermEditor && (\n
    \n {item.permission_name || Utils.sharePerms(this.state.permission)}\n {this.state.isOperationShow && (\n \n \n )}\n
    \n )}\n {this.state.isShowPermEditor && (\n \n )}\n \n \n \n \n \n \n );\n }\n}\n\nItem.propTypes = itemPropTypes;\n\nconst propTypes = {\n repo: PropTypes.object.isRequired,\n};\n\nclass RepoShareAdminUserShares extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n items: [],\n };\n }\n\n componentDidMount() {\n seafileAPI.getAllRepoFolderShareInfo(this.props.repo.repo_id, 'user').then((res) => {\n this.setState({\n loading: false,\n items: res.data.share_info_list,\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n deleteItem = (item) => {\n seafileAPI.deleteShareToUserItem(item.repo_id, item.path, 'user', item.share_to).then(res => {\n let items = this.state.items.filter(shareItem => {\n return shareItem.path + shareItem.share_to !== item.path + item.share_to;\n });\n this.setState({items: items});\n let message = gettext('Successfully deleted 1 item');\n toaster.success(message);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const { loading, errorMsg, items } = this.state;\n const { repo } = this.props;\n const isRepoOwner = repo.owner_email === username;\n return (\n \n {loading && }\n {!loading && errorMsg &&

    {errorMsg}

    }\n {!loading && !errorMsg && !items.length &&\n \n

    {gettext('No user shares')}

    \n
    \n }\n {!loading && !errorMsg && items.length > 0 &&\n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return (\n \n );\n })}\n \n
    {gettext('Name')}{gettext('User')}{gettext('Permission')}
    \n }\n
    \n );\n }\n}\n\nRepoShareAdminUserShares.propTypes = propTypes;\n\nexport default RepoShareAdminUserShares;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext, siteRoot, isPro, username } from '../../../utils/constants';\nimport Loading from '../../../components/loading';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport SharePermissionEditor from '../../../components/select-editor/share-permission-editor';\n\nconst itemPropTypes = {\n item: PropTypes.object.isRequired,\n deleteItem: PropTypes.func.isRequired,\n isRepoOwner: PropTypes.bool.isRequired\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n permission: this.props.item.permission,\n isOperationShow: false,\n isShowPermEditor: false,\n };\n this.permissions = ['rw', 'r'];\n if (isPro) {\n if (this.props.item.path === '/' && this.props.isRepoOwner) {\n this.permissions.push('admin');\n }\n this.permissions.push('cloud-edit', 'preview');\n }\n }\n\n onMouseEnter = () => {\n this.setState({isOperationShow: true});\n };\n\n onMouseLeave = () => {\n this.setState({isOperationShow: false});\n };\n\n onDeleteLink = (e) => {\n e.preventDefault();\n this.props.deleteItem(this.props.item);\n };\n\n changePerm = (permission) => {\n const item = this.props.item;\n seafileAPI.updateShareToGroupItemPermission(item.repo_id, item.path, 'group', item.share_to, permission).then(() => {\n this.setState({\n permission: permission,\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onEditPermission = (event) => {\n event.nativeEvent.stopImmediatePropagation();\n this.setState({isShowPermEditor: true});\n };\n\n render() {\n\n let objUrl;\n let item = this.props.item;\n let path = item.path === '/' ? '/' : item.path.slice(0, item.path.length - 1);\n\n objUrl = `${siteRoot}library/${item.repo_id}/${encodeURIComponent(item.repo_name)}${Utils.encodePath(path)}`;\n\n return (\n \n \n {Utils.getFolderName(item.path)}\n \n {item.share_to_name}\n \n {!this.state.isShowPermEditor && (\n
    \n {item.permission_name || Utils.sharePerms(this.state.permission)}\n {this.state.isOperationShow && (\n \n \n )}\n
    \n )}\n {this.state.isShowPermEditor && (\n \n )}\n \n \n \n \n \n \n );\n }\n}\n\nItem.propTypes = itemPropTypes;\n\nconst propTypes = {\n repo: PropTypes.object.isRequired,\n};\n\nclass RepoShareAdminGroupShares extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n items: [],\n };\n }\n\n componentDidMount() {\n seafileAPI.getAllRepoFolderShareInfo(this.props.repo.repo_id, 'group').then((res) => {\n this.setState({\n loading: false,\n items: res.data.share_info_list,\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n deleteItem = (item) => {\n seafileAPI.deleteShareToGroupItem(item.repo_id, item.path, 'group', item.share_to).then(res => {\n let items = this.state.items.filter(shareItem => {\n return shareItem.path + shareItem.share_to !== item.path + item.share_to;\n });\n this.setState({items: items});\n let message = gettext('Successfully deleted 1 item');\n toaster.success(message);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const { loading, errorMsg, items } = this.state;\n const { repo } = this.props;\n const isRepoOwner = repo.owner_email === username;\n return (\n \n {loading && }\n {!loading && errorMsg &&

    {errorMsg}

    }\n {!loading && !errorMsg && !items.length &&\n \n

    {gettext('No group shares')}

    \n
    \n }\n {!loading && !errorMsg && items.length > 0 &&\n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return (\n \n );\n })}\n \n
    {gettext('Name')}{gettext('Group')}{gettext('Permission')}
    \n }\n
    \n );\n }\n}\n\nRepoShareAdminGroupShares.propTypes = propTypes;\n\nexport default RepoShareAdminGroupShares;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody, TabContent, TabPane, Nav, NavItem, NavLink } from 'reactstrap';\nimport { gettext, canGenerateShareLink, canGenerateUploadLink } from '../../utils/constants';\nimport RepoShareAdminShareLinks from './repo-share-admin/share-links';\nimport RepoShareAdminUploadLinks from './repo-share-admin/upload-links';\nimport RepoShareAdminUserShares from './repo-share-admin/user-shares';\nimport RepoShareAdminGroupShares from './repo-share-admin/group-shares';\n\nconst propTypes = {\n repo: PropTypes.object.isRequired,\n toggleDialog: PropTypes.func.isRequired,\n};\n\nclass RepoShareAdminDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.enableShareLink = !this.props.repo.encrypted && canGenerateShareLink;\n this.enableUploadLink = !this.props.repo.encrypted && canGenerateUploadLink;\n this.state = {\n activeTab: this.getInitialActiveTab()\n };\n }\n\n getInitialActiveTab = () => {\n if (this.enableShareLink) {\n return 'shareLink';\n } else if (this.enableUploadLink) {\n return 'uploadLink';\n } else {\n return 'shareToUser';\n }\n };\n\n toggle = (tab) => {\n if (this.state.activeTab !== tab) {\n this.setState({ activeTab: tab });\n }\n };\n\n onTabKeyDown = (e) => {\n if (e.key == 'Enter' || e.key == 'Space') {\n e.target.click();\n }\n };\n\n render() {\n const { activeTab } = this.state;\n const { repo_name: repoName } = this.props.repo;\n\n return (\n
    \n \n \n {repoName} {gettext('Share Admin')}\n \n \n \n
    \n \n
    \n
    \n \n {(this.enableShareLink && activeTab === 'shareLink') &&\n \n \n \n }\n {(this.enableUploadLink && activeTab === 'uploadLink') &&\n \n \n \n }\n {activeTab === 'shareToUser' &&\n \n \n \n }\n {activeTab === 'shareToGroup' &&\n \n \n \n }\n \n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nRepoShareAdminDialog.propTypes = propTypes;\n\nexport default RepoShareAdminDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Form, FormGroup, Label, Input, Alert } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../toast';\n\nconst propTypes = {\n toggleDialog: PropTypes.func.isRequired,\n repoID: PropTypes.string.isRequired,\n};\n\nclass LibOldFilesAutoDelDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n autoDelDays: 0,\n isAutoDel: false,\n errorInfo: '',\n };\n }\n\n componentDidMount() {\n seafileAPI.getRepoOldFilesAutoDelDays(this.props.repoID).then(res => {\n this.setState({\n autoDelDays: res.data.auto_delete_days,\n isAutoDel: res.data.auto_delete_days > 0,\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n\n submit = () => {\n let daysNeedTobeSet;\n\n if (this.state.isAutoDel) {\n daysNeedTobeSet = this.state.autoDelDays;\n\n let reg = /^-?\\d+$/;\n let isvalid_days = reg.test(daysNeedTobeSet);\n if (!isvalid_days || daysNeedTobeSet <= 0) {\n this.setState({\n errorInfo: gettext('Please enter a positive integer'),\n });\n return;\n }\n\n } else {\n daysNeedTobeSet = 0; // if no auto del, give 0 to server\n }\n\n\n let repoID = this.props.repoID;\n\n seafileAPI.setRepoOldFilesAutoDelDays(repoID, daysNeedTobeSet).then(res => {\n this.props.toggleDialog();\n toaster.success(gettext('Successfully set it.'));\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.submit();\n e.preventDefault();\n }\n };\n\n onChange = (e) => {\n let days = e.target.value;\n this.setState({\n autoDelDays: days,\n });\n };\n\n updateRadioCheck = (type) => {\n if (type === 'noAutoDel') {\n this.setState({\n isAutoDel: false,\n });\n } else if (type === 'autoDel') {\n this.setState({\n isAutoDel: true,\n });\n }\n };\n\n render() {\n return (\n \n \n {gettext('Auto deletion')}\n \n \n
    \n \n {this.updateRadioCheck('noAutoDel');}}/>{' '}\n \n \n \n {this.updateRadioCheck('autoDel');}}/>{' '}\n \n {' '}\n \n \n {this.state.errorInfo && {this.state.errorInfo}}\n
    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nLibOldFilesAutoDelDialog.propTypes = propTypes;\n\nexport default LibOldFilesAutoDelDialog;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport MediaQuery from 'react-responsive';\nimport moment from 'moment';\nimport { Link, navigate } from '@gatsbyjs/reach-router';\nimport { Utils } from '../../utils/utils';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { gettext, siteRoot, storages } from '../../utils/constants';\nimport ModalPortal from '../../components/modal-portal';\nimport ShareDialog from '../../components/dialog/share-dialog';\nimport toaster from '../../components/toast';\nimport DeleteRepoDialog from '../../components/dialog/delete-repo-dialog';\nimport TransferDialog from '../../components/dialog/transfer-dialog';\nimport LibHistorySettingDialog from '../../components/dialog/lib-history-setting-dialog';\nimport ChangeRepoPasswordDialog from '../../components/dialog/change-repo-password-dialog';\nimport ResetEncryptedRepoPasswordDialog from '../../components/dialog/reset-encrypted-repo-password-dialog';\nimport LabelRepoStateDialog from '../../components/dialog/label-repo-state-dialog';\nimport LibSubFolderPermissionDialog from '../../components/dialog/lib-sub-folder-permission-dialog';\nimport Rename from '../../components/rename';\nimport MylibRepoMenu from './mylib-repo-menu';\nimport RepoAPITokenDialog from '../../components/dialog/repo-api-token-dialog';\nimport RepoSeaTableIntegrationDialog from '../../components/dialog/repo-seatable-integration-dialog';\nimport RepoShareAdminDialog from '../../components/dialog/repo-share-admin-dialog';\nimport LibOldFilesAutoDelDialog from '../../components/dialog/lib-old-files-auto-del-dialog';\nimport RepoMonitoredIcon from '../../components/repo-monitored-icon';\n\nconst propTypes = {\n repo: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n onRenameRepo: PropTypes.func.isRequired,\n onDeleteRepo: PropTypes.func.isRequired,\n onTransferRepo: PropTypes.func.isRequired,\n onRepoClick: PropTypes.func.isRequired,\n onMonitorRepo: PropTypes.func.isRequired,\n};\n\nclass MylibRepoListItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShow: false,\n isStarred: this.props.repo.starred,\n isRenaming: false,\n isShareDialogShow: false,\n isDeleteDialogShow: false,\n isTransferDialogShow: false,\n isHistorySettingDialogShow: false,\n isChangePasswordDialogShow: false,\n isResetPasswordDialogShow: false,\n isLabelRepoStateDialogOpen: false,\n isFolderPermissionDialogShow: false,\n isAPITokenDialogShow: false,\n isSeaTableIntegrationShow: false,\n isRepoShareAdminDialogOpen: false,\n isRepoDeleted: false,\n isOldFilesAutoDelDialogOpen: false,\n };\n }\n\n onFocus = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShow: true\n });\n }\n };\n\n onMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShow: true,\n highlight: true,\n });\n }\n };\n\n onMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShow: false,\n highlight: false\n });\n }\n };\n\n onMenuItemClick = (item) => {\n switch(item) {\n case 'Star':\n case 'Unstar':\n this.onToggleStarRepo();\n break;\n case 'Share':\n this.onShareToggle();\n break;\n case 'Delete':\n this.onDeleteToggle();\n break;\n case 'Rename':\n this.onRenameToggle();\n break;\n case 'Transfer':\n this.onTransferToggle();\n break;\n case 'History Setting':\n this.onHistorySettingToggle();\n break;\n case 'Change Password':\n this.onChangePasswordToggle();\n break;\n case 'Reset Password':\n this.onResetPasswordToggle();\n break;\n case 'Watch File Changes':\n this.watchFileChanges();\n break;\n case 'Unwatch File Changes':\n this.unwatchFileChanges();\n break;\n case 'Folder Permission':\n this.onFolderPermissionToggle();\n break;\n case 'Label Current State':\n this.onLabelToggle();\n break;\n case 'API Token':\n this.onAPITokenToggle();\n break;\n case 'Share Admin':\n this.toggleRepoShareAdminDialog();\n break;\n case 'Old Files Auto Delete':\n this.toggleOldFilesAutoDelDialog();\n break;\n case 'SeaTable integration':\n this.onSeaTableIntegrationToggle();\n break;\n default:\n break;\n }\n };\n\n visitRepo = () => {\n if (!this.state.isRenaming && this.props.repo.repo_name) {\n navigate(this.repoURL);\n }\n };\n\n onRepoClick = () => {\n this.props.onRepoClick(this.props.repo);\n };\n\n onToggleStarRepo = (e) => {\n e.preventDefault();\n const repoName = this.props.repo.repo_name;\n if (this.state.isStarred) {\n seafileAPI.unstarItem(this.props.repo.repo_id, '/').then(() => {\n this.setState({isStarred: !this.state.isStarred});\n const msg = gettext('Successfully unstarred {library_name_placeholder}.')\n .replace('{library_name_placeholder}', repoName);\n toaster.success(msg);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n } else {\n seafileAPI.starItem(this.props.repo.repo_id, '/').then(() => {\n this.setState({isStarred: !this.state.isStarred});\n const msg = gettext('Successfully starred {library_name_placeholder}.')\n .replace('{library_name_placeholder}', repoName);\n toaster.success(msg);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n };\n\n watchFileChanges = () => {\n const { repo } = this.props;\n seafileAPI.monitorRepo(repo.repo_id).then(() => {\n this.props.onMonitorRepo(repo, true);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n unwatchFileChanges = () => {\n const { repo } = this.props;\n seafileAPI.unMonitorRepo(repo.repo_id).then(() => {\n this.props.onMonitorRepo(repo, false);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onShareToggle = (e) => {\n // when close share dialog after send share link email,\n // there is no event\n if (e != undefined) {\n e.preventDefault();\n }\n this.setState({isShareDialogShow: !this.state.isShareDialogShow});\n };\n\n onDeleteToggle = (e) => {\n e.preventDefault();\n this.setState({isDeleteDialogShow: !this.state.isDeleteDialogShow});\n };\n\n onRenameToggle = () => {\n this.props.onFreezedItem();\n this.setState({isRenaming: !this.state.isRenaming});\n };\n\n onTransferToggle = () => {\n this.setState({isTransferDialogShow: !this.state.isTransferDialogShow});\n };\n\n onHistorySettingToggle = () => {\n this.setState({isHistorySettingDialogShow: !this.state.isHistorySettingDialogShow});\n };\n\n onChangePasswordToggle = () => {\n this.setState({isChangePasswordDialogShow: !this.state.isChangePasswordDialogShow});\n };\n\n onResetPasswordToggle = () => {\n this.setState({isResetPasswordDialogShow: !this.state.isResetPasswordDialogShow});\n };\n\n onLabelToggle = () => {\n this.setState({isLabelRepoStateDialogOpen: !this.state.isLabelRepoStateDialogOpen});\n };\n\n onFolderPermissionToggle = () => {\n this.setState({isFolderPermissionDialogShow: !this.state.isFolderPermissionDialogShow});\n };\n\n onAPITokenToggle = () => {\n this.setState({isAPITokenDialogShow: !this.state.isAPITokenDialogShow});\n };\n\n onSeaTableIntegrationToggle = () => {\n this.setState({isSeaTableIntegrationShow: !this.state.isSeaTableIntegrationShow});\n };\n\n toggleRepoShareAdminDialog = () => {\n this.setState({isRepoShareAdminDialogOpen: !this.state.isRepoShareAdminDialogOpen});\n };\n\n toggleOldFilesAutoDelDialog = () => {\n this.setState({isOldFilesAutoDelDialogOpen: !this.state.isOldFilesAutoDelDialogOpen});\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false,\n });\n this.props.onUnfreezedItem();\n };\n\n onRenameConfirm = (newName) => {\n let repo = this.props.repo;\n let repoID = repo.repo_id;\n seafileAPI.renameRepo(repoID, newName).then(() => {\n this.props.onRenameRepo(repo, newName);\n this.onRenameCancel();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onRenameCancel = () => {\n this.props.onUnfreezedItem();\n this.setState({isRenaming: !this.state.isRenaming});\n };\n\n onTransferRepo = (user) => {\n let repoID = this.props.repo.repo_id;\n seafileAPI.transferRepo(repoID, user.email).then(res => {\n this.props.onTransferRepo(repoID);\n let message = gettext('Successfully transferred the library.');\n toaster.success(message);\n }).catch(error => {\n if (error.response){\n toaster.danger(error.response.data.error_msg || gettext('Error'), {duration: 3});\n } else {\n toaster.danger(gettext('Failed. Please check the network.'), {duration: 3});\n }\n });\n this.onTransferToggle();\n };\n\n onDeleteRepo = (repo) => {\n seafileAPI.deleteRepo(repo.repo_id).then((res) => {\n\n this.setState({\n isRepoDeleted: true,\n isDeleteDialogShow: false,\n });\n\n this.props.onDeleteRepo(repo);\n let name = repo.repo_name;\n var msg = gettext('Successfully deleted {name}.').replace('{name}', name);\n toaster.success(msg);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n if (errMessage === gettext('Error')) {\n let name = repo.repo_name;\n errMessage = gettext('Failed to delete {name}.').replace('{name}', name);\n }\n toaster.danger(errMessage);\n\n this.setState({isRepoDeleted: false});\n });\n };\n\n renderPCUI = () => {\n let repo = this.props.repo;\n let iconUrl = Utils.getLibIconUrl(repo);\n let iconTitle = Utils.getLibIconTitle(repo);\n let repoURL = `${siteRoot}library/${repo.repo_id}/${Utils.encodePath(repo.repo_name)}/`;\n return (\n \n \n \n \n \n \n {iconTitle}\n \n {this.state.isRenaming && (\n \n )}\n {!this.state.isRenaming && repo.repo_name && (\n \n {repo.repo_name}\n {repo.monitored && }\n \n )}\n {!this.state.isRenaming && !repo.repo_name &&\n (gettext('Broken (please contact your administrator to fix this library)'))\n }\n \n \n {(repo.repo_name && this.state.isOpIconShow) && (\n
    \n \n \n \n
    \n )}\n \n {repo.size}\n {storages.length > 0 && {repo.storage_name}}\n {moment(repo.last_modified).fromNow()}\n \n );\n };\n\n renderMobileUI = () => {\n let repo = this.props.repo;\n let iconUrl = Utils.getLibIconUrl(repo);\n let iconTitle = Utils.getLibIconTitle(repo);\n let repoURL = this.repoURL = `${siteRoot}library/${repo.repo_id}/${Utils.encodePath(repo.repo_name)}/`;\n\n return (\n \n {iconTitle}\n \n {this.state.isRenaming && (\n \n )}\n {!this.state.isRenaming && repo.repo_name && (\n
    \n {repo.repo_name}\n {repo.monitored && }\n
    \n )}\n {!this.state.isRenaming && !repo.repo_name &&\n
    (gettext('Broken (please contact your administrator to fix this library)'))
    \n }\n {repo.size}\n {moment(repo.last_modified).fromNow()}\n \n \n {repo.repo_name && (\n \n )}\n \n \n );\n };\n\n render() {\n let repo = this.props.repo;\n return (\n \n \n {this.renderPCUI()}\n \n \n {this.renderMobileUI()}\n \n {this.state.isShareDialogShow && (\n \n \n \n )}\n {this.state.isDeleteDialogShow && (\n \n \n \n )}\n {this.state.isTransferDialogShow && (\n \n \n \n )}\n {this.state.isHistorySettingDialogShow && (\n \n \n \n )}\n {this.state.isChangePasswordDialogShow && (\n \n \n \n )}\n {this.state.isResetPasswordDialogShow && (\n \n \n \n )}\n\n {this.state.isLabelRepoStateDialogOpen && (\n \n \n \n )}\n\n {this.state.isFolderPermissionDialogShow && (\n \n \n \n )}\n\n {this.state.isAPITokenDialogShow && (\n \n \n \n )}\n\n {this.state.isSeaTableIntegrationShow && (\n \n \n \n )}\n\n {this.state.isRepoShareAdminDialogOpen && (\n \n \n \n )}\n {this.state.isOldFilesAutoDelDialogOpen && (\n \n \n \n )}\n\n \n );\n }\n}\n\nMylibRepoListItem.propTypes = propTypes;\n\nexport default MylibRepoListItem;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport MediaQuery from 'react-responsive';\nimport { gettext, storages } from '../../utils/constants';\nimport MylibRepoListItem from './mylib-repo-list-item';\nimport LibsMobileThead from '../../components/libs-mobile-thead';\n\nconst propTypes = {\n sortBy: PropTypes.string.isRequired,\n sortOrder: PropTypes.string.isRequired,\n repoList: PropTypes.array.isRequired,\n sortRepoList: PropTypes.func.isRequired,\n onRenameRepo: PropTypes.func.isRequired,\n onDeleteRepo: PropTypes.func.isRequired,\n onTransferRepo: PropTypes.func.isRequired,\n onRepoClick: PropTypes.func.isRequired,\n onMonitorRepo: PropTypes.func.isRequired,\n};\n\nclass MylibRepoListView extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false,\n };\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n sortByName = (e) => {\n e.preventDefault();\n const sortBy = 'name';\n const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';\n this.props.sortRepoList(sortBy, sortOrder);\n };\n\n sortByTime = (e) => {\n e.preventDefault();\n const sortBy = 'time';\n const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';\n this.props.sortRepoList(sortBy, sortOrder);\n };\n\n sortBySize = (e) => {\n e.preventDefault();\n const sortBy = 'size';\n const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';\n this.props.sortRepoList(sortBy, sortOrder);\n };\n\n renderRepoListView = () => {\n return (\n \n {this.props.repoList.map(item => {\n return (\n \n );\n })}\n \n );\n };\n\n renderPCUI = () => {\n const showStorageBackend = storages.length > 0;\n const sortIcon = this.props.sortOrder === 'asc' ? : ;\n return (\n \n \n \n \n \n \n \n \n {showStorageBackend ? : null}\n \n \n \n \n {this.renderRepoListView()}\n \n
    {gettext('Library Type')}{gettext('Name')} {this.props.sortBy === 'name' && sortIcon}{gettext('Actions')}{gettext('Size')} {this.props.sortBy === 'size' && sortIcon}{gettext('Storage Backend')}{gettext('Last Update')} {this.props.sortBy === 'time' && sortIcon}
    \n );\n };\n\n renderMobileUI = () => {\n return (\n \n \n \n {this.renderRepoListView()}\n \n
    \n );\n };\n\n render() {\n return (\n \n \n {this.renderPCUI()}\n \n \n {this.renderMobileUI()}\n \n \n );\n }\n}\n\nMylibRepoListView.propTypes = propTypes;\n\nexport default MylibRepoListView;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalBody } from 'reactstrap';\nimport { gettext, mediaUrl, siteName, canAddRepo } from '../../utils/constants';\n\nconst propTypes = {\n toggleDialog: PropTypes.func.isRequired\n};\n\nclass GuideForNewDialog extends React.Component {\n\n toggle = () => {\n this.props.toggleDialog();\n };\n\n render() {\n return (\n \n \n \n
    \n \"\"\n

    {gettext('Welcome to {site_name_placeholder}').replace('{site_name_placeholder}', siteName)}

    \n {canAddRepo ?\n

    {gettext('{site_name_placeholder} organizes files into libraries. Each library can be synced and shared separately. We have created a personal library for you. You can create more libraries later.').replace('{site_name_placeholder}', siteName)}

    :\n

    {gettext('{site_name_placeholder} organizes files into libraries. Each library can be synced and shared separately. However, since you are a guest user now, you can not create libraries.').replace('{site_name_placeholder}', siteName)}

    \n }\n
    \n
    \n
    \n );\n }\n}\n\nGuideForNewDialog.propTypes = propTypes;\n\nexport default GuideForNewDialog;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport cookie from 'react-cookies';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../../components/toast';\nimport Repo from '../../models/repo';\nimport Loading from '../../components/loading';\nimport EmptyTip from '../../components/empty-tip';\nimport CommonToolbar from '../../components/toolbar/common-toolbar';\nimport RepoViewToolbar from '../../components/toolbar/repo-view-toobar';\nimport LibDetail from '../../components/dirent-detail/lib-details';\nimport MylibRepoListView from './mylib-repo-list-view';\nimport SortOptionsDialog from '../../components/dialog/sort-options';\nimport GuideForNewDialog from '../../components/dialog/guide-for-new-dialog';\n\nconst propTypes = {\n onShowSidePanel: PropTypes.func.isRequired,\n onSearchedClick: PropTypes.func.isRequired,\n};\n\nclass MyLibraries extends Component {\n constructor(props) {\n super(props);\n this.state = {\n errorMsg: '',\n isLoading: true,\n repoList: [],\n isShowDetails: false,\n isSortOptionsDialogOpen: false,\n isGuideForNewDialogOpen: window.app.pageOptions.guideEnabled,\n sortBy: cookie.load('seafile-repo-dir-sort-by') || 'name', // 'name' or 'time' or 'size'\n sortOrder: cookie.load('seafile-repo-dir-sort-order') || 'asc', // 'asc' or 'desc'\n };\n\n this.emptyTip = (\n \n

    {gettext('No libraries')}

    \n

    {gettext('You have not created any libraries yet. A library is a container to organize your files and folders. A library can also be shared with others and synced to your connected devices. You can create a library by clicking the \"New Library\" button in the menu bar.')}

    \n
    \n );\n }\n\n componentDidMount() {\n seafileAPI.listRepos({type: 'mine'}).then((res) => {\n let repoList = res.data.repos.map((item) => {\n return new Repo(item);\n });\n this.setState({\n isLoading: false,\n repoList: Utils.sortRepos(repoList, this.state.sortBy, this.state.sortOrder)\n });\n }).catch((error) => {\n this.setState({\n isLoading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n toggleSortOptionsDialog = () => {\n this.setState({\n isSortOptionsDialogOpen: !this.state.isSortOptionsDialogOpen\n });\n };\n\n onCreateRepo = (repo) => {\n seafileAPI.createMineRepo(repo).then((res) => {\n const newRepo = new Repo({\n repo_id: res.data.repo_id,\n repo_name: res.data.repo_name,\n size: res.data.repo_size,\n mtime: res.data.mtime,\n owner_email: res.data.email,\n encrypted: res.data.encrypted,\n permission: res.data.permission,\n storage_name: res.data.storage_name\n });\n this.state.repoList.unshift(newRepo);\n this.setState({repoList: this.state.repoList});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n sortRepoList = (sortBy, sortOrder) => {\n cookie.save('seafile-repo-dir-sort-by', sortBy);\n cookie.save('seafile-repo-dir-sort-order', sortOrder);\n this.setState({\n sortBy: sortBy,\n sortOrder: sortOrder,\n repoList: Utils.sortRepos(this.state.repoList, sortBy, sortOrder)\n });\n };\n\n onTransferRepo = (repoID) => {\n let repoList = this.state.repoList.filter(item => {\n return item.repo_id !== repoID;\n });\n this.setState({repoList: repoList});\n };\n\n onRenameRepo = (repo, newName) => {\n let repoList = this.state.repoList.map(item => {\n if (item.repo_id === repo.repo_id) {\n item.repo_name = newName;\n }\n return item;\n });\n this.setState({repoList: repoList});\n };\n\n onMonitorRepo = (repo, monitored) => {\n let repoList = this.state.repoList.map(item => {\n if (item.repo_id === repo.repo_id) {\n item.monitored = monitored;\n }\n return item;\n });\n this.setState({repoList: repoList});\n };\n\n onDeleteRepo = (repo) => {\n let repoList = this.state.repoList.filter(item => {\n return item.repo_id !== repo.repo_id;\n });\n this.setState({repoList: repoList});\n };\n\n onRepoClick = (repo) => {\n if (this.state.isShowDetails) {\n this.onRepoDetails(repo);\n }\n };\n\n onRepoDetails = (repo) => {\n this.setState({\n currentRepo: repo,\n isShowDetails: true,\n });\n };\n\n closeDetails = () => {\n this.setState({isShowDetails: !this.state.isShowDetails});\n };\n\n toggleGuideForNewDialog = () => {\n window.app.pageOptions.guideEnabled = false;\n this.setState({\n isGuideForNewDialogOpen: false\n });\n };\n\n render() {\n return (\n \n
    \n \n \n
    \n
    \n
    \n
    \n

    {gettext('My Libraries')}

    \n {(!Utils.isDesktop() && this.state.repoList.length > 0) && }\n
    \n
    \n {this.state.isLoading && }\n {!this.state.isLoading && this.state.errorMsg &&

    {this.state.errorMsg}

    }\n {!this.state.isLoading && !this.state.errorMsg && this.state.repoList.length === 0 && this.emptyTip}\n {!this.state.isLoading && !this.state.errorMsg && this.state.repoList.length > 0 &&\n \n }\n
    \n
    \n {!this.state.isLoading && !this.state.errorMsg && this.state.isGuideForNewDialogOpen &&\n \n }\n {this.state.isSortOptionsDialogOpen &&\n \n }\n {this.state.isShowDetails && (\n
    \n \n
    \n )}\n
    \n
    \n );\n }\n}\n\nMyLibraries.propTypes = propTypes;\n\nexport default MyLibraries;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport moment from 'moment';\nimport { gettext, siteRoot, lang, trashReposExpireDays } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../../components/toast';\nimport Loading from '../../components/loading';\nimport EmptyTip from '../../components/empty-tip';\nimport CommonToolbar from '../../components/toolbar/common-toolbar';\n\nmoment.locale(lang);\n\nclass MyLibsDeleted extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n deletedRepoList: [],\n isLoading: true,\n };\n }\n\n componentDidMount() {\n seafileAPI.listDeletedRepo().then(res => {\n this.setState({\n deletedRepoList: res.data,\n isLoading: false,\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n\n refreshDeletedRepoList = (repoID) => {\n let deletedRepoList = this.state.deletedRepoList.filter(item => {\n return item.repo_id !== repoID;\n });\n this.setState({deletedRepoList: deletedRepoList});\n };\n\n render() {\n return (\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n {gettext('My Libraries')}\n /\n {gettext('Deleted Libraries')}\n
    \n
    \n
    \n {this.state.isLoading && }\n {(!this.state.isLoading && this.state.deletedRepoList.length === 0) &&\n \n

    {gettext('No deleted libraries')}

    \n

    {gettext('You have not deleted any libraries in the last {placeholder} days. A deleted library will be cleaned automatically after this period.').replace('{placeholder}', trashReposExpireDays)}

    \n
    \n }\n {this.state.deletedRepoList.length !== 0 &&\n
    \n

    {gettext('Tip: libraries deleted {placeholder} days ago will be cleaned automatically.').replace('{placeholder}', trashReposExpireDays)}

    \n \n
    \n }\n
    \n
    \n
    \n
    \n );\n }\n}\n\nclass DeletedRepoTable extends Component {\n\n render() {\n let deletedRepos = this.props.deletedRepoList;\n return (\n \n \n \n \n \n \n \n \n \n \n { deletedRepos && deletedRepos.map((item) => {\n return (\n \n );\n })}\n \n
    {/*img*/}{gettext('Name')}{gettext('Deleted Time')}
    \n );\n }\n}\n\nDeletedRepoTable.propTypes = {\n deletedRepoList: PropTypes.array.isRequired,\n refreshDeletedRepoList: PropTypes.func.isRequired,\n};\n\nclass DeletedRepoItem extends Component {\n constructor(props) {\n super(props);\n this.state = {\n hideRestoreMenu: true,\n highlight: false,\n };\n }\n\n onMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n hideRestoreMenu: false,\n highlight: true,\n });\n }\n };\n\n onMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n hideRestoreMenu: true,\n highlight: false,\n });\n }\n };\n\n restoreDeletedRepo = (e) => {\n e.preventDefault();\n let repoID = this.props.repo.repo_id;\n let repoName = this.props.repo.repo_name;\n seafileAPI.restoreDeletedRepo(repoID).then(res => {\n let message = gettext('Successfully restored the library.') + ' ' + repoName;\n toaster.success(message);\n this.props.refreshDeletedRepoList(repoID);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n if (errMessage === gettext('Error')) {\n errMessage = gettext('Failed. Please check the network.');\n }\n toaster.danger(errMessage);\n });\n };\n\n render() {\n let localTime = moment.utc(this.props.repo.del_time).toDate();\n localTime = moment(localTime).fromNow();\n let iconUrl = Utils.getLibIconUrl(this.props.repo);\n\n return (\n \n \n {this.props.repo.repo_name}\n {localTime}\n \n \n \n \n );\n }\n}\n\nDeletedRepoItem.propTypes = {\n isItemFreezed: PropTypes.bool.isRequired,\n repo: PropTypes.object.isRequired,\n refreshDeletedRepoList: PropTypes.func.isRequired,\n};\n\nMyLibsDeleted.propTypes = {\n onSearchedClick: PropTypes.func.isRequired,\n};\n\nexport default MyLibsDeleted;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, Alert } from 'reactstrap';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport Repo from '../../models/repo';\n\nconst shareRepoListItemProps = {\n repo: PropTypes.object.isRequired,\n onRepoSelect: PropTypes.func.isRequired,\n onPermissionChange: PropTypes.func.isRequired,\n};\n\nclass ShareRepoListItem extends React.Component {\n\n onRepoSelect = (e) => {\n let isChecked = e.target.checked;\n this.props.onRepoSelect(this.props.repo, isChecked);\n };\n\n onPermissionChange = (e) => {\n let permission = e.target.value;\n let repo = this.props.repo;\n this.props.onPermissionChange(repo, permission);\n };\n\n render() {\n let repo = this.props.repo;\n let iconUrl = Utils.getLibIconUrl(repo);\n return (\n \n \n {gettext('icon')}\n {repo.repo_name}\n {moment(repo.last_modified).fromNow()}\n \n \n \n \n \n \n \n );\n }\n}\n\nShareRepoListItem.propTypes = shareRepoListItemProps;\n\nconst propTypes = {\n onRepoSelectedHandler: PropTypes.func.isRequired,\n onShareRepoDialogClose: PropTypes.func.isRequired,\n};\n\nclass ShareRepoDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n repoList: [],\n currentRepo: null,\n permission: 'rw',\n selectedRepoList: [],\n errMessage: '',\n };\n }\n\n componentDidMount() {\n seafileAPI.listRepos({type: 'mine'}).then(res => {\n let repoList = res.data.repos.map(item => {\n let repo = new Repo(item);\n repo.sharePermission = 'rw';\n return repo;\n });\n this.setState({repoList: repoList});\n });\n }\n\n onRepoSelect = (repo, isChecked) => {\n let selectedRepoList = [];\n if (isChecked) {\n this.state.selectedRepoList.push(repo);\n selectedRepoList = this.state.selectedRepoList;\n } else {\n selectedRepoList = this.state.selectedRepoList.filter(item => {\n return item.repo_id !== repo.repo_id;\n });\n }\n this.setState({selectedRepoList: selectedRepoList});\n };\n\n onPermissionChange = (repo, permission) => {\n let repoList = this.state.repoList.map(item => {\n if (item.repo_id === repo.repo_id) {\n item.sharePermission = permission;\n }\n return item;\n });\n this.setState({repoList: repoList});\n };\n\n handleSubmit = () => {\n if (this.state.selectedRepoList.length === 0) {\n let errMessage = gettext('Please select a library to share.');\n this.setState({errMessage: errMessage});\n return;\n }\n\n this.props.onRepoSelectedHandler(this.state.selectedRepoList);\n this.onCloseDialog();\n };\n\n onCloseDialog = () => {\n this.props.onShareRepoDialogClose();\n };\n\n render() {\n return (\n \n {gettext('Select libraries to share')}\n \n \n \n \n \n \n \n \n \n \n \n \n {this.state.repoList.map((repo, index) => {\n return (\n \n );\n })}\n \n
    {/* select */}{/* icon */}{gettext('Name')}{gettext('Last Update')}{gettext('Permission')}
    \n
    \n {this.state.errMessage && {this.state.errMessage}}\n \n \n \n \n
    \n );\n }\n}\n\nShareRepoDialog.propTypes = propTypes;\n\nexport default ShareRepoDialog;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { Dropdown, DropdownMenu, DropdownToggle, DropdownItem } from 'reactstrap';\nimport { Link, navigate } from '@gatsbyjs/reach-router';\nimport { Utils } from '../../utils/utils';\nimport { gettext, siteRoot, isPro, username, folderPermEnabled, isSystemStaff, enableResetEncryptedRepoPassword, isEmailConfigured, enableRepoAutoDel } from '../../utils/constants';\nimport ModalPortal from '../../components/modal-portal';\nimport ShareDialog from '../../components/dialog/share-dialog';\nimport LibSubFolderPermissionDialog from '../../components/dialog/lib-sub-folder-permission-dialog';\nimport DeleteRepoDialog from '../../components/dialog/delete-repo-dialog';\nimport ChangeRepoPasswordDialog from '../../components/dialog/change-repo-password-dialog';\nimport ResetEncryptedRepoPasswordDialog from '../../components/dialog/reset-encrypted-repo-password-dialog';\nimport LibOldFilesAutoDelDialog from '../../components/dialog/lib-old-files-auto-del-dialog';\nimport Rename from '../rename';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport LibHistorySettingDialog from '../dialog/lib-history-setting-dialog';\nimport toaster from '../toast';\nimport RepoAPITokenDialog from '../dialog/repo-api-token-dialog';\nimport RepoShareAdminDialog from '../dialog/repo-share-admin-dialog';\nimport RepoMonitoredIcon from '../../components/repo-monitored-icon';\n\nconst propTypes = {\n currentGroup: PropTypes.object,\n libraryType: PropTypes.string,\n repo: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n onItemUnshare: PropTypes.func.isRequired,\n onItemDetails: PropTypes.func,\n onItemRename: PropTypes.func,\n onItemDelete: PropTypes.func,\n onMonitorRepo: PropTypes.func\n};\n\nclass SharedRepoListItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n highlight: false,\n isOperationShow: false,\n isItemMenuShow: false,\n isAdvancedMenuShown: false,\n isShowSharedDialog: false,\n isRenaming: false,\n isStarred: this.props.repo.starred,\n isFolderPermissionDialogOpen: false,\n isHistorySettingDialogShow: false,\n isDeleteDialogShow: false,\n isAPITokenDialogShow: false,\n isRepoShareAdminDialogOpen: false,\n isRepoDeleted: false,\n isChangePasswordDialogShow: false,\n isResetPasswordDialogShow: false,\n isOldFilesAutoDelDialogOpen: false,\n };\n this.isDeparementOnwerGroupMember = false;\n }\n\n onMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n highlight: true,\n isOperationShow: true,\n });\n }\n };\n\n onMouseOver = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n highlight: true,\n isOperationShow: true,\n });\n }\n };\n\n onMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n highlight: false,\n isOperationShow: false,\n });\n }\n };\n\n clickOperationMenuToggle = (e) => {\n this.toggleOperationMenu(e);\n };\n\n onDropdownToggleKeyDown = (e) => {\n if (e.key == 'Enter' || e.key == 'Space') {\n this.clickOperationMenuToggle(e);\n }\n };\n\n toggleOperationMenu = (e) => {\n let dataset = e.target ? e.target.dataset : null;\n if (dataset && dataset.toggle && dataset.toggle === 'Rename') {\n this.setState({isItemMenuShow: !this.state.isItemMenuShow});\n return;\n }\n\n this.setState(\n {isItemMenuShow: !this.state.isItemMenuShow},\n () => {\n if (this.state.isItemMenuShow) {\n this.props.onFreezedItem();\n } else {\n this.props.onUnfreezedItem();\n this.setState({\n highlight: false,\n isOperationShow: false,\n });\n }\n }\n );\n };\n\n toggleAdvancedMenuShown = (e) => {\n this.setState({ isAdvancedMenuShown: true });\n };\n\n toggleAdvancedMenu = (e) => {\n e.stopPropagation();\n this.setState({ isAdvancedMenuShown: !this.state.isAdvancedMenuShown }, () => {\n this.toggleOperationMenu(e);\n });\n };\n\n onDropDownMouseMove = (e) => {\n if (this.state.isAdvancedMenuShown && e.target && e.target.className === 'dropdown-item') {\n this.setState({\n isAdvancedMenuShown: false\n });\n }\n };\n\n getRepoComputeParams = () => {\n let repo = this.props.repo;\n\n let iconUrl = Utils.getLibIconUrl(repo);\n let iconTitle = Utils.getLibIconTitle(repo);\n let libPath = `${siteRoot}library/${repo.repo_id}/${Utils.encodePath(repo.repo_name)}/`;\n\n return { iconUrl, iconTitle, libPath };\n };\n\n onMenuItemKeyDown = (e) => {\n if (e.key == 'Enter' || e.key == 'Space') {\n this.onMenuItemClick(e);\n }\n };\n\n onMenuItemClick = (e) => {\n let operation = e.target.dataset.toggle;\n switch(operation) {\n case 'Rename':\n this.onItemRenameToggle();\n break;\n case 'Folder Permission':\n this.onItemFolderPermissionToggle();\n break;\n case 'Details':\n this.onItemDetails();\n break;\n case 'Share':\n this.onItemShare();\n break;\n case 'Unshare':\n this.onItemUnshare();\n break;\n case 'History Setting':\n this.onHistorySettingToggle();\n break;\n case 'API Token':\n this.onAPITokenToggle();\n break;\n case 'Share Admin':\n this.toggleRepoShareAdminDialog();\n break;\n case 'Change Password':\n this.onChangePasswordToggle();\n break;\n case 'Reset Password':\n this.onResetPasswordToggle();\n break;\n case 'Watch File Changes':\n this.watchFileChanges();\n break;\n case 'Unwatch File Changes':\n this.unwatchFileChanges();\n break;\n case 'Old Files Auto Delete':\n this.toggleOldFilesAutoDelDialog();\n break;\n // no default\n }\n };\n\n watchFileChanges = () => {\n const { repo } = this.props;\n seafileAPI.monitorRepo(repo.repo_id).then(() => {\n this.props.onMonitorRepo(repo, true);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n unwatchFileChanges = () => {\n const { repo } = this.props;\n seafileAPI.unMonitorRepo(repo.repo_id).then(() => {\n this.props.onMonitorRepo(repo, false);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onItemRenameToggle = () => {\n this.props.onFreezedItem();\n this.setState({\n isRenaming: !this.state.isRenaming,\n isOperationShow: !this.state.isOperationShow\n });\n };\n\n onRenameConfirm = (name) => {\n this.props.onItemRename(this.props.repo, name);\n this.onRenameCancel();\n };\n\n onRenameCancel = () => {\n this.props.onUnfreezedItem();\n this.setState({isRenaming: !this.state.isRenaming});\n };\n\n onItemFolderPermissionToggle = () => {\n this.setState({isFolderPermissionDialogOpen: !this.state.isFolderPermissionDialogOpen});\n };\n\n onHistorySettingToggle = () => {\n this.setState({isHistorySettingDialogShow: !this.state.isHistorySettingDialogShow});\n };\n\n onItemDetails = () => {\n this.props.onItemDetails(this.props.repo);\n };\n\n onItemShare = (e) => {\n e.preventDefault();\n this.setState({isShowSharedDialog: true});\n };\n\n onItemUnshare = (e) => {\n e.preventDefault();\n this.props.onItemUnshare(this.props.repo);\n };\n\n onItemDeleteToggle = (e) => {\n e.preventDefault();\n this.setState({isDeleteDialogShow: !this.state.isDeleteDialogShow});\n };\n\n onItemDelete = () => {\n const { currentGroup, repo } = this.props;\n if (!currentGroup) { // repo can not be deleted in share all module\n return;\n }\n\n const groupID = currentGroup.id;\n\n seafileAPI.deleteGroupOwnedLibrary(groupID, repo.repo_id).then(() => {\n\n this.setState({\n isRepoDeleted: true,\n isDeleteDialogShow: false,\n });\n\n this.props.onItemDelete(repo);\n let name = repo.repo_name;\n var msg = gettext('Successfully deleted {name}.').replace('{name}', name);\n toaster.success(msg);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n if (errMessage === gettext('Error')) {\n let name = repo.repo_name;\n errMessage = gettext('Failed to delete {name}.').replace('{name}', name);\n }\n toaster.danger(errMessage);\n\n this.setState({isRepoDeleted: false});\n });\n };\n\n toggleShareDialog = () => {\n this.setState({isShowSharedDialog: false});\n };\n\n toggleRepoShareAdminDialog = () => {\n this.setState({isRepoShareAdminDialogOpen: !this.state.isRepoShareAdminDialogOpen});\n };\n\n toggleOldFilesAutoDelDialog = () => {\n this.setState({isOldFilesAutoDelDialogOpen: !this.state.isOldFilesAutoDelDialogOpen});\n };\n\n onAPITokenToggle = () => {\n this.setState({isAPITokenDialogShow: !this.state.isAPITokenDialogShow});\n };\n\n onChangePasswordToggle = () => {\n this.setState({isChangePasswordDialogShow: !this.state.isChangePasswordDialogShow});\n };\n\n onResetPasswordToggle = () => {\n this.setState({isResetPasswordDialogShow: !this.state.isResetPasswordDialogShow});\n };\n\n translateMenuItem = (menuItem) => {\n let translateResult = '';\n switch(menuItem) {\n case 'Rename':\n translateResult = gettext('Rename');\n break;\n case 'Folder Permission':\n translateResult = gettext('Folder Permission');\n break;\n case 'Details':\n translateResult = gettext('Details');\n break;\n case 'Unshare':\n translateResult = gettext('Unshare');\n break;\n case 'Share':\n translateResult = gettext('Share');\n break;\n case 'History Setting':\n translateResult = gettext('History Setting');\n break;\n case 'Share Admin':\n translateResult = gettext('Share Admin');\n break;\n case 'Change Password':\n translateResult = gettext('Change Password');\n break;\n case 'Reset Password':\n translateResult = gettext('Reset Password');\n break;\n case 'Watch File Changes':\n translateResult = gettext('Watch File Changes');\n break;\n case 'Unwatch File Changes':\n translateResult = gettext('Unwatch File Changes');\n break;\n case 'Old Files Auto Delete':\n translateResult = gettext('Auto Deletion Setting');\n break;\n case 'API Token':\n translateResult = 'API Token'; // translation is not needed here\n break;\n case 'Advanced':\n translateResult = gettext('Advanced');\n break;\n default:\n break;\n }\n return translateResult;\n };\n\n getAdvancedOperations = () => {\n const operations = [];\n operations.push('API Token');\n if (enableRepoAutoDel) {\n operations.push('Old Files Auto Delete');\n }\n return operations;\n };\n\n generatorOperations = () => {\n let { repo, currentGroup } = this.props;\n //todo this have a bug; use current api is not return admins param;\n let isStaff = currentGroup && currentGroup.admins && currentGroup.admins.indexOf(username) > -1; //for group repolist;\n let isRepoOwner = repo.owner_email === username;\n let isAdmin = repo.is_admin;\n let operations = [];\n if (isPro) {\n if (repo.owner_email.indexOf('@seafile_group') != -1) {\n if (isStaff) {\n if (repo.owner_email == currentGroup.id + '@seafile_group') {\n this.isDeparementOnwerGroupMember = true;\n operations = ['Rename'];\n if (folderPermEnabled) {\n operations.push('Folder Permission');\n }\n operations.push('Share Admin', 'Divider');\n if (repo.encrypted) {\n operations.push('Change Password');\n }\n if (repo.encrypted && enableResetEncryptedRepoPassword && isEmailConfigured) {\n operations.push('Reset Password');\n }\n if (repo.permission == 'r' || repo.permission == 'rw') {\n const monitorOp = repo.monitored ? 'Unwatch File Changes' : 'Watch File Changes';\n operations.push(monitorOp);\n }\n operations.push('Divider', 'History Setting', 'Details');\n if (Utils.isDesktop()) {\n operations.push('Advanced');\n }\n return operations;\n } else {\n operations.push('Unshare');\n }\n }\n } else {\n if (isRepoOwner || isAdmin) {\n operations.push('Share');\n }\n if (isStaff || isRepoOwner || isAdmin) {\n operations.push('Unshare');\n }\n }\n if (repo.permission == 'r' || repo.permission == 'rw') {\n const monitorOp = repo.monitored ? 'Unwatch File Changes' : 'Watch File Changes';\n operations.push(monitorOp);\n }\n } else {\n if (isRepoOwner) {\n operations.push('Share');\n }\n if (isStaff || isRepoOwner) {\n operations.push('Unshare');\n }\n }\n return operations;\n };\n\n generatorMobileMenu = () => {\n let operations = [];\n if (this.props.libraryType && this.props.libraryType === 'public') {\n let isRepoOwner = this.props.repo.owner_email === username;\n if (isSystemStaff || isRepoOwner) {\n operations.push('Unshare');\n }\n } else {\n operations = this.generatorOperations();\n if (this.isDeparementOnwerGroupMember) {\n operations.unshift('Unshare');\n operations.unshift('Share');\n }\n }\n\n if (!operations.length) {\n return null;\n }\n return (\n \n \n
    \n
    \n
    \n {operations.map((item, index) => {\n return (\n {this.translateMenuItem(item)}\n );\n })}\n
    \n
    \n
    \n );\n };\n\n generatorPCMenu = () => {\n let operations = [];\n if (this.props.libraryType && this.props.libraryType === 'public') {\n let isRepoOwner = this.props.repo.owner_email === username;\n if (isSystemStaff || isRepoOwner) {\n operations.push('Unshare');\n }\n } else {\n operations = this.generatorOperations();\n }\n const shareOperation = ;\n const unshareOperation = ;\n const deleteOperation = ;\n\n if (this.isDeparementOnwerGroupMember) {\n const advancedOperations = this.getAdvancedOperations();\n return (\n \n {shareOperation}\n {deleteOperation}\n \n \n \n {operations.map((item, index)=> {\n if (item == 'Divider') {\n return ;\n } else if (item == 'Advanced') {\n return (\n {e.stopPropagation();}}\n >\n \n {this.translateMenuItem(item)}\n \n \n {advancedOperations.map((item, index)=> {\n return ({this.translateMenuItem(item)});\n })}\n \n \n );\n } else {\n return ({this.translateMenuItem(item)});\n }\n })}\n \n \n \n );\n } else {\n return (\n \n {operations.map(item => {\n switch (item) {\n case 'Share':\n return {shareOperation};\n case 'Unshare':\n return {unshareOperation};\n case 'Watch File Changes':\n case 'Unwatch File Changes':\n return (\n \n \n \n {[item].map((item, index) => {\n return {this.translateMenuItem(item)};\n })}\n \n \n );\n // no default\n default:\n return null;\n }\n })}\n \n );\n }\n };\n\n onToggleStarRepo = (e) => {\n e.preventDefault();\n const { repo_name: repoName } = this.props.repo;\n if (this.state.isStarred) {\n seafileAPI.unstarItem(this.props.repo.repo_id, '/').then(() => {\n this.setState({isStarred: !this.state.isStarred});\n const msg = gettext('Successfully unstarred {library_name_placeholder}.')\n .replace('{library_name_placeholder}', repoName);\n toaster.success(msg);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n } else {\n seafileAPI.starItem(this.props.repo.repo_id, '/').then(() => {\n this.setState({isStarred: !this.state.isStarred});\n const msg = gettext('Successfully starred {library_name_placeholder}.')\n .replace('{library_name_placeholder}', repoName);\n toaster.success(msg);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n };\n\n renderPCUI = () => {\n let { iconUrl, iconTitle, libPath } = this.getRepoComputeParams();\n let { repo } = this.props;\n return (\n \n \n \n \n \n \n \n {iconTitle}\n \n {this.state.isRenaming ?\n :\n \n {repo.repo_name}\n {repo.monitored && }\n \n }\n \n {this.state.isOperationShow && this.generatorPCMenu()}\n {repo.size}\n {moment(repo.last_modified).fromNow()}\n {repo.owner_name}\n \n \n );\n };\n\n visitRepo = () => {\n if (!this.state.isRenaming) {\n navigate(this.repoURL);\n }\n };\n\n renderMobileUI = () => {\n let { iconUrl, iconTitle, libPath } = this.getRepoComputeParams();\n let { repo } = this.props;\n this.repoURL = libPath;\n return (\n \n \n {iconTitle}/\n \n {this.state.isRenaming ?\n :\n \n {repo.repo_name}\n {repo.monitored && }\n \n }\n
    \n {repo.owner_name}\n {repo.size}\n {moment(repo.last_modified).fromNow()}\n \n {this.generatorMobileMenu()}\n \n
    \n );\n };\n\n render() {\n let { repo } = this.props;\n let isGroupOwnedRepo = repo.owner_email.indexOf('@seafile_group') > -1;\n return (\n \n {Utils.isDesktop() ? this.renderPCUI() : this.renderMobileUI()}\n {this.state.isShowSharedDialog && (\n \n \n \n )}\n {this.state.isFolderPermissionDialogOpen && (\n \n \n \n )}\n {this.state.isDeleteDialogShow &&\n \n \n \n }\n {this.state.isHistorySettingDialogShow && (\n \n \n \n )}\n {this.state.isAPITokenDialogShow && (\n \n \n \n )}\n {this.state.isRepoShareAdminDialogOpen && (\n \n \n \n )}\n {this.state.isChangePasswordDialogShow && (\n \n \n \n )}\n {this.state.isResetPasswordDialogShow && (\n \n \n \n )}\n {this.state.isOldFilesAutoDelDialogOpen && (\n \n \n \n )}\n\n \n );\n }\n}\n\nSharedRepoListItem.propTypes = propTypes;\n\nexport default SharedRepoListItem;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport SharedRepoListItem from './shared-repo-list-item';\nimport toaster from '../toast';\nimport LibsMobileThead from '../libs-mobile-thead';\nimport Loading from '../loading';\n\nconst propTypes = {\n libraryType: PropTypes.string,\n currentGroup: PropTypes.object,\n isShowTableThread: PropTypes.bool,\n sortBy: PropTypes.string,\n sortOrder: PropTypes.string,\n sortItems: PropTypes.func,\n repoList: PropTypes.array.isRequired,\n onItemUnshare: PropTypes.func.isRequired,\n onItemDelete: PropTypes.func,\n onItemDetails: PropTypes.func,\n onItemRename: PropTypes.func,\n hasNextPage: PropTypes.bool,\n onMonitorRepo: PropTypes.func,\n};\n\nclass SharedRepoListView extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false,\n };\n }\n\n sortByName = (e) => {\n e.preventDefault();\n const sortBy = 'name';\n const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';\n this.props.sortItems(sortBy, sortOrder);\n };\n\n sortByTime = (e) => {\n e.preventDefault();\n const sortBy = 'time';\n const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';\n this.props.sortItems(sortBy, sortOrder);\n };\n\n sortBySize = (e) => {\n e.preventDefault();\n const sortBy = 'size';\n const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';\n this.props.sortItems(sortBy, sortOrder);\n };\n\n getSortMetaData = () => {\n return {\n sortByName: this.props.sortBy == 'name',\n sortByTime: this.props.sortBy == 'time',\n sortBySize: this.props.sortBy == 'size',\n sortIcon: this.props.sortOrder == 'asc' ? : \n };\n };\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n onItemRename = (repo, newName) => {\n let isDuplicated = this.props.repoList.some(item => {\n return item.name === newName;\n });\n if (isDuplicated) {\n let errMessage = gettext('The name \"{name}\" is already taken. Please choose a different name.');\n errMessage = errMessage.replace('{name}', Utils.HTMLescape(newName));\n toaster.danger(errMessage);\n return false;\n }\n this.props.onItemRename(repo, newName);\n };\n\n renderRepoListView = () => {\n return (\n \n {this.props.repoList.map(repo => {\n return (\n \n );\n })}\n \n );\n };\n\n renderPCUI = () => {\n let isShowTableThread = this.props.isShowTableThread !== undefined ? this.props.isShowTableThread : true;\n\n const { sortByName, sortByTime, sortBySize, sortIcon } = this.getSortMetaData();\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n {this.renderRepoListView()}\n \n
    {gettext('Library Type')}{gettext('Name')} {sortByName && sortIcon}{gettext('Actions')}{gettext('Size')} {sortBySize && sortIcon}{gettext('Last Update')} {sortByTime && sortIcon}{gettext('Owner')}
    \n );\n };\n\n renderMobileUI = () => {\n return (\n \n \n \n {this.renderRepoListView()}\n \n
    \n );\n };\n\n render() {\n const table = Utils.isDesktop() ? this.renderPCUI() : this.renderMobileUI();\n if (this.props.hasNextPage) {\n return (\n \n {table}\n \n \n );\n } else {\n return table;\n }\n }\n}\n\nSharedRepoListView.propTypes = propTypes;\n\nexport default SharedRepoListView;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport cookie from 'react-cookies';\nimport MediaQuery from 'react-responsive';\nimport { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { gettext, canAddPublicRepo } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport Repo from '../../models/repo';\nimport toaster from '../../components/toast';\nimport Loading from '../../components/loading';\nimport EmptyTip from '../../components/empty-tip';\nimport ModalPortal from '../../components/modal-portal';\nimport CommonToolbar from '../../components/toolbar/common-toolbar';\nimport CreateRepoDialog from '../../components/dialog/create-repo-dialog';\nimport ShareRepoDialog from '../../components/dialog/share-repo-dialog';\nimport SharedRepoListView from '../../components/shared-repo-list-view/shared-repo-list-view';\nimport SortOptionsDialog from '../../components/dialog/sort-options';\n\nconst propTypes = {\n onShowSidePanel: PropTypes.func.isRequired,\n onSearchedClick: PropTypes.func.isRequired,\n};\n\nclass PublicSharedView extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isLoading: true,\n errMessage: '',\n emptyTip: '',\n repoList: [],\n sortBy: cookie.load('seafile-repo-dir-sort-by') || 'name', // 'name' or 'time' or 'size'\n sortOrder: cookie.load('seafile-repo-dir-sort-order') || 'asc', // 'asc' or 'desc'\n isSortOptionsDialogOpen: false,\n libraryType: 'public',\n isCreateMenuShow: false,\n isCreateRepoDialogShow: false,\n isSelectRepoDialpgShow: false,\n };\n }\n\n componentDidMount() {\n seafileAPI.listRepos({type: 'public'}).then((res) => {\n let repoList = res.data.repos.map(item => {\n let repo = new Repo(item);\n return repo;\n });\n this.setState({\n isLoading: false,\n repoList: Utils.sortRepos(repoList, this.state.sortBy, this.state.sortOrder)\n });\n }).catch((error) => {\n this.setState({\n isLoading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n onCreateRepo = (repo) => {\n seafileAPI.createPublicRepo(repo).then(res => {\n let object = { // need modify api return value\n repo_id: res.data.id,\n repo_name: res.data.name,\n permission: res.data.permission,\n size: res.data.size,\n owner_name: res.data.owner_name,\n owner_email: res.data.owner,\n mtime: res.data.mtime,\n encrypted: res.data.encrypted,\n };\n let repo = new Repo(object);\n let repoList = this.addRepoItem(repo);\n this.setState({repoList: repoList});\n this.onCreateRepoToggle();\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onRepoSelectedHandler = (selectedRepoList) => {\n selectedRepoList.forEach(repo => {\n seafileAPI.selectOwnedRepoToPublic(repo.repo_id, {share_type: 'public', permission: repo.sharePermission}).then(() => {\n let repoList = this.addRepoItem(repo);\n this.setState({repoList: repoList});\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n });\n };\n\n onItemUnshare = (repo) => {\n seafileAPI.unshareRepo(repo.repo_id, {share_type: 'public'}).then(() => {\n let repoList = this.state.repoList.filter(item => {\n return item.repo_id !== repo.repo_id;\n });\n this.setState({repoList: repoList});\n let message = gettext('Successfully unshared {name}').replace('{name}', repo.repo_name);\n toaster.success(message);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n if (errMessage === gettext('Error')) {\n errMessage = gettext('Failed to unshare {name}').replace('{name}', repo.repo_name);\n }\n toaster(errMessage);\n });\n };\n\n onItemDelete = () => {\n // todo need to optimized\n };\n\n addRepoItem = (repo) => {\n let isExist = false;\n let repoIndex = 0;\n let repoList = this.state.repoList;\n for (let i = 0; i < repoList.length; i ++) {\n if (repo.repo_id === repoList[i].repo_id) {\n isExist = true;\n repoIndex = i;\n break;\n }\n }\n if (isExist) {\n this.state.repoList.splice(repoIndex, 1);\n }\n\n let newRepoList = this.state.repoList.map(item => {return item;});\n newRepoList.unshift(repo);\n return newRepoList;\n };\n\n onAddRepoToggle = () => {\n this.setState({isCreateMenuShow: !this.state.isCreateMenuShow});\n };\n\n onCreateRepoToggle = () => {\n this.setState({isCreateRepoDialogShow: !this.state.isCreateRepoDialogShow});\n };\n\n onSelectRepoToggle = () => {\n this.setState({isSelectRepoDialpgShow: !this.state.isSelectRepoDialpgShow});\n };\n\n sortItems = (sortBy, sortOrder) => {\n cookie.save('seafile-repo-dir-sort-by', sortBy);\n cookie.save('seafile-repo-dir-sort-order', sortOrder);\n this.setState({\n sortBy: sortBy,\n sortOrder: sortOrder,\n repoList: Utils.sortRepos(this.state.repoList, sortBy, sortOrder)\n });\n };\n\n toggleSortOptionsDialog = () => {\n this.setState({\n isSortOptionsDialogOpen: !this.state.isSortOptionsDialogOpen\n });\n };\n\n render() {\n let errMessage = this.state.errMessage;\n let emptyTip = (\n \n

    {gettext('No public libraries')}

    \n

    {gettext('No public libraries have been created yet. A public library is accessible by all users. You can create a public library by clicking the \"Add Library\" button in the menu bar.')}

    \n
    \n );\n return (\n \n
    \n {canAddPublicRepo &&\n
    \n \n
    \n \n \n \n {gettext('Add Library')}\n \n \n \n \n \n \n {gettext('Share existing libraries')}\n {gettext('New Library')}\n \n \n
    \n
    \n }\n \n
    \n
    \n
    \n
    \n

    {gettext('Shared with all')}

    \n {(!Utils.isDesktop() && this.state.repoList.length > 0) && }\n
    \n
    \n {this.state.isLoading && }\n {(!this.state.isLoading && errMessage) && errMessage}\n {(!this.state.isLoading && this.state.repoList.length === 0) && emptyTip}\n {(!this.state.isLoading && this.state.repoList.length > 0) &&\n \n }\n
    \n
    \n
    \n {this.state.isSortOptionsDialogOpen &&\n \n }\n {this.state.isCreateRepoDialogShow && (\n \n \n \n )}\n {this.state.isSelectRepoDialpgShow && (\n \n \n \n )}\n
    \n );\n }\n}\n\nPublicSharedView.propTypes = propTypes;\n\nexport default PublicSharedView;\n","import io from 'socket.io-client';\nimport { name, username, contactEmail, seafileCollabServer } from './constants';\n\nconst socket = (seafileCollabServer !== '') ? io(seafileCollabServer) : undefined;\n\nclass CollabServer {\n\n watchRepo(repoID, fn) {\n if (!socket) {\n return;\n }\n socket.emit('repo_update', {\n request: 'watch_update',\n repo_id: repoID,\n user: {\n name: name,\n username: username,\n contact_email: contactEmail,\n },\n });\n socket.on('repo_update', fn);\n }\n\n unwatchRepo(repoID, fn) {\n if (!socket) {\n return;\n }\n socket.emit('repo_update', {\n request: 'unwatch_update',\n repo_id: repoID,\n user: {\n name: name,\n username: username,\n contact_email: contactEmail,\n },\n });\n socket.off('repo_update', fn);\n }\n}\n\nconst collabServer = new CollabServer();\n\nexport default collabServer;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalBody, Form } from 'reactstrap';\nimport { gettext, siteRoot, mediaUrl } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\n\nimport '../../css/lib-decrypt.css';\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n onLibDecryptDialog: PropTypes.func.isRequired\n};\n\n\nclass LibDecryptDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n password: '',\n showError: false,\n };\n }\n\n handleSubmit = (e) => {\n let repoID = this.props.repoID;\n let password = this.state.password;\n seafileAPI.setRepoDecryptPassword(repoID, password).then(res => {\n this.props.onLibDecryptDialog();\n }).catch(res => {\n this.setState({\n showError: true\n });\n });\n\n e.preventDefault();\n };\n\n handleKeyDown = (e) => {\n if (e.key == 'Enter') {\n this.handleSubmit(e);\n }\n };\n\n handleChange = (e) => {\n this.setState({\n password: e.target.value,\n showError: false\n });\n };\n\n toggle = () => {\n window.location.href = siteRoot;\n };\n\n render() {\n return (\n \n \n \n
    \n \"\"\n

    {gettext('This library is password protected')}

    \n {this.state.showError &&\n

    {gettext('Wrong password')}

    \n }\n \n \n

    {'* '}{gettext('The password will be kept in the server for only 1 hour.')}

    \n
    \n
    \n
    \n );\n }\n}\n\nLibDecryptDialog.propTypes = propTypes;\n\nexport default LibDecryptDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\n\nconst propTypes = {\n currentMode: PropTypes.string.isRequired,\n switchViewMode: PropTypes.func.isRequired,\n isCustomPermission: PropTypes.bool,\n};\n\nclass ViewModeToolbar extends React.Component {\n\n static defaultProps = {\n isCustomPermission: false,\n };\n\n switchViewMode = (e) => {\n e.preventDefault();\n let id = e.target.id;\n if (id === this.props.currentMode) {\n return;\n }\n this.props.switchViewMode(id);\n };\n\n render() {\n let baseClass = 'btn btn-secondary btn-icon sf-view-mode-btn ';\n return (\n \n
    \n \n \n \n
    \n {!this.props.isCustomPermission && (\n
    \n \n
    \n )}\n
    \n );\n }\n}\n\nViewModeToolbar.propTypes = propTypes;\n\nexport default ViewModeToolbar;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, Input, ModalBody, ModalFooter, Form, FormGroup, Label, Alert } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n fileType: PropTypes.string,\n parentPath: PropTypes.string.isRequired,\n onAddFile: PropTypes.func.isRequired,\n checkDuplicatedName: PropTypes.func.isRequired,\n toggleDialog: PropTypes.func.isRequired,\n};\n\nclass CreateFile extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n parentPath: '',\n childName: props.fileType || '',\n isMarkdownDraft: false,\n isSdocDraft: false,\n errMessage: '',\n isSubmitBtnActive: false,\n };\n this.newInput = React.createRef();\n }\n\n componentDidMount() {\n let parentPath = this.props.parentPath;\n if (parentPath[parentPath.length - 1] === '/') { // mainPanel\n this.setState({parentPath: parentPath});\n } else {\n this.setState({parentPath: parentPath + '/'}); // sidePanel\n }\n }\n\n handleChange = (e) => {\n if (!e.target.value.trim()) {\n this.setState({isSubmitBtnActive: false});\n } else {\n this.setState({isSubmitBtnActive: true});\n }\n\n this.setState({\n childName: e.target.value,\n }) ;\n };\n\n handleSubmit = () => {\n if (!this.state.isSubmitBtnActive) {\n return;\n }\n\n let isDuplicated = this.checkDuplicatedName();\n let newName = this.state.childName;\n\n if (isDuplicated) {\n let errMessage = gettext('The name \"{name}\" is already taken. Please choose a different name.');\n errMessage = errMessage.replace('{name}', Utils.HTMLescape(newName));\n this.setState({errMessage: errMessage});\n } else {\n let path = this.state.parentPath + newName;\n const { isMarkdownDraft, isSdocDraft } = this.state;\n this.props.onAddFile(path, isMarkdownDraft, isSdocDraft);\n this.props.toggleDialog();\n }\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.handleSubmit();\n e.preventDefault();\n }\n };\n\n handleCheck = () => {\n let pos = this.state.childName.lastIndexOf('.');\n\n if (this.state.isMarkdownDraft) {\n // from draft to not draft\n // case 1, normally, the file name is ended with `(draft)`, like `test(draft).md`\n // case 2, the file name is not ended with `(draft)`, the user has deleted some characters, like `test(dra.md`\n let p = this.state.childName.substring(pos-7, pos);\n let fileName = this.state.childName.substring(0, pos-7);\n let fileType = this.state.childName.substring(pos);\n if (p === '(draft)') {\n // remove `(draft)` from file name\n this.setState({\n childName: fileName + fileType,\n isMarkdownDraft: !this.state.isMarkdownDraft\n });\n } else {\n // don't change file name\n this.setState({\n isMarkdownDraft: !this.state.isMarkdownDraft\n });\n }\n }\n\n if (!this.state.isMarkdownDraft) {\n // from not draft to draft\n // case 1, test.md ===> test(draft).md\n // case 2, .md ===> (draft).md\n // case 3, no '.' in the file name, don't change the file name\n if (pos > 0) {\n let fileName = this.state.childName.substring(0, pos);\n let fileType = this.state.childName.substring(pos);\n this.setState({\n childName: fileName + '(draft)' + fileType,\n isMarkdownDraft: !this.state.isMarkdownDraft\n });\n } else if (pos === 0 ) {\n this.setState({\n childName: '(draft)' + this.state.childName,\n isMarkdownDraft: !this.state.isMarkdownDraft\n });\n } else {\n this.setState({\n isMarkdownDraft: !this.state.isMarkdownDraft\n });\n }\n }\n };\n\n checkDuplicatedName = () => {\n let isDuplicated = this.props.checkDuplicatedName(this.state.childName);\n return isDuplicated;\n };\n\n onAfterModelOpened = () => {\n if (!this.newInput.current) return;\n this.newInput.current.focus();\n this.newInput.current.setSelectionRange(0,0);\n };\n\n toggleMarkSdocDraft = (e) => {\n this.setState({\n isSdocDraft: e.target.checked\n });\n };\n\n render() {\n const { toggleDialog } = this.props;\n return (\n \n {gettext('New File')}\n \n
    \n \n \n \n \n {/*this.props.fileType == '.md' && isDocs && (\n \n \n \n )*/}\n {/*this.props.fileType == '.sdoc' && (\n \n \n \n )*/}\n
    \n {this.state.errMessage && {this.state.errMessage}}\n
    \n \n \n \n \n
    \n );\n }\n}\n\nCreateFile.propTypes = propTypes;\n\nexport default CreateFile;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';\nimport { Utils } from '../../utils/utils';\nimport { enableSeadoc, gettext } from '../../utils/constants';\nimport ModalPortal from '../modal-portal';\nimport CreateFolder from '../../components/dialog/create-folder-dialog';\nimport CreateFile from '../../components/dialog/create-file-dialog';\nimport ShareDialog from '../../components/dialog/share-dialog';\nimport ViewModeToolbar from './view-mode-toolbar';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n repoID: PropTypes.string.isRequired,\n repoName: PropTypes.string.isRequired,\n repoEncrypted: PropTypes.bool.isRequired,\n enableDirPrivateShare: PropTypes.bool.isRequired,\n userPerm: PropTypes.string.isRequired,\n isGroupOwnedRepo: PropTypes.bool.isRequired,\n showShareBtn: PropTypes.bool.isRequired,\n onAddFile: PropTypes.func.isRequired,\n onAddFolder: PropTypes.func.isRequired,\n onUploadFile: PropTypes.func.isRequired,\n onUploadFolder: PropTypes.func.isRequired,\n direntList: PropTypes.array.isRequired,\n currentMode: PropTypes.string.isRequired,\n switchViewMode: PropTypes.func.isRequired,\n};\n\nclass DirOperationToolbar extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n fileType: '.md',\n isCreateFileDialogShow: false,\n isCreateFolderDialogShow: false,\n isUploadMenuShow: false,\n isCreateMenuShow: false,\n isShareDialogShow: false,\n operationMenuStyle: '',\n isMobileOpMenuOpen: false\n };\n }\n\n componentDidMount() {\n document.addEventListener('click', this.hideOperationMenu);\n }\n\n componentWillUnmount() {\n document.removeEventListener('click', this.hideOperationMenu);\n }\n\n toggleMobileOpMenu = () => {\n this.setState({isMobileOpMenuOpen: !this.state.isMobileOpMenuOpen});\n };\n\n hideOperationMenu = () => {\n this.setState({\n isUploadMenuShow: false,\n isCreateMenuShow: false,\n });\n };\n\n toggleOperationMenu = (e) => {\n e.nativeEvent.stopImmediatePropagation();\n let targetRect = e.target.getBoundingClientRect();\n let left = targetRect.left;\n let top = targetRect.bottom;\n let style = {position: 'fixed', display: 'block', left: left, top: top};\n this.setState({operationMenuStyle: style});\n };\n\n onUploadClick = (e) => {\n this.toggleOperationMenu(e);\n this.setState({\n isUploadMenuShow: !this.state.isUploadMenuShow,\n isCreateMenuShow: false,\n });\n };\n\n onUploadFile = (e) => {\n this.setState({isUploadMenuShow: false});\n this.props.onUploadFile(e);\n };\n\n onUploadFolder = (e) => {\n this.setState({isUploadMenuShow: false});\n this.props.onUploadFolder(e);\n };\n\n onCreateClick = (e) => {\n this.toggleOperationMenu(e);\n this.setState({\n isCreateMenuShow: !this.state.isCreateMenuShow,\n isUploadMenuShow: false,\n });\n };\n\n onShareClick = () => {\n this.setState({\n isShareDialogShow: !this.state.isShareDialogShow\n });\n };\n\n onCreateFolderToggle = () => {\n this.setState({isCreateFolderDialogShow: !this.state.isCreateFolderDialogShow});\n };\n\n onCreateFileToggle = () => {\n this.setState({\n isCreateFileDialogShow: !this.state.isCreateFileDialogShow,\n fileType: ''\n });\n };\n\n onCreateMarkdownToggle = () => {\n this.setState({\n isCreateFileDialogShow: !this.state.isCreateFileDialogShow,\n fileType: '.md'\n });\n };\n\n onCreateExcelToggle = () => {\n this.setState({\n isCreateFileDialogShow: !this.state.isCreateFileDialogShow,\n fileType: '.xlsx'\n });\n };\n\n onCreatePPTToggle = () => {\n this.setState({\n isCreateFileDialogShow: !this.state.isCreateFileDialogShow,\n fileType: '.pptx'\n });\n };\n\n onCreateWordToggle = () => {\n this.setState({\n isCreateFileDialogShow: !this.state.isCreateFileDialogShow,\n fileType: '.docx'\n });\n };\n\n onCreateSeaDocToggle = () => {\n this.setState({\n isCreateFileDialogShow: !this.state.isCreateFileDialogShow,\n fileType: '.sdoc'\n });\n };\n\n onAddFolder = (dirPath) => {\n this.setState({isCreateFolderDialogShow: false});\n this.props.onAddFolder(dirPath);\n };\n\n checkDuplicatedName = (newName) => {\n let direntList = this.props.direntList;\n let isDuplicated = direntList.some(object => {\n return object.name === newName;\n });\n return isDuplicated;\n };\n\n render() {\n let { path, repoName, userPerm } = this.props;\n\n let itemType = path === '/' ? 'library' : 'dir';\n let itemName = path == '/' ? repoName : Utils.getFolderName(path);\n\n const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm);\n let canUpload = true;\n let canCreate = true;\n if (isCustomPermission) {\n const { permission } = customPermission;\n canUpload = permission.upload;\n canCreate = permission.create;\n }\n\n let content = null;\n if (Utils.isDesktop()) {\n let { showShareBtn } = this.props;\n content = (\n \n {canUpload && (\n \n {Utils.isSupportUploadFolder() ?\n \n \n {this.state.isUploadMenuShow && (\n
    \n \n \n
    \n )}\n
    \n :\n }\n
    \n )}\n {canCreate &&\n \n \n {this.state.isCreateMenuShow && (\n
    \n \n \n
    \n \n \n \n \n {enableSeadoc && }\n
    \n )}\n
    \n }\n {showShareBtn && }\n
    \n );\n } else {\n content = (\n \n \n \n {canUpload && (\n {gettext('Upload')}\n )}\n {canCreate && (\n \n {gettext('New Folder')}\n {gettext('New File')}\n \n )}\n \n \n );\n }\n\n return (\n \n {(userPerm === 'rw' || userPerm === 'admin' || userPerm === 'cloud-edit' || isCustomPermission) && (\n
    \n {content}\n
    \n )}\n {Utils.isDesktop() && }\n {this.state.isCreateFileDialogShow && (\n \n \n \n )}\n {this.state.isCreateFolderDialogShow && (\n \n \n \n )}\n {this.state.isShareDialogShow &&\n \n \n \n }\n
    \n );\n }\n}\n\nDirOperationToolbar.propTypes = propTypes;\n\nexport default DirOperationToolbar;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalFooter, ModalBody, Alert } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport FileChooser from '../file-chooser/file-chooser';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n repoID: PropTypes.string.isRequired,\n dirent: PropTypes.object,\n selectedDirentList: PropTypes.array,\n isMutipleOperation: PropTypes.bool.isRequired,\n onItemMove: PropTypes.func,\n onItemsMove: PropTypes.func,\n onCancelMove: PropTypes.func.isRequired,\n repoEncrypted: PropTypes.bool.isRequired,\n};\n\n// need dirent file Path;\nclass MoveDirent extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n repo: { repo_id: this.props.repoID },\n selectedPath: this.props.path,\n errMessage: ''\n };\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n if (this.state.errMessage === nextState.errMessage) {\n return false;\n }\n return true;\n }\n\n handleSubmit = () => {\n if (this.props.isMutipleOperation) {\n this.moveItems();\n } else {\n this.moveItem();\n }\n };\n\n moveItems = () => {\n let { repoID } = this.props;\n let { repo, selectedPath } = this.state;\n let message = gettext('Invalid destination path');\n\n if (!repo || selectedPath === '') {\n this.setState({errMessage: message});\n return;\n }\n\n let selectedDirentList = this.props.selectedDirentList;\n let direntPaths = [];\n selectedDirentList.forEach(dirent => {\n let path = Utils.joinPath(this.props.path, dirent.name);\n direntPaths.push(path);\n });\n\n // move dirents to one of them. eg: A/B, A/C -> A/B\n if (direntPaths.some(direntPath => { return direntPath === selectedPath;})) {\n this.setState({errMessage: message});\n return;\n }\n\n // move dirents to current path\n if (selectedPath && selectedPath === this.props.path && (repo.repo_id === repoID)) {\n this.setState({errMessage: message});\n return;\n }\n\n // move dirents to one of their child. eg: A/B, A/D -> A/B/C\n let moveDirentPath = '';\n let isChildPath = direntPaths.some(direntPath => {\n let flag = selectedPath.length > direntPath.length && selectedPath.indexOf(direntPath) > -1;\n if (flag) {\n moveDirentPath = direntPath;\n }\n return flag;\n });\n\n if (isChildPath) {\n message = gettext('Can not move directory %(src)s to its subdirectory %(des)s');\n message = message.replace('%(src)s', moveDirentPath);\n message = message.replace('%(des)s', selectedPath);\n this.setState({errMessage: message});\n return;\n }\n\n this.props.onItemsMove(repo, selectedPath);\n this.toggle();\n };\n\n moveItem = () => {\n let { repoID } = this.props;\n let { repo, selectedPath } = this.state;\n let direntPath = Utils.joinPath(this.props.path, this.props.dirent.name);\n let message = gettext('Invalid destination path');\n\n if (!repo || (repo.repo_id === repoID && selectedPath === '')) {\n this.setState({errMessage: message});\n return;\n }\n\n // copy the dirent to itself. eg: A/B -> A/B\n if (selectedPath && direntPath === selectedPath) {\n this.setState({errMessage: message});\n return;\n }\n\n // copy the dirent to current path\n if (selectedPath && this.props.path === selectedPath && repo.repo_id === repoID) {\n this.setState({errMessage: message});\n return;\n }\n\n // copy the dirent to it's child. eg: A/B -> A/B/C\n if ( selectedPath && selectedPath.length > direntPath.length && selectedPath.indexOf(direntPath) > -1) {\n message = gettext('Can not move directory %(src)s to its subdirectory %(des)s');\n message = message.replace('%(src)s', direntPath);\n message = message.replace('%(des)s', selectedPath);\n this.setState({errMessage: message});\n return;\n }\n\n this.props.onItemMove(repo, this.props.dirent, selectedPath, this.props.path);\n this.toggle();\n };\n\n toggle = () => {\n this.props.onCancelMove();\n };\n\n onDirentItemClick = (repo, selectedPath) => {\n this.setState({\n repo: repo,\n selectedPath: selectedPath,\n errMessage: ''\n });\n };\n\n onRepoItemClick = (repo) => {\n this.setState({\n repo: repo,\n selectedPath: '/',\n errMessage: ''\n });\n };\n\n render() {\n let title = gettext('Move {placeholder} to');\n if (!this.props.isMutipleOperation) {\n title = title.replace('{placeholder}', '' + Utils.HTMLescape(this.props.dirent.name) + '');\n } else {\n title = gettext('Move selected item(s) to:');\n }\n let mode = this.props.repoEncrypted ? 'only_current_library':'current_repo_and_other_repos';\n const { dirent, selectedDirentList } = this.props;\n const movedDirent = dirent ? dirent : selectedDirentList[0];\n const { permission } = movedDirent;\n const { isCustomPermission } = Utils.getUserPermission(permission);\n if (isCustomPermission) {\n mode = 'only_current_library';\n }\n return (\n \n
    \n \n \n {this.state.errMessage && {this.state.errMessage}}\n \n \n \n \n \n
    \n );\n }\n}\n\nMoveDirent.propTypes = propTypes;\n\nexport default MoveDirent;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalFooter, ModalBody, Alert } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport FileChooser from '../file-chooser/file-chooser';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n repoID: PropTypes.string.isRequired,\n dirent: PropTypes.object,\n selectedDirentList: PropTypes.array,\n isMutipleOperation: PropTypes.bool.isRequired,\n onItemCopy: PropTypes.func,\n onItemsCopy: PropTypes.func,\n onCancelCopy: PropTypes.func.isRequired,\n repoEncrypted: PropTypes.bool.isRequired,\n};\n\n// need dirent file Path;\nclass CopyDirent extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n repo: { repo_id: this.props.repoID },\n selectedPath: this.props.path,\n errMessage: ''\n };\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n if (this.state.errMessage === nextState.errMessage) {\n return false;\n }\n return true;\n }\n\n handleSubmit = () => {\n if (this.props.isMutipleOperation) {\n this.copyItems();\n } else {\n this.copyItem();\n }\n };\n\n copyItems = () => {\n let { repo, selectedPath } = this.state;\n let message = gettext('Invalid destination path');\n\n if (!repo || selectedPath === '') {\n this.setState({errMessage: message});\n return;\n }\n\n let selectedDirentList = this.props.selectedDirentList;\n let direntPaths = [];\n selectedDirentList.forEach(dirent => {\n let path = Utils.joinPath(this.props.path, dirent.name);\n direntPaths.push(path);\n });\n\n // copy dirents to one of them. eg: A/B, A/C -> A/B\n if (direntPaths.some(direntPath => { return direntPath === selectedPath;})) {\n this.setState({errMessage: message});\n return;\n }\n\n // copy dirents to one of their child. eg: A/B, A/D -> A/B/C\n let copyDirentPath = '';\n let isChildPath = direntPaths.some(direntPath => {\n let flag = selectedPath.length > direntPath.length && selectedPath.indexOf(direntPath) > -1;\n if (flag) {\n copyDirentPath = direntPath;\n }\n return flag;\n });\n\n if (isChildPath) {\n message = gettext('Can not move directory %(src)s to its subdirectory %(des)s');\n message = message.replace('%(src)s', copyDirentPath);\n message = message.replace('%(des)s', selectedPath);\n this.setState({errMessage: message});\n return;\n }\n\n this.props.onItemsCopy(repo, selectedPath);\n this.toggle();\n };\n\n copyItem = () => {\n let { repo, repoID, selectedPath } = this.state;\n let direntPath = Utils.joinPath(this.props.path, this.props.dirent.name);\n let message = gettext('Invalid destination path');\n\n if (!repo || (repo.repo_id === repoID && selectedPath === '')) {\n this.setState({errMessage: message});\n return;\n }\n\n // copy the dirent to itself. eg: A/B -> A/B\n if (selectedPath && direntPath === selectedPath) {\n this.setState({errMessage: message});\n return;\n }\n\n // copy the dirent to it's child. eg: A/B -> A/B/C\n if ( selectedPath && selectedPath.length > direntPath.length && selectedPath.indexOf(direntPath) > -1) {\n message = gettext('Can not copy directory %(src)s to its subdirectory %(des)s');\n message = message.replace('%(src)s', direntPath);\n message = message.replace('%(des)s', selectedPath);\n this.setState({errMessage: message});\n return;\n }\n\n this.props.onItemCopy(repo, this.props.dirent, selectedPath, this.props.path);\n this.toggle();\n };\n\n toggle = () => {\n this.props.onCancelCopy();\n };\n\n onDirentItemClick = (repo, selectedPath) => {\n this.setState({\n repo: repo,\n selectedPath: selectedPath,\n errMessage: ''\n });\n };\n\n onRepoItemClick = (repo) => {\n this.setState({\n repo: repo,\n selectedPath: '/',\n errMessage: ''\n });\n };\n\n render() {\n let title = gettext('Copy {placeholder} to');\n if (!this.props.isMutipleOperation) {\n title = title.replace('{placeholder}', '' + Utils.HTMLescape(this.props.dirent.name) + '');\n } else {\n title = gettext('Copy selected item(s) to:');\n }\n let mode = this.props.repoEncrypted ? 'only_current_library':'current_repo_and_other_repos';\n return (\n \n
    \n \n \n {this.state.errMessage && {this.state.errMessage}}\n \n \n \n \n \n
    \n );\n }\n}\n\nCopyDirent.propTypes = propTypes;\n\nexport default CopyDirent;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, ModalHeader, ModalBody, ModalFooter, Input } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { TAG_COLORS } from '../../constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n onRepoTagCreated: PropTypes.func,\n toggleCancel: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired\n};\n\nclass CreateTagDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n tagName: '',\n tagColor: TAG_COLORS[0],\n newTag: {},\n errorMsg: '',\n };\n }\n\n inputNewName = (e) => {\n this.setState({\n tagName: e.target.value,\n });\n if (this.state.errorMsg) {\n this.setState({errorMsg: ''});\n }\n };\n\n selectTagcolor = (e) => {\n this.setState({\n tagColor: e.target.value,\n });\n };\n\n createTag = () => {\n let name = this.state.tagName;\n let color = this.state.tagColor;\n let repoID = this.props.repoID;\n seafileAPI.createRepoTag(repoID, name, color).then((res) => {\n let repoTagID = res.data.repo_tag.repo_tag_id;\n if (this.props.onRepoTagCreated) this.props.onRepoTagCreated(repoTagID);\n this.props.toggleCancel();\n }).catch((error) => {\n let errMessage;\n if (error.response.status === 500) {\n errMessage = gettext('Internal Server Error');\n } else if (error.response.status === 400) {\n errMessage = gettext('Tag \"{name}\" already exists.');\n errMessage = errMessage.replace('{name}', Utils.HTMLescape(name));\n }\n this.setState({errorMsg: errMessage});\n });\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.createTag();\n }\n };\n\n render() {\n let canSave = this.state.tagName.trim() ? true : false;\n return (\n \n \n \n {gettext('New Tag')}\n \n \n
    \n
    \n \n \n
    {this.state.errorMsg}
    \n
    \n
    \n \n
    \n {TAG_COLORS.map((item, index)=>{\n return (\n
    \n \n
    \n );\n })\n }\n
    \n
    \n
    \n
    \n \n \n {canSave ?\n :\n \n }\n \n
    \n );\n }\n}\n\nCreateTagDialog.propTypes = propTypes;\n\nexport default CreateTagDialog;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport RepoTag from '../../models/repo-tag';\nimport CreateTagDialog from './create-tag-dialog';\nimport toaster from '../toast';\nrequire('../../css/repo-tag.css');\n\nconst TagItemPropTypes = {\n repoID: PropTypes.string.isRequired,\n repoTag: PropTypes.object.isRequired,\n filePath: PropTypes.string.isRequired,\n fileTagList: PropTypes.array.isRequired,\n onFileTagChanged: PropTypes.func.isRequired,\n};\n\nclass TagItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isTagHighlighted: false\n };\n }\n\n onMouseEnter = () => {\n this.setState({\n isTagHighlighted: true\n });\n };\n\n onMouseLeave = () => {\n this.setState({\n isTagHighlighted: false\n });\n };\n\n getRepoTagIdList = () => {\n let repoTagIdList = [];\n let fileTagList = this.props.fileTagList || [];\n repoTagIdList = fileTagList.map((fileTag) => fileTag.repo_tag_id);\n return repoTagIdList;\n };\n\n onEditFileTag = () => {\n let { repoID, repoTag, filePath } = this.props;\n let repoTagIdList = this.getRepoTagIdList();\n if (repoTagIdList.indexOf(repoTag.id) === -1) {\n let id = repoTag.id;\n seafileAPI.addFileTag(repoID, filePath, id).then(() => {\n repoTagIdList = this.getRepoTagIdList();\n this.props.onFileTagChanged();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n } else {\n let fileTag = null;\n let fileTagList = this.props.fileTagList;\n for(let i = 0; i < fileTagList.length; i++) {\n if (fileTagList[i].repo_tag_id === repoTag.id) {\n fileTag = fileTagList[i];\n break;\n }\n }\n seafileAPI.deleteFileTag(repoID, fileTag.id).then(() => {\n repoTagIdList = this.getRepoTagIdList();\n this.props.onFileTagChanged();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n };\n\n render() {\n const { isTagHighlighted } = this.state;\n const { repoTag } = this.props;\n const repoTagIdList = this.getRepoTagIdList();\n const isTagSelected = repoTagIdList.indexOf(repoTag.id) != -1;\n return (\n \n
    \n \n {repoTag.name}\n
    \n {isTagSelected && }\n \n );\n }\n\n}\n\nTagItem.propTypes = TagItemPropTypes;\n\nconst TagListPropTypes = {\n repoID: PropTypes.string.isRequired,\n filePath: PropTypes.string.isRequired,\n fileTagList: PropTypes.array.isRequired,\n onFileTagChanged: PropTypes.func.isRequired,\n toggleCancel: PropTypes.func.isRequired,\n createNewTag: PropTypes.func.isRequired,\n};\n\nclass TagList extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n repotagList: [],\n };\n }\n\n componentDidMount() {\n this.getRepoTagList();\n }\n\n getRepoTagList = () => {\n let repoID = this.props.repoID;\n seafileAPI.listRepoTags(repoID).then(res => {\n let repotagList = [];\n res.data.repo_tags.forEach(item => {\n let repoTag = new RepoTag(item);\n repotagList.push(repoTag);\n });\n this.setState({repotagList: repotagList});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n return (\n \n {gettext('Select Tags')}\n \n
      \n {this.state.repotagList.map((repoTag) => {\n return (\n \n );\n })}\n
    \n \n \n {gettext('Create a new tag')}\n \n
    \n \n \n \n
    \n );\n }\n}\n\nTagList.propTypes = TagListPropTypes;\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n filePath: PropTypes.string.isRequired,\n fileTagList: PropTypes.array.isRequired,\n toggleCancel: PropTypes.func.isRequired,\n onFileTagChanged: PropTypes.func.isRequired,\n};\n\nclass EditFileTagDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isCreateRepoTagShow: false,\n isListRepoTagShow: true,\n };\n }\n\n createNewTag = () => {\n this.setState({\n isCreateRepoTagShow: !this.state.isCreateRepoTagShow,\n isListRepoTagShow: !this.state.isListRepoTagShow,\n });\n };\n\n onRepoTagCreated = (repoTagID) => {\n let {repoID, filePath} = this.props;\n seafileAPI.addFileTag(repoID, filePath, repoTagID).then(() => {\n this.props.onFileTagChanged();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n return (\n \n {this.state.isListRepoTagShow &&\n \n }\n {this.state.isCreateRepoTagShow &&\n \n }\n \n );\n }\n}\n\nEditFileTagDialog.propTypes = propTypes;\n\nexport default EditFileTagDialog;\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport { Button, Modal, ModalHeader, Input, ModalBody, ModalFooter, Alert } from 'reactstrap';\n\nconst propTypes = {\n onRename: PropTypes.func.isRequired,\n toggleCancel: PropTypes.func.isRequired,\n checkDuplicatedName: PropTypes.func.isRequired,\n dirent: PropTypes.object,\n};\n\nclass Rename extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n newName: '',\n errMessage: '',\n isSubmitBtnActive: false,\n };\n this.newInput = React.createRef();\n }\n\n UNSAFE_componentWillMount() {\n this.setState({newName: this.props.dirent.name});\n }\n\n componentDidMount() {\n let { dirent } = this.props;\n this.changeState(dirent);\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.changeState(nextProps.dirent);\n }\n\n handleChange = (e) => {\n if (!e.target.value.trim()) {\n this.setState({isSubmitBtnActive: false});\n } else {\n this.setState({isSubmitBtnActive: true});\n }\n\n this.setState({newName: e.target.value});\n };\n\n handleSubmit = () => {\n let { isValid, errMessage } = this.validateInput();\n if (!isValid) {\n this.setState({errMessage : errMessage});\n } else {\n let isDuplicated = this.checkDuplicatedName();\n if (isDuplicated) {\n let errMessage = gettext('The name \"{name}\" is already taken. Please choose a different name.');\n errMessage = errMessage.replace('{name}', Utils.HTMLescape(this.state.newName));\n this.setState({errMessage: errMessage});\n } else {\n this.props.onRename(this.state.newName);\n this.props.toggleCancel();\n }\n }\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.handleSubmit();\n }\n };\n\n toggle = () => {\n this.props.toggleCancel();\n };\n\n changeState = (dirent) => {\n let name = dirent.name;\n this.setState({newName: name});\n };\n\n validateInput = () => {\n let newName = this.state.newName.trim();\n let isValid = true;\n let errMessage = '';\n if (!newName) {\n isValid = false;\n errMessage = gettext('Name is required.');\n return { isValid, errMessage };\n }\n\n if (newName.indexOf('/') > -1) {\n isValid = false;\n errMessage = gettext('Name should not include ' + '\\'/\\'' + '.');\n return { isValid, errMessage };\n }\n\n return { isValid, errMessage };\n };\n\n checkDuplicatedName = () => {\n let isDuplicated = this.props.checkDuplicatedName(this.state.newName);\n return isDuplicated;\n };\n\n onAfterModelOpened = () => {\n if (!this.newInput.current) return;\n this.newInput.current.focus();\n\n let { dirent } = this.props;\n let type = dirent.type;\n if (type === 'file') {\n var endIndex = dirent.name.lastIndexOf('.md');\n this.newInput.current.setSelectionRange(0, endIndex, 'forward');\n } else {\n this.newInput.current.setSelectionRange(0, -1);\n }\n };\n\n render() {\n let type = this.props.dirent.type;\n return (\n \n {type === 'file' ? gettext('Rename File') : gettext('Rename Folder') }\n \n

    {type === 'file' ? gettext('New file name'): gettext('New folder name')}

    \n \n {this.state.errMessage && {this.state.errMessage}}\n
    \n \n \n \n \n
    \n );\n }\n}\n\nRename.propTypes = propTypes;\n\nexport default Rename;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, ButtonGroup } from 'reactstrap';\nimport { gettext, siteRoot, name, fileServerRoot, useGoFileserver } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport URLDecorator from '../../utils/url-decorator';\nimport MoveDirentDialog from '../dialog/move-dirent-dialog';\nimport CopyDirentDialog from '../dialog/copy-dirent-dialog';\nimport ShareDialog from '../dialog/share-dialog';\nimport EditFileTagDialog from '../dialog/edit-filetag-dialog';\nimport ZipDownloadDialog from '../dialog/zip-download-dialog';\nimport Rename from '../dialog/rename-dirent';\nimport LibSubFolderPermissionDialog from '../dialog/lib-sub-folder-permission-dialog';\nimport ViewModeToolbar from './view-mode-toolbar';\n\nimport ModalPortal from '../modal-portal';\nimport ItemDropdownMenu from '../dropdown-menu/item-dropdown-menu';\nimport toaster from '../toast';\n\nimport '../../css/dirents-menu.css';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n userPerm: PropTypes.string.isRequired,\n repoID: PropTypes.string.isRequired,\n repoEncrypted: PropTypes.bool.isRequired,\n selectedDirentList: PropTypes.array.isRequired,\n onItemsMove: PropTypes.func.isRequired,\n onItemsCopy: PropTypes.func.isRequired,\n onItemsDelete: PropTypes.func.isRequired,\n isRepoOwner: PropTypes.bool.isRequired,\n enableDirPrivateShare: PropTypes.bool.isRequired,\n currentRepoInfo: PropTypes.object.isRequired,\n onFilesTagChanged: PropTypes.func.isRequired,\n unSelectDirent: PropTypes.func.isRequired,\n updateDirent: PropTypes.func.isRequired,\n currentMode: PropTypes.string.isRequired,\n switchViewMode: PropTypes.func.isRequired,\n direntList: PropTypes.array.isRequired,\n onItemRename: PropTypes.func.isRequired,\n showDirentDetail: PropTypes.func.isRequired,\n isGroupOwnedRepo: PropTypes.bool.isRequired,\n};\n\nclass MultipleDirOperationToolbar extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isZipDialogOpen: false,\n isMoveDialogShow: false,\n isCopyDialogShow: false,\n isMutipleOperation: true,\n showLibContentViewDialogs: false,\n showShareDialog: false,\n showEditFileTagDialog: false,\n fileTagList: [],\n multiFileTagList: [],\n isRenameDialogOpen: false,\n isPermissionDialogOpen: false\n };\n }\n\n onMoveToggle = () => {\n this.setState({isMoveDialogShow: !this.state.isMoveDialogShow});\n };\n\n onCopyToggle = () => {\n this.setState({isCopyDialogShow: !this.state.isCopyDialogShow});\n };\n\n onItemsDelete = () => {\n this.props.onItemsDelete();\n };\n\n onItemsDownload = () => {\n let { path, repoID, selectedDirentList } = this.props;\n if (selectedDirentList.length) {\n if (selectedDirentList.length === 1 && !selectedDirentList[0].isDir()) {\n let direntPath = Utils.joinPath(path, selectedDirentList[0].name);\n let url = URLDecorator.getUrl({type: 'download_file_url', repoID: repoID, filePath: direntPath});\n location.href= url;\n return;\n }\n if (!useGoFileserver) {\n this.setState({\n isZipDialogOpen: true\n });\n } else {\n const target = this.props.selectedDirentList.map(dirent => dirent.name);\n seafileAPI.zipDownload(repoID, path, target).then((res) => {\n const zipToken = res.data['zip_token'];\n location.href = `${fileServerRoot}zip/${zipToken}`;\n }).catch((error) => {\n let errorMsg = Utils.getErrorMsg(error);\n this.setState({\n isLoading: false,\n errorMsg: errorMsg\n });\n });\n }\n }\n };\n\n closeZipDialog = () => {\n this.setState({\n isZipDialogOpen: false\n });\n };\n\n checkDuplicatedName = (newName) => {\n return Utils.checkDuplicatedNameInList(this.props.direntList, newName);\n };\n\n onItemRename = (newName) => {\n const dirent = this.props.selectedDirentList[0];\n this.props.onItemRename(dirent, newName);\n };\n\n onPermissionItem = () => {\n this.setState({\n showLibContentViewDialogs: !this.state.showLibContentViewDialogs,\n isPermissionDialogOpen: !this.state.isPermissionDialogOpen\n });\n };\n\n onMarkAsDraft = (dirent) => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(dirent);\n seafileAPI.sdocMarkAsDraft(repoID, filePath).then((res) => {\n this.props.updateDirent(dirent, 'is_sdoc_draft', true);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onUnmarkAsDraft = (dirent) => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(dirent);\n seafileAPI.sdocUnmarkAsDraft(repoID, filePath).then((res) => {\n this.props.updateDirent(dirent, 'is_sdoc_draft', false);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onStartRevise = (dirent) => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(dirent);\n seafileAPI.sdocStartRevise(repoID, filePath).then((res) => {\n let url = siteRoot + 'lib/' + repoID + '/file' + Utils.encodePath(res.data.file_path);\n window.open(url);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n getDirentMenuList = (dirent) => {\n const isRepoOwner = this.props.isRepoOwner;\n const currentRepoInfo = this.props.currentRepoInfo;\n const isContextmenu = true;\n let opList = Utils.getDirentOperationList(isRepoOwner, currentRepoInfo, dirent, isContextmenu);\n const list = ['Move', 'Copy', 'Delete', 'Download'];\n if (dirent.type == 'dir') {\n opList = opList.filter((item, index) => {\n return list.indexOf(item.key) == -1 && item != 'Divider';\n });\n } else {\n opList = opList.filter((item, index) => {\n return list.indexOf(item.key) == -1;\n });\n }\n return opList;\n };\n\n onMenuItemClick = (operation) => {\n const dirents = this.props.selectedDirentList;\n const dirent = dirents[0];\n switch (operation) {\n case 'Share':\n this.setState({\n showLibContentViewDialogs: true,\n showShareDialog: true,\n });\n break;\n case 'Rename':\n this.setState({\n showLibContentViewDialogs: true,\n isRenameDialogOpen: true\n });\n break;\n case 'Permission':\n this.onPermissionItem();\n break;\n case 'Tags':\n this.listFileTags(dirent);\n break;\n case 'Lock':\n this.lockFile(dirent);\n break;\n case 'Unlock':\n this.unlockFile(dirent);\n break;\n case 'Mark as draft':\n this.onMarkAsDraft(dirent);\n break;\n case 'Unmark as draft':\n this.onUnmarkAsDraft(dirent);\n break;\n case 'History':\n this.onHistory(dirent);\n break;\n case 'Access Log':\n this.onAccessLog(dirent);\n break;\n case 'Properties':\n this.props.showDirentDetail('info');\n break;\n case 'Open via Client':\n this.onOpenViaClient(dirent);\n break;\n default:\n break;\n }\n };\n\n lockFile = (dirent) => {\n const filePath = this.getDirentPath(dirent);\n seafileAPI.lockfile(this.props.repoID, filePath).then((res) => {\n if (res.data.is_locked) {\n this.props.updateDirent(dirent, 'is_locked', true);\n this.props.updateDirent(dirent, 'locked_by_me', true);\n this.props.updateDirent(dirent, 'lock_owner_name', name);\n this.props.unSelectDirent();\n }\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n unlockFile = (dirent) => {\n const filePath = this.getDirentPath(dirent);\n seafileAPI.unlockfile(this.props.repoID, filePath).then((res) => {\n if (!res.data.is_locked) {\n this.props.updateDirent(dirent, 'is_locked', false);\n this.props.updateDirent(dirent, 'locked_by_me', false);\n this.props.updateDirent(dirent, 'lock_owner_name', '');\n this.props.unSelectDirent();\n }\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onOpenViaClient = (dirent) => {\n const filePath = this.getDirentPath(dirent);\n let url = URLDecorator.getUrl({\n type: 'open_via_client',\n repoID: this.props.repoID,\n filePath: filePath\n });\n location.href = url;\n };\n\n onHistory = (dirent) => {\n let filePath = this.getDirentPath(dirent);\n let url = URLDecorator.getUrl({\n type: 'file_revisions',\n repoID: this.props.repoID,\n filePath: filePath\n });\n location.href = url;\n };\n\n onAccessLog = (dirent) => {\n let filePath = this.getDirentPath(dirent);\n let path = siteRoot + 'repo/file-access/' + this.props.repoID + '/?p=' + encodeURIComponent(filePath) ;\n window.open(path);\n };\n\n toggleCancel = () => {\n this.setState({\n showLibContentViewDialogs: false,\n showShareDialog: false,\n showEditFileTagDialog: false,\n isRenameDialogOpen: false,\n isPermissionDialogOpen: false,\n });\n };\n\n listFileTags = (dirent) => {\n let filePath = this.getDirentPath(dirent);\n seafileAPI.listFileTags(this.props.repoID, filePath).then(res => {\n let fileTagList = res.data.file_tags;\n for (let i = 0, length = fileTagList.length; i < length; i++) {\n fileTagList[i].id = fileTagList[i].file_tag_id;\n }\n this.setState({\n fileTagList: fileTagList,\n showLibContentViewDialogs: true,\n showEditFileTagDialog: true,\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onMenuFileTagChanged = () => {\n this.listFileTags(this.props.selectedDirentList[0]);\n let length = this.props.selectedDirentList.length;\n for (let i = 0; i < length; i++) {\n const dirent = this.props.selectedDirentList[i];\n const direntPath = this.getDirentPath(dirent);\n this.props.onFilesTagChanged(dirent, direntPath);\n }\n };\n\n getDirentPath = (dirent) => {\n if (dirent) return Utils.joinPath(this.props.path, dirent.name);\n };\n\n render() {\n\n const { repoID, userPerm } = this.props;\n const dirent = this.props.selectedDirentList[0];\n const direntPath = this.getDirentPath(dirent);\n\n const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm);\n let canDelete = true;\n let canDownload = true;\n let canCopy = true;\n let canModify = true;\n if (isCustomPermission) {\n const { permission } = customPermission;\n canDelete = permission.delete;\n canDownload = permission.download;\n canCopy = permission.copy;\n canModify = permission.modify;\n }\n\n return (\n \n
    \n
    \n \n {(userPerm === 'rw' || userPerm === 'admin' || isCustomPermission) && (\n \n {canModify && }\n {canCopy && }\n {canDelete && }\n {canDownload && }\n \n )}\n {userPerm === 'cloud-edit' && (\n \n {canModify && }\n {canCopy && }\n {canDelete && }\n \n )}\n {userPerm === 'r' && (\n \n \n \n \n )}\n {this.props.selectedDirentList.length === 1 &&\n \n }\n \n
    \n
    \n {Utils.isDesktop() && }\n {this.state.isMoveDialogShow &&\n \n }\n {this.state.isCopyDialogShow &&\n \n }\n {this.state.isZipDialogOpen &&\n \n dirent.name)}\n toggleDialog={this.closeZipDialog}\n />\n \n }\n {this.state.showLibContentViewDialogs && (\n \n {this.state.showShareDialog &&\n \n \n \n }\n {this.state.isRenameDialogOpen &&\n \n \n \n }\n {this.state.isPermissionDialogOpen &&\n \n \n \n }\n {this.state.showEditFileTagDialog &&\n \n \n \n }\n \n )}\n
    \n );\n }\n}\n\nMultipleDirOperationToolbar.propTypes = propTypes;\n\nexport default MultipleDirOperationToolbar;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { DropdownToggle, Dropdown, DropdownMenu, DropdownItem, Tooltip} from 'reactstrap';\nimport { gettext, siteRoot, isDocs } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../toast';\nimport ModalPotal from '../modal-portal';\nimport ShareDialog from '../dialog/share-dialog';\nimport EditFileTagDialog from '../dialog/edit-filetag-dialog';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n repoID: PropTypes.string.isRequired,\n userPerm: PropTypes.string.isRequired,\n repoEncrypted: PropTypes.bool.isRequired,\n enableDirPrivateShare: PropTypes.bool.isRequired,\n isGroupOwnedRepo: PropTypes.bool.isRequired,\n filePermission: PropTypes.string,\n isDraft: PropTypes.bool.isRequired,\n hasDraft: PropTypes.bool.isRequired,\n fileTags: PropTypes.array.isRequired,\n onFileTagChanged: PropTypes.func.isRequired,\n showShareBtn: PropTypes.bool.isRequired,\n dirent: PropTypes.object.isRequired,\n};\n\nclass ViewFileToolbar extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isDraftMessageShow: false,\n isMoreMenuShow: false,\n isShareDialogShow: false,\n isEditTagDialogShow: false,\n };\n }\n\n onEditClick = (e) => {\n e.preventDefault();\n let { path, repoID } = this.props;\n let url = siteRoot + 'lib/' + repoID + '/file' + Utils.encodePath(path) + '?mode=edit';\n window.open(url);\n };\n\n onNewDraft = (e) => {\n e.preventDefault();\n let { path, repoID } = this.props;\n seafileAPI.createDraft(repoID, path).then(res => {\n window.location.href = siteRoot + 'lib/' + res.data.origin_repo_id + '/file' + res.data.draft_file_path + '?mode=edit';\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onDraftHover = () => {\n this.setState({isDraftMessageShow: !this.state.isDraftMessageShow});\n };\n\n toggleMore = () => {\n this.setState({isMoreMenuShow: !this.state.isMoreMenuShow});\n };\n\n onShareToggle = () => {\n this.setState({isShareDialogShow: !this.state.isShareDialogShow});\n };\n\n onEditFileTagToggle = () => {\n this.setState({isEditTagDialogShow: !this.state.isEditTagDialogShow});\n };\n\n onHistoryClick = () => {\n let historyUrl = siteRoot + 'repo/file_revisions/' + this.props.repoID + '/?p=' + Utils.encodePath(this.props.path);\n location.href = historyUrl;\n };\n\n render() {\n let { filePermission } = this.props;\n return (\n \n
    \n {((filePermission === 'rw' || filePermission === 'cloud-edit') && !this.props.hasDraft) && (\n \n \n \n )}\n {(filePermission === 'rw' && !this.props.isDraft && !this.props.hasDraft && isDocs) && (\n \n \n {gettext('Create a draft from this file, instead of editing it directly.')}\n \n )}\n {filePermission === 'rw' && (\n \n \n {gettext('More')}\n \n \n {this.props.showShareBtn &&\n {gettext('Share')}\n }\n {gettext('Tags')}\n {gettext('History')}\n \n \n )}\n
    \n {this.state.isShareDialogShow && (\n \n \n \n )}\n {this.state.isEditTagDialogShow && (\n \n \n \n )}\n
    \n );\n }\n}\n\nViewFileToolbar.propTypes = propTypes;\n\nexport default ViewFileToolbar;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport CommonToolbar from '../../components/toolbar/common-toolbar';\nimport ViewModeToolbar from '../../components/toolbar/view-mode-toolbar';\nimport DirOperationToolBar from '../../components/toolbar/dir-operation-toolbar';\nimport MultipleDirOperationToolbar from '../../components/toolbar/multiple-dir-operation-toolbar';\nimport ViewFileToolbar from '../../components/toolbar/view-file-toolbar';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n isViewFile: PropTypes.bool.isRequired,\n filePermission: PropTypes.string,\n isDraft: PropTypes.bool.isRequired,\n hasDraft: PropTypes.bool.isRequired,\n fileTags: PropTypes.array.isRequired,\n onFileTagChanged: PropTypes.func.isRequired, // for file-view-toolbar\n // side-panel\n onSideNavMenuClick: PropTypes.func.isRequired,\n // mutiple-dir\n isDirentSelected: PropTypes.bool.isRequired,\n repoID: PropTypes.string.isRequired,\n path: PropTypes.string.isRequired,\n selectedDirentList: PropTypes.array.isRequired,\n onItemsMove: PropTypes.func.isRequired,\n onItemsCopy: PropTypes.func.isRequired,\n onItemsDelete: PropTypes.func.isRequired,\n // dir\n direntList: PropTypes.array.isRequired,\n repoName: PropTypes.string.isRequired,\n repoEncrypted: PropTypes.bool.isRequired,\n isGroupOwnedRepo: PropTypes.bool.isRequired,\n userPerm: PropTypes.string.isRequired,\n showShareBtn: PropTypes.bool.isRequired,\n enableDirPrivateShare: PropTypes.bool.isRequired,\n onAddFile: PropTypes.func.isRequired,\n onAddFolder: PropTypes.func.isRequired,\n onUploadFile: PropTypes.func.isRequired,\n onUploadFolder: PropTypes.func.isRequired,\n // view-mode\n currentMode: PropTypes.string.isRequired,\n switchViewMode: PropTypes.func.isRequired,\n // search\n onSearchedClick: PropTypes.func.isRequired,\n isRepoOwner: PropTypes.bool.isRequired,\n // selected menu\n onFilesTagChanged: PropTypes.func.isRequired, // for mutiple select toolbar\n updateDirent: PropTypes.func.isRequired,\n unSelectDirent: PropTypes.func,\n currentRepoInfo: PropTypes.object,\n onItemRename: PropTypes.func,\n showDirentDetail: PropTypes.func,\n};\n\nclass LibContentToolbar extends React.Component {\n\n render() {\n\n const { userPerm } = this.props;\n const { isCustomPermission } = Utils.getUserPermission(userPerm);\n\n if (this.props.isViewFile) {\n return (\n \n
    \n \n \n \n
    \n \n
    \n );\n }\n\n return (\n \n
    \n \n {this.props.isDirentSelected ?\n :\n \n }\n
    \n \n
    \n );\n }\n}\n\nLibContentToolbar.propTypes = propTypes;\n\nexport default LibContentToolbar;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { UncontrolledTooltip } from 'reactstrap';\nimport { siteRoot, gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport { InternalLinkOperation } from '../operations';\n\nconst propTypes = {\n repoName: PropTypes.string.isRequired,\n currentPath: PropTypes.string.isRequired,\n onPathClick: PropTypes.func.isRequired,\n onTabNavClick: PropTypes.func,\n pathPrefix: PropTypes.array,\n repoID: PropTypes.string.isRequired,\n isViewFile: PropTypes.bool,\n fileTags: PropTypes.array.isRequired,\n};\n\nclass DirPath extends React.Component {\n\n onPathClick = (e) => {\n let path = Utils.getEventData(e, 'path');\n this.props.onPathClick(path);\n };\n\n onTabNavClick = (e, tabName, id) => {\n if (window.uploader &&\n window.uploader.isUploadProgressDialogShow &&\n window.uploader.totalProgress !== 100) {\n if (!window.confirm(gettext('A file is being uploaded. Are you sure you want to leave this page?'))) {\n e.preventDefault();\n return false;\n }\n window.uploader.isUploadProgressDialogShow = false;\n }\n this.props.onTabNavClick(tabName, id);\n };\n\n turnPathToLink = (path) => {\n path = path[path.length - 1] === '/' ? path.slice(0, path.length - 1) : path;\n let pathList = path.split('/');\n let nodePath = '';\n let pathElem = pathList.map((item, index) => {\n if (item === '') {\n return null;\n }\n if (index === (pathList.length - 1)) {\n return (\n \n /\n {item}\n \n );\n } else {\n nodePath += '/' + item;\n return (\n \n /\n {item}\n \n );\n }\n });\n return pathElem;\n };\n\n render() {\n let { currentPath, repoName, fileTags } = this.props;\n let pathElem = this.turnPathToLink(currentPath);\n\n let tagTitle = '';\n if (fileTags.length > 0) {\n fileTags.forEach(item => {\n tagTitle += item.name + ' ';\n });\n }\n\n return (\n
    \n {this.props.pathPrefix && this.props.pathPrefix.map((item, index) => {\n return (\n \n this.onTabNavClick(e, item.name, item.id)}>{gettext(item.showName)}\n /\n \n );\n })}\n {this.props.pathPrefix && this.props.pathPrefix.length === 0 && (\n \n this.onTabNavClick(e, 'my-libs')}>{gettext('Libraries')}\n /\n \n )}\n {!this.props.pathPrefix && (\n \n this.onTabNavClick(e, 'my-libs')}>{gettext('Libraries')}\n /\n \n )}\n {(currentPath === '/' || currentPath === '') ?\n {repoName}:\n {repoName}\n }\n {pathElem}\n {this.props.isViewFile && (\n \n )}\n {(this.props.isViewFile && fileTags.length !== 0) &&\n \n {fileTags.map((fileTag, index) => {\n return ();\n })}\n \n {tagTitle}\n \n \n }\n
    \n );\n }\n}\n\nDirPath.propTypes = propTypes;\n\nexport default DirPath;\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Popover, PopoverBody } from 'reactstrap';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport { TAG_COLORS } from '../../constants';\nimport toaster from '../toast';\n\nimport '../../css/repo-tag.css';\n\nconst tagColorPropTypes = {\n tag: PropTypes.object.isRequired,\n repoID: PropTypes.string.isRequired\n};\n\nclass TagColor extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n tagColor: this.props.tag.color,\n isPopoverOpen: false\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.tag.color !== this.props.tag.color) {\n this.setState({\n tagColor: nextProps.tag.color,\n });\n }\n }\n\n togglePopover = () => {\n this.setState({\n isPopoverOpen: !this.state.isPopoverOpen\n });\n };\n\n selectTagColor = (e) => {\n const newColor = e.target.value;\n const { repoID, tag } = this.props;\n const { id, name } = tag;\n seafileAPI.updateRepoTag(repoID, id, name, newColor).then(() => {\n this.setState({\n tagColor: newColor,\n isPopoverOpen: !this.state.isPopoverOpen\n });\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const { isPopoverOpen, tagColor } = this.state;\n const { tag } = this.props;\n const { id, color } = tag;\n\n let colorList = [...TAG_COLORS];\n // for color from previous color options\n if (colorList.indexOf(color) == -1) {\n colorList.unshift(color);\n }\n\n return (\n
    \n \n \n \n \n \n
    \n {colorList.map((item, index)=>{\n return (\n
    \n \n
    \n );\n })\n }\n
    \n
    \n \n
    \n );\n }\n}\n\nTagColor.propTypes = tagColorPropTypes;\n\nexport default TagColor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../toast';\n\nimport '../../css/repo-tag.css';\n\nconst tagNamePropTypes = {\n tag: PropTypes.object.isRequired,\n repoID: PropTypes.string.isRequired\n};\n\nclass TagName extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n tagName: this.props.tag.name,\n isEditing: false\n };\n this.input = React.createRef();\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.tag.name !== this.props.tag.name) {\n this.setState({\n tagName: nextProps.tag.name,\n });\n }\n }\n\n toggleMode = () => {\n this.setState({\n isEditing: !this.state.isEditing\n }, () => {\n if (this.state.isEditing) {\n this.input.current.focus();\n }\n });\n };\n\n updateTagName = (e) => {\n const newName = e.target.value;\n const { repoID, tag } = this.props;\n const { id, color } = tag;\n seafileAPI.updateRepoTag(repoID, id, newName, color).then(() => {\n this.setState({\n tagName: newName\n });\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onInputKeyDown = (e) => {\n if (e.key == 'Enter') {\n this.toggleMode();\n this.updateTagName(e);\n }\n else if (e.key == 'Escape') {\n e.nativeEvent.stopImmediatePropagation();\n this.toggleMode();\n }\n };\n\n onInputBlur = (e) => {\n this.toggleMode();\n this.updateTagName(e);\n };\n\n render() {\n const { isEditing, tagName } = this.state;\n return (\n
    \n {isEditing ?\n :\n {tagName}\n }\n
    \n );\n }\n}\n\nTagName.propTypes = tagNamePropTypes;\n\nexport default TagName;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport TagColor from '../dialog/tag-color';\nimport TagName from '../dialog/tag-name';\n\nimport '../../css/repo-tag.css';\nimport './list-tag-popover.css';\n\nconst tagListItemPropTypes = {\n item: PropTypes.object.isRequired,\n repoID: PropTypes.string.isRequired,\n onDeleteTag : PropTypes.func.isRequired\n};\n\nclass TagListItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isTagHighlighted: false\n };\n }\n\n onMouseOver = () => {\n this.setState({\n isTagHighlighted: true\n });\n };\n\n onMouseOut = () => {\n this.setState({\n isTagHighlighted: false\n });\n };\n\n deleteTag = () => {\n this.props.onDeleteTag(this.props.item);\n };\n\n render() {\n const { isTagHighlighted } = this.state;\n const { item, repoID } = this.props;\n return (\n \n \n \n \n \n );\n }\n}\n\nTagListItem.propTypes = tagListItemPropTypes;\n\nexport default TagListItem;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Popover, PopoverBody } from 'reactstrap';\nimport { TAG_COLORS } from '../../constants';\n\nimport '../../css/repo-tag.css';\n\nexport default class VirtualTagColor extends React.Component {\n\n static propTypes = {\n updateVirtualTag: PropTypes.func.isRequired,\n tag: PropTypes.object.isRequired,\n repoID: PropTypes.string.isRequired\n };\n\n constructor(props) {\n super(props);\n this.state = {\n tagColor: this.props.tag.color,\n isPopoverOpen: false\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.tag.color !== this.props.tag.color) {\n this.setState({\n tagColor: nextProps.tag.color,\n });\n }\n }\n\n togglePopover = () => {\n this.setState({\n isPopoverOpen: !this.state.isPopoverOpen\n });\n };\n\n selectTagColor = (e) => {\n const newColor = e.target.value;\n this.props.updateVirtualTag(this.props.tag, { color: newColor });\n this.setState({\n tagColor: newColor,\n isPopoverOpen: !this.state.isPopoverOpen,\n });\n };\n\n render() {\n const { isPopoverOpen, tagColor } = this.state;\n const { tag } = this.props;\n const { id, color } = tag;\n\n let colorList = [...TAG_COLORS];\n // for color from previous color options\n if (colorList.indexOf(color) == -1) {\n colorList.unshift(color);\n }\n\n return (\n
    \n \n \n \n \n \n
    \n {colorList.map((item, index)=>{\n return (\n
    \n \n
    \n );\n })\n }\n
    \n
    \n \n
    \n );\n }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport '../../css/repo-tag.css';\n\nexport default class VirtualTagName extends React.Component {\n\n static propTypes = {\n updateVirtualTag: PropTypes.func.isRequired,\n tag: PropTypes.object.isRequired,\n repoID: PropTypes.string.isRequired\n };\n\n constructor(props) {\n super(props);\n this.state = {\n tagName: this.props.tag.name,\n isEditing: true,\n };\n this.input = React.createRef();\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.tag.name !== this.props.tag.name) {\n this.setState({\n tagName: nextProps.tag.name,\n });\n }\n }\n\n componentDidMount() {\n setTimeout(() => {\n this.input.current.focus();\n }, 1);\n }\n\n toggleMode = () => {\n this.setState({\n isEditing: !this.state.isEditing\n });\n };\n\n updateTagName = (e) => {\n const newName = e.target.value;\n this.props.updateVirtualTag(this.props.tag, { name: newName });\n this.setState({\n tagName: newName\n });\n };\n\n onInputKeyDown = (e) => {\n if (e.key == 'Enter') {\n this.toggleMode();\n this.updateTagName(e);\n }\n else if (e.key == 'Escape') {\n e.nativeEvent.stopImmediatePropagation();\n this.toggleMode();\n }\n };\n\n onInputBlur = (e) => {\n this.toggleMode();\n this.updateTagName(e);\n };\n\n render() {\n const { isEditing, tagName } = this.state;\n return (\n
    \n {isEditing ?\n :\n {tagName}\n }\n
    \n );\n }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport VirtualTagColor from './virtual-tag-color';\nimport VirtualTagName from './virtual-tag-name';\n\nimport '../../css/repo-tag.css';\nimport './list-tag-popover.css';\n\nexport default class VirtualTagListItem extends React.Component {\n\n static propTypes = {\n item: PropTypes.object.isRequired,\n repoID: PropTypes.string.isRequired,\n deleteVirtualTag: PropTypes.func.isRequired,\n updateVirtualTag: PropTypes.func.isRequired,\n };\n\n constructor(props) {\n super(props);\n this.state = {\n isTagHighlighted: false\n };\n }\n\n onMouseOver = () => {\n this.setState({ isTagHighlighted: true });\n };\n\n onMouseOut = () => {\n this.setState({ isTagHighlighted: false });\n };\n\n deleteVirtualTag = () => {\n this.props.deleteVirtualTag(this.props.item);\n };\n\n render() {\n const { isTagHighlighted } = this.state;\n const { item, repoID } = this.props;\n return (\n \n \n \n \n \n );\n }\n}\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Tooltip } from 'reactstrap';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport RepoTag from '../../models/repo-tag';\nimport toaster from '../toast';\n\nexport default class TagListFooter extends Component {\n\n static propTypes = {\n repoID: PropTypes.string.isRequired,\n toggle: PropTypes.func.isRequired,\n repotagList: PropTypes.array.isRequired,\n updateTags: PropTypes.func.isRequired,\n };\n\n constructor(props) {\n super(props);\n this.state = {\n showTooltip: false,\n };\n }\n\n toggleTooltip = () => {\n this.setState({showTooltip: !this.state.showTooltip});\n };\n\n onClickImport = () => {\n this.importOptionsInput.click();\n };\n\n importTagsInputChange = () => {\n if (!this.importOptionsInput.files || !this.importOptionsInput.files.length) {\n toaster.warning(gettext('Please select a file'));\n return;\n }\n const fileReader = new FileReader();\n fileReader.onload = this.onImportTags.bind(this);\n fileReader.onerror = this.onImportTagsError.bind(this);\n fileReader.readAsText(this.importOptionsInput.files[0]);\n };\n\n getValidTags = (tags) => {\n let validTags = [];\n let tagNameMap = {};\n this.props.repotagList.forEach(tag => tagNameMap[tag.name] = true);\n for (let i = 0; i < tags.length; i++) {\n if (!tags[i] || typeof tags[i] !== 'object' || !tags[i].name || !tags[i].color) {\n continue;\n }\n if (!tagNameMap[tags[i].name]) {\n validTags.push(\n {\n name: tags[i].name,\n color: tags[i].color,\n }\n );\n tagNameMap[tags[i].name] = true;\n }\n }\n return validTags;\n };\n\n onImportTags = (event) => {\n let tags = [];\n try {\n tags = JSON.parse(event.target.result); // handle JSON file format is error\n } catch (error) {\n toaster.danger(gettext('The imported tags are invalid'));\n return;\n }\n if (!Array.isArray(tags) || tags.length === 0) {\n toaster.danger(gettext('The imported tags are invalid'));\n return;\n }\n let validTags = this.getValidTags(tags);\n if (validTags.length === 0) {\n toaster.warning(gettext('The imported tag already exists'));\n return;\n }\n seafileAPI.createRepoTags(this.props.repoID, validTags).then((res) => {\n toaster.success(gettext('Tags imported'));\n let repotagList = [];\n res.data.repo_tags.forEach(item => {\n let repo_tag = new RepoTag(item);\n repotagList.push(repo_tag);\n });\n this.props.updateTags(repotagList);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n this.importOptionsInput.value = null;\n };\n\n onImportTagsError = () => {\n toaster.success(gettext('Failed to import tags. Please reupload.'));\n };\n\n getDownloadUrl = () => {\n const tags = this.props.repotagList.map(item => {\n return { name: item.name, color: item.color };\n });\n return `data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(tags))}`;\n };\n\n render() {\n return (\n
    \n \n \n {gettext('Use the import/export function to transfer tags quickly to another library. (The export is in JSON format.)')}\n \n this.importOptionsInput = ref}\n accept='.json'\n className=\"d-none\"\n onChange={this.importTagsInputChange}\n />\n {gettext('Import tags')}\n |\n \n {gettext('Export tags')}\n \n
    \n );\n }\n}\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { v4 as uuidv4 } from 'uuid';\nimport { gettext } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../toast';\nimport RepoTag from '../../models/repo-tag';\nimport TagListItem from './tag-list-item';\nimport VirtualTagListItem from './virtual-tag-list-item';\nimport TagListFooter from './tag-list-footer';\nimport { TAG_COLORS } from '../../constants/';\n\nimport '../../css/repo-tag.css';\nimport './list-tag-popover.css';\n\nexport default class ListTagPopover extends React.Component {\n\n static propTypes = {\n repoID: PropTypes.string.isRequired,\n onListTagCancel: PropTypes.func.isRequired,\n };\n\n constructor(props) {\n super(props);\n this.state = {\n repotagList: []\n };\n }\n\n componentDidMount() {\n this.loadTags();\n }\n\n loadTags = () => {\n seafileAPI.listRepoTags(this.props.repoID).then(res => {\n let repotagList = [];\n res.data.repo_tags.forEach(item => {\n let repo_tag = new RepoTag(item);\n repotagList.push(repo_tag);\n });\n this.setState({ repotagList });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n updateTags = (newRepotagList) => {\n this.setState({\n repotagList: [...this.state.repotagList, ...newRepotagList],\n });\n };\n\n onDeleteTag = (tag) => {\n const { repoID } = this.props;\n const { id: targetTagID } = tag;\n seafileAPI.deleteRepoTag(repoID, targetTagID).then((res) => {\n this.setState({\n repotagList: this.state.repotagList.filter(tag => tag.id != targetTagID)\n });\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n createVirtualTag = (e) => {\n e.preventDefault();\n let { repotagList } = this.state;\n let virtual_repo_tag = {\n name: '',\n color: TAG_COLORS[Math.floor(Math.random() * TAG_COLORS.length)], // generate random tag color for virtual tag\n id: `virtual-tag-${uuidv4()}`,\n is_virtual: true,\n };\n repotagList.push(virtual_repo_tag);\n this.setState({ repotagList });\n };\n\n deleteVirtualTag = (virtualTag) => {\n let { repotagList } = this.state;\n let index = repotagList.findIndex(item => item.id === virtualTag.id);\n repotagList.splice(index, 1);\n this.setState({ repotagList });\n };\n\n updateVirtualTag = (virtualTag, data) => {\n const repoID = this.props.repoID;\n const { repotagList } = this.state;\n const index = repotagList.findIndex(item => item.id === virtualTag.id);\n if (index < 0) return null;\n\n // If virtual tag color is updated and virtual tag name is empty, it will be saved to local state, don't save it to the server\n if (data.color) {\n virtualTag.color = data.color;\n repotagList[index] = virtualTag;\n this.setState({ repotagList });\n return;\n }\n\n // If virtual tag name is updated and name is not empty, virtual tag color use default, save it to the server\n if (data.name && data.name.length > 0) {\n let color = virtualTag.color;\n let name = data.name;\n seafileAPI.createRepoTag(repoID, name, color).then((res) => {\n // After saving sag to the server, replace the virtual tag with newly created tag\n repotagList[index] = new RepoTag(res.data.repo_tag);\n this.setState({ repotagList });\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n };\n\n render() {\n return (\n \n
      \n {this.state.repotagList.map((repoTag, index) => {\n if (repoTag.is_virtual) {\n return (\n \n );\n } else {\n return (\n \n );\n }\n })}\n
    \n
    \n {gettext('Create a new tag')}\n
    \n \n
    \n );\n }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { v4 as uuidv4 } from 'uuid';\nimport { gettext, siteRoot } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport SeahubPopover from '../common/seahub-popover';\nimport ListTagPopover from '../popover/list-tag-popover';\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n userPerm: PropTypes.string,\n currentPath: PropTypes.string.isRequired,\n updateUsedRepoTags: PropTypes.func.isRequired,\n onDeleteRepoTag: PropTypes.func.isRequired,\n};\n\nclass DirTool extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isListRepoTagShow: false,\n };\n this.tagsIconID = `tags-icon-${uuidv4()}`;\n }\n\n onMouseDown = (e) => {\n e.stopPropagation();\n };\n\n toggleRepoTag = (e) => {\n e.stopPropagation();\n this.setState({ isListRepoTagShow: !this.state.isListRepoTagShow });\n };\n\n hidePopover = (e) => {\n if (e) {\n let dom = e.target;\n while (dom) {\n if (typeof dom.className === 'string' && dom.className.includes('tag-color-popover')) return;\n dom = dom.parentNode;\n }\n }\n this.setState({ isListRepoTagShow: false });\n };\n\n toggleCancel = () => {\n this.setState({ isListRepoTagShow: false });\n };\n\n isMarkdownFile(filePath) {\n return Utils.getFileName(filePath).includes('.md');\n }\n\n render() {\n let { repoID, userPerm, currentPath } = this.props;\n if (userPerm !== 'rw') {\n return '';\n }\n if (this.isMarkdownFile(currentPath)) {\n return '';\n }\n let toolbarDom = null;\n if (Utils.getFileName(currentPath)) { // name not '' is not root path\n let trashUrl = siteRoot + 'repo/' + repoID + '/trash/?path=' + encodeURIComponent(currentPath);\n toolbarDom = (\n
      \n
    • \n \n
    • \n
    • \n \n
    • \n
    \n );\n } else { // currentPath === '/' is root path\n let trashUrl = siteRoot + 'repo/' + repoID + '/trash/';\n let historyUrl = siteRoot + 'repo/history/' + repoID + '/';\n toolbarDom = (\n
      \n
    • \n \n
    • \n
    • \n \n
    • \n
    • \n \n
    • \n
    \n );\n }\n return (\n <>\n {toolbarDom}\n {this.state.isListRepoTagShow &&\n \n \n \n }\n \n );\n }\n}\n\nDirTool.propTypes = propTypes;\n\nexport default DirTool;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Utils } from '../../utils/utils';\nimport SortOptionsDialog from '../../components/dialog/sort-options';\nimport DirPath from './dir-path';\nimport DirTool from './dir-tool';\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n repoName: PropTypes.string.isRequired,\n userPerm: PropTypes.string,\n currentPath: PropTypes.string.isRequired,\n onPathClick: PropTypes.func.isRequired,\n onTabNavClick: PropTypes.func,\n pathPrefix: PropTypes.array,\n isViewFile: PropTypes.bool,\n updateUsedRepoTags: PropTypes.func.isRequired,\n fileTags: PropTypes.array.isRequired,\n onDeleteRepoTag: PropTypes.func.isRequired,\n direntList: PropTypes.array,\n sortBy: PropTypes.string,\n sortOrder: PropTypes.string,\n sortItems: PropTypes.func,\n};\n\nclass CurDirPath extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isSortOptionsDialogOpen: false\n };\n }\n\n toggleSortOptionsDialog = () => {\n this.setState({\n isSortOptionsDialogOpen: !this.state.isSortOptionsDialogOpen\n });\n };\n\n render() {\n const isDesktop = Utils.isDesktop();\n return (\n \n \n {isDesktop &&\n }\n {!isDesktop && this.props.direntList.length > 0 &&\n }\n {this.state.isSortOptionsDialogOpen &&\n \n }\n \n );\n }\n}\n\nCurDirPath.propTypes = propTypes;\n\nexport default CurDirPath;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Col } from 'reactstrap';\n\nfunction ColumnName(props) {\n const { column } = props;\n const { name } = column;\n\n return (\n \n
    \n {name || ''}\n
    \n \n );\n}\n\nColumnName.propTypes = {\n column: PropTypes.object.isRequired,\n};\n\nexport default ColumnName;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { KeyCodes } from '../../../../constants';\n\nclass SimpleText extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n value: props.row[props.column.key] || '',\n };\n this.inputRef = React.createRef();\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const nextValue = nextProps.row[nextProps.column.key];\n if (nextValue !== this.state.value) {\n this.setState({ value: nextValue });\n }\n }\n\n blurInput = () => {\n setTimeout(() => {\n this.inputRef.current && this.inputRef.current.blur();\n }, 1);\n };\n\n onBlur = () => {\n let { column, onCommit } = this.props;\n const updated = {};\n updated[column.key] = this.state.value.trim();\n onCommit(updated, column);\n };\n\n onChange = (e) => {\n let value = e.target.value;\n if (value === this.state.value) return;\n this.setState({value});\n };\n\n onCut = (e) => {\n e.stopPropagation();\n };\n\n onPaste = (e) => {\n e.stopPropagation();\n };\n\n onKeyDown = (e) => {\n if (e.keyCode === KeyCodes.Esc) {\n e.stopPropagation();\n this.blurInput();\n return;\n }\n let { selectionStart, selectionEnd, value } = e.currentTarget;\n if (\n (e.keyCode === KeyCodes.ChineseInputMethod) ||\n (e.keyCode === KeyCodes.LeftArrow && selectionStart === 0) ||\n (e.keyCode === KeyCodes.RightArrow && selectionEnd === value.length)\n ) {\n e.stopPropagation();\n }\n };\n\n render() {\n const { column } = this.props;\n const { value } = this.state;\n\n return (\n \n );\n }\n}\n\nSimpleText.propTypes = {\n column: PropTypes.object,\n row: PropTypes.object,\n onCommit: PropTypes.func.isRequired,\n};\n\nexport default SimpleText;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FORMULA_RESULT_TYPE } from '../../../../constants';\nimport { getDateDisplayString } from '../../../../utils/extra-attributes';\n\nfunction FormulaFormatter(props) {\n const { column, row } = props;\n const value = row[column.key];\n\n const { data } = column;\n const { result_type, format } = data || {};\n if (result_type === FORMULA_RESULT_TYPE.DATE) {\n return (\n
    {getDateDisplayString(value, format)}
    \n );\n }\n if (result_type === FORMULA_RESULT_TYPE.STRING) {\n return value;\n }\n if (typeof value === 'object') {\n return null;\n }\n return <>;\n}\n\nFormulaFormatter.propTypes = {\n column: PropTypes.object,\n row: PropTypes.object,\n};\n\nexport default FormulaFormatter;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nclass SearchInput extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n searchValue: props.value,\n };\n this.isInputtingChinese = false;\n this.timer = null;\n this.inputRef = null;\n }\n\n componentDidMount() {\n if (this.props.autoFocus && this.inputRef && this.inputRef !== document.activeElement) {\n setTimeout(() => {\n this.inputRef.focus();\n }, 0);\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.value !== this.props.value) {\n this.setState({searchValue: nextProps.value});\n }\n }\n\n componentWillUnmount() {\n this.timer && clearTimeout(this.timer);\n this.timer = null;\n this.inputRef = null;\n }\n\n onCompositionStart = () => {\n this.isInputtingChinese = true;\n };\n\n onChange = (e) => {\n this.timer && clearTimeout(this.timer);\n const { onChange, wait } = this.props;\n let text = e.target.value;\n this.setState({searchValue: text || ''}, () => {\n if (this.isInputtingChinese) return;\n this.timer = setTimeout(() => {\n onChange && onChange(this.state.searchValue.trim());\n }, wait);\n });\n };\n\n onCompositionEnd = (e) => {\n this.isInputtingChinese = false;\n this.onChange(e);\n };\n\n setFocus = (isSelectAllText) => {\n if (this.inputRef === document.activeElement) return;\n this.inputRef.focus();\n if (isSelectAllText) {\n const txtLength = this.state.searchValue.length;\n this.inputRef.setSelectionRange(0, txtLength);\n }\n };\n\n render() {\n const { placeholder, autoFocus, className, onKeyDown, disabled, style } = this.props;\n const { searchValue } = this.state;\n\n return (\n this.inputRef = ref}\n />\n );\n }\n}\n\nSearchInput.propTypes = {\n placeholder: PropTypes.string,\n autoFocus: PropTypes.bool,\n className: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n onKeyDown: PropTypes.func,\n wait: PropTypes.number,\n disabled: PropTypes.bool,\n style: PropTypes.object,\n value: PropTypes.string,\n};\n\nSearchInput.defaultProps = {\n wait: 100,\n disabled: false,\n value: '',\n};\n\nexport default SearchInput;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { UncontrolledPopover } from 'reactstrap';\nimport { gettext } from '../../../../../utils/constants';\nimport SearchInput from '../search-input';\nimport { getSelectColumnOptions } from '../../../../../utils/extra-attributes';\n\nclass SingleSelectEditor extends Component {\n\n constructor(props) {\n super(props);\n const options = this.getSelectColumnOptions(props);\n this.state = {\n value: props.row[props.column.key],\n searchVal: '',\n highlightIndex: -1,\n maxItemNum: 0,\n itemHeight: 0,\n filteredOptions: options,\n };\n this.options = options;\n this.timer = null;\n this.editorKey = `single-select-editor-${props.column.key}`;\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const currentCascadeColumnValue = this.getCascadeColumnValue(this.props);\n const nextCascadeColumnValue = this.getCascadeColumnValue(nextProps);\n if (currentCascadeColumnValue !== nextCascadeColumnValue) {\n this.options = this.getSelectColumnOptions(nextProps);\n this.setState({ filteredOptions: this.options });\n }\n }\n\n getCascadeColumnValue = (props) => {\n const { column, row, columns } = props;\n const { data } = column;\n const { cascade_column_key } = data || {};\n if (!cascade_column_key) return '';\n const cascadeColumn = columns.find(item => item.key === cascade_column_key);\n if (!cascadeColumn) return '';\n return row[cascade_column_key];\n };\n\n getSelectColumnOptions = (props) => {\n const { column, row, columns } = props;\n let options = getSelectColumnOptions(column);\n const { data } = column;\n const { cascade_column_key, cascade_settings } = data || {};\n if (cascade_column_key) {\n const cascadeColumn = columns.find(item => item.key === cascade_column_key);\n if (cascadeColumn) {\n const cascadeColumnValue = row[cascade_column_key];\n if (!cascadeColumnValue) return [];\n const cascadeSetting = cascade_settings[cascadeColumnValue];\n if (!cascadeSetting || !Array.isArray(cascadeSetting) || cascadeSetting.length === 0) return [];\n return options.filter(option => cascadeSetting.includes(option.id));\n }\n }\n return options;\n };\n\n toggle = () => {\n this.ref.toggle();\n this.props.onUpdateState();\n };\n\n onChangeSearch = (searchVal) => {\n const { searchVal: oldSearchVal } = this.state;\n if (oldSearchVal === searchVal) return;\n const val = searchVal.toLowerCase();\n const filteredOptions = val ?\n this.options.filter((item) => item.name && item.name.toLowerCase().indexOf(val) > -1) : this.options;\n this.setState({ searchVal, filteredOptions });\n };\n\n onSelectOption = (optionID) => {\n const { column } = this.props;\n this.setState({ value: optionID }, () => {\n this.props.onCommit({ [column.key]: optionID }, column);\n this.toggle();\n });\n };\n\n render() {\n const { value, filteredOptions } = this.state;\n const { column } = this.props;\n\n return (\n this.ref = ref}\n >\n
    \n
    \n \n
    \n
    \n {filteredOptions.map(option => {\n const isSelected = value === option.id;\n const style = {\n backgroundColor: option.color,\n color: option.textColor || null,\n maxWidth: Math.max(200 - 62, column.width ? column.width -62 : 0)\n };\n return (\n
    \n
    {option.name}
    \n
    \n {isSelected && ()}\n
    \n
    \n );\n })}\n
    \n
    \n \n );\n }\n}\n\nSingleSelectEditor.propTypes = {\n value: PropTypes.string,\n row: PropTypes.object,\n column: PropTypes.object,\n columns: PropTypes.array,\n onUpdateState: PropTypes.func,\n onCommit: PropTypes.func,\n};\n\nexport default SingleSelectEditor;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { DELETED_OPTION_BACKGROUND_COLOR, DELETED_OPTION_TIPS } from '../../../../../constants';\nimport { gettext } from '../../../../../utils/constants';\nimport SingleSelectEditor from './single-select-editor';\nimport { getSelectColumnOptions } from '../../../../../utils/extra-attributes';\n\nimport './index.css';\n\nclass SingleSelect extends Component {\n\n constructor(props) {\n super(props);\n const { column } = props;\n this.options = getSelectColumnOptions(column);\n this.state = {\n isShowSingleSelect: false,\n };\n this.editorKey = `single-select-editor-${column.key}`;\n }\n\n updateState = () => {\n this.setState({ isShowSingleSelect: !this.state.isShowSingleSelect });\n };\n\n onCommit = (value, column) => {\n this.props.onCommit(value, column);\n };\n\n render() {\n const { isShowSingleSelect } = this.state;\n const { column, row } = this.props;\n const currentOptionID = row[column.key];\n const option = this.options.find(option => option.id === currentOptionID);\n const optionStyle = option ?\n { backgroundColor: option.color, color: option.textColor || null } :\n { backgroundColor: DELETED_OPTION_BACKGROUND_COLOR };\n const optionName = option ? option.name : gettext(DELETED_OPTION_TIPS);\n\n return (\n <>\n \n
    \n
    \n {currentOptionID && (\n {optionName}
    \n )}\n
    \n {column.editable && (\n \n )}\n
    \n \n {column.editable && (\n \n )}\n \n );\n }\n}\n\nSingleSelect.propTypes = {\n column: PropTypes.object,\n row: PropTypes.object,\n columns: PropTypes.array,\n onCommit: PropTypes.func,\n};\n\nexport default SingleSelect;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { getNumberDisplayString, replaceNumberNotAllowInput, formatStringToNumber, isMac } from '../../../../utils/extra-attributes';\nimport { KeyCodes, DEFAULT_NUMBER_FORMAT } from '../../../../constants';\n\nclass NumberEditor extends React.Component {\n\n constructor(props) {\n super(props);\n const { row, column } = props;\n const value = row[column.key];\n this.state = {\n value: getNumberDisplayString(value, column.data),\n };\n }\n\n onChange = (event) => {\n const { data } = this.props.column; // data maybe 'null'\n const format = (data && data.format) ? data.format : DEFAULT_NUMBER_FORMAT;\n let currency_symbol = null;\n if (data && data.format === 'custom_currency') {\n currency_symbol = data['currency_symbol'];\n }\n const initValue = event.target.value.trim();\n\n //Prevent the repetition of periods bug in the Chinese input method of the Windows system\n if (!isMac() && initValue.indexOf('.。') > -1) return;\n let value = replaceNumberNotAllowInput(initValue, format, currency_symbol);\n if (value === this.state.value) return;\n this.setState({ value });\n };\n\n onKeyDown = (event) => {\n let { selectionStart, selectionEnd, value } = event.currentTarget;\n if (event.keyCode === KeyCodes.Enter || event.keyCode === KeyCodes.Esc) {\n event.preventDefault();\n this.input.blur();\n } else if ((event.keyCode === KeyCodes.LeftArrow && selectionStart === 0) ||\n (event.keyCode === KeyCodes.RightArrow && selectionEnd === value.length)\n ) {\n event.stopPropagation();\n }\n };\n\n onBlur = () => {\n const { value } = this.state;\n const { column } = this.props;\n this.props.onCommit({ [column.key]: formatStringToNumber(value, column.data) }, column);\n };\n\n setInputRef = (input) => {\n this.input = input;\n return this.input;\n };\n\n onPaste = (e) => {\n e.stopPropagation();\n };\n\n onCut = (e) => {\n e.stopPropagation();\n };\n\n render() {\n const { column } = this.props;\n\n return (\n \n );\n }\n}\n\nNumberEditor.propTypes = {\n column: PropTypes.object,\n row: PropTypes.object,\n onCommit: PropTypes.func,\n};\n\nexport default NumberEditor;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { getDateDisplayString } from '../../../../utils/extra-attributes';\n\n\nclass DateEditor extends Component {\n render() {\n const { column, row } = this.props;\n const { data, key } = column;\n const value = getDateDisplayString(row[key], data ? data.format : '');\n\n return (\n \n );\n }\n}\n\nDateEditor.propTypes = {\n column: PropTypes.object,\n row: PropTypes.object,\n};\n\nexport default DateEditor;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { getDateDisplayString } from '../../../../utils/extra-attributes';\n\nclass CtimeFormatter extends Component {\n render() {\n const { column, row } = this.props;\n const { key } = column;\n const value = getDateDisplayString(row[key], 'YYYY-MM-DD HH:mm:ss') || '';\n\n return (\n
    {value}
    \n );\n }\n}\n\nCtimeFormatter.propTypes = {\n column: PropTypes.object,\n row: PropTypes.object,\n};\n\nexport default CtimeFormatter;\n","import SimpleText from './simple-text';\nimport FormulaFormatter from './formula-formatter';\nimport SingleSelect from './single-select';\nimport NumberEditor from './number-editor';\nimport DateEditor from './date-editor';\nimport CtimeFormatter from './ctime-formatter';\nimport { EXTRA_ATTRIBUTES_COLUMN_TYPE } from '../../../../constants';\n\n\nconst CONFIG = {\n [EXTRA_ATTRIBUTES_COLUMN_TYPE.TEXT]: SimpleText,\n [EXTRA_ATTRIBUTES_COLUMN_TYPE.FORMULA]: FormulaFormatter,\n [EXTRA_ATTRIBUTES_COLUMN_TYPE.SINGLE_SELECT]: SingleSelect,\n [EXTRA_ATTRIBUTES_COLUMN_TYPE.NUMBER]: NumberEditor,\n [EXTRA_ATTRIBUTES_COLUMN_TYPE.DATE]: DateEditor,\n [EXTRA_ATTRIBUTES_COLUMN_TYPE.CTIME]: CtimeFormatter,\n [EXTRA_ATTRIBUTES_COLUMN_TYPE.MTIME]: CtimeFormatter,\n};\n\nexport default CONFIG;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Col } from 'reactstrap';\nimport ColumnName from './column-name';\nimport CONFIG from '../editor';\n\nimport './index.css';\n\nclass Column extends Component {\n render() {\n const { column, row, columns } = this.props;\n const Editor = CONFIG[column.type] || CONFIG['text'];\n\n return (\n
    \n \n \n \n \n
    \n );\n }\n}\n\nColumn.propTypes = {\n column: PropTypes.object,\n row: PropTypes.object,\n columns: PropTypes.array,\n onCommit: PropTypes.func,\n};\n\nexport default Column;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap';\nimport isHotkey from 'is-hotkey';\nimport { zIndexes, DIALOG_MAX_HEIGHT, EXTRA_ATTRIBUTES_COLUMN_TYPE } from '../../../constants';\nimport { gettext } from '../../../utils/constants';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { Utils } from '../../../utils/utils';\nimport { getSelectColumnOptions, getValidColumns } from '../../../utils/extra-attributes';\nimport Column from './column';\nimport Loading from '../../loading';\nimport toaster from '../../toast';\n\nimport './index.css';\n\nclass ExtraAttributesDialog extends Component {\n\n constructor(props) {\n super(props);\n const { direntDetail, direntType } = props;\n this.state = {\n animationEnd: false,\n isLoading: true,\n update: {},\n row: {},\n columns: [],\n errorMsg: '',\n };\n if (direntType === 'dir') {\n this.isEmptyFile = false;\n } else {\n const direntDetailId = direntDetail?.id || '';\n this.isEmptyFile = direntDetailId === '0'.repeat(direntDetailId.length);\n }\n this.isExist = false;\n this.modalRef = React.createRef();\n }\n\n componentDidMount() {\n this.startAnimation(this.getData);\n window.addEventListener('keydown', this.onHotKey);\n }\n\n componentWillUnmount() {\n window.removeEventListener('keydown', this.onHotKey);\n }\n\n startAnimation = (callback) => {\n if (this.state.animationEnd === true) {\n callback && callback();\n }\n\n // use setTimeout to make sure real dom rendered\n setTimeout(() => {\n let dom = this.modalRef.current.firstChild;\n const { width, maxWidth, marginLeft, height } = this.getDialogStyle();\n dom.style.width = `${width}px`;\n dom.style.maxWidth = `${maxWidth}px`;\n dom.style.marginLeft = `${marginLeft}px`;\n dom.style.height = `${height}px`;\n dom.style.marginRight = 'unset';\n dom.style.marginTop = '28px';\n\n // after animation, change style and run callback\n setTimeout(() => {\n this.setState({ animationEnd: true }, () => {\n dom.style.transition = 'none';\n callback && callback();\n });\n }, 280);\n }, 1);\n };\n\n getFormatUpdateData = (update = {}) => {\n const { columns } = this.state;\n const updateData = {};\n for (let key in update) {\n const column = columns.find(column => column.key === key);\n if (column && column.editable) {\n const { type, name } = column;\n const value = update[key];\n if (type === EXTRA_ATTRIBUTES_COLUMN_TYPE.SINGLE_SELECT) {\n const options = getSelectColumnOptions(column);\n const option = options.find(item => item.id === value);\n updateData[name] = option ? option.name : '';\n } else {\n updateData[column.name] = update[key];\n }\n }\n }\n return updateData;\n };\n\n getData = () => {\n const { repoID, filePath } = this.props;\n seafileAPI.getFileExtendedProperties(repoID, filePath).then(res => {\n const { row, metadata, editable_columns } = res.data;\n this.isExist = Boolean(row._id);\n this.setState({ row: row, columns: getValidColumns(metadata, editable_columns, this.isEmptyFile), isLoading: false, errorMsg: '' });\n }).catch(error => {\n const errorMsg =Utils.getErrorMsg(error);\n this.setState({ isLoading: false, errorMsg });\n });\n };\n\n createData = (data) => {\n const { repoID, filePath } = this.props;\n seafileAPI.newFileExtendedProperties(repoID, filePath, data).then(res => {\n this.isExist = true;\n const { row } = res.data;\n this.setState({ row: row, isLoading: false, errorMsg: '' });\n }).catch(error => {\n const errorMsg =Utils.getErrorMsg(error);\n toaster.danger(gettext(errorMsg));\n });\n };\n\n updateData = (update, column) => {\n const newRow = { ...this.state.row, ...update };\n this.setState({ row: newRow }, () => {\n const data = this.getFormatUpdateData(update);\n const { repoID, filePath } = this.props;\n if (this.isExist) {\n seafileAPI.updateFileExtendedProperties(repoID, filePath, data).then(res => {\n this.setState({ update: {}, row: res.data.row });\n }).catch(error => {\n const errorMsg = Utils.getErrorMsg(error);\n toaster.danger(gettext(errorMsg));\n });\n } else {\n this.createData(data);\n }\n });\n };\n\n onHotKey = (event) => {\n if (isHotkey('esc', event)) {\n this.onToggle();\n return;\n }\n };\n\n onToggle = () => {\n this.props.onToggle();\n };\n\n getDialogStyle = () => {\n const width = 800;\n return {\n width,\n maxWidth: width,\n marginLeft: (window.innerWidth - width) / 2,\n height: DIALOG_MAX_HEIGHT,\n };\n };\n\n getInitStyle = () => {\n const transition = 'all .3s';\n const defaultMargin = 80; // sequence cell width\n const defaultHeight = 100;\n const marginTop = '30%';\n const width = window.innerWidth;\n return {\n width: `${width - defaultMargin}px`,\n maxWidth: `${width - defaultMargin}px`,\n marginLeft: `${defaultMargin}px`,\n height: `${defaultHeight}px`,\n marginRight: `${defaultMargin}px`,\n marginTop,\n transition,\n };\n };\n\n renderColumns = () => {\n const { isLoading, errorMsg, columns, row, update } = this.state;\n if (isLoading) {\n return (\n
    \n \n
    \n );\n }\n\n if (errorMsg) {\n return (\n
    \n {gettext(errorMsg)}\n
    \n );\n }\n\n const newRow = { ...row, ...update };\n\n return (\n <>\n {columns.map(column => {\n return (\n \n );\n })}\n \n );\n\n };\n\n renderContent = () => {\n if (!this.state.animationEnd) return null;\n\n return (\n <>\n {gettext('Edit extra properties')}\n \n {this.renderColumns()}\n \n \n );\n };\n\n render() {\n const { animationEnd } = this.state;\n\n return (\n \n {this.renderContent()}\n
    \n );\n }\n}\n\nExtraAttributesDialog.propTypes = {\n repoID: PropTypes.string,\n filePath: PropTypes.string,\n direntType: PropTypes.string,\n direntDetail: PropTypes.object,\n onToggle: PropTypes.func,\n};\n\nexport default ExtraAttributesDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport toaster from '../toast';\nimport { Utils } from '../../utils/utils';\nimport Loading from '../loading';\n\nimport '../../css/apply-folder-properties.css';\n\nconst propTypes = {\n toggle: PropTypes.func,\n repoID: PropTypes.string,\n path: PropTypes.string\n};\n\nclass ConfirmApplyFolderPropertiesDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n submitting: false\n };\n }\n\n submit = () => {\n const { repoID, path } = this.props;\n this.setState({ submitting: true });\n seafileAPI.applyFolderExtendedProperties(repoID, path).then(() => {\n toaster.success(gettext('Successfully applied the properties.'));\n this.props.toggle();\n }).catch(error => {\n let errorMsg = Utils.getErrorMsg(error);\n toaster.danger(errorMsg);\n this.setState({ submitting: false });\n });\n };\n\n render() {\n const { submitting } = this.state;\n\n return (\n \n \n {gettext('Apply properties')}\n \n \n

    \n {gettext('Are you sure you want to apply the properties to all the files inside the folder?')}\n

    \n
    \n \n \n \n \n
    \n );\n }\n\n}\n\nConfirmApplyFolderPropertiesDialog.propTypes = propTypes;\n\nexport default ConfirmApplyFolderPropertiesDialog;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { v4 as uuidv4 } from 'uuid';\nimport Icon from '../icon';\nimport { gettext, canSetExProps } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport EditFileTagPopover from '../popover/edit-filetag-popover';\nimport ExtraAttributesDialog from '../dialog/extra-attributes-dialog';\nimport FileTagList from '../file-tag-list';\nimport ConfirmApplyFolderPropertiesDialog from '../dialog/confirm-apply-folder-properties-dialog';\n\nconst propTypes = {\n repoInfo: PropTypes.object.isRequired,\n repoID: PropTypes.string.isRequired,\n dirent: PropTypes.object.isRequired,\n direntType: PropTypes.string.isRequired,\n direntDetail: PropTypes.object.isRequired,\n path: PropTypes.string.isRequired,\n fileTagList: PropTypes.array.isRequired,\n onFileTagChanged: PropTypes.func.isRequired,\n};\n\nclass DetailListView extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isEditFileTagShow: false,\n isShowExtraProperties: false,\n isShowApplyProperties: false\n };\n this.tagListTitleID = `detail-list-view-tags-${uuidv4()}`;\n }\n\n getDirentPosition = () => {\n let { repoInfo } = this.props;\n let direntPath = this.getDirentPath();\n let position = repoInfo.repo_name;\n if (direntPath !== '/') {\n let index = direntPath.lastIndexOf('/');\n let path = direntPath.slice(0, index);\n position = position + path;\n }\n return position;\n };\n\n onEditFileTagToggle = () => {\n this.setState({\n isEditFileTagShow: !this.state.isEditFileTagShow\n });\n };\n\n onFileTagChanged = () => {\n let direntPath = this.getDirentPath();\n this.props.onFileTagChanged(this.props.dirent, direntPath);\n };\n\n getDirentPath = () => {\n if (Utils.isMarkdownFile(this.props.path)) {\n return this.props.path; // column mode: view file\n }\n let { dirent, path } = this.props;\n return Utils.joinPath(path, dirent.name);\n };\n\n toggleExtraPropertiesDialog = () => {\n this.setState({ isShowExtraProperties: !this.state.isShowExtraProperties });\n };\n\n toggleApplyPropertiesDialog = () => {\n this.setState({ isShowApplyProperties: !this.state.isShowApplyProperties });\n };\n\n renderTags = () => {\n const { direntType, direntDetail } = this.props;\n const position = this.getDirentPosition();\n if (direntType === 'dir') {\n return (\n \n \n \n \n \n \n \n {direntDetail.permission === 'rw' && canSetExProps && (\n \n \n \n \n \n \n \n \n )}\n \n
    {gettext('Location')}{position}
    {gettext('Last Update')}{moment(direntDetail.mtime).format('YYYY-MM-DD')}
    \n
    \n {gettext('Edit extra properties')}\n
    \n
    \n \n {gettext('Apply properties to files inside the folder')}\n \n
    \n );\n }\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n {direntDetail.permission === 'rw' && canSetExProps && (\n \n \n \n )}\n \n
    {gettext('Size')}{Utils.bytesToSize(direntDetail.size)}
    {gettext('Location')}{position}
    {gettext('Last Update')}{moment(direntDetail.last_modified).fromNow()}
    {gettext('Tags')}\n \n \n
    \n
    \n {gettext('Edit extra properties')}\n
    \n
    \n );\n };\n\n render() {\n const { direntType, direntDetail, fileTagList } = this.props;\n const direntPath = this.getDirentPath();\n\n return (\n \n {this.renderTags()}\n {this.state.isEditFileTagShow &&\n \n }\n {this.state.isShowExtraProperties && (\n \n )}\n {this.state.isShowApplyProperties && (\n \n )}\n \n );\n }\n}\n\nDetailListView.defaultProps = {\n fileTagList: [],\n};\n\nDetailListView.propTypes = propTypes;\n\nexport default DetailListView;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { siteRoot, enableVideoThumbnail } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../toast';\nimport Dirent from '../../models/dirent';\nimport DetailListView from './detail-list-view';\n\nimport '../../css/dirent-detail.css';\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n dirent: PropTypes.object,\n path: PropTypes.string.isRequired,\n currentRepoInfo: PropTypes.object.isRequired,\n onItemDetailsClose: PropTypes.func.isRequired,\n onFileTagChanged: PropTypes.func.isRequired,\n direntDetailPanelTab: PropTypes.string,\n fileTags: PropTypes.array,\n};\n\nclass DirentDetail extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n direntType: '',\n direntDetail: '',\n folderDirent: null,\n };\n }\n\n componentDidMount() {\n let { dirent, path, repoID } = this.props;\n this.loadDirentInfo(dirent, path, repoID);\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n let { dirent, path, repoID } = nextProps;\n if (this.props.dirent !== nextProps.dirent) {\n this.loadDirentInfo(dirent, path, repoID);\n }\n }\n\n loadDirentInfo = (dirent, path, repoID) => {\n if (dirent) {\n let direntPath = Utils.joinPath(path, dirent.name);\n this.updateDetailView(dirent, direntPath);\n } else {\n let dirPath = Utils.getDirName(path);\n seafileAPI.listDir(repoID, dirPath).then(res => {\n let direntList = res.data.dirent_list;\n let folderDirent = null;\n for (let i = 0; i < direntList.length; i++) {\n let dirent = direntList[i];\n if (dirent.parent_dir + dirent.name === path) {\n folderDirent = new Dirent(dirent);\n break;\n }\n }\n this.setState({folderDirent: folderDirent});\n this.updateDetailView(folderDirent, path);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n };\n\n updateDetailView = (dirent, direntPath) => {\n let repoID = this.props.repoID;\n if (dirent.type === 'file') {\n seafileAPI.getFileInfo(repoID, direntPath).then(res => {\n this.setState({\n direntType: 'file',\n direntDetail: res.data,\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n } else {\n seafileAPI.getDirInfo(repoID, direntPath).then(res => {\n this.setState({\n direntType: 'dir',\n direntDetail: res.data\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n };\n\n renderHeader = (smallIconUrl, direntName) => {\n return (\n
    \n
    \n
    \n \"\"{' '}\n {direntName}\n
    \n
    \n );\n };\n\n renderDetailBody = (bigIconUrl, folderDirent) => {\n const { dirent, fileTags } = this.props;\n return (\n
    \n
    \"\"
    \n {this.state.direntDetail &&\n
    \n \n
    \n }\n
    \n );\n };\n\n render() {\n let { dirent, repoID, path } = this.props;\n let { folderDirent } = this.state;\n if (!dirent && !folderDirent) {\n return '';\n }\n let smallIconUrl = dirent ? Utils.getDirentIcon(dirent) : Utils.getDirentIcon(folderDirent);\n let bigIconUrl = dirent ? Utils.getDirentIcon(dirent, true) : Utils.getDirentIcon(folderDirent, true);\n const isImg = dirent ? Utils.imageCheck(dirent.name) : Utils.imageCheck(folderDirent.name);\n const isVideo = dirent ? Utils.videoCheck(dirent.name) : Utils.videoCheck(folderDirent.name);\n if (isImg || (enableVideoThumbnail && isVideo)) {\n bigIconUrl = `${siteRoot}thumbnail/${repoID}/1024` + Utils.encodePath(`${path === '/' ? '' : path}/${dirent.name}`);\n }\n let direntName = dirent ? dirent.name : folderDirent.name;\n return (\n
    \n {this.renderHeader(smallIconUrl, direntName)}\n {this.renderDetailBody(bigIconUrl, folderDirent)}\n
    \n );\n }\n}\n\nDirentDetail.propTypes = propTypes;\n\nexport default DirentDetail;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { enableSeadoc, gettext } from '../../utils/constants';\nimport Loading from '../loading';\nimport ModalPortal from '../modal-portal';\nimport CreateFile from '../../components/dialog/create-file-dialog';\n\nimport '../../css/tip-for-new-file.css';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n isDirentListLoading: PropTypes.bool.isRequired,\n onAddFile: PropTypes.func.isRequired\n};\n\nclass DirentNodeView extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n fileType: '',\n isCreateFileDialogShow: false,\n };\n }\n\n onCreateNewFile = (type) => {\n this.setState({\n fileType: type,\n isCreateFileDialogShow: !this.state.isCreateFileDialogShow,\n });\n };\n\n onCreateFileToggle = () => {\n this.setState({\n fileType: '',\n isCreateFileDialogShow: !this.state.isCreateFileDialogShow,\n });\n };\n\n checkDuplicatedName = () => {\n return false; // current repo is null, and unnecessary to check duplicated name\n };\n\n render() {\n if (this.props.isDirentListLoading) {\n return ();\n }\n\n return (\n \n
    \n

    {gettext('This folder has no content at this time.')}

    \n

    {gettext('You can create files quickly')}{' +'}

    \n \n \n
    \n \n \n
    \n {enableSeadoc && }\n
    \n {this.state.isCreateFileDialogShow && (\n \n \n \n )}\n
    \n );\n }\n}\n\nDirentNodeView.propTypes = propTypes;\n\nexport default DirentNodeView;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { v4 as uuidv4 } from 'uuid';\nimport { UncontrolledTooltip } from 'reactstrap';\n\nexport default class FileTag extends React.PureComponent {\n\n static propTypes = {\n fileTag: PropTypes.object.isRequired,\n length: PropTypes.number.isRequired,\n index: PropTypes.number.isRequired,\n };\n\n render() {\n const { fileTag, length, index } = this.props;\n const fileTagID = `file-tag-${fileTag.id}-${uuidv4()}`;\n return (\n <>\n \n \n {fileTag.name}\n \n \n );\n }\n}\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport MediaQuery from 'react-responsive';\nimport { v4 as uuidv4 } from 'uuid';\nimport moment from 'moment';\nimport { Dropdown, DropdownToggle, DropdownItem } from 'reactstrap';\nimport { gettext, siteRoot, mediaUrl, username, useGoFileserver, fileServerRoot } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport URLDecorator from '../../utils/url-decorator';\nimport ItemDropdownMenu from '../dropdown-menu/item-dropdown-menu';\nimport Rename from '../rename';\nimport ModalPortal from '../modal-portal';\nimport MoveDirentDialog from '../dialog/move-dirent-dialog';\nimport CopyDirentDialog from '../dialog/copy-dirent-dialog';\nimport ShareDialog from '../dialog/share-dialog';\nimport ZipDownloadDialog from '../dialog/zip-download-dialog';\nimport EditFileTagDialog from '../dialog/edit-filetag-dialog';\nimport EditFileTagPopover from '../popover/edit-filetag-popover';\nimport LibSubFolderPermissionDialog from '../dialog/lib-sub-folder-permission-dialog';\nimport toaster from '../toast';\nimport FileTag from './file-tag';\n\nimport '../../css/dirent-list-item.css';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n repoID: PropTypes.string.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n dirent: PropTypes.object.isRequired,\n onItemClick: PropTypes.func.isRequired,\n freezeItem: PropTypes.func.isRequired,\n unfreezeItem: PropTypes.func.isRequired,\n onItemRenameToggle: PropTypes.func.isRequired,\n onItemSelected: PropTypes.func.isRequired,\n onItemDelete: PropTypes.func.isRequired,\n onItemRename: PropTypes.func.isRequired,\n onItemMove: PropTypes.func.isRequired,\n onItemCopy: PropTypes.func.isRequired,\n onItemConvert: PropTypes.func.isRequired,\n onDirentClick: PropTypes.func.isRequired,\n updateDirent: PropTypes.func.isRequired,\n showImagePopup: PropTypes.func.isRequired,\n currentRepoInfo: PropTypes.object,\n isRepoOwner: PropTypes.bool,\n isAdmin: PropTypes.bool.isRequired,\n repoEncrypted: PropTypes.bool.isRequired,\n isGroupOwnedRepo: PropTypes.bool.isRequired,\n onItemMouseDown: PropTypes.func.isRequired,\n onItemContextMenu: PropTypes.func.isRequired,\n selectedDirentList: PropTypes.array.isRequired,\n activeDirent: PropTypes.object,\n getDirentItemMenuList: PropTypes.func.isRequired,\n onFileTagChanged: PropTypes.func,\n enableDirPrivateShare: PropTypes.bool.isRequired,\n showDirentDetail: PropTypes.func.isRequired,\n onItemsMove: PropTypes.func.isRequired,\n onShowDirentsDraggablePreview: PropTypes.func,\n loadDirentList: PropTypes.func,\n};\n\nclass DirentListItem extends React.Component {\n\n constructor(props) {\n super(props);\n\n const { dirent } = this.props;\n const { isCustomPermission, customPermission } = Utils.getUserPermission(dirent.permission);\n this.isCustomPermission = isCustomPermission;\n this.customPermission = customPermission;\n this.canPreview = true;\n this.canDrag = dirent.permission === 'rw';\n if (isCustomPermission) {\n const { preview, modify } = customPermission.permission;\n this.canPreview = preview || modify;\n this.canDrag = modify;\n }\n\n this.state = {\n isOperationShow: false,\n highlight: false,\n isZipDialogOpen: false,\n isMoveDialogShow: false,\n isCopyDialogShow: false,\n isShareDialogShow: false,\n isMutipleOperation: false,\n canDrag: this.canDrag,\n isShowTagTooltip: false,\n isDragTipShow: false,\n isDropTipshow: false,\n isEditFileTagShow: false,\n isPermissionDialogOpen: false,\n isOpMenuOpen: false // for mobile\n };\n this.tagListTitleID = `tag-list-title-${uuidv4()}`;\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.isItemFreezed !== this.props.isItemFreezed && !nextProps.isItemFreezed) {\n this.setState({\n highlight: false,\n isOperationShow: false,\n }, () => {\n if (nextProps.activeDirent && nextProps.activeDirent.name === nextProps.dirent.name) {\n this.setState({isOperationShow: true});\n }\n });\n }\n }\n\n toggleOpMenu = () => {\n this.setState({\n isOpMenuOpen: !this.state.isOpMenuOpen\n });\n };\n\n //UI Interactive\n onMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n highlight: true,\n isOperationShow: true,\n });\n }\n if (this.state.canDrag) {\n this.setState({isDragTipShow: true});\n }\n };\n\n onMouseOver = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n highlight: true,\n isOperationShow: true,\n });\n }\n if (this.state.canDrag) {\n this.setState({isDragTipShow: true});\n }\n };\n\n onMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n highlight: false,\n isOperationShow: false,\n });\n }\n this.setState({isDragTipShow: false});\n };\n\n unfreezeItem = () => {\n this.setState({\n highlight: false,\n isOperationShow: false,\n });\n this.props.unfreezeItem();\n };\n\n //buiness handler\n onItemSelected = () => {\n this.props.onItemSelected(this.props.dirent);\n };\n\n onItemStarred = (e) => {\n let dirent = this.props.dirent;\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(dirent);\n\n e.preventDefault();\n\n if (dirent.starred) {\n seafileAPI.unstarItem(repoID, filePath).then(() => {\n this.props.updateDirent(this.props.dirent, 'starred', false);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n } else {\n seafileAPI.starItem(repoID, filePath).then(() => {\n this.props.updateDirent(this.props.dirent, 'starred', true);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n };\n\n // on ''\n onDirentClick = (e) => {\n // '' is clicked\n e.stopPropagation();\n if (e.target.tagName == 'TD') {\n this.props.onDirentClick(this.props.dirent);\n }\n };\n\n onItemClick = (e) => {\n e.preventDefault();\n const dirent = this.props.dirent;\n if (this.state.isRenameing) {\n return;\n }\n\n if (dirent.isDir()) {\n this.props.onItemClick(dirent);\n return;\n }\n\n if (!this.canPreview) {\n return;\n }\n\n if (Utils.imageCheck(dirent.name)) {\n this.props.showImagePopup(dirent);\n } else {\n this.props.onItemClick(dirent);\n }\n };\n\n onItemDelete = (e) => {\n e.preventDefault();\n e.nativeEvent.stopImmediatePropagation(); //for document event\n this.props.onItemDelete(this.props.dirent);\n };\n\n onItemShare = (e) => {\n e.preventDefault();\n e.nativeEvent.stopImmediatePropagation(); //for document event\n this.setState({isShareDialogShow: !this.state.isShareDialogShow});\n };\n\n closeSharedDialog = () => {\n this.setState({isShareDialogShow: !this.state.isShareDialogShow});\n };\n\n onMobileMenuItemClick = (e) => {\n const operation = e.target.getAttribute('data-op');\n this.onMenuItemClick(operation, e);\n };\n\n onMenuItemClick = (operation, event) => {\n switch(operation) {\n case 'Download':\n this.onItemDownload(event);\n break;\n case 'Share':\n this.onItemShare(event);\n break;\n case 'Delete':\n this.onItemDelete(event);\n break;\n case 'Rename':\n this.onItemRenameToggle();\n break;\n case 'Move':\n this.onItemMoveToggle();\n break;\n case 'Copy':\n this.onItemCopyToggle();\n break;\n case 'Tags':\n this.onEditFileTagToggle();\n break;\n case 'Permission':\n this.onPermissionItem();\n break;\n case 'Unlock':\n this.onUnlockItem();\n break;\n case 'Lock':\n this.onLockItem();\n break;\n case 'Freeze Document':\n this.onFreezeDocument();\n break;\n case 'Convert to Markdown':\n this.onItemConvert(event, 'markdown');\n break;\n case 'Convert to sdoc':\n this.onItemConvert(event, 'sdoc');\n break;\n case 'Mark as draft':\n this.onMarkAsDraft();\n break;\n case 'Unmark as draft':\n this.onUnmarkAsDraft();\n break;\n case 'History':\n this.onHistory();\n break;\n case 'Access Log':\n this.onAccessLog();\n break;\n case 'Properties':\n this.props.onDirentClick(this.props.dirent);\n this.props.showDirentDetail('info');\n break;\n case 'Open via Client':\n this.onOpenViaClient();\n break;\n case 'Convert with ONLYOFFICE':\n this.onConvertWithONLYOFFICE();\n break;\n default:\n break;\n }\n };\n\n onItemConvert = (e, dstType)=> {\n e.preventDefault();\n e.nativeEvent.stopImmediatePropagation(); //for document event\n this.props.onItemConvert(this.props.dirent, dstType);\n };\n\n onEditFileTagToggle = () => {\n this.setState({\n isEditFileTagShow: !this.state.isEditFileTagShow\n });\n };\n\n onFileTagChanged = () => {\n let direntPath = this.getDirentPath(this.props.dirent);\n this.props.onFileTagChanged(this.props.dirent, direntPath);\n };\n\n onItemRenameToggle = () => {\n this.props.onItemRenameToggle(this.props.dirent);\n this.setState({\n isOperationShow: false,\n isRenameing: true,\n canDrag: false\n });\n };\n\n onRenameConfirm = (newName) => {\n this.props.onItemRename(this.props.dirent, newName);\n this.onRenameCancel();\n };\n\n onRenameCancel = () => {\n this.setState({\n isRenameing: false,\n canDrag: this.canDrag // set it back to the initial value\n });\n this.unfreezeItem();\n };\n\n onItemMoveToggle = () => {\n this.setState({isMoveDialogShow: !this.state.isMoveDialogShow});\n };\n\n onItemCopyToggle = () => {\n this.setState({isCopyDialogShow: !this.state.isCopyDialogShow});\n };\n\n onPermissionItem = () => {\n this.setState({isPermissionDialogOpen: !this.state.isPermissionDialogOpen});\n };\n\n onLockItem = () => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(this.props.dirent);\n seafileAPI.lockfile(repoID, filePath).then(() => {\n this.props.updateDirent(this.props.dirent, 'is_locked', true);\n this.props.updateDirent(this.props.dirent, 'locked_by_me', true);\n let lockName = username.split('@');\n this.props.updateDirent(this.props.dirent, 'lock_owner_name', lockName[0]);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onFreezeDocument = () => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(this.props.dirent);\n seafileAPI.lockfile(repoID, filePath, -1).then(() => {\n this.props.updateDirent(this.props.dirent, 'is_freezed', true);\n this.props.updateDirent(this.props.dirent, 'is_locked', true);\n this.props.updateDirent(this.props.dirent, 'locked_by_me', true);\n let lockName = username.split('@');\n this.props.updateDirent(this.props.dirent, 'lock_owner_name', lockName[0]);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onUnlockItem = () => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(this.props.dirent);\n seafileAPI.unlockfile(repoID, filePath).then(() => {\n this.props.updateDirent(this.props.dirent, 'is_locked', false);\n this.props.updateDirent(this.props.dirent, 'locked_by_me', false);\n this.props.updateDirent(this.props.dirent, 'lock_owner_name', '');\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onMarkAsDraft = () => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(this.props.dirent);\n seafileAPI.sdocMarkAsDraft(repoID, filePath).then((res) => {\n this.props.updateDirent(this.props.dirent, 'is_sdoc_draft', true);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onUnmarkAsDraft = () => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(this.props.dirent);\n seafileAPI.sdocUnmarkAsDraft(repoID, filePath).then((res) => {\n this.props.updateDirent(this.props.dirent, 'is_sdoc_draft', false);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onHistory = () => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(this.props.dirent);\n let url = URLDecorator.getUrl({type: 'file_revisions', repoID: repoID, filePath: filePath});\n location.href = url;\n };\n\n onAccessLog = () => {\n let filePath = this.getDirentPath(this.props.dirent);\n let path = siteRoot + 'repo/file-access/' + this.props.repoID + '/?p=' + encodeURIComponent(filePath) ;\n window.open(path);\n };\n\n onOpenViaClient = () => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(this.props.dirent);\n let url = URLDecorator.getUrl({type: 'open_via_client', repoID: repoID, filePath: filePath});\n location.href = url;\n };\n\n onConvertWithONLYOFFICE = ()=> {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(this.props.dirent);\n seafileAPI.onlyofficeConvert(repoID, filePath).then(res => {\n this.props.loadDirentList(res.data.parent_dir);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onItemDownload = (e) => {\n e.preventDefault();\n e.nativeEvent.stopImmediatePropagation();\n let dirent = this.props.dirent;\n let repoID = this.props.repoID;\n let direntPath = this.getDirentPath(dirent);\n if (dirent.type === 'dir') {\n if (!useGoFileserver) {\n this.setState({\n isZipDialogOpen: true\n });\n } else {\n seafileAPI.zipDownload(repoID, this.props.path, this.props.dirent.name).then((res) => {\n const zipToken = res.data['zip_token'];\n location.href = `${fileServerRoot}zip/${zipToken}`;\n }).catch((error) => {\n let errorMsg = Utils.getErrorMsg(error);\n this.setState({\n isLoading: false,\n errorMsg: errorMsg\n });\n });\n }\n } else {\n let url = URLDecorator.getUrl({type: 'download_file_url', repoID: repoID, filePath: direntPath});\n location.href = url;\n }\n };\n\n closeZipDialog = () => {\n this.setState({\n isZipDialogOpen: false\n });\n };\n\n getDirentPath = (dirent) => {\n let path = this.props.path;\n return path === '/' ? path + dirent.name : path + '/' + dirent.name;\n };\n\n onTagTooltipToggle = (e) => {\n e.stopPropagation();\n this.setState({isShowTagTooltip: !this.state.isShowTagTooltip});\n };\n\n onItemMove = (destRepo, dirent, selectedPath, currentPath) => {\n this.props.onItemMove(destRepo, dirent, selectedPath, currentPath);\n };\n\n onItemDragStart = (e) => {\n if (Utils.isIEBrower() || !this.state.canDrag) {\n return false;\n }\n e.dataTransfer.effectAllowed = 'move';\n let { selectedDirentList } = this.props;\n if (selectedDirentList.length > 0 && selectedDirentList.includes(this.props.dirent)) { // drag items and selectedDirentList include item\n this.props.onShowDirentsDraggablePreview();\n e.dataTransfer.setDragImage(this.refs.empty_content, 0, 0); // Show an empty content\n let selectedList = selectedDirentList.map(item => {\n let nodeRootPath = this.getDirentPath(item);\n let dragStartItemData = {nodeDirent: item, nodeParentPath: this.props.path, nodeRootPath: nodeRootPath};\n return dragStartItemData;\n });\n selectedList = JSON.stringify(selectedList);\n e.dataTransfer.setData('applicaiton/drag-item-info', selectedList);\n return ;\n }\n\n if (e.dataTransfer && e.dataTransfer.setDragImage) {\n e.dataTransfer.setDragImage(this.refs.drag_icon, 15, 15);\n }\n\n let nodeRootPath = this.getDirentPath(this.props.dirent);\n let dragStartItemData = {nodeDirent: this.props.dirent, nodeParentPath: this.props.path, nodeRootPath: nodeRootPath};\n dragStartItemData = JSON.stringify(dragStartItemData);\n\n e.dataTransfer.setData('applicaiton/drag-item-info', dragStartItemData);\n };\n\n onItemDragEnter = (e) => {\n if (Utils.isIEBrower() || !this.state.canDrag) {\n return false;\n }\n if (this.props.dirent.type === 'dir') {\n e.stopPropagation();\n this.setState({isDropTipshow: true});\n }\n };\n\n onItemDragOver = (e) => {\n if (Utils.isIEBrower() || !this.state.canDrag) {\n return false;\n }\n if (e.dataTransfer.dropEffect === 'copy') {\n return;\n }\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n };\n\n onItemDragLeave = (e) => {\n if (Utils.isIEBrower() || !this.state.canDrag) {\n return false;\n }\n\n if (this.props.dirent.type === 'dir') {\n e.stopPropagation();\n }\n this.setState({isDropTipshow: false});\n };\n\n onItemDragDrop = (e) => {\n if (Utils.isIEBrower() || !this.state.canDrag) {\n return false;\n }\n this.setState({isDropTipshow: false});\n if (e.dataTransfer.files.length) { // uploaded files\n return;\n }\n if (this.props.dirent.type === 'dir') {\n e.stopPropagation();\n } else {\n return;\n }\n let dragStartItemData = e.dataTransfer.getData('applicaiton/drag-item-info');\n dragStartItemData = JSON.parse(dragStartItemData);\n if (Array.isArray(dragStartItemData)) { //move items\n let direntPaths = dragStartItemData.map(draggedItem => {\n return draggedItem.nodeRootPath;\n });\n\n let selectedPath = Utils.joinPath(this.props.path, this.props.dirent.name);\n\n if (direntPaths.some(direntPath => { return direntPath === selectedPath;})) { //eg; A/B, A/C --> A/B\n return;\n }\n\n this.props.onItemsMove(this.props.currentRepoInfo, selectedPath);\n return ;\n }\n\n let { nodeDirent, nodeParentPath, nodeRootPath } = dragStartItemData;\n let dropItemData = this.props.dirent;\n\n if (nodeDirent.name === dropItemData.name) {\n return;\n }\n\n // copy the dirent to it's child. eg: A/B -> A/B/C\n if (dropItemData.type === 'dir' && nodeDirent.type === 'dir') {\n if (nodeParentPath !== this.props.path) {\n if (this.props.path.indexOf(nodeRootPath) !== -1) {\n return;\n }\n }\n }\n\n let selectedPath = Utils.joinPath(this.props.path, this.props.dirent.name);\n this.onItemMove(this.props.currentRepoInfo, nodeDirent, selectedPath, nodeParentPath);\n };\n\n onItemMouseDown = (event) => {\n this.props.onItemMouseDown(event);\n };\n\n onItemContextMenu = (event) => {\n let dirent = this.props.dirent;\n this.props.onItemContextMenu(event, dirent);\n };\n\n renderItemOperation = () => {\n let { dirent, currentRepoInfo, selectedDirentList } = this.props;\n let canDownload = true;\n let canDelete = true;\n const { isCustomPermission, customPermission } = this;\n if (isCustomPermission) {\n const { permission } = customPermission;\n canDownload = permission.download;\n canDelete = permission.delete;\n }\n\n // https://dev.seafile.com/seahub/lib/d6f300e7-bb2b-4722-b83e-cf45e370bfbc/file/seaf-server%20%E5%8A%9F%E8%83%BD%E8%AE%BE%E8%AE%A1/%E6%9D%83%E9%99%90%E7%9B%B8%E5%85%B3/%E8%B5%84%E6%96%99%E5%BA%93%E6%9D%83%E9%99%90%E8%A7%84%E8%8C%83.md\n let showShareBtn = Utils.isHasPermissionToShare(currentRepoInfo, dirent.permission, dirent);\n\n return (\n \n {selectedDirentList.length > 1 ?\n \n {this.state.isOperationShow && !dirent.isSelected &&\n
    \n {(dirent.permission === 'rw' || dirent.permission === 'r' || (isCustomPermission && canDownload)) && (\n \n )}\n {showShareBtn && (\n \n )}\n {(dirent.permission === 'rw' || dirent.permission === 'cloud-edit' || (isCustomPermission && canDelete)) && (\n \n )}\n \n
    \n }\n
    :\n \n {this.state.isOperationShow &&\n
    \n {(dirent.permission === 'rw' || dirent.permission === 'r' || (isCustomPermission && canDownload)) && (\n \n )}\n {showShareBtn && (\n \n )}\n {(dirent.permission === 'rw' || dirent.permission === 'cloud-edit' || (isCustomPermission && canDelete)) && (\n \n )}\n \n
    \n }\n
    \n }\n
    \n );\n };\n\n render() {\n let { path, dirent, activeDirent } = this.props;\n let direntPath = Utils.joinPath(path, dirent.name);\n let dirHref = '';\n if (this.props.currentRepoInfo) {\n dirHref = siteRoot + 'library/' + this.props.repoID + '/' + this.props.currentRepoInfo.repo_name + Utils.encodePath(direntPath);\n }\n let fileHref = siteRoot + 'lib/' + this.props.repoID + '/file' + Utils.encodePath(direntPath);\n if (dirent.is_sdoc_revision && dirent.revision_id) {\n fileHref = siteRoot + 'lib/' + this.props.repoID + '/revisions/' + dirent.revision_id + '/';\n }\n\n let iconUrl = Utils.getDirentIcon(dirent);\n\n let trClass = this.state.highlight ? 'tr-highlight ' : '';\n trClass += this.state.isDropTipshow ? 'tr-drop-effect' : '';\n trClass += (activeDirent && activeDirent.name === dirent.name) ? 'tr-active' : '';\n trClass += dirent.isSelected? 'tr-active' : '';\n\n let lockedInfo = dirent.is_freezed ? gettext('Frozen by {name}'): gettext('locked by {name}');\n lockedInfo = lockedInfo.replace('{name}', dirent.lock_owner_name);\n\n const isDesktop = Utils.isDesktop();\n const { canDrag } = this.state;\n const lockedImageUrl = `${mediaUrl}img/file-${dirent.is_freezed ? 'freezed' : 'locked'}-32.png`;\n const lockedMessage = dirent.is_freezed ? gettext('freezed') : gettext('locked');\n const desktopItem = (\n \n \n \n \n \n {dirent.starred !== undefined &&\n \n \n \n }\n \n \n
    \n {(this.canPreview && dirent.encoded_thumbnail_src) ?\n \"\" :\n \n }\n {dirent.is_locked && {lockedMessage}}\n
    \n
    \n \n \n {this.state.isRenameing && }\n {!this.state.isRenameing && (\n \n {(!dirent.isDir() && !this.canPreview) ?\n {dirent.name} :\n {dirent.name}\n }\n {/*(Utils.isSdocFile(dirent.name) && dirent.is_sdoc_draft) &&\n {gettext('Draft')}\n */}\n \n )}\n \n \n {(dirent.type !== 'dir' && dirent.file_tags && dirent.file_tags.length > 0) && (\n
    \n {dirent.file_tags.map((fileTag, index) => {\n return (\n \n );\n })}\n
    \n )}\n {(dirent.type !== 'dir' && (!dirent.file_tags || dirent.file_tags.length == 0)) && (\n
    \n )}\n \n {this.renderItemOperation()}\n {dirent.size && dirent.size}\n {dirent.mtime_relative}\n \n );\n const mobileItem = (\n \n \n
    \n {(this.canPreview && dirent.encoded_thumbnail_src) ?\n \"\" :\n \"\"\n }\n {dirent.is_locked && {lockedMessage}}\n
    \n \n \n {this.state.isRenameing && }\n {!this.state.isRenameing && (\n \n {(!dirent.isDir() && !this.canPreview) ?\n {dirent.name} :\n {dirent.name}\n }\n \n )}\n
    \n {dirent.size && {dirent.size}}\n {dirent.mtime_relative}\n \n \n \n \n
    \n
    \n
    \n {dirent.starred !== undefined &&\n {dirent.starred ? gettext('Unstar') : gettext('Star')}}\n {this.props.getDirentItemMenuList(dirent, true).map((item, index) => {\n if (item != 'Divider' && item.key != 'Open via Client') {\n return (\n {item.value}\n );\n } else {\n return null;\n }\n })}\n
    \n
    \n
    \n \n \n );\n\n return (\n \n {isDesktop ? desktopItem : mobileItem}\n {this.state.isMoveDialogShow &&\n \n \n \n }\n {this.state.isCopyDialogShow &&\n \n \n \n }\n \n {this.state.isEditFileTagShow &&\n \n }\n \n \n {this.state.isEditFileTagShow &&\n \n }\n \n {this.state.isZipDialogOpen &&\n \n \n \n }\n {this.state.isShareDialogShow &&\n \n \n \n }\n {this.state.isPermissionDialogOpen &&\n \n \n \n }\n \n );\n }\n}\n\nDirentListItem.propTypes = propTypes;\n\nexport default DirentListItem;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { siteRoot } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n selectedDirentList: PropTypes.array,\n onHideDirentsDraggablePreview: PropTypes.func\n};\n\nclass DirentsDraggedPreview extends React.Component {\n\n componentDidMount() {\n document.addEventListener('dragover', this.handleDragOver);\n document.addEventListener('drop', this.handleDrop);\n document.addEventListener('dragend', this.handleDragEnd);\n }\n\n componentWillUnmount() {\n document.removeEventListener('dragover', this.handleDragOver);\n document.removeEventListener('drop', this.handleDrop);\n document.removeEventListener('dragend', this.handleDragEnd);\n }\n\n handleDragEnd = () => {\n this.element.style.opacity = 0;\n this.props.onHideDirentsDraggablePreview();\n };\n\n handleDragOver = (event) => {\n if (Utils.isIEBrower()) {\n return false;\n }\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n\n this.element.style.top = event.clientY + 'px';\n this.element.style.left = event.clientX + 'px';\n };\n\n handleDrop = (event) => {\n this.element.style.opacity = 0;\n this.props.onHideDirentsDraggablePreview();\n };\n\n render() {\n let{ selectedDirentList } = this.props;\n const inlineStyle = {\n position: 'absolute',\n opacity: 1,\n pointerEvents: 'none',\n display: 'block',\n left: '-9999px',\n top: '-9999px',\n zIndex: 101,\n maxHeight: document.documentElement.clientHeight,\n overflow: 'hidden'\n };\n return (\n
    this.element = element}>\n {selectedDirentList.map((dirent, index) => {\n let iconUrl = Utils.getDirentIcon(dirent);\n return (\n
    \n {dirent.encoded_thumbnail_src ?\n \"\" :\n \n }\n
    \n );\n })}\n
    \n );\n }\n}\n\nDirentsDraggedPreview.propTypes = propTypes;\n\nexport default DirentsDraggedPreview;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { siteRoot, gettext, username, enableSeadoc } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport TextTranslation from '../../utils/text-translation';\nimport URLDecorator from '../../utils/url-decorator';\nimport Loading from '../loading';\nimport toaster from '../toast';\nimport ModalPortal from '../modal-portal';\nimport CreateFile from '../dialog/create-file-dialog';\nimport CreateFolder from '../dialog/create-folder-dialog';\nimport ImageDialog from '../dialog/image-dialog';\nimport ZipDownloadDialog from '../dialog/zip-download-dialog';\nimport MoveDirentDialog from '../dialog/move-dirent-dialog';\nimport CopyDirentDialog from '../dialog/copy-dirent-dialog';\nimport DirentListItem from './dirent-list-item';\nimport ContextMenu from '../context-menu/context-menu';\nimport { hideMenu, showMenu } from '../context-menu/actions';\nimport DirentsDraggedPreview from '../draggable/dirents-dragged-preview';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n repoID: PropTypes.string.isRequired,\n currentRepoInfo: PropTypes.object,\n isAllItemSelected: PropTypes.bool.isRequired,\n isDirentListLoading: PropTypes.bool.isRequired,\n direntList: PropTypes.array.isRequired,\n sortBy: PropTypes.string.isRequired,\n sortOrder: PropTypes.string.isRequired,\n sortItems: PropTypes.func.isRequired,\n onAddFile: PropTypes.func.isRequired,\n onAddFolder: PropTypes.func.isRequired,\n onItemDelete: PropTypes.func.isRequired,\n onAllItemSelected: PropTypes.func.isRequired,\n onItemSelected: PropTypes.func.isRequired,\n onItemRename: PropTypes.func.isRequired,\n onItemClick: PropTypes.func.isRequired,\n onItemMove: PropTypes.func.isRequired,\n onItemCopy: PropTypes.func.isRequired,\n onDirentClick: PropTypes.func.isRequired,\n updateDirent: PropTypes.func.isRequired,\n selectedDirentList: PropTypes.array.isRequired,\n onItemsMove: PropTypes.func.isRequired,\n onItemsCopy: PropTypes.func.isRequired,\n onItemConvert: PropTypes.func.isRequired,\n onItemsDelete: PropTypes.func.isRequired,\n onFileTagChanged: PropTypes.func,\n enableDirPrivateShare: PropTypes.bool.isRequired,\n isGroupOwnedRepo: PropTypes.bool.isRequired,\n userPerm: PropTypes.string,\n showDirentDetail: PropTypes.func.isRequired,\n loadDirentList: PropTypes.func,\n fullDirentList: PropTypes.array,\n posX: PropTypes.string,\n posY: PropTypes.string,\n};\n\nclass DirentListView extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false,\n isImagePopupOpen: false,\n imageItems: [],\n imageIndex: 0,\n fileType: '',\n isCreateFileDialogShow: false,\n isCreateFolderDialogShow: false,\n isMoveDialogShow: false,\n isCopyDialogShow: false,\n isProgressDialogShow: false,\n downloadItems: [],\n isMutipleOperation: true,\n activeDirent: null,\n isListDropTipShow: false,\n isShowDirentsDraggablePreview: false,\n };\n\n this.enteredCounter = 0; // Determine whether to enter the child element to avoid dragging bubbling bugs。\n this.isRepoOwner = props.currentRepoInfo.owner_email === username;\n this.isAdmin = props.currentRepoInfo.is_admin;\n this.repoEncrypted = props.currentRepoInfo.encrypted;\n\n this.clickedDirent = null;\n this.direntItems = [];\n this.currentItemRef = null;\n\n this.zipToken = null;\n\n const { userPerm } = props;\n this.canDrop = userPerm === 'rw';\n const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm);\n if (isCustomPermission) {\n const { modify } = customPermission.permission;\n this.canDrop = modify;\n }\n }\n\n freezeItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n unfreezeItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n onItemRename = (dirent, newName) => {\n let isDuplicated = this.props.direntList.some(item => {\n return item.name === newName;\n });\n if (isDuplicated) {\n let errMessage = gettext('The name \"{name}\" is already taken. Please choose a different name.');\n errMessage = errMessage.replace('{name}', Utils.HTMLescape(newName));\n toaster.danger(errMessage);\n return false;\n }\n this.props.onItemRename(dirent, newName);\n };\n\n onItemRenameToggle = () => {\n this.freezeItem();\n };\n\n onItemSelected = (dirent) => {\n this.setState({activeDirent: null});\n this.props.onItemSelected(dirent);\n };\n\n onDirentClick = (dirent) => {\n hideMenu();\n if (this.props.selectedDirentList.length > 0 && !this.state.activeDirent ) {\n return;\n }\n this.setState({activeDirent: dirent});\n this.props.onDirentClick(dirent);\n };\n\n sortByName = (e) => {\n e.preventDefault();\n const sortBy = 'name';\n const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';\n this.props.sortItems(sortBy, sortOrder);\n };\n\n sortByTime = (e) => {\n e.preventDefault();\n const sortBy = 'time';\n const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';\n this.props.sortItems(sortBy, sortOrder);\n };\n\n sortBySize = (e) => {\n e.preventDefault();\n const sortBy = 'size';\n const sortOrder = this.props.sortOrder == 'asc' ? 'desc' : 'asc';\n this.props.sortItems(sortBy, sortOrder);\n };\n\n // for image popup\n prepareImageItem = (item) => {\n const name = item.name;\n const repoID = this.props.repoID;\n const path = Utils.encodePath(Utils.joinPath(this.props.path, name));\n const src = `${siteRoot}repo/${repoID}/raw${path}`;\n\n return {\n 'name': name,\n 'url': `${siteRoot}lib/${repoID}/file${path}`,\n 'src': src\n };\n };\n\n showImagePopup = (curItem) => {\n let items = this.props.fullDirentList.filter((item) => {\n return Utils.imageCheck(item.name);\n });\n\n const imageItems = items.map((item) => {\n return this.prepareImageItem(item);\n });\n\n this.setState({\n isImagePopupOpen: true,\n imageItems: imageItems,\n imageIndex: items.indexOf(curItem)\n });\n };\n\n moveToPrevImage = () => {\n const imageItemsLength = this.state.imageItems.length;\n this.setState((prevState) => ({\n imageIndex: (prevState.imageIndex + imageItemsLength - 1) % imageItemsLength\n }));\n };\n\n moveToNextImage = () => {\n const imageItemsLength = this.state.imageItems.length;\n this.setState((prevState) => ({\n imageIndex: (prevState.imageIndex + 1) % imageItemsLength\n }));\n };\n\n closeImagePopup = () => {\n this.setState({isImagePopupOpen: false});\n };\n\n onCreateFileToggle = (fileType) => {\n this.setState({\n isCreateFileDialogShow: !this.state.isCreateFileDialogShow,\n fileType: fileType || ''\n });\n };\n\n onCreateFolderToggle = () => {\n this.setState({isCreateFolderDialogShow: !this.state.isCreateFolderDialogShow});\n };\n\n onAddFolder = (dirPath) => {\n this.setState({isCreateFolderDialogShow: false});\n this.props.onAddFolder(dirPath);\n };\n\n checkDuplicatedName = (newName) => {\n let direntList = this.props.direntList;\n let isDuplicated = direntList.some(object => {\n return object.name === newName;\n });\n return isDuplicated;\n };\n\n onMoveToggle = () => {\n this.setState({isMoveDialogShow: !this.state.isMoveDialogShow});\n };\n\n onCopyToggle = () => {\n this.setState({isCopyDialogShow: !this.state.isCopyDialogShow});\n };\n\n onItemsDownload = () => {\n let { path, repoID, selectedDirentList } = this.props;\n if (selectedDirentList.length) {\n if (selectedDirentList.length === 1 && !selectedDirentList[0].isDir()) {\n let direntPath = Utils.joinPath(path, selectedDirentList[0].name);\n let url = URLDecorator.getUrl({type: 'download_file_url', repoID: repoID, filePath: direntPath});\n location.href= url;\n return;\n }\n\n let selectedDirentNames = selectedDirentList.map(dirent => {\n return dirent.name;\n });\n\n this.setState({\n isProgressDialogShow: true,\n downloadItems: selectedDirentNames\n });\n }\n };\n\n onCloseZipDownloadDialog = () => {\n this.setState({isProgressDialogShow: false});\n };\n\n // common contextmenu handle\n onMouseDown = (event) => {\n event.stopPropagation();\n if (event.button === 2) {\n return;\n }\n };\n\n handleContextClick = (event, id, menuList, currentObject = null) => {\n event.preventDefault();\n event.stopPropagation();\n\n let x = event.clientX || (event.touches && event.touches[0].pageX);\n let y = event.clientY || (event.touches && event.touches[0].pageY);\n\n if (this.props.posX) {\n x -= this.props.posX;\n }\n if (this.props.posY) {\n y -= this.props.posY;\n }\n\n hideMenu();\n\n let showMenuConfig = {\n id: id,\n position: { x, y },\n target: event.target,\n currentObject: currentObject,\n menuList: menuList,\n };\n\n if (menuList.length === 0) {\n return;\n }\n\n showMenu(showMenuConfig);\n };\n\n // table-container contextmenu handle\n onContainerClick = () => {\n hideMenu();\n if (this.state.activeDirent) {\n this.onDirentClick(null);\n }\n };\n\n onContainerMouseDown = (event) => {\n this.onMouseDown(event);\n };\n\n onContainerContextMenu = (event) => {\n event.preventDefault();\n // Display menu items based on the permissions of the current path\n let permission = this.props.userPerm;\n\n const { isCustomPermission, customPermission } = Utils.getUserPermission(this.props.userPerm);\n if (permission !== 'admin' && permission !== 'rw' && !isCustomPermission) {\n return;\n }\n\n const {\n NEW_FOLDER, NEW_FILE,\n NEW_MARKDOWN_FILE,\n NEW_EXCEL_FILE,\n NEW_POWERPOINT_FILE,\n NEW_WORD_FILE,\n NEW_SEADOC_FILE\n } = TextTranslation;\n\n const direntsContainerMenuList = [\n NEW_FOLDER, NEW_FILE, 'Divider',\n NEW_MARKDOWN_FILE,\n NEW_EXCEL_FILE,\n NEW_POWERPOINT_FILE,\n NEW_WORD_FILE\n ];\n if (enableSeadoc) {\n direntsContainerMenuList.push(NEW_SEADOC_FILE);\n }\n\n if (this.props.selectedDirentList.length === 0) {\n let id = 'dirent-container-menu';\n\n // custom permission judgement\n if (isCustomPermission) {\n const { create: canCreate } = customPermission.permission;\n if (!canCreate) return;\n }\n\n let menuList = direntsContainerMenuList;\n this.handleContextClick(event, id, menuList);\n } else {\n if (this.props.selectedDirentList.length === 1) {\n if (!this.state.activeDirent) {\n let id = 'dirent-item-menu';\n let dirent = this.props.selectedDirentList[0];\n let menuList = this.getDirentItemMenuList(dirent, true);\n this.handleContextClick(event, id, menuList, dirent);\n } else {\n this.onDirentClick(null);\n event.preventDefault();\n event.persist();\n\n // custom permission judgement\n if (isCustomPermission) {\n const { modify } = customPermission.permission;\n if (!modify) return;\n }\n\n setTimeout(() => {\n let id = 'dirent-container-menu';\n\n let menuList = direntsContainerMenuList;\n this.handleContextClick(event, id, menuList);\n }, 0);\n }\n } else {\n let id = 'dirents-menu';\n let menuList = [];\n if (isCustomPermission) {\n const { modify: canModify, copy: canCopy, download: canDownload, delete: canDelete } = customPermission.permission;\n canModify && menuList.push(TextTranslation.MOVE);\n canCopy && menuList.push(TextTranslation.COPY);\n canDownload && menuList.push(TextTranslation.DOWNLOAD);\n canDelete && menuList.push(TextTranslation.DELETE);\n } else {\n menuList = [TextTranslation.MOVE, TextTranslation.COPY, TextTranslation.DOWNLOAD, TextTranslation.DELETE];\n }\n\n this.handleContextClick(event, id, menuList);\n }\n }\n };\n\n onContainerMenuItemClick = (operation) => {\n switch(operation) {\n case 'New Folder':\n this.onCreateFolderToggle();\n break;\n case 'New File':\n this.onCreateFileToggle();\n break;\n case 'New Markdown File':\n this.onCreateFileToggle('.md');\n break;\n case 'New Excel File':\n this.onCreateFileToggle('.xlsx');\n break;\n case 'New PowerPoint File':\n this.onCreateFileToggle('.pptx');\n break;\n case 'New Word File':\n this.onCreateFileToggle('.docx');\n break;\n case 'New SeaDoc File':\n this.onCreateFileToggle('.sdoc');\n break;\n default:\n break;\n }\n\n hideMenu();\n };\n\n onDirentsMenuItemClick = (operation) => {\n switch(operation) {\n case 'Move':\n this.onMoveToggle();\n break;\n case 'Copy':\n this.onCopyToggle();\n break;\n case 'Download':\n this.onItemsDownload();\n break;\n case 'Delete':\n this.props.onItemsDelete();\n break;\n default:\n break;\n }\n\n hideMenu();\n };\n\n // table-thread contextmenu handle -- Shield event\n onThreadMouseDown = (event) => {\n this.onMouseDown(event);\n };\n\n onThreadContextMenu = (event) => {\n event.stopPropagation();\n };\n\n // table-dirent-item contextmenu handle\n onItemMouseDown = (event) => {\n this.onMouseDown(event);\n };\n\n onItemContextMenu = (event, dirent) => {\n // Display menu items according to the current dirent permission\n if (this.props.selectedDirentList.length > 1) {\n return;\n }\n this.onDirentClick(dirent);\n let id = 'dirent-item-menu';\n let menuList = this.getDirentItemMenuList(dirent, true);\n this.handleContextClick(event, id, menuList, dirent);\n };\n\n setDirentItemRef = (index) => item => {\n this.direntItems[index] = item;\n };\n\n onMenuItemClick = (operation, currentObject, event) => {\n let index = this.getDirentIndex(currentObject);\n this.direntItems[index].onMenuItemClick(operation, event);\n\n hideMenu();\n };\n\n onShowMenu = (e) => {\n this.freezeItem();\n };\n\n onHideMenu = (e) => {\n this.unfreezeItem();\n };\n\n // contextmenu utils\n getDirentIndex = (dirent) => {\n let direntList = this.props.direntList;\n let index = 0;\n for (let i = 0; i < direntList.length; i++) {\n if (direntList[i].name === dirent.name) {\n index = i;\n break;\n }\n }\n return index;\n };\n\n getDirentItemMenuList = (dirent, isContextmenu) => {\n const isRepoOwner = this.isRepoOwner;\n const currentRepoInfo = this.props.currentRepoInfo;\n return Utils.getDirentOperationList(isRepoOwner, currentRepoInfo, dirent, isContextmenu);\n };\n\n onTableDragEnter = (e) => {\n if (Utils.isIEBrower() || !this.canDrop) {\n return false;\n }\n this.enteredCounter++;\n if (this.enteredCounter !== 0) {\n if (this.state.isListDropTipShow) {\n return ;\n }\n this.setState({isListDropTipShow: true});\n }\n };\n\n onTableDragOver = (e) => {\n if (Utils.isIEBrower() || !this.canDrop) {\n return false;\n }\n if (e.dataTransfer.dropEffect === 'copy') {\n return;\n }\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n };\n\n onTableDragLeave = (e) => {\n if (Utils.isIEBrower() || !this.canDrop) {\n return false;\n }\n this.enteredCounter--;\n if (this.enteredCounter === 0) {\n this.setState({isListDropTipShow: false});\n }\n };\n\n tableDrop = (e) => {\n if (Utils.isIEBrower() || !this.canDrop) {\n return false;\n }\n e.persist();\n this.enteredCounter = 0;\n this.setState({isListDropTipShow: false});\n if (e.dataTransfer.files.length) { // uploaded files\n return;\n }\n let dragStartItemData = e.dataTransfer.getData('applicaiton/drag-item-info');\n dragStartItemData = JSON.parse(dragStartItemData);\n\n let {nodeDirent, nodeParentPath, nodeRootPath} = dragStartItemData;\n\n if (Array.isArray(dragStartItemData)) { //selected items\n return;\n }\n\n if (nodeRootPath === this.props.path || nodeParentPath === this.props.path) {\n return;\n }\n\n if (this.props.path.indexOf(nodeRootPath) !== -1) {\n return;\n }\n\n this.props.onItemMove(this.props.currentRepoInfo, nodeDirent, this.props.path, nodeParentPath);\n };\n\n onShowDirentsDraggablePreview = () => {\n this.setState({\n isShowDirentsDraggablePreview: true,\n });\n };\n\n onHideDirentsDraggablePreview = () => {\n this.setState({\n isShowDirentsDraggablePreview: false\n });\n };\n\n render() {\n const { direntList, sortBy, sortOrder } = this.props;\n\n if (this.props.isDirentListLoading) {\n return ();\n }\n\n // sort\n const sortByName = sortBy == 'name';\n const sortByTime = sortBy == 'time';\n const sortBySize = sortBy == 'size';\n const sortIcon = sortOrder == 'asc' ? : ;\n\n const isDesktop = Utils.isDesktop();\n\n return (\n \n \n {isDesktop ? (\n \n \n \n \n \n \n \n \n \n \n \n \n ) : (\n \n \n \n \n \n \n \n )}\n \n {direntList.map((dirent, index) => {\n return (\n \n );\n })}\n \n
    \n \n {/*icon */}{/*star */}{gettext('Name')} {sortByName && sortIcon}{/*tag */}{/*operation */}{gettext('Size')} {sortBySize && sortIcon}{gettext('Last Update')} {sortByTime && sortIcon}
    \n \n \n \n \n {this.state.isShowDirentsDraggablePreview &&\n \n \n \n }\n {this.state.isImagePopupOpen && (\n \n \n \n )}\n {this.state.isCreateFolderDialogShow && (\n \n \n \n )}\n {this.state.isCreateFileDialogShow && (\n \n \n \n )}\n {this.state.isMoveDialogShow &&\n \n }\n {this.state.isCopyDialogShow &&\n \n }\n {this.state.isProgressDialogShow &&\n \n }\n \n \n );\n }\n}\n\nDirentListView.propTypes = propTypes;\n\nexport default DirentListView;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport DirentNoneView from '../../components/dirent-list-view/dirent-none-view';\nimport RepoInfoBar from '../../components/repo-info-bar';\nimport DirentListView from '../../components/dirent-list-view/dirent-list-view';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n repoID: PropTypes.string.isRequired,\n currentRepoInfo: PropTypes.object.isRequired,\n isGroupOwnedRepo: PropTypes.bool.isRequired,\n userPerm: PropTypes.string,\n enableDirPrivateShare: PropTypes.bool.isRequired,\n isRepoInfoBarShow: PropTypes.bool.isRequired,\n usedRepoTags: PropTypes.array.isRequired,\n draftCounts: PropTypes.number,\n updateUsedRepoTags: PropTypes.func.isRequired,\n isDirentListLoading: PropTypes.bool.isRequired,\n direntList: PropTypes.array.isRequired,\n sortBy: PropTypes.string.isRequired,\n sortOrder: PropTypes.string.isRequired,\n sortItems: PropTypes.func.isRequired,\n onAddFolder: PropTypes.func.isRequired,\n onAddFile: PropTypes.func.isRequired,\n onItemClick: PropTypes.func.isRequired,\n onItemSelected: PropTypes.func.isRequired,\n onItemDelete: PropTypes.func.isRequired,\n onItemRename: PropTypes.func.isRequired,\n onItemMove: PropTypes.func.isRequired,\n onItemCopy: PropTypes.func.isRequired,\n onDirentClick: PropTypes.func.isRequired,\n updateDirent: PropTypes.func.isRequired,\n isAllItemSelected: PropTypes.bool.isRequired,\n onAllItemSelected: PropTypes.func.isRequired,\n selectedDirentList: PropTypes.array.isRequired,\n onItemsMove: PropTypes.func.isRequired,\n onItemsCopy: PropTypes.func.isRequired,\n onItemConvert: PropTypes.func.isRequired,\n onItemsDelete: PropTypes.func.isRequired,\n onFileTagChanged: PropTypes.func,\n showDirentDetail: PropTypes.func.isRequired,\n loadDirentList: PropTypes.func,\n fullDirentList: PropTypes.array,\n};\n\nclass DirListView extends React.Component {\n\n render() {\n\n if (this.props.path === '/' && this.props.direntList.length === 0) {\n return (\n \n );\n }\n\n return (\n \n {this.props.isRepoInfoBarShow && (\n \n )}\n \n \n );\n }\n}\n\nDirListView.propTypes = propTypes;\n\nexport default DirListView;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport MD5 from 'MD5';\nimport { UncontrolledTooltip } from 'reactstrap';\nimport { gettext, siteRoot, mediaUrl } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n repoID: PropTypes.string.isRequired,\n dirent: PropTypes.object.isRequired,\n onItemClick: PropTypes.func.isRequired,\n showImagePopup: PropTypes.func.isRequired,\n onGridItemContextMenu: PropTypes.func.isRequired,\n onGridItemClick: PropTypes.func.isRequired,\n activeDirent: PropTypes.object,\n onGridItemMouseDown: PropTypes.func,\n currentRepoInfo: PropTypes.object,\n onItemMove: PropTypes.func.isRequired,\n};\n\nclass DirentGridItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isGridSelected: false,\n isGridDropTipShow: false,\n };\n\n const { dirent } = this.props;\n const { isCustomPermission, customPermission } = Utils.getUserPermission(dirent.permission);\n this.isCustomPermission = isCustomPermission;\n this.customPermission = customPermission;\n this.canPreview = true;\n this.canDrag = dirent.permission === 'rw';\n if (isCustomPermission) {\n const { preview, modify } = customPermission.permission;\n this.canPreview = preview || modify;\n this.canDrag = modify;\n }\n\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.setState({isGridSelected: false}, () => {\n if (nextProps.activeDirent && nextProps.activeDirent.name === nextProps.dirent.name) {\n this.setState({isGridSelected: true});\n }\n });\n }\n\n onItemMove = (destRepo, dirent, selectedPath, currentPath) => {\n this.props.onItemMove(destRepo, dirent, selectedPath, currentPath);\n };\n\n onItemClick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n const { dirent, activeDirent } = this.props;\n if (dirent.isDir()) {\n this.props.onItemClick(dirent);\n return;\n }\n\n // is have preview permission\n if (!this.canPreview) {\n return;\n }\n\n if (dirent === activeDirent) {\n this.setState({isGridSelected: false});\n if (Utils.imageCheck(dirent.name)) {\n this.props.showImagePopup(dirent);\n } else {\n this.props.onItemClick(dirent);\n }\n } else {\n this.setState({isGridSelected: false});\n this.props.onGridItemClick(this.props.dirent);\n }\n };\n\n onItemLinkClick = (e) => {\n e.preventDefault();\n const dirent = this.props.dirent;\n\n if (dirent.isDir()) {\n this.props.onItemClick(dirent);\n return;\n }\n\n // is have preview permission\n if (!this.canPreview) {\n return;\n }\n\n if (Utils.imageCheck(dirent.name)) {\n this.props.showImagePopup(dirent);\n } else {\n this.props.onItemClick(dirent);\n }\n };\n\n onGridItemDragStart = (e) => {\n if (Utils.isIEBrower() || !this.canDrag) {\n return false;\n }\n let dragStartItemData = {nodeDirent: this.props.dirent, nodeParentPath: this.props.path};\n dragStartItemData = JSON.stringify(dragStartItemData);\n\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('applicaiton/drag-item-info', dragStartItemData);\n };\n\n onGridItemDragEnter = (e) => {\n if (Utils.isIEBrower() || !this.canDrag) {\n return false;\n }\n if (this.props.dirent.type === 'dir') {\n this.setState({isGridDropTipShow: true});\n }\n };\n\n onGridItemDragOver = (e) => {\n if (Utils.isIEBrower() || !this.canDrag) {\n return false;\n }\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n };\n\n onGridItemDragLeave = (e) => {\n if (Utils.isIEBrower() || !this.canDrag) {\n return false;\n }\n this.setState({isGridDropTipShow: false});\n };\n\n onGridItemDragDrop = (e) => {\n if (Utils.isIEBrower() || !this.canDrag) {\n return false;\n }\n this.setState({isGridDropTipShow: false});\n if (e.dataTransfer.files.length) { // uploaded files\n return;\n }\n let dragStartItemData = e.dataTransfer.getData('applicaiton/drag-item-info');\n dragStartItemData = JSON.parse(dragStartItemData);\n let {nodeDirent, nodeParentPath} = dragStartItemData;\n let dropItemData = this.props.dirent;\n\n if (nodeDirent.name === dropItemData.name) {\n return;\n }\n\n if (dropItemData.type !== 'dir') {\n return;\n }\n\n let selectedPath = Utils.joinPath(this.props.path, this.props.dirent.name);\n this.onItemMove(this.props.currentRepoInfo, nodeDirent, selectedPath, nodeParentPath);\n };\n\n onGridItemMouseDown = (event) =>{\n this.props.onGridItemMouseDown(event);\n };\n\n getFileUrl = (url) => {\n let fileUrlArr = url.split('/');\n if (fileUrlArr.indexOf('48') !== -1) {\n fileUrlArr.splice(fileUrlArr.indexOf('48'), 1, '192');\n }\n let fileUrl = fileUrlArr.join('/');\n return fileUrl;\n };\n\n onGridItemContextMenu = (event) => {\n let dirent = this.props.dirent;\n this.props.onGridItemContextMenu(event, dirent);\n };\n\n render() {\n let { dirent, path } = this.props;\n let direntPath = Utils.joinPath(path, dirent.name);\n let iconUrl = Utils.getDirentIcon(dirent, true);\n let fileUrl = dirent.encoded_thumbnail_src ? this.getFileUrl(dirent.encoded_thumbnail_src) : '';\n\n let toolTipID = '';\n let tagTitle = '';\n if (dirent.file_tags && dirent.file_tags.length > 0) {\n toolTipID = MD5(dirent.name).slice(0, 7);\n tagTitle = dirent.file_tags.map(item => item.name).join(' ');\n }\n\n let dirHref = '';\n if (this.props.currentRepoInfo) {\n dirHref = siteRoot + 'library/' + this.props.repoID + '/' + this.props.currentRepoInfo.repo_name + Utils.encodePath(direntPath);\n }\n let fileHref = siteRoot + 'lib/' + this.props.repoID + '/file' + Utils.encodePath(direntPath);\n if (dirent.is_sdoc_revision && dirent.revision_id) {\n fileHref = siteRoot + 'lib/' + this.props.repoID + '/revisions/' + dirent.revision_id + '/';\n }\n\n let gridClass = 'grid-file-img-link cursor-pointer';\n gridClass += this.state.isGridSelected ? ' grid-selected-active' : ' ';\n gridClass += this.state.isGridDropTipShow ? ' grid-drop-show' : ' ';\n\n let lockedInfo = dirent.is_freezed ? gettext('Frozen by {name}') : gettext('locked by {name}');\n lockedInfo = lockedInfo.replace('{name}', dirent.lock_owner_name);\n\n const lockedImageUrl = `${mediaUrl}img/file-${dirent.is_freezed ? 'freezed' : 'locked'}-32.png`;\n const lockedMessage = dirent.is_freezed ? gettext('freezed') : gettext('locked');\n return (\n \n
  • \n \n {(this.canPreview && dirent.encoded_thumbnail_src) ?\n \"\"/ :\n \n }\n {dirent.is_locked && {lockedMessage}}\n \n
    \n {(dirent.type !== 'dir' && dirent.file_tags && dirent.file_tags.length > 0) && (\n \n
    \n {dirent.file_tags.map((fileTag, index) => {\n let length = dirent.file_tags.length;\n return (\n \n );\n })}\n
    \n \n {tagTitle}\n \n
    \n )}\n {(!dirent.isDir() && !this.canPreview) ?\n {dirent.name} :\n {dirent.name}\n }\n
    \n
  • \n
    \n );\n }\n}\n\nDirentGridItem.propTypes = propTypes;\nexport default DirentGridItem;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { siteRoot, username, enableSeadoc } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport URLDecorator from '../../utils/url-decorator';\nimport Loading from '../loading';\nimport ModalPortal from '../modal-portal';\nimport ImageDialog from '../../components/dialog/image-dialog';\nimport DirentGridItem from '../../components/dirent-grid-view/dirent-grid-item';\nimport ContextMenu from '../context-menu/context-menu';\nimport { hideMenu, showMenu } from '../context-menu/actions';\nimport TextTranslation from '../../utils/text-translation';\nimport MoveDirentDialog from '../dialog/move-dirent-dialog';\nimport CopyDirentDialog from '../dialog/copy-dirent-dialog';\nimport ShareDialog from '../dialog/share-dialog';\nimport ZipDownloadDialog from '../dialog/zip-download-dialog';\nimport EditFileTagDialog from '../dialog/edit-filetag-dialog';\nimport Rename from '../../components/dialog/rename-dirent';\nimport CreateFile from '../dialog/create-file-dialog';\nimport CreateFolder from '../dialog/create-folder-dialog';\nimport LibSubFolderPermissionDialog from '../dialog/lib-sub-folder-permission-dialog';\nimport toaster from '../toast';\n\nimport '../../css/grid-view.css';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n repoID: PropTypes.string.isRequired,\n currentRepoInfo: PropTypes.object,\n direntList: PropTypes.array.isRequired,\n fullDirentList: PropTypes.array,\n onAddFile: PropTypes.func,\n onItemDelete: PropTypes.func,\n onItemCopy: PropTypes.func.isRequired,\n onItemConvert: PropTypes.func.isRequired,\n onItemMove: PropTypes.func.isRequired,\n onRenameNode: PropTypes.func.isRequired,\n onItemClick: PropTypes.func.isRequired,\n isDirentListLoading: PropTypes.bool.isRequired,\n isGroupOwnedRepo: PropTypes.bool.isRequired,\n userPerm: PropTypes.string, // current path's user permission\n enableDirPrivateShare: PropTypes.bool.isRequired,\n updateDirent: PropTypes.func.isRequired,\n isDirentDetailShow: PropTypes.bool.isRequired,\n onGridItemClick: PropTypes.func,\n onFileTagChanged: PropTypes.func,\n onAddFolder: PropTypes.func.isRequired,\n showDirentDetail: PropTypes.func.isRequired,\n onItemRename: PropTypes.func.isRequired,\n posX: PropTypes.number,\n posY: PropTypes.number,\n};\n\nclass DirentGridView extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isImagePopupOpen: false,\n imageItems: [],\n imageIndex: 0,\n // onmenuClick\n isShareDialogShow: false,\n isMoveDialogShow: false,\n isCopyDialogShow: false,\n isEditFileTagShow: false,\n isZipDialogOpen: false,\n isRenameDialogShow: false,\n isCreateFolderDialogShow: false,\n isCreateFileDialogShow: false,\n fileType: '',\n isPermissionDialogOpen: false,\n\n isMutipleOperation: false,\n isGridItemFreezed: false,\n activeDirent: null,\n };\n this.isRepoOwner = props.currentRepoInfo.owner_email === username;\n }\n\n onCreateFileToggle = (fileType) => {\n this.setState({\n isCreateFileDialogShow: !this.state.isCreateFileDialogShow,\n fileType: fileType || ''\n });\n };\n\n onGridItemClick = (dirent) => {\n hideMenu();\n this.setState({activeDirent: dirent});\n this.props.onGridItemClick(dirent);\n };\n\n onMoveToggle = () => {\n this.setState({isMoveDialogShow: !this.state.isMoveDialogShow});\n };\n\n onCopyToggle = () => {\n this.setState({isCopyDialogShow: !this.state.isCopyDialogShow});\n };\n\n onAddFolder = (dirPath) => {\n this.setState({isCreateFolderDialogShow: false});\n this.props.onAddFolder(dirPath);\n };\n\n onItemShare = (e) => {\n e.nativeEvent.stopImmediatePropagation(); //for document event\n this.setState({isShareDialogShow: !this.state.isShareDialogShow});\n };\n\n closeSharedDialog = () => {\n this.setState({isShareDialogShow: !this.state.isShareDialogShow});\n };\n\n onItemDelete = (currentObject, e) => {\n e.nativeEvent.stopImmediatePropagation(); //for document event\n this.props.onItemDelete(currentObject);\n };\n\n onItemConvert = (currentObject, e, dstType) => {\n e.nativeEvent.stopImmediatePropagation(); //for document event\n this.props.onItemConvert(currentObject, dstType);\n };\n\n onMenuItemClick = (operation, currentObject, event) => {\n hideMenu();\n switch(operation) {\n case 'Download':\n this.onItemDownload(currentObject, event);\n break;\n case 'Share':\n this.onItemShare(event);\n break;\n case 'Delete':\n this.onItemDelete(currentObject, event);\n break;\n case 'Rename':\n this.onItemRenameToggle();\n break;\n case 'Move':\n this.onItemMoveToggle();\n break;\n case 'Copy':\n this.onItemCopyToggle();\n break;\n case 'Freeze Document':\n this.onFreezeDocument(currentObject);\n break;\n case 'Convert to Markdown':\n this.onItemConvert(currentObject, event, 'markdown');\n break;\n case 'Convert to sdoc':\n this.onItemConvert(currentObject, event, 'sdoc');\n break;\n case 'Tags':\n this.onEditFileTagToggle();\n break;\n case 'Permission':\n this.onPermissionItem();\n break;\n case 'Unlock':\n this.onUnlockItem(currentObject);\n break;\n case 'Lock':\n this.onLockItem(currentObject);\n break;\n case 'Mark as draft':\n this.onMarkAsDraft(currentObject);\n break;\n case 'Unmark as draft':\n this.onUnmarkAsDraft(currentObject);\n break;\n case 'History':\n this.onHistory(currentObject);\n break;\n case 'New Folder':\n this.onCreateFolderToggle(currentObject);\n break;\n case 'New File':\n this.onCreateFileToggle('');\n break;\n case 'New Markdown File':\n this.onCreateFileToggle('.md');\n break;\n case 'New Excel File':\n this.onCreateFileToggle('.xlsx');\n break;\n case 'New PowerPoint File':\n this.onCreateFileToggle('.pptx');\n break;\n case 'New Word File':\n this.onCreateFileToggle('.docx');\n break;\n case 'New SeaDoc File':\n this.onCreateFileToggle('.sdoc');\n break;\n case 'Access Log':\n this.onAccessLog(currentObject);\n break;\n case 'Properties':\n this.props.showDirentDetail('info');\n break;\n case 'Open via Client':\n this.onOpenViaClient(currentObject);\n break;\n default:\n break;\n }\n };\n\n onEditFileTagToggle = () => {\n this.setState({\n isEditFileTagShow: !this.state.isEditFileTagShow\n });\n };\n\n onFileTagChanged = () => {\n let dirent = this.state.activeDirent ? this.state.activeDirent : '';\n let direntPath = Utils.joinPath(this.props.path, dirent.name);\n this.props.onFileTagChanged(dirent, direntPath);\n };\n\n getDirentPath = (dirent) => {\n let path = this.props.path;\n return path === '/' ? path + dirent.name : path + '/' + dirent.name;\n };\n\n closeZipDialog = () => {\n this.setState({\n isZipDialogOpen: false\n });\n };\n\n onItemDownload = (currentObject, e) => {\n e.nativeEvent.stopImmediatePropagation();\n let dirent = currentObject;\n let repoID = this.props.repoID;\n let direntPath = this.getDirentPath(dirent);\n if (dirent.type === 'dir') {\n this.setState({\n isZipDialogOpen: true\n });\n } else {\n let url = URLDecorator.getUrl({type: 'download_file_url', repoID: repoID, filePath: direntPath});\n location.href = url;\n }\n };\n\n onCreateFolderToggle = () => {\n this.setState({\n isCreateFolderDialogShow: !this.state.isCreateFolderDialogShow,\n });\n };\n\n onItemRenameToggle = () => {\n this.setState({\n isRenameDialogShow: !this.state.isRenameDialogShow,\n });\n };\n\n onItemMoveToggle = () => {\n this.setState({isMoveDialogShow: !this.state.isMoveDialogShow});\n };\n\n onItemCopyToggle = () => {\n this.setState({isCopyDialogShow: !this.state.isCopyDialogShow});\n };\n\n onPermissionItem = () => {\n this.setState({isPermissionDialogOpen: !this.state.isPermissionDialogOpen});\n };\n\n onLockItem = (currentObject) => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(currentObject);\n seafileAPI.lockfile(repoID, filePath).then(() => {\n this.props.updateDirent(currentObject, 'is_locked', true);\n this.props.updateDirent(currentObject, 'locked_by_me', true);\n let lockName = username.split('@');\n this.props.updateDirent(currentObject, 'lock_owner_name', lockName[0]);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onFreezeDocument = (currentObject) => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(currentObject);\n seafileAPI.lockfile(repoID, filePath, -1).then(() => {\n this.props.updateDirent(currentObject, 'is_freezed', true);\n this.props.updateDirent(currentObject, 'is_locked', true);\n this.props.updateDirent(currentObject, 'locked_by_me', true);\n let lockName = username.split('@');\n this.props.updateDirent(currentObject, 'lock_owner_name', lockName[0]);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onUnlockItem = (currentObject) => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(currentObject);\n seafileAPI.unlockfile(repoID, filePath).then(() => {\n this.props.updateDirent(currentObject, 'is_locked', false);\n this.props.updateDirent(currentObject, 'locked_by_me', false);\n this.props.updateDirent(currentObject, 'lock_owner_name', '');\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onMarkAsDraft = (currentObject) => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(currentObject);\n seafileAPI.sdocMarkAsDraft(repoID, filePath).then((res) => {\n this.props.updateDirent(currentObject, 'is_sdoc_draft', true);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onUnmarkAsDraft = (currentObject) => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(currentObject);\n seafileAPI.sdocUnmarkAsDraft(repoID, filePath).then((res) => {\n this.props.updateDirent(currentObject, 'is_sdoc_draft', false);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onHistory = (currentObject) => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(currentObject);\n let url = URLDecorator.getUrl({type: 'file_revisions', repoID: repoID, filePath: filePath});\n location.href = url;\n };\n\n onAccessLog = (currentObject) => {\n let filePath = this.getDirentPath(currentObject);\n let path = siteRoot + 'repo/file-access/' + this.props.repoID + '/?p=' + encodeURIComponent(filePath) ;\n window.open(path);\n };\n\n onOpenViaClient = (currentObject) => {\n let repoID = this.props.repoID;\n let filePath = this.getDirentPath(currentObject);\n let url = URLDecorator.getUrl({type: 'open_via_client', repoID: repoID, filePath: filePath});\n location.href = url;\n };\n\n onItemRename = (newName) => {\n this.props.onItemRename(this.state.activeDirent, newName);\n };\n\n prepareImageItem = (item) => {\n const name = item.name;\n const repoID = this.props.repoID;\n const path = Utils.encodePath(Utils.joinPath(this.props.path, name));\n\n const src = `${siteRoot}repo/${repoID}/raw${path}`;\n\n return {\n 'name': name,\n 'url': `${siteRoot}lib/${repoID}/file${path}`,\n 'src': src\n };\n };\n\n showImagePopup = (curItem) => {\n let items = this.props.fullDirentList.filter((item) => {\n return Utils.imageCheck(item.name);\n });\n\n const imageItems = items.map((item) => {\n return this.prepareImageItem(item);\n });\n\n this.setState({\n isImagePopupOpen: true,\n imageItems: imageItems,\n imageIndex: items.indexOf(curItem)\n });\n };\n\n closeImagePopup = () => {\n this.setState({isImagePopupOpen: false});\n };\n\n moveToPrevImage = () => {\n const imageItemsLength = this.state.imageItems.length;\n this.setState((prevState) => ({\n imageIndex: (prevState.imageIndex + imageItemsLength - 1) % imageItemsLength\n }));\n };\n\n moveToNextImage = () => {\n const imageItemsLength = this.state.imageItems.length;\n this.setState((prevState) => ({\n imageIndex: (prevState.imageIndex + 1) % imageItemsLength\n }));\n };\n\n checkDuplicatedName = (newName) => {\n return Utils.checkDuplicatedNameInList(this.props.direntList, newName);\n };\n\n // common contextmenu handle\n onMouseDown = (event) => {\n event.stopPropagation();\n if (event.button === 2) {\n return;\n }\n };\n\n onGridContainerMouseDown = (event) => {\n this.onMouseDown(event);\n };\n\n onGridItemMouseDown = (event) => {\n this.onMouseDown(event);\n };\n\n gridContainerClick = () => {\n hideMenu();\n if (!this.props.isDirentDetailShow) {\n this.onGridItemClick(null);\n }\n };\n\n onGridContainerContextMenu = (event) => {\n event.preventDefault();\n // Display menu items based on the permissions of the current path\n let permission = this.props.userPerm;\n if (permission !== 'admin' && permission !== 'rw') {\n return;\n }\n let id = 'dirent-grid-container-menu';\n const {\n NEW_FOLDER, NEW_FILE,\n NEW_MARKDOWN_FILE,\n NEW_EXCEL_FILE,\n NEW_POWERPOINT_FILE,\n NEW_WORD_FILE,\n NEW_SEADOC_FILE\n } = TextTranslation;\n\n const menuList = [\n NEW_FOLDER, NEW_FILE, 'Divider',\n NEW_MARKDOWN_FILE,\n NEW_EXCEL_FILE,\n NEW_POWERPOINT_FILE,\n NEW_WORD_FILE\n ];\n if (enableSeadoc) {\n menuList.push(NEW_SEADOC_FILE);\n }\n this.handleContextClick(event, id, menuList);\n };\n\n onGridItemContextMenu = (event, dirent) => {\n // Display menu items according to the current dirent permission\n let id = 'grid-item-contextmenu';\n let menuList = this.getDirentItemMenuList(dirent, true);\n this.handleContextClick(event, id, menuList, dirent);\n this.props.onGridItemClick && this.props.onGridItemClick(dirent);\n };\n\n handleContextClick = (event, id, menuList, currentObject = null) => {\n event.preventDefault();\n event.stopPropagation();\n\n let x = event.clientX || (event.touches && event.touches[0].pageX);\n let y = event.clientY || (event.touches && event.touches[0].pageY);\n\n if (this.props.posX) {\n x -= this.props.posX;\n }\n if (this.props.posY) {\n y -= this.props.posY;\n }\n\n hideMenu();\n\n this.setState({activeDirent: currentObject});\n\n let showMenuConfig = {\n id: id,\n position: { x, y },\n target: event.target,\n currentObject: currentObject,\n menuList: menuList,\n };\n\n if (menuList.length === 0) {\n return;\n }\n\n showMenu(showMenuConfig);\n };\n\n getDirentItemMenuList = (dirent, isContextmenu) => {\n const isRepoOwner = this.isRepoOwner;\n const currentRepoInfo = this.props.currentRepoInfo;\n return Utils.getDirentOperationList(isRepoOwner, currentRepoInfo, dirent, isContextmenu);\n };\n\n render() {\n let {direntList, path} = this.props;\n let dirent = this.state.activeDirent ? this.state.activeDirent : '';\n let direntPath = Utils.joinPath(path, dirent.name);\n\n if (this.props.isDirentListLoading) {\n return ();\n }\n\n return (\n \n
      \n {\n direntList.length !== 0 && direntList.map((dirent, index) => {\n return (\n \n );\n })\n }\n
    \n \n \n {this.state.isCreateFolderDialogShow && (\n \n \n \n )}\n {this.state.isCreateFileDialogShow && (\n \n \n \n )}\n {this.state.isMoveDialogShow &&\n \n }\n {this.state.isZipDialogOpen &&\n \n \n \n }\n {this.state.isCopyDialogShow &&\n \n }\n {this.state.isEditFileTagShow &&\n \n }\n {this.state.isShareDialogShow &&\n \n \n \n }\n {this.state.isRenameDialogShow && (\n \n \n \n )}\n {this.state.isPermissionDialogOpen &&\n \n \n \n }\n {this.state.isImagePopupOpen && (\n \n \n \n )}\n
    \n );\n }\n}\n\nDirentGridView.propTypes = propTypes;\n\nexport default DirentGridView;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport RepoInfoBar from '../../components/repo-info-bar';\nimport DirentGridView from '../../components/dirent-grid-view/dirent-grid-view';\nimport DirentNoneView from '../../components/dirent-list-view/dirent-none-view';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n repoID: PropTypes.string.isRequired,\n currentRepoInfo: PropTypes.object.isRequired,\n draftCounts: PropTypes.number,\n usedRepoTags: PropTypes.array.isRequired,\n updateUsedRepoTags: PropTypes.func.isRequired,\n direntList: PropTypes.array.isRequired,\n onItemClick: PropTypes.func.isRequired,\n onGridItemClick: PropTypes.func,\n onAddFile: PropTypes.func.isRequired,\n onItemDelete: PropTypes.func.isRequired,\n onItemMove: PropTypes.func.isRequired,\n onItemCopy: PropTypes.func.isRequired,\n onItemConvert: PropTypes.func.isRequired,\n onRenameNode: PropTypes.func.isRequired,\n isGroupOwnedRepo: PropTypes.bool.isRequired,\n userPerm: PropTypes.string,\n isRepoInfoBarShow: PropTypes.bool.isRequired,\n isDirentListLoading: PropTypes.bool.isRequired,\n isDirentDetailShow: PropTypes.bool.isRequired,\n enableDirPrivateShare: PropTypes.bool.isRequired,\n updateDirent: PropTypes.func.isRequired,\n showDirentDetail: PropTypes.func.isRequired,\n onAddFolder: PropTypes.func.isRequired,\n onFileTagChanged: PropTypes.func,\n onItemRename: PropTypes.func.isRequired,\n fullDirentList: PropTypes.array,\n};\n\nclass DirGridView extends React.Component {\n\n render() {\n if (this.props.path === '/' && this.props.direntList.length === 0) {\n return (\n \n );\n }\n return (\n \n {this.props.isRepoInfoBarShow && (\n \n )}\n \n \n );\n }\n}\n\nDirGridView.propTypes = propTypes;\n\nexport default DirGridView;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport { Button, Modal, ModalHeader, Input, ModalBody, ModalFooter, Alert } from 'reactstrap';\n\nconst propTypes = {\n currentNode: PropTypes.object,\n onRename: PropTypes.func.isRequired,\n toggleCancel: PropTypes.func.isRequired,\n checkDuplicatedName: PropTypes.func.isRequired,\n};\n\nclass Rename extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n newName: '',\n errMessage: '',\n isSubmitBtnActive: false,\n };\n this.newInput = React.createRef();\n }\n\n UNSAFE_componentWillMount() {\n this.setState({newName: this.props.currentNode.object.name});\n }\n\n componentDidMount() {\n const { currentNode } = this.props;\n this.changeState(currentNode);\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.changeState(nextProps.currentNode);\n }\n\n handleChange = (e) => {\n if (!e.target.value.trim()) {\n this.setState({isSubmitBtnActive: false});\n } else {\n this.setState({isSubmitBtnActive: true});\n }\n\n this.setState({newName: e.target.value});\n };\n\n handleSubmit = () => {\n let { isValid, errMessage } = this.validateInput();\n if (!isValid) {\n this.setState({errMessage : errMessage});\n } else {\n let isDuplicated = this.checkDuplicatedName();\n if (isDuplicated) {\n let errMessage = gettext('The name \"{name}\" is already taken. Please choose a different name.');\n errMessage = errMessage.replace('{name}', Utils.HTMLescape(this.state.newName));\n this.setState({errMessage: errMessage});\n } else {\n this.props.onRename(this.state.newName);\n }\n }\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.handleSubmit();\n }\n };\n\n toggle = () => {\n this.props.toggleCancel();\n };\n\n changeState = (currentNode) => {\n let name = currentNode.object.name;\n this.setState({newName: name});\n };\n\n validateInput = () => {\n let newName = this.state.newName.trim();\n let isValid = true;\n let errMessage = '';\n if (!newName) {\n isValid = false;\n errMessage = gettext('Name is required.');\n return { isValid, errMessage };\n }\n\n if (newName.indexOf('/') > -1) {\n isValid = false;\n errMessage = gettext('Name should not include ' + '\\'/\\'' + '.');\n return { isValid, errMessage };\n }\n\n return { isValid, errMessage };\n };\n\n checkDuplicatedName = () => {\n let isDuplicated = this.props.checkDuplicatedName(this.state.newName);\n return isDuplicated;\n };\n\n onAfterModelOpened = () => {\n if (!this.newInput.current) return;\n const { currentNode } = this.props;\n let type = currentNode.object.type;\n this.newInput.current.focus();\n if (type === 'file') {\n var endIndex = currentNode.object.name.lastIndexOf('.md');\n this.newInput.current.setSelectionRange(0, endIndex, 'forward');\n } else {\n this.newInput.current.setSelectionRange(0, -1);\n }\n };\n\n render() {\n let type = this.props.currentNode.object.type;\n return (\n \n {type === 'file' ? gettext('Rename File') : gettext('Rename Folder') }\n \n

    {type === 'file' ? gettext('New file name'): gettext('New folder name')}

    \n \n {this.state.errMessage && {this.state.errMessage}}\n
    \n \n \n \n \n
    \n );\n }\n}\n\nRename.propTypes = propTypes;\n\nexport default Rename;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport TreeView from '../../components/tree-view/tree-view';\nimport Loading from '../../components/loading';\nimport ModalPortal from '../../components/modal-portal';\nimport Rename from '../../components/dialog/rename-dialog';\nimport Copy from '../../components/dialog/copy-dirent-dialog';\nimport Move from '../../components/dialog/move-dirent-dialog';\nimport CreateFolder from '../../components/dialog/create-folder-dialog';\nimport CreateFile from '../../components/dialog/create-file-dialog';\nimport ImageDialog from '../../components/dialog/image-dialog';\nimport { siteRoot, thumbnailSizeForOriginal } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n currentPath: PropTypes.string.isRequired,\n userPerm: PropTypes.string.isRequired,\n isTreeDataLoading: PropTypes.bool.isRequired,\n treeData: PropTypes.object.isRequired,\n currentNode: PropTypes.object,\n onNodeClick: PropTypes.func.isRequired,\n onNodeCollapse: PropTypes.func.isRequired,\n onNodeExpanded: PropTypes.func.isRequired,\n onRenameNode: PropTypes.func.isRequired,\n onDeleteNode: PropTypes.func.isRequired,\n onAddFileNode: PropTypes.func.isRequired,\n onAddFolderNode: PropTypes.func.isRequired,\n repoID: PropTypes.string.isRequired,\n navRate: PropTypes.number,\n inResizing: PropTypes.bool.isRequired,\n currentRepoInfo: PropTypes.object.isRequired,\n onItemMove: PropTypes.func.isRequired,\n onItemCopy: PropTypes.func.isRequired,\n selectedDirentList: PropTypes.array.isRequired,\n onItemsMove: PropTypes.func.isRequired,\n};\n\nclass DirColumnNav extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n opNode: null,\n isAddFileDialogShow: false,\n isAddFolderDialogShow: false,\n isRenameDialogShow: false,\n isNodeImagePopupOpen: false,\n imageNodeItems: [],\n imageIndex: 0,\n isCopyDialogShow: false,\n isMoveDialogShow: false,\n isMutipleOperation: false,\n };\n this.isNodeMenuShow = true;\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.setState({opNode: nextProps.currentNode});\n }\n\n onNodeClick = (node) => {\n this.setState({opNode: node});\n if (Utils.imageCheck(node.object.name)) {\n this.showNodeImagePopup(node);\n return;\n }\n this.props.onNodeClick(node);\n };\n\n onMenuItemClick = (operation, node) => {\n this.setState({opNode: node});\n switch (operation) {\n case 'New Folder':\n if (!node) {\n this.onAddFolderToggle('root');\n } else {\n this.onAddFolderToggle();\n }\n break;\n case 'New File':\n if (!node) {\n this.onAddFileToggle('root');\n } else {\n this.onAddFileToggle();\n }\n break;\n case 'Rename':\n this.onRenameToggle();\n break;\n case 'Delete':\n this.onDeleteNode(node);\n break;\n case 'Copy':\n this.onCopyToggle();\n break;\n case 'Move':\n this.onMoveToggle();\n break;\n case 'Open in New Tab':\n this.onOpenFile(node);\n break;\n }\n };\n\n onAddFileToggle = (type) => {\n if (type === 'root') {\n let root = this.props.treeData.root;\n this.setState({\n isAddFileDialogShow: !this.state.isAddFileDialogShow,\n opNode: root,\n });\n } else {\n this.setState({isAddFileDialogShow: !this.state.isAddFileDialogShow});\n }\n };\n\n onAddFolderToggle = (type) => {\n if (type === 'root') {\n let root = this.props.treeData.root;\n this.setState({\n isAddFolderDialogShow: !this.state.isAddFolderDialogShow,\n opNode: root,\n });\n } else {\n this.setState({isAddFolderDialogShow: !this.state.isAddFolderDialogShow});\n }\n };\n\n onRenameToggle = () => {\n this.setState({isRenameDialogShow: !this.state.isRenameDialogShow});\n };\n\n onCopyToggle = () => {\n this.setState({isCopyDialogShow: !this.state.isCopyDialogShow});\n };\n\n onMoveToggle = () => {\n this.setState({isMoveDialogShow: !this.state.isMoveDialogShow});\n };\n\n onAddFolderNode = (dirPath) => {\n this.setState({isAddFolderDialogShow: !this.state.isAddFolderDialogShow});\n this.props.onAddFolderNode(dirPath);\n };\n\n onRenameNode = (newName) => {\n this.setState({isRenameDialogShow: !this.state.isRenameDialogShow});\n let node = this.state.opNode;\n this.props.onRenameNode(node, newName);\n };\n\n onDeleteNode = (node) => {\n this.props.onDeleteNode(node);\n };\n\n onOpenFile = (node) => {\n let newUrl = siteRoot + 'lib/' + this.props.repoID + '/file' + Utils.encodePath(node.path);\n window.open(newUrl, '_blank');\n };\n\n checkDuplicatedName = (newName) => {\n let node = this.state.opNode;\n // root node to new node conditions: parentNode is null,\n let parentNode = node.parentNode ? node.parentNode : node;\n let childrenObject = parentNode.children.map(item => {\n return item.object;\n });\n let isDuplicated = childrenObject.some(object => {\n return object.name === newName;\n });\n return isDuplicated;\n };\n\n showNodeImagePopup = (node) => {\n let childrenNode = node.parentNode.children;\n let items = childrenNode.filter((item) => {\n return Utils.imageCheck(item.object.name);\n });\n let imageNames = items.map((item) => {\n return item.object.name;\n });\n this.setState({\n isNodeImagePopupOpen: true,\n imageNodeItems: this.prepareImageItems(node),\n imageIndex: imageNames.indexOf(node.object.name)\n });\n };\n\n prepareImageItems = (node) => {\n let childrenNode = node.parentNode.children;\n let items = childrenNode.filter((item) => {\n return Utils.imageCheck(item.object.name);\n });\n\n const useThumbnail = !this.props.currentRepoInfo.encrypted;\n let prepareItem = (item) => {\n const name = item.object.name;\n\n const path = Utils.encodePath(Utils.joinPath(node.parentNode.path, name));\n const fileExt = name.substr(name.lastIndexOf('.') + 1).toLowerCase();\n const isGIF = fileExt === 'gif';\n\n const repoID = this.props.repoID;\n let src = '';\n if (useThumbnail && !isGIF) {\n src = `${siteRoot}thumbnail/${repoID}/${thumbnailSizeForOriginal}${path}`;\n } else {\n src = `${siteRoot}repo/${repoID}/raw${path}`;\n }\n\n return {\n 'name': name,\n 'url': `${siteRoot}lib/${repoID}/file${path}`,\n 'src': src\n };\n };\n\n return items.map((item) => { return prepareItem(item); });\n };\n\n closeNodeImagePopup = () => {\n this.setState({\n isNodeImagePopupOpen: false\n });\n };\n\n moveToPrevImage = () => {\n const imageItemsLength = this.state.imageNodeItems.length;\n this.setState((prevState) => ({\n imageIndex: (prevState.imageIndex + imageItemsLength - 1) % imageItemsLength\n }));\n };\n\n moveToNextImage = () => {\n const imageItemsLength = this.state.imageNodeItems.length;\n this.setState((prevState) => ({\n imageIndex: (prevState.imageIndex + 1) % imageItemsLength\n }));\n };\n\n stopTreeScrollPropagation = (e) => {\n e.stopPropagation();\n };\n\n render() {\n let flex = this.props.navRate ? '0 0 ' + this.props.navRate * 100 + '%' : '0 0 25%';\n const select = this.props.inResizing ? 'none' : '';\n return (\n \n
    \n {this.props.isTreeDataLoading ?\n () :\n ()\n }\n
    \n {this.state.isAddFolderDialogShow && (\n \n \n \n )}\n {this.state.isAddFileDialogShow && (\n \n \n \n )}\n {this.state.isRenameDialogShow && (\n \n \n \n )}\n {this.state.isCopyDialogShow && (\n \n \n \n )}\n {this.state.isMoveDialogShow && (\n \n \n \n )}\n {this.state.isNodeImagePopupOpen && (\n \n \n \n )}\n
    \n );\n }\n}\n\nDirColumnNav.defaultProps={\n navRate: 0.25\n};\n\nDirColumnNav.propTypes = propTypes;\n\nexport default DirColumnNav;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Utils } from '../../utils/utils';\nimport { gettext, siteRoot } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport toaster from '../toast';\nimport WikiMarkdownViewer from '../wiki-markdown-viewer';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n repoID: PropTypes.string.isRequired,\n hash: PropTypes.string,\n isDraft: PropTypes.bool,\n hasDraft: PropTypes.bool,\n goDraftPage: PropTypes.func.isRequired,\n isFileLoading: PropTypes.bool.isRequired,\n isFileLoadedErr: PropTypes.bool.isRequired,\n filePermission: PropTypes.string,\n content: PropTypes.string,\n lastModified: PropTypes.string,\n latestContributor: PropTypes.string,\n onLinkClick: PropTypes.func.isRequired,\n};\n\nclass DirColumnFile extends React.Component {\n\n componentDidMount() {\n if (this.props.hash) {\n let hash = this.props.hash;\n setTimeout(function() {\n window.location.hash = hash;\n }, 500);\n }\n }\n\n onEditClick = (e) => {\n e.preventDefault();\n let { path, repoID } = this.props;\n let url = siteRoot + 'lib/' + repoID + '/file' + Utils.encodePath(path) + '?mode=edit';\n window.open(url);\n };\n\n onNewDraft = (e) => {\n e.preventDefault();\n let { path, repoID } = this.props;\n seafileAPI.createDraft(repoID, path).then(res => {\n window.location.href = siteRoot + 'lib/' + res.data.origin_repo_id + '/file' + res.data.draft_file_path + '?mode=edit';\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onOpenFile = (e) => {\n e.preventDefault();\n let { path, repoID } = this.props;\n let newUrl = siteRoot + 'lib/' + repoID + '/file' + Utils.encodePath(path);\n window.open(newUrl, '_blank');\n };\n\n goDraftPage = (e) => {\n e.preventDefault();\n this.props.goDraftPage();\n };\n\n render() {\n if (this.props.isFileLoadedErr) {\n return (\n
    {gettext('File does not exist.')}
    \n );\n }\n return (\n \n \n \n \n \n {(!this.props.isDraft && this.props.hasDraft) &&\n
    \n
    \n {gettext('This file is in draft stage.')}\n {gettext('View Draft')}\n
    \n
    \n }\n
    \n \n );\n }\n}\n\nDirColumnFile.propTypes = propTypes;\n\nexport default DirColumnFile;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport DirColumnNav from './dir-column-nav';\nimport DirColumnFile from './dir-column-file';\nimport DirListView from './dir-list-view';\n\nconst propTypes = {\n path: PropTypes.string.isRequired,\n repoID: PropTypes.string.isRequired,\n // repoinfo\n currentRepoInfo: PropTypes.object.isRequired,\n enableDirPrivateShare: PropTypes.bool.isRequired,\n userPerm: PropTypes.string,\n isGroupOwnedRepo: PropTypes.bool.isRequired,\n // tree\n isTreeDataLoading: PropTypes.bool.isRequired,\n treeData: PropTypes.object.isRequired,\n currentNode: PropTypes.object,\n onNodeClick: PropTypes.func.isRequired,\n onNodeCollapse: PropTypes.func.isRequired,\n onNodeExpanded: PropTypes.func.isRequired,\n onRenameNode: PropTypes.func.isRequired,\n onDeleteNode: PropTypes.func.isRequired,\n onAddFileNode: PropTypes.func.isRequired,\n onAddFolderNode: PropTypes.func.isRequired,\n // file\n isViewFile: PropTypes.bool.isRequired,\n isFileLoading: PropTypes.bool.isRequired,\n isFileLoadedErr: PropTypes.bool.isRequired,\n hash: PropTypes.string,\n isDraft: PropTypes.bool.isRequired,\n hasDraft: PropTypes.bool.isRequired,\n goDraftPage: PropTypes.func.isRequired,\n filePermission: PropTypes.string,\n content: PropTypes.string,\n lastModified: PropTypes.string,\n latestContributor: PropTypes.string,\n onLinkClick: PropTypes.func.isRequired,\n // repo content\n isRepoInfoBarShow: PropTypes.bool.isRequired,\n draftCounts: PropTypes.number.isRequired,\n usedRepoTags: PropTypes.array.isRequired,\n updateUsedRepoTags: PropTypes.func.isRequired,\n // list\n isDirentListLoading: PropTypes.bool.isRequired,\n direntList: PropTypes.array.isRequired,\n sortBy: PropTypes.string.isRequired,\n sortOrder: PropTypes.string.isRequired,\n sortItems: PropTypes.func.isRequired,\n onAddFolder: PropTypes.func.isRequired,\n onAddFile: PropTypes.func.isRequired,\n updateDirent: PropTypes.func.isRequired,\n onItemClick: PropTypes.func.isRequired,\n onItemSelected: PropTypes.func.isRequired,\n onItemDelete: PropTypes.func.isRequired,\n onItemRename: PropTypes.func.isRequired,\n onItemMove: PropTypes.func.isRequired,\n onItemCopy: PropTypes.func.isRequired,\n onItemConvert: PropTypes.func.isRequired,\n onDirentClick: PropTypes.func.isRequired,\n isAllItemSelected: PropTypes.bool.isRequired,\n onAllItemSelected: PropTypes.func.isRequired,\n selectedDirentList: PropTypes.array.isRequired,\n onItemsMove: PropTypes.func.isRequired,\n onItemsCopy: PropTypes.func.isRequired,\n onItemsDelete: PropTypes.func.isRequired,\n onFileTagChanged: PropTypes.func,\n showDirentDetail: PropTypes.func.isRequired,\n fullDirentList: PropTypes.array,\n};\n\nclass DirColumnView extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n inResizing: false,\n navRate: 0.25,\n };\n this.containerWidth = null;\n }\n\n onResizeMouseUp = () => {\n if (this.state.inResizing) {\n this.setState({\n inResizing: false\n });\n }\n this.setCookie('navRate', this.state.navRate);\n };\n\n onResizeMouseDown = () => {\n this.containerWidth = this.refs.viewModeContainer.clientWidth;\n this.setState({\n inResizing: true\n });\n };\n\n onResizeMouseMove = (e) => {\n let sizeNavWidth = this.containerWidth / 0.78 * 0.22 + 3;\n let rate = (e.nativeEvent.clientX - sizeNavWidth) / this.containerWidth;\n if (rate < 0.1) {\n this.setState({\n inResizing: false,\n navRate: 0.12,\n });\n }\n else if (rate > 0.4) {\n this.setState({\n inResizing: false,\n navRate: 0.38,\n });\n }\n else {\n this.setState({\n navRate: rate\n });\n }\n };\n\n setCookie = (name, value) => {\n let cookie = name + '=' + value + ';';\n document.cookie = cookie;\n };\n\n getCookie = (cookiename) => {\n let name = cookiename + '=';\n let cookie = document.cookie.split(';');\n for (let i = 0, len = cookie.length; i < len; i++) {\n let c = cookie[i].trim();\n if (c.indexOf(name) == 0) {\n return c.substring(name.length, c.length) * 1;\n }\n }\n return '';\n };\n\n UNSAFE_componentWillMount() {\n let rate = this.getCookie('navRate');\n if (rate) {\n this.setState({\n navRate: rate,\n });\n }\n }\n\n render() {\n const onResizeMove = this.state.inResizing ? this.onResizeMouseMove : null;\n const select = this.state.inResizing ? 'none' : '';\n const mainFlex = '1 0 ' + (1 - this.state.navRate - 0.05) * 100 + '%';\n return (\n
    \n \n
    \n
    \n {this.props.isViewFile ? (\n \n ) : (\n \n )}\n
    \n
    \n );\n }\n}\n\nDirColumnView.propTypes = propTypes;\n\nexport default DirColumnView;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport CurDirPath from '../../components/cur-dir-path';\nimport DirentDetail from '../../components/dirent-detail/dirent-details';\nimport LibDetail from '../../components/dirent-detail/lib-details';\nimport DirListView from '../../components/dir-view-mode/dir-list-view';\nimport DirGridView from '../../components/dir-view-mode/dir-grid-view';\nimport DirColumnView from '../../components/dir-view-mode/dir-column-view';\n\nimport '../../css/lib-content-view.css';\n\nconst propTypes = {\n pathPrefix: PropTypes.array.isRequired,\n currentMode: PropTypes.string.isRequired,\n path: PropTypes.string.isRequired,\n pathExist: PropTypes.bool.isRequired,\n // repoinfo\n currentRepoInfo: PropTypes.object.isRequired,\n repoID: PropTypes.string.isRequired,\n enableDirPrivateShare: PropTypes.bool.isRequired,\n isGroupOwnedRepo: PropTypes.bool.isRequired,\n userPerm: PropTypes.string,\n // path func\n onTabNavClick: PropTypes.func.isRequired,\n onMainNavBarClick: PropTypes.func.isRequired,\n // file\n isViewFile: PropTypes.bool.isRequired,\n isFileLoadedErr: PropTypes.bool.isRequired,\n hash: PropTypes.string,\n isDraft: PropTypes.bool.isRequired,\n hasDraft: PropTypes.bool.isRequired,\n fileTags: PropTypes.array.isRequired,\n goDraftPage: PropTypes.func.isRequired,\n isFileLoading: PropTypes.bool.isRequired,\n filePermission: PropTypes.string,\n content: PropTypes.string,\n lastModified: PropTypes.string,\n latestContributor: PropTypes.string,\n onLinkClick: PropTypes.func.isRequired,\n // tree\n isTreeDataLoading: PropTypes.bool.isRequired,\n treeData: PropTypes.object.isRequired,\n currentNode: PropTypes.object,\n onNodeClick: PropTypes.func.isRequired,\n onNodeCollapse: PropTypes.func.isRequired,\n onNodeExpanded: PropTypes.func.isRequired,\n onRenameNode: PropTypes.func.isRequired,\n onDeleteNode: PropTypes.func.isRequired,\n onAddFileNode: PropTypes.func.isRequired,\n onAddFolderNode: PropTypes.func.isRequired,\n // repo content\n draftCounts: PropTypes.number,\n usedRepoTags: PropTypes.array.isRequired,\n updateUsedRepoTags: PropTypes.func.isRequired,\n // list\n isDirentListLoading: PropTypes.bool.isRequired,\n direntList: PropTypes.array.isRequired,\n sortBy: PropTypes.string.isRequired,\n sortOrder: PropTypes.string.isRequired,\n sortItems: PropTypes.func.isRequired,\n updateDirent: PropTypes.func.isRequired,\n onItemClick: PropTypes.func.isRequired,\n onItemSelected: PropTypes.func.isRequired,\n onItemDelete: PropTypes.func.isRequired,\n onItemRename: PropTypes.func.isRequired,\n onItemMove: PropTypes.func.isRequired,\n onItemCopy: PropTypes.func.isRequired,\n onAddFolder: PropTypes.func.isRequired,\n onAddFile: PropTypes.func.isRequired,\n onItemConvert: PropTypes.func.isRequired,\n onFileTagChanged: PropTypes.func.isRequired,\n isDirentSelected: PropTypes.bool.isRequired,\n isAllDirentSelected: PropTypes.bool.isRequired,\n onAllDirentSelected: PropTypes.func.isRequired,\n isDirentDetailShow: PropTypes.bool.isRequired,\n selectedDirent: PropTypes.object,\n selectedDirentList: PropTypes.array.isRequired,\n onItemsMove: PropTypes.func.isRequired,\n onItemsCopy: PropTypes.func.isRequired,\n onItemsDelete: PropTypes.func.isRequired,\n closeDirentDetail: PropTypes.func.isRequired,\n showDirentDetail: PropTypes.func.isRequired,\n onDeleteRepoTag: PropTypes.func.isRequired,\n updateDetail: PropTypes.bool.isRequired,\n onListContainerScroll: PropTypes.func.isRequired,\n onDirentClick: PropTypes.func.isRequired,\n direntDetailPanelTab: PropTypes.string,\n loadDirentList: PropTypes.func,\n fullDirentList: PropTypes.array,\n};\n\nclass LibContentContainer extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n currentDirent: null,\n };\n\n this.errMessage = (
    {gettext('Folder does not exist.')}
    );\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.path !== this.props.path || nextProps.updateDetail !== this.props.updateDetail) {\n this.setState({currentDirent: null});\n }\n }\n\n onPathClick = (path) => {\n this.props.onMainNavBarClick(path);\n this.props.closeDirentDetail();\n };\n\n onItemClick = (dirent) => {\n this.props.onItemClick(dirent);\n this.props.closeDirentDetail();\n };\n\n onGridItemClick = (dirent) => {\n this.setState({currentDirent: dirent});\n this.props.onDirentClick(dirent);\n };\n\n // on ''\n onDirentClick = (dirent) => {\n this.setState({currentDirent: dirent});\n this.props.onDirentClick(dirent);\n };\n\n onItemSelected = (dirent) => {\n this.setState({currentDirent: dirent});\n this.props.onItemSelected(dirent);\n };\n\n onItemDelete = (dirent) => {\n this.checkCurrentDirent(dirent);\n this.props.onItemDelete(dirent);\n };\n\n onItemMove = (destRepo, dirent, selectedPath, currentPath) => {\n this.checkCurrentDirent(dirent);\n this.props.onItemMove(destRepo, dirent, selectedPath, currentPath);\n };\n\n checkCurrentDirent = (deletedDirent) => {\n let { currentDirent } = this.state;\n if (currentDirent && deletedDirent.name === currentDirent.name) {\n this.setState({currentDirent: null});\n }\n };\n\n onItemsScroll = (e) => {\n let target = e.target;\n\n if (target.scrollTop === 0) {\n return;\n }\n\n if (target.scrollTop + target.clientHeight + 1 >= target.scrollHeight) {\n this.props.onListContainerScroll();\n }\n };\n\n render() {\n let { path, repoID, usedRepoTags, draftCounts } = this.props;\n let isRepoInfoBarShow = false;\n if (path === '/') {\n if (usedRepoTags.length !== 0 || draftCounts !== 0) {\n isRepoInfoBarShow = true;\n }\n }\n\n return (\n \n
    \n {this.props.currentRepoInfo.status === 'read-only' &&\n
    \n {gettext('This library has been set to read-only by admin and cannot be updated.')}\n
    \n }\n
    \n \n
    \n
    \n {!this.props.pathExist && this.errMessage}\n {this.props.pathExist && (\n \n {this.props.currentMode === 'list' && (\n \n )}\n {this.props.currentMode === 'grid' && (\n \n )}\n {this.props.currentMode === 'column' && (\n \n )}\n \n )}\n
    \n
    \n {this.props.isDirentDetailShow &&\n \n
    \n {(this.props.path === '/' && !this.state.currentDirent) ?\n :\n \n }\n
    \n
    \n }\n
    \n );\n }\n}\n\nLibContentContainer.propTypes = propTypes;\n\nexport default LibContentContainer;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n resumableFile: PropTypes.object.isRequired,\n onUploadCancel: PropTypes.func.isRequired,\n onUploadRetry: PropTypes.func.isRequired,\n};\n\nconst UPLOAD_UPLOADING = 'uploading';\nconst UPLOAD_ERROR = 'error';\nconst UPLOAD_ISSAVING = 'isSaving';\nconst UPLOAD_UPLOADED = 'uploaded';\n\nclass UploadListItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n uploadState: UPLOAD_UPLOADING\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n let { resumableFile } = nextProps;\n let uploadState = UPLOAD_UPLOADING;\n\n if (resumableFile.error) {\n uploadState = UPLOAD_ERROR;\n } else {\n if (resumableFile.remainingTime === 0 && !resumableFile.isSaved) {\n uploadState = UPLOAD_ISSAVING;\n }\n\n if (resumableFile.isSaved) {\n uploadState = UPLOAD_UPLOADED;\n }\n }\n\n this.setState({uploadState: uploadState});\n }\n\n onUploadCancel = (e) => {\n e.preventDefault();\n this.props.onUploadCancel(this.props.resumableFile);\n };\n\n onUploadRetry = (e) => {\n e.preventDefault();\n this.props.onUploadRetry(this.props.resumableFile);\n };\n\n formatFileSize = (size) => {\n if (typeof size !== 'number') {\n return '';\n }\n if (size >= 1000 * 1000 * 1000) {\n return (size / (1000 * 1000 * 1000)).toFixed(1) + ' G';\n }\n if (size >= 1000 * 1000) {\n return (size / (1000 * 1000)).toFixed(1) + ' M';\n }\n if (size >= 1000) {\n return (size / 1000).toFixed(1) + ' K';\n }\n return size.toFixed(1) + ' B';\n };\n\n render() {\n let { resumableFile } = this.props;\n let progress = Math.round(resumableFile.progress() * 100);\n let error = resumableFile.error;\n\n const fileName = resumableFile.newFileName;\n const size = this.formatFileSize(resumableFile.size);\n\n return (\n \n \n
    {fileName}
    \n \n \n {size}\n \n \n {(this.state.uploadState === UPLOAD_UPLOADING || this.state.uploadState === UPLOAD_ISSAVING) &&\n \n {resumableFile.size >= (100 * 1000 * 1000) &&\n \n {resumableFile.isUploading() && (\n
    \n
    \n
    \n
    \n {(resumableFile.remainingTime === -1) &&
    {gettext('Preparing to upload...')}
    }\n {(resumableFile.remainingTime > 0) &&
    {gettext('Remaining')}{' '}{Utils.formatTime(resumableFile.remainingTime)}
    }\n {(resumableFile.remainingTime === 0) &&
    {gettext('Indexing...')}
    }\n
    \n )}\n {!resumableFile.isUploading() && (\n
    \n
    \n
    \n
    \n
    \n )}\n
    \n }\n {(resumableFile.size < (100 * 1000 * 1000)) &&\n
    \n
    \n
    \n
    \n
    \n }\n
    \n }\n {this.state.uploadState === UPLOAD_ERROR && (\n
    \n )}\n \n \n \n {this.state.uploadState === UPLOAD_UPLOADING && (\n {gettext('Cancel')}\n )}\n {this.state.uploadState === UPLOAD_ERROR && (\n {gettext('Retry')}\n )}\n {this.state.uploadState === UPLOAD_ISSAVING && (\n {gettext('Saving...')}\n )}\n {this.state.uploadState === UPLOAD_UPLOADED && (\n {gettext('Uploaded')}\n )}\n \n \n \n );\n }\n}\n\nUploadListItem.propTypes = propTypes;\n\nexport default UploadListItem;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext, maxUploadFileSize } from '../../utils/constants';\n\nconst propTypes = {\n file: PropTypes.object,\n};\n\nclass ForbidUploadListItem extends React.Component {\n\n render() {\n let { file } = this.props;\n let msg = gettext('Please upload files less than {placeholder}M').replace('{placeholder}', maxUploadFileSize);\n return (\n \n \n
    {file.name}
    \n \n\n {msg}\n \n );\n }\n}\n\nForbidUploadListItem.propTypes = propTypes;\n\nexport default ForbidUploadListItem;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport UploadListItem from './upload-list-item';\nimport ForbidUploadListItem from './forbid-upload-list-item';\n\nconst propTypes = {\n uploadBitrate: PropTypes.number.isRequired,\n totalProgress: PropTypes.number.isRequired,\n retryFileList: PropTypes.array.isRequired,\n uploadFileList: PropTypes.array.isRequired,\n forbidUploadFileList: PropTypes.array.isRequired,\n onCloseUploadDialog: PropTypes.func.isRequired,\n onCancelAllUploading: PropTypes.func.isRequired,\n onUploadCancel: PropTypes.func.isRequired,\n onUploadRetry: PropTypes.func.isRequired,\n onUploadRetryAll: PropTypes.func.isRequired,\n allFilesUploaded: PropTypes.bool.isRequired,\n};\n\nclass UploadProgressDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isMinimized: false\n };\n }\n\n onCancelAllUploading = () => {\n this.props.onCancelAllUploading();\n };\n\n onMinimizeUpload = (e) => {\n e.nativeEvent.stopImmediatePropagation();\n this.setState({isMinimized: !this.state.isMinimized});\n };\n\n onCloseUpload = (e) => {\n e.nativeEvent.stopImmediatePropagation();\n this.props.onCloseUploadDialog();\n };\n\n render() {\n\n let uploadBitrate = Utils.formatBitRate(this.props.uploadBitrate);\n let uploadedMessage = gettext('File Upload');\n let uploadingMessage = gettext('File Uploading...') + ' ' + this.props.totalProgress + '% (' + uploadBitrate + ')';\n\n let uploadingOptions = ();\n\n let uploadedOptions = (\n \n \n \n \n );\n\n let { totalProgress, allFilesUploaded, retryFileList } = this.props;\n\n return (\n
    \n
    \n
    \n {totalProgress === 100 ? uploadedMessage : uploadingMessage}\n
    \n
    \n {totalProgress === 100 || allFilesUploaded ? uploadedOptions : uploadingOptions}\n
    \n
    \n
    \n
    \n {retryFileList.length > 0 ?\n {gettext('Retry All')}\n :\n {gettext('Retry All')}\n }\n {!allFilesUploaded ?\n {gettext('Cancel All')}\n :\n {gettext('Cancel All')}\n }\n
    \n \n \n \n \n \n \n \n \n \n \n {\n this.props.forbidUploadFileList.map((file, index) => {\n return ();\n })\n }\n {\n this.props.uploadFileList.map((resumableFile, index) => {\n return (\n \n );\n })\n }\n \n
    {gettext('name')}{gettext('size')}{gettext('progress')}{gettext('state')}
    \n
    \n
    \n );\n }\n}\n\nUploadProgressDialog.propTypes = propTypes;\n\nexport default UploadProgressDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\n\nconst propTypes = {\n currentResumableFile: PropTypes.object.isRequired,\n replaceRepetitionFile: PropTypes.func.isRequired,\n uploadFile: PropTypes.func.isRequired,\n cancelFileUpload: PropTypes.func.isRequired,\n};\n\nclass UploadRemindDialog extends React.Component {\n\n toggle = (e) => {\n e.nativeEvent.stopImmediatePropagation();\n this.props.cancelFileUpload();\n };\n\n replaceRepetitionFile = (e) => {\n e.nativeEvent.stopImmediatePropagation();\n this.props.replaceRepetitionFile();\n };\n\n uploadFile = (e) => {\n e.nativeEvent.stopImmediatePropagation();\n this.props.uploadFile();\n };\n\n render() {\n const { fileName } = this.props.currentResumableFile;\n return (\n \n \n {gettext('Replace file {filename}?').replace('{filename}', fileName)}\n \n \n

    {gettext('A file with the same name already exists in this folder.')}

    \n

    {gettext('Replacing it will overwrite its content.')}

    \n
    \n \n \n \n \n \n
    \n );\n }\n}\n\nUploadRemindDialog.propTypes = propTypes;\n\nexport default UploadRemindDialog;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport Resumablejs from '@seafile/resumablejs';\nimport MD5 from 'MD5';\nimport { resumableUploadFileBlockSize, maxUploadFileSize, maxNumberOfFilesForFileupload } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport { gettext } from '../../utils/constants';\nimport UploadProgressDialog from './upload-progress-dialog';\nimport UploadRemindDialog from '../dialog/upload-remind-dialog';\nimport toaster from '../toast';\nimport '../../css/file-uploader.css';\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n direntList: PropTypes.array.isRequired,\n filetypes: PropTypes.array,\n chunkSize: PropTypes.number,\n withCredentials: PropTypes.bool,\n testMethod: PropTypes.string,\n testChunks: PropTypes.number,\n simultaneousUploads: PropTypes.number,\n fileParameterName: PropTypes.string,\n minFileSizeErrorCallback: PropTypes.func,\n fileTypeErrorCallback: PropTypes.func,\n dragAndDrop: PropTypes.bool.isRequired,\n path: PropTypes.string.isRequired,\n onFileUploadSuccess: PropTypes.func.isRequired,\n isCustomPermission: PropTypes.bool,\n};\n\nclass FileUploader extends React.Component {\n\n static defaultProps = {\n isCustomPermission: false\n };\n\n constructor(props) {\n super(props);\n this.state = {\n retryFileList: [],\n uploadFileList: [],\n forbidUploadFileList: [],\n totalProgress: 0,\n isUploadProgressDialogShow: false,\n isUploadRemindDialogShow: false,\n currentResumableFile: null,\n uploadBitrate: 0,\n allFilesUploaded: false,\n };\n\n this.uploadInput = React.createRef();\n\n this.notifiedFolders = [];\n\n this.timestamp = null;\n this.loaded = 0;\n this.bitrateInterval = 500; // Interval in milliseconds to calculate the bitrate\n window.onbeforeunload = this.onbeforeunload;\n this.isUploadLinkLoaded = false;\n }\n\n componentDidMount() {\n this.resumable = new Resumablejs({\n target: '',\n query: this.setQuery || {},\n fileType: this.props.filetypes,\n maxFiles: maxNumberOfFilesForFileupload || undefined,\n maxFileSize: maxUploadFileSize * 1000 * 1000 || undefined,\n testMethod: this.props.testMethod || 'post',\n testChunks: this.props.testChunks || false,\n headers: this.setHeaders || {},\n withCredentials: this.props.withCredentials || false,\n chunkSize: parseInt(resumableUploadFileBlockSize) * 1024 * 1024 || 1 * 1024 * 1024,\n simultaneousUploads: this.props.simultaneousUploads || 1,\n fileParameterName: this.props.fileParameterName,\n generateUniqueIdentifier: this.generateUniqueIdentifier,\n forceChunkSize: true,\n maxChunkRetries: 3,\n minFileSize: 0,\n });\n\n this.resumable.assignBrowse(this.uploadInput.current, true);\n\n //Enable or Disable DragAnd Drop\n if (this.props.dragAndDrop === true) {\n this.resumable.enableDropOnDocument();\n }\n\n this.bindCallbackHandler();\n this.bindEventHandler();\n }\n\n componentWillUnmount = () => {\n window.onbeforeunload = null;\n if (this.props.dragAndDrop === true) {\n this.resumable.disableDropOnDocument();\n }\n };\n\n onbeforeunload = () => {\n if (window.uploader &&\n window.uploader.isUploadProgressDialogShow &&\n window.uploader.totalProgress !== 100) {\n return '';\n }\n };\n\n bindCallbackHandler = () => {\n let { minFileSizeErrorCallback, fileTypeErrorCallback } = this.props;\n\n if (this.maxFilesErrorCallback) {\n this.resumable.opts.maxFilesErrorCallback = this.maxFilesErrorCallback;\n }\n\n if (minFileSizeErrorCallback) {\n this.resumable.opts.minFileSizeErrorCallback = this.props.minFileSizeErrorCallback;\n }\n\n if (this.maxFileSizeErrorCallback) {\n this.resumable.opts.maxFileSizeErrorCallback = this.maxFileSizeErrorCallback;\n }\n\n if (fileTypeErrorCallback) {\n this.resumable.opts.fileTypeErrorCallback = this.props.fileTypeErrorCallback;\n }\n\n };\n\n bindEventHandler = () => {\n this.resumable.on('chunkingComplete', this.onChunkingComplete.bind(this));\n this.resumable.on('fileAdded', this.onFileAdded.bind(this));\n this.resumable.on('filesAddedComplete', this.filesAddedComplete.bind(this));\n this.resumable.on('fileProgress', this.onFileProgress.bind(this));\n this.resumable.on('fileSuccess', this.onFileUploadSuccess.bind(this));\n this.resumable.on('progress', this.onProgress.bind(this));\n this.resumable.on('complete', this.onComplete.bind(this));\n this.resumable.on('pause', this.onPause.bind(this));\n this.resumable.on('fileRetry', this.onFileRetry.bind(this));\n this.resumable.on('fileError', this.onFileError.bind(this));\n this.resumable.on('error', this.onError.bind(this));\n this.resumable.on('beforeCancel', this.onBeforeCancel.bind(this));\n this.resumable.on('cancel', this.onCancel.bind(this));\n this.resumable.on('dragstart', this.onDragStart.bind(this));\n };\n\n maxFilesErrorCallback = (files, errorCount) => {\n let maxFiles = maxNumberOfFilesForFileupload;\n let message = gettext('Please upload no more than {maxFiles} files at a time.');\n message = message.replace('{maxFiles}', maxFiles);\n toaster.danger(message);\n };\n\n maxFileSizeErrorCallback = (file) => {\n let { forbidUploadFileList } = this.state;\n forbidUploadFileList.push(file);\n this.setState({forbidUploadFileList: forbidUploadFileList});\n };\n\n onChunkingComplete = (resumableFile) => {\n\n let allFilesUploaded = this.state.allFilesUploaded;\n if (allFilesUploaded === true) {\n this.setState({allFilesUploaded: false});\n }\n\n //get parent_dir relative_path\n let path = this.props.path === '/' ? '/' : this.props.path + '/';\n let fileName = resumableFile.fileName;\n let relativePath = resumableFile.relativePath;\n let isFile = fileName === relativePath;\n\n //update formdata\n resumableFile.formData = {};\n if (isFile) { // upload file\n resumableFile.formData = {\n parent_dir: path,\n };\n } else { // upload folder\n let relative_path = relativePath.slice(0, relativePath.lastIndexOf('/') + 1);\n resumableFile.formData = {\n parent_dir: path,\n relative_path: relative_path\n };\n }\n };\n\n onFileAdded = (resumableFile, files) => {\n const { isCustomPermission } = this.props;\n let isFile = resumableFile.fileName === resumableFile.relativePath;\n // uploading is file and only upload one file\n if (isFile && files.length === 1) {\n let hasRepetition = false;\n if (!isCustomPermission) {\n let direntList = this.props.direntList;\n for (let i = 0; i < direntList.length; i++) {\n if (direntList[i].type === 'file' && direntList[i].name === resumableFile.fileName) {\n hasRepetition = true;\n break;\n }\n }\n }\n if (hasRepetition) {\n this.setState({\n isUploadRemindDialogShow: true,\n currentResumableFile: resumableFile,\n });\n } else {\n this.setUploadFileList(this.resumable.files);\n let { repoID, path } = this.props;\n seafileAPI.getFileServerUploadLink(repoID, path).then(res => {\n this.resumable.opts.target = res.data + '?ret-json=1';\n this.resumableUpload(resumableFile);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n } else {\n this.setUploadFileList(this.resumable.files);\n if (!this.isUploadLinkLoaded) {\n this.isUploadLinkLoaded = true;\n let { repoID, path } = this.props;\n seafileAPI.getFileServerUploadLink(repoID, path).then(res => {\n this.resumable.opts.target = res.data + '?ret-json=1';\n this.resumable.upload();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n }\n };\n\n resumableUpload = (resumableFile) => {\n let { repoID, path } = this.props;\n seafileAPI.getFileUploadedBytes(repoID, path, resumableFile.fileName).then(res => {\n let uploadedBytes = res.data.uploadedBytes;\n let blockSize = parseInt(resumableUploadFileBlockSize) * 1024 * 1024 || 1024 * 1024;\n let offset = Math.floor(uploadedBytes / blockSize);\n resumableFile.markChunksCompleted(offset);\n this.resumable.upload();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n filesAddedComplete = (resumable, files) => {\n let { forbidUploadFileList } = this.state;\n if (forbidUploadFileList.length > 0 && files.length === 0) {\n this.setState({\n isUploadProgressDialogShow: true,\n totalProgress: 100\n });\n }\n };\n\n setUploadFileList = () => {\n let uploadFileList = this.resumable.files;\n this.setState({\n uploadFileList: uploadFileList,\n isUploadProgressDialogShow: true,\n });\n Utils.registerGlobalVariable('uploader', 'isUploadProgressDialogShow', true);\n };\n\n onFileProgress = (resumableFile) => {\n let uploadBitrate = this.getBitrate();\n let uploadFileList = this.state.uploadFileList.map(item => {\n if (item.uniqueIdentifier === resumableFile.uniqueIdentifier) {\n if (uploadBitrate) {\n let lastSize = (item.size - (item.size * item.progress())) * 8;\n let time = Math.floor(lastSize / uploadBitrate);\n item.remainingTime = time;\n }\n }\n return item;\n });\n\n this.setState({\n uploadBitrate: uploadBitrate,\n uploadFileList: uploadFileList\n });\n };\n\n getBitrate = () => {\n let loaded = 0;\n let uploadBitrate = 0;\n let now = new Date().getTime();\n\n this.resumable.files.forEach(file => {\n loaded += file.progress() * file.size;\n });\n\n if (this.timestamp) {\n let timeDiff = (now - this.timestamp);\n if (timeDiff < this.bitrateInterval) {\n return this.state.uploadBitrate;\n }\n\n // 1. Cancel will produce loaded greater than this.loaded\n // 2. reset can make this.loaded to be 0\n if (loaded < this.loaded || this.loaded === 0) {\n this.loaded = loaded; //\n }\n\n uploadBitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8;\n }\n\n this.timestamp = now;\n this.loaded = loaded;\n\n return uploadBitrate;\n };\n\n onProgress = () => {\n let progress = Math.round(this.resumable.progress() * 100);\n this.setState({totalProgress: progress});\n Utils.registerGlobalVariable('uploader', 'totalProgress', progress);\n };\n\n onFileUploadSuccess = (resumableFile, message) => {\n let formData = resumableFile.formData;\n let currentTime = new Date().getTime()/1000;\n message = formData.replace ? message : JSON.parse(message)[0];\n if (formData.relative_path) { // upload folder\n let relative_path = formData.relative_path;\n let dir_name = relative_path.slice(0, relative_path.indexOf('/'));\n let dirent = {\n id: message.id,\n name: dir_name,\n type: 'dir',\n mtime: currentTime,\n };\n\n // update folders cache\n let isExist = this.notifiedFolders.some(item => {return item.name === dirent.name;});\n if (!isExist) {\n this.notifiedFolders.push(dirent);\n this.props.onFileUploadSuccess(dirent);\n }\n\n // update uploadFileList\n let uploadFileList = this.state.uploadFileList.map(item => {\n if (item.uniqueIdentifier === resumableFile.uniqueIdentifier) {\n item.newFileName = relative_path + message.name;\n item.isSaved = true;\n }\n return item;\n });\n this.setState({uploadFileList: uploadFileList});\n\n return;\n }\n\n if (formData.replace) { // upload file -- replace exist file\n let fileName = resumableFile.fileName;\n let dirent = {\n id: message,\n name: fileName,\n type: 'file',\n mtime: currentTime\n };\n this.props.onFileUploadSuccess(dirent); // this contance: just one file\n\n let uploadFileList = this.state.uploadFileList.map(item => {\n if (item.uniqueIdentifier === resumableFile.uniqueIdentifier) {\n item.newFileName = fileName;\n item.isSaved = true;\n }\n return item;\n });\n this.setState({uploadFileList: uploadFileList});\n\n return;\n }\n\n // upload file -- add files\n let dirent = {\n id: message.id,\n type: 'file',\n name: message.name,\n size: message.size,\n mtime: currentTime,\n };\n this.props.onFileUploadSuccess(dirent); // this contance: no repetition file\n\n let uploadFileList = this.state.uploadFileList.map(item => {\n if (item.uniqueIdentifier === resumableFile.uniqueIdentifier) {\n item.newFileName = message.name;\n item.isSaved = true;\n }\n return item;\n });\n this.setState({uploadFileList: uploadFileList});\n };\n\n getFileServerErrorMessage = (key) => {\n const errorMessage = {\n 'File locked by others.': gettext('File is locked by others.'), // 403\n 'Invalid filename.': gettext('Invalid filename.'), // 440\n 'File already exists.': gettext('File already exists.'), // 441\n 'File size is too large.': gettext('File size is too large.'), // 442\n 'Out of quota.': gettext('Out of quota.'), // 443\n 'Internal error.': gettext('Internal Server Error'), // 500\n };\n return errorMessage[key] || key;\n };\n\n onFileError = (resumableFile, message) => {\n let error = '';\n if (!message) {\n error = gettext('Network error');\n } else {\n // eg: '{\"error\": \"Internal error\" \\n }'\n let errorMessage = message.replace(/\\n/g, '');\n errorMessage = JSON.parse(errorMessage);\n error = this.getFileServerErrorMessage(errorMessage.error);\n }\n\n let uploadFileList = this.state.uploadFileList.map(item => {\n if (item.uniqueIdentifier === resumableFile.uniqueIdentifier) {\n this.state.retryFileList.push(item);\n item.error = error;\n }\n return item;\n });\n\n this.loaded = 0; // reset loaded data;\n this.setState({\n retryFileList: this.state.retryFileList,\n uploadFileList: uploadFileList\n });\n\n };\n\n onComplete = () => {\n this.notifiedFolders = [];\n // reset upload link loaded\n this.isUploadLinkLoaded = false;\n this.setState({allFilesUploaded: true});\n };\n\n onPause = () => {\n\n };\n\n onError = (message) => {\n // reset upload link loaded\n this.isUploadLinkLoaded = false;\n // After the error, the user can switch windows\n Utils.registerGlobalVariable('uploader', 'totalProgress', 100);\n };\n\n onFileRetry = () => {\n // todo, cancel upload file, uploded again;\n };\n\n onBeforeCancel = () => {\n // todo, giving a pop message ?\n };\n\n onCancel = () => {\n\n };\n\n setHeaders = (resumableFile, resumable) => {\n let offset = resumable.offset;\n let chunkSize = resumable.getOpt('chunkSize');\n let fileSize = resumableFile.size === 0 ? 1 : resumableFile.size;\n let startByte = offset !== 0 ? offset * chunkSize : 0;\n let endByte = Math.min(fileSize, (offset + 1) * chunkSize) - 1;\n\n if (fileSize - resumable.endByte < chunkSize && !resumable.getOpt('forceChunkSize')) {\n endByte = fileSize;\n }\n\n let headers = {\n 'Accept': 'application/json; text/javascript, */*; q=0.01',\n 'Content-Disposition': 'attachment; filename=\"' + encodeURI(resumableFile.fileName) + '\"',\n 'Content-Range': 'bytes ' + startByte + '-' + endByte + '/' + fileSize,\n };\n\n return headers;\n };\n\n setQuery = (resumableFile) => {\n let formData = resumableFile.formData;\n return formData;\n };\n\n generateUniqueIdentifier = (file) => {\n let relativePath = file.webkitRelativePath||file.relativePath||file.fileName||file.name;\n return MD5(relativePath + new Date()) + relativePath;\n };\n\n onClick = (e) => {\n e.nativeEvent.stopImmediatePropagation();\n e.stopPropagation();\n };\n\n onFileUpload = () => {\n this.uploadInput.current.removeAttribute('webkitdirectory');\n\n this.uploadInput.current.click();\n };\n\n onFolderUpload = () => {\n this.uploadInput.current.setAttribute('webkitdirectory', 'webkitdirectory');\n this.uploadInput.current.click();\n };\n\n onDragStart = () => {\n this.uploadInput.current.setAttribute('webkitdirectory', 'webkitdirectory');\n };\n\n onCloseUploadDialog = () => {\n this.loaded = 0;\n this.resumable.files = [];\n // reset upload link loaded\n this.isUploadLinkLoaded = false;\n this.setState({isUploadProgressDialogShow: false, uploadFileList: [], forbidUploadFileList: []});\n Utils.registerGlobalVariable('uploader', 'isUploadProgressDialogShow', false);\n };\n\n onUploadCancel = (uploadingItem) => {\n\n let uploadFileList = this.state.uploadFileList.filter(item => {\n if (item.uniqueIdentifier === uploadingItem.uniqueIdentifier) {\n item.cancel(); // execute cancel function will delete the file at the same time\n return false;\n }\n return true;\n });\n\n if (!this.resumable.isUploading()) {\n this.setState({\n totalProgress: '100',\n allFilesUploaded: true,\n });\n this.loaded = 0;\n }\n\n this.setState({uploadFileList: uploadFileList});\n };\n\n onCancelAllUploading = () => {\n let uploadFileList = this.state.uploadFileList.filter(item => {\n if (Math.round(item.progress() !== 1)) {\n item.cancel();\n return false;\n }\n return true;\n });\n\n this.loaded = 0;\n\n this.setState({\n allFilesUploaded: true,\n totalProgress: '100',\n uploadFileList: uploadFileList\n });\n // reset upload link loaded\n this.isUploadLinkLoaded = false;\n };\n\n onUploadRetry = (resumableFile) => {\n\n seafileAPI.getFileServerUploadLink(this.props.repoID, this.props.path).then(res => {\n this.resumable.opts.target = res.data + '?ret-json=1';\n\n let retryFileList = this.state.retryFileList.filter(item => {\n return item.uniqueIdentifier !== resumableFile.uniqueIdentifier;\n });\n let uploadFileList = this.state.uploadFileList.map(item => {\n if (item.uniqueIdentifier === resumableFile.uniqueIdentifier) {\n item.error = null;\n this.retryUploadFile(item);\n }\n return item;\n });\n\n this.setState({\n retryFileList: retryFileList,\n uploadFileList: uploadFileList\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onUploadRetryAll = () => {\n\n seafileAPI.getFileServerUploadLink(this.props.repoID, this.props.path).then(res => {\n this.resumable.opts.target = res.data + '?ret-json=1';\n this.state.retryFileList.forEach(item => {\n item.error = false;\n this.retryUploadFile(item);\n });\n\n let uploadFileList = this.state.uploadFileList.slice(0);\n this.setState({\n retryFileList: [],\n uploadFileList: uploadFileList\n });\n\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n retryUploadFile = (resumableFile) => {\n let { repoID, path } = this.props;\n let fileName = resumableFile.fileName;\n let isFile = resumableFile.fileName === resumableFile.relativePath;\n if (!isFile) {\n let relative_path = resumableFile.formData.relative_path;\n let prefix = path === '/' ? (path + relative_path) : (path + '/' + relative_path);\n fileName = prefix + fileName;\n }\n\n resumableFile.bootstrap();\n var firedRetry = false;\n resumableFile.resumableObj.on('chunkingComplete', () => {\n if(!firedRetry) {\n seafileAPI.getFileUploadedBytes(repoID, path, fileName).then(res => {\n let uploadedBytes = res.data.uploadedBytes;\n let blockSize = parseInt(resumableUploadFileBlockSize) * 1024 * 1024 || 1024 * 1024;\n let offset = Math.floor(uploadedBytes / blockSize);\n resumableFile.markChunksCompleted(offset);\n\n resumableFile.resumableObj.upload();\n\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n firedRetry = true;\n });\n\n };\n\n replaceRepetitionFile = () => {\n let { repoID, path } = this.props;\n seafileAPI.getUpdateLink(repoID, path).then(res => {\n this.resumable.opts.target = res.data;\n\n let resumableFile = this.resumable.files[this.resumable.files.length - 1];\n resumableFile.formData['replace'] = 1;\n resumableFile.formData['target_file'] = resumableFile.formData.parent_dir + resumableFile.fileName;\n this.setState({isUploadRemindDialogShow: false});\n this.setUploadFileList(this.resumable.files);\n this.resumable.upload();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n uploadFile = () => {\n let resumableFile = this.resumable.files[this.resumable.files.length - 1];\n let { repoID, path } = this.props;\n seafileAPI.getFileServerUploadLink(repoID, path).then((res) => { // get upload link\n this.resumable.opts.target = res.data + '?ret-json=1';\n this.setState({\n isUploadRemindDialogShow: false,\n isUploadProgressDialogShow: true,\n uploadFileList: [...this.state.uploadFileList, resumableFile]\n }, () => {\n this.resumable.upload();\n });\n Utils.registerGlobalVariable('uploader', 'isUploadProgressDialogShow', true);\n\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n cancelFileUpload = () => {\n this.resumable.files.pop(); //delete latest file;\n this.setState({isUploadRemindDialogShow: false});\n };\n\n render() {\n return (\n \n
    \n
    \n \n
    \n
    \n {this.state.isUploadRemindDialogShow &&\n \n }\n {this.state.isUploadProgressDialogShow &&\n \n }\n
    \n );\n }\n}\n\nFileUploader.propTypes = propTypes;\n\nexport default FileUploader;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n path: PropTypes.string.isRequired,\n deleteFolder: PropTypes.func.isRequired,\n toggleDialog: PropTypes.func.isRequired\n};\n\nclass DeleteFolderDialog extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n sharedToUserCount: 0,\n sharedToGroupCount: 0\n };\n }\n\n componentDidMount() {\n const { repoID, path } = this.props;\n seafileAPI.getRepoFolderShareInfo(repoID, path).then((res) => {\n this.setState({\n sharedToUserCount: res.data['shared_user_emails'].length,\n sharedToGroupCount: res.data['shared_group_ids'].length\n });\n });\n }\n\n deleteFolder = () => {\n this.props.deleteFolder();\n this.props.toggleDialog();\n };\n\n render() {\n const { sharedToUserCount, sharedToGroupCount } = this.state;\n const { path, toggleDialog } = this.props;\n const folderName = Utils.getFileName(path);\n const opTarget = '' + Utils.HTMLescape(folderName) + '';\n const message = gettext('Are you sure you want to delete %s ?').replace('%s', opTarget);\n\n let alert_message = '';\n if (sharedToUserCount > 0 || sharedToGroupCount > 0) {\n alert_message = gettext('This folder has been shared to {user_amount} user(s) and {group_amount} group(s).')\n .replace('{user_amount}', sharedToUserCount)\n .replace('{group_amount}', sharedToGroupCount);\n }\n\n return (\n \n {gettext('Delete Folder')}\n \n

    \n {alert_message &&

    {alert_message}

    }\n
    \n \n \n \n \n
    \n );\n }\n}\n\nDeleteFolderDialog.propTypes = propTypes;\n\nexport default DeleteFolderDialog;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport cookie from 'react-cookies';\nimport moment from 'moment';\nimport { navigate } from '@gatsbyjs/reach-router';\nimport { gettext, siteRoot, username, isDocs, enableVideoThumbnail } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport collabServer from '../../utils/collab-server';\nimport Dirent from '../../models/dirent';\nimport FileTag from '../../models/file-tag';\nimport RepoTag from '../../models/repo-tag';\nimport RepoInfo from '../../models/repo-info';\nimport TreeNode from '../../components/tree-view/tree-node';\nimport treeHelper from '../../components/tree-view/tree-helper';\nimport toaster from '../../components/toast';\nimport ModalPortal from '../../components/modal-portal';\nimport LibDecryptDialog from '../../components/dialog/lib-decrypt-dialog';\nimport LibContentToolbar from './lib-content-toolbar';\nimport LibContentContainer from './lib-content-container';\nimport FileUploader from '../../components/file-uploader/file-uploader';\nimport CopyMoveDirentProgressDialog from '../../components/dialog/copy-move-dirent-progress-dialog';\nimport DeleteFolderDialog from '../../components/dialog/delete-folder-dialog';\n\nconst propTypes = {\n pathPrefix: PropTypes.array.isRequired,\n onTabNavClick: PropTypes.func.isRequired,\n onMenuClick: PropTypes.func.isRequired,\n repoID: PropTypes.string,\n};\n\nclass LibContentView extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n currentMode: cookie.load('seafile_view_mode') || 'list',\n path: '',\n pathExist: true,\n isViewFile: false,\n hash: '',\n currentRepoInfo: null,\n repoName: '',\n repoEncrypted: false,\n libNeedDecrypt: false,\n isGroupOwnedRepo: false,\n userPerm: '',\n selectedDirentList: [],\n isDraft: false,\n hasDraft: false,\n fileTags: [],\n draftID: '',\n draftCounts: 0,\n usedRepoTags: [],\n isTreeDataLoading: true,\n treeData: treeHelper.buildTree(),\n currentNode: null,\n isFileLoading: true,\n isFileLoadedErr: false,\n filePermission: '',\n content: '',\n lastModified: '',\n latestContributor: '',\n isDirentListLoading: true,\n direntList: [],\n isDirentSelected: false,\n sortBy: cookie.load('seafile-repo-dir-sort-by') || 'name', // 'name' or 'time' or 'size'\n sortOrder: cookie.load('seafile-repo-dir-sort-order') || 'asc', // 'asc' or 'desc'\n isAllDirentSelected: false,\n dirID: '', // for update dir list\n errorMsg: '',\n isDirentDetailShow: false,\n direntDetailPanelTab: '',\n updateDetail: false,\n itemsShowLength: 100,\n isSessionExpired: false,\n isCopyMoveProgressDialogShow: false,\n isDeleteFolderDialogOpen: false,\n asyncCopyMoveTaskId: '',\n asyncOperationType: 'move',\n asyncOperationProgress: 0,\n asyncOperatedFilesLength: 0,\n };\n\n this.oldonpopstate = window.onpopstate;\n window.onpopstate = this.onpopstate;\n this.lastModifyTime = new Date();\n this.isNeedUpdateHistoryState = true; // Load, refresh page, switch mode for the first time, no need to set historyState\n this.currentMoveItemName = '';\n this.currentMoveItemPath = '';\n }\n\n showDirentDetail = (direntDetailPanelTab) => {\n if (direntDetailPanelTab) {\n this.setState({ direntDetailPanelTab: direntDetailPanelTab }, () => {\n this.setState({ isDirentDetailShow: true });\n });\n } else {\n this.setState({\n direntDetailPanelTab: '',\n isDirentDetailShow: true\n });\n }\n };\n\n toggleDirentDetail = () => {\n this.setState({\n direntDetailPanelTab: '',\n isDirentDetailShow: !this.state.isDirentDetailShow\n });\n };\n\n closeDirentDetail = () => {\n this.setState({\n isDirentDetailShow: false,\n direntDetailPanelTab: '',\n });\n };\n\n UNSAFE_componentWillMount() {\n const hash = window.location.hash;\n if (hash.slice(0, 1) === '#') {\n this.setState({hash: hash});\n }\n }\n\n async componentDidMount() {\n // eg: http://127.0.0.1:8000/library/repo_id/repo_name/**/**/\\\n let repoID = this.props.repoID;\n let location = window.location.href.split('#')[0];\n location = decodeURIComponent(location);\n let path = location.slice(location.indexOf(repoID) + repoID.length + 1); // get the string after repoID\n path = path.slice(path.indexOf('/')); // get current path\n // If the path isn't a root path and ends with '/', delete the ending '/'\n if (path.length > 1 && path[path.length - 1] === '/') {\n path = path.slice(0, path.length - 1);\n }\n\n try {\n const repoRes = await seafileAPI.getRepoInfo(repoID);\n const repoInfo = new RepoInfo(repoRes.data);\n const isGroupOwnedRepo = repoInfo.owner_email.indexOf('@seafile_group') > -1;\n\n this.setState({\n currentRepoInfo: repoInfo,\n });\n\n if (repoInfo.permission.startsWith('custom-')) {\n const permissionID = repoInfo.permission.split('-')[1];\n const permissionRes = await seafileAPI.getCustomPermission(repoID, permissionID);\n window.custom_permission = permissionRes.data.permission;\n }\n\n this.isNeedUpdateHistoryState = false;\n this.setState({\n repoName: repoInfo.repo_name,\n libNeedDecrypt: repoInfo.lib_need_decrypt,\n repoEncrypted: repoInfo.encrypted,\n isGroupOwnedRepo: isGroupOwnedRepo,\n path: path\n });\n\n if (!repoInfo.lib_need_decrypt) {\n this.loadDirData(path);\n }\n } catch (error) {\n if (error.response) {\n if (error.response.status == 403) {\n this.setState({\n isDirentListLoading: false,\n errorMsg: gettext('Permission denied')\n });\n\n let errorMsg = gettext('Permission denied');\n toaster.danger(errorMsg);\n } else if (error.response.status == 404) {\n this.setState({\n isDirentListLoading: false,\n errorMsg: gettext('Library share permission not found.')\n });\n } else {\n this.setState({\n isDirentListLoading: false,\n errorMsg: gettext('Error')\n });\n }\n } else {\n this.setState({\n isDirentListLoading: false,\n errorMsg: gettext('Please check the network.')\n });\n }\n }\n }\n\n componentWillUnmount() {\n window.onpopstate = this.oldonpopstate;\n collabServer.unwatchRepo(this.props.repoID, this.onRepoUpdateEvent);\n }\n\n componentDidUpdate() {\n this.lastModifyTime = new Date();\n }\n\n onpopstate = (event) => {\n if (event.state && event.state.key) { // root path\n if (this.state.path === '/') {\n return;\n } else {\n let path = '/';\n this.loadDirentList(path);\n this.setState({\n path: path,\n isViewFile: false\n });\n }\n } else if (event.state && event.state.path) { // file path\n let path = event.state.path;\n if (this.state.currentMode === 'column') {\n if (Utils.isMarkdownFile(path)) { // Judging not strict\n this.showFile(path);\n return;\n }\n }\n this.loadDirentList(path);\n this.setState({\n path: path,\n isViewFile: false\n });\n }\n };\n\n onRepoUpdateEvent = () => {\n let currentTime = new Date();\n if ((parseFloat(currentTime - this.lastModifyTime)/1000) <= 5) {\n return;\n }\n let repoID = this.props.repoID;\n let { path, dirID } = this.state;\n\n if (this.state.currentMode === 'column') {\n if (this.state.isViewFile) {\n this.updateColumnMarkdownData(path);\n } else {\n seafileAPI.dirMetaData(repoID, path).then((res) => {\n if (res.data.id !== dirID) {\n this.loadDirentList(path);\n }\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n } else {\n seafileAPI.dirMetaData(repoID, path).then((res) => {\n if (res.data.id !== dirID) {\n this.loadDirentList(path);\n }\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n };\n\n updateUsedRepoTags = () => {\n let repoID = this.props.repoID;\n seafileAPI.listRepoTags(repoID).then(res => {\n let usedRepoTags = [];\n res.data.repo_tags.forEach(item => {\n let usedRepoTag = new RepoTag(item);\n if (usedRepoTag.fileCount > 0) {\n usedRepoTags.push(usedRepoTag);\n }\n });\n this.setState({usedRepoTags: usedRepoTags});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n updateColumnMarkdownData = (filePath) => {\n let repoID = this.props.repoID;\n // update state\n this.setState({\n path: filePath,\n isViewFile: true\n });\n\n // update data\n seafileAPI.getFileInfo(repoID, filePath).then((res) => {\n let { mtime, permission, last_modifier_name, is_draft, has_draft, draft_id } = res.data;\n seafileAPI.getFileDownloadLink(repoID, filePath).then((res) => {\n seafileAPI.getFileContent(res.data).then((res) => {\n if (this.state.content !== res.data) {\n this.setState({isFileLoading: true});\n }\n this.setState({\n content: res.data,\n filePermission: permission,\n latestContributor: last_modifier_name,\n lastModified: moment.unix(mtime).fromNow(),\n isFileLoading: false,\n isFileLoadedErr: false,\n isDraft: is_draft,\n hasDraft: has_draft,\n draftID: draft_id\n });\n });\n });\n }).catch(() => {\n this.setState({\n isFileLoading: false,\n isFileLoadedErr: true,\n });\n });\n };\n\n // load data\n loadDirData = (path) => {\n let repoID = this.props.repoID;\n\n // listen current repo\n collabServer.watchRepo(repoID, this.onRepoUpdateEvent);\n\n // list used FileTags\n this.updateUsedRepoTags();\n\n // list draft counts and review counts\n if (isDocs) {\n seafileAPI.getRepoDraftCounts(repoID).then(res => {\n this.setState({\n draftCounts: res.data.draft_counts,\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n\n if (Utils.isMarkdownFile(path)) {\n seafileAPI.getFileInfo(this.props.repoID, path).then(() => {\n if (this.state.currentMode !== 'column') {\n cookie.save('seafile_view_mode', 'column');\n this.setState({currentMode: 'column'});\n }\n this.loadSidePanel(path);\n this.showFile(path);\n }).catch(() => {\n if (this.state.currentMode === 'column') { // After an error occurs, follow dir\n this.loadSidePanel(path);\n this.showDir(path);\n } else {\n this.showDir(path);\n }\n });\n } else {\n if (this.state.currentMode === 'column') {\n this.loadSidePanel(path);\n this.showDir(path);\n } else {\n this.showDir(path);\n }\n }\n };\n\n loadSidePanel = (path) => {\n let repoID = this.props.repoID;\n if (path === '/') {\n seafileAPI.listDir(repoID, '/').then(res => {\n const { dirent_list, user_perm } = res.data;\n let tree = this.state.treeData;\n this.addResponseListToNode(dirent_list, tree.root);\n this.setState({\n isTreeDataLoading: false,\n treeData: tree,\n userPerm: user_perm,\n });\n }).catch(() => {\n this.setState({isTreeDataLoading: false});\n });\n } else {\n this.loadNodeAndParentsByPath(path);\n }\n };\n\n showDir = (path) => {\n let repoID = this.props.repoID;\n\n if (!this.state.isSessionExpired) {\n // update stste\n this.setState({\n isDirentListLoading: true,\n isViewFile: false,\n selectedDirentList: [],\n });\n }\n\n // update data\n this.loadDirentList(path);\n this.resetShowLength();\n\n if (!this.isNeedUpdateHistoryState) {\n this.isNeedUpdateHistoryState = true;\n return;\n }\n // update location\n let repoInfo = this.state.currentRepoInfo;\n let url = siteRoot + 'library/' + repoID + '/' + encodeURIComponent(repoInfo.repo_name) + Utils.encodePath(path);\n window.history.pushState({url: url, path: path}, path, url);\n };\n\n showFile = (filePath) => {\n let repoID = this.props.repoID;\n\n if (this.state.currentMode === 'column') {\n seafileAPI.listFileTags(repoID, filePath).then(res => {\n let fileTags = res.data.file_tags.map(item => {\n return new FileTag(item);\n });\n this.setState({fileTags: fileTags});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n\n // update state\n this.setState({\n isFileLoading: true,\n path: filePath,\n isViewFile: true\n });\n\n // update data\n seafileAPI.getFileInfo(repoID, filePath).then((res) => {\n let { mtime, permission, last_modifier_name, is_draft, has_draft, draft_id } = res.data;\n seafileAPI.getFileDownloadLink(repoID, filePath).then((res) => {\n seafileAPI.getFileContent(res.data).then((res) => {\n this.setState({\n content: res.data,\n filePermission: permission,\n latestContributor: last_modifier_name,\n lastModified: moment.unix(mtime).fromNow(),\n isFileLoading: false,\n isFileLoadedErr: false,\n isDraft: is_draft,\n hasDraft: has_draft,\n draftID: draft_id\n });\n });\n });\n }).catch((err) => {\n let errMsg = Utils.getErrorMsg(err, true);\n if (!err.response || err.response.status !== 403) {\n toaster.danger(errMsg);\n }\n this.setState({\n isFileLoading: false,\n isFileLoadedErr: true,\n });\n });\n\n // update location\n let repoInfo = this.state.currentRepoInfo;\n let url = siteRoot + 'library/' + repoID + '/' + encodeURIComponent(repoInfo.repo_name) + Utils.encodePath(filePath);\n window.history.pushState({url: url, path: filePath}, filePath, url);\n };\n\n loadDirentList = (path) => {\n let repoID = this.props.repoID;\n seafileAPI.listDir(repoID, path, {'with_thumbnail': true}).then(res => {\n let direntList = [];\n res.data.dirent_list.forEach(item => {\n let dirent = new Dirent(item);\n direntList.push(dirent);\n });\n\n this.setState({\n pathExist: true,\n userPerm: res.data.user_perm,\n isDirentListLoading: false,\n direntList: Utils.sortDirents(direntList, this.state.sortBy, this.state.sortOrder),\n dirID: res.data.dir_id,\n path: path,\n isSessionExpired: false,\n });\n\n if (!this.state.repoEncrypted && direntList.length) {\n this.getThumbnails(repoID, path, this.state.direntList);\n }\n\n if (this.state.currentRepoInfo.is_admin) {\n if (this.foldersSharedOut) {\n this.identifyFoldersSharedOut();\n } else {\n this.foldersSharedOut = [];\n seafileAPI.getAllRepoFolderShareInfo(repoID).then(res => {\n res.data.share_info_list.forEach(item => {\n if (this.foldersSharedOut.indexOf(item.path) === -1) {\n this.foldersSharedOut.push(item.path);\n }\n });\n this.identifyFoldersSharedOut();\n });\n }\n }\n }).catch((err) => {\n Utils.getErrorMsg(err, true);\n if (err.response && err.response.status === 403) {\n this.setState({isDirentListLoading: false});\n return;\n }\n this.setState({\n isDirentListLoading: false,\n pathExist: false,\n });\n });\n };\n\n identifyFoldersSharedOut = () => {\n const { path, direntList } = this.state;\n if (this.foldersSharedOut.length == 0) {\n return;\n }\n direntList.forEach(dirent => {\n if (dirent.type == 'dir' && this.foldersSharedOut.indexOf(Utils.joinPath(path, dirent.name) + '/') !== -1) {\n dirent.has_been_shared_out = true;\n }\n });\n this.setState({\n direntList: direntList\n });\n };\n\n onListContainerScroll = () => {\n let itemsShowLength = this.state.itemsShowLength + 100;\n this.setState({itemsShowLength: itemsShowLength});\n };\n\n resetShowLength = () => {\n this.setState({itemsShowLength: 100});\n };\n\n getThumbnails = (repoID, path, direntList) => {\n let items = direntList.filter((item) => {\n return (Utils.imageCheck(item.name) || (enableVideoThumbnail && Utils.videoCheck(item.name))) && !item.encoded_thumbnail_src;\n });\n if (items.length == 0) {\n return ;\n }\n\n const _this = this;\n const len = items.length;\n const thumbnailSize = 48;\n let getThumbnail = (i) => {\n const curItem = items[i];\n const curItemPath = [path, curItem.name].join('/');\n seafileAPI.createThumbnail(repoID, curItemPath, thumbnailSize).then((res) => {\n curItem.encoded_thumbnail_src = res.data.encoded_thumbnail_src;\n }).catch((error) => {\n // do nothing\n }).then(() => {\n if (i < len - 1) {\n getThumbnail(++i);\n } else {\n _this.setState({\n direntList: direntList\n });\n }\n });\n };\n getThumbnail(0);\n };\n\n updateMoveCopyTreeNode = (path) => {\n let repoID = this.props.repoID;\n\n let tree = this.state.treeData.clone();\n let node = tree.getNodeByPath(path);\n\n // for node not loaded, such as a deep folder '/vv/aa'\n if (!node) { // node: null\n return false;\n }\n\n let nodeChildren = node.children.map(item => item.object);\n let nodeChildrenNames = nodeChildren.map(item => item.name);\n\n seafileAPI.listDir(repoID, path).then(res => {\n let newDirentList = res.data.dirent_list;\n let newAddedDirents = newDirentList.filter(item => {\n return !nodeChildrenNames.includes(item.name);\n });\n newAddedDirents.forEach(item => {\n this.addNodeToTree(item.name, path, item.type);\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n async getAsyncCopyMoveProgress() {\n let { asyncOperationType, asyncCopyMoveTaskId } = this.state;\n try {\n let res = await seafileAPI.queryAsyncOperationProgress(asyncCopyMoveTaskId);\n let data = res.data;\n if (data.failed) {\n let message = gettext('Failed to move files to another library.');\n if (asyncOperationType === 'copy') {\n message = gettext('Failed to copy files to another library.');\n }\n toaster.danger(message);\n this.setState({\n asyncOperationProgress: 0,\n isCopyMoveProgressDialogShow: false,\n });\n return;\n }\n\n if (data.successful) {\n if (asyncOperationType === 'move') {\n if (this.currentMoveItemName && this.currentMoveItemPath) {\n if (this.state.currentMode === 'column') {\n this.deleteTreeNode(this.currentMoveItemPath);\n }\n this.moveDirent(this.currentMoveItemName);\n this.currentMoveItemName = '';\n this.currentMoveItemPath = '';\n } else {\n if (this.state.currentMode === 'column') {\n let direntPaths = this.getSelectedDirentPaths();\n this.deleteTreeNodes(direntPaths);\n }\n let direntNames = this.getSelectedDirentNames();\n this.moveDirents(direntNames);\n }\n }\n\n this.setState({isCopyMoveProgressDialogShow: false});\n let message = gettext('Successfully moved files to another library.');\n if (asyncOperationType === 'copy') {\n message = gettext('Successfully copied files to another library.');\n }\n toaster.success(message);\n return;\n }\n // init state: total is 0\n let asyncOperationProgress = !data.total ? 0 : parseInt((data.done/data.total * 100).toFixed(2));\n\n this.getAsyncCopyMoveProgress();\n this.setState({asyncOperationProgress: asyncOperationProgress});\n } catch (error) {\n this.setState({\n asyncOperationProgress: 0,\n isCopyMoveProgressDialogShow: false,\n });\n }\n }\n\n cancelCopyMoveDirent = () => {\n let taskId = this.state.asyncCopyMoveTaskId;\n seafileAPI.cancelCopyMoveOperation(taskId);\n\n this.currentMoveItemName = '';\n this.currentMoveItemPath = '';\n let direntList = this.state.direntList;\n this.setState({direntList: direntList.slice(0)});\n };\n\n onMoveProgressDialogToggle = () => {\n let { asyncOperationProgress } = this.state;\n if (asyncOperationProgress !== 100) {\n this.cancelCopyMoveDirent();\n }\n\n this.setState({\n asyncOperationProgress: 0,\n isCopyMoveProgressDialogShow: false,\n });\n };\n\n // toolbar operations\n onMoveItems = (destRepo, destDirentPath) => {\n let repoID = this.props.repoID;\n let selectedDirentList = this.state.selectedDirentList;\n if (repoID !== destRepo.repo_id) {\n this.setState(() => ({\n asyncOperatedFilesLength: selectedDirentList.length,\n asyncOperationProgress: 0,\n asyncOperationType: 'move',\n isCopyMoveProgressDialogShow: true\n }));\n }\n\n let dirNames = this.getSelectedDirentNames();\n let direntPaths = this.getSelectedDirentPaths();\n seafileAPI.moveDir(repoID, destRepo.repo_id, destDirentPath, this.state.path, dirNames).then(res => {\n if (repoID !== destRepo.repo_id) {\n this.setState({\n asyncCopyMoveTaskId: res.data.task_id,\n }, () => {\n // After moving successfully, delete related files\n this.getAsyncCopyMoveProgress();\n });\n }\n\n if (repoID === destRepo.repo_id) {\n if (this.state.currentMode === 'column') {\n this.deleteTreeNodes(direntPaths);\n }\n\n this.moveDirents(dirNames);\n\n // 2. tow columns mode need update left tree\n if (this.state.currentMode === 'column') {\n this.updateMoveCopyTreeNode(destDirentPath);\n }\n\n // show tip message if move to current repo\n let message = Utils.getMoveSuccessMessage(dirNames);\n toaster.success(message);\n }\n\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n if (errMessage === gettext('Error')) {\n errMessage = Utils.getMoveFailedMessage(dirNames);\n }\n this.setState({\n asyncOperationProgress: 0,\n isCopyMoveProgressDialogShow: false,\n });\n toaster.danger(errMessage);\n });\n };\n\n onCopyItems = (destRepo, destDirentPath) => {\n let repoID = this.props.repoID;\n let selectedDirentList = this.state.selectedDirentList;\n\n if (repoID !== destRepo.repo_id) {\n this.setState({\n asyncOperatedFilesLength: selectedDirentList.length,\n asyncOperationProgress: 0,\n asyncOperationType: 'copy',\n isCopyMoveProgressDialogShow: true\n });\n }\n\n let dirNames = this.getSelectedDirentNames();\n seafileAPI.copyDir(repoID, destRepo.repo_id, destDirentPath, this.state.path, dirNames).then(res => {\n if (repoID !== destRepo.repo_id) {\n this.setState({\n asyncCopyMoveTaskId: res.data.task_id,\n }, () => {\n this.getAsyncCopyMoveProgress();\n });\n }\n\n if (repoID === destRepo.repo_id) {\n if (this.state.currentMode === 'column') {\n this.updateMoveCopyTreeNode(destDirentPath);\n }\n\n if (destDirentPath === this.state.path) {\n this.loadDirentList(this.state.path);\n }\n\n // show tip message if copy to current repo\n let message = Utils.getCopySuccessfulMessage(dirNames);\n toaster.success(message);\n }\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n if (errMessage === gettext('Error')) {\n errMessage = Utils.getCopyFailedMessage(dirNames);\n }\n toaster.danger(errMessage);\n });\n };\n\n restoreDeletedDirents = (commitID, paths, e) => {\n const { repoID } = this.props;\n e.preventDefault();\n toaster.closeAll();\n seafileAPI.restoreDirents(repoID, commitID, paths).then(res => {\n const { success, failed } = res.data;\n success.forEach(dirent => {\n let name = Utils.getFileName(dirent.path);\n let parentPath = Utils.getDirName(dirent.path);\n if (!dirent.is_dir) {\n if (this.state.currentMode === 'column') {\n this.addNodeToTree(name, parentPath, 'file');\n }\n if (parentPath === this.state.path && !this.state.isViewFile) {\n this.addDirent(name, 'file');\n }\n } else {\n if (this.state.currentMode === 'column') {\n this.addNodeToTree(name, parentPath, 'dir');\n }\n if (parentPath === this.state.path && !this.state.isViewFile) {\n this.addDirent(name, 'dir');\n }\n }\n });\n\n if (success.length) {\n let msg = success.length > 1 ? gettext('Restored {name} and {n} other items') :\n gettext('Restored {name}');\n msg = msg.replace('{name}', success[0].path.split('/').pop())\n .replace('{n}', success.length - 1);\n toaster.success(msg);\n }\n\n if (failed.length) {\n let msg = failed.length > 1 ? gettext('Failed to restore {name} and {n} other items') :\n gettext('Failed to restore {name}');\n msg = msg.replace('{name}', failed[0].path.split('/').pop())\n .replace('{n}', failed.length - 1);\n toaster.danger(msg);\n }\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onDeleteItems = () => {\n let repoID = this.props.repoID;\n let direntPaths = this.getSelectedDirentPaths();\n let dirNames = this.getSelectedDirentNames();\n\n this.setState({updateDetail: !this.state.updateDetail});\n seafileAPI.deleteMutipleDirents(repoID, this.state.path, dirNames).then(res => {\n if (this.state.currentMode === 'column') {\n this.deleteTreeNodes(direntPaths);\n }\n\n this.deleteDirents(dirNames);\n\n let msg = '';\n if (direntPaths.length > 1) {\n msg = gettext('Successfully deleted {name} and {n} other items.');\n msg = msg.replace('{name}', dirNames[0]);\n msg = msg.replace('{n}', dirNames.length - 1);\n } else {\n msg = gettext('Successfully deleted {name}.');\n msg = msg.replace('{name}', dirNames[0]);\n }\n const successTipWithUndo = (\n <>\n {msg}\n {gettext('Undo')}\n \n );\n toaster.success(successTipWithUndo, {duration: 5});\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n if (errMessage === gettext('Error')) {\n errMessage = gettext('Failed to delete {name} and {n} other items.');\n errMessage = errMessage.replace('{name}', dirNames[0]);\n errMessage = errMessage.replace('{n}', dirNames.length - 1);\n }\n toaster.danger(errMessage);\n });\n };\n\n onAddFolder = (dirPath) => {\n let repoID = this.props.repoID;\n seafileAPI.createDir(repoID, dirPath).then(() => {\n let name = Utils.getFileName(dirPath);\n let parentPath = Utils.getDirName(dirPath);\n\n if (this.state.currentMode === 'column') {\n this.addNodeToTree(name, parentPath, 'dir');\n }\n\n if (parentPath === this.state.path && !this.state.isViewFile) {\n this.addDirent(name, 'dir');\n }\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onAddFile = (filePath, isMarkdownDraft, isSdocDraft) => {\n let repoID = this.props.repoID;\n seafileAPI.createFile(repoID, filePath, isMarkdownDraft).then(res => {\n let name = Utils.getFileName(filePath);\n let parentPath = Utils.getDirName(filePath);\n if (this.state.currentMode === 'column') {\n this.addNodeToTree(name, parentPath, 'file');\n }\n if (parentPath === this.state.path && !this.state.isViewFile) {\n if (isSdocDraft) { // the new file is marked to be draft\n seafileAPI.sdocMarkAsDraft(repoID, filePath).then((res) => {\n this.addDirent(name, 'file', res.data.size, isSdocDraft);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n this.addDirent(name, 'file', res.data.size);\n });\n return;\n }\n\n this.addDirent(name, 'file', res.data.size);\n }\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n switchViewMode = (mode) => {\n if (mode === this.state.currentMode) {\n return;\n }\n if (mode === 'detail') {\n this.toggleDirentDetail();\n return;\n }\n cookie.save('seafile_view_mode', mode);\n let path = this.state.path;\n if (this.state.currentMode === 'column' && this.state.isViewFile) {\n path = Utils.getDirName(path);\n this.setState({\n path: path,\n isViewFile: false,\n });\n let repoInfo = this.state.currentRepoInfo;\n\n let url = siteRoot + 'library/' + repoInfo.repo_id + '/' + encodeURIComponent(repoInfo.repo_name) + Utils.encodePath(path);\n window.history.pushState({url: url, path: path}, path, url);\n }\n\n if (mode === 'column') {\n this.loadSidePanel(this.state.path);\n }\n this.isNeedUpdateHistoryState = false;\n this.setState({currentMode: mode});\n this.showDir(path);\n };\n\n onSearchedClick = (item) => {\n let path = item.is_dir ? item.path.slice(0, item.path.length - 1) : item.path;\n if (this.state.currentPath === path) {\n return;\n }\n if (this.state.currentMode === 'column') {\n // load sidePanel\n let index = -1;\n let paths = Utils.getPaths(path);\n for (let i = 0; i < paths.length; i++) {\n // eslint-disable-next-line\n let node = this.state.treeData.getNodeByPath(node);\n if (!node) {\n index = i;\n break;\n }\n }\n if (index === -1) { // all the data has been loaded already.\n let node = this.state.treeData.getNodeByPath(path);\n this.setState({currentNode: node});\n } else {\n this.loadNodeAndParentsByPath(path);\n }\n\n // load mainPanel\n if (item.is_dir) {\n this.showDir(path);\n } else {\n if (Utils.isMarkdownFile(path)) {\n this.showFile(path);\n } else {\n let url = siteRoot + 'lib/' + item.repo_id + '/file' + Utils.encodePath(path);\n let isWeChat = Utils.isWeChat();\n if (!isWeChat) {\n let newWindow = window.open('about:blank');\n newWindow.location.href = url;\n } else {\n location.href = url;\n }\n }\n }\n } else {\n if (item.is_dir) {\n this.showDir(path);\n } else {\n let url = siteRoot + 'lib/' + item.repo_id + '/file' + Utils.encodePath(path);\n let isWeChat = Utils.isWeChat();\n if (!isWeChat) {\n let newWindow = window.open('about:blank');\n newWindow.location.href = url;\n } else {\n location.href = url;\n }\n }\n }\n };\n\n onMainNavBarClick = (nodePath) => {\n //just for dir\n this.resetSelected();\n if (this.state.currentMode === 'column') {\n let tree = this.state.treeData.clone();\n let node = tree.getNodeByPath(nodePath);\n tree.expandNode(node);\n this.setState({treeData: tree, currentNode: node});\n }\n\n this.showDir(nodePath);\n };\n\n onLinkClick = (link) => {\n const url = link;\n let repoID = this.props.repoID;\n if (Utils.isInternalMarkdownLink(url, repoID)) {\n let path = Utils.getPathFromInternalMarkdownLink(url, repoID);\n this.showFile(path);\n } else if (Utils.isInternalDirLink(url, repoID)) {\n let path = Utils.getPathFromInternalDirLink(url, repoID);\n this.showDir(path);\n } else {\n window.open(url);\n }\n };\n\n // list&tree operations\n onMainPanelItemRename = (dirent, newName) => {\n let path = Utils.joinPath(this.state.path, dirent.name);\n this.renameItem(path, dirent.isDir(), newName);\n };\n\n onMainPanelItemDelete = (dirent) => {\n let path = Utils.joinPath(this.state.path, dirent.name);\n this.deleteItem(path, dirent.isDir());\n };\n\n onRenameTreeNode = (node, newName) => {\n this.renameItem(node.path, node.object.isDir(), newName);\n };\n\n onDeleteTreeNode = (node) => {\n this.deleteItem(node.path, node.object.isDir());\n };\n\n renameItem = (path, isDir, newName) => {\n let repoID = this.props.repoID;\n if (isDir) {\n seafileAPI.renameDir(repoID, path, newName).then(() => {\n this.renameItemAjaxCallback(path, newName);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n if (errMessage === gettext('Error')) {\n let name = Utils.getFileName(path);\n errMessage = gettext('Renaming {name} failed').replace('{name}', name);\n }\n toaster.danger(errMessage);\n });\n } else {\n seafileAPI.renameFile(repoID, path, newName).then(() => {\n this.renameItemAjaxCallback(path, newName);\n }).catch((error) => {\n let errMessage = '';\n if (error.response.status == 403 && error.response.data && error.response.data['error_msg']) {\n errMessage = error.response.data['error_msg'];\n } else {\n errMessage = Utils.getErrorMsg(error);\n }\n if (errMessage === gettext('Error')) {\n let name = Utils.getFileName(path);\n errMessage = gettext('Renaming {name} failed').replace('{name}', name);\n }\n toaster.danger(errMessage);\n });\n }\n };\n\n renameItemAjaxCallback(path, newName) {\n if (this.state.currentMode === 'column') {\n this.renameTreeNode(path, newName);\n }\n this.renameDirent(path, newName);\n }\n\n toggleDeleteFolderDialog = () => {\n this.setState({isDeleteFolderDialogOpen: !this.state.isDeleteFolderDialogOpen});\n };\n\n deleteFolder = () => {\n const { repoID } = this.props;\n const { folderToDelete: path } = this.state;\n seafileAPI.deleteDir(repoID, path).then((res) => {\n this.deleteItemAjaxCallback(path, true);\n let name = Utils.getFileName(path);\n var msg = gettext('Successfully deleted {name}').replace('{name}', name);\n const successTipWithUndo = (\n <>\n {msg}\n {gettext('Undo')}\n \n );\n toaster.success(successTipWithUndo, {duration: 5});\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n if (errMessage === gettext('Error')) {\n let name = Utils.getFileName(path);\n errMessage = gettext('Failed to delete {name}').replace('{name}', name);\n }\n toaster.danger(errMessage);\n });\n };\n\n deleteItem(path, isDir) {\n let repoID = this.props.repoID;\n if (isDir) {\n this.setState({ folderToDelete: path }, () => {\n this.toggleDeleteFolderDialog();\n });\n } else {\n seafileAPI.deleteFile(repoID, path).then((res) => {\n this.deleteItemAjaxCallback(path, isDir);\n let name = Utils.getFileName(path);\n var msg = gettext('Successfully deleted {name}').replace('{name}', name);\n const successTipWithUndo = (\n <>\n {msg}\n {gettext('Undo')}\n \n );\n toaster.success(successTipWithUndo, {duration: 5});\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n if (errMessage === gettext('Error')) {\n let name = Utils.getFileName(path);\n errMessage = gettext('Failed to delete {name}').replace('{name}', name);\n }\n toaster.danger(errMessage);\n });\n }\n }\n\n deleteItemAjaxCallback(path) {\n if (this.state.currentMode === 'column') {\n this.deleteTreeNode(path);\n }\n this.deleteDirent(path);\n }\n\n // list operations\n onMoveItem = (destRepo, dirent, moveToDirentPath, nodeParentPath) => {\n let repoID = this.props.repoID;\n //just for view list state\n let dirName = dirent.name;\n if (!nodeParentPath) {\n nodeParentPath = this.state.path;\n }\n let direntPath = Utils.joinPath(nodeParentPath, dirName);\n\n if (repoID !== destRepo.repo_id) {\n this.setState({\n asyncOperatedFilesLength: 1,\n asyncOperationProgress: 0,\n asyncOperationType: 'move',\n isCopyMoveProgressDialogShow: true,\n });\n }\n\n seafileAPI.moveDir(repoID, destRepo.repo_id, moveToDirentPath, nodeParentPath, dirName).then(res => {\n if (repoID !== destRepo.repo_id) {\n this.setState({asyncCopyMoveTaskId: res.data.task_id}, () => {\n this.currentMoveItemName = dirName;\n this.currentMoveItemPath = direntPath;\n this.getAsyncCopyMoveProgress(dirName, direntPath);\n });\n }\n\n if (this.state.currentMode === 'column') {\n this.deleteTreeNode(direntPath);\n }\n\n // 1. move to current repo\n // 2. tow columns mode need update left tree\n if (repoID === destRepo.repo_id && this.state.currentMode === 'column') {\n this.updateMoveCopyTreeNode(moveToDirentPath);\n }\n\n this.moveDirent(direntPath, moveToDirentPath);\n\n // show tip message if move to current repo\n if (repoID === destRepo.repo_id) {\n let message = gettext('Successfully moved {name}.');\n message = message.replace('{name}', dirName);\n toaster.success(message);\n }\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n if (errMessage === gettext('Error')) {\n errMessage = gettext('Failed to move {name}.');\n errMessage = errMessage.replace('{name}', dirName);\n }\n toaster.danger(errMessage);\n });\n };\n\n onCopyItem = (destRepo, dirent, copyToDirentPath, nodeParentPath) => {\n let repoID = this.props.repoID;\n //just for view list state\n let dirName = dirent.name;\n if (!nodeParentPath) {\n nodeParentPath = this.state.path;\n }\n\n if (repoID !== destRepo.repo_id) {\n this.setState({\n asyncOperatedFilesLength: 1,\n asyncOperationProgress: 0,\n asyncOperationType: 'copy',\n isCopyMoveProgressDialogShow: true\n });\n }\n\n seafileAPI.copyDir(repoID, destRepo.repo_id, copyToDirentPath, nodeParentPath, dirName).then(res => {\n\n if (repoID !== destRepo.repo_id) {\n this.setState({\n asyncCopyMoveTaskId: res.data.task_id,\n }, () => {\n this.getAsyncCopyMoveProgress();\n });\n }\n\n if (repoID === destRepo.repo_id) {\n if (this.state.currentMode === 'column') {\n this.updateMoveCopyTreeNode(copyToDirentPath);\n }\n\n if (copyToDirentPath === nodeParentPath) {\n this.loadDirentList(this.state.path);\n }\n\n let message = gettext('Successfully copied %(name)s.');\n message = message.replace('%(name)s', dirName);\n toaster.success(message);\n }\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n if (errMessage === gettext('Error')) {\n errMessage = gettext('Failed to copy %(name)s');\n errMessage = errMessage.replace('%(name)s', dirName);\n }\n toaster.danger(errMessage);\n });\n };\n\n onConvertItem = (dirent, dstType) => {\n let path = Utils.joinPath(this.state.path, dirent.name);\n let repoID = this.props.repoID;\n toaster.notifyInProgress(gettext('Converting, please wait...'));\n seafileAPI.convertFile(repoID, path, dstType).then((res) => {\n let newFileName = res.data.obj_name;\n let parentDir = res.data.parent_dir;\n let new_path = parentDir + '/' + newFileName;\n let parentPath = Utils.getDirName(new_path);\n\n if (this.state.currentMode === 'column') {\n this.addNodeToTree(newFileName, parentPath, 'file');\n }\n\n this.addDirent(newFileName, 'file', res.data.size);\n let message = gettext('Successfully converted the file.');\n toaster.success(message);\n\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n if (errMessage === gettext('Error')) {\n let name = Utils.getFileName(path);\n errMessage = gettext('Failed to convert {name}.').replace('{name}', name);\n }\n toaster.danger(errMessage);\n });\n\n };\n\n onDirentClick = (dirent) => {\n let direntList = this.state.direntList.map(dirent => {\n dirent.isSelected = false;\n return dirent;\n });\n if (dirent) {\n // dirent.isSelected = true;\n this.setState({\n direntList: direntList,\n isDirentSelected: true,\n selectedDirentList: [dirent],\n });\n } else {\n this.setState({\n direntList: direntList,\n isDirentSelected: false,\n selectedDirentList: [],\n });\n }\n };\n\n onItemClick = (dirent) => {\n this.resetSelected();\n let repoID = this.props.repoID;\n let direntPath = Utils.joinPath(this.state.path, dirent.name);\n if (dirent.isDir()) { // is dir\n if (this.state.currentMode === 'column') {\n this.loadTreeNodeByPath(direntPath);\n }\n this.showDir(direntPath);\n } else { // is file\n if (this.state.currentMode === 'column' && Utils.isMarkdownFile(direntPath)) {\n this.showColumnMarkdownFile(direntPath);\n } else {\n let url = siteRoot + 'lib/' + repoID + '/file' + Utils.encodePath(direntPath);\n if (dirent.is_sdoc_revision && dirent.revision_id) {\n url = siteRoot + 'lib/' + repoID + '/revisions/' + dirent.revision_id + '/';\n }\n\n let isWeChat = Utils.isWeChat();\n if (!isWeChat) {\n window.open(url);\n } else {\n location.href = url;\n }\n }\n }\n };\n\n onDirentSelected = (dirent) => {\n let direntList = this.state.direntList.map(item => {\n if (item.name === dirent.name) {\n item.isSelected = !item.isSelected;\n }\n return item;\n });\n let selectedDirentList = direntList.filter(item => {\n return item.isSelected;\n });\n\n if (selectedDirentList.length) {\n this.setState({isDirentSelected: true});\n if (selectedDirentList.length === direntList.length) {\n this.setState({\n isAllDirentSelected: true,\n direntList: direntList,\n selectedDirentList: selectedDirentList,\n });\n } else {\n this.setState({\n isAllDirentSelected: false,\n direntList: direntList,\n selectedDirentList: selectedDirentList\n });\n }\n } else {\n this.setState({\n isDirentSelected: false,\n isAllDirentSelected: false,\n direntList: direntList,\n selectedDirentList: []\n });\n }\n };\n\n onAllDirentSelected = () => {\n if (this.state.isAllDirentSelected) {\n let direntList = this.state.direntList.map(item => {\n item.isSelected = false;\n return item;\n });\n this.setState({\n isDirentSelected: false,\n isAllDirentSelected: false,\n direntList: direntList,\n selectedDirentList: [],\n });\n } else {\n let direntList = this.state.direntList.map(item => {\n item.isSelected = true;\n return item;\n });\n this.setState({\n isDirentSelected: true,\n isAllDirentSelected: true,\n direntList: direntList,\n selectedDirentList: direntList,\n });\n }\n };\n\n onFileTagChanged = (dirent, direntPath) => {\n let repoID = this.props.repoID;\n seafileAPI.listFileTags(repoID, direntPath).then(res => {\n let fileTags = res.data.file_tags.map(item => {\n return new FileTag(item);\n });\n\n if (this.state.isViewFile) {\n this.setState({fileTags: fileTags});\n } else {\n this.updateDirent(dirent, 'file_tags', fileTags);\n }\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n\n this.updateUsedRepoTags();\n };\n\n onFileUploadSuccess = (direntObject) => {\n let isExist = this.state.direntList.some(item => {\n return item.name === direntObject.name && item.type === direntObject.type;\n });\n if (isExist) {\n let direntList = this.state.direntList;\n for (let i = 0; i < direntList.length; i++) {\n let dirent = direntList[i];\n if (dirent.name === direntObject.name && dirent.type === direntObject.type) {\n let mtime = moment.unix(direntObject.mtime).fromNow();\n this.updateDirent(dirent, 'mtime', mtime); // todo file size is need update too, api is not return;\n break;\n }\n }\n } else {\n // use current dirent parent's permission as it's permission\n direntObject.permission = this.state.userPerm;\n let dirent = new Dirent(direntObject);\n if (this.state.currentMode === 'column') {\n this.addNodeToTree(dirent.name, this.state.path, dirent.type);\n }\n if (direntObject.type === 'dir') {\n this.setState({direntList: [dirent, ...this.state.direntList]});\n } else {\n this.setState({direntList: [...this.state.direntList, dirent]});\n }\n }\n };\n\n addDirent = (name, type, size, isSdocDraft) => {\n let item = this.createDirent(name, type, size, isSdocDraft);\n let direntList = this.state.direntList;\n if (type === 'dir') {\n direntList.unshift(item);\n } else {\n // there will be there conditions;\n // first: direntList.length === 0;\n // second: all the direntList's items are dir;\n // third: direntList has dir and file;\n let length = direntList.length;\n if (length === 0 || direntList[length - 1].type === 'dir') {\n direntList.push(item);\n } else {\n let index = 0;\n for (let i = 0; i <= length; i++) {\n if (direntList[i].type === 'file') {\n index = i;\n break;\n }\n }\n direntList.splice(index, 0, item);\n }\n }\n this.setState({direntList: direntList});\n };\n\n renameDirent = (direntPath, newName) => {\n let repoID = this.props.repoID;\n let parentPath = Utils.getDirName(direntPath);\n let newDirentPath = Utils.joinPath(parentPath, newName);\n if (direntPath === this.state.path) {\n // the renamed item is current viewed item\n // example: direntPath = /A/B/C, state.path = /A/B/C\n\n this.setState({ path: newDirentPath });\n let repoInfo = this.state.currentRepoInfo;\n let url = siteRoot + 'library/' + repoID + '/' + encodeURIComponent(repoInfo.repo_name) + newDirentPath;\n window.history.replaceState({ url: url, path: newDirentPath}, newDirentPath, url);\n } else if (Utils.isChildPath(direntPath, this.state.path)) {\n // example: direntPath = /A/B/C/D, state.path = /A/B/C\n let oldName = Utils.getFileName(direntPath);\n let direntList = this.state.direntList.map(item => {\n if (item.name === oldName) {\n item.name = newName;\n }\n return item;\n });\n this.setState({ direntList: direntList });\n } else if (Utils.isAncestorPath(direntPath, this.state.path)) {\n // example: direntPath = /A/B, state.path = /A/B/C\n let newPath = Utils.renameAncestorPath(this.state.path, direntPath, newDirentPath);\n this.setState({ path: newPath });\n\n let repoInfo = this.state.currentRepoInfo;\n let url = siteRoot + 'library/' + repoID + '/' + encodeURIComponent(repoInfo.repo_name) + newPath;\n window.history.replaceState({ url: url, path: newPath}, newPath, url);\n }\n };\n\n deleteDirent(direntPath) {\n if (direntPath === this.state.path) {\n // The deleted item is current item\n let parentPath = Utils.getDirName(direntPath);\n this.showDir(parentPath);\n } else if (Utils.isChildPath(direntPath, this.state.path)) {\n // The deleted item is inside current path\n let name = Utils.getFileName(direntPath);\n let direntList = this.state.direntList.filter(item => {\n return item.name !== name;\n });\n\n // Recalculate the state of the selection\n this.recaculateSelectedStateAfterDirentDeleted(name, direntList);\n\n this.setState({direntList: direntList});\n } else if (Utils.isAncestorPath(direntPath, this.state.path)) {\n // the deleted item is ancester of the current item\n let parentPath = Utils.getDirName(direntPath);\n this.showDir(parentPath);\n }\n // else do nothing\n }\n\n // only one scence: The deleted items are inside current path\n deleteDirents = (direntNames) => {\n let direntList = this.state.direntList.filter(item => {\n return direntNames.indexOf(item.name) === -1;\n });\n\n // Recalculate the state of the selection\n this.recaculateSelectedStateAfterDirentDeleted(name, direntList);\n\n this.setState({direntList: direntList});\n };\n\n moveDirent = (direntPath, moveToDirentPath = null) => {\n let name = Utils.getFileName(direntPath);\n if (moveToDirentPath === this.state.path) {\n this.loadDirentList(this.state.path);\n return;\n }\n let direntList = this.state.direntList.filter(item => {\n return item.name !== name;\n });\n\n // Recalculate the state of the selection\n this.recaculateSelectedStateAfterDirentDeleted(name, direntList);\n\n this.setState({direntList: direntList});\n };\n\n // only one scence: The moved items are inside current path\n moveDirents = (direntNames) => {\n let direntList = this.state.direntList.filter(item => {\n return direntNames.indexOf(item.name) === -1;\n });\n\n // Recalculate the state of the selection\n //this.recaculateSelectedStateAfterDirentDeleted(name, direntList);\n\n this.setState({\n direntList: direntList,\n selectedDirentList: [],\n isDirentSelected: false,\n isAllDirentSelected: false,\n });\n };\n\n updateDirent = (dirent, paramKey, paramValue) => {\n let newDirentList = this.state.direntList.map(item => {\n if (item.name === dirent.name) {\n item[paramKey] = paramValue;\n }\n return item;\n });\n this.setState({direntList: newDirentList});\n };\n\n // tree operations\n loadTreeNodeByPath = (path) => {\n let repoID = this.props.repoID;\n let tree = this.state.treeData.clone();\n let node = tree.getNodeByPath(path);\n if (!node.isLoaded) {\n seafileAPI.listDir(repoID, node.path).then(res => {\n this.addResponseListToNode(res.data.dirent_list, node);\n let parentNode = tree.getNodeByPath(node.parentNode.path);\n parentNode.isExpanded = true;\n this.setState({\n treeData: tree,\n currentNode: node\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n } else {\n let parentNode = tree.getNodeByPath(node.parentNode.path);\n parentNode.isExpanded = true;\n this.setState({treeData: tree, currentNode: node}); //tree\n }\n };\n\n loadNodeAndParentsByPath = (path) => {\n let repoID = this.props.repoID;\n let tree = this.state.treeData.clone();\n if (Utils.isMarkdownFile(path)) {\n path = Utils.getDirName(path);\n }\n seafileAPI.listDir(repoID, path, {with_parents: true}).then(res => {\n const { dirent_list: direntList, user_perm } = res.data;\n let results = {};\n for (let i = 0; i < direntList.length; i++) {\n let object = direntList[i];\n let parentDir = object.parent_dir;\n let key = parentDir === '/' ? '/' : parentDir.slice(0, parentDir.length - 1);\n if (!results[key]) {\n results[key] = [];\n }\n results[key].push(object);\n }\n for (let key in results) {\n let node = tree.getNodeByPath(key);\n if (!node.isLoaded) {\n this.addResponseListToNode(results[key], node);\n }\n }\n this.setState({\n isTreeDataLoading: false,\n treeData: tree,\n userPerm: user_perm,\n });\n }).catch(() => {\n this.setState({isLoadFailed: true});\n });\n };\n\n onTreeNodeClick = (node) => {\n this.resetSelected();\n let repoID = this.props.repoID;\n if (!this.state.pathExist) {\n this.setState({pathExist: true});\n }\n\n if (node.object.isDir()) {\n let isLoaded = node.isLoaded;\n if (!node.isLoaded) {\n let tree = this.state.treeData.clone();\n node = tree.getNodeByPath(node.path);\n seafileAPI.listDir(repoID, node.path).then(res => {\n this.addResponseListToNode(res.data.dirent_list, node);\n tree.collapseNode(node);\n this.setState({treeData: tree});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n if (isLoaded && node.path === this.state.path) {\n if (node.isExpanded) {\n let tree = treeHelper.collapseNode(this.state.treeData, node);\n this.setState({treeData: tree});\n } else {\n let tree = this.state.treeData.clone();\n node = tree.getNodeByPath(node.path);\n tree.expandNode(node);\n this.setState({treeData: tree});\n }\n }\n }\n\n if (node.path === this.state.path ) {\n return;\n }\n\n if (node.object.isDir()) { // isDir\n this.showDir(node.path);\n } else {\n if (Utils.isMarkdownFile(node.path)) {\n if (node.path !== this.state.path) {\n this.showColumnMarkdownFile(node.path);\n }\n } else {\n let url = siteRoot + 'lib/' + repoID + '/file' + Utils.encodePath(node.path);\n let dirent = node.object;\n if (dirent.is_sdoc_revision && dirent.revision_id) {\n url = siteRoot + 'lib/' + repoID + '/revisions/' + dirent.revision_id + '/';\n }\n window.open(url);\n }\n }\n };\n\n showColumnMarkdownFile = (filePath) => {\n let repoID = this.props.repoID;\n seafileAPI.getFileInfo(repoID, filePath).then((res) => {\n if (res.data.size === 0) {\n // loading of asynchronously obtained data may be blocked\n const w = window.open('about:blank');\n const url = siteRoot + 'lib/' + repoID + '/file' + Utils.encodePath(filePath);\n w.location.href = url;\n } else {\n this.showFile(filePath);\n }\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onTreeNodeCollapse = (node) => {\n let tree = treeHelper.collapseNode(this.state.treeData, node);\n this.setState({treeData: tree});\n };\n\n onTreeNodeExpanded = (node) => {\n let repoID = this.props.repoID;\n let tree = this.state.treeData.clone();\n node = tree.getNodeByPath(node.path);\n if (!node.isLoaded) {\n seafileAPI.listDir(repoID, node.path).then(res => {\n this.addResponseListToNode(res.data.dirent_list, node);\n this.setState({treeData: tree});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n } else {\n tree.expandNode(node);\n this.setState({treeData: tree});\n }\n };\n\n addNodeToTree = (name, parentPath, type) => {\n let node = this.createTreeNode(name, type);\n let tree = treeHelper.addNodeToParentByPath(this.state.treeData, node, parentPath);\n this.setState({treeData: tree});\n };\n\n renameTreeNode = (path, newName) => {\n let tree = treeHelper.renameNodeByPath(this.state.treeData, path, newName);\n this.setState({treeData: tree});\n };\n\n deleteTreeNode = (path) => {\n let tree = treeHelper.deleteNodeByPath(this.state.treeData, path);\n this.setState({treeData: tree});\n };\n\n deleteTreeNodes = (paths) => {\n let tree = treeHelper.deleteNodeListByPaths(this.state.treeData, paths);\n this.setState({treeData: tree});\n };\n\n moveTreeNode = (nodePath, moveToPath, moveToRepo, nodeName) => {\n let repoID = this.props.repoID;\n if (repoID !== moveToRepo.repo_id) {\n let tree = treeHelper.deleteNodeByPath(this.state.treeData, nodePath);\n this.setState({treeData: tree});\n return;\n }\n let tree = treeHelper.moveNodeByPath(this.state.treeData, nodePath, moveToPath, nodeName);\n this.setState({treeData: tree});\n };\n\n copyTreeNode = (nodePath, copyToPath, destRepo, nodeName) => {\n let repoID = this.props.repoID;\n if (repoID !== destRepo.repo_id) {\n return;\n }\n let tree = treeHelper.copyNodeByPath(this.state.treeData, nodePath, copyToPath, nodeName);\n this.setState({treeData: tree});\n };\n\n createTreeNode(name, type) {\n let object = this.createDirent(name, type);\n return new TreeNode({object});\n }\n\n createDirent(name, type, size, isSdocDraft) {\n // use current dirent parent's permission as it's permission\n const { userPerm: permission } = this.state;\n const mtime = new Date().getTime()/1000;\n const obj = { name, type, mtime, size, permission };\n if (isSdocDraft) {\n obj.is_sdoc_draft = isSdocDraft;\n }\n const dirent = new Dirent(obj);\n return dirent;\n }\n\n addResponseListToNode = (list, node) => {\n node.isLoaded = true;\n node.isExpanded = true;\n let direntList = list.map(item => {\n return new Dirent(item);\n });\n direntList = Utils.sortDirents(direntList, 'name', 'asc');\n\n let nodeList = direntList.map(object => {\n return new TreeNode({object});\n });\n node.addChildren(nodeList);\n };\n\n getSelectedDirentPaths = () => {\n let paths = [];\n this.state.selectedDirentList.forEach(selectedDirent => {\n paths.push(Utils.joinPath(this.state.path, selectedDirent.name));\n });\n return paths;\n };\n\n getSelectedDirentNames = () => {\n let names = [];\n this.state.selectedDirentList.forEach(selectedDirent => {\n names.push(selectedDirent.name);\n });\n return names;\n };\n\n resetSelected = () => {\n this.setState({\n isDirentSelected: false,\n isAllDirentSelected: false,\n });\n };\n\n recaculateSelectedStateAfterDirentDeleted = (name, newDirentList) => {\n let selectedDirentList = this.state.selectedDirentList.slice(0);\n if (selectedDirentList.length > 0) {\n selectedDirentList = selectedDirentList.filter(item => {\n return item.name !== name;\n });\n }\n this.setState({\n selectedDirentList: selectedDirentList,\n isDirentSelected: selectedDirentList.length > 0,\n isAllDirentSelected: selectedDirentList.length === newDirentList.length,\n });\n };\n\n onLibDecryptDialog = () => {\n this.setState({libNeedDecrypt: false});\n this.loadDirData(this.state.path);\n };\n\n goDraftPage = () => {\n window.open(siteRoot + 'drafts/' + this.state.draftID + '/');\n };\n\n sortItems = (sortBy, sortOrder) => {\n cookie.save('seafile-repo-dir-sort-by', sortBy);\n cookie.save('seafile-repo-dir-sort-order', sortOrder);\n this.setState({\n sortBy: sortBy,\n sortOrder: sortOrder,\n items: Utils.sortDirents(this.state.direntList, sortBy, sortOrder)\n });\n };\n\n onUploadFile = (e) => {\n e.nativeEvent.stopImmediatePropagation();\n this.uploader.onFileUpload();\n };\n\n onUploadFolder = (e) => {\n e.nativeEvent.stopImmediatePropagation();\n this.uploader.onFolderUpload();\n };\n\n onToolbarFileTagChanged = () => {\n let repoID = this.props.repoID;\n let filePath = this.state.path;\n seafileAPI.listFileTags(repoID, filePath).then(res => {\n let fileTags = res.data.file_tags.map(item => {\n return new FileTag(item);\n });\n\n this.setState({fileTags: fileTags});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n unSelectDirent = () => {\n this.setState({\n isDirentSelected: false,\n selectedDirentList: []\n });\n const dirent = {};\n this.onDirentSelected(dirent);\n };\n\n onDeleteRepoTag = (deletedTagID) => {\n let direntList = this.state.direntList.map(dirent => {\n if (dirent.file_tags) {\n let fileTags = dirent.file_tags.filter(item => {\n return item.repo_tag_id !== deletedTagID;\n });\n dirent.file_tags = fileTags;\n }\n return dirent;\n });\n this.setState({direntList: direntList});\n this.updateUsedRepoTags();\n };\n\n\n handleSubmit = (e) => {\n let options = {\n 'share_type': 'personal',\n 'from': this.state.currentRepoInfo.owner_email\n };\n seafileAPI.leaveShareRepo(this.props.repoID, options).then(res => {\n navigate(siteRoot + 'shared-libs/');\n }).catch((error) => {\n let errorMsg = Utils.getErrorMsg(error, true);\n toaster.danger(errorMsg);\n });\n\n e.preventDefault();\n };\n\n render() {\n if (this.state.libNeedDecrypt) {\n return (\n \n \n \n );\n }\n\n if (this.state.errorMsg) {\n return (\n \n

    {this.state.errorMsg}

    \n \n
    \n );\n }\n\n if (!this.state.currentRepoInfo) {\n return '';\n }\n\n let enableDirPrivateShare = false;\n let { currentRepoInfo, userPerm, isCopyMoveProgressDialogShow, isDeleteFolderDialogOpen } = this.state;\n let showShareBtn = Utils.isHasPermissionToShare(currentRepoInfo, userPerm);\n let isRepoOwner = currentRepoInfo.owner_email === username;\n let isVirtual = currentRepoInfo.is_virtual;\n let isAdmin = currentRepoInfo.is_admin;\n if (!isVirtual && (isRepoOwner || isAdmin)) {\n enableDirPrivateShare = true;\n }\n let direntItemsList = this.state.direntList.filter((item, index) => {\n return index < this.state.itemsShowLength;\n });\n\n let canUpload = true;\n const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm);\n if (isCustomPermission) {\n const { upload } = customPermission.permission;\n canUpload = upload;\n }\n\n return (\n \n
    \n \n
    \n
    \n \n {canUpload && this.state.pathExist && !this.state.isViewFile && (\n this.uploader = uploader}\n dragAndDrop={true}\n path={this.state.path}\n repoID={this.props.repoID}\n direntList={this.state.direntList}\n onFileUploadSuccess={this.onFileUploadSuccess}\n isCustomPermission={isCustomPermission}\n />\n )}\n
    \n {isCopyMoveProgressDialogShow && (\n \n )}\n {isDeleteFolderDialogOpen && (\n \n )}\n
    \n );\n }\n}\n\nLibContentView.propTypes = propTypes;\n\nexport default LibContentView;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../toast';\n\nclass DismissGroupDialog extends React.Component {\n\n constructor(props) {\n super(props);\n }\n\n dismissGroup = () => {\n let that = this;\n seafileAPI.deleteGroup(this.props.groupID).then((res)=> {\n that.props.onGroupChanged();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n return(\n \n {gettext('Delete Group')}\n \n {gettext('Really want to delete this group?')}\n \n \n \n \n \n \n );\n }\n}\n\nconst DismissGroupDialogPropTypes = {\n showDismissGroupDialog: PropTypes.bool.isRequired,\n toggleDismissGroupDialog: PropTypes.func.isRequired,\n loadGroup: PropTypes.func.isRequired,\n groupID: PropTypes.string,\n onGroupChanged: PropTypes.func.isRequired,\n};\n\nDismissGroupDialog.propTypes = DismissGroupDialogPropTypes;\n\nexport default DismissGroupDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Input, Button } from 'reactstrap';\nimport toaster from '../toast';\n\nclass RenameGroupDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n newGroupName: this.props.currentGroupName,\n isSubmitBtnActive: false,\n };\n }\n\n handleGroupNameChange = (event) => {\n if (!event.target.value.trim()) {\n this.setState({isSubmitBtnActive: false});\n } else {\n this.setState({isSubmitBtnActive: true});\n }\n\n let name = event.target.value;\n this.setState({\n newGroupName: name\n });\n };\n\n renameGroup = () => {\n let name = this.state.newGroupName.trim();\n if (name) {\n let that = this;\n seafileAPI.renameGroup(this.props.groupID, name).then((res)=> {\n that.props.loadGroup(this.props.groupID);\n that.props.onGroupChanged(res.data.id);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n this.setState({\n newGroupName: '',\n });\n this.props.toggleRenameGroupDialog();\n };\n\n handleKeyDown = (event) => {\n if (event.keyCode === 13) {\n this.renameGroup();\n }\n };\n\n render() {\n return(\n \n {gettext('Rename Group')}\n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nconst RenameGroupDialogPropTypes = {\n showRenameGroupDialog: PropTypes.bool.isRequired,\n toggleRenameGroupDialog: PropTypes.func.isRequired,\n loadGroup: PropTypes.func.isRequired,\n groupID: PropTypes.string,\n onGroupChanged: PropTypes.func.isRequired,\n currentGroupName: PropTypes.string.isRequired,\n};\n\nRenameGroupDialog.propTypes = RenameGroupDialogPropTypes;\n\nexport default RenameGroupDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport UserSelect from '../user-select';\nimport { Utils } from '../../utils/utils';\n\nimport '../../css/transfer-group-dialog.css';\n\nconst propTypes = {\n groupID: PropTypes.string,\n toggleTransferGroupDialog: PropTypes.func.isRequired,\n onGroupChanged: PropTypes.func.isRequired\n};\n\nclass TransferGroupDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selectedOption: null,\n errMessage: '',\n };\n this.options = [];\n }\n\n handleSelectChange = (option) => {\n this.setState({\n selectedOption: option,\n errMessage: '',\n });\n this.options = [];\n };\n\n transferGroup = () => {\n const email = this.state.selectedOption && this.state.selectedOption.email;\n if (email) {\n seafileAPI.transferGroup(this.props.groupID, email).then((res) => {\n this.props.toggleTransferGroupDialog();\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n this.setState({errMessage: errMessage});\n });\n }\n };\n\n toggle = () => {\n this.props.toggleTransferGroupDialog();\n };\n\n render() {\n return (\n \n {gettext('Transfer Group')}\n \n

    {gettext('Transfer group to')}

    \n \n
    {this.state.errMessage}
    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nTransferGroupDialog.propTypes = propTypes;\n\nexport default TransferGroupDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Alert, Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\nimport { gettext, siteRoot, groupImportMembersExtraMsg } from '../../utils/constants';\n\nconst propTypes = {\n toggleImportMembersDialog: PropTypes.func.isRequired,\n importMembersInBatch: PropTypes.func.isRequired,\n};\n\nclass ImportMembersDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n errorMsg: ''\n };\n this.fileInputRef = React.createRef();\n }\n\n toggle = () => {\n this.props.toggleImportMembersDialog();\n };\n\n openFileInput = () => {\n this.fileInputRef.current.click();\n };\n\n uploadFile = (e) => {\n // no file selected\n if (!this.fileInputRef.current.files.length) {\n return;\n }\n // check file extension\n let fileName = this.fileInputRef.current.files[0].name;\n if(fileName.substr(fileName.lastIndexOf('.') + 1) != 'xlsx') {\n this.setState({\n errorMsg: gettext('Please choose a .xlsx file.')\n });\n return;\n }\n const file = this.fileInputRef.current.files[0];\n this.props.importMembersInBatch(file);\n this.toggle();\n };\n\n render() {\n let { errorMsg } = this.state;\n return (\n \n {gettext('Import members from a .xlsx file')}\n\n \n

    {groupImportMembersExtraMsg}

    \n

    {gettext('Download an example file')}

    \n \n \n {errorMsg && {errorMsg}}\n
    \n \n \n \n
    \n );\n }\n}\n\nImportMembersDialog.propTypes = propTypes;\n\nexport default ImportMembersDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Table } from 'reactstrap';\nimport { Utils } from '../utils/utils';\nimport { gettext } from '../utils/constants';\nimport { seafileAPI } from '../utils/seafile-api';\nimport RoleSelector from './single-selector';\nimport toaster from './toast';\nimport OpIcon from './op-icon';\n\nconst propTypes = {\n groupMembers: PropTypes.array.isRequired,\n groupID: PropTypes.string,\n isOwner: PropTypes.bool.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n toggleItemFreezed: PropTypes.func.isRequired,\n changeMember: PropTypes.func.isRequired,\n deleteMember: PropTypes.func.isRequired\n};\n\nclass GroupMembers extends React.Component {\n\n render() {\n const { groupMembers, changeMember, deleteMember, groupID, isOwner, isItemFreezed, toggleItemFreezed } = this.props;\n return (\n \n \n \n \n \n \n \n \n \n \n {groupMembers.map((item, index) => {\n return (\n \n );\n })\n }\n \n
    {gettext('Name')}{gettext('Role')}
    \n );\n }\n}\n\nGroupMembers.propTypes = propTypes;\n\nconst MemberPropTypes = {\n item: PropTypes.object.isRequired,\n changeMember: PropTypes.func.isRequired,\n deleteMember: PropTypes.func.isRequired,\n toggleItemFreezed: PropTypes.func.isRequired,\n groupID: PropTypes.string,\n isOwner: PropTypes.bool.isRequired,\n isItemFreezed: PropTypes.bool.isRequired\n};\n\nclass Member extends React.PureComponent {\n\n constructor(props) {\n super(props);\n this.roleOptions = [\n { value: 'Admin', text: gettext('Admin'), isSelected: false },\n { value: 'Member', text: gettext('Member'), isSelected: false }\n ];\n this.state = ({\n highlight: false,\n });\n }\n\n onChangeUserRole = (roleOption) => {\n let isAdmin = roleOption.value === 'Admin' ? 'True' : 'False';\n seafileAPI.setGroupAdmin(this.props.groupID, this.props.item.email, isAdmin).then((res) => {\n this.props.changeMember(res.data);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n deleteMember = () => {\n const { item } = this.props;\n seafileAPI.deleteGroupMember(this.props.groupID, item.email).then((res) => {\n this.props.deleteMember(item);\n toaster.success(gettext('Successfully deleted {name}.').replace('{name}', item.name));\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n handleMouseOver = () => {\n if (this.props.isItemFreezed) return;\n this.setState({\n highlight: true,\n });\n };\n\n handleMouseLeave = () => {\n if (this.props.isItemFreezed) return;\n this.setState({\n highlight: false,\n });\n };\n\n translateRole = (role) => {\n if (role === 'Admin') {\n return gettext('Admin');\n }\n else if (role === 'Member') {\n return gettext('Member');\n }\n else if (role === 'Owner') {\n return gettext('Owner');\n }\n };\n\n render() {\n const { highlight } = this.state;\n const { item, isOwner } = this.props;\n const deleteAuthority = (item.role !== 'Owner' && isOwner === true) || (item.role === 'Member' && isOwner === false);\n\n const { role: curRole } = item;\n this.roleOptions = this.roleOptions.map(item => {\n item.isSelected = item.value == curRole;\n return item;\n });\n const currentSelectedOption = this.roleOptions.filter(item => item.isSelected)[0];\n\n return(\n \n \"\"/\n {item.name}\n \n {((isOwner === false) || (isOwner === true && item.role === 'Owner')) &&\n {this.translateRole(item.role)}\n }\n {(isOwner === true && item.role !== 'Owner') &&\n \n }\n \n \n {(deleteAuthority && this.state.highlight) &&\n \n }\n \n \n );\n }\n}\n\nMember.propTypes = MemberPropTypes;\n\n\nexport default GroupMembers;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, InputGroup, InputGroupText, Input } from 'reactstrap';\nimport { Utils } from '../utils/utils';\nimport { gettext } from '../utils/constants';\nimport { seafileAPI } from '../utils/seafile-api';\nimport UserSelect from './user-select';\nimport toaster from './toast';\nimport Loading from './loading';\nimport GroupMembers from './group-members';\n\nconst propTypes = {\n groupID: PropTypes.string,\n isOwner: PropTypes.bool.isRequired\n};\n\nclass ManageMembersDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isLoading: true, // first loading\n isLoadingMore: false,\n groupMembers: [],\n page: 1,\n perPage: 100,\n hasNextPage: false,\n selectedOption: null,\n errMessage: [],\n isItemFreezed: false,\n searchActive: false,\n keyword: '',\n membersFound: []\n };\n }\n\n componentDidMount() {\n this.listGroupMembers(this.state.page);\n }\n\n listGroupMembers = (page) => {\n const { groupID } = this.props;\n const { perPage, groupMembers } = this.state;\n seafileAPI.listGroupMembers(groupID, page, perPage).then((res) => {\n const members = res.data;\n this.setState({\n isLoading: false,\n isLoadingMore: false,\n page: page,\n hasNextPage: members.length < perPage ? false : true,\n groupMembers: groupMembers.concat(members)\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n this.setState({\n isLoading: false,\n isLoadingMore: false,\n hasNextPage: false\n });\n });\n };\n\n onSelectChange = (option) => {\n this.setState({\n selectedOption: option,\n errMessage: [],\n });\n };\n\n addGroupMember = () => {\n let emails = [];\n for (let i = 0; i < this.state.selectedOption.length; i++) {\n emails.push(this.state.selectedOption[i].email);\n }\n seafileAPI.addGroupMembers(this.props.groupID, emails).then((res) => {\n const newMembers = res.data.success;\n this.setState({\n groupMembers: [].concat(newMembers, this.state.groupMembers),\n selectedOption: null,\n });\n this.refs.userSelect.clearSelect();\n if (res.data.failed.length > 0) {\n this.setState({\n errMessage: res.data.failed\n });\n }\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n toggleItemFreezed = (isFreezed) => {\n this.setState({\n isItemFreezed: isFreezed\n });\n };\n\n handleScroll = (event) => {\n // isLoadingMore: to avoid repeated request\n const { page, hasNextPage, isLoadingMore } = this.state;\n if (hasNextPage && !isLoadingMore) {\n const clientHeight = event.target.clientHeight;\n const scrollHeight = event.target.scrollHeight;\n const scrollTop = event.target.scrollTop;\n const isBottom = (clientHeight + scrollTop + 1 >= scrollHeight);\n if (isBottom) { // scroll to the bottom\n this.setState({isLoadingMore: true}, () => {\n this.listGroupMembers(page + 1);\n });\n }\n }\n };\n\n changeMember = (targetMember) => {\n this.setState({\n groupMembers: this.state.groupMembers.map((item) => {\n if (item.email == targetMember.email) {\n item = targetMember;\n }\n return item;\n })\n });\n };\n\n deleteMember = (targetMember) => {\n const groupMembers = this.state.groupMembers;\n groupMembers.splice(groupMembers.indexOf(targetMember), 1);\n this.setState({\n groupMembers: groupMembers\n });\n };\n\n searchMembers = (e) => {\n const { groupMembers } = this.state;\n const keyword = e.target.value;\n const value = keyword.trim().toLowerCase();\n const membersFound = groupMembers.filter(item => item.name.toLowerCase().indexOf(value) > -1);\n this.setState({ keyword, membersFound });\n };\n\n clearSearch = () => {\n this.setState({\n keyword: '',\n membersFound: []\n });\n };\n\n onSearchInputFocus = () => {\n this.setState({\n searchActive: true\n });\n };\n\n onSearchInputBlur = () => {\n this.setState({\n searchActive: false\n });\n };\n\n render() {\n const {\n isLoading, hasNextPage, groupMembers,\n keyword, membersFound,\n searchActive\n } = this.state;\n return (\n \n

    {gettext('Add group member')}

    \n
    \n \n {this.state.selectedOption ?\n :\n \n }\n
    \n {\n this.state.errMessage.length > 0 &&\n this.state.errMessage.map((item, index = 0) => {\n return (\n
    {item.error_msg}
    \n );\n })\n }\n {groupMembers.length > 10 &&\n \n \n \n \n \n {keyword && (\n \n \n \n )}\n \n }\n
    {} : this.handleScroll}>\n {isLoading ? : (\n \n \n {(!keyword.trim() && hasNextPage) && }\n \n )}\n
    \n
    \n );\n }\n}\n\nManageMembersDialog.propTypes = propTypes;\n\nexport default ManageMembersDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport ListAndAddGroupMembers from '../list-and-add-group-members';\n\nimport '../../css/manage-members-dialog.css';\n\nconst propTypes = {\n groupID: PropTypes.string,\n isOwner: PropTypes.bool.isRequired,\n toggleManageMembersDialog: PropTypes.func.isRequired\n};\n\nclass ManageMembersDialog extends React.Component {\n\n render() {\n const { groupID, isOwner, toggleManageMembersDialog: toggle } = this.props;\n return (\n \n {gettext('Manage group members')}\n \n \n \n \n );\n }\n}\n\nManageMembersDialog.propTypes = propTypes;\n\nexport default ManageMembersDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\nimport { gettext, username } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../toast';\n\nclass LeaveGroupDialog extends React.Component {\n\n constructor(props) {\n super(props);\n }\n\n leaveGroup = () => {\n seafileAPI.quitGroup(this.props.groupID, username).then((res)=> {\n this.props.onGroupChanged();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n return(\n \n {gettext('Leave Group')}\n \n

    {gettext('Really want to leave this group?')}

    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nconst LeaveGroupDialogPropTypes = {\n toggleLeaveGroupDialog: PropTypes.func.isRequired,\n groupID: PropTypes.string,\n onGroupChanged: PropTypes.func.isRequired,\n};\n\nLeaveGroupDialog.propTypes = LeaveGroupDialogPropTypes;\n\nexport default LeaveGroupDialog;\n","import React,{ Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport cookie from 'react-cookies';\nimport { gettext, siteRoot, username, canAddRepo } from '../../utils/constants';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport Loading from '../../components/loading';\nimport EmptyTip from '../../components/empty-tip';\nimport ModalPortal from '../../components/modal-portal';\nimport Group from '../../models/group';\nimport Repo from '../../models/repo';\nimport toaster from '../../components/toast';\nimport OpIcon from '../../components/op-icon';\nimport CommonToolbar from '../../components/toolbar/common-toolbar';\nimport CreateRepoDialog from '../../components/dialog/create-repo-dialog';\nimport DismissGroupDialog from '../../components/dialog/dismiss-group-dialog';\nimport RenameGroupDialog from '../../components/dialog/rename-group-dialog';\nimport TransferGroupDialog from '../../components/dialog/transfer-group-dialog';\nimport ImportMembersDialog from '../../components/dialog/import-members-dialog';\nimport ManageMembersDialog from '../../components/dialog/manage-members-dialog';\nimport LeaveGroupDialog from '../../components/dialog/leave-group-dialog';\nimport SharedRepoListView from '../../components/shared-repo-list-view/shared-repo-list-view';\nimport LibDetail from '../../components/dirent-detail/lib-details';\nimport SortOptionsDialog from '../../components/dialog/sort-options';\n\nimport '../../css/group-view.css';\n\nconst propTypes = {\n onShowSidePanel: PropTypes.func.isRequired,\n onSearchedClick: PropTypes.func.isRequired,\n onGroupChanged: PropTypes.func.isRequired,\n onTabNavClick: PropTypes.func.isRequired,\n groupID: PropTypes.string,\n};\n\nclass GroupView extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isLoading: true, // first loading\n isLoadingMore: false,\n errMessage: '',\n emptyTip: null,\n currentGroup: null,\n currentRepo: null,\n isStaff: false,\n isOwner: false,\n sortBy: cookie.load('seafile-repo-dir-sort-by') || 'name', // 'name' or 'time' or 'size'\n sortOrder: cookie.load('seafile-repo-dir-sort-order') || 'asc', // 'asc' or 'desc'\n isSortOptionsDialogOpen: false,\n repoList: [],\n currentPage: 1,\n perPage: 300,\n hasNextPage: false,\n libraryType: 'group',\n isCreateRepoDialogShow: false,\n isDepartmentGroup: false,\n showGroupDropdown: false,\n showGroupMembersPopover: false,\n showRenameGroupDialog: false,\n showDismissGroupDialog: false,\n showTransferGroupDialog: false,\n showImportMembersDialog: false,\n showManageMembersDialog: false,\n groupMembers: [],\n isShowDetails: false,\n isLeaveGroupDialogOpen: false,\n };\n }\n\n componentDidMount() {\n let groupID = this.props.groupID;\n this.loadGroup(groupID);\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.groupID !== this.props.groupID) {\n this.loadGroup(nextProps.groupID);\n }\n }\n\n loadGroup = (groupID) => {\n seafileAPI.getGroup(groupID).then((res) => {\n let currentGroup = new Group(res.data);\n let emptyTip = this.getEmptyTip(currentGroup);\n let isStaff = currentGroup.admins.indexOf(username) > -1; //for item operations\n let isOwner = currentGroup.owner === username ? true : false;\n let isDepartmentGroup = currentGroup.parent_group_id !== 0;\n this.setState({\n emptyTip: emptyTip,\n currentGroup: currentGroup,\n isStaff: isStaff,\n isDepartmentGroup: isDepartmentGroup,\n isOwner: isOwner,\n currentPage: 1,\n repoList: [] // empty it for the current group\n }, () => {\n this.loadRepos(this.state.currentPage);\n });\n }).catch((error) => {\n this.setState({\n isLoading: false,\n errMessage: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n loadRepos = (page) => {\n const { perPage } = this.state;\n seafileAPI.listGroupRepos(this.props.groupID, page, perPage).then((res) => {\n let hasNextPage = true;\n if (res.data.length < perPage) {\n hasNextPage = false;\n }\n let repoList = this.state.repoList;\n let newRepoList = res.data.map(item => {\n let repo = new Repo(item);\n return repo;\n });\n if (newRepoList.length) {\n repoList = repoList.concat(newRepoList);\n }\n this.setState({\n isLoading: false,\n isLoadingMore: false,\n currentPage: page,\n hasNextPage: hasNextPage,\n repoList: Utils.sortRepos(repoList, this.state.sortBy, this.state.sortOrder)\n });\n }).catch((error) => {\n this.setState({\n isLoading: false,\n isLoadingMore: false,\n errMessage: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n getEmptyTip = (currentGroup) => {\n let emptyTip = null;\n if (currentGroup) {\n if (currentGroup.parent_group_id === 0) {\n emptyTip = (\n \n

    {gettext('No libraries shared with this group')}

    \n

    {gettext('No libraries have been shared with this group yet. A library shared with a group can be accessed by all group members. You can share a library with a group in \"My Libraries\". You can also create a new library to be shared with this group by clicking the \"New Library\" button in the menu bar.')}

    \n
    \n );\n } else {\n if (currentGroup.admins.indexOf(username) == -1) { // is a member of this group\n emptyTip = (\n \n

    {gettext('No libraries')}

    \n
    \n );\n } else {\n emptyTip = (\n \n

    {gettext('No libraries')}

    \n

    {gettext('You can create libraries by clicking the \"New Library\" button above.')}

    \n
    \n );\n }\n }\n }\n return emptyTip;\n };\n\n onCreateRepoToggle = () => {\n this.setState({isCreateRepoDialogShow: !this.state.isCreateRepoDialogShow});\n };\n\n onCreateRepo = (repo, groupOwnerType) => {\n let groupId = this.props.groupID;\n if (groupOwnerType && groupOwnerType === 'department') {\n seafileAPI.createGroupOwnedLibrary(groupId, repo).then(res => { //need modify endpoint api\n let object = {\n repo_id: res.data.id,\n repo_name: res.data.name,\n owner_name: res.data.group_name,\n owner_email: res.data.owner,\n permission: res.data.permission,\n mtime: res.data.mtime,\n size: res.data.size,\n encrypted: res.data.encrypted,\n };\n let repo = new Repo(object);\n let repoList = this.addRepoItem(repo);\n this.setState({repoList: repoList});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n\n } else {\n seafileAPI.createGroupRepo(groupId, repo).then(res => {\n let repo = new Repo(res.data);\n let repoList = this.addRepoItem(repo);\n this.setState({repoList: repoList});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n this.onCreateRepoToggle();\n };\n\n onItemDelete = (repo) => {\n let groupID = this.props.groupID;\n let repoList = this.state.repoList.filter(item => {\n return item.repo_id !== repo.repo_id;\n });\n this.setState({repoList: repoList});\n this.loadGroup(groupID);\n };\n\n addRepoItem = (repo) => {\n let newRepoList = this.state.repoList.map(item => {return item;});\n newRepoList.unshift(repo);\n return newRepoList;\n };\n\n onItemUnshare = (repo) => {\n let group = this.state.currentGroup;\n seafileAPI.unshareRepoToGroup(repo.repo_id, group.id).then(() => {\n let repoList = this.state.repoList.filter(item => {\n return item.repo_id !== repo.repo_id;\n });\n this.setState({repoList: repoList});\n this.loadGroup(group.id);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onItemRename = (repo, newName) => {\n seafileAPI.renameGroupOwnedLibrary(this.props.groupID, repo.repo_id, newName).then(res => {\n let repoList = this.state.repoList.map(item => {\n if (item.repo_id === repo.repo_id) {\n item.repo_name = newName;\n }\n return item;\n });\n this.setState({repoList: repoList});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onMonitorRepo = (repo, monitored) => {\n let repoList = this.state.repoList.map(item => {\n if (item.repo_id === repo.repo_id) {\n item.monitored = monitored;\n }\n return item;\n });\n this.setState({repoList: repoList});\n };\n\n onTabNavClick = (tabName) => {\n this.props.onTabNavClick(tabName);\n };\n\n toggleGroupDropdown = () => {\n this.setState({\n showGroupDropdown: !this.state.showGroupDropdown\n });\n };\n\n toggleDismissGroupDialog = () => {\n this.setState({\n showDismissGroupDialog: !this.state.showDismissGroupDialog,\n showGroupDropdown: false,\n });\n };\n\n toggleRenameGroupDialog = () => {\n this.setState({\n showRenameGroupDialog: !this.state.showRenameGroupDialog,\n showGroupDropdown: false,\n });\n };\n\n toggleTransferGroupDialog = () => {\n this.setState({\n showTransferGroupDialog: !this.state.showTransferGroupDialog,\n showGroupDropdown: false,\n });\n };\n\n toggleImportMembersDialog= () => {\n this.setState({\n showImportMembersDialog: !this.state.showImportMembersDialog\n });\n };\n\n importMembersInBatch= (file) => {\n toaster.notify(gettext('It may take some time, please wait.'));\n seafileAPI.importGroupMembersViaFile(this.state.currentGroup.id, file).then((res) => {\n res.data.failed.forEach(item => {\n const msg = `${item.email}: ${item.error_msg}`;\n toaster.danger(msg);\n });\n }).catch((error) => {\n let errMsg = Utils.getErrorMsg(error);\n toaster.danger(errMsg);\n });\n };\n\n toggleManageMembersDialog = () => {\n this.setState({\n showManageMembersDialog: !this.state.showManageMembersDialog,\n showGroupDropdown: false,\n });\n };\n\n toggleLeaveGroupDialog = () => {\n this.setState({\n isLeaveGroupDialogOpen: !this.state.isLeaveGroupDialogOpen,\n showGroupDropdown: false,\n });\n };\n\n listGroupMembers = () => {\n seafileAPI.listGroupMembers(this.props.groupID).then((res) => {\n this.setState({\n groupMembers: res.data\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n toggleGroupMembersPopover = (state) => {\n if (state === 'open') {\n this.listGroupMembers();\n this.setState({\n showGroupMembersPopover: true\n });\n } else {\n this.setState({\n showGroupMembersPopover: false\n });\n }\n };\n\n onItemDetails = (repo) => {\n this.setState({\n isShowDetails: true,\n currentRepo: repo,\n });\n };\n\n closeDetails = () => {\n this.setState({isShowDetails: false});\n };\n\n sortItems = (sortBy, sortOrder) => {\n cookie.save('seafile-repo-dir-sort-by', sortBy);\n cookie.save('seafile-repo-dir-sort-order', sortOrder);\n this.setState({\n sortBy: sortBy,\n sortOrder: sortOrder,\n repoList: Utils.sortRepos(this.state.repoList, sortBy, sortOrder)\n });\n };\n\n translateRole = (role) => {\n if (role === 'Admin') {\n return gettext('Admin');\n }\n else if (role === 'Member') {\n return gettext('Member');\n }\n else if (role === 'Owner') {\n return gettext('Owner');\n }\n };\n\n toggleSortOptionsDialog = () => {\n this.setState({\n isSortOptionsDialogOpen: !this.state.isSortOptionsDialogOpen\n });\n };\n\n handleScroll = (event) => {\n // isLoadingMore: to avoid repeated request\n const { currentPage, hasNextPage, isLoadingMore } = this.state;\n if (hasNextPage && !isLoadingMore) {\n const clientHeight = event.target.clientHeight;\n const scrollHeight = event.target.scrollHeight;\n const scrollTop = event.target.scrollTop;\n const isBottom = (clientHeight + scrollTop + 1 >= scrollHeight);\n if (isBottom) { // scroll to the bottom\n this.setState({isLoadingMore: true}, () => {\n this.loadRepos(currentPage + 1);\n });\n }\n }\n };\n\n render() {\n let { errMessage, emptyTip, currentGroup, isDepartmentGroup, isStaff } = this.state;\n let isShowSettingIcon = false;\n if (currentGroup) { // group message is loaded\n if (currentGroup.parent_group_id === 0) {\n isShowSettingIcon = true;\n } else {\n if (currentGroup.admins.indexOf(username) > -1) {\n isShowSettingIcon = true;\n }\n }\n }\n let useRate = 0;\n if (isDepartmentGroup && currentGroup.group_quota) {\n useRate = currentGroup.group_quota_usage / currentGroup.group_quota * 100 + '%';\n }\n return (\n \n
    \n
    \n \n
    \n {((!isDepartmentGroup && canAddRepo) || (isDepartmentGroup && isStaff)) && (\n Utils.isDesktop() ? (\n \n ) : (\n \n )\n )}\n
    \n
    \n \n
    \n
    \n
    \n
    \n {currentGroup && (\n \n
    \n this.onTabNavClick('groups')}>{gettext('Groups')}\n /\n {currentGroup.name}\n {isDepartmentGroup && (\n \n \n {currentGroup.group_quota > 0 &&\n \n
    \n \n {Utils.bytesToSize(currentGroup.group_quota_usage)} / {Utils.bytesToSize(currentGroup.group_quota)}\n
    \n
    \n }\n
    \n )}\n
    \n
    \n { isShowSettingIcon &&\n \n \n {this.state.showGroupDropdown &&\n
    \n
    \n {gettext('Settings')}\n \n
    \n
    \n {(this.state.isStaff || this.state.isOwner) &&\n \n }\n {(this.state.isStaff || this.state.isOwner) &&\n \n }\n {\n this.state.isOwner &&\n \n }\n {/* gourp owner only can dissmiss group, admin could not quit, department member could not quit */}\n {(!this.state.isOwner && !isDepartmentGroup) &&\n \n }\n
    \n
    }\n
    \n }\n this.toggleGroupMembersPopover('open')}>\n \n {this.state.showGroupMembersPopover &&\n
    \n
    \n {gettext('Members')}\n \n
    \n
    \n \n
    \n
    }\n {(!Utils.isDesktop() && this.state.repoList.length > 0) && }\n {this.state.isSortOptionsDialogOpen &&\n \n }\n
    \n
    \n )}\n
    \n
    \n {this.state.isLoading && }\n {(!this.state.isLoading && errMessage) &&
    {errMessage}
    }\n {(!this.state.isLoading && this.state.repoList.length === 0) && emptyTip}\n {(!this.state.isLoading && this.state.repoList.length > 0) &&\n \n }\n
    \n
    \n {this.state.isShowDetails && (\n
    \n \n
    \n )}\n
    \n {this.state.isCreateRepoDialogShow && !this.state.isDepartmentGroup && (\n \n \n \n )}\n {this.state.isCreateRepoDialogShow && this.state.isDepartmentGroup &&\n \n }\n {this.state.showRenameGroupDialog &&\n \n }\n {this.state.showDismissGroupDialog &&\n \n }\n {this.state.showTransferGroupDialog &&\n \n }\n { this.state.showImportMembersDialog &&\n \n }\n {this.state.showManageMembersDialog &&\n \n }\n {this.state.isLeaveGroupDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nGroupView.propTypes = propTypes;\n\nexport default GroupView;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport MediaQuery from 'react-responsive';\nimport CommonToolbar from './common-toolbar';\nimport { Button } from 'reactstrap';\nimport { gettext, canAddGroup } from '../../utils/constants';\n\nconst propTypes = {\n searchPlaceholder: PropTypes.string,\n onShowSidePanel: PropTypes.func.isRequired,\n onSearchedClick: PropTypes.func.isRequired,\n toggleAddGroupModal: PropTypes.func.isRequired,\n};\n\nclass GroupsToolbar extends React.Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n let { onShowSidePanel, onSearchedClick } = this.props;\n return (\n
    \n
    \n \n {canAddGroup && (\n
    \n \n \n \n \n \n \n
    \n )}\n
    \n \n
    \n );\n }\n}\n\nGroupsToolbar.propTypes = propTypes;\n\nexport default GroupsToolbar;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Input, Button } from 'reactstrap';\nimport { Utils } from '../../utils/utils';\n\nclass CreateGroupDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n groupName: '',\n errorMsg: '',\n isSubmitBtnActive: false,\n };\n }\n\n handleGroupChange = (event) => {\n let name = event.target.value;\n\n if (!name.trim()) {\n this.setState({isSubmitBtnActive: false});\n } else {\n this.setState({isSubmitBtnActive: true});\n }\n this.setState({\n groupName: name\n });\n if (this.state.errorMsg) {\n this.setState({\n errorMsg: ''\n });\n }\n };\n\n handleSubmitGroup = () => {\n let name = this.state.groupName.trim();\n if (name) {\n let that = this;\n seafileAPI.createGroup(name).then((res)=> {\n that.props.onCreateGroup();\n }).catch((error) => {\n let errorMsg = Utils.getErrorMsg(error);\n this.setState({errorMsg: errorMsg});\n });\n } else {\n this.setState({\n errorMsg: gettext('Name is required')\n });\n }\n this.setState({\n groupName: '',\n });\n };\n\n handleKeyDown = (e) => {\n if (e.keyCode === 13) {\n this.handleSubmitGroup();\n e.preventDefault();\n }\n };\n\n render() {\n return(\n \n {gettext('New Group')}\n \n \n \n {this.state.errorMsg}\n \n \n \n \n \n \n );\n }\n}\n\nconst CreateGroupDialogPropTypes = {\n toggleAddGroupModal: PropTypes.func.isRequired,\n onCreateGroup: PropTypes.func.isRequired,\n showAddGroupModal: PropTypes.bool.isRequired,\n};\n\nCreateGroupDialog.propTypes = CreateGroupDialogPropTypes;\n\nexport default CreateGroupDialog;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext, siteRoot, canAddGroup } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport Loading from '../../components/loading';\nimport Group from '../../models/group';\nimport Repo from '../../models/repo';\nimport toaster from '../../components/toast';\nimport GroupsToolbar from '../../components/toolbar/groups-toolbar';\nimport SharedRepoListView from '../../components/shared-repo-list-view/shared-repo-list-view';\nimport CreateGroupDialog from '../../components/dialog/create-group-dialog';\nimport LibDetail from '../../components/dirent-detail/lib-details';\nimport EmptyTip from '../../components/empty-tip';\n\nimport '../../css/groups.css';\n\nconst propTypes = {\n group: PropTypes.object.isRequired,\n onItemDetails: PropTypes.func.isRequired,\n};\n\n\nclass RepoListViewPanel extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n repoList: [],\n };\n }\n\n componentDidMount() {\n let group = this.props.group;\n let repoList = group.repos.map(item => {\n let repo = new Repo(item);\n return repo;\n });\n this.setState({repoList: repoList});\n }\n\n onItemUnshare = (repo) => {\n let group = this.props.group;\n seafileAPI.unshareRepoToGroup(repo.repo_id, group.id).then(() => {\n let repoList = this.state.repoList.filter(item => {\n return item.repo_id !== repo.repo_id;\n });\n this.setState({repoList: repoList});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onItemDelete = (repo) => {\n let repoList = this.state.repoList.filter(item => {\n return item.repo_id !== repo.repo_id;\n });\n this.setState({repoList: repoList});\n };\n\n onItemRename = (repo, newName) => {\n let group = this.props.group;\n seafileAPI.renameGroupOwnedLibrary(group.id, repo.repo_id, newName).then(res => {\n let repoList = this.state.repoList.map(item => {\n if (item.repo_id === repo.repo_id) {\n item.repo_name = newName;\n }\n return item;\n });\n this.setState({repoList: repoList});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onMonitorRepo = (repo, monitored) => {\n let repoList = this.state.repoList.map(item => {\n if (item.repo_id === repo.repo_id) {\n item.monitored = monitored;\n }\n return item;\n });\n this.setState({repoList: repoList});\n };\n\n render() {\n let group = this.props.group;\n const emptyTip =

    {gettext('No libraries')}

    ;\n return (\n
    \n

    \n {group.name}\n

    \n {this.state.repoList.length === 0 ?\n emptyTip :\n \n }\n
    \n );\n }\n}\n\nRepoListViewPanel.propTypes = propTypes;\n\nclass GroupsView extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isLoading: true,\n errorMsg: '',\n groupList: [],\n showAddGroupModal: false,\n isShowDetails: false,\n currentRepo: null,\n };\n }\n\n listGroups = () => {\n seafileAPI.listGroups(true).then((res) => {\n // `{'with_repos': 1}`: list repos of every group\n let groupList = res.data.map(item => {\n let group = new Group(item);\n return group;\n });\n this.setState({\n isLoading: false,\n groupList: groupList.sort((a, b) => {\n return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1;\n })\n });\n }).catch((error) => {\n this.setState({\n isLoading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n toggleAddGroupModal = () => {\n this.setState({\n showAddGroupModal: !this.state.showAddGroupModal\n });\n };\n\n onCreateGroup = () => {\n this.setState({\n showAddGroupModal: false,\n isLoading: true,\n groupList: [],\n });\n this.listGroups();\n };\n\n componentDidMount() {\n this.listGroups();\n }\n\n onItemDetails = (repo) => {\n this.setState({\n isShowDetails: true,\n currentRepo: repo,\n });\n };\n\n closeDetails = () => {\n this.setState({isShowDetails: false});\n };\n\n render() {\n const emptyTip = (\n \n

    {gettext('No groups')}

    \n {canAddGroup ?\n

    {gettext('You are not in any groups. Groups allow multiple people to collaborate on libraries. You can create a group by clicking the \"New Group\" button in the menu bar.')}

    :\n

    {gettext('You are not in any groups. Groups allow multiple people to collaborate on libraries. Groups you join will be listed here.')}

    \n }\n
    \n );\n\n return (\n \n \n
    \n
    \n
    \n

    {gettext('My Groups')}

    \n
    \n
    \n {this.state.isLoading && }\n {(!this.state.isLoading && this.state.errorMsg) &&
    {this.state.errorMsg}
    }\n {(!this.state.isLoading && !this.state.errorMsg && this.state.groupList.length == 0) && emptyTip}\n {!this.state.isLoading && this.state.groupList.map((group, index) => {\n return (\n \n );\n })}\n
    \n
    \n {this.state.isShowDetails && (\n
    \n \n
    \n )}\n
    \n { this.state.showAddGroupModal &&\n \n }\n
    \n );\n }\n}\n\nconst GroupsViewPropTypes = {\n onShowSidePanel: PropTypes.func.isRequired,\n onSearchedClick: PropTypes.func.isRequired,\n};\n\nGroupsView.propTypes = GroupsViewPropTypes;\n\nexport default GroupsView;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport CommonToolbar from './common-toolbar';\nimport { Button } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n onShowSidePanel: PropTypes.func.isRequired,\n onSearchedClick: PropTypes.func.isRequired,\n toggleInvitePeopleDialog: PropTypes.func.isRequired,\n searchPlaceholder: PropTypes.string.isRequired,\n};\n\nclass InvitationsToolbar extends React.Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n let { onShowSidePanel, onSearchedClick, toggleInvitePeopleDialog } = this.props;\n return (\n
    \n
    \n \n \n {Utils.isDesktop() ? (\n
    \n \n
    \n ) : (\n \n )}\n
    \n \n
    \n );\n }\n}\n\nInvitationsToolbar.propTypes = propTypes;\n\nexport default InvitationsToolbar;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Utils } from '../../utils/utils';\nimport { gettext } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Input, Button } from 'reactstrap';\nimport toaster from '../toast';\nimport Loading from '../loading';\n\nconst InvitePeopleDialogPropTypes = {\n onInvitePeople: PropTypes.func.isRequired,\n toggleDialog: PropTypes.func.isRequired,\n};\n\nclass InvitePeopleDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n emails: '',\n errorMsg: '',\n isSubmitting: false\n };\n }\n\n handleInputChange = (e) => {\n let emails = e.target.value;\n this.setState({\n emails: emails\n });\n if (this.state.errorMsg) {\n this.setState({\n errorMsg: ''\n });\n }\n };\n\n handleKeyDown = (e) => {\n if (e.keyCode === 13) {\n e.preventDefault();\n this.handleSubmitInvite();\n }\n };\n\n handleSubmitInvite = () => {\n let emails = this.state.emails.trim();\n if (!emails) {\n this.setState({\n errorMsg: gettext('It is required.')\n });\n return false;\n }\n\n let emailsArray = [];\n emails = emails.split(',');\n for (let i = 0, len = emails.length; i < len; i++) {\n let email = emails[i].trim();\n if (email) {\n emailsArray.push(email);\n }\n }\n\n if (!emailsArray.length) {\n this.setState({\n errorMsg: gettext('Email is invalid.')\n });\n return false;\n }\n\n this.setState({\n isSubmitting: true\n });\n seafileAPI.invitePeople(emailsArray).then((res) => {\n this.props.toggleDialog();\n const success = res.data.success;\n if (success.length) {\n let successMsg = '';\n if (success.length == 1) {\n successMsg = gettext('Successfully invited %(email).')\n .replace('%(email)', success[0].accepter);\n } else {\n successMsg = gettext('Successfully invited %(email) and %(num) other people.')\n .replace('%(email)', success[0].accepter)\n .replace('%(num)', success.length - 1);\n }\n toaster.success(successMsg);\n this.props.onInvitePeople(success);\n }\n const failed = res.data.failed;\n if (failed.length) {\n for (let i = 0, len = failed.length; i < len; i++) {\n let failedMsg = failed[i].email + ': ' + failed[i].error_msg;\n toaster.danger(failedMsg);\n }\n }\n }).catch((error) => {\n const errorMsg = Utils.getErrorMsg(error);\n toaster.danger(errorMsg);\n this.props.toggleDialog();\n });\n };\n\n render() {\n const { isSubmitting } = this.state;\n return (\n \n {gettext('Invite Guest')}\n \n \n \n

    {this.state.errorMsg}

    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nInvitePeopleDialog.propTypes = InvitePeopleDialogPropTypes;\n\nexport default InvitePeopleDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport Loading from '../loading';\nimport toaster from '../toast';\n\nconst propTypes = {\n accepter: PropTypes.string.isRequired,\n token: PropTypes.string.isRequired,\n revokeInvitation: PropTypes.func.isRequired,\n toggleDialog: PropTypes.func.isRequired\n};\n\nclass InvitationRevokeDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isSubmitting: false\n };\n }\n\n onRevokeInvitation = () => {\n this.setState({\n isSubmitting: true,\n });\n\n seafileAPI.revokeInvitation(this.props.token).then((res) => {\n this.props.revokeInvitation();\n this.props.toggleDialog();\n const msg = gettext('Successfully revoked access of user {placeholder}.').replace('{placeholder}', this.props.accepter);\n toaster.success(msg);\n }).catch((error) => {\n const errorMsg = Utils.getErrorMsg(error);\n toaster.danger(errorMsg);\n this.props.toggleDialog();\n });\n };\n\n render() {\n const { toggleDialog } = this.props;\n const { isSubmitting } = this.state;\n const email = '' + Utils.HTMLescape(this.props.accepter) + '';\n const content = gettext('Are you sure to revoke access of user {placeholder} ?').replace('{placeholder}', email);\n\n return (\n \n {gettext('Revoke Access')}\n \n

    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nInvitationRevokeDialog.propTypes = propTypes;\n\nexport default InvitationRevokeDialog;\n","import React, { Component, Fragment } from 'react';\nimport { Dropdown, DropdownToggle, DropdownItem } from 'reactstrap';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport InvitationsToolbar from '../../components/toolbar/invitations-toolbar';\nimport InvitePeopleDialog from '../../components/dialog/invite-people-dialog';\nimport InvitationRevokeDialog from '../../components/dialog/invitation-revoke-dialog';\nimport Loading from '../../components/loading';\nimport toaster from '../../components/toast';\nimport EmptyTip from '../../components/empty-tip';\n\nimport '../../css/invitations.css';\n\nclass Item extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n isOpMenuOpen: false, // for mobile\n isRevokeDialogOpen: false\n };\n }\n\n toggleOpMenu = () => {\n this.setState({\n isOpMenuOpen: !this.state.isOpMenuOpen\n });\n };\n\n onMouseEnter = () => {\n this.setState({\n isOpIconShown: true\n });\n };\n\n onMouseLeave = () => {\n this.setState({\n isOpIconShown: false\n });\n };\n\n deleteItem = (e) => {\n e.preventDefault();\n // make the icon avoid being clicked repeatedly\n this.setState({\n isOpIconShown: false\n });\n const token = this.props.invitation.token;\n seafileAPI.deleteInvitation(token).then((res) => {\n this.setState({deleted: true});\n toaster.success(gettext('Successfully deleted 1 item.'));\n }).catch((error) => {\n const errorMsg = Utils.getErrorMsg(error);\n toaster.danger(errorMsg);\n this.setState({\n isOpIconShown: true\n });\n });\n };\n\n revokeItem = () => {\n this.setState({deleted: true});\n };\n\n toggleRevokeDialog = (e) => {\n e.preventDefault();\n this.setState({\n isRevokeDialogOpen: !this.state.isRevokeDialogOpen\n });\n };\n\n render() {\n const { isOpIconShown, deleted, isRevokeDialogOpen } = this.state;\n\n if (deleted) {\n return null;\n }\n\n const item = this.props.invitation;\n\n const desktopItem = (\n \n {item.accepter}\n {moment(item.invite_time).format('YYYY-MM-DD')}\n {moment(item.expire_time).format('YYYY-MM-DD')}\n {item.accept_time && }\n \n {isOpIconShown && (\n item.accept_time ?\n \n :\n \n \n )}\n \n \n );\n\n const mobileItem = (\n \n \n {item.accepter}
    \n {moment(item.invite_time).format('YYYY-MM-DD')}({gettext('Invite Time')})\n {moment(item.expire_time).format('YYYY-MM-DD')}({gettext('Expiration')})\n {item.accept_time && gettext('Accepted')}\n \n \n \n \n
    \n
    \n
    \n {item.accept_time ?\n {gettext('Revoke Access')} :\n {gettext('Delete')}\n }\n
    \n
    \n
    \n \n \n );\n\n return (\n \n {this.props.isDesktop ? desktopItem : mobileItem}\n {isRevokeDialogOpen &&\n \n }\n \n );\n }\n}\n\nconst ItemPropTypes = {\n data: PropTypes.object.isRequired,\n invitation: PropTypes.object.isRequired,\n isDesktop: PropTypes.bool.isRequired,\n};\n\nItem.propTypes = ItemPropTypes;\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n const {\n loading, errorMsg, invitationsList\n } = this.props.data;\n\n if (loading) {\n return ;\n }\n\n if (errorMsg) {\n return

    {errorMsg}

    ;\n }\n\n if (!invitationsList.length) {\n return (\n \n

    {gettext('No guest invitations')}

    \n

    {gettext('You have not invited any guests yet. A guest can access shared libraries through the web interface allowing more efficient ways to collaborate than through links. You can invite a guest by clicking the \"Invite Guest\" button in the menu bar.')}

    \n
    \n );\n }\n\n const isDesktop = Utils.isDesktop();\n return (\n \n \n {isDesktop ?\n \n \n \n \n \n \n \n :\n \n \n \n \n }\n \n \n {invitationsList.map((invitation, index) => {\n return (\n \n );\n })}\n \n
    {gettext('Email')}{gettext('Invite Time')}{gettext('Expiration')}{gettext('Accepted')}
    \n );\n }\n}\n\nclass InvitationsView extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n invitationsList: [],\n isInvitePeopleDialogOpen: false\n };\n }\n\n componentDidMount() {\n seafileAPI.listInvitations().then((res) => {\n this.setState({\n invitationsList: res.data,\n loading: false\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n onInvitePeople = (invitationsArray) => {\n invitationsArray.push.apply(invitationsArray, this.state.invitationsList);\n this.setState({\n invitationsList: invitationsArray,\n });\n };\n\n toggleInvitePeopleDialog = () => {\n this.setState({\n isInvitePeopleDialogOpen: !this.state.isInvitePeopleDialogOpen\n });\n };\n\n render() {\n return (\n \n \n
    \n
    \n
    \n

    {gettext('Invite Guest')}

    \n
    \n
    \n \n
    \n
    \n
    \n {this.state.isInvitePeopleDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nContent.propTypes = {\n data: PropTypes.object.isRequired,\n};\n\nconst InvitationsViewPropTypes = {\n onShowSidePanel: PropTypes.func.isRequired,\n onSearchedClick: PropTypes.func.isRequired,\n};\n\nInvitationsView.propTypes = InvitationsViewPropTypes;\n\nexport default InvitationsView;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input } from 'reactstrap';\n\nconst propTypes = {\n toggleCancel: PropTypes.func.isRequired,\n addWiki: PropTypes.func.isRequired,\n};\n\nclass NewWikiDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isExist: false,\n name: '',\n repoID: '',\n isSubmitBtnActive: false,\n };\n }\n\n inputNewName = (e) => {\n if (!event.target.value.trim()) {\n this.setState({isSubmitBtnActive: false});\n } else {\n this.setState({isSubmitBtnActive: true});\n }\n\n this.setState({\n name: e.target.value,\n });\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.handleSubmit();\n }\n };\n\n handleSubmit = () => {\n let { isExist, name, repoID } = this.state;\n this.props.addWiki(isExist, name, repoID);\n this.props.toggleCancel();\n };\n\n toggle = () => {\n this.props.toggleCancel();\n };\n\n render() {\n return (\n \n {gettext('New Wiki')}\n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nNewWikiDialog.propTypes = propTypes;\n\nexport default NewWikiDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport moment from 'moment';\nimport Repo from '../../models/repo';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n toggleCancel: PropTypes.func.isRequired,\n addWiki: PropTypes.func.isRequired\n};\n\nclass WikiSelectDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n repos: [],\n repoID: '',\n };\n }\n\n componentDidMount() {\n seafileAPI.listRepos().then(res => {\n let repoList = res.data.repos\n .filter(item => {\n switch (item.type) {\n case 'mine': // my libraries\n return !item.encrypted;\n case 'shared': // libraries shared with me\n // 'is_admin': the library is shared with 'admin' permission\n return !item.encrypted && item.is_admin;\n case 'group':\n default:\n return !item.encrypted && !res.data.repos.some(repo => {\n // just remove the duplicated libraries\n return repo.type != item.type && repo.repo_id == item.repo_id;\n });\n }\n })\n .map(item => {\n let repo = new Repo(item);\n return repo;\n });\n repoList = Utils.sortRepos(repoList, 'name', 'asc');\n this.setState({repos: repoList});\n });\n }\n\n onChange = (repo) => {\n this.setState({\n repoID: repo.repo_id,\n });\n };\n\n handleSubmit = () => {\n let { repoID } = this.state;\n this.props.addWiki(repoID);\n this.props.toggleCancel();\n };\n\n toggle = () => {\n this.props.toggleCancel();\n };\n\n render() {\n return (\n \n {gettext('Publish a Library')}\n \n \n \n \n \n \n \n \n \n \n \n {this.state.repos.map((repo, index) => {\n return (\n \n \n \n \n \n \n );\n })}\n \n
    {/* select */}{/* icon */}{gettext('Name')}{gettext('Last Update')}
    {Utils.getLibIconTitle(repo)}{repo.repo_name}{moment(repo.last_modified).fromNow()}
    \n
    \n \n \n {this.state.repoID ?\n :\n \n }\n \n
    \n );\n }\n}\n\nWikiSelectDialog.propTypes = propTypes;\n\nexport default WikiSelectDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\n\nconst propTypes = {\n toggleCancel: PropTypes.func.isRequired,\n handleSubmit: PropTypes.func.isRequired,\n};\n\nclass WikiDeleteDialog extends React.Component {\n\n toggle = () => {\n this.props.toggleCancel();\n };\n\n render() {\n return (\n \n {gettext('Unpublish Library')}\n \n

    {gettext('Are you sure you want to unpublish this library?')}

    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nWikiDeleteDialog.propTypes = propTypes;\n\nexport default WikiDeleteDialog;\n","import React, { Component, Fragment } from 'react';\nimport { Dropdown, DropdownToggle, DropdownItem } from 'reactstrap';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { siteRoot, gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n// import { seafileAPI } from '../../utils/seafile-api';\n// import Toast from '../toast';\nimport ModalPortal from '../modal-portal';\nimport WikiDeleteDialog from '../dialog/wiki-delete-dialog';\n// import Rename from '../rename';\n\nconst propTypes = {\n wiki: PropTypes.object.isRequired,\n // renameWiki: PropTypes.func.isRequired,\n deleteWiki: PropTypes.func.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n};\n\nclass WikiListItem extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isOpMenuOpen: false, // for mobile\n isShowDeleteDialog: false,\n // isRenameing: false,\n highlight: false,\n // permission: this.props.wiki.permission,\n };\n }\n\n toggleOpMenu = () => {\n this.setState({\n isOpMenuOpen: !this.state.isOpMenuOpen\n });\n };\n\n // clickMenuToggle = (e) => {\n // e.preventDefault();\n // this.onMenuToggle(e);\n // }\n\n // onMenuToggle = (e) => {\n // let targetType = e.target.dataset.toggle;\n // if (targetType !== 'item') {\n // if (this.props.isItemFreezed) {\n // this.setState({\n // highlight: false,\n // isShowMenuControl: false,\n // isShowWikiMenu: !this.state.isShowWikiMenu\n // });\n // this.props.onUnfreezedItem();\n // } else {\n // this.setState({\n // isShowWikiMenu: !this.state.isShowWikiMenu\n // });\n // this.props.onFreezedItem();\n // }\n // }\n // }\n\n onMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({ highlight: true });\n }\n };\n\n onMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({ highlight: false });\n }\n };\n\n // changePerm = (permission) => {\n // let wiki = this.props.wiki;\n // seafileAPI.updateWikiPermission(wiki.slug, permission).then(() => {\n // this.setState({permission: permission});\n // }).catch((error) => {\n // if(error.response) {\n // let errorMsg = error.response.data.error_msg;\n // Toast.danger(errorMsg);\n // }\n // });\n // }\n\n // onRenameToggle = (e) => {\n // this.props.onFreezedItem();\n // this.setState({\n // isShowWikiMenu: false,\n // isShowMenuControl: false,\n // isRenameing: true,\n // });\n // }\n\n // onRenameConfirm = (newName) => {\n // this.renameWiki(newName);\n // this.onRenameCancel();\n // }\n\n // onRenameCancel = () => {\n // this.props.onUnfreezedItem();\n // this.setState({isRenameing: false});\n // }\n\n onDeleteToggle = (e) => {\n e.preventDefault();\n this.props.onUnfreezedItem();\n this.setState({\n isShowDeleteDialog: !this.state.isShowDeleteDialog,\n });\n };\n\n onDeleteCancel = () => {\n this.props.onUnfreezedItem();\n this.setState({\n isShowDeleteDialog: !this.state.isShowDeleteDialog,\n });\n };\n\n // renameWiki = (newName) => {\n // let wiki = this.props.wiki;\n // this.props.renameWiki(wiki, newName);\n // }\n\n deleteWiki = () => {\n let wiki = this.props.wiki;\n this.props.deleteWiki(wiki);\n this.setState({\n isShowDeleteDialog: !this.state.isShowDeleteDialog,\n });\n };\n\n render() {\n let wiki = this.props.wiki;\n let userProfileURL = `${siteRoot}profile/${encodeURIComponent(wiki.owner)}/`;\n let fileIconUrl = Utils.getDefaultLibIconUrl(false);\n let deleteIcon = `action-icon sf2-icon-x3 ${this.state.highlight ? '' : 'invisible'}`;\n\n const desktopItem = (\n \n \"\"\n \n {wiki.name}\n {/*this.state.isRenameing ?\n :\n {wiki.name}\n */}\n \n {wiki.owner_nickname}\n {moment(wiki.updated_at).fromNow()}\n \n \n \n \n );\n\n const mobileItem = (\n \n \"\"\n \n {wiki.name}
    \n {wiki.owner_nickname}\n {moment(wiki.updated_at).fromNow()}\n \n \n \n \n
    \n
    \n
    \n {gettext('Unpublish')}\n
    \n
    \n
    \n \n \n );\n\n return (\n \n {Utils.isDesktop() ? desktopItem : mobileItem}\n {this.state.isShowDeleteDialog &&\n \n \n \n }\n \n );\n }\n}\n\nWikiListItem.propTypes = propTypes;\n\nexport default WikiListItem;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport WikiListItem from './wiki-list-item';\nimport LibsMobileThead from '../libs-mobile-thead';\n\nconst propTypes = {\n data: PropTypes.object.isRequired,\n renameWiki: PropTypes.func.isRequired,\n deleteWiki: PropTypes.func.isRequired,\n};\n\nclass WikiListView extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false,\n };\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n render() {\n let { loading, errorMsg, wikis } = this.props.data;\n\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const isDesktop = Utils.isDesktop();\n const desktopThead = (\n \n \n \n {gettext('Name')}\n {gettext('Owner')}\n {gettext('Last Update')}\n {/* operation */}\n \n \n );\n return (\n \n {isDesktop ? desktopThead : }\n \n {wikis.map((wiki, index) => {\n return (\n \n );\n })}\n \n
    \n );\n }\n }\n}\n\nWikiListView.propTypes = propTypes;\n\nexport default WikiListView;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'reactstrap';\nimport MediaQuery from 'react-responsive';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { gettext, canPublishRepo } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../../components/toast';\nimport ModalPortal from '../../components/modal-portal';\nimport EmptyTip from '../../components/empty-tip';\nimport CommonToolbar from '../../components/toolbar/common-toolbar';\nimport NewWikiDialog from '../../components/dialog/new-wiki-dialog';\nimport WikiSelectDialog from '../../components/dialog/wiki-select-dialog';\nimport WikiListView from '../../components/wiki-list-view/wiki-list-view';\n\nconst propTypes = {\n onShowSidePanel: PropTypes.func.isRequired,\n onSearchedClick: PropTypes.func.isRequired,\n};\n\nclass Wikis extends Component {\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n wikis: [],\n isShowAddWikiMenu: false,\n isShowSelectDialog: false,\n isShowCreateDialog: false,\n };\n }\n\n componentDidMount() {\n this.getWikis();\n }\n\n getWikis = () => {\n seafileAPI.listWikis().then(res => {\n this.setState({\n loading: false,\n wikis: res.data.data\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n clickMenuToggle = (e) => {\n e.preventDefault();\n this.onMenuToggle();\n };\n\n onMenuToggle = () => {\n this.setState({isShowAddWikiMenu: !this.state.isShowAddWikiMenu});\n };\n\n onSelectToggle = () => {\n this.setState({isShowSelectDialog: !this.state.isShowSelectDialog});\n };\n\n onCreateToggle = () => {\n this.setState({isShowCreateDialog: !this.state.isShowCreateDialog});\n };\n\n addWiki = (repoID) => {\n seafileAPI.addWiki(repoID).then((res) => {\n this.state.wikis.push(res.data);\n this.setState({wikis: this.state.wikis});\n }).catch((error) => {\n if(error.response) {\n let errorMsg = error.response.data.error_msg;\n toaster.danger(errorMsg);\n }\n });\n };\n\n renameWiki = (wiki, newName) => {\n seafileAPI.renameWiki(wiki.slug, newName).then((res) => {\n let wikis = this.state.wikis.map((item) => {\n if (item.name === wiki.name) {\n item = res.data;\n }\n return item;\n });\n this.setState({wikis: wikis});\n }).catch((error) => {\n if(error.response) {\n let errorMsg = error.response.data.error_msg;\n toaster.danger(errorMsg);\n }\n });\n };\n\n deleteWiki = (wiki) => {\n seafileAPI.deleteWiki(wiki.slug).then(() => {\n let wikis = this.state.wikis.filter(item => {\n return item.name !== wiki.name;\n });\n this.setState({wikis: wikis});\n }).catch((error) => {\n if(error.response) {\n let errorMsg = error.response.data.error_msg;\n toaster.danger(errorMsg);\n }\n });\n };\n\n render() {\n return (\n \n
    \n
    \n \n {canPublishRepo &&\n
    \n \n \n \n \n \n \n \n \n
    \n }\n
    \n \n
    \n
    \n
    \n
    \n
    \n

    {gettext('Published Libraries')}

    \n
    \n
    \n
    \n {(this.state.loading || this.state.wikis.length !== 0) &&\n \n }\n {(!this.state.loading && this.state.wikis.length === 0) &&\n \n

    {gettext('No published libraries')}

    \n

    {gettext('You have not published any libraries yet. A published library can be accessed by anyone, not only users, via its URL. You can publish a library by clicking the \"Publish a Library\" button in the menu bar.')}

    \n
    \n }\n
    \n
    \n
    \n {this.state.isShowCreateDialog && (\n \n \n \n )}\n {this.state.isShowSelectDialog && (\n \n \n \n )}\n
    \n );\n }\n}\n\nWikis.propTypes = propTypes;\n\nexport default Wikis;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport CommonToolbar from './common-toolbar';\n\nconst propTypes = {\n searchPlaceholder: PropTypes.string,\n onShowSidePanel: PropTypes.func.isRequired,\n onSearchedClick: PropTypes.func.isRequired,\n};\n\nclass GeneralToolbar extends React.Component {\n\n render() {\n // todo get repoID?\n let { onShowSidePanel, onSearchedClick } = this.props;\n return (\n
    \n
    \n \n \n
    \n \n
    \n );\n }\n}\n\nGeneralToolbar.propTypes = propTypes;\n\nexport default GeneralToolbar;\n","import React, { Fragment } from 'react';\nimport GeneralToolBar from './toolbar/general-toolbar';\n\nconst MainContentWrapper = (WrapperedComponent) => {\n return class Wrapper extends React.Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n return (\n \n \n \n \n );\n }\n };\n};\n\nexport default MainContentWrapper;\n","import React, { Component } from 'react';\nimport ReactDom from 'react-dom';\nimport { Router, navigate } from '@gatsbyjs/reach-router';\nimport MediaQuery from 'react-responsive';\nimport { Modal } from 'reactstrap';\nimport { siteRoot, canAddRepo, isDocs } from './utils/constants';\nimport { Utils } from './utils/utils';\nimport SystemNotification from './components/system-notification';\nimport SidePanel from './components/side-panel';\nimport MainPanel from './components/main-panel';\nimport DraftsView from './pages/drafts/drafts-view';\nimport DraftContent from './pages/drafts/draft-content';\nimport FilesActivities from './pages/dashboard/files-activities';\nimport MyFileActivities from './pages/dashboard/my-file-activities';\nimport Starred from './pages/starred/starred';\nimport LinkedDevices from './pages/linked-devices/linked-devices';\nimport editUtilities from './utils/editor-utilities';\nimport ShareAdminLibraries from './pages/share-admin/libraries';\nimport ShareAdminFolders from './pages/share-admin/folders';\nimport ShareAdminShareLinks from './pages/share-admin/share-links';\nimport ShareAdminUploadLinks from './pages/share-admin/upload-links';\nimport SharedLibraries from './pages/shared-libs/shared-libs';\nimport ShareWithOCM from './pages/share-with-ocm/shared-with-ocm';\nimport OCMViaWebdav from './pages/ocm-via-webdav/ocm-via-webdav';\nimport OCMRepoDir from './pages/share-with-ocm/remote-dir-view';\nimport MyLibraries from './pages/my-libs/my-libs';\nimport MyLibDeleted from './pages/my-libs/my-libs-deleted';\nimport PublicSharedView from './pages/shared-with-all/public-shared-view';\nimport LibContentView from './pages/lib-content-view/lib-content-view';\nimport Group from './pages/groups/group-view';\nimport Groups from './pages/groups/groups-view';\nimport InvitationsView from './pages/invitations/invitations-view';\nimport Wikis from './pages/wikis/wikis';\nimport MainContentWrapper from './components/main-content-wrapper';\n\nimport './css/layout.css';\nimport './css/toolbar.css';\nimport './css/search.css';\n\nconst FilesActivitiesWrapper = MainContentWrapper(FilesActivities);\nconst MyFileActivitiesWrapper = MainContentWrapper(MyFileActivities);\nconst DraftsViewWrapper = MainContentWrapper(DraftsView);\nconst StarredWrapper = MainContentWrapper(Starred);\nconst LinkedDevicesWrapper = MainContentWrapper(LinkedDevices);\nconst SharedLibrariesWrapper = MainContentWrapper(SharedLibraries);\nconst SharedWithOCMWrapper = MainContentWrapper(ShareWithOCM);\nconst OCMViaWebdavWrapper = MainContentWrapper(OCMViaWebdav);\nconst ShareAdminLibrariesWrapper = MainContentWrapper(ShareAdminLibraries);\nconst ShareAdminFoldersWrapper = MainContentWrapper(ShareAdminFolders);\n\nclass App extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpen: false,\n isSidePanelClosed: false,\n draftCounts: 0,\n draftList:[],\n isLoadingDraft: true,\n currentTab: '/',\n pathPrefix: [],\n };\n this.dirViewPanels = ['my-libs', 'shared-libs', 'org']; // and group\n window.onpopstate = this.onpopstate;\n }\n\n onpopstate = (event) => {\n if (event.state && event.state.currentTab && event.state.pathPrefix) {\n let { currentTab, pathPrefix } = event.state;\n this.setState({currentTab, pathPrefix});\n }\n };\n\n UNSAFE_componentWillMount() {\n if (!Utils.isDesktop()) {\n this.setState({\n isSidePanelClosed: true\n });\n }\n }\n\n navigateClientUrlToLib = () =>{\n if(window.location.hash && window.location.hash.indexOf('common/lib') != -1){\n let splitUrlArray = window.location.hash.split('/');\n let repoID = splitUrlArray[splitUrlArray.length - 2];\n let url = siteRoot + 'library/' + repoID + '/';\n navigate(url, {repalce: true});\n }\n };\n\n componentDidMount() {\n // url from client e.g. http://127.0.0.1:8000/#common/lib/34e7fb92-e91d-499d-bcde-c30ea8af9828/\n // navigate to library page http://127.0.0.1:8000/library/34e7fb92-e91d-499d-bcde-c30ea8af9828/\n this.navigateClientUrlToLib();\n\n // e.g. from http://127.0.0.1:8000/drafts/reviews/\n // get reviews\n // TODO: need refactor later\n let href = window.location.href.split('/');\n if (isDocs) {\n this.getDrafts();\n }\n this.setState({currentTab: href[href.length - 2]});\n }\n\n getDrafts = () => {\n editUtilities.listDrafts().then(res => {\n this.setState({\n draftCounts: res.data.draft_counts,\n draftList: res.data.data,\n isLoadingDraft: false,\n });\n });\n };\n\n updateDraftsList = (draft_id) => {\n this.setState({\n draftCounts: this.state.draftCounts - 1,\n draftList: this.state.draftList.filter(draft => draft.id != draft_id),\n });\n };\n\n onCloseSidePanel = () => {\n this.setState({\n isSidePanelClosed: !this.state.isSidePanelClosed\n });\n };\n\n onShowSidePanel = () => {\n this.setState({\n isSidePanelClosed: !this.state.isSidePanelClosed\n });\n };\n\n onSearchedClick = (selectedItem) => {\n if (selectedItem.is_dir === true) {\n this.setState({currentTab: '', pathPrefix: []});\n let url = siteRoot + 'library/' + selectedItem.repo_id + '/' + selectedItem.repo_name + selectedItem.path;\n navigate(url, {repalce: true});\n } else {\n let url = siteRoot + 'lib/' + selectedItem.repo_id + '/file' + Utils.encodePath(selectedItem.path);\n let isWeChat = Utils.isWeChat();\n if (!isWeChat) {\n let newWindow = window.open('about:blank');\n newWindow.location.href = url;\n } else {\n location.href = url;\n }\n }\n };\n\n onGroupChanged = (groupID) => {\n setTimeout(function(){\n let url;\n if (groupID) {\n url = siteRoot + 'group/' + groupID + '/';\n }\n else {\n url = siteRoot + 'groups/';\n }\n window.location = url.toString();\n }, 1);\n };\n\n tabItemClick = (tabName, groupID) => {\n let pathPrefix = [];\n if (groupID || this.dirViewPanels.indexOf(tabName) > -1) {\n pathPrefix = this.generatorPrefix(tabName, groupID);\n }\n this.setState({\n currentTab: tabName,\n pathPrefix: pathPrefix\n }, () => {\n let { currentTab, pathPrefix } = this.state;\n window.history.replaceState({currentTab: currentTab, pathPrefix: pathPrefix}, null);\n });\n if (!Utils.isDesktop() && !this.state.isSidePanelClosed) {\n this.setState({ isSidePanelClosed: true });\n }\n };\n\n generatorPrefix = (tabName, groupID) => {\n let pathPrefix = [];\n if (groupID) {\n let navTab1 = {\n url: siteRoot + 'groups/',\n showName: 'Groups',\n name: 'groups',\n id: null,\n };\n let navTab2 = {\n url: siteRoot + 'group/' + groupID + '/',\n showName: tabName,\n name: tabName,\n id: groupID,\n };\n pathPrefix.push(navTab1);\n pathPrefix.push(navTab2);\n } else {\n let navTab = {\n url: siteRoot + tabName + '/',\n showName: this.getTabShowName(tabName),\n name: tabName,\n id: null,\n };\n pathPrefix.push(navTab);\n }\n return pathPrefix;\n };\n\n getTabShowName = (tabName) => {\n if (tabName === 'my-libs') {\n return 'Libraries';\n }\n if (tabName === 'shared-libs') {\n return 'Shared with me';\n }\n if (tabName === 'org') {\n return 'Shared with all';\n }\n };\n\n toggleSidePanel = () => {\n this.setState({\n isSidePanelClosed: !this.state.isSidePanelClosed\n });\n };\n\n render() {\n let { currentTab, isSidePanelClosed } = this.state;\n\n const home = canAddRepo ?\n :\n ;\n\n return (\n \n \n
    \n \n \n \n {home}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n );\n }\n}\n\nReactDom.render(, document.getElementById('wrapper'));\n","import React from 'react';\nimport { Popover } from 'reactstrap';\nimport PropTypes from 'prop-types';\nimport { KeyCodes } from '../../constants';\n\nconst propTypes = {\n target: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n boundariesElement: PropTypes.object,\n innerClassName: PropTypes.string,\n popoverClassName: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),\n hideSeahubPopover: PropTypes.func.isRequired,\n hideSeahubPopoverWithEsc: PropTypes.func,\n hideArrow: PropTypes.bool,\n canHideSeahubPopover: PropTypes.bool,\n placement: PropTypes.string,\n modifiers: PropTypes.object\n};\n\nclass SeahubPopover extends React.Component {\n\n SeahubPopoverRef = null;\n isSelectOpen = false;\n\n componentDidMount() {\n document.addEventListener('mousedown', this.onMouseDown);\n document.addEventListener('keydown', this.onKeyDown);\n }\n\n componentWillUnmount() {\n document.removeEventListener('mousedown', this.onMouseDown);\n document.removeEventListener('keydown', this.onKeyDown);\n }\n\n getEventClassName = (e) => {\n // svg mouseEvent event.target.className is an object\n if (!e || !e.target) return '';\n return e.target.getAttribute('class') || '';\n };\n\n onKeyDown = (e) => {\n const { canHideSeahubPopover, hideSeahubPopoverWithEsc } = this.props;\n if (e.keyCode === KeyCodes.Escape && typeof hideSeahubPopoverWithEsc === 'function' && !this.isSelectOpen) {\n e.preventDefault();\n hideSeahubPopoverWithEsc();\n } else if (e.keyCode === KeyCodes.Enter) {\n // Resolve the default behavior of the enter key when entering formulas is blocked\n if (canHideSeahubPopover) return;\n e.stopImmediatePropagation();\n }\n };\n\n onMouseDown = (e) => {\n if (!this.props.canHideSeahubPopover) return;\n if (this.SeahubPopoverRef && e && this.getEventClassName(e).indexOf('popover') === -1 && !this.SeahubPopoverRef.contains(e.target)) {\n this.props.hideSeahubPopover(e);\n }\n };\n\n onPopoverInsideClick = (e) => {\n e.stopPropagation();\n };\n\n render() {\n const {\n target, boundariesElement, innerClassName, popoverClassName, hideArrow, modifiers,\n placement,\n } = this.props;\n let additionalProps = {};\n if (boundariesElement) {\n additionalProps.boundariesElement = boundariesElement;\n }\n return (\n \n
    this.SeahubPopoverRef = ref} onClick={this.onPopoverInsideClick}>\n {this.props.children}\n
    \n \n );\n }\n}\n\nSeahubPopover.defaultProps = {\n placement: 'bottom-start',\n hideArrow: true,\n canHideSeahubPopover: true\n};\n\nSeahubPopover.propTypes = propTypes;\n\nexport default SeahubPopover;\n","import assign from 'object-assign';\n\nimport { store } from './helpers';\n\nexport const MENU_SHOW = 'REACT_CONTEXTMENU_SHOW';\nexport const MENU_HIDE = 'REACT_CONTEXTMENU_HIDE';\n\n\nexport function dispatchGlobalEvent(eventName, opts, target = window) {\n // Compatibale with IE\n // @see http://stackoverflow.com/questions/26596123/internet-explorer-9-10-11-event-constructor-doesnt-work\n let event;\n\n if (typeof window.CustomEvent === 'function') {\n event = new window.CustomEvent(eventName, { detail: opts });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventName, false, true, opts);\n }\n\n if (target) {\n target.dispatchEvent(event);\n assign(store, opts);\n }\n}\n\nexport function showMenu(opts = {}, target) {\n dispatchGlobalEvent(MENU_SHOW, assign({}, opts, { type: MENU_SHOW }), target);\n}\n\nexport function hideMenu(opts = {}, target) {\n dispatchGlobalEvent(MENU_HIDE, assign({}, opts, { type: MENU_HIDE }), target);\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport listener from './globalEventListener';\nimport { hideMenu } from './actions';\nimport { callIfExists } from './helpers';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n id: PropTypes.string.isRequired,\n rtl: PropTypes.bool,\n onMenuItemClick: PropTypes.func.isRequired,\n onShowMenu: PropTypes.func,\n onHideMenu: PropTypes.func,\n hideOnLeave: PropTypes.bool,\n};\n\nclass ContextMenu extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n x: 0,\n y: 0,\n isVisible: false,\n currentObject: null,\n menuList: [],\n };\n }\n\n componentDidMount() {\n this.listenId = listener.register(this.handleShow, this.handleHide);\n }\n\n componentDidUpdate () {\n if (this.state.isVisible) {\n const wrapper = window.requestAnimationFrame || setTimeout;\n\n wrapper(() => {\n const { x, y } = this.state;\n const { top, left } = this.props.rtl ? this.getRTLMenuPosition(x, y) : this.getMenuPosition(x, y);\n\n wrapper(() => {\n if (!this.menu) return;\n this.menu.style.top = `${top}px`;\n this.menu.style.left = `${left}px`;\n this.menu.style.opacity = 1;\n this.menu.style.pointerEvents = 'auto';\n });\n });\n } else {\n if (!this.menu) return;\n this.menu.style.opacity = 0;\n this.menu.style.pointerEvents = 'none';\n }\n }\n\n componentWillUnmount() {\n if (this.listenId) {\n listener.unregister(this.listenId);\n }\n\n this.unregisterHandlers();\n }\n\n registerHandlers = () => {\n document.addEventListener('mousedown', this.handleOutsideClick);\n document.addEventListener('touchstart', this.handleOutsideClick);\n document.addEventListener('scroll', this.handleHide);\n document.addEventListener('contextmenu', this.handleHide);\n document.addEventListener('keydown', this.handleKeyNavigation);\n window.addEventListener('resize', this.handleHide);\n };\n\n unregisterHandlers = () => {\n document.removeEventListener('mousedown', this.handleOutsideClick);\n document.removeEventListener('touchstart', this.handleOutsideClick);\n document.removeEventListener('scroll', this.handleHide);\n document.removeEventListener('contextmenu', this.handleHide);\n document.removeEventListener('keydown', this.handleKeyNavigation);\n window.removeEventListener('resize', this.handleHide);\n };\n\n handleShow = (e) => {\n if (e.detail.id !== this.props.id) return;\n\n const { x, y } = e.detail.position;\n const { currentObject, menuList} = e.detail;\n\n this.setState({ isVisible: true, x, y, currentObject, menuList });\n this.registerHandlers();\n callIfExists(this.props.onShowMenu, e);\n };\n\n handleHide = (e) => {\n if (this.state.isVisible && (!e.detail || !e.detail.id || e.detail.id === this.props.id)) {\n this.unregisterHandlers();\n this.setState({ isVisible: false});\n callIfExists(this.props.onHideMenu, e);\n }\n };\n\n handleOutsideClick = (e) => {\n if (!this.menu.contains(e.target)) hideMenu();\n };\n\n handleMouseLeave = (event) => {\n event.preventDefault();\n\n if (this.props.hideOnLeave) hideMenu();\n };\n\n handleContextMenu = (e) => {\n this.handleHide(e);\n };\n\n handleKeyNavigation = (e) => {\n if (this.state.isVisible === false) {\n return;\n }\n e.preventDefault();\n this.hideMenu(e);\n };\n\n hideMenu = (e) => {\n if (e.keyCode === 27 || e.keyCode === 13) { // ECS or enter\n hideMenu();\n }\n };\n\n getMenuPosition = (x = 0, y = 0) => {\n let menuStyles = {\n top: y,\n left: x\n };\n\n if (!this.menu) return menuStyles;\n\n const { innerWidth, innerHeight } = window;\n const rect = this.menu.getBoundingClientRect();\n\n if (y + rect.height > innerHeight) {\n menuStyles.top -= rect.height;\n }\n\n if (x + rect.width > innerWidth) {\n menuStyles.left -= rect.width;\n }\n\n if (menuStyles.top < 0) {\n menuStyles.top = rect.height < innerHeight ? (innerHeight - rect.height) / 2 : 0;\n }\n\n if (menuStyles.left < 0) {\n menuStyles.left = rect.width < innerWidth ? (innerWidth - rect.width) / 2 : 0;\n }\n\n return menuStyles;\n };\n\n getRTLMenuPosition = (x = 0, y = 0) => {\n let menuStyles = {\n top: y,\n left: x\n };\n\n if (!this.menu) return menuStyles;\n\n const { innerWidth, innerHeight } = window;\n const rect = this.menu.getBoundingClientRect();\n\n // Try to position the menu on the left side of the cursor\n menuStyles.left = x - rect.width;\n\n if (y + rect.height > innerHeight) {\n menuStyles.top -= rect.height;\n }\n\n if (menuStyles.left < 0) {\n menuStyles.left += rect.width;\n }\n\n if (menuStyles.top < 0) {\n menuStyles.top = rect.height < innerHeight ? (innerHeight - rect.height) / 2 : 0;\n }\n\n if (menuStyles.left + rect.width > innerWidth) {\n menuStyles.left = rect.width < innerWidth ? (innerWidth - rect.width) / 2 : 0;\n }\n\n return menuStyles;\n };\n\n\n onMenuItemClick = (event) => {\n event.stopPropagation();\n let operation = Utils.getEventData(event, 'operation');\n let currentObject = this.state.currentObject;\n this.props.onMenuItemClick(operation, currentObject, event);\n };\n\n onContextMenu = (event) => {\n event.stopPropagation();\n };\n\n render() {\n const inlineStyle = { position: 'fixed', opacity: 0, pointerEvents: 'none', display: 'block' };\n return (\n
    { this.menu = menu; }}>\n {this.state.menuList.map((menuItem, index) => {\n if (menuItem === 'Divider') {\n return
    ;\n } else {\n return (\n \n {menuItem.value}\n \n );\n }\n })}\n
    \n );\n }\n}\n\nContextMenu.propTypes = propTypes;\n\nexport default ContextMenu;\n","import { MENU_SHOW, MENU_HIDE } from './actions';\nimport { uniqueId, hasOwnProp, canUseDOM } from './helpers';\n\nclass GlobalEventListener {\n\n constructor() {\n this.callbacks = {};\n\n if (canUseDOM) {\n window.addEventListener(MENU_SHOW, this.handleShowEvent);\n window.addEventListener(MENU_HIDE, this.handleHideEvent);\n }\n }\n\n handleShowEvent = (event) => {\n for (const id in this.callbacks) {\n if (hasOwnProp(this.callbacks, id)) this.callbacks[id].show(event);\n }\n };\n\n handleHideEvent = (event) => {\n for (const id in this.callbacks) {\n if (hasOwnProp(this.callbacks, id)) this.callbacks[id].hide(event);\n }\n };\n\n register = (showCallback, hideCallback) => {\n const id = uniqueId();\n\n this.callbacks[id] = {\n show: showCallback,\n hide: hideCallback\n };\n\n return id;\n };\n\n unregister = (id) => {\n if (id && this.callbacks[id]) {\n delete this.callbacks[id];\n }\n };\n}\n\nconst globalEventListener = new GlobalEventListener();\n\nexport default globalEventListener;\n","export function callIfExists(func, ...args) {\n return (typeof func === 'function') && func(...args);\n}\n\nexport function hasOwnProp(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function uniqueId() {\n return Math.random().toString(36).substring(7);\n}\n\nexport const store = {};\n\nexport const canUseDOM = Boolean(\n typeof window !== 'undefined' && window.document && window.document.createElement\n);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\n\nconst propTypes = {\n type: PropTypes.oneOf(['move', 'copy']).isRequired,\n asyncOperatedFilesLength: PropTypes.number.isRequired,\n asyncOperationProgress: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n toggleDialog: PropTypes.func.isRequired,\n};\n\nclass CopyMoveDirentProgressDialog extends React.Component {\n\n render() {\n\n let { type , asyncOperationProgress, asyncOperatedFilesLength } = this.props;\n let title = type === 'move' ? gettext('Move {num} items') : gettext('Copy {num} items');\n title = title.replace('{num}', asyncOperatedFilesLength);\n let progressStyle = {\n width: asyncOperationProgress + '%',\n lineHeight: '40px',\n textAlign: 'left',\n };\n return (\n \n {title}\n \n
    \n \n {asyncOperationProgress + '%'}\n
    \n \n
    \n
    \n );\n }\n}\n\nCopyMoveDirentProgressDialog.propTypes = propTypes;\n\nexport default CopyMoveDirentProgressDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, Input, ModalBody, ModalFooter, Form, FormGroup, Label, Alert } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n fileType: PropTypes.string,\n parentPath: PropTypes.string.isRequired,\n onAddFolder: PropTypes.func.isRequired,\n checkDuplicatedName: PropTypes.func.isRequired,\n addFolderCancel: PropTypes.func.isRequired,\n};\n\nclass CreateForder extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n parentPath: '',\n childName: '',\n errMessage: '',\n isSubmitBtnActive: false,\n };\n }\n\n componentDidMount() {\n let parentPath = this.props.parentPath;\n if (parentPath[parentPath.length - 1] === '/') { // mainPanel\n this.setState({parentPath: parentPath});\n } else {\n this.setState({parentPath: parentPath + '/'}); // sidePanel\n }\n }\n\n handleChange = (e) => {\n if (!e.target.value.trim()) {\n this.setState({isSubmitBtnActive: false});\n } else {\n this.setState({isSubmitBtnActive: true});\n }\n\n this.setState({childName: e.target.value});\n };\n\n handleSubmit = () => {\n if (!this.state.isSubmitBtnActive) {\n return;\n }\n\n let newName = this.state.childName;\n let isDuplicated = this.checkDuplicatedName();\n\n if (isDuplicated) {\n let errMessage = gettext('The name \"{name}\" is already taken. Please choose a different name.');\n errMessage = errMessage.replace('{name}', Utils.HTMLescape(newName));\n this.setState({errMessage: errMessage});\n } else {\n let path = this.state.parentPath + newName;\n this.props.onAddFolder(path);\n }\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.handleSubmit();\n e.preventDefault();\n }\n };\n\n toggle = () => {\n this.props.addFolderCancel();\n };\n\n checkDuplicatedName = () => {\n let isDuplicated = this.props.checkDuplicatedName(this.state.childName);\n return isDuplicated;\n };\n\n render() {\n return (\n \n {gettext('New Folder')}\n \n
    \n \n \n \n \n
    \n {this.state.errMessage && {this.state.errMessage}}\n
    \n \n \n \n \n
    \n );\n }\n}\n\nCreateForder.propTypes = propTypes;\n\nexport default CreateForder;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport Lightbox from '@seafile/react-image-lightbox';\nimport '@seafile/react-image-lightbox/style.css';\n\nconst propTypes = {\n imageItems: PropTypes.array.isRequired,\n imageIndex: PropTypes.number.isRequired,\n closeImagePopup: PropTypes.func.isRequired,\n moveToPrevImage: PropTypes.func.isRequired,\n moveToNextImage: PropTypes.func.isRequired\n};\n\nclass ImageDialog extends React.Component {\n\n render() {\n const imageItems = this.props.imageItems;\n const imageIndex = this.props.imageIndex;\n const imageItemsLength = imageItems.length;\n const name = imageItems[imageIndex].name;\n const imageTitle = `${name} (${imageIndex + 1}/${imageItemsLength})`;\n\n return (\n \n );\n }\n}\n\nImageDialog.propTypes = propTypes;\n\nexport default ImageDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\nimport copy from '../copy-to-clipboard';\nimport { gettext } from '../../utils/constants';\nimport toaster from '../../components/toast';\n\nconst propTypes = {\n link: PropTypes.string.isRequired,\n toggleDialog: PropTypes.func.isRequired\n};\n\nclass ShareAdminLink extends React.Component {\n\n constructor(props) {\n super(props);\n }\n\n copyToClipboard = () => {\n copy(this.props.link);\n this.props.toggleDialog();\n toaster.success(gettext('The link is copied to the clipboard.'), {duration: 2});\n };\n\n render() {\n const { link, toggleDialog } = this.props;\n return (\n \n {gettext('Link')}\n \n {link}\n \n \n \n \n \n \n );\n }\n}\n\nShareAdminLink.propTypes = propTypes;\n\nexport default ShareAdminLink;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap';\nimport { mediaUrl, gettext, fileServerRoot } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport Loading from '../loading';\n\nconst propTypes = {\n data: PropTypes.object,\n token: PropTypes.string,\n path: PropTypes.string.isRequired,\n repoID: PropTypes.string,\n target: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.array\n ]),\n toggleDialog: PropTypes.func.isRequired\n};\n\nlet interval;\n\nclass ZipDownloadDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: true,\n errorMsg: '',\n zipProgress: null\n };\n }\n\n componentDidMount() {\n const { token, path, repoID, target } = this.props;\n let getZipTask;\n if (token) {\n getZipTask = target.length ?\n seafileAPI.getShareLinkDirentsZipTask(token, path, target) :\n seafileAPI.getShareLinkZipTask(token, path);\n } else {\n getZipTask = seafileAPI.zipDownload(repoID, path, target);\n }\n getZipTask.then((res) => {\n const zipToken = res.data['zip_token'];\n this.setState({\n isLoading: false,\n errorMsg: '',\n zipToken: zipToken\n });\n this.queryZipProgress();\n interval = setInterval(this.queryZipProgress, 1000);\n }).catch((error) => {\n let errorMsg = Utils.getErrorMsg(error);\n this.setState({\n isLoading: false,\n errorMsg: errorMsg\n });\n });\n }\n\n queryZipProgress = () => {\n const zipToken = this.state.zipToken;\n seafileAPI.queryZipProgress(zipToken).then((res) => {\n const data = res.data;\n if (data.failed == 1) {\n clearInterval(interval);\n let errorMsg;\n switch (data.failed_reason) { // returned from seaserv\n case 'size too large':\n errorMsg = gettext('Failed to download. The total size of the files exceeded the limit.');\n break;\n case 'internal error':\n errorMsg = gettext('Internal Server Error');\n break;\n default:\n errorMsg = gettext('Error');\n }\n this.setState({\n isLoading: false,\n errorMsg: errorMsg\n });\n } else {\n this.setState({\n zipProgress: data.total == 0 ? '100%' : (data.zipped/data.total*100).toFixed(2) + '%'\n });\n if (data['total'] == data['zipped']) {\n clearInterval(interval);\n this.props.toggleDialog();\n location.href = `${fileServerRoot}zip/${zipToken}`;\n }\n }\n }).catch((error) => {\n clearInterval(interval);\n let errorMsg = Utils.getErrorMsg(error);\n this.setState({\n isLoading: false,\n errorMsg: errorMsg\n });\n });\n };\n\n cancelZipTask = () => {\n const zipToken = this.state.zipToken;\n seafileAPI.cancelZipTask(zipToken).then((res) => {\n // do nothing\n }).catch((error) => {\n // do nothing\n });\n };\n\n toggleDialog = () => {\n const zipProgress = this.state.zipProgress;\n if (zipProgress && zipProgress != '100%') {\n clearInterval(interval);\n this.cancelZipTask();\n }\n this.props.toggleDialog();\n };\n\n render() {\n return (\n \n {gettext('Download')}\n \n \n \n \n );\n }\n}\n\nclass Content extends React.Component {\n\n render() {\n const {isLoading, errorMsg, zipProgress} = this.props.data;\n\n if (isLoading) {\n return ;\n }\n\n if (errorMsg) {\n return (\n
    \n \"\"\n

    {errorMsg}

    \n
    \n );\n }\n\n return

    {`${gettext('Packaging...')} ${zipProgress}`}

    ;\n }\n}\n\nContent.propTypes = {\n data: PropTypes.object,\n};\n\nZipDownloadDialog.propTypes = propTypes;\n\nexport default ZipDownloadDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport listener from '../context-menu/globalEventListener';\nimport { Dropdown, ButtonDropdown, DropdownMenu, DropdownToggle, DropdownItem } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n tagName: PropTypes.string,\n item: PropTypes.object.isRequired,\n toggleClass: PropTypes.string,\n isHandleContextMenuEvent: PropTypes.bool,\n getMenuList: PropTypes.func.isRequired,\n onMenuItemClick: PropTypes.func.isRequired,\n freezeItem: PropTypes.func,\n unfreezeItem: PropTypes.func,\n};\n\nclass ItemDropdownMenu extends React.Component {\n\n static defaultProps = {\n isHandleContextMenuEvent: true,\n toggleClass: 'sf2-icon-caret-down'\n };\n\n constructor(props) {\n super(props);\n this.state = {\n menuList: [],\n isItemMenuShow: false,\n };\n }\n\n componentDidMount() {\n if (this.props.isHandleContextMenuEvent) {\n this.listenerId = listener.register(this.onShowMenu, this.onHideMenu);\n }\n let { item } = this.props;\n let menuList = this.props.getMenuList(item);\n this.setState({menuList: menuList});\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) { // for toolbar item operation\n let { item } = nextProps;\n if (item.name !== this.props.item.name) {\n let menuList = this.props.getMenuList(item);\n this.setState({menuList: menuList});\n }\n }\n\n componentWillUnmount() {\n if (this.props.isHandleContextMenuEvent && this.listenerId) {\n listener.unregister(this.listenerId);\n }\n }\n\n onShowMenu = () => {\n // nothing todo\n };\n\n onHideMenu = () => {\n if (this.state.isItemMenuShow) {\n this.setState({isItemMenuShow: false});\n if (typeof(this.props.unfreezeItem) === 'function') {\n this.props.unfreezeItem();\n }\n }\n };\n\n onDropdownToggleKeyDown = (e) => {\n if (e.key == 'Enter' || e.key == 'Space') {\n this.onDropdownToggleClick(e);\n }\n };\n\n onDropdownToggleClick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n this.toggleOperationMenu();\n };\n\n toggleOperationMenu = () => {\n this.setState(\n {isItemMenuShow: !this.state.isItemMenuShow},\n () => {\n if (this.state.isItemMenuShow && typeof(this.props.freezeItem) === 'function') {\n this.props.freezeItem();\n } else if (!this.state.isItemMenuShow && typeof(this.props.unfreezeItem) === 'function') {\n this.props.unfreezeItem();\n }\n }\n );\n };\n\n onMenuItemKeyDown = (e) => {\n if (e.key == 'Enter' || e.key == 'Space') {\n this.onMenuItemClick(e);\n }\n };\n\n onMenuItemClick = (event) => {\n let operation = Utils.getEventData(event, 'toggle');\n let item = this.props.item;\n this.props.onMenuItemClick(operation, event, item);\n };\n\n render() {\n let menuList = this.state.menuList;\n let { toggleClass, tagName } = this.props;\n toggleClass = 'sf-dropdown-toggle ' + toggleClass;\n\n if (!menuList.length) {\n return '';\n }\n\n if (tagName && tagName === 'button') {\n return (\n \n \n \n \n {menuList.map((menuItem, index) => {\n if (menuItem === 'Divider') {\n return ;\n } else {\n return (\n {menuItem.value}\n );\n }\n })}\n \n \n );\n }\n\n return (\n \n \n \n {menuList.map((menuItem, index) => {\n if (menuItem === 'Divider') {\n return ;\n } else {\n return (\n {menuItem.value}\n );\n }\n })}\n \n \n );\n }\n}\n\nItemDropdownMenu.propTypes = propTypes;\n\nexport default ItemDropdownMenu;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport '../../css/common-add-tool.css';\n\nfunction CommonAddTool(props) {\n const { callBack, footerName, className, addIconClassName } = props;\n return (\n
    {callBack(e);}}>\n \n {footerName}\n
    \n );\n}\n\nCommonAddTool.propTypes = {\n className: PropTypes.string,\n addIconClassName: PropTypes.string,\n footerName: PropTypes.string.isRequired,\n callBack: PropTypes.func.isRequired,\n};\n\nexport default CommonAddTool;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nconst propTypes = {\n placeholder: PropTypes.string,\n autoFocus: PropTypes.bool,\n className: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n onKeyDown: PropTypes.func,\n wait: PropTypes.number,\n disabled: PropTypes.bool,\n style: PropTypes.object,\n isClearable: PropTypes.bool,\n clearValue: PropTypes.func,\n clearClassName: PropTypes.string,\n components: PropTypes.object,\n value: PropTypes.string,\n};\n\nclass SearchInput extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n searchValue: props.value,\n };\n this.isInputtingChinese = false;\n this.timer = null;\n this.inputRef = null;\n }\n\n componentDidMount() {\n if (this.props.autoFocus && this.inputRef && this.inputRef !== document.activeElement) {\n setTimeout(() => {\n this.inputRef.focus();\n }, 0);\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.value !== this.props.value) {\n this.setState({searchValue: nextProps.value});\n }\n }\n\n componentWillUnmount() {\n this.timer && clearTimeout(this.timer);\n this.timer = null;\n this.inputRef = null;\n }\n\n onCompositionStart = () => {\n this.isInputtingChinese = true;\n };\n\n onChange = (e) => {\n this.timer && clearTimeout(this.timer);\n const { onChange, wait } = this.props;\n let text = e.target.value;\n this.setState({searchValue: text || ''}, () => {\n if (this.isInputtingChinese) return;\n this.timer = setTimeout(() => {\n onChange && onChange(this.state.searchValue.trim());\n }, wait);\n });\n };\n\n onCompositionEnd = (e) => {\n this.isInputtingChinese = false;\n this.onChange(e);\n };\n\n clearSearch = () => {\n const { clearValue } = this.props;\n this.setState({searchValue: ''}, () => {\n clearValue && clearValue();\n });\n };\n\n setFocus = (isSelectAllText) => {\n if (this.inputRef === document.activeElement) return;\n this.inputRef.focus();\n if (isSelectAllText) {\n const txtLength = this.state.searchValue.length;\n this.inputRef.setSelectionRange(0, txtLength);\n }\n };\n\n isFunction = (functionToCheck) => {\n const getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n };\n\n renderClear = () => {\n const { isClearable, clearClassName, components = {} } = this.props;\n const { searchValue } = this.state;\n if (!isClearable || !searchValue) return null;\n const { ClearIndicator } = components;\n if (React.isValidElement(ClearIndicator)) {\n return React.cloneElement(ClearIndicator, {clearValue: this.clearSearch});\n } else if (this.isFunction(ClearIndicator)) {\n return ;\n }\n return (\n ×\n );\n };\n\n render() {\n const { placeholder, autoFocus, className, onKeyDown, disabled, style } = this.props;\n const { searchValue } = this.state;\n\n return (\n \n this.inputRef = ref}\n />\n {this.renderClear()}\n \n );\n }\n}\n\nSearchInput.propTypes = propTypes;\n\nSearchInput.defaultProps = {\n wait: 100,\n disabled: false,\n value: '',\n};\n\nexport default SearchInput;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../toast';\n\nclass TagItem extends React.Component {\n\n onMouseEnter = () => {\n this.props.setHighlightIndex(this.props.index);\n };\n\n onMouseLeave = () => {\n this.props.setHighlightIndex(-1);\n };\n\n getRepoTagIdList = () => {\n let repoTagIdList = [];\n let fileTagList = this.props.fileTagList || [];\n repoTagIdList = fileTagList.map((fileTag) => fileTag.repo_tag_id);\n return repoTagIdList;\n };\n\n onEditFileTag = () => {\n let { repoID, repoTag, filePath } = this.props;\n let repoTagIdList = this.getRepoTagIdList();\n if (repoTagIdList.indexOf(repoTag.id) === -1) {\n let id = repoTag.id;\n seafileAPI.addFileTag(repoID, filePath, id).then(() => {\n repoTagIdList = this.getRepoTagIdList();\n this.props.onFileTagChanged();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n } else {\n let fileTag = null;\n let fileTagList = this.props.fileTagList;\n for(let i = 0; i < fileTagList.length; i++) {\n if (fileTagList[i].repo_tag_id === repoTag.id) {\n fileTag = fileTagList[i];\n break;\n }\n }\n seafileAPI.deleteFileTag(repoID, fileTag.id).then(() => {\n repoTagIdList = this.getRepoTagIdList();\n this.props.onFileTagChanged();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n };\n\n render() {\n const { repoTag, highlightIndex, index } = this.props;\n const repoTagIdList = this.getRepoTagIdList();\n const isTagSelected = repoTagIdList.indexOf(repoTag.id) != -1;\n return (\n \n
    \n {repoTag.name}\n
    \n {isTagSelected && }\n \n );\n }\n\n}\n\nTagItem.propTypes = {\n index: PropTypes.number.isRequired,\n highlightIndex: PropTypes.number.isRequired,\n repoID: PropTypes.string.isRequired,\n repoTag: PropTypes.object.isRequired,\n filePath: PropTypes.string.isRequired,\n fileTagList: PropTypes.array.isRequired,\n onFileTagChanged: PropTypes.func.isRequired,\n setHighlightIndex: PropTypes.func.isRequired,\n};\n\nexport default TagItem;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport RepoTag from '../../models/repo-tag';\nimport toaster from '../toast';\nimport CommonAddTool from '../common/common-add-tool';\nimport SearchInput from '../common/search-input';\nimport SeahubPopover from '../common/seahub-popover';\nimport TagItem from './tag-item';\nimport { KeyCodes, TAG_COLORS } from '../../constants';\n\nimport '../../css/repo-tag.css';\nimport '../../css/edit-filetag-popover.css';\n\nclass EditFileTagPopover extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n repotagList: [],\n searchVal: '',\n highlightIndex: -1,\n };\n }\n\n componentDidMount() {\n this.getRepoTagList();\n }\n\n setHighlightIndex = (highlightIndex) => {\n this.setState({ highlightIndex });\n };\n\n getRepoTagList = () => {\n let repoID = this.props.repoID;\n seafileAPI.listRepoTags(repoID).then(res => {\n let repotagList = [];\n res.data.repo_tags.forEach(item => {\n let repoTag = new RepoTag(item);\n repotagList.push(repoTag);\n });\n this.setState({repotagList: repotagList});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n generateRandomColor = () => {\n return TAG_COLORS[Math.floor(Math.random() * TAG_COLORS.length)];\n };\n\n createNewTag = () => {\n let name = this.state.searchVal.trim();\n if (!name) return;\n let color = this.generateRandomColor();\n let repoID = this.props.repoID;\n seafileAPI.createRepoTag(repoID, name, color).then((res) => {\n let repoTagID = res.data.repo_tag.repo_tag_id;\n this.onRepoTagCreated(repoTagID);\n this.setState({\n searchVal: '',\n highlightIndex: -1,\n });\n this.getRepoTagList();\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onRepoTagCreated = (repoTagID) => {\n let {repoID, filePath} = this.props;\n seafileAPI.addFileTag(repoID, filePath, repoTagID).then(() => {\n this.props.onFileTagChanged();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n getRepoTagIdList = () => {\n return (this.props.fileTagList || []).map((fileTag) => fileTag.repo_tag_id);\n };\n\n onEditFileTag = (repoTag) => {\n let { repoID, filePath } = this.props;\n let repoTagIdList = this.getRepoTagIdList();\n if (repoTagIdList.indexOf(repoTag.id) === -1) {\n seafileAPI.addFileTag(repoID, filePath, repoTag.id).then(() => {\n repoTagIdList = this.getRepoTagIdList();\n this.props.onFileTagChanged();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n } else {\n let fileTag = null;\n let fileTagList = this.props.fileTagList;\n for(let i = 0; i < fileTagList.length; i++) {\n if (fileTagList[i].repo_tag_id === repoTag.id) {\n fileTag = fileTagList[i];\n break;\n }\n }\n seafileAPI.deleteFileTag(repoID, fileTag.id).then(() => {\n repoTagIdList = this.getRepoTagIdList();\n this.props.onFileTagChanged();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n };\n\n onKeyDown = (e) => {\n if (e.keyCode === KeyCodes.ChineseInputMethod || e.keyCode === KeyCodes.LeftArrow || e.keyCode === KeyCodes.RightArrow) {\n e.stopPropagation();\n }\n else if (e.keyCode === KeyCodes.Enter) {\n const searchText = this.state.searchVal.trim();\n const repotagList = this.state.repotagList.filter(item => item.name.includes(searchText));\n const tag = repotagList[this.state.highlightIndex];\n if (tag) {\n this.onEditFileTag(tag);\n }\n }\n else if (e.keyCode === KeyCodes.UpArrow) {\n if (this.state.highlightIndex > -1) {\n this.setHighlightIndex(this.state.highlightIndex - 1);\n }\n }\n else if (e.keyCode === KeyCodes.DownArrow) {\n const searchText = this.state.searchVal.trim();\n const repotagList = this.state.repotagList.filter(item => item.name.includes(searchText));\n if (this.state.highlightIndex < repotagList.length) {\n this.setHighlightIndex(this.state.highlightIndex + 1);\n }\n }\n };\n\n onChangeSearch = (searchVal) => {\n this.setState({ searchVal });\n this.setHighlightIndex(-1);\n };\n\n render() {\n const searchText = this.state.searchVal.trim();\n const repotagList = this.state.repotagList.filter(item => item.name.includes(searchText));\n const showAddTool = searchText && !this.state.repotagList.find(item => item.name === searchText);\n return (\n \n \n
      \n {repotagList.length === 0 &&\n
      {gettext('Tag not found')}
      \n }\n {repotagList.length > 0 && repotagList.map((repoTag, index) => {\n return (\n \n );\n })}\n
    \n {showAddTool &&\n \n }\n \n );\n }\n}\n\nEditFileTagPopover.propTypes = {\n target: PropTypes.string.isRequired,\n repoID: PropTypes.string.isRequired,\n filePath: PropTypes.string.isRequired,\n fileTagList: PropTypes.array.isRequired,\n toggleCancel: PropTypes.func.isRequired,\n onFileTagChanged: PropTypes.func.isRequired,\n};\n\nexport default EditFileTagPopover;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../utils/constants';\nimport { Utils } from '../utils/utils';\nimport toaster from './toast';\n\nconst propTypes = {\n hasSuffix: PropTypes.bool,\n name: PropTypes.string.isRequired,\n onRenameConfirm: PropTypes.func.isRequired,\n onRenameCancel: PropTypes.func.isRequired,\n};\n\nclass Rename extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n name: props.name\n };\n this.inputRef = React.createRef();\n }\n\n componentDidMount() {\n this.inputRef.current.focus();\n if (this.props.hasSuffix) {\n var endIndex = this.props.name.lastIndexOf('.');\n this.inputRef.current.setSelectionRange(0, endIndex, 'forward');\n } else {\n this.inputRef.current.setSelectionRange(0, -1);\n }\n // ensure real dom has been rendered, then listen the click event\n setTimeout(() => {\n document.addEventListener('click', this.onClick);\n }, 1);\n }\n\n componentWillUnmount() {\n document.removeEventListener('click', this.onClick);\n }\n\n onClick = (e) => {\n if (!this.inputRef.current.contains(e.target)) {\n this.onRenameConfirm();\n }\n };\n\n onChange = (e) => {\n this.setState({name: e.target.value});\n };\n\n onKeyDown = (e) => {\n if (e.keyCode === Utils.keyCodes.enter) {\n this.onRenameConfirm(e);\n } else if (e.keyCode === Utils.keyCodes.esc) {\n this.onRenameCancel(e);\n }\n e.nativeEvent.stopImmediatePropagation();\n };\n\n onRenameConfirm = (e) => {\n e && e.nativeEvent.stopImmediatePropagation();\n let newName = this.state.name.trim();\n if (newName === this.props.name) {\n this.props.onRenameCancel();\n return;\n }\n\n let { isValid, errMessage } = this.validateInput();\n if (!isValid) {\n toaster.danger(errMessage);\n this.props.onRenameCancel();\n } else {\n this.props.onRenameConfirm(newName);\n }\n };\n\n onRenameCancel = (e) => {\n e.nativeEvent.stopImmediatePropagation();\n this.props.onRenameCancel();\n };\n\n validateInput = () => {\n let newName = this.state.name.trim();\n let isValid = true;\n let errMessage = '';\n if (!newName) {\n isValid = false;\n errMessage = gettext('Name is required.');\n return { isValid, errMessage };\n }\n\n if (newName.indexOf('/') > -1) {\n isValid = false;\n errMessage = gettext('Name should not include ' + '\\'/\\'' + '.');\n return { isValid, errMessage };\n }\n\n return { isValid, errMessage };\n };\n\n render() {\n return (\n
    \n \n
    \n );\n }\n}\n\nRename.propTypes = propTypes;\n\nexport default Rename;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport moment from 'moment';\nimport { gettext, siteRoot } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../toast';\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n currentTag: PropTypes.object.isRequired,\n toggleCancel: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n updateUsedRepoTags: PropTypes.func,\n onFileTagChanged: PropTypes.func,\n shareLinkToken: PropTypes.string,\n enableFileDownload: PropTypes.bool\n};\n\nclass ListTaggedFilesDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n taggedFileList: [],\n };\n }\n\n onFileTagChanged = (TaggedFile) => {\n const path = TaggedFile.parent_path;\n const dirent = {name: TaggedFile.filename};\n let direntPath = path === '/' ? path + TaggedFile.filename : path + '/' + TaggedFile.filename;\n this.props.onFileTagChanged(dirent, direntPath);\n };\n\n onDeleteTaggedFile = (taggedFile) => {\n let repoID = this.props.repoID;\n let fileTagID = taggedFile.file_tag_id;\n seafileAPI.deleteFileTag(repoID, fileTagID).then(res => {\n this.getTaggedFiles();\n this.props.updateUsedRepoTags();\n if ((this.props.onFileTagChanged) && !taggedFile.file_deleted) this.onFileTagChanged(taggedFile);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n componentDidMount() {\n this.getTaggedFiles();\n }\n\n getTaggedFiles = () => {\n let { repoID, currentTag, shareLinkToken } = this.props;\n let request = shareLinkToken ?\n seafileAPI.getShareLinkTaggedFiles(shareLinkToken, currentTag.id) :\n seafileAPI.listTaggedFiles(repoID, currentTag.id);\n request.then(res => {\n let taggedFileList = [];\n res.data.tagged_files !== undefined &&\n res.data.tagged_files.forEach(file => {\n let taggedFile = file;\n taggedFileList.push(taggedFile);\n });\n this.setState({\n taggedFileList: taggedFileList,\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n let taggedFileList = this.state.taggedFileList;\n return (\n \n {gettext('Tagged Files')}\n \n \n \n \n \n \n \n \n \n \n \n {taggedFileList.map((taggedFile, index) => {\n return (\n \n );\n })}\n \n
    {gettext('Name')}{gettext('Size')}{gettext('Last Update')}
    \n
    \n \n \n \n
    \n );\n }\n}\n\nListTaggedFilesDialog.propTypes = propTypes;\n\nexport default ListTaggedFilesDialog;\n\nconst TaggedFilePropTypes = {\n repoID: PropTypes.string.isRequired,\n taggedFile: PropTypes.object,\n onDeleteTaggedFile: PropTypes.func.isRequired,\n shareLinkToken: PropTypes.string,\n enableFileDownload: PropTypes.bool\n};\n\nclass TaggedFile extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = ({\n active: false,\n });\n }\n\n onMouseEnter = () => {\n this.setState({\n active: true\n });\n };\n\n onMouseLeave = () => {\n this.setState({\n active: false\n });\n };\n\n deleteFile = (e) => {\n e.preventDefault();\n this.props.onDeleteTaggedFile(this.props.taggedFile);\n };\n\n render() {\n const { taggedFile, shareLinkToken, enableFileDownload } = this.props;\n\n let path = taggedFile.parent_path ? Utils.joinPath(taggedFile.parent_path, taggedFile.filename) : '';\n let href = shareLinkToken ?\n siteRoot + 'd/' + shareLinkToken + '/files/?p=' + Utils.encodePath(path) :\n siteRoot + 'lib/' + this.props.repoID + '/file' + Utils.encodePath(path);\n\n return (\n \n {taggedFile.file_deleted ?\n \n {taggedFile.filename}{' '}\n {gettext('deleted')}\n \n \n :\n \n {taggedFile.filename}\n {Utils.bytesToSize(taggedFile.size)}\n {moment.unix(taggedFile.mtime).fromNow()}\n \n }\n \n {!shareLinkToken &&\n \n }\n {(shareLinkToken && enableFileDownload) &&\n \n }\n \n \n );\n }\n}\n\nTaggedFile.propTypes = TaggedFilePropTypes;\n","import moment from 'moment';\n\nclass Draft {\n\n constructor(item) {\n this.created = item.created_at;\n this.createdStr = moment((new Date(item.created_at)).getTime()).format('YYYY-MM-DD HH:mm');\n this.id = item.id;\n this.ownerNickname = item.owner_nickname;\n this.originRepoID = item.origin_repo_id;\n this.draftFilePath = item.draft_file_path;\n }\n}\n\nexport default Draft;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport { gettext, siteRoot } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport moment from 'moment';\nimport editorUtilities from '../../utils/editor-utilities';\nimport toaster from '../../components/toast';\nimport { Utils } from '../../utils/utils';\nimport Draft from '../../models/draft';\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n toggle: PropTypes.func.isRequired,\n};\n\nclass ListRepoDraftsDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n drafts: [],\n };\n }\n\n componentDidMount() {\n seafileAPI.listRepoDrafts(this.props.repoID).then(res => {\n let drafts = res.data.drafts.map(item => {\n let draft = new Draft(item);\n return draft;\n });\n this.setState({\n drafts: drafts\n });\n });\n }\n\n onDeleteDraftItem = (draft) => {\n editorUtilities.deleteDraft(draft.id).then(() => {\n let drafts = this.state.drafts.filter(item => {\n return item.id !== draft.id;\n });\n this.setState({drafts: drafts});\n let msg = gettext('Successfully deleted draft %(draft)s.');\n msg = msg.replace('%(draft)s', draft.draftFilePath);\n toaster.success(msg);\n }).catch(() => {\n let msg = gettext('Failed to delete draft %(draft)s.');\n msg = msg.replace('%(draft)s', draft.draftFilePath);\n toaster.danger(msg);\n });\n };\n\n toggle = () => {\n this.props.toggle();\n };\n\n render() {\n return (\n \n {gettext('Drafts')}\n \n \n \n \n \n \n \n \n \n \n \n {this.state.drafts.map((item, index) => {\n return (\n \n );\n })}\n \n
    {gettext('Name')}{gettext('Owner')}{gettext('Last Update')}
    \n
    \n \n \n \n
    \n );\n }\n}\n\nListRepoDraftsDialog.propTypes = propTypes;\n\nexport default ListRepoDraftsDialog;\n\nconst DraftItemPropTypes = {\n draftItem: PropTypes.object,\n onDeleteDraftItem: PropTypes.func.isRequired,\n};\n\nclass DraftItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = ({\n active: false,\n });\n }\n\n onMouseEnter = () => {\n this.setState({\n active: true\n });\n };\n\n onMouseLeave = () => {\n this.setState({\n active: false\n });\n };\n\n render() {\n const draftItem = this.props.draftItem;\n let href = siteRoot + 'drafts/' + draftItem.id + '/';\n let className = this.state.active ? 'action-icon sf2-icon-x3' : 'action-icon vh sf2-icon-x3';\n return (\n \n \n {Utils.getFileName(draftItem.draftFilePath)}\n \n {draftItem.ownerNickname}\n {moment(draftItem.createdStr).fromNow()}\n \n \n \n \n );\n }\n}\n\nDraftItem.propTypes = DraftItemPropTypes;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ModalPortal from './modal-portal';\nimport ListTaggedFilesDialog from './dialog/list-taggedfiles-dialog';\nimport ListRepoDraftsDialog from './dialog/list-repo-drafts-dialog';\n\nimport '../css/repo-info-bar.css';\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n usedRepoTags: PropTypes.array.isRequired,\n draftCounts: PropTypes.number,\n updateUsedRepoTags: PropTypes.func,\n onFileTagChanged: PropTypes.func,\n className: PropTypes.string,\n shareLinkToken: PropTypes.string,\n enableFileDownload: PropTypes.bool\n};\n\nclass RepoInfoBar extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n currentTag: null,\n isListTaggedFileShow: false,\n showRepoDrafts: false\n };\n }\n\n onListTaggedFiles = (currentTag) => {\n this.setState({\n currentTag: currentTag,\n isListTaggedFileShow: !this.state.isListTaggedFileShow\n });\n };\n\n onCloseDialog = () => {\n this.setState({\n isListTaggedFileShow: false\n });\n };\n\n toggleDrafts = () => {\n this.setState({\n showRepoDrafts: !this.state.showRepoDrafts\n });\n };\n\n render() {\n let { repoID, usedRepoTags, draftCounts, className } = this.props;\n\n // to be compatible with the existing code\n if (draftCounts === undefined) {\n draftCounts = 0;\n }\n\n return (\n
    \n {usedRepoTags.length > 0 && (\n
      \n {usedRepoTags.map((usedRepoTag) => {\n return (\n
    • \n \n {usedRepoTag.name}\n \n
    • \n );\n })}\n
    \n )}\n {/*
    0 ? 'file-info-list mt-1' : 'file-info-list'}>\n {draftCounts > 0 &&\n \n \n {gettext('draft')}\n \n \n }\n
    */}\n {this.state.isListTaggedFileShow && (\n \n \n \n )}\n\n {this.state.showRepoDrafts && (\n \n \n \n )}\n\n
    \n );\n }\n}\n\nRepoInfoBar.propTypes = propTypes;\n\nexport default RepoInfoBar;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { permission } from '../../utils/constants';\nimport TextTranslation from '../../utils/text-translation';\nimport ItemDropdownMenu from '../dropdown-menu/item-dropdown-menu';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n userPerm: PropTypes.string,\n node: PropTypes.object.isRequired,\n currentPath: PropTypes.string.isRequired,\n paddingLeft: PropTypes.number.isRequired,\n isNodeMenuShow: PropTypes.bool.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onNodeClick: PropTypes.func.isRequired,\n onNodeExpanded: PropTypes.func.isRequired,\n onNodeCollapse: PropTypes.func.isRequired,\n onNodeDragStart: PropTypes.func.isRequired,\n freezeItem: PropTypes.func.isRequired,\n unfreezeItem: PropTypes.func.isRequired,\n onMenuItemClick: PropTypes.func,\n onNodeDragMove: PropTypes.func,\n onNodeDrop: PropTypes.func,\n handleContextClick: PropTypes.func.isRequired,\n onNodeDragEnter: PropTypes.func.isRequired,\n onNodeDragLeave:PropTypes.func.isRequired,\n};\n\nclass TreeNodeView extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isHighlight: false,\n isShowOperationMenu: false,\n isNodeDropShow: false,\n };\n const { userPerm } = props;\n this.canDrag = userPerm === 'rw';\n const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm);\n if (isCustomPermission) {\n const { modify } = customPermission.permission;\n this.canDrag = modify;\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (!nextProps.isItemFreezed) {\n this.setState({\n isShowOperationMenu: false,\n isHighlight: false,\n });\n }\n }\n\n onMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isShowOperationMenu: true,\n isHighlight: true,\n });\n }\n };\n\n onMouseOver = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isShowOperationMenu: true,\n isHighlight: true,\n });\n }\n };\n\n onMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isShowOperationMenu: false,\n isHighlight: false,\n });\n }\n };\n\n onNodeClick = () => {\n const { node } = this.props;\n const { object } = node;\n if (object.isDir()) {\n this.props.onNodeClick(this.props.node);\n return;\n }\n const { isCustomPermission, customPermission } = Utils.getUserPermission(object.permission);\n if (isCustomPermission) {\n const { preview: canPreview, modify: canModify } = customPermission.permission;\n if (!canPreview && !canModify) return;\n }\n this.props.onNodeClick(this.props.node);\n };\n\n onLoadToggle = (e) => {\n e.stopPropagation();\n let { node } = this.props;\n if (node.isExpanded) {\n this.props.onNodeCollapse(node);\n } else {\n this.props.onNodeExpanded(node);\n }\n };\n\n onNodeDragStart = (e) => {\n if (Utils.isIEBrower() || !this.canDrag) {\n return false;\n }\n this.props.onNodeDragStart(e, this.props.node);\n };\n\n onNodeDragEnter = (e) => {\n if (Utils.isIEBrower() || !this.canDrag) {\n return false;\n }\n if (this.props.node.object.type === 'dir') {\n this.setState({isNodeDropShow: true});\n }\n this.props.onNodeDragEnter(e, this.props.node);\n };\n\n onNodeDragMove = (e) => {\n if (Utils.isIEBrower() || !this.canDrag) {\n return false;\n }\n this.props.onNodeDragMove(e);\n };\n\n onNodeDragLeave = (e) => {\n if (Utils.isIEBrower() || !this.canDrag) {\n return false;\n }\n this.setState({isNodeDropShow: false});\n this.props.onNodeDragLeave(e, this.props.node);\n };\n\n onNodeDrop = (e) => {\n if (Utils.isIEBrower() || !this.canDrag) {\n return false;\n }\n e.stopPropagation();\n this.setState({isNodeDropShow: false});\n this.props.onNodeDrop(e, this.props.node);\n };\n\n unfreezeItem = () => {\n this.setState({isShowOperationMenu: false});\n this.props.unfreezeItem();\n };\n\n onMenuItemClick = (operation, event, node) => {\n this.props.onMenuItemClick(operation, node);\n };\n\n onItemMouseDown = (event) => {\n event.stopPropagation();\n if (event.button === 2) {\n return;\n }\n };\n\n onItemContextMenu = (event) => {\n this.handleContextClick(event);\n };\n\n handleContextClick = (event) => {\n this.props.handleContextClick(event, this.props.node);\n this.setState({isShowOperationMenu: false});\n };\n\n getNodeTypeAndIcon = () => {\n let { node } = this.props;\n let icon = '';\n let type = '';\n if (node.object.type === 'dir') {\n icon = ;\n type = 'dir';\n } else {\n let index = node.object.name.lastIndexOf('.');\n if (index === -1) {\n icon = ;\n type = 'file';\n } else {\n let suffix = node.object.name.slice(index).toLowerCase();\n if (suffix === '.png' || suffix === '.jpg' || suffix === '.jpeg' || suffix === '.gif' || suffix === '.bmp') {\n icon = ;\n type = 'image';\n }\n else if (suffix === '.md' || suffix === '.markdown') {\n icon = ;\n type = 'file';\n }\n else {\n icon = ;\n type = 'file';\n }\n }\n }\n return {icon, type};\n };\n\n calculateMenuList = (node) => {\n let { NEW_FOLDER, NEW_FILE, COPY, MOVE, RENAME, DELETE, OPEN_VIA_CLIENT} = TextTranslation;\n\n let menuList = [RENAME, DELETE, COPY, MOVE, OPEN_VIA_CLIENT];\n if (node.object.type === 'dir') {\n menuList = [NEW_FOLDER, NEW_FILE, COPY, MOVE, RENAME, DELETE];\n }\n\n const { userPerm } = this.props;\n const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm);\n if (!isCustomPermission) {\n return menuList;\n }\n\n menuList = [];\n const { create: canCreate, modify: canModify, delete: canDelete, copy: canCopy } = customPermission.permission;\n if (node.object.type === 'dir') {\n canCreate && menuList.push(NEW_FOLDER, NEW_FILE);\n }\n\n canCopy && menuList.push(COPY);\n canModify && menuList.push(MOVE, RENAME);\n canDelete && menuList.push(DELETE);\n\n if (node.object.type !== 'dir') {\n menuList.push(OPEN_VIA_CLIENT);\n }\n\n return menuList;\n };\n\n renderChildren = () => {\n let { node, paddingLeft } = this.props;\n if (!node.hasChildren()) {\n return '';\n }\n return (\n
    \n {node.children.map(item => {\n return (\n \n );\n })}\n
    \n );\n };\n\n render() {\n let { currentPath, node, isNodeMenuShow, userPerm } = this.props;\n let { type, icon } = this.getNodeTypeAndIcon();\n let hlClass = this.state.isHighlight ? 'tree-node-inner-hover ' : '';\n if (node.path === currentPath) {\n hlClass = 'tree-node-hight-light';\n }\n\n const { isCustomPermission } = Utils.getUserPermission(userPerm);\n return (\n
    \n \n
    {node.object.name}
    \n
    \n {type === 'dir' && (!node.isLoaded || (node.isLoaded && node.hasChildren())) && (\n e.stopPropagation()}\n onClick={this.onLoadToggle}\n >\n )}\n {icon}\n
    \n {isNodeMenuShow && (\n
    \n {((userPerm === 'rw' || permission || isCustomPermission) && this.state.isShowOperationMenu) && (\n \n )}\n
    \n )}\n
    \n {node.isExpanded && this.renderChildren()}\n \n );\n }\n}\n\nTreeNodeView.propTypes = propTypes;\n\nexport default TreeNodeView;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport TextTranslation from '../../utils/text-translation';\nimport TreeNodeView from './tree-node-view';\nimport ContextMenu from '../context-menu/context-menu';\nimport { hideMenu, showMenu } from '../context-menu/actions';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n userPerm: PropTypes.string,\n isNodeMenuShow: PropTypes.bool.isRequired,\n treeData: PropTypes.object.isRequired,\n currentPath: PropTypes.string.isRequired,\n onMenuItemClick: PropTypes.func,\n onNodeClick: PropTypes.func.isRequired,\n onNodeExpanded: PropTypes.func.isRequired,\n onNodeCollapse: PropTypes.func.isRequired,\n onItemMove: PropTypes.func,\n currentRepoInfo: PropTypes.object,\n selectedDirentList: PropTypes.array,\n onItemsMove: PropTypes.func,\n posX: PropTypes.number,\n posY: PropTypes.number,\n};\n\nconst PADDING_LEFT = 20;\n\nclass TreeView extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false,\n isTreeViewDropTipShow: false,\n };\n const { userPerm } = props;\n this.canDrop = userPerm === 'rw';\n const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm);\n if (isCustomPermission) {\n const { modify } = customPermission.permission;\n this.canDrop = modify;\n }\n }\n\n onItemMove = (repo, dirent, selectedPath, currentPath) => {\n this.props.onItemMove(repo, dirent, selectedPath, currentPath);\n };\n\n onNodeDragStart = (e, node) => {\n if (Utils.isIEBrower()) {\n return false;\n }\n let dragStartNodeData = {nodeDirent: node.object, nodeParentPath: node.parentNode.path, nodeRootPath: node.path};\n dragStartNodeData = JSON.stringify(dragStartNodeData);\n\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('applicaiton/drag-item-info', dragStartNodeData);\n };\n\n onNodeDragEnter = (e, node) => {\n if (Utils.isIEBrower() || !this.canDrop) {\n return false;\n }\n e.persist();\n if (e.target.className === 'tree-view tree ') {\n this.setState({\n isTreeViewDropTipShow: true,\n });\n }\n };\n\n onNodeDragMove = (e) => {\n if (Utils.isIEBrower() || !this.canDrop) {\n return false;\n }\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n };\n\n onNodeDragLeave = (e, node) => {\n if (Utils.isIEBrower() || !this.canDrop) {\n return false;\n }\n if (e.target.className === 'tree-view tree tree-view-drop') {\n this.setState({\n isTreeViewDropTipShow: false,\n });\n }\n };\n\n onContainerClick = (event) => {\n hideMenu();\n };\n\n onNodeClick = (node) => {\n hideMenu();\n this.props.onNodeClick(node);\n };\n\n onNodeDrop = (e, node) => {\n if (Utils.isIEBrower() || !this.canDrop) {\n return false;\n }\n if (e.dataTransfer.files.length) { // uploaded files\n return;\n }\n let dragStartNodeData = e.dataTransfer.getData('applicaiton/drag-item-info');\n dragStartNodeData = JSON.parse(dragStartNodeData);\n\n let {nodeDirent, nodeParentPath, nodeRootPath} = dragStartNodeData;\n let dropNodeData = node;\n\n if (Array.isArray(dragStartNodeData)) { //move items\n if (!dropNodeData) { //move items to root\n if (dragStartNodeData[0].nodeParentPath === '/') {\n this.setState({isTreeViewDropTipShow: false});\n return;\n }\n this.props.onItemsMove(this.props.currentRepoInfo, '/');\n this.setState({isTreeViewDropTipShow: false});\n return;\n }\n this.onMoveItems(dragStartNodeData, dropNodeData, this.props.currentRepoInfo, dropNodeData.path);\n return;\n }\n\n if (!dropNodeData) {\n if (nodeParentPath === '/') {\n this.setState({isTreeViewDropTipShow: false});\n return;\n }\n this.onItemMove(this.props.currentRepoInfo, nodeDirent, '/', nodeParentPath);\n this.setState({isTreeViewDropTipShow: false});\n return;\n }\n\n if (dropNodeData.object.type !== 'dir') {\n return;\n }\n\n if (nodeParentPath === dropNodeData.path) {\n return;\n }\n\n // copy the dirent to itself. eg: A/B -> A/B\n if (nodeParentPath === dropNodeData.parentNode.path) {\n if (dropNodeData.object.name === nodeDirent.name) {\n return;\n }\n }\n\n // copy the dirent to it's child. eg: A/B -> A/B/C\n if (dropNodeData.object.type === 'dir' && nodeDirent.type === 'dir') {\n if (dropNodeData.parentNode.path !== nodeParentPath) {\n let paths = Utils.getPaths(dropNodeData.path);\n if (paths.includes(nodeRootPath)) {\n return;\n }\n }\n }\n\n this.onItemMove(this.props.currentRepoInfo, nodeDirent, dropNodeData.path, nodeParentPath);\n };\n\n onMoveItems = (dragStartNodeData, dropNodeData, destRepo, destDirentPath) => {\n let direntPaths = [];\n let paths = Utils.getPaths(destDirentPath);\n dragStartNodeData.forEach(dirent => {\n let path = dirent.nodeRootPath;\n direntPaths.push(path);\n });\n\n if (dropNodeData.object.type !== 'dir') {\n return;\n }\n\n // move dirents to one of them. eg: A/B, A/C -> A/B\n if (direntPaths.some(direntPath => { return direntPath === destDirentPath;})) {\n return;\n }\n\n // move dirents to current path\n if (dragStartNodeData[0].nodeParentPath && dragStartNodeData[0].nodeParentPath === dropNodeData.path ) {\n return;\n }\n\n // move dirents to one of their child. eg: A/B, A/D -> A/B/C\n let isChildPath = direntPaths.some(direntPath => {\n return paths.includes(direntPath);\n });\n if (isChildPath) {\n return;\n }\n\n this.props.onItemsMove(destRepo, destDirentPath);\n };\n\n freezeItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n unfreezeItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n onMenuItemClick = (operation, node) => {\n this.props.onMenuItemClick(operation, node);\n hideMenu();\n };\n\n onMouseDown = (event) => {\n event.stopPropagation();\n if (event.button === 2) {\n return;\n }\n };\n\n onContextMenu = (event) => {\n event.preventDefault();\n\n let currentRepoInfo = this.props.currentRepoInfo;\n if (currentRepoInfo.permission !== 'admin' && currentRepoInfo.permission !== 'rw') {\n return '';\n }\n this.handleContextClick(event);\n };\n\n handleContextClick = (event, node) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (!this.props.isNodeMenuShow) {\n return;\n }\n\n let x = event.clientX || (event.touches && event.touches[0].pageX);\n let y = event.clientY || (event.touches && event.touches[0].pageY);\n\n if (this.props.posX) {\n x -= this.props.posX;\n }\n if (this.props.posY) {\n y -= this.props.posY;\n }\n\n hideMenu();\n\n let menuList = this.getMenuList(node);\n\n let showMenuConfig = {\n id: 'tree-node-contextmenu',\n position: { x, y },\n target: event.target,\n currentObject: node,\n menuList: menuList,\n };\n\n showMenu(showMenuConfig);\n };\n\n getMenuList = (node) => {\n let menuList = [];\n\n let { NEW_FOLDER, NEW_FILE, COPY, MOVE, RENAME, DELETE, OPEN_VIA_CLIENT } = TextTranslation;\n\n if (!node) {\n return [NEW_FOLDER, NEW_FILE];\n }\n\n if (node.object.type === 'dir') {\n menuList = [NEW_FOLDER, NEW_FILE, COPY, MOVE, RENAME, DELETE];\n } else {\n menuList = [RENAME, DELETE, COPY, MOVE, OPEN_VIA_CLIENT];\n }\n\n const { userPerm } = this.props;\n const { isCustomPermission, customPermission } = Utils.getUserPermission(userPerm);\n if (!isCustomPermission) {\n return menuList;\n }\n\n menuList = [];\n\n const { create: canCreate, modify: canModify, delete: canDelete, copy: canCopy } = customPermission.permission;\n if (!node) {\n canCreate && menuList.push(NEW_FOLDER, NEW_FILE);\n return menuList;\n }\n\n if (node.object.type === 'dir') {\n canCreate && menuList.push(NEW_FOLDER, NEW_FILE);\n }\n\n canCopy && menuList.push(COPY);\n canModify && menuList.push(MOVE, RENAME);\n canDelete && menuList.push(DELETE);\n\n if (node.object.type !== 'dir') {\n menuList.push(OPEN_VIA_CLIENT);\n }\n\n return menuList;\n };\n\n onShowMenu = () => {\n this.freezeItem();\n };\n\n onHideMenu = () => {\n this.unfreezeItem();\n };\n\n render() {\n return (\n \n \n \n \n );\n }\n}\n\nTreeView.propTypes = propTypes;\n\nexport default TreeView;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { EXTERNAL_EVENTS, EventBus, MarkdownViewer } from '@seafile/seafile-editor';\nimport { gettext, isPublicWiki, mediaUrl, repoID, serviceURL, sharedToken, slug } from '../utils/constants';\nimport Loading from './loading';\nimport { Utils } from '../utils/utils';\n\nconst propTypes = {\n children: PropTypes.object,\n isFileLoading: PropTypes.bool.isRequired,\n markdownContent: PropTypes.string.isRequired,\n latestContributor: PropTypes.string.isRequired,\n lastModified: PropTypes.string.isRequired,\n onLinkClick: PropTypes.func.isRequired,\n isWiki: PropTypes.bool,\n isTOCShow: PropTypes.bool,\n // for dir-column-file component(import repoID is undefined)\n repoID: PropTypes.string,\n path: PropTypes.string,\n};\n\nconst contentClass = 'wiki-page-content';\n\nclass WikiMarkdownViewer extends React.Component {\n\n constructor(props) {\n super(props);\n this.scrollRef = React.createRef();\n }\n\n componentDidMount() {\n const eventBus = EventBus.getInstance();\n this.unsubscribeLinkClick = eventBus.subscribe(EXTERNAL_EVENTS.ON_LINK_CLICK, this.onLinkClick);\n }\n componentWillUnmount() {\n this.unsubscribeLinkClick();\n }\n\n onLinkClick = (event) => {\n event.preventDefault();\n event.stopPropagation();\n let link = '';\n let target = event.target;\n while (!target.dataset || !target.dataset.url) {\n target = target.parentNode;\n }\n if (!target) return;\n link = target.dataset.url;\n this.props.onLinkClick(link);\n };\n\n changeInlineNode = (item) => {\n let url, imagePath;\n\n if (item.type == 'image' && isPublicWiki) { // change image url\n url = item.data.src;\n const re = new RegExp(serviceURL + '/lib/' + repoID +'/file.*raw=1');\n // different repo\n if (re.test(url)) {\n // get image path\n let index = url.indexOf('/file');\n let index2 = url.indexOf('?');\n imagePath = url.substring(index + 5, index2);\n } else if (/^\\.\\.\\/*/.test(url) || /^\\.\\/*/.test(url)) {\n const path = this.props.path;\n const originalPath = path.slice(0, path.lastIndexOf('/')) + '/' + url;\n imagePath = Utils.pathNormalize(originalPath);\n } else {\n return;\n }\n item.data.src = serviceURL + '/view-image-via-public-wiki/?slug=' + slug + '&path=' + imagePath;\n } else if (item.type == 'link') { // change link url\n url = item.url;\n if (Utils.isInternalFileLink(url, repoID)) { // change file url\n if (Utils.isInternalMarkdownLink(url, repoID)) {\n let path = Utils.getPathFromInternalMarkdownLink(url, repoID);\n // replace url\n item.url = serviceURL + '/published/' + slug + path;\n } else {\n item.url = url.replace(/(.*)lib\\/([-0-9a-f]{36})\\/file(.*)/g, (match, p1, p2, p3) => {\n return `${p1}d/${sharedToken}/files/?p=${p3}&dl=1`;\n });\n }\n } else if (Utils.isInternalDirLink(url, repoID)) { // change dir url\n let path = Utils.getPathFromInternalDirLink(url, repoID);\n // replace url\n item.url = serviceURL + '/published/' + slug + path;\n }\n }\n\n return item;\n };\n\n modifyValueBeforeRender = (value) => {\n let newNodes = Utils.changeMarkdownNodes(value, this.changeInlineNode);\n return newNodes;\n };\n\n renderMarkdown = () => {\n const { isTOCShow = true, isWiki, markdownContent } = this.props;\n const props = {\n isShowOutline: isTOCShow,\n mathJaxSource: `${mediaUrl}js/mathjax/tex-svg.js`,\n value: markdownContent,\n scrollRef: this.scrollRef,\n ...(isWiki && {beforeRenderCallback: this.modifyValueBeforeRender})\n };\n\n return ;\n };\n\n render() {\n if (this.props.isFileLoading) {\n return ;\n }\n // In dir-column-file repoID is one of props, width is 100%; In wiki-viewer repoID is not props, width isn't 100%\n let contentClassName = `${this.props.repoID ? contentClass + ' w-100' : contentClass}`;\n return (\n
    \n
    \n {this.props.children}\n {this.renderMarkdown()}\n

    {gettext('Last modified by')} {this.props.latestContributor}, {this.props.lastModified}

    \n
    \n
    \n );\n }\n}\n\nconst defaultProps = {\n isWiki: false,\n};\n\nWikiMarkdownViewer.propTypes = propTypes;\nMarkdownViewer.defaultProps = defaultProps;\n\nexport default WikiMarkdownViewer;\n","module.exports = after\n\nfunction after(count, callback, err_cb) {\n var bail = false\n err_cb = err_cb || noop\n proxy.count = count\n\n return (count === 0) ? callback() : proxy\n\n function proxy(err, result) {\n if (proxy.count <= 0) {\n throw new Error('after called too many times')\n }\n --proxy.count\n\n // after first error, rest are passed to err_cb\n if (err) {\n bail = true\n callback(err)\n // future error callbacks will go to error handler\n callback = err_cb\n } else if (proxy.count === 0 && !bail) {\n callback(null, result)\n }\n }\n}\n\nfunction noop() {}\n","/**\n * An abstraction for slicing an arraybuffer even when\n * ArrayBuffer.prototype.slice is not supported\n *\n * @api public\n */\n\nmodule.exports = function(arraybuffer, start, end) {\n var bytes = arraybuffer.byteLength;\n start = start || 0;\n end = end || bytes;\n\n if (arraybuffer.slice) { return arraybuffer.slice(start, end); }\n\n if (start < 0) { start += bytes; }\n if (end < 0) { end += bytes; }\n if (end > bytes) { end = bytes; }\n\n if (start >= bytes || start >= end || bytes === 0) {\n return new ArrayBuffer(0);\n }\n\n var abv = new Uint8Array(arraybuffer);\n var result = new Uint8Array(end - start);\n for (var i = start, ii = 0; i < end; i++, ii++) {\n result[ii] = abv[i];\n }\n return result.buffer;\n};\n","\n/**\n * Expose `Backoff`.\n */\n\nmodule.exports = Backoff;\n\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\n\nfunction Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\n\nBackoff.prototype.duration = function(){\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\n\nBackoff.prototype.reset = function(){\n this.attempts = 0;\n};\n\n/**\n * Set the minimum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMin = function(min){\n this.ms = min;\n};\n\n/**\n * Set the maximum duration\n *\n * @api public\n */\n\nBackoff.prototype.setMax = function(max){\n this.max = max;\n};\n\n/**\n * Set the jitter\n *\n * @api public\n */\n\nBackoff.prototype.setJitter = function(jitter){\n this.jitter = jitter;\n};\n\n","/*\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n(function(chars){\n \"use strict\";\n\n exports.encode = function(arraybuffer) {\n var bytes = new Uint8Array(arraybuffer),\n i, len = bytes.length, base64 = \"\";\n\n for (i = 0; i < len; i+=3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if ((len % 3) === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n\n return base64;\n };\n\n exports.decode = function(base64) {\n var bufferLength = base64.length * 0.75,\n len = base64.length, i, p = 0,\n encoded1, encoded2, encoded3, encoded4;\n\n if (base64[base64.length - 1] === \"=\") {\n bufferLength--;\n if (base64[base64.length - 2] === \"=\") {\n bufferLength--;\n }\n }\n\n var arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n\n for (i = 0; i < len; i+=4) {\n encoded1 = chars.indexOf(base64[i]);\n encoded2 = chars.indexOf(base64[i+1]);\n encoded3 = chars.indexOf(base64[i+2]);\n encoded4 = chars.indexOf(base64[i+3]);\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return arraybuffer;\n };\n})(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\");\n","/**\r\n * Create a blob builder even when vendor prefixes exist\r\n */\r\n\r\nvar BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :\r\n typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :\r\n typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :\r\n typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : \r\n false;\r\n\r\n/**\r\n * Check if Blob constructor is supported\r\n */\r\n\r\nvar blobSupported = (function() {\r\n try {\r\n var a = new Blob(['hi']);\r\n return a.size === 2;\r\n } catch(e) {\r\n return false;\r\n }\r\n})();\r\n\r\n/**\r\n * Check if Blob constructor supports ArrayBufferViews\r\n * Fails in Safari 6, so we need to map to ArrayBuffers there.\r\n */\r\n\r\nvar blobSupportsArrayBufferView = blobSupported && (function() {\r\n try {\r\n var b = new Blob([new Uint8Array([1,2])]);\r\n return b.size === 2;\r\n } catch(e) {\r\n return false;\r\n }\r\n})();\r\n\r\n/**\r\n * Check if BlobBuilder is supported\r\n */\r\n\r\nvar blobBuilderSupported = BlobBuilder\r\n && BlobBuilder.prototype.append\r\n && BlobBuilder.prototype.getBlob;\r\n\r\n/**\r\n * Helper function that maps ArrayBufferViews to ArrayBuffers\r\n * Used by BlobBuilder constructor and old browsers that didn't\r\n * support it in the Blob constructor.\r\n */\r\n\r\nfunction mapArrayBufferViews(ary) {\r\n return ary.map(function(chunk) {\r\n if (chunk.buffer instanceof ArrayBuffer) {\r\n var buf = chunk.buffer;\r\n\r\n // if this is a subarray, make a copy so we only\r\n // include the subarray region from the underlying buffer\r\n if (chunk.byteLength !== buf.byteLength) {\r\n var copy = new Uint8Array(chunk.byteLength);\r\n copy.set(new Uint8Array(buf, chunk.byteOffset, chunk.byteLength));\r\n buf = copy.buffer;\r\n }\r\n\r\n return buf;\r\n }\r\n\r\n return chunk;\r\n });\r\n}\r\n\r\nfunction BlobBuilderConstructor(ary, options) {\r\n options = options || {};\r\n\r\n var bb = new BlobBuilder();\r\n mapArrayBufferViews(ary).forEach(function(part) {\r\n bb.append(part);\r\n });\r\n\r\n return (options.type) ? bb.getBlob(options.type) : bb.getBlob();\r\n};\r\n\r\nfunction BlobConstructor(ary, options) {\r\n return new Blob(mapArrayBufferViews(ary), options || {});\r\n};\r\n\r\nif (typeof Blob !== 'undefined') {\r\n BlobBuilderConstructor.prototype = Blob.prototype;\r\n BlobConstructor.prototype = Blob.prototype;\r\n}\r\n\r\nmodule.exports = (function() {\r\n if (blobSupported) {\r\n return blobSupportsArrayBufferView ? Blob : BlobConstructor;\r\n } else if (blobBuilderSupported) {\r\n return BlobBuilderConstructor;\r\n } else {\r\n return undefined;\r\n }\r\n})();\r\n","/**\n * Slice reference.\n */\n\nvar slice = [].slice;\n\n/**\n * Bind `obj` to `fn`.\n *\n * @param {Object} obj\n * @param {Function|String} fn or string\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function(obj, fn){\n if ('string' == typeof fn) fn = obj[fn];\n if ('function' != typeof fn) throw new Error('bind() requires a function');\n var args = slice.call(arguments, 2);\n return function(){\n return fn.apply(obj, args.concat(slice.call(arguments)));\n }\n};\n","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n for (var key in Emitter.prototype) {\r\n obj[key] = Emitter.prototype[key];\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n .push(fn);\r\n return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n function on() {\r\n this.off(event, on);\r\n fn.apply(this, arguments);\r\n }\r\n\r\n on.fn = fn;\r\n this.on(event, on);\r\n return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n\r\n // all\r\n if (0 == arguments.length) {\r\n this._callbacks = {};\r\n return this;\r\n }\r\n\r\n // specific event\r\n var callbacks = this._callbacks['$' + event];\r\n if (!callbacks) return this;\r\n\r\n // remove all handlers\r\n if (1 == arguments.length) {\r\n delete this._callbacks['$' + event];\r\n return this;\r\n }\r\n\r\n // remove specific handler\r\n var cb;\r\n for (var i = 0; i < callbacks.length; i++) {\r\n cb = callbacks[i];\r\n if (cb === fn || cb.fn === fn) {\r\n callbacks.splice(i, 1);\r\n break;\r\n }\r\n }\r\n\r\n // Remove event specific arrays for event types that no\r\n // one is subscribed for to avoid memory leak.\r\n if (callbacks.length === 0) {\r\n delete this._callbacks['$' + event];\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n this._callbacks = this._callbacks || {};\r\n\r\n var args = new Array(arguments.length - 1)\r\n , callbacks = this._callbacks['$' + event];\r\n\r\n for (var i = 1; i < arguments.length; i++) {\r\n args[i - 1] = arguments[i];\r\n }\r\n\r\n if (callbacks) {\r\n callbacks = callbacks.slice(0);\r\n for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n callbacks[i].apply(this, args);\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n this._callbacks = this._callbacks || {};\r\n return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n return !! this.listeners(event).length;\r\n};\r\n","\nmodule.exports = function(a, b){\n var fn = function(){};\n fn.prototype = b.prototype;\n a.prototype = new fn;\n a.prototype.constructor = a;\n};","module.exports = (function () {\n if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else {\n return Function('return this')(); // eslint-disable-line no-new-func\n }\n})();\n","\nmodule.exports = require('./socket');\n\n/**\n * Exports parser\n *\n * @api public\n *\n */\nmodule.exports.parser = require('engine.io-parser');\n","/**\n * Module dependencies.\n */\n\nvar transports = require('./transports/index');\nvar Emitter = require('component-emitter');\nvar debug = require('debug')('engine.io-client:socket');\nvar index = require('indexof');\nvar parser = require('engine.io-parser');\nvar parseuri = require('parseuri');\nvar parseqs = require('parseqs');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Socket;\n\n/**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} options\n * @api public\n */\n\nfunction Socket (uri, opts) {\n if (!(this instanceof Socket)) return new Socket(uri, opts);\n\n opts = opts || {};\n\n if (uri && 'object' === typeof uri) {\n opts = uri;\n uri = null;\n }\n\n if (uri) {\n uri = parseuri(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === 'https' || uri.protocol === 'wss';\n opts.port = uri.port;\n if (uri.query) opts.query = uri.query;\n } else if (opts.host) {\n opts.hostname = parseuri(opts.host).host;\n }\n\n this.secure = null != opts.secure ? opts.secure\n : (typeof location !== 'undefined' && 'https:' === location.protocol);\n\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? '443' : '80';\n }\n\n this.agent = opts.agent || false;\n this.hostname = opts.hostname ||\n (typeof location !== 'undefined' ? location.hostname : 'localhost');\n this.port = opts.port || (typeof location !== 'undefined' && location.port\n ? location.port\n : (this.secure ? 443 : 80));\n this.query = opts.query || {};\n if ('string' === typeof this.query) this.query = parseqs.decode(this.query);\n this.upgrade = false !== opts.upgrade;\n this.path = (opts.path || '/engine.io').replace(/\\/$/, '') + '/';\n this.forceJSONP = !!opts.forceJSONP;\n this.jsonp = false !== opts.jsonp;\n this.forceBase64 = !!opts.forceBase64;\n this.enablesXDR = !!opts.enablesXDR;\n this.withCredentials = false !== opts.withCredentials;\n this.timestampParam = opts.timestampParam || 't';\n this.timestampRequests = opts.timestampRequests;\n this.transports = opts.transports || ['polling', 'websocket'];\n this.transportOptions = opts.transportOptions || {};\n this.readyState = '';\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n this.policyPort = opts.policyPort || 843;\n this.rememberUpgrade = opts.rememberUpgrade || false;\n this.binaryType = null;\n this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;\n this.perMessageDeflate = false !== opts.perMessageDeflate ? (opts.perMessageDeflate || {}) : false;\n\n if (true === this.perMessageDeflate) this.perMessageDeflate = {};\n if (this.perMessageDeflate && null == this.perMessageDeflate.threshold) {\n this.perMessageDeflate.threshold = 1024;\n }\n\n // SSL options for Node.js client\n this.pfx = opts.pfx || undefined;\n this.key = opts.key || undefined;\n this.passphrase = opts.passphrase || undefined;\n this.cert = opts.cert || undefined;\n this.ca = opts.ca || undefined;\n this.ciphers = opts.ciphers || undefined;\n this.rejectUnauthorized = opts.rejectUnauthorized === undefined ? true : opts.rejectUnauthorized;\n this.forceNode = !!opts.forceNode;\n\n // detect ReactNative environment\n this.isReactNative = (typeof navigator !== 'undefined' && typeof navigator.product === 'string' && navigator.product.toLowerCase() === 'reactnative');\n\n // other options for Node.js or ReactNative client\n if (typeof self === 'undefined' || this.isReactNative) {\n if (opts.extraHeaders && Object.keys(opts.extraHeaders).length > 0) {\n this.extraHeaders = opts.extraHeaders;\n }\n\n if (opts.localAddress) {\n this.localAddress = opts.localAddress;\n }\n }\n\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n\n // set on heartbeat\n this.pingIntervalTimer = null;\n this.pingTimeoutTimer = null;\n\n this.open();\n}\n\nSocket.priorWebsocketSuccess = false;\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Socket.prototype);\n\n/**\n * Protocol version.\n *\n * @api public\n */\n\nSocket.protocol = parser.protocol; // this is an int\n\n/**\n * Expose deps for legacy compatibility\n * and standalone browser access.\n */\n\nSocket.Socket = Socket;\nSocket.Transport = require('./transport');\nSocket.transports = require('./transports/index');\nSocket.parser = require('engine.io-parser');\n\n/**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api private\n */\n\nSocket.prototype.createTransport = function (name) {\n debug('creating transport \"%s\"', name);\n var query = clone(this.query);\n\n // append engine.io protocol identifier\n query.EIO = parser.protocol;\n\n // transport name\n query.transport = name;\n\n // per-transport options\n var options = this.transportOptions[name] || {};\n\n // session id if we already have one\n if (this.id) query.sid = this.id;\n\n var transport = new transports[name]({\n query: query,\n socket: this,\n agent: options.agent || this.agent,\n hostname: options.hostname || this.hostname,\n port: options.port || this.port,\n secure: options.secure || this.secure,\n path: options.path || this.path,\n forceJSONP: options.forceJSONP || this.forceJSONP,\n jsonp: options.jsonp || this.jsonp,\n forceBase64: options.forceBase64 || this.forceBase64,\n enablesXDR: options.enablesXDR || this.enablesXDR,\n withCredentials: options.withCredentials || this.withCredentials,\n timestampRequests: options.timestampRequests || this.timestampRequests,\n timestampParam: options.timestampParam || this.timestampParam,\n policyPort: options.policyPort || this.policyPort,\n pfx: options.pfx || this.pfx,\n key: options.key || this.key,\n passphrase: options.passphrase || this.passphrase,\n cert: options.cert || this.cert,\n ca: options.ca || this.ca,\n ciphers: options.ciphers || this.ciphers,\n rejectUnauthorized: options.rejectUnauthorized || this.rejectUnauthorized,\n perMessageDeflate: options.perMessageDeflate || this.perMessageDeflate,\n extraHeaders: options.extraHeaders || this.extraHeaders,\n forceNode: options.forceNode || this.forceNode,\n localAddress: options.localAddress || this.localAddress,\n requestTimeout: options.requestTimeout || this.requestTimeout,\n protocols: options.protocols || void (0),\n isReactNative: this.isReactNative\n });\n\n return transport;\n};\n\nfunction clone (obj) {\n var o = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n o[i] = obj[i];\n }\n }\n return o;\n}\n\n/**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\nSocket.prototype.open = function () {\n var transport;\n if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') !== -1) {\n transport = 'websocket';\n } else if (0 === this.transports.length) {\n // Emit error on next tick so it can be listened to\n var self = this;\n setTimeout(function () {\n self.emit('error', 'No transports available');\n }, 0);\n return;\n } else {\n transport = this.transports[0];\n }\n this.readyState = 'opening';\n\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n } catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\n\n transport.open();\n this.setTransport(transport);\n};\n\n/**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api private\n */\n\nSocket.prototype.setTransport = function (transport) {\n debug('setting transport %s', transport.name);\n var self = this;\n\n if (this.transport) {\n debug('clearing existing transport %s', this.transport.name);\n this.transport.removeAllListeners();\n }\n\n // set up transport\n this.transport = transport;\n\n // set up transport listeners\n transport\n .on('drain', function () {\n self.onDrain();\n })\n .on('packet', function (packet) {\n self.onPacket(packet);\n })\n .on('error', function (e) {\n self.onError(e);\n })\n .on('close', function () {\n self.onClose('transport close');\n });\n};\n\n/**\n * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n\nSocket.prototype.probe = function (name) {\n debug('probing transport \"%s\"', name);\n var transport = this.createTransport(name, { probe: 1 });\n var failed = false;\n var self = this;\n\n Socket.priorWebsocketSuccess = false;\n\n function onTransportOpen () {\n if (self.onlyBinaryUpgrades) {\n var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;\n failed = failed || upgradeLosesBinary;\n }\n if (failed) return;\n\n debug('probe transport \"%s\" opened', name);\n transport.send([{ type: 'ping', data: 'probe' }]);\n transport.once('packet', function (msg) {\n if (failed) return;\n if ('pong' === msg.type && 'probe' === msg.data) {\n debug('probe transport \"%s\" pong', name);\n self.upgrading = true;\n self.emit('upgrading', transport);\n if (!transport) return;\n Socket.priorWebsocketSuccess = 'websocket' === transport.name;\n\n debug('pausing current transport \"%s\"', self.transport.name);\n self.transport.pause(function () {\n if (failed) return;\n if ('closed' === self.readyState) return;\n debug('changing transport and sending upgrade packet');\n\n cleanup();\n\n self.setTransport(transport);\n transport.send([{ type: 'upgrade' }]);\n self.emit('upgrade', transport);\n transport = null;\n self.upgrading = false;\n self.flush();\n });\n } else {\n debug('probe transport \"%s\" failed', name);\n var err = new Error('probe error');\n err.transport = transport.name;\n self.emit('upgradeError', err);\n }\n });\n }\n\n function freezeTransport () {\n if (failed) return;\n\n // Any callback called by transport should be ignored since now\n failed = true;\n\n cleanup();\n\n transport.close();\n transport = null;\n }\n\n // Handle any error that happens while probing\n function onerror (err) {\n var error = new Error('probe error: ' + err);\n error.transport = transport.name;\n\n freezeTransport();\n\n debug('probe transport \"%s\" failed because of error: %s', name, err);\n\n self.emit('upgradeError', error);\n }\n\n function onTransportClose () {\n onerror('transport closed');\n }\n\n // When the socket is closed while we're probing\n function onclose () {\n onerror('socket closed');\n }\n\n // When the socket is upgraded while we're probing\n function onupgrade (to) {\n if (transport && to.name !== transport.name) {\n debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n freezeTransport();\n }\n }\n\n // Remove all listeners on the transport and on self\n function cleanup () {\n transport.removeListener('open', onTransportOpen);\n transport.removeListener('error', onerror);\n transport.removeListener('close', onTransportClose);\n self.removeListener('close', onclose);\n self.removeListener('upgrading', onupgrade);\n }\n\n transport.once('open', onTransportOpen);\n transport.once('error', onerror);\n transport.once('close', onTransportClose);\n\n this.once('close', onclose);\n this.once('upgrading', onupgrade);\n\n transport.open();\n};\n\n/**\n * Called when connection is deemed open.\n *\n * @api public\n */\n\nSocket.prototype.onOpen = function () {\n debug('socket open');\n this.readyState = 'open';\n Socket.priorWebsocketSuccess = 'websocket' === this.transport.name;\n this.emit('open');\n this.flush();\n\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if ('open' === this.readyState && this.upgrade && this.transport.pause) {\n debug('starting upgrade probes');\n for (var i = 0, l = this.upgrades.length; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n};\n\n/**\n * Handles a packet.\n *\n * @api private\n */\n\nSocket.prototype.onPacket = function (packet) {\n if ('opening' === this.readyState || 'open' === this.readyState ||\n 'closing' === this.readyState) {\n debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n\n this.emit('packet', packet);\n\n // Socket is live - any packet counts\n this.emit('heartbeat');\n\n switch (packet.type) {\n case 'open':\n this.onHandshake(JSON.parse(packet.data));\n break;\n\n case 'pong':\n this.setPing();\n this.emit('pong');\n break;\n\n case 'error':\n var err = new Error('server error');\n err.code = packet.data;\n this.onError(err);\n break;\n\n case 'message':\n this.emit('data', packet.data);\n this.emit('message', packet.data);\n break;\n }\n } else {\n debug('packet received with socket readyState \"%s\"', this.readyState);\n }\n};\n\n/**\n * Called upon handshake completion.\n *\n * @param {Object} handshake obj\n * @api private\n */\n\nSocket.prototype.onHandshake = function (data) {\n this.emit('handshake', data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\n this.pingInterval = data.pingInterval;\n this.pingTimeout = data.pingTimeout;\n this.onOpen();\n // In case open handler closes socket\n if ('closed' === this.readyState) return;\n this.setPing();\n\n // Prolong liveness of socket on heartbeat\n this.removeListener('heartbeat', this.onHeartbeat);\n this.on('heartbeat', this.onHeartbeat);\n};\n\n/**\n * Resets ping timeout.\n *\n * @api private\n */\n\nSocket.prototype.onHeartbeat = function (timeout) {\n clearTimeout(this.pingTimeoutTimer);\n var self = this;\n self.pingTimeoutTimer = setTimeout(function () {\n if ('closed' === self.readyState) return;\n self.onClose('ping timeout');\n }, timeout || (self.pingInterval + self.pingTimeout));\n};\n\n/**\n * Pings server every `this.pingInterval` and expects response\n * within `this.pingTimeout` or closes connection.\n *\n * @api private\n */\n\nSocket.prototype.setPing = function () {\n var self = this;\n clearTimeout(self.pingIntervalTimer);\n self.pingIntervalTimer = setTimeout(function () {\n debug('writing ping packet - expecting pong within %sms', self.pingTimeout);\n self.ping();\n self.onHeartbeat(self.pingTimeout);\n }, self.pingInterval);\n};\n\n/**\n* Sends a ping packet.\n*\n* @api private\n*/\n\nSocket.prototype.ping = function () {\n var self = this;\n this.sendPacket('ping', function () {\n self.emit('ping');\n });\n};\n\n/**\n * Called on `drain` event\n *\n * @api private\n */\n\nSocket.prototype.onDrain = function () {\n this.writeBuffer.splice(0, this.prevBufferLen);\n\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this.prevBufferLen = 0;\n\n if (0 === this.writeBuffer.length) {\n this.emit('drain');\n } else {\n this.flush();\n }\n};\n\n/**\n * Flush write buffers.\n *\n * @api private\n */\n\nSocket.prototype.flush = function () {\n if ('closed' !== this.readyState && this.transport.writable &&\n !this.upgrading && this.writeBuffer.length) {\n debug('flushing %d packets in socket', this.writeBuffer.length);\n this.transport.send(this.writeBuffer);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this.prevBufferLen = this.writeBuffer.length;\n this.emit('flush');\n }\n};\n\n/**\n * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n\nSocket.prototype.write =\nSocket.prototype.send = function (msg, options, fn) {\n this.sendPacket('message', msg, options, fn);\n return this;\n};\n\n/**\n * Sends a packet.\n *\n * @param {String} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api private\n */\n\nSocket.prototype.sendPacket = function (type, data, options, fn) {\n if ('function' === typeof data) {\n fn = data;\n data = undefined;\n }\n\n if ('function' === typeof options) {\n fn = options;\n options = null;\n }\n\n if ('closing' === this.readyState || 'closed' === this.readyState) {\n return;\n }\n\n options = options || {};\n options.compress = false !== options.compress;\n\n var packet = {\n type: type,\n data: data,\n options: options\n };\n this.emit('packetCreate', packet);\n this.writeBuffer.push(packet);\n if (fn) this.once('flush', fn);\n this.flush();\n};\n\n/**\n * Closes the connection.\n *\n * @api private\n */\n\nSocket.prototype.close = function () {\n if ('opening' === this.readyState || 'open' === this.readyState) {\n this.readyState = 'closing';\n\n var self = this;\n\n if (this.writeBuffer.length) {\n this.once('drain', function () {\n if (this.upgrading) {\n waitForUpgrade();\n } else {\n close();\n }\n });\n } else if (this.upgrading) {\n waitForUpgrade();\n } else {\n close();\n }\n }\n\n function close () {\n self.onClose('forced close');\n debug('socket closing - telling transport to close');\n self.transport.close();\n }\n\n function cleanupAndClose () {\n self.removeListener('upgrade', cleanupAndClose);\n self.removeListener('upgradeError', cleanupAndClose);\n close();\n }\n\n function waitForUpgrade () {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n self.once('upgrade', cleanupAndClose);\n self.once('upgradeError', cleanupAndClose);\n }\n\n return this;\n};\n\n/**\n * Called upon transport error\n *\n * @api private\n */\n\nSocket.prototype.onError = function (err) {\n debug('socket error %j', err);\n Socket.priorWebsocketSuccess = false;\n this.emit('error', err);\n this.onClose('transport error', err);\n};\n\n/**\n * Called upon transport close.\n *\n * @api private\n */\n\nSocket.prototype.onClose = function (reason, desc) {\n if ('opening' === this.readyState || 'open' === this.readyState || 'closing' === this.readyState) {\n debug('socket close with reason: \"%s\"', reason);\n var self = this;\n\n // clear timers\n clearTimeout(this.pingIntervalTimer);\n clearTimeout(this.pingTimeoutTimer);\n\n // stop event from firing again for transport\n this.transport.removeAllListeners('close');\n\n // ensure transport won't stay open\n this.transport.close();\n\n // ignore further transport communication\n this.transport.removeAllListeners();\n\n // set ready state\n this.readyState = 'closed';\n\n // clear session id\n this.id = null;\n\n // emit close event\n this.emit('close', reason, desc);\n\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n self.writeBuffer = [];\n self.prevBufferLen = 0;\n }\n};\n\n/**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n\nSocket.prototype.filterUpgrades = function (upgrades) {\n var filteredUpgrades = [];\n for (var i = 0, j = upgrades.length; i < j; i++) {\n if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n};\n","/**\n * Module dependencies.\n */\n\nvar parser = require('engine.io-parser');\nvar Emitter = require('component-emitter');\n\n/**\n * Module exports.\n */\n\nmodule.exports = Transport;\n\n/**\n * Transport abstract constructor.\n *\n * @param {Object} options.\n * @api private\n */\n\nfunction Transport (opts) {\n this.path = opts.path;\n this.hostname = opts.hostname;\n this.port = opts.port;\n this.secure = opts.secure;\n this.query = opts.query;\n this.timestampParam = opts.timestampParam;\n this.timestampRequests = opts.timestampRequests;\n this.readyState = '';\n this.agent = opts.agent || false;\n this.socket = opts.socket;\n this.enablesXDR = opts.enablesXDR;\n this.withCredentials = opts.withCredentials;\n\n // SSL options for Node.js client\n this.pfx = opts.pfx;\n this.key = opts.key;\n this.passphrase = opts.passphrase;\n this.cert = opts.cert;\n this.ca = opts.ca;\n this.ciphers = opts.ciphers;\n this.rejectUnauthorized = opts.rejectUnauthorized;\n this.forceNode = opts.forceNode;\n\n // results of ReactNative environment detection\n this.isReactNative = opts.isReactNative;\n\n // other options for Node.js client\n this.extraHeaders = opts.extraHeaders;\n this.localAddress = opts.localAddress;\n}\n\n/**\n * Mix in `Emitter`.\n */\n\nEmitter(Transport.prototype);\n\n/**\n * Emits an error.\n *\n * @param {String} str\n * @return {Transport} for chaining\n * @api public\n */\n\nTransport.prototype.onError = function (msg, desc) {\n var err = new Error(msg);\n err.type = 'TransportError';\n err.description = desc;\n this.emit('error', err);\n return this;\n};\n\n/**\n * Opens the transport.\n *\n * @api public\n */\n\nTransport.prototype.open = function () {\n if ('closed' === this.readyState || '' === this.readyState) {\n this.readyState = 'opening';\n this.doOpen();\n }\n\n return this;\n};\n\n/**\n * Closes the transport.\n *\n * @api private\n */\n\nTransport.prototype.close = function () {\n if ('opening' === this.readyState || 'open' === this.readyState) {\n this.doClose();\n this.onClose();\n }\n\n return this;\n};\n\n/**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api private\n */\n\nTransport.prototype.send = function (packets) {\n if ('open' === this.readyState) {\n this.write(packets);\n } else {\n throw new Error('Transport not open');\n }\n};\n\n/**\n * Called upon open\n *\n * @api private\n */\n\nTransport.prototype.onOpen = function () {\n this.readyState = 'open';\n this.writable = true;\n this.emit('open');\n};\n\n/**\n * Called with data.\n *\n * @param {String} data\n * @api private\n */\n\nTransport.prototype.onData = function (data) {\n var packet = parser.decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n};\n\n/**\n * Called with a decoded packet.\n */\n\nTransport.prototype.onPacket = function (packet) {\n this.emit('packet', packet);\n};\n\n/**\n * Called upon close.\n *\n * @api private\n */\n\nTransport.prototype.onClose = function () {\n this.readyState = 'closed';\n this.emit('close');\n};\n","/**\n * Module dependencies\n */\n\nvar XMLHttpRequest = require('./xmlhttprequest');\nvar XHR = require('./polling-xhr');\nvar JSONP = require('./polling-jsonp');\nvar websocket = require('./websocket');\n\n/**\n * Export transports.\n */\n\nexports.polling = polling;\nexports.websocket = websocket;\n\n/**\n * Polling transport polymorphic constructor.\n * Decides on xhr vs jsonp based on feature detection.\n *\n * @api private\n */\n\nfunction polling (opts) {\n var xhr;\n var xd = false;\n var xs = false;\n var jsonp = false !== opts.jsonp;\n\n if (typeof location !== 'undefined') {\n var isSSL = 'https:' === location.protocol;\n var port = location.port;\n\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? 443 : 80;\n }\n\n xd = opts.hostname !== location.hostname || port !== opts.port;\n xs = opts.secure !== isSSL;\n }\n\n opts.xdomain = xd;\n opts.xscheme = xs;\n xhr = new XMLHttpRequest(opts);\n\n if ('open' in xhr && !opts.forceJSONP) {\n return new XHR(opts);\n } else {\n if (!jsonp) throw new Error('JSONP disabled');\n return new JSONP(opts);\n }\n}\n","/**\n * Module requirements.\n */\n\nvar Polling = require('./polling');\nvar inherit = require('component-inherit');\nvar globalThis = require('../globalThis');\n\n/**\n * Module exports.\n */\n\nmodule.exports = JSONPPolling;\n\n/**\n * Cached regular expressions.\n */\n\nvar rNewline = /\\n/g;\nvar rEscapedNewline = /\\\\n/g;\n\n/**\n * Global JSONP callbacks.\n */\n\nvar callbacks;\n\n/**\n * Noop.\n */\n\nfunction empty () { }\n\n/**\n * JSONP Polling constructor.\n *\n * @param {Object} opts.\n * @api public\n */\n\nfunction JSONPPolling (opts) {\n Polling.call(this, opts);\n\n this.query = this.query || {};\n\n // define global callbacks array if not present\n // we do this here (lazily) to avoid unneeded global pollution\n if (!callbacks) {\n // we need to consider multiple engines in the same page\n callbacks = globalThis.___eio = (globalThis.___eio || []);\n }\n\n // callback identifier\n this.index = callbacks.length;\n\n // add callback to jsonp global\n var self = this;\n callbacks.push(function (msg) {\n self.onData(msg);\n });\n\n // append to query string\n this.query.j = this.index;\n\n // prevent spurious errors from being emitted when the window is unloaded\n if (typeof addEventListener === 'function') {\n addEventListener('beforeunload', function () {\n if (self.script) self.script.onerror = empty;\n }, false);\n }\n}\n\n/**\n * Inherits from Polling.\n */\n\ninherit(JSONPPolling, Polling);\n\n/*\n * JSONP only supports binary as base64 encoded strings\n */\n\nJSONPPolling.prototype.supportsBinary = false;\n\n/**\n * Closes the socket.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doClose = function () {\n if (this.script) {\n this.script.parentNode.removeChild(this.script);\n this.script = null;\n }\n\n if (this.form) {\n this.form.parentNode.removeChild(this.form);\n this.form = null;\n this.iframe = null;\n }\n\n Polling.prototype.doClose.call(this);\n};\n\n/**\n * Starts a poll cycle.\n *\n * @api private\n */\n\nJSONPPolling.prototype.doPoll = function () {\n var self = this;\n var script = document.createElement('script');\n\n if (this.script) {\n this.script.parentNode.removeChild(this.script);\n this.script = null;\n }\n\n script.async = true;\n script.src = this.uri();\n script.onerror = function (e) {\n self.onError('jsonp poll error', e);\n };\n\n var insertAt = document.getElementsByTagName('script')[0];\n if (insertAt) {\n insertAt.parentNode.insertBefore(script, insertAt);\n } else {\n (document.head || document.body).appendChild(script);\n }\n this.script = script;\n\n var isUAgecko = 'undefined' !== typeof navigator && /gecko/i.test(navigator.userAgent);\n\n if (isUAgecko) {\n setTimeout(function () {\n var iframe = document.createElement('iframe');\n document.body.appendChild(iframe);\n document.body.removeChild(iframe);\n }, 100);\n }\n};\n\n/**\n * Writes with a hidden iframe.\n *\n * @param {String} data to send\n * @param {Function} called upon flush.\n * @api private\n */\n\nJSONPPolling.prototype.doWrite = function (data, fn) {\n var self = this;\n\n if (!this.form) {\n var form = document.createElement('form');\n var area = document.createElement('textarea');\n var id = this.iframeId = 'eio_iframe_' + this.index;\n var iframe;\n\n form.className = 'socketio';\n form.style.position = 'absolute';\n form.style.top = '-1000px';\n form.style.left = '-1000px';\n form.target = id;\n form.method = 'POST';\n form.setAttribute('accept-charset', 'utf-8');\n area.name = 'd';\n form.appendChild(area);\n document.body.appendChild(form);\n\n this.form = form;\n this.area = area;\n }\n\n this.form.action = this.uri();\n\n function complete () {\n initIframe();\n fn();\n }\n\n function initIframe () {\n if (self.iframe) {\n try {\n self.form.removeChild(self.iframe);\n } catch (e) {\n self.onError('jsonp polling iframe removal error', e);\n }\n }\n\n try {\n // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n var html = '\n \n );\n }\n}\n\nReactDom.render(, document.getElementById('wrapper'));\n"],"names":["_window$shared$pageOp","window","shared","pageOptions","repoID","filePath","err","commitID","fileType","fileName","sharedToken","SharedFileViewSpreadsheet","_React$Component","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","value","_jsx","SharedFileView","content","FileContent","React","_React$Component2","_super2","props","_this","call","setIframeHeight","e","iframe","currentTarget","height","contentDocument","body","scrollHeight","state","isLoading","errorMsg","_this2","queryStatus","seafileAPI","queryOfficeFileConvertStatus","toLowerCase","then","res","data","setState","setTimeout","gettext","catch","error","response","_this$state","this","SharedFileViewTip","Loading","className","children","id","title","src","concat","siteRoot","encodeURIComponent","onLoad","ReactDom","document","getElementById"],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/js/sharedFileViewText.757e8d1a.js b/media/assets/frontend/static/js/sharedFileViewText.757e8d1a.js new file mode 100644 index 00000000000..17034124ff7 --- /dev/null +++ b/media/assets/frontend/static/js/sharedFileViewText.757e8d1a.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkseahub_frontend=self.webpackChunkseahub_frontend||[]).push([[554],{35326:function(e,n,t){var r=t(15671),u=t(43144),i=t(60136),s=t(29388),o=t(72791),a=t(54164),f=t(21393),c=t(87556),l=t(32451),d=(t(77937),t(80184)),p=window.shared.pageOptions,h=p.err,Z=p.fileExt,v=p.fileContent,x=function(e){(0,i.Z)(t,e);var n=(0,s.Z)(t);function t(){return(0,r.Z)(this,t),n.apply(this,arguments)}return(0,u.Z)(t,[{key:"render",value:function(){return h?(0,d.jsx)(c.Z,{}):(0,d.jsx)("div",{className:"shared-file-view-body text-file-view",children:(0,d.jsx)(l.Z,{fileExt:Z,value:v})})}}]),t}(o.Component),w=function(e){(0,i.Z)(t,e);var n=(0,s.Z)(t);function t(){return(0,r.Z)(this,t),n.apply(this,arguments)}return(0,u.Z)(t,[{key:"render",value:function(){return(0,d.jsx)(f.Z,{content:(0,d.jsx)(x,{})})}}]),t}(o.Component);a.render((0,d.jsx)(w,{}),document.getElementById("wrapper"))}},function(e){e.O(0,[351],(function(){return n=35326,e(e.s=n);var n}));e.O()}]); +//# sourceMappingURL=sharedFileViewText.757e8d1a.js.map \ No newline at end of file diff --git a/media/assets/frontend/static/js/sharedFileViewText.757e8d1a.js.map b/media/assets/frontend/static/js/sharedFileViewText.757e8d1a.js.map new file mode 100644 index 00000000000..a640b45ac83 --- /dev/null +++ b/media/assets/frontend/static/js/sharedFileViewText.757e8d1a.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/sharedFileViewText.757e8d1a.js","mappings":"qPAOAA,EAAsCC,OAAOC,OAAOC,YAA5CC,EAAGJ,EAAHI,IAAKC,EAAOL,EAAPK,QAASC,EAAWN,EAAXM,YAEhBC,EAAW,SAAAC,IAAAC,EAAAA,EAAAA,GAAAF,EAAAC,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAJ,GAAA,SAAAA,IAAA,OAAAK,EAAAA,EAAAA,GAAA,KAAAL,GAAAG,EAAAG,MAAA,KAAAC,UAAA,CAWd,OAXcC,EAAAA,EAAAA,GAAAR,EAAA,EAAAS,IAAA,SAAAC,MACf,WACE,OAAIb,GACKc,EAAAA,EAAAA,KAACC,EAAAA,EAAiB,KAIzBD,EAAAA,EAAAA,KAAA,OAAKE,UAAU,uCAAsCC,UACnDH,EAAAA,EAAAA,KAACI,EAAAA,EAAiB,CAACjB,QAASA,EAASY,MAAOX,KAGlD,KAACC,CAAA,CAXc,CAASgB,EAAAA,WAcpBC,EAAkB,SAAAC,IAAAhB,EAAAA,EAAAA,GAAAe,EAAAC,GAAA,IAAAC,GAAAf,EAAAA,EAAAA,GAAAa,GAAA,SAAAA,IAAA,OAAAZ,EAAAA,EAAAA,GAAA,KAAAY,GAAAE,EAAAb,MAAA,KAAAC,UAAA,CAGrB,OAHqBC,EAAAA,EAAAA,GAAAS,EAAA,EAAAR,IAAA,SAAAC,MACtB,WACE,OAAOC,EAAAA,EAAAA,KAACS,EAAAA,EAAc,CAACC,SAASV,EAAAA,EAAAA,KAACX,EAAW,KAC9C,KAACiB,CAAA,CAHqB,CAASD,EAAAA,WAMjCM,EAAAA,QAAgBX,EAAAA,EAAAA,KAACM,EAAkB,IAAKM,SAASC,eAAe,W","sources":["shared-file-view-text.js"],"sourcesContent":["import React from 'react';\nimport ReactDom from 'react-dom';\nimport SharedFileView from './components/shared-file-view/shared-file-view';\nimport SharedFileViewTip from './components/shared-file-view/shared-file-view-tip';\nimport SeafileCodeMirror from './components/seafile-codemirror';\nimport './css/text-file-view.css';\n\nconst { err, fileExt, fileContent } = window.shared.pageOptions;\n\nclass FileContent extends React.Component {\n render() {\n if (err) {\n return ;\n }\n\n return (\n
    \n \n
    \n );\n }\n}\n\nclass SharedFileViewText extends React.Component {\n render() {\n return } />;\n }\n}\n\nReactDom.render(, document.getElementById('wrapper'));\n"],"names":["_window$shared$pageOp","window","shared","pageOptions","err","fileExt","fileContent","FileContent","_React$Component","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","value","_jsx","SharedFileViewTip","className","children","SeafileCodeMirror","React","SharedFileViewText","_React$Component2","_super2","SharedFileView","content","ReactDom","document","getElementById"],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/js/sharedFileViewUnknown.a0e468e0.js b/media/assets/frontend/static/js/sharedFileViewUnknown.a0e468e0.js new file mode 100644 index 00000000000..53dafd581c3 --- /dev/null +++ b/media/assets/frontend/static/js/sharedFileViewUnknown.a0e468e0.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkseahub_frontend=self.webpackChunkseahub_frontend||[]).push([[146],{41304:function(n,e,r){var t=r(15671),u=r(43144),o=r(60136),s=r(29388),i=r(72791),a=r(54164),c=r(21393),f=r(87556),p=r(80184),h=window.shared.pageOptions.err,Z=function(n){(0,o.Z)(r,n);var e=(0,s.Z)(r);function r(){return(0,t.Z)(this,r),e.apply(this,arguments)}return(0,u.Z)(r,[{key:"render",value:function(){return(0,p.jsx)(c.Z,{content:(0,p.jsx)(d,{})})}}]),r}(i.Component),d=function(n){(0,o.Z)(r,n);var e=(0,s.Z)(r);function r(){return(0,t.Z)(this,r),e.apply(this,arguments)}return(0,u.Z)(r,[{key:"render",value:function(){if(h)return(0,p.jsx)(f.Z,{})}}]),r}(i.Component);a.render((0,p.jsx)(Z,{}),document.getElementById("wrapper"))}},function(n){n.O(0,[351],(function(){return e=41304,n(n.s=e);var e}));n.O()}]); +//# sourceMappingURL=sharedFileViewUnknown.a0e468e0.js.map \ No newline at end of file diff --git a/media/assets/frontend/static/js/sharedFileViewUnknown.a0e468e0.js.map b/media/assets/frontend/static/js/sharedFileViewUnknown.a0e468e0.js.map new file mode 100644 index 00000000000..0d57de13db0 --- /dev/null +++ b/media/assets/frontend/static/js/sharedFileViewUnknown.a0e468e0.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/sharedFileViewUnknown.a0e468e0.js","mappings":"+NAKQA,EAAQC,OAAOC,OAAOC,YAAtBH,IAEFI,EAAmB,SAAAC,IAAAC,EAAAA,EAAAA,GAAAF,EAAAC,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAJ,GAAA,SAAAA,IAAA,OAAAK,EAAAA,EAAAA,GAAA,KAAAL,GAAAG,EAAAG,MAAA,KAAAC,UAAA,CAGtB,OAHsBC,EAAAA,EAAAA,GAAAR,EAAA,EAAAS,IAAA,SAAAC,MACvB,WACE,OAAOC,EAAAA,EAAAA,KAACC,EAAAA,EAAc,CAACC,SAASF,EAAAA,EAAAA,KAACG,EAAW,KAC9C,KAACd,CAAA,CAHsB,CAASe,EAAAA,WAM5BD,EAAW,SAAAE,IAAAd,EAAAA,EAAAA,GAAAY,EAAAE,GAAA,IAAAC,GAAAb,EAAAA,EAAAA,GAAAU,GAAA,SAAAA,IAAA,OAAAT,EAAAA,EAAAA,GAAA,KAAAS,GAAAG,EAAAX,MAAA,KAAAC,UAAA,CAKd,OALcC,EAAAA,EAAAA,GAAAM,EAAA,EAAAL,IAAA,SAAAC,MACf,WACE,GAAId,EACF,OAAOe,EAAAA,EAAAA,KAACO,EAAAA,EAAiB,GAE7B,KAACJ,CAAA,CALc,CAASC,EAAAA,WAQ1BI,EAAAA,QAAgBR,EAAAA,EAAAA,KAACX,EAAmB,IAAKoB,SAASC,eAAe,W","sources":["shared-file-view-unknown.js"],"sourcesContent":["import React from 'react';\nimport ReactDom from 'react-dom';\nimport SharedFileView from './components/shared-file-view/shared-file-view';\nimport SharedFileViewTip from './components/shared-file-view/shared-file-view-tip';\n\nconst { err } = window.shared.pageOptions;\n\nclass SharedFileViewImage extends React.Component {\n render() {\n return } />;\n }\n}\n\nclass FileContent extends React.Component {\n render() {\n if (err) {\n return ;\n }\n }\n}\n\nReactDom.render(, document.getElementById('wrapper'));\n"],"names":["err","window","shared","pageOptions","SharedFileViewImage","_React$Component","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","value","_jsx","SharedFileView","content","FileContent","React","_React$Component2","_super2","SharedFileViewTip","ReactDom","document","getElementById"],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/js/sharedFileViewVideo.6af2fa31.js b/media/assets/frontend/static/js/sharedFileViewVideo.6af2fa31.js new file mode 100644 index 00000000000..5b6111fca4d --- /dev/null +++ b/media/assets/frontend/static/js/sharedFileViewVideo.6af2fa31.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkseahub_frontend=self.webpackChunkseahub_frontend||[]).push([[809],{75572:function(e,n,r){var t=r(1413),s=r(15671),a=r(43144),u=r(60136),o=r(29388),i=r(72791),c=r(54164),l=r(21393),d=r(87556),f=r(34737),p=(r(32607),r(80184)),h=window.shared.pageOptions,Z=h.rawPath,v=h.err,x=function(e){(0,u.Z)(r,e);var n=(0,o.Z)(r);function r(){return(0,s.Z)(this,r),n.apply(this,arguments)}return(0,a.Z)(r,[{key:"render",value:function(){return(0,p.jsx)(l.Z,{content:(0,p.jsx)(y,{})})}}]),r}(i.Component),y=function(e){(0,u.Z)(r,e);var n=(0,o.Z)(r);function r(){return(0,s.Z)(this,r),n.apply(this,arguments)}return(0,a.Z)(r,[{key:"render",value:function(){if(v)return(0,p.jsx)(d.Z,{});var e={autoplay:!1,controls:!0,preload:"auto",playbackRates:[.5,1,1.5,2],sources:[{src:Z}]};return(0,p.jsx)("div",{className:"shared-file-view-body d-flex",children:(0,p.jsx)("div",{className:"flex-1",children:(0,p.jsx)(f.Z,(0,t.Z)({},e))})})}}]),r}(i.Component);c.render((0,p.jsx)(x,{}),document.getElementById("wrapper"))}},function(e){e.O(0,[351],(function(){return n=75572,e(e.s=n);var n}));e.O()}]); +//# sourceMappingURL=sharedFileViewVideo.6af2fa31.js.map \ No newline at end of file diff --git a/media/assets/frontend/static/js/sharedFileViewVideo.6af2fa31.js.map b/media/assets/frontend/static/js/sharedFileViewVideo.6af2fa31.js.map new file mode 100644 index 00000000000..b5a3c321a57 --- /dev/null +++ b/media/assets/frontend/static/js/sharedFileViewVideo.6af2fa31.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/sharedFileViewVideo.6af2fa31.js","mappings":"+PAQAA,EAAyBC,OAAOC,OAAOC,YAA/BC,EAAOJ,EAAPI,QAASC,EAAGL,EAAHK,IAEXC,EAAmB,SAAAC,IAAAC,EAAAA,EAAAA,GAAAF,EAAAC,GAAA,IAAAE,GAAAC,EAAAA,EAAAA,GAAAJ,GAAA,SAAAA,IAAA,OAAAK,EAAAA,EAAAA,GAAA,KAAAL,GAAAG,EAAAG,MAAA,KAAAC,UAAA,CAGtB,OAHsBC,EAAAA,EAAAA,GAAAR,EAAA,EAAAS,IAAA,SAAAC,MACvB,WACE,OAAOC,EAAAA,EAAAA,KAACC,EAAAA,EAAc,CAACC,SAASF,EAAAA,EAAAA,KAACG,EAAW,KAC9C,KAACd,CAAA,CAHsB,CAASe,EAAAA,WAM5BD,EAAW,SAAAE,IAAAd,EAAAA,EAAAA,GAAAY,EAAAE,GAAA,IAAAC,GAAAb,EAAAA,EAAAA,GAAAU,GAAA,SAAAA,IAAA,OAAAT,EAAAA,EAAAA,GAAA,KAAAS,GAAAG,EAAAX,MAAA,KAAAC,UAAA,CAsBd,OAtBcC,EAAAA,EAAAA,GAAAM,EAAA,EAAAL,IAAA,SAAAC,MACf,WACE,GAAIX,EACF,OAAOY,EAAAA,EAAAA,KAACO,EAAAA,EAAiB,IAG3B,IAAMC,EAAiB,CACrBC,UAAU,EACVC,UAAU,EACVC,QAAS,OACTC,cAAe,CAAC,GAAK,EAAG,IAAK,GAC7BC,QAAS,CAAC,CACRC,IAAK3B,KAGT,OACEa,EAAAA,EAAAA,KAAA,OAAKe,UAAU,+BAA8BC,UAC3ChB,EAAAA,EAAAA,KAAA,OAAKe,UAAU,SAAQC,UACrBhB,EAAAA,EAAAA,KAACiB,EAAAA,GAAWC,EAAAA,EAAAA,GAAA,GAAMV,OAI1B,KAACL,CAAA,CAtBc,CAASC,EAAAA,WAyB1Be,EAAAA,QAAgBnB,EAAAA,EAAAA,KAACX,EAAmB,IAAK+B,SAASC,eAAe,W","sources":["shared-file-view-video.js"],"sourcesContent":["import React from 'react';\nimport ReactDom from 'react-dom';\nimport SharedFileView from './components/shared-file-view/shared-file-view';\nimport SharedFileViewTip from './components/shared-file-view/shared-file-view-tip';\nimport VideoPlayer from './components/video-player';\n\nimport './css/video-file-view.css';\n\nconst { rawPath, err } = window.shared.pageOptions;\n\nclass SharedFileViewImage extends React.Component {\n render() {\n return } />;\n }\n}\n\nclass FileContent extends React.Component {\n render() {\n if (err) {\n return ;\n }\n\n const videoJsOptions = {\n autoplay: false,\n controls: true,\n preload: 'auto',\n playbackRates: [0.5, 1, 1.5, 2],\n sources: [{\n src: rawPath\n }]\n };\n return (\n
    \n
    \n \n
    \n
    \n );\n }\n}\n\nReactDom.render(, document.getElementById('wrapper'));\n"],"names":["_window$shared$pageOp","window","shared","pageOptions","rawPath","err","SharedFileViewImage","_React$Component","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","value","_jsx","SharedFileView","content","FileContent","React","_React$Component2","_super2","SharedFileViewTip","videoJsOptions","autoplay","controls","preload","playbackRates","sources","src","className","children","VideoPlayer","_objectSpread","ReactDom","document","getElementById"],"sourceRoot":""} \ No newline at end of file diff --git a/media/assets/frontend/static/js/sysAdmin.91d1d2f2.js b/media/assets/frontend/static/js/sysAdmin.91d1d2f2.js new file mode 100644 index 00000000000..a1834ca6474 --- /dev/null +++ b/media/assets/frontend/static/js/sysAdmin.91d1d2f2.js @@ -0,0 +1,3 @@ +/*! For license information please see sysAdmin.91d1d2f2.js.LICENSE.txt */ +(self.webpackChunkseahub_frontend=self.webpackChunkseahub_frontend||[]).push([[149],{19827:function(e,t,n){"use strict";var i=n(58368),r=n(38918),s=n(3795),a=n.n(s),o=n(72838),l=n(53585),c=window.app.pageOptions.lang;i.Z.use(r.Z).use(a()).use(o.Db).init({lng:c,fallbackLng:"en",ns:["seafile-editor"],defaultNS:"seafile-editor",whitelist:["en","zh-CN","fr","de","cs","es","es-AR","es-MX","ru"],backend:{loadPath:l.si+"locales/{{ lng }}/{{ ns }}.json"},debug:!1,interpolation:{escapeValue:!1},load:"currentOnly",react:{wait:!0}}),t.Z=i.Z},72451:function(e,t,n){"use strict";n.d(t,{Z:function(){return b}});var i=n(15671),r=n(43144),s=n(60136),a=n(29388),o=n(72791),l=n(62298),c=n(4292),h=n(95234),d=n(72426),u=n.n(d),g=n(53585),p=n(22228),m=n(95996),f=n(63446),v=n(80184),x=function(e){(0,s.Z)(n,e);var t=(0,a.Z)(n);function n(e){var r;return(0,i.Z)(this,n),(r=t.call(this,e)).state={isLoading:!0,errorMsg:""},r}return(0,r.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=this.props,n=t.repoID,i=t.commitID;p.I.getCommitDetails(n,i).then((function(t){e.setState({isLoading:!1,errorMsg:"",commitDetails:t.data})})).catch((function(t){var n=m.c.getErrorMsg(t);e.setState({isLoading:!1,errorMsg:n})}))}},{key:"render",value:function(){var e=this.props,t=e.toggleDialog,n=e.commitTime;return(0,v.jsxs)(l.Z,{isOpen:!0,centered:!0,toggle:t,children:[(0,v.jsx)(c.Z,{toggle:t,children:(0,g.ih)("Modification Details")}),(0,v.jsxs)(h.Z,{children:[(0,v.jsx)("p",{className:"small",children:u()(n).format("YYYY-MM-DD HH:mm:ss")}),(0,v.jsx)(y,{data:this.state})]})]})}}]),n}(o.Component),y=function(e){(0,s.Z)(n,e);var t=(0,a.Z)(n);function n(){var e;(0,i.Z)(this,n);for(var r=arguments.length,s=new Array(r),a=0;at:tt:t0&&(0,y.jsx)(Q,{labels:t,filesData:n,suggestedMaxNumbers:10,isLegendStatus:!0,chartTitle:(0,m.ih)("File Operations")})]})]})]})}}]),n}(l.Component)),X=K,$=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getActiviesFiles=function(e,t,n){var r=i.state.filesData;I.I.sysAdminStatisticStorages(e,t,n).then((function(e){var t=[],n=[],s=e.data;if(Array.isArray(s)){s.forEach((function(e){t.push(L()(e.datetime).format("YYYY-MM-DD")),n.push(e.total_storage)}));var a={label:(0,m.ih)("Total Storage"),data:n,borderColor:"#fd913a",backgroundColor:"#fd913a"};r=[a]}i.setState({filesData:r,labels:t,isLoading:!1})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.state={filesData:[],labels:[],isLoading:!0},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state,t=e.labels,n=e.filesData,r=e.isLoading;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(T,{currentItem:"storageStatistic"}),(0,y.jsxs)("div",{className:"cur-view-content",children:[(0,y.jsx)(Y,{getActiviesFiles:this.getActiviesFiles}),r&&(0,y.jsx)(Z.Z,{}),!r&&t.length>0&&(0,y.jsx)(Q,{labels:t,filesData:n,suggestedMaxNumbers:1e7,isTitleCallback:!0,isTicksCallback:!0,isLegendStatus:!1,chartTitle:(0,m.ih)("Total Storage")})]})]})]})}}]),n}(l.Component),J=$,ee=n(97326),te=n(54555),ne=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){return(0,r.Z)(this,n),t.call(this,e)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.type,n=e.sortBy,i="asc"==e.sortOrder?(0,y.jsx)("span",{className:"fas fa-caret-up"}):(0,y.jsx)("span",{className:"fas fa-caret-down"});return(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"16%",children:"user"==t?(0,m.ih)("User"):(0,m.ih)("Organization")}),(0,y.jsx)("th",{width:"11%",children:(0,y.jsxs)("div",{className:"d-block table-sort-op cursor-pointer",onClick:this.props.sortItems.bind(this,"sync_file_upload"),children:[(0,m.ih)("Sync Upload")," ","sync_file_upload"===n&&i]})}),(0,y.jsx)("th",{width:"14%",children:(0,y.jsxs)("div",{className:"d-block table-sort-op cursor-pointer",onClick:this.props.sortItems.bind(this,"sync_file_download"),children:[(0,m.ih)("Sync Download")," ","sync_file_download"===n&&i]})}),(0,y.jsx)("th",{width:"11%",children:(0,y.jsxs)("div",{className:"d-block table-sort-op cursor-pointer",onClick:this.props.sortItems.bind(this,"web_file_upload"),children:[(0,m.ih)("Web Upload")," ","web_file_upload"===n&&i]})}),(0,y.jsx)("th",{width:"14%",children:(0,y.jsxs)("div",{className:"d-block table-sort-op cursor-pointer",onClick:this.props.sortItems.bind(this,"web_file_download"),children:[(0,m.ih)("Web Download")," ","web_file_download"===n&&i]})}),(0,y.jsx)("th",{width:"17%",children:(0,y.jsxs)("div",{className:"d-block table-sort-op cursor-pointer",onClick:this.props.sortItems.bind(this,"link_file_upload"),children:[(0,m.ih)("Share link upload")," ","link_file_upload"===n&&i]})}),(0,y.jsx)("th",{width:"17%",children:(0,y.jsxs)("div",{className:"d-block table-sort-op cursor-pointer",onClick:this.props.sortItems.bind(this,"link_file_download"),children:[(0,m.ih)("Share link download")," ","link_file_download"===n&&i]})})]})}),(0,y.jsx)("tbody",{children:this.props.children})]})}}]),n}(l.Component),ie=ne,re=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){var e;(0,r.Z)(this,n);for(var i=arguments.length,s=new Array(i),a=0;a0&&i.map((function(e,t){return(0,y.jsx)(se,{userTrafficItem:e,type:"org"},t)}))}),(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPage,gotoNextPage:this.getNextPage,currentPage:r,hasNextPage:s,curPerPage:a,resetPerPage:this.resetPerPage})]})}}]),n}(l.Component),le=oe,ce=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getPreviousPage=function(){i.getTrafficList(i.state.month,i.state.currentPage-1)},i.getNextPage=function(){i.getTrafficList(i.state.month,i.state.currentPage+1)},i.handleChange=function(e){var t=e.target.value;i.setState({month:t})},i.handleKeyPress=function(e){var t=i.state.month;if("Enter"===e.key){if(!/^([012]\d{3})(0[1-9]|1[012])$/.test(t)){var n=(0,m.ih)("Invalid month, should be yyyymm.");return void i.setState({errorMessage:n})}i.getTrafficList(t,i.initPage),e.target.blur(),e.preventDefault()}},i.getTrafficList=function(e,t){var n=i.state,r=n.perPage,s=n.sortBy,a=n.sortOrder,o="asc"==a?s:"".concat(s,"_").concat(a);i.setState({isLoading:!0,errorMessage:""}),I.I.sysAdminListUserTraffic(e,t,r,o).then((function(n){var r=n.data.user_monthly_traffic_list.slice(0);i.setState({month:e,currentPage:t,userTrafficList:r,hasNextPage:n.data.has_next_page,isLoading:!1})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.sortItems=function(e){i.setState({sortBy:e,sortOrder:"asc"==i.state.sortOrder?"desc":"asc"},(function(){var e=i.state,t=e.month,n=e.currentPage;i.getTrafficList(t,n)}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){return i.getTrafficList(i.initMonth,i.initPage)}))},i.state={userTrafficList:[],hasNextPage:!1,perPage:25,currentPage:1,month:L()().format("YYYYMM"),isLoading:!1,errorMessage:"",sortBy:"link_file_download",sortOrder:"desc"},i.initPage=1,i.initMonth=L()().format("YYYYMM"),i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=n.perPage;this.setState({perPage:parseInt(t.get("per_page")||r),currentPage:parseInt(t.get("page")||i)},(function(){e.getTrafficList(e.initMonth,e.state.currentPage)}))}},{key:"render",value:function(){var e=this.state,t=e.isLoading,n=e.errorMessage,i=e.userTrafficList,r=e.currentPage,s=e.hasNextPage,a=e.perPage,o=e.sortBy,c=e.sortOrder;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("div",{className:"d-flex align-items-center mt-4",children:[(0,y.jsx)("span",{className:"statistic-reports-tip",children:(0,m.ih)("Month:")}),(0,y.jsx)(te.Z,{className:"statistic-reports-input",defaultValue:L()().format("YYYYMM"),onChange:this.handleChange,onKeyPress:this.handleKeyPress}),n&&(0,y.jsx)("div",{className:"error",children:n})]}),t&&(0,y.jsx)(Z.Z,{}),!t&&(0,y.jsx)(ie,{type:"user",sortItems:this.sortItems,sortBy:o,sortOrder:c,children:i.length>0&&i.map((function(e,t){return(0,y.jsx)(se,{userTrafficItem:e,type:"user"},t)}))}),(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPage,gotoNextPage:this.getNextPage,currentPage:r,hasNextPage:s,curPerPage:a,resetPerPage:this.resetPerPage})]})}}]),n}(l.Component),he=ce,de=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).changeTabActive=function(e){i.setState({tabActive:e})},i.getActiviesFiles=function(e,t,n){I.I.sysAdminStatisticTraffic(e,t,n).then((function(e){var t=[],n=[],r=[],s=[],a=[],o=[],l=[],c=[],h=[],d=e.data;if(Array.isArray(d)){d.forEach((function(e){t.push(L()(e.datetime).format("YYYY-MM-DD")),s.push(e["link-file-upload"]),a.push(e["link-file-download"]),o.push(e["sync-file-upload"]),l.push(e["sync-file-download"]),c.push(e["web-file-upload"]),h.push(e["web-file-download"]),n.push(e["link-file-upload"]+e["sync-file-upload"]+e["web-file-upload"]),r.push(e["link-file-download"]+e["sync-file-download"]+e["web-file-download"])}));var u=[{label:(0,m.ih)("Upload"),data:s,borderColor:"#fd913a",backgroundColor:"#fd913a"},{label:(0,m.ih)("Download"),data:a,borderColor:"#57cd6b",backgroundColor:"#57cd6b"}],g=[{label:(0,m.ih)("Upload"),data:o,borderColor:"#fd913a",backgroundColor:"#fd913a"},{label:(0,m.ih)("Download"),data:l,borderColor:"#57cd6b",backgroundColor:"#57cd6b"}],p=[{label:(0,m.ih)("Upload"),data:c,borderColor:"#fd913a",backgroundColor:"#fd913a"},{label:(0,m.ih)("Download"),data:h,borderColor:"#57cd6b",backgroundColor:"#57cd6b"}],f=[{label:(0,m.ih)("Upload"),data:n,borderColor:"#fd913a",backgroundColor:"#fd913a"},{label:(0,m.ih)("Download"),data:r,borderColor:"#57cd6b",backgroundColor:"#57cd6b"}];i.setState({linkData:u,syncData:g,webData:p,filesData:f,labels:t,isLoading:!1})}})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.renderCommonTool=function(){var e=i.state.tabActive;return"system"===e?(0,y.jsx)(Y,{getActiviesFiles:i.getActiviesFiles,children:(0,y.jsxs)("div",{className:"statistic-traffic-tab",children:[(0,y.jsx)("div",{className:"statistic-traffic-tab-item ".concat("system"===e?"active":""),onClick:i.changeTabActive.bind((0,ee.Z)(i),"system"),children:(0,m.ih)("System")}),(0,y.jsx)("div",{className:"statistic-traffic-tab-item ".concat("user"===e?"active":""),onClick:i.changeTabActive.bind((0,ee.Z)(i),"user"),children:(0,m.ih)("Users")}),(0,y.jsx)("div",{className:"statistic-traffic-tab-item ".concat("organizations"===e?"active":""),onClick:i.changeTabActive.bind((0,ee.Z)(i),"organizations"),children:(0,m.ih)("Organizations")})]})}):(0,y.jsxs)("div",{className:"statistic-traffic-tab",children:[(0,y.jsx)("div",{className:"statistic-traffic-tab-item ".concat("system"===e?"active":""),onClick:i.changeTabActive.bind((0,ee.Z)(i),"system"),children:(0,m.ih)("System")}),(0,y.jsx)("div",{className:"statistic-traffic-tab-item ".concat("user"===e?"active":""),onClick:i.changeTabActive.bind((0,ee.Z)(i),"user"),children:(0,m.ih)("Users")}),(0,y.jsx)("div",{className:"statistic-traffic-tab-item ".concat("organizations"===e?"active":""),onClick:i.changeTabActive.bind((0,ee.Z)(i),"organizations"),children:(0,m.ih)("Organizations")})]})},i.state={filesData:[],linkData:[],syncData:[],webData:[],labels:[],isLoading:!0,tabActive:"system"},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state,t=e.labels,n=e.filesData,r=e.linkData,s=e.syncData,a=e.webData,o=e.isLoading,c=e.tabActive;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(T,{currentItem:"trafficStatistic"}),(0,y.jsxs)("div",{className:"cur-view-content",children:[this.renderCommonTool(),o&&(0,y.jsx)(Z.Z,{}),!o&&"system"===c&&(0,y.jsxs)("div",{className:"statistic-traffic-chart-container",children:[(0,y.jsx)("div",{className:"mb-4",children:t.length>0&&(0,y.jsx)(Q,{labels:t,filesData:n,chartTitle:(0,m.ih)("Total Traffic"),suggestedMaxNumbers:1e7,isTitleCallback:!0,isTicksCallback:!0,isLegendStatus:!0})}),(0,y.jsx)("div",{className:"mb-4",children:t.length>0&&(0,y.jsx)(Q,{labels:t,filesData:a,chartTitle:(0,m.ih)("Web Traffic"),suggestedMaxNumbers:1e7,isTitleCallback:!0,isTicksCallback:!0,isLegendStatus:!0})}),(0,y.jsx)("div",{className:"mb-4",children:t.length>0&&(0,y.jsx)(Q,{labels:t,filesData:r,chartTitle:(0,m.ih)("Share Link Traffic"),suggestedMaxNumbers:1e7,isTitleCallback:!0,isTicksCallback:!0,isLegendStatus:!0})}),(0,y.jsx)("div",{className:"mb-4",children:t.length>0&&(0,y.jsx)(Q,{labels:t,filesData:s,chartTitle:(0,m.ih)("Sync Traffic"),suggestedMaxNumbers:1e7,isTitleCallback:!0,isTicksCallback:!0,isLegendStatus:!0})})]}),!o&&"user"===c&&(0,y.jsx)(he,{}),!o&&"organizations"===c&&(0,y.jsx)(le,{})]})]})]})}}]),n}(l.Component),ue=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getActiviesFiles=function(e,t,n){var r=i.state.filesData;I.I.sysAdminStatisticActiveUsers(e,t,n).then((function(e){var t=[],n=[],s=e.data;if(Array.isArray(s)){s.forEach((function(e){t.push(L()(e.datetime).format("YYYY-MM-DD")),n.push(e.count)}));var a={label:(0,m.ih)("Active Users"),data:n,borderColor:"#fd913a",backgroundColor:"#fd913a"};r=[a]}i.setState({filesData:r,labels:t,isLoading:!1})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.state={filesData:[],labels:[],isLoading:!0},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state,t=e.labels,n=e.filesData,r=e.isLoading;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(T,{currentItem:"usersStatistic"}),(0,y.jsxs)("div",{className:"cur-view-content",children:[(0,y.jsx)(Y,{getActiviesFiles:this.getActiviesFiles}),r&&(0,y.jsx)(Z.Z,{}),!r&&t.length>0&&(0,y.jsx)(Q,{labels:t,filesData:n,suggestedMaxNumbers:10,isLegendStatus:!1,chartTitle:(0,m.ih)("Active Users")})]})]})]})}}]),n}(l.Component),ge=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleChange=function(e){var t=e.target.value;i.setState({month:t})},i.onGenerateReports=function(e){var t=m.ze+"api/v2.1/admin/statistics/",n=i.state.month;if(n){if("month"===e){if(!/^([012]\d{3})(0[1-9]|1[012])$/.test(n)){var r=(0,m.ih)("Invalid month, should be yyyymm.");return void i.setState({errorMessage:r})}}switch(e){case"month":t+="system-user-traffic/excel/?month="+n;break;case"storage":t+="system-user-storage/excel/?"}i.setState({errorMessage:""}),window.location.href=t}else{var s=(0,m.ih)("It is required.");i.setState({errorMessage:s})}},i.state={month:L()().format("YYYYMM"),errorMessage:""},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state.errorMessage;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(T,{currentItem:"reportsStatistic"}),(0,y.jsxs)("div",{className:"cur-view-content",children:[(0,y.jsxs)("div",{className:"statistic-reports",children:[(0,y.jsx)("div",{className:"statistic-reports-title",children:(0,m.ih)("Monthly User Traffic")}),(0,y.jsxs)("div",{className:"d-flex align-items-center mt-4",children:[(0,y.jsx)("span",{className:"statistic-reports-tip",children:(0,m.ih)("Month:")}),(0,y.jsx)(te.Z,{className:"statistic-reports-input",defaultValue:L()().format("YYYYMM"),onChange:this.handleChange}),(0,y.jsx)(w.Z,{className:"statistic-reports-submit operation-item",onClick:this.onGenerateReports.bind(this,"month"),children:(0,m.ih)("Create Report")})]}),e&&(0,y.jsx)("div",{className:"error",children:e})]}),(0,y.jsxs)("div",{className:"statistic-reports",children:[(0,y.jsx)("div",{className:"statistic-reports-title",children:(0,m.ih)("User Storage")}),(0,y.jsx)(w.Z,{className:"mt-4 operation-item",onClick:this.onGenerateReports.bind(this,"storage"),children:(0,m.ih)("Create Report")})]})]})]})]})}}]),n}(l.Component),pe=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).navItems=[{name:"desktop",urlPart:"desktop-devices",text:(0,m.ih)("Desktop")},{name:"mobile",urlPart:"mobile-devices",text:(0,m.ih)("Mobile")}],m._y&&i.navItems.push({name:"errors",urlPart:"device-errors",text:(0,m.ih)("Errors")}),i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.currentItem;return(0,y.jsx)("div",{className:"cur-view-path tab-nav-container",children:(0,y.jsx)("ul",{className:"nav",children:this.navItems.map((function(t,n){return(0,y.jsx)("li",{className:"nav-item",children:(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/").concat(t.urlPart,"/"),className:"nav-link".concat(e==t.name?" active":""),children:t.text})},n)}))})})}}]),n}(l.Component),me=pe,fe=n(73379),ve=n(83207),xe=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getPreviousPageDevicesList=function(){i.props.getDevicesListByPage(i.props.pageInfo.current_page-1)},i.getNextPageDevicesList=function(){i.props.getDevicesListByPage(i.props.pageInfo.current_page+1)},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.loading,n=e.errorMsg,i=e.items,r=e.pageInfo,s=e.curPerPage;if(t)return(0,y.jsx)(Z.Z,{});if(n)return(0,y.jsx)("p",{className:"error text-center",children:n});var a=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No connected devices")})}),o=(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"19%",children:(0,m.ih)("User")}),(0,y.jsxs)("th",{width:"19%",children:[(0,m.ih)("Platform")," / ",(0,m.ih)("Version")]}),(0,y.jsx)("th",{width:"19%",children:(0,m.ih)("Device Name")}),(0,y.jsx)("th",{width:"19%",children:(0,m.ih)("IP")}),(0,y.jsx)("th",{width:"19%",children:(0,m.ih)("Last Access")}),(0,y.jsx)("th",{width:"5%"})]})}),(0,y.jsx)("tbody",{children:i.map((function(e,t){return(0,y.jsx)(ye,{item:e},t)}))})]}),(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPageDevicesList,gotoNextPage:this.getNextPageDevicesList,currentPage:r.current_page,hasNextPage:r.has_next_page,curPerPage:s,resetPerPage:this.props.resetPerPage})]});return i.length?o:a}}]),n}(l.Component),ye=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseOver=function(){i.setState({isOpIconShown:!0})},i.handleMouseOut=function(){i.setState({isOpIconShown:!1})},i.handleUnlink=function(e){e.preventDefault(),i.props.item.is_desktop_client?i.toggleUnlinkDeviceDialog():i.unlinkDevice(!0)},i.toggleUnlinkDeviceDialog=function(){i.setState({isUnlinkDeviceDialogOpen:!i.state.isUnlinkDeviceDialogOpen})},i.unlinkDevice=function(e){var t=i.props.item,n=t.platform,r=t.device_id,s=t.user;I.I.sysAdminUnlinkDevice(n,r,s,e).then((function(e){i.setState({unlinked:!0});var t=(0,m.ih)("Successfully unlinked the device.");P.Z.success(t)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.state={unlinked:!1,isOpIconShown:!1,isUnlinkDeviceDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item,t=this.state,n=t.unlinked,i=t.isUnlinkDeviceDialogOpen,r=t.isOpIconShown;return n?null:(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{onMouseEnter:this.handleMouseOver,onMouseLeave:this.handleMouseOut,children:[(0,y.jsx)("td",{children:e.user_name}),(0,y.jsxs)("td",{children:[e.platform," / ",e.client_version]}),(0,y.jsx)("td",{children:e.device_name}),(0,y.jsx)("td",{children:e.last_login_ip}),(0,y.jsx)("td",{children:(0,y.jsx)("span",{title:L()(e.last_accessed).format("llll"),children:L()(e.last_accessed).fromNow()})}),(0,y.jsx)("td",{children:(0,y.jsx)("a",{href:"#",className:"sf2-icon-delete action-icon ".concat(r?"":"invisible"),title:(0,m.ih)("Unlink"),onClick:this.handleUnlink})})]}),i&&(0,y.jsx)(ve.Z,{unlinkDevice:this.unlinkDevice,toggleDialog:this.toggleUnlinkDeviceDialog})]})}}]),n}(l.Component),be=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getDevicesListByPage=function(e){var t=i.props.devicesPlatform,n=i.state.perPage;I.I.sysAdminListDevices(t,e,n).then((function(e){i.setState({devicesData:e.data.devices,pageInfo:e.data.page_info,loading:!1})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){i.getDevicesListByPage(1)}))},i.state={loading:!0,errorMsg:"",devicesData:[],pageInfo:{},perPage:25},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=void 0===i?1:i,s=n.perPage;this.setState({perPage:parseInt(t.get("per_page")||s),currentPage:parseInt(t.get("page")||r)},(function(){e.getDevicesListByPage(e.state.currentPage)}))}},{key:"render",value:function(){return(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(xe,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.devicesData,getDevicesListByPage:this.getDevicesListByPage,curPerPage:this.state.perPage,resetPerPage:this.resetPerPage,pageInfo:this.state.pageInfo})})}}]),n}(l.Component),je=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){return(0,r.Z)(this,n),t.call(this,e)}return(0,s.Z)(n,[{key:"render",value:function(){return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(me,{currentItem:"desktop"}),(0,y.jsx)(be,{devicesPlatform:"desktop"})]})})]})}}]),n}(l.Component),Se=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){return(0,r.Z)(this,n),t.call(this,e)}return(0,s.Z)(n,[{key:"render",value:function(){return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(me,{currentItem:"mobile"}),(0,y.jsx)(be,{devicesPlatform:"mobile"})]})})]})}}]),n}(l.Component),De=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){return(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/users/").concat(encodeURIComponent(this.props.email),"/"),children:this.props.name})}}]),n}(l.Component),we=De,Ie=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getPreviousPageDeviceErrorsList=function(){i.props.getDeviceErrorsListByPage(i.props.pageInfo.current_page-1)},i.getNextPageDeviceErrorsList=function(){i.props.getDeviceErrorsListByPage(i.props.pageInfo.current_page+1)},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.loading,n=e.errorMsg,i=e.items,r=e.pageInfo,s=e.curPerPage;if(t)return(0,y.jsx)(Z.Z,{});if(n)return(0,y.jsx)("p",{className:"error text-center",children:n});var a=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No sync errors")})}),o=(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"16%",children:(0,m.ih)("User")}),(0,y.jsxs)("th",{width:"20%",children:[(0,m.ih)("Device")," / ",(0,m.ih)("Version")]}),(0,y.jsx)("th",{width:"16%",children:(0,m.ih)("IP")}),(0,y.jsx)("th",{width:"16%",children:(0,m.ih)("Library")}),(0,y.jsx)("th",{width:"16%",children:(0,m.ih)("Error")}),(0,y.jsx)("th",{width:"16%",children:(0,m.ih)("Time")})]})}),(0,y.jsx)("tbody",{children:i.map((function(e,t){return(0,y.jsx)(Pe,{item:e},t)}))})]}),(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPageDeviceErrorsList,gotoNextPage:this.getNextPageDeviceErrorsList,currentPage:r.current_page,hasNextPage:r.has_next_page,curPerPage:s,resetPerPage:this.props.resetPerPage})]});return i.length?o:a}}]),n}(l.Component),Pe=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseOver=function(){i.setState({isOpIconShown:!0})},i.handleMouseOut=function(){i.setState({isOpIconShown:!1})},i.state={isOpIconShown:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item;return(0,y.jsxs)("tr",{onMouseEnter:this.handleMouseOver,onMouseLeave:this.handleMouseOut,children:[(0,y.jsx)("td",{children:(0,y.jsx)(we,{email:e.email,name:e.name})}),(0,y.jsxs)("td",{children:[e.device_name," / ",e.client_version]}),(0,y.jsx)("td",{children:e.device_ip}),(0,y.jsx)("td",{children:(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sysadmin/#libs/").concat(e.repo_id),children:e.repo_name})}),(0,y.jsx)("td",{children:e.error_msg}),(0,y.jsx)("td",{children:(0,y.jsx)("span",{className:"item-meta-info",title:L()(e.last_accessed).format("llll"),children:L()(e.error_time).fromNow()})})]})}}]),n}(l.Component),Ze=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getDeviceErrorsListByPage=function(e){var t=i.state.perPage;I.I.sysAdminListDeviceErrors(e,t).then((function(e){i.setState({loading:!1,devicesErrors:e.data.device_errors,pageInfo:e.data.page_info,isCleanBtnShown:e.data.length>0})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.clean=function(){I.I.sysAdminClearDeviceErrors().then((function(e){i.setState({devicesErrors:[],isCleanBtnShown:!1});var t=(0,m.ih)("Successfully cleaned all errors.");P.Z.success(t)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){i.getDeviceErrorsListByPage(1)}))},i.state={loading:!0,errorMsg:"",devicesErrors:[],isCleanBtnShown:!1,pageInfo:{},perPage:25},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=void 0===i?1:i,s=n.perPage;this.setState({perPage:parseInt(t.get("per_page")||s),currentPage:parseInt(t.get("page")||r)},(function(){e.getDeviceErrorsListByPage(e.state.currentPage)}))}},{key:"render",value:function(){return(0,y.jsxs)(l.Fragment,{children:[this.state.isCleanBtnShown?(0,y.jsx)(N,(0,i.Z)((0,i.Z)({},this.props),{},{children:(0,y.jsx)(w.Z,{className:"operation-item",onClick:this.clean,children:(0,m.ih)("Clean")})})):(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(me,{currentItem:"errors"}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(Ie,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.devicesErrors,getDeviceErrorsListByPage:this.getDeviceErrorsListByPage,curPerPage:this.state.perPage,resetPerPage:this.resetPerPage,pageInfo:this.state.pageInfo})})]})})]})}}]),n}(l.Component),ke=n(4292),_e=n(95234),Ne=n(44517),Me=n(66919),Ce=n(82377),Ae=n(51840),Le=n(34594),Oe=n(95060),Te=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggle=function(){i.props.toggle()},i.handleQuotaChange=function(e){var t=e.target.value;i.setState({quota:t,isSubmitBtnActive:""!=t.trim()})},i.handleKeyDown=function(e){"Enter"==e.key&&(i.handleSubmit(),e.preventDefault())},i.handleSubmit=function(){i.props.updateQuota(i.state.quota.trim()),i.toggle()},i.state={quota:"",isSubmitBtnActive:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state,t=e.quota,n=e.isSubmitBtnActive;return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.toggle,children:[(0,y.jsx)(ke.Z,{toggle:this.toggle,children:(0,m.ih)("Set Quota")}),(0,y.jsx)(_e.Z,{children:(0,y.jsx)(Ne.Z,{children:(0,y.jsxs)(Me.Z,{children:[(0,y.jsxs)(Ce.Z,{children:[(0,y.jsx)(te.Z,{type:"text",className:"form-control",value:t,onKeyDown:this.handleKeyDown,onChange:this.handleQuotaChange}),(0,y.jsx)(Ae.Z,{addonType:"append",children:(0,y.jsx)(Le.Z,{children:"MB"})})]}),(0,y.jsxs)("p",{className:"small text-secondary mt-2 mb-2",children:[(0,m.ih)("An integer that is greater than or equal to 0."),(0,y.jsx)("br",{}),(0,m.ih)("Tip: 0 means default limit")]})]})})}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.toggle,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.handleSubmit,disabled:!n,children:(0,m.ih)("Submit")})]})]})}}]),n}(l.Component),Fe=n(38122),Re=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggle=function(){i.props.toggle()},i.openFileInput=function(){i.fileInputRef.current.click()},i.uploadFile=function(e){if(i.fileInputRef.current.files.length){var t=i.fileInputRef.current.files[0].name;if("xlsx"==t.substr(t.lastIndexOf(".")+1)){var n=i.fileInputRef.current.files[0];i.props.importUserInBatch(n),i.toggle()}else i.setState({errorMsg:(0,m.ih)("Please choose a .xlsx file.")})}},i.state={errorMsg:""},i.fileInputRef=l.createRef(),i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state.errorMsg;return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.toggle,children:[(0,y.jsx)(ke.Z,{toggle:this.toggle,children:(0,m.ih)("Import users from a .xlsx file")}),(0,y.jsxs)(_e.Z,{children:[(0,y.jsx)("p",{children:(0,y.jsx)("a",{className:"text-secondary small",href:"".concat(m.ze,"useradmin/batchadduser/example/"),children:(0,m.ih)("Download an example file")})}),(0,y.jsx)("button",{className:"btn btn-outline-primary",onClick:this.openFileInput,children:(0,m.ih)("Upload file")}),(0,y.jsx)("input",{className:"d-none",type:"file",onChange:this.uploadFile,ref:this.fileInputRef}),e&&(0,y.jsx)(Fe.Z,{color:"danger",children:e})]}),(0,y.jsx)(Oe.Z,{children:(0,y.jsx)(w.Z,{color:"secondary",onClick:this.toggle,children:(0,m.ih)("Cancel")})})]})}}]),n}(l.Component),Ue=n(73002),Ee=n(87324),ze=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){var e;(0,r.Z)(this,n);for(var i=arguments.length,s=new Array(i),a=0;a0})},i.handleSubmit=function(){i.props.addAdminInBatch(i.state.options.map((function(e){return e.email}))),i.toggle()},i.state={options:null,isSubmitBtnActive:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.toggle,children:[(0,y.jsx)(ke.Z,{toggle:this.toggle,children:(0,m.ih)("Add Admin")}),(0,y.jsx)(_e.Z,{children:(0,y.jsx)(He.Z,{isMulti:!0,className:"reviewer-select",placeholder:(0,m.ih)("Search users"),onSelectChange:this.handleSelectChange})}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.toggle,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.handleSubmit,disabled:!this.state.isSubmitBtnActive,children:(0,m.ih)("Submit")})]})]})}}]),n}(l.Component),Ye=n(7054),Ge=(0,s.Z)((function e(t){(0,r.Z)(this,e),this.email=t.email,this.name=t.name,this.contact_email=t.contact_email,this.login_id=t.login_id,this.last_login=t.last_login,this.last_access_time=t.last_access_time,this.create_time=t.create_time,this.is_active=t.is_active,this.is_staff=t.is_staff,this.reference_id=t.reference_id,this.department=t.department,this.quota_total=t.quota_total,this.quota_usage=t.quota_usage,this.role=t.role,this.institution=t.institution,t.org_id&&(this.org_id=t.org_id),t.org_name&&(this.org_name=t.org_name),this.isSelected=!1})),qe=(0,s.Z)((function e(t){(0,r.Z)(this,e),this.email=t.email,this.name=t.name,this.contact_email=t.contact_email,this.login_id=t.login_id,this.last_login=t.last_login,this.last_access_time=t.last_access_time,this.create_time=t.create_time,this.is_active=t.is_active,this.is_staff=t.is_staff,this.quota_total=t.quota_total,this.quota_usage=t.quota_usage,this.admin_role=t.admin_role,this.isSelected=!1})),Qe=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleInputChange=function(e){i.setState({value:e.target.value})},i.handleKeyDown=function(e){"Enter"==e.key&&(e.preventDefault(),i.handleSubmit())},i.handleSubmit=function(){var e=i.state.value.trim();if(!e)return!1;i.props.submit(e)},i.state={value:""},i}return(0,s.Z)(n,[{key:"render",value:function(){return(0,y.jsxs)("div",{className:"input-icon",children:[(0,y.jsx)("i",{className:"d-flex input-icon-addon fas fa-search"}),(0,y.jsx)("input",{type:"text",className:"form-control search-input h-6 mr-1",style:{width:"17rem"},placeholder:this.props.placeholder,value:this.state.value,onChange:this.handleInputChange,onKeyDown:this.handleKeyDown,autoComplete:"off"})]})}}]),n}(l.Component),Ke=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).navItems=[{name:"database",urlPart:"users",text:(0,m.ih)("Database")}],m.VA&&i.navItems.push({name:"ldap",urlPart:"users/ldap",text:(0,m.ih)("LDAP")},{name:"ldap-imported",urlPart:"users/ldap-imported",text:(0,m.ih)("LDAP(imported)")}),m.B2&&i.navItems.push({name:"admin",urlPart:"users/admins",text:(0,m.ih)("Admin")}),i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.currentItem;return(0,y.jsx)("div",{className:"cur-view-path tab-nav-container",children:(0,y.jsx)("ul",{className:"nav",children:this.navItems.map((function(t,n){return(0,y.jsx)("li",{className:"nav-item",children:(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/").concat(t.urlPart,"/"),className:"nav-link".concat(e==t.name?" active":""),children:t.text})},n)}))})})}}]),n}(l.Component),Xe=Ke,$e=n(24861),Je=n(13955),et=window.sysadmin.pageOptions,tt=et.availableRoles,nt=et.availableAdminRoles,it=et.institutions,rt=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggleItemFreezed=function(e){i.setState({isItemFreezed:e})},i.onFreezedItem=function(){i.setState({isItemFreezed:!0})},i.onUnfreezedItem=function(){i.setState({isItemFreezed:!1})},i.getPreviousPage=function(){i.props.getListByPage(i.props.currentPage-1)},i.getNextPage=function(){i.props.getListByPage(i.props.currentPage+1)},i.sortByQuotaUsage=function(e){e.preventDefault(),i.props.sortByQuotaUsage()},i.state={isItemFreezed:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.isAdmin,i=t.loading,r=t.errorMsg,s=t.items,a=t.isAllUsersSelected,o=t.curPerPage,c=t.hasNextPage,h=t.currentPage,d=t.sortBy,u=t.sortOrder;if(i)return(0,y.jsx)(Z.Z,{});if(r)return(0,y.jsx)("p",{className:"error text-center mt-4",children:r});var g,p=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No users")})}),f=[];g=""==d?(0,y.jsx)("span",{className:"fas fa-sort"}):(0,y.jsx)("span",{className:"fas ".concat("asc"==u?"fa-caret-up":"fa-caret-down")});var v=(0,m.ih)("Space Used"),x=void 0!=d?(0,y.jsxs)("a",{className:"d-inline-block table-sort-op",href:"#",onClick:this.sortByQuotaUsage,children:[v," ",g]}):v,b=(0,y.jsxs)(l.Fragment,{children:[x," / ".concat((0,m.ih)("Quota"))]}),j="".concat((0,m.ih)("Name")," / ").concat((0,m.ih)("Contact Email")),S="".concat((0,m.ih)("Created At")," / ").concat((0,m.ih)("Last Login")," / ").concat((0,m.ih)("Last Access"));m._y?f.push({width:"20%",text:j},{width:"15%",text:(0,m.ih)("Status")},{width:"15%",text:(0,m.ih)("Role")}):f.push({width:"30%",text:j},{width:"20%",text:(0,m.ih)("Status")}),m.ws&&!n?f.push({width:"14%",text:b},{width:"14%",text:(0,m.ih)("Institution")},{width:"14%",text:S},{width:"5%",text:""}):f.push({width:"20%",text:b},{width:"22%",text:S},{width:"5%",text:""});var D=(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"3%",className:"pl-2",children:(0,y.jsx)("input",{type:"checkbox",className:"vam",onChange:this.props.toggleSelectAllUsers,checked:a})}),f.map((function(e,t){return(0,y.jsx)("th",{width:e.width,children:e.text},t)}))]})}),(0,y.jsx)("tbody",{children:s.map((function(t,n){return(0,y.jsx)(st,{item:t,isItemFreezed:e.state.isItemFreezed,onFreezedItem:e.onFreezedItem,onUnfreezedItem:e.onUnfreezedItem,toggleItemFreezed:e.toggleItemFreezed,updateUser:e.props.updateUser,deleteUser:e.props.deleteUser,updateAdminRole:e.props.updateAdminRole,revokeAdmin:e.props.revokeAdmin,onUserSelected:e.props.onUserSelected,isAdmin:e.props.isAdmin,isLDAPImported:e.props.isLDAPImported},n)}))})]}),!this.props.isAdmin&&!this.props.isSearchResult&&(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPage,gotoNextPage:this.getNextPage,currentPage:h,hasNextPage:c,curPerPage:o,resetPerPage:this.props.resetPerPage})]});return s.length?D:p}}]),n}(l.Component),st=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseEnter=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!0,highlight:!0})},i.handleMouseLeave=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!1,highlight:!1})},i.onUnfreezedItem=function(){i.setState({highlight:!1,isOpIconShow:!1}),i.props.onUnfreezedItem()},i.toggleSetQuotaDialog=function(){i.setState({isSetQuotaDialogOpen:!i.state.isSetQuotaDialogOpen})},i.toggleDeleteUserDialog=function(){i.setState({isDeleteUserDialogOpen:!i.state.isDeleteUserDialogOpen})},i.toggleResetUserPasswordDialog=function(){i.setState({isResetUserPasswordDialogOpen:!i.state.isResetUserPasswordDialogOpen})},i.toggleRevokeAdminDialog=function(){i.setState({isRevokeAdminDialogOpen:!i.state.isRevokeAdminDialogOpen})},i.onUserSelected=function(){i.props.onUserSelected(i.props.item)},i.updateStatus=function(e){var t="active"==e.value;t&&P.Z.notify((0,m.ih)("It may take some time, please wait.")),i.props.updateUser(i.props.item.email,"is_active",t)},i.updateRole=function(e){i.props.updateUser(i.props.item.email,"role",e.value)},i.updateAdminRole=function(e){i.props.updateAdminRole(i.props.item.email,e.value)},i.translateRole=function(e){switch(e){case"default":return(0,m.ih)("Default");case"guest":return(0,m.ih)("Guest");default:return e}},i.translateAdminRole=function(e){switch(e){case"default_admin":return(0,m.ih)("Default Admin");case"system_admin":return(0,m.ih)("System Admin");case"daily_admin":return(0,m.ih)("Daily Admin");case"audit_admin":return(0,m.ih)("Audit Admin");default:return e}},i.translateStatus=function(e){switch(e){case"active":return(0,m.ih)("Active");case"inactive":return(0,m.ih)("Inactive")}},i.updateInstitution=function(e){i.props.updateUser(i.props.item.email,"institution",e.value)},i.updateQuota=function(e){i.props.updateUser(i.props.item.email,"quota_total",e)},i.deleteUser=function(){P.Z.notify((0,m.ih)("It may take some time, please wait.")),i.props.deleteUser(i.props.item.email,i.props.item.name)},i.resetPassword=function(){P.Z.notify((0,m.ih)("It may take some time, please wait.")),I.I.sysAdminResetUserPassword(i.props.item.email).then((function(e){P.Z.success(e.data.reset_tip)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.revokeAdmin=function(){var e=i.props.item;i.props.revokeAdmin(e.email,e.name)},i.getMenuOperations=function(){var e=i.props,t=e.isAdmin,n=e.isLDAPImported,r=e.isSearchResult,s=e.item,a=["Delete"];return(!n||r&&"db"==s.source)&&a.push("Reset Password"),t&&(a=["Revoke Admin"]),a},i.translateOperations=function(e){var t="";switch(e){case"Delete":t=(0,m.ih)("Delete");break;case"Reset Password":t=(0,m.ih)("Reset Password");break;case"Revoke Admin":t=(0,m.ih)("Revoke Admin")}return t},i.onMenuItemClick=function(e){switch(e){case"Delete":i.toggleDeleteUserDialog();break;case"Reset Password":i.toggleResetUserPasswordDialog();break;case"Revoke Admin":i.toggleRevokeAdminDialog()}},i.state={isOpIconShown:!1,highlight:!1,isSetQuotaDialogOpen:!1,isDeleteUserDialogOpen:!1,isResetUserPasswordDialogOpen:!1,isRevokeAdminDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.item,i=t.isAdmin,r=this.state,s=r.highlight,a=r.isOpIconShown,o=r.isSetQuotaDialogOpen,c=r.isDeleteUserDialogOpen,h=r.isResetUserPasswordDialogOpen,d=r.isRevokeAdminDialogOpen,u=''+f.c.HTMLescape(n.name)+"",p=(0,m.ih)("Are you sure you want to delete {placeholder} ?").replace("{placeholder}",u),v=(0,m.ih)("Are you sure you want to reset the password of {placeholder} ?").replace("{placeholder}",u),x=(0,m.ih)("Are you sure you want to revoke the admin permission of {placeholder} ?").replace("{placeholder}",u),b=n.is_active?"active":"inactive";this.statusOptions=["active","inactive"].map((function(t){return{value:t,text:e.translateStatus(t),isSelected:t==b}}));var j,S,D,w=this.statusOptions.filter((function(e){return e.isSelected}))[0];if(i){var I=n.admin_role;this.adminRoleOptions=nt.map((function(t){return{value:t,text:e.translateAdminRole(t),isSelected:t==I}})),j=this.adminRoleOptions.filter((function(e){return e.isSelected}))[0]}else{var P=n.role;this.roleOptions=tt.map((function(t){return{value:t,text:e.translateRole(t),isSelected:t==P}})),S=this.roleOptions.filter((function(e){return e.isSelected}))[0]||{value:P,text:this.translateRole(P),isSelected:!0}}if(m.ws&&!i){var Z=n.institution;this.instOptions=it.map((function(e){return{value:e,text:e,isSelected:e==Z}})),D=this.instOptions.filter((function(e){return e.isSelected}))[0]}return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{className:this.state.highlight?"tr-highlight":"",onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,children:[(0,y.jsx)("td",{className:"pl-2",children:(0,y.jsx)("input",{type:"checkbox",className:"vam",onChange:this.onUserSelected,checked:n.isSelected})}),(0,y.jsxs)("td",{children:[(0,y.jsx)(we,{email:n.email,name:n.name}),n.contact_email&&(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)("br",{}),n.contact_email]}),n.org_id&&(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)("br",{}),(0,y.jsxs)(g.rU,{to:"".concat(m.ze,"sys/organizations/").concat(n.org_id,"/info/"),children:["(",n.org_name,")"]})]})]}),(0,y.jsx)("td",{children:(0,y.jsx)($e.Z,{isDropdownToggleShown:s,currentSelectedOption:w,options:this.statusOptions,selectOption:this.updateStatus,toggleItemFreezed:this.props.toggleItemFreezed})}),m._y&&(0,y.jsx)("td",{children:i?(0,y.jsx)($e.Z,{isDropdownToggleShown:s,currentSelectedOption:j,options:this.adminRoleOptions,selectOption:this.updateAdminRole,toggleItemFreezed:this.props.toggleItemFreezed}):(0,y.jsx)($e.Z,{isDropdownToggleShown:s,currentSelectedOption:S,options:this.roleOptions,selectOption:this.updateRole,toggleItemFreezed:this.props.toggleItemFreezed})}),(0,y.jsxs)("td",{children:["".concat(f.c.bytesToSize(n.quota_usage)," / ").concat(n.quota_total>0?f.c.bytesToSize(n.quota_total):"--"),(0,y.jsx)("span",{title:(0,m.ih)("Edit"),className:"fa fa-pencil-alt attr-action-icon ".concat(a?"":"invisible"),onClick:this.toggleSetQuotaDialog})]}),m.ws&&!i&&(0,y.jsx)("td",{children:(0,y.jsx)($e.Z,{isDropdownToggleShown:s&&it.length>0,currentSelectedOption:D,options:this.instOptions,selectOption:this.updateInstitution,toggleItemFreezed:this.props.toggleItemFreezed})}),(0,y.jsxs)("td",{children:["".concat(n.create_time?L()(n.create_time).format("YYYY-MM-DD HH:mm"):"--"," /"),(0,y.jsx)("br",{}),"".concat(n.last_login?L()(n.last_login).fromNow():"--"),(0,y.jsx)("br",{}),"".concat(n.last_access_time?L()(n.last_access_time).fromNow():"--")]}),(0,y.jsx)("td",{children:n.email!=m.b6&&a&&(0,y.jsx)(Je.Z,{operations:this.getMenuOperations(),translateOperations:this.translateOperations,onMenuItemClick:this.onMenuItemClick,onFreezedItem:this.props.onFreezedItem,onUnfreezedItem:this.onUnfreezedItem})})]}),o&&(0,y.jsx)(Te,{toggle:this.toggleSetQuotaDialog,updateQuota:this.updateQuota}),c&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Delete User"),message:p,executeOperation:this.deleteUser,confirmBtnText:(0,m.ih)("Delete"),toggleDialog:this.toggleDeleteUserDialog}),h&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Reset Password"),message:v,executeOperation:this.resetPassword,confirmBtnText:(0,m.ih)("Reset"),toggleDialog:this.toggleResetUserPasswordDialog}),d&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Revoke Admin"),message:x,executeOperation:this.revokeAdmin,confirmBtnText:(0,m.ih)("Revoke"),toggleDialog:this.toggleRevokeAdminDialog})]})}}]),n}(l.Component),at=rt,ot=window.sysadmin.pageOptions.availableRoles,lt=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggleImportUserDialog=function(){i.setState({isImportUserDialogOpen:!i.state.isImportUserDialogOpen})},i.toggleAddUserDialog=function(){i.setState({isAddUserDialogOpen:!i.state.isAddUserDialogOpen})},i.toggleBatchSetQuotaDialog=function(){i.setState({isBatchSetQuotaDialogOpen:!i.state.isBatchSetQuotaDialogOpen})},i.toggleBatchDeleteUserDialog=function(){i.setState({isBatchDeleteUserDialogOpen:!i.state.isBatchDeleteUserDialogOpen})},i.onUserSelected=function(e){var t=!1,n=[],r=i.state.userList.map((function(i){return i.email===e.email&&(i.isSelected=!i.isSelected),1==i.isSelected?(t=!0,n.push(i)):n=n.filter((function(e){return e.email!=i.email})),i}));i.setState({userList:r,hasUserSelected:t,selectedUserList:n})},i.toggleSelectAllUsers=function(){if(i.state.isAllUsersSelected){var e=i.state.userList.map((function(e){return e.isSelected=!1,e}));i.setState({userList:e,hasUserSelected:!1,isAllUsersSelected:!1,selectedUserList:[]})}else{var t=i.state.userList.map((function(e){return e.isSelected=!0,e}));i.setState({userList:t,hasUserSelected:!0,isAllUsersSelected:!0,selectedUserList:t})}},i.getUserList=function(){I.I.sysAdminListAdmins().then((function(e){var t=e.data.admin_user_list.map((function(e){return new qe(e)}));i.setState({userList:t,loading:!1})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.getUsersListByPage=function(e){var t=i.state,n=t.perPage,r=t.sortBy,s=t.sortOrder,a=i.props.isLDAPImported;I.I.sysAdminListUsers(e,n,a,r,s).then((function(t){var r=t.data.data.map((function(e){return new Ge(e)}));i.setState({userList:r,loading:!1,hasNextPage:f.c.hasNextPage(e,n,t.data.total_count),currentPage:e})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.sortByQuotaUsage=function(){i.setState({sortBy:"quota_usage",sortOrder:"asc"==i.state.sortOrder?"desc":"asc",currentPage:1},(function(){var e=new URL(location.href),t=new URLSearchParams(e.search),n=i.state,r=n.currentPage,s=n.sortBy,a=n.sortOrder;t.set("page",r),t.set("order_by",s),t.set("direction",a),e.search=t.toString(),(0,g.c4)(e.toString()),i.getUsersListByPage(r)}))},i.deleteUser=function(e,t){I.I.sysAdminDeleteUser(e).then((function(n){var r=i.state.userList.filter((function(t){return t.email!=e}));i.setState({userList:r});var s=(0,m.ih)("Deleted user %s");s=s.replace("%s",t),P.Z.success(s)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.setUserQuotaInBatch=function(e){var t=i.state.selectedUserList.map((function(e){return e.email}));I.I.sysAdminSetUserQuotaInBatch(t,e).then((function(e){var t=i.state.userList.map((function(t){return e.data.success.forEach((function(e){t.email==e.email&&(t.quota_total=e.quota_total)})),t}));i.setState({userList:t})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.deleteUserInBatch=function(){var e=i.state.selectedUserList.map((function(e){return e.email}));I.I.sysAdminDeleteUserInBatch(e).then((function(t){if(t.data.success.length){var n=i.state.userList.filter((function(e){return!t.data.success.some((function(t){return t.email==e.email}))}));i.setState({userList:n,hasUserSelected:e.length!=t.data.success.length});var r=t.data.success.length,s=1==r?(0,m.ih)("Successfully deleted 1 user."):(0,m.ih)("Successfully deleted {user_number_placeholder} users.").replace("{user_number_placeholder}",r);P.Z.success(s)}t.data.failed.forEach((function(e){var t="".concat(e.email,": ").concat(e.error_msg);P.Z.danger(t)}))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.importUserInBatch=function(e){P.Z.notify((0,m.ih)("It may take some time, please wait.")),I.I.sysAdminImportUserViaFile(e).then((function(e){if(e.data.success.length){var t=e.data.success.map((function(e){return void 0==e.institution&&(e.institution=""),new Ge(e)}));i.setState({userList:t.concat(i.state.userList)})}e.data.failed.forEach((function(e){var t="".concat(e.email,": ").concat(e.error_msg);P.Z.danger(t)}))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.addUser=function(e){P.Z.notify((0,m.ih)("It may take some time, please wait."));var t=e.email,n=e.name,r=e.role,s=e.password;I.I.sysAdminAddUser(t,n,r,s).then((function(e){var t=i.state.userList;t.unshift(e.data),i.setState({userList:t}),P.Z.success(e.data.add_user_tip)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){i.getUsersListByPage(1)}))},i.updateUser=function(e,t,n){I.I.sysAdminUpdateUser(e,t,n).then((function(r){var s=i.state.userList.map((function(n){return n.email==e&&(n[t]=r.data[t]),n}));i.setState({userList:s});var a="is_active"==t&&n?r.data.update_status_tip:(0,m.ih)("Edit succeeded");P.Z.success(a)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.updateAdminRole=function(e,t){I.I.sysAdminUpdateAdminRole(e,t).then((function(t){var n=i.state.userList.map((function(n){return n.email==e&&(n.admin_role=t.data.role),n}));i.setState({userList:n}),P.Z.success((0,m.ih)("Edit succeeded"))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.revokeAdmin=function(e,t){I.I.sysAdminUpdateUser(e,"is_staff",!1).then((function(n){var r=i.state.userList.filter((function(t){return t.email!=e}));i.setState({userList:r}),P.Z.success((0,m.ih)("Successfully revoked the admin permission of {placeholder}.").replace("{placeholder}",t))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.getOperationsForAll=function(){var e=i.props,t=e.isAdmin,n=e.isLDAPImported;return t?(0,y.jsx)(w.Z,{className:"btn btn-secondary operation-item",onClick:i.toggleBatchAddAdminDialog,children:(0,m.ih)("Add Admin")}):n?(0,y.jsx)("a",{className:"btn btn-secondary operation-item",href:"".concat(m.ze,"sys/useradmin/export-excel/"),children:(0,m.ih)("Export Excel")}):(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(w.Z,{className:"btn btn-secondary operation-item",onClick:i.toggleImportUserDialog,children:(0,m.ih)("Import Users")}),(0,y.jsx)(w.Z,{className:"btn btn-secondary operation-item",onClick:i.toggleAddUserDialog,children:(0,m.ih)("Add User")}),(0,y.jsx)("a",{className:"btn btn-secondary operation-item",href:"".concat(m.ze,"sys/useradmin/export-excel/"),children:(0,m.ih)("Export Excel")})]})},i.getCurrentNavItem=function(){var e=i.props,t=e.isAdmin,n=e.isLDAPImported,r="database";return t?r="admin":n&&(r="ldap-imported"),r},i.toggleBatchAddAdminDialog=function(){i.setState({isBatchAddAdminDialogOpen:!i.state.isBatchAddAdminDialogOpen})},i.addAdminInBatch=function(e){I.I.sysAdminAddAdminInBatch(e).then((function(e){var t=e.data.success.map((function(e){return new qe(e)}));i.setState({userList:t.concat(i.state.userList)}),e.data.failed.forEach((function(e){var t="".concat(e.email,": ").concat(e.error_msg);P.Z.danger(t)}))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.getSearch=function(){return i.props.isAdmin?null:(0,y.jsx)(Qe,{placeholder:(0,m.ih)("Search users"),submit:i.searchItems})},i.searchItems=function(e){(0,g.c4)("".concat(m.ze,"sys/search-users/?query=").concat(encodeURIComponent(e)))},i.state={loading:!0,errorMsg:"",userList:[],hasNextPage:!1,currentPage:1,perPage:25,hasUserSelected:!1,selectedUserList:[],isAllUsersSelected:!1,isImportUserDialogOpen:!1,isAddUserDialogOpen:!1,isBatchSetQuotaDialogOpen:!1,isBatchDeleteUserDialogOpen:!1,isBatchAddAdminDialogOpen:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;if(this.props.isAdmin)this.getUserList();else{var t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=n.perPage,s=n.sortBy,a=void 0===s?"":s,o=n.sortOrder,l=void 0===o?"asc":o;this.setState({perPage:parseInt(t.get("per_page")||r),currentPage:parseInt(t.get("page")||i),sortBy:t.get("order_by")||a,sortOrder:t.get("direction")||l},(function(){e.getUsersListByPage(e.state.currentPage)}))}}},{key:"render",value:function(){var e=this.props,t=e.isAdmin,n=e.isLDAPImported,r=this.state,s=r.hasUserSelected,a=r.isImportUserDialogOpen,o=r.isAddUserDialogOpen,c=r.isBatchDeleteUserDialogOpen,h=r.isBatchSetQuotaDialogOpen,d=r.isBatchAddAdminDialogOpen;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)((0,i.Z)({search:this.getSearch()},this.props),{},{children:s?(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(w.Z,{className:"btn btn-secondary operation-item",onClick:this.toggleBatchSetQuotaDialog,children:(0,m.ih)("Set Quota")}),(0,y.jsx)(w.Z,{className:"btn btn-secondary operation-item",onClick:this.toggleBatchDeleteUserDialog,children:(0,m.ih)("Delete Users")})]}):this.getOperationsForAll()})),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Xe,{currentItem:this.getCurrentNavItem()}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(at,{isAdmin:t,isLDAPImported:n,loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.userList,sortBy:this.state.sortBy,sortOrder:this.state.sortOrder,sortByQuotaUsage:this.sortByQuotaUsage,currentPage:this.state.currentPage,hasNextPage:this.state.hasNextPage,curPerPage:this.state.perPage,resetPerPage:this.resetPerPage,getListByPage:this.getUsersListByPage,updateUser:this.updateUser,deleteUser:this.deleteUser,updateAdminRole:this.updateAdminRole,revokeAdmin:this.revokeAdmin,onUserSelected:this.onUserSelected,isAllUsersSelected:this.isAllUsersSelected,toggleSelectAllUsers:this.toggleSelectAllUsers})})]})}),a&&(0,y.jsx)(Re,{toggle:this.toggleImportUserDialog,importUserInBatch:this.importUserInBatch}),o&&(0,y.jsx)(Ve,{dialogTitle:(0,m.ih)("Add User"),showRole:m._y,availableRoles:ot,addUser:this.addUser,toggleDialog:this.toggleAddUserDialog}),h&&(0,y.jsx)(Te,{toggle:this.toggleBatchSetQuotaDialog,updateQuota:this.setUserQuotaInBatch}),c&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Delete Users"),message:(0,m.ih)("Are you sure you want to delete the selected user(s) ?"),executeOperation:this.deleteUserInBatch,confirmBtnText:(0,m.ih)("Delete"),toggleDialog:this.toggleBatchDeleteUserDialog}),d&&(0,y.jsx)(We,{addAdminInBatch:this.addAdminInBatch,toggle:this.toggleBatchAddAdminDialog})]})}}]),n}(l.Component),ct=lt,ht=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){return(0,y.jsx)(ct,(0,i.Z)({isAdmin:!0},this.props))}}]),n}(l.Component),dt=ht,ut=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){return(0,y.jsx)(ct,(0,i.Z)({isLDAPImported:!0},this.props))}}]),n}(l.Component),gt=ut,pt=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getPreviousPage=function(){i.props.getListByPage(i.props.currentPage-1)},i.getNextPage=function(){i.props.getListByPage(i.props.currentPage+1)},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.loading,n=e.errorMsg,i=e.items,r=e.curPerPage,s=e.hasNextPage,a=e.currentPage;if(t)return(0,y.jsx)(Z.Z,{});if(n)return(0,y.jsx)("p",{className:"error text-center mt-4",children:n});var o=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No users")})}),c=(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"40%",children:(0,m.ih)("Email")}),(0,y.jsxs)("th",{width:"30%",children:[(0,m.ih)("Space Used")," / ",(0,m.ih)("Quota")]}),(0,y.jsx)("th",{width:"30%",children:(0,m.ih)("Last Login")})]})}),(0,y.jsx)("tbody",{children:i.map((function(e,t){return(0,y.jsx)(mt,{item:e},t)}))})]}),(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPage,gotoNextPage:this.getNextPage,currentPage:a,hasNextPage:s,curPerPage:r,resetPerPage:this.props.resetPerPage})]});return i.length?c:o}}]),n}(l.Component),mt=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item;return(0,y.jsx)(l.Fragment,{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("td",{children:(0,y.jsx)(we,{email:e.email,name:e.email})}),(0,y.jsx)("td",{children:"".concat(f.c.bytesToSize(e.quota_usage)," / ").concat(e.quota_total>0?f.c.bytesToSize(e.quota_total):"--")}),(0,y.jsx)("td",{children:e.last_login?L()(e.last_login).fromNow():"--"})]})})}}]),n}(l.Component),ft=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getUsersListByPage=function(e){var t=i.state.perPage;I.I.sysAdminListLDAPUsers(e,t).then((function(t){i.setState({loading:!1,userList:t.data.ldap_user_list,hasNextPage:t.data.has_next_page,currentPage:e})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){i.getUsersListByPage(1)}))},i.state={loading:!0,errorMsg:"",userList:{},hasNextPage:!1,currentPage:1,perPage:25},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=n.perPage;this.setState({perPage:parseInt(t.get("per_page")||r),currentPage:parseInt(t.get("page")||i)},(function(){e.getUsersListByPage(e.state.currentPage)}))}},{key:"render",value:function(){return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Xe,{currentItem:"ldap"}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(pt,{resetPerPage:this.resetPerPage,loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.userList,currentPage:this.state.currentPage,hasNextPage:this.state.hasNextPage,curPerPage:this.state.perPage,getListByPage:this.getUsersListByPage})})]})})]})}}]),n}(l.Component),vt=ft,xt=n(27988),yt=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggleBatchSetQuotaDialog=function(){i.setState({isBatchSetQuotaDialogOpen:!i.state.isBatchSetQuotaDialogOpen})},i.toggleBatchDeleteUserDialog=function(){i.setState({isBatchDeleteUserDialogOpen:!i.state.isBatchDeleteUserDialogOpen})},i.onUserSelected=function(e){var t=!1,n=[],r=i.state.userList.map((function(i){return i.email===e.email&&(i.isSelected=!i.isSelected),1==i.isSelected?(t=!0,n.push(i)):n=n.filter((function(e){return e.email!=i.email})),i}));i.setState({userList:r,hasUserSelected:t,selectedUserList:n})},i.toggleSelectAllUsers=function(){if(i.state.isAllUsersSelected){var e=i.state.userList.map((function(e){return e.isSelected=!1,e}));i.setState({userList:e,hasUserSelected:!1,isAllUsersSelected:!1,selectedUserList:[]})}else{var t=i.state.userList.map((function(e){return e.isSelected=!0,e}));i.setState({userList:t,hasUserSelected:!0,isAllUsersSelected:!0,selectedUserList:t})}},i.getItems=function(e){I.I.sysAdminSearchUsers(i.state.query.trim(),e,i.state.perPage).then((function(e){i.setState({userList:e.data.user_list,loading:!1,pageInfo:e.data.page_info})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){i.getItems(1)}))},i.deleteUser=function(e,t){I.I.sysAdminDeleteUser(e).then((function(n){var r=i.state.userList.filter((function(t){return t.email!=e}));i.setState({userList:r});var s=(0,m.ih)("Deleted user %s");s=s.replace("%s",t),P.Z.success(s)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.setUserQuotaInBatch=function(e){var t=i.state.selectedUserList.map((function(e){return e.email}));I.I.sysAdminSetUserQuotaInBatch(t,e).then((function(e){var t=i.state.userList.map((function(t){return e.data.success.forEach((function(e){t.email==e.email&&(t.quota_total=e.quota_total)})),t}));i.setState({userList:t})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.deleteUserInBatch=function(){var e=i.state.selectedUserList.map((function(e){return e.email}));I.I.sysAdminDeleteUserInBatch(e).then((function(t){if(t.data.success.length){var n=i.state.userList.filter((function(e){return!t.data.success.some((function(t){return t.email==e.email}))}));i.setState({userList:n,hasUserSelected:e.length!=t.data.success.length});var r=t.data.success.length,s=1==r?(0,m.ih)("Successfully deleted 1 user."):(0,m.ih)("Successfully deleted {user_number_placeholder} users.").replace("{user_number_placeholder}",r);P.Z.success(s)}t.data.failed.forEach((function(e){var t="".concat(e.email,": ").concat(e.error_msg);P.Z.danger(t)}))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.updateUser=function(e,t,n){I.I.sysAdminUpdateUser(e,t,n).then((function(r){var s=i.state.userList.map((function(n){return n.email==e&&(n[t]=r.data[t]),n}));i.setState({userList:s});var a="is_active"==t&&n?r.data.update_status_tip:(0,m.ih)("Edit succeeded");P.Z.success(a)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.updateAdminRole=function(e,t){I.I.sysAdminUpdateAdminRole(e,t).then((function(t){var n=i.state.userList.map((function(n){return n.email==e&&(n.admin_role=t.data.role),n}));i.setState({userList:n}),P.Z.success((0,m.ih)("Edit succeeded"))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.revokeAdmin=function(e,t){I.I.sysAdminUpdateUser(e,"is_staff",!1).then((function(n){var r=i.state.userList.filter((function(t){return t.email!=e}));i.setState({userList:r}),P.Z.success((0,m.ih)("Successfully revoked the admin permission of {placeholder}.").replace("{placeholder}",t))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.handleInputChange=function(e){i.setState({query:e.target.value},i.checkSubmitBtnActive)},i.checkSubmitBtnActive=function(){var e=i.state.query;i.setState({isSubmitBtnActive:e.trim()})},i.getPreviousPageList=function(){i.getItems(i.state.pageInfo.current_page-1)},i.getNextPageList=function(){i.getItems(i.state.pageInfo.current_page+1)},i.handleKeyDown=function(e){13===e.keyCode&&(i.state.isSubmitBtnActive&&i.getItems())},i.state={query:"",isSubmitBtnActive:!1,loading:!0,errorMsg:"",userList:[],pageInfo:{has_next_page:!1,current_page:1},currentPage:1,perPage:25,hasUserSelected:!1,selectedUserList:[],isAllUsersSelected:!1,isBatchSetQuotaDialogOpen:!1,isBatchDeleteUserDialogOpen:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(document.location).searchParams,n=this.state,i=n.currentPage,r=n.perPage;this.setState({query:t.get("query")||"",currentPage:parseInt(t.get("page")||i),perPage:parseInt(t.get("per_page")||r)},(function(){e.getItems(e.state.currentPage)}))}},{key:"render",value:function(){var e=this.state,t=e.query,n=e.isSubmitBtnActive,r=this.state,s=r.hasUserSelected,a=r.isBatchDeleteUserDialogOpen,o=r.isBatchSetQuotaDialogOpen;return(0,y.jsxs)(l.Fragment,{children:[s?(0,y.jsx)(N,(0,i.Z)((0,i.Z)({},this.props),{},{children:(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(w.Z,{className:"btn btn-secondary operation-item",onClick:this.toggleBatchSetQuotaDialog,children:(0,m.ih)("Set Quota")}),(0,y.jsx)(w.Z,{className:"btn btn-secondary operation-item",onClick:this.toggleBatchDeleteUserDialog,children:(0,m.ih)("Delete Users")})]})})):(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)("div",{className:"cur-view-path",children:(0,y.jsx)("h3",{className:"sf-heading",children:(0,m.ih)("Users")})}),(0,y.jsxs)("div",{className:"cur-view-content",children:[(0,y.jsxs)("div",{className:"mt-4 mb-6",children:[(0,y.jsx)("h4",{className:"border-bottom font-weight-normal mb-2 pb-1",children:(0,m.ih)("Search Users")}),(0,y.jsxs)(Ne.Z,{tag:"div",children:[(0,y.jsx)(Me.Z,{row:!0,children:(0,y.jsx)(xt.Z,{sm:5,children:(0,y.jsx)(te.Z,{type:"text",name:"query",value:t,placeholder:(0,m.ih)("Search users"),onChange:this.handleInputChange,onKeyDown:this.handleKeyDown})})}),(0,y.jsx)(Me.Z,{row:!0,children:(0,y.jsx)(xt.Z,{sm:{size:5},children:(0,y.jsx)("button",{className:"btn btn-outline-primary",disabled:!n,onClick:this.getItems,children:(0,m.ih)("Submit")})})})]})]}),(0,y.jsxs)("div",{className:"mt-4 mb-6",children:[(0,y.jsx)("h4",{className:"border-bottom font-weight-normal mb-2 pb-1",children:(0,m.ih)("Result")}),(0,y.jsx)(at,{isLDAPImported:!1,isAdmin:!1,isSearchResult:!0,loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.userList,updateUser:this.updateUser,deleteUser:this.deleteUser,updateAdminRole:this.updateAdminRole,revokeAdmin:this.revokeAdmin,onUserSelected:this.onUserSelected,isAllUsersSelected:this.isAllUsersSelected,toggleSelectAllUsers:this.toggleSelectAllUsers})]})]})]})}),o&&(0,y.jsx)(Te,{toggle:this.toggleBatchSetQuotaDialog,updateQuota:this.setUserQuotaInBatch}),a&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Delete Users"),message:(0,m.ih)("Are you sure you want to delete the selected user(s) ?"),executeOperation:this.deleteUserInBatch,confirmBtnText:(0,m.ih)("Delete"),toggleDialog:this.toggleBatchDeleteUserDialog}),this.state.pageInfo&&(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPageList,gotoNextPage:this.getNextPageList,currentPage:this.state.pageInfo.current_page,hasNextPage:this.state.pageInfo.has_next_page,curPerPage:this.state.perPage,resetPerPage:this.resetPerPage})]})}}]),n}(l.Component),bt=yt,jt=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggle=function(){i.props.toggle()},i.handleRateLimitChange=function(e){var t=e.target.value;i.setState({rateLimit:t,isSubmitBtnActive:""!=t.trim()})},i.handleKeyDown=function(e){"Enter"==e.key&&(i.handleSubmit(),e.preventDefault())},i.handleSubmit=function(){i.props.updateUploadDownloadRateLimit(i.props.uploadOrDownload,i.state.rateLimit.trim()),i.toggle()},i.state={rateLimit:"",isSubmitBtnActive:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state,t=e.rateLimit,n=e.isSubmitBtnActive;return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.toggle,children:[(0,y.jsx)(ke.Z,{toggle:this.toggle,children:"upload"==this.props.uploadOrDownload?(0,m.ih)("Set Upload Rate Limit"):(0,m.ih)("Set Download Rate Limit")}),(0,y.jsx)(_e.Z,{children:(0,y.jsx)(Ne.Z,{children:(0,y.jsxs)(Me.Z,{children:[(0,y.jsxs)(Ce.Z,{children:[(0,y.jsx)(te.Z,{type:"text",className:"form-control",value:t,onKeyDown:this.handleKeyDown,onChange:this.handleRateLimitChange}),(0,y.jsx)(Ae.Z,{addonType:"append",children:(0,y.jsx)(Le.Z,{children:"kB/s"})})]}),(0,y.jsxs)("p",{className:"small text-secondary mt-2 mb-2",children:[(0,m.ih)("An integer that is greater than or equal to 0."),(0,y.jsx)("br",{}),(0,m.ih)("Tip: 0 means default limit")]})]})})}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.toggle,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.handleSubmit,disabled:!n,children:(0,m.ih)("Submit")})]})]})}}]),n}(l.Component),St=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleInputChange=function(e){var t=e.target.value;i.setState({value:t})},i.handleKeyDown=function(e){"Enter"==e.key&&(i.handleSubmit(),e.preventDefault())},i.handleSubmit=function(){i.props.updateValue(i.state.value.trim()),i.props.toggleDialog()},i.state={value:i.props.value,isSubmitBtnActive:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.toggleDialog;return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:e,children:[(0,y.jsx)(ke.Z,{toggle:e,children:this.props.dialogTitle}),(0,y.jsx)(_e.Z,{children:(0,y.jsx)(Ne.Z,{children:(0,y.jsx)(Me.Z,{children:(0,y.jsx)(te.Z,{type:"text",value:this.state.value,onKeyDown:this.handleKeyDown,onChange:this.handleInputChange})})})}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:e,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.handleSubmit,children:(0,m.ih)("Submit")})]})]})}}]),n}(l.Component),Dt=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).navItems=[{name:"info",urlPart:"",text:(0,m.ih)("Info")},{name:"owned-repos",urlPart:"owned-libraries",text:(0,m.ih)("Owned Libraries")},{name:"shared-repos",urlPart:"shared-libraries",text:(0,m.ih)("Shared Libraries")},{name:"links",urlPart:"shared-links",text:(0,m.ih)("Shared Links")},{name:"groups",urlPart:"groups",text:(0,m.ih)("Groups")}],i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.currentItem,n=e.email,i=e.userName;return(0,y.jsxs)("div",{children:[(0,y.jsx)("div",{className:"cur-view-path",children:(0,y.jsxs)("h3",{className:"sf-heading",children:[(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/users/"),children:(0,m.ih)("Users")})," / ",i]})}),(0,y.jsx)("ul",{className:"nav border-bottom mx-4",children:this.navItems.map((function(e,i){return(0,y.jsx)("li",{className:"nav-item mr-2",children:(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/users/").concat(encodeURIComponent(n),"/").concat(e.urlPart),className:"nav-link ".concat(t==e.name?" active":""),children:e.text})},i)}))})]})}}]),n}(l.Component),wt=Dt,It=window.sysadmin.pageOptions.twoFactorAuthEnabled,Pt=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggleSetQuotaDialog=function(){i.setState({isSetQuotaDialogOpen:!i.state.isSetQuotaDialogOpen})},i.toggleSetUserUploadRateLimitDialog=function(){i.setState({isSetUserUploadRateLimitDialogOpen:!i.state.isSetUserUploadRateLimitDialogOpen})},i.toggleSetUserDownloadRateLimitDialog=function(){i.setState({isSetUserDownloadRateLimitDialogOpen:!i.state.isSetUserDownloadRateLimitDialogOpen})},i.updateQuota=function(e){i.props.updateUser("quota_total",e)},i.updateUploadDownloadRateLimit=function(e,t){"upload"==e&&i.props.updateUser("upload_rate_limit",t),"download"==e&&i.props.updateUser("download_rate_limit",t)},i.toggleDialog=function(e,t){i.setState({currentKey:e,dialogTitle:t,isUpdateUserDialogOpen:!i.state.isUpdateUserDialogOpen})},i.toggleSetNameDialog=function(){i.toggleDialog("name",(0,m.ih)("Set Name"))},i.toggleSetUserLoginIDDialog=function(){i.toggleDialog("login_id",(0,m.ih)("Set Login ID"))},i.toggleSetUserComtactEmailDialog=function(){i.toggleDialog("contact_email",(0,m.ih)("Set Contact Email"))},i.toggleSetUserReferenceIDDialog=function(){i.toggleDialog("reference_id",(0,m.ih)("Set Reference ID"))},i.updateValue=function(e){i.props.updateUser(i.state.currentKey,e)},i.toggleUpdateUserDialog=function(){i.toggleDialog("","")},i.showEditIcon=function(e){return(0,y.jsx)("span",{title:(0,m.ih)("Edit"),className:"fa fa-pencil-alt attr-action-icon",onClick:e})},i.state={currentKey:"",dialogTitle:"",isSetQuotaDialogOpen:!1,isSetUserUploadRateLimitDialogOpen:!1,isSetUserDownloadRateLimitDialogOpen:!1,isUpdateUserDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.loading,n=e.errorMsg;if(t)return(0,y.jsx)(Z.Z,{});if(n)return(0,y.jsx)("p",{className:"error text-center mt-4",children:n});var i=this.props.userInfo,r=this.state,s=r.currentKey,a=r.dialogTitle,o=r.isSetQuotaDialogOpen,c=r.isUpdateUserDialogOpen,h=r.isSetUserUploadRateLimitDialogOpen,d=r.isSetUserDownloadRateLimitDialogOpen;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("dl",{className:"m-0",children:[(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Avatar")}),(0,y.jsx)("dd",{className:"info-item-content",children:(0,y.jsx)("img",{src:i.avatar_url,alt:i.name,width:"80",className:"rounded"})}),(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Email")}),(0,y.jsx)("dd",{className:"info-item-content",children:i.email}),i.org_name&&(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Organization")}),(0,y.jsx)("dd",{className:"info-item-content",children:i.org_name})]}),(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Name")}),(0,y.jsxs)("dd",{className:"info-item-content",children:[i.name||"--",this.showEditIcon(this.toggleSetNameDialog)]}),(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Login ID")}),(0,y.jsxs)("dd",{className:"info-item-content",children:[i.login_id||"--",this.showEditIcon(this.toggleSetUserLoginIDDialog)]}),(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Contact Email")}),(0,y.jsxs)("dd",{className:"info-item-content",children:[i.contact_email||"--",this.showEditIcon(this.toggleSetUserComtactEmailDialog)]}),(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Reference ID")}),(0,y.jsxs)("dd",{className:"info-item-content",children:[i.reference_id||"--",this.showEditIcon(this.toggleSetUserReferenceIDDialog)]}),(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Space Used / Quota")}),(0,y.jsxs)("dd",{className:"info-item-content",children:["".concat(f.c.bytesToSize(i.quota_usage)," / ").concat(i.quota_total>0?f.c.bytesToSize(i.quota_total):"--"),this.showEditIcon(this.toggleSetQuotaDialog)]}),m._y&&(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Upload Rate Limit")}),(0,y.jsxs)("dd",{className:"info-item-content",children:[i.upload_rate_limit>0?i.upload_rate_limit+" kB/s":"--",this.showEditIcon(this.toggleSetUserUploadRateLimitDialog)]}),(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Download Rate Limit")}),(0,y.jsxs)("dd",{className:"info-item-content",children:[i.download_rate_limit>0?i.download_rate_limit+" kB/s":"--",this.showEditIcon(this.toggleSetUserDownloadRateLimitDialog)]})]}),It&&(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Two-Factor Authentication")}),(0,y.jsxs)("dd",{className:"info-item-content",children:[i.has_default_device?(0,y.jsxs)(Me.Z,{children:[(0,y.jsx)("p",{className:"mb-1",children:(0,m.ih)("Status: enabled")}),(0,y.jsx)(w.Z,{onClick:this.props.disable2FA,children:(0,m.ih)("Disable Two-Factor Authentication")})]}):(0,y.jsx)(Me.Z,{children:(0,y.jsx)(w.Z,{disabled:!0,children:(0,m.ih)("Disable Two-Factor Authentication")})}),(0,y.jsx)(Me.Z,{check:!0,children:(0,y.jsxs)(Ue.Z,{check:!0,children:[(0,y.jsx)(te.Z,{type:"checkbox",checked:i.is_force_2fa,onChange:this.props.toggleForce2fa}),(0,y.jsx)("span",{children:(0,m.ih)("Force Two-Factor Authentication")})]})})]})]})]}),o&&(0,y.jsx)(Te,{updateQuota:this.updateQuota,toggle:this.toggleSetQuotaDialog}),m._y&&h&&(0,y.jsx)(jt,{uploadOrDownload:"upload",updateUploadDownloadRateLimit:this.updateUploadDownloadRateLimit,toggle:this.toggleSetUserUploadRateLimitDialog}),m._y&&d&&(0,y.jsx)(jt,{uploadOrDownload:"download",updateUploadDownloadRateLimit:this.updateUploadDownloadRateLimit,toggle:this.toggleSetUserDownloadRateLimitDialog}),c&&(0,y.jsx)(St,{dialogTitle:a,value:i[s],updateValue:this.updateValue,toggleDialog:this.toggleUpdateUserDialog})]})}}]),n}(l.Component),Zt=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).updateUser=function(e,t){var n=i.state.userInfo.email;I.I.sysAdminUpdateUser(n,e,t).then((function(t){var n=i.state.userInfo;n[e]=t.data[e],i.setState({userInfo:n}),P.Z.success((0,m.ih)("Edit succeeded"))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.disable2FA=function(){var e=i.state.userInfo.email;I.I.sysAdminDeleteTwoFactorAuth(e).then((function(e){var t=i.state.userInfo;t.has_default_device=!1,i.setState({userInfo:t})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.toggleForce2fa=function(e){var t=i.state.userInfo.email,n=e.target.checked;I.I.sysAdminSetForceTwoFactorAuth(t,n).then((function(e){var t=i.state.userInfo;t.is_force_2fa=n,i.setState({userInfo:t})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.state={loading:!0,errorMsg:"",userInfo:{}},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=decodeURIComponent(this.props.email);I.I.sysAdminGetUser(t,160).then((function(t){e.setState({loading:!1,userInfo:t.data})})).catch((function(t){e.setState({loading:!1,errorMsg:f.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){var e=this.state.userInfo;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(wt,{currentItem:"info",email:this.props.email,userName:e.name}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(Pt,{loading:this.state.loading,errorMsg:this.state.errorMsg,userInfo:this.state.userInfo,updateUser:this.updateUser,disable2FA:this.disable2FA,toggleForce2fa:this.toggleForce2fa})})]})})]})}}]),n}(l.Component),kt=n(33028),_t=window.sysadmin.pageOptions.enableSysAdminViewRepo,Nt=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).onFreezedItem=function(){i.setState({isItemFreezed:!0})},i.onUnfreezedItem=function(){i.setState({isItemFreezed:!1})},i.state={isItemFreezed:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.items;if(n)return(0,y.jsx)(Z.Z,{});if(i)return(0,y.jsx)("p",{className:"error text-center mt-4",children:i});var s=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No libraries")})}),a=(0,y.jsx)(l.Fragment,{children:(0,y.jsxs)("table",{children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"5%"}),(0,y.jsx)("th",{width:"35%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"30%",children:(0,m.ih)("Size")}),(0,y.jsx)("th",{width:"25%",children:(0,m.ih)("Last Update")}),(0,y.jsx)("th",{width:"5%"})]})}),(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(Mt,{item:t,isItemFreezed:e.state.isItemFreezed,onFreezedItem:e.onFreezedItem,onUnfreezedItem:e.onUnfreezedItem,deleteRepo:e.props.deleteRepo,transferRepo:e.props.transferRepo},n)}))})]})});return r.length?a:s}}]),n}(l.Component),Mt=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseEnter=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!0,highlight:!0})},i.handleMouseLeave=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!1,highlight:!1})},i.onUnfreezedItem=function(){i.setState({highlight:!1,isOpIconShow:!1}),i.props.onUnfreezedItem()},i.toggleDeleteDialog=function(){i.setState({isDeleteDialogOpen:!i.state.isDeleteDialogOpen})},i.deleteRepo=function(){i.props.deleteRepo(i.props.item.id)},i.toggleTransferDialog=function(){i.setState({isTransferDialogOpen:!i.state.isTransferDialogOpen})},i.transferRepo=function(e){i.props.transferRepo(i.props.item.id,e.email),i.toggleTransferDialog()},i.renderRepoName=function(){var e=i.props.item;return e.name?m._y&&_t&&!e.encrypted?(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/libraries/").concat(e.id,"/"),children:e.name}):e.name:(0,m.ih)("Broken ({repo_id_placeholder})").replace("{repo_id_placeholder}",e.id)},i.translateOperations=function(e){var t="";switch(e){case"Delete":t=(0,m.ih)("Delete");break;case"Transfer":t=(0,m.ih)("Transfer")}return t},i.onMenuItemClick=function(e){switch(e){case"Delete":i.toggleDeleteDialog();break;case"Transfer":i.toggleTransferDialog()}},i.state={isOpIconShown:!1,highlight:!1,isDeleteDialogOpen:!1,isTransferDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item,t=this.state,n=t.isOpIconShown,i=t.isDeleteDialogOpen,r=t.isTransferDialogOpen,s=f.c.getLibIconUrl(e),a=f.c.getLibIconTitle(e),o=''+f.c.HTMLescape(e.name)+"",c=(0,m.ih)("Are you sure you want to delete {placeholder} ?").replace("{placeholder}",o);return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{className:this.state.highlight?"tr-highlight":"",onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,children:[(0,y.jsx)("td",{children:(0,y.jsx)("img",{src:s,title:a,alt:a,width:"24"})}),(0,y.jsx)("td",{children:this.renderRepoName()}),(0,y.jsx)("td",{children:f.c.bytesToSize(e.size)}),(0,y.jsx)("td",{children:L()(e.last_modified).fromNow()}),(0,y.jsx)("td",{children:n&&(0,y.jsx)(Je.Z,{operations:["Delete","Transfer"],translateOperations:this.translateOperations,onMenuItemClick:this.onMenuItemClick,onFreezedItem:this.props.onFreezedItem,onUnfreezedItem:this.onUnfreezedItem})})]}),i&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Delete Library"),message:c,executeOperation:this.deleteRepo,confirmBtnText:(0,m.ih)("Delete"),toggleDialog:this.toggleDeleteDialog}),r&&(0,y.jsx)(kt.Z,{itemName:e.name,submit:this.transferRepo,canTransferToDept:!1,toggleDialog:this.toggleTransferDialog})]})}}]),n}(l.Component),Ct=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).deleteRepo=function(e){I.I.sysAdminDeleteRepo(e).then((function(t){var n=i.state.repoList.filter((function(t){return t.id!=e}));i.setState({repoList:n}),P.Z.success((0,m.ih)("Successfully deleted 1 item."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.transferRepo=function(e,t){I.I.sysAdminTransferRepo(e,t).then((function(t){var n=i.state.repoList.filter((function(t){return t.id!=e}));i.setState({repoList:n});var r=(0,m.ih)("Successfully transferred the library.");P.Z.success(r)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.state={loading:!0,errorMsg:"",userInfo:{},repoList:[]},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=decodeURIComponent(this.props.email);I.I.sysAdminGetUser(t).then((function(t){e.setState({userInfo:t.data})})),I.I.sysAdminListReposByOwner(t).then((function(t){e.setState({loading:!1,repoList:t.data.repos})})).catch((function(t){e.setState({loading:!1,errorMsg:f.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(wt,{currentItem:"owned-repos",email:this.props.email,userName:this.state.userInfo.name}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(Nt,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.repoList,deleteRepo:this.deleteRepo,transferRepo:this.transferRepo})})]})})]})}}]),n}(l.Component),At=window.sysadmin.pageOptions.enableSysAdminViewRepo,Lt=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.loading,n=e.errorMsg,i=e.items;if(t)return(0,y.jsx)(Z.Z,{});if(n)return(0,y.jsx)("p",{className:"error text-center mt-4",children:n});var r=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No libraries")})}),s=(0,y.jsx)(l.Fragment,{children:(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"5%"}),(0,y.jsx)("th",{width:"35%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Share From")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Size")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Last Update")})]})}),(0,y.jsx)("tbody",{children:i.map((function(e,t){return(0,y.jsx)(Ot,{item:e},t)}))})]})});return i.length?s:r}}]),n}(l.Component),Ot=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){var e;(0,r.Z)(this,n);for(var i=arguments.length,s=new Array(i),a=0;a0)for(var n=0;n0)for(var n=0;n0&&this.state.errorMsg.map((function(e,t){var n="";return n=e.email?e.email+": "+e.error_msg:e,(0,y.jsx)("tr",{children:(0,y.jsx)("td",{colSpan:3,children:(0,y.jsx)("p",{className:"error",children:n})})},t)}))]})]}),(0,y.jsx)("div",{className:"share-list-container",children:(0,y.jsxs)("table",{className:"table-thead-hidden",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"50%",children:(0,m.ih)("User")}),(0,y.jsx)("th",{width:"35%",children:(0,m.ih)("Permission")}),(0,y.jsx)("th",{width:"15%"})]})}),(0,y.jsx)(rn,{items:e,permissions:this.permissions,deleteShareItem:this.deleteShareItem,onChangeUserPermission:this.onChangeUserPermission})]})})]})}}]),n}(l.Component),an=sn,on=n(94414),ln=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).onMouseEnter=function(){i.setState({isOperationShow:!0})},i.onMouseLeave=function(){i.setState({isOperationShow:!1})},i.deleteShareItem=function(){var e=i.props.item;i.props.deleteShareItem(e.group_id)},i.onChangeUserPermission=function(e){var t=i.props.item;i.props.onChangeUserPermission(t,e)},i.state={isOperationShow:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item,t=f.c.getSharedPermission(e);return(0,y.jsxs)("tr",{onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,children:[(0,y.jsx)("td",{className:"name",children:e.group_name}),(0,y.jsx)("td",{children:(0,y.jsx)(tn.Z,{repoID:e.repo_id,isTextMode:!0,autoFocus:!0,isEditIconShow:this.state.isOperationShow,currentPermission:t,permissions:this.props.permissions,onPermissionChanged:this.onChangeUserPermission})}),(0,y.jsx)("td",{children:(0,y.jsx)("span",{className:"sf2-icon-x3 action-icon ".concat(this.state.isOperationShow?"":"hide"),onClick:this.deleteShareItem,title:(0,m.ih)("Delete")})})]})}}]),n}(l.Component),cn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props.items;return(0,y.jsx)("tbody",{children:t.map((function(t,n){return(0,y.jsx)(ln,{item:t,permissions:e.props.permissions,deleteShareItem:e.props.deleteShareItem,onChangeUserPermission:e.props.onChangeUserPermission},n)}))})}}]),n}(l.Component),hn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleSelectChange=function(e){i.setState({selectedOption:e})},i.loadOptions=function(){I.I.shareableGroups().then((function(e){i.options=[];for(var t=0;t0)for(var n=0;n0)for(var n=0;n0&&this.state.errorMsg.map((function(e,t){var n=e.group_name+": "+e.error_msg;return(0,y.jsx)("tr",{children:(0,y.jsx)("td",{colSpan:3,children:(0,y.jsx)("p",{className:"error",children:n})})},t)}))]})]}),(0,y.jsx)("div",{className:"share-list-container",children:(0,y.jsxs)("table",{className:"table-thead-hidden",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"50%",children:(0,m.ih)("Group")}),(0,y.jsx)("th",{width:"35%",children:(0,m.ih)("Permission")}),(0,y.jsx)("th",{width:"15%"})]})}),(0,y.jsx)(cn,{items:this.state.sharedItems,permissions:this.permissions,deleteShareItem:this.deleteShareItem,onChangeUserPermission:this.onChangeUserPermission})]})})]})}}]),n}(l.Component),dn=hn,un=(n(36491),function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getInitialActiveTab=function(){return"shareToUser"},i.toggle=function(e){i.state.activeTab!==e&&i.setState({activeTab:e})},i.renderDirContent=function(){var e=i.state.activeTab,t=i.props,n=t.enableDirPrivateShare,r=t.isGroupOwnedRepo;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)("div",{className:"share-dialog-side",children:(0,y.jsx)(Kt.Z,{pills:!0,children:n&&(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(Xt.Z,{children:(0,y.jsx)($t.Z,{className:"shareToUser"===e?"active":"",onClick:i.toggle.bind((0,ee.Z)(i),"shareToUser"),children:(0,m.ih)("Share to user")})}),(0,y.jsx)(Xt.Z,{children:(0,y.jsx)($t.Z,{className:"shareToGroup"===e?"active":"",onClick:i.toggle.bind((0,ee.Z)(i),"shareToGroup"),children:(0,m.ih)("Share to group")})})]})})}),(0,y.jsx)("div",{className:"share-dialog-main",children:(0,y.jsx)(Jt.Z,{activeTab:i.state.activeTab,children:n&&(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(en.Z,{tabId:"shareToUser",children:(0,y.jsx)(an,{itemType:"library",isGroupOwnedRepo:r,itemPath:i.props.itemPath,repoID:i.props.repoID,isRepoOwner:i.state.isRepoOwner})}),(0,y.jsx)(en.Z,{tabId:"shareToGroup",children:(0,y.jsx)(dn,{itemType:"library",isGroupOwnedRepo:r,itemPath:i.props.itemPath,repoID:i.props.repoID,isRepoOwner:i.state.isRepoOwner})})]})})})]})},i.state={activeTab:i.getInitialActiveTab(),isRepoOwner:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){return(0,y.jsx)("div",{children:(0,y.jsxs)(u.Z,{isOpen:!0,style:{maxWidth:"720px"},className:"share-dialog",toggle:this.props.toggleDialog,children:[(0,y.jsxs)(ke.Z,{toggle:this.props.toggleDialog,children:[(0,m.ih)("Share")," ",(0,y.jsx)("span",{className:"op-target",title:this.props.itemName,children:this.props.itemName})]}),(0,y.jsx)(_e.Z,{className:"share-dialog-content",children:this.renderDirContent()})]})})}}]),n}(l.Component)),gn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).submit=function(){var e=i.state.keepDays;i.state.autoHistory&&(e=i.state.expireDays);var t=i.props.repoID;if(/^-?\d+$/.test(e)){var n=(0,m.ih)("Successfully set library history.");I.I.sysAdminUpdateRepoHistorySetting(t,e).then((function(e){P.Z.success(n),i.setState({keepDays:e.data.keep_days}),i.props.toggleDialog()})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))}else i.setState({errorInfo:(0,m.ih)("Please enter a non-negative integer")})},i.handleKeyDown=function(e){"Enter"===e.key&&(i.submit(),e.preventDefault())},i.onChange=function(e){var t=e.target.value;i.setState({keepDays:t,expireDays:t})},i.setLimitDays=function(e){"allHistory"===e?i.setState({keepDays:-1}):"noHistory"===e?i.setState({keepDays:0}):i.setState({disabled:!1}),i.setState({allHistory:"allHistory"===e,noHistory:"noHistory"===e,autoHistory:"autoHistory"===e})},i.state={keepDays:-1,expireDays:30,disabled:!0,allHistory:!0,noHistory:!1,autoHistory:!1,errorInfo:""},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;I.I.sysAdminGetRepoHistorySetting(this.props.repoID).then((function(t){e.setState({keepDays:t.data.keep_days,allHistory:t.data.keep_days<0,noHistory:0===t.data.keep_days,autoHistory:t.data.keep_days>0,disabled:!(t.data.keep_days>0),expireDays:t.data.keep_days>0?t.data.keep_days:30})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))}},{key:"render",value:function(){var e=this,t=this.props.itemName;return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.props.toggleDialog,children:[(0,y.jsxs)(ke.Z,{toggle:this.props.toggleDialog,children:[(0,y.jsx)("span",{className:"op-target",title:t,children:t})," ",(0,m.ih)("History Setting")]}),(0,y.jsx)(_e.Z,{children:(0,y.jsxs)(Ne.Z,{children:[(0,y.jsxs)(Me.Z,{check:!0,children:[(0,y.jsx)(te.Z,{type:"radio",name:"radio1",checked:this.state.allHistory,onChange:function(){e.setLimitDays("allHistory")}})," ",(0,y.jsx)(Ue.Z,{children:(0,m.ih)("Keep full history")})]}),(0,y.jsxs)(Me.Z,{check:!0,children:[(0,y.jsx)(te.Z,{type:"radio",name:"radio1",checked:this.state.noHistory,onChange:function(){e.setLimitDays("noHistory")}})," ",(0,y.jsx)(Ue.Z,{children:(0,m.ih)("Don't keep history")})]}),(0,y.jsxs)(Me.Z,{check:!0,children:[(0,y.jsx)(te.Z,{type:"radio",name:"radio1",checked:this.state.autoHistory,onChange:function(){e.setLimitDays("autoHistory")}})," ",(0,y.jsx)(Ue.Z,{children:(0,m.ih)("Only keep a period of history:")}),(0,y.jsx)(te.Z,{type:"text",className:"expire-input",value:this.state.expireDays,onChange:this.onChange,disabled:this.state.disabled,onKeyDown:this.handleKeyDown})," ",(0,y.jsx)(Ue.Z,{children:(0,y.jsx)("span",{children:(0,m.ih)("days")})})]}),this.state.errorInfo&&(0,y.jsx)(Fe.Z,{color:"danger",children:this.state.errorInfo})]})}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.props.toggleDialog,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.submit,children:(0,m.ih)("Submit")})]})]})}}]),n}(l.Component),pn=window.sysadmin.pageOptions.enableSysAdminViewRepo,mn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).onFreezedItem=function(){i.setState({isItemFreezed:!0})},i.onUnfreezedItem=function(){i.setState({isItemFreezed:!1})},i.getPreviousPageList=function(){i.props.getListByPage(i.props.pageInfo.current_page-1)},i.getNextPageList=function(){i.props.getListByPage(i.props.pageInfo.current_page+1)},i.sortByFileCount=function(e){e.preventDefault(),i.props.sortItems("file_count")},i.sortBySize=function(e){e.preventDefault(),i.props.sortItems("size")},i.state={isItemFreezed:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.items,s=t.pageInfo,a=t.curPerPage,o=t.sortBy;if(n)return(0,y.jsx)(Z.Z,{});if(i)return(0,y.jsx)("p",{className:"error text-center",children:i});var c=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No libraries")})}),h=(0,y.jsx)("span",{className:"fas fa-sort"}),d=(0,y.jsx)("span",{className:"fas fa-caret-down"}),u=(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"5%"}),(0,y.jsx)("th",{width:"25%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"15%",children:void 0!=o?(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("a",{className:"d-inline-block table-sort-op",href:"#",onClick:this.sortByFileCount,children:[(0,m.ih)("Files")," ","file_count"==o?d:h]})," / ",(0,y.jsxs)("a",{className:"d-inline-block table-sort-op",href:"#",onClick:this.sortBySize,children:[(0,m.ih)("Size")," ","size"==o?d:h]})]}):(0,m.ih)("Files")/(0,m.ih)("Size")}),(0,y.jsx)("th",{width:"32%",children:"ID"}),(0,y.jsx)("th",{width:"18%",children:(0,m.ih)("Owner")}),(0,y.jsx)("th",{width:"5%"})]})}),(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(fn,{repo:t,isItemFreezed:e.state.isItemFreezed,onFreezedItem:e.onFreezedItem,onUnfreezedItem:e.onUnfreezedItem,onDeleteRepo:e.props.onDeleteRepo,onTransferRepo:e.props.onTransferRepo},n)}))})]}),s&&(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPageList,gotoNextPage:this.getNextPageList,currentPage:s.current_page,hasNextPage:s.has_next_page,curPerPage:a,resetPerPage:this.props.resetPerPage})]});return r.length?u:c}}]),n}(l.Component),fn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).onDeleteRepo=function(e){I.I.sysAdminDeleteRepo(e.id).then((function(t){i.props.onDeleteRepo(e),i.setState({isDeleteDialogOpen:!1,isRepoDeleted:!0});var n=(0,m.ih)("Successfully deleted {name}.").replace("{name}",e.name);P.Z.success(n)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t),i.setState({isRepoDeleted:!1})}))},i.onTransferRepo=function(e){I.I.sysAdminTransferRepo(i.props.repo.id,e.email).then((function(e){i.props.onTransferRepo(e.data);var t=(0,m.ih)("Successfully transferred the library.");P.Z.success(t)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)})),i.toggleTransferDialog()},i.handleMouseOver=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!0,highlight:!0})},i.handleMouseOut=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!1,highlight:!1})},i.onUnfreezedItem=function(){i.setState({highlight:!1,isOpIconShow:!1}),i.props.onUnfreezedItem()},i.onMenuItemClick=function(e){switch(e){case"Share":i.toggleShareDialog();break;case"Delete":i.toggleDeleteDialog();break;case"Transfer":i.toggleTransferDialog();break;case"History Setting":i.toggleHistorySettingDialog()}},i.toggleShareDialog=function(){i.setState({isShareDialogOpen:!i.state.isShareDialogOpen})},i.toggleDeleteDialog=function(){i.setState({isDeleteDialogOpen:!i.state.isDeleteDialogOpen})},i.toggleTransferDialog=function(){i.setState({isTransferDialogOpen:!i.state.isTransferDialogOpen})},i.toggleHistorySettingDialog=function(){i.setState({isHistorySettingDialogOpen:!i.state.isHistorySettingDialogOpen})},i.renderRepoName=function(){var e=i.props.repo;return e.name?m._y&&pn&&!e.encrypted?(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/libraries/").concat(e.id,"/"),children:e.name}):e.name:"--"},i.translateOperations=function(e){var t="";switch(e){case"Share":t=(0,m.ih)("Share");break;case"Delete":t=(0,m.ih)("Delete");break;case"Transfer":t=(0,m.ih)("Transfer");break;case"History Setting":t=(0,m.ih)("History Setting")}return t},i.getOperations=function(){var e=["Delete","Transfer"];return i.props.repo.encrypted||e.push("Share"),e.push("History Setting"),e},i.state={isOpIconShown:!1,highlight:!1,isShareDialogOpen:!1,isDeleteDialogOpen:!1,isTransferDialogOpen:!1,isHistorySettingDialogOpen:!1,isRepoDeleted:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e,t=this.props.repo,n=this.state,i=n.isOpIconShown,r=n.isShareDialogOpen,s=n.isDeleteDialogOpen,a=n.isTransferDialogOpen,o=n.isHistorySettingDialogOpen,c=f.c.getLibIconUrl(t),h=f.c.getLibIconTitle(t),d=t.owner_email.indexOf("@seafile_group"),u=-1!=d;return u&&(e=t.owner_email.substring(0,d)),(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{className:this.state.highlight?"tr-highlight":"",onMouseEnter:this.handleMouseOver,onMouseLeave:this.handleMouseOut,children:[(0,y.jsx)("td",{children:(0,y.jsx)("img",{src:c,title:h,alt:h,width:"24"})}),(0,y.jsx)("td",{children:this.renderRepoName()}),(0,y.jsx)("td",{children:"".concat(t.file_count," / ").concat(f.c.bytesToSize(t.size))}),(0,y.jsx)("td",{children:t.id}),(0,y.jsx)("td",{children:u?(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/departments/").concat(e,"/"),children:t.owner_name}):(0,y.jsx)(we,{email:t.owner_email,name:t.owner_name})}),(0,y.jsx)("td",{children:!u&&i&&(0,y.jsx)(Je.Z,{operations:this.getOperations(),translateOperations:this.translateOperations,onMenuItemClick:this.onMenuItemClick,onFreezedItem:this.props.onFreezedItem,onUnfreezedItem:this.onUnfreezedItem})})]}),r&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(un,{itemName:t.name,itemPath:"/",repoID:t.id,isGroupOwnedRepo:u,repoEncrypted:t.encrypted,enableDirPrivateShare:!0,userPerm:t.permission,toggleDialog:this.toggleShareDialog})}),s&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(Qt.Z,{repo:t,isRepoDeleted:this.state.isRepoDeleted,onDeleteRepo:this.onDeleteRepo,toggle:this.toggleDeleteDialog})}),a&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(kt.Z,{itemName:t.name,submit:this.onTransferRepo,canTransferToDept:!1,toggleDialog:this.toggleTransferDialog})}),o&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(gn,{repoID:t.id,itemName:t.name,toggleDialog:this.toggleHistorySettingDialog})})]})}}]),n}(l.Component),vn=mn,xn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggleCreateRepoDialog=function(){i.setState({isCreateRepoDialogOpen:!i.state.isCreateRepoDialogOpen})},i.getReposByPage=function(e){var t=i.state,n=t.perPage,r=t.sortBy;I.I.sysAdminListAllRepos(e,n,r).then((function(e){i.setState({loading:!1,repos:e.data.repos,pageInfo:e.data.page_info})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.sortItems=function(e){i.setState({currentPage:1,sortBy:e},(function(){var e=new URL(location.href),t=new URLSearchParams(e.search),n=i.state,r=n.currentPage,s=n.sortBy;t.set("page",r),t.set("order_by",s),e.search=t.toString(),(0,g.c4)(e.toString()),i.getReposByPage(r)}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){i.getReposByPage(1)}))},i.createRepo=function(e,t){I.I.sysAdminCreateRepo(e,t).then((function(e){i.state.repos.unshift(e.data),i.setState({repos:i.state.repos})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.onDeleteRepo=function(e){var t=i.state.repos.filter((function(t){return t.id!=e.id}));i.setState({repos:t})},i.onTransferRepo=function(e){var t=i.state.repos.map((function(t){return t.id==e.id?e:t}));i.setState({repos:t})},i.getSearch=function(){return(0,y.jsx)(Qe,{placeholder:(0,m.ih)("Search libraries by name or ID"),submit:i.searchRepos})},i.searchRepos=function(e){i.getValueLength(e)<3?P.Z.notify((0,m.ih)("Required at least three letters.")):(0,g.c4)("".concat(m.ze,"sys/search-libraries/?name_or_id=").concat(encodeURIComponent(e)))},i.state={loading:!0,errorMsg:"",repos:[],pageInfo:{},perPage:25,sortBy:"",isCreateRepoDialogOpen:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=void 0===i?1:i,s=n.perPage,a=n.sortBy;this.setState({sortBy:t.get("order_by")||a,perPage:parseInt(t.get("per_page")||s),currentPage:parseInt(t.get("page")||r)},(function(){e.getReposByPage(e.state.currentPage)}))}},{key:"getValueLength",value:function(e){for(var t,n=0,i=0,r=e.length;i=128&&t<=2047?n+=2:t>=2048&&t<=65535&&(n+=3);return n}},{key:"render",value:function(){var e=this.state.isCreateRepoDialogOpen;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)((0,i.Z)({search:this.getSearch()},this.props),{},{children:(0,y.jsxs)(w.Z,{className:"btn btn-secondary operation-item",onClick:this.toggleCreateRepoDialog,children:[(0,y.jsx)("i",{className:"fas fa-plus-square text-secondary mr-1"}),(0,m.ih)("New Library")]})})),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Gt,{currentItem:"all"}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(vn,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.repos,sortBy:this.state.sortBy,sortItems:this.sortItems,pageInfo:this.state.pageInfo,curPerPage:this.state.perPage,getListByPage:this.getReposByPage,resetPerPage:this.resetPerPage,onDeleteRepo:this.onDeleteRepo,onTransferRepo:this.onTransferRepo})})]})}),e&&(0,y.jsx)(Wt,{createRepo:this.createRepo,toggleDialog:this.toggleCreateRepoDialog})]})}}]),n}(l.Component),yn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.loading,n=e.errorMsg,i=e.items;return t?(0,y.jsx)(Z.Z,{}):n?(0,y.jsx)("p",{className:"error text-center",children:n}):(0,y.jsx)(l.Fragment,{children:(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"33%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"34%",children:"ID"}),(0,y.jsx)("th",{width:"33%",children:(0,m.ih)("Description")})]})}),(0,y.jsx)("tbody",{children:i.map((function(e,t){return(0,y.jsx)(bn,{item:e},t)}))})]})})}}]),n}(l.Component),bn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item;return(0,y.jsxs)("tr",{children:[(0,y.jsx)("td",{children:(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/libraries/").concat(e.id,"/"),children:e.name})}),(0,y.jsx)("td",{children:e.id}),(0,y.jsx)("td",{children:e.description})]})}}]),n}(l.Component),jn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).state={loading:!0,errorMsg:"",items:[]},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;I.I.sysAdminGetSystemRepoInfo().then((function(t){var n=[];n.push(t.data),e.setState({items:n,loading:!1})})).catch((function(t){e.setState({loading:!1,errorMsg:f.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Gt,{currentItem:"system"}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(yn,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.items})})]})})]})}}]),n}(l.Component),Sn=window.sysadmin.pageOptions.trashReposExpireDays,Dn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).onFreezedItem=function(){i.setState({isItemFreezed:!0})},i.onUnfreezedItem=function(){i.setState({isItemFreezed:!1})},i.getPreviousPageList=function(){i.props.getListByPage(i.props.pageInfo.current_page-1)},i.getNextPageList=function(){i.props.getListByPage(i.props.pageInfo.current_page+1)},i.state={isItemFreezed:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.items,s=t.pageInfo,a=t.curPerPage;if(n)return(0,y.jsx)(Z.Z,{});if(i)return(0,y.jsx)("p",{className:"error text-center mt-4",children:i});var o=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No deleted libraries")})}),c=(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)("p",{className:"mt-4 small text-secondary",children:(0,m.ih)("Tip: libraries deleted {trashReposExpireDays} days ago will be cleaned automatically.").replace("{trashReposExpireDays}",Sn)}),(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"5%"}),(0,y.jsx)("th",{width:"43%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"27%",children:(0,m.ih)("Owner")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Deleted Time")}),(0,y.jsx)("th",{width:"5%"})]})}),(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(wn,{repo:t,isItemFreezed:e.state.isItemFreezed,onFreezedItem:e.onFreezedItem,onUnfreezedItem:e.onUnfreezedItem,onDeleteRepo:e.props.onDeleteRepo,onRestoreRepo:e.props.onRestoreRepo},n)}))})]}),s&&(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPageList,gotoNextPage:this.getNextPageList,currentPage:s.current_page,hasNextPage:s.has_next_page,curPerPage:a,resetPerPage:this.props.resetPerPage})]});return r.length?c:o}}]),n}(l.Component),wn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseOver=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!0,highlight:!0})},i.handleMouseOut=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!1,highlight:!1})},i.onUnfreezedItem=function(){i.setState({highlight:!1,isOpIconShow:!1}),i.props.onUnfreezedItem()},i.onDeleteRepo=function(){var e=i.props.repo;I.I.sysAdminDeleteTrashRepo(e.id).then((function(t){i.props.onDeleteRepo(e);var n=(0,m.ih)("Successfully deleted {name}.").replace("{name}",e.name);P.Z.success(n)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.onRestoreRepo=function(){var e=i.props.repo;I.I.sysAdminRestoreTrashRepo(e.id).then((function(t){i.props.onRestoreRepo(e);var n=(0,m.ih)("Successfully restored the library.");P.Z.success(n)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.toggleDeleteRepoDialog=function(e){e&&e.preventDefault(),i.setState({isDeleteRepoDialogOpen:!i.state.isDeleteRepoDialogOpen})},i.toggleRestoreRepoDialog=function(e){e&&e.preventDefault(),i.setState({isRestoreRepoDialogOpen:!i.state.isRestoreRepoDialogOpen})},i.translateOperations=function(e){var t="";switch(e){case"Restore":t=(0,m.ih)("Restore");break;case"Delete":t=(0,m.ih)("Delete")}return t},i.onMenuItemClick=function(e){switch(e){case"Restore":i.toggleRestoreRepoDialog();break;case"Delete":i.toggleDeleteRepoDialog()}},i.state={highlight:!1,isOpIconShown:!1,isDeleteRepoDialogOpen:!1,isRestoreRepoDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.repo,t=this.state,n=t.isOpIconShown,i=t.isDeleteRepoDialogOpen,r=t.isRestoreRepoDialogOpen,s=f.c.getLibIconUrl(e),a=f.c.getLibIconTitle(e),o=''+f.c.HTMLescape(e.name)+"";return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{onMouseEnter:this.handleMouseOver,onMouseLeave:this.handleMouseOut,children:[(0,y.jsx)("td",{children:(0,y.jsx)("img",{src:s,title:a,alt:a,width:"24"})}),(0,y.jsx)("td",{children:e.name}),(0,y.jsx)("td",{children:-1==e.owner.indexOf("@seafile_group")?(0,y.jsx)(we,{email:e.owner,name:e.owner_name}):e.group_name}),(0,y.jsx)("td",{children:L()(e.delete_time).fromNow()}),(0,y.jsx)("td",{children:n&&(0,y.jsx)(Je.Z,{operations:["Restore","Delete"],translateOperations:this.translateOperations,onMenuItemClick:this.onMenuItemClick,onFreezedItem:this.props.onFreezedItem,onUnfreezedItem:this.onUnfreezedItem})})]}),i&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Delete Library"),message:(0,m.ih)("Are you sure you want to delete {placeholder} completely?").replace("{placeholder}",o),executeOperation:this.onDeleteRepo,confirmBtnText:(0,m.ih)("Delete"),toggleDialog:this.toggleDeleteRepoDialog})}),r&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Restore Library"),message:(0,m.ih)("Are you sure you want to restore {placeholder}?").replace("{placeholder}",o),executeOperation:this.onRestoreRepo,confirmBtnText:(0,m.ih)("Restore"),toggleDialog:this.toggleRestoreRepoDialog})})]})}}]),n}(l.Component),In=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggleCleanTrashDialog=function(){i.setState({isCleanTrashDialogOpen:!i.state.isCleanTrashDialogOpen})},i.getReposByPage=function(e){var t=i.state.perPage;I.I.sysAdminListTrashRepos(e,t).then((function(e){i.setState({repos:e.data.repos,pageInfo:e.data.page_info,loading:!1})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){i.getReposByPage(1)}))},i.onDeleteRepo=function(e){var t=i.state.repos.filter((function(t){return t.id!=e.id}));i.setState({repos:t})},i.onRestoreRepo=function(e){var t=i.state.repos.filter((function(t){return t.id!=e.id}));i.setState({repos:t})},i.cleanTrash=function(){I.I.sysAdminCleanTrashRepos().then((function(e){i.setState({repos:[]}),P.Z.success((0,m.ih)("Successfully cleared trash."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.getSearch=function(){return(0,y.jsx)(Qe,{placeholder:(0,m.ih)("Search libraries by owner"),submit:i.searchRepos})},i.searchRepos=function(e){I.I.sysAdminSearchTrashRepos(e).then((function(e){i.setState({repos:e.data.repos,pageInfo:null,errorMsg:"",loading:!1})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.state={loading:!0,errorMsg:"",repos:[],pageInfo:{},perPage:25,isCleanTrashDialogOpen:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=void 0===i?1:i,s=n.perPage;this.setState({perPage:parseInt(t.get("per_page")||s),currentPage:parseInt(t.get("page")||r)},(function(){e.getReposByPage(e.state.currentPage)}))}},{key:"render",value:function(){var e=this.state.isCleanTrashDialogOpen;return(0,y.jsxs)(l.Fragment,{children:[this.state.repos.length?(0,y.jsx)(N,(0,i.Z)((0,i.Z)({},this.props),{},{children:(0,y.jsx)(w.Z,{className:"operation-item",onClick:this.toggleCleanTrashDialog,children:(0,m.ih)("Clean")})})):(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Gt,{currentItem:"trash"}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(Dn,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.repos,pageInfo:this.state.pageInfo,onDeleteRepo:this.onDeleteRepo,onRestoreRepo:this.onRestoreRepo,getListByPage:this.getReposByPage,resetPerPage:this.resetPerPage,curPerPage:this.state.perPage})})]})}),e&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Clear Trash"),message:(0,m.ih)("Are you sure you want to clear trash?"),executeOperation:this.cleanTrash,confirmBtnText:(0,m.ih)("Clear"),toggleDialog:this.toggleCleanTrashDialog})]})}}]),n}(l.Component),Pn=In,Zn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getRepos=function(e){var t=i.state,n=t.name,r=t.perPage;i.getValueLength(n)<3?P.Z.notify((0,m.ih)("Required at least three letters.")):I.I.sysAdminSearchRepos(n,e,r).then((function(e){i.setState({loading:!1,errorMsg:"",repos:e.data.repo_list,pageInfo:e.data.page_info})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.searchRepos=function(){var e=i.state.currentPage;i.getRepos(e)},i.onDeleteRepo=function(e){var t=i.state.repos.filter((function(t){return t.id!=e.id}));i.setState({repos:t})},i.onTransferRepo=function(e){var t=i.state.repos.map((function(t){return t.id==e.id?e:t}));i.setState({repos:t})},i.handleNameInputChange=function(e){i.setState({name:e.target.value,currentPage:1},i.checkSubmitBtnActive)},i.checkSubmitBtnActive=function(){var e=i.state.name;i.setState({isSubmitBtnActive:e.trim()})},i.handleKeyDown=function(e){13===e.keyCode&&(i.state.isSubmitBtnActive&&i.searchRepos())},i.resetPerPage=function(e){i.setState({perPage:e,currentPage:1},(function(){i.searchRepos()}))},i.state={name:"",currentPage:1,perPage:25,isSubmitBtnActive:!1,loading:!0,errorMsg:"",repos:[],pageInfo:{}},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(document.location).searchParams,n=this.state,i=n.currentPage,r=n.perPage;this.setState({name:t.get("name_or_id")||"",perPage:parseInt(t.get("per_page")||r),currentPage:parseInt(t.get("page")||i)},(function(){e.getRepos(e.state.currentPage)}))}},{key:"getValueLength",value:function(e){for(var t,n=0,i=0,r=e.length;i=128&&t<=2047?n+=2:t>=2048&&t<=65535&&(n+=3);return n}},{key:"render",value:function(){var e=this.state,t=e.name,n=e.isSubmitBtnActive;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)("div",{className:"cur-view-path",children:(0,y.jsx)("h3",{className:"sf-heading",children:(0,m.ih)("Libraries")})}),(0,y.jsxs)("div",{className:"cur-view-content",children:[(0,y.jsxs)("div",{className:"mt-4 mb-6",children:[(0,y.jsx)("h4",{className:"border-bottom font-weight-normal mb-2 pb-1",children:(0,m.ih)("Search Libraries")}),(0,y.jsx)("p",{className:"text-secondary small",children:(0,m.ih)("Tip: you can search by keyword in name or ID.")}),(0,y.jsxs)(Ne.Z,{tag:"div",children:[(0,y.jsxs)(Me.Z,{row:!0,children:[(0,y.jsx)(Ue.Z,{for:"name",sm:1,children:(0,m.ih)("Name or ID")}),(0,y.jsx)(xt.Z,{sm:5,children:(0,y.jsx)(te.Z,{type:"text",name:"name",id:"name",value:t,onChange:this.handleNameInputChange,onKeyDown:this.handleKeyDown})})]}),(0,y.jsx)(Me.Z,{row:!0,children:(0,y.jsx)(xt.Z,{sm:{size:5,offset:1},children:(0,y.jsx)("button",{className:"btn btn-outline-primary",disabled:!n,onClick:this.searchRepos,children:(0,m.ih)("Submit")})})})]})]}),(0,y.jsxs)("div",{className:"mt-4 mb-6",children:[(0,y.jsx)("h4",{className:"border-bottom font-weight-normal mb-2 pb-1",children:(0,m.ih)("Result")}),(0,y.jsx)(vn,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.repos,pageInfo:this.state.pageInfo,curPerPage:this.state.perPage,getListByPage:this.getRepos,resetPerPage:this.resetPerPage,onDeleteRepo:this.onDeleteRepo,onTransferRepo:this.onTransferRepo})]})]})]})})]})}}]),n}(l.Component),kn=n(55294),_n=n(77066),Nn=function(){function e(t){(0,r.Z)(this,e),this.name=t.obj_name,this.mtime=t.last_update,this.size=t.file_size,this.is_file=t.is_file}return(0,s.Z)(e,[{key:"isDir",value:function(){return!this.is_file}}]),e}(),Mn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){var e;(0,r.Z)(this,n);for(var i=arguments.length,s=new Array(i),a=0;a'+f.c.HTMLescape(this.props.groupName)+"",n=(0,m.ih)("Transfer Group {placeholder} to").replace("{placeholder}",t);return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.props.toggleDialog,children:[(0,y.jsx)(ke.Z,{toggle:this.props.toggleDialog,children:(0,y.jsx)("span",{dangerouslySetInnerHTML:{__html:n}})}),(0,y.jsx)(_e.Z,{children:(0,y.jsx)(He.Z,{ref:"userSelect",isMulti:!1,className:"reviewer-select",placeholder:(0,m.ih)("Select a user"),onSelectChange:this.handleSelectChange})}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.props.toggleDialog,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.submit,disabled:e,children:(0,m.ih)("Submit")})]})]})}}]),n}(l.Component),Un=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).onFreezedItem=function(){i.setState({isItemFreezed:!0})},i.onUnfreezedItem=function(){i.setState({isItemFreezed:!1})},i.getPreviousPage=function(){i.props.getListByPage(i.props.pageInfo.current_page-1)},i.getNextPage=function(){i.props.getListByPage(i.props.pageInfo.current_page+1)},i.state={isItemFreezed:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.items,s=t.pageInfo,a=t.curPerPage;if(n)return(0,y.jsx)(Z.Z,{});if(i)return(0,y.jsx)("p",{className:"error text-center mt-4",children:i});var o=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No groups")})}),c=(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"35%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"40%",children:(0,m.ih)("Owner")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Created At")}),(0,y.jsx)("th",{width:"5%"})]})}),(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(En,{item:t,isItemFreezed:e.state.isItemFreezed,onFreezedItem:e.onFreezedItem,onUnfreezedItem:e.onUnfreezedItem,deleteGroup:e.props.deleteGroup,transferGroup:e.props.transferGroup},n)}))})]}),s&&(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPage,gotoNextPage:this.getNextPage,currentPage:s.current_page,hasNextPage:s.has_next_page,curPerPage:a,resetPerPage:this.props.resetPerPage})]});return r.length?c:o}}]),n}(l.Component),En=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseEnter=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!0,highlight:!0})},i.handleMouseLeave=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!1,highlight:!1})},i.onUnfreezedItem=function(){i.setState({highlight:!1,isOpIconShow:!1}),i.props.onUnfreezedItem()},i.onMenuItemClick=function(e){switch(e){case"Delete":i.toggleDeleteDialog();break;case"Transfer":i.toggleTransferDialog()}},i.toggleDeleteDialog=function(e){e&&e.preventDefault(),i.setState({isDeleteDialogOpen:!i.state.isDeleteDialogOpen})},i.toggleTransferDialog=function(e){e&&e.preventDefault(),i.setState({isTransferDialogOpen:!i.state.isTransferDialogOpen})},i.deleteGroup=function(){i.props.deleteGroup(i.props.item.id)},i.transferGroup=function(e){i.props.transferGroup(i.props.item.id,e)},i.translateOperations=function(e){var t="";switch(e){case"Delete":t=(0,m.ih)("Delete");break;case"Transfer":t=(0,m.ih)("Transfer")}return t},i.state={isOpIconShown:!1,highlight:!1,isDeleteDialogOpen:!1,isTransferDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item,t=this.state,n=t.isOpIconShown,i=t.isDeleteDialogOpen,r=t.isTransferDialogOpen,s=''+f.c.HTMLescape(e.name)+"",a=(0,m.ih)("Are you sure you want to delete {placeholder} ?").replace("{placeholder}",s),o=0==e.parent_group_id?"".concat(m.ze,"sys/groups/").concat(e.id,"/libraries/"):"".concat(m.ze,"sys/departments/").concat(e.id,"/");return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{className:this.state.highlight?"tr-highlight":"",onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,children:[(0,y.jsx)("td",{children:(0,y.jsx)(g.rU,{to:o,children:e.name})}),(0,y.jsx)("td",{children:"system admin"==e.owner?"--":(0,y.jsx)(we,{email:e.owner,name:e.owner_name})}),(0,y.jsx)("td",{children:(0,y.jsx)("span",{title:L()(e.created_at).format("llll"),children:L()(e.created_at).fromNow()})}),(0,y.jsx)("td",{children:n&&"system admin"!=e.owner&&(0,y.jsx)(Je.Z,{operations:["Delete","Transfer"],translateOperations:this.translateOperations,onMenuItemClick:this.onMenuItemClick,onFreezedItem:this.props.onFreezedItem,onUnfreezedItem:this.onUnfreezedItem})})]}),i&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Delete Group"),message:a,executeOperation:this.deleteGroup,confirmBtnText:(0,m.ih)("Delete"),toggleDialog:this.toggleDeleteDialog}),r&&(0,y.jsx)(Rn,{groupName:e.name,transferGroup:this.transferGroup,toggleDialog:this.toggleTransferDialog})]})}}]),n}(l.Component),zn=Un,Bn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggleCreateGroupDialog=function(){i.setState({isCreateGroupDialogOpen:!i.state.isCreateGroupDialogOpen})},i.getGroupListByPage=function(e){I.I.sysAdminListAllGroups(e,i.state.perPage).then((function(e){i.setState({loading:!1,groupList:e.data.groups,pageInfo:e.data.page_info})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){i.getGroupListByPage(1)}))},i.createGroup=function(e,t){I.I.sysAdminCreateNewGroup(e,t).then((function(e){var t=i.state.groupList;t.unshift(e.data),i.setState({groupList:t}),i.toggleCreateGroupDialog()})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.deleteGroup=function(e){I.I.sysAdminDismissGroupByID(e).then((function(t){var n=i.state.groupList.filter((function(t){return t.id!=e}));i.setState({groupList:n}),P.Z.success((0,m.ih)("Successfully deleted 1 item."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.transferGroup=function(e,t){I.I.sysAdminTransferGroup(t,e).then((function(t){var n=i.state.groupList.map((function(n){return n.id==e&&(n=t.data),n}));i.setState({groupList:n}),P.Z.success((0,m.ih)("Successfully transferred the group."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.getSearch=function(){return(0,y.jsx)(Qe,{placeholder:(0,m.ih)("Search groups by name"),submit:i.searchGroups})},i.searchGroups=function(e){(0,g.c4)("".concat(m.ze,"sys/search-groups/?name=").concat(encodeURIComponent(e)))},i.state={loading:!0,errorMsg:"",groupList:[],pageInfo:{},perPage:25,isCreateGroupDialogOpen:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=void 0===i?1:i,s=n.perPage;this.setState({perPage:parseInt(t.get("per_page")||s),currentPage:parseInt(t.get("page")||r)},(function(){e.getGroupListByPage(e.state.currentPage)}))}},{key:"render",value:function(){var e=this.state.isCreateGroupDialogOpen;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)((0,i.Z)({search:this.getSearch()},this.props),{},{children:(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(w.Z,{className:"operation-item",onClick:this.toggleCreateGroupDialog,children:(0,m.ih)("New Group")}),(0,y.jsx)("a",{className:"btn btn-secondary operation-item",href:"".concat(m.ze,"sys/groupadmin/export-excel/"),children:(0,m.ih)("Export Excel")})]})})),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)("div",{className:"cur-view-path",children:(0,y.jsx)("h3",{className:"sf-heading",children:(0,m.ih)("Groups")})}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(zn,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.groupList,pageInfo:this.state.pageInfo,deleteGroup:this.deleteGroup,transferGroup:this.transferGroup,getListByPage:this.getGroupListByPage,resetPerPage:this.resetPerPage,curPerPage:this.state.perPage})})]})}),e&&(0,y.jsx)(Fn,{createGroup:this.createGroup,toggleDialog:this.toggleCreateGroupDialog})]})}}]),n}(l.Component),Vn=Bn,Hn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getGroups=function(){var e=i.state.name;I.I.sysAdminSearchGroups(e).then((function(e){i.setState({loading:!1,groupList:e.data.group_list})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.deleteGroup=function(e){I.I.sysAdminDismissGroupByID(e).then((function(t){var n=i.state.groupList.filter((function(t){return t.id!=e}));i.setState({groupList:n}),P.Z.success((0,m.ih)("Successfully deleted 1 item."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.transferGroup=function(e,t){I.I.sysAdminTransferGroup(t,e).then((function(t){var n=i.state.groupList.map((function(n){return n.id==e&&(n=t.data),n}));i.setState({groupList:n}),P.Z.success((0,m.ih)("Successfully transferred the group."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.handleNameInputChange=function(e){i.setState({name:e.target.value},i.checkSubmitBtnActive)},i.checkSubmitBtnActive=function(){var e=i.state.name;i.setState({isSubmitBtnActive:e.trim()})},i.handleKeyDown=function(e){13===e.keyCode&&(i.state.isSubmitBtnActive&&i.getGroups())},i.state={name:"",isSubmitBtnActive:!1,loading:!0,errorMsg:"",groupList:[],pageInfo:null},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=new URL(document.location).searchParams;this.setState({name:e.get("name")||""},this.getGroups)}},{key:"render",value:function(){var e=this.state,t=e.name,n=e.isSubmitBtnActive;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)("div",{className:"cur-view-path",children:(0,y.jsx)("h3",{className:"sf-heading",children:(0,m.ih)("Groups")})}),(0,y.jsxs)("div",{className:"cur-view-content",children:[(0,y.jsxs)("div",{className:"mt-4 mb-6",children:[(0,y.jsx)("h4",{className:"border-bottom font-weight-normal mb-2 pb-1",children:(0,m.ih)("Search Groups")}),(0,y.jsx)("p",{className:"text-secondary small",children:(0,m.ih)("Tip: you can search by keyword in name.")}),(0,y.jsxs)(Ne.Z,{tag:"div",children:[(0,y.jsxs)(Me.Z,{row:!0,children:[(0,y.jsx)(Ue.Z,{for:"name",sm:1,children:(0,m.ih)("Name")}),(0,y.jsx)(xt.Z,{sm:5,children:(0,y.jsx)(te.Z,{type:"text",name:"name",id:"name",value:t,onChange:this.handleNameInputChange,onKeyDown:this.handleKeyDown})})]}),(0,y.jsx)(Me.Z,{row:!0,children:(0,y.jsx)(xt.Z,{sm:{size:5,offset:1},children:(0,y.jsx)("button",{className:"btn btn-outline-primary",disabled:!n,onClick:this.getGroups,children:(0,m.ih)("Submit")})})})]})]}),(0,y.jsxs)("div",{className:"mt-4 mb-6",children:[(0,y.jsx)("h4",{className:"border-bottom font-weight-normal mb-2 pb-1",children:(0,m.ih)("Result")}),(0,y.jsx)(zn,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.groupList,deleteGroup:this.deleteGroup,transferGroup:this.transferGroup})]})]})]})})]})}}]),n}(l.Component),Wn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).navItems=[{name:"repos",urlPart:"groups/"+i.props.groupID+"/libraries",text:(0,m.ih)("Libraries")},{name:"members",urlPart:"groups/"+i.props.groupID+"/members",text:(0,m.ih)("Members")}],i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.groupName,n=e.currentItem;return(0,y.jsxs)("div",{children:[(0,y.jsx)("div",{className:"cur-view-path",children:(0,y.jsxs)("h3",{className:"sf-heading",children:[(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/groups/"),children:(0,m.ih)("Groups")})," / ",t]})}),(0,y.jsx)("ul",{className:"nav border-bottom mx-4",children:this.navItems.map((function(e,t){return(0,y.jsx)("li",{className:"nav-item mr-2",children:(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/").concat(e.urlPart,"/"),className:"nav-link ".concat(n==e.name?" active":""),children:e.text})},t)}))})]})}}]),n}(l.Component),Yn=Wn,Gn=window.sysadmin.pageOptions.enableSysAdminViewRepo,qn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){return(0,r.Z)(this,n),t.call(this,e)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.items;if(n)return(0,y.jsx)(Z.Z,{});if(i)return(0,y.jsx)("p",{className:"error text-center mt-4",children:i});var s=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No libraries")})}),a=(0,y.jsx)(l.Fragment,{children:(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"5%"}),(0,y.jsx)("th",{width:"30%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"30%",children:(0,m.ih)("Size")}),(0,y.jsx)("th",{width:"25%",children:(0,m.ih)("Shared By")}),(0,y.jsx)("th",{width:"10%"})]})}),(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(Qn,{item:t,unshareRepo:e.props.unshareRepo},n)}))})]})});return r.length?a:s}}]),n}(l.Component),Qn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseEnter=function(){i.setState({isOpIconShown:!0})},i.handleMouseLeave=function(){i.setState({isOpIconShown:!1})},i.toggleUnshareRepoDialog=function(e){e&&e.preventDefault(),i.setState({isUnshareRepoDialogOpen:!i.state.isUnshareRepoDialogOpen})},i.unshareRepo=function(){var e=i.props.item;i.props.unshareRepo(e.repo_id,e.name),i.toggleUnshareRepoDialog()},i.renderRepoName=function(){var e=i.props.item,t=e;return t.id=e.repo_id,t.name?m._y&&Gn&&!t.encrypted?(0,y.jsx)("a",{href:"".concat(m.ze,"sys/libraries/").concat(t.id,"/"),children:t.name}):t.name:"--"},i.state={isOpIconShown:!1,isUnshareRepoDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state,t=e.isOpIconShown,n=e.isUnshareRepoDialogOpen,i=this.props.item,r=f.c.getLibIconUrl(i),s=f.c.getLibIconTitle(i),a=''+f.c.HTMLescape(i.name)+"",o=(0,m.ih)("Are you sure you want to unshare {placeholder} ?").replace("{placeholder}",a);return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,children:[(0,y.jsx)("td",{children:(0,y.jsx)("img",{src:r,title:s,alt:s,width:"24"})}),(0,y.jsx)("td",{children:this.renderRepoName()}),(0,y.jsx)("td",{children:f.c.bytesToSize(i.size)}),(0,y.jsx)("td",{children:(0,y.jsx)(we,{email:i.shared_by,name:i.shared_by_name})}),(0,y.jsx)("td",{children:(0,y.jsx)("a",{href:"#",className:"action-icon sf2-icon-x3 ".concat(t?"":"invisible"),title:(0,m.ih)("Unshare"),onClick:this.toggleUnshareRepoDialog})})]}),n&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Unshare Library"),message:o,executeOperation:this.unshareRepo,confirmBtnText:(0,m.ih)("Unshare"),toggleDialog:this.toggleUnshareRepoDialog})]})}}]),n}(l.Component),Kn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).unshareRepo=function(e,t){I.I.sysAdminUnshareRepoFromGroup(i.props.groupID,e).then((function(n){var r=i.state.repoList.filter((function(t){return t.repo_id!=e}));i.setState({repoList:r});var s=(0,m.ih)("Successfully unshared library {placeholder}").replace("{placeholder}",t);P.Z.success(s)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.state={loading:!0,errorMsg:"",groupName:"",repoList:[]},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;I.I.sysAdminListGroupRepos(this.props.groupID).then((function(t){e.setState({loading:!1,repoList:t.data.libraries,groupName:t.data.group_name})})).catch((function(t){e.setState({loading:!1,errorMsg:f.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Yn,{groupID:this.props.groupID,groupName:this.state.groupName,currentItem:"repos"}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(qn,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.repoList,unshareRepo:this.unshareRepo})})]})})]})}}]),n}(l.Component),Xn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleSelectChange=function(e){i.setState({selectedOptions:e,isSubmitBtnDisabled:!e.length})},i.addMembers=function(){var e=i.state.selectedOptions.map((function(e){return e.email}));i.props.addMembers(e),i.props.toggle()},i.state={selectedOptions:null,isSubmitBtnDisabled:!0},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state.isSubmitBtnDisabled;return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.props.toggle,children:[(0,y.jsx)(ke.Z,{toggle:this.props.toggle,children:(0,m.ih)("Add Member")}),(0,y.jsx)(_e.Z,{children:(0,y.jsx)(He.Z,{ref:"userSelect",isMulti:!0,className:"reviewer-select",placeholder:(0,m.ih)("Search users"),onSelectChange:this.handleSelectChange})}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.props.toggle,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.addMembers,disabled:e,children:(0,m.ih)("Submit")})]})]})}}]),n}(l.Component),$n=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggleItemFreezed=function(e){i.setState({isItemFreezed:e})},i.getPreviousPageList=function(){i.props.getListByPage(i.props.pageInfo.current_page-1)},i.getNextPageList=function(){i.props.getListByPage(i.props.pageInfo.current_page+1)},i.state={isItemFreezed:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.items,s=t.pageInfo,a=t.curPerPage;if(n)return(0,y.jsx)(Z.Z,{});if(i)return(0,y.jsx)("p",{className:"error text-center mt-4",children:i});var o=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No members")})}),c=(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"5%"}),(0,y.jsx)("th",{width:"55%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"30%",children:(0,m.ih)("Role")}),(0,y.jsx)("th",{width:"10%"})]})}),(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(Jn,{item:t,isItemFreezed:e.state.isItemFreezed,toggleItemFreezed:e.toggleItemFreezed,removeMember:e.props.removeMember,updateMemberRole:e.props.updateMemberRole},n)}))})]}),s&&(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPageList,gotoNextPage:this.getNextPageList,currentPage:s.current_page,hasNextPage:s.has_next_page,curPerPage:a,resetPerPage:this.props.resetPerPage})]});return r.length?c:o}}]),n}(l.Component),Jn=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseEnter=function(){i.props.isItemFreezed||i.setState({highlighted:!0})},i.handleMouseLeave=function(){i.props.isItemFreezed||i.setState({highlighted:!1})},i.toggleDeleteDialog=function(e){e&&e.preventDefault(),i.setState({isDeleteDialogOpen:!i.state.isDeleteDialogOpen})},i.removeMember=function(){var e=i.props.item;i.props.removeMember(e.email,e.name),i.toggleDeleteDialog()},i.updateMemberRole=function(e){i.props.updateMemberRole(i.props.item.email,e.value)},i.roleOptions=[{value:"Admin",text:(0,m.ih)("Admin"),isSelected:!1},{value:"Member",text:(0,m.ih)("Member"),isSelected:!1}],i.state={highlighted:!1,isDeleteDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state,t=e.highlighted,n=e.isDeleteDialogOpen,i=this.props.item,r=''+f.c.HTMLescape(i.name)+"",s=(0,m.ih)("Are you sure you want to remove {placeholder} ?").replace("{placeholder}",r),a=i.role;this.roleOptions=this.roleOptions.map((function(e){return e.isSelected=e.value==a,e}));var o=this.roleOptions.filter((function(e){return e.isSelected}))[0];return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{className:t?"tr-highlight":"",onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,children:[(0,y.jsx)("td",{children:(0,y.jsx)("img",{src:i.avatar_url,alt:"",className:"rounded-circle",width:"24"})}),(0,y.jsx)("td",{children:(0,y.jsx)(we,{email:i.email,name:i.name})}),(0,y.jsx)("td",{children:"Owner"==i.role?(0,m.ih)("Owner"):(0,y.jsx)($e.Z,{isDropdownToggleShown:t,currentSelectedOption:o,options:this.roleOptions,selectOption:this.updateMemberRole,toggleItemFreezed:this.props.toggleItemFreezed})}),(0,y.jsx)("td",{children:"Owner"!=i.role&&(0,y.jsx)("a",{href:"#",className:"action-icon sf2-icon-x3 ".concat(t?"":"invisible"),title:(0,m.ih)("Remove"),onClick:this.toggleDeleteDialog})})]}),n&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Remove Member"),message:s,executeOperation:this.removeMember,confirmBtnText:(0,m.ih)("Remove"),toggleDialog:this.toggleDeleteDialog})]})}}]),n}(l.Component),ei=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getListByPage=function(e){var t=i.state.perPage;I.I.sysAdminListGroupMembers(i.props.groupID,e,t).then((function(e){i.setState({loading:!1,memberList:e.data.members,groupName:e.data.group_name,pageInfo:e.data.page_info})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){i.getListByPage(1)}))},i.toggleAddMemgerDialog=function(){i.setState({isAddMemberDialogOpen:!i.state.isAddMemberDialogOpen})},i.addMembers=function(e){I.I.sysAdminAddGroupMember(i.props.groupID,e).then((function(e){var t=e.data.success;t.length&&(i.setState({memberList:t.concat(i.state.memberList)}),t.forEach((function(e){var t=(0,m.ih)("Successfully added {email_placeholder}").replace("{email_placeholder}",e.email);P.Z.success(t)}))),e.data.failed.forEach((function(e){var t=(0,m.ih)("Failed to add {email_placeholder}: {error_msg_placeholder}").replace("{email_placeholder}",e.email).replace("{error_msg_placeholder}",e.error_msg);P.Z.danger(t,{duration:3})}))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.removeMember=function(e,t){I.I.sysAdminDeleteGroupMember(i.props.groupID,e).then((function(n){var r=i.state.memberList.filter((function(t){return t.email!=e}));i.setState({memberList:r}),P.Z.success((0,m.ih)("Successfully removed {placeholder}.").replace("{placeholder}",t))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.updateMemberRole=function(e,t){var n="Admin"==t;I.I.sysAdminUpdateGroupMemberRole(i.props.groupID,e,n).then((function(n){var r=i.state.memberList.map((function(n){return n.email==e&&(n.role=t),n}));i.setState({memberList:r})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.state={loading:!0,errorMsg:"",groupName:"",memberList:[],pageInfo:{},currentPage:1,perPage:25,isAddMemberDialogOpen:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=n.perPage;this.setState({currentPage:parseInt(t.get("page")||i),perPage:parseInt(t.get("per_page")||r)},(function(){e.getListByPage(e.state.currentPage)}))}},{key:"render",value:function(){var e=this.state.isAddMemberDialogOpen;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)((0,i.Z)({},this.props),{},{children:(0,y.jsx)(w.Z,{className:"btn btn-secondary operation-item",onClick:this.toggleAddMemgerDialog,children:(0,m.ih)("Add Member")})})),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Yn,{currentItem:"members",groupID:this.props.groupID,groupName:this.state.groupName}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)($n,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.memberList,removeMember:this.removeMember,updateMemberRole:this.updateMemberRole,pageInfo:this.state.pageInfo,curPerPage:this.state.perPage,getListByPage:this.getListByPage,resetPerPage:this.resetPerPage})})]})}),e&&(0,y.jsx)(Xn,{addMembers:this.addMembers,toggle:this.toggleAddMemgerDialog})]})}}]),n}(l.Component),ti=(n(74351),function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){return(0,y.jsx)("div",{className:"h-100 org-departments",children:this.props.children})}}]),n}(l.Component)),ni=ti,ii=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleSubmit=function(){if(i.validateName()){var e=-1;i.props.parentGroupID&&(e=i.props.parentGroupID),I.I.sysAdminAddNewDepartment(e,i.state.departName.trim()).then((function(e){i.props.toggle(),i.props.onAddNewDepartment(e.data)})).catch((function(e){var t=(0,m.ih)(e.response.data.error_msg);i.setState({errMessage:t})}))}},i.validateName=function(){var e="";return!!i.state.departName.trim().length||(e=(0,m.ih)("Name is required"),i.setState({errMessage:e}),!1)},i.handleChange=function(e){i.setState({departName:e.target.value})},i.handleKeyDown=function(e){"Enter"===e.key&&(i.handleSubmit(),e.preventDefault())},i.state={departName:"",errMessage:""},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.parentGroupID?(0,m.ih)("New Sub-department"):(0,m.ih)("New Department");return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.props.toggle,autoFocus:!1,children:[(0,y.jsx)(ke.Z,{toggle:this.props.toggle,children:e}),(0,y.jsxs)(_e.Z,{children:[(0,y.jsx)(Ne.Z,{children:(0,y.jsxs)(Me.Z,{children:[(0,y.jsx)(Ue.Z,{for:"departName",children:(0,m.ih)("Name")}),(0,y.jsx)(te.Z,{id:"departName",onKeyDown:this.handleKeyDown,value:this.state.departName,onChange:this.handleChange,autoFocus:!0})]})}),this.state.errMessage&&(0,y.jsx)("p",{className:"error",children:this.state.errMessage})]}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.props.toggle,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.handleSubmit,children:(0,m.ih)("Submit")})]})]})}}]),n}(l.Component),ri=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleSubmit=function(){i.validateName()&&I.I.sysAdminRenameDepartment(i.props.groupID,i.state.departmentName.trim()).then((function(e){i.props.toggle(),i.props.onDepartmentNameChanged(e.data),P.Z.success((0,m.ih)("Success"))})).catch((function(e){var t=f.c.getErrorMsg(e);i.setState({errMessage:t})}))},i.validateName=function(){var e="";return!!i.state.departmentName.trim().length||(e=(0,m.ih)("Name is required"),i.setState({errMessage:e}),!1)},i.handleChange=function(e){i.setState({departmentName:e.target.value})},i.handleKeyDown=function(e){"Enter"===e.key&&(i.handleSubmit(),e.preventDefault())},i.onAfterModelOpened=function(){i.newInput.current&&(i.newInput.current.focus(),i.newInput.current.select())},i.state={departmentName:i.props.name,errMessage:""},i.newInput=l.createRef(),i}return(0,s.Z)(n,[{key:"render",value:function(){var e=(0,m.ih)("Rename Department");return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.props.toggle,onOpened:this.onAfterModelOpened,children:[(0,y.jsx)(ke.Z,{toggle:this.props.toggle,children:e}),(0,y.jsxs)(_e.Z,{children:[(0,y.jsx)(Ne.Z,{children:(0,y.jsxs)(Me.Z,{children:[(0,y.jsx)(Ue.Z,{for:"departmentName",children:(0,m.ih)("Name")}),(0,y.jsx)(te.Z,{id:"departmentName",onKeyDown:this.handleKeyDown,value:this.state.departmentName,onChange:this.handleChange,innerRef:this.newInput})]})}),this.state.errMessage&&(0,y.jsx)("p",{className:"error",children:this.state.errMessage})]}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.props.toggle,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.handleSubmit,children:(0,m.ih)("Submit")})]})]})}}]),n}(l.Component),si=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).deleteDepart=function(){i.props.toggle();var e=i.props.group;I.I.sysAdminDeleteDepartment(e.id).then((function(t){i.props.onDeleteDepartment(e.id)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.group,t=(0,m.ih)("Are you sure you want to delete {placeholder} ?");return t=t.replace("{placeholder}",''+f.c.HTMLescape(e.name)+""),(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.props.toggle,children:[(0,y.jsx)(ke.Z,{toggle:this.props.toggle,children:(0,m.ih)("Delete Department")}),(0,y.jsx)(_e.Z,{children:(0,y.jsx)("p",{dangerouslySetInnerHTML:{__html:t}})}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.props.toggle,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.deleteDepart,children:(0,m.ih)("Delete")})]})]})}}]),n}(l.Component),ai=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).setGroupQuota=function(){var e=i.state.quota;if(e.length&&/^[1-9]\d*$/im.test(e)||-2==e){i.setState({errMessage:""});var t=-2==i.state.quota?i.state.quota:1e6*i.state.quota;I.I.sysAdminUpdateDepartmentQuota(i.props.groupID,t).then((function(e){i.props.toggle(),i.props.onSetQuota(e.data)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))}else{var n=(0,m.ih)("Quota is invalid.");i.setState({errMessage:n})}},i.handleChange=function(e){var t=e.target.value.trim();i.setState({quota:t})},i.handleKeyDown=function(e){"Enter"===e.key&&(i.setGroupQuota(),e.preventDefault())},i.state={quota:"",errMessage:""},i}return(0,s.Z)(n,[{key:"render",value:function(){return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.props.toggle,autoFocus:!1,children:[(0,y.jsx)(ke.Z,{toggle:this.props.toggle,children:(0,m.ih)("Set Quota")}),(0,y.jsxs)(_e.Z,{children:[(0,y.jsxs)(Ce.Z,{children:[(0,y.jsx)(te.Z,{onKeyDown:this.handleKeyDown,value:this.state.quota,onChange:this.handleChange,autoFocus:!0}),(0,y.jsx)(Ae.Z,{addonType:"append",children:"MB"})]}),(0,y.jsxs)("p",{className:"tip",children:[(0,y.jsx)("br",{}),(0,y.jsx)("span",{children:(0,m.ih)("An integer that is greater than 0 or equal to -2.")}),(0,y.jsx)("br",{}),(0,y.jsx)("span",{children:(0,m.ih)("Tip: -2 means no limit.")})]}),this.state.errMessage&&(0,y.jsx)("p",{className:"error",children:this.state.errMessage})]}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.props.toggle,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.setGroupQuota,children:(0,m.ih)("Submit")})]})]})}}]),n}(l.Component),oi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseOver=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!0,highlight:!0})},i.handleMouseOut=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!1,highlight:!1})},i.onUnfreezedItem=function(){i.setState({highlight:!1,isOpIconShow:!1}),i.props.onUnfreezedItem()},i.translateOperations=function(e){var t="";switch(e){case"Rename":t=(0,m.ih)("Rename");break;case"Delete":t=(0,m.ih)("Delete")}return t},i.onMenuItemClick=function(e){switch(e){case"Rename":i.toggleRenameDialog();break;case"Delete":i.toggleDeleteDialog()}},i.toggleRenameDialog=function(){i.setState({isRenameDialogOpen:!i.state.isRenameDialogOpen})},i.toggleDeleteDialog=function(){i.setState({isDeleteDialogOpen:!i.state.isDeleteDialogOpen})},i.toggleSetQuotaDialog=function(){i.setState({isSetQuotaDialogOpen:!i.state.isSetQuotaDialogOpen})},i.state={isOpIconShown:!1,highlight:!1,isSetQuotaDialogOpen:!1,isDeleteDialogOpen:!1,isRenameDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.group,t=this.state,n=t.highlight,i=t.isOpIconShown,r=t.isRenameDialogOpen,s=t.isDeleteDialogOpen,a=t.isSetQuotaDialogOpen,o=m.ze+"sys/departments/"+e.id+"/";return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{className:this.state.highlight?"tr-highlight":"",onMouseEnter:this.handleMouseOver,onMouseLeave:this.handleMouseOut,children:[(0,y.jsx)("td",{children:(0,y.jsx)(g.rU,{to:o,children:e.name})}),(0,y.jsx)("td",{children:L()(e.created_at).fromNow()}),(0,y.jsxs)("td",{children:[f.c.bytesToSize(e.quota)," ",(0,y.jsx)("span",{onClick:this.toggleSetQuotaDialog,title:(0,m.ih)("Edit"),className:"fa fa-pencil-alt attr-action-icon ".concat(n?"":"vh")})]}),(0,y.jsx)("td",{children:i&&(0,y.jsx)(Je.Z,{operations:["Rename","Delete"],translateOperations:this.translateOperations,onMenuItemClick:this.onMenuItemClick,onFreezedItem:this.props.onFreezedItem,onUnfreezedItem:this.onUnfreezedItem})})]}),s&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(si,{group:e,onDeleteDepartment:this.props.onDeleteDepartment,toggle:this.toggleDeleteDialog})}),a&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(ai,{groupID:e.id,onSetQuota:this.props.onSetDepartmentQuota,toggle:this.toggleSetQuotaDialog})}),r&&(0,y.jsx)(ri,{groupID:e.id,name:e.name,toggle:this.toggleRenameDialog,onDepartmentNameChanged:this.props.onDepartmentNameChanged})]})}}]),n}(l.Component),li=oi;L().locale(m.KQ);var ci=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).onFreezedItem=function(){i.setState({isItemFreezed:!0})},i.onUnfreezedItem=function(){i.setState({isItemFreezed:!1})},i.listDepartments=function(){I.I.sysAdminListAllDepartments().then((function(e){i.setState({groups:e.data.data})}))},i.toggleAddDepartDialog=function(){i.setState({isShowAddDepartDialog:!i.state.isShowAddDepartDialog})},i.onDepartmentNameChanged=function(e){i.setState({groups:i.state.groups.map((function(t){return t.id==e.id&&(t.name=e.name),t}))})},i.onAddNewDepartment=function(e){var t=i.state.groups;t.unshift(e),i.setState({groups:t})},i.onDeleteDepartment=function(e){var t=i.state.groups;i.setState({groups:t.filter((function(t){return t.id!=e}))})},i.onSetDepartmentQuota=function(e){var t=i.state.groups;i.setState({groups:t.map((function(t){return t.id==e.id&&(t.quota=e.quota),t}))})},i.state={groups:null,groupID:"",isShowAddDepartDialog:!1,isItemFreezed:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){this.listDepartments()}},{key:"render",value:function(){var e=this,t=this.state.groups,n=(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)("button",{className:"btn btn-secondary operation-item",title:(0,m.ih)("New Department"),onClick:this.toggleAddDepartDialog,children:(0,m.ih)("New Department")}),this.state.isShowAddDepartDialog&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(ii,{onAddNewDepartment:this.onAddNewDepartment,groupID:this.state.groupID,toggle:this.toggleAddDepartDialog})})]});return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)((0,i.Z)({},this.props),{},{children:n})),(0,y.jsx)("div",{className:"main-panel-center flex-row h-100",children:(0,y.jsxs)("div",{className:"cur-view-container o-auto",children:[(0,y.jsx)("div",{className:"cur-view-path",children:(0,y.jsx)("div",{className:"fleft",children:(0,y.jsx)("h3",{className:"sf-heading",children:(0,m.ih)("Departments")})})}),(0,y.jsx)("div",{className:"cur-view-content",children:t&&t.length>0?(0,y.jsxs)("table",{children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"40%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"25%",children:(0,m.ih)("Created At")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Quota")}),(0,y.jsx)("th",{width:"15%"})]})}),(0,y.jsx)("tbody",{children:t.map((function(t,n){return(0,y.jsx)(l.Fragment,{children:(0,y.jsx)(li,{group:t,isItemFreezed:e.state.isItemFreezed,onFreezedItem:e.onFreezedItem,onUnfreezedItem:e.onUnfreezedItem,onDepartmentNameChanged:e.onDepartmentNameChanged,onDeleteDepartment:e.onDeleteDepartment,onSetDepartmentQuota:e.onSetDepartmentQuota})},t.id)}))})]}):(0,y.jsx)("p",{className:"no-group",children:(0,m.ih)("No departments")})})]})})]})}}]),n}(l.Component),hi=ci,di=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleSelectChange=function(e){i.setState({selectedOption:e})},i.handleSubmit=function(){if(i.state.selectedOption){var e=i.state.selectedOption.map((function(e){return e.email}));i.refs.orgSelect.clearSelect(),i.setState({errMessage:[]}),I.I.sysAdminAddGroupMember(i.props.groupID,e).then((function(e){i.setState({selectedOption:null}),e.data.failed.length>0&&i.setState({errMessage:e.data.failed[0].error_msg}),e.data.success.length>0&&(i.props.onAddNewMembers(e.data.success),i.props.toggle())})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))}},i.state={selectedOption:null,errMessage:""},i}return(0,s.Z)(n,[{key:"render",value:function(){return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.props.toggle,children:[(0,y.jsx)(ke.Z,{toggle:this.props.toggle,children:(0,m.ih)("Add Member")}),(0,y.jsxs)(_e.Z,{children:[(0,y.jsx)(He.Z,{placeholder:(0,m.ih)("Search users"),onSelectChange:this.handleSelectChange,ref:"orgSelect",isMulti:!0,className:"org-add-member-select"}),this.state.errMessage&&(0,y.jsx)("p",{className:"error",children:this.state.errMessage})]}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.props.toggle,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.handleSubmit,children:(0,m.ih)("Submit")})]})]})}}]),n}(l.Component),ui=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleSubmit=function(){i.validateName()&&I.I.sysAdminAddRepoInDepartment(i.props.groupID,i.state.repoName.trim()).then((function(e){i.props.toggle(),i.props.onAddNewRepo(e.data)})).catch((function(e){var t=f.c.getErrorMsg(e);i.setState({errMessage:t})}))},i.validateName=function(){var e="";return!!i.state.repoName.trim().length||(e=(0,m.ih)("Name is required"),i.setState({errMessage:e}),!1)},i.handleChange=function(e){i.setState({repoName:e.target.value})},i.handleKeyDown=function(e){"Enter"===e.key&&(i.handleSubmit(),e.preventDefault())},i.state={repoName:"",errMessage:""},i}return(0,s.Z)(n,[{key:"render",value:function(){return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.props.toggle,autoFocus:!1,children:[(0,y.jsx)(ke.Z,{toggle:this.props.toggle,children:(0,m.ih)("New Library")}),(0,y.jsxs)(_e.Z,{children:[(0,y.jsx)(Ne.Z,{children:(0,y.jsxs)(Me.Z,{children:[(0,y.jsx)(Ue.Z,{for:"repoName",children:(0,m.ih)("Name")}),(0,y.jsx)(te.Z,{id:"repoName",onKeyDown:this.handleKeyDown,value:this.state.repoName,onChange:this.handleChange,autoFocus:!0})]})}),this.state.errMessage&&(0,y.jsx)("p",{className:"error",children:this.state.errMessage})]}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.props.toggle,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.handleSubmit,children:(0,m.ih)("Submit")})]})]})}}]),n}(l.Component);L().locale(m.KQ);var gi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getDepartmentInfo=function(e){I.I.sysAdminGetDepartmentInfo(e,!0).then((function(e){i.setState({ancestorGroups:e.data.ancestor_groups,groupName:e.data.name})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.onDepartmentNameChanged=function(e){i.setState({groupName:e.name})},i.toggleRenameDepartmentDialog=function(){i.setState({isShowRenameDepartmentDialog:!i.state.isShowRenameDepartmentDialog})},i.toggleAddRepoDialog=function(){i.setState({isShowAddRepoDialog:!i.state.isShowAddRepoDialog})},i.toggleAddMemberDialog=function(){i.setState({isShowAddMemberDialog:!i.state.isShowAddMemberDialog})},i.toggleAddDepartmentDialog=function(){i.setState({isShowAddDepartmentDialog:!i.state.isShowAddDepartmentDialog})},i.state={groupName:"",ancestorGroups:[],isShowAddDepartmentDialog:!1,isShowAddMemberDialog:!1,isShowRenameDepartmentDialog:!1,isShowAddRepoDialog:!1},i.navItems=[{name:"subDepartments",urlPart:"/",text:(0,m.ih)("Sub-departments")},{name:"members",urlPart:"/members/",text:(0,m.ih)("Members")},{name:"repos",urlPart:"/libraries/",text:(0,m.ih)("Libraries")}],i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this.props.groupID;this.getDepartmentInfo(e)}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){this.props.groupID!==e.groupID&&this.getDepartmentInfo(e.groupID)}},{key:"render",value:function(){var e=this.props,t=e.groupID,n=e.currentItem,r=this.state.groupName,s="btn btn-secondary operation-item",a=(0,y.jsxs)(l.Fragment,{children:[t&&(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)("button",{className:s,title:(0,m.ih)("Rename Department"),onClick:this.toggleRenameDepartmentDialog,children:(0,m.ih)("Rename Department")}),"subDepartments"==n&&(0,y.jsx)("button",{className:s,title:(0,m.ih)("New Sub-department"),onClick:this.toggleAddDepartmentDialog,children:(0,m.ih)("New Sub-department")}),"members"==n&&(0,y.jsx)("button",{className:s,title:(0,m.ih)("Add Member"),onClick:this.toggleAddMemberDialog,children:(0,m.ih)("Add Member")}),"repos"==n&&(0,y.jsx)("button",{className:s,onClick:this.toggleAddRepoDialog,title:(0,m.ih)("New Library"),children:(0,m.ih)("New Library")})]}),this.state.isShowRenameDepartmentDialog&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(ri,{groupID:t,name:r,toggle:this.toggleRenameDepartmentDialog,onDepartmentNameChanged:this.onDepartmentNameChanged})}),this.state.isShowAddMemberDialog&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(di,{toggle:this.toggleAddMemberDialog,onAddNewMembers:this.props.onAddNewMembers,groupID:t})}),this.state.isShowAddRepoDialog&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(ui,{toggle:this.toggleAddRepoDialog,onAddNewRepo:this.props.onAddNewRepo,groupID:t})}),this.state.isShowAddDepartmentDialog&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(ii,{onAddNewDepartment:this.props.onAddNewDepartment,parentGroupID:t,toggle:this.toggleAddDepartmentDialog})})]});return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)((0,i.Z)({},this.props),{},{children:a})),(0,y.jsx)("div",{className:"main-panel-center flex-row h-100",children:(0,y.jsxs)("div",{className:"cur-view-container o-auto",children:[(0,y.jsx)("div",{className:"cur-view-path",children:(0,y.jsx)("div",{className:"fleft",children:(0,y.jsxs)("h3",{className:"sf-heading",children:[t?(0,y.jsx)(g.rU,{to:m.ze+"sys/departments/",children:(0,m.ih)("Departments")}):(0,y.jsx)("span",{children:(0,m.ih)("Departments")}),this.state.ancestorGroups.map((function(e){var t=m.ze+"sys/departments/"+e.id+"/";return(0,y.jsxs)("span",{children:[" / ",(0,y.jsx)(g.rU,{to:t,children:e.name})]},e.id)})),t&&(0,y.jsxs)("span",{children:[" / ",r]})]})})}),(0,y.jsx)("ul",{className:"nav border-bottom mx-4",children:this.navItems.map((function(e,i){return(0,y.jsx)("li",{className:"nav-item mr-2",children:(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/departments/").concat(t).concat(e.urlPart),className:"nav-link ".concat(n==e.name?" active":""),children:e.text})},i)}))}),this.props.children]})})]})}}]),n}(l.Component);L().locale(m.KQ);var pi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).listSubDepartments=function(e){I.I.sysAdminGetDepartmentInfo(e,!0).then((function(e){i.setState({groups:e.data.groups})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.onSubDepartmentNameChanged=function(e){i.setState({groups:i.state.groups.map((function(t){return t.id==e.id&&(t.name=e.name),t}))})},i.onFreezedItem=function(){i.setState({isItemFreezed:!0})},i.onUnfreezedItem=function(){i.setState({isItemFreezed:!1})},i.onAddNewDepartment=function(e){var t=i.state.groups;t.unshift(e),i.setState({groups:t})},i.onDeleteDepartment=function(e){var t=i.state.groups;i.setState({groups:t.filter((function(t){return t.id!=e}))})},i.onSetDepartmentQuota=function(e){var t=i.state.groups;i.setState({groups:t.map((function(t){return t.id==e.id&&(t.quota=e.quota),t}))})},i.state={isItemFreezed:!1,groups:[]},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){this.listSubDepartments(this.props.groupID)}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){this.props.groupID!==e.groupID&&this.listSubDepartments(e.groupID)}},{key:"render",value:function(){var e=this,t=this.state.groups,n=this.props.groupID;return(0,y.jsx)(gi,{groupID:n,currentItem:"subDepartments",onAddNewDepartment:this.onAddNewDepartment,children:(0,y.jsx)("div",{className:"cur-view-content",children:t&&t.length>0?(0,y.jsxs)("table",{children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"40%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"25%",children:(0,m.ih)("Created At")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Quota")}),(0,y.jsx)("th",{width:"15%"})]})}),(0,y.jsx)("tbody",{children:t.map((function(t,n){return(0,y.jsx)(li,{isItemFreezed:e.state.isItemFreezed,onFreezedItem:e.onFreezedItem,onUnfreezedItem:e.onUnfreezedItem,onDepartmentNameChanged:e.onSubDepartmentNameChanged,group:t,onDeleteDepartment:e.onDeleteDepartment,onSetDepartmentQuota:e.onSetDepartmentQuota},t.id)}))})]}):(0,y.jsx)("p",{className:"no-group",children:(0,m.ih)("No sub-departments")})})})}}]),n}(l.Component),mi=pi,fi=n(93433),vi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).deleteMember=function(){var e=i.props.member.email;I.I.sysAdminDeleteGroupMember(i.props.groupID,e).then((function(e){e.data.success&&(i.props.onMemberChanged(),i.props.toggle())})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=(0,m.ih)("Are you sure you want to delete {placeholder} ?");return e=e.replace("{placeholder}",''+f.c.HTMLescape(this.props.member.name)+""),(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.props.toggle,children:[(0,y.jsx)(ke.Z,{toggle:this.props.toggle,children:(0,m.ih)("Delete Member")}),(0,y.jsx)(_e.Z,{children:(0,y.jsx)("div",{dangerouslySetInnerHTML:{__html:e}})}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.props.toggle,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.deleteMember,children:(0,m.ih)("Delete")})]})]})}}]),n}(l.Component),xi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).onMouseEnter=function(){i.props.isItemFreezed||i.setState({highlight:!0})},i.onMouseLeave=function(){i.props.isItemFreezed||i.setState({highlight:!1})},i.onChangeUserRole=function(e){var t="Admin"===e.value;I.I.sysAdminUpdateGroupMemberRole(i.props.groupID,i.props.member.email,t).then((function(e){i.props.onMemberChanged()})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)})),i.setState({highlight:!1})},i.state={highlight:!1},i.roleOptions=[{value:"Admin",text:(0,m.ih)("Admin"),isSelected:!1},{value:"Member",text:(0,m.ih)("Member"),isSelected:!1}],i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.member,t=this.state.highlight;if("Owner"===e.role)return null;this.roleOptions=this.roleOptions.map((function(t){return t.isSelected=t.value==e.role,t}));var n=this.roleOptions.filter((function(e){return e.isSelected}))[0];return(0,y.jsxs)("tr",{className:t?"tr-highlight":"",onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,children:[(0,y.jsx)("td",{children:(0,y.jsx)("img",{src:e.avatar_url,alt:"member-header",width:"24",className:"avatar"})}),(0,y.jsx)("td",{children:(0,y.jsx)(we,{email:e.email,name:e.name})}),(0,y.jsx)("td",{children:(0,y.jsx)($e.Z,{isDropdownToggleShown:t,currentSelectedOption:n,options:this.roleOptions,selectOption:this.onChangeUserRole,toggleItemFreezed:this.props.toggleItemFreezed})}),(0,y.jsx)("td",{className:"cursor-pointer text-center",onClick:this.props.showDeleteMemberDialog.bind(this,e),children:(0,y.jsx)("span",{className:"sf2-icon-x3 action-icon ".concat(t?"":"vh"),title:"Delete"})})]})}}]),n}(l.Component);L().locale(m.KQ);var yi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).listMembers=function(e,t,n){I.I.sysAdminListGroupMembers(e,t,n).then((function(e){i.setState({members:e.data.members,currentPageInfo:e.data.page_info})})).catch((function(e){var t=f.c.getErrorMsg(e);i.setState({membersErrorMsg:t})}))},i.getPreviousPageList=function(){i.listMembers(i.props.groupID,i.state.currentPageInfo.current_page-1,i.state.perPage)},i.getNextPageList=function(){i.listMembers(i.props.groupID,i.state.currentPageInfo.current_page+1,i.state.perPage)},i.resetPerPage=function(e){i.setState({perPage:e},(function(){i.listMembers(i.props.groupID,1,e)}))},i.toggleCancel=function(){i.setState({showDeleteMemberDialog:!1})},i.onMemberChanged=function(){i.listMembers(i.props.groupID,i.state.currentPageInfo.current_page,i.state.perPage)},i.toggleItemFreezed=function(e){i.setState({isItemFreezed:e})},i.showDeleteMemberDialog=function(e){i.setState({showDeleteMemberDialog:!0,deletedMember:e})},i.onAddNewMembers=function(e){var t=i.state.members;t.unshift.apply(t,(0,fi.Z)(e)),i.setState({members:t})},i.state={isItemFreezed:!1,members:[],membersErrorMsg:"",currentPageInfo:{},currentPage:1,perPage:25,deletedMember:{},showDeleteMemberDialog:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=n.perPage;this.setState({perPage:parseInt(t.get("per_page")||r),currentPage:parseInt(t.get("page")||i)},(function(){var t=e.props.groupID;e.listMembers(t,e.state.currentPage,e.state.perPage)}))}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){this.props.groupID!==e.groupID&&this.listMembers(e.groupID,this.state.currentPage,this.state.perPage)}},{key:"render",value:function(){var e=this,t=this.state,n=t.members,i=t.membersErrorMsg,r=this.props.groupID;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(gi,{groupID:r,currentItem:"members",onAddNewMembers:this.onAddNewMembers,children:(0,y.jsx)("div",{className:"cur-view-content",children:i?(0,y.jsx)("p",{className:"error text-center",children:i}):0==n.length?(0,y.jsx)("p",{className:"no-member",children:(0,m.ih)("No members")}):(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"5%"}),(0,y.jsx)("th",{width:"50%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"15%",children:(0,m.ih)("Role")}),(0,y.jsx)("th",{width:"30%"})]})}),(0,y.jsx)("tbody",{children:n.map((function(t,n){return(0,y.jsx)(l.Fragment,{children:(0,y.jsx)(xi,{member:t,showDeleteMemberDialog:e.showDeleteMemberDialog,isItemFreezed:e.state.isItemFreezed,onMemberChanged:e.onMemberChanged,toggleItemFreezed:e.toggleItemFreezed,groupID:r})},n)}))})]}),this.state.currentPageInfo&&(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPageList,gotoNextPage:this.getNextPageList,currentPage:this.state.currentPageInfo.current_page,hasNextPage:this.state.currentPageInfo.has_next_page,curPerPage:this.state.perPage,resetPerPage:this.resetPerPage})]})})}),this.state.showDeleteMemberDialog&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(vi,{toggle:this.toggleCancel,onMemberChanged:this.onMemberChanged,member:this.state.deletedMember,groupID:r})})]})}}]),n}(l.Component),bi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).deleteRepo=function(){I.I.sysAdminDeleteRepoInDepartment(i.props.groupID,i.props.repo.repo_id).then((function(e){e.data.success&&(i.props.onRepoChanged(),i.props.toggle())})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.repo,t=(0,m.ih)("Are you sure you want to delete {placeholder} ?");return t=t.replace("{placeholder}",''+f.c.HTMLescape(e.name||e.repo_name)+""),(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.props.toggle,children:[(0,y.jsx)(ke.Z,{toggle:this.props.toggle,children:(0,m.ih)("Delete Library")}),(0,y.jsx)(_e.Z,{children:(0,y.jsx)("div",{dangerouslySetInnerHTML:{__html:t}})}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.props.toggle,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.deleteRepo,children:(0,m.ih)("Delete")})]})]})}}]),n}(l.Component),ji=window.sysadmin.pageOptions.enableSysAdminViewRepo,Si=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).onMouseEnter=function(){i.setState({highlight:!0})},i.onMouseLeave=function(){i.setState({highlight:!1})},i.state={highlight:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.repo,t=e.name||e.repo_name,n=this.state.highlight,i=f.c.getLibIconUrl(e);return(0,y.jsxs)("tr",{className:n?"tr-highlight":"",onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,children:[(0,y.jsx)("td",{children:(0,y.jsx)("img",{src:i,width:"24",alt:(0,m.ih)("icon")})}),ji?(0,y.jsx)("td",{children:(0,y.jsx)("a",{href:"".concat(m.ze,"sys/libraries/").concat(e.repo_id,"/").concat(encodeURIComponent(t),"/"),children:t})}):(0,y.jsx)("td",{children:t}),(0,y.jsx)("td",{children:f.c.bytesToSize(e.size)}),(0,y.jsx)("td",{className:"cursor-pointer text-center",onClick:this.props.showDeleteRepoDialog.bind(this,e),children:(0,y.jsx)("span",{className:"sf2-icon-delete action-icon ".concat(n?"":"vh"),title:"Delete"})})]})}}]),n}(l.Component);L().locale(m.KQ);var Di=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).listGroupRepo=function(e){I.I.sysAdminListGroupRepos(e).then((function(e){i.setState({repos:e.data.libraries})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.toggleCancel=function(){i.setState({showDeleteRepoDialog:!1})},i.onRepoChanged=function(){i.listGroupRepo(i.props.groupID)},i.showDeleteRepoDialog=function(e){i.setState({showDeleteRepoDialog:!0,deletedRepo:e})},i.onAddNewRepo=function(e){var t=i.state.repos;t.unshift(e),i.setState({repos:t})},i.state={repos:[],deletedRepo:{},showDeleteRepoDialog:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this.props.groupID;this.listGroupRepo(e)}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){this.props.groupID!==e.groupID&&this.listGroupRepo(e.groupID)}},{key:"render",value:function(){var e=this,t=this.state.repos,n=this.props.groupID;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(gi,{groupID:n,currentItem:"repos",onAddNewRepo:this.onAddNewRepo,children:t.length>0?(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsxs)("table",{children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"5%"}),(0,y.jsx)("th",{width:"50%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"30%",children:(0,m.ih)("Size")}),(0,y.jsx)("th",{width:"15%"})]})}),(0,y.jsx)("tbody",{children:t.map((function(t,n){return(0,y.jsx)(Si,{repo:t,showDeleteRepoDialog:e.showDeleteRepoDialog},n)}))})]})}):(0,y.jsx)("p",{className:"no-libraty",children:(0,m.ih)("No libraries")})}),this.state.showDeleteRepoDialog&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(bi,{toggle:this.toggleCancel,onRepoChanged:this.onRepoChanged,repo:this.state.deletedRepo,groupID:n})})]})}}]),n}(l.Component),wi=Di,Ii=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).navItems=[{name:"shareLinks",urlPart:"share-links",text:(0,m.ih)("Share Links")},{name:"uploadLinks",urlPart:"upload-links",text:(0,m.ih)("Upload Links")}],i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.currentItem;return(0,y.jsx)("div",{className:"cur-view-path tab-nav-container",children:(0,y.jsx)("ul",{className:"nav",children:this.navItems.map((function(t,n){return(0,y.jsx)("li",{className:"nav-item",children:(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/").concat(t.urlPart,"/"),className:"nav-link".concat(e==t.name?" active":""),children:t.text})},n)}))})})}}]),n}(l.Component),Pi=Ii,Zi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getPreviousPage=function(){i.props.getShareLinksByPage(i.props.currentPage-1)},i.getNextPage=function(){i.props.getShareLinksByPage(i.props.currentPage+1)},i.sortByTime=function(e){e.preventDefault(),i.props.sortItems("ctime")},i.sortByCount=function(e){e.preventDefault(),i.props.sortItems("view_cnt")},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.items,s=t.perPage,a=t.currentPage,o=t.hasNextPage,c=t.sortBy,h=t.sortOrder;if(n)return(0,y.jsx)(Z.Z,{});if(i)return(0,y.jsx)("p",{className:"error text-center",children:i});var d=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No share links")})}),u=(0,y.jsx)("span",{className:"fas fa-sort"}),g=(0,y.jsx)("span",{className:"fas ".concat("asc"==h?"fa-caret-up":"fa-caret-down")}),p=(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"18%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"18%",children:(0,m.ih)("Token")}),(0,y.jsx)("th",{width:"18%",children:(0,m.ih)("Owner")}),(0,y.jsx)("th",{width:"15%",children:(0,y.jsxs)("a",{className:"d-inline-block table-sort-op",href:"#",onClick:this.sortByTime,children:[(0,m.ih)("Created At")," ","ctime"==c?g:u]})}),(0,y.jsx)("th",{width:"10%",children:(0,y.jsxs)("a",{className:"d-inline-block table-sort-op",href:"#",onClick:this.sortByCount,children:[(0,m.ih)("Count")," ","view_cnt"==c?g:u]})}),(0,y.jsx)("th",{width:"11%",children:(0,m.ih)("Expiration")}),(0,y.jsx)("th",{width:"10%"})]})}),r&&(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(ki,{item:t,deleteShareLink:e.props.deleteShareLink},n)}))})]}),(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPage,gotoNextPage:this.getNextPage,currentPage:a,hasNextPage:o,curPerPage:s,resetPerPage:this.props.resetPerPage})]});return r.length?p:d}}]),n}(l.Component),ki=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseOver=function(){i.setState({isOpIconShown:!0})},i.handleMouseOut=function(){i.setState({isOpIconShown:!1})},i.deleteShareLink=function(){i.props.deleteShareLink(i.props.item.token)},i.renderExpiration=function(){var e=i.props.item;if(!e.expire_date)return"--";var t=L()(e.expire_date).format("YYYY-MM-DD"),n=L()(e.expire_date).format("YYYY-MM-DD HH:mm:ss");return(0,y.jsx)("span",{className:e.is_expired?"error":"",title:n,children:t})},i.state={isOpIconShown:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state.isOpIconShown,t=this.props.item,n="action-icon sf2-icon-delete ".concat(e?"":"invisible");return(0,y.jsxs)("tr",{onMouseOver:this.handleMouseOver,onMouseOut:this.handleMouseOut,children:[(0,y.jsx)("td",{children:t.obj_name}),(0,y.jsx)("td",{children:t.token}),(0,y.jsx)("td",{children:(0,y.jsx)(we,{email:t.creator_email,name:t.creator_name})}),(0,y.jsx)("td",{children:L()(t.ctime).fromNow()}),(0,y.jsx)("td",{children:t.view_cnt}),(0,y.jsx)("td",{children:this.renderExpiration()}),(0,y.jsx)("td",{children:(0,y.jsx)("a",{href:"#",className:n,title:(0,m.ih)("Remove"),onClick:this.deleteShareLink})})]})}}]),n}(l.Component),_i=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getShareLinksByPage=function(e){var t=i.state,n=t.perPage,r=t.sortBy,s=t.sortOrder;I.I.sysAdminListShareLinks(e,n,r,s).then((function(t){i.setState({shareLinkList:t.data.share_link_list,loading:!1,currentPage:e,hasNextPage:f.c.hasNextPage(e,n,t.data.count)})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.sortItems=function(e){i.setState({currentPage:1,sortBy:e,sortOrder:"asc"==i.state.sortOrder?"desc":"asc"},(function(){var e=new URL(location.href),t=new URLSearchParams(e.search),n=i.state,r=n.currentPage,s=n.sortBy,a=n.sortOrder;t.set("page",r),t.set("order_by",s),t.set("direction",a),e.search=t.toString(),(0,g.c4)(e.toString()),i.getShareLinksByPage(r)}))},i.deleteShareLink=function(e){I.I.sysAdminDeleteShareLink(e).then((function(t){var n=i.state.shareLinkList.filter((function(t){return t.token!=e}));i.setState({shareLinkList:n})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){return i.getShareLinksByPage(i.initPage)}))},i.state={loading:!0,errorMsg:"",shareLinkList:[],perPage:25,currentPage:1,hasNextPage:!1,sortBy:"",sortOrder:"asc"},i.initPage=1,i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=n.perPage,s=n.sortBy,a=n.sortOrder;this.setState({perPage:parseInt(t.get("per_page")||r),currentPage:parseInt(t.get("page")||i),sortBy:t.get("order_by")||s,sortOrder:t.get("direction")||a},(function(){e.getShareLinksByPage(e.state.currentPage)}))}},{key:"render",value:function(){var e=this.state,t=e.shareLinkList,n=e.currentPage,r=e.perPage,s=e.hasNextPage;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Pi,{currentItem:"shareLinks"}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(Zi,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:t,currentPage:n,perPage:r,hasNextPage:s,getShareLinksByPage:this.getShareLinksByPage,resetPerPage:this.resetPerPage,sortBy:this.state.sortBy,sortOrder:this.state.sortOrder,sortItems:this.sortItems,deleteShareLink:this.deleteShareLink})})]})})]})}}]),n}(l.Component),Ni=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getPreviousPage=function(){i.props.getUploadLinksByPage(i.props.currentPage-1)},i.getNextPage=function(){i.props.getUploadLinksByPage(i.props.currentPage+1)},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.items,s=t.perPage,a=t.currentPage,o=t.hasNextPage;if(n)return(0,y.jsx)(Z.Z,{});if(i)return(0,y.jsx)("p",{className:"error text-center",children:i});var c=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No upload links")})}),h=(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"18%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"18%",children:(0,m.ih)("Token")}),(0,y.jsx)("th",{width:"18%",children:(0,m.ih)("Owner")}),(0,y.jsx)("th",{width:"15%",children:(0,m.ih)("Created At")}),(0,y.jsx)("th",{width:"10%",children:(0,m.ih)("Count")}),(0,y.jsx)("th",{width:"11%",children:(0,m.ih)("Expiration")}),(0,y.jsx)("th",{width:"10%"})]})}),r&&(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(Mi,{item:t,deleteUploadLink:e.props.deleteUploadLink},n)}))})]}),(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPage,gotoNextPage:this.getNextPage,currentPage:a,hasNextPage:o,curPerPage:s,resetPerPage:this.props.resetPerPage})]});return r.length?h:c}}]),n}(l.Component),Mi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseOver=function(){i.setState({isOpIconShown:!0})},i.handleMouseOut=function(){i.setState({isOpIconShown:!1})},i.deleteUploadLink=function(){i.props.deleteUploadLink(i.props.item.token)},i.renderExpiration=function(){var e=i.props.item;if(!e.expire_date)return"--";var t=L()(e.expire_date).format("YYYY-MM-DD"),n=L()(e.expire_date).format("YYYY-MM-DD HH:mm:ss");return(0,y.jsx)("span",{className:e.is_expired?"error":"",title:n,children:t})},i.state={isOpIconShown:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state.isOpIconShown,t=this.props.item,n="action-icon sf2-icon-delete ".concat(e?"":"invisible");return(0,y.jsx)(l.Fragment,{children:(0,y.jsxs)("tr",{onMouseOver:this.handleMouseOver,onMouseOut:this.handleMouseOut,children:[(0,y.jsx)("td",{children:t.path}),(0,y.jsx)("td",{children:t.token}),(0,y.jsx)("td",{children:(0,y.jsx)(we,{email:t.creator_email,name:t.creator_name})}),(0,y.jsx)("td",{children:L()(t.ctime).fromNow()}),(0,y.jsx)("td",{children:t.view_cnt}),(0,y.jsx)("td",{children:this.renderExpiration()}),(0,y.jsx)("td",{children:(0,y.jsx)("a",{href:"#",className:n,title:(0,m.ih)("Remove"),onClick:this.deleteUploadLink})})]})})}}]),n}(l.Component),Ci=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getUploadLinksByPage=function(e){var t=i.state.perPage;I.I.sysAdminListAllUploadLinks(e,t).then((function(n){i.setState({uploadLinkList:n.data.upload_link_list,loading:!1,currentPage:e,hasNextPage:f.c.hasNextPage(e,t,n.data.count)})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.deleteUploadLink=function(e){I.I.sysAdminDeleteUploadLink(e).then((function(t){var n=i.state.uploadLinkList.filter((function(t){return t.token!=e}));i.setState({uploadLinkList:n})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){return i.getUploadLinksByPage(i.initPage)}))},i.state={loading:!0,errorMsg:"",uploadLinkList:[],perPage:25,currentPage:1,hasNextPage:!1},i.initPage=1,i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=n.perPage;this.setState({perPage:parseInt(t.get("per_page")||r),currentPage:parseInt(t.get("page")||i)},(function(){e.getUploadLinksByPage(e.state.currentPage)}))}},{key:"render",value:function(){var e=this.state,t=e.uploadLinkList,n=e.currentPage,r=e.perPage,s=e.hasNextPage;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Pi,{currentItem:"uploadLinks"}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(Ni,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:t,currentPage:n,perPage:r,hasNextPage:s,getUploadLinksByPage:this.getUploadLinksByPage,resetPerPage:this.resetPerPage,deleteUploadLink:this.deleteUploadLink})})]})})]})}}]),n}(l.Component),Ai=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).checkSubmitBtnActive=function(){var e=i.state,t=e.name,n=e.email,r=e.password,s=e.passwordAgain,a=!0;a=""!=t.trim()&&""!=n.trim()&&""!=r.trim()&&""!=s.trim(),i.setState({isSubmitBtnActive:a})},i.toggle=function(){i.props.toggleDialog()},i.inputPassword=function(e){var t=e.target.value;i.setState({password:t},i.checkSubmitBtnActive)},i.inputPasswordAgain=function(e){var t=e.target.value;i.setState({passwordAgain:t},i.checkSubmitBtnActive)},i.inputEmail=function(e){var t=e.target.value;i.setState({email:t},i.checkSubmitBtnActive)},i.inputName=function(e){var t=e.target.value;i.setState({name:t},i.checkSubmitBtnActive)},i.handleSubmit=function(){var e=i.state,t=e.name,n=e.email,r=e.password;if(r==e.passwordAgain){var s={orgName:t.trim(),ownerEmail:n.trim(),password:r.trim()};i.props.addOrg(s),i.toggle()}else i.setState({errorMsg:(0,m.ih)("Passwords do not match.")})},i.state={name:"",email:"",password:"",passwordAgain:"",errorMsg:"",isSubmitBtnActive:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state,t=e.errorMsg,n=e.password,i=e.passwordAgain,r=e.email,s=e.name,a=e.isSubmitBtnActive;return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.toggle,children:[(0,y.jsx)(ke.Z,{toggle:this.toggle,children:(0,m.ih)("Add Organization")}),(0,y.jsxs)(_e.Z,{children:[(0,y.jsxs)(Ne.Z,{autoComplete:"off",children:[(0,y.jsxs)(Me.Z,{children:[(0,y.jsx)(Ue.Z,{children:(0,m.ih)("Name")}),(0,y.jsx)(te.Z,{value:s,onChange:this.inputName})]}),(0,y.jsxs)(Me.Z,{children:[(0,y.jsxs)(Ue.Z,{children:[(0,m.ih)("Owner"),(0,y.jsx)("span",{className:"small text-secondary ml-1 fas fa-question-circle",title:(0,m.ih)("Owner can use admin panel in an organization, must be a new account.")})]}),(0,y.jsx)(te.Z,{value:r,onChange:this.inputEmail})]}),(0,y.jsxs)(Me.Z,{children:[(0,y.jsx)(Ue.Z,{children:(0,m.ih)("Password")}),(0,y.jsx)(te.Z,{type:"password",value:n,onChange:this.inputPassword})]}),(0,y.jsxs)(Me.Z,{children:[(0,y.jsx)(Ue.Z,{children:(0,m.ih)("Password again")}),(0,y.jsx)(te.Z,{type:"password",value:i,onChange:this.inputPasswordAgain})]})]}),t&&(0,y.jsx)(Fe.Z,{color:"danger",children:t})]}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.toggle,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.handleSubmit,disabled:!a,children:(0,m.ih)("Submit")})]})]})}}]),n}(l.Component),Li=window.sysadmin.pageOptions.availableRoles,Oi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggleItemFreezed=function(e){i.setState({isItemFreezed:e})},i.getPreviousPage=function(){i.props.getListByPage(i.props.currentPage-1)},i.getNextPage=function(){i.props.getListByPage(i.props.currentPage+1)},i.state={isItemFreezed:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.items;if(n)return(0,y.jsx)(Z.Z,{});if(i)return(0,y.jsx)("p",{className:"error text-center mt-4",children:i});var s=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No organizations")})}),a=(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Creator")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Role")}),(0,y.jsx)("th",{width:"15%",children:(0,m.ih)("Space Used")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Created At")}),(0,y.jsx)("th",{width:"5%"})]})}),(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(Ti,{item:t,updateRole:e.props.updateRole,deleteOrg:e.props.deleteOrg,isItemFreezed:e.state.isItemFreezed,toggleItemFreezed:e.toggleItemFreezed},n)}))})]}),this.props.currentPage&&(0,y.jsx)(ae.Z,{currentPage:this.props.currentPage,hasNextPage:this.props.hasNextPage,curPerPage:this.props.curPerPage,resetPerPage:this.props.resetPerPage,gotoPreviousPage:this.getPreviousPage,gotoNextPage:this.getNextPage})]});return r.length?a:s}}]),n}(l.Component),Ti=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseEnter=function(){i.props.isItemFreezed||i.setState({highlighted:!0})},i.handleMouseLeave=function(){i.props.isItemFreezed||i.setState({highlighted:!1})},i.toggleDeleteDialog=function(e){e&&e.preventDefault(),i.setState({isDeleteDialogOpen:!i.state.isDeleteDialogOpen},(function(){i.state.isDeleteDialogOpen&&I.I.sysAdminGetOrg(i.props.item.org_id).then((function(e){var t=''+f.c.HTMLescape(e.data.org_name)+"",n=''+f.c.HTMLescape(e.data.users_count)+"",r=''+f.c.HTMLescape(e.data.repos_count)+"",s=(0,m.ih)("Are you sure you want to delete {placeholder} ?").replace("{placeholder}",t)+"
    "+(0,m.ih)("{userCount} user(s) and {repoCount} libraries of this organization will also be deleted.").replace("{userCount}",n).replace("{repoCount}",r);i.setState({deleteDialogMsg:s})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))}))},i.translateRole=function(e){switch(e){case"default":return(0,m.ih)("Default");case"guest":return(0,m.ih)("Guest");default:return e}},i.updateRole=function(e){i.props.updateRole(i.props.item.org_id,e.value)},i.deleteOrg=function(){P.Z.notify((0,m.ih)("It may take some time, please wait.")),i.props.deleteOrg(i.props.item.org_id)},i.state={highlighted:!1,isDeleteDialogOpen:!1,deleteDialogMsg:""},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props.item,n=this.state,i=n.highlighted,r=n.isDeleteDialogOpen,s=n.deleteDialogMsg,a=t.role;this.roleOptions=Li.map((function(t){return{value:t,text:e.translateRole(t),isSelected:t==a}}));var o=this.roleOptions.filter((function(e){return e.isSelected}))[0];return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{className:i?"tr-highlight":"",onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,children:[(0,y.jsx)("td",{children:(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/organizations/").concat(t.org_id,"/info/"),children:t.org_name})}),(0,y.jsx)("td",{children:(0,y.jsx)(we,{email:t.creator_email,name:t.creator_name})}),(0,y.jsx)("td",{children:(0,y.jsx)($e.Z,{isDropdownToggleShown:i,currentSelectedOption:o,options:this.roleOptions,selectOption:this.updateRole,toggleItemFreezed:this.props.toggleItemFreezed})}),(0,y.jsx)("td",{children:"".concat(f.c.bytesToSize(t.quota_usage)," / ").concat(t.quota>0?f.c.bytesToSize(t.quota):"--")}),(0,y.jsx)("td",{children:L()(t.ctime).format("YYYY-MM-DD HH:mm:ss")}),(0,y.jsx)("td",{children:(0,y.jsx)("a",{href:"#",className:"action-icon sf2-icon-delete ".concat(i?"":"invisible"),title:(0,m.ih)("Delete"),onClick:this.toggleDeleteDialog})})]}),r&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Delete Organization"),message:s,executeOperation:this.deleteOrg,confirmBtnText:(0,m.ih)("Delete"),toggleDialog:this.toggleDeleteDialog})]})}}]),n}(l.Component),Fi=Oi,Ri=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getItemsByPage=function(e){var t=i.state.perPage;I.I.sysAdminListOrgs(e,t).then((function(n){i.setState({loading:!1,orgList:n.data.organizations,currentPage:e,hasNextPage:f.c.hasNextPage(e,t,n.data.total_count)})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){i.getItemsByPage(1)}))},i.toggleAddOrgDialog=function(){i.setState({isAddOrgDialogOpen:!i.state.isAddOrgDialogOpen})},i.updateRole=function(e,t){var n={};n.role=t,I.I.sysAdminUpdateOrg(e,n).then((function(n){var r=i.state.orgList.map((function(n){return n.org_id==e&&(n.role=t),n}));i.setState({orgList:r}),P.Z.success((0,m.ih)("Edit succeeded"))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.addOrg=function(e){var t=e.orgName,n=e.ownerEmail,r=e.password;I.I.sysAdminAddOrg(t,n,r).then((function(e){var t=i.state.orgList;t.unshift(e.data),i.setState({orgList:t})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.deleteOrg=function(e){I.I.sysAdminDeleteOrg(e).then((function(t){var n=i.state.orgList.filter((function(t){return t.org_id!=e}));i.setState({orgList:n}),P.Z.success((0,m.ih)("Successfully deleted 1 item."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.getSearch=function(){return(0,y.jsx)(Qe,{placeholder:(0,m.ih)("Search organizations"),submit:i.searchItems})},i.searchItems=function(e){(0,g.c4)("".concat(m.ze,"sys/search-organizations/?query=").concat(encodeURIComponent(e)))},i.state={loading:!0,errorMsg:"",orgList:[],currentPage:1,perPage:25,hasNextPage:!1,isAddOrgDialogOpen:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=n.perPage;this.setState({perPage:parseInt(t.get("per_page")||r),currentPage:parseInt(t.get("page")||i)},(function(){e.getItemsByPage(e.state.currentPage)}))}},{key:"render",value:function(){var e=this.state.isAddOrgDialogOpen;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)((0,i.Z)({search:this.getSearch()},this.props),{},{children:(0,y.jsx)(w.Z,{className:"btn btn-secondary operation-item",onClick:this.toggleAddOrgDialog,children:(0,m.ih)("Add Organization")})})),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)("div",{className:"cur-view-path",children:(0,y.jsx)("h3",{className:"sf-heading",children:(0,m.ih)("Organizations")})}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(Fi,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.orgList,currentPage:this.state.currentPage,hasNextPage:this.state.hasNextPage,curPerPage:this.state.perPage,resetPerPage:this.resetPerPage,getListByPage:this.getItemsByPage,updateRole:this.updateRole,deleteOrg:this.deleteOrg})})]})}),e&&(0,y.jsx)(Ai,{addOrg:this.addOrg,toggleDialog:this.toggleAddOrgDialog})]})}}]),n}(l.Component),Ui=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getItems=function(){I.I.sysAdminSearchOrgs(i.state.query.trim()).then((function(e){i.setState({loading:!1,orgList:e.data.organization_list})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.updateRole=function(e,t){var n={};n.role=t,I.I.sysAdminUpdateOrg(e,n).then((function(n){var r=i.state.orgList.map((function(n){return n.org_id==e&&(n.role=t),n}));i.setState({orgList:r}),P.Z.success((0,m.ih)("Edit succeeded"))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.deleteOrg=function(e){I.I.sysAdminDeleteOrg(e).then((function(t){var n=i.state.orgList.filter((function(t){return t.org_id!=e}));i.setState({orgList:n}),P.Z.success((0,m.ih)("Successfully deleted 1 item."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.handleInputChange=function(e){i.setState({query:e.target.value},i.checkSubmitBtnActive)},i.checkSubmitBtnActive=function(){var e=i.state.query;i.setState({isSubmitBtnActive:e.trim()})},i.handleKeyDown=function(e){13===e.keyCode&&(i.state.isSubmitBtnActive&&i.getItems())},i.state={query:"",isSubmitBtnActive:!1,loading:!0,errorMsg:"",orgList:[]},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=new URL(document.location).searchParams;this.setState({query:e.get("query")||""},this.getItems)}},{key:"render",value:function(){var e=this.state,t=e.query,n=e.isSubmitBtnActive;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)("div",{className:"cur-view-path",children:(0,y.jsx)("h3",{className:"sf-heading",children:(0,m.ih)("Organizations")})}),(0,y.jsxs)("div",{className:"cur-view-content",children:[(0,y.jsxs)("div",{className:"mt-4 mb-6",children:[(0,y.jsx)("h4",{className:"border-bottom font-weight-normal mb-2 pb-1",children:(0,m.ih)("Search Organizations")}),(0,y.jsx)("p",{className:"text-secondary small",children:(0,m.ih)("Tip: you can search by keyword in name.")}),(0,y.jsxs)(Ne.Z,{tag:"div",children:[(0,y.jsxs)(Me.Z,{row:!0,children:[(0,y.jsx)(Ue.Z,{for:"name",sm:1,children:(0,m.ih)("Name")}),(0,y.jsx)(xt.Z,{sm:5,children:(0,y.jsx)(te.Z,{type:"text",name:"query",id:"name",value:t,onChange:this.handleInputChange,onKeyDown:this.handleKeyDown})})]}),(0,y.jsx)(Me.Z,{row:!0,children:(0,y.jsx)(xt.Z,{sm:{size:5,offset:1},children:(0,y.jsx)("button",{className:"btn btn-outline-primary",disabled:!n,onClick:this.getItems,children:(0,m.ih)("Submit")})})})]})]}),(0,y.jsxs)("div",{className:"mt-4 mb-6",children:[(0,y.jsx)("h4",{className:"border-bottom font-weight-normal mb-2 pb-1",children:(0,m.ih)("Result")}),(0,y.jsx)(Fi,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.orgList,updateRole:this.updateRole,deleteOrg:this.deleteOrg})]})]})]})})]})}}]),n}(l.Component),Ei=n(56153),zi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggle=function(){i.props.toggle()},i.handleInputChange=function(e){var t=e.target.value;i.setState({name:t,isSubmitBtnActive:""!=t.trim()})},i.handleKeyDown=function(e){"Enter"==e.key&&(i.handleSubmit(),e.preventDefault())},i.handleSubmit=function(){i.props.updateName(i.state.name.trim()),i.toggle()},i.state={name:i.props.name,isSubmitBtnActive:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state,t=e.name,n=e.isSubmitBtnActive;return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.toggle,children:[(0,y.jsx)(ke.Z,{toggle:this.toggle,children:(0,m.ih)("Set Name")}),(0,y.jsx)(_e.Z,{children:(0,y.jsx)(Ne.Z,{children:(0,y.jsx)(Me.Z,{children:(0,y.jsx)(te.Z,{type:"text",value:t,onKeyDown:this.handleKeyDown,onChange:this.handleInputChange})})})}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.toggle,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.handleSubmit,disabled:!n,children:(0,m.ih)("Submit")})]})]})}}]),n}(l.Component),Bi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggle=function(){i.props.toggle()},i.handleInputChange=function(e){var t=e.target.value;i.setState({value:t,isSubmitBtnActive:""!=t.trim()})},i.handleKeyDown=function(e){"Enter"==e.key&&(i.handleSubmit(),e.preventDefault())},i.handleSubmit=function(){i.props.updateValue(i.state.value.trim()),i.toggle()},i.state={value:i.props.value,isSubmitBtnActive:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.state,t=e.value,n=e.isSubmitBtnActive;return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.toggle,children:[(0,y.jsx)(ke.Z,{toggle:this.toggle,children:(0,m.ih)("Set max number of members")}),(0,y.jsx)(_e.Z,{children:(0,y.jsx)(Ne.Z,{children:(0,y.jsx)(Me.Z,{children:(0,y.jsx)(te.Z,{type:"text",className:"form-control",value:t,onKeyDown:this.handleKeyDown,onChange:this.handleInputChange})})})}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.toggle,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.handleSubmit,disabled:!n,children:(0,m.ih)("Submit")})]})]})}}]),n}(l.Component),Vi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).navItems=[{name:"info",urlPart:"info",text:(0,m.ih)("Info")},{name:"users",urlPart:"users",text:(0,m.ih)("Members")},{name:"groups",urlPart:"groups",text:(0,m.ih)("Groups")},{name:"repos",urlPart:"libraries",text:(0,m.ih)("Libraries")}],i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.currentItem,n=e.orgID,i=e.orgName;return(0,y.jsxs)("div",{children:[(0,y.jsx)("div",{className:"cur-view-path",children:(0,y.jsxs)("h3",{className:"sf-heading",children:[(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/organizations/"),children:(0,m.ih)("Organizations")})," / ",i]})}),(0,y.jsx)("ul",{className:"nav border-bottom mx-4",children:this.navItems.map((function(e,i){return(0,y.jsx)("li",{className:"nav-item mr-2",children:(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/organizations/").concat(n,"/").concat(e.urlPart,"/"),className:"nav-link ".concat(t==e.name?" active":""),children:e.text})},i)}))})]})}}]),n}(l.Component),Hi=Vi,Wi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggleSetQuotaDialog=function(){i.setState({isSetQuotaDialogOpen:!i.state.isSetQuotaDialogOpen})},i.toggleSetNameDialog=function(){i.setState({isSetNameDialogOpen:!i.state.isSetNameDialogOpen})},i.toggleSetMaxUserNumberDialog=function(){i.setState({isSetMaxUserNumberDialogOpen:!i.state.isSetMaxUserNumberDialogOpen})},i.showEditIcon=function(e){return(0,y.jsx)("span",{title:(0,m.ih)("Edit"),className:"fa fa-pencil-alt attr-action-icon",onClick:e})},i.state={isSetQuotaDialogOpen:!1,isSetNameDialogOpen:!1,isSetMaxUserNumberDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.loading,n=e.errorMsg;if(t)return(0,y.jsx)(Z.Z,{});if(n)return(0,y.jsx)("p",{className:"error text-center",children:n});var i=this.props.orgInfo,r=i.org_name,s=i.users_count,a=i.max_user_number,o=i.groups_count,c=i.quota,h=i.quota_usage,d=i.enable_saml_login,u=i.url_prefix,g=i.metadata_url,p=i.domain,v=this.state,x=v.isSetQuotaDialogOpen,b=v.isSetNameDialogOpen,j=v.isSetMaxUserNumberDialogOpen;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("dl",{className:"m-0",children:[(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Name")}),(0,y.jsxs)("dd",{className:"info-item-content",children:[r,this.showEditIcon(this.toggleSetNameDialog)]}),(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Number of members")}),(0,y.jsx)("dd",{className:"info-item-content",children:s}),a&&(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Max number of members")}),(0,y.jsxs)("dd",{className:"info-item-content",children:[a,this.showEditIcon(this.toggleSetMaxUserNumberDialog)]})]}),(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Number of groups")}),(0,y.jsx)("dd",{className:"info-item-content",children:o}),(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Space Used")}),(0,y.jsxs)("dd",{className:"info-item-content",children:["".concat(f.c.bytesToSize(h)," / ").concat(c>0?f.c.bytesToSize(c):"--"),this.showEditIcon(this.toggleSetQuotaDialog)]}),d&&(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("SAML Config")}),(0,y.jsx)("dd",{className:"info-item-content",children:(0,y.jsxs)(Ei.Z,{className:"my-4",children:[(0,y.jsx)(xt.Z,{md:"3",children:(0,m.ih)("Custom SAML Login URL")}),(0,y.jsx)(xt.Z,{md:"6",children:"".concat(m.xx,"/org/custom/").concat(u)})]})}),(0,y.jsx)("dd",{className:"info-item-content",children:(0,y.jsxs)(Ei.Z,{className:"my-4",children:[(0,y.jsx)(xt.Z,{md:"3",children:(0,m.ih)("App Federation Metadata URL")}),(0,y.jsx)(xt.Z,{md:"6",children:g})]})}),(0,y.jsx)("dd",{className:"info-item-content",children:(0,y.jsxs)(Ei.Z,{className:"my-4",children:[(0,y.jsx)(xt.Z,{md:"3",children:(0,m.ih)("Email Domain")}),(0,y.jsx)(xt.Z,{md:"6",children:p})]})})]})]}),x&&(0,y.jsx)(Te,{updateQuota:this.props.updateQuota,toggle:this.toggleSetQuotaDialog}),b&&(0,y.jsx)(zi,{name:r,updateName:this.props.updateName,toggle:this.toggleSetNameDialog}),j&&(0,y.jsx)(Bi,{value:a,updateValue:this.props.updateMaxUserNumber,toggle:this.toggleSetMaxUserNumberDialog})]})}}]),n}(l.Component),Yi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).updateQuota=function(e){var t={quota:e};I.I.sysAdminUpdateOrg(i.props.orgID,t).then((function(e){var t=Object.assign(i.state.orgInfo,{quota:e.data.quota});i.setState({orgInfo:t}),P.Z.success((0,m.ih)("Successfully set quota."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.updateName=function(e){var t={orgName:e};I.I.sysAdminUpdateOrg(i.props.orgID,t).then((function(e){var t=Object.assign(i.state.orgInfo,{org_name:e.data.org_name});i.setState({orgInfo:t}),P.Z.success((0,m.ih)("Successfully set name."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.updateMaxUserNumber=function(e){var t={maxUserNumber:e};I.I.sysAdminUpdateOrg(i.props.orgID,t).then((function(e){var t=Object.assign(i.state.orgInfo,{max_user_number:e.data.max_user_number});i.setState({orgInfo:t}),P.Z.success((0,m.ih)("Successfully set max number of members."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.state={loading:!0,errorMsg:"",orgInfo:{}},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;I.I.sysAdminGetOrg(this.props.orgID).then((function(t){e.setState({loading:!1,orgInfo:t.data})})).catch((function(t){e.setState({loading:!1,errorMsg:f.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){var e=this.state.orgInfo;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Hi,{currentItem:"info",orgID:this.props.orgID,orgName:e.org_name}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(Wi,{orgID:this.props.orgID,loading:this.state.loading,errorMsg:this.state.errorMsg,orgInfo:this.state.orgInfo,updateQuota:this.updateQuota,updateName:this.updateName,updateMaxUserNumber:this.updateMaxUserNumber})})]})})]})}}]),n}(l.Component),Gi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggleItemFreezed=function(e){i.setState({isItemFreezed:e})},i.onFreezedItem=function(){i.setState({isItemFreezed:!0})},i.onUnfreezedItem=function(){i.setState({isItemFreezed:!1})},i.state={isItemFreezed:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.items;if(n)return(0,y.jsx)(Z.Z,{});if(i)return(0,y.jsx)("p",{className:"error text-center mt-4",children:i});var s=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No members")})}),a=(0,y.jsx)(l.Fragment,{children:(0,y.jsxs)("table",{children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"25%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"15%",children:(0,m.ih)("Status")}),(0,y.jsx)("th",{width:"15%",children:(0,m.ih)("Membership")}),(0,y.jsx)("th",{width:"15%",children:(0,m.ih)("Space Used")}),(0,y.jsxs)("th",{width:"25%",children:[(0,m.ih)("Created At")," / ",(0,m.ih)("Last Login")]}),(0,y.jsx)("th",{width:"5%"})]})}),(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(qi,{item:t,isItemFreezed:e.state.isItemFreezed,onFreezedItem:e.onFreezedItem,onUnfreezedItem:e.onUnfreezedItem,toggleItemFreezed:e.toggleItemFreezed,updateStatus:e.props.updateStatus,updateMembership:e.props.updateMembership,deleteUser:e.props.deleteUser},n)}))})]})});return r.length?a:s}}]),n}(l.Component),qi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseEnter=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!0,highlight:!0})},i.handleMouseLeave=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!1,highlight:!1})},i.onUnfreezedItem=function(){i.setState({highlight:!1,isOpIconShow:!1}),i.props.onUnfreezedItem()},i.onMenuItemClick=function(e){switch(e){case"Delete":i.toggleDeleteDialog();break;case"Reset Password":i.toggleResetPasswordDialog()}},i.toggleDeleteDialog=function(e){e&&e.preventDefault(),i.setState({isDeleteDialogOpen:!i.state.isDeleteDialogOpen})},i.toggleResetPasswordDialog=function(e){e&&e.preventDefault(),i.setState({isResetPasswordDialogOpen:!i.state.isResetPasswordDialogOpen})},i.updateStatus=function(e){i.props.updateStatus(i.props.item.email,e.value)},i.updateMembership=function(e){i.props.updateMembership(i.props.item.email,e.value)},i.deleteUser=function(){var e=i.props.item;i.props.deleteUser(e.org_id,e.email)},i.resetPassword=function(){I.I.sysAdminResetUserPassword(i.props.item.email).then((function(e){P.Z.success(e.data.reset_tip)})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.translateOperations=function(e){var t="";switch(e){case"Delete":t=(0,m.ih)("Delete");break;case"Reset Password":t=(0,m.ih)("Reset Password")}return t},i.translateStatus=function(e){switch(e){case"active":return(0,m.ih)("Active");case"inactive":return(0,m.ih)("Inactive")}},i.translateMembership=function(e){switch(e){case"Admin":return(0,m.ih)("Admin");case"Member":return(0,m.ih)("Member")}},i.state={isOpIconShown:!1,highlight:!1,isDeleteDialogOpen:!1,isResetPasswordDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props.item,n=this.state,i=n.highlight,r=n.isOpIconShown,s=n.isDeleteDialogOpen,a=n.isResetPasswordDialogOpen,o=''+f.c.HTMLescape(t.name)+"",c=(0,m.ih)("Are you sure you want to delete {placeholder} ?").replace("{placeholder}",o),h=(0,m.ih)("Are you sure you want to reset the password of {placeholder} ?").replace("{placeholder}",o),d=t.active?"active":"inactive";this.statusOptions=["active","inactive"].map((function(t){return{value:t,text:e.translateStatus(t),isSelected:t==d}}));var u=this.statusOptions.filter((function(e){return e.isSelected}))[0],g=t.is_org_staff?"Admin":"Member";this.membershipOptions=["Admin","Member"].map((function(t){return{value:t,text:e.translateMembership(t),isSelected:t==g}}));var p=this.membershipOptions.filter((function(e){return e.isSelected}))[0];return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{className:this.state.highlight?"tr-highlight":"",onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,children:[(0,y.jsx)("td",{children:(0,y.jsx)(we,{email:t.email,name:t.name})}),(0,y.jsx)("td",{children:(0,y.jsx)($e.Z,{isDropdownToggleShown:i,currentSelectedOption:u,options:this.statusOptions,selectOption:this.updateStatus,toggleItemFreezed:this.props.toggleItemFreezed})}),(0,y.jsx)("td",{children:(0,y.jsx)($e.Z,{isDropdownToggleShown:i,currentSelectedOption:p,options:this.membershipOptions,selectOption:this.updateMembership,toggleItemFreezed:this.props.toggleItemFreezed})}),(0,y.jsx)("td",{children:"".concat(f.c.bytesToSize(t.quota_usage)," / ").concat(t.quota_total>0?f.c.bytesToSize(t.quota_total):"--")}),(0,y.jsxs)("td",{children:[L()(t.create_time).format("YYYY-MM-DD HH:mm:ss")," / ",t.last_login?L()(t.last_login).fromNow():"--"]}),(0,y.jsx)("td",{children:r&&t.email!=m.b6&&(0,y.jsx)(Je.Z,{operations:["Delete","Reset Password"],translateOperations:this.translateOperations,onMenuItemClick:this.onMenuItemClick,onFreezedItem:this.props.onFreezedItem,onUnfreezedItem:this.onUnfreezedItem})})]}),s&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Delete Member"),message:c,executeOperation:this.deleteUser,confirmBtnText:(0,m.ih)("Delete"),toggleDialog:this.toggleDeleteDialog}),a&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Reset Password"),message:h,executeOperation:this.resetPassword,confirmBtnText:(0,m.ih)("Reset"),toggleDialog:this.toggleResetPasswordDialog})]})}}]),n}(l.Component),Qi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggleAddUserDialog=function(){i.setState({isAddUserDialogOpen:!i.state.isAddUserDialogOpen})},i.addUser=function(e){var t=e.email,n=e.name,r=e.password;I.I.sysAdminAddOrgUser(i.props.orgID,t,n,r).then((function(e){var t=i.state.userList;t.unshift(e.data),i.setState({userList:t})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.deleteUser=function(e,t){I.I.sysAdminDeleteOrgUser(e,t).then((function(e){var n=i.state.userList.filter((function(e){return e.email!=t}));i.setState({userList:n}),P.Z.success((0,m.ih)("Successfully deleted 1 item."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.updateStatus=function(e,t){var n="active"==t;I.I.sysAdminUpdateOrgUser(i.props.orgID,e,"active",n).then((function(t){var n=i.state.userList.map((function(n){return n.email==e&&(n.active=t.data.active),n}));i.setState({userList:n})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.updateMembership=function(e,t){var n="Admin"==t;I.I.sysAdminUpdateOrgUser(i.props.orgID,e,"is_org_staff",n).then((function(t){var n=i.state.userList.map((function(n){return n.email==e&&(n.is_org_staff=t.data.is_org_staff),n}));i.setState({userList:n})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.state={loading:!0,errorMsg:"",orgName:"",userList:[],isAddUserDialogOpen:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;I.I.sysAdminGetOrg(this.props.orgID).then((function(t){e.setState({orgName:t.data.org_name})})),I.I.sysAdminListOrgUsers(this.props.orgID).then((function(t){e.setState({loading:!1,userList:t.data.users})})).catch((function(t){e.setState({loading:!1,errorMsg:f.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){var e=this.state,t=e.isAddUserDialogOpen,n=e.orgName;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)((0,i.Z)({},this.props),{},{children:(0,y.jsx)(w.Z,{className:"btn btn-secondary operation-item",onClick:this.toggleAddUserDialog,children:(0,m.ih)("Add Member")})})),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Hi,{currentItem:"users",orgID:this.props.orgID,orgName:n}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(Gi,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.userList,updateStatus:this.updateStatus,updateMembership:this.updateMembership,deleteUser:this.deleteUser})})]})}),t&&(0,y.jsx)(Ve,{addUser:this.addUser,toggleDialog:this.toggleAddUserDialog})]})}}]),n}(l.Component),Ki=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){return(0,r.Z)(this,n),t.call(this,e)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.items;if(n)return(0,y.jsx)(Z.Z,{});if(i)return(0,y.jsx)("p",{className:"error text-center mt-4",children:i});var s=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No groups")})}),a=(0,y.jsx)(l.Fragment,{children:(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"30%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"30%",children:(0,m.ih)("Creator")}),(0,y.jsx)("th",{width:"30%",children:(0,m.ih)("Created At")}),(0,y.jsx)("th",{width:"10%"})]})}),(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(Xi,{item:t,deleteGroup:e.props.deleteGroup},n)}))})]})});return r.length?a:s}}]),n}(l.Component),Xi=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseEnter=function(){i.setState({isOpIconShown:!0})},i.handleMouseLeave=function(){i.setState({isOpIconShown:!1})},i.toggleDeleteDialog=function(e){e&&e.preventDefault(),i.setState({isDeleteDialogOpen:!i.state.isDeleteDialogOpen})},i.deleteGroup=function(){i.toggleDeleteDialog(),i.props.deleteGroup(i.props.item.group_id)},i.state={isOpIconShown:!1,isDeleteDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item,t=this.state,n=t.isOpIconShown,i=t.isDeleteDialogOpen,r=''+f.c.HTMLescape(e.group_name)+"",s=(0,m.ih)("Are you sure you want to delete {placeholder} ?").replace("{placeholder}",r),a=0==e.parent_group_id?"".concat(m.ze,"sys/groups/").concat(e.group_id,"/libraries/"):"".concat(m.ze,"sys/departments/").concat(e.group_id,"/");return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,children:[(0,y.jsx)("td",{children:(0,y.jsx)("a",{href:a,children:e.group_name})}),(0,y.jsx)("td",{children:(0,y.jsx)(we,{email:e.creator_email,name:e.creator_name})}),(0,y.jsx)("td",{children:L()(e.created_at).format("YYYY-MM-DD HH:mm:ss")}),(0,y.jsx)("td",{children:(0,y.jsx)("a",{href:"#",className:"action-icon sf2-icon-delete ".concat(n?"":"invisible"),title:(0,m.ih)("Delete"),onClick:this.toggleDeleteDialog})})]}),i&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Delete Group"),message:s,executeOperation:this.deleteGroup,confirmBtnText:(0,m.ih)("Delete"),toggleDialog:this.toggleDeleteDialog})]})}}]),n}(l.Component),$i=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).deleteGroup=function(e){I.I.sysAdminDismissGroupByID(e).then((function(t){var n=i.state.groupList.filter((function(t){return t.group_id!=e}));i.setState({groupList:n}),P.Z.success((0,m.ih)("Successfully deleted 1 item."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.state={loading:!0,errorMsg:"",orgName:"",groupList:[]},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;I.I.sysAdminGetOrg(this.props.orgID).then((function(t){e.setState({orgName:t.data.org_name})})),I.I.sysAdminListOrgGroups(this.props.orgID).then((function(t){e.setState({loading:!1,groupList:t.data.group_list})})).catch((function(t){e.setState({loading:!1,errorMsg:f.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Hi,{currentItem:"groups",orgID:this.props.orgID,orgName:this.state.orgName}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(Ki,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.groupList,deleteGroup:this.deleteGroup})})]})})]})}}]),n}(l.Component),Ji=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){return(0,r.Z)(this,n),t.apply(this,arguments)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.items;if(n)return(0,y.jsx)(Z.Z,{});if(i)return(0,y.jsx)("p",{className:"error text-center mt-4",children:i});var s=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No libraries")})}),a=(0,y.jsx)(l.Fragment,{children:(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"5%"}),(0,y.jsx)("th",{width:"30%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"35%",children:(0,m.ih)("ID")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Owner")}),(0,y.jsx)("th",{width:"10%"})]})}),(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(er,{item:t,deleteRepo:e.props.deleteRepo},n)}))})]})});return r.length?a:s}}]),n}(l.Component),er=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseEnter=function(){i.setState({isOpIconShown:!0})},i.handleMouseLeave=function(){i.setState({isOpIconShown:!1})},i.toggleDeleteDialog=function(e){e&&e.preventDefault(),i.setState({isDeleteDialogOpen:!i.state.isDeleteDialogOpen})},i.deleteRepo=function(){i.props.deleteRepo(i.props.item.repo_id)},i.state={isOpIconShown:!1,isDeleteDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item,t=this.state,n=t.isOpIconShown,i=t.isDeleteDialogOpen,r=f.c.getLibIconUrl(e),s=f.c.getLibIconTitle(e),a=''+f.c.HTMLescape(e.repo_name)+"",o=(0,m.ih)("Are you sure you want to delete {placeholder} ?").replace("{placeholder}",a);return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,children:[(0,y.jsx)("td",{children:(0,y.jsx)("img",{src:r,title:s,alt:s,width:"24"})}),(0,y.jsx)("td",{children:e.repo_name}),(0,y.jsx)("td",{children:e.repo_id}),(0,y.jsx)("td",{children:e.owner_email?-1==e.owner_email.indexOf("@seafile_group")?(0,y.jsx)(we,{email:e.owner_email,name:e.owner_name}):e.owner_name:"--"}),(0,y.jsx)("td",{children:(0,y.jsx)("a",{href:"#",className:"action-icon sf2-icon-delete ".concat(n?"":"invisible"),title:(0,m.ih)("Delete"),onClick:this.toggleDeleteDialog})})]}),i&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Delete Library"),message:o,executeOperation:this.deleteRepo,confirmBtnText:(0,m.ih)("Delete"),toggleDialog:this.toggleDeleteDialog})]})}}]),n}(l.Component),tr=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).deleteRepo=function(e){I.I.sysAdminDeleteRepo(e).then((function(t){var n=i.state.repoList.filter((function(t){return t.repo_id!=e}));i.setState({repoList:n}),P.Z.success((0,m.ih)("Successfully deleted 1 item."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.state={loading:!0,errorMsg:"",orgName:"",repoList:[]},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;I.I.sysAdminGetOrg(this.props.orgID).then((function(t){e.setState({orgName:t.data.org_name})})),I.I.sysAdminListOrgRepos(this.props.orgID).then((function(t){e.setState({loading:!1,repoList:t.data.repo_list})})).catch((function(t){e.setState({loading:!1,errorMsg:f.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Hi,{currentItem:"repos",orgID:this.props.orgID,orgName:this.state.orgName}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(Ji,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.repoList,deleteRepo:this.deleteRepo})})]})})]})}}]),n}(l.Component),nr=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleChange=function(e){var t=e.target.value;i.setState({value:t,isSubmitBtnActive:""!=t.trim()})},i.handleSubmit=function(){i.toggle(),i.props.addInstitution(i.state.value.trim())},i.toggle=function(){i.props.toggle()},i.state={value:"",isSubmitBtnActive:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.toggle,children:[(0,y.jsx)(ke.Z,{toggle:this.toggle,children:(0,m.ih)("Add institution")}),(0,y.jsx)(_e.Z,{children:(0,y.jsxs)(Ne.Z,{children:[(0,y.jsx)("p",{children:(0,m.ih)("Name")}),(0,y.jsx)(Me.Z,{children:(0,y.jsx)(te.Z,{value:this.state.value,onChange:this.handleChange})})]})}),(0,y.jsx)(Oe.Z,{children:(0,y.jsx)(w.Z,{color:"primary",onClick:this.handleSubmit,disabled:!this.state.isSubmitBtnActive,children:(0,m.ih)("Submit")})})]})}}]),n}(l.Component),ir=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getPreviousPage=function(){i.props.getInstitutionsByPage(i.props.currentPage-1)},i.getNextPage=function(){i.props.getInstitutionsByPage(i.props.currentPage+1)},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.items,s=t.perPage,a=t.currentPage,o=t.hasNextPage;if(n)return(0,y.jsx)(Z.Z,{});if(i)return(0,y.jsx)("p",{className:"error text-center mt-4",children:i});var c=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No institutions")})}),h=(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"75%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Created At")}),(0,y.jsx)("th",{width:"5%"})]})}),(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(rr,{item:t,deleteInstitution:e.props.deleteInstitution},n)}))})]}),(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPage,gotoNextPage:this.getNextPage,currentPage:a,hasNextPage:o,curPerPage:s,resetPerPage:this.props.resetPerPage})]});return r.length?h:c}}]),n}(l.Component),rr=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseEnter=function(){i.setState({isOpIconShown:!0})},i.handleMouseLeave=function(){i.setState({isOpIconShown:!1})},i.toggleDeleteDialog=function(e){e&&e.preventDefault(),i.setState({isDeleteDialogOpen:!i.state.isDeleteDialogOpen})},i.deleteInstitution=function(){i.props.deleteInstitution(i.props.item.id)},i.state={isOpIconShown:!1,isDeleteDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item,t=this.state,n=t.isOpIconShown,i=t.isDeleteDialogOpen,r=''+f.c.HTMLescape(e.name)+"",s=(0,m.ih)("Are you sure you want to delete {placeholder} ?").replace("{placeholder}",r);return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,children:[(0,y.jsx)("td",{children:(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/institutions/").concat(e.id,"/info/"),children:e.name})}),(0,y.jsx)("td",{children:L()(e.ctime).fromNow()}),(0,y.jsx)("td",{children:(0,y.jsx)("a",{href:"#",className:"action-icon sf2-icon-delete ".concat(n?"":"invisible"),title:(0,m.ih)("Delete"),onClick:this.toggleDeleteDialog})})]}),i&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Delete Institution"),message:s,executeOperation:this.deleteInstitution,confirmBtnText:(0,m.ih)("Delete"),toggleDialog:this.toggleDeleteDialog})]})}}]),n}(l.Component),sr=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getInstitutionsByPage=function(e){var t=i.state.perPage;I.I.sysAdminListInstitutions(e,t).then((function(n){i.setState({loading:!1,institutionList:n.data.institution_list,currentPage:e,hasNextPage:f.c.hasNextPage(e,t,n.data.total_count)})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){return i.getInstitutionsByPage(i.initPage)}))},i.toggleAddInstitutionDialog=function(){i.setState({isAddInstitutionDialogOpen:!i.state.isAddInstitutionDialogOpen})},i.addInstitution=function(e){I.I.sysAdminAddInstitution(e).then((function(e){var t=i.state.institutionList;t.push(e.data),i.setState({institutionList:t})})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.deleteInstitution=function(e){I.I.sysAdminDeleteInstitution(e).then((function(t){var n=i.state.institutionList.filter((function(t){return t.id!=e}));i.setState({institutionList:n}),P.Z.success((0,m.ih)("Successfully deleted 1 item."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.state={loading:!0,errorMsg:"",institutionList:[],perPage:25,currentPage:1,hasNextPage:!1,isAddInstitutionDialogOpen:!1},i.initPage=1,i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=n.perPage;this.setState({perPage:parseInt(t.get("per_page")||r),currentPage:parseInt(t.get("page")||i)},(function(){e.getInstitutionsByPage(e.state.currentPage)}))}},{key:"render",value:function(){var e=this.state,t=e.isAddInstitutionDialogOpen,n=e.hasNextPage,r=e.currentPage,s=e.perPage;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)((0,i.Z)({},this.props),{},{children:(0,y.jsx)(w.Z,{className:"btn btn-secondary operation-item",onClick:this.toggleAddInstitutionDialog,children:(0,m.ih)("Add Institution")})})),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)("div",{className:"cur-view-path",children:(0,y.jsx)("h3",{className:"sf-heading",children:(0,m.ih)("Institutions")})}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(ir,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.institutionList,deleteInstitution:this.deleteInstitution,currentPage:r,perPage:s,hasNextPage:n,getInstitutionsByPage:this.getInstitutionsByPage,resetPerPage:this.resetPerPage})})]})}),t&&(0,y.jsx)(nr,{addInstitution:this.addInstitution,toggle:this.toggleAddInstitutionDialog})]})}}]),n}(l.Component),ar=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).navItems=[{name:"info",urlPart:"info",text:(0,m.ih)("Info")},{name:"members",urlPart:"members",text:(0,m.ih)("Members")},{name:"admins",urlPart:"admins",text:(0,m.ih)("Admins")}],i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.currentItem,n=e.institutionID,i=e.institutionName;return(0,y.jsxs)("div",{children:[(0,y.jsx)("div",{className:"cur-view-path",children:(0,y.jsxs)("h3",{className:"sf-heading",children:[(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/institutions/"),children:(0,m.ih)("Institutions")})," / ",i]})}),(0,y.jsx)("ul",{className:"nav border-bottom mx-4",children:this.navItems.map((function(e,i){return(0,y.jsx)("li",{className:"nav-item mr-2",children:(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/institutions/").concat(n,"/").concat(e.urlPart,"/"),className:"nav-link ".concat(t==e.name?" active":""),children:e.text})},i)}))})]})}}]),n}(l.Component),or=ar,lr=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggleSetQuotaDialog=function(){i.setState({isSetQuotaDialogOpen:!i.state.isSetQuotaDialogOpen})},i.showEditIcon=function(e){return(0,y.jsx)("span",{title:(0,m.ih)("Edit"),className:"fa fa-pencil-alt attr-action-icon",onClick:e})},i.state={isSetQuotaDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.loading,n=e.errorMsg,i=e.institutionInfo;if(t)return(0,y.jsx)(Z.Z,{});if(n)return(0,y.jsx)("p",{className:"error text-center",children:n});var r=i.name,s=i.user_count,a=i.quota_total,o=i.quota_used,c=this.state.isSetQuotaDialogOpen;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("dl",{className:"m-0",children:[(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Name")}),(0,y.jsx)("dd",{className:"info-item-content",children:r}),(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Number of members")}),(0,y.jsx)("dd",{className:"info-item-content",children:s}),(0,y.jsx)("dt",{className:"info-item-heading",children:(0,m.ih)("Space Used")}),(0,y.jsxs)("dd",{className:"info-item-content",children:["".concat(f.c.bytesToSize(o)," / ").concat(a>0?f.c.bytesToSize(a):"--"),this.showEditIcon(this.toggleSetQuotaDialog)]})]}),c&&(0,y.jsx)(Te,{updateQuota:this.props.updateQuota,toggle:this.toggleSetQuotaDialog})]})}}]),n}(l.Component),cr=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).updateQuota=function(e){I.I.sysAdminUpdateInstitution(i.props.institutionID,e).then((function(e){var t=Object.assign(i.state.institutionInfo,{quota_total:e.data.quota_total});i.setState({institutionInfo:t}),P.Z.success((0,m.ih)("Successfully set quota."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.state={loading:!0,errorMsg:"",institutionInfo:{}},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;I.I.sysAdminGetInstitution(this.props.institutionID).then((function(t){e.setState({loading:!1,institutionInfo:t.data})})).catch((function(t){e.setState({loading:!1,errorMsg:f.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){var e=this.state.institutionInfo;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(or,{currentItem:"info",institutionID:this.props.institutionID,institutionName:e.name}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(lr,{loading:this.state.loading,errorMsg:this.state.errorMsg,institutionInfo:this.state.institutionInfo,updateQuota:this.updateQuota})})]})})]})}}]),n}(l.Component),hr=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleSelectChange=function(e){i.setState({selectedOption:e})},i.handleSubmit=function(){if(i.state.selectedOption){var e=i.state.selectedOption.map((function(e){return e.email}));i.props.addUser(e)}},i.state={selectedOption:[]},i}return(0,s.Z)(n,[{key:"render",value:function(){return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.props.toggle,children:[(0,y.jsx)(ke.Z,{toggle:this.props.toggle,children:(0,m.ih)("Add Member")}),(0,y.jsx)(_e.Z,{children:(0,y.jsx)(He.Z,{placeholder:(0,m.ih)("Search users"),onSelectChange:this.handleSelectChange,isMulti:!0,className:"org-add-member-select"})}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"primary",onClick:this.handleSubmit,children:(0,m.ih)("Submit")}),(0,y.jsx)(w.Z,{color:"secondary",onClick:this.props.toggle,children:(0,m.ih)("Cancel")})]})]})}}]),n}(l.Component),dr=hr,ur=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).onFreezedItem=function(){i.setState({isItemFreezed:!0})},i.onUnfreezedItem=function(){i.setState({isItemFreezed:!1})},i.getPreviousPage=function(){i.props.getInstitutionUsersByPage(i.props.currentPage-1)},i.getNextPage=function(){i.props.getInstitutionUsersByPage(i.props.currentPage+1)},i.state={isItemFreezed:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.items,s=t.perPage,a=t.currentPage,o=t.hasNextPage;if(n)return(0,y.jsx)(Z.Z,{});if(i)return(0,y.jsx)("p",{className:"error text-center mt-4",children:i});var c=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No members")})}),h=(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"25%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"10%",children:(0,m.ih)("Status")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Space Used")}),(0,y.jsxs)("th",{width:"40%",children:[(0,m.ih)("Created At")," / ",(0,m.ih)("Last Login")]}),(0,y.jsx)("th",{width:"5%"})]})}),(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(gr,{item:t,isItemFreezed:e.state.isItemFreezed,onFreezedItem:e.onFreezedItem,onUnfreezedItem:e.onUnfreezedItem,setAdmin:e.props.setAdmin,deleteUser:e.props.deleteUser},n)}))})]}),(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPage,gotoNextPage:this.getNextPage,currentPage:a,hasNextPage:o,curPerPage:s,resetPerPage:this.props.resetPerPage})]});return r.length?h:c}}]),n}(l.Component),gr=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseEnter=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!0,highlight:!0})},i.handleMouseLeave=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!1,highlight:!1})},i.onUnfreezedItem=function(){i.setState({highlight:!1,isOpIconShow:!1}),i.props.onUnfreezedItem()},i.toggleSetAdminDialog=function(e){e&&e.preventDefault(),i.setState({isSetAdminDialogOpen:!i.state.isSetAdminDialogOpen})},i.setAdmin=function(){i.props.setAdmin(i.props.item.email)},i.onMenuItemClick=function(e){switch(e){case"Delete":i.props.deleteUser(i.props.item.email);break;case"Set Admin":i.toggleSetAdminDialog()}},i.getOperations=function(){var e=[];return i.props.item.is_institution_admin||e.push("Set Admin"),e.push("Delete"),e},i.translateOperations=function(e){var t="";switch(e){case"Delete":t=(0,m.ih)("Delete");break;case"Set Admin":t=(0,m.ih)("Set Admin")}return t},i.state={isOpIconShown:!1,highlight:!1,isSetAdminDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item,t=this.state,n=t.isOpIconShown,i=t.isSetAdminDialogOpen,r=''+f.c.HTMLescape(e.name)+"",s=(0,m.ih)("Are you sure you want to set {placeholder} as Admin?").replace("{placeholder}",r);return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{className:this.state.highlight?"tr-highlight":"",onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,children:[(0,y.jsx)("td",{children:(0,y.jsx)(we,{email:e.email,name:e.name})}),(0,y.jsx)("td",{children:e.is_active?(0,m.ih)("Active"):(0,m.ih)("Inactive")}),(0,y.jsx)("td",{children:"".concat(f.c.bytesToSize(e.quota_usage)," / ").concat(e.quota_total>0?f.c.bytesToSize(e.quota_total):"--")}),(0,y.jsxs)("td",{children:[L()(e.create_time).format("YYYY-MM-DD HH:mm:ss")," / ",e.last_login?L()(e.last_login).fromNow():"--"]}),(0,y.jsx)("td",{children:n&&(0,y.jsx)(Je.Z,{operations:this.getOperations(),translateOperations:this.translateOperations,onMenuItemClick:this.onMenuItemClick,onFreezedItem:this.props.onFreezedItem,onUnfreezedItem:this.onUnfreezedItem})})]}),i&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Set Admin"),message:s,executeOperation:this.setAdmin,toggleDialog:this.toggleSetAdminDialog,confirmBtnText:(0,m.ih)("Set Admin")})]})}}]),n}(l.Component),pr=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getInstitutionUsersByPage=function(e){var t=i.state.perPage;I.I.sysAdminListInstitutionUsers(i.props.institutionID,e,t).then((function(n){i.setState({loading:!1,userList:n.data.user_list,currentPage:e,hasNextPage:f.c.hasNextPage(e,t,n.data.total_count)})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.setAdmin=function(e){I.I.sysAdminUpdateInstitutionUser(i.props.institutionID,e,!0).then((function(t){var n=i.state.userList.map((function(t){return t.email==e&&(t.is_institution_admin=!0),t}));i.setState({userList:n}),P.Z.success((0,m.ih)("Success"))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.toggleAddUserDialog=function(){i.setState({isAddUserDialogOpen:!i.state.isAddUserDialogOpen})},i.resetPerPage=function(e){i.setState({perPage:e},(function(){return i.getInstitutionUsersByPage(i.initPage)}))},i.addUser=function(e){I.I.sysAdminAddInstitutionUserBatch(i.props.institutionID,e).then((function(e){i.toggleAddUserDialog();var t=e.data.success,n=e.data.failed;if(t.length){var r=i.state.userList.concat(t);i.setState({userList:r})}n.forEach((function(e){P.Z.danger(e.error_msg)}))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.deleteUser=function(e){I.I.sysAdminDeleteInstitutionUser(i.props.institutionID,e).then((function(t){var n=i.state.userList.filter((function(t){return t.email!=e}));i.setState({userList:n}),P.Z.success("success")})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.state={loading:!0,errorMsg:"",institutionName:"",userList:[],perPage:25,currentPage:1,hasNextPage:!1,isAddUserDialogOpen:!1},i.initPage=1,i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;I.I.sysAdminGetInstitution(this.props.institutionID).then((function(t){e.setState({institutionName:t.data.name})}));var t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=n.perPage;this.setState({perPage:parseInt(t.get("per_page")||r),currentPage:parseInt(t.get("page")||i)},(function(){e.getInstitutionUsersByPage(e.state.currentPage)}))}},{key:"render",value:function(){var e=this.state,t=e.isAddUserDialogOpen,n=e.institutionName,r=e.hasNextPage,s=e.currentPage,a=e.perPage;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)((0,i.Z)({},this.props),{},{children:(0,y.jsx)(w.Z,{className:"btn btn-secondary operation-item",onClick:this.toggleAddUserDialog,children:(0,m.ih)("Add Member")})})),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(or,{currentItem:"members",institutionID:this.props.institutionID,institutionName:n}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(ur,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.userList,setAdmin:this.setAdmin,deleteUser:this.deleteUser,currentPage:s,perPage:a,hasNextPage:r,getInstitutionUsersByPage:this.getInstitutionUsersByPage,resetPerPage:this.resetPerPage})})]})}),t&&(0,y.jsx)(dr,{addUser:this.addUser,toggle:this.toggleAddUserDialog})]})}}]),n}(l.Component),mr=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).onFreezedItem=function(){i.setState({isItemFreezed:!0})},i.onUnfreezedItem=function(){i.setState({isItemFreezed:!1})},i.state={isItemFreezed:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.items;if(n)return(0,y.jsx)(Z.Z,{});if(i)return(0,y.jsx)("p",{className:"error text-center mt-4",children:i});var s=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No admins")})}),a=(0,y.jsx)(l.Fragment,{children:(0,y.jsxs)("table",{children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"25%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"10%",children:(0,m.ih)("Status")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Space Used")}),(0,y.jsxs)("th",{width:"40%",children:[(0,m.ih)("Created At")," / ",(0,m.ih)("Last Login")]}),(0,y.jsx)("th",{width:"5%"})]})}),(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(fr,{item:t,isItemFreezed:e.state.isItemFreezed,onFreezedItem:e.onFreezedItem,onUnfreezedItem:e.onUnfreezedItem,revokeAdmin:e.props.revokeAdmin,deleteUser:e.props.deleteUser},n)}))})]})});return r.length?a:s}}]),n}(l.Component),fr=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseEnter=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!0,highlight:!0})},i.handleMouseLeave=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!1,highlight:!1})},i.onUnfreezedItem=function(){i.setState({highlight:!1,isOpIconShow:!1}),i.props.onUnfreezedItem()},i.toggleRevokeAdminDialog=function(e){e&&e.preventDefault(),i.setState({isRevokeAdminDialogOpen:!i.state.isRevokeAdminDialogOpen})},i.revokeAdmin=function(){i.props.revokeAdmin(i.props.item)},i.onMenuItemClick=function(e){if("Revoke Admin"===e)i.toggleRevokeAdminDialog()},i.translateOperations=function(e){var t="";if("Revoke Admin"===e)t=(0,m.ih)("Revoke Admin");return t},i.state={isOpIconShown:!1,highlight:!1,isRevokeAdminDialogOpen:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item,t=this.state,n=t.isOpIconShown,i=t.isRevokeAdminDialogOpen,r=''+f.c.HTMLescape(e.name)+"",s=(0,m.ih)("Are you sure you want to revoke the admin permission of {placeholder} ?").replace("{placeholder}",r);return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{className:this.state.highlight?"tr-highlight":"",onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,children:[(0,y.jsx)("td",{children:(0,y.jsx)(we,{email:e.email,name:e.name})}),(0,y.jsx)("td",{children:e.is_active?(0,m.ih)("Active"):(0,m.ih)("Inactive")}),(0,y.jsx)("td",{children:"".concat(f.c.bytesToSize(e.quota_usage)," / ").concat(e.quota_total>0?f.c.bytesToSize(e.quota_total):"--")}),(0,y.jsxs)("td",{children:[L()(e.create_time).format("YYYY-MM-DD HH:mm:ss")," / ",e.last_login?L()(e.last_login).fromNow():"--"]}),(0,y.jsx)("td",{children:n&&(0,y.jsx)(Je.Z,{operations:["Revoke Admin"],translateOperations:this.translateOperations,onMenuItemClick:this.onMenuItemClick,onFreezedItem:this.props.onFreezedItem,onUnfreezedItem:this.onUnfreezedItem})})]}),i&&(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Revoke Admin"),message:s,executeOperation:this.revokeAdmin,confirmBtnText:(0,m.ih)("Revoke"),toggleDialog:this.toggleRevokeAdminDialog})]})}}]),n}(l.Component),vr=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).revokeAdmin=function(e){var t=e.email,n=e.name;I.I.sysAdminUpdateInstitutionUser(i.props.institutionID,t,!1).then((function(e){var r=i.state.userList.filter((function(e){return e.email!=t}));i.setState({userList:r}),P.Z.success((0,m.ih)("Successfully revoked the admin permission of {placeholder}.").replace("{placeholder}",n))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.deleteUser=function(e){I.I.sysAdminDeleteInstitutionUser(i.props.institutionID,e).then((function(t){var n=i.state.userList.filter((function(t){return t.email!=e}));i.setState({userList:n}),P.Z.success("success")})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.state={loading:!0,errorMsg:"",institutionName:"",userList:[],isAddUserDialogOpen:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;I.I.sysAdminGetInstitution(this.props.institutionID).then((function(t){e.setState({institutionName:t.data.name})})),I.I.sysAdminListInstitutionAdmins(this.props.institutionID).then((function(t){e.setState({loading:!1,userList:t.data.user_list})})).catch((function(t){e.setState({loading:!1,errorMsg:f.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){var e=this.state.institutionName;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(or,{currentItem:"admins",institutionID:this.props.institutionID,institutionName:e}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(mr,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:this.state.userList,revokeAdmin:this.revokeAdmin,deleteUser:this.deleteUser})})]})})]})}}]),n}(l.Component),xr=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).navItems=[{name:"loginLogs",urlPart:"logs/login",text:(0,m.ih)("Login")},{name:"fileAccessLogs",urlPart:"logs/file-access",text:(0,m.ih)("File Access")},{name:"fileUpdateLogs",urlPart:"logs/file-update",text:(0,m.ih)("File Update")},{name:"sharePermissionLogs",urlPart:"logs/share-permission",text:(0,m.ih)("Permission")}],i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.currentItem;return(0,y.jsx)("div",{className:"cur-view-path tab-nav-container",children:(0,y.jsx)("ul",{className:"nav",children:this.navItems.map((function(t,n){return(0,y.jsx)("li",{className:"nav-item",children:(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/").concat(t.urlPart,"/"),className:"nav-link".concat(e==t.name?" active":""),children:t.text})},n)}))})})}}]),n}(l.Component),yr=xr,br=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).downloadExcel=function(){if(i.isValidDateStr()){var e=i.state,t=e.startDateStr,n=e.endDateStr,r=m.ze;switch(i.props.logType){case"login":r+="sys/loginadmin/export-excel/";break;case"fileAccess":r+="sys/log/fileaudit/export-excel/";break;case"fileUpdate":r+="sys/log/fileupdate/export-excel/";break;case"sharePermission":r+="sys/log/permaudit/export-excel/"}location.href=r+"?start="+t+"&end="+n,i.props.toggle()}},i.isValidDateStr=function(){var e=i.state,t=e.startDateStr,n=e.endDateStr;return!!(L()(t,"YYYY-MM-DD",!0).isValid()&&L()(n,"YYYY-MM-DD",!0).isValid()&&L()(t).isBefore(n))||(i.setState({errMsg:(0,m.ih)("Date Invalid.")}),!1)},i.handleStartChange=function(e){var t=e.target.value.trim();i.setState({startDateStr:t,errMsg:""})},i.handleEndChange=function(e){var t=e.target.value.trim();i.setState({endDateStr:t,errMsg:""})},i.state={loading:!0,startDateStr:"",endDateStr:"",errMsg:""},i}return(0,s.Z)(n,[{key:"render",value:function(){return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.props.toggle,autoFocus:!1,children:[(0,y.jsx)(ke.Z,{toggle:this.props.toggle,children:(0,m.ih)("Choose date")}),(0,y.jsxs)(_e.Z,{children:[(0,y.jsxs)(Me.Z,{children:[(0,y.jsx)(Ue.Z,{children:(0,m.ih)("Start date")}),(0,y.jsx)(te.Z,{value:this.state.startDateStr,onChange:this.handleStartChange,placeholder:"yyyy-mm-dd",autoFocus:!0})]}),(0,y.jsxs)(Me.Z,{children:[(0,y.jsx)(Ue.Z,{children:(0,m.ih)("End date")}),(0,y.jsx)(te.Z,{value:this.state.endDateStr,onChange:this.handleEndChange,placeholder:"yyyy-mm-dd"})]}),this.state.errMsg&&(0,y.jsx)(Fe.Z,{className:"mt-2",color:"danger",children:(0,m.ih)(this.state.errMsg)})]}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.props.toggle,children:(0,m.ih)("Cancel")}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.downloadExcel,children:(0,m.ih)("Submit")})]})]})}}]),n}(l.Component),jr=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){var e;(0,r.Z)(this,n);for(var i=arguments.length,s=new Array(i),a=0;a0?t.avatar.substring(0,t.avatar.length-1)+"100":m.ze+"media/avatars/default.png",(0,y.jsxs)("tr",{children:[(0,y.jsx)("td",{children:!t.email&&(0,y.jsx)("input",{type:"checkbox",className:"vam",onChange:function(){return e.props.onUserChecked(t)},checked:t.userid in n?"checked":""})}),(0,y.jsx)("td",{children:(0,y.jsx)("img",{className:"avatar",src:s,alt:""})}),(0,y.jsx)("td",{children:t.name}),(0,y.jsx)("td",{children:t.mobile}),(0,y.jsx)("td",{children:t.contact_email}),(0,y.jsx)("td",{children:t.email&&(0,y.jsx)("i",{className:"sf2-icon-tick"})})]},i.toString()+t.userid)}));return(0,y.jsxs)("div",{className:"dir-content-main",children:[r&&(0,y.jsx)(Z.Z,{}),!r&&this.props.membersList.length>0&&(0,y.jsxs)(ns.Z,{hover:!0,children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"5%",children:s.length>0&&(0,y.jsx)("input",{type:"checkbox",className:"vam",checked:this.props.isCheckedAll,onChange:function(){return e.props.onAllUsersChecked()}})}),(0,y.jsx)("th",{width:"10%"}),(0,y.jsx)("th",{width:"20%",children:"\u540d\u79f0"}),(0,y.jsx)("th",{width:"20%",children:"\u624b\u673a\u53f7"}),(0,y.jsx)("th",{width:"30%",children:"\u90ae\u7bb1"}),(0,y.jsx)("th",{width:"15%",children:"\u5df2\u6dfb\u52a0"})]})}),(0,y.jsx)("tbody",{children:a})]}),!r&&0===this.props.membersList.length&&(0,y.jsxs)("div",{className:"message empty-tip text-center",children:[(0,y.jsx)("img",{src:"".concat(m.ze,"media/img/member-list-empty-2x.png"),alt:""}),(0,y.jsx)("h4",{children:"\u6210\u5458\u5217\u8868\u4e3a\u7a7a"})]})]})}}]),n}(l.Component),rs=n(81694),ss=n.n(rs),as=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggleChildren=function(e){e.preventDefault(),e.stopPropagation(),i.setState({isChildrenShow:!i.state.isChildrenShow})},i.dropdownToggle=function(e){e.stopPropagation(),i.setState({dropdownOpen:!i.state.dropdownOpen})},i.onMouseEnter=function(){i.setState({active:!0})},i.onMouseLeave=function(){i.state.dropdownOpen||i.setState({active:!1})},i.importDepartmentDialogToggle=function(e){i.setState({active:!1}),i.props.importDepartmentDialogToggle(e)},i.renderTreeNodes=function(e){if(e.length>0)return e.map((function(e){return(0,y.jsx)(n,{department:e,isChildrenShow:i.state.isChildrenShow,onChangeDepartment:i.props.onChangeDepartment,checkedDepartmentId:i.props.checkedDepartmentId,importDepartmentDialogToggle:i.importDepartmentDialogToggle},e.id)}))},i.changeDept=function(e){var t=i.props,n=t.department,r=t.checkedDepartmentId;i.props.onChangeDepartment(e),r!==n.id||i.state.isChildrenShow||i.setState({isChildrenShow:!0})},i.state={isChildrenShow:!1,dropdownOpen:!1,active:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){0===this.props.index&&(this.setState({isChildrenShow:!0}),this.props.onChangeDepartment(this.props.department.id))}},{key:"render",value:function(){var e=this,t=this.props,n=t.isChildrenShow,i=t.department,r=t.checkedDepartmentId,s=ss()({"folder-toggle-icon fa fa-caret-down":i.children&&this.state.isChildrenShow,"folder-toggle-icon fa fa-caret-right":i.children&&!this.state.isChildrenShow}),a=ss()({"tree-node-inner":!0,"tree-node-inner-hover":this.state.active,"tree-node-hight-light":r===i.id});return(0,y.jsxs)(l.Fragment,{children:[n&&(0,y.jsxs)("div",{className:a,onClick:function(){return e.changeDept(i.id)},onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,children:[(0,y.jsx)("span",{className:"tree-node-icon",onClick:function(t){return e.toggleChildren(t)},children:(0,y.jsx)("i",{className:s})}),(0,y.jsx)("span",{className:"tree-node-text",children:i.name}),m._y&&(0,y.jsxs)(wr.Z,{isOpen:this.state.dropdownOpen,toggle:function(t){return e.dropdownToggle(t)},direction:"down",style:this.state.active?{}:{opacity:0},children:[(0,y.jsx)(Ir.Z,{tag:"i",className:"fa fa-ellipsis-v cursor-pointer attr-action-icon",title:(0,m.ih)("More Operations"),"data-toggle":"dropdown","aria-expanded":this.state.dropdownOpen}),(0,y.jsx)(Pr.Z,{className:"drop-list",right:!0,children:(0,y.jsx)(Zr.Z,{onClick:this.importDepartmentDialogToggle.bind(this,i),id:i.id,children:"\u5bfc\u5165\u90e8\u95e8"})})]})]}),this.state.isChildrenShow&&(0,y.jsx)("div",{className:"department-children",children:i.children&&this.renderTreeNodes(i.children)})]})}}]),n}(l.Component),os=as,ls=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){return(0,r.Z)(this,n),t.call(this,e)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props.departmentsTree;return(0,y.jsx)("div",{className:"dir-content-nav",children:(0,y.jsx)("div",{className:"tree-view tree",children:this.props.isTreeLoading?(0,y.jsx)(Z.Z,{}):(0,y.jsx)("div",{className:"tree-node",children:t.length>0&&t.map((function(t,n){return(0,y.jsx)(os,{index:n,department:t,isChildrenShow:!0,onChangeDepartment:e.props.onChangeDepartment,checkedDepartmentId:e.props.checkedDepartmentId,importDepartmentDialogToggle:e.props.importDepartmentDialogToggle},t.id)}))})})})}}]),n}(l.Component),cs=ls,hs=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggle=function(){i.props.importDepartmentDialogToggle(null)},i.handleSubmit=function(){i.props.onImportDepartmentSubmit(),i.setState({isLoading:!0})},i.state={isLoading:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.departmentsCount,n=e.membersCount,i=e.departmentName;return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.toggle,children:[(0,y.jsxs)(ke.Z,{toggle:this.toggle,children:[(0,y.jsx)("span",{children:"\u5bfc\u5165\u90e8\u95e8 "}),(0,y.jsx)("span",{className:"op-target",title:i,children:i})]}),(0,y.jsxs)(_e.Z,{children:[(0,y.jsxs)("p",{children:["\u5c06\u8981\u5bfc\u5165 ",(0,y.jsx)("strong",{children:t})," \u4e2a\u90e8\u95e8\uff0c\u5176\u4e2d\u5305\u62ec ",(0,y.jsx)("strong",{children:n})," \u4e2a\u6210\u5458"]}),this.state.isLoading&&(0,y.jsx)(Z.Z,{})]}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.toggle,children:"\u53d6\u6d88"}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.handleSubmit,children:"\u5bfc\u5165"})]})]})}}]),n}(l.Component),ds=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getDepartmentsTree=function(e){for(var t=[],n=[],i=0;i0&&(e.children=t),-1!==s.indexOf(e.parentid)}))},i.getWorkWeixinDepartmentsList=function(e){I.I.adminListWorkWeixinDepartments(e).then((function(t){if(e)i.setState({importDepartmentChildrenCount:t.data.department.length,importDepartmentMembersCount:i.state.membersTempObj[e].length});else{var n=i.getDepartmentsTree(t.data.department);i.setState({isTreeLoading:!1,departmentsTree:n})}})).catch((function(e){i.handleError(e),i.setState({isTreeLoading:!1,isMembersListLoading:!1}),e.response&&403===e.response.status&&(window.location=m.ze+"sys/useradmin/")}))},i.getWorkWeixinDepartmentMembersList=function(e){i.setState({isMembersListLoading:!0}),I.I.adminListWorkWeixinDepartmentMembers(e,{fetch_child:!0}).then((function(t){var n=i.state.membersTempObj;n[e]=t.data.userlist;var r=i.getCanCheckUserIds(t.data.userlist);i.setState({membersTempObj:n,membersList:t.data.userlist,isMembersListLoading:!1,canCheckUserIds:r})})).catch((function(e){i.setState({isMembersListLoading:!1}),i.handleError(e)}))},i.getCanCheckUserIds=function(e){var t=[];return e.forEach((function(e){e.email||t.push(e.userid)})),t},i.onChangeDepartment=function(e){if(i.setState({newUsersTempObj:{},isCheckedAll:!1,checkedDepartmentId:e}),e in i.state.membersTempObj){var t=i.getCanCheckUserIds(i.state.membersTempObj[e]);i.setState({membersList:i.state.membersTempObj[e],canCheckUserIds:t})}else i.getWorkWeixinDepartmentMembersList(e)},i.onUserChecked=function(e){if(-1!==i.state.canCheckUserIds.indexOf(e.userid)){var t=i.state.newUsersTempObj;e.userid in t?(delete t[e.userid],i.state.isCheckedAll&&i.setState({isCheckedAll:!1})):(t[e.userid]=e,Object.keys(t).length===i.state.canCheckUserIds.length&&i.setState({isCheckedAll:!0})),i.setState({newUsersTempObj:t})}},i.onAllUsersChecked=function(){i.setState({isCheckedAll:!i.state.isCheckedAll},(function(){if(i.state.isCheckedAll){for(var e={},t=i.state.membersList.filter((function(e){return-1!==i.state.canCheckUserIds.indexOf(e.userid)})),n=0;n0?t.avatar:m.ze+"media/avatars/default.png",(0,y.jsxs)("tr",{children:[(0,y.jsx)("td",{children:!t.email&&(0,y.jsx)("input",{type:"checkbox",className:"vam",onChange:function(){return e.props.onUserChecked(t)},checked:t.userid in n?"checked":""})}),(0,y.jsx)("td",{children:(0,y.jsx)("img",{className:"avatar",src:s,alt:""})}),(0,y.jsx)("td",{children:t.name}),(0,y.jsx)("td",{children:t.mobile}),(0,y.jsx)("td",{children:t.contact_email}),(0,y.jsx)("td",{children:t.email&&(0,y.jsx)("i",{className:"sf2-icon-tick"})})]},i.toString()+t.userid)}));return(0,y.jsxs)("div",{className:"dir-content-main",children:[r&&(0,y.jsx)(Z.Z,{}),!r&&this.props.membersList.length>0&&(0,y.jsxs)(ns.Z,{hover:!0,children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"5%",children:s.length>0&&(0,y.jsx)("input",{type:"checkbox",className:"vam",checked:this.props.isCheckedAll,onChange:function(){return e.props.onAllUsersChecked()}})}),(0,y.jsx)("th",{width:"10%"}),(0,y.jsx)("th",{width:"20%",children:"\u540d\u79f0"}),(0,y.jsx)("th",{width:"20%",children:"\u624b\u673a\u53f7"}),(0,y.jsx)("th",{width:"30%",children:"\u90ae\u7bb1"}),(0,y.jsx)("th",{width:"15%",children:"\u5df2\u6dfb\u52a0"})]})}),(0,y.jsx)("tbody",{children:a})]}),!r&&0===this.props.membersList.length&&(0,y.jsxs)("div",{className:"message empty-tip text-center",children:[(0,y.jsx)("img",{src:"".concat(m.ze,"media/img/member-list-empty-2x.png"),alt:""}),(0,y.jsx)("h4",{children:"\u6210\u5458\u5217\u8868\u4e3a\u7a7a"})]})]})}}]),n}(l.Component),gs=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggleChildren=function(e){e.preventDefault(),e.stopPropagation(),i.setState({isChildrenShow:!i.state.isChildrenShow})},i.dropdownToggle=function(e){e.stopPropagation(),i.setState({dropdownOpen:!i.state.dropdownOpen})},i.onMouseEnter=function(){i.setState({active:!0})},i.onMouseLeave=function(){i.state.dropdownOpen||i.setState({active:!1})},i.importDepartmentDialogToggle=function(e){i.setState({active:!1}),i.props.importDepartmentDialogToggle(e)},i.renderTreeNodes=function(e){if(e.length>0)return e.map((function(e){return(0,y.jsx)(n,{department:e,isChildrenShow:i.state.isChildrenShow,onChangeDepartment:i.props.onChangeDepartment,checkedDepartmentId:i.props.checkedDepartmentId,importDepartmentDialogToggle:i.importDepartmentDialogToggle},e.id)}))},i.changeDept=function(e){var t=i.props,n=t.department,r=t.checkedDepartmentId;i.props.onChangeDepartment(e),r!==n.id||i.state.isChildrenShow||i.setState({isChildrenShow:!0})},i.state={isChildrenShow:!1,dropdownOpen:!1,active:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){0===this.props.index&&(this.setState({isChildrenShow:!0}),this.props.onChangeDepartment(this.props.department.id))}},{key:"render",value:function(){var e=this,t=this.props,n=t.isChildrenShow,i=t.department,r=t.checkedDepartmentId,s=ss()({"folder-toggle-icon fa fa-caret-down":i.children&&this.state.isChildrenShow,"folder-toggle-icon fa fa-caret-right":i.children&&!this.state.isChildrenShow}),a=ss()({"tree-node-inner":!0,"tree-node-inner-hover":this.state.active,"tree-node-hight-light":r===i.id});return(0,y.jsxs)(l.Fragment,{children:[n&&(0,y.jsxs)("div",{className:a,onClick:function(){return e.changeDept(i.id)},onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,children:[(0,y.jsx)("span",{className:"tree-node-icon",onClick:function(t){return e.toggleChildren(t)},children:(0,y.jsx)("i",{className:s})}),(0,y.jsx)("span",{className:"tree-node-text",children:i.name}),m._y&&(0,y.jsxs)(wr.Z,{isOpen:this.state.dropdownOpen,toggle:function(t){return e.dropdownToggle(t)},direction:"down",style:this.state.active?{}:{opacity:0},children:[(0,y.jsx)(Ir.Z,{tag:"i",className:"fa fa-ellipsis-v cursor-pointer attr-action-icon",title:(0,m.ih)("More Operations"),"data-toggle":"dropdown","aria-expanded":this.state.dropdownOpen}),(0,y.jsx)(Pr.Z,{className:"drop-list",right:!0,children:(0,y.jsx)(Zr.Z,{onClick:this.importDepartmentDialogToggle.bind(this,i),id:i.id,children:"\u5bfc\u5165\u90e8\u95e8"})})]})]}),this.state.isChildrenShow&&(0,y.jsx)("div",{className:"department-children",children:i.children&&this.renderTreeNodes(i.children)})]})}}]),n}(l.Component),ps=gs,ms=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){return(0,r.Z)(this,n),t.call(this,e)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props.departmentsTree;return(0,y.jsx)("div",{className:"dir-content-nav",children:(0,y.jsx)("div",{className:"tree-view tree",children:this.props.isTreeLoading?(0,y.jsx)(Z.Z,{}):(0,y.jsx)("div",{className:"tree-node",children:t.length>0&&t.map((function(t,n){return(0,y.jsx)(ps,{index:n,department:t,isChildrenShow:!0,onChangeDepartment:e.props.onChangeDepartment,checkedDepartmentId:e.props.checkedDepartmentId,importDepartmentDialogToggle:e.props.importDepartmentDialogToggle},t.id)}))})})})}}]),n}(l.Component),fs=ms,vs=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggle=function(){i.props.importDepartmentDialogToggle(null)},i.handleSubmit=function(){i.props.onImportDepartmentSubmit(),i.setState({isLoading:!0})},i.state={isLoading:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.departmentsCount,n=e.membersCount,i=e.departmentName;return(0,y.jsxs)(u.Z,{isOpen:!0,toggle:this.toggle,children:[(0,y.jsxs)(ke.Z,{toggle:this.toggle,children:[(0,y.jsx)("span",{children:"\u5bfc\u5165\u90e8\u95e8 "}),(0,y.jsx)("span",{className:"op-target",title:i,children:i})]}),(0,y.jsxs)(_e.Z,{children:[(0,y.jsxs)("p",{children:["\u5c06\u8981\u5bfc\u5165 ",(0,y.jsx)("strong",{children:t})," \u4e2a\u90e8\u95e8\uff0c\u5176\u4e2d\u5305\u62ec ",(0,y.jsx)("strong",{children:n})," \u4e2a\u6210\u5458"]}),this.state.isLoading&&(0,y.jsx)(Z.Z,{})]}),(0,y.jsxs)(Oe.Z,{children:[(0,y.jsx)(w.Z,{color:"secondary",onClick:this.toggle,children:"\u53d6\u6d88"}),(0,y.jsx)(w.Z,{color:"primary",onClick:this.handleSubmit,children:"\u5bfc\u5165"})]})]})}}]),n}(l.Component),xs=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getDepartmentsTree=function(e){for(var t=[],n=[],i=0;i0&&(e.children=t),-1!==s.indexOf(e.parentid)}))},i.getDingtalkDepartmentsList=function(e){I.I.adminListDingtalkDepartments(e).then((function(t){if(e)i.setState({importDepartmentChildrenCount:t.data.department.length,importDepartmentMembersCount:i.state.membersTempObj[e].length});else{var n=i.getDepartmentsTree(t.data.department);i.setState({isTreeLoading:!1,departmentsTree:n})}})).catch((function(e){i.handleError(e),i.setState({isTreeLoading:!1,isMembersListLoading:!1}),e.response&&403===e.response.status&&(window.location=m.ze+"sys/useradmin/")}))},i.getDingtalkDepartmentMembersList=function(e){i.setState({isMembersListLoading:!0}),I.I.adminListDingtalkDepartmentMembers(e).then((function(t){var n=i.state.membersTempObj;n[e]=t.data.userlist;var r=i.getCanCheckUserIds(t.data.userlist);i.setState({membersTempObj:n,membersList:t.data.userlist,isMembersListLoading:!1,canCheckUserIds:r})})).catch((function(e){i.setState({isMembersListLoading:!1}),i.handleError(e)}))},i.getCanCheckUserIds=function(e){var t=[];return e.forEach((function(e){e.email||t.push(e.userid)})),t},i.onChangeDepartment=function(e){if(i.setState({newUsersTempObj:{},isCheckedAll:!1,checkedDepartmentId:e}),e in i.state.membersTempObj){var t=i.getCanCheckUserIds(i.state.membersTempObj[e]);i.setState({membersList:i.state.membersTempObj[e],canCheckUserIds:t})}else i.getDingtalkDepartmentMembersList(e)},i.onUserChecked=function(e){if(-1!==i.state.canCheckUserIds.indexOf(e.userid)){var t=i.state.newUsersTempObj;e.userid in t?(delete t[e.userid],i.state.isCheckedAll&&i.setState({isCheckedAll:!1})):(t[e.userid]=e,Object.keys(t).length===i.state.canCheckUserIds.length&&i.setState({isCheckedAll:!0})),i.setState({newUsersTempObj:t})}},i.onAllUsersChecked=function(){i.setState({isCheckedAll:!i.state.isCheckedAll},(function(){if(i.state.isCheckedAll){for(var e={},t=i.state.membersList.filter((function(e){return-1!==i.state.canCheckUserIds.indexOf(e.userid)})),n=0;n|!\[\]\(\S+\)|<\S+>/g,_s=/^/,Ns=/^!\[\]\((\S+)\)/,Ms=/^\[.+\]\(\S+\)/,Cs=/^<\S+>$/,As=function(e){for(var t="",n=e.replace(ks,""),i=0;i=0||e.search(Cs)>=0)t.links.push(e);else{var n=e.match(_s),i=e.match(Ns);n?t.images.push(n[1]):i&&t.images.push(i[1])}})),t}(r);return{previewText:t,images:s.images,links:s.links}}return{previewText:t,images:[],links:[]}},Ls=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(){var e;(0,r.Z)(this,n);for(var i=arguments.length,s=new Array(i),a=0;a'+f.c.HTMLescape(e.name)+"",o=(0,m.ih)("Are you sure you want to delete {placeholder} ?").replace("{placeholder}",a);return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("tr",{onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,children:[(0,y.jsx)("td",{children:e.name}),(0,y.jsx)("td",{children:e.version_number}),(0,y.jsx)("td",{className:"ellipsis",children:(0,y.jsx)("a",{href:"#",onClick:this.toggleTermsContentDialog,children:s.previewText})}),(0,y.jsx)("td",{children:L()(e.ctime).fromNow()}),(0,y.jsx)("td",{children:e.activate_time?L()(e.activate_time).fromNow():"--"}),(0,y.jsx)("td",{children:this.state.isOpIconShown&&(0,y.jsx)(Je.Z,{operations:["Update","Delete"],translateOperations:this.translateOperations,onMenuItemClick:this.onMenuItemClick,onFreezedItem:this.props.onFreezedItem,onUnfreezedItem:this.onUnfreezedItem})})]}),n&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(Ye.Z,{title:(0,m.ih)("Delete T&C"),message:o,toggleDialog:this.toggleDeleteDialog,executeOperation:this.deleteTerm,confirmBtnText:(0,m.ih)("Delete")})}),i&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(Zs,{updateTerm:this.updateTerm,toggle:this.toggleUpdateDialog,isUpdate:!0,oldTermObj:e})}),r&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(Os,{content:e.text,onClosePreviewDialog:this.toggleTermsContentDialog})})]})}}]),n}(l.Component),Fs=Ts,Rs=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).onFreezedItem=function(){i.setState({isItemFreezed:!0})},i.onUnfreezedItem=function(){i.setState({isItemFreezed:!1})},i.state={isItemFreezed:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.items;if(n)return(0,y.jsx)(Z.Z,{});if(i)return(0,y.jsx)("p",{className:"error text-center",children:i});var s=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No terms and conditions")})}),a=(0,y.jsx)(l.Fragment,{children:(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"10%",children:(0,m.ih)("Version")}),(0,y.jsx)("th",{width:"25%",children:(0,m.ih)("Text")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Created")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Activated")}),(0,y.jsx)("th",{width:"5%"})]})}),r&&(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(Fs,{item:t,isItemFreezed:e.state.isItemFreezed,onFreezedItem:e.onFreezedItem,onUnfreezedItem:e.onUnfreezedItem,deleteTerm:e.props.deleteTerm,updateTerm:e.props.updateTerm},n)}))})]})});return r.length?a:s}}]),n}(l.Component),Us=Rs,Es=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).toggleAddTermDialog=function(){i.setState({isAddTermDialogOpen:!i.state.isAddTermDialogOpen})},i.addTerm=function(e,t,n,i){I.I.sysAdminAddTermAndCondition(e,t,n,i).then((function(e){location.reload()})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.updateTerm=function(e,t,n,r,s){I.I.sysAdminUpdateTermAndCondition(e,t,n,r,s).then((function(t){var n=i.state.termList.map((function(n){return n.id==e?t.data:n}));i.setState({termList:n}),P.Z.success((0,m.ih)("Update succeeded."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.deleteTerm=function(e){I.I.sysAdminDeleteTermAndCondition(e).then((function(t){var n=i.state.termList.filter((function(t){return t.id!=e}));i.setState({termList:n}),P.Z.success((0,m.ih)("Successfully deleted 1 item."))})).catch((function(e){var t=f.c.getErrorMsg(e);P.Z.danger(t)}))},i.state={loading:!0,errorMsg:"",termList:[],isAddTermDialogOpen:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this;I.I.sysAdminListTermsAndConditions().then((function(t){e.setState({termList:t.data.term_and_condition_list,loading:!1})})).catch((function(t){e.setState({loading:!1,errorMsg:f.c.getErrorMsg(t,!0)})}))}},{key:"render",value:function(){var e=this.state,t=e.termList,n=e.isAddTermDialogOpen;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)((0,i.Z)({},this.props),{},{children:(0,y.jsx)(w.Z,{className:"btn btn-secondary operation-item",onClick:this.toggleAddTermDialog,children:(0,m.ih)("Add")})})),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)("div",{className:"cur-view-path",children:(0,y.jsx)("h3",{className:"sf-heading",children:(0,m.ih)("Terms and Conditions")})}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(Us,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:t,deleteTerm:this.deleteTerm,updateTerm:this.updateTerm})})]})}),n&&(0,y.jsx)(qt.Z,{children:(0,y.jsx)(Zs,{isUpdate:!1,addTerm:this.addTerm,toggle:this.toggleAddTermDialog})})]})}}]),n}(l.Component),zs=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).navItems=[{name:"all",urlPart:"all",text:(0,m.ih)("All")},{name:"unhandled",urlPart:"unhandled",text:(0,m.ih)("Unhandled")}],i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.currentItem;return(0,y.jsx)("div",{className:"cur-view-path tab-nav-container",children:(0,y.jsx)("ul",{className:"nav",children:this.navItems.map((function(t,n){return(0,y.jsx)("li",{className:"nav-item",children:(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/virus-files/").concat(t.urlPart,"/"),className:"nav-link".concat(e==t.name?" active":""),children:t.text})},n)}))})})}}]),n}(l.Component),Bs=zs,Vs=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseEnter=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!0,highlight:!0})},i.handleMouseLeave=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!1,highlight:!1})},i.onUnfreezedItem=function(){i.setState({highlight:!1,isOpIconShow:!1}),i.props.onUnfreezedItem()},i.onMenuItemClick=function(e){i.props.handleFile(i.props.virusFile.virus_id,e)},i.translateOperations=function(e){var t="";switch(e){case"delete":t=(0,m.ih)("Delete");break;case"ignore":t=(0,m.ih)("Ignore");break;case"do-not-ignore":t=(0,m.ih)("Don't ignore")}return t},i.state={highlight:!1,isOpIconShown:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.virusFile,t="",n=[];return e.has_deleted?t=(0,y.jsx)("span",{className:"text-green",children:(0,m.ih)("Deleted")}):e.has_ignored?(t=(0,y.jsx)("span",{className:"text-orange",children:(0,m.ih)("Ignored")}),n=["do-not-ignore"]):(t=(0,y.jsx)("span",{className:"text-red",children:(0,m.ih)("Unhandled")}),n=["delete","ignore"]),(0,y.jsxs)("tr",{className:this.state.highlight?"tr-highlight":"",onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,children:[(0,y.jsx)("td",{children:e.repo_name}),(0,y.jsx)("td",{children:e.repo_owner}),(0,y.jsx)("td",{children:e.file_path}),(0,y.jsx)("td",{children:t}),(0,y.jsx)("td",{children:n.length>0&&this.state.isOpIconShown&&(0,y.jsx)(Je.Z,{operations:n,translateOperations:this.translateOperations,onMenuItemClick:this.onMenuItemClick,onFreezedItem:this.props.onFreezedItem,onUnfreezedItem:this.onUnfreezedItem})})]})}}]),n}(l.Component),Hs=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).onFreezedItem=function(){i.setState({isItemFreezed:!0})},i.onUnfreezedItem=function(){i.setState({isItemFreezed:!1})},i.getPreviousPage=function(){i.props.getListByPage(i.props.currentPage-1)},i.getNextPage=function(){i.props.getListByPage(i.props.currentPage+1)},i.state={isItemFreezed:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.virusFiles,s=t.curPerPage,a=t.hasNextPage,o=t.currentPage;return n?(0,y.jsx)(Z.Z,{}):i?(0,y.jsx)("p",{className:"error text-center mt-4",children:i}):(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"27%",children:(0,m.ih)("Library")}),(0,y.jsx)("th",{width:"25%",children:(0,m.ih)("Owner")}),(0,y.jsx)("th",{width:"28%",children:(0,m.ih)("Virus File")}),(0,y.jsx)("th",{width:"15%",children:(0,m.ih)("Status")}),(0,y.jsx)("th",{width:"5%"})]})}),(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(Vs,{virusFile:t,isItemFreezed:e.state.isItemFreezed,onFreezedItem:e.onFreezedItem,onUnfreezedItem:e.onUnfreezedItem,handleFile:e.props.handleFile},n)}))})]}),r.length>0&&(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPage,gotoNextPage:this.getNextPage,currentPage:o,hasNextPage:a,curPerPage:s,resetPerPage:this.props.resetPerPage})]})}}]),n}(l.Component),Ws=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getListByPage=function(e){var t=i.state.perPage;I.I.listVirusFiles(e,t).then((function(e){var t=e.data;i.setState({loading:!1,virusFiles:t.virus_file_list,hasNextPage:t.has_next_page})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){i.getListByPage(1)}))},i.handleFile=function(e,t){var n;switch(t){case"delete":n=I.I.deleteVirusFile(e);break;case"ignore":n=I.I.toggleIgnoreVirusFile(e,!0);break;case"do-not-ignore":n=I.I.toggleIgnoreVirusFile(e,!1)}n.then((function(n){i.setState({virusFiles:i.state.virusFiles.map((function(i){return i.virus_id==e&&("delete"==t?i.has_deleted=!0:i=n.data.virus_file),i}))})})).catch((function(e){P.Z.danger(f.c.getErrorMsg(e))}))},i.state={loading:!0,errorMsg:"",virusFiles:[],currentPage:1,perPage:25,hasNextPage:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=n.perPage;this.setState({perPage:parseInt(t.get("per_page")||r),currentPage:parseInt(t.get("page")||i)},(function(){e.getListByPage(e.state.currentPage)}))}},{key:"render",value:function(){return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Bs,{currentItem:"all"}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(Hs,{loading:this.state.loading,errorMsg:this.state.errorMsg,virusFiles:this.state.virusFiles,currentPage:this.state.currentPage,hasNextPage:this.state.hasNextPage,curPerPage:this.state.perPage,resetPerPage:this.resetPerPage,getListByPage:this.getListByPage,handleFile:this.handleFile})})]})})]})}}]),n}(l.Component),Ys=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).handleMouseEnter=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!0,highlight:!0})},i.handleMouseLeave=function(){i.props.isItemFreezed||i.setState({isOpIconShown:!1,highlight:!1})},i.onUnfreezedItem=function(){i.setState({highlight:!1,isOpIconShow:!1}),i.props.onUnfreezedItem()},i.onMenuItemClick=function(e){i.props.handleFile(i.props.virusFile.virus_id,e)},i.translateOperations=function(e){var t="";switch(e){case"delete":t=(0,m.ih)("Delete");break;case"ignore":t=(0,m.ih)("Ignore");break;case"do-not-ignore":t=(0,m.ih)("Don't ignore")}return t},i.toggleItemSelected=function(e){i.props.toggleItemSelected(i.props.virusFile,e.target.checked)},i.state={highlight:!1,isOpIconShown:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.virusFile,t="",n=[];return e.has_deleted?t=(0,y.jsx)("span",{className:"text-green",children:(0,m.ih)("Deleted")}):e.has_ignored?(t=(0,y.jsx)("span",{className:"text-orange",children:(0,m.ih)("Ignored")}),n=["do-not-ignore"]):(t=(0,y.jsx)("span",{className:"text-red",children:(0,m.ih)("Unhandled")}),n=["delete","ignore"]),(0,y.jsxs)("tr",{className:this.state.highlight?"tr-highlight":"",onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave,children:[(0,y.jsx)("td",{className:"text-center",children:(0,y.jsx)("input",{type:"checkbox",checked:e.isSelected,onChange:this.toggleItemSelected})}),(0,y.jsx)("td",{children:e.repo_name}),(0,y.jsx)("td",{children:e.repo_owner}),(0,y.jsx)("td",{children:e.file_path}),(0,y.jsx)("td",{children:t}),(0,y.jsx)("td",{children:n.length>0&&this.state.isOpIconShown&&(0,y.jsx)(Je.Z,{operations:n,translateOperations:this.translateOperations,onMenuItemClick:this.onMenuItemClick,onFreezedItem:this.props.onFreezedItem,onUnfreezedItem:this.onUnfreezedItem})})]})}}]),n}(l.Component),Gs=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).onFreezedItem=function(){i.setState({isItemFreezed:!0})},i.onUnfreezedItem=function(){i.setState({isItemFreezed:!1})},i.getPreviousPage=function(){i.props.getListByPage(i.props.currentPage-1)},i.getNextPage=function(){i.props.getListByPage(i.props.currentPage+1)},i.state={isItemFreezed:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this,t=this.props,n=t.loading,i=t.errorMsg,r=t.virusFiles,s=t.curPerPage,a=t.hasNextPage,o=t.currentPage,c=t.isAllItemsSelected;return n?(0,y.jsx)(Z.Z,{}):i?(0,y.jsx)("p",{className:"error text-center mt-4",children:i}):(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"3%",className:"text-center",children:(0,y.jsx)("input",{type:"checkbox",checked:c,onChange:this.props.toggleAllSelected})}),(0,y.jsx)("th",{width:"24%",children:(0,m.ih)("Library")}),(0,y.jsx)("th",{width:"25%",children:(0,m.ih)("Owner")}),(0,y.jsx)("th",{width:"28%",children:(0,m.ih)("Virus File")}),(0,y.jsx)("th",{width:"15%",children:(0,m.ih)("Status")}),(0,y.jsx)("th",{width:"5%"})]})}),(0,y.jsx)("tbody",{children:r.map((function(t,n){return(0,y.jsx)(Ys,{virusFile:t,isItemFreezed:e.state.isItemFreezed,onFreezedItem:e.onFreezedItem,onUnfreezedItem:e.onUnfreezedItem,handleFile:e.props.handleFile,toggleItemSelected:e.props.toggleItemSelected},n)}))})]}),r.length>0&&(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPage,gotoNextPage:this.getNextPage,currentPage:o,hasNextPage:a,curPerPage:s,resetPerPage:this.props.resetPerPage})]})}}]),n}(l.Component),qs=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getListByPage=function(e){var t=i.state.perPage;I.I.listVirusFiles(e,t,!1).then((function(e){var t=e.data,n=t.virus_file_list.map((function(e){return e.isSelected=!1,e}));i.setState({loading:!1,virusFiles:n,hasNextPage:t.has_next_page})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){i.getListByPage(1)}))},i.handleFile=function(e,t){var n;switch(t){case"delete":n=I.I.deleteVirusFile(e);break;case"ignore":n=I.I.toggleIgnoreVirusFile(e,!0);break;case"do-not-ignore":n=I.I.toggleIgnoreVirusFile(e,!1)}n.then((function(n){i.setState({virusFiles:i.state.virusFiles.map((function(i){return i.virus_id==e&&("delete"==t?i.has_deleted=!0:i=n.data.virus_file),i}))})})).catch((function(e){P.Z.danger(f.c.getErrorMsg(e))}))},i.toggleAllSelected=function(){i.setState((function(e){return{isAllItemsSelected:!e.isAllItemsSelected,virusFiles:i.state.virusFiles.map((function(t){return t.isSelected=!e.isAllItemsSelected,t}))}}))},i.toggleItemSelected=function(e,t){i.setState({virusFiles:i.state.virusFiles.map((function(n){return n===e&&(n.isSelected=t),n}))},(function(){i.setState({isAllItemsSelected:!i.state.virusFiles.some((function(e){return!e.isSelected}))})}))},i.handleSelectedItems=function(e){var t=i.state.virusFiles.filter((function(t){return"delete-virus"==e?t.isSelected&&!t.has_deleted:t.isSelected&&!t.has_ignored})).map((function(e){return e.virus_id}));I.I.batchProcessVirusFiles(t,e).then((function(t){var n=i.state.virusFiles;t.data.success.forEach((function(t){var i=n.find((function(e){return e.virus_id==t.virus_id}));"delete-virus"==e?i.has_deleted=!0:i.has_ignored=!0})),i.setState({virusFiles:n}),t.data.failed.forEach((function(t){var i=n.find((function(e){return e.virus_id==t.virus_id})),r="delete-virus"==e?(0,m.ih)("Failed to delete %(virus_file) from library %(library): %(error_msg)"):(0,m.ih)("Failed to ignore %(virus_file) from library %(library): %(error_msg)");r=r.replace("%(virus_file)",i.file_path).replace("%(library)",i.repo_name).replace("%(error_msg)",t.error_msg),P.Z.danger(r)}))})).catch((function(e){P.Z.danger(f.c.getErrorMsg(e))}))},i.deleteSelectedItems=function(){i.handleSelectedItems("delete-virus")},i.ignoreSelectedItems=function(){i.handleSelectedItems("ignore-virus")},i.state={loading:!0,errorMsg:"",virusFiles:[],isAllItemsSelected:!1,selectedItems:[],currentPage:1,perPage:25,hasNextPage:!1},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=n.perPage;this.setState({perPage:parseInt(t.get("per_page")||r),currentPage:parseInt(t.get("page")||i)},(function(){e.getListByPage(e.state.currentPage)}))}},{key:"render",value:function(){return(0,y.jsxs)(l.Fragment,{children:[this.state.virusFiles.some((function(e){return e.isSelected}))?(0,y.jsx)(N,(0,i.Z)((0,i.Z)({},this.props),{},{children:(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(w.Z,{onClick:this.deleteSelectedItems,className:"operation-item",children:(0,m.ih)("Delete")}),(0,y.jsx)(w.Z,{onClick:this.ignoreSelectedItems,className:"operation-item",children:(0,m.ih)("Ignore")})]})})):(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Bs,{currentItem:"unhandled"}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(Gs,{loading:this.state.loading,errorMsg:this.state.errorMsg,virusFiles:this.state.virusFiles,currentPage:this.state.currentPage,hasNextPage:this.state.hasNextPage,curPerPage:this.state.perPage,resetPerPage:this.resetPerPage,getListByPage:this.getListByPage,handleFile:this.handleFile,isAllItemsSelected:this.state.isAllItemsSelected,toggleAllSelected:this.toggleAllSelected,toggleItemSelected:this.toggleItemSelected})})]})})]})}}]),n}(l.Component),Qs=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).navItems=[{name:"adminOperationLogs",urlPart:"admin-logs/operation",text:(0,m.ih)("Admin Operation Logs")},{name:"adminLoginLogs",urlPart:"admin-logs/login",text:(0,m.ih)("Admin Login Logs")}],i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.currentItem;return(0,y.jsx)("div",{className:"cur-view-path tab-nav-container",children:(0,y.jsx)("ul",{className:"nav",children:this.navItems.map((function(t,n){return(0,y.jsx)("li",{className:"nav-item",children:(0,y.jsx)(g.rU,{to:"".concat(m.ze,"sys/").concat(t.urlPart,"/"),className:"nav-link".concat(e==t.name?" active":""),children:t.text})},n)}))})})}}]),n}(l.Component),Ks=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getPreviousPage=function(){i.props.getLogsByPage(i.props.currentPage-1)},i.getNextPage=function(){i.props.getLogsByPage(i.props.currentPage+1)},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.loading,n=e.errorMsg,i=e.items,r=e.perPage,s=e.currentPage,a=e.hasNextPage;if(t)return(0,y.jsx)(Z.Z,{});if(n)return(0,y.jsx)("p",{className:"error text-center",children:n});var o=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No Admin operation logs")})}),c=(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"15%",children:(0,m.ih)("Operation")}),(0,y.jsx)("th",{width:"50%",children:(0,m.ih)("Detail")}),(0,y.jsx)("th",{width:"15%",children:(0,m.ih)("Time")})]})}),i&&(0,y.jsx)("tbody",{children:i.map((function(e,t){return(0,y.jsx)(Xs,{item:e},t)}))})]}),(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPage,gotoNextPage:this.getNextPage,currentPage:s,hasNextPage:a,curPerPage:r,resetPerPage:this.props.resetPerPage})]});return i.length?c:o}}]),n}(l.Component),Xs=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getOperationText=function(e){switch(e){case"repo_create":return(0,m.ih)("Create Library");case"repo_delete":return(0,m.ih)("Delete Library");case"repo_transfer":return(0,m.ih)("Transfer Library");case"group_create":return(0,m.ih)("Create Group");case"group_transfer":return(0,m.ih)("Transfer Group");case"group_delete":return(0,m.ih)("Delete Group");case"user_add":return(0,m.ih)("Add User");case"user_delete":return(0,m.ih)("Delete User");default:return""}},i.getOperationDetail=function(e){var t=e.detail,n="";t.owner&&(n=m.ze+"sys/users/"+encodeURIComponent(t.owner)+"/");var i="";t.email&&(i=m.ze+"sys/users/"+encodeURIComponent(t.email)+"/");var r="",s="",a="";switch("repo_create"!=e.operation&&"repo_delete"!=e.operation&&"repo_transfer"!=e.operation||(s=m.ze+"sys/libraries/"+t.id+"/"+encodeURIComponent(t.name)+"/"),"group_create"!=e.operation&&"group_delete"!=e.operation&&"group_transfer"!=e.operation||(a=m.ze+"sys/groups/"+t.id+"/libraries/"),e.operation){case"repo_create":return r=(0,m.ih)("Created library {library_name} with {owner} as its owner").replace("{owner}",''+t.owner+""),r=m._y&&m.MW?r.replace("{library_name}",''+t.name+""):r.replace("{library_name}",''+t.name+"");case"repo_delete":return r=(0,m.ih)("Deleted library {library_name}").replace("{library_name}",''+t.name+"");case"repo_transfer":return r=(0,m.ih)("Transferred library {library_name} from {user_from} to {user_to}").replace("{user_from}",''+t.from+"").replace("{user_to}",''+t.to+""),r=m._y&&m.MW?r.replace("{library_name}",''+t.name+""):r.replace("{library_name}",''+t.name+"");case"group_create":return r=(0,m.ih)("Created group {group_name}").replace("{group_name}",''+t.name+"");case"group_transfer":return r=(0,m.ih)("Transferred group {group_name} from {user_from} to {user_to}").replace("{user_from}",''+t.from+"").replace("{user_to}",''+t.to+"").replace("{group_name}",''+t.name+"");case"group_delete":return r=(0,m.ih)("Deleted group {group_name}").replace("{group_name}",''+t.name+"");case"user_add":return r=(0,m.ih)("Added user {user}").replace("{user}",''+t.email+"");case"user_delete":return r=(0,m.ih)("Deleted user {user}").replace("{user}",''+t.email+"");default:return""}},i.state={isOpIconShown:!1},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item;return(0,y.jsxs)("tr",{onMouseOver:this.handleMouseOver,onMouseOut:this.handleMouseOut,children:[(0,y.jsx)("td",{children:(0,y.jsx)(we,{email:e.email,name:e.name})}),(0,y.jsx)("td",{children:this.getOperationText(e.operation)}),(0,y.jsx)("td",{children:(0,y.jsx)("span",{dangerouslySetInnerHTML:{__html:this.getOperationDetail(e)}})}),(0,y.jsx)("td",{children:L()(e.datetime).fromNow()})]})}}]),n}(l.Component),$s=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getLogsByPage=function(e){var t=i.state.perPage;I.I.sysAdminListAdminLogs(e,t).then((function(n){i.setState({logList:n.data.data,loading:!1,currentPage:e,hasNextPage:f.c.hasNextPage(e,t,n.data.total_count)})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){return i.getLogsByPage(i.initPage)}))},i.state={loading:!0,errorMsg:"",logList:[],perPage:25,currentPage:1,hasNextPage:!1},i.initPage=1,i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=n.perPage;this.setState({perPage:parseInt(t.get("per_page")||r),currentPage:parseInt(t.get("page")||i)},(function(){e.getLogsByPage(e.state.currentPage)}))}},{key:"render",value:function(){var e=this.state,t=e.logList,n=e.currentPage,r=e.perPage,s=e.hasNextPage;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Qs,{currentItem:"adminOperationLogs"}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(Ks,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:t,currentPage:n,perPage:r,hasNextPage:s,getLogsByPage:this.getLogsByPage,resetPerPage:this.resetPerPage})})]})})]})}}]),n}(l.Component),Js=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getPreviousPage=function(){i.props.getLogsByPage(i.props.currentPage-1)},i.getNextPage=function(){i.props.getLogsByPage(i.props.currentPage+1)},i}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props,t=e.loading,n=e.errorMsg,i=e.items,r=e.perPage,s=e.currentPage,a=e.hasNextPage;if(t)return(0,y.jsx)(Z.Z,{});if(n)return(0,y.jsx)("p",{className:"error text-center",children:n});var o=(0,y.jsx)(fe.Z,{children:(0,y.jsx)("h2",{children:(0,m.ih)("No Admin login logs")})}),c=(0,y.jsxs)(l.Fragment,{children:[(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"25%",children:(0,m.ih)("Name")}),(0,y.jsx)("th",{width:"25%",children:(0,m.ih)("IP")}),(0,y.jsx)("th",{width:"25%",children:(0,m.ih)("Status")}),(0,y.jsx)("th",{width:"25%",children:(0,m.ih)("Time")})]})}),i&&(0,y.jsx)("tbody",{children:i.map((function(e,t){return(0,y.jsx)(ea,{item:e},t)}))})]}),(0,y.jsx)(ae.Z,{gotoPreviousPage:this.getPreviousPage,gotoNextPage:this.getNextPage,currentPage:s,hasNextPage:a,curPerPage:r,resetPerPage:this.props.resetPerPage})]});return i.length?c:o}}]),n}(l.Component),ea=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){return(0,r.Z)(this,n),t.call(this,e)}return(0,s.Z)(n,[{key:"render",value:function(){var e=this.props.item;return(0,y.jsxs)("tr",{onMouseOver:this.handleMouseOver,onMouseOut:this.handleMouseOut,children:[(0,y.jsx)("td",{children:(0,y.jsx)(we,{email:e.email,name:e.name})}),(0,y.jsx)("td",{children:e.login_ip}),(0,y.jsx)("td",{children:e.login_success?(0,m.ih)("Success"):(0,m.ih)("Failed")}),(0,y.jsx)("td",{children:L()(e.login_time).fromNow()})]})}}]),n}(l.Component),ta=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getLogsByPage=function(e){var t=i.state.perPage;I.I.sysAdminListAdminLoginLogs(e,t).then((function(n){i.setState({logList:n.data.data,loading:!1,currentPage:e,hasNextPage:f.c.hasNextPage(e,t,n.data.total_count)})})).catch((function(e){i.setState({loading:!1,errorMsg:f.c.getErrorMsg(e,!0)})}))},i.resetPerPage=function(e){i.setState({perPage:e},(function(){return i.getLogsByPage(i.initPage)}))},i.state={loading:!0,errorMsg:"",logList:[],perPage:25,currentPage:1,hasNextPage:!1},i.initPage=1,i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){var e=this,t=new URL(window.location).searchParams,n=this.state,i=n.currentPage,r=n.perPage;this.setState({perPage:parseInt(t.get("per_page")||r),currentPage:parseInt(t.get("page")||i)},(function(){e.getLogsByPage(e.state.currentPage)}))}},{key:"render",value:function(){var e=this.state,t=e.logList,n=e.currentPage,r=e.perPage,s=e.hasNextPage;return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center flex-row",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)(Qs,{currentItem:"adminLoginLogs"}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsx)(Js,{loading:this.state.loading,errorMsg:this.state.errorMsg,items:t,currentPage:n,perPage:r,hasNextPage:s,getLogsByPage:this.getLogsByPage,resetPerPage:this.resetPerPage})})]})})]})}}]),n}(l.Component),na=function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).listAbuseReports=function(){I.I.sysAdminListAbuseReports().then((function(e){i.setState({abuseReportList:e.data.abuse_report_list})})).catch((function(e){i.handleError(e)}))},i.updateAbuseReport=function(e,t){I.I.sysAdminUpdateAbuseReport(e,t).then((function(e){var n=i.state.abuseReportList.map((function(n,i){return n.id===t&&(n.handled=e.data.handled),n}));i.setState({abuseReportList:n})})).catch((function(e){i.handleError(e)}))},i.handleError=function(e){e.response?P.Z.danger(e.response.data.error_msg||e.response.data.detail||(0,m.ih)("Error"),{duration:3}):P.Z.danger((0,m.ih)("Please check the network."),{duration:3})},i.state={abuseReportList:[]},i}return(0,s.Z)(n,[{key:"componentDidMount",value:function(){this.listAbuseReports()}},{key:"render",value:function(){var e=this,t=this.state.abuseReportList.map((function(t,n){var i=(!t.handled).toString(),r=t.id,s=m.ze+"lib/"+t.repo_id+"/file"+t.file_path;return(0,y.jsxs)("tr",{children:[(0,y.jsx)("td",{children:t.repo_name}),(0,y.jsx)("td",{children:(0,y.jsx)("a",{href:s,target:"_blank",rel:"noreferrer",children:t.file_path})}),(0,y.jsx)("td",{children:t.reporter}),(0,y.jsx)("td",{children:t.abuse_type}),(0,y.jsx)("td",{children:t.description}),(0,y.jsx)("td",{children:L()(t.time).format("YYYY-MM-DD")}),(0,y.jsx)("td",{children:(0,y.jsx)("p",{onClick:e.updateAbuseReport.bind(e,i,r),className:"op-target ellipsis ellipsis-op-target cursor-pointer",children:(0,m.ih)(t.handled.toString())})})]},n)}));return(0,y.jsxs)(l.Fragment,{children:[(0,y.jsx)(N,(0,i.Z)({},this.props)),(0,y.jsx)("div",{className:"main-panel-center",children:(0,y.jsxs)("div",{className:"cur-view-container",children:[(0,y.jsx)("div",{className:"cur-view-path",children:(0,y.jsx)("h3",{className:"sf-heading",children:(0,m.ih)("Abuse Reports")})}),(0,y.jsx)("div",{className:"cur-view-content",children:(0,y.jsxs)("table",{className:"table-hover",children:[(0,y.jsx)("thead",{children:(0,y.jsxs)("tr",{children:[(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Library")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("File")}),(0,y.jsx)("th",{width:"10%",children:(0,m.ih)("Reporter")}),(0,y.jsx)("th",{width:"15%",children:(0,m.ih)("Abuse Type")}),(0,y.jsx)("th",{width:"20%",children:(0,m.ih)("Description")}),(0,y.jsx)("th",{width:"10%",children:(0,m.ih)("Time")}),(0,y.jsx)("th",{width:"5%",children:(0,m.ih)("Handled")})]})}),(0,y.jsx)("tbody",{children:t})]})})]})})]})}}]),n}(l.Component),ia=(n(28421),n(58108),function(e){(0,a.Z)(n,e);var t=(0,o.Z)(n);function n(e){var i;return(0,r.Z)(this,n),(i=t.call(this,e)).getCurrentTabForPageList=function(e){for(var t,n,i="".concat(m.ze,"sys/"),r=0,s=e.length;r1&&(r-=1)),[360*r,100*s,100*c]},r.rgb.hwb=function(e){var t=e[0],n=e[1],i=e[2];return[r.rgb.hsl(e)[0],1/255*Math.min(t,Math.min(n,i))*100,100*(i=1-1/255*Math.max(t,Math.max(n,i)))]},r.rgb.cmyk=function(e){var t,n=e[0]/255,i=e[1]/255,r=e[2]/255;return[100*((1-n-(t=Math.min(1-n,1-i,1-r)))/(1-t)||0),100*((1-i-t)/(1-t)||0),100*((1-r-t)/(1-t)||0),100*t]},r.rgb.keyword=function(e){var n=t[e];if(n)return n;var r,s=1/0;for(var a in i)if(i.hasOwnProperty(a)){var o=l(e,i[a]);o.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)),100*(.2126*t+.7152*n+.0722*i),100*(.0193*t+.1192*n+.9505*i)]},r.rgb.lab=function(e){var t=r.rgb.xyz(e),n=t[0],i=t[1],s=t[2];return i/=100,s/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(n-i),200*(i-(s=s>.008856?Math.pow(s,1/3):7.787*s+16/116))]},r.hsl.rgb=function(e){var t,n,i,r,s,a=e[0]/360,o=e[1]/100,l=e[2]/100;if(0===o)return[s=255*l,s,s];t=2*l-(n=l<.5?l*(1+o):l+o-l*o),r=[0,0,0];for(var c=0;c<3;c++)(i=a+1/3*-(c-1))<0&&i++,i>1&&i--,s=6*i<1?t+6*(n-t)*i:2*i<1?n:3*i<2?t+(n-t)*(2/3-i)*6:t,r[c]=255*s;return r},r.hsl.hsv=function(e){var t=e[0],n=e[1]/100,i=e[2]/100,r=n,s=Math.max(i,.01);return n*=(i*=2)<=1?i:2-i,r*=s<=1?s:2-s,[t,100*(0===i?2*r/(s+r):2*n/(i+n)),(i+n)/2*100]},r.hsv.rgb=function(e){var t=e[0]/60,n=e[1]/100,i=e[2]/100,r=Math.floor(t)%6,s=t-Math.floor(t),a=255*i*(1-n),o=255*i*(1-n*s),l=255*i*(1-n*(1-s));switch(i*=255,r){case 0:return[i,l,a];case 1:return[o,i,a];case 2:return[a,i,l];case 3:return[a,o,i];case 4:return[l,a,i];case 5:return[i,a,o]}},r.hsv.hsl=function(e){var t,n,i,r=e[0],s=e[1]/100,a=e[2]/100,o=Math.max(a,.01);return i=(2-s)*a,n=s*o,[r,100*(n=(n/=(t=(2-s)*o)<=1?t:2-t)||0),100*(i/=2)]},r.hwb.rgb=function(e){var t,n,i,r,s,a,o,l=e[0]/360,c=e[1]/100,h=e[2]/100,d=c+h;switch(d>1&&(c/=d,h/=d),i=6*l-(t=Math.floor(6*l)),0!==(1&t)&&(i=1-i),r=c+i*((n=1-h)-c),t){default:case 6:case 0:s=n,a=r,o=c;break;case 1:s=r,a=n,o=c;break;case 2:s=c,a=n,o=r;break;case 3:s=c,a=r,o=n;break;case 4:s=r,a=c,o=n;break;case 5:s=n,a=c,o=r}return[255*s,255*a,255*o]},r.cmyk.rgb=function(e){var t=e[0]/100,n=e[1]/100,i=e[2]/100,r=e[3]/100;return[255*(1-Math.min(1,t*(1-r)+r)),255*(1-Math.min(1,n*(1-r)+r)),255*(1-Math.min(1,i*(1-r)+r))]},r.xyz.rgb=function(e){var t,n,i,r=e[0]/100,s=e[1]/100,a=e[2]/100;return n=-.9689*r+1.8758*s+.0415*a,i=.0557*r+-.204*s+1.057*a,t=(t=3.2406*r+-1.5372*s+-.4986*a)>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:12.92*i,[255*(t=Math.min(Math.max(0,t),1)),255*(n=Math.min(Math.max(0,n),1)),255*(i=Math.min(Math.max(0,i),1))]},r.xyz.lab=function(e){var t=e[0],n=e[1],i=e[2];return n/=100,i/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(t-n),200*(n-(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116))]},r.lab.xyz=function(e){var t,n,i,r=e[0];t=e[1]/500+(n=(r+16)/116),i=n-e[2]/200;var s=Math.pow(n,3),a=Math.pow(t,3),o=Math.pow(i,3);return n=s>.008856?s:(n-16/116)/7.787,t=a>.008856?a:(t-16/116)/7.787,i=o>.008856?o:(i-16/116)/7.787,[t*=95.047,n*=100,i*=108.883]},r.lab.lch=function(e){var t,n=e[0],i=e[1],r=e[2];return(t=360*Math.atan2(r,i)/2/Math.PI)<0&&(t+=360),[n,Math.sqrt(i*i+r*r),t]},r.lch.lab=function(e){var t,n=e[0],i=e[1];return t=e[2]/360*2*Math.PI,[n,i*Math.cos(t),i*Math.sin(t)]},r.rgb.ansi16=function(e){var t=e[0],n=e[1],i=e[2],s=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(s=Math.round(s/50)))return 30;var a=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(t/255));return 2===s&&(a+=60),a},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var t=e[0],n=e[1],i=e[2];return t===n&&n===i?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(n/255*5)+Math.round(i/255*5)},r.ansi16.rgb=function(e){var t=e%10;if(0===t||7===t)return e>50&&(t+=3.5),[t=t/10.5*255,t,t];var n=.5*(1+~~(e>50));return[(1&t)*n*255,(t>>1&1)*n*255,(t>>2&1)*n*255]},r.ansi256.rgb=function(e){if(e>=232){var t=10*(e-232)+8;return[t,t,t]}var n;return e-=16,[Math.floor(e/36)/5*255,Math.floor((n=e%36)/6)/5*255,n%6/5*255]},r.rgb.hex=function(e){var t=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.hex.rgb=function(e){var t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];var n=t[0];3===t[0].length&&(n=n.split("").map((function(e){return e+e})).join(""));var i=parseInt(n,16);return[i>>16&255,i>>8&255,255&i]},r.rgb.hcg=function(e){var t,n=e[0]/255,i=e[1]/255,r=e[2]/255,s=Math.max(Math.max(n,i),r),a=Math.min(Math.min(n,i),r),o=s-a;return t=o<=0?0:s===n?(i-r)/o%6:s===i?2+(r-n)/o:4+(n-i)/o+4,t/=6,[360*(t%=1),100*o,100*(o<1?a/(1-o):0)]},r.hsl.hcg=function(e){var t=e[1]/100,n=e[2]/100,i=1,r=0;return(i=n<.5?2*t*n:2*t*(1-n))<1&&(r=(n-.5*i)/(1-i)),[e[0],100*i,100*r]},r.hsv.hcg=function(e){var t=e[1]/100,n=e[2]/100,i=t*n,r=0;return i<1&&(r=(n-i)/(1-i)),[e[0],100*i,100*r]},r.hcg.rgb=function(e){var t=e[0]/360,n=e[1]/100,i=e[2]/100;if(0===n)return[255*i,255*i,255*i];var r=[0,0,0],s=t%1*6,a=s%1,o=1-a,l=0;switch(Math.floor(s)){case 0:r[0]=1,r[1]=a,r[2]=0;break;case 1:r[0]=o,r[1]=1,r[2]=0;break;case 2:r[0]=0,r[1]=1,r[2]=a;break;case 3:r[0]=0,r[1]=o,r[2]=1;break;case 4:r[0]=a,r[1]=0,r[2]=1;break;default:r[0]=1,r[1]=0,r[2]=o}return l=(1-n)*i,[255*(n*r[0]+l),255*(n*r[1]+l),255*(n*r[2]+l)]},r.hcg.hsv=function(e){var t=e[1]/100,n=t+e[2]/100*(1-t),i=0;return n>0&&(i=t/n),[e[0],100*i,100*n]},r.hcg.hsl=function(e){var t=e[1]/100,n=e[2]/100*(1-t)+.5*t,i=0;return n>0&&n<.5?i=t/(2*n):n>=.5&&n<1&&(i=t/(2*(1-n))),[e[0],100*i,100*n]},r.hcg.hwb=function(e){var t=e[1]/100,n=t+e[2]/100*(1-t);return[e[0],100*(n-t),100*(1-n)]},r.hwb.hcg=function(e){var t=e[1]/100,n=1-e[2]/100,i=n-t,r=0;return i<1&&(r=(n-i)/(1-i)),[e[0],100*i,100*r]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var t=255&Math.round(e[0]/100*255),n=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function s(){for(var e={},t=Object.keys(r),n=t.length,i=0;i1&&(t=Array.prototype.slice.call(arguments)),e(t))};return"conversion"in e&&(t.conversion=e.conversion),t}function u(e){var t=function(t){if(void 0===t||null===t)return t;arguments.length>1&&(t=Array.prototype.slice.call(arguments));var n=e(t);if("object"===typeof n)for(var i=n.length,r=0;r=0&&t<1?C(Math.round(255*t)):"")}function D(e,t){return t<1||e[3]&&e[3]<1?w(e,t):"rgb("+e[0]+", "+e[1]+", "+e[2]+")"}function w(e,t){return void 0===t&&(t=void 0!==e[3]?e[3]:1),"rgba("+e[0]+", "+e[1]+", "+e[2]+", "+t+")"}function I(e,t){return t<1||e[3]&&e[3]<1?P(e,t):"rgb("+Math.round(e[0]/255*100)+"%, "+Math.round(e[1]/255*100)+"%, "+Math.round(e[2]/255*100)+"%)"}function P(e,t){return"rgba("+Math.round(e[0]/255*100)+"%, "+Math.round(e[1]/255*100)+"%, "+Math.round(e[2]/255*100)+"%, "+(t||e[3]||1)+")"}function Z(e,t){return t<1||e[3]&&e[3]<1?k(e,t):"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)"}function k(e,t){return void 0===t&&(t=void 0!==e[3]?e[3]:1),"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+t+")"}function _(e,t){return void 0===t&&(t=void 0!==e[3]?e[3]:1),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+(void 0!==t&&1!==t?", "+t:"")+")"}function N(e){return A[e.slice(0,3)]}function M(e,t,n){return Math.min(Math.max(t,e),n)}function C(e){var t=e.toString(16).toUpperCase();return t.length<2?"0"+t:t}var A={};for(var L in p)A[p[L]]=L;var O=function e(t){return t instanceof e?t:this instanceof e?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"===typeof t?(n=m.getRgba(t))?this.setValues("rgb",n):(n=m.getHsla(t))?this.setValues("hsl",n):(n=m.getHwb(t))&&this.setValues("hwb",n):"object"===typeof t&&(void 0!==(n=t).r||void 0!==n.red?this.setValues("rgb",n):void 0!==n.l||void 0!==n.lightness?this.setValues("hsl",n):void 0!==n.v||void 0!==n.value?this.setValues("hsv",n):void 0!==n.w||void 0!==n.whiteness?this.setValues("hwb",n):void 0===n.c&&void 0===n.cyan||this.setValues("cmyk",n)))):new e(t);var n};O.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var e=this.values;return 1!==e.alpha?e.hwb.concat([e.alpha]):e.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var e=this.values;return e.rgb.concat([e.alpha])},hslaArray:function(){var e=this.values;return e.hsl.concat([e.alpha])},alpha:function(e){return void 0===e?this.values.alpha:(this.setValues("alpha",e),this)},red:function(e){return this.setChannel("rgb",0,e)},green:function(e){return this.setChannel("rgb",1,e)},blue:function(e){return this.setChannel("rgb",2,e)},hue:function(e){return e&&(e=(e%=360)<0?360+e:e),this.setChannel("hsl",0,e)},saturation:function(e){return this.setChannel("hsl",1,e)},lightness:function(e){return this.setChannel("hsl",2,e)},saturationv:function(e){return this.setChannel("hsv",1,e)},whiteness:function(e){return this.setChannel("hwb",1,e)},blackness:function(e){return this.setChannel("hwb",2,e)},value:function(e){return this.setChannel("hsv",2,e)},cyan:function(e){return this.setChannel("cmyk",0,e)},magenta:function(e){return this.setChannel("cmyk",1,e)},yellow:function(e){return this.setChannel("cmyk",2,e)},black:function(e){return this.setChannel("cmyk",3,e)},hexString:function(){return m.hexString(this.values.rgb)},rgbString:function(){return m.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return m.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return m.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return m.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return m.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return m.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return m.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var e=this.values.rgb;return e[0]<<16|e[1]<<8|e[2]},luminosity:function(){for(var e=this.values.rgb,t=[],n=0;nn?(t+.05)/(n+.05):(n+.05)/(t+.05)},level:function(e){var t=this.contrast(e);return t>=7.1?"AAA":t>=4.5?"AA":""},dark:function(){var e=this.values.rgb;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var e=[],t=0;t<3;t++)e[t]=255-this.values.rgb[t];return this.setValues("rgb",e),this},lighten:function(e){var t=this.values.hsl;return t[2]+=t[2]*e,this.setValues("hsl",t),this},darken:function(e){var t=this.values.hsl;return t[2]-=t[2]*e,this.setValues("hsl",t),this},saturate:function(e){var t=this.values.hsl;return t[1]+=t[1]*e,this.setValues("hsl",t),this},desaturate:function(e){var t=this.values.hsl;return t[1]-=t[1]*e,this.setValues("hsl",t),this},whiten:function(e){var t=this.values.hwb;return t[1]+=t[1]*e,this.setValues("hwb",t),this},blacken:function(e){var t=this.values.hwb;return t[2]+=t[2]*e,this.setValues("hwb",t),this},greyscale:function(){var e=this.values.rgb,t=.3*e[0]+.59*e[1]+.11*e[2];return this.setValues("rgb",[t,t,t]),this},clearer:function(e){var t=this.values.alpha;return this.setValues("alpha",t-t*e),this},opaquer:function(e){var t=this.values.alpha;return this.setValues("alpha",t+t*e),this},rotate:function(e){var t=this.values.hsl,n=(t[0]+e)%360;return t[0]=n<0?360+n:n,this.setValues("hsl",t),this},mix:function(e,t){var n=this,i=e,r=void 0===t?.5:t,s=2*r-1,a=n.alpha()-i.alpha(),o=((s*a===-1?s:(s+a)/(1+s*a))+1)/2,l=1-o;return this.rgb(o*n.red()+l*i.red(),o*n.green()+l*i.green(),o*n.blue()+l*i.blue()).alpha(n.alpha()*r+i.alpha()*(1-r))},toJSON:function(){return this.rgb()},clone:function(){var e,t,n=new O,i=this.values,r=n.values;for(var s in i)i.hasOwnProperty(s)&&(e=i[s],"[object Array]"===(t={}.toString.call(e))?r[s]=e.slice(0):"[object Number]"===t?r[s]=e:console.error("unexpected color value:",e));return n}},O.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},O.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},O.prototype.getValues=function(e){for(var t=this.values,n={},i=0;i=0;r--)t.call(n,e[r],r);else for(r=0;r=1?e:-(Math.sqrt(1-e*e)-1)},easeOutCirc:function(e){return Math.sqrt(1-(e-=1)*e)},easeInOutCirc:function(e){return(e/=.5)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},easeInElastic:function(e){var t=1.70158,n=0,i=1;return 0===e?0:1===e?1:(n||(n=.3),i<1?(i=1,t=n/4):t=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/n))},easeOutElastic:function(e){var t=1.70158,n=0,i=1;return 0===e?0:1===e?1:(n||(n=.3),i<1?(i=1,t=n/4):t=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*e)*Math.sin((e-t)*(2*Math.PI)/n)+1)},easeInOutElastic:function(e){var t=1.70158,n=0,i=1;return 0===e?0:2===(e/=.5)?1:(n||(n=.45),i<1?(i=1,t=n/4):t=n/(2*Math.PI)*Math.asin(1/i),e<1?i*Math.pow(2,10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/n)*.5+1)},easeInBack:function(e){var t=1.70158;return e*e*((t+1)*e-t)},easeOutBack:function(e){var t=1.70158;return(e-=1)*e*((t+1)*e+t)+1},easeInOutBack:function(e){var t=1.70158;return(e/=.5)<1?e*e*((1+(t*=1.525))*e-t)*.5:.5*((e-=2)*e*((1+(t*=1.525))*e+t)+2)},easeInBounce:function(e){return 1-E.easeOutBounce(1-e)},easeOutBounce:function(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},easeInOutBounce:function(e){return e<.5?.5*E.easeInBounce(2*e):.5*E.easeOutBounce(2*e-1)+.5}},z={effects:E};U.easingEffects=E;var B=Math.PI,V=B/180,H=2*B,W=B/2,Y=B/4,G=2*B/3,q={clear:function(e){e.ctx.clearRect(0,0,e.width,e.height)},roundedRect:function(e,t,n,i,r,s){if(s){var a=Math.min(s,r/2,i/2),o=t+a,l=n+a,c=t+i-a,h=n+r-a;e.moveTo(t,l),ot.left-n&&e.xt.top-n&&e.y0&&e.requestAnimationFrame()},advance:function(){for(var e,t,n,i,r=this.animations,s=0;s=n?(se.callback(e.onAnimationComplete,[e],t),t.animating=!1,r.splice(s,1)):++s}},ve=se.options.resolve,xe=["push","pop","shift","splice","unshift"];function ye(e,t){e._chartjs?e._chartjs.listeners.push(t):(Object.defineProperty(e,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[t]}}),xe.forEach((function(t){var n="onData"+t.charAt(0).toUpperCase()+t.slice(1),i=e[t];Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:function(){var t=Array.prototype.slice.call(arguments),r=i.apply(this,t);return se.each(e._chartjs.listeners,(function(e){"function"===typeof e[n]&&e[n].apply(e,t)})),r}})})))}function be(e,t){var n=e._chartjs;if(n){var i=n.listeners,r=i.indexOf(t);-1!==r&&i.splice(r,1),i.length>0||(xe.forEach((function(t){delete e[t]})),delete e._chartjs)}}var je=function(e,t){this.initialize(e,t)};se.extend(je.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(e,t){var n=this;n.chart=e,n.index=t,n.linkScales(),n.addElements(),n._type=n.getMeta().type},updateIndex:function(e){this.index=e},linkScales:function(){var e=this,t=e.getMeta(),n=e.chart,i=n.scales,r=e.getDataset(),s=n.options.scales;null!==t.xAxisID&&t.xAxisID in i&&!r.xAxisID||(t.xAxisID=r.xAxisID||s.xAxes[0].id),null!==t.yAxisID&&t.yAxisID in i&&!r.yAxisID||(t.yAxisID=r.yAxisID||s.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(e){return this.chart.scales[e]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&be(this._data,this)},createMetaDataset:function(){var e=this,t=e.datasetElementType;return t&&new t({_chart:e.chart,_datasetIndex:e.index})},createMetaData:function(e){var t=this,n=t.dataElementType;return n&&new n({_chart:t.chart,_datasetIndex:t.index,_index:e})},addElements:function(){var e,t,n=this,i=n.getMeta(),r=n.getDataset().data||[],s=i.data;for(e=0,t=r.length;ei&&e.insertElements(i,r-i)},insertElements:function(e,t){for(var n=0;nr?(s=r/t.innerRadius,e.arc(a,o,t.innerRadius-r,i+s,n-s,!0)):e.arc(a,o,r,i+Math.PI/2,n-Math.PI/2),e.closePath(),e.clip()}function Ie(e,t,n,i){var r,s=n.endAngle;for(i&&(n.endAngle=n.startAngle+De,we(e,n),n.endAngle=s,n.endAngle===n.startAngle&&n.fullCircles&&(n.endAngle+=De,n.fullCircles--)),e.beginPath(),e.arc(n.x,n.y,n.innerRadius,n.startAngle+De,n.startAngle,!0),r=0;ro;)r-=De;for(;r=a&&r<=o,c=s>=n.innerRadius&&s<=n.outerRadius;return l&&c}return!1},getCenterPoint:function(){var e=this._view,t=(e.startAngle+e.endAngle)/2,n=(e.innerRadius+e.outerRadius)/2;return{x:e.x+Math.cos(t)*n,y:e.y+Math.sin(t)*n}},getArea:function(){var e=this._view;return Math.PI*((e.endAngle-e.startAngle)/(2*Math.PI))*(Math.pow(e.outerRadius,2)-Math.pow(e.innerRadius,2))},tooltipPosition:function(){var e=this._view,t=e.startAngle+(e.endAngle-e.startAngle)/2,n=(e.outerRadius-e.innerRadius)/2+e.innerRadius;return{x:e.x+Math.cos(t)*n,y:e.y+Math.sin(t)*n}},draw:function(){var e,t=this._chart.ctx,n=this._view,i="inner"===n.borderAlign?.33:0,r={x:n.x,y:n.y,innerRadius:n.innerRadius,outerRadius:Math.max(n.outerRadius-i,0),pixelMargin:i,startAngle:n.startAngle,endAngle:n.endAngle,fullCircles:Math.floor(n.circumference/De)};if(t.save(),t.fillStyle=n.backgroundColor,t.strokeStyle=n.borderColor,r.fullCircles){for(r.endAngle=r.startAngle+De,t.beginPath(),t.arc(r.x,r.y,r.outerRadius,r.startAngle,r.endAngle),t.arc(r.x,r.y,r.innerRadius,r.endAngle,r.startAngle,!0),t.closePath(),e=0;ee.x&&(t=Ue(t,"left","right")):e.basen?n:i,r:l.right||r<0?0:r>t?t:r,b:l.bottom||s<0?0:s>n?n:s,l:l.left||a<0?0:a>t?t:a}}function Be(e){var t=Re(e),n=t.right-t.left,i=t.bottom-t.top,r=ze(e,n/2,i/2);return{outer:{x:t.left,y:t.top,w:n,h:i},inner:{x:t.left+r.l,y:t.top+r.t,w:n-r.l-r.r,h:i-r.t-r.b}}}function Ve(e,t,n){var i=null===t,r=null===n,s=!(!e||i&&r)&&Re(e);return s&&(i||t>=s.left&&t<=s.right)&&(r||n>=s.top&&n<=s.bottom)}X._set("global",{elements:{rectangle:{backgroundColor:Te,borderColor:Te,borderSkipped:"bottom",borderWidth:0}}});var He=ge.extend({_type:"rectangle",draw:function(){var e=this._chart.ctx,t=this._view,n=Be(t),i=n.outer,r=n.inner;e.fillStyle=t.backgroundColor,e.fillRect(i.x,i.y,i.w,i.h),i.w===r.w&&i.h===r.h||(e.save(),e.beginPath(),e.rect(i.x,i.y,i.w,i.h),e.clip(),e.fillStyle=t.borderColor,e.rect(r.x,r.y,r.w,r.h),e.fill("evenodd"),e.restore())},height:function(){var e=this._view;return e.base-e.y},inRange:function(e,t){return Ve(this._view,e,t)},inLabelRange:function(e,t){var n=this._view;return Fe(n)?Ve(n,e,null):Ve(n,null,t)},inXRange:function(e){return Ve(this._view,e,null)},inYRange:function(e){return Ve(this._view,null,e)},getCenterPoint:function(){var e,t,n=this._view;return Fe(n)?(e=n.x,t=(n.y+n.base)/2):(e=(n.x+n.base)/2,t=n.y),{x:e,y:t}},getArea:function(){var e=this._view;return Fe(e)?e.width*Math.abs(e.y-e.base):e.height*Math.abs(e.x-e.base)},tooltipPosition:function(){var e=this._view;return{x:e.x,y:e.y}}}),We={},Ye=Ze,Ge=Ne,qe=Oe,Qe=He;We.Arc=Ye,We.Line=Ge,We.Point=qe,We.Rectangle=Qe;var Ke=se._deprecated,Xe=se.valueOrDefault;function $e(e,t){var n,i,r,s,a=e._length;for(r=1,s=t.length;r0?Math.min(a,Math.abs(i-n)):a,n=i;return a}function Je(e,t,n){var i,r,s=n.barThickness,a=t.stackCount,o=t.pixels[e],l=se.isNullOrUndef(s)?$e(t.scale,t.pixels):-1;return se.isNullOrUndef(s)?(i=l*n.categoryPercentage,r=n.barPercentage):(i=s*a,r=1),{chunk:i/a,ratio:r,start:o-i/2}}function et(e,t,n){var i,r=t.pixels,s=r[e],a=e>0?r[e-1]:null,o=e=0&&f.min>=0?f.min:f.max,j=void 0===f.start?f.end:f.max>=0&&f.min>=0?f.max-f.min:f.min-f.max,S=m.length;if(x||void 0===x&&void 0!==y)for(i=0;i=0&&c.max>=0?c.max:c.min,(f.min<0&&s<0||f.max>=0&&s>0)&&(b+=s));return a=u.getPixelForValue(b),l=(o=u.getPixelForValue(b+j))-a,void 0!==v&&Math.abs(l)=0&&!g||j<0&&g?a-v:a+v),{size:l,base:a,head:o,center:o+l/2}},calculateBarIndexPixels:function(e,t,n,i){var r=this,s="flex"===i.barThickness?et(t,n,i):Je(t,n,i),a=r.getStackIndex(e,r.getMeta().stack),o=s.start+s.chunk*a+s.chunk/2,l=Math.min(Xe(i.maxBarThickness,1/0),s.chunk*s.ratio);return{base:o-l/2,head:o+l/2,center:o,size:l}},draw:function(){var e=this,t=e.chart,n=e._getValueScale(),i=e.getMeta().data,r=e.getDataset(),s=i.length,a=0;for(se.canvas.clipArea(t.ctx,t.chartArea);a=at?-ot:x<-at?ot:0)+f,b=Math.cos(x),j=Math.sin(x),S=Math.cos(y),D=Math.sin(y),w=x<=0&&y>=0||y>=ot,I=x<=lt&&y>=lt||y>=ot+lt,P=x<=-lt&&y>=-lt||y>=at+lt,Z=x===-at||y>=at?-1:Math.min(b,b*m,S,S*m),k=P?-1:Math.min(j,j*m,D,D*m),_=w?1:Math.max(b,b*m,S,S*m),N=I?1:Math.max(j,j*m,D,D*m);c=(_-Z)/2,h=(N-k)/2,d=-(_+Z)/2,u=-(N+k)/2}for(i=0,r=p.length;i0&&!isNaN(e)?ot*(Math.abs(e)/t):0},getMaxBorderWidth:function(e){var t,n,i,r,s,a,o,l,c=this,h=0,d=c.chart;if(!e)for(t=0,n=d.data.datasets.length;t(h=o>h?o:h)?l:h);return h},setHoverStyle:function(e){var t=e._model,n=e._options,i=se.getHoverColor;e.$previousStyle={backgroundColor:t.backgroundColor,borderColor:t.borderColor,borderWidth:t.borderWidth},t.backgroundColor=st(n.hoverBackgroundColor,i(n.backgroundColor)),t.borderColor=st(n.hoverBorderColor,i(n.borderColor)),t.borderWidth=st(n.hoverBorderWidth,n.borderWidth)},_getRingWeightOffset:function(e){for(var t=0,n=0;n0&>(c[e-1]._model,l)&&(n.controlPointPreviousX=h(n.controlPointPreviousX,l.left,l.right),n.controlPointPreviousY=h(n.controlPointPreviousY,l.top,l.bottom)),e0&&(s=e.getDatasetMeta(s[0]._datasetIndex).data),s},"x-axis":function(e,t){return _t(e,t,{intersect:!1})},point:function(e,t){return Pt(e,wt(t,e))},nearest:function(e,t,n){var i=wt(t,e);n.axis=n.axis||"xy";var r=kt(n.axis);return Zt(e,i,n.intersect,r)},x:function(e,t,n){var i=wt(t,e),r=[],s=!1;return It(e,(function(e){e.inXRange(i.x)&&r.push(e),e.inRange(i.x,i.y)&&(s=!0)})),n.intersect&&!s&&(r=[]),r},y:function(e,t,n){var i=wt(t,e),r=[],s=!1;return It(e,(function(e){e.inYRange(i.y)&&r.push(e),e.inRange(i.x,i.y)&&(s=!0)})),n.intersect&&!s&&(r=[]),r}}},Mt=se.extend;function Ct(e,t){return se.where(e,(function(e){return e.pos===t}))}function At(e,t){return e.sort((function(e,n){var i=t?n:e,r=t?e:n;return i.weight===r.weight?i.index-r.index:i.weight-r.weight}))}function Lt(e){var t,n,i,r=[];for(t=0,n=(e||[]).length;t div {\r\n\tposition: absolute;\r\n\twidth: 1000000px;\r\n\theight: 1000000px;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n\r\n.chartjs-size-monitor-shrink > div {\r\n\tposition: absolute;\r\n\twidth: 200%;\r\n\theight: 200%;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n",Yt=n(Object.freeze({__proto__:null,default:Wt})),Gt="$chartjs",qt="chartjs-",Qt=qt+"size-monitor",Kt=qt+"render-monitor",Xt=qt+"render-animation",$t=["animationstart","webkitAnimationStart"],Jt={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function en(e,t){var n=se.getStyle(e,t),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}function tn(e,t){var n=e.style,i=e.getAttribute("height"),r=e.getAttribute("width");if(e[Gt]={initial:{height:i,width:r,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",null===r||""===r){var s=en(e,"width");void 0!==s&&(e.width=s)}if(null===i||""===i)if(""===e.style.height)e.height=e.width/(t.options.aspectRatio||2);else{var a=en(e,"height");void 0!==s&&(e.height=a)}return e}var nn=!!function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("e",null,t)}catch(n){}return e}()&&{passive:!0};function rn(e,t,n){e.addEventListener(t,n,nn)}function sn(e,t,n){e.removeEventListener(t,n,nn)}function an(e,t,n,i,r){return{type:e,chart:t,native:r||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function on(e,t){var n=Jt[e.type]||e.type,i=se.getRelativePosition(e,t);return an(n,t,i.x,i.y,e)}function ln(e,t){var n=!1,i=[];return function(){i=Array.prototype.slice.call(arguments),t=t||this,n||(n=!0,se.requestAnimFrame.call(window,(function(){n=!1,e.apply(t,i)})))}}function cn(e){var t=document.createElement("div");return t.className=e||"",t}function hn(e){var t=1e6,n=cn(Qt),i=cn(Qt+"-expand"),r=cn(Qt+"-shrink");i.appendChild(cn()),r.appendChild(cn()),n.appendChild(i),n.appendChild(r),n._reset=function(){i.scrollLeft=t,i.scrollTop=t,r.scrollLeft=t,r.scrollTop=t};var s=function(){n._reset(),e()};return rn(i,"scroll",s.bind(i,"expand")),rn(r,"scroll",s.bind(r,"shrink")),n}function dn(e,t){var n=e[Gt]||(e[Gt]={}),i=n.renderProxy=function(e){e.animationName===Xt&&t()};se.each($t,(function(t){rn(e,t,i)})),n.reflow=!!e.offsetParent,e.classList.add(Kt)}function un(e){var t=e[Gt]||{},n=t.renderProxy;n&&(se.each($t,(function(t){sn(e,t,n)})),delete t.renderProxy),e.classList.remove(Kt)}function gn(e,t,n){var i=e[Gt]||(e[Gt]={}),r=i.resizer=hn(ln((function(){if(i.resizer){var r=n.options.maintainAspectRatio&&e.parentNode,s=r?r.clientWidth:0;t(an("resize",n)),r&&r.clientWidth0){var s=e[0];s.label?n=s.label:s.xLabel?n=s.xLabel:r>0&&s.index-1?e.split("\n"):e}function Pn(e){var t=e._xScale,n=e._yScale||e._scale,i=e._index,r=e._datasetIndex,s=e._chart.getDatasetMeta(r).controller,a=s._getIndexScale(),o=s._getValueScale();return{xLabel:t?t.getLabelForIndex(i,r):"",yLabel:n?n.getLabelForIndex(i,r):"",label:a?""+a.getLabelForIndex(i,r):"",value:o?""+o.getLabelForIndex(i,r):"",index:i,datasetIndex:r,x:e._model.x,y:e._model.y}}function Zn(e){var t=X.global;return{xPadding:e.xPadding,yPadding:e.yPadding,xAlign:e.xAlign,yAlign:e.yAlign,rtl:e.rtl,textDirection:e.textDirection,bodyFontColor:e.bodyFontColor,_bodyFontFamily:jn(e.bodyFontFamily,t.defaultFontFamily),_bodyFontStyle:jn(e.bodyFontStyle,t.defaultFontStyle),_bodyAlign:e.bodyAlign,bodyFontSize:jn(e.bodyFontSize,t.defaultFontSize),bodySpacing:e.bodySpacing,titleFontColor:e.titleFontColor,_titleFontFamily:jn(e.titleFontFamily,t.defaultFontFamily),_titleFontStyle:jn(e.titleFontStyle,t.defaultFontStyle),titleFontSize:jn(e.titleFontSize,t.defaultFontSize),_titleAlign:e.titleAlign,titleSpacing:e.titleSpacing,titleMarginBottom:e.titleMarginBottom,footerFontColor:e.footerFontColor,_footerFontFamily:jn(e.footerFontFamily,t.defaultFontFamily),_footerFontStyle:jn(e.footerFontStyle,t.defaultFontStyle),footerFontSize:jn(e.footerFontSize,t.defaultFontSize),_footerAlign:e.footerAlign,footerSpacing:e.footerSpacing,footerMarginTop:e.footerMarginTop,caretSize:e.caretSize,cornerRadius:e.cornerRadius,backgroundColor:e.backgroundColor,opacity:0,legendColorBackground:e.multiKeyBackground,displayColors:e.displayColors,borderColor:e.borderColor,borderWidth:e.borderWidth}}function kn(e,t){var n=e._chart.ctx,i=2*t.yPadding,r=0,s=t.body,a=s.reduce((function(e,t){return e+t.before.length+t.lines.length+t.after.length}),0);a+=t.beforeBody.length+t.afterBody.length;var o=t.title.length,l=t.footer.length,c=t.titleFontSize,h=t.bodyFontSize,d=t.footerFontSize;i+=o*c,i+=o?(o-1)*t.titleSpacing:0,i+=o?t.titleMarginBottom:0,i+=a*h,i+=a?(a-1)*t.bodySpacing:0,i+=l?t.footerMarginTop:0,i+=l*d,i+=l?(l-1)*t.footerSpacing:0;var u=0,g=function(e){r=Math.max(r,n.measureText(e).width+u)};return n.font=se.fontString(c,t._titleFontStyle,t._titleFontFamily),se.each(t.title,g),n.font=se.fontString(h,t._bodyFontStyle,t._bodyFontFamily),se.each(t.beforeBody.concat(t.afterBody),g),u=t.displayColors?h+2:0,se.each(s,(function(e){se.each(e.before,g),se.each(e.lines,g),se.each(e.after,g)})),u=0,n.font=se.fontString(d,t._footerFontStyle,t._footerFontFamily),se.each(t.footer,g),{width:r+=2*t.xPadding,height:i}}function _n(e,t){var n,i,r,s,a,o=e._model,l=e._chart,c=e._chart.chartArea,h="center",d="center";o.yl.height-t.height&&(d="bottom");var u=(c.left+c.right)/2,g=(c.top+c.bottom)/2;"center"===d?(n=function(e){return e<=u},i=function(e){return e>u}):(n=function(e){return e<=t.width/2},i=function(e){return e>=l.width-t.width/2}),r=function(e){return e+t.width+o.caretSize+o.caretPadding>l.width},s=function(e){return e-t.width-o.caretSize-o.caretPadding<0},a=function(e){return e<=g?"top":"bottom"},n(o.x)?(h="left",r(o.x)&&(h="center",d=a(o.y))):i(o.x)&&(h="right",s(o.x)&&(h="center",d=a(o.y)));var p=e._options;return{xAlign:p.xAlign?p.xAlign:h,yAlign:p.yAlign?p.yAlign:d}}function Nn(e,t,n,i){var r=e.x,s=e.y,a=e.caretSize,o=e.caretPadding,l=e.cornerRadius,c=n.xAlign,h=n.yAlign,d=a+o,u=l+o;return"right"===c?r-=t.width:"center"===c&&((r-=t.width/2)+t.width>i.width&&(r=i.width-t.width),r<0&&(r=0)),"top"===h?s+=d:s-="bottom"===h?t.height+d:t.height/2,"center"===h?"left"===c?r+=d:"right"===c&&(r-=d):"left"===c?r-=u:"right"===c&&(r+=u),{x:r,y:s}}function Mn(e,t){return"center"===t?e.x+e.width/2:"right"===t?e.x+e.width-e.xPadding:e.x+e.xPadding}function Cn(e){return wn([],In(e))}var An=ge.extend({initialize:function(){this._model=Zn(this._options),this._lastActive=[]},getTitle:function(){var e=this,t=e._options.callbacks,n=t.beforeTitle.apply(e,arguments),i=t.title.apply(e,arguments),r=t.afterTitle.apply(e,arguments),s=[];return s=wn(s,In(n)),s=wn(s,In(i)),s=wn(s,In(r))},getBeforeBody:function(){return Cn(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(e,t){var n=this,i=n._options.callbacks,r=[];return se.each(e,(function(e){var s={before:[],lines:[],after:[]};wn(s.before,In(i.beforeLabel.call(n,e,t))),wn(s.lines,i.label.call(n,e,t)),wn(s.after,In(i.afterLabel.call(n,e,t))),r.push(s)})),r},getAfterBody:function(){return Cn(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var e=this,t=e._options.callbacks,n=t.beforeFooter.apply(e,arguments),i=t.footer.apply(e,arguments),r=t.afterFooter.apply(e,arguments),s=[];return s=wn(s,In(n)),s=wn(s,In(i)),s=wn(s,In(r))},update:function(e){var t,n,i=this,r=i._options,s=i._model,a=i._model=Zn(r),o=i._active,l=i._data,c={xAlign:s.xAlign,yAlign:s.yAlign},h={x:s.x,y:s.y},d={width:s.width,height:s.height},u={x:s.caretX,y:s.caretY};if(o.length){a.opacity=1;var g=[],p=[];u=Dn[r.position].call(i,o,i._eventPosition);var m=[];for(t=0,n=o.length;t0&&n.stroke()},draw:function(){var e=this._chart.ctx,t=this._view;if(0!==t.opacity){var n={width:t.width,height:t.height},i={x:t.x,y:t.y},r=Math.abs(t.opacity<.001)?0:t.opacity,s=t.title.length||t.beforeBody.length||t.body.length||t.afterBody.length||t.footer.length;this._options.enabled&&s&&(e.save(),e.globalAlpha=r,this.drawBackground(i,t,e,n),i.y+=t.yPadding,se.rtl.overrideTextDirection(e,t.textDirection),this.drawTitle(i,t,e),this.drawBody(i,t,e),this.drawFooter(i,t,e),se.rtl.restoreTextDirection(e,t.textDirection),e.restore())}},handleEvent:function(e){var t=this,n=t._options,i=!1;return t._lastActive=t._lastActive||[],"mouseout"===e.type?t._active=[]:(t._active=t._chart.getElementsAtEventForMode(e,n.mode,n),n.reverse&&t._active.reverse()),(i=!se.arrayEquals(t._active,t._lastActive))&&(t._lastActive=t._active,(n.enabled||n.custom)&&(t._eventPosition={x:e.x,y:e.y},t.update(!0),t.pivot())),i}}),Ln=Dn,On=An;On.positioners=Ln;var Tn=se.valueOrDefault;function Fn(){return se.merge(Object.create(null),[].slice.call(arguments),{merger:function(e,t,n,i){if("xAxes"===e||"yAxes"===e){var r,s,a,o=n[e].length;for(t[e]||(t[e]=[]),r=0;r=t[e].length&&t[e].push({}),!t[e][r].type||a.type&&a.type!==t[e][r].type?se.merge(t[e][r],[bn.getScaleDefaults(s),a]):se.merge(t[e][r],a)}else se._merger(e,t,n,i)}})}function Rn(){return se.merge(Object.create(null),[].slice.call(arguments),{merger:function(e,t,n,i){var r=t[e]||Object.create(null),s=n[e];"scales"===e?t[e]=Fn(r,s):"scale"===e?t[e]=se.merge(r,[bn.getScaleDefaults(s.type),s]):se._merger(e,t,n,i)}})}function Un(e){var t=(e=e||Object.create(null)).data=e.data||{};return t.datasets=t.datasets||[],t.labels=t.labels||[],e.options=Rn(X.global,X[e.type],e.options||{}),e}function En(e){var t=e.options;se.each(e.scales,(function(t){Vt.removeBox(e,t)})),t=Rn(X.global,X[e.config.type],t),e.options=e.config.options=t,e.ensureScalesHaveIDs(),e.buildOrUpdateScales(),e.tooltip._options=t.tooltips,e.tooltip.initialize()}function zn(e,t,n){var i,r=function(e){return e.id===i};do{i=t+n++}while(se.findIndex(e,r)>=0);return i}function Bn(e){return"top"===e||"bottom"===e}function Vn(e,t){return function(n,i){return n[e]===i[e]?n[t]-i[t]:n[e]-i[e]}}X._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var Hn=function(e,t){return this.construct(e,t),this};se.extend(Hn.prototype,{construct:function(e,t){var n=this;t=Un(t);var i=xn.acquireContext(e,t),r=i&&i.canvas,s=r&&r.height,a=r&&r.width;n.id=se.uid(),n.ctx=i,n.canvas=r,n.config=t,n.width=a,n.height=s,n.aspectRatio=s?a/s:null,n.options=t.options,n._bufferedRender=!1,n._layers=[],n.chart=n,n.controller=n,Hn.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(e){n.config.data=e}}),i&&r?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var e=this;return yn.notify(e,"beforeInit"),se.retinaScale(e,e.options.devicePixelRatio),e.bindEvents(),e.options.responsive&&e.resize(!0),e.initToolTip(),yn.notify(e,"afterInit"),e},clear:function(){return se.canvas.clear(this),this},stop:function(){return fe.cancelAnimation(this),this},resize:function(e){var t=this,n=t.options,i=t.canvas,r=n.maintainAspectRatio&&t.aspectRatio||null,s=Math.max(0,Math.floor(se.getMaximumWidth(i))),a=Math.max(0,Math.floor(r?s/r:se.getMaximumHeight(i)));if((t.width!==s||t.height!==a)&&(i.width=t.width=s,i.height=t.height=a,i.style.width=s+"px",i.style.height=a+"px",se.retinaScale(t,n.devicePixelRatio),!e)){var o={width:s,height:a};yn.notify(t,"resize",[o]),n.onResize&&n.onResize(t,o),t.stop(),t.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var e=this.options,t=e.scales||{},n=e.scale;se.each(t.xAxes,(function(e,n){e.id||(e.id=zn(t.xAxes,"x-axis-",n))})),se.each(t.yAxes,(function(e,n){e.id||(e.id=zn(t.yAxes,"y-axis-",n))})),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var e=this,t=e.options,n=e.scales||{},i=[],r=Object.keys(n).reduce((function(e,t){return e[t]=!1,e}),{});t.scales&&(i=i.concat((t.scales.xAxes||[]).map((function(e){return{options:e,dtype:"category",dposition:"bottom"}})),(t.scales.yAxes||[]).map((function(e){return{options:e,dtype:"linear",dposition:"left"}})))),t.scale&&i.push({options:t.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),se.each(i,(function(t){var i=t.options,s=i.id,a=Tn(i.type,t.dtype);Bn(i.position)!==Bn(t.dposition)&&(i.position=t.dposition),r[s]=!0;var o=null;if(s in n&&n[s].type===a)(o=n[s]).options=i,o.ctx=e.ctx,o.chart=e;else{var l=bn.getScaleConstructor(a);if(!l)return;o=new l({id:s,type:a,options:i,ctx:e.ctx,chart:e}),n[o.id]=o}o.mergeTicksOptions(),t.isDefault&&(e.scale=o)})),se.each(r,(function(e,t){e||delete n[t]})),e.scales=n,bn.addScalesToLayout(this)},buildOrUpdateControllers:function(){var e,t,n=this,i=[],r=n.data.datasets;for(e=0,t=r.length;e=0;--n)i.drawDataset(t[n],e);yn.notify(i,"afterDatasetsDraw",[e])}},drawDataset:function(e,t){var n=this,i={meta:e,index:e.index,easingValue:t};!1!==yn.notify(n,"beforeDatasetDraw",[i])&&(e.controller.draw(t),yn.notify(n,"afterDatasetDraw",[i]))},_drawTooltip:function(e){var t=this,n=t.tooltip,i={tooltip:n,easingValue:e};!1!==yn.notify(t,"beforeTooltipDraw",[i])&&(n.draw(),yn.notify(t,"afterTooltipDraw",[i]))},getElementAtEvent:function(e){return Nt.modes.single(this,e)},getElementsAtEvent:function(e){return Nt.modes.label(this,e,{intersect:!0})},getElementsAtXAxis:function(e){return Nt.modes["x-axis"](this,e,{intersect:!0})},getElementsAtEventForMode:function(e,t,n){var i=Nt.modes[t];return"function"===typeof i?i(this,e,n):[]},getDatasetAtEvent:function(e){return Nt.modes.dataset(this,e,{intersect:!0})},getDatasetMeta:function(e){var t=this,n=t.data.datasets[e];n._meta||(n._meta={});var i=n._meta[t.id];return i||(i=n._meta[t.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:n.order||0,index:e}),i},getVisibleDatasetCount:function(){for(var e=0,t=0,n=this.data.datasets.length;t=0;i--){var r=e[i];if(t(r))return r}},se.isNumber=function(e){return!isNaN(parseFloat(e))&&isFinite(e)},se.almostEquals=function(e,t,n){return Math.abs(e-t)=e},se.max=function(e){return e.reduce((function(e,t){return isNaN(t)?e:Math.max(e,t)}),Number.NEGATIVE_INFINITY)},se.min=function(e){return e.reduce((function(e,t){return isNaN(t)?e:Math.min(e,t)}),Number.POSITIVE_INFINITY)},se.sign=Math.sign?function(e){return Math.sign(e)}:function(e){return 0===(e=+e)||isNaN(e)?e:e>0?1:-1},se.toRadians=function(e){return e*(Math.PI/180)},se.toDegrees=function(e){return e*(180/Math.PI)},se._decimalPlaces=function(e){if(se.isFinite(e)){for(var t=1,n=0;Math.round(e*t)/t!==e;)t*=10,n++;return n}},se.getAngleFromPoint=function(e,t){var n=t.x-e.x,i=t.y-e.y,r=Math.sqrt(n*n+i*i),s=Math.atan2(i,n);return s<-.5*Math.PI&&(s+=2*Math.PI),{angle:s,distance:r}},se.distanceBetweenPoints=function(e,t){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))},se.aliasPixel=function(e){return e%2===0?0:.5},se._alignPixel=function(e,t,n){var i=e.currentDevicePixelRatio,r=n/2;return Math.round((t-r)*i)/i+r},se.splineCurve=function(e,t,n,i){var r=e.skip?t:e,s=t,a=n.skip?t:n,o=Math.sqrt(Math.pow(s.x-r.x,2)+Math.pow(s.y-r.y,2)),l=Math.sqrt(Math.pow(a.x-s.x,2)+Math.pow(a.y-s.y,2)),c=o/(o+l),h=l/(o+l),d=i*(c=isNaN(c)?0:c),u=i*(h=isNaN(h)?0:h);return{previous:{x:s.x-d*(a.x-r.x),y:s.y-d*(a.y-r.y)},next:{x:s.x+u*(a.x-r.x),y:s.y+u*(a.y-r.y)}}},se.EPSILON=Number.EPSILON||1e-14,se.splineCurveMonotone=function(e){var t,n,i,r,s,a,o,l,c,h=(e||[]).map((function(e){return{model:e._model,deltaK:0,mK:0}})),d=h.length;for(t=0;t0?h[t-1]:null,(r=t0?h[t-1]:null,r=t=e.length-1?e[0]:e[t+1]:t>=e.length-1?e[e.length-1]:e[t+1]},se.previousItem=function(e,t,n){return n?t<=0?e[e.length-1]:e[t-1]:t<=0?e[0]:e[t-1]},se.niceNum=function(e,t){var n=Math.floor(se.log10(e)),i=e/Math.pow(10,n);return(t?i<1.5?1:i<3?2:i<7?5:10:i<=1?1:i<=2?2:i<=5?5:10)*Math.pow(10,n)},se.requestAnimFrame="undefined"===typeof window?function(e){e()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){return window.setTimeout(e,1e3/60)},se.getRelativePosition=function(e,t){var n,i,r=e.originalEvent||e,s=e.target||e.srcElement,a=s.getBoundingClientRect(),o=r.touches;o&&o.length>0?(n=o[0].clientX,i=o[0].clientY):(n=r.clientX,i=r.clientY);var l=parseFloat(se.getStyle(s,"padding-left")),c=parseFloat(se.getStyle(s,"padding-top")),h=parseFloat(se.getStyle(s,"padding-right")),d=parseFloat(se.getStyle(s,"padding-bottom")),u=a.right-a.left-l-h,g=a.bottom-a.top-c-d;return{x:n=Math.round((n-a.left-l)/u*s.width/t.currentDevicePixelRatio),y:i=Math.round((i-a.top-c)/g*s.height/t.currentDevicePixelRatio)}},se.getConstraintWidth=function(e){return n(e,"max-width","clientWidth")},se.getConstraintHeight=function(e){return n(e,"max-height","clientHeight")},se._calculatePadding=function(e,t,n){return(t=se.getStyle(e,t)).indexOf("%")>-1?n*parseInt(t,10)/100:parseInt(t,10)},se._getParentNode=function(e){var t=e.parentNode;return t&&"[object ShadowRoot]"===t.toString()&&(t=t.host),t},se.getMaximumWidth=function(e){var t=se._getParentNode(e);if(!t)return e.clientWidth;var n=t.clientWidth,i=n-se._calculatePadding(t,"padding-left",n)-se._calculatePadding(t,"padding-right",n),r=se.getConstraintWidth(e);return isNaN(r)?i:Math.min(i,r)},se.getMaximumHeight=function(e){var t=se._getParentNode(e);if(!t)return e.clientHeight;var n=t.clientHeight,i=n-se._calculatePadding(t,"padding-top",n)-se._calculatePadding(t,"padding-bottom",n),r=se.getConstraintHeight(e);return isNaN(r)?i:Math.min(i,r)},se.getStyle=function(e,t){return e.currentStyle?e.currentStyle[t]:document.defaultView.getComputedStyle(e,null).getPropertyValue(t)},se.retinaScale=function(e,t){var n=e.currentDevicePixelRatio=t||"undefined"!==typeof window&&window.devicePixelRatio||1;if(1!==n){var i=e.canvas,r=e.height,s=e.width;i.height=r*n,i.width=s*n,e.ctx.scale(n,n),i.style.height||i.style.width||(i.style.height=r+"px",i.style.width=s+"px")}},se.fontString=function(e,t,n){return t+" "+e+"px "+n},se.longestText=function(e,t,n,i){var r=(i=i||{}).data=i.data||{},s=i.garbageCollect=i.garbageCollect||[];i.font!==t&&(r=i.data={},s=i.garbageCollect=[],i.font=t),e.font=t;var a,o,l,c,h,d=0,u=n.length;for(a=0;an.length){for(a=0;ai&&(i=s),i},se.numberOfLabelLines=function(e){var t=1;return se.each(e,(function(e){se.isArray(e)&&e.length>t&&(t=e.length)})),t},se.color=T?function(e){return e instanceof CanvasGradient&&(e=X.global.defaultColor),T(e)}:function(e){return console.error("Color.js not found!"),e},se.getHoverColor=function(e){return e instanceof CanvasPattern||e instanceof CanvasGradient?e:se.color(e).saturate(.5).darken(.1).rgbString()}};function Gn(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function qn(e){this.options=e||{}}se.extend(qn.prototype,{formats:Gn,parse:Gn,format:Gn,add:Gn,diff:Gn,startOf:Gn,endOf:Gn,_create:function(e){return e}}),qn.override=function(e){se.extend(qn.prototype,e)};var Qn={_date:qn},Kn={formatters:{values:function(e){return se.isArray(e)?e:""+e},linear:function(e,t,n){var i=n.length>3?n[2]-n[1]:n[1]-n[0];Math.abs(i)>1&&e!==Math.floor(e)&&(i=e-Math.floor(e));var r=se.log10(Math.abs(i)),s="";if(0!==e)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var a=se.log10(Math.abs(e)),o=Math.floor(a)-Math.floor(r);o=Math.max(Math.min(o,20),0),s=e.toExponential(o)}else{var l=-1*Math.floor(r);l=Math.max(Math.min(l,20),0),s=e.toFixed(l)}else s="0";return s},logarithmic:function(e,t,n){var i=e/Math.pow(10,Math.floor(se.log10(e)));return 0===e?"0":1===i||2===i||5===i||0===t||t===n.length-1?e.toExponential():""}}},Xn=se.isArray,$n=se.isNullOrUndef,Jn=se.valueOrDefault,ei=se.valueAtIndexOrDefault;function ti(e,t){for(var n=[],i=e.length/t,r=0,s=e.length;rl+c)))return a}function ii(e,t){se.each(e,(function(e){var n,i=e.gc,r=i.length/2;if(r>t){for(n=0;nc)return s;return Math.max(c,1)}function ui(e){var t,n,i=[];for(t=0,n=e.length;t=u||h<=1||!o.isHorizontal()?o.labelRotation=d:(t=(e=o._getLabelSizes()).widest.width,n=e.highest.height-e.highest.offset,i=Math.min(o.maxWidth,o.chart.width-t),t+6>(r=l.offset?o.maxWidth/h:i/(h-1))&&(r=i/(h-(l.offset?.5:1)),s=o.maxHeight-si(l.gridLines)-c.padding-ai(l.scaleLabel),a=Math.sqrt(t*t+n*n),g=se.toDegrees(Math.min(Math.asin(Math.min((e.highest.height+6)/r,1)),Math.asin(Math.min(s/a,1))-Math.asin(n/a))),g=Math.max(d,Math.min(u,g))),o.labelRotation=g)},afterCalculateTickRotation:function(){se.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){se.callback(this.options.beforeFit,[this])},fit:function(){var e=this,t=e.minSize={width:0,height:0},n=e.chart,i=e.options,r=i.ticks,s=i.scaleLabel,a=i.gridLines,o=e._isVisible(),l="bottom"===i.position,c=e.isHorizontal();if(c?t.width=e.maxWidth:o&&(t.width=si(a)+ai(s)),c?o&&(t.height=si(a)+ai(s)):t.height=e.maxHeight,r.display&&o){var h=li(r),d=e._getLabelSizes(),u=d.first,g=d.last,p=d.widest,m=d.highest,f=.4*h.minor.lineHeight,v=r.padding;if(c){var x=0!==e.labelRotation,y=se.toRadians(e.labelRotation),b=Math.cos(y),j=Math.sin(y),S=j*p.width+b*(m.height-(x?m.offset:0))+(x?0:f);t.height=Math.min(e.maxHeight,t.height+S+v);var D,w,I=e.getPixelForTick(0)-e.left,P=e.right-e.getPixelForTick(e.getTicks().length-1);x?(D=l?b*u.width+j*u.offset:j*(u.height-u.offset),w=l?j*(g.height-g.offset):b*g.width+j*g.offset):(D=u.width/2,w=g.width/2),e.paddingLeft=Math.max((D-I)*e.width/(e.width-I),0)+3,e.paddingRight=Math.max((w-P)*e.width/(e.width-P),0)+3}else{var Z=r.mirror?0:p.width+v+f;t.width=Math.min(e.maxWidth,t.width+Z),e.paddingTop=u.height/2,e.paddingBottom=g.height/2}}e.handleMargins(),c?(e.width=e._length=n.width-e.margins.left-e.margins.right,e.height=t.height):(e.width=t.width,e.height=e._length=n.height-e.margins.top-e.margins.bottom)},handleMargins:function(){var e=this;e.margins&&(e.margins.left=Math.max(e.paddingLeft,e.margins.left),e.margins.top=Math.max(e.paddingTop,e.margins.top),e.margins.right=Math.max(e.paddingRight,e.margins.right),e.margins.bottom=Math.max(e.paddingBottom,e.margins.bottom))},afterFit:function(){se.callback(this.options.afterFit,[this])},isHorizontal:function(){var e=this.options.position;return"top"===e||"bottom"===e},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(e){if($n(e))return NaN;if(("number"===typeof e||e instanceof Number)&&!isFinite(e))return NaN;if(e)if(this.isHorizontal()){if(void 0!==e.x)return this.getRightValue(e.x)}else if(void 0!==e.y)return this.getRightValue(e.y);return e},_convertTicksToLabels:function(e){var t,n,i,r=this;for(r.ticks=e.map((function(e){return e.value})),r.beforeTickToLabelConversion(),t=r.convertTicksToLabels(e)||r.ticks,r.afterTickToLabelConversion(),n=0,i=e.length;ni-1?null:t.getPixelForDecimal(e*r+(n?r/2:0))},getPixelForDecimal:function(e){var t=this;return t._reversePixels&&(e=1-e),t._startPixel+e*t._length},getDecimalForPixel:function(e){var t=(e-this._startPixel)/this._length;return this._reversePixels?1-t:t},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var e=this,t=e.min,n=e.max;return e.beginAtZero?0:t<0&&n<0?n:t>0&&n>0?t:0},_autoSkip:function(e){var t,n,i,r,s=this,a=s.options.ticks,o=s._length,l=a.maxTicksLimit||o/s._tickSize()+1,c=a.major.enabled?ui(e):[],h=c.length,d=c[0],u=c[h-1];if(h>l)return gi(e,c,h/l),ci(e);if(i=di(c,e,o,l),h>0){for(t=0,n=h-1;t1?(u-d)/(h-1):null,pi(e,i,se.isNullOrUndef(r)?0:d-r,d),pi(e,i,u,se.isNullOrUndef(r)?e.length:u+r),ci(e)}return pi(e,i),ci(e)},_tickSize:function(){var e=this,t=e.options.ticks,n=se.toRadians(e.labelRotation),i=Math.abs(Math.cos(n)),r=Math.abs(Math.sin(n)),s=e._getLabelSizes(),a=t.autoSkipPadding||0,o=s?s.widest.width+a:0,l=s?s.highest.height+a:0;return e.isHorizontal()?l*i>o*r?o/i:l/r:l*r=0&&(a=e),void 0!==s&&(e=n.indexOf(s))>=0&&(o=e),t.minIndex=a,t.maxIndex=o,t.min=n[a],t.max=n[o]},buildTicks:function(){var e=this,t=e._getLabels(),n=e.minIndex,i=e.maxIndex;e.ticks=0===n&&i===t.length-1?t:t.slice(n,i+1)},getLabelForIndex:function(e,t){var n=this,i=n.chart;return i.getDatasetMeta(t).controller._getValueScaleId()===n.id?n.getRightValue(i.data.datasets[t].data[e]):n._getLabels()[e]},_configure:function(){var e=this,t=e.options.offset,n=e.ticks;fi.prototype._configure.call(e),e.isHorizontal()||(e._reversePixels=!e._reversePixels),n&&(e._startValue=e.minIndex-(t?.5:0),e._valueRange=Math.max(n.length-(t?0:1),1))},getPixelForValue:function(e,t,n){var i,r,s,a=this;return vi(t)||vi(n)||(e=a.chart.data.datasets[n].data[t]),vi(e)||(i=a.isHorizontal()?e.x:e.y),(void 0!==i||void 0!==e&&isNaN(t))&&(r=a._getLabels(),e=se.valueOrDefault(i,e),t=-1!==(s=r.indexOf(e))?s:t,isNaN(t)&&(t=e)),a.getPixelForDecimal((t-a._startValue)/a._valueRange)},getPixelForTick:function(e){var t=this.ticks;return e<0||e>t.length-1?null:this.getPixelForValue(t[e],e+this.minIndex)},getValueForPixel:function(e){var t=this,n=Math.round(t._startValue+t.getDecimalForPixel(e)*t._valueRange);return Math.min(Math.max(n,0),t.ticks.length-1)},getBasePixel:function(){return this.bottom}}),bi=xi;yi._defaults=bi;var ji=se.noop,Si=se.isNullOrUndef;function Di(e,t){var n,i,r,s,a=[],o=1e-14,l=e.stepSize,c=l||1,h=e.maxTicks-1,d=e.min,u=e.max,g=e.precision,p=t.min,m=t.max,f=se.niceNum((m-p)/h/c)*c;if(fh&&(f=se.niceNum(s*f/h/c)*c),l||Si(g)?n=Math.pow(10,se._decimalPlaces(f)):(n=Math.pow(10,g),f=Math.ceil(f*n)/n),i=Math.floor(p/f)*f,r=Math.ceil(m/f)*f,l&&(!Si(d)&&se.almostWhole(d/f,f/1e3)&&(i=d),!Si(u)&&se.almostWhole(u/f,f/1e3)&&(r=u)),s=(r-i)/f,s=se.almostEquals(s,Math.round(s),f/1e3)?Math.round(s):Math.ceil(s),i=Math.round(i*n)/n,r=Math.round(r*n)/n,a.push(Si(d)?i:d);for(var v=1;v0&&i>0&&(e.min=0)}var r=void 0!==t.min||void 0!==t.suggestedMin,s=void 0!==t.max||void 0!==t.suggestedMax;void 0!==t.min?e.min=t.min:void 0!==t.suggestedMin&&(null===e.min?e.min=t.suggestedMin:e.min=Math.min(e.min,t.suggestedMin)),void 0!==t.max?e.max=t.max:void 0!==t.suggestedMax&&(null===e.max?e.max=t.suggestedMax:e.max=Math.max(e.max,t.suggestedMax)),r!==s&&e.min>=e.max&&(r?e.max=e.min+1:e.min=e.max-1),e.min===e.max&&(e.max++,t.beginAtZero||e.min--)},getTickLimit:function(){var e,t=this,n=t.options.ticks,i=n.stepSize,r=n.maxTicksLimit;return i?e=Math.ceil(t.max/i)-Math.floor(t.min/i)+1:(e=t._computeTickLimit(),r=r||11),r&&(e=Math.min(r,e)),e},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:ji,buildTicks:function(){var e=this,t=e.options.ticks,n=e.getTickLimit(),i={maxTicks:n=Math.max(2,n),min:t.min,max:t.max,precision:t.precision,stepSize:se.valueOrDefault(t.fixedStepSize,t.stepSize)},r=e.ticks=Di(i,e);e.handleDirectionalChanges(),e.max=se.max(r),e.min=se.min(r),t.reverse?(r.reverse(),e.start=e.max,e.end=e.min):(e.start=e.min,e.end=e.max)},convertTicksToLabels:function(){var e=this;e.ticksAsNumbers=e.ticks.slice(),e.zeroLineIndex=e.ticks.indexOf(0),fi.prototype.convertTicksToLabels.call(e)},_configure:function(){var e,t=this,n=t.getTicks(),i=t.min,r=t.max;fi.prototype._configure.call(t),t.options.offset&&n.length&&(i-=e=(r-i)/Math.max(n.length-1,1)/2,r+=e),t._startValue=i,t._endValue=r,t._valueRange=r-i}}),Ii={position:"left",ticks:{callback:Kn.formatters.linear}},Pi=0,Zi=1;function ki(e,t,n){var i=[n.type,void 0===t&&void 0===n.stack?n.index:"",n.stack].join(".");return void 0===e[i]&&(e[i]={pos:[],neg:[]}),e[i]}function _i(e,t,n,i){var r,s,a=e.options,o=ki(t,a.stacked,n),l=o.pos,c=o.neg,h=i.length;for(r=0;rt.length-1?null:this.getPixelForValue(t[e])}}),Ci=Ii;Mi._defaults=Ci;var Ai=se.valueOrDefault,Li=se.math.log10;function Oi(e,t){var n,i,r=[],s=Ai(e.min,Math.pow(10,Math.floor(Li(t.min)))),a=Math.floor(Li(t.max)),o=Math.ceil(t.max/Math.pow(10,a));0===s?(n=Math.floor(Li(t.minNotZero)),i=Math.floor(t.minNotZero/Math.pow(10,n)),r.push(s),s=i*Math.pow(10,n)):(n=Math.floor(Li(s)),i=Math.floor(s/Math.pow(10,n)));var l=n<0?Math.pow(10,Math.abs(n)):1;do{r.push(s),10===++i&&(i=1,l=++n>=0?1:l),s=Math.round(i*Math.pow(10,n)*l)/l}while(n=0?e:t}var Ri=fi.extend({determineDataLimits:function(){var e,t,n,i,r,s,a=this,o=a.options,l=a.chart,c=l.data.datasets,h=a.isHorizontal();function d(e){return h?e.xAxisID===a.id:e.yAxisID===a.id}a.min=Number.POSITIVE_INFINITY,a.max=Number.NEGATIVE_INFINITY,a.minNotZero=Number.POSITIVE_INFINITY;var u=o.stacked;if(void 0===u)for(e=0;e0){var t=se.min(e),n=se.max(e);a.min=Math.min(a.min,t),a.max=Math.max(a.max,n)}}))}else for(e=0;e0?e.minNotZero=e.min:e.max<1?e.minNotZero=Math.pow(10,Math.floor(Li(e.max))):e.minNotZero=n)},buildTicks:function(){var e=this,t=e.options.ticks,n=!e.isHorizontal(),i={min:Fi(t.min),max:Fi(t.max)},r=e.ticks=Oi(i,e);e.max=se.max(r),e.min=se.min(r),t.reverse?(n=!n,e.start=e.max,e.end=e.min):(e.start=e.min,e.end=e.max),n&&r.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),fi.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(e,t){return this._getScaleLabel(this.chart.data.datasets[t].data[e])},getPixelForTick:function(e){var t=this.tickValues;return e<0||e>t.length-1?null:this.getPixelForValue(t[e])},_getFirstTickValue:function(e){var t=Math.floor(Li(e));return Math.floor(e/Math.pow(10,t))*Math.pow(10,t)},_configure:function(){var e=this,t=e.min,n=0;fi.prototype._configure.call(e),0===t&&(t=e._getFirstTickValue(e.minNotZero),n=Ai(e.options.ticks.fontSize,X.global.defaultFontSize)/e._length),e._startValue=Li(t),e._valueOffset=n,e._valueRange=(Li(e.max)-Li(t))/(1-n)},getPixelForValue:function(e){var t=this,n=0;return(e=+t.getRightValue(e))>t.min&&e>0&&(n=(Li(e)-t._startValue)/t._valueRange+t._valueOffset),t.getPixelForDecimal(n)},getValueForPixel:function(e){var t=this,n=t.getDecimalForPixel(e);return 0===n&&0===t.min?0:Math.pow(10,t._startValue+(n-t._valueOffset)*t._valueRange)}}),Ui=Ti;Ri._defaults=Ui;var Ei=se.valueOrDefault,zi=se.valueAtIndexOrDefault,Bi=se.options.resolve,Vi={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:Kn.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(e){return e}}};function Hi(e){var t=e.ticks;return t.display&&e.display?Ei(t.fontSize,X.global.defaultFontSize)+2*t.backdropPaddingY:0}function Wi(e,t,n){return se.isArray(n)?{w:se.longestText(e,e.font,n),h:n.length*t}:{w:e.measureText(n).width,h:t}}function Yi(e,t,n,i,r){return e===i||e===r?{start:t-n/2,end:t+n/2}:er?{start:t-n,end:t}:{start:t,end:t+n}}function Gi(e){var t,n,i,r=se.options._parseFont(e.options.pointLabels),s={l:0,r:e.width,t:0,b:e.height-e.paddingTop},a={};e.ctx.font=r.string,e._pointLabelSizes=[];var o=e.chart.data.labels.length;for(t=0;ts.r&&(s.r=h.end,a.r=l),d.starts.b&&(s.b=d.end,a.b=l)}e.setReductions(e.drawingArea,s,a)}function qi(e){return 0===e||180===e?"center":e<180?"left":"right"}function Qi(e,t,n,i){var r,s,a=n.y+i/2;if(se.isArray(t))for(r=0,s=t.length;r270||e<90)&&(n.y-=t.h)}function Xi(e){var t=e.ctx,n=e.options,i=n.pointLabels,r=Hi(n),s=e.getDistanceFromCenterForValue(n.ticks.reverse?e.min:e.max),a=se.options._parseFont(i);t.save(),t.font=a.string,t.textBaseline="middle";for(var o=e.chart.data.labels.length-1;o>=0;o--){var l=0===o?r/2:0,c=e.getPointPosition(o,s+l+5),h=zi(i.fontColor,o,X.global.defaultFontColor);t.fillStyle=h;var d=e.getIndexAngle(o),u=se.toDegrees(d);t.textAlign=qi(u),Ki(u,e._pointLabelSizes[o],c),Qi(t,e.pointLabels[o],c,a.lineHeight)}t.restore()}function $i(e,t,n,i){var r,s=e.ctx,a=t.circular,o=e.chart.data.labels.length,l=zi(t.color,i-1),c=zi(t.lineWidth,i-1);if((a||o)&&l&&c){if(s.save(),s.strokeStyle=l,s.lineWidth=c,s.setLineDash&&(s.setLineDash(t.borderDash||[]),s.lineDashOffset=t.borderDashOffset||0),s.beginPath(),a)s.arc(e.xCenter,e.yCenter,n,0,2*Math.PI);else{r=e.getPointPosition(0,n),s.moveTo(r.x,r.y);for(var h=1;h0&&i>0?n:0)},_drawGrid:function(){var e,t,n,i=this,r=i.ctx,s=i.options,a=s.gridLines,o=s.angleLines,l=Ei(o.lineWidth,a.lineWidth),c=Ei(o.color,a.color);if(s.pointLabels.display&&Xi(i),a.display&&se.each(i.ticks,(function(e,n){0!==n&&(t=i.getDistanceFromCenterForValue(i.ticksAsNumbers[n]),$i(i,a,t,n))})),o.display&&l&&c){for(r.save(),r.lineWidth=l,r.strokeStyle=c,r.setLineDash&&(r.setLineDash(Bi([o.borderDash,a.borderDash,[]])),r.lineDashOffset=Bi([o.borderDashOffset,a.borderDashOffset,0])),e=i.chart.data.labels.length-1;e>=0;e--)t=i.getDistanceFromCenterForValue(s.ticks.reverse?i.min:i.max),n=i.getPointPosition(e,t),r.beginPath(),r.moveTo(i.xCenter,i.yCenter),r.lineTo(n.x,n.y),r.stroke();r.restore()}},_drawLabels:function(){var e=this,t=e.ctx,n=e.options.ticks;if(n.display){var i,r,s=e.getIndexAngle(0),a=se.options._parseFont(n),o=Ei(n.fontColor,X.global.defaultFontColor);t.save(),t.font=a.string,t.translate(e.xCenter,e.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",se.each(e.ticks,(function(s,l){(0!==l||n.reverse)&&(i=e.getDistanceFromCenterForValue(e.ticksAsNumbers[l]),n.showLabelBackdrop&&(r=t.measureText(s).width,t.fillStyle=n.backdropColor,t.fillRect(-r/2-n.backdropPaddingX,-i-a.size/2-n.backdropPaddingY,r+2*n.backdropPaddingX,a.size+2*n.backdropPaddingY)),t.fillStyle=o,t.fillText(s,0,-i))})),t.restore()}},_drawTitle:se.noop}),tr=Vi;er._defaults=tr;var nr=se._deprecated,ir=se.options.resolve,rr=se.valueOrDefault,sr=Number.MIN_SAFE_INTEGER||-9007199254740991,ar=Number.MAX_SAFE_INTEGER||9007199254740991,or={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},lr=Object.keys(or);function cr(e,t){return e-t}function hr(e){var t,n,i,r={},s=[];for(t=0,n=e.length;tt&&o=0&&a<=o;){if(r=e[(i=a+o>>1)-1]||null,s=e[i],!r)return{lo:null,hi:s};if(s[t]n))return{lo:r,hi:s};o=i-1}}return{lo:s,hi:null}}function mr(e,t,n,i){var r=pr(e,t,n),s=r.lo?r.hi?r.lo:e[e.length-2]:e[0],a=r.lo?r.hi?r.hi:e[e.length-1]:e[1],o=a[t]-s[t],l=o?(n-s[t])/o:0,c=(a[i]-s[i])*l;return s[i]+c}function fr(e,t){var n=e._adapter,i=e.options.time,r=i.parser,s=r||i.format,a=t;return"function"===typeof r&&(a=r(a)),se.isFinite(a)||(a="string"===typeof s?n.parse(a,s):n.parse(a)),null!==a?+a:(r||"function"!==typeof s||(a=s(t),se.isFinite(a)||(a=n.parse(a))),a)}function vr(e,t){if(se.isNullOrUndef(t))return null;var n=e.options.time,i=fr(e,e.getRightValue(t));return null===i||n.round&&(i=+e._adapter.startOf(i,n.round)),i}function xr(e,t,n,i){var r,s,a,o=lr.length;for(r=lr.indexOf(e);r=lr.indexOf(n);s--)if(a=lr[s],or[a].common&&e._adapter.diff(r,i,a)>=t-1)return a;return lr[n?lr.indexOf(n):0]}function br(e){for(var t=lr.indexOf(e)+1,n=lr.length;t1e5*c)throw t+" and "+n+" are too far apart with stepSize of "+c+" "+l;for(r=d;r=0&&(t[s].major=!0);return t}function wr(e,t,n){var i,r,s=[],a={},o=t.length;for(i=0;i1?hr(p).sort(cr):p.sort(cr),u=Math.min(u,p[0]),g=Math.max(g,p[p.length-1])),u=vr(o,dr(h))||u,g=vr(o,ur(h))||g,u=u===ar?+c.startOf(Date.now(),d):u,g=g===sr?+c.endOf(Date.now(),d)+1:g,o.min=Math.min(u,g),o.max=Math.max(u+1,g),o._table=[],o._timestamps={data:p,datasets:m,labels:f}},buildTicks:function(){var e,t,n,i=this,r=i.min,s=i.max,a=i.options,o=a.ticks,l=a.time,c=i._timestamps,h=[],d=i.getLabelCapacity(r),u=o.source,g=a.distribution;for(c="data"===u||"auto"===u&&"series"===g?c.data:"labels"===u?c.labels:jr(i,r,s,d),"ticks"===a.bounds&&c.length&&(r=c[0],s=c[c.length-1]),r=vr(i,dr(a))||r,s=vr(i,ur(a))||s,e=0,t=c.length;e=r&&n<=s&&h.push(n);return i.min=r,i.max=s,i._unit=l.unit||(o.autoSkip?xr(l.minUnit,i.min,i.max,d):yr(i,h.length,l.minUnit,i.min,i.max)),i._majorUnit=o.major.enabled&&"year"!==i._unit?br(i._unit):void 0,i._table=gr(i._timestamps.data,r,s,g),i._offsets=Sr(i._table,h,r,s,a),o.reverse&&h.reverse(),wr(i,h,i._majorUnit)},getLabelForIndex:function(e,t){var n=this,i=n._adapter,r=n.chart.data,s=n.options.time,a=r.labels&&e=0&&e0?o:1}}),Zr=Ir;Pr._defaults=Zr;var kr={category:yi,linear:Mi,logarithmic:Ri,radialLinear:er,time:Pr},_r={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};Qn._date.override("function"===typeof e?{_id:"moment",formats:function(){return _r},parse:function(t,n){return"string"===typeof t&&"string"===typeof n?t=e(t,n):t instanceof e||(t=e(t)),t.isValid()?t.valueOf():null},format:function(t,n){return e(t).format(n)},add:function(t,n,i){return e(t).add(n,i).valueOf()},diff:function(t,n,i){return e(t).diff(e(n),i)},startOf:function(t,n,i){return t=e(t),"isoWeek"===n?t.isoWeekday(i).valueOf():t.startOf(n).valueOf()},endOf:function(t,n){return e(t).endOf(n).valueOf()},_create:function(t){return e(t)}}:{}),X._set("global",{plugins:{filler:{propagate:!0}}});var Nr={dataset:function(e){var t=e.fill,n=e.chart,i=n.getDatasetMeta(t),r=i&&n.isDatasetVisible(t)&&i.dataset._children||[],s=r.length||0;return s?function(e,t){return t=n)&&i;switch(s){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return s;default:return!1}}function Cr(e){var t,n=e.el._model||{},i=e.el._scale||{},r=e.fill,s=null;if(isFinite(r))return null;if("start"===r?s=void 0===n.scaleBottom?i.bottom:n.scaleBottom:"end"===r?s=void 0===n.scaleTop?i.top:n.scaleTop:void 0!==n.scaleZero?s=n.scaleZero:i.getBasePixel&&(s=i.getBasePixel()),void 0!==s&&null!==s){if(void 0!==s.x&&void 0!==s.y)return s;if(se.isFinite(s))return{x:(t=i.isHorizontal())?s:null,y:t?null:s}}return null}function Ar(e){var t,n,i,r,s,a=e.el._scale,o=a.options,l=a.chart.data.labels.length,c=e.fill,h=[];if(!l)return null;for(t=o.ticks.reverse?a.max:a.min,n=o.ticks.reverse?a.min:a.max,i=a.getPointPositionForValue(0,t),r=0;r0;--s)se.canvas.lineTo(e,n[s],n[s-1],!0);else for(a=n[0].cx,o=n[0].cy,l=Math.sqrt(Math.pow(n[0].x-a,2)+Math.pow(n[0].y-o,2)),s=r-1;s>0;--s)e.arc(a,o,l,n[s].angle,n[s-1].angle,!0)}}function Ur(e,t,n,i,r,s){var a,o,l,c,h,d,u,g,p=t.length,m=i.spanGaps,f=[],v=[],x=0,y=0;for(e.beginPath(),a=0,o=p;a=0;--n)(t=l[n].$filler)&&t.visible&&(r=(i=t.el)._view,s=i._children||[],a=t.mapper,o=r.backgroundColor||X.global.defaultColor,a&&o&&s.length&&(se.canvas.clipArea(c,e.chartArea),Ur(c,s,a,r,o,i._loop),se.canvas.unclipArea(c)))}},zr=se.rtl.getRtlAdapter,Br=se.noop,Vr=se.valueOrDefault;function Hr(e,t){return e.usePointStyle&&e.boxWidth>t?t:e.boxWidth}X._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(e,t){var n=t.datasetIndex,i=this.chart,r=i.getDatasetMeta(n);r.hidden=null===r.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(e){var t=e.data.datasets,n=e.options.legend||{},i=n.labels&&n.labels.usePointStyle;return e._getSortedDatasetMetas().map((function(n){var r=n.controller.getStyle(i?0:void 0);return{text:t[n.index].label,fillStyle:r.backgroundColor,hidden:!e.isDatasetVisible(n.index),lineCap:r.borderCapStyle,lineDash:r.borderDash,lineDashOffset:r.borderDashOffset,lineJoin:r.borderJoinStyle,lineWidth:r.borderWidth,strokeStyle:r.borderColor,pointStyle:r.pointStyle,rotation:r.rotation,datasetIndex:n.index}}),this)}}},legendCallback:function(e){var t,n,i,r=document.createElement("ul"),s=e.data.datasets;for(r.setAttribute("class",e.id+"-legend"),t=0,n=s.length;tl.width)&&(d+=a+n.padding,h[h.length-(t>0?0:1)]=0),o[t]={left:0,top:0,width:i,height:a},h[h.length-1]+=i+n.padding})),l.height+=d}else{var u=n.padding,g=e.columnWidths=[],p=e.columnHeights=[],m=n.padding,f=0,v=0;se.each(e.legendItems,(function(e,t){var i=Hr(n,a)+a/2+r.measureText(e.text).width;t>0&&v+a+2*u>l.height&&(m+=f+n.padding,g.push(f),p.push(v),f=0,v=0),f=Math.max(f,i),v+=a+u,o[t]={left:0,top:0,width:i,height:a}})),m+=f,g.push(f),p.push(v),l.width+=m}e.width=l.width,e.height=l.height}else e.width=l.width=e.height=l.height=0},afterFit:Br,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var e=this,t=e.options,n=t.labels,i=X.global,r=i.defaultColor,s=i.elements.line,a=e.height,o=e.columnHeights,l=e.width,c=e.lineWidths;if(t.display){var h,d=zr(t.rtl,e.left,e.minSize.width),u=e.ctx,g=Vr(n.fontColor,i.defaultFontColor),p=se.options._parseFont(n),m=p.size;u.textAlign=d.textAlign("left"),u.textBaseline="middle",u.lineWidth=.5,u.strokeStyle=g,u.fillStyle=g,u.font=p.string;var f=Hr(n,m),v=e.legendHitBoxes,x=function(e,t,i){if(!(isNaN(f)||f<=0)){u.save();var a=Vr(i.lineWidth,s.borderWidth);if(u.fillStyle=Vr(i.fillStyle,r),u.lineCap=Vr(i.lineCap,s.borderCapStyle),u.lineDashOffset=Vr(i.lineDashOffset,s.borderDashOffset),u.lineJoin=Vr(i.lineJoin,s.borderJoinStyle),u.lineWidth=a,u.strokeStyle=Vr(i.strokeStyle,r),u.setLineDash&&u.setLineDash(Vr(i.lineDash,s.borderDash)),n&&n.usePointStyle){var o=f*Math.SQRT2/2,l=d.xPlus(e,f/2),c=t+m/2;se.canvas.drawPoint(u,i.pointStyle,o,l,c,i.rotation)}else u.fillRect(d.leftForLtr(e,f),t,f,m),0!==a&&u.strokeRect(d.leftForLtr(e,f),t,f,m);u.restore()}},y=function(e,t,n,i){var r=m/2,s=d.xPlus(e,f+r),a=t+r;u.fillText(n.text,s,a),n.hidden&&(u.beginPath(),u.lineWidth=2,u.moveTo(s,a),u.lineTo(d.xPlus(s,i),a),u.stroke())},b=function(e,i){switch(t.align){case"start":return n.padding;case"end":return e-i;default:return(e-i+n.padding)/2}},j=e.isHorizontal();h=j?{x:e.left+b(l,c[0]),y:e.top+n.padding,line:0}:{x:e.left+n.padding,y:e.top+b(a,o[0]),line:0},se.rtl.overrideTextDirection(e.ctx,t.textDirection);var S=m+n.padding;se.each(e.legendItems,(function(t,i){var r=u.measureText(t.text).width,s=f+m/2+r,g=h.x,p=h.y;d.setWidth(e.minSize.width),j?i>0&&g+s+n.padding>e.left+e.minSize.width&&(p=h.y+=S,h.line++,g=h.x=e.left+b(l,c[h.line])):i>0&&p+S>e.top+e.minSize.height&&(g=h.x=g+e.columnWidths[h.line]+n.padding,h.line++,p=h.y=e.top+b(a,o[h.line]));var D=d.x(g);x(D,p,t),v[i].left=d.leftForLtr(D,v[i].width),v[i].top=p,y(D,p,t,r),j?h.x+=s+n.padding:h.y+=S})),se.rtl.restoreTextDirection(e.ctx,t.textDirection)}},_getLegendItemAt:function(e,t){var n,i,r,s=this;if(e>=s.left&&e<=s.right&&t>=s.top&&t<=s.bottom)for(r=s.legendHitBoxes,n=0;n=(i=r[n]).left&&e<=i.left+i.width&&t>=i.top&&t<=i.top+i.height)return s.legendItems[n];return null},handleEvent:function(e){var t,n=this,i=n.options,r="mouseup"===e.type?"click":e.type;if("mousemove"===r){if(!i.onHover&&!i.onLeave)return}else{if("click"!==r)return;if(!i.onClick)return}t=n._getLegendItemAt(e.x,e.y),"click"===r?t&&i.onClick&&i.onClick.call(n,e.native,t):(i.onLeave&&t!==n._hoveredItem&&(n._hoveredItem&&i.onLeave.call(n,e.native,n._hoveredItem),n._hoveredItem=t),i.onHover&&t&&i.onHover.call(n,e.native,t))}});function Yr(e,t){var n=new Wr({ctx:e.ctx,options:t,chart:e});Vt.configure(e,n,t),Vt.addBox(e,n),e.legend=n}var Gr={id:"legend",_element:Wr,beforeInit:function(e){var t=e.options.legend;t&&Yr(e,t)},beforeUpdate:function(e){var t=e.options.legend,n=e.legend;t?(se.mergeIf(t,X.global.legend),n?(Vt.configure(e,n,t),n.options=t):Yr(e,t)):n&&(Vt.removeBox(e,n),delete e.legend)},afterEvent:function(e,t){var n=e.legend;n&&n.handleEvent(t)}},qr=se.noop;X._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Qr=ge.extend({initialize:function(e){var t=this;se.extend(t,e),t.legendHitBoxes=[]},beforeUpdate:qr,update:function(e,t,n){var i=this;return i.beforeUpdate(),i.maxWidth=e,i.maxHeight=t,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:qr,beforeSetDimensions:qr,setDimensions:function(){var e=this;e.isHorizontal()?(e.width=e.maxWidth,e.left=0,e.right=e.width):(e.height=e.maxHeight,e.top=0,e.bottom=e.height),e.paddingLeft=0,e.paddingTop=0,e.paddingRight=0,e.paddingBottom=0,e.minSize={width:0,height:0}},afterSetDimensions:qr,beforeBuildLabels:qr,buildLabels:qr,afterBuildLabels:qr,beforeFit:qr,fit:function(){var e,t=this,n=t.options,i=t.minSize={},r=t.isHorizontal();n.display?(e=(se.isArray(n.text)?n.text.length:1)*se.options._parseFont(n).lineHeight+2*n.padding,t.width=i.width=r?t.maxWidth:e,t.height=i.height=r?e:t.maxHeight):t.width=i.width=t.height=i.height=0},afterFit:qr,isHorizontal:function(){var e=this.options.position;return"top"===e||"bottom"===e},draw:function(){var e=this,t=e.ctx,n=e.options;if(n.display){var i,r,s,a=se.options._parseFont(n),o=a.lineHeight,l=o/2+n.padding,c=0,h=e.top,d=e.left,u=e.bottom,g=e.right;t.fillStyle=se.valueOrDefault(n.fontColor,X.global.defaultFontColor),t.font=a.string,e.isHorizontal()?(r=d+(g-d)/2,s=h+l,i=g-d):(r="left"===n.position?d+l:g-l,s=h+(u-h)/2,i=u-h,c=Math.PI*("left"===n.position?-.5:.5)),t.save(),t.translate(r,s),t.rotate(c),t.textAlign="center",t.textBaseline="middle";var p=n.text;if(se.isArray(p))for(var m=0,f=0;f=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function g(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function p(e){for(var t=1;t1;if(t&&r&&!i){var s=!1;e.forEach((function(e){e.label||(s=!0)})),s&&console.error('[react-chartjs-2] Warning: Each dataset needs a unique key. By default, the "label" property on each dataset is used. Alternatively, you may provide a "datasetKeyProvider" as a prop that returns a unique key.')}}},{key:"getCurrentDatasets",value:function(){return this.chartInstance&&this.chartInstance.config.data&&this.chartInstance.config.data.datasets||[]}},{key:"saveCurrentDatasets",value:function(){var e=this;this.datasets=this.datasets||{},this.getCurrentDatasets().forEach((function(t){e.datasets[e.props.datasetKeyProvider(t)]=t}))}},{key:"updateChart",value:function(){var e=this,t=this.props.options,n=this.memoizeDataProps(this.props);if(this.chartInstance){t&&(this.chartInstance.options=a.default.helpers.configMerge(this.chartInstance.options,t));var i=this.getCurrentDatasets(),r=n.datasets||[];this.checkDatasets(i);var s=(0,l.default)(i,this.props.datasetKeyProvider);this.chartInstance.config.data.datasets=r.map((function(t){var n=s[e.props.datasetKeyProvider(t)];if(n&&n.type===t.type&&t.data){n.data.splice(t.data.length),t.data.forEach((function(e,i){n.data[i]=t.data[i]}));t.data;var i=u(t,["data"]);return p(p({},n),i)}return t}));n.datasets;var o=u(n,["datasets"]);this.chartInstance.config.data=p(p({},this.chartInstance.config.data),o),this.chartInstance.update()}}},{key:"renderChart",value:function(){var e=this.props,t=e.options,i=e.legend,r=e.type,s=e.plugins,l=this.element,c=this.memoizeDataProps();"undefined"===typeof i||(0,o.default)(n.defaultProps.legend,i)||(t.legend=i),this.chartInstance=new a.default(l,{type:r,data:c,options:t,plugins:s})}},{key:"destroyChart",value:function(){if(this.chartInstance){this.saveCurrentDatasets();var e=Object.values(this.datasets);this.chartInstance.config.data.datasets=e,this.chartInstance.destroy()}}},{key:"render",value:function(){var e=this.props,t=e.height,n=e.width,i=e.id;return r.default.createElement("canvas",{ref:this.ref,height:t,width:n,id:i,onClick:this.handleOnClick})}}]),n}(r.default.Component);D(I,"getLabelAsKey",(function(e){return e.label})),D(I,"propTypes",{data:s.default.oneOfType([s.default.object,s.default.func]).isRequired,getDatasetAtEvent:s.default.func,getElementAtEvent:s.default.func,getElementsAtEvent:s.default.func,height:s.default.number,legend:s.default.object,onElementsClick:s.default.func,options:s.default.object,plugins:s.default.arrayOf(s.default.object),redraw:s.default.bool,type:function(e,t,n){if(!a.default.controllers[e[t]])return new Error("Invalid chart type `"+e[t]+"` supplied to `"+n+"`.")},width:s.default.number,datasetKeyProvider:s.default.func}),D(I,"defaultProps",{legend:{display:!0,position:"bottom"},type:"doughnut",height:150,width:300,redraw:!1,options:{},datasetKeyProvider:I.getLabelAsKey});var P=function(e){x(n,e);var t=b(n);function n(){return m(this,n),t.apply(this,arguments)}return v(n,[{key:"render",value:function(){var e=this;return r.default.createElement(I,h({},this.props,{ref:function(t){return e.chartInstance=t&&t.chartInstance},type:"doughnut"}))}}]),n}(r.default.Component);var Z=function(e){x(n,e);var t=b(n);function n(){return m(this,n),t.apply(this,arguments)}return v(n,[{key:"render",value:function(){var e=this;return r.default.createElement(I,h({},this.props,{ref:function(t){return e.chartInstance=t&&t.chartInstance},type:"pie"}))}}]),n}(r.default.Component);var k=function(e){x(n,e);var t=b(n);function n(){return m(this,n),t.apply(this,arguments)}return v(n,[{key:"render",value:function(){var e=this;return r.default.createElement(I,h({},this.props,{ref:function(t){return e.chartInstance=t&&t.chartInstance},type:"line"}))}}]),n}(r.default.Component);t.x1=k;var _=function(e){x(n,e);var t=b(n);function n(){return m(this,n),t.apply(this,arguments)}return v(n,[{key:"render",value:function(){var e=this;return r.default.createElement(I,h({},this.props,{ref:function(t){return e.chartInstance=t&&t.chartInstance},type:"bar"}))}}]),n}(r.default.Component);var N=function(e){x(n,e);var t=b(n);function n(){return m(this,n),t.apply(this,arguments)}return v(n,[{key:"render",value:function(){var e=this;return r.default.createElement(I,h({},this.props,{ref:function(t){return e.chartInstance=t&&t.chartInstance},type:"horizontalBar"}))}}]),n}(r.default.Component);var M=function(e){x(n,e);var t=b(n);function n(){return m(this,n),t.apply(this,arguments)}return v(n,[{key:"render",value:function(){var e=this;return r.default.createElement(I,h({},this.props,{ref:function(t){return e.chartInstance=t&&t.chartInstance},type:"radar"}))}}]),n}(r.default.Component);var C=function(e){x(n,e);var t=b(n);function n(){return m(this,n),t.apply(this,arguments)}return v(n,[{key:"render",value:function(){var e=this;return r.default.createElement(I,h({},this.props,{ref:function(t){return e.chartInstance=t&&t.chartInstance},type:"polarArea"}))}}]),n}(r.default.Component);var A=function(e){x(n,e);var t=b(n);function n(){return m(this,n),t.apply(this,arguments)}return v(n,[{key:"render",value:function(){var e=this;return r.default.createElement(I,h({},this.props,{ref:function(t){return e.chartInstance=t&&t.chartInstance},type:"bubble"}))}}]),n}(r.default.Component);var L=function(e){x(n,e);var t=b(n);function n(){return m(this,n),t.apply(this,arguments)}return v(n,[{key:"render",value:function(){var e=this;return r.default.createElement(I,h({},this.props,{ref:function(t){return e.chartInstance=t&&t.chartInstance},type:"scatter"}))}}]),n}(r.default.Component);a.default.defaults},64668:function(e,t,n){"use strict";var i=n(87462),r=n(63366),s=n(72791),a=n(52007),o=n.n(a),l=n(81694),c=n.n(l),h=n(15489),d={className:o().string,cssModule:o().object,size:o().string,bordered:o().bool,borderless:o().bool,striped:o().bool,dark:o().bool,hover:o().bool,responsive:o().oneOfType([o().bool,o().string]),tag:h.iC,responsiveTag:h.iC,innerRef:o().oneOfType([o().func,o().string,o().object])},u=function(e){var t=e.className,n=e.cssModule,a=e.size,o=e.bordered,l=e.borderless,d=e.striped,u=e.dark,g=e.hover,p=e.responsive,m=e.tag,f=e.responsiveTag,v=e.innerRef,x=(0,r.Z)(e,["className","cssModule","size","bordered","borderless","striped","dark","hover","responsive","tag","responsiveTag","innerRef"]),y=(0,h.mx)(c()(t,"table",!!a&&"table-"+a,!!o&&"table-bordered",!!l&&"table-borderless",!!d&&"table-striped",!!u&&"table-dark",!!g&&"table-hover"),n),b=s.createElement(m,(0,i.Z)({},x,{ref:v,className:y}));if(p){var j=(0,h.mx)(!0===p?"table-responsive":"table-responsive-"+p,n);return s.createElement(f,{className:j},b)}return b};u.propTypes=d,u.defaultProps={tag:"table",responsiveTag:"div"},t.Z=u},74351:function(){},75299:function(){},64718:function(){}},function(e){e.O(0,[351],(function(){return t=71356,e(e.s=t);var t}));e.O()}]); +//# sourceMappingURL=sysAdmin.91d1d2f2.js.map \ No newline at end of file diff --git a/media/assets/frontend/static/js/sysAdmin.91d1d2f2.js.LICENSE.txt b/media/assets/frontend/static/js/sysAdmin.91d1d2f2.js.LICENSE.txt new file mode 100644 index 00000000000..fc3919d1e27 --- /dev/null +++ b/media/assets/frontend/static/js/sysAdmin.91d1d2f2.js.LICENSE.txt @@ -0,0 +1,6 @@ +/*! + * Chart.js v2.9.4 + * https://www.chartjs.org + * (c) 2020 Chart.js Contributors + * Released under the MIT License + */ diff --git a/media/assets/frontend/static/js/sysAdmin.91d1d2f2.js.map b/media/assets/frontend/static/js/sysAdmin.91d1d2f2.js.map new file mode 100644 index 00000000000..9ef9dd00f45 --- /dev/null +++ b/media/assets/frontend/static/js/sysAdmin.91d1d2f2.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/sysAdmin.91d1d2f2.js","mappings":"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","sources":["_i18n/i18n-seafile-editor.js","components/dialog/commit-details.js","components/dialog/create-folder-dialog.js","components/dialog/op-menu.js","components/dialog/share-admin-link.js","components/dialog/sysadmin-dialog/sysadmin-unlink-device-dialog.js","pages/sys-admin/side-panel.js","pages/sys-admin/main-panel.js","pages/sys-admin/main-panel-topbar.js","pages/sys-admin/info.js","pages/sys-admin/statistic/statistic-nav.js","pages/sys-admin/statistic/picker.js","pages/sys-admin/statistic/statistic-common-tool.js","pages/sys-admin/statistic/statistic-chart.js","pages/sys-admin/statistic/statistic-file.js","pages/sys-admin/statistic/statistic-storage.js","pages/sys-admin/statistic/traffic-table.js","pages/sys-admin/statistic/traffic-table-body.js","pages/sys-admin/statistic/statistic-traffic-orgs.js","pages/sys-admin/statistic/statistic-traffic-users.js","pages/sys-admin/statistic/statistic-traffic.js","pages/sys-admin/statistic/statistic-users.js","pages/sys-admin/statistic/statistic-reports.js","pages/sys-admin/devices/devices-nav.js","pages/sys-admin/devices/devices-by-platform.js","pages/sys-admin/devices/desktop-devices.js","pages/sys-admin/devices/mobile-devices.js","pages/sys-admin/user-link.js","pages/sys-admin/devices/devices-errors.js","components/dialog/sysadmin-dialog/set-quota.js","components/dialog/sysadmin-dialog/sysadmin-import-user-dialog.js","components/select-editor/sysadmin-user-role-editor.js","components/dialog/sysadmin-dialog/sysadmin-add-user-dialog.js","components/dialog/sysadmin-dialog/sysadmin-batch-add-admin-dialog.js","models/sysadmin-user.js","models/sysadmin-admin-user.js","pages/sys-admin/search.js","pages/sys-admin/users/users-nav.js","pages/sys-admin/users/users-content.js","pages/sys-admin/users/users.js","pages/sys-admin/users/admin-users.js","pages/sys-admin/users/ldap-imported-users.js","pages/sys-admin/users/ldap-users.js","pages/sys-admin/users/search-users.js","components/dialog/sysadmin-dialog/set-upload-download-rate-limit.js","components/dialog/sysadmin-dialog/update-user.js","pages/sys-admin/users/user-nav.js","pages/sys-admin/users/user-info.js","pages/sys-admin/users/user-repos.js","pages/sys-admin/users/user-shared-repos.js","pages/sys-admin/users/user-links.js","pages/sys-admin/users/user-groups.js","components/dialog/sysadmin-dialog/sysadmin-create-repo-dialog.js","pages/sys-admin/repos/repos-nav.js","components/dialog/sysadmin-dialog/sysadmin-share-to-user.js","components/dialog/sysadmin-dialog/sysadmin-share-to-group.js","components/dialog/sysadmin-dialog/sysadmin-share-dialog.js","components/dialog/sysadmin-dialog/sysadmin-lib-history-setting-dialog.js","pages/sys-admin/repos/repos.js","pages/sys-admin/repos/all-repos.js","pages/sys-admin/repos/system-repo.js","pages/sys-admin/repos/trash-repos.js","pages/sys-admin/repos/search-repos.js","models/system-admin/dirent.js","pages/sys-admin/repos/dir-path-bar.js","pages/sys-admin/repos/dir-content.js","pages/sys-admin/repos/dir-view.js","components/dialog/sysadmin-dialog/sysadmin-create-group-dialog.js","components/dialog/sysadmin-dialog/sysadmin-group-transfer-dialog.js","pages/sys-admin/groups/groups-content.js","pages/sys-admin/groups/groups.js","pages/sys-admin/groups/search-groups.js","pages/sys-admin/groups/group-nav.js","pages/sys-admin/groups/group-repos.js","components/dialog/sysadmin-dialog/sysadmin-group-add-member-dialog.js","pages/sys-admin/groups/group-members.js","pages/sys-admin/departments/departments.js","components/dialog/sysadmin-dialog/sysadmin-add-department-dialog.js","components/dialog/sysadmin-dialog/sysadmin-rename-department-dialog.js","components/dialog/sysadmin-dialog/sysadmin-delete-department-dialog.js","components/dialog/sysadmin-dialog/sysadmin-set-group-quota-dialog.js","pages/sys-admin/departments/group-item.js","pages/sys-admin/departments/department-list.js","components/dialog/sysadmin-dialog/sysadmin-add-member-dialog.js","components/dialog/sysadmin-dialog/sysadmin-add-repo-dialog.js","pages/sys-admin/departments/department.js","pages/sys-admin/departments/sub-departments.js","components/dialog/sysadmin-dialog/sysadmin-delete-member-dialog.js","pages/sys-admin/departments/member-item.js","pages/sys-admin/departments/department-members.js","components/dialog/sysadmin-dialog/sysadmin-delete-repo-dialog.js","pages/sys-admin/departments/repo-item.js","pages/sys-admin/departments/department-libraries.js","pages/sys-admin/links/links-nav.js","pages/sys-admin/links/share-links.js","pages/sys-admin/links/upload-links.js","components/dialog/sysadmin-dialog/sysadmin-add-org-dialog.js","pages/sys-admin/orgs/orgs-content.js","pages/sys-admin/orgs/orgs.js","pages/sys-admin/orgs/search-orgs.js","components/dialog/sysadmin-dialog/sysadmin-set-org-name-dialog.js","components/dialog/sysadmin-dialog/sysadmin-set-org-max-user-number-dialog.js","pages/sys-admin/orgs/org-nav.js","pages/sys-admin/orgs/org-info.js","pages/sys-admin/orgs/org-users.js","pages/sys-admin/orgs/org-groups.js","pages/sys-admin/orgs/org-repos.js","components/dialog/sysadmin-dialog/sysadmin-add-institution-dialog.js","pages/sys-admin/institutions/institutions.js","pages/sys-admin/institutions/institution-nav.js","pages/sys-admin/institutions/institution-info.js","components/dialog/sysadmin-dialog/sysadmin-add-institution-member-dialog.js","pages/sys-admin/institutions/institution-users.js","pages/sys-admin/institutions/institution-admins.js","pages/sys-admin/logs-page/logs-nav.js","components/dialog/sysadmin-dialog/sysadmin-logs-export-excel-dialog.js","pages/sys-admin/logs-page/login-logs.js","pages/sys-admin/logs-page/file-access-item-menu.js","pages/sys-admin/logs-page/file-access-toggle-filter.js","pages/sys-admin/logs-page/file-access-logs.js","pages/sys-admin/logs-page/file-update-logs.js","pages/sys-admin/logs-page/share-permission-logs.js","pages/sys-admin/web-settings/section.js","pages/sys-admin/web-settings/setting-item-base.js","pages/sys-admin/web-settings/input-item.js","pages/sys-admin/web-settings/file-item.js","pages/sys-admin/web-settings/checkbox-item.js","pages/sys-admin/web-settings/web-settings.js","components/dialog/sysadmin-dialog/sysadmin-add-sys-notification-dialog.js","pages/sys-admin/notifications/notifications.js","pages/sys-admin/file-scan-records.js","pages/sys-admin/work-weixin/work-weixin-department-members-list.js","pages/sys-admin/work-weixin/work-weixin-departments-tree-node.js","pages/sys-admin/work-weixin/work-weixin-departments-tree-panel.js","components/dialog/import-work-weixin-department-dialog.js","pages/sys-admin/work-weixin-departments.js","pages/sys-admin/dingtalk/dingtalk-department-members-list.js","pages/sys-admin/dingtalk/dingtalk-departments-tree-node.js","pages/sys-admin/dingtalk/dingtalk-departments-tree-panel.js","components/dialog/import-dingtalk-department-dialog.js","pages/sys-admin/dingtalk-departments.js","pages/sys-admin/invitations/invitations.js","components/dialog/terms-editor-dialog.js","components/dialog/sysadmin-dialog/sysadmin-add-or-update-term-dialog.js","utils/markdown-utils.js","components/dialog/terms-preview-dialog.js","pages/sys-admin/terms-and-conditions/item.js","pages/sys-admin/terms-and-conditions/content.js","pages/sys-admin/terms-and-conditions/terms-and-conditions.js","pages/sys-admin/virus-scan/nav.js","pages/sys-admin/virus-scan/all-virus-files.js","pages/sys-admin/virus-scan/unhandled-virus-files.js","pages/sys-admin/admin-logs/logs-nav.js","pages/sys-admin/admin-logs/operation-logs.js","pages/sys-admin/admin-logs/login-logs.js","pages/sys-admin/abuse-reports.js","pages/sys-admin/index.js","../node_modules/chart.js/dist/Chart.js","../node_modules/lodash/_arrayAggregator.js","../node_modules/lodash/_baseAggregator.js","../node_modules/lodash/_createAggregator.js","../node_modules/lodash/isEqual.js","../node_modules/lodash/keyBy.js","../node_modules/react-chartjs-2/es/index.js","../node_modules/reactstrap/es/Table.js"],"sourcesContent":["import i18n from 'i18next';\nimport Backend from 'i18next-xhr-backend';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport { initReactI18next } from 'react-i18next';\nimport { mediaUrl } from '../utils/constants';\n\nconst lang = window.app.pageOptions.lang;\n\ni18n\n .use(Backend)\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n lng: lang,\n fallbackLng: 'en',\n ns: ['seafile-editor'],\n defaultNS: 'seafile-editor',\n\n whitelist: ['en', 'zh-CN', 'fr', 'de', 'cs', 'es', 'es-AR', 'es-MX', 'ru'],\n\n backend: {\n loadPath: mediaUrl + 'locales/{{ lng }}/{{ ns }}.json',\n // loadPath: '/media/locales/{{lng}}/{{ns}}.json',\n },\n\n debug: false, // console log if debug: true\n\n interpolation: {\n escapeValue: false, // not needed for react!!\n },\n\n\n load: 'currentOnly',\n\n react: {\n wait: true,\n }\n });\n\nexport default i18n;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap';\nimport moment from 'moment';\nimport { gettext } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { Utils } from '../../utils/utils';\nimport Loading from '../loading';\n\nimport '../../css/commit-details.css';\n\nconst propTypes = {\n repoID: PropTypes.string.isRequired,\n commitID: PropTypes.string.isRequired,\n commitTime: PropTypes.string.isRequired,\n toggleDialog: PropTypes.func.isRequired\n};\n\nclass CommitDetails extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: true,\n errorMsg: '',\n };\n }\n\n componentDidMount() {\n const {repoID, commitID} = this.props;\n seafileAPI.getCommitDetails(repoID, commitID).then((res) => {\n this.setState({\n isLoading: false,\n errorMsg: '',\n commitDetails: res.data\n });\n }).catch((error) => {\n let errorMsg = Utils.getErrorMsg(error);\n this.setState({\n isLoading: false,\n errorMsg: errorMsg\n });\n });\n }\n\n render() {\n const { toggleDialog, commitTime} = this.props;\n return (\n \n {gettext('Modification Details')}\n \n

    {moment(commitTime).format('YYYY-MM-DD HH:mm:ss')}

    \n \n
    \n
    \n );\n }\n}\n\nclass Content extends React.Component {\n\n renderDetails = (data) => {\n const detailsData = [\n {type: 'new', title: gettext('New files')},\n {type: 'removed', title: gettext('Deleted files')},\n {type: 'renamed', title: gettext('Renamed or Moved files')},\n {type: 'modified', title: gettext('Modified files')},\n {type: 'newdir', title: gettext('New directories')},\n {type: 'deldir', title: gettext('Deleted directories')}\n ];\n\n let showDesc = true;\n for (let i = 0, len = detailsData.length; i < len; i++) {\n if (data[detailsData[i].type].length) {\n showDesc = false;\n break;\n }\n }\n if (showDesc) {\n return

    {data.cmt_desc}

    ;\n }\n\n return (\n \n {detailsData.map((item, index) => {\n if (!data[item.type].length) {\n return null;\n }\n return (\n \n
    {item.title}
    \n
      \n {\n data[item.type].map((item, index) => {\n return
    • ;\n })\n }\n
    \n
    \n );\n })}\n
    \n );\n };\n\n render() {\n const {isLoading, errorMsg, commitDetails} = this.props.data;\n\n if (isLoading) {\n return ;\n }\n\n if (errorMsg) {\n return

    {errorMsg}

    ;\n }\n\n return this.renderDetails(commitDetails);\n }\n}\n\nContent.propTypes = {\n data: PropTypes.object.isRequired,\n};\n\nCommitDetails.propTypes = propTypes;\n\nexport default CommitDetails;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, Input, ModalBody, ModalFooter, Form, FormGroup, Label, Alert } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n fileType: PropTypes.string,\n parentPath: PropTypes.string.isRequired,\n onAddFolder: PropTypes.func.isRequired,\n checkDuplicatedName: PropTypes.func.isRequired,\n addFolderCancel: PropTypes.func.isRequired,\n};\n\nclass CreateForder extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n parentPath: '',\n childName: '',\n errMessage: '',\n isSubmitBtnActive: false,\n };\n }\n\n componentDidMount() {\n let parentPath = this.props.parentPath;\n if (parentPath[parentPath.length - 1] === '/') { // mainPanel\n this.setState({parentPath: parentPath});\n } else {\n this.setState({parentPath: parentPath + '/'}); // sidePanel\n }\n }\n\n handleChange = (e) => {\n if (!e.target.value.trim()) {\n this.setState({isSubmitBtnActive: false});\n } else {\n this.setState({isSubmitBtnActive: true});\n }\n\n this.setState({childName: e.target.value});\n };\n\n handleSubmit = () => {\n if (!this.state.isSubmitBtnActive) {\n return;\n }\n\n let newName = this.state.childName;\n let isDuplicated = this.checkDuplicatedName();\n\n if (isDuplicated) {\n let errMessage = gettext('The name \"{name}\" is already taken. Please choose a different name.');\n errMessage = errMessage.replace('{name}', Utils.HTMLescape(newName));\n this.setState({errMessage: errMessage});\n } else {\n let path = this.state.parentPath + newName;\n this.props.onAddFolder(path);\n }\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.handleSubmit();\n e.preventDefault();\n }\n };\n\n toggle = () => {\n this.props.addFolderCancel();\n };\n\n checkDuplicatedName = () => {\n let isDuplicated = this.props.checkDuplicatedName(this.state.childName);\n return isDuplicated;\n };\n\n render() {\n return (\n \n {gettext('New Folder')}\n \n
    \n \n \n \n \n
    \n {this.state.errMessage && {this.state.errMessage}}\n
    \n \n \n \n \n
    \n );\n }\n}\n\nCreateForder.propTypes = propTypes;\n\nexport default CreateForder;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown, DropdownMenu, DropdownToggle, DropdownItem } from 'reactstrap';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\n\nconst propTypes = {\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n onMenuItemClick: PropTypes.func.isRequired,\n operations: PropTypes.array.isRequired,\n translateOperations: PropTypes.func.isRequired\n};\n\nclass OpMenu extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemMenuShow: false\n };\n }\n\n onMenuItemClick = (e) => {\n let operation = Utils.getEventData(e, 'op');\n this.props.onMenuItemClick(operation);\n };\n\n onDropdownToggleClick = (e) => {\n this.toggleOperationMenu(e);\n };\n\n toggleOperationMenu = (e) => {\n this.setState(\n {isItemMenuShow: !this.state.isItemMenuShow},\n () => {\n if (this.state.isItemMenuShow) {\n this.props.onFreezedItem();\n } else {\n this.props.onUnfreezedItem();\n }\n }\n );\n };\n\n render() {\n const { operations, translateOperations } = this.props;\n return (\n \n \n \n {operations.map((item, index )=> {\n return ({translateOperations(item)});\n })}\n \n \n );\n }\n}\n\nOpMenu.propTypes = propTypes;\n\nexport default OpMenu;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\nimport copy from '../copy-to-clipboard';\nimport { gettext } from '../../utils/constants';\nimport toaster from '../../components/toast';\n\nconst propTypes = {\n link: PropTypes.string.isRequired,\n toggleDialog: PropTypes.func.isRequired\n};\n\nclass ShareAdminLink extends React.Component {\n\n constructor(props) {\n super(props);\n }\n\n copyToClipboard = () => {\n copy(this.props.link);\n this.props.toggleDialog();\n toaster.success(gettext('The link is copied to the clipboard.'), {duration: 2});\n };\n\n render() {\n const { link, toggleDialog } = this.props;\n return (\n \n {gettext('Link')}\n \n {link}\n \n \n \n \n \n \n );\n }\n}\n\nShareAdminLink.propTypes = propTypes;\n\nexport default ShareAdminLink;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext, isPro } from '../../../utils/constants';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\n\nconst propTypes = {\n unlinkDevice: PropTypes.func.isRequired,\n toggleDialog: PropTypes.func.isRequired\n};\n\nclass SysAdminUnlinkDevice extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n inputChecked: false\n };\n }\n\n handleInputChange = (e) => {\n this.setState({\n inputChecked: e.target.checked\n });\n };\n\n unlinkDevice = () => {\n this.props.toggleDialog();\n this.props.unlinkDevice(this.state.inputChecked);\n };\n\n render() {\n const { inputChecked } = this.state;\n const toggle = this.props.toggleDialog;\n return (\n \n {gettext('Unlink device')}\n \n

    {gettext('Are you sure you want to unlink this device?')}

    \n {isPro &&\n
    \n \n \n
    \n }\n
    \n \n \n \n \n
    \n );\n }\n}\n\nSysAdminUnlinkDevice.propTypes = propTypes;\n\nexport default SysAdminUnlinkDevice;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport Logo from '../../components/logo';\nimport { gettext, siteRoot, isPro, otherPermission, canViewSystemInfo, canViewStatistic,\n canConfigSystem, canManageLibrary, canManageUser, canManageGroup, canViewUserLog,\n canViewAdminLog, constanceEnabled, multiTenancy, multiInstitution, sysadminExtraEnabled,\n enableGuestInvitation, enableTermsAndConditions, enableFileScan, enableWorkWeixin, enableDingtalk,\n enableShareLinkReportAbuse, isDBSqlite3 } from '../../utils/constants';\n\nconst propTypes = {\n isSidePanelClosed: PropTypes.bool.isRequired,\n onCloseSidePanel: PropTypes.func.isRequired,\n currentTab: PropTypes.string.isRequired,\n tabItemClick: PropTypes.func.isRequired\n};\n\nclass SidePanel extends React.Component {\n\n getActiveClass = (tab) => {\n return this.props.currentTab == tab ? 'active' : '';\n };\n\n render() {\n return (\n
    \n
    \n \n
    \n
    \n
    \n
    \n

    {gettext('System Admin')}

    \n
      \n {canViewSystemInfo &&\n
    • \n this.props.tabItemClick('info')}\n >\n \n {gettext('Info')}\n \n
    • \n }\n {(isPro || !isDBSqlite3) && canViewStatistic &&\n
    • \n this.props.tabItemClick('statistic')}\n >\n \n {gettext('Statistic')}\n \n
    • \n }\n {otherPermission &&\n
    • \n this.props.tabItemClick('devices')}\n >\n \n {gettext('Devices')}\n \n
    • \n }\n {constanceEnabled && canConfigSystem &&\n
    • \n this.props.tabItemClick('web-settings')}\n >\n \n {gettext('Settings')}\n \n
    • \n }\n {canManageLibrary &&\n
    • \n this.props.tabItemClick('libraries')}\n >\n \n {gettext('Libraries')}\n \n
    • \n }\n {canManageUser &&\n
    • \n this.props.tabItemClick('users')}\n >\n \n {gettext('Users')}\n \n
    • \n }\n {canManageGroup &&\n
    • \n this.props.tabItemClick('groups')}\n >\n \n {gettext('Groups')}\n \n
    • \n }\n {isPro && canManageGroup &&\n
    • \n this.props.tabItemClick('departments')}\n >\n \n {gettext('Departments')}\n \n
    • \n }\n {multiTenancy && otherPermission &&\n
    • \n this.props.tabItemClick('organizations')}\n >\n \n {gettext('Organizations')}\n \n
    • \n }\n {multiInstitution && otherPermission &&\n
    • \n this.props.tabItemClick('institutions')}\n >\n \n {gettext('Institutions')}\n \n
    • \n }\n {otherPermission &&\n
    • \n this.props.tabItemClick('notifications')}\n >\n \n {gettext('Notifications')}\n \n
    • \n }\n {otherPermission &&\n
    • \n this.props.tabItemClick('links')}\n >\n \n {gettext('Links')}\n \n
    • \n }\n {sysadminExtraEnabled && canViewUserLog &&\n
    • \n this.props.tabItemClick('logs')}\n >\n \n {gettext('Logs')}\n \n
    • \n }\n {isPro && otherPermission && enableFileScan &&\n
    • \n this.props.tabItemClick('file-scan-records')}\n >\n \n {gettext('File Scan')}\n \n
    • \n }\n {isPro && otherPermission &&\n
    • \n this.props.tabItemClick('virus-files')}\n >\n \n {gettext('Virus Scan')}\n \n
    • \n }\n {isPro && enableGuestInvitation && otherPermission &&\n
    • \n this.props.tabItemClick('invitations')}\n >\n \n {gettext('Invitations')}\n \n
    • \n }\n {otherPermission && enableTermsAndConditions &&\n
    • \n this.props.tabItemClick('termsandconditions')}\n >\n \n {gettext('Terms and Conditions')}\n \n
    • \n }\n {isPro && canViewAdminLog &&\n
    • \n this.props.tabItemClick('adminLogs')}\n >\n \n {gettext('Admin Logs')}\n \n
    • \n }\n {otherPermission && enableWorkWeixin &&\n
    • \n this.props.tabItemClick('work-weixin')}\n >\n \n {'企业微信集成'}\n \n
    • \n }\n\n {otherPermission && enableDingtalk &&\n
    • \n this.props.tabItemClick('dingtalk')}\n >\n \n {'钉钉集成'}\n \n
    • \n }\n\n {otherPermission && enableShareLinkReportAbuse &&\n
    • \n this.props.tabItemClick('abuse-reports')}\n >\n \n {gettext('Abuse Reports')}\n \n
    • \n }\n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nSidePanel.propTypes = propTypes;\n\nexport default SidePanel;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nconst propTypes = {\n children: PropTypes.object.isRequired,\n};\n\nclass MainPanel extends Component {\n\n render() {\n return (\n
    \n {this.props.children}\n
    \n );\n }\n}\n\nMainPanel.propTypes = propTypes;\n\nexport default MainPanel;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Account from '../../components/common/account';\nimport { gettext } from '../../utils/constants';\n\nconst propTypes = {\n children: PropTypes.object,\n search: PropTypes.any,\n toggleSidePanel: PropTypes.func\n};\n\nclass MainPanelTopbar extends Component {\n\n render() {\n return (\n
    \n
    \n \n
    \n {this.props.children}\n
    \n
    \n
    \n {this.props.search && this.props.search}\n \n
    \n
    \n );\n }\n}\n\nMainPanelTopbar.propTypes = propTypes;\n\nexport default MainPanelTopbar;\n","import React, { Component, Fragment } from 'react';\nimport { Button } from 'reactstrap';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { gettext, isPro, isDefaultAdmin } from '../../utils/constants';\nimport toaster from '../../components/toast';\nimport { Utils } from '../../utils/utils';\nimport Loading from '../../components/loading';\nimport MainPanelTopbar from './main-panel-topbar';\n\nimport '../../css/system-info.css';\n\nclass Info extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n sysInfo: {}\n };\n this.fileInput = React.createRef();\n }\n\n componentDidMount () {\n seafileAPI.sysAdminGetSysInfo().then((res) => {\n this.setState({\n loading: false,\n sysInfo: res.data\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n uploadLicenseFile = (e) => {\n\n // no file selected\n if (!this.fileInput.current.files.length) {\n return;\n }\n const file = this.fileInput.current.files[0];\n seafileAPI.sysAdminUploadLicense(file).then((res) => {\n let info = this.state.sysInfo;\n Object.assign(info, res.data, {with_license: true});\n this.setState({\n sysInfo: info\n });\n }).catch((error) => {\n let errMsg = Utils.getErrorMsg(error);\n toaster.danger(errMsg);\n });\n };\n\n openFileInput = () => {\n this.fileInput.current.click();\n };\n\n renderLicenseDescString = (license_mode, license_to, license_expiration) => {\n if (license_mode == 'life-time') {\n if (window.app.config.lang == 'zh-cn') {\n return '永久授权给 ' + license_to + ',技术支持服务至 ' + license_expiration + ' 到期';\n } else {\n return gettext('licensed to {placeholder_license_to}, upgrade service expired in {placeholder_license_expiration}')\n .replace('{placeholder_license_to}', license_to).replace('{placeholder_license_expiration}', license_expiration);\n }\n } else {\n return gettext('licensed to {placeholder_license_to}, expires on {placeholder_license_expiration}')\n .replace('{placeholder_license_to}', license_to).replace('{placeholder_license_expiration}', license_expiration);\n }\n };\n\n render() {\n let { license_mode, license_to, license_expiration, org_count,\n repos_count, total_files_count, total_storage, total_devices_count,\n current_connected_devices_count, license_maxusers, multi_tenancy_enabled,\n active_users_count, users_count, groups_count, with_license } = this.state.sysInfo;\n let { loading, errorMsg } = this.state;\n\n return (\n \n \n
    \n
    \n

    {gettext('Info')}

    \n
    \n {loading && }\n {errorMsg &&

    {errorMsg}

    }\n {(!loading && !errorMsg) &&\n
    \n
    {gettext('System Info')}
    \n {isPro ?\n
    \n {gettext('Professional Edition')}\n {with_license &&\n ' ' + this.renderLicenseDescString(license_mode, license_to, license_expiration)\n }
    \n {isDefaultAdmin &&\n \n \n \n \n }\n
    :\n
    \n {gettext('Community Edition')}\n {gettext('Upgrade to Pro Edition')}\n
    \n }\n
    {gettext('Libraries')} / {gettext('Files')}
    \n
    {repos_count} / {total_files_count}
    \n\n
    {gettext('Storage Used')}
    \n
    {Utils.bytesToSize(total_storage)}
    \n\n
    {gettext('Total Devices')} / {gettext('Current Connected Devices')}
    \n
    {total_devices_count} / {current_connected_devices_count}
    \n\n {isPro ?\n \n
    {gettext('Activated Users')} / {gettext('Total Users')} / {gettext('Limits')}
    \n
    {active_users_count}{' / '}{users_count}{' / '}{with_license ? license_maxusers : '--'}
    \n
    :\n \n
    {gettext('Activated Users')} / {gettext('Total Users')}
    \n
    {active_users_count} / {users_count}
    \n
    \n }\n\n
    {gettext('Groups')}
    \n
    {groups_count}
    \n\n {multi_tenancy_enabled &&\n \n
    {gettext('Organizations')}
    \n
    {org_count}
    \n
    \n }\n
    \n }\n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default Info;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { siteRoot, gettext } from '../../../utils/constants';\n\nconst propTypes = {\n currentItem: PropTypes.string.isRequired\n};\n\nclass Nav extends React.Component {\n\n constructor(props) {\n super(props);\n this.navItems = [\n {name: 'fileStatistic', urlPart: 'statistics/file', text: gettext('File')},\n {name: 'storageStatistic', urlPart: 'statistics/storage', text: gettext('Storage')},\n {name: 'usersStatistic', urlPart: 'statistics/user', text: gettext('Users')},\n {name: 'trafficStatistic', urlPart: 'statistics/traffic', text: gettext('Traffic')},\n {name: 'reportsStatistic', urlPart: 'statistics/reports', text: gettext('Reports')},\n ];\n }\n\n render() {\n const { currentItem } = this.props;\n return (\n
    \n
      \n {this.navItems.map((item, index) => {\n return (\n
    • \n {item.text}\n
    • \n );\n })}\n
    \n
    \n );\n }\n}\n\nNav.propTypes = propTypes;\n\nexport default Nav;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport Calendar from '@seafile/seafile-calendar';\nimport DatePicker from '@seafile/seafile-calendar/lib/Picker';\nimport { translateCalendar } from '../../../utils/date-format-utils';\n\nimport '@seafile/seafile-calendar/assets/index.css';\n\nconst FORMAT = 'YYYY-MM-DD';\n\nclass Picker extends React.Component {\n\n constructor(props) {\n super(props);\n this.defaultCalendarValue = null;\n }\n\n componentDidMount() {\n let lang = window.app.config.lang;\n this.defaultCalendarValue = moment().locale(lang).clone();\n }\n\n render() {\n const props = this.props;\n const calendar = ();\n return (\n \n {\n ({value}) => {\n return (\n \n \n \n );\n }\n }\n \n );\n }\n}\n\nPicker.propTypes = {\n disabledDate: PropTypes.func.isRequired,\n value: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default Picker;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'reactstrap';\nimport moment from 'moment';\nimport { gettext } from '../../../utils/constants';\nimport Picker from './picker';\n\nconst propTypes = {\n getActiviesFiles: PropTypes.func.isRequired,\n children: PropTypes.object,\n};\n\nclass StatisticCommonTool extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n statisticType: 'oneWeek',\n startValue: null,\n endValue: null,\n };\n }\n\n componentDidMount() {\n let today = moment().format('YYYY-MM-DD 00:00:00');\n let endTime = today;\n let startTime = moment().subtract(6,'d').format('YYYY-MM-DD 00:00:00');\n let group_by = 'day';\n this.props.getActiviesFiles(startTime, endTime, group_by);\n }\n\n changeActive = (statisticTypeName) => {\n let { statisticType } = this.state;\n if (statisticType === statisticTypeName) {\n return;\n }\n let today = moment().format('YYYY-MM-DD 00:00:00');\n let endTime = today;\n let startTime;\n switch(statisticTypeName) {\n case 'oneWeek' :\n startTime = moment().subtract(6,'d').format('YYYY-MM-DD 00:00:00');\n break;\n case 'oneMonth' :\n startTime = moment().subtract(29,'d').format('YYYY-MM-DD 00:00:00');\n break;\n case 'oneYear' :\n startTime = moment().subtract(364,'d').format('YYYY-MM-DD 00:00:00');\n break;\n }\n this.setState({\n statisticType: statisticTypeName,\n });\n let group_by = 'day';\n this.props.getActiviesFiles(startTime, endTime, group_by);\n };\n\n disabledStartDate = (startValue) => {\n if (!startValue) {\n return false;\n }\n let today = moment().format();\n\n const endValue = this.state.endValue;\n if (!endValue) {\n let startTime = moment(startValue).format();\n return today < startTime;\n }\n return endValue.isBefore(startValue) || moment(startValue).format() > today;\n };\n\n disabledEndDate = (endValue) => {\n if (!endValue) {\n return false;\n }\n let today = moment().format();\n const startValue = this.state.startValue;\n if (!startValue) {\n let endTime = moment(endValue).format();\n return today < endTime;\n }\n return endValue.isBefore(startValue) || moment(endValue).format() > today;\n };\n\n onChange = (field, value) => {\n this.setState({\n [field]: value,\n });\n };\n\n onSubmit = () => {\n let { startValue, endValue } = this.state;\n if(!startValue || !endValue) {\n return;\n }\n this.setState({\n statisticType: 'itemButton',\n });\n let startTime = moment(startValue).format('YYYY-MM-DD 00:00:00');\n let endTime = moment(endValue).format('YYYY-MM-DD 00:00:00');\n let group_by = 'day';\n this.props.getActiviesFiles(startTime, endTime, group_by);\n };\n\n render() {\n let { statisticType, endValue, startValue } = this.state;\n return(\n \n {this.props.children}\n
    \n
    \n
    {gettext('7 Days')}
    \n
    {gettext('30 Days')}
    \n
    {gettext('1 Year')}
    \n
    \n
    \n \n -\n \n \n
    \n
    \n
    \n );\n }\n}\n\nStatisticCommonTool.propTypes = propTypes;\n\nexport default StatisticCommonTool;\n","import React from 'react';\nimport { Line } from 'react-chartjs-2';\nimport PropTypes from 'prop-types';\nimport { Utils } from '../../../utils/utils';\n\nconst propTypes = {\n labels: PropTypes.array.isRequired,\n filesData: PropTypes.array.isRequired,\n suggestedMaxNumbers: PropTypes.number.isRequired,\n isLegendStatus: PropTypes.bool.isRequired,\n chartTitle: PropTypes.string.isRequired,\n isTitleCallback: PropTypes.bool,\n isTicksCallback: PropTypes.bool,\n};\n\nclass StatisticChart extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n data: {},\n opations: {}\n };\n }\n\n componentDidMount() {\n let { labels, filesData, isTitleCallback, isTicksCallback, suggestedMaxNumbers, isLegendStatus, chartTitle } = this.props;\n let _this = this;\n let data = {\n labels: labels,\n datasets: filesData\n };\n let options = {\n title: {\n display: true,\n fontSize: 14,\n text: chartTitle,\n },\n elements: {\n line: {\n fill: false,\n tension: 0, // disable bezier curves, i.e, draw straight lines\n borderWidth: 2\n }\n },\n legend: {\n display: isLegendStatus,\n labels: {\n usePointStyle: true\n }\n },\n tooltips: {\n callbacks: {\n label: function(tooltipItem, data) {\n if (isTitleCallback) {\n return _this.titleCallback(tooltipItem, data);\n }\n return data.datasets[tooltipItem.datasetIndex].label + ': ' + tooltipItem.yLabel;\n }\n }\n },\n layout: {\n padding: {\n right: 100,\n }\n },\n scales: {\n yAxes: [{\n ticks: {\n beginAtZero: true,\n suggestedMax: suggestedMaxNumbers,\n callback: function(value, index, values) {\n if (isTicksCallback) {\n return _this.ticksCallback(value, index, values);\n }\n return value;\n }\n }\n }],\n xAxes: [{\n ticks: {\n maxTicksLimit: 20\n }\n }]\n }\n };\n this.setState({\n data: data,\n options: options\n });\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n let data = {\n labels: nextProps.labels,\n datasets: nextProps.filesData\n };\n this.setState({data: data});\n }\n\n titleCallback = (tooltipItem, data) => {\n return data.datasets[tooltipItem.datasetIndex].label + ': ' + Utils.bytesToSize(tooltipItem.yLabel);\n };\n\n ticksCallback = (value, index, values) => {\n return Utils.bytesToSize(value);\n };\n\n render() {\n\n let { data, options } = this.state;\n return (\n \n );\n }\n}\n\nStatisticChart.propTypes = propTypes;\n\nexport default StatisticChart;\n","import React, { Fragment } from 'react';\nimport moment from 'moment';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport StatisticNav from './statistic-nav';\nimport StatisticCommonTool from './statistic-common-tool';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport StatisticChart from './statistic-chart';\nimport Loading from '../../../components/loading';\nimport { gettext } from '../../../utils/constants';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../../components/toast';\n\nimport '../../../css/system-stat.css';\n\nclass StatisticFile extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n filesData: [],\n labels: [],\n isLoading: true\n };\n }\n\n getActiviesFiles = (startTime, endTime, groupBy) => {\n let { filesData } = this.state;\n seafileAPI.sysAdminStatisticFiles(startTime, endTime, groupBy).then((res) => {\n let labels = [],\n added = [],\n deleted = [],\n visited = [],\n modified = [];\n let data = res.data;\n if (Array.isArray(data)) {\n data.forEach(item => {\n labels.push(moment(item.datetime).format('YYYY-MM-DD'));\n added.push(item.added);\n deleted.push(item.deleted);\n modified.push(item.modified);\n visited.push(item.visited);\n });\n let addedData = {\n label: gettext('Added'),\n data: added,\n borderColor: '#57cd6b',\n backgroundColor: '#57cd6b'};\n let visitedData = {\n label: gettext('Visited'),\n data: visited,\n borderColor: '#fd913a',\n backgroundColor: '#fd913a'};\n let modifiedData = {\n label: gettext('Modified'),\n data: modified,\n borderColor: '#72c3fc',\n backgroundColor: '#72c3fc'};\n let deletedData = {\n label: gettext('Deleted'),\n data: deleted,\n borderColor: '#f75356',\n backgroundColor: '#f75356'};\n filesData = [visitedData, addedData, modifiedData, deletedData];\n }\n this.setState({\n filesData: filesData,\n labels: labels,\n isLoading: false\n });\n }).catch(err => {\n let errMessage = Utils.getErrorMsg(err);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n let { labels, filesData, isLoading } = this.state;\n\n return(\n \n \n
    \n \n
    \n \n {isLoading && }\n {!isLoading && labels.length > 0 &&\n \n }\n
    \n
    \n
    \n );\n }\n}\n\nexport default StatisticFile;\n","import React, { Fragment } from 'react';\nimport moment from 'moment';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport StatisticNav from './statistic-nav';\nimport StatisticCommonTool from './statistic-common-tool';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport StatisticChart from './statistic-chart';\nimport Loading from '../../../components/loading';\nimport { gettext } from '../../../utils/constants';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../../components/toast';\n\nclass StatisticStorage extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n filesData: [],\n labels: [],\n isLoading: true\n };\n }\n\n getActiviesFiles = (startTime, endTime, groupBy) => {\n let { filesData } = this.state;\n seafileAPI.sysAdminStatisticStorages(startTime, endTime, groupBy).then((res) => {\n let labels = [],\n totalStorage = [];\n let data = res.data;\n if (Array.isArray(data)) {\n data.forEach(item => {\n labels.push(moment(item.datetime).format('YYYY-MM-DD'));\n totalStorage.push(item.total_storage);\n });\n let total_storage = {\n label: gettext('Total Storage'),\n data: totalStorage,\n borderColor: '#fd913a',\n backgroundColor: '#fd913a'};\n filesData = [total_storage];\n }\n this.setState({\n filesData: filesData,\n labels: labels,\n isLoading: false\n });\n }).catch(err => {\n let errMessage = Utils.getErrorMsg(err);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n let { labels, filesData, isLoading } = this.state;\n return(\n \n \n
    \n \n
    \n \n {isLoading && }\n {!isLoading && labels.length > 0 &&\n \n }\n
    \n
    \n
    \n );\n }\n}\n\nexport default StatisticStorage;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../../utils/constants';\n\nconst propTypes = {\n type: PropTypes.string.isRequired,\n sortBy: PropTypes.string.isRequired,\n sortOrder: PropTypes.string.isRequired,\n sortItems: PropTypes.func.isRequired,\n children: PropTypes.oneOfType([PropTypes.bool, PropTypes.array]),\n};\n\nclass TrafficTable extends React.Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n const { type, sortBy, sortOrder } = this.props;\n const sortIcon = sortOrder == 'asc' ? : ;\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n {this.props.children}\n \n
    {type == 'user' ? gettext('User') : gettext('Organization')}
    {gettext('Sync Upload')} {sortBy === 'sync_file_upload' && sortIcon}
    {gettext('Sync Download')} {sortBy === 'sync_file_download' && sortIcon}
    {gettext('Web Upload')} {sortBy === 'web_file_upload' && sortIcon}
    {gettext('Web Download')} {sortBy === 'web_file_download' && sortIcon}
    {gettext('Share link upload')} {sortBy === 'link_file_upload' && sortIcon}
    {gettext('Share link download')} {sortBy === 'link_file_download' && sortIcon}
    \n );\n }\n}\n\nTrafficTable.propTypes = propTypes;\n\nexport default TrafficTable;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Utils } from '../../../utils/utils';\nimport { siteRoot } from '../../../utils/constants';\n\nconst propTypes = {\n type: PropTypes.string.isRequired,\n userTrafficItem: PropTypes.object.isRequired,\n};\n\nclass TrafficTableBody extends React.Component {\n\n trafficName = () => {\n let { userTrafficItem, type } = this.props;\n switch(type) {\n case 'user':\n if (userTrafficItem.name) {\n return (\n {userTrafficItem.name}\n );\n }\n return({'--'});\n case 'org':\n return({userTrafficItem.org_name});\n }\n };\n\n render() {\n let { userTrafficItem } = this.props;\n\n let syncUploadSize = Utils.bytesToSize(userTrafficItem.sync_file_upload);\n let syncDownloadSize = Utils.bytesToSize(userTrafficItem.sync_file_download);\n let webUploadSize = Utils.bytesToSize(userTrafficItem.web_file_upload);\n let webDownloadSize = Utils.bytesToSize(userTrafficItem.web_file_download);\n let linkUploadSize = Utils.bytesToSize(userTrafficItem.link_file_upload);\n let linkDownloadSize = Utils.bytesToSize(userTrafficItem.link_file_download);\n\n return(\n \n {this.trafficName()}\n {syncUploadSize}\n {syncDownloadSize}\n {webUploadSize}\n {webDownloadSize}\n {linkUploadSize}\n {linkDownloadSize}\n \n );\n }\n}\n\nTrafficTableBody.propTypes = propTypes;\n\nexport default TrafficTableBody;\n","import React, { Fragment } from 'react';\nimport { Input } from 'reactstrap';\nimport moment from 'moment';\nimport { gettext } from '../../../utils/constants';\nimport TrafficTable from './traffic-table';\nimport TrafficTableBody from './traffic-table-body';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport Paginator from '../../../components/paginator';\nimport Loading from '../../../components/loading';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../../components/toast';\n\nclass OrgsTraffic extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n orgTrafficList: [],\n perPage: 25,\n currentPage: 1,\n hasNextPage: false,\n month: moment().format('YYYYMM'),\n isLoading: false,\n errorMessage: '',\n sortBy: 'link_file_download',\n sortOrder: 'desc'\n };\n this.initPage = 1;\n this.initMonth = moment().format('YYYYMM');\n }\n\n componentDidMount() {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getTrafficList(this.initMonth, this.state.currentPage);\n });\n }\n\n getPreviousPage = () => {\n this.getTrafficList(this.state.month, this.state.currentPage - 1);\n };\n\n getNextPage = () => {\n this.getTrafficList(this.state.month, this.state.currentPage + 1);\n };\n\n handleChange = (e) => {\n let month = e.target.value;\n this.setState({\n month: month\n });\n };\n\n handleKeyPress = (e) => {\n let { month } = this.state;\n if (e.key === 'Enter') {\n let pattern = /^([012]\\d{3})(0[1-9]|1[012])$/;\n if (!pattern.test(month)) {\n let errorMessage = gettext('Invalid month, should be yyyymm.');\n this.setState({\n errorMessage: errorMessage\n });\n return;\n }\n this.getTrafficList(month, this.initPage);\n e.target.blur();\n e.preventDefault();\n }\n };\n\n getTrafficList = (month, page) => {\n const { perPage, sortBy, sortOrder } = this.state;\n const orderBy = sortOrder == 'asc' ? sortBy : `${sortBy}_${sortOrder}`;\n this.setState({isLoading: true, errorMessage: ''});\n seafileAPI.sysAdminListOrgTraffic(month, page, perPage, orderBy).then(res => {\n let orgTrafficList = res.data.org_monthly_traffic_list.slice(0);\n this.setState({\n month: month,\n currentPage: page,\n orgTrafficList: orgTrafficList,\n hasNextPage: res.data.has_next_page,\n isLoading: false\n });\n }).catch(err => {\n let errMessage = Utils.getErrorMsg(err);\n toaster.danger(errMessage);\n });\n };\n\n sortItems = (sortBy) => {\n this.setState({\n sortBy: sortBy,\n sortOrder: this.state.sortOrder == 'asc' ? 'desc' : 'asc'\n }, () => {\n const { month, currentPage } = this.state;\n this.getTrafficList(month, currentPage);\n });\n };\n\n resetPerPage = (newPerPage) => {\n this.setState({\n perPage: newPerPage,\n }, () => this.getTrafficList(this.initPage, this.initMonth));\n };\n\n render() {\n const {\n isLoading, errorMessage, orgTrafficList,\n currentPage, hasNextPage, perPage,\n sortBy, sortOrder\n } = this.state;\n return (\n \n
    \n {gettext('Month:')}\n \n {errorMessage &&
    {errorMessage}
    }\n
    \n {isLoading && }\n {!isLoading &&\n \n {orgTrafficList.length > 0 && orgTrafficList.map((item, index) => {\n return(\n \n );\n })}\n \n }\n \n
    \n );\n }\n}\n\nexport default OrgsTraffic;\n","import React, { Fragment } from 'react';\nimport { Input } from 'reactstrap';\nimport TrafficTable from './traffic-table';\nimport TrafficTableBody from './traffic-table-body';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport Paginator from '../../../components/paginator';\nimport moment from 'moment';\nimport Loading from '../../../components/loading';\nimport { gettext } from '../../../utils/constants';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../../components/toast';\n\nclass UsersTraffic extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n userTrafficList: [],\n hasNextPage: false,\n perPage: 25,\n currentPage: 1,\n month: moment().format('YYYYMM'),\n isLoading: false,\n errorMessage: '',\n sortBy: 'link_file_download',\n sortOrder: 'desc'\n };\n this.initPage = 1;\n this.initMonth = moment().format('YYYYMM');\n }\n\n componentDidMount() {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getTrafficList(this.initMonth, this.state.currentPage);\n });\n }\n\n getPreviousPage = () => {\n this.getTrafficList(this.state.month, this.state.currentPage - 1);\n };\n\n getNextPage = () => {\n this.getTrafficList(this.state.month, this.state.currentPage + 1);\n };\n\n handleChange = (e) => {\n let month = e.target.value;\n this.setState({\n month: month\n });\n };\n\n handleKeyPress = (e) => {\n let { month } = this.state;\n if (e.key === 'Enter') {\n let pattern = /^([012]\\d{3})(0[1-9]|1[012])$/;\n if (!pattern.test(month)) {\n let errorMessage = gettext('Invalid month, should be yyyymm.');\n this.setState({\n errorMessage: errorMessage\n });\n return;\n }\n this.getTrafficList(month, this.initPage);\n e.target.blur();\n e.preventDefault();\n }\n };\n\n getTrafficList = (month, page) => {\n const { perPage, sortBy, sortOrder } = this.state;\n const orderBy = sortOrder == 'asc' ? sortBy : `${sortBy}_${sortOrder}`;\n this.setState({\n isLoading: true,\n errorMessage: ''\n });\n seafileAPI.sysAdminListUserTraffic(month, page, perPage, orderBy).then(res => {\n let userTrafficList = res.data.user_monthly_traffic_list.slice(0);\n this.setState({\n month: month,\n currentPage: page,\n userTrafficList: userTrafficList,\n hasNextPage: res.data.has_next_page,\n isLoading: false\n });\n }).catch(err => {\n let errMessage = Utils.getErrorMsg(err);\n toaster.danger(errMessage);\n });\n };\n\n sortItems = (sortBy) => {\n this.setState({\n sortBy: sortBy,\n sortOrder: this.state.sortOrder == 'asc' ? 'desc' : 'asc'\n }, () => {\n const { month, currentPage } = this.state;\n this.getTrafficList(month, currentPage);\n });\n };\n\n resetPerPage = (newPerPage) => {\n this.setState({\n perPage: newPerPage,\n }, () => this.getTrafficList(this.initMonth, this.initPage));\n };\n\n render() {\n const {\n isLoading, errorMessage, userTrafficList,\n currentPage, hasNextPage, perPage,\n sortBy, sortOrder\n } = this.state;\n return (\n \n
    \n {gettext('Month:')}\n \n {errorMessage &&
    {errorMessage}
    }\n
    \n {isLoading && }\n {!isLoading &&\n \n {userTrafficList.length > 0 && userTrafficList.map((item, index) => {\n return(\n \n );\n })}\n \n }\n \n
    \n );\n }\n}\n\nexport default UsersTraffic;\n","import React, { Fragment } from 'react';\nimport moment from 'moment';\nimport { gettext } from '../../../utils/constants';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport StatisticNav from './statistic-nav';\nimport StatisticCommonTool from './statistic-common-tool';\nimport Loading from '../../../components/loading';\nimport OrgsTraffic from './statistic-traffic-orgs';\nimport UsersTraffic from './statistic-traffic-users';\nimport StatisticChart from './statistic-chart';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../../components/toast';\n\nclass StatisticTraffic extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n filesData: [],\n linkData: [],\n syncData: [],\n webData: [],\n labels: [],\n isLoading: true,\n tabActive: 'system'\n };\n }\n\n changeTabActive = activeName => {\n this.setState({tabActive: activeName});\n };\n\n getActiviesFiles = (startTime, endTime, groupBy) => {\n seafileAPI.sysAdminStatisticTraffic(startTime, endTime, groupBy).then((res) => {\n let labels = [];\n let total_upload = [],\n total_download = [],\n link_upload = [],\n link_download = [],\n sync_upload = [],\n sync_download = [],\n web_upload = [],\n web_download = [];\n let data = res.data;\n if (Array.isArray(data)) {\n data.forEach(item => {\n labels.push(moment(item.datetime).format('YYYY-MM-DD'));\n link_upload.push(item['link-file-upload']);\n link_download.push(item['link-file-download']);\n sync_upload.push(item['sync-file-upload']);\n sync_download.push(item['sync-file-download']);\n web_upload.push(item['web-file-upload']);\n web_download.push(item['web-file-download']);\n total_upload.push(item['link-file-upload'] + item['sync-file-upload'] + item['web-file-upload']);\n total_download.push(item['link-file-download'] + item['sync-file-download'] + item['web-file-download']);\n });\n let linkUpload = {\n label: gettext('Upload'),\n data: link_upload,\n borderColor: '#fd913a',\n backgroundColor: '#fd913a'};\n let linkDownload = {\n label: gettext('Download'),\n data: link_download,\n borderColor: '#57cd6b',\n backgroundColor: '#57cd6b'};\n let syncUpload = {\n label: gettext('Upload'),\n data: sync_upload,\n borderColor: '#fd913a',\n backgroundColor: '#fd913a'};\n let syncDownload = {\n label: gettext('Download'),\n data: sync_download,\n borderColor: '#57cd6b',\n backgroundColor: '#57cd6b'};\n let webUpload = {\n label: gettext('Upload'),\n data: web_upload,\n borderColor: '#fd913a',\n backgroundColor: '#fd913a'};\n let webDownload = {\n label: gettext('Download'),\n data: web_download,\n borderColor: '#57cd6b',\n backgroundColor: '#57cd6b'};\n let totalUpload = {\n label: gettext('Upload'),\n data: total_upload,\n borderColor: '#fd913a',\n backgroundColor: '#fd913a'};\n let totalDownload = {\n label: gettext('Download'),\n data: total_download,\n borderColor: '#57cd6b',\n backgroundColor: '#57cd6b'};\n let linkData = [linkUpload, linkDownload];\n let syncData = [syncUpload, syncDownload];\n let webData = [webUpload, webDownload];\n let filesData = [totalUpload, totalDownload];\n this.setState({\n linkData: linkData,\n syncData: syncData,\n webData: webData,\n filesData: filesData,\n labels: labels,\n isLoading: false\n });\n }\n }).catch(err => {\n let errMessage = Utils.getErrorMsg(err);\n toaster.danger(errMessage);\n });\n };\n\n renderCommonTool = () => {\n let { tabActive } = this.state;\n if (tabActive === 'system') {\n return (\n \n
    \n
    {gettext('System')}
    \n
    {gettext('Users')}
    \n
    {gettext('Organizations')}
    \n
    \n
    \n );\n }\n return (\n
    \n
    {gettext('System')}
    \n
    {gettext('Users')}
    \n
    {gettext('Organizations')}
    \n
    \n );\n };\n\n render() {\n let { labels, filesData, linkData, syncData, webData, isLoading, tabActive } = this.state;\n\n return (\n \n \n
    \n \n
    \n {this.renderCommonTool()}\n {isLoading && }\n {!isLoading && tabActive === 'system' &&\n
    \n
    \n {labels.length > 0 &&\n \n }\n
    \n
    \n {labels.length > 0 &&\n \n }\n
    \n
    \n {labels.length > 0 &&\n \n }\n
    \n
    \n {labels.length > 0 &&\n \n }\n
    \n
    \n }\n {!isLoading && tabActive === 'user' &&\n \n }\n {!isLoading && tabActive === 'organizations' &&\n \n }\n
    \n
    \n
    \n );\n }\n}\n\nexport default StatisticTraffic;\n","import React, { Fragment } from 'react';\nimport moment from 'moment';\nimport { gettext } from '../../../utils/constants';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport StatisticNav from './statistic-nav';\nimport StatisticCommonTool from './statistic-common-tool';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport StatisticChart from './statistic-chart';\nimport Loading from '../../../components/loading';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../../components/toast';\n\nclass StatisticUsers extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n filesData: [],\n labels: [],\n isLoading: true,\n };\n }\n\n getActiviesFiles = (startTime, endTime, groupBy) => {\n let { filesData } = this.state;\n seafileAPI.sysAdminStatisticActiveUsers(startTime, endTime, groupBy).then((res) => {\n let labels = [],\n count = [];\n let data = res.data;\n if (Array.isArray(data)) {\n data.forEach(item => {\n labels.push(moment(item.datetime).format('YYYY-MM-DD'));\n count.push(item.count);\n });\n let userCount = {\n label: gettext('Active Users'),\n data: count,\n borderColor: '#fd913a',\n backgroundColor: '#fd913a'};\n filesData = [userCount];\n }\n this.setState({\n filesData: filesData,\n labels: labels,\n isLoading: false\n });\n }).catch(err => {\n let errMessage = Utils.getErrorMsg(err);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n let { labels, filesData, isLoading } = this.state;\n return (\n \n \n
    \n \n
    \n \n {isLoading && }\n {!isLoading && labels.length > 0 &&\n \n }\n
    \n
    \n
    \n );\n }\n}\n\nexport default StatisticUsers;\n","import React, { Fragment } from 'react';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport moment from 'moment';\nimport StatisticNav from './statistic-nav';\nimport { Button, Input } from 'reactstrap';\nimport { siteRoot, gettext } from '../../../utils/constants';\n\nclass StatisticReports extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n month: moment().format('YYYYMM'),\n errorMessage: ''\n };\n }\n\n handleChange = (e) => {\n let month = e.target.value;\n this.setState({\n month: month\n });\n };\n\n onGenerateReports = (type) => {\n let url = siteRoot + 'api/v2.1/admin/statistics/';\n let { month } = this.state;\n if (!month) {\n let errorMessage = gettext('It is required.');\n this.setState({\n errorMessage: errorMessage\n });\n return;\n }\n if (type === 'month') {\n let pattern = /^([012]\\d{3})(0[1-9]|1[012])$/;\n if (!pattern.test(month)) {\n let errorMessage = gettext('Invalid month, should be yyyymm.');\n this.setState({\n errorMessage: errorMessage\n });\n return;\n }\n }\n switch(type) {\n case 'month':\n url += 'system-user-traffic/excel/?month=' + month;\n break;\n case 'storage':\n url += 'system-user-storage/excel/?';\n break;\n }\n this.setState({\n errorMessage: ''\n });\n window.location.href = url;\n };\n\n render() {\n\n let { errorMessage } = this.state;\n return(\n \n \n
    \n \n
    \n
    \n
    {gettext('Monthly User Traffic')}
    \n
    \n {gettext('Month:')}\n \n \n
    \n {errorMessage &&
    {errorMessage}
    }\n
    \n
    \n
    {gettext('User Storage')}
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default StatisticReports;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { siteRoot, gettext, isPro } from '../../../utils/constants';\n\nconst propTypes = {\n currentItem: PropTypes.string.isRequired\n};\n\nclass Nav extends React.Component {\n\n constructor(props) {\n super(props);\n this.navItems = [\n {name: 'desktop', urlPart:'desktop-devices', text: gettext('Desktop')},\n {name: 'mobile', urlPart:'mobile-devices', text: gettext('Mobile')}\n ];\n if (isPro) {\n this.navItems.push({name: 'errors', urlPart:'device-errors', text: gettext('Errors')});\n }\n }\n\n render() {\n const { currentItem } = this.props;\n return (\n
    \n
      \n {this.navItems.map((item, index) => {\n return (\n
    • \n {item.text}\n
    • \n );\n })}\n
    \n
    \n );\n }\n}\n\nNav.propTypes = propTypes;\n\nexport default Nav;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport { Utils } from '../../../utils/utils';\nimport EmptyTip from '../../../components/empty-tip';\nimport moment from 'moment';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport SysAdminUnlinkDevice from '../../../components/dialog/sysadmin-dialog/sysadmin-unlink-device-dialog';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n }\n\n getPreviousPageDevicesList = () => {\n this.props.getDevicesListByPage(this.props.pageInfo.current_page - 1);\n };\n\n getNextPageDevicesList = () => {\n this.props.getDevicesListByPage(this.props.pageInfo.current_page + 1);\n };\n\n render() {\n const { loading, errorMsg, items, pageInfo, curPerPage } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No connected devices')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('User')}{gettext('Platform')}{' / '}{gettext('Version')}{gettext('Device Name')}{gettext('IP')}{gettext('Last Access')}{/*Operations*/}
    \n \n
    \n );\n\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getLogsByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n currentPage: PropTypes.number,\n perPage: PropTypes.number,\n pageInfo: PropTypes.object,\n hasNextPage: PropTypes.bool,\n getDevicesListByPage: PropTypes.func.isRequired,\n curPerPage: PropTypes.number,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n unlinked: false,\n isOpIconShown: false,\n isUnlinkDeviceDialogOpen: false\n };\n }\n\n handleMouseOver = () => {\n this.setState({isOpIconShown: true});\n };\n\n handleMouseOut = () => {\n this.setState({isOpIconShown: false});\n };\n\n handleUnlink = (e) => {\n e.preventDefault();\n if (this.props.item.is_desktop_client) {\n this.toggleUnlinkDeviceDialog();\n } else {\n this.unlinkDevice(true);\n }\n };\n\n toggleUnlinkDeviceDialog = () => {\n this.setState({isUnlinkDeviceDialogOpen: !this.state.isUnlinkDeviceDialogOpen});\n };\n\n unlinkDevice = (deleteFiles) => {\n const { platform, device_id, user } = this.props.item;\n seafileAPI.sysAdminUnlinkDevice(platform, device_id, user, deleteFiles).then((res) => {\n this.setState({unlinked: true});\n let message = gettext('Successfully unlinked the device.');\n toaster.success(message);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const item = this.props.item;\n const { unlinked, isUnlinkDeviceDialogOpen, isOpIconShown } = this.state;\n\n if (unlinked) {\n return null;\n }\n\n return (\n \n \n {item.user_name}\n {item.platform}{' / '}{item.client_version}\n {item.device_name}\n {item.last_login_ip}\n \n {moment(item.last_accessed).fromNow()}\n \n \n \n \n \n {isUnlinkDeviceDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n};\n\nclass DevicesByPlatform extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n devicesData: [],\n pageInfo: {},\n perPage: 25\n };\n }\n\n componentDidMount () {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage = 1, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getDevicesListByPage(this.state.currentPage);\n });\n }\n\n getDevicesListByPage = (page) => {\n let platform = this.props.devicesPlatform;\n let per_page = this.state.perPage;\n seafileAPI.sysAdminListDevices(platform, page, per_page).then((res) => {\n this.setState({\n devicesData: res.data.devices,\n pageInfo: res.data.page_info,\n loading: false\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n resetPerPage = (perPage) => {\n this.setState({\n perPage: perPage\n }, () => {\n this.getDevicesListByPage(1);\n });\n };\n\n render() {\n return (\n
    \n \n
    \n );\n }\n}\n\nDevicesByPlatform.propTypes = {\n devicesPlatform: PropTypes.string.isRequired,\n};\n\nexport default DevicesByPlatform;\n","import React, { Component, Fragment } from 'react';\nimport DevicesNav from './devices-nav';\nimport DevicesByPlatform from './devices-by-platform';\nimport MainPanelTopbar from '../main-panel-topbar';\n\nclass DesktopDevices extends Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n return (\n \n \n
    \n
    \n \n \n
    \n
    \n
    \n );\n }\n}\n\nexport default DesktopDevices;\n","import React, { Component, Fragment } from 'react';\nimport DevicesNav from './devices-nav';\nimport DevicesByPlatform from './devices-by-platform';\nimport MainPanelTopbar from '../main-panel-topbar';\n\nclass MobileDevices extends Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n return (\n \n \n
    \n
    \n \n \n
    \n
    \n
    \n );\n }\n}\n\nexport default MobileDevices;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { siteRoot } from '../../utils/constants';\n\nconst propTypes = {\n email: PropTypes.string,\n name: PropTypes.string.isRequired\n};\n\nclass UserLink extends Component {\n\n render() {\n return {this.props.name};\n }\n}\n\nUserLink.propTypes = propTypes;\n\nexport default UserLink;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'reactstrap';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { siteRoot, gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport { Utils } from '../../../utils/utils';\nimport EmptyTip from '../../../components/empty-tip';\nimport moment from 'moment';\nimport Loading from '../../../components/loading';\nimport { Link } from '@gatsbyjs/reach-router';\nimport DevicesNav from './devices-nav';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\nimport Paginator from '../../../components/paginator';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n }\n\n getPreviousPageDeviceErrorsList = () => {\n this.props.getDeviceErrorsListByPage(this.props.pageInfo.current_page - 1);\n };\n\n getNextPageDeviceErrorsList = () => {\n this.props.getDeviceErrorsListByPage(this.props.pageInfo.current_page + 1);\n };\n\n render() {\n const { loading, errorMsg, items, pageInfo, curPerPage } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No sync errors')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('User')}{gettext('Device')}{' / '}{gettext('Version')}{gettext('IP')}{gettext('Library')}{gettext('Error')}{gettext('Time')}
    \n \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getLogsByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n currentPage: PropTypes.number,\n perPage: PropTypes.number,\n pageInfo: PropTypes.object,\n hasNextPage: PropTypes.bool,\n getDeviceErrorsListByPage: PropTypes.func,\n curPerPage: PropTypes.number,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n };\n }\n\n handleMouseOver = () => {\n this.setState({isOpIconShown: true});\n };\n\n handleMouseOut = () => {\n this.setState({isOpIconShown: false});\n };\n\n render() {\n let item = this.props.item;\n return (\n \n \n {item.device_name}{' / '}{item.client_version}\n {item.device_ip}\n {item.repo_name}\n {item.error_msg}\n \n {moment(item.error_time).fromNow()}\n \n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n};\n\nclass DeviceErrors extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n devicesErrors: [],\n isCleanBtnShown: false,\n pageInfo: {},\n perPage: 25\n };\n }\n\n componentDidMount () {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage = 1, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getDeviceErrorsListByPage(this.state.currentPage);\n });\n }\n\n getDeviceErrorsListByPage = (page) => {\n let per_page = this.state.perPage;\n seafileAPI.sysAdminListDeviceErrors(page, per_page).then((res) => {\n this.setState({\n loading: false,\n devicesErrors: res.data.device_errors,\n pageInfo: res.data.page_info,\n isCleanBtnShown: res.data.length > 0\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n clean = () => {\n seafileAPI.sysAdminClearDeviceErrors().then((res) => {\n this.setState({\n devicesErrors: [],\n isCleanBtnShown: false\n });\n let message = gettext('Successfully cleaned all errors.');\n toaster.success(message);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n resetPerPage = (perPage) => {\n this.setState({\n perPage: perPage\n }, () => {\n this.getDeviceErrorsListByPage(1);\n });\n };\n render() {\n return (\n \n {this.state.isCleanBtnShown ? (\n \n \n \n ) : (\n \n )}\n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default DeviceErrors;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button, Form, FormGroup, Input, InputGroup, InputGroupAddon, InputGroupText } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\n\nconst propTypes = {\n toggle: PropTypes.func.isRequired,\n updateQuota: PropTypes.func.isRequired\n};\n\nclass SetQuotaDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n quota: '',\n isSubmitBtnActive: false\n };\n }\n\n toggle = () => {\n this.props.toggle();\n };\n\n handleQuotaChange = (e) => {\n const value = e.target.value;\n this.setState({\n quota: value,\n isSubmitBtnActive: value.trim() != ''\n });\n };\n\n handleKeyDown = (e) => {\n if (e.key == 'Enter') {\n this.handleSubmit();\n e.preventDefault();\n }\n };\n\n handleSubmit = () => {\n this.props.updateQuota(this.state.quota.trim());\n this.toggle();\n };\n\n render() {\n const { quota, isSubmitBtnActive } = this.state;\n return (\n \n {gettext('Set Quota')}\n \n
    \n \n \n \n \n MB\n \n \n

    \n {gettext('An integer that is greater than or equal to 0.')}\n
    \n {gettext('Tip: 0 means default limit')}\n

    \n
    \n
    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nSetQuotaDialog.propTypes = propTypes;\n\nexport default SetQuotaDialog;\n","\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Alert, Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\nimport { gettext, siteRoot } from '../../../utils/constants';\n\nconst propTypes = {\n toggle: PropTypes.func.isRequired,\n importUserInBatch: PropTypes.func.isRequired,\n};\n\nclass SysAdminImportUserDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n errorMsg: ''\n };\n this.fileInputRef = React.createRef();\n }\n\n toggle = () => {\n this.props.toggle();\n };\n\n openFileInput = () => {\n this.fileInputRef.current.click();\n };\n\n uploadFile = (e) => {\n // no file selected\n if (!this.fileInputRef.current.files.length) {\n return;\n }\n // check file extension\n let fileName = this.fileInputRef.current.files[0].name;\n if(fileName.substr(fileName.lastIndexOf('.') + 1) != 'xlsx') {\n this.setState({\n errorMsg: gettext('Please choose a .xlsx file.')\n });\n return;\n }\n const file = this.fileInputRef.current.files[0];\n this.props.importUserInBatch(file);\n this.toggle();\n };\n\n render() {\n let { errorMsg } = this.state;\n return (\n \n {gettext('Import users from a .xlsx file')}\n \n

    {gettext('Download an example file')}

    \n \n \n {errorMsg && {errorMsg}}\n
    \n \n \n \n
    \n );\n }\n}\n\nSysAdminImportUserDialog.propTypes = propTypes;\n\nexport default SysAdminImportUserDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../utils/constants';\nimport SelectEditor from './select-editor';\n\nconst propTypes = {\n isTextMode: PropTypes.bool.isRequired,\n isEditIconShow: PropTypes.bool.isRequired,\n roleOptions: PropTypes.array.isRequired,\n currentRole: PropTypes.string.isRequired,\n onRoleChanged: PropTypes.func.isRequired\n};\n\nclass SysAdminUserRoleEditor extends React.Component {\n\n translateRoles = (role) => {\n switch (role) {\n case 'default':\n return gettext('Default');\n case 'guest':\n return gettext('Guest');\n default:\n return role;\n }\n };\n\n render() {\n return (\n \n );\n }\n}\n\nSysAdminUserRoleEditor.propTypes = propTypes;\n\nexport default SysAdminUserRoleEditor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Alert, Modal, ModalHeader, ModalBody, ModalFooter, Button, Form, FormGroup, Label, Input, InputGroup, InputGroupAddon } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport { Utils } from '../../../utils/utils';\nimport SysAdminUserRoleEditor from '../../../components/select-editor/sysadmin-user-role-editor';\n\nconst propTypes = {\n availableRoles: PropTypes.array.isRequired,\n dialogTitle: PropTypes.string.isRequired,\n showRole: PropTypes.bool.isRequired,\n toggleDialog: PropTypes.func.isRequired,\n addUser: PropTypes.func.isRequired\n};\n\nclass SysAdminAddUserDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n errorMsg: '',\n isPasswordVisible: false,\n password: '',\n passwordAgain: '',\n email: '',\n name: '',\n role: 'default',\n isSubmitBtnActive: false\n };\n }\n\n checkSubmitBtnActive = () => {\n const { email, password, passwordAgain } = this.state;\n let btnActive = true;\n if (email.trim() &&\n password.trim() &&\n passwordAgain.trim()) {\n btnActive = true;\n } else {\n btnActive = false;\n }\n this.setState({\n isSubmitBtnActive: btnActive\n });\n };\n\n toggle = () => {\n this.props.toggleDialog();\n };\n\n togglePasswordVisible = () => {\n this.setState({isPasswordVisible: !this.state.isPasswordVisible});\n };\n\n inputPassword = (e) => {\n let passwd = e.target.value;\n this.setState({\n password: passwd,\n errorMsg: ''\n }, this.checkSubmitBtnActive);\n };\n\n inputPasswordAgain = (e) => {\n let passwd = e.target.value;\n this.setState({\n passwordAgain: passwd,\n errorMsg: ''\n }, this.checkSubmitBtnActive);\n };\n\n generatePassword = () => {\n let val = Utils.generatePassword(8);\n this.setState({\n password: val,\n passwordAgain: val\n }, this.checkSubmitBtnActive);\n };\n\n inputEmail = (e) => {\n let email = e.target.value;\n this.setState({\n email: email\n }, this.checkSubmitBtnActive);\n };\n\n inputName = (e) => {\n let name = e.target.value;\n this.setState({\n name: name\n });\n };\n\n updateRole = (role) => {\n this.setState({\n role: role\n });\n };\n\n handleSubmit = () => {\n const { email, password, passwordAgain, name, role } = this.state;\n if (password != passwordAgain) {\n this.setState({errorMsg: gettext('Passwords do not match.')});\n return;\n }\n let data = {\n email: email.trim(),\n name: name.trim(),\n password: password.trim()\n };\n if (this.props.showRole) {\n data.role = role;\n }\n this.props.addUser(data);\n this.toggle();\n };\n\n render() {\n const { dialogTitle, showRole } = this.props;\n const {\n errorMsg, isPasswordVisible,\n email, name, role, password, passwordAgain,\n isSubmitBtnActive\n } = this.state;\n return (\n \n {dialogTitle || gettext('Add Member')}\n \n
    \n \n \n \n \n \n \n \n \n {showRole &&\n \n \n \n \n }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n {errorMsg && {errorMsg}}\n
    \n \n \n \n \n
    \n );\n }\n}\n\nSysAdminAddUserDialog.propTypes = propTypes;\n\nexport default SysAdminAddUserDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button } from 'reactstrap';\nimport UserSelect from '../../user-select';\nimport { gettext } from '../../../utils/constants';\n\nconst propTypes = {\n toggle: PropTypes.func.isRequired,\n addAdminInBatch: PropTypes.func.isRequired,\n};\n\nclass SysAdminBatchAddAdminDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n options: null,\n isSubmitBtnActive: false\n };\n }\n\n toggle = () => {\n this.props.toggle();\n };\n\n handleSelectChange = (options) => {\n this.setState({\n options: options,\n isSubmitBtnActive: options.length > 0\n });\n };\n\n handleSubmit = () => {\n this.props.addAdminInBatch(this.state.options.map(item => item.email));\n this.toggle();\n };\n\n render() {\n return (\n \n {gettext('Add Admin')}\n \n \n \n \n \n \n \n \n );\n }\n}\n\nSysAdminBatchAddAdminDialog.propTypes = propTypes;\n\nexport default SysAdminBatchAddAdminDialog;\n","class SysAdminUser {\n constructor(object) {\n this.email = object.email;\n this.name = object.name;\n this.contact_email = object.contact_email;\n this.login_id = object.login_id;\n this.last_login = object.last_login;\n this.last_access_time = object.last_access_time;\n this.create_time = object.create_time;\n this.is_active = object.is_active;\n this.is_staff = object.is_staff;\n this.reference_id = object.reference_id;\n this.department = object.department;\n this.quota_total = object.quota_total;\n this.quota_usage = object.quota_usage;\n this.role = object.role;\n this.institution = object.institution;\n if (object.org_id) {\n this.org_id = object.org_id;\n }\n if (object.org_name) {\n this.org_name = object.org_name;\n }\n this.isSelected = false;\n }\n}\n\nexport default SysAdminUser;\n","\nclass SysAdminAdminUser {\n constructor(object) {\n this.email = object.email;\n this.name = object.name;\n this.contact_email = object.contact_email;\n this.login_id = object.login_id;\n this.last_login = object.last_login;\n this.last_access_time = object.last_access_time;\n this.create_time = object.create_time;\n this.is_active = object.is_active;\n this.is_staff = object.is_staff;\n this.quota_total = object.quota_total;\n this.quota_usage = object.quota_usage;\n this.admin_role = object.admin_role;\n this.isSelected = false;\n }\n}\n\nexport default SysAdminAdminUser;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst propTypes = {\n placeholder: PropTypes.string.isRequired,\n submit: PropTypes.func.isRequired\n};\n\nclass Search extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n value: ''\n };\n }\n\n handleInputChange = (e) => {\n this.setState({\n value: e.target.value\n });\n };\n\n handleKeyDown = (e) => {\n if (e.key == 'Enter') {\n e.preventDefault();\n this.handleSubmit();\n }\n };\n\n handleSubmit = () => {\n const value = this.state.value.trim();\n if (!value) {\n return false;\n }\n this.props.submit(value);\n };\n\n render() {\n return (\n
    \n \n \n
    \n );\n }\n}\n\nSearch.propTypes = propTypes;\n\nexport default Search;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { siteRoot, gettext, haveLDAP, isDefaultAdmin } from '../../../utils/constants';\n\nconst propTypes = {\n currentItem: PropTypes.string.isRequired\n};\n\nclass Nav extends React.Component {\n\n constructor(props) {\n super(props);\n this.navItems = [\n {name: 'database', urlPart: 'users', text: gettext('Database')}\n ];\n if (haveLDAP) {\n this.navItems.push(\n {name: 'ldap', urlPart: 'users/ldap', text: gettext('LDAP')},\n {name: 'ldap-imported', urlPart: 'users/ldap-imported', text: gettext('LDAP(imported)')}\n );\n }\n if (isDefaultAdmin) {\n this.navItems.push(\n {name: 'admin', urlPart: 'users/admins', text: gettext('Admin')}\n );\n }\n }\n\n render() {\n const { currentItem } = this.props;\n return (\n
    \n
      \n {this.navItems.map((item, index) => {\n return (\n
    • \n {item.text}\n
    • \n );\n })}\n
    \n
    \n );\n }\n}\n\nNav.propTypes = propTypes;\n\nexport default Nav;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { isPro, username, gettext, multiInstitution, siteRoot } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport Selector from '../../../components/single-selector';\nimport OpMenu from '../../../components/dialog/op-menu';\nimport SysAdminUserSetQuotaDialog from '../../../components/dialog/sysadmin-dialog/set-quota';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport UserLink from '../user-link';\n\nconst { availableRoles, availableAdminRoles, institutions } = window.sysadmin.pageOptions;\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n toggleItemFreezed = (isFreezed) => {\n this.setState({ isItemFreezed: isFreezed });\n };\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n getPreviousPage = () => {\n this.props.getListByPage(this.props.currentPage - 1);\n };\n\n getNextPage = () => {\n this.props.getListByPage(this.props.currentPage + 1);\n };\n\n sortByQuotaUsage = (e) => {\n e.preventDefault();\n this.props.sortByQuotaUsage();\n };\n\n render() {\n const {\n isAdmin, loading, errorMsg, items, isAllUsersSelected,\n curPerPage, hasNextPage, currentPage,\n sortBy, sortOrder\n } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No users')}

    \n
    \n );\n\n\n let columns = [];\n\n let sortIcon;\n if (sortBy == '') {\n // initial sort icon\n sortIcon = ;\n } else {\n sortIcon = ;\n }\n const spaceText = gettext('Space Used');\n const spaceEl =\n sortBy != undefined ? // only offer 'sort' for 'DB' & 'LDAPImported' users\n {spaceText} {sortIcon} :\n spaceText;\n const colSpaceText = {spaceEl}{` / ${gettext('Quota')}`};\n\n const colNameText = `${gettext('Name')} / ${gettext('Contact Email')}`;\n const colCreatedText = `${gettext('Created At')} / ${gettext('Last Login')} / ${gettext('Last Access')}`;\n if (isPro) {\n columns.push(\n {width: '20%', text: colNameText},\n {width: '15%', text: gettext('Status')},\n {width: '15%', text: gettext('Role')}\n );\n } else {\n columns.push(\n {width: '30%', text: colNameText},\n {width: '20%', text: gettext('Status')}\n );\n }\n if (multiInstitution && !isAdmin) {\n columns.push(\n {width: '14%', text: colSpaceText},\n {width: '14%', text: gettext('Institution')},\n {width: '14%', text: colCreatedText},\n {width: '5%', text: ''}\n );\n } else {\n columns.push(\n {width: '20%', text: colSpaceText},\n {width: '22%', text: colCreatedText},\n {width: '5%', text: ''}\n );\n }\n\n const table = (\n \n \n \n \n \n {columns.map((item, index) => {\n return ;\n })}\n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    \n \n {item.text}
    \n {(!this.props.isAdmin && !this.props.isSearchResult) &&\n \n }\n
    \n );\n\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool,\n errorMsg: PropTypes.string,\n items: PropTypes.array,\n deleteItem: PropTypes.func,\n isAdmin: PropTypes.bool,\n isLDAPImported: PropTypes.bool,\n isSearchResult: PropTypes.bool,\n sortBy: PropTypes.string,\n sortByQuotaUsage: PropTypes.func,\n getListByPage: PropTypes.func,\n currentPage: PropTypes.number,\n toggleSelectAllUsers: PropTypes.func,\n isAllUsersSelected: PropTypes.bool,\n resetPerPage: PropTypes.func,\n updateUser: PropTypes.func,\n deleteUser: PropTypes.func,\n updateAdminRole: PropTypes.func,\n revokeAdmin: PropTypes.func,\n onUserSelected: PropTypes.func,\n curPerPage: PropTypes.number,\n hasNextPage: PropTypes.bool,\n sortOrder: PropTypes.string,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n highlight: false,\n isSetQuotaDialogOpen: false,\n isDeleteUserDialogOpen: false,\n isResetUserPasswordDialogOpen: false,\n isRevokeAdminDialogOpen: false\n };\n }\n\n handleMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false\n });\n this.props.onUnfreezedItem();\n };\n\n toggleSetQuotaDialog = () => {\n this.setState({isSetQuotaDialogOpen: !this.state.isSetQuotaDialogOpen});\n };\n\n toggleDeleteUserDialog = () => {\n this.setState({isDeleteUserDialogOpen: !this.state.isDeleteUserDialogOpen});\n };\n\n toggleResetUserPasswordDialog = () => {\n this.setState({isResetUserPasswordDialogOpen: !this.state.isResetUserPasswordDialogOpen});\n };\n\n toggleRevokeAdminDialog = () => {\n this.setState({isRevokeAdminDialogOpen: !this.state.isRevokeAdminDialogOpen});\n };\n\n onUserSelected = () => {\n this.props.onUserSelected(this.props.item);\n };\n\n updateStatus= (roleOption) => {\n const isActive = roleOption.value == 'active';\n if (isActive) {\n toaster.notify(gettext('It may take some time, please wait.'));\n }\n this.props.updateUser(this.props.item.email, 'is_active', isActive);\n };\n\n updateRole = (roleOption) => {\n this.props.updateUser(this.props.item.email, 'role', roleOption.value);\n };\n\n updateAdminRole = (roleOption) => {\n this.props.updateAdminRole(this.props.item.email, roleOption.value);\n };\n\n translateRole = (role) => {\n switch (role) {\n case 'default':\n return gettext('Default');\n case 'guest':\n return gettext('Guest');\n default:\n return role;\n }\n };\n\n translateAdminRole = (role) => {\n switch (role) {\n case 'default_admin':\n return gettext('Default Admin');\n case 'system_admin':\n return gettext('System Admin');\n case 'daily_admin':\n return gettext('Daily Admin');\n case 'audit_admin':\n return gettext('Audit Admin');\n default:\n return role;\n }\n };\n\n translateStatus = (status) => {\n switch (status) {\n case 'active':\n return gettext('Active');\n case 'inactive':\n return gettext('Inactive');\n }\n };\n\n updateInstitution = (instOption) => {\n this.props.updateUser(this.props.item.email, 'institution', instOption.value);\n };\n\n updateQuota = (value) => {\n this.props.updateUser(this.props.item.email, 'quota_total', value);\n };\n\n deleteUser = () => {\n toaster.notify(gettext('It may take some time, please wait.'));\n this.props.deleteUser(this.props.item.email, this.props.item.name);\n };\n\n resetPassword = () => {\n toaster.notify(gettext('It may take some time, please wait.'));\n seafileAPI.sysAdminResetUserPassword(this.props.item.email).then(res => {\n toaster.success(res.data.reset_tip);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n revokeAdmin = () => {\n const { item } = this.props;\n this.props.revokeAdmin(item.email, item.name);\n };\n\n getMenuOperations = () => {\n const {\n isAdmin, isLDAPImported,\n isSearchResult, item\n } = this.props;\n let list = ['Delete'];\n if (!isLDAPImported ||\n (isSearchResult && item.source == 'db')) {\n list.push('Reset Password');\n }\n if (isAdmin) {\n list = ['Revoke Admin'];\n }\n return list;\n };\n\n translateOperations = (item) => {\n let translateResult = '';\n switch (item) {\n case 'Delete':\n translateResult = gettext('Delete');\n break;\n case 'Reset Password':\n translateResult = gettext('Reset Password');\n break;\n case 'Revoke Admin':\n translateResult = gettext('Revoke Admin');\n break;\n }\n\n return translateResult;\n };\n\n onMenuItemClick = (operation) => {\n switch(operation) {\n case 'Delete':\n this.toggleDeleteUserDialog();\n break;\n case 'Reset Password':\n this.toggleResetUserPasswordDialog();\n break;\n case 'Revoke Admin':\n this.toggleRevokeAdminDialog();\n break;\n default:\n break;\n }\n };\n\n render() {\n const { item, isAdmin } = this.props;\n const {\n highlight,\n isOpIconShown,\n isSetQuotaDialogOpen,\n isDeleteUserDialogOpen,\n isResetUserPasswordDialogOpen,\n isRevokeAdminDialogOpen\n } = this.state;\n\n const itemName = '' + Utils.HTMLescape(item.name) + '';\n const deleteDialogMsg = gettext('Are you sure you want to delete {placeholder} ?').replace('{placeholder}', itemName);\n const resetPasswordDialogMsg = gettext('Are you sure you want to reset the password of {placeholder} ?').replace('{placeholder}', itemName);\n const revokeAdminDialogMsg = gettext('Are you sure you want to revoke the admin permission of {placeholder} ?').replace('{placeholder}', itemName);\n\n // for 'user status'\n const curStatus = item.is_active ? 'active' : 'inactive';\n this.statusOptions = ['active', 'inactive'].map(item => {\n return {\n value: item,\n text: this.translateStatus(item),\n isSelected: item == curStatus\n };\n });\n const currentSelectedStatusOption = this.statusOptions.filter(item => item.isSelected)[0];\n\n let currentSelectedAdminRoleOption;\n let currentSelectedRoleOption;\n if (isAdmin) {\n const { admin_role: curAdminRole } = item;\n this.adminRoleOptions = availableAdminRoles.map(item => {\n return {\n value: item,\n text: this.translateAdminRole(item),\n isSelected: item == curAdminRole\n };\n });\n currentSelectedAdminRoleOption = this.adminRoleOptions.filter(item => item.isSelected)[0];\n } else {\n const { role: curRole } = item;\n this.roleOptions = availableRoles.map(item => {\n return {\n value: item,\n text: this.translateRole(item),\n isSelected: item == curRole\n };\n });\n currentSelectedRoleOption = this.roleOptions.filter(item => item.isSelected)[0] || { // `|| {...}`: to be compatible with old data(roles not in the present `availableRoles`\n value: curRole,\n text: this.translateRole(curRole),\n isSelected: true\n };\n }\n\n let currentSelectedInstOption;\n if (multiInstitution && !isAdmin) {\n const { institution: curInstitution } = item;\n this.instOptions = institutions.map(item => {\n return {\n value: item,\n text: item,\n isSelected: item == curInstitution\n };\n });\n currentSelectedInstOption = this.instOptions.filter(item => item.isSelected)[0];\n }\n\n return (\n \n \n \n \n \n \n \n {item.contact_email &&\n \n
    \n {item.contact_email}\n
    }\n {item.org_id &&\n \n
    \n ({item.org_name})\n
    \n }\n \n \n \n \n {isPro &&\n \n {isAdmin ?\n \n :\n \n }\n \n }\n \n {`${Utils.bytesToSize(item.quota_usage)} / ${item.quota_total > 0 ? Utils.bytesToSize(item.quota_total) : '--'}`}\n \n \n \n {(multiInstitution && !isAdmin) &&\n \n 0}\n currentSelectedOption={currentSelectedInstOption}\n options={this.instOptions}\n selectOption={this.updateInstitution}\n toggleItemFreezed={this.props.toggleItemFreezed}\n />\n \n }\n \n {`${item.create_time ? moment(item.create_time).format('YYYY-MM-DD HH:mm') : '--'} /`}\n
    \n {`${item.last_login ? moment(item.last_login).fromNow() : '--'}`}\n
    \n {`${item.last_access_time ? moment(item.last_access_time).fromNow() : '--'}`}\n \n \n {(item.email != username && isOpIconShown) &&\n \n }\n \n \n {isSetQuotaDialogOpen &&\n \n }\n {isDeleteUserDialogOpen &&\n \n }\n {isResetUserPasswordDialogOpen &&\n \n }\n {isRevokeAdminDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object,\n isItemFreezed: PropTypes.bool,\n isAdmin: PropTypes.bool,\n isLDAPImported: PropTypes.bool,\n onFreezedItem: PropTypes.func,\n onUnfreezedItem: PropTypes.func,\n toggleItemFreezed: PropTypes.func.isRequired,\n updateUser: PropTypes.func,\n deleteUser: PropTypes.func,\n updateAdminRole: PropTypes.func,\n revokeAdmin: PropTypes.func,\n onUserSelected: PropTypes.func,\n isSearchResult: PropTypes.bool,\n};\n\nexport default Content;\n","import React, { Component, Fragment } from 'react';\nimport { navigate } from '@gatsbyjs/reach-router';\nimport { Button } from 'reactstrap';\nimport PropTypes from 'prop-types';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { isPro, gettext, siteRoot } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport SysAdminUserSetQuotaDialog from '../../../components/dialog/sysadmin-dialog/set-quota';\nimport SysAdminImportUserDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-import-user-dialog';\nimport SysAdminAddUserDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-user-dialog';\nimport SysAdminBatchAddAdminDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-batch-add-admin-dialog';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport SysAdminUser from '../../../models/sysadmin-user';\nimport SysAdminAdminUser from '../../../models/sysadmin-admin-user';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Search from '../search';\nimport UsersNav from './users-nav';\nimport Content from './users-content';\n\nconst { availableRoles } = window.sysadmin.pageOptions;\n\nconst propTypes = {\n isAdmin: PropTypes.bool,\n isLDAPImported: PropTypes.bool\n};\n\nclass Users extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n userList: [],\n hasNextPage: false,\n currentPage: 1,\n perPage: 25,\n hasUserSelected: false,\n selectedUserList: [],\n isAllUsersSelected: false,\n isImportUserDialogOpen: false,\n isAddUserDialogOpen: false,\n isBatchSetQuotaDialogOpen: false,\n isBatchDeleteUserDialogOpen: false,\n isBatchAddAdminDialogOpen: false\n };\n }\n\n componentDidMount () {\n if (this.props.isAdmin) { // 'Admin' page\n this.getUserList(); // no pagination\n } else {\n let urlParams = (new URL(window.location)).searchParams;\n const {\n currentPage, perPage,\n sortBy = '',\n sortOrder = 'asc'\n } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage),\n sortBy: urlParams.get('order_by') || sortBy,\n sortOrder: urlParams.get('direction') || sortOrder\n }, () => {\n this.getUsersListByPage(this.state.currentPage);\n });\n }\n }\n\n toggleImportUserDialog = () => {\n this.setState({isImportUserDialogOpen: !this.state.isImportUserDialogOpen});\n };\n\n toggleAddUserDialog = () => {\n this.setState({isAddUserDialogOpen: !this.state.isAddUserDialogOpen});\n };\n\n toggleBatchSetQuotaDialog = () => {\n this.setState({isBatchSetQuotaDialogOpen: !this.state.isBatchSetQuotaDialogOpen});\n };\n\n toggleBatchDeleteUserDialog = () => {\n this.setState({isBatchDeleteUserDialogOpen: !this.state.isBatchDeleteUserDialogOpen});\n };\n\n onUserSelected = (item) => {\n let hasUserSelected = false;\n let selectedUserList = [];\n // traverse all users, toggle its selected status\n let users = this.state.userList.map(user => {\n // toggle status\n if (user.email === item.email) {\n user.isSelected = !user.isSelected;\n }\n // update selectedUserList\n // if current user is now selected, push it to selectedUserList\n // if current user is now not selected, drop it from selectedUserList\n if (user.isSelected == true) {\n hasUserSelected = true;\n selectedUserList.push(user);\n } else {\n selectedUserList = selectedUserList.filter(thisuser => {\n return thisuser.email != user.email;\n });\n }\n return user;\n });\n // finally update state\n this.setState({\n userList: users,\n hasUserSelected: hasUserSelected,\n selectedUserList: selectedUserList,\n });\n };\n\n toggleSelectAllUsers = () => {\n if (this.state.isAllUsersSelected) {\n // if previous state is allSelected, toggle to not select\n let users = this.state.userList.map(user => {\n user.isSelected = false;\n return user;\n });\n this.setState({\n userList: users,\n hasUserSelected: false,\n isAllUsersSelected: false,\n selectedUserList: [],\n });\n } else {\n // if previous state is not allSelected, toggle to selectAll\n let users = this.state.userList.map(user => {\n user.isSelected = true;\n return user;\n });\n this.setState({\n userList: users,\n hasUserSelected: true,\n isAllUsersSelected: true,\n selectedUserList: users\n });\n }\n };\n\n getUserList = () => {\n // get admins\n seafileAPI.sysAdminListAdmins().then(res => {\n let users = res.data.admin_user_list.map(user => {\n return new SysAdminAdminUser(user);\n });\n this.setState({\n userList: users,\n loading: false\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n getUsersListByPage = (page) => {\n const { perPage, sortBy, sortOrder } = this.state;\n const { isLDAPImported } = this.props;\n seafileAPI.sysAdminListUsers(page, perPage, isLDAPImported, sortBy, sortOrder).then(res => {\n let users = res.data.data.map(user => {return new SysAdminUser(user);});\n this.setState({\n userList: users,\n loading: false,\n hasNextPage: Utils.hasNextPage(page, perPage, res.data.total_count),\n currentPage: page\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n sortByQuotaUsage = () => {\n this.setState({\n sortBy: 'quota_usage',\n sortOrder: this.state.sortOrder == 'asc' ? 'desc' : 'asc',\n currentPage: 1\n }, () => {\n let url = new URL(location.href);\n let searchParams = new URLSearchParams(url.search);\n const { currentPage, sortBy, sortOrder } = this.state;\n searchParams.set('page', currentPage);\n searchParams.set('order_by', sortBy);\n searchParams.set('direction', sortOrder);\n url.search = searchParams.toString();\n navigate(url.toString());\n this.getUsersListByPage(currentPage);\n });\n };\n\n deleteUser = (email, username) => {\n seafileAPI.sysAdminDeleteUser(email).then(res => {\n let newUserList = this.state.userList.filter(item => {\n return item.email != email;\n });\n this.setState({userList: newUserList});\n let msg = gettext('Deleted user %s');\n msg = msg.replace('%s', username);\n toaster.success(msg);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n setUserQuotaInBatch = (quotaTotal) => {\n let emails = this.state.selectedUserList.map(user => {\n return user.email;\n });\n seafileAPI.sysAdminSetUserQuotaInBatch(emails, quotaTotal).then(res => {\n let userList = this.state.userList.map(item => {\n res.data.success.forEach(resultUser => {\n if (item.email == resultUser.email) {\n item.quota_total = resultUser.quota_total;\n }\n });\n return item;\n });\n this.setState({userList: userList});\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n deleteUserInBatch = () => {\n let emails = this.state.selectedUserList.map(user => {\n return user.email;\n });\n seafileAPI.sysAdminDeleteUserInBatch(emails).then(res => {\n if (res.data.success.length) {\n let oldUserList = this.state.userList;\n let newUserList = oldUserList.filter(oldUser => {\n return !res.data.success.some(deletedUser =>{\n return deletedUser.email == oldUser.email;\n });\n });\n this.setState({\n userList: newUserList,\n hasUserSelected: emails.length != res.data.success.length\n });\n const length = res.data.success.length;\n const msg = length == 1 ?\n gettext('Successfully deleted 1 user.') :\n gettext('Successfully deleted {user_number_placeholder} users.')\n .replace('{user_number_placeholder}', length);\n toaster.success(msg);\n }\n res.data.failed.forEach(item => {\n const msg = `${item.email}: ${item.error_msg}`;\n toaster.danger(msg);\n });\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n importUserInBatch = (file) => {\n toaster.notify(gettext('It may take some time, please wait.'));\n seafileAPI.sysAdminImportUserViaFile(file).then((res) => {\n if (res.data.success.length) {\n const users = res.data.success.map(item => {\n if (item.institution == undefined) {\n item.institution = '';\n }\n return new SysAdminUser(item);\n });\n this.setState({\n userList: users.concat(this.state.userList)\n });\n }\n res.data.failed.forEach(item => {\n const msg = `${item.email}: ${item.error_msg}`;\n toaster.danger(msg);\n });\n }).catch((error) => {\n let errMsg = Utils.getErrorMsg(error);\n toaster.danger(errMsg);\n });\n };\n\n addUser = (data) => {\n toaster.notify(gettext('It may take some time, please wait.'));\n const { email, name, role, password } = data;\n seafileAPI.sysAdminAddUser(email, name, role, password).then((res) => {\n let userList = this.state.userList;\n userList.unshift(res.data);\n this.setState({\n userList: userList\n });\n toaster.success(res.data.add_user_tip);\n }).catch((error) => {\n let errMsg = Utils.getErrorMsg(error);\n toaster.danger(errMsg);\n });\n };\n\n resetPerPage = (perPage) => {\n this.setState({\n perPage: perPage\n }, () => {\n this.getUsersListByPage(1);\n });\n };\n\n updateUser = (email, key, value) => {\n seafileAPI.sysAdminUpdateUser(email, key, value).then(res => {\n let newUserList = this.state.userList.map(item => {\n if (item.email == email) {\n item[key]= res.data[key];\n }\n return item;\n });\n this.setState({userList: newUserList});\n const msg = (key == 'is_active' && value) ?\n res.data.update_status_tip : gettext('Edit succeeded');\n toaster.success(msg);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n updateAdminRole = (email, role) => {\n seafileAPI.sysAdminUpdateAdminRole(email, role).then(res => {\n let newUserList = this.state.userList.map(item => {\n if (item.email == email) {\n item.admin_role = res.data.role;\n }\n return item;\n });\n this.setState({userList: newUserList});\n toaster.success(gettext('Edit succeeded'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n revokeAdmin = (email, name) => {\n seafileAPI.sysAdminUpdateUser(email, 'is_staff', false).then(res => {\n let userList = this.state.userList.filter(item => {\n return item.email != email;\n });\n this.setState({\n userList: userList\n });\n toaster.success(gettext('Successfully revoked the admin permission of {placeholder}.').replace('{placeholder}', name));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n getOperationsForAll = () => {\n const { isAdmin, isLDAPImported } = this.props;\n\n if (isAdmin) {\n return ;\n }\n\n if (isLDAPImported) {\n return {gettext('Export Excel')};\n }\n\n // 'database'\n return (\n \n \n \n {gettext('Export Excel')}\n \n );\n };\n\n getCurrentNavItem = () => {\n const { isAdmin, isLDAPImported } = this.props;\n let item = 'database';\n if (isAdmin) {\n item = 'admin';\n } else if (isLDAPImported) {\n item = 'ldap-imported';\n }\n return item;\n };\n\n toggleBatchAddAdminDialog = () => {\n this.setState({isBatchAddAdminDialogOpen: !this.state.isBatchAddAdminDialogOpen});\n };\n\n addAdminInBatch = (emails) => {\n seafileAPI.sysAdminAddAdminInBatch(emails).then(res => {\n let users = res.data.success.map(user => {\n return new SysAdminAdminUser(user);\n });\n this.setState({\n userList: users.concat(this.state.userList)\n });\n res.data.failed.forEach(item => {\n const msg = `${item.email}: ${item.error_msg}`;\n toaster.danger(msg);\n });\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n getSearch = () => {\n if (this.props.isAdmin) {\n return null;\n }\n // offer 'Search' for 'DB' & 'LDAPImported' users\n return ;\n };\n\n searchItems = (keyword) => {\n navigate(`${siteRoot}sys/search-users/?query=${encodeURIComponent(keyword)}`);\n };\n\n render() {\n const { isAdmin, isLDAPImported } = this.props;\n const {\n hasUserSelected,\n isImportUserDialogOpen,\n isAddUserDialogOpen,\n isBatchDeleteUserDialogOpen,\n isBatchSetQuotaDialogOpen,\n isBatchAddAdminDialogOpen\n } = this.state;\n return (\n \n \n {hasUserSelected ?\n \n \n \n \n : this.getOperationsForAll()\n }\n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n {isImportUserDialogOpen &&\n \n }\n {isAddUserDialogOpen &&\n \n }\n {isBatchSetQuotaDialogOpen &&\n \n }\n {isBatchDeleteUserDialogOpen &&\n \n }\n {isBatchAddAdminDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nUsers.propTypes = propTypes;\n\nexport default Users;\n","import React, { Component } from 'react';\nimport Users from './users';\n\nclass AdminUsers extends Component {\n\n render() {\n return ;\n }\n}\n\nexport default AdminUsers;\n","import React, { Component } from 'react';\nimport Users from './users';\n\nclass LDAPImportedUsers extends Component {\n\n render() {\n return ;\n }\n}\n\nexport default LDAPImportedUsers;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport UsersNav from './users-nav';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n }\n\n getPreviousPage = () => {\n this.props.getListByPage(this.props.currentPage - 1);\n };\n\n getNextPage = () => {\n this.props.getListByPage(this.props.currentPage + 1);\n };\n\n render() {\n const { loading, errorMsg, items, curPerPage, hasNextPage, currentPage } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No users')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('Email')}{gettext('Space Used')}{' / '}{gettext('Quota')}{gettext('Last Login')}
    \n \n
    \n );\n\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n resetPerPage: PropTypes.func,\n getListByPage: PropTypes.func.isRequired,\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n currentPage: PropTypes.number,\n curPerPage: PropTypes.number,\n hasNextPage: PropTypes.bool,\n};\n\nclass Item extends Component {\n render() {\n const { item } = this.props;\n return (\n \n \n \n \n {`${Utils.bytesToSize(item.quota_usage)} / ${item.quota_total > 0 ? Utils.bytesToSize(item.quota_total) : '--'}`}\n \n \n {item.last_login ? moment(item.last_login).fromNow() : '--'}\n \n \n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n};\n\nclass Users extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n userList: {},\n hasNextPage: false,\n currentPage: 1,\n perPage: 25\n };\n }\n\n componentDidMount () {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getUsersListByPage(this.state.currentPage);\n });\n }\n\n getUsersListByPage = (page) => {\n let { perPage } = this.state;\n seafileAPI.sysAdminListLDAPUsers(page, perPage).then(res => {\n this.setState({\n loading: false,\n userList: res.data.ldap_user_list,\n hasNextPage: res.data.has_next_page,\n currentPage: page\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n resetPerPage = (perPage) => {\n this.setState({\n perPage: perPage\n }, () => {\n this.getUsersListByPage(1);\n });\n };\n\n render() {\n return (\n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nUsers.propTypes = {\n email: PropTypes.string,\n};\n\nexport default Users;\n","import React, { Component, Fragment } from 'react';\nimport { Button, Form, FormGroup, Input, Col } from 'reactstrap';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport Paginator from '../../../components/paginator';\nimport toaster from '../../../components/toast';\nimport SysAdminUserSetQuotaDialog from '../../../components/dialog/sysadmin-dialog/set-quota';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Content from './users-content';\n\n\nclass SearchUsers extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n query: '',\n isSubmitBtnActive: false,\n loading: true,\n errorMsg: '',\n userList: [],\n pageInfo: {\n has_next_page: false,\n current_page: 1,\n },\n currentPage: 1,\n perPage: 25,\n hasUserSelected: false,\n selectedUserList: [],\n isAllUsersSelected: false,\n isBatchSetQuotaDialogOpen: false,\n isBatchDeleteUserDialogOpen: false\n };\n }\n\n componentDidMount () {\n let params = (new URL(document.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n query: params.get('query') || '',\n currentPage: parseInt(params.get('page') || currentPage),\n perPage: parseInt(params.get('per_page') || perPage)\n }, () => {this.getItems(this.state.currentPage);});\n }\n\n toggleBatchSetQuotaDialog = () => {\n this.setState({isBatchSetQuotaDialogOpen: !this.state.isBatchSetQuotaDialogOpen});\n };\n\n toggleBatchDeleteUserDialog = () => {\n this.setState({isBatchDeleteUserDialogOpen: !this.state.isBatchDeleteUserDialogOpen});\n };\n\n onUserSelected = (item) => {\n let hasUserSelected = false;\n let selectedUserList = [];\n // traverse all users, toggle its selected status\n let users = this.state.userList.map(user => {\n // toggle status\n if (user.email === item.email) {\n user.isSelected = !user.isSelected;\n }\n // update selectedUserList\n // if current user is now selected, push it to selectedUserList\n // if current user is now not selected, drop it from selectedUserList\n if (user.isSelected == true) {\n hasUserSelected = true;\n selectedUserList.push(user);\n } else {\n selectedUserList = selectedUserList.filter(thisuser => {\n return thisuser.email != user.email;\n });\n }\n return user;\n });\n // finally update state\n this.setState({\n userList: users,\n hasUserSelected: hasUserSelected,\n selectedUserList: selectedUserList,\n });\n };\n\n toggleSelectAllUsers = () => {\n if (this.state.isAllUsersSelected) {\n // if previous state is allSelected, toggle to not select\n let users = this.state.userList.map(user => {\n user.isSelected = false;\n return user;\n });\n this.setState({\n userList: users,\n hasUserSelected: false,\n isAllUsersSelected: false,\n selectedUserList: [],\n });\n } else {\n // if previous state is not allSelected, toggle to selectAll\n let users = this.state.userList.map(user => {\n user.isSelected = true;\n return user;\n });\n this.setState({\n userList: users,\n hasUserSelected: true,\n isAllUsersSelected: true,\n selectedUserList: users\n });\n }\n };\n\n getItems = (page) => {\n seafileAPI.sysAdminSearchUsers(this.state.query.trim(), page, this.state.perPage).then(res => {\n this.setState({\n userList: res.data.user_list,\n loading: false,\n pageInfo: res.data.page_info\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n resetPerPage = (perPage) => {\n this.setState({\n perPage: perPage\n }, () => {\n this.getItems(1);\n });\n };\n\n deleteUser = (email, username) => {\n seafileAPI.sysAdminDeleteUser(email).then(res => {\n let newUserList = this.state.userList.filter(item => {\n return item.email != email;\n });\n this.setState({userList: newUserList});\n let msg = gettext('Deleted user %s');\n msg = msg.replace('%s', username);\n toaster.success(msg);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n setUserQuotaInBatch = (quotaTotal) => {\n let emails = this.state.selectedUserList.map(user => {\n return user.email;\n });\n seafileAPI.sysAdminSetUserQuotaInBatch(emails, quotaTotal).then(res => {\n let userList = this.state.userList.map(item => {\n res.data.success.forEach(resultUser => {\n if (item.email == resultUser.email) {\n item.quota_total = resultUser.quota_total;\n }\n });\n return item;\n });\n this.setState({userList: userList});\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n deleteUserInBatch = () => {\n let emails = this.state.selectedUserList.map(user => {\n return user.email;\n });\n seafileAPI.sysAdminDeleteUserInBatch(emails).then(res => {\n if (res.data.success.length) {\n let oldUserList = this.state.userList;\n let newUserList = oldUserList.filter(oldUser => {\n return !res.data.success.some(deletedUser =>{\n return deletedUser.email == oldUser.email;\n });\n });\n this.setState({\n userList: newUserList,\n hasUserSelected: emails.length != res.data.success.length\n });\n const length = res.data.success.length;\n const msg = length == 1 ?\n gettext('Successfully deleted 1 user.') :\n gettext('Successfully deleted {user_number_placeholder} users.')\n .replace('{user_number_placeholder}', length);\n toaster.success(msg);\n }\n res.data.failed.forEach(item => {\n const msg = `${item.email}: ${item.error_msg}`;\n toaster.danger(msg);\n });\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n updateUser = (email, key, value) => {\n seafileAPI.sysAdminUpdateUser(email, key, value).then(res => {\n let newUserList = this.state.userList.map(item => {\n if (item.email == email) {\n item[key]= res.data[key];\n }\n return item;\n });\n this.setState({userList: newUserList});\n const msg = (key == 'is_active' && value) ?\n res.data.update_status_tip : gettext('Edit succeeded');\n toaster.success(msg);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n updateAdminRole = (email, role) => {\n seafileAPI.sysAdminUpdateAdminRole(email, role).then(res => {\n let newUserList = this.state.userList.map(item => {\n if (item.email == email) {\n item.admin_role = res.data.role;\n }\n return item;\n });\n this.setState({userList: newUserList});\n toaster.success(gettext('Edit succeeded'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n revokeAdmin = (email, name) => {\n seafileAPI.sysAdminUpdateUser(email, 'is_staff', false).then(res => {\n let userList = this.state.userList.filter(item => {\n return item.email != email;\n });\n this.setState({\n userList: userList\n });\n toaster.success(gettext('Successfully revoked the admin permission of {placeholder}.').replace('{placeholder}', name));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n handleInputChange = (e) => {\n this.setState({\n query: e.target.value\n }, this.checkSubmitBtnActive);\n };\n\n checkSubmitBtnActive = () => {\n const { query } = this.state;\n this.setState({\n isSubmitBtnActive: query.trim()\n });\n };\n\n getPreviousPageList = () => {\n this.getItems(this.state.pageInfo.current_page - 1);\n };\n\n getNextPageList = () => {\n this.getItems(this.state.pageInfo.current_page + 1);\n };\n\n handleKeyDown = (e) => {\n if (e.keyCode === 13) {\n const { isSubmitBtnActive } = this.state;\n if (isSubmitBtnActive) {\n this.getItems();\n }\n }\n };\n\n render() {\n const { query, isSubmitBtnActive } = this.state;\n const {\n hasUserSelected,\n isBatchDeleteUserDialogOpen,\n isBatchSetQuotaDialogOpen\n } = this.state;\n return (\n \n {hasUserSelected ?\n \n \n \n \n \n :\n \n }\n
    \n
    \n
    \n

    {gettext('Users')}

    \n
    \n
    \n
    \n

    {gettext('Search Users')}

    \n
    \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n

    {gettext('Result')}

    \n \n
    \n
    \n
    \n
    \n {isBatchSetQuotaDialogOpen &&\n \n }\n {isBatchDeleteUserDialogOpen &&\n \n }\n {this.state.pageInfo &&\n \n }\n
    \n );\n }\n}\n\nexport default SearchUsers;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button, Form, FormGroup, Input, InputGroup, InputGroupAddon, InputGroupText } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\n\nconst propTypes = {\n uploadOrDownload: PropTypes.string.isRequired,\n toggle: PropTypes.func.isRequired,\n updateUploadDownloadRateLimit: PropTypes.func.isRequired\n};\n\nclass SysAdminSetUploadDownloadRateLimitDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n rateLimit: '',\n isSubmitBtnActive: false\n };\n }\n\n toggle = () => {\n this.props.toggle();\n };\n\n handleRateLimitChange = (e) => {\n const value = e.target.value;\n this.setState({\n rateLimit: value,\n isSubmitBtnActive: value.trim() != ''\n });\n };\n\n handleKeyDown = (e) => {\n if (e.key == 'Enter') {\n this.handleSubmit();\n e.preventDefault();\n }\n };\n\n handleSubmit = () => {\n this.props.updateUploadDownloadRateLimit(this.props.uploadOrDownload, this.state.rateLimit.trim());\n this.toggle();\n };\n\n render() {\n const { rateLimit, isSubmitBtnActive } = this.state;\n return (\n \n {this.props.uploadOrDownload == 'upload' ? gettext('Set Upload Rate Limit') : gettext('Set Download Rate Limit')}\n \n
    \n \n \n \n \n kB/s\n \n \n

    \n {gettext('An integer that is greater than or equal to 0.')}\n
    \n {gettext('Tip: 0 means default limit')}\n

    \n
    \n
    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nSysAdminSetUploadDownloadRateLimitDialog.propTypes = propTypes;\n\nexport default SysAdminSetUploadDownloadRateLimitDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button, Form, FormGroup, Input } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\n\nconst propTypes = {\n value: PropTypes.string.isRequired,\n dialogTitle: PropTypes.string.isRequired,\n updateValue: PropTypes.func.isRequired,\n toggleDialog: PropTypes.func.isRequired\n};\n\nclass UpdateUser extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n value: this.props.value,\n isSubmitBtnActive: false\n };\n }\n\n handleInputChange = (e) => {\n const value = e.target.value;\n this.setState({\n value: value\n });\n };\n\n handleKeyDown = (e) => {\n if (e.key == 'Enter') {\n this.handleSubmit();\n e.preventDefault();\n }\n };\n\n handleSubmit = () => {\n this.props.updateValue(this.state.value.trim());\n this.props.toggleDialog();\n };\n\n render() {\n const { toggleDialog } = this.props;\n return (\n \n {this.props.dialogTitle}\n \n
    \n \n \n \n
    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nUpdateUser.propTypes = propTypes;\n\nexport default UpdateUser;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { siteRoot, gettext } from '../../../utils/constants';\n\nconst propTypes = {\n email: PropTypes.string,\n userName: PropTypes.string.isRequired,\n currentItem: PropTypes.string.isRequired\n};\n\nclass Nav extends React.Component {\n\n constructor(props) {\n super(props);\n this.navItems = [\n {name: 'info', urlPart: '', text: gettext('Info')},\n {name: 'owned-repos', urlPart: 'owned-libraries', text: gettext('Owned Libraries')},\n {name: 'shared-repos', urlPart: 'shared-libraries', text: gettext('Shared Libraries')},\n {name: 'links', urlPart: 'shared-links', text: gettext('Shared Links')},\n {name: 'groups', urlPart: 'groups', text: gettext('Groups')}\n ];\n }\n\n render() {\n const { currentItem, email, userName } = this.props;\n return (\n
    \n
    \n

    {gettext('Users')} / {userName}

    \n
    \n
      \n {this.navItems.map((item, index) => {\n return (\n
    • \n {item.text}\n
    • \n );\n })}\n
    \n
    \n );\n }\n}\n\nNav.propTypes = propTypes;\n\nexport default Nav;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { FormGroup, Label, Input, Button } from 'reactstrap';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext, isPro } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport Loading from '../../../components/loading';\nimport SysAdminSetQuotaDialog from '../../../components/dialog/sysadmin-dialog/set-quota';\nimport SysAdminSetUploadDownloadRateLimitDialog from '../../../components/dialog/sysadmin-dialog/set-upload-download-rate-limit';\nimport SysAdminUpdateUserDialog from '../../../components/dialog/sysadmin-dialog/update-user';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Nav from './user-nav';\n\nconst { twoFactorAuthEnabled } = window.sysadmin.pageOptions;\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n currentKey: '',\n dialogTitle: '',\n isSetQuotaDialogOpen: false,\n isSetUserUploadRateLimitDialogOpen: false,\n isSetUserDownloadRateLimitDialogOpen: false,\n isUpdateUserDialogOpen: false\n };\n }\n\n toggleSetQuotaDialog = () => {\n this.setState({isSetQuotaDialogOpen: !this.state.isSetQuotaDialogOpen});\n };\n\n toggleSetUserUploadRateLimitDialog = () => {\n this.setState({isSetUserUploadRateLimitDialogOpen: !this.state.isSetUserUploadRateLimitDialogOpen});\n };\n\n toggleSetUserDownloadRateLimitDialog = () => {\n this.setState({isSetUserDownloadRateLimitDialogOpen: !this.state.isSetUserDownloadRateLimitDialogOpen});\n };\n\n updateQuota = (value) => {\n this.props.updateUser('quota_total', value);\n };\n\n updateUploadDownloadRateLimit = (uploadOrDownload, value) => {\n if (uploadOrDownload == 'upload'){\n this.props.updateUser('upload_rate_limit', value);\n }\n if (uploadOrDownload == 'download'){\n this.props.updateUser('download_rate_limit', value);\n }\n };\n\n toggleDialog = (key, dialogTitle) => {\n this.setState({\n currentKey: key,\n dialogTitle: dialogTitle,\n isUpdateUserDialogOpen: !this.state.isUpdateUserDialogOpen\n });\n };\n\n toggleSetNameDialog = () => {\n this.toggleDialog('name', gettext('Set Name'));\n };\n\n toggleSetUserLoginIDDialog = () => {\n this.toggleDialog('login_id', gettext('Set Login ID'));\n };\n\n toggleSetUserComtactEmailDialog = () => {\n this.toggleDialog('contact_email', gettext('Set Contact Email'));\n };\n\n toggleSetUserReferenceIDDialog = () => {\n this.toggleDialog('reference_id', gettext('Set Reference ID'));\n };\n\n updateValue = (value) => {\n this.props.updateUser(this.state.currentKey, value);\n };\n\n toggleUpdateUserDialog = () => {\n this.toggleDialog('', '');\n };\n\n showEditIcon = (action) => {\n return (\n \n \n );\n };\n\n render() {\n const { loading, errorMsg } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const user = this.props.userInfo;\n const {\n currentKey, dialogTitle,\n isSetQuotaDialogOpen, isUpdateUserDialogOpen,\n isSetUserUploadRateLimitDialogOpen, isSetUserDownloadRateLimitDialogOpen\n } = this.state;\n return (\n \n
    \n
    {gettext('Avatar')}
    \n
    \n {user.name}\n
    \n\n
    {gettext('Email')}
    \n
    {user.email}
    \n\n {user.org_name &&\n \n
    {gettext('Organization')}
    \n
    {user.org_name}
    \n
    \n }\n\n
    {gettext('Name')}
    \n
    \n {user.name || '--'}\n {this.showEditIcon(this.toggleSetNameDialog)}\n
    \n\n
    {gettext('Login ID')}
    \n
    \n {user.login_id || '--'}\n {this.showEditIcon(this.toggleSetUserLoginIDDialog)}\n
    \n\n
    {gettext('Contact Email')}
    \n
    \n {user.contact_email || '--'}\n {this.showEditIcon(this.toggleSetUserComtactEmailDialog)}\n
    \n\n
    {gettext('Reference ID')}
    \n
    \n {user.reference_id|| '--'}\n {this.showEditIcon(this.toggleSetUserReferenceIDDialog)}\n
    \n\n
    {gettext('Space Used / Quota')}
    \n
    \n {`${Utils.bytesToSize(user.quota_usage)} / ${user.quota_total > 0 ? Utils.bytesToSize(user.quota_total) : '--'}`}\n {this.showEditIcon(this.toggleSetQuotaDialog)}\n
    \n {isPro &&\n \n
    {gettext('Upload Rate Limit')}
    \n
    \n {user.upload_rate_limit > 0 ? user.upload_rate_limit + ' kB/s' : '--'}\n {this.showEditIcon(this.toggleSetUserUploadRateLimitDialog)}\n
    \n
    {gettext('Download Rate Limit')}
    \n
    \n {user.download_rate_limit > 0 ? user.download_rate_limit + ' kB/s' : '--'}\n {this.showEditIcon(this.toggleSetUserDownloadRateLimitDialog)}\n
    \n
    \n }\n {twoFactorAuthEnabled &&\n \n
    {gettext('Two-Factor Authentication')}
    \n
    \n {user.has_default_device ?\n \n

    {gettext('Status: enabled')}

    \n \n
    :\n \n \n \n }\n \n \n \n
    \n
    \n }\n
    \n {isSetQuotaDialogOpen &&\n \n }\n {(isPro && isSetUserUploadRateLimitDialogOpen) &&\n \n }\n {(isPro && isSetUserDownloadRateLimitDialogOpen) &&\n \n }\n {isUpdateUserDialogOpen &&\n \n }\n
    \n );\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n deleteItem: PropTypes.func,\n updateUser: PropTypes.func.isRequired,\n userInfo: PropTypes.object.isRequired,\n disable2FA: PropTypes.func.isRequired,\n toggleForce2fa: PropTypes.func.isRequired,\n email: PropTypes.string,\n};\n\nclass User extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n userInfo: {}\n };\n }\n\n componentDidMount () {\n // avatar size: 160\n const email = decodeURIComponent(this.props.email);\n seafileAPI.sysAdminGetUser(email, 160).then((res) => {\n this.setState({\n loading: false,\n userInfo: res.data\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n updateUser = (key, value) => {\n const email = this.state.userInfo.email;\n seafileAPI.sysAdminUpdateUser(email, key, value).then(res => {\n let userInfo = this.state.userInfo;\n userInfo[key]= res.data[key];\n this.setState({\n userInfo: userInfo\n });\n toaster.success(gettext('Edit succeeded'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n disable2FA = () => {\n const email = this.state.userInfo.email;\n seafileAPI.sysAdminDeleteTwoFactorAuth(email).then(res => {\n let userInfo = this.state.userInfo;\n userInfo.has_default_device = false;\n this.setState({\n userInfo: userInfo\n });\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n toggleForce2fa = (e) => {\n const email = this.state.userInfo.email;\n const checked = e.target.checked;\n seafileAPI.sysAdminSetForceTwoFactorAuth(email, checked).then(res => {\n let userInfo = this.state.userInfo;\n userInfo.is_force_2fa = checked;\n this.setState({\n userInfo: userInfo\n });\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const { userInfo } = this.state;\n return (\n \n \n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nUser.propTypes = {\n email: PropTypes.string,\n};\n\nexport default User;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport moment from 'moment';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { isPro, siteRoot, gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport TransferDialog from '../../../components/dialog/transfer-dialog';\nimport OpMenu from '../../../components/dialog/op-menu';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Nav from './user-nav';\n\nconst { enableSysAdminViewRepo } = window.sysadmin.pageOptions;\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n render() {\n const { loading, errorMsg, items } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No libraries')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('Name')}{gettext('Size')}{gettext('Last Update')}{/* Operations */}
    \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n items: PropTypes.array.isRequired,\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n deleteRepo: PropTypes.func.isRequired,\n transferRepo: PropTypes.func.isRequired,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n highlight: false,\n isDeleteDialogOpen: false,\n isTransferDialogOpen: false\n };\n }\n\n handleMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false\n });\n this.props.onUnfreezedItem();\n };\n\n toggleDeleteDialog = () => {\n this.setState({isDeleteDialogOpen: !this.state.isDeleteDialogOpen});\n };\n\n deleteRepo = () => {\n this.props.deleteRepo(this.props.item.id);\n };\n\n toggleTransferDialog = () => {\n this.setState({isTransferDialogOpen: !this.state.isTransferDialogOpen});\n };\n\n transferRepo = (owner) => {\n this.props.transferRepo(this.props.item.id, owner.email);\n this.toggleTransferDialog();\n };\n\n renderRepoName = () => {\n const { item } = this.props;\n const repo = item;\n if (repo.name) {\n if (isPro && enableSysAdminViewRepo && !repo.encrypted) {\n return {repo.name};\n } else {\n return repo.name;\n }\n } else {\n return gettext('Broken ({repo_id_placeholder})')\n .replace('{repo_id_placeholder}', repo.id);\n }\n };\n\n translateOperations = (item) => {\n let translateResult = '';\n switch (item) {\n case 'Delete':\n translateResult = gettext('Delete');\n break;\n case 'Transfer':\n translateResult = gettext('Transfer');\n break;\n }\n\n return translateResult;\n };\n\n onMenuItemClick = (operation) => {\n switch(operation) {\n case 'Delete':\n this.toggleDeleteDialog();\n break;\n case 'Transfer':\n this.toggleTransferDialog();\n break;\n }\n };\n\n render() {\n const { item } = this.props;\n const { isOpIconShown, isDeleteDialogOpen, isTransferDialogOpen } = this.state;\n\n const iconUrl = Utils.getLibIconUrl(item);\n const iconTitle = Utils.getLibIconTitle(item);\n\n const itemName = '' + Utils.HTMLescape(item.name) + '';\n const deleteDialogMsg = gettext('Are you sure you want to delete {placeholder} ?').replace('{placeholder}', itemName);\n\n return (\n \n \n {iconTitle}\n {this.renderRepoName()}\n {Utils.bytesToSize(item.size)}\n {moment(item.last_modified).fromNow()}\n \n {isOpIconShown &&\n \n }\n \n \n {isDeleteDialogOpen &&\n \n }\n {isTransferDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n deleteRepo: PropTypes.func.isRequired,\n transferRepo: PropTypes.func.isRequired,\n};\n\nclass Repos extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n userInfo: {},\n repoList: []\n };\n }\n\n componentDidMount () {\n const email = decodeURIComponent(this.props.email);\n seafileAPI.sysAdminGetUser(email).then((res) => {\n this.setState({\n userInfo: res.data\n });\n });\n seafileAPI.sysAdminListReposByOwner(email).then(res => {\n this.setState({\n loading: false,\n repoList: res.data.repos\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n deleteRepo = (repoID) => {\n seafileAPI.sysAdminDeleteRepo(repoID).then(res => {\n let newRepoList = this.state.repoList.filter(item => {\n return item.id != repoID;\n });\n this.setState({repoList: newRepoList});\n toaster.success(gettext('Successfully deleted 1 item.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n transferRepo = (repoID, email) => {\n seafileAPI.sysAdminTransferRepo(repoID, email).then((res) => {\n let newRepoList = this.state.repoList.filter(item => {\n return item.id != repoID;\n });\n this.setState({repoList: newRepoList});\n let message = gettext('Successfully transferred the library.');\n toaster.success(message);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n return (\n \n \n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nRepos.propTypes = {\n email: PropTypes.string,\n};\n\nexport default Repos;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport moment from 'moment';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { isPro, siteRoot, gettext } from '../../../utils/constants';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\nimport Nav from './user-nav';\n\nconst { enableSysAdminViewRepo } = window.sysadmin.pageOptions;\n\nclass Content extends Component {\n render() {\n const { loading, errorMsg, items } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No libraries')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('Name')}{gettext('Share From')}{gettext('Size')}{gettext('Last Update')}
    \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n};\n\nclass Item extends Component {\n\n renderRepoName = () => {\n const { item } = this.props;\n const repo = item;\n if (repo.name) {\n if (isPro && enableSysAdminViewRepo && !repo.encrypted) {\n return {repo.name};\n } else {\n return repo.name;\n }\n } else {\n return gettext('Broken ({repo_id_placeholder})')\n .replace('{repo_id_placeholder}', repo.id);\n }\n };\n\n getOwnerLink = () => {\n let link;\n const { item } = this.props;\n const index = item.owner_email.indexOf('@seafile_group');\n if (index == -1) {\n link = ;\n } else {\n const groupID = item.owner_email.substring(0, index);\n link = {item.owner_name};\n }\n return link;\n };\n\n render() {\n const { item } = this.props;\n const iconUrl = Utils.getLibIconUrl(item);\n const iconTitle = Utils.getLibIconTitle(item);\n return (\n \n \n {iconTitle}\n {this.renderRepoName()}\n {this.getOwnerLink()}\n {Utils.bytesToSize(item.size)}\n {moment(item.last_modify).fromNow()}\n \n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n};\n\nclass Repos extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n userInfo: {},\n repoList: []\n };\n }\n\n componentDidMount () {\n const email = decodeURIComponent(this.props.email);\n seafileAPI.sysAdminGetUser(email).then((res) => {\n this.setState({\n userInfo: res.data\n });\n });\n seafileAPI.sysAdminListShareInRepos(email).then(res => {\n this.setState({\n loading: false,\n repoList: res.data.repo_list\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n render() {\n return (\n \n \n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nRepos.propTypes = {\n email: PropTypes.string,\n};\n\nexport default Repos;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport OpMenu from '../../../components/dialog/op-menu';\nimport LinkDialog from '../../../components/dialog/share-admin-link';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Nav from './user-nav';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n render() {\n const { loading, errorMsg, items } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No shared links')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {/* icon */}{gettext('Name')}{gettext('Size')}{gettext('Type')}{gettext('Visits')}{/* Operations */}
    \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n deleteItem: PropTypes.func,\n email: PropTypes.string,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n highlight: false,\n isLinkDialogOpen: false\n };\n }\n\n handleMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false\n });\n this.props.onUnfreezedItem();\n };\n\n toggleLinkDialog = () => {\n this.setState({isLinkDialogOpen: !this.state.isLinkDialogOpen});\n };\n\n deleteItem = () => {\n this.props.deleteItem(this.props.item);\n };\n\n translateOperations = (item) => {\n let translateResult = '';\n switch (item) {\n case 'View':\n translateResult = gettext('View');\n break;\n case 'Delete':\n translateResult = gettext('Delete');\n break;\n }\n\n return translateResult;\n };\n\n onMenuItemClick = (operation) => {\n switch(operation) {\n case 'View':\n this.toggleLinkDialog();\n break;\n case 'Delete':\n this.deleteItem();\n break;\n }\n };\n\n getRoleText = () => {\n let roleText;\n const { item } = this.props;\n switch(item.role) {\n case 'Owner':\n roleText = gettext('Owner');\n break;\n case 'Admin':\n roleText = gettext('Admin');\n break;\n case 'Member':\n roleText = gettext('Member');\n break;\n }\n return roleText;\n };\n\n getIconUrl = () => {\n const { item } = this.props;\n let url;\n if (item.type == 'upload') {\n url = Utils.getFolderIconUrl();\n } else { // share link\n if (item.is_dir) {\n url = Utils.getFolderIconUrl();\n } else {\n url = Utils.getFileIconUrl(item.obj_name);\n }\n }\n return url;\n };\n\n render() {\n const { item } = this.props;\n const { isOpIconShown, isLinkDialogOpen } = this.state;\n\n return (\n \n \n \"\"\n {item.obj_name == '/' ? item.repo_name : item.obj_name}\n {item.type == 'upload' ?\n \n \n {gettext('Upload')}\n :\n \n {item.is_dir ? null : Utils.bytesToSize(item.size)}\n {gettext('Download')}\n \n }\n {item.view_cnt}\n \n {isOpIconShown &&\n \n }\n \n \n {isLinkDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n deleteItem: PropTypes.func,\n email: PropTypes.string,\n};\n\nclass Links extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n userInfo: {},\n uploadLinkItems: [],\n shareLinkItems: []\n };\n }\n\n componentDidMount () {\n const email = decodeURIComponent(this.props.email);\n seafileAPI.sysAdminGetUser(email).then((res) => {\n this.setState({\n userInfo: res.data\n });\n });\n\n seafileAPI.sysAdminListShareLinksByUser(email).then(res => {\n const items = res.data.share_link_list.map(item => {\n item.type = 'download';\n return item;\n });\n items.sort((a, b) => {\n return a.is_dir ? -1 : 1;\n });\n this.setState({\n loading: false,\n shareLinkItems: items\n });\n });\n seafileAPI.sysAdminListUploadLinksByUser(email).then(res => {\n const items = res.data.upload_link_list.map(item => {\n item.type = 'upload';\n return item;\n });\n this.setState({\n loading: false,\n uploadLinkItems: items\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n deleteItem = (item) => {\n const type = item.type;\n const token = item.token;\n if (type == 'download') {\n seafileAPI.sysAdminDeleteShareLink(token).then(res => {\n let items = this.state.shareLinkItems.filter(item=> {\n return item.token != token;\n });\n this.setState({\n shareLinkItems: items\n });\n toaster.success(gettext('Successfully deleted 1 item.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n } else {\n seafileAPI.sysAdminDeleteUploadLink(token).then(res => {\n let items = this.state.uploadLinkItems.filter(item=> {\n return item.token != token;\n });\n this.setState({\n uploadLinkItems: items\n });\n toaster.success(gettext('Successfully deleted 1 item.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n };\n\n render() {\n const { shareLinkItems, uploadLinkItems } = this.state;\n return (\n \n \n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nLinks.propTypes = {\n email: PropTypes.string,\n};\n\nexport default Links;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport moment from 'moment';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { siteRoot, gettext } from '../../../utils/constants';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Nav from './user-nav';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n render() {\n const { loading, errorMsg, items } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No groups')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('Name')}{gettext('Role')}{gettext('Created At')}
    \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n deleteItem: PropTypes.func,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n highlight: false,\n };\n }\n\n handleMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false\n });\n this.props.onUnfreezedItem();\n };\n\n getRoleText = () => {\n let roleText;\n const { item } = this.props;\n switch(item.role) {\n case 'Owner':\n roleText = gettext('Owner');\n break;\n case 'Admin':\n roleText = gettext('Admin');\n break;\n case 'Member':\n roleText = gettext('Member');\n break;\n }\n return roleText;\n };\n\n render() {\n const { item } = this.props;\n const url = item.parent_group_id == 0 ?\n `${siteRoot}sys/groups/${item.id}/libraries/` :\n `${siteRoot}sys/departments/${item.id}/`;\n return (\n \n \n {item.name}\n {this.getRoleText()}\n {moment(item.created_at).format('YYYY-MM-DD HH:mm')}\n \n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n deleteItem: PropTypes.func,\n};\n\nclass Groups extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n userInfo: {},\n items: []\n };\n }\n\n componentDidMount () {\n const email = decodeURIComponent(this.props.email);\n seafileAPI.sysAdminGetUser(email).then((res) => {\n this.setState({\n userInfo: res.data\n });\n });\n seafileAPI.sysAdminListGroupsJoinedByUser(email).then(res => {\n this.setState({\n loading: false,\n items: res.data.group_list\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n render() {\n return (\n \n \n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nGroups.propTypes = {\n email: PropTypes.string,\n};\n\nexport default Groups;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, Input, ModalBody, ModalFooter, Form, FormGroup, Label, Alert } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport UserSelect from '../../user-select';\n\n\nconst propTypes = {\n createRepo: PropTypes.func.isRequired,\n toggleDialog: PropTypes.func.isRequired,\n};\n\nclass SysAdminCreateRepoDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n repoName: '',\n ownerEmail: '',\n errMessage: '',\n isSubmitBtnActive: false\n };\n }\n\n handleRepoNameChange = (e) => {\n const value = e.target.value;\n this.setState({\n repoName: value,\n isSubmitBtnActive: value.trim()\n });\n };\n\n handleSubmit = () => {\n const { repoName, ownerEmail } = this.state;\n this.props.createRepo(repoName.trim(), ownerEmail);\n this.toggle();\n };\n\n handleSelectChange = (option) => {\n // option can be null\n this.setState({\n ownerEmail: option ? option.email : ''\n });\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.handleSubmit();\n e.preventDefault();\n }\n };\n\n toggle = () => {\n this.props.toggleDialog();\n };\n\n render() {\n return (\n \n {gettext('New Library')}\n \n
    \n \n \n \n \n \n \n \n \n
    \n {this.state.errMessage && {this.state.errMessage}}\n
    \n \n \n \n \n
    \n );\n }\n}\n\nSysAdminCreateRepoDialog.propTypes = propTypes;\n\nexport default SysAdminCreateRepoDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { siteRoot, gettext } from '../../../utils/constants';\n\nconst propTypes = {\n currentItem: PropTypes.string.isRequired\n};\n\nclass Nav extends React.Component {\n\n constructor(props) {\n super(props);\n this.navItems = [\n {name: 'all', urlPart: 'all-libraries', text: gettext('All')},\n {name: 'system', urlPart: 'system-library', text: gettext('System')},\n {name: 'trash', urlPart: 'trash-libraries', text: gettext('Trash')}\n ];\n }\n\n render() {\n const { currentItem } = this.props;\n return (\n
    \n
      \n {this.navItems.map((item, index) => {\n return (\n
    • \n {item.text}\n
    • \n );\n })}\n
    \n
    \n );\n }\n}\n\nNav.propTypes = propTypes;\n\nexport default Nav;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { isPro, gettext } from '../../../utils/constants';\nimport { Button } from 'reactstrap';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../toast';\nimport UserSelect from '../../user-select';\nimport SharePermissionEditor from '../../select-editor/share-permission-editor';\n\nclass UserItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOperationShow: false\n };\n }\n\n onMouseEnter = () => {\n this.setState({isOperationShow: true});\n };\n\n onMouseLeave = () => {\n this.setState({isOperationShow: false});\n };\n\n deleteShareItem = () => {\n let item = this.props.item;\n this.props.deleteShareItem(item.user_email);\n };\n\n onChangeUserPermission = (permission) => {\n let item = this.props.item;\n this.props.onChangeUserPermission(item, permission);\n };\n\n render() {\n let item = this.props.item;\n let currentPermission = Utils.getSharedPermission(item);\n return (\n \n {item.user_name}\n \n \n \n \n \n \n \n \n );\n }\n}\n\nUserItem.propTypes = {\n item: PropTypes.object.isRequired,\n permissions: PropTypes.array.isRequired,\n deleteShareItem: PropTypes.func.isRequired,\n onChangeUserPermission: PropTypes.func.isRequired,\n};\n\nclass UserList extends React.Component {\n\n render() {\n let items = this.props.items;\n return (\n \n {items.map((item, index) => {\n return (\n \n );\n })}\n \n );\n }\n}\n\nUserList.propTypes = {\n items: PropTypes.array.isRequired,\n permissions: PropTypes.array.isRequired,\n deleteShareItem: PropTypes.func.isRequired,\n onChangeUserPermission: PropTypes.func.isRequired,\n};\n\nconst propTypes = {\n isGroupOwnedRepo: PropTypes.bool,\n itemPath: PropTypes.string.isRequired,\n itemType: PropTypes.string.isRequired,\n repoID: PropTypes.string.isRequired\n};\n\nclass SysAdminShareToUser extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selectedOption: null,\n errorMsg: [],\n permission: 'rw',\n sharedItems: []\n };\n this.options = [];\n this.permissions = ['rw', 'r'];\n if (isPro) {\n this.permissions.push('admin', 'cloud-edit', 'preview');\n }\n }\n\n handleSelectChange = (option) => {\n this.setState({selectedOption: option});\n this.options = [];\n };\n\n componentDidMount() {\n let repoID = this.props.repoID;\n seafileAPI.sysAdminListRepoSharedItems(repoID, 'user').then((res) => {\n if(res.data.length !== 0) {\n this.setState({sharedItems: res.data});\n }\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n\n setPermission = (permission) => {\n this.setState({permission: permission});\n };\n\n shareToUser = () => {\n let users = [];\n let repoID = this.props.repoID;\n if (this.state.selectedOption && this.state.selectedOption.length > 0 ) {\n for (let i = 0; i < this.state.selectedOption.length; i ++) {\n users[i] = this.state.selectedOption[i].email;\n }\n }\n seafileAPI.sysAdminAddRepoSharedItem(repoID, 'user' , users, this.state.permission).then(res => {\n let errorMsg = [];\n if (res.data.failed.length > 0) {\n for (let i = 0 ; i < res.data.failed.length ; i++) {\n errorMsg[i] = res.data.failed[i];\n }\n }\n let newItems = res.data.success;\n this.setState({\n errorMsg: errorMsg,\n sharedItems: this.state.sharedItems.concat(newItems),\n selectedOption: null,\n permission: 'rw',\n });\n this.refs.userSelect.clearSelect();\n }).catch(error => {\n if (error.response) {\n let message = gettext('Library can not be shared to owner.');\n let errMessage = [];\n errMessage.push(message);\n this.setState({\n errorMsg: errMessage,\n selectedOption: null,\n });\n }\n });\n };\n\n deleteShareItem = (useremail) => {\n let repoID = this.props.repoID;\n seafileAPI.sysAdminDeleteRepoSharedItem(repoID, 'user', useremail).then(res => {\n this.setState({\n sharedItems: this.state.sharedItems.filter( item => { return item.user_email !== useremail; })\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onChangeUserPermission = (item, permission) => {\n let repoID = this.props.repoID;\n let userEmail = item.user_email;\n seafileAPI.sysAdminUpdateRepoSharedItemPermission(repoID, 'user', userEmail, permission).then(() => {\n this.updateSharedItems(item, permission);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n updateSharedItems = (item, permission) => {\n let username = item.user_name;\n let sharedItems = this.state.sharedItems.map(sharedItem => {\n let sharedItemUsername = sharedItem.user_name;\n if (username === sharedItemUsername) {\n sharedItem.permission = permission;\n sharedItem.is_admin = permission === 'admin' ? true : false;\n }\n return sharedItem;\n });\n this.setState({sharedItems: sharedItems});\n };\n\n render() {\n let { sharedItems } = this.state;\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {this.state.errorMsg.length > 0 &&\n this.state.errorMsg.map((item, index) => {\n let errMessage = '';\n if (item.email) {\n errMessage = item.email + ': ' + item.error_msg;\n } else {\n errMessage = item;\n }\n return (\n \n \n \n );\n })\n }\n \n
    {gettext('User')}{gettext('Permission')}
    \n \n \n \n \n \n

    {errMessage}

    \n
    \n \n \n \n \n \n \n \n \n \n
    {gettext('User')}{gettext('Permission')}
    \n
    \n
    \n );\n }\n}\n\nSysAdminShareToUser.propTypes = propTypes;\n\nexport default SysAdminShareToUser;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'reactstrap';\nimport { isPro, gettext } from '../../../utils/constants';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../toast';\nimport SharePermissionEditor from '../../select-editor/share-permission-editor';\nimport { SeahubSelect, NoGroupMessage } from '../../common/select';\n\nclass GroupItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOperationShow: false\n };\n }\n\n onMouseEnter = () => {\n this.setState({isOperationShow: true});\n };\n\n onMouseLeave = () => {\n this.setState({isOperationShow: false});\n };\n\n deleteShareItem = () => {\n let item = this.props.item;\n this.props.deleteShareItem(item.group_id);\n };\n\n onChangeUserPermission = (permission) => {\n let item = this.props.item;\n this.props.onChangeUserPermission(item, permission);\n };\n\n render() {\n let item = this.props.item;\n let currentPermission = Utils.getSharedPermission(item);\n return (\n \n {item.group_name}\n \n \n \n \n \n \n \n \n );\n }\n}\n\nGroupItem.propTypes = {\n item: PropTypes.object.isRequired,\n permissions: PropTypes.array.isRequired,\n deleteShareItem: PropTypes.func.isRequired,\n onChangeUserPermission: PropTypes.func.isRequired,\n};\n\nclass GroupList extends React.Component {\n\n render() {\n let items = this.props.items;\n return (\n \n {items.map((item, index) => {\n return (\n \n );\n })}\n \n );\n }\n}\n\nGroupList.propTypes = {\n items: PropTypes.array.isRequired,\n permissions: PropTypes.array.isRequired,\n deleteShareItem: PropTypes.func.isRequired,\n onChangeUserPermission: PropTypes.func.isRequired,\n};\n\nconst propTypes = {\n isGroupOwnedRepo: PropTypes.bool,\n itemPath: PropTypes.string.isRequired,\n itemType: PropTypes.string.isRequired,\n repoID: PropTypes.string.isRequired,\n isRepoOwner: PropTypes.bool.isRequired,\n};\n\nclass SysAdminShareToGroup extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selectedOption: null,\n errorMsg: [],\n permission: 'rw',\n sharedItems: []\n };\n this.options = [];\n this.permissions = ['rw', 'r'];\n if (isPro) {\n this.permissions.push('admin', 'cloud-edit', 'preview');\n }\n }\n\n handleSelectChange = (option) => {\n this.setState({selectedOption: option});\n };\n\n componentDidMount() {\n this.loadOptions();\n this.listSharedGroups();\n }\n\n loadOptions = () => {\n seafileAPI.shareableGroups().then((res) => {\n this.options = [];\n for (let i = 0 ; i < res.data.length; i++) {\n let obj = {};\n obj.value = res.data[i].name;\n obj.id = res.data[i].id;\n obj.label = res.data[i].name;\n this.options.push(obj);\n }\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n listSharedGroups = () => {\n let repoID = this.props.repoID;\n seafileAPI.sysAdminListRepoSharedItems(repoID, 'group').then((res) => {\n if(res.data.length !== 0) {\n this.setState({\n sharedItems: res.data\n });\n }\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n setPermission = (permission) => {\n this.setState({permission: permission});\n };\n\n shareToGroup = () => {\n let groups = [];\n let repoID = this.props.repoID;\n if (this.state.selectedOption && this.state.selectedOption.length > 0 ) {\n for (let i = 0; i < this.state.selectedOption.length; i ++) {\n groups[i] = this.state.selectedOption[i].id;\n }\n }\n seafileAPI.sysAdminAddRepoSharedItem(repoID, 'group', groups, this.state.permission).then(res => {\n let errorMsg = [];\n if (res.data.failed.length > 0) {\n for (let i = 0 ; i < res.data.failed.length ; i++) {\n errorMsg[i] = res.data.failed[i];\n }\n }\n let items = res.data.success;\n this.setState({\n errorMsg: errorMsg,\n sharedItems: this.state.sharedItems.concat(items),\n selectedOption: null,\n permission: 'rw',\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n deleteShareItem = (groupID) => {\n let repoID = this.props.repoID;\n seafileAPI.sysAdminDeleteRepoSharedItem(repoID, 'group', groupID).then(() => {\n this.setState({\n sharedItems: this.state.sharedItems.filter(item => { return item.group_id !== groupID; })\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onChangeUserPermission = (item, permission) => {\n let repoID = this.props.repoID;\n let groupID = item.group_id;\n seafileAPI.sysAdminUpdateRepoSharedItemPermission(repoID, 'group', groupID, permission).then(() => {\n this.updateSharedItems(item, permission);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n updateSharedItems = (item, permission) => {\n let groupID = item.group_id;\n let sharedItems = this.state.sharedItems.map(sharedItem => {\n let sharedItemGroupID = sharedItem.group_id;\n if (groupID === sharedItemGroupID) {\n sharedItem.permission = permission;\n sharedItem.is_admin = permission === 'admin' ? true : false;\n }\n return sharedItem;\n });\n this.setState({sharedItems: sharedItems});\n };\n\n render() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {this.state.errorMsg.length > 0 &&\n this.state.errorMsg.map((item, index) => {\n let errMessage = item.group_name + ': ' + item.error_msg;\n return (\n \n \n \n );\n })\n }\n \n
    {gettext('Group')}{gettext('Permission')}
    \n \n \n \n \n \n

    {errMessage}

    \n
    \n \n \n \n \n \n \n \n \n \n
    {gettext('Group')}{gettext('Permission')}
    \n
    \n
    \n );\n }\n}\n\nSysAdminShareToGroup.propTypes = propTypes;\n\nexport default SysAdminShareToGroup;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody, TabContent, TabPane, Nav, NavItem, NavLink } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport SysAdminShareToUser from './sysadmin-share-to-user';\nimport SysAdminShareToGroup from './sysadmin-share-to-group';\nimport '../../../css/share-link-dialog.css';\n\nconst propTypes = {\n itemName: PropTypes.string.isRequired,\n itemPath: PropTypes.string.isRequired,\n toggleDialog: PropTypes.func.isRequired,\n repoID: PropTypes.string.isRequired,\n isGroupOwnedRepo: PropTypes.bool.isRequired,\n repoEncrypted: PropTypes.bool,\n userPerm: PropTypes.string,\n enableDirPrivateShare: PropTypes.bool\n};\n\nclass SysAdminShareDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n activeTab: this.getInitialActiveTab(),\n isRepoOwner: false\n };\n }\n\n getInitialActiveTab = () => {\n return 'shareToUser';\n };\n\n toggle = (tab) => {\n if (this.state.activeTab !== tab) {\n this.setState({activeTab: tab});\n }\n };\n\n renderDirContent = () => {\n let activeTab = this.state.activeTab;\n const { enableDirPrivateShare, isGroupOwnedRepo } = this.props;\n return (\n \n
    \n \n
    \n
    \n \n {enableDirPrivateShare &&\n \n \n \n \n \n \n \n \n }\n \n
    \n
    \n );\n };\n\n render() {\n return (\n
    \n \n {gettext('Share')} {this.props.itemName}\n \n {this.renderDirContent()}\n \n \n
    \n );\n }\n}\n\nSysAdminShareDialog.propTypes = propTypes;\n\nexport default SysAdminShareDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Form, FormGroup, Label, Input, Alert } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../toast';\n\nconst propTypes = {\n itemName: PropTypes.string.isRequired,\n toggleDialog: PropTypes.func.isRequired,\n repoID: PropTypes.string.isRequired,\n};\n\nclass SysAdminLibHistorySettingDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n keepDays: -1,\n expireDays: 30,\n disabled: true,\n allHistory: true,\n noHistory: false,\n autoHistory: false,\n errorInfo: ''\n };\n }\n\n componentDidMount() {\n seafileAPI.sysAdminGetRepoHistorySetting(this.props.repoID).then(res => {\n this.setState({\n keepDays: res.data.keep_days,\n allHistory: res.data.keep_days < 0 ? true : false,\n noHistory: res.data.keep_days === 0 ? true : false,\n autoHistory: res.data.keep_days > 0 ? true : false,\n disabled: res.data.keep_days > 0 ? false : true,\n expireDays: res.data.keep_days > 0 ? res.data.keep_days : 30,\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n }\n\n submit = () => {\n let days = this.state.keepDays;\n if (this.state.autoHistory) {\n days = this.state.expireDays;\n }\n let repoID = this.props.repoID;\n let reg = /^-?\\d+$/;\n let flag = reg.test(days);\n if (flag) {\n let message = gettext('Successfully set library history.');\n seafileAPI.sysAdminUpdateRepoHistorySetting(repoID, days).then(res => {\n toaster.success(message);\n this.setState({keepDays: res.data.keep_days});\n this.props.toggleDialog();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n } else {\n this.setState({\n errorInfo: gettext('Please enter a non-negative integer'),\n });\n }\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.submit();\n e.preventDefault();\n }\n };\n\n onChange = (e) => {\n let num = e.target.value;\n this.setState({\n keepDays: num,\n expireDays: num,\n });\n };\n\n setLimitDays = (type) => {\n if (type === 'allHistory') {\n this.setState({\n keepDays: -1,\n });\n } else if (type === 'noHistory') {\n this.setState({\n keepDays: 0,\n });\n } else {\n this.setState({\n disabled: false\n });\n }\n\n this.setState({\n allHistory: type === 'allHistory' ? true : false,\n noHistory: type === 'noHistory' ? true : false,\n autoHistory: type === 'autoHistory' ? true : false,\n });\n };\n\n render() {\n const itemName = this.props.itemName;\n return (\n \n \n {itemName}{' '}\n {gettext('History Setting')}\n \n \n
    \n \n {this.setLimitDays('allHistory');}}/>{' '}\n \n \n \n {this.setLimitDays('noHistory');}}/>{' '}\n \n \n \n {this.setLimitDays('autoHistory');}}/>{' '}\n \n {' '}\n \n \n {this.state.errorInfo && {this.state.errorInfo}}\n
    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nSysAdminLibHistorySettingDialog.propTypes = propTypes;\n\nexport default SysAdminLibHistorySettingDialog;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext, siteRoot, isPro } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport ModalPortal from '../../../components/modal-portal';\nimport OpMenu from '../../../components/dialog/op-menu';\nimport TransferDialog from '../../../components/dialog/transfer-dialog';\nimport DeleteRepoDialog from '../../../components/dialog/delete-repo-dialog';\nimport SysAdminShareDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-share-dialog';\nimport SysAdminLibHistorySettingDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-lib-history-setting-dialog';\nimport UserLink from '../user-link';\n\nconst { enableSysAdminViewRepo } = window.sysadmin.pageOptions;\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n getPreviousPageList = () => {\n this.props.getListByPage(this.props.pageInfo.current_page - 1);\n };\n\n getNextPageList = () => {\n this.props.getListByPage(this.props.pageInfo.current_page + 1);\n };\n\n sortByFileCount = (e) => {\n e.preventDefault();\n this.props.sortItems('file_count');\n };\n\n sortBySize = (e) => {\n e.preventDefault();\n this.props.sortItems('size');\n };\n\n render() {\n // offer 'sort' only for 'all repos'\n const { loading, errorMsg, items, pageInfo, curPerPage, sortBy } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No libraries')}

    \n
    \n );\n const initialSortIcon = ;\n const sortIcon = ;\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {/*icon*/}{gettext('Name')}\n {sortBy != undefined ?\n \n {gettext('Files')} {sortBy == 'file_count' ? sortIcon : initialSortIcon}{' / '}\n {gettext('Size')} {sortBy == 'size' ? sortIcon : initialSortIcon}\n :\n gettext('Files') / gettext('Size')\n }\n ID{gettext('Owner')}{/*Operations*/}
    \n {pageInfo &&\n \n }\n
    \n );\n\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n deleteItem: PropTypes.func,\n onDeleteRepo: PropTypes.func.isRequired,\n onRestoreRepo: PropTypes.func,\n getListByPage: PropTypes.func.isRequired,\n resetPerPage: PropTypes.func,\n pageInfo: PropTypes.object,\n curPerPage: PropTypes.number,\n sortItems: PropTypes.func,\n sortBy: PropTypes.string,\n onTransferRepo: PropTypes.func.isRequired,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n highlight: false,\n isShareDialogOpen: false,\n isDeleteDialogOpen: false,\n isTransferDialogOpen: false,\n isHistorySettingDialogOpen: false,\n isRepoDeleted: false,\n };\n }\n\n onDeleteRepo = (repo) => {\n seafileAPI.sysAdminDeleteRepo(repo.id).then((res) => {\n this.props.onDeleteRepo(repo);\n this.setState({\n isDeleteDialogOpen: false,\n isRepoDeleted: true,\n });\n const msg = gettext('Successfully deleted {name}.').replace('{name}', repo.name);\n toaster.success(msg);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n\n this.setState({isRepoDeleted: false});\n });\n };\n\n onTransferRepo = (owner) => {\n seafileAPI.sysAdminTransferRepo(this.props.repo.id, owner.email).then((res) => {\n this.props.onTransferRepo(res.data);\n let message = gettext('Successfully transferred the library.');\n toaster.success(message);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n this.toggleTransferDialog();\n };\n\n handleMouseOver = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseOut = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false\n });\n this.props.onUnfreezedItem();\n };\n\n onMenuItemClick = (operation) => {\n switch(operation) {\n case 'Share':\n this.toggleShareDialog();\n break;\n case 'Delete':\n this.toggleDeleteDialog();\n break;\n case 'Transfer':\n this.toggleTransferDialog();\n break;\n case 'History Setting':\n this.toggleHistorySettingDialog();\n break;\n default:\n break;\n }\n };\n\n toggleShareDialog = () => {\n this.setState({isShareDialogOpen: !this.state.isShareDialogOpen});\n };\n\n toggleDeleteDialog = () => {\n this.setState({isDeleteDialogOpen: !this.state.isDeleteDialogOpen});\n };\n\n toggleTransferDialog = () => {\n this.setState({isTransferDialogOpen: !this.state.isTransferDialogOpen});\n };\n\n toggleHistorySettingDialog = () => {\n this.setState({isHistorySettingDialogOpen: !this.state.isHistorySettingDialogOpen});\n };\n\n renderRepoName = () => {\n const { repo } = this.props;\n if (repo.name) {\n if (isPro && enableSysAdminViewRepo && !repo.encrypted) {\n return {repo.name};\n } else {\n return repo.name;\n }\n } else {\n return '--';\n }\n };\n\n translateOperations = (item) => {\n let translateResult = '';\n switch(item) {\n case 'Share':\n translateResult = gettext('Share');\n break;\n case 'Delete':\n translateResult = gettext('Delete');\n break;\n case 'Transfer':\n translateResult = gettext('Transfer');\n break;\n case 'History Setting':\n translateResult = gettext('History Setting');\n break;\n default:\n break;\n }\n\n return translateResult;\n };\n\n getOperations = () => {\n const { repo } = this.props;\n let operations = ['Delete', 'Transfer'];\n if (!repo.encrypted) {\n operations.push('Share');\n }\n operations.push('History Setting');\n return operations;\n };\n\n render () {\n const { repo } = this.props;\n const {\n isOpIconShown,\n isShareDialogOpen,\n isDeleteDialogOpen,\n isTransferDialogOpen,\n isHistorySettingDialogOpen\n } = this.state;\n let iconUrl = Utils.getLibIconUrl(repo);\n let iconTitle = Utils.getLibIconTitle(repo);\n const index = repo.owner_email.indexOf('@seafile_group');\n let isGroupOwnedRepo = index != -1;\n let departmentID;\n if (isGroupOwnedRepo) {\n departmentID = repo.owner_email.substring(0, index);\n }\n\n return (\n \n \n {iconTitle}\n {this.renderRepoName()}\n {`${repo.file_count} / ${Utils.bytesToSize(repo.size)}`}\n {repo.id}\n \n {isGroupOwnedRepo ?\n {repo.owner_name} :\n \n }\n \n \n {(!isGroupOwnedRepo && isOpIconShown) &&\n \n }\n \n \n {isShareDialogOpen &&\n \n \n \n }\n {isDeleteDialogOpen &&\n \n \n \n }\n {isTransferDialogOpen &&\n \n \n \n }\n {isHistorySettingDialogOpen &&\n \n \n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n repo: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n onDeleteRepo: PropTypes.func.isRequired,\n onTransferRepo: PropTypes.func.isRequired,\n};\n\nexport default Content;\n","import React, { Component, Fragment } from 'react';\nimport { navigate } from '@gatsbyjs/reach-router';\nimport { Button } from 'reactstrap';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext, siteRoot } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport SysAdminCreateRepoDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-create-repo-dialog';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Search from '../search';\nimport ReposNav from './repos-nav';\nimport Content from './repos';\n\nclass AllRepos extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n repos: [],\n pageInfo: {},\n perPage: 25,\n sortBy: '',\n isCreateRepoDialogOpen: false\n };\n }\n\n componentDidMount () {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage = 1, perPage, sortBy } = this.state;\n this.setState({\n sortBy: urlParams.get('order_by') || sortBy,\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getReposByPage(this.state.currentPage);\n });\n }\n\n toggleCreateRepoDialog = () => {\n this.setState({isCreateRepoDialogOpen: !this.state.isCreateRepoDialogOpen});\n };\n\n getReposByPage = (page) => {\n const { perPage, sortBy } = this.state;\n seafileAPI.sysAdminListAllRepos(page, perPage, sortBy).then((res) => {\n this.setState({\n loading: false,\n repos: res.data.repos,\n pageInfo: res.data.page_info\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n sortItems = (sortBy) => {\n this.setState({\n currentPage: 1,\n sortBy: sortBy\n }, () => {\n let url = new URL(location.href);\n let searchParams = new URLSearchParams(url.search);\n const { currentPage, sortBy } = this.state;\n searchParams.set('page', currentPage);\n searchParams.set('order_by', sortBy);\n url.search = searchParams.toString();\n navigate(url.toString());\n this.getReposByPage(currentPage);\n });\n };\n\n resetPerPage = (perPage) => {\n this.setState({\n perPage: perPage\n }, () => {\n this.getReposByPage(1);\n });\n };\n\n createRepo = (repoName, Owner) => {\n seafileAPI.sysAdminCreateRepo(repoName, Owner).then(res => {\n this.state.repos.unshift(res.data);\n this.setState({\n repos: this.state.repos\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onDeleteRepo = (targetRepo) => {\n let repos = this.state.repos.filter(repo => {\n return repo.id != targetRepo.id;\n });\n this.setState({\n repos: repos\n });\n };\n\n onTransferRepo = (targetRepo) => {\n let repos = this.state.repos.map((item) => {\n return item.id == targetRepo.id ? targetRepo : item;\n });\n this.setState({\n repos: repos\n });\n };\n\n getSearch = () => {\n return ;\n };\n\n searchRepos = (repoNameOrID) => {\n if (this.getValueLength(repoNameOrID) < 3) {\n toaster.notify(gettext('Required at least three letters.'));\n return;\n }\n navigate(`${siteRoot}sys/search-libraries/?name_or_id=${encodeURIComponent(repoNameOrID)}`);\n };\n\n getValueLength(str) {\n let code, len = 0;\n for (let i = 0, length = str.length; i < length; i++) {\n code = str.charCodeAt(i);\n if (code === 10) { //solve enter problem\n len += 2;\n } else if (code < 0x007f) {\n len += 1;\n } else if (code >= 0x0080 && code <= 0x07ff) {\n len += 2;\n } else if (code >= 0x0800 && code <= 0xffff) {\n len += 3;\n }\n }\n return len;\n }\n\n render() {\n let { isCreateRepoDialogOpen } = this.state;\n return (\n \n \n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n {isCreateRepoDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nexport default AllRepos;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext, siteRoot } from '../../../utils/constants';\nimport Loading from '../../../components/loading';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport ReposNav from './repos-nav';\n\nclass Content extends Component {\n render() {\n const { loading, errorMsg, items } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const table = (\n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('Name')}ID{gettext('Description')}
    \n
    \n );\n return table;\n }\n }\n}\n\n\nContent.propTypes = {\n resetPerPage: PropTypes.func,\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n currentPage: PropTypes.number,\n curPerPage: PropTypes.number,\n hasNextPage: PropTypes.bool,\n};\n\nclass Item extends Component {\n render() {\n const item = this.props.item;\n return (\n \n {item.name}\n {item.id}\n {item.description}\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n};\n\nclass SystemRepo extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n items: []\n };\n }\n\n componentDidMount () {\n seafileAPI.sysAdminGetSystemRepoInfo().then((res) => {\n let items = [];\n items.push(res.data);\n this.setState({\n items: items,\n loading: false\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n render() {\n return (\n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default SystemRepo;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'reactstrap';\nimport moment from 'moment';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport ModalPortal from '../../../components/modal-portal';\nimport OpMenu from '../../../components/dialog/op-menu';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Search from '../search';\nimport UserLink from '../user-link';\nimport ReposNav from './repos-nav';\n\nconst { trashReposExpireDays } = window.sysadmin.pageOptions;\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n getPreviousPageList = () => {\n this.props.getListByPage(this.props.pageInfo.current_page - 1);\n };\n\n getNextPageList = () => {\n this.props.getListByPage(this.props.pageInfo.current_page + 1);\n };\n\n render() {\n const { loading, errorMsg, items, pageInfo, curPerPage } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No deleted libraries')}

    \n
    \n );\n const table = (\n \n

    {gettext('Tip: libraries deleted {trashReposExpireDays} days ago will be cleaned automatically.').replace('{trashReposExpireDays}', trashReposExpireDays)}

    \n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {/*icon*/}{gettext('Name')}{gettext('Owner')}{gettext('Deleted Time')}{/*Operations*/}
    \n {pageInfo &&\n \n }\n
    \n );\n\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n deleteItem: PropTypes.func,\n onDeleteRepo: PropTypes.func.isRequired,\n onRestoreRepo: PropTypes.func,\n getListByPage: PropTypes.func.isRequired,\n resetPerPage: PropTypes.func,\n pageInfo: PropTypes.object,\n curPerPage: PropTypes.number,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n highlight: false,\n isOpIconShown: false,\n isDeleteRepoDialogOpen: false,\n isRestoreRepoDialogOpen: false\n };\n }\n\n handleMouseOver = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseOut = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false\n });\n this.props.onUnfreezedItem();\n };\n\n onDeleteRepo = () => {\n const repo = this.props.repo;\n seafileAPI.sysAdminDeleteTrashRepo(repo.id).then((res) => {\n this.props.onDeleteRepo(repo);\n const msg = gettext('Successfully deleted {name}.').replace('{name}', repo.name);\n toaster.success(msg);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onRestoreRepo = () => {\n const repo = this.props.repo;\n seafileAPI.sysAdminRestoreTrashRepo(repo.id).then((res) => {\n this.props.onRestoreRepo(repo);\n let message = gettext('Successfully restored the library.');\n toaster.success(message);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n toggleDeleteRepoDialog = (e) => {\n if (e) {\n e.preventDefault();\n }\n this.setState({isDeleteRepoDialogOpen: !this.state.isDeleteRepoDialogOpen});\n };\n\n toggleRestoreRepoDialog = (e) => {\n if (e) {\n e.preventDefault();\n }\n this.setState({isRestoreRepoDialogOpen: !this.state.isRestoreRepoDialogOpen});\n };\n\n translateOperations = (item) => {\n let translateResult = '';\n switch(item) {\n case 'Restore':\n translateResult = gettext('Restore');\n break;\n case 'Delete':\n translateResult = gettext('Delete');\n break;\n default:\n break;\n }\n\n return translateResult;\n };\n\n onMenuItemClick = (operation) => {\n switch(operation) {\n case 'Restore':\n this.toggleRestoreRepoDialog();\n break;\n case 'Delete':\n this.toggleDeleteRepoDialog();\n break;\n default:\n break;\n }\n };\n\n render () {\n const { repo } = this.props;\n const { isOpIconShown, isDeleteRepoDialogOpen, isRestoreRepoDialogOpen } = this.state;\n const iconUrl = Utils.getLibIconUrl(repo);\n const iconTitle = Utils.getLibIconTitle(repo);\n const repoName = '' + Utils.HTMLescape(repo.name) + '';\n\n return (\n \n \n {iconTitle}\n {repo.name}\n \n {repo.owner.indexOf('@seafile_group') == -1 ?\n :\n repo.group_name}\n \n {moment(repo.delete_time).fromNow()}\n \n {isOpIconShown && (\n \n )}\n \n \n {isDeleteRepoDialogOpen &&\n \n \n \n }\n {isRestoreRepoDialogOpen &&\n \n \n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n repo: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n onDeleteRepo: PropTypes.func.isRequired,\n onRestoreRepo: PropTypes.func,\n};\n\nclass TrashRepos extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n repos: [],\n pageInfo: {},\n perPage: 25,\n isCleanTrashDialogOpen: false\n };\n }\n\n componentDidMount () {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage = 1, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getReposByPage(this.state.currentPage);\n });\n }\n\n toggleCleanTrashDialog = () => {\n this.setState({isCleanTrashDialogOpen: !this.state.isCleanTrashDialogOpen});\n };\n\n getReposByPage = (page) => {\n let perPage = this.state.perPage;\n seafileAPI.sysAdminListTrashRepos(page, perPage).then((res) => {\n this.setState({\n repos: res.data.repos,\n pageInfo: res.data.page_info,\n loading: false\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n resetPerPage = (perPage) => {\n this.setState({\n perPage: perPage\n }, () => {\n this.getReposByPage(1);\n });\n };\n\n onDeleteRepo = (targetRepo) => {\n let repos = this.state.repos.filter(repo => {\n return repo.id != targetRepo.id;\n });\n this.setState({\n repos: repos\n });\n };\n\n onRestoreRepo = (targetRepo) => {\n let repos = this.state.repos.filter(repo => {\n return repo.id != targetRepo.id;\n });\n this.setState({\n repos: repos\n });\n };\n\n cleanTrash = () => {\n seafileAPI.sysAdminCleanTrashRepos().then(res => {\n this.setState({repos: []});\n toaster.success(gettext('Successfully cleared trash.'));\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n getSearch = () => {\n return ;\n };\n\n searchRepos = (owner) => {\n seafileAPI.sysAdminSearchTrashRepos(owner).then((res) => {\n this.setState({\n repos: res.data.repos,\n pageInfo: null,\n errorMsg: '', // necessary!\n loading: false\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n render() {\n const { isCleanTrashDialogOpen } = this.state;\n\n // enable 'search': \n return (\n \n {this.state.repos.length ? (\n \n \n \n ) : \n }\n
    \n
    \n \n
    \n \n
    \n
    \n
    \n {isCleanTrashDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nexport default TrashRepos;\n","import React, { Component, Fragment } from 'react';\nimport { Form, FormGroup, Input, Label, Col } from 'reactstrap';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport { Utils } from '../../../utils/utils';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Content from './repos';\n\n\nclass SearchRepos extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n name: '',\n currentPage: 1,\n perPage: 25,\n isSubmitBtnActive: false,\n loading: true,\n errorMsg: '',\n repos: [],\n pageInfo: {},\n };\n }\n\n componentDidMount() {\n let params = (new URL(document.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n name: params.get('name_or_id') || '',\n perPage: parseInt(params.get('per_page') || perPage),\n currentPage: parseInt(params.get('page') || currentPage),\n }, () => {\n this.getRepos(this.state.currentPage);\n });\n }\n\n getRepos = (page) => {\n const { name, perPage } = this.state;\n if (this.getValueLength(name) < 3) {\n toaster.notify(gettext('Required at least three letters.'));\n return;\n }\n seafileAPI.sysAdminSearchRepos(name, page, perPage).then((res) => {\n this.setState({\n loading: false,\n errorMsg: '',\n repos: res.data.repo_list,\n pageInfo: res.data.page_info,\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n searchRepos = () => {\n const { currentPage } = this.state;\n this.getRepos(currentPage);\n };\n\n onDeleteRepo = (targetRepo) => {\n let repos = this.state.repos.filter(repo => {\n return repo.id != targetRepo.id;\n });\n this.setState({\n repos: repos\n });\n };\n\n onTransferRepo = (targetRepo) => {\n let repos = this.state.repos.map((item) => {\n return item.id == targetRepo.id ? targetRepo : item;\n });\n this.setState({\n repos: repos\n });\n };\n\n handleNameInputChange = (e) => {\n this.setState({\n name: e.target.value,\n currentPage: 1,\n }, this.checkSubmitBtnActive);\n };\n\n checkSubmitBtnActive = () => {\n const { name } = this.state;\n this.setState({\n isSubmitBtnActive: name.trim()\n });\n };\n\n handleKeyDown = (e) => {\n if (e.keyCode === 13) {\n const { isSubmitBtnActive } = this.state;\n if (isSubmitBtnActive) {\n this.searchRepos();\n }\n }\n };\n\n resetPerPage = (perPage) => {\n this.setState({\n perPage: perPage,\n currentPage: 1,\n }, () => {\n this.searchRepos();\n });\n };\n\n getValueLength(str) {\n let code, len = 0;\n for (let i = 0, length = str.length; i < length; i++) {\n code = str.charCodeAt(i);\n if (code === 10) { //solve enter problem\n len += 2;\n } else if (code < 0x007f) {\n len += 1;\n } else if (code >= 0x0080 && code <= 0x07ff) {\n len += 2;\n } else if (code >= 0x0800 && code <= 0xffff) {\n len += 3;\n }\n }\n return len;\n }\n\n render() {\n const { name, isSubmitBtnActive } = this.state;\n return (\n \n \n
    \n
    \n
    \n

    {gettext('Libraries')}

    \n
    \n
    \n
    \n

    {gettext('Search Libraries')}

    \n

    {gettext('Tip: you can search by keyword in name or ID.')}

    \n
    \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n

    {gettext('Result')}

    \n \n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default SearchRepos;\n","class Dirent {\n constructor(obj) {\n this.name = obj.obj_name;\n this.mtime = obj.last_update;\n this.size = obj.file_size;\n this.is_file = obj.is_file;\n }\n\n isDir() {\n return !this.is_file;\n }\n}\n\nexport default Dirent;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { siteRoot, gettext } from '../../../utils/constants';\nimport { Utils } from '../../../utils/utils';\n\nconst propTypes = {\n repoName: PropTypes.string.isRequired,\n currentPath: PropTypes.string.isRequired,\n onPathClick: PropTypes.func.isRequired,\n isSystemRepo: PropTypes.bool.isRequired,\n repoID: PropTypes.string.isRequired,\n};\n\nclass DirPath extends React.Component {\n\n onPathClick = (e) => {\n let path = Utils.getEventData(e, 'path');\n this.props.onPathClick(path);\n };\n\n turnPathToLink = (path) => {\n path = path[path.length - 1] === '/' ? path.slice(0, path.length - 1) : path;\n let pathList = path.split('/');\n let nodePath = '';\n let pathElem = pathList.map((item, index) => {\n if (item === '') {\n return null;\n }\n if (index === (pathList.length - 1)) {\n return (\n \n /\n {item}\n \n );\n } else {\n nodePath += '/' + item;\n return (\n \n /\n {item}\n \n );\n }\n });\n return pathElem;\n };\n\n render() {\n let { isSystemRepo, currentPath, repoName } = this.props;\n let pathElem = this.turnPathToLink(currentPath);\n\n return (\n
    \n {isSystemRepo ?\n {gettext('System')} :\n {gettext('All')}\n }\n /\n {(currentPath === '/' || currentPath === '') ?\n {repoName}:\n {repoName}\n }\n {pathElem}\n
    \n );\n }\n}\n\nDirPath.propTypes = propTypes;\n\nexport default DirPath;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport moment from 'moment';\nimport { gettext } from '../../../utils/constants';\nimport { Utils } from '../../../utils/utils';\nimport Loading from '../../../components/loading';\n\nclass DirentItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false\n };\n }\n\n handleMouseOver = () => {\n this.setState({\n isOpIconShown: true\n });\n };\n\n handleMouseOut = () => {\n this.setState({\n isOpIconShown: false\n });\n };\n\n openFolder = () => {\n this.props.openFolder(this.props.dirent);\n };\n\n deleteDirent = (e) => {\n e.preventDefault();\n this.props.deleteDirent(this.props.dirent);\n };\n\n downloadDirent = (e) => {\n e.preventDefault();\n this.props.downloadDirent(this.props.dirent);\n };\n\n render () {\n let { isOpIconShown } = this.state;\n let { dirent, fromSystemRepo } = this.props;\n let iconUrl = Utils.getDirentIcon(dirent);\n\n return (\n \n \n \n \n {dirent.is_file ?\n dirent.name :\n {dirent.name}\n }\n \n \n {isOpIconShown && fromSystemRepo &&\n \n }\n {isOpIconShown && dirent.is_file &&\n \n }\n \n {dirent.size}\n {moment(dirent.mtime).fromNow()}\n \n \n );\n }\n}\n\nDirentItem.propTypes = {\n dirent: PropTypes.object.isRequired,\n fromSystemRepo: PropTypes.bool.isRequired,\n deleteDirent: PropTypes.func.isRequired,\n openFolder: PropTypes.func.isRequired,\n downloadDirent: PropTypes.func.isRequired,\n};\n\nclass DirContent extends React.Component {\n\n render() {\n let { loading, errorMsg, direntList } = this.props;\n\n if (loading) {\n return ;\n }\n\n if (errorMsg) {\n return

    {errorMsg}

    ;\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n {direntList.map((dirent, index) => {\n return ;\n })}\n \n
    {/*icon*/}{gettext('Name')}{/*operation*/}{gettext('Size')}{gettext('Last Update')}
    \n
    \n );\n }\n}\n\nDirContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n openFolder: PropTypes.func.isRequired,\n direntList: PropTypes.array.isRequired,\n fromSystemRepo: PropTypes.bool.isRequired,\n deleteDirent: PropTypes.func.isRequired,\n downloadDirent: PropTypes.func.isRequired,\n};\n\nexport default DirContent;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'reactstrap';\nimport axios from 'axios';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { siteRoot, gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport CreateFolderDialog from '../../../components/dialog/create-folder-dialog';\nimport Dirent from '../../../models/system-admin/dirent';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport DirPathBar from './dir-path-bar';\nimport DirContent from './dir-content';\n\nclass DirView extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n isSystemRepo: false,\n repoName: '',\n path: '',\n direntList: [],\n isNewFolderDialogOpen: false\n };\n this.fileInput = React.createRef();\n }\n\n componentDidMount () {\n this.loadDirentList('/');\n }\n\n onPathClick = (path) => {\n this.loadDirentList(path);\n };\n\n toggleNewFolderDialog = () => {\n this.setState({isNewFolderDialogOpen: !this.state.isNewFolderDialogOpen});\n };\n\n createNewFolder = (path) => {\n let folderName = Utils.getFileName(path);\n seafileAPI.sysAdminCreateSysRepoFolder(this.props.repoID, this.state.path, folderName).then(res => {\n let new_dirent = new Dirent(res.data);\n let direntList = this.state.direntList;\n direntList.unshift(new_dirent);\n this.setState({\n direntList: direntList\n });\n this.toggleNewFolderDialog();\n }).catch((err) => {\n let errMessage = Utils.getErrorMsg(err);\n toaster.danger(errMessage);\n });\n };\n\n openFolder = (dirent) => {\n let direntPath = Utils.joinPath(this.state.path, dirent.name);\n if (!dirent.is_file) {\n this.loadDirentList(direntPath);\n }\n };\n\n loadDirentList = (path) => {\n const repoID = this.props.repoID;\n seafileAPI.sysAdminListRepoDirents(repoID, path).then(res => {\n const { is_system_library: isSystemRepo, repo_name: repoName, dirent_list } = res.data;\n let direntList = [];\n dirent_list.forEach(item => {\n let dirent = new Dirent(item);\n direntList.push(dirent);\n });\n this.setState({\n loading: false,\n repoName: repoName,\n isSystemRepo: isSystemRepo,\n direntList: direntList,\n path: path,\n }, () => {\n let url = siteRoot + 'sys/libraries/' + repoID + '/' + encodeURIComponent(this.state.repoName) + Utils.encodePath(path);\n window.history.replaceState({url: url, path: path}, path, url);\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n deleteDirent = (dirent) => {\n let path = Utils.joinPath(this.state.path, dirent.name);\n seafileAPI.sysAdminDeleteRepoDirent(this.props.repoID, path).then(res => {\n toaster.success(gettext('Successfully deleted 1 item.'));\n let direntList = this.state.direntList.filter(item => {\n return item.name != dirent.name;\n });\n this.setState({\n direntList: direntList\n });\n }).catch((err) => {\n let errMessage = Utils.getErrorMsg(err);\n toaster.danger(errMessage);\n });\n };\n\n downloadDirent = (dirent) => {\n let path = Utils.joinPath(this.state.path, dirent.name);\n seafileAPI.sysAdminGetRepoFileDownloadURL(this.props.repoID, path).then(res => {\n location.href = res.data.download_url;\n }).catch((err) => {\n let errMessage = Utils.getErrorMsg(err);\n toaster.danger(errMessage);\n });\n };\n\n openFileInput = () => {\n this.fileInput.current.click();\n };\n\n onFileInputChange = () => {\n if (!this.fileInput.current.files.length) {\n return;\n }\n const file = this.fileInput.current.files[0];\n\n let { path } = this.state;\n seafileAPI.sydAdminGetSysRepoItemUploadURL(path).then(res => {\n let formData = new FormData();\n formData.append('parent_dir', path);\n formData.append('file', file);\n axios.post(res.data.upload_link, formData).then(res => {\n const fileObj = res.data[0];\n let newDirent = new Dirent({\n 'is_file': true,\n 'obj_name': fileObj.name,\n 'file_size': Utils.bytesToSize(fileObj.size),\n 'last_update': (new Date()).getTime()\n });\n let direntList = this.state.direntList;\n const dirs = direntList.filter(item => { return !item.is_file; });\n direntList.splice(dirs.length, 0, newDirent);\n this.setState({\n direntList: direntList\n });\n });\n }).catch((err) => {\n let errMessage = Utils.getErrorMsg(err);\n toaster.danger(errMessage);\n });\n };\n\n checkDuplicatedName = (newName) => {\n let direntList = this.state.direntList;\n let isDuplicated = direntList.some(object => {\n return object.name === newName;\n });\n return isDuplicated;\n };\n\n render() {\n const { loading, errorMsg,\n repoName, direntList, isSystemRepo, path,\n isNewFolderDialogOpen } = this.state;\n const { repoID } = this.props;\n\n return (\n \n {isSystemRepo ?\n \n \n \n \n \n \n : \n }\n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n {isNewFolderDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nDirView.propTypes = {\n repoID: PropTypes.string,\n};\n\nexport default DirView;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, Input, ModalBody, ModalFooter, Form, FormGroup, Label, Alert } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport UserSelect from '../../user-select';\n\n\nconst propTypes = {\n createGroup: PropTypes.func.isRequired,\n toggleDialog: PropTypes.func.isRequired\n};\n\nclass SysAdminCreateGroupDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n groupName: '',\n ownerEmail: '',\n errMessage: '',\n isSubmitBtnActive: false\n };\n }\n\n handleRepoNameChange = (e) => {\n if (!e.target.value.trim()) {\n this.setState({isSubmitBtnActive: false});\n } else {\n this.setState({isSubmitBtnActive: true});\n }\n\n this.setState({groupName: e.target.value});\n };\n\n handleSubmit = () => {\n let groupName = this.state.groupName.trim();\n this.props.createGroup(groupName, this.state.ownerEmail);\n };\n\n handleSelectChange = (option) => {\n // option can be null\n this.setState({\n ownerEmail: option ? option.email : ''\n });\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.handleSubmit();\n e.preventDefault();\n }\n };\n\n toggle = () => {\n this.props.toggleDialog();\n };\n\n render() {\n return (\n \n {gettext('New Group')}\n \n
    \n \n \n \n \n \n \n
    \n {this.state.errMessage && {this.state.errMessage}}\n
    \n \n \n \n \n
    \n );\n }\n}\n\nSysAdminCreateGroupDialog.propTypes = propTypes;\n\nexport default SysAdminCreateGroupDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport { Utils } from '../../../utils/utils';\nimport { gettext } from '../../../utils/constants';\nimport UserSelect from '../../user-select';\n\nconst propTypes = {\n groupName: PropTypes.string.isRequired,\n transferGroup: PropTypes.func.isRequired,\n toggleDialog: PropTypes.func.isRequired\n};\n\nclass SysAdminTransferGroupDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selectedOption: null,\n submitBtnDisabled: true\n };\n }\n\n handleSelectChange = (option) => {\n this.setState({\n selectedOption: option,\n submitBtnDisabled: option == null\n });\n };\n\n submit = () => {\n const receiver = this.state.selectedOption.email;\n this.props.transferGroup(receiver);\n this.props.toggleDialog();\n };\n\n render() {\n const { submitBtnDisabled } = this.state;\n const groupName = '' + Utils.HTMLescape(this.props.groupName) +'';\n const msg = gettext('Transfer Group {placeholder} to').replace('{placeholder}', groupName);\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n}\n\nSysAdminTransferGroupDialog.propTypes = propTypes;\n\nexport default SysAdminTransferGroupDialog;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport moment from 'moment';\nimport { Utils } from '../../../utils/utils';\nimport { siteRoot, gettext } from '../../../utils/constants';\nimport Loading from '../../../components/loading';\nimport EmptyTip from '../../../components/empty-tip';\nimport Paginator from '../../../components/paginator';\nimport OpMenu from '../../../components/dialog/op-menu';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport SysAdminTransferGroupDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-group-transfer-dialog';\nimport UserLink from '../user-link';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n getPreviousPage = () => {\n this.props.getListByPage(this.props.pageInfo.current_page - 1);\n };\n\n getNextPage = () => {\n this.props.getListByPage(this.props.pageInfo.current_page + 1);\n };\n\n render() {\n const { loading, errorMsg, items, pageInfo, curPerPage } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No groups')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('Name')}{gettext('Owner')}{gettext('Created At')}{/* operation */}
    \n {pageInfo &&\n \n }\n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getDeviceErrorsListByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n curPerPage: PropTypes.number,\n pageInfo: PropTypes.object,\n getListByPage: PropTypes.func.isRequired,\n deleteGroup: PropTypes.func.isRequired,\n transferGroup: PropTypes.func.isRequired,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n highlight: false,\n isDeleteDialogOpen: false,\n isTransferDialogOpen: false\n };\n }\n\n handleMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false\n });\n this.props.onUnfreezedItem();\n };\n\n onMenuItemClick = (operation) => {\n switch(operation) {\n case 'Delete':\n this.toggleDeleteDialog();\n break;\n case 'Transfer':\n this.toggleTransferDialog();\n break;\n default:\n break;\n }\n };\n\n toggleDeleteDialog = (e) => {\n if (e) {\n e.preventDefault();\n }\n this.setState({isDeleteDialogOpen: !this.state.isDeleteDialogOpen});\n };\n\n toggleTransferDialog = (e) => {\n if (e) {\n e.preventDefault();\n }\n this.setState({isTransferDialogOpen: !this.state.isTransferDialogOpen});\n };\n\n deleteGroup = () => {\n this.props.deleteGroup(this.props.item.id);\n };\n\n transferGroup = (receiver) => {\n this.props.transferGroup(this.props.item.id, receiver);\n };\n\n translateOperations = (item) => {\n let translateResult = '';\n switch(item) {\n case 'Delete':\n translateResult = gettext('Delete');\n break;\n case 'Transfer':\n translateResult = gettext('Transfer');\n break;\n }\n\n return translateResult;\n };\n\n render() {\n const { item } = this.props;\n const { isOpIconShown, isDeleteDialogOpen, isTransferDialogOpen } = this.state;\n\n let groupName = '' + Utils.HTMLescape(item.name) + '';\n let deleteDialogMsg = gettext('Are you sure you want to delete {placeholder} ?').replace('{placeholder}', groupName);\n\n const groupUrl = item.parent_group_id == 0 ?\n `${siteRoot}sys/groups/${item.id}/libraries/` :\n `${siteRoot}sys/departments/${item.id}/`;\n\n return (\n \n \n {item.name}\n \n {item.owner == 'system admin' ?\n '--' :\n \n }\n \n \n {moment(item.created_at).fromNow()}\n \n \n {(isOpIconShown && item.owner != 'system admin') &&\n \n }\n \n \n {isDeleteDialogOpen &&\n \n }\n {isTransferDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n deleteGroup: PropTypes.func.isRequired,\n transferGroup: PropTypes.func.isRequired,\n};\n\nexport default Content;\n","import React, { Component, Fragment } from 'react';\nimport { navigate } from '@gatsbyjs/reach-router';\nimport { Button } from 'reactstrap';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { siteRoot, gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport SysAdminCreateGroupDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-create-group-dialog';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Search from '../search';\nimport Content from './groups-content';\n\nclass Groups extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n groupList: [],\n pageInfo: {},\n perPage: 25,\n isCreateGroupDialogOpen: false\n };\n }\n\n componentDidMount () {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage = 1, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getGroupListByPage(this.state.currentPage);\n });\n }\n\n toggleCreateGroupDialog = () => {\n this.setState({isCreateGroupDialogOpen: !this.state.isCreateGroupDialogOpen});\n };\n\n getGroupListByPage = (page) => {\n seafileAPI.sysAdminListAllGroups(page, this.state.perPage).then((res) => {\n this.setState({\n loading: false,\n groupList: res.data.groups,\n pageInfo: res.data.page_info\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n resetPerPage = (perPage) => {\n this.setState({\n perPage: perPage\n }, () => {\n this.getGroupListByPage(1);\n });\n };\n\n createGroup = (groupName, OnwerEmail) => {\n seafileAPI.sysAdminCreateNewGroup(groupName, OnwerEmail).then(res => {\n let newGroupList = this.state.groupList;\n newGroupList.unshift(res.data);\n this.setState({\n groupList: newGroupList\n });\n this.toggleCreateGroupDialog();\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n deleteGroup = (groupID) => {\n seafileAPI.sysAdminDismissGroupByID(groupID).then(res => {\n let newGroupList = this.state.groupList.filter(item => {\n return item.id != groupID;\n });\n this.setState({\n groupList: newGroupList\n });\n toaster.success(gettext('Successfully deleted 1 item.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n transferGroup = (groupID, receiverEmail) => {\n seafileAPI.sysAdminTransferGroup(receiverEmail, groupID).then(res => {\n let newGroupList = this.state.groupList.map(item => {\n if (item.id == groupID) {\n item = res.data;\n }\n return item;\n });\n this.setState({\n groupList: newGroupList\n });\n toaster.success(gettext('Successfully transferred the group.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n getSearch = () => {\n return ;\n };\n\n searchGroups = (name) => {\n navigate(`${siteRoot}sys/search-groups/?name=${encodeURIComponent(name)}`);\n };\n\n render() {\n let { isCreateGroupDialogOpen } = this.state;\n\n return (\n \n \n \n \n {gettext('Export Excel')}\n \n \n
    \n
    \n
    \n

    {gettext('Groups')}

    \n
    \n
    \n \n
    \n
    \n
    \n {isCreateGroupDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nexport default Groups;\n","import React, { Component, Fragment } from 'react';\nimport { Form, FormGroup, Input, Label, Col } from 'reactstrap';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Content from './groups-content';\n\nclass SearchGroups extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n name: '',\n isSubmitBtnActive: false,\n loading: true,\n errorMsg: '',\n groupList: [],\n pageInfo: null\n };\n }\n\n componentDidMount () {\n let params = (new URL(document.location)).searchParams;\n this.setState({\n name: params.get('name') || ''\n }, this.getGroups);\n }\n\n getGroups = () => {\n const { name } = this.state;\n seafileAPI.sysAdminSearchGroups(name).then((res) => {\n this.setState({\n loading: false,\n groupList: res.data.group_list\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n deleteGroup = (groupID) => {\n seafileAPI.sysAdminDismissGroupByID(groupID).then(res => {\n let newGroupList = this.state.groupList.filter(item => {\n return item.id != groupID;\n });\n this.setState({\n groupList: newGroupList\n });\n toaster.success(gettext('Successfully deleted 1 item.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n transferGroup = (groupID, receiverEmail) => {\n seafileAPI.sysAdminTransferGroup(receiverEmail, groupID).then(res => {\n let newGroupList = this.state.groupList.map(item => {\n if (item.id == groupID) {\n item = res.data;\n }\n return item;\n });\n this.setState({\n groupList: newGroupList\n });\n toaster.success(gettext('Successfully transferred the group.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n handleNameInputChange = (e) => {\n this.setState({\n name: e.target.value\n }, this.checkSubmitBtnActive);\n };\n\n checkSubmitBtnActive = () => {\n const { name } = this.state;\n this.setState({\n isSubmitBtnActive: name.trim()\n });\n };\n\n handleKeyDown = (e) => {\n if (e.keyCode === 13) {\n const { isSubmitBtnActive } = this.state;\n if (isSubmitBtnActive) {\n this.getGroups();\n }\n }\n };\n\n render() {\n const { name, isSubmitBtnActive } = this.state;\n\n return (\n \n \n
    \n
    \n
    \n

    {gettext('Groups')}

    \n
    \n
    \n
    \n

    {gettext('Search Groups')}

    \n

    {gettext('Tip: you can search by keyword in name.')}

    \n
    \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n

    {gettext('Result')}

    \n \n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default SearchGroups;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { siteRoot, gettext } from '../../../utils/constants';\n\nconst propTypes = {\n currentItem: PropTypes.string.isRequired,\n groupName: PropTypes.string.isRequired,\n groupID: PropTypes.string.isRequired\n};\n\nclass Nav extends React.Component {\n\n constructor(props) {\n super(props);\n this.navItems = [\n {name: 'repos', urlPart: 'groups/' + this.props.groupID + '/libraries', text: gettext('Libraries')},\n {name: 'members', urlPart: 'groups/' + this.props.groupID + '/members', text: gettext('Members')}\n ];\n }\n\n render() {\n const { groupName, currentItem } = this.props;\n return (\n
    \n
    \n

    {gettext('Groups')} / {groupName}

    \n
    \n
      \n {this.navItems.map((item, index) => {\n return (\n
    • \n {item.text}\n
    • \n );\n })}\n
    \n
    \n );\n }\n}\n\nNav.propTypes = propTypes;\n\nexport default Nav;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { siteRoot, gettext, isPro } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\nimport GroupNav from './group-nav';\n\nconst { enableSysAdminViewRepo } = window.sysadmin.pageOptions;\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n const { loading, errorMsg, items } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No libraries')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {/* icon */}{gettext('Name')}{gettext('Size')}{gettext('Shared By')}{/*Operations*/}
    \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getDeviceErrorsListByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n curPerPage: PropTypes.number,\n pageInfo: PropTypes.object,\n unshareRepo: PropTypes.func.isRequired,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n isUnshareRepoDialogOpen: false\n };\n }\n\n handleMouseEnter = () => {\n this.setState({isOpIconShown: true});\n };\n\n handleMouseLeave = () => {\n this.setState({isOpIconShown: false});\n };\n\n toggleUnshareRepoDialog = (e) => {\n if (e) {\n e.preventDefault();\n }\n this.setState({isUnshareRepoDialogOpen: !this.state.isUnshareRepoDialogOpen});\n };\n\n unshareRepo = () => {\n const { item } = this.props;\n this.props.unshareRepo(item.repo_id, item.name);\n this.toggleUnshareRepoDialog();\n };\n\n renderRepoName = () => {\n const { item } = this.props;\n const repo = item;\n repo.id = item.repo_id;\n if (repo.name) {\n if (isPro && enableSysAdminViewRepo && !repo.encrypted) {\n return {repo.name};\n } else {\n return repo.name;\n }\n } else {\n return '--';\n }\n };\n\n render() {\n let { isOpIconShown, isUnshareRepoDialogOpen } = this.state;\n let { item } = this.props;\n\n let iconUrl = Utils.getLibIconUrl(item);\n let iconTitle = Utils.getLibIconTitle(item);\n\n let repoName = '' + Utils.HTMLescape(item.name) + '';\n let dialogMsg = gettext('Are you sure you want to unshare {placeholder} ?').replace('{placeholder}', repoName);\n\n return (\n \n \n {iconTitle}\n {this.renderRepoName()}\n {Utils.bytesToSize(item.size)}\n \n \n \n \n \n \n \n {isUnshareRepoDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n unshareRepo: PropTypes.func.isRequired,\n};\n\nclass GroupRepos extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n groupName: '',\n repoList: []\n };\n }\n\n componentDidMount () {\n seafileAPI.sysAdminListGroupRepos(this.props.groupID).then((res) => {\n this.setState({\n loading: false,\n repoList: res.data.libraries,\n groupName: res.data.group_name\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n unshareRepo = (repoID, repoName) => {\n seafileAPI.sysAdminUnshareRepoFromGroup(this.props.groupID, repoID).then(res => {\n let newRepoList = this.state.repoList.filter(item => {\n return item.repo_id != repoID;\n });\n this.setState({\n repoList: newRepoList\n });\n const msg = gettext('Successfully unshared library {placeholder}')\n .replace('{placeholder}', repoName);\n toaster.success(msg);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n return (\n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nGroupRepos.propTypes = {\n groupID: PropTypes.string,\n};\n\nexport default GroupRepos;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport UserSelect from '../../user-select';\n\nconst propTypes = {\n toggle: PropTypes.func.isRequired,\n addMembers: PropTypes.func.isRequired\n};\n\nclass SysAdminGroupAddMemberDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selectedOptions: null,\n isSubmitBtnDisabled: true\n };\n }\n\n handleSelectChange = (options) => {\n this.setState({\n selectedOptions: options,\n isSubmitBtnDisabled: !options.length\n });\n };\n\n addMembers = () => {\n let emails = this.state.selectedOptions.map(item => item.email);\n this.props.addMembers(emails);\n this.props.toggle();\n };\n\n render() {\n const { isSubmitBtnDisabled } = this.state;\n return (\n \n {gettext('Add Member')}\n \n \n \n \n \n \n \n \n );\n }\n}\n\nSysAdminGroupAddMemberDialog.propTypes = propTypes;\n\nexport default SysAdminGroupAddMemberDialog;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'reactstrap';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport SysAdminGroupAddMemberDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-group-add-member-dialog';\nimport RoleSelector from '../../../components/single-selector';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\nimport GroupNav from './group-nav';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n toggleItemFreezed = (isFreezed) => {\n this.setState({ isItemFreezed: isFreezed });\n };\n\n getPreviousPageList = () => {\n this.props.getListByPage(this.props.pageInfo.current_page - 1);\n };\n\n getNextPageList = () => {\n this.props.getListByPage(this.props.pageInfo.current_page + 1);\n };\n\n render() {\n const { loading, errorMsg, items, pageInfo, curPerPage } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No members')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {/* icon */}{gettext('Name')}{gettext('Role')}{/*Operations*/}
    \n {pageInfo &&\n \n }\n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n removeMember: PropTypes.func.isRequired,\n resetPerPage: PropTypes.func,\n updateMemberRole: PropTypes.func.isRequired,\n curPerPage: PropTypes.number,\n pageInfo: PropTypes.object,\n getListByPage: PropTypes.func.isRequired,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.roleOptions = [\n { value: 'Admin', text: gettext('Admin'), isSelected: false },\n { value: 'Member', text: gettext('Member'), isSelected: false }\n ];\n this.state = {\n highlighted: false,\n isDeleteDialogOpen: false\n };\n }\n\n handleMouseEnter = () => {\n if (this.props.isItemFreezed) return;\n this.setState({highlighted: true});\n };\n\n handleMouseLeave = () => {\n if (this.props.isItemFreezed) return;\n this.setState({highlighted: false});\n };\n\n toggleDeleteDialog = (e) => {\n if (e) {\n e.preventDefault();\n }\n this.setState({isDeleteDialogOpen: !this.state.isDeleteDialogOpen});\n };\n\n removeMember = () => {\n const { item } = this.props;\n this.props.removeMember(item.email, item.name);\n this.toggleDeleteDialog();\n };\n\n updateMemberRole = (roleOption) => {\n this.props.updateMemberRole(this.props.item.email, roleOption.value);\n };\n\n render() {\n let { highlighted, isDeleteDialogOpen } = this.state;\n let { item } = this.props;\n\n let itemName = '' + Utils.HTMLescape(item.name) + '';\n let dialogMsg = gettext('Are you sure you want to remove {placeholder} ?').replace('{placeholder}', itemName);\n\n const { role: curRole } = item;\n this.roleOptions = this.roleOptions.map(item => {\n item.isSelected = item.value == curRole;\n return item;\n });\n const currentSelectedOption = this.roleOptions.filter(item => item.isSelected)[0];\n\n return (\n \n \n \"\"\n \n \n {item.role == 'Owner' ?\n gettext('Owner') :\n \n }\n \n \n {item.role != 'Owner' &&\n \n }\n \n \n {isDeleteDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n removeMember: PropTypes.func.isRequired,\n updateMemberRole: PropTypes.func.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n toggleItemFreezed: PropTypes.func.isRequired\n};\n\nclass GroupMembers extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n groupName: '',\n memberList: [],\n pageInfo: {},\n currentPage: 1,\n perPage: 25,\n isAddMemberDialogOpen: false\n };\n }\n\n componentDidMount () {\n\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n currentPage: parseInt(urlParams.get('page') || currentPage),\n perPage: parseInt(urlParams.get('per_page') || perPage)\n }, () => {\n this.getListByPage(this.state.currentPage);\n });\n }\n\n getListByPage = (page) => {\n const { perPage } = this.state;\n seafileAPI.sysAdminListGroupMembers(this.props.groupID, page, perPage).then((res) => {\n this.setState({\n loading: false,\n memberList: res.data.members,\n groupName: res.data.group_name,\n pageInfo: res.data.page_info\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n resetPerPage = (perPage) => {\n this.setState({\n perPage: perPage\n }, () => {\n this.getListByPage(1);\n });\n };\n\n toggleAddMemgerDialog = () => {\n this.setState({isAddMemberDialogOpen: !this.state.isAddMemberDialogOpen});\n };\n\n addMembers = (emails) => {\n seafileAPI.sysAdminAddGroupMember(this.props.groupID, emails).then(res => {\n let newMemberList = res.data.success;\n if (newMemberList.length) {\n this.setState({\n memberList: newMemberList.concat(this.state.memberList)\n });\n newMemberList.forEach(item => {\n const msg = gettext('Successfully added {email_placeholder}')\n .replace('{email_placeholder}', item.email);\n toaster.success(msg);\n });\n }\n res.data.failed.forEach(item => {\n const msg = gettext('Failed to add {email_placeholder}: {error_msg_placeholder}')\n .replace('{email_placeholder}', item.email)\n .replace('{error_msg_placeholder}', item.error_msg);\n toaster.danger(msg, {duration: 3});\n });\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n removeMember = (email, name) => {\n seafileAPI.sysAdminDeleteGroupMember(this.props.groupID, email).then(res => {\n let newRepoList = this.state.memberList.filter(item => {\n return item.email != email;\n });\n this.setState({\n memberList: newRepoList\n });\n toaster.success(gettext('Successfully removed {placeholder}.').replace('{placeholder}', name));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n updateMemberRole = (email, role) => {\n let isAdmin = role == 'Admin';\n seafileAPI.sysAdminUpdateGroupMemberRole(this.props.groupID, email, isAdmin).then(res => {\n let newRepoList = this.state.memberList.map(item => {\n if (item.email == email) {\n item.role = role;\n }\n return item;\n });\n this.setState({\n memberList: newRepoList\n });\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n let { isAddMemberDialogOpen } = this.state;\n return (\n \n \n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n {isAddMemberDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nGroupMembers.propTypes = {\n groupID: PropTypes.string,\n};\n\nexport default GroupMembers;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport '../../../css/org-department-item.css';\n\nclass Departments extends React.Component {\n render() {\n return (\n
    \n {this.props.children}\n
    \n );\n }\n}\n\nDepartments.propTypes = {\n children: PropTypes.any.isRequired,\n};\n\nexport default Departments;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, Form, FormGroup, Label } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport { seafileAPI } from '../../../utils/seafile-api';\n\nconst propTypes = {\n groupID: PropTypes.string,\n parentGroupID: PropTypes.string,\n toggle: PropTypes.func.isRequired,\n onAddNewDepartment: PropTypes.func.isRequired\n};\n\nclass AddDepartDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n departName: '',\n errMessage: '',\n };\n }\n\n handleSubmit = () => {\n let isValid = this.validateName();\n if (isValid) {\n let parentGroup = -1;\n if (this.props.parentGroupID) {\n parentGroup = this.props.parentGroupID;\n }\n seafileAPI.sysAdminAddNewDepartment(parentGroup, this.state.departName.trim()).then((res) => {\n this.props.toggle();\n this.props.onAddNewDepartment(res.data);\n }).catch(error => {\n let errorMsg = gettext(error.response.data.error_msg);\n this.setState({ errMessage: errorMsg });\n });\n }\n };\n\n validateName = () => {\n let errMessage = '';\n const name = this.state.departName.trim();\n if (!name.length) {\n errMessage = gettext('Name is required');\n this.setState({ errMessage: errMessage });\n return false;\n }\n return true;\n };\n\n handleChange = (e) => {\n this.setState({\n departName: e.target.value,\n });\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.handleSubmit();\n e.preventDefault();\n }\n };\n\n render() {\n let header = this.props.parentGroupID ? gettext('New Sub-department') : gettext('New Department');\n return (\n \n {header}\n \n
    \n \n \n \n \n
    \n {this.state.errMessage &&

    {this.state.errMessage}

    }\n
    \n \n \n \n \n
    \n );\n }\n}\n\nAddDepartDialog.propTypes = propTypes;\n\nexport default AddDepartDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, Form, FormGroup, Label } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../../components/toast';\n\nconst propTypes = {\n groupID: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]).isRequired,\n name: PropTypes.string.isRequired,\n toggle: PropTypes.func.isRequired,\n onDepartmentNameChanged: PropTypes.func.isRequired\n};\n\nclass RenameDepartmentDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n departmentName: this.props.name,\n errMessage: ''\n };\n this.newInput = React.createRef();\n }\n\n handleSubmit = () => {\n let isValid = this.validateName();\n if (isValid) {\n seafileAPI.sysAdminRenameDepartment(this.props.groupID, this.state.departmentName.trim()).then((res) => {\n this.props.toggle();\n this.props.onDepartmentNameChanged(res.data);\n toaster.success(gettext('Success'));\n }).catch(error => {\n let errorMsg = Utils.getErrorMsg(error);\n this.setState({ errMessage: errorMsg });\n });\n }\n };\n\n validateName = () => {\n let errMessage = '';\n const name = this.state.departmentName.trim();\n if (!name.length) {\n errMessage = gettext('Name is required');\n this.setState({ errMessage: errMessage });\n return false;\n }\n return true;\n };\n\n handleChange = (e) => {\n this.setState({\n departmentName: e.target.value\n });\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.handleSubmit();\n e.preventDefault();\n }\n };\n\n onAfterModelOpened = () => {\n if (!this.newInput.current) return;\n this.newInput.current.focus();\n this.newInput.current.select();\n };\n\n render() {\n let header = gettext('Rename Department');\n return (\n \n {header}\n \n
    \n \n \n \n \n
    \n {this.state.errMessage &&

    {this.state.errMessage}

    }\n
    \n \n \n \n \n
    \n );\n }\n}\n\nRenameDepartmentDialog.propTypes = propTypes;\n\nexport default RenameDepartmentDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../../components/toast';\n\nconst propTypes = {\n group: PropTypes.object.isRequired,\n toggle: PropTypes.func.isRequired,\n onDeleteDepartment: PropTypes.func.isRequired\n};\n\nclass DeleteDepartmentDialog extends React.Component {\n\n constructor(props) {\n super(props);\n }\n\n deleteDepart = () => {\n this.props.toggle();\n const { group } = this.props;\n seafileAPI.sysAdminDeleteDepartment(group.id).then((res) => {\n this.props.onDeleteDepartment(group.id);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const { group } = this.props;\n\n let tipMessage = gettext('Are you sure you want to delete {placeholder} ?');\n tipMessage = tipMessage.replace('{placeholder}', '' + Utils.HTMLescape(group.name) + '');\n return (\n \n {gettext('Delete Department')}\n \n

    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nDeleteDepartmentDialog.propTypes = propTypes;\n\nexport default DeleteDepartmentDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, InputGroupAddon, InputGroup } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../toast';\n\nconst propTypes = {\n toggle: PropTypes.func.isRequired,\n groupID: PropTypes.number.isRequired,\n onSetQuota: PropTypes.func.isRequired,\n};\n\nclass SetGroupQuotaDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n quota: '',\n errMessage: '',\n };\n }\n\n setGroupQuota = () => {\n const numberReg = /^[1-9]\\d*$/im;\n let quota = this.state.quota;\n if ((quota.length && numberReg.test(quota)) || quota == -2) {\n this.setState({ errMessage: '' });\n let newQuota = this.state.quota == -2 ? this.state.quota : this.state.quota * 1000000;\n seafileAPI.sysAdminUpdateDepartmentQuota(this.props.groupID, newQuota).then((res) => {\n this.props.toggle();\n this.props.onSetQuota(res.data);\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n } else {\n const err = gettext('Quota is invalid.');\n this.setState({ errMessage: err });\n }\n };\n\n handleChange = (e) => {\n const quota = e.target.value.trim();\n this.setState({ quota: quota });\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.setGroupQuota();\n e.preventDefault();\n }\n };\n\n render() {\n return (\n \n {gettext('Set Quota')}\n \n \n \n {'MB'}\n \n

    \n
    {gettext('An integer that is greater than 0 or equal to -2.')}
    \n {gettext('Tip: -2 means no limit.')}\n

    \n {this.state.errMessage &&

    {this.state.errMessage}

    }\n
    \n \n \n \n \n
    \n );\n }\n}\n\nSetGroupQuotaDialog.propTypes = propTypes;\n\nexport default SetGroupQuotaDialog;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { Utils } from '../../../utils/utils';\nimport { siteRoot, gettext } from '../../../utils/constants';\nimport OpMenu from '../../../components/dialog/op-menu';\nimport ModalPortal from '../../../components/modal-portal';\nimport RenameDepartmentDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-rename-department-dialog';\nimport DeleteDepartmentDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-delete-department-dialog';\nimport SetGroupQuotaDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-set-group-quota-dialog';\n\nconst GroupItemPropTypes = {\n isItemFreezed: PropTypes.bool.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n group: PropTypes.object.isRequired,\n onDepartmentNameChanged: PropTypes.func.isRequired,\n onDeleteDepartment: PropTypes.func.isRequired,\n onSetDepartmentQuota: PropTypes.func.isRequired\n};\n\nclass GroupItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n highlight: false,\n isSetQuotaDialogOpen: false,\n isDeleteDialogOpen: false,\n isRenameDialogOpen: false\n };\n }\n\n handleMouseOver = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseOut = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false\n });\n this.props.onUnfreezedItem();\n };\n\n translateOperations = (item) => {\n let translateResult = '';\n switch(item) {\n case 'Rename':\n translateResult = gettext('Rename');\n break;\n case 'Delete':\n translateResult = gettext('Delete');\n break;\n default:\n break;\n }\n\n return translateResult;\n };\n\n onMenuItemClick = (operation) => {\n switch(operation) {\n case 'Rename':\n this.toggleRenameDialog();\n break;\n case 'Delete':\n this.toggleDeleteDialog();\n break;\n default:\n break;\n }\n };\n\n toggleRenameDialog = () => {\n this.setState({\n isRenameDialogOpen: !this.state.isRenameDialogOpen\n });\n };\n\n toggleDeleteDialog = () => {\n this.setState({\n isDeleteDialogOpen: !this.state.isDeleteDialogOpen\n });\n };\n\n toggleSetQuotaDialog = () => {\n this.setState({\n isSetQuotaDialogOpen: !this.state.isSetQuotaDialogOpen\n });\n };\n\n render() {\n const { group } = this.props;\n const { highlight, isOpIconShown, isRenameDialogOpen, isDeleteDialogOpen, isSetQuotaDialogOpen } = this.state;\n const newHref = siteRoot+ 'sys/departments/' + group.id + '/';\n return (\n \n \n {group.name}\n {moment(group.created_at).fromNow()}\n \n {Utils.bytesToSize(group.quota)}{' '}\n \n \n \n {isOpIconShown &&\n \n }\n \n \n {isDeleteDialogOpen && (\n \n \n \n )}\n {isSetQuotaDialogOpen && (\n \n \n \n )}\n {isRenameDialogOpen && (\n \n )}\n \n );\n }\n}\n\nGroupItem.propTypes = GroupItemPropTypes;\n\nexport default GroupItem;\n","import React, { Fragment } from 'react';\nimport moment from 'moment';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport ModalPortal from '../../../components/modal-portal';\nimport AddDepartDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-department-dialog';\nimport { gettext, lang } from '../../../utils/constants';\nimport GroupItem from './group-item';\nimport '../../../css/org-department-item.css';\n\nmoment.locale(lang);\n\nclass DepartmentList extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n groups: null,\n groupID: '',\n isShowAddDepartDialog: false,\n isItemFreezed: false\n };\n }\n\n componentDidMount() {\n this.listDepartments();\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n listDepartments = () => {\n seafileAPI.sysAdminListAllDepartments().then(res => {\n this.setState({ groups: res.data.data });\n });\n };\n\n toggleAddDepartDialog = () => {\n this.setState({ isShowAddDepartDialog: !this.state.isShowAddDepartDialog });\n };\n\n onDepartmentNameChanged = (dept) => {\n this.setState({\n groups: this.state.groups.map(item => {\n if (item.id == dept.id) {\n item.name = dept.name;\n }\n return item;\n })\n });\n };\n\n onAddNewDepartment = (newDepartment) => {\n const { groups } = this.state;\n groups.unshift(newDepartment);\n this.setState({\n groups: groups\n });\n };\n\n onDeleteDepartment = (id) => {\n const { groups } = this.state;\n this.setState({\n groups: groups.filter((item) => item.id != id)\n });\n };\n\n onSetDepartmentQuota = (target) => {\n const { groups } = this.state;\n this.setState({\n groups: groups.map((item) => {\n if (item.id == target.id) {\n item.quota = target.quota;\n }\n return item;\n })\n });\n };\n\n render() {\n const groups = this.state.groups;\n const topbarChildren = (\n \n \n {this.state.isShowAddDepartDialog && (\n \n \n \n )}\n \n );\n return (\n \n \n {topbarChildren}\n \n
    \n
    \n
    \n
    \n

    {gettext('Departments')}

    \n
    \n
    \n
    \n {groups && groups.length > 0 ?\n \n \n \n \n \n \n \n \n \n \n {groups.map((group, index) => {\n return(\n \n \n \n );\n })}\n \n
    {gettext('Name')}{gettext('Created At')}{gettext('Quota')}
    \n :\n

    {gettext('No departments')}

    \n }\n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default DepartmentList;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../toast';\nimport UserSelect from '../../user-select';\n\nconst propTypes = {\n toggle: PropTypes.func.isRequired,\n groupID: PropTypes.string.isRequired,\n onAddNewMembers: PropTypes.func.isRequired\n};\n\nclass AddMemberDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selectedOption: null,\n errMessage: '',\n };\n }\n\n handleSelectChange = (option) => {\n this.setState({ selectedOption: option });\n };\n\n handleSubmit = () => {\n if (!this.state.selectedOption) return;\n const emails = this.state.selectedOption.map(item => item.email);\n this.refs.orgSelect.clearSelect();\n this.setState({ errMessage: [] });\n seafileAPI.sysAdminAddGroupMember(this.props.groupID, emails).then((res) => {\n this.setState({ selectedOption: null });\n if (res.data.failed.length > 0) {\n this.setState({ errMessage: res.data.failed[0].error_msg });\n }\n if (res.data.success.length > 0) {\n this.props.onAddNewMembers(res.data.success);\n this.props.toggle();\n }\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n return (\n \n {gettext('Add Member')}\n \n \n { this.state.errMessage &&

    {this.state.errMessage}

    }\n
    \n \n \n \n \n
    \n );\n }\n}\n\nAddMemberDialog.propTypes = propTypes;\n\nexport default AddMemberDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, Form, FormGroup, Label } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { Utils } from '../../../utils/utils';\n\nconst propTypes = {\n toggle: PropTypes.func.isRequired,\n groupID: PropTypes.string,\n onAddNewRepo: PropTypes.func.isRequired\n};\n\nclass AddRepoDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n repoName: '',\n errMessage: '',\n };\n }\n\n handleSubmit = () => {\n let isValid = this.validateName();\n if (isValid) {\n seafileAPI.sysAdminAddRepoInDepartment(this.props.groupID, this.state.repoName.trim()).then((res) => {\n this.props.toggle();\n this.props.onAddNewRepo(res.data);\n }).catch(error => {\n let errorMsg = Utils.getErrorMsg(error);\n this.setState({ errMessage: errorMsg });\n });\n }\n };\n\n validateName = () => {\n let errMessage = '';\n const name = this.state.repoName.trim();\n if (!name.length) {\n errMessage = gettext('Name is required');\n this.setState({ errMessage: errMessage });\n return false;\n }\n return true;\n };\n\n handleChange = (e) => {\n this.setState({\n repoName: e.target.value,\n });\n };\n\n handleKeyDown = (e) => {\n if (e.key === 'Enter') {\n this.handleSubmit();\n e.preventDefault();\n }\n };\n\n render() {\n return (\n \n {gettext('New Library')}\n \n
    \n \n \n \n \n
    \n {this.state.errMessage &&

    {this.state.errMessage}

    }\n
    \n \n \n \n \n
    \n );\n }\n}\n\nAddRepoDialog.propTypes = propTypes;\n\nexport default AddRepoDialog;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../../components/toast';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport ModalPortal from '../../../components/modal-portal';\nimport AddDepartmentDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-department-dialog';\nimport RenameDepartmentDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-rename-department-dialog';\nimport AddMemberDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-member-dialog';\nimport AddRepoDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-repo-dialog';\nimport { siteRoot, gettext, lang } from '../../../utils/constants';\n\nimport '../../../css/org-department-item.css';\n\nmoment.locale(lang);\n\nconst DepartmentDetailPropTypes = {\n groupID: PropTypes.string,\n currentItem: PropTypes.string.isRequired,\n onAddNewDepartment: PropTypes.func,\n onAddNewMembers: PropTypes.func,\n onAddNewRepo: PropTypes.func,\n children: PropTypes.object\n};\n\nclass Department extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n groupName: '',\n ancestorGroups: [],\n isShowAddDepartmentDialog: false,\n isShowAddMemberDialog: false,\n isShowRenameDepartmentDialog: false,\n isShowAddRepoDialog: false\n };\n\n this.navItems = [\n {name: 'subDepartments', urlPart: '/', text: gettext('Sub-departments')},\n {name: 'members', urlPart: '/members/', text: gettext('Members')},\n {name: 'repos', urlPart: '/libraries/', text: gettext('Libraries')}\n ];\n }\n\n componentDidMount() {\n const groupID = this.props.groupID;\n this.getDepartmentInfo(groupID);\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (this.props.groupID !== nextProps.groupID) {\n this.getDepartmentInfo(nextProps.groupID);\n }\n }\n\n getDepartmentInfo = (groupID) => {\n seafileAPI.sysAdminGetDepartmentInfo(groupID, true).then(res => {\n this.setState({\n ancestorGroups: res.data.ancestor_groups,\n groupName: res.data.name,\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onDepartmentNameChanged = (dept) => {\n this.setState({\n groupName: dept.name\n });\n };\n\n toggleRenameDepartmentDialog = () => {\n this.setState({ isShowRenameDepartmentDialog: !this.state.isShowRenameDepartmentDialog });\n };\n\n toggleAddRepoDialog = () => {\n this.setState({ isShowAddRepoDialog: !this.state.isShowAddRepoDialog });\n };\n\n toggleAddMemberDialog = () => {\n this.setState({ isShowAddMemberDialog: !this.state.isShowAddMemberDialog });\n };\n\n toggleAddDepartmentDialog = () => {\n this.setState({ isShowAddDepartmentDialog: !this.state.isShowAddDepartmentDialog});\n };\n\n render() {\n const { groupID, currentItem } = this.props;\n const { groupName } = this.state;\n\n const topBtn = 'btn btn-secondary operation-item';\n const topbarChildren = (\n \n {groupID &&\n \n \n {currentItem == 'subDepartments' && }\n {currentItem == 'members' && }\n {currentItem == 'repos' && }\n \n }\n {this.state.isShowRenameDepartmentDialog && (\n \n \n \n )}\n {this.state.isShowAddMemberDialog && (\n \n \n \n )}\n {this.state.isShowAddRepoDialog && (\n \n \n \n )}\n {this.state.isShowAddDepartmentDialog && (\n \n \n \n )}\n \n );\n\n return (\n \n \n {topbarChildren}\n \n
    \n
    \n
    \n
    \n

    \n {groupID ?\n {gettext('Departments')}\n : {gettext('Departments')}\n }\n {this.state.ancestorGroups.map(ancestor => {\n let newHref = siteRoot + 'sys/departments/' + ancestor.id + '/';\n return {' / '}{ancestor.name};\n })}\n {groupID && {' / '}{groupName}}\n

    \n
    \n
    \n\n
      \n {this.navItems.map((item, index) => {\n return (\n
    • \n {item.text}\n
    • \n );\n })}\n
    \n {this.props.children}\n
    \n
    \n
    \n );\n }\n}\n\nDepartment.propTypes = DepartmentDetailPropTypes;\n\nexport default Department;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../../components/toast';\nimport { gettext, lang } from '../../../utils/constants';\nimport GroupItem from './group-item';\nimport Department from './department';\n\nimport '../../../css/org-department-item.css';\n\nmoment.locale(lang);\n\nconst SubDepartmentsPropTypes = {\n groupID: PropTypes.string\n};\n\nclass SubDepartments extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false,\n groups: []\n };\n }\n\n componentDidMount() {\n this.listSubDepartments(this.props.groupID);\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (this.props.groupID !== nextProps.groupID) {\n this.listSubDepartments(nextProps.groupID);\n }\n }\n\n listSubDepartments = (groupID) => {\n seafileAPI.sysAdminGetDepartmentInfo(groupID, true).then(res => {\n this.setState({groups: res.data.groups});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n onSubDepartmentNameChanged = (dept) => {\n this.setState({\n groups: this.state.groups.map(item => {\n if (item.id == dept.id) {\n item.name = dept.name;\n }\n return item;\n })\n });\n };\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n onAddNewDepartment = (newDepartment) => {\n const { groups } = this.state;\n groups.unshift(newDepartment);\n this.setState({\n groups: groups\n });\n };\n\n onDeleteDepartment = (id) => {\n const { groups } = this.state;\n this.setState({\n groups: groups.filter(item => item.id != id)\n });\n };\n\n onSetDepartmentQuota = (target) => {\n const { groups } = this.state;\n this.setState({\n groups: groups.map((item) => {\n if (item.id == target.id) {\n item.quota = target.quota;\n }\n return item;\n })\n });\n };\n\n render() {\n const { groups } = this.state;\n const { groupID } = this.props;\n\n return (\n \n
    \n {groups && groups.length > 0 ?\n \n \n \n \n \n \n \n \n \n \n {groups.map((group, index) => {\n return(\n \n );\n })}\n \n
    {gettext('Name')}{gettext('Created At')}{gettext('Quota')}
    \n :

    {gettext('No sub-departments')}

    \n }\n
    \n \n );\n }\n}\n\nSubDepartments.propTypes = SubDepartmentsPropTypes;\n\nexport default SubDepartments;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../toast';\n\nconst propTypes = {\n member: PropTypes.object.isRequired,\n groupID: PropTypes.string,\n toggle: PropTypes.func.isRequired,\n onMemberChanged: PropTypes.func.isRequired\n};\n\nclass DeleteMemberDialog extends React.Component {\n\n constructor(props) {\n super(props);\n }\n\n deleteMember = () => {\n const userEmail = this.props.member.email;\n seafileAPI.sysAdminDeleteGroupMember(this.props.groupID, userEmail).then((res) => {\n if (res.data.success) {\n this.props.onMemberChanged();\n this.props.toggle();\n }\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n let tipMessage = gettext('Are you sure you want to delete {placeholder} ?');\n tipMessage = tipMessage.replace('{placeholder}', '' + Utils.HTMLescape(this.props.member.name) + '');\n return (\n \n {gettext('Delete Member')}\n \n
    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nDeleteMemberDialog.propTypes = propTypes;\n\nexport default DeleteMemberDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { Utils } from '../../../utils/utils';\nimport { gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport RoleSelector from '../../../components/single-selector';\nimport UserLink from '../user-link';\n\nconst MemberItemPropTypes = {\n groupID: PropTypes.string,\n member: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onMemberChanged: PropTypes.func.isRequired,\n showDeleteMemberDialog: PropTypes.func.isRequired,\n toggleItemFreezed: PropTypes.func.isRequired,\n};\n\nclass MemberItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n highlight: false\n };\n this.roleOptions = [\n { value: 'Admin', text: gettext('Admin'), isSelected: false },\n { value: 'Member', text: gettext('Member'), isSelected: false }\n ];\n }\n\n onMouseEnter = () => {\n if (this.props.isItemFreezed) return;\n this.setState({ highlight: true });\n };\n\n onMouseLeave = () => {\n if (this.props.isItemFreezed) return;\n this.setState({ highlight: false });\n };\n\n onChangeUserRole = (roleOption) => {\n let isAdmin = roleOption.value === 'Admin' ? true : false;\n seafileAPI.sysAdminUpdateGroupMemberRole(this.props.groupID, this.props.member.email, isAdmin).then((res) => {\n this.props.onMemberChanged();\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n this.setState({\n highlight: false\n });\n };\n\n render() {\n const member = this.props.member;\n const highlight = this.state.highlight;\n if (member.role === 'Owner') return null;\n this.roleOptions = this.roleOptions.map(item => {\n item.isSelected = item.value == member.role;\n return item;\n });\n const currentSelectedOption = this.roleOptions.filter(item => item.isSelected)[0];\n return (\n \n \"member-header\"\n \n \n \n \n \n \n \n \n );\n }\n}\n\nMemberItem.propTypes = MemberItemPropTypes;\n\nexport default MemberItem;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport Paginator from '../../../components/paginator';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { Utils } from '../../../utils/utils';\nimport ModalPortal from '../../../components/modal-portal';\nimport DeleteMemberDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-delete-member-dialog';\nimport { gettext, lang } from '../../../utils/constants';\nimport MemberItem from './member-item';\nimport Department from './department';\nimport '../../../css/org-department-item.css';\n\nmoment.locale(lang);\n\nconst DepartmentMembersPropTypes = {\n groupID: PropTypes.string,\n};\n\nclass DepartmentMembers extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false,\n members: [],\n membersErrorMsg: '',\n currentPageInfo: {\n },\n currentPage: 1,\n perPage: 25,\n deletedMember: {},\n showDeleteMemberDialog: false\n };\n }\n\n componentDidMount() {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n const { groupID } = this.props;\n this.listMembers(groupID, this.state.currentPage, this.state.perPage);\n });\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (this.props.groupID !== nextProps.groupID) {\n this.listMembers(nextProps.groupID, this.state.currentPage, this.state.perPage);\n }\n }\n\n listMembers = (groupID, page, perPage) => {\n seafileAPI.sysAdminListGroupMembers(groupID, page, perPage).then((res) => {\n this.setState({\n members: res.data.members,\n currentPageInfo: res.data.page_info\n });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n this.setState({membersErrorMsg: errMessage});\n });\n };\n\n getPreviousPageList = () => {\n this.listMembers(this.props.groupID, this.state.currentPageInfo.current_page - 1, this.state.perPage);\n };\n\n getNextPageList = () => {\n this.listMembers(this.props.groupID, this.state.currentPageInfo.current_page + 1, this.state.perPage);\n };\n\n resetPerPage = (perPage) => {\n this.setState({\n perPage: perPage\n }, () => {\n this.listMembers(this.props.groupID, 1, perPage);\n });\n };\n\n toggleCancel = () => {\n this.setState({\n showDeleteMemberDialog: false,\n });\n };\n\n onMemberChanged = () => {\n this.listMembers(this.props.groupID, this.state.currentPageInfo.current_page, this.state.perPage);\n };\n\n toggleItemFreezed = (isFreezed) => {\n this.setState({ isItemFreezed: isFreezed });\n };\n\n showDeleteMemberDialog = (member) => {\n this.setState({ showDeleteMemberDialog: true, deletedMember: member });\n };\n\n onAddNewMembers = (newMembers) => {\n const { members } = this.state;\n members.unshift(...newMembers);\n this.setState({ members });\n };\n\n render() {\n const { members, membersErrorMsg } = this.state;\n const { groupID } = this.props;\n\n return (\n \n \n
    \n {membersErrorMsg ?

    {membersErrorMsg}

    :\n members.length == 0 ?\n

    {gettext('No members')}

    :\n \n \n \n \n \n \n \n \n \n \n \n {members.map((member, index) => {\n return (\n \n \n \n );\n })}\n \n
    {gettext('Name')}{gettext('Role')}
    \n {this.state.currentPageInfo &&\n \n }\n
    \n }\n
    \n \n {this.state.showDeleteMemberDialog && (\n \n \n \n )}\n
    \n );\n }\n}\n\nDepartmentMembers.propTypes = DepartmentMembersPropTypes;\n\nexport default DepartmentMembers;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../toast';\n\nclass DeleteRepoDialog extends React.Component {\n\n constructor(props) {\n super(props);\n }\n\n deleteRepo = () => {\n seafileAPI.sysAdminDeleteRepoInDepartment(this.props.groupID, this.props.repo.repo_id).then((res) => {\n if (res.data.success) {\n this.props.onRepoChanged();\n this.props.toggle();\n }\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const { repo } = this.props;\n let tipMessage = gettext('Are you sure you want to delete {placeholder} ?');\n tipMessage = tipMessage.replace('{placeholder}', '' + Utils.HTMLescape(repo.name || repo.repo_name) + '');\n return (\n \n {gettext('Delete Library')}\n \n
    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nconst propTypes = {\n repo: PropTypes.object.isRequired,\n toggle: PropTypes.func.isRequired,\n groupID: PropTypes.string,\n onRepoChanged: PropTypes.func.isRequired\n};\n\nDeleteRepoDialog.propTypes = propTypes;\n\nexport default DeleteRepoDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Utils } from '../../../utils/utils';\nimport { siteRoot, gettext } from '../../../utils/constants';\n\nconst { enableSysAdminViewRepo } = window.sysadmin.pageOptions;\n\nconst RepoItemPropTypes = {\n repo: PropTypes.object.isRequired,\n showDeleteRepoDialog: PropTypes.func.isRequired\n};\n\nclass RepoItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n highlight: false\n };\n }\n\n onMouseEnter = () => {\n this.setState({ highlight: true });\n };\n\n onMouseLeave = () => {\n this.setState({ highlight: false });\n };\n\n render() {\n const { repo } = this.props;\n const repoName = repo.name || repo.repo_name;\n const highlight = this.state.highlight;\n let iconUrl = Utils.getLibIconUrl(repo);\n return (\n \n {gettext('icon')}/\n { enableSysAdminViewRepo ?\n {repoName}\n :\n {repoName}\n }\n {Utils.bytesToSize(repo.size)}\n \n \n \n \n );\n }\n}\n\nRepoItem.propTypes = RepoItemPropTypes;\n\nexport default RepoItem;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../../components/toast';\nimport ModalPortal from '../../../components/modal-portal';\nimport DeleteRepoDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-delete-repo-dialog';\nimport { gettext, lang } from '../../../utils/constants';\nimport RepoItem from './repo-item';\nimport Department from './department';\nimport '../../../css/org-department-item.css';\n\nmoment.locale(lang);\n\nconst DepartmentDetailPropTypes = {\n groupID: PropTypes.string,\n};\n\nclass DepartmentDetail extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n repos: [],\n deletedRepo: {},\n showDeleteRepoDialog: false\n };\n }\n\n componentDidMount() {\n const { groupID } = this.props;\n this.listGroupRepo(groupID);\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (this.props.groupID !== nextProps.groupID) {\n this.listGroupRepo(nextProps.groupID);\n }\n }\n\n listGroupRepo = (groupID) => {\n seafileAPI.sysAdminListGroupRepos(groupID).then(res => {\n this.setState({ repos: res.data.libraries });\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n toggleCancel = () => {\n this.setState({\n showDeleteRepoDialog: false\n });\n };\n\n onRepoChanged = () => {\n this.listGroupRepo(this.props.groupID);\n };\n\n showDeleteRepoDialog = (repo) => {\n this.setState({ showDeleteRepoDialog: true, deletedRepo: repo });\n };\n\n onAddNewRepo = (newRepo) => {\n const { repos } = this.state;\n repos.unshift(newRepo);\n this.setState({ repos });\n };\n\n render() {\n const { repos } = this.state;\n const { groupID } = this.props;\n\n return (\n \n \n {repos.length > 0 ?\n
    \n \n \n \n \n \n \n \n \n \n \n {repos.map((repo, index) => {\n return (\n \n );\n })}\n \n
    {gettext('Name')}{gettext('Size')}
    \n
    \n :

    {gettext('No libraries')}

    \n }\n
    \n {this.state.showDeleteRepoDialog && (\n \n \n \n )}\n
    \n );\n }\n}\n\nDepartmentDetail.propTypes = DepartmentDetailPropTypes;\n\nexport default DepartmentDetail;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { siteRoot, gettext } from '../../../utils/constants';\n\nconst propTypes = {\n currentItem: PropTypes.string.isRequired\n};\n\nclass Nav extends React.Component {\n\n constructor(props) {\n super(props);\n this.navItems = [\n {name: 'shareLinks', urlPart:'share-links', text: gettext('Share Links')},\n {name: 'uploadLinks', urlPart:'upload-links', text: gettext('Upload Links')},\n ];\n }\n\n render() {\n const { currentItem } = this.props;\n return (\n
    \n
      \n {this.navItems.map((item, index) => {\n return (\n
    • \n {item.text}\n
    • \n );\n })}\n
    \n
    \n );\n }\n}\n\nNav.propTypes = propTypes;\n\nexport default Nav;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { navigate } from '@gatsbyjs/reach-router';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport { Utils } from '../../../utils/utils';\nimport EmptyTip from '../../../components/empty-tip';\nimport moment from 'moment';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport LinksNav from './links-nav';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n }\n\n getPreviousPage = () => {\n this.props.getShareLinksByPage(this.props.currentPage - 1);\n };\n\n getNextPage = () => {\n this.props.getShareLinksByPage(this.props.currentPage + 1);\n };\n\n sortByTime = (e) => {\n e.preventDefault();\n this.props.sortItems('ctime');\n };\n\n sortByCount = (e) => {\n e.preventDefault();\n this.props.sortItems('view_cnt');\n };\n\n render() {\n const {\n loading, errorMsg, items,\n perPage, currentPage, hasNextPage,\n sortBy, sortOrder\n } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No share links')}

    \n
    \n );\n\n const initialSortIcon = ;\n const sortIcon = ;\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n \n {items &&\n \n {items.map((item, index) => {\n return ();\n })}\n \n }\n
    {gettext('Name')}{gettext('Token')}{gettext('Owner')}\n {gettext('Created At')} {sortBy == 'ctime' ? sortIcon : initialSortIcon}\n \n {gettext('Count')} {sortBy == 'view_cnt' ? sortIcon : initialSortIcon}\n {gettext('Expiration')}{/*Operations*/}
    \n \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getLogsByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n currentPage: PropTypes.number,\n perPage: PropTypes.number,\n pageInfo: PropTypes.object,\n hasNextPage: PropTypes.bool,\n getShareLinksByPage: PropTypes.func.isRequired,\n sortItems: PropTypes.func.isRequired,\n sortBy: PropTypes.string.isRequired,\n sortOrder: PropTypes.string.isRequired,\n deleteShareLink: PropTypes.func.isRequired,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n };\n }\n\n handleMouseOver = () => {\n this.setState({\n isOpIconShown: true\n });\n };\n\n handleMouseOut = () => {\n this.setState({\n isOpIconShown: false\n });\n };\n\n deleteShareLink = () => {\n this.props.deleteShareLink(this.props.item.token);\n };\n\n renderExpiration = () => {\n const item = this.props.item;\n if (!item.expire_date) {\n return '--';\n }\n const expire_date = moment(item.expire_date).format('YYYY-MM-DD');\n const expire_time = moment(item.expire_date).format('YYYY-MM-DD HH:mm:ss');\n return ({expire_date});\n };\n\n render() {\n let { isOpIconShown } = this.state;\n let { item } = this.props;\n let deleteIcon = `action-icon sf2-icon-delete ${isOpIconShown ? '' : 'invisible'}`;\n return (\n \n {item.obj_name}\n {item.token}\n \n {moment(item.ctime).fromNow()}\n {item.view_cnt}\n {this.renderExpiration()}\n \n \n \n \n );\n }\n}\n\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n deleteShareLink: PropTypes.func.isRequired,\n};\n\nclass ShareLinks extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n shareLinkList: [],\n perPage: 25,\n currentPage: 1,\n hasNextPage: false,\n sortBy: '',\n sortOrder: 'asc'\n };\n this.initPage = 1;\n }\n\n componentDidMount () {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage, sortBy, sortOrder } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage),\n sortBy: urlParams.get('order_by') || sortBy,\n sortOrder: urlParams.get('direction') || sortOrder\n }, () => {\n this.getShareLinksByPage(this.state.currentPage);\n });\n }\n\n getShareLinksByPage = (page) => {\n const { perPage, sortBy, sortOrder } = this.state;\n seafileAPI.sysAdminListShareLinks(page, perPage, sortBy, sortOrder).then((res) => {\n this.setState({\n shareLinkList: res.data.share_link_list,\n loading: false,\n currentPage: page,\n hasNextPage: Utils.hasNextPage(page, perPage, res.data.count),\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n sortItems = (sortBy) => {\n this.setState({\n currentPage: 1,\n sortBy: sortBy,\n sortOrder: this.state.sortOrder == 'asc' ? 'desc' : 'asc'\n }, () => {\n let url = new URL(location.href);\n let searchParams = new URLSearchParams(url.search);\n const { currentPage, sortBy, sortOrder } = this.state;\n searchParams.set('page', currentPage);\n searchParams.set('order_by', sortBy);\n searchParams.set('direction', sortOrder);\n url.search = searchParams.toString();\n navigate(url.toString());\n this.getShareLinksByPage(currentPage);\n });\n };\n\n deleteShareLink = (linkToken) => {\n seafileAPI.sysAdminDeleteShareLink(linkToken).then(res => {\n let newShareLinkList = this.state.shareLinkList.filter(item =>\n item.token != linkToken\n );\n this.setState({shareLinkList: newShareLinkList});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n resetPerPage = (newPerPage) => {\n this.setState({\n perPage: newPerPage,\n }, () => this.getShareLinksByPage(this.initPage));\n };\n\n render() {\n let { shareLinkList, currentPage, perPage, hasNextPage } = this.state;\n return (\n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default ShareLinks;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport { Utils } from '../../../utils/utils';\nimport EmptyTip from '../../../components/empty-tip';\nimport moment from 'moment';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport LinksNav from './links-nav';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\n\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n }\n\n getPreviousPage = () => {\n this.props.getUploadLinksByPage(this.props.currentPage - 1);\n };\n\n getNextPage = () => {\n this.props.getUploadLinksByPage(this.props.currentPage + 1);\n };\n\n render() {\n const { loading, errorMsg, items, perPage, currentPage, hasNextPage } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No upload links')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n \n {items &&\n \n {items.map((item, index) => {\n return ();\n })}\n \n }\n
    {gettext('Name')}{gettext('Token')}{gettext('Owner')}{gettext('Created At')}{gettext('Count')}{gettext('Expiration')}{/*Operations*/}
    \n \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getLogsByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n currentPage: PropTypes.number,\n perPage: PropTypes.number,\n pageInfo: PropTypes.object,\n hasNextPage: PropTypes.bool,\n getUploadLinksByPage: PropTypes.func.isRequired,\n deleteUploadLink: PropTypes.func.isRequired,\n};\n\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n };\n }\n\n handleMouseOver = () => {\n this.setState({\n isOpIconShown: true\n });\n };\n\n handleMouseOut = () => {\n this.setState({\n isOpIconShown: false\n });\n };\n\n deleteUploadLink = () => {\n this.props.deleteUploadLink(this.props.item.token);\n };\n\n renderExpiration = () => {\n let item = this.props.item;\n if (!item.expire_date) {\n return '--';\n }\n const expire_date = moment(item.expire_date).format('YYYY-MM-DD');\n const expire_time = moment(item.expire_date).format('YYYY-MM-DD HH:mm:ss');\n return ({expire_date});\n };\n\n render() {\n let { isOpIconShown } = this.state;\n let { item } = this.props;\n let deleteIcon = `action-icon sf2-icon-delete ${isOpIconShown ? '' : 'invisible'}`;\n return (\n \n \n {item.path}\n {item.token}\n \n {moment(item.ctime).fromNow()}\n {item.view_cnt}\n {this.renderExpiration()}\n \n \n \n \n \n );\n }\n}\n\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n deleteUploadLink: PropTypes.func.isRequired,\n};\n\n\nclass UploadLinks extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n uploadLinkList: [],\n perPage: 25,\n currentPage: 1,\n hasNextPage: false,\n };\n this.initPage = 1;\n }\n\n componentDidMount() {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getUploadLinksByPage(this.state.currentPage);\n });\n }\n\n getUploadLinksByPage = (page) => {\n let { perPage } = this.state;\n seafileAPI.sysAdminListAllUploadLinks(page, perPage).then((res) => {\n this.setState({\n uploadLinkList: res.data.upload_link_list,\n loading: false,\n currentPage: page,\n hasNextPage: Utils.hasNextPage(page, perPage, res.data.count),\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n deleteUploadLink = (linkToken) => {\n seafileAPI.sysAdminDeleteUploadLink(linkToken).then(res => {\n let newUploadLinkList = this.state.uploadLinkList.filter(item =>\n item.token != linkToken\n );\n this.setState({uploadLinkList: newUploadLinkList});\n }).catch(error => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n resetPerPage = (newPerPage) => {\n this.setState({\n perPage: newPerPage,\n }, () => this.getUploadLinksByPage(this.initPage));\n };\n\n render() {\n let { uploadLinkList, currentPage, perPage, hasNextPage } = this.state;\n return (\n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default UploadLinks;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Alert, Modal, ModalHeader, ModalBody, ModalFooter, Button, Form, FormGroup, Label, Input } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\n\nconst propTypes = {\n toggleDialog: PropTypes.func.isRequired,\n addOrg: PropTypes.func.isRequired\n};\n\nclass SysAdminAddOrgDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: '',\n email: '',\n password: '',\n passwordAgain: '',\n errorMsg: '',\n isSubmitBtnActive: false\n };\n }\n\n checkSubmitBtnActive = () => {\n const { name, email, password, passwordAgain } = this.state;\n let btnActive = true;\n if (name.trim() !='' &&\n email.trim() != '' &&\n password.trim() != '' &&\n passwordAgain.trim() != '') {\n btnActive = true;\n } else {\n btnActive = false;\n }\n this.setState({\n isSubmitBtnActive: btnActive\n });\n };\n\n toggle = () => {\n this.props.toggleDialog();\n };\n\n inputPassword = (e) => {\n let passwd = e.target.value;\n this.setState({\n password: passwd\n }, this.checkSubmitBtnActive);\n };\n\n inputPasswordAgain = (e) => {\n let passwd = e.target.value;\n this.setState({\n passwordAgain: passwd\n }, this.checkSubmitBtnActive);\n };\n\n inputEmail = (e) => {\n let email = e.target.value;\n this.setState({\n email: email\n }, this.checkSubmitBtnActive);\n };\n\n inputName = (e) => {\n let name = e.target.value;\n this.setState({\n name: name\n }, this.checkSubmitBtnActive);\n };\n\n handleSubmit = () => {\n let { name, email, password, passwordAgain } = this.state;\n if (password != passwordAgain) {\n this.setState({errorMsg: gettext('Passwords do not match.')});\n return;\n }\n const data = {\n orgName: name.trim(),\n ownerEmail: email.trim(),\n password: password.trim()\n };\n this.props.addOrg(data);\n this.toggle();\n };\n\n render() {\n const { errorMsg, password, passwordAgain, email, name, isSubmitBtnActive } = this.state;\n return (\n \n {gettext('Add Organization')}\n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n {errorMsg && {errorMsg}}\n
    \n \n \n \n \n
    \n );\n }\n}\n\nSysAdminAddOrgDialog.propTypes = propTypes;\n\nexport default SysAdminAddOrgDialog;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport moment from 'moment';\nimport { Utils } from '../../../utils/utils';\nimport { siteRoot, gettext } from '../../../utils/constants';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport RoleSelector from '../../../components/single-selector';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport UserLink from '../user-link';\nimport toaster from '../../../components/toast';\n\nconst { availableRoles } = window.sysadmin.pageOptions;\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n toggleItemFreezed = (isFreezed) => {\n this.setState({ isItemFreezed: isFreezed });\n };\n\n getPreviousPage = () => {\n this.props.getListByPage(this.props.currentPage - 1);\n };\n\n getNextPage = () => {\n this.props.getListByPage(this.props.currentPage + 1);\n };\n\n render() {\n const { loading, errorMsg, items } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No organizations')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('Name')}{gettext('Creator')}{gettext('Role')}{gettext('Space Used')}{gettext('Created At')}{/* Operations */}
    \n {this.props.currentPage &&\n \n }\n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n getListByPage: PropTypes.func.isRequired,\n currentPage: PropTypes.number,\n items: PropTypes.array.isRequired,\n updateRole: PropTypes.func.isRequired,\n deleteOrg: PropTypes.func.isRequired,\n hasNextPage: PropTypes.bool,\n resetPerPage: PropTypes.func,\n curPerPage: PropTypes.number,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n highlighted: false,\n isDeleteDialogOpen: false,\n deleteDialogMsg: '',\n };\n }\n\n handleMouseEnter = () => {\n if (this.props.isItemFreezed) return;\n this.setState({highlighted: true});\n };\n\n handleMouseLeave = () => {\n if (this.props.isItemFreezed) return;\n this.setState({highlighted: false});\n };\n\n toggleDeleteDialog = (e) => {\n if (e) {\n e.preventDefault();\n }\n this.setState({isDeleteDialogOpen: !this.state.isDeleteDialogOpen}, () => {\n if (this.state.isDeleteDialogOpen) {\n seafileAPI.sysAdminGetOrg(this.props.item.org_id).then((res) => {\n let orgName = '' + Utils.HTMLescape(res.data.org_name) + '';\n let userCount = '' + Utils.HTMLescape(res.data.users_count) + '';\n let repoCount = '' + Utils.HTMLescape(res.data.repos_count) + '';\n let deleteDialogMsg = gettext('Are you sure you want to delete {placeholder} ?')\n .replace('{placeholder}', orgName) + '
    ' +\n gettext('{userCount} user(s) and {repoCount} libraries of this organization will also be deleted.')\n .replace('{userCount}', userCount)\n .replace('{repoCount}', repoCount);\n this.setState({deleteDialogMsg: deleteDialogMsg});\n }).catch(error => {\n let errorMsg = Utils.getErrorMsg(error);\n toaster.danger(errorMsg);\n });\n }\n });\n };\n\n translateRole = (role) => {\n switch (role) {\n case 'default':\n return gettext('Default');\n case 'guest':\n return gettext('Guest');\n default:\n return role;\n }\n };\n\n updateRole = (roleOption) => {\n this.props.updateRole(this.props.item.org_id, roleOption.value);\n };\n\n deleteOrg = () => {\n toaster.notify(gettext('It may take some time, please wait.'));\n this.props.deleteOrg(this.props.item.org_id);\n };\n\n render() {\n const { item } = this.props;\n const { highlighted, isDeleteDialogOpen, deleteDialogMsg } = this.state;\n\n const { role: curRole } = item;\n this.roleOptions = availableRoles.map(item => {\n return {\n value: item,\n text: this.translateRole(item),\n isSelected: item == curRole\n };\n });\n const currentSelectedOption = this.roleOptions.filter(item => item.isSelected)[0];\n\n return (\n \n \n {item.org_name}\n \n \n \n \n \n \n {`${Utils.bytesToSize(item.quota_usage)} / ${item.quota > 0 ? Utils.bytesToSize(item.quota) : '--'}`}\n {moment(item.ctime).format('YYYY-MM-DD HH:mm:ss')}\n \n \n \n \n {isDeleteDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n updateRole: PropTypes.func.isRequired,\n deleteOrg: PropTypes.func.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n toggleItemFreezed: PropTypes.func.isRequired\n};\n\nexport default Content;\n","import React, { Component, Fragment } from 'react';\nimport { navigate } from '@gatsbyjs/reach-router';\nimport { Button } from 'reactstrap';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { siteRoot, gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport SysAdminAddOrgDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-org-dialog';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Search from '../search';\nimport Content from './orgs-content';\n\n\nclass Orgs extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n orgList: [],\n currentPage: 1,\n perPage: 25,\n hasNextPage: false,\n isAddOrgDialogOpen: false\n };\n }\n\n componentDidMount() {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getItemsByPage(this.state.currentPage);\n });\n }\n\n getItemsByPage = (page) => {\n const { perPage } = this.state;\n seafileAPI.sysAdminListOrgs(page, perPage).then((res) => {\n this.setState({\n loading: false,\n orgList: res.data.organizations,\n currentPage: page,\n hasNextPage: Utils.hasNextPage(page, perPage, res.data.total_count)\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n resetPerPage = (perPage) => {\n this.setState({\n perPage: perPage\n }, () => {\n this.getItemsByPage(1);\n });\n };\n\n toggleAddOrgDialog = () => {\n this.setState({isAddOrgDialogOpen: !this.state.isAddOrgDialogOpen});\n };\n\n updateRole = (orgID, role) => {\n let orgInfo = {};\n orgInfo.role = role;\n seafileAPI.sysAdminUpdateOrg(orgID, orgInfo).then(res => {\n let newOrgList = this.state.orgList.map(org => {\n if (org.org_id == orgID) {\n org.role = role;\n }\n return org;\n });\n this.setState({orgList: newOrgList});\n toaster.success(gettext('Edit succeeded'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n addOrg = (data) => {\n const { orgName, ownerEmail, password } = data;\n seafileAPI.sysAdminAddOrg(orgName, ownerEmail, password).then(res => {\n let orgList = this.state.orgList;\n orgList.unshift(res.data);\n this.setState({orgList: orgList});\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n deleteOrg = (orgID) => {\n seafileAPI.sysAdminDeleteOrg(orgID).then(res => {\n let orgList = this.state.orgList.filter(org => {\n return org.org_id != orgID;\n });\n this.setState({orgList: orgList});\n toaster.success(gettext('Successfully deleted 1 item.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n getSearch = () => {\n return ;\n };\n\n searchItems = (keyword) => {\n navigate(`${siteRoot}sys/search-organizations/?query=${encodeURIComponent(keyword)}`);\n };\n\n render() {\n const { isAddOrgDialogOpen } = this.state;\n return (\n \n \n \n \n
    \n
    \n
    \n

    {gettext('Organizations')}

    \n
    \n
    \n \n
    \n
    \n
    \n {isAddOrgDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nexport default Orgs;\n","import React, { Component, Fragment } from 'react';\nimport { Form, FormGroup, Input, Label, Col } from 'reactstrap';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Content from './orgs-content';\n\n\nclass SearchOrgs extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n query: '',\n isSubmitBtnActive: false,\n loading: true,\n errorMsg: '',\n orgList: []\n };\n }\n\n componentDidMount () {\n let params = (new URL(document.location)).searchParams;\n this.setState({\n query: params.get('query') || ''\n }, this.getItems);\n }\n\n getItems = () => {\n seafileAPI.sysAdminSearchOrgs(this.state.query.trim()).then(res => {\n this.setState({\n loading: false,\n orgList: res.data.organization_list\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n updateRole = (orgID, role) => {\n let orgInfo = {};\n orgInfo.role = role;\n seafileAPI.sysAdminUpdateOrg(orgID, orgInfo).then(res => {\n let newOrgList = this.state.orgList.map(org => {\n if (org.org_id == orgID) {\n org.role = role;\n }\n return org;\n });\n this.setState({orgList: newOrgList});\n toaster.success(gettext('Edit succeeded'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n deleteOrg = (orgID) => {\n seafileAPI.sysAdminDeleteOrg(orgID).then(res => {\n let orgList = this.state.orgList.filter(org => {\n return org.org_id != orgID;\n });\n this.setState({orgList: orgList});\n toaster.success(gettext('Successfully deleted 1 item.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n handleInputChange = (e) => {\n this.setState({\n query: e.target.value\n }, this.checkSubmitBtnActive);\n };\n\n checkSubmitBtnActive = () => {\n const { query } = this.state;\n this.setState({\n isSubmitBtnActive: query.trim()\n });\n };\n\n handleKeyDown = (e) => {\n if (e.keyCode === 13) {\n const { isSubmitBtnActive } = this.state;\n if (isSubmitBtnActive) {\n this.getItems();\n }\n }\n };\n\n render() {\n const { query, isSubmitBtnActive } = this.state;\n return (\n \n \n
    \n
    \n
    \n

    {gettext('Organizations')}

    \n
    \n
    \n
    \n

    {gettext('Search Organizations')}

    \n

    {gettext('Tip: you can search by keyword in name.')}

    \n
    \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n

    {gettext('Result')}

    \n \n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default SearchOrgs;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button, Form, FormGroup, Input } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\n\nconst propTypes = {\n name: PropTypes.string.isRequired,\n toggle: PropTypes.func.isRequired,\n updateName: PropTypes.func.isRequired\n};\n\nclass SysAdminSetOrgNameDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n name: this.props.name,\n isSubmitBtnActive: false\n };\n }\n\n toggle = () => {\n this.props.toggle();\n };\n\n handleInputChange = (e) => {\n const value = e.target.value;\n this.setState({\n name: value,\n isSubmitBtnActive: value.trim() != ''\n });\n };\n\n handleKeyDown = (e) => {\n if (e.key == 'Enter') {\n this.handleSubmit();\n e.preventDefault();\n }\n };\n\n handleSubmit = () => {\n this.props.updateName(this.state.name.trim());\n this.toggle();\n };\n\n render() {\n const { name, isSubmitBtnActive } = this.state;\n return (\n \n {gettext('Set Name')}\n \n
    \n \n \n \n
    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nSysAdminSetOrgNameDialog.propTypes = propTypes;\n\nexport default SysAdminSetOrgNameDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody, ModalFooter, Button, Form, FormGroup, Input } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\n\nconst propTypes = {\n value: PropTypes.string.isRequired,\n toggle: PropTypes.func.isRequired,\n updateValue: PropTypes.func.isRequired\n};\n\nclass SysAdminSetOrgMaxUserNumberDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n value: this.props.value,\n isSubmitBtnActive: false\n };\n }\n\n toggle = () => {\n this.props.toggle();\n };\n\n handleInputChange = (e) => {\n const value = e.target.value;\n this.setState({\n value: value,\n isSubmitBtnActive: value.trim() != ''\n });\n };\n\n handleKeyDown = (e) => {\n if (e.key == 'Enter') {\n this.handleSubmit();\n e.preventDefault();\n }\n };\n\n handleSubmit = () => {\n this.props.updateValue(this.state.value.trim());\n this.toggle();\n };\n\n render() {\n const { value, isSubmitBtnActive } = this.state;\n return (\n \n {gettext('Set max number of members')}\n \n
    \n \n \n \n
    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nSysAdminSetOrgMaxUserNumberDialog.propTypes = propTypes;\n\nexport default SysAdminSetOrgMaxUserNumberDialog;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { siteRoot, gettext } from '../../../utils/constants';\n\nconst propTypes = {\n orgID: PropTypes.string,\n orgName: PropTypes.string.isRequired,\n currentItem: PropTypes.string.isRequired\n};\n\nclass Nav extends React.Component {\n\n constructor(props) {\n super(props);\n this.navItems = [\n {name: 'info', urlPart: 'info', text: gettext('Info')},\n {name: 'users', urlPart: 'users', text: gettext('Members')},\n {name: 'groups', urlPart: 'groups', text: gettext('Groups')},\n {name: 'repos', urlPart: 'libraries', text: gettext('Libraries')},\n //{name: 'traffic', urlPart: 'traffic', text: gettext('traffic')},\n //{name: 'settings', urlPart: 'settings', text: gettext('Settings')}\n ];\n }\n\n render() {\n const { currentItem, orgID, orgName } = this.props;\n return (\n
    \n
    \n

    {gettext('Organizations')} / {orgName}

    \n
    \n
      \n {this.navItems.map((item, index) => {\n return (\n
    • \n {item.text}\n
    • \n );\n })}\n
    \n
    \n );\n }\n}\n\nNav.propTypes = propTypes;\n\nexport default Nav;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Row, Col } from 'reactstrap';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext, serviceURL } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport Loading from '../../../components/loading';\nimport SysAdminSetOrgQuotaDialog from '../../../components/dialog/sysadmin-dialog/set-quota';\nimport SysAdminSetOrgNameDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-set-org-name-dialog';\nimport SysAdminSetOrgMaxUserNumberDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-set-org-max-user-number-dialog';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport OrgNav from './org-nav';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isSetQuotaDialogOpen: false,\n isSetNameDialogOpen: false,\n isSetMaxUserNumberDialogOpen: false\n };\n }\n\n toggleSetQuotaDialog = () => {\n this.setState({isSetQuotaDialogOpen: !this.state.isSetQuotaDialogOpen});\n };\n\n toggleSetNameDialog = () => {\n this.setState({isSetNameDialogOpen: !this.state.isSetNameDialogOpen});\n };\n\n toggleSetMaxUserNumberDialog = () => {\n this.setState({isSetMaxUserNumberDialogOpen: !this.state.isSetMaxUserNumberDialogOpen});\n };\n\n showEditIcon = (action) => {\n return (\n \n \n );\n };\n\n render() {\n const { loading, errorMsg } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const { org_name, users_count, max_user_number, groups_count, quota, quota_usage, enable_saml_login, url_prefix, metadata_url, domain } = this.props.orgInfo;\n const { isSetQuotaDialogOpen, isSetNameDialogOpen, isSetMaxUserNumberDialogOpen } = this.state;\n return (\n \n
    \n
    {gettext('Name')}
    \n
    \n {org_name}\n {this.showEditIcon(this.toggleSetNameDialog)}\n
    \n\n
    {gettext('Number of members')}
    \n
    {users_count}
    \n\n {max_user_number &&\n \n
    {gettext('Max number of members')}
    \n
    \n {max_user_number}\n {this.showEditIcon(this.toggleSetMaxUserNumberDialog)}\n
    \n
    \n }\n\n
    {gettext('Number of groups')}
    \n
    {groups_count}
    \n\n
    {gettext('Space Used')}
    \n
    \n {`${Utils.bytesToSize(quota_usage)} / ${quota > 0 ? Utils.bytesToSize(quota) : '--'}`}\n {this.showEditIcon(this.toggleSetQuotaDialog)}\n
    \n {enable_saml_login &&\n \n
    {gettext('SAML Config')}
    \n
    \n \n {gettext('Custom SAML Login URL')}\n {`${serviceURL}/org/custom/${url_prefix}`}\n \n
    \n
    \n \n {gettext('App Federation Metadata URL')}\n {metadata_url}\n \n
    \n
    \n \n {gettext('Email Domain')}\n {domain}\n \n
    \n
    \n }\n
    \n {isSetQuotaDialogOpen &&\n \n }\n {isSetNameDialogOpen &&\n \n }\n {isSetMaxUserNumberDialogOpen &&\n \n }\n
    \n );\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getDeviceErrorsListByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n curPerPage: PropTypes.number,\n orgInfo: PropTypes.object,\n updateQuota: PropTypes.func.isRequired,\n updateName: PropTypes.func.isRequired,\n updateMaxUserNumber: PropTypes.func.isRequired,\n};\n\nclass OrgInfo extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n orgInfo: {}\n };\n }\n\n componentDidMount () {\n seafileAPI.sysAdminGetOrg(this.props.orgID).then((res) => {\n this.setState({\n loading: false,\n orgInfo: res.data\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n updateQuota = (quota) => {\n const data = {quota: quota};\n seafileAPI.sysAdminUpdateOrg(this.props.orgID, data).then(res => {\n const newOrgInfo = Object.assign(this.state.orgInfo, {\n quota: res.data.quota\n });\n this.setState({orgInfo: newOrgInfo});\n toaster.success(gettext('Successfully set quota.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n updateName = (orgName) => {\n const data = {orgName: orgName};\n seafileAPI.sysAdminUpdateOrg(this.props.orgID, data).then(res => {\n const newOrgInfo = Object.assign(this.state.orgInfo, {\n org_name: res.data.org_name\n });\n this.setState({orgInfo: newOrgInfo});\n toaster.success(gettext('Successfully set name.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n updateMaxUserNumber = (newValue) => {\n const data = {maxUserNumber: newValue};\n seafileAPI.sysAdminUpdateOrg(this.props.orgID, data).then(res => {\n const newOrgInfo = Object.assign(this.state.orgInfo, {\n max_user_number: res.data.max_user_number\n });\n this.setState({orgInfo: newOrgInfo});\n toaster.success(gettext('Successfully set max number of members.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const { orgInfo } = this.state;\n return (\n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nOrgInfo.propTypes = {\n orgID: PropTypes.string,\n orgInfo: PropTypes.object,\n};\n\nexport default OrgInfo;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'reactstrap';\nimport moment from 'moment';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext, username } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport Selector from '../../../components/single-selector';\nimport SysAdminAddUserDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-user-dialog';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport OpMenu from '../../../components/dialog/op-menu';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\nimport OrgNav from './org-nav';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n toggleItemFreezed = (isFreezed) => {\n this.setState({ isItemFreezed: isFreezed });\n };\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n render() {\n const { loading, errorMsg, items } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No members')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('Name')}{gettext('Status')}{gettext('Membership')}{gettext('Space Used')}{gettext('Created At')}{' / '}{gettext('Last Login')}{/* Operations */}
    \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n updateStatus: PropTypes.func.isRequired,\n updateMembership: PropTypes.func.isRequired,\n deleteUser: PropTypes.func.isRequired,\n};\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n highlight: false,\n isDeleteDialogOpen: false,\n isResetPasswordDialogOpen: false\n };\n }\n\n handleMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false\n });\n this.props.onUnfreezedItem();\n };\n\n onMenuItemClick = (operation) => {\n switch(operation) {\n case 'Delete':\n this.toggleDeleteDialog();\n break;\n case 'Reset Password':\n this.toggleResetPasswordDialog();\n break;\n default:\n break;\n }\n };\n\n toggleDeleteDialog = (e) => {\n if (e) {\n e.preventDefault();\n }\n this.setState({isDeleteDialogOpen: !this.state.isDeleteDialogOpen});\n };\n\n toggleResetPasswordDialog = (e) => {\n if (e) {\n e.preventDefault();\n }\n this.setState({isResetPasswordDialogOpen: !this.state.isResetPasswordDialogOpen});\n };\n\n updateStatus= (statusOption) => {\n this.props.updateStatus(this.props.item.email, statusOption.value);\n };\n\n updateMembership= (membershipOption) => {\n this.props.updateMembership(this.props.item.email, membershipOption.value);\n };\n\n deleteUser = () => {\n const { item } = this.props;\n this.props.deleteUser(item.org_id, item.email);\n };\n\n resetPassword = () => {\n seafileAPI.sysAdminResetUserPassword(this.props.item.email).then(res => {\n toaster.success(res.data.reset_tip);\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n translateOperations = (item) => {\n let translateResult = '';\n switch(item) {\n case 'Delete':\n translateResult = gettext('Delete');\n break;\n case 'Reset Password':\n translateResult = gettext('Reset Password');\n break;\n }\n\n return translateResult;\n };\n\n translateStatus = (status) => {\n switch (status) {\n case 'active':\n return gettext('Active');\n case 'inactive':\n return gettext('Inactive');\n }\n };\n\n translateMembership = (membership) => {\n switch (membership) {\n case 'Admin':\n return gettext('Admin');\n case 'Member':\n return gettext('Member');\n }\n };\n\n render() {\n const { item } = this.props;\n const { highlight, isOpIconShown, isDeleteDialogOpen, isResetPasswordDialogOpen } = this.state;\n\n const itemName = '' + Utils.HTMLescape(item.name) + '';\n let deleteDialogMsg = gettext('Are you sure you want to delete {placeholder} ?').replace('{placeholder}', itemName);\n let resetPasswordDialogMsg = gettext('Are you sure you want to reset the password of {placeholder} ?').replace('{placeholder}', itemName);\n\n // for 'user status'\n const curStatus = item.active ? 'active' : 'inactive';\n this.statusOptions = ['active', 'inactive'].map(item => {\n return {\n value: item,\n text: this.translateStatus(item),\n isSelected: item == curStatus\n };\n });\n const currentSelectedStatusOption = this.statusOptions.filter(item => item.isSelected)[0];\n\n // for 'user membership'\n const curMembership = item.is_org_staff? 'Admin' : 'Member';\n this.membershipOptions = ['Admin', 'Member'].map(item => {\n return {\n value: item,\n text: this.translateMembership(item),\n isSelected: item == curMembership\n };\n });\n const currentSelectedMembershipOption = this.membershipOptions.filter(item => item.isSelected)[0];\n\n return (\n \n \n \n \n \n \n \n \n \n {`${Utils.bytesToSize(item.quota_usage)} / ${item.quota_total > 0 ? Utils.bytesToSize(item.quota_total) : '--'}`}\n \n {moment(item.create_time).format('YYYY-MM-DD HH:mm:ss')}{' / '}{item.last_login ? moment(item.last_login).fromNow() : '--'}\n \n \n {(isOpIconShown && item.email != username) &&\n \n }\n \n \n {isDeleteDialogOpen &&\n \n }\n {isResetPasswordDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n toggleItemFreezed: PropTypes.func.isRequired,\n updateStatus: PropTypes.func.isRequired,\n updateMembership: PropTypes.func.isRequired,\n deleteUser: PropTypes.func.isRequired,\n};\n\nclass OrgUsers extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n orgName: '',\n userList: [],\n isAddUserDialogOpen: false\n };\n }\n\n componentDidMount () {\n seafileAPI.sysAdminGetOrg(this.props.orgID).then((res) => {\n this.setState({\n orgName: res.data.org_name\n });\n });\n seafileAPI.sysAdminListOrgUsers(this.props.orgID).then((res) => {\n this.setState({\n loading: false,\n userList: res.data.users\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n toggleAddUserDialog = () => {\n this.setState({isAddUserDialogOpen: !this.state.isAddUserDialogOpen});\n };\n\n addUser = (newUserInfo) => {\n const { email, name, password } = newUserInfo;\n seafileAPI.sysAdminAddOrgUser(this.props.orgID, email, name, password).then(res => {\n let userList = this.state.userList;\n userList.unshift(res.data);\n this.setState({userList: userList});\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n deleteUser = (orgID, email) => {\n seafileAPI.sysAdminDeleteOrgUser(orgID, email).then(res => {\n let newUserList = this.state.userList.filter(item => {\n return item.email != email;\n });\n this.setState({userList: newUserList});\n toaster.success(gettext('Successfully deleted 1 item.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n updateStatus = (email, statusValue) => {\n const isActive = statusValue == 'active';\n seafileAPI.sysAdminUpdateOrgUser(this.props.orgID, email, 'active', isActive).then(res => {\n let newUserList = this.state.userList.map(item => {\n if (item.email == email) {\n item.active = res.data.active;\n }\n return item;\n });\n this.setState({userList: newUserList});\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n updateMembership = (email, membershipValue) => {\n const isOrgStaff = membershipValue == 'Admin';\n seafileAPI.sysAdminUpdateOrgUser(this.props.orgID, email, 'is_org_staff', isOrgStaff).then(res => {\n let newUserList = this.state.userList.map(item => {\n if (item.email == email) {\n item.is_org_staff = res.data.is_org_staff;\n }\n return item;\n });\n this.setState({userList: newUserList});\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const { isAddUserDialogOpen, orgName } = this.state;\n return (\n \n \n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n {isAddUserDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nOrgUsers.propTypes = {\n orgID: PropTypes.string,\n};\n\nexport default OrgUsers;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { siteRoot, gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\nimport OrgNav from './org-nav';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n const { loading, errorMsg, items } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No groups')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('Name')}{gettext('Creator')}{gettext('Created At')}{/* Operations */}
    \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getDeviceErrorsListByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n curPerPage: PropTypes.number,\n pageInfo: PropTypes.object,\n deleteGroup: PropTypes.func.isRequired,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n isDeleteDialogOpen: false\n };\n }\n\n handleMouseEnter = () => {\n this.setState({isOpIconShown: true});\n };\n\n handleMouseLeave = () => {\n this.setState({isOpIconShown: false});\n };\n\n toggleDeleteDialog = (e) => {\n if (e) {\n e.preventDefault();\n }\n this.setState({isDeleteDialogOpen: !this.state.isDeleteDialogOpen});\n };\n\n deleteGroup = () => {\n this.toggleDeleteDialog();\n this.props.deleteGroup(this.props.item.group_id);\n };\n\n render() {\n const { item } = this.props;\n const { isOpIconShown, isDeleteDialogOpen } = this.state;\n\n const itemName = '' + Utils.HTMLescape(item.group_name) + '';\n const deleteDialogMsg = gettext('Are you sure you want to delete {placeholder} ?').replace('{placeholder}', itemName);\n\n const groupUrl = item.parent_group_id == 0 ?\n `${siteRoot}sys/groups/${item.group_id}/libraries/` :\n `${siteRoot}sys/departments/${item.group_id}/`;\n\n return (\n \n \n {item.group_name}\n \n {moment(item.created_at).format('YYYY-MM-DD HH:mm:ss')}\n \n \n \n \n {isDeleteDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n deleteGroup: PropTypes.func.isRequired,\n transferGroup: PropTypes.func.isRequired,\n};\n\nclass OrgGroups extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n orgName: '',\n groupList: []\n };\n }\n\n componentDidMount () {\n seafileAPI.sysAdminGetOrg(this.props.orgID).then((res) => {\n this.setState({\n orgName: res.data.org_name\n });\n });\n seafileAPI.sysAdminListOrgGroups(this.props.orgID).then((res) => {\n this.setState({\n loading: false,\n groupList: res.data.group_list\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n deleteGroup = (groupID) => {\n seafileAPI.sysAdminDismissGroupByID(groupID).then(res => {\n let newGroupList = this.state.groupList.filter(item => {\n return item.group_id != groupID;\n });\n this.setState({groupList: newGroupList});\n toaster.success(gettext('Successfully deleted 1 item.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n return (\n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nOrgGroups.propTypes = {\n orgID: PropTypes.string,\n};\n\n\n\nexport default OrgGroups;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\nimport OrgNav from './org-nav';\n\nclass Content extends Component {\n render() {\n const { loading, errorMsg, items } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No libraries')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('Name')}{gettext('ID')}{gettext('Owner')}{/* Operations */}
    \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n deleteRepo: PropTypes.func.isRequired,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n isDeleteDialogOpen: false\n };\n }\n\n handleMouseEnter = () => {\n this.setState({isOpIconShown: true});\n };\n\n handleMouseLeave = () => {\n this.setState({isOpIconShown: false});\n };\n\n toggleDeleteDialog = (e) => {\n if (e) {\n e.preventDefault();\n }\n this.setState({isDeleteDialogOpen: !this.state.isDeleteDialogOpen});\n };\n\n deleteRepo = () => {\n this.props.deleteRepo(this.props.item.repo_id);\n };\n\n render() {\n const { item } = this.props;\n const { isOpIconShown, isDeleteDialogOpen } = this.state;\n\n const iconUrl = Utils.getLibIconUrl(item);\n const iconTitle = Utils.getLibIconTitle(item);\n\n const itemName = '' + Utils.HTMLescape(item.repo_name) + '';\n const deleteDialogMsg = gettext('Are you sure you want to delete {placeholder} ?').replace('{placeholder}', itemName);\n\n return (\n \n \n {iconTitle}\n {item.repo_name}\n {item.repo_id}\n \n {!item.owner_email ?\n '--' :\n item.owner_email.indexOf('@seafile_group') == -1 ?\n :\n item.owner_name\n }\n \n \n \n \n \n {isDeleteDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n deleteRepo: PropTypes.func.isRequired,\n};\n\nclass OrgRepos extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n orgName: '',\n repoList: []\n };\n }\n\n componentDidMount () {\n seafileAPI.sysAdminGetOrg(this.props.orgID).then((res) => {\n this.setState({\n orgName: res.data.org_name\n });\n });\n seafileAPI.sysAdminListOrgRepos(this.props.orgID).then((res) => {\n this.setState({\n loading: false,\n repoList: res.data.repo_list\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n deleteRepo = (repoID) => {\n seafileAPI.sysAdminDeleteRepo(repoID).then(res => {\n let newRepoList = this.state.repoList.filter(item => {\n return item.repo_id != repoID;\n });\n this.setState({repoList: newRepoList});\n toaster.success(gettext('Successfully deleted 1 item.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n return (\n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nOrgRepos.propTypes = {\n orgID: PropTypes.string,\n};\n\nexport default OrgRepos;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Form, FormGroup, Input } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\n\nconst propTypes = {\n toggle: PropTypes.func.isRequired,\n addInstitution: PropTypes.func.isRequired\n};\n\nclass SysAdminAddInstitutionDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n value: '',\n isSubmitBtnActive: false\n };\n }\n\n handleChange = (e) => {\n const value = e.target.value;\n this.setState({\n value: value,\n isSubmitBtnActive: value.trim() != ''\n });\n };\n\n handleSubmit = () => {\n this.toggle();\n this.props.addInstitution(this.state.value.trim());\n };\n\n toggle = () => {\n this.props.toggle();\n };\n\n render() {\n return (\n \n {gettext('Add institution')}\n \n
    \n

    {gettext('Name')}

    \n \n \n \n
    \n
    \n \n \n \n
    \n );\n }\n}\n\nSysAdminAddInstitutionDialog.propTypes = propTypes;\n\nexport default SysAdminAddInstitutionDialog;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { Button } from 'reactstrap';\nimport moment from 'moment';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { siteRoot, gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport SysAdminAddInstitutionDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-institution-dialog';\nimport Paginator from '../../../components/paginator';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n }\n\n getPreviousPage = () => {\n this.props.getInstitutionsByPage(this.props.currentPage - 1);\n };\n\n getNextPage = () => {\n this.props.getInstitutionsByPage(this.props.currentPage + 1);\n };\n\n render() {\n const { loading, errorMsg, items, perPage, currentPage, hasNextPage } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No institutions')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('Name')}{gettext('Created At')}{/* Operations */}
    \n \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getLogsByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n currentPage: PropTypes.number,\n perPage: PropTypes.number,\n pageInfo: PropTypes.object,\n hasNextPage: PropTypes.bool,\n getInstitutionsByPage: PropTypes.func.isRequired,\n deleteInstitution: PropTypes.func.isRequired,\n};\n\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n isDeleteDialogOpen: false\n };\n }\n\n handleMouseEnter = () => {\n this.setState({isOpIconShown: true});\n };\n\n handleMouseLeave = () => {\n this.setState({isOpIconShown: false});\n };\n\n toggleDeleteDialog = (e) => {\n if (e) {\n e.preventDefault();\n }\n this.setState({isDeleteDialogOpen: !this.state.isDeleteDialogOpen});\n };\n\n deleteInstitution = () => {\n this.props.deleteInstitution(this.props.item.id);\n };\n\n render() {\n const { item } = this.props;\n const { isOpIconShown, isDeleteDialogOpen } = this.state;\n\n const institutionName = '' + Utils.HTMLescape(item.name) + '';\n const deleteDialogMsg = gettext('Are you sure you want to delete {placeholder} ?').replace('{placeholder}', institutionName);\n\n return (\n \n \n {item.name}\n {moment(item.ctime).fromNow()}\n \n \n \n \n {isDeleteDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n deleteInstitution: PropTypes.func.isRequired,\n};\n\nclass Institutions extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n institutionList: [],\n perPage: 25,\n currentPage: 1,\n hasNextPage: false,\n isAddInstitutionDialogOpen: false,\n };\n this.initPage = 1;\n }\n\n componentDidMount () {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getInstitutionsByPage(this.state.currentPage);\n });\n }\n\n getInstitutionsByPage = (page) => {\n let { perPage } = this.state;\n seafileAPI.sysAdminListInstitutions(page, perPage).then((res) => {\n this.setState({\n loading: false,\n institutionList: res.data.institution_list,\n currentPage: page,\n hasNextPage: Utils.hasNextPage(page, perPage, res.data.total_count),\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n resetPerPage = (newPerPage) => {\n this.setState({\n perPage: newPerPage,\n }, () => this.getInstitutionsByPage(this.initPage));\n };\n\n toggleAddInstitutionDialog = () => {\n this.setState({isAddInstitutionDialogOpen: !this.state.isAddInstitutionDialogOpen});\n };\n\n addInstitution = (name) => {\n seafileAPI.sysAdminAddInstitution(name).then(res => {\n let institutionList = this.state.institutionList;\n institutionList.push(res.data);\n this.setState({institutionList: institutionList});\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n deleteInstitution = (institutionID) => {\n seafileAPI.sysAdminDeleteInstitution(institutionID).then(res => {\n let institutionList = this.state.institutionList.filter(inst => {\n return inst.id != institutionID;\n });\n this.setState({institutionList: institutionList});\n toaster.success(gettext('Successfully deleted 1 item.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const { isAddInstitutionDialogOpen, hasNextPage, currentPage, perPage } = this.state;\n return (\n \n \n \n \n
    \n
    \n
    \n

    {gettext('Institutions')}

    \n
    \n
    \n \n
    \n
    \n
    \n {isAddInstitutionDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nexport default Institutions;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { siteRoot, gettext } from '../../../utils/constants';\n\nconst propTypes = {\n institutionID: PropTypes.string,\n institutionName: PropTypes.string.isRequired,\n currentItem: PropTypes.string.isRequired\n};\n\nclass Nav extends React.Component {\n\n constructor(props) {\n super(props);\n this.navItems = [\n {name: 'info', urlPart: 'info', text: gettext('Info')},\n {name: 'members', urlPart: 'members', text: gettext('Members')},\n {name: 'admins', urlPart: 'admins', text: gettext('Admins')},\n ];\n }\n\n render() {\n const { currentItem, institutionID, institutionName } = this.props;\n return (\n
    \n
    \n

    {gettext('Institutions')} / {institutionName}

    \n
    \n
      \n {this.navItems.map((item, index) => {\n return (\n
    • \n {item.text}\n
    • \n );\n })}\n
    \n
    \n );\n }\n}\n\nNav.propTypes = propTypes;\n\nexport default Nav;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport Loading from '../../../components/loading';\nimport SysAdminSetInstitutionQuotaDialog from '../../../components/dialog/sysadmin-dialog/set-quota';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport InstitutionNav from './institution-nav';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isSetQuotaDialogOpen: false,\n };\n }\n\n toggleSetQuotaDialog = () => {\n this.setState({isSetQuotaDialogOpen: !this.state.isSetQuotaDialogOpen});\n };\n\n showEditIcon = (action) => {\n return (\n \n \n );\n };\n\n render() {\n const { loading, errorMsg, institutionInfo } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const { name, user_count, quota_total, quota_used } = institutionInfo;\n const { isSetQuotaDialogOpen } = this.state;\n return (\n \n
    \n
    {gettext('Name')}
    \n
    \n {name}\n
    \n\n
    {gettext('Number of members')}
    \n
    {user_count}
    \n\n
    {gettext('Space Used')}
    \n
    \n {`${Utils.bytesToSize(quota_used)} / ${quota_total > 0 ? Utils.bytesToSize(quota_total) : '--'}`}\n {this.showEditIcon(this.toggleSetQuotaDialog)}\n
    \n
    \n {isSetQuotaDialogOpen &&\n \n }\n
    \n );\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getLogsByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n currentPage: PropTypes.number,\n perPage: PropTypes.number,\n pageInfo: PropTypes.object,\n hasNextPage: PropTypes.bool,\n institutionInfo: PropTypes.object.isRequired,\n updateQuota: PropTypes.func.isRequired,\n};\n\n\nclass InstitutionInfo extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n institutionInfo: {}\n };\n }\n\n componentDidMount () {\n seafileAPI.sysAdminGetInstitution(this.props.institutionID).then((res) => {\n this.setState({\n loading: false,\n institutionInfo: res.data\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n updateQuota = (quota) => {\n seafileAPI.sysAdminUpdateInstitution(this.props.institutionID, quota).then(res => {\n const newInstitutionInfo = Object.assign(this.state.institutionInfo, {\n quota_total: res.data.quota_total,\n });\n this.setState({institutionInfo: newInstitutionInfo});\n toaster.success(gettext('Successfully set quota.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n\n render() {\n const { institutionInfo } = this.state;\n return (\n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nInstitutionInfo.propTypes = {\n institutionID: PropTypes.string,\n};\n\nexport default InstitutionInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport UserSelect from '../../user-select';\n\nconst propTypes = {\n toggle: PropTypes.func.isRequired,\n addUser: PropTypes.func.isRequired\n};\n\nclass AddMemberDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n selectedOption: [],\n };\n }\n\n handleSelectChange = (option) => {\n this.setState({ selectedOption: option });\n };\n\n handleSubmit = () => {\n if (!this.state.selectedOption) return;\n const emails = this.state.selectedOption.map(item => item.email);\n this.props.addUser(emails);\n };\n\n render() {\n return (\n \n {gettext('Add Member')}\n \n \n \n \n \n \n \n \n );\n }\n}\n\nAddMemberDialog.propTypes = propTypes;\n\nexport default AddMemberDialog;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'reactstrap';\nimport moment from 'moment';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport OpMenu from '../../../components/dialog/op-menu';\nimport AddMemberDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-institution-member-dialog';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport UserLink from '../user-link';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport InstitutionNav from './institution-nav';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n getPreviousPage = () => {\n this.props.getInstitutionUsersByPage(this.props.currentPage - 1);\n };\n\n getNextPage = () => {\n this.props.getInstitutionUsersByPage(this.props.currentPage + 1);\n };\n\n render() {\n const { loading, errorMsg, items, perPage, currentPage, hasNextPage } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No members')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('Name')}{gettext('Status')}{gettext('Space Used')}{gettext('Created At')}{' / '}{gettext('Last Login')}{/* Operations */}
    \n \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getLogsByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n currentPage: PropTypes.number,\n perPage: PropTypes.number,\n pageInfo: PropTypes.object,\n hasNextPage: PropTypes.bool,\n getInstitutionUsersByPage: PropTypes.func.isRequired,\n setAdmin: PropTypes.func.isRequired,\n deleteUser: PropTypes.func.isRequired,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n highlight: false,\n isSetAdminDialogOpen: false,\n };\n }\n\n handleMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false\n });\n this.props.onUnfreezedItem();\n };\n\n toggleSetAdminDialog = (e) => {\n if (e) {\n e.preventDefault();\n }\n this.setState({isSetAdminDialogOpen: !this.state.isSetAdminDialogOpen});\n };\n\n setAdmin = () => {\n this.props.setAdmin(this.props.item.email);\n };\n\n onMenuItemClick = (operation) => {\n switch (operation) {\n case 'Delete':\n this.props.deleteUser(this.props.item.email);\n break;\n case 'Set Admin':\n this.toggleSetAdminDialog();\n break;\n }\n };\n\n getOperations = () => {\n let operations = [];\n if (!this.props.item.is_institution_admin) {\n operations.push('Set Admin');\n }\n operations.push('Delete');\n return operations;\n };\n\n translateOperations = (item) => {\n let translateResult = '';\n switch(item) {\n case 'Delete':\n translateResult = gettext('Delete');\n break;\n case 'Set Admin':\n translateResult = gettext('Set Admin');\n break;\n }\n\n return translateResult;\n };\n\n render() {\n const { item } = this.props;\n const { isOpIconShown, isSetAdminDialogOpen } = this.state;\n\n const itemName = '' + Utils.HTMLescape(item.name) + '';\n const dialogMsg = gettext('Are you sure you want to set {placeholder} as Admin?').replace('{placeholder}', itemName);\n\n return (\n \n \n \n \n \n \n {item.is_active ? gettext('Active') : gettext('Inactive')}\n \n {`${Utils.bytesToSize(item.quota_usage)} / ${item.quota_total > 0 ? Utils.bytesToSize(item.quota_total) : '--'}`}\n \n {moment(item.create_time).format('YYYY-MM-DD HH:mm:ss')}{' / '}{item.last_login ? moment(item.last_login).fromNow() : '--'}\n \n \n {isOpIconShown &&\n \n }\n \n \n {isSetAdminDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.string.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n setAdmin: PropTypes.func.isRequired,\n deleteUser: PropTypes.func.isRequired,\n};\n\nclass InstitutionUsers extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n institutionName: '',\n userList: [],\n perPage: 25,\n currentPage: 1,\n hasNextPage: false,\n isAddUserDialogOpen: false\n };\n this.initPage = 1;\n }\n\n componentDidMount () {\n seafileAPI.sysAdminGetInstitution(this.props.institutionID).then((res) => {\n this.setState({\n institutionName: res.data.name\n });\n });\n\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getInstitutionUsersByPage(this.state.currentPage);\n });\n }\n\n getInstitutionUsersByPage = (page) => {\n let { perPage } = this.state;\n seafileAPI.sysAdminListInstitutionUsers(this.props.institutionID, page, perPage).then((res) => {\n this.setState({\n loading: false,\n userList: res.data.user_list,\n currentPage: page,\n hasNextPage: Utils.hasNextPage(page, perPage, res.data.total_count),\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n setAdmin = (email) => {\n seafileAPI.sysAdminUpdateInstitutionUser(this.props.institutionID, email, true).then(res => {\n let userList = this.state.userList.map(user => {\n if (user.email == email) {\n user.is_institution_admin = true;\n }\n return user;\n });\n this.setState({userList: userList});\n toaster.success(gettext('Success'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n toggleAddUserDialog = () => {\n this.setState({isAddUserDialogOpen: !this.state.isAddUserDialogOpen});\n };\n\n resetPerPage = (newPerPage) => {\n this.setState({\n perPage: newPerPage,\n }, () => this.getInstitutionUsersByPage(this.initPage));\n };\n\n addUser = (emails) => {\n seafileAPI.sysAdminAddInstitutionUserBatch(this.props.institutionID, emails).then(res => {\n this.toggleAddUserDialog();\n let successArray = res.data.success;\n let failedArray = res.data.failed;\n if (successArray.length) {\n let newUserList = this.state.userList.concat(successArray);\n this.setState({userList: newUserList});\n }\n failedArray.forEach((item) => {\n toaster.danger(item.error_msg);\n });\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n deleteUser = (email) => {\n seafileAPI.sysAdminDeleteInstitutionUser(this.props.institutionID, email).then(res => {\n let newUserList = this.state.userList.filter(user => {\n return user.email != email;\n });\n this.setState({userList: newUserList});\n toaster.success('success');\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const { isAddUserDialogOpen, institutionName, hasNextPage, currentPage, perPage } = this.state;\n return (\n \n \n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n {isAddUserDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nInstitutionUsers.propTypes = {\n institutionID: PropTypes.string,\n};\n\nexport default InstitutionUsers;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport OpMenu from '../../../components/dialog/op-menu';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport UserLink from '../user-link';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport InstitutionNav from './institution-nav';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n render() {\n const { loading, errorMsg, items } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No admins')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('Name')}{gettext('Status')}{gettext('Space Used')}{gettext('Created At')}{' / '}{gettext('Last Login')}{/* Operations */}
    \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getLogsByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n currentPage: PropTypes.number,\n perPage: PropTypes.number,\n pageInfo: PropTypes.object,\n hasNextPage: PropTypes.bool,\n revokeAdmin: PropTypes.func.isRequired,\n deleteUser: PropTypes.func.isRequired,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n highlight: false,\n isRevokeAdminDialogOpen: false,\n };\n }\n\n handleMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false\n });\n this.props.onUnfreezedItem();\n };\n\n toggleRevokeAdminDialog = (e) => {\n if (e) {\n e.preventDefault();\n }\n this.setState({isRevokeAdminDialogOpen: !this.state.isRevokeAdminDialogOpen});\n };\n\n revokeAdmin = () => {\n this.props.revokeAdmin(this.props.item);\n };\n\n onMenuItemClick = (operation) => {\n switch (operation) {\n case 'Revoke Admin':\n this.toggleRevokeAdminDialog();\n break;\n }\n };\n\n translateOperations = (item) => {\n let translateResult = '';\n switch(item) {\n case 'Revoke Admin':\n translateResult = gettext('Revoke Admin');\n break;\n }\n return translateResult;\n };\n\n render() {\n const { item } = this.props;\n const { isOpIconShown, isRevokeAdminDialogOpen } = this.state;\n\n const itemName = '' + Utils.HTMLescape(item.name) + '';\n const revokeAdminDialogMsg = gettext('Are you sure you want to revoke the admin permission of {placeholder} ?').replace('{placeholder}', itemName);\n\n return (\n \n \n \n \n \n \n {item.is_active ? gettext('Active') : gettext('Inactive')}\n \n {`${Utils.bytesToSize(item.quota_usage)} / ${item.quota_total > 0 ? Utils.bytesToSize(item.quota_total) : '--'}`}\n \n {moment(item.create_time).format('YYYY-MM-DD HH:mm:ss')}{' / '}{item.last_login ? moment(item.last_login).fromNow() : '--'}\n \n \n {isOpIconShown &&\n \n }\n \n \n {isRevokeAdminDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n revokeAdmin: PropTypes.func.isRequired,\n deleteUser: PropTypes.func.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n};\n\nclass InstitutionAdmins extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n institutionName: '',\n userList: [],\n isAddUserDialogOpen: false\n };\n }\n\n componentDidMount () {\n seafileAPI.sysAdminGetInstitution(this.props.institutionID).then((res) => {\n this.setState({\n institutionName: res.data.name\n });\n });\n seafileAPI.sysAdminListInstitutionAdmins(this.props.institutionID).then((res) => {\n this.setState({\n loading: false,\n userList: res.data.user_list,\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n revokeAdmin = (item) => {\n const email = item.email;\n const name = item.name;\n seafileAPI.sysAdminUpdateInstitutionUser(this.props.institutionID, email, false).then(res => {\n let userList = this.state.userList.filter(user => {\n return user.email != email;\n });\n this.setState({userList: userList});\n toaster.success(gettext('Successfully revoked the admin permission of {placeholder}.').replace('{placeholder}', name));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n deleteUser = (email) => {\n seafileAPI.sysAdminDeleteInstitutionUser(this.props.institutionID, email).then(res => {\n let newUserList = this.state.userList.filter(user => {\n return user.email != email;\n });\n this.setState({userList: newUserList});\n toaster.success('success');\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const { institutionName } = this.state;\n return (\n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nInstitutionAdmins.propTypes = {\n institutionID: PropTypes.string,\n};\n\nexport default InstitutionAdmins;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { siteRoot, gettext } from '../../../utils/constants';\n\nconst propTypes = {\n currentItem: PropTypes.string.isRequired\n};\n\nclass Nav extends React.Component {\n\n constructor(props) {\n super(props);\n this.navItems = [\n {name: 'loginLogs', urlPart:'logs/login', text: gettext('Login')},\n {name: 'fileAccessLogs', urlPart:'logs/file-access', text: gettext('File Access')},\n {name: 'fileUpdateLogs', urlPart:'logs/file-update', text: gettext('File Update')},\n {name: 'sharePermissionLogs', urlPart:'logs/share-permission', text: gettext('Permission')},\n ];\n }\n\n render() {\n const { currentItem } = this.props;\n return (\n
    \n
      \n {this.navItems.map((item, index) => {\n return (\n
    • \n {item.text}\n
    • \n );\n })}\n
    \n
    \n );\n }\n}\n\nNav.propTypes = propTypes;\n\nexport default Nav;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, FormGroup, Label, Input, Alert } from 'reactstrap';\nimport { gettext, siteRoot } from '../../../utils/constants';\nimport moment from 'moment';\n\nclass LogsExportExcelDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n startDateStr: '',\n endDateStr: '',\n errMsg: '',\n };\n }\n\n downloadExcel = () => {\n if (!this.isValidDateStr()) {\n return;\n }\n let { startDateStr, endDateStr } = this.state;\n let url = siteRoot;\n\n switch (this.props.logType) {\n case 'login':\n url += 'sys/loginadmin/export-excel/';\n break;\n case 'fileAccess':\n url += 'sys/log/fileaudit/export-excel/';\n break;\n case 'fileUpdate':\n url += 'sys/log/fileupdate/export-excel/';\n break;\n case 'sharePermission':\n url += 'sys/log/permaudit/export-excel/';\n break;\n }\n location.href = url + '?start=' + startDateStr + '&end=' + endDateStr;\n this.props.toggle();\n };\n\n isValidDateStr = () => {\n let { startDateStr, endDateStr } = this.state;\n if (moment(startDateStr, 'YYYY-MM-DD', true).isValid() &&\n moment(endDateStr, 'YYYY-MM-DD', true).isValid() &&\n moment(startDateStr).isBefore(endDateStr)\n ) {\n return true;\n } else {\n this.setState({\n errMsg: gettext('Date Invalid.')\n });\n return false;\n }\n };\n\n handleStartChange = (e) => {\n const startDateStr = e.target.value.trim();\n this.setState({\n startDateStr: startDateStr,\n errMsg: ''\n });\n };\n\n handleEndChange = (e) => {\n const endDateStr = e.target.value.trim();\n this.setState({\n endDateStr: endDateStr,\n errMsg: '',\n });\n };\n\n render() {\n return (\n \n {gettext('Choose date')}\n \n \n \n \n \n \n \n \n \n {this.state.errMsg &&\n \n {gettext(this.state.errMsg)}\n \n }\n \n \n \n \n \n \n );\n }\n}\n\nconst propTypes = {\n toggle: PropTypes.func.isRequired,\n logType: PropTypes.string.isRequired,\n};\n\nLogsExportExcelDialog.propTypes = propTypes;\n\nexport default LogsExportExcelDialog;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport { Utils } from '../../../utils/utils';\nimport { Button } from 'reactstrap';\nimport EmptyTip from '../../../components/empty-tip';\nimport moment from 'moment';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport LogsNav from './logs-nav';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\nimport LogsExportExcelDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-logs-export-excel-dialog';\nimport ModalPortal from '../../../components/modal-portal';\n\n\nclass Content extends Component {\n\n getPreviousPage = () => {\n this.props.getLogsByPage(this.props.currentPage - 1);\n };\n\n getNextPage = () => {\n this.props.getLogsByPage(this.props.currentPage + 1);\n };\n\n render() {\n const { loading, errorMsg, items, perPage, currentPage, hasNextPage } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No login logs')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n {items &&\n \n {items.map((item, index) => {\n return ();\n })}\n \n }\n
    {gettext('Name')}{gettext('IP')}{gettext('Status')}{gettext('Time')}
    \n \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getLogsByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n currentPage: PropTypes.number,\n perPage: PropTypes.number,\n pageInfo: PropTypes.object,\n hasNextPage: PropTypes.bool,\n};\n\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n };\n }\n\n handleMouseOver = () => {\n this.setState({\n isOpIconShown: true\n });\n };\n\n handleMouseOut = () => {\n this.setState({\n isOpIconShown: false\n });\n };\n\n render() {\n let { item } = this.props;\n return (\n \n \n {item.login_ip}\n {item.log_success ? gettext('Success') : gettext('Failed')}\n {moment(item.login_time).fromNow()}\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n};\n\nclass LoginLogs extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n logList: [],\n perPage: 25,\n currentPage: 1,\n hasNextPage: false,\n isExportExcelDialogOpen: false,\n };\n this.initPage = 1;\n }\n\n toggleExportExcelDialog = () => {\n this.setState({isExportExcelDialogOpen: !this.state.isExportExcelDialogOpen});\n };\n\n componentDidMount () {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getLogsByPage(this.state.currentPage);\n });\n }\n\n getLogsByPage = (page) => {\n let { perPage } = this.state;\n seafileAPI.sysAdminListLoginLogs(page, perPage).then((res) => {\n this.setState({\n logList: res.data.login_log_list,\n loading: false,\n currentPage: page,\n hasNextPage: Utils.hasNextPage(page, perPage, res.data.total_count),\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n resetPerPage = (newPerPage) => {\n this.setState({\n perPage: newPerPage,\n }, () => this.getLogsByPage(this.initPage));\n };\n\n render() {\n let { logList, currentPage, perPage, hasNextPage, isExportExcelDialogOpen } = this.state;\n return (\n \n \n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n {isExportExcelDialogOpen &&\n \n \n \n }\n
    \n );\n }\n}\n\nexport default LoginLogs;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../../utils/constants';\nimport { Dropdown, DropdownMenu, DropdownToggle, DropdownItem } from 'reactstrap';\n\nclass FilterMenu extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isMenuShown: false\n };\n }\n\n toggleMenu = () => {\n this.setState({\n isMenuShown: !this.state.isMenuShown\n }, () => {\n this.props.toggleFreezeItem(this.state.isMenuShown);\n });\n };\n\n onItemClick = () => {\n this.props.filterItems();\n this.props.toggleFreezeItem(false);\n };\n\n render() {\n const { filterBy } = this.props;\n return (\n \n \n \n {gettext('only show {placeholder}').replace('{placeholder}', filterBy)}\n \n \n );\n }\n}\n\nFilterMenu.propTypes = {\n toggleFreezeItem: PropTypes.func.isRequired,\n filterItems: PropTypes.func.isRequired,\n filterBy: PropTypes.string.isRequired,\n};\n\nexport default FilterMenu;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'reactstrap';\n\nclass ToggleFilter extends React.Component {\n render() {\n const { filterBy } = this.props;\n return (\n \n {filterBy}\n x\n \n );\n }\n}\n\nToggleFilter.propTypes = {\n filterBy: PropTypes.string.isRequired,\n toggleFilter: PropTypes.func.isRequired,\n};\n\nexport default ToggleFilter;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport { Utils } from '../../../utils/utils';\nimport EmptyTip from '../../../components/empty-tip';\nimport { Button } from 'reactstrap';\nimport { navigate } from '@gatsbyjs/reach-router';\nimport moment from 'moment';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport LogsExportExcelDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-logs-export-excel-dialog';\nimport ModalPortal from '../../../components/modal-portal';\nimport LogsNav from './logs-nav';\nimport FilterMenu from './file-access-item-menu';\nimport ToggleFilter from './file-access-toggle-filter';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\n\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n getPreviousPage = () => {\n this.props.getLogsByPage(this.props.currentPage - 1);\n };\n\n getNextPage = () => {\n this.props.getLogsByPage(this.props.currentPage + 1);\n };\n\n toggleFilterByUser = () => {\n this.props.filterByUser(null);\n };\n\n toggleFilterByRepo = () => {\n this.props.filterByRepo(null);\n };\n\n toggleFreezeItem = (freezed) => {\n this.setState({\n isItemFreezed: freezed\n });\n };\n\n render() {\n const {\n loading, errorMsg, items,\n userFilteredBy, repoFilteredBy,\n perPage, currentPage, hasNextPage\n } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No file access logs')}

    \n
    \n );\n const table = (\n \n
    \n {userFilteredBy && (\n \n )}\n {repoFilteredBy && (\n \n )}\n
    \n \n \n \n \n \n \n \n \n \n \n \n {items &&\n \n {items.map((item, index) => {\n return ();\n })}\n \n }\n
    {gettext('Name')}{gettext('Type')}{gettext('IP')}{' / '}{gettext('Device')}{gettext('Date')}{gettext('Library')}{gettext('File')}{' / '}{gettext('Folder')}
    \n \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool,\n errorMsg: PropTypes.string,\n items: PropTypes.array,\n getLogsByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n currentPage: PropTypes.number,\n perPage: PropTypes.number,\n pageInfo: PropTypes.object,\n hasNextPage: PropTypes.bool,\n toggleFreezeItem: PropTypes.func,\n userFilteredBy: PropTypes.string,\n repoFilteredBy: PropTypes.string,\n filterByUser: PropTypes.func,\n filterByRepo: PropTypes.func,\n};\n\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isHighlighted: false,\n isOpIconShown: false\n };\n }\n\n handleMouseEnter = () => {\n if (!this.props.isFreezed) {\n this.setState({\n isHighlighted: true,\n isOpIconShown: true\n });\n }\n };\n\n handleMouseLeave = () => {\n if (!this.props.isFreezed) {\n this.setState({\n isHighlighted: false,\n isOpIconShown: false\n });\n }\n };\n\n filterByUser = () => {\n const { item } = this.props;\n this.props.filterByUser(item.email);\n };\n\n filterByRepo = () => {\n const { item } = this.props;\n this.props.filterByRepo(item.repo_id);\n };\n\n toggleFreezeItem = (freezed) => {\n this.props.toggleFreezeItem(freezed);\n if (!freezed) {\n this.setState({\n isHighlighted: false,\n isOpIconShown: false\n });\n }\n };\n\n render() {\n const { isHighlighted, isOpIconShown } = this.state;\n const { item, userFilteredBy, repoFilteredBy } = this.props;\n return (\n \n \n \n {isOpIconShown && !userFilteredBy && (\n \n )}\n \n {item.event_type}\n {item.ip}{' / '}{item.device || '--'}\n {moment(item.time).fromNow()}\n \n {item.repo_name ? item.repo_name : gettext('Deleted')}\n {isOpIconShown && item.repo_name && !repoFilteredBy && (\n \n )}\n \n {item.file_or_dir_name}\n \n );\n }\n}\n\n\nItem.propTypes = {\n item: PropTypes.object,\n isFreezed: PropTypes.bool,\n toggleFreezeItem: PropTypes.func,\n userFilteredBy: PropTypes.string,\n repoFilteredBy: PropTypes.string,\n filterByUser: PropTypes.func,\n filterByRepo: PropTypes.func,\n};\n\nclass FileAccessLogs extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n logList: [],\n perPage: 25,\n currentPage: 1,\n hasNextPage: false,\n isExportExcelDialogOpen: false,\n };\n this.initPage = 1;\n }\n\n toggleExportExcelDialog = () => {\n this.setState({isExportExcelDialogOpen: !this.state.isExportExcelDialogOpen});\n };\n\n componentDidMount () {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage),\n userFilteredBy: urlParams.get('email'),\n repoFilteredBy: urlParams.get('repo_id')\n }, () => {\n this.getLogsByPage(this.state.currentPage);\n });\n }\n\n getLogsByPage = (page) => {\n const { perPage, userFilteredBy, repoFilteredBy } = this.state;\n seafileAPI.sysAdminListFileAccessLogs(page, perPage, userFilteredBy, repoFilteredBy).then((res) => {\n this.setState({\n logList: res.data.file_access_log_list,\n loading: false,\n currentPage: page,\n hasNextPage: res.data.has_next_page,\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n resetPerPage = (newPerPage) => {\n this.setState({\n perPage: newPerPage,\n }, () => this.getLogsByPage(this.initPage));\n };\n\n updateURL = (obj) => {\n let url = new URL(location.href);\n let searchParams = new URLSearchParams(url.search);\n for (let key in obj) {\n obj[key] == null ?\n searchParams.delete(key) :\n searchParams.set(key, obj[key]);\n }\n url.search = searchParams.toString();\n navigate(url.toString());\n };\n\n filterByUser = (email) => {\n this.setState({\n userFilteredBy: email\n }, () => {\n this.getLogsByPage(this.initPage);\n this.updateURL({'email': email});\n });\n };\n\n filterByRepo = (repoID) => {\n this.setState({\n repoFilteredBy: repoID\n }, () => {\n this.getLogsByPage(this.initPage);\n this.updateURL({'repo_id': repoID});\n });\n };\n\n render() {\n const {\n logList,\n userFilteredBy, repoFilteredBy,\n currentPage, perPage, hasNextPage,\n isExportExcelDialogOpen\n } = this.state;\n return (\n \n \n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n {isExportExcelDialogOpen &&\n \n \n \n }\n
    \n );\n }\n}\n\nexport default FileAccessLogs;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport { Utils } from '../../../utils/utils';\nimport EmptyTip from '../../../components/empty-tip';\nimport moment from 'moment';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport LogsNav from './logs-nav';\nimport { Button } from 'reactstrap';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\nimport ModalPortal from '../../../components/modal-portal';\nimport CommitDetails from '../../../components/dialog/commit-details';\nimport LogsExportExcelDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-logs-export-excel-dialog';\n\nclass Content extends Component {\n\n getPreviousPage = () => {\n this.props.getLogsByPage(this.props.currentPage - 1);\n };\n\n getNextPage = () => {\n this.props.getLogsByPage(this.props.currentPage + 1);\n };\n\n render() {\n const { loading, errorMsg, items, perPage, currentPage, hasNextPage } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No file update logs')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n {items &&\n \n {items.map((item, index) => {\n return ();\n })}\n \n }\n
    {gettext('Name')}{gettext('Date')}{gettext('Library')}{gettext('Action')}
    \n \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getLogsByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n currentPage: PropTypes.number,\n perPage: PropTypes.number,\n pageInfo: PropTypes.object,\n hasNextPage: PropTypes.bool,\n};\n\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n isCommitDetailsDialogOpen: false,\n };\n }\n\n handleMouseOver = () => {\n this.setState({\n isOpIconShown: true\n });\n };\n\n handleMouseOut = () => {\n this.setState({\n isOpIconShown: false\n });\n };\n\n\n toggleCommitDetailsDialog = () => {\n this.setState({\n isCommitDetailsDialogOpen: !this.state.isCommitDetailsDialogOpen\n });\n };\n\n showCommitDetails = (e) => {\n e.preventDefault();\n this.setState({\n isCommitDetailsDialogOpen: !this.state.isCommitDetailsDialogOpen\n });\n };\n\n render() {\n let { item } = this.props;\n return (\n \n \n \n {moment(item.time).fromNow()}\n {item.repo_name ? item.repo_name : gettext('Deleted')}\n \n {item.file_operation}\n {item.repo_name && !item.repo_encrypted &&\n {gettext('Details')}\n }\n \n \n {this.state.isCommitDetailsDialogOpen &&\n \n \n \n }\n \n );\n }\n}\n\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n};\n\n\nclass FileUpdateLogs extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n logList: [],\n perPage: 25,\n currentPage: 1,\n hasNextPage: false,\n isExportExcelDialogOpen: false,\n };\n this.initPage = 1;\n }\n\n toggleExportExcelDialog = () => {\n this.setState({isExportExcelDialogOpen: !this.state.isExportExcelDialogOpen});\n };\n\n componentDidMount () {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getLogsByPage(this.state.currentPage);\n });\n }\n\n getLogsByPage = (page) => {\n let { perPage } = this.state;\n seafileAPI.sysAdminListFileUpdateLogs(page, perPage).then((res) => {\n this.setState({\n logList: res.data.file_update_log_list,\n loading: false,\n currentPage: page,\n hasNextPage: res.data.has_next_page,\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n resetPerPage = (newPerPage) => {\n this.setState({\n perPage: newPerPage,\n }, () => this.getLogsByPage(this.initPage));\n };\n\n render() {\n let { logList, currentPage, perPage, hasNextPage, isExportExcelDialogOpen } = this.state;\n return (\n \n \n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n {isExportExcelDialogOpen &&\n \n \n \n }\n
    \n );\n }\n}\n\nexport default FileUpdateLogs;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport moment from 'moment';\nimport { Button } from 'reactstrap';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext, siteRoot } from '../../../utils/constants';\nimport { Utils } from '../../../utils/utils';\nimport LogsExportExcelDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-logs-export-excel-dialog';\nimport ModalPortal from '../../../components/modal-portal';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\nimport LogsNav from './logs-nav';\n\nclass Content extends Component {\n\n getPreviousPage = () => {\n this.props.getLogsByPage(this.props.currentPage - 1);\n };\n\n getNextPage = () => {\n this.props.getLogsByPage(this.props.currentPage + 1);\n };\n\n render() {\n const { loading, errorMsg, items, perPage, currentPage, hasNextPage } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No permission logs')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n \n {items &&\n \n {items.map((item, index) => {\n return ();\n })}\n \n }\n
    {gettext('Share From')}{gettext('Share To')}{gettext('Actions')}{gettext('Permission')}{gettext('Library')}{gettext('Folder')}{gettext('Date')}
    \n \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getLogsByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n currentPage: PropTypes.number,\n perPage: PropTypes.number,\n pageInfo: PropTypes.object,\n hasNextPage: PropTypes.bool,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n };\n }\n\n handleMouseOver = () => {\n this.setState({\n isOpIconShown: true\n });\n };\n\n handleMouseOut = () => {\n this.setState({\n isOpIconShown: false\n });\n };\n\n getActionTextByEType = (etype) => {\n if (etype.indexOf('add') != -1) {\n return gettext('Add');\n } else if (etype.indexOf('modify') != -1) {\n return gettext('Modify');\n } else if (etype.indexOf('delete') != -1) {\n return gettext('Delete');\n } else {\n return '';\n }\n };\n\n getShareTo = (item) => {\n switch(item.share_type) {\n case 'user':\n return ;\n case 'group':\n return {item.to_group_name};\n case 'department':\n return {item.to_group_name};\n case 'all':\n return {gettext('All')};\n default:\n return gettext('Deleted');\n }\n };\n\n render() {\n let { item } = this.props;\n return (\n \n \n {this.getShareTo(item)}\n {this.getActionTextByEType(item.etype)}\n {Utils.sharePerms(item.permission)}\n {item.repo_name ? item.repo_name : gettext('Deleted')}\n {item.folder}\n {moment(item.date).fromNow()}\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n};\n\nclass SharePermissionLogs extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n logList: [],\n perPage: 25,\n currentPage: 1,\n hasNextPage: false,\n isExportExcelDialogOpen: false,\n };\n this.initPage = 1;\n }\n\n toggleExportExcelDialog = () => {\n this.setState({isExportExcelDialogOpen: !this.state.isExportExcelDialogOpen});\n };\n\n componentDidMount () {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getLogsByPage(this.state.currentPage);\n });\n }\n\n getLogsByPage = (page) => {\n let { perPage } = this.state;\n seafileAPI.sysAdminListSharePermissionLogs(page, perPage).then((res) => {\n this.setState({\n logList: res.data.share_permission_log_list,\n loading: false,\n currentPage: page,\n hasNextPage: res.data.has_next_page,\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n resetPerPage = (newPerPage) => {\n this.setState({\n perPage: newPerPage,\n }, () => this.getLogsByPage(this.initPage));\n };\n\n render() {\n let { logList, currentPage, perPage, hasNextPage, isExportExcelDialogOpen } = this.state;\n return (\n \n \n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n {isExportExcelDialogOpen &&\n \n \n \n }\n
    \n );\n }\n}\n\nexport default SharePermissionLogs;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nconst propTypes = {\n headingText: PropTypes.string.isRequired,\n children: PropTypes.object.isRequired\n};\n\nclass Section extends Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n const { headingText, children} = this.props;\n return (\n
    \n

    {headingText}

    \n {children}\n
    \n );\n }\n}\n\nSection.propTypes = propTypes;\n\nexport default Section;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Row, Col, Label } from 'reactstrap';\n\nconst propTypes = {\n displayName: PropTypes.string.isRequired,\n helpTip: PropTypes.string,\n mainContent: PropTypes.object.isRequired,\n extraContent: PropTypes.object\n};\n\nclass SettingItemBase extends Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n const { helpTip, displayName, mainContent, extraContent } = this.props;\n return (\n \n \n \n \n \n \n {mainContent}\n {helpTip &&

    {helpTip}

    }\n \n \n {extraContent}\n \n
    \n
    \n );\n }\n}\n\nSettingItemBase.propTypes = propTypes;\n\nexport default SettingItemBase;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Input, Button } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport SettingItemBase from './setting-item-base';\n\nconst propTypes = {\n inputType: PropTypes.string,\n saveSetting: PropTypes.func.isRequired,\n keyText: PropTypes.string.isRequired,\n value: PropTypes.oneOfType([PropTypes.string,PropTypes.number]),\n helpTip: PropTypes.string.isRequired,\n displayName: PropTypes.string.isRequired\n};\n\nclass WebSettingInput extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isBtnsShown: false,\n value: this.props.value\n };\n }\n\n toggleBtns = () => {\n this.setState({isBtnsShown: !this.state.isBtnsShown});\n };\n\n hideBtns = (e) => {\n if (!this.state.isBtnsShown) {\n return;\n }\n if (this.props.value != this.state.value) {\n this.setState({value: this.props.value});\n }\n this.toggleBtns();\n };\n\n onInputChange = (e) => {\n this.setState({ value: e.target.value });\n };\n\n onSubmit = (e) => {\n const value = this.state.value.trim();\n if (value != this.props.value) {\n this.props.saveSetting(this.props.keyText, value);\n }\n this.toggleBtns();\n };\n\n render() {\n const { isBtnsShown, value } = this.state;\n const { helpTip, displayName, inputType } = this.props;\n return (\n \n }\n extraContent={\n isBtnsShown ?\n \n \n \n : null\n }\n />\n );\n }\n}\n\nWebSettingInput.propTypes = propTypes;\n\nexport default WebSettingInput;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport SettingItemBase from './setting-item-base';\n\nconst propTypes = {\n postFile: PropTypes.func.isRequired,\n keyText: PropTypes.string.isRequired,\n filePath: PropTypes.string.isRequired,\n helpTip: PropTypes.string.isRequired,\n fileWidth: PropTypes.number.isRequired,\n fileHeight: PropTypes.number.isRequired,\n displayName: PropTypes.string.isRequired\n};\n\nclass WebSettingFile extends Component {\n\n constructor(props) {\n super(props);\n this.fileInput = React.createRef();\n }\n\n uploadFile = () => {\n if (!this.fileInput.current.files.length) {\n return;\n }\n const file = this.fileInput.current.files[0];\n this.props.postFile(file, this.props.keyText);\n };\n\n openFileInput = () => {\n this.fileInput.current.click();\n };\n\n render() {\n const { helpTip, filePath, fileWidth, fileHeight, displayName } = this.props;\n return (\n \n \n \n }\n />\n );\n }\n}\n\nWebSettingFile.propTypes = propTypes;\n\nexport default WebSettingFile;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Input } from 'reactstrap';\nimport SettingItemBase from './setting-item-base';\n\nconst propTypes = {\n saveSetting: PropTypes.func.isRequired,\n keyText: PropTypes.string.isRequired,\n value: PropTypes.oneOfType([PropTypes.bool, PropTypes.number]),\n helpTip: PropTypes.string.isRequired,\n displayName: PropTypes.string.isRequired\n};\n\nclass WebSettingCheckbox extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n inputChecked: this.props.value\n };\n }\n\n onInputChange = (e) => {\n const checked = e.target.checked;\n const valueToNum = checked ? 1 : 0;\n this.setState({\n inputChecked: checked\n });\n this.props.saveSetting(this.props.keyText, valueToNum);\n };\n\n render() {\n const { inputChecked } = this.state;\n const { helpTip, displayName } = this.props;\n return (\n \n \n

    {helpTip}

    \n \n }\n />\n );\n }\n}\n\nWebSettingCheckbox.propTypes = propTypes;\n\nexport default WebSettingCheckbox;\n","import React, { Component, Fragment } from 'react';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext, isPro, mediaUrl, logoPath, faviconPath, loginBGPath } from '../../../utils/constants';\nimport Loading from '../../../components/loading';\nimport toaster from '../../../components/toast';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Section from './section';\nimport InputItem from './input-item';\nimport FileItem from './file-item';\nimport CheckboxItem from './checkbox-item';\n\nimport '../../../css/system-admin-web-settings.css';\n\nclass WebSettings extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n config_dict: null,\n logoPath: mediaUrl + logoPath,\n faviconPath: mediaUrl + faviconPath,\n loginBGPath: mediaUrl + loginBGPath\n };\n }\n\n componentDidMount () {\n seafileAPI.sysAdminGetSysSettingInfo().then((res) => {\n this.setState({\n loading: false,\n config_dict: res.data\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n saveSetting = (key, value) => {\n seafileAPI.sysAdminSetSysSettingInfo(key, value).then((res) => {\n this.setState({\n config_dict: res.data\n });\n toaster.success(gettext('Success'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n postFile = (file, fileType) => {\n let postFile;\n if (fileType == 'Logo') {\n postFile = seafileAPI.sysAdminUpdateLogo(file);\n } else if (fileType == 'Favicon') {\n postFile = seafileAPI.sysAdminUpdateFavicon(file);\n } else if (fileType == 'loginBGImage') {\n postFile = seafileAPI.sysAdminUpdateLoginBG(file);\n }\n postFile.then((res) => {\n if (fileType == 'Logo') {\n this.setState({\n logoPath: res.data.logo_path\n });\n } else if (fileType == 'Favicon') {\n this.setState({\n faviconPath: res.data.favicon_path\n });\n } else if (fileType == 'loginBGImage') {\n this.setState({\n loginBGPath: res.data.login_bg_image_path\n });\n }\n toaster.success(gettext('Success'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const { loading, errorMsg, config_dict, logoPath, faviconPath, loginBGPath } = this.state;\n return (\n \n \n
    \n
    \n
    \n

    {gettext('Settings')}

    \n
    \n
    \n {loading && }\n {errorMsg &&

    {errorMsg}

    }\n {(!loading && !errorMsg) && config_dict &&\n \n

    {gettext('Note: Settings via web interface are saved in database table (seahub-db/constance_config). They have a higher priority over the settings in config files.')}

    \n\n
    \n \n \n \n \n
    \n\n
    \n \n \n \n \n \n \n \n \n \n
    \n\n
    \n \n \n \n \n \n \n \n \n
    \n\n
    \n \n
    \n\n
    \n \n \n \n \n \n \n \n
    \n\n
    \n \n \n \n \n \n \n \n \n \n
    \n\n
    \n \n
    \n\n
    \n \n
    \n\n {isPro &&
    \n \n
    }\n
    \n }\n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default WebSettings;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Form, FormGroup, Input } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\n\nconst propTypes = {\n toggle: PropTypes.func.isRequired,\n addNotification: PropTypes.func.isRequired\n};\n\nclass SysAdminAddSysNotificationDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n value: '',\n isSubmitBtnActive: false\n };\n }\n\n handleChange = (e) => {\n const value = e.target.value;\n this.setState({\n value: value,\n isSubmitBtnActive: value.trim() != ''\n });\n };\n\n handleSubmit = () => {\n this.toggle();\n this.props.addNotification(this.state.value.trim());\n };\n\n toggle = () => {\n this.props.toggle();\n };\n\n render() {\n return (\n \n {gettext('Add new notification')}\n \n
    \n \n \n \n
    \n
    \n \n \n \n \n
    \n );\n }\n}\n\nSysAdminAddSysNotificationDialog.propTypes = propTypes;\n\nexport default SysAdminAddSysNotificationDialog;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'reactstrap';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport OpMenu from '../../../components/dialog/op-menu';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport SysAdminAddSysNotificationDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-sys-notification-dialog';\nimport MainPanelTopbar from '../main-panel-topbar';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n render() {\n const { loading, errorMsg, items } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No notifications')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('Notification Detail')}{/*Operations*/}
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getLogsByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n currentPage: PropTypes.number,\n perPage: PropTypes.number,\n pageInfo: PropTypes.object,\n hasNextPage: PropTypes.bool,\n getItemsByPage: PropTypes.func,\n curPerPage: PropTypes.number,\n deleteItem: PropTypes.func,\n setToCurrent: PropTypes.func.isRequired,\n deleteNotification: PropTypes.func.isRequired,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n highlight: false,\n isDeleteDialogOpen: false\n };\n }\n\n handleMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false\n });\n this.props.onUnfreezedItem();\n };\n\n toggleDeleteDialog = (e) => {\n if (e) {\n e.preventDefault();\n }\n this.setState({isDeleteDialogOpen: !this.state.isDeleteDialogOpen});\n };\n\n deleteNotification = () => {\n this.props.deleteNotification(this.props.item.id);\n this.toggleDeleteDialog();\n };\n\n setToCurrent = () => {\n this.props.setToCurrent(this.props.item.id);\n };\n\n onMenuItemClick = (operation) => {\n switch(operation) {\n case 'Set to current':\n this.setToCurrent();\n break;\n case 'Delete':\n this.toggleDeleteDialog();\n break;\n }\n };\n\n translateOperations = (item) => {\n let translateResult = '';\n switch (item) {\n case 'Set to current':\n translateResult = gettext('Set to current');\n break;\n case 'Delete':\n translateResult = gettext('Delete');\n break;\n default:\n break;\n }\n return translateResult;\n };\n\n getOperations = () => {\n const { item } = this.props;\n let operations = [];\n if (!item.is_current) {\n operations.push('Set to current');\n }\n operations.push('Delete');\n return operations;\n };\n\n render() {\n const { item } = this.props;\n const { isOpIconShown, isDeleteDialogOpen } = this.state;\n\n return (\n \n \n \n {item.msg}\n {item.is_current &&\n {gettext('(current notification)')}\n }\n \n \n {isOpIconShown &&\n \n }\n \n \n {isDeleteDialogOpen &&\n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n deleteItem: PropTypes.func,\n onFreezedItem: PropTypes.func.isRequired,\n setToCurrent: PropTypes.func.isRequired,\n deleteNotification: PropTypes.func.isRequired,\n};\n\nclass Notifications extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n notificationList: [],\n isAddNotificationDialogOpen: false\n };\n }\n\n componentDidMount () {\n seafileAPI.sysAdminListAllSysNotifications().then((res) => {\n this.setState({\n loading: false,\n notificationList: res.data.notifications\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n toggleAddNotificationDialog = () => {\n this.setState({isAddNotificationDialogOpen: !this.state.isAddNotificationDialogOpen});\n };\n\n addNotification = (msg) => {\n seafileAPI.sysAdminAddSysNotification(msg).then(res => {\n let notificationList = this.state.notificationList;\n notificationList.unshift(res.data.notification);\n this.setState({notificationList: notificationList});\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n deleteNotification = (id) => {\n seafileAPI.sysAdminDeleteSysNotification(id).then(res => {\n let notificationList = this.state.notificationList.filter(item => {\n return item.id != id;\n });\n this.setState({notificationList: notificationList});\n toaster.success(gettext('Successfully deleted 1 item.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n setToCurrent = (id) => {\n seafileAPI.sysAdminSetSysNotificationToCurrent(id).then(res => {\n let notificationList = this.state.notificationList.map(item => {\n if (item.id == id) {\n item.is_current = true;\n } else {\n item.is_current = false;\n }\n return item;\n });\n this.setState({notificationList: notificationList});\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n const { isAddNotificationDialogOpen } = this.state;\n return (\n \n \n \n \n
    \n
    \n
    \n

    {gettext('All Notifications')}

    \n
    \n
    \n \n
    \n
    \n
    \n {isAddNotificationDialogOpen &&\n \n }\n
    \n );\n }\n}\n\nexport default Notifications;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { gettext } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport MainPanelTopbar from './main-panel-topbar';\n\n\nconst tablePropTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n records: PropTypes.array.isRequired,\n};\n\nclass Table extends Component {\n\n render() {\n let { loading, errorMsg, records } = this.props;\n\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n return (\n \n \n \n \n \n \n \n \n \n \n \n {records.map((record, index) => {\n return (\n \n );\n })}\n \n
    {gettext('Library')}ID{gettext('Path')}{gettext('Label')}{gettext('Suggestion')}
    \n );\n }\n }\n}\n\nTable.propTypes = tablePropTypes;\n\n\nconst itemPropTypes = {\n record: PropTypes.object.isRequired,\n};\n\nclass Item extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n render() {\n let record = this.props.record;\n\n return (\n \n {record.repo_name}\n {record.repo_id}\n {record.path}\n {record.detail.label}\n {record.detail.suggestion}\n \n );\n }\n}\n\nItem.propTypes = itemPropTypes;\n\n\nclass FileScanRecords extends Component {\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n records: [],\n };\n }\n\n componentDidMount() {\n seafileAPI.listFileScanRecords().then((res) => {\n this.setState({\n loading: false,\n records: res.data.record_list,\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n render() {\n return (\n \n \n
    \n
    \n
    \n

    {gettext('Content Scan Records')}

    \n
    \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default FileScanRecords;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Table } from 'reactstrap';\nimport { siteRoot } from '../../../utils/constants';\nimport Loading from '../../../components/loading';\n\nconst WorkWeixinDepartmentMembersListPropTypes = {\n isMembersListLoading: PropTypes.bool.isRequired,\n membersList: PropTypes.array.isRequired,\n newUsersTempObj: PropTypes.object.isRequired,\n checkedDepartmentId: PropTypes.number.isRequired,\n onUserChecked: PropTypes.func.isRequired,\n onAllUsersChecked: PropTypes.func.isRequired,\n isCheckedAll: PropTypes.bool.isRequired,\n canCheckUserIds: PropTypes.array.isRequired,\n};\n\nclass WorkWeixinDepartmentMembersList extends Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n const { newUsersTempObj, checkedDepartmentId, isMembersListLoading, canCheckUserIds } = this.props;\n const membersList = this.props.membersList.map((member, index) => {\n let avatar = member.avatar;\n if (member.avatar && member.avatar.length > 0) {\n avatar = member.avatar.substring(0, member.avatar.length - 1) + '100';// get smaller avatar\n } else {\n avatar = siteRoot + 'media/avatars/default.png';\n }\n return (\n \n \n {!member.email &&\n this.props.onUserChecked(member)}\n checked={(member.userid in newUsersTempObj) ? 'checked' : ''}>}\n \n \"\"\n {member.name}\n {member.mobile}\n {member.contact_email}\n {member.email && }\n \n );\n });\n\n return (\n
    \n {isMembersListLoading && }\n {!isMembersListLoading && this.props.membersList.length > 0 &&\n \n \n \n \n \n \n \n \n \n \n \n {membersList}\n
    \n {canCheckUserIds.length > 0 &&\n this.props.onAllUsersChecked()}>}\n {'名称'}{'手机号'}{'邮箱'}{'已添加'}
    \n }\n {!isMembersListLoading && this.props.membersList.length === 0 &&\n
    \n \"\"/\n

    {'成员列表为空'}

    \n
    \n }\n
    \n );\n }\n}\n\nWorkWeixinDepartmentMembersList.propTypes = WorkWeixinDepartmentMembersListPropTypes;\n\nexport default WorkWeixinDepartmentMembersList;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Dropdown, DropdownItem, DropdownMenu, DropdownToggle } from 'reactstrap';\nimport { gettext, isPro } from '../../../utils/constants';\n\nconst WorkWeixinDepartmentsTreeNodePropTypes = {\n index: PropTypes.number,\n department: PropTypes.object.isRequired,\n isChildrenShow: PropTypes.bool.isRequired,\n onChangeDepartment: PropTypes.func.isRequired,\n checkedDepartmentId: PropTypes.number.isRequired,\n importDepartmentDialogToggle: PropTypes.func.isRequired,\n};\n\nclass WorkWeixinDepartmentsTreeNode extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isChildrenShow: false,\n dropdownOpen: false,\n active: false,\n };\n }\n\n toggleChildren = (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.setState({\n isChildrenShow: !this.state.isChildrenShow,\n });\n };\n\n dropdownToggle = (e) => {\n e.stopPropagation();\n this.setState({ dropdownOpen: !this.state.dropdownOpen });\n };\n\n onMouseEnter = () => {\n this.setState({ active: true });\n };\n\n onMouseLeave = () => {\n if (this.state.dropdownOpen) return;\n this.setState({ active: false });\n };\n\n importDepartmentDialogToggle = (depart) => {\n this.setState({ active: false });\n this.props.importDepartmentDialogToggle(depart);\n };\n\n componentDidMount() {\n if (this.props.index === 0) {\n this.setState({ isChildrenShow: true });\n this.props.onChangeDepartment(this.props.department.id);\n }\n }\n\n renderTreeNodes = (departmentsTree) => {\n if (departmentsTree.length > 0) {\n return departmentsTree.map((department) => {\n return (\n \n );\n });\n }\n };\n\n changeDept = (departmentID) => {\n const { department, checkedDepartmentId } = this.props;\n this.props.onChangeDepartment(departmentID);\n if (checkedDepartmentId === department.id && !this.state.isChildrenShow) {\n this.setState({ isChildrenShow: true });\n }\n };\n\n render() {\n const { isChildrenShow, department, checkedDepartmentId } = this.props;\n let toggleClass = classNames({\n 'folder-toggle-icon fa fa-caret-down': department.children && this.state.isChildrenShow,\n 'folder-toggle-icon fa fa-caret-right': department.children && !this.state.isChildrenShow,\n });\n let nodeInnerClass = classNames({\n 'tree-node-inner': true,\n 'tree-node-inner-hover': this.state.active,\n 'tree-node-hight-light': checkedDepartmentId === department.id\n });\n return (\n \n {isChildrenShow &&\n this.changeDept(department.id)}\n onMouseEnter={this.onMouseEnter}\n onMouseLeave={this.onMouseLeave}\n >\n this.toggleChildren(e)}>\n \n \n {department.name}\n {isPro &&\n this.dropdownToggle(e)}\n direction=\"down\"\n style={this.state.active ? {} : { opacity: 0 }}\n >\n \n \n \n {'导入部门'}\n \n \n }\n \n }\n {this.state.isChildrenShow &&\n
    \n {department.children && this.renderTreeNodes(department.children)}\n
    \n }\n
    \n );\n }\n}\n\nWorkWeixinDepartmentsTreeNode.propTypes = WorkWeixinDepartmentsTreeNodePropTypes;\n\nexport default WorkWeixinDepartmentsTreeNode;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Loading from '../../../components/loading';\nimport WorkWeixinDepartmentsTreeNode from './work-weixin-departments-tree-node';\n\nconst WorkWeixinDepartmentsTreePanelPropTypes = {\n isTreeLoading: PropTypes.bool.isRequired,\n departmentsTree: PropTypes.array.isRequired,\n onChangeDepartment: PropTypes.func.isRequired,\n checkedDepartmentId: PropTypes.number.isRequired,\n importDepartmentDialogToggle: PropTypes.func.isRequired,\n};\n\nclass WorkWeixinDepartmentsTreePanel extends Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n const { departmentsTree } = this.props;\n return (\n
    \n
    \n {this.props.isTreeLoading ?\n :\n
    \n {departmentsTree.length > 0 && departmentsTree.map((department, index) => {\n return (\n \n );\n })}\n
    \n }\n
    \n
    \n );\n }\n}\n\nWorkWeixinDepartmentsTreePanel.propTypes = WorkWeixinDepartmentsTreePanelPropTypes;\n\nexport default WorkWeixinDepartmentsTreePanel;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport Loading from '../loading';\n\nconst propTypes = {\n importDepartmentDialogToggle: PropTypes.func.isRequired,\n onImportDepartmentSubmit: PropTypes.func.isRequired,\n departmentsCount: PropTypes.number.isRequired,\n membersCount: PropTypes.number.isRequired,\n departmentName: PropTypes.string.isRequired,\n};\n\nclass ImportWorkWeixinDepartmentDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isLoading : false,\n };\n }\n\n toggle = () => {\n this.props.importDepartmentDialogToggle(null);\n };\n\n handleSubmit = () => {\n this.props.onImportDepartmentSubmit();\n this.setState({ isLoading : true });\n };\n\n render() {\n const { departmentsCount, membersCount, departmentName } = this.props;\n return (\n \n \n {'导入部门 '}{departmentName}\n \n \n

    {'将要导入 '}{departmentsCount}{' 个部门,其中包括 '}{membersCount}{' 个成员'}

    \n {this.state.isLoading && }\n
    \n \n \n \n \n
    \n );\n }\n}\n\nImportWorkWeixinDepartmentDialog.propTypes = propTypes;\n\nexport default ImportWorkWeixinDepartmentDialog;\n","import React, { Component, Fragment } from 'react';\nimport { Button } from 'reactstrap';\nimport deepCopy from 'deep-copy';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { siteRoot, isPro } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport toaster from '../../components/toast';\nimport MainPanelTopbar from './main-panel-topbar';\nimport { WorkWeixinDepartmentMembersList, WorkWeixinDepartmentsTreePanel } from './work-weixin';\nimport ImportWorkWeixinDepartmentDialog from '../../components/dialog/import-work-weixin-department-dialog';\n\nimport '../../css/work-weixin-departments.css';\n\nclass WorkWeixinDepartments extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isTreeLoading: true,\n isMembersListLoading: true,\n departmentsTree: [],\n checkedDepartmentId: 0,\n membersTempObj: {},\n membersList: [],\n newUsersTempObj: {},\n isCheckedAll: false,\n canCheckUserIds: [],\n isImportDepartmentDialogShow: false,\n importDepartment: null,\n importDepartmentChildrenCount: 0,\n importDepartmentMembersCount: 0,\n };\n }\n\n getDepartmentsTree = (list) => {\n let childIds = [];\n let parentIds = [];\n for (let i = 0; i < list.length; i++) {\n if (childIds.indexOf(list[i].id) === -1) {\n childIds.push(list[i].id);\n }\n if (parentIds.indexOf(list[i].parentid) === -1) {\n parentIds.push(list[i].parentid);\n }\n }\n let intersection = parentIds.filter((v) => {\n return childIds.indexOf(v) !== -1;\n });\n let rootIds = parentIds.concat(intersection).filter((v) => {\n return parentIds.indexOf(v) === -1 || intersection.indexOf(v) === -1;\n });\n let cloneData = deepCopy(list);\n return cloneData.filter(father => {\n let branchArr = cloneData.filter(child => father.id === child.parentid);\n branchArr.length > 0 ? father.children = branchArr : '';\n return rootIds.indexOf(father.parentid) !== -1;\n });\n };\n\n getWorkWeixinDepartmentsList = (departmentID) => {\n seafileAPI.adminListWorkWeixinDepartments(departmentID).then((res) => {\n if (!departmentID) {\n let departmentsTree = this.getDepartmentsTree(res.data.department);\n this.setState({\n isTreeLoading: false,\n departmentsTree: departmentsTree,\n });\n } else {\n this.setState({\n importDepartmentChildrenCount: res.data.department.length,\n importDepartmentMembersCount: this.state.membersTempObj[departmentID].length,\n });\n }\n }).catch((error) => {\n this.handleError(error);\n this.setState({\n isTreeLoading: false,\n isMembersListLoading: false,\n });\n if (error.response && error.response.status === 403) {\n window.location = siteRoot + 'sys/useradmin/';\n }\n });\n };\n\n getWorkWeixinDepartmentMembersList = (department_id) => {\n this.setState({\n isMembersListLoading: true,\n });\n seafileAPI.adminListWorkWeixinDepartmentMembers(department_id, {fetch_child: true}).then((res) => {\n let membersTempObj = this.state.membersTempObj;\n membersTempObj[department_id] = res.data.userlist;\n let canCheckUserIds = this.getCanCheckUserIds(res.data.userlist);\n this.setState({\n membersTempObj: membersTempObj,\n membersList: res.data.userlist,\n isMembersListLoading: false,\n canCheckUserIds: canCheckUserIds,\n });\n }).catch((error) => {\n this.setState({isMembersListLoading: false});\n this.handleError(error);\n });\n };\n\n getCanCheckUserIds = (membersList) => {\n let userIds = [];\n membersList.forEach((member) => {\n if (!member.email) userIds.push(member.userid);\n });\n return userIds;\n };\n\n onChangeDepartment = (department_id) => {\n this.setState({\n newUsersTempObj: {},\n isCheckedAll: false,\n checkedDepartmentId: department_id,\n });\n if (!(department_id in this.state.membersTempObj)) {\n this.getWorkWeixinDepartmentMembersList(department_id);\n } else {\n let canCheckUserIds = this.getCanCheckUserIds(this.state.membersTempObj[department_id]);\n this.setState({\n membersList: this.state.membersTempObj[department_id],\n canCheckUserIds: canCheckUserIds,\n });\n }\n };\n\n onUserChecked = (user) => {\n if (this.state.canCheckUserIds.indexOf(user.userid) !== -1) {\n let newUsersTempObj = this.state.newUsersTempObj;\n if (user.userid in newUsersTempObj) {\n delete newUsersTempObj[user.userid];\n if (this.state.isCheckedAll) {\n this.setState({ isCheckedAll: false });\n }\n } else {\n newUsersTempObj[user.userid] = user;\n if (Object.keys(newUsersTempObj).length === this.state.canCheckUserIds.length) {\n this.setState({ isCheckedAll: true });\n }\n }\n this.setState({ newUsersTempObj: newUsersTempObj });\n }\n };\n\n onAllUsersChecked = () => {\n this.setState({\n isCheckedAll: !this.state.isCheckedAll,\n }, () => {\n if (this.state.isCheckedAll) {\n let newUsersTempObj = {};\n let newUsersTempList = this.state.membersList.filter(user => {\n return this.state.canCheckUserIds.indexOf(user.userid) !== -1;\n });\n for (let i = 0; i < newUsersTempList.length; i++) {\n newUsersTempObj[newUsersTempList[i].userid] = newUsersTempList[i];\n }\n this.setState({ newUsersTempObj: newUsersTempObj });\n } else {\n this.setState({ newUsersTempObj: {} });\n }\n });\n };\n\n onSubmit = () => {\n const { newUsersTempObj } = this.state;\n if (JSON.stringify(newUsersTempObj) === '{}') return;\n let userList = [];\n for (let i in newUsersTempObj) {\n userList.push(newUsersTempObj[i]);\n }\n if (userList.length === 0) {\n toaster.danger('未选择成员', {duration: 3});\n return;\n }\n seafileAPI.adminAddWorkWeixinUsersBatch(userList).then((res) => {\n this.setState({\n newUsersTempObj: {},\n isCheckedAll: false,\n });\n if (res.data.success) {\n this.handleSubmitSuccess(res.data.success);\n }\n if (res.data.failed) {\n const fails= res.data.failed;\n for (let i = 0; i < fails.length; i++) {\n toaster.danger(fails[i].name + ' ' + fails[i].error_msg, {duration: 3});\n }\n }\n }).catch((error) => {\n this.handleError(error);\n });\n\n };\n\n handleSubmitSuccess = (success) => {\n let { membersTempObj, membersList, canCheckUserIds } = this.state;\n for (let i = 0; i < success.length; i++) {\n let { userid, name, email } = success[i];\n toaster.success(name + ' 成功导入', {duration: 1});\n // refresh all temp\n if (canCheckUserIds.indexOf(userid) !== -1) {\n canCheckUserIds.splice(canCheckUserIds.indexOf(userid), 1);\n }\n for (let j = 0; j < membersList.length; j++) {\n if (membersList[j].userid === userid) {\n membersList[j].email = email;\n break;\n }\n }\n for (let departmentId in membersTempObj) {\n for (let k = 0; k < membersTempObj[departmentId].length; k++) {\n if (membersTempObj[departmentId][k].userid === userid) {\n membersTempObj[departmentId][k].email = email;\n break;\n }\n }\n }\n }\n this.setState({\n membersTempObj: membersTempObj,\n membersList: membersList,\n canCheckUserIds: canCheckUserIds,\n });\n };\n\n importDepartmentDialogToggle = (importDepartment) => {\n this.setState({\n isImportDepartmentDialogShow: !this.state.isImportDepartmentDialogShow,\n importDepartment: importDepartment,\n }, () => {\n if (importDepartment) {\n this.getWorkWeixinDepartmentsList(importDepartment.id);\n }\n });\n };\n\n onImportDepartmentSubmit = () => {\n let importDepartment = this.state.importDepartment;\n if (!importDepartment) return;\n seafileAPI.adminImportWorkWeixinDepartment(importDepartment.id).then((res) => {\n this.setState({\n isMembersListLoading: true,\n checkedDepartmentId: importDepartment.id,\n membersTempObj: {},\n membersList: [],\n newUsersTempObj: {},\n isCheckedAll: false,\n canCheckUserIds: [],\n });\n this.getWorkWeixinDepartmentMembersList(importDepartment.id);\n this.importDepartmentDialogToggle(null);\n if (res.data.success) {\n this.handleImportDepartmentSubmitSuccess(res.data.success);\n }\n if (res.data.failed) {\n this.handleImportDepartmentSubmitFailed(res.data.failed);\n }\n }).catch((error) => {\n this.handleError(error);\n });\n };\n\n handleImportDepartmentSubmitSuccess = (successes) => {\n for (let i = 0, len = successes.length; i < len; i++) {\n let success = successes[i];\n let successMsg = success.type === 'department' ? '部门 ' + success.department_name + ' 导入成功' : success.api_user_name + ' 导入成功' ;\n toaster.success(successMsg, { duration: 3 });\n }\n };\n\n handleImportDepartmentSubmitFailed = (fails) => {\n for (let i = 0, len = fails.length; i < len; i++) {\n let fail = fails[i];\n let failName = fail.type === 'department' ? fail.department_name : fail.api_user_name;\n toaster.danger(failName + ' ' + fail.msg, { duration: 3} );\n }\n };\n\n handleError = (error) => {\n const errorMsg = Utils.getErrorMsg(error);\n toaster.danger(errorMsg);\n };\n\n componentDidMount() {\n this.getWorkWeixinDepartmentsList(null);\n }\n\n render() {\n const { isImportDepartmentDialogShow, isTreeLoading, importDepartment, importDepartmentChildrenCount, importDepartmentMembersCount } = this.state;\n let canImportDepartment = !!(isPro && isImportDepartmentDialogShow && !isTreeLoading && importDepartment);\n return (\n \n \n \n \n
    \n
    \n
    \n

    {'企业微信集成'}

    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n {canImportDepartment &&\n \n }\n
    \n );\n }\n}\n\nexport default WorkWeixinDepartments;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Table } from 'reactstrap';\nimport { siteRoot } from '../../../utils/constants';\nimport Loading from '../../../components/loading';\n\nconst DingtalkDepartmentMembersListPropTypes = {\n isMembersListLoading: PropTypes.bool.isRequired,\n membersList: PropTypes.array.isRequired,\n newUsersTempObj: PropTypes.object.isRequired,\n checkedDepartmentId: PropTypes.number.isRequired,\n onUserChecked: PropTypes.func.isRequired,\n onAllUsersChecked: PropTypes.func.isRequired,\n isCheckedAll: PropTypes.bool.isRequired,\n canCheckUserIds: PropTypes.array.isRequired,\n};\n\nclass DingtalkDepartmentMembersList extends Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n const { newUsersTempObj, checkedDepartmentId, isMembersListLoading, canCheckUserIds } = this.props;\n const membersList = this.props.membersList.map((member, index) => {\n let avatar = member.avatar;\n if (member.avatar && member.avatar.length > 0) {\n avatar = member.avatar;\n } else {\n avatar = siteRoot + 'media/avatars/default.png';\n }\n return (\n \n \n {!member.email &&\n this.props.onUserChecked(member)}\n checked={(member.userid in newUsersTempObj) ? 'checked' : ''}>}\n \n \"\"\n {member.name}\n {member.mobile}\n {member.contact_email}\n {member.email && }\n \n );\n });\n\n return (\n
    \n {isMembersListLoading && }\n {!isMembersListLoading && this.props.membersList.length > 0 &&\n \n \n \n \n \n \n \n \n \n \n \n {membersList}\n
    \n {canCheckUserIds.length > 0 &&\n this.props.onAllUsersChecked()}>}\n {'名称'}{'手机号'}{'邮箱'}{'已添加'}
    \n }\n {!isMembersListLoading && this.props.membersList.length === 0 &&\n
    \n \"\"/\n

    {'成员列表为空'}

    \n
    \n }\n
    \n );\n }\n}\n\nDingtalkDepartmentMembersList.propTypes = DingtalkDepartmentMembersListPropTypes;\n\nexport default DingtalkDepartmentMembersList;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Dropdown, DropdownItem, DropdownMenu, DropdownToggle } from 'reactstrap';\nimport { gettext, isPro } from '../../../utils/constants';\n\nconst DingtalkDepartmentsTreeNodePropTypes = {\n index: PropTypes.number,\n department: PropTypes.object.isRequired,\n isChildrenShow: PropTypes.bool.isRequired,\n onChangeDepartment: PropTypes.func.isRequired,\n checkedDepartmentId: PropTypes.number.isRequired,\n importDepartmentDialogToggle: PropTypes.func.isRequired,\n};\n\nclass DingtalkDepartmentsTreeNode extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isChildrenShow: false,\n dropdownOpen: false,\n active: false,\n };\n }\n\n toggleChildren = (e) => {\n e.preventDefault();\n e.stopPropagation();\n this.setState({\n isChildrenShow: !this.state.isChildrenShow,\n });\n };\n\n dropdownToggle = (e) => {\n e.stopPropagation();\n this.setState({ dropdownOpen: !this.state.dropdownOpen });\n };\n\n onMouseEnter = () => {\n this.setState({ active: true });\n };\n\n onMouseLeave = () => {\n if (this.state.dropdownOpen) return;\n this.setState({ active: false });\n };\n\n importDepartmentDialogToggle = (depart) => {\n this.setState({ active: false });\n this.props.importDepartmentDialogToggle(depart);\n };\n\n componentDidMount() {\n if (this.props.index === 0) {\n this.setState({ isChildrenShow: true });\n this.props.onChangeDepartment(this.props.department.id);\n }\n }\n\n renderTreeNodes = (departmentsTree) => {\n if (departmentsTree.length > 0) {\n return departmentsTree.map((department) => {\n return (\n \n );\n });\n }\n };\n\n changeDept = (departmentID) => {\n const { department, checkedDepartmentId } = this.props;\n this.props.onChangeDepartment(departmentID);\n if (checkedDepartmentId === department.id && !this.state.isChildrenShow) {\n this.setState({ isChildrenShow: true });\n }\n };\n\n render() {\n const { isChildrenShow, department, checkedDepartmentId } = this.props;\n let toggleClass = classNames({\n 'folder-toggle-icon fa fa-caret-down': department.children && this.state.isChildrenShow,\n 'folder-toggle-icon fa fa-caret-right': department.children && !this.state.isChildrenShow,\n });\n let nodeInnerClass = classNames({\n 'tree-node-inner': true,\n 'tree-node-inner-hover': this.state.active,\n 'tree-node-hight-light': checkedDepartmentId === department.id\n });\n return (\n \n {isChildrenShow &&\n this.changeDept(department.id)}\n onMouseEnter={this.onMouseEnter}\n onMouseLeave={this.onMouseLeave}\n >\n this.toggleChildren(e)}>\n \n \n {department.name}\n {isPro &&\n this.dropdownToggle(e)}\n direction=\"down\"\n style={this.state.active ? {} : { opacity: 0 }}\n >\n \n \n \n {'导入部门'}\n \n \n }\n \n }\n {this.state.isChildrenShow &&\n
    \n {department.children && this.renderTreeNodes(department.children)}\n
    \n }\n
    \n );\n }\n}\n\nDingtalkDepartmentsTreeNode.propTypes = DingtalkDepartmentsTreeNodePropTypes;\n\nexport default DingtalkDepartmentsTreeNode;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Loading from '../../../components/loading';\nimport DingtalkDepartmentsTreeNode from './dingtalk-departments-tree-node';\n\nconst DingtalkDepartmentsTreePanelPropTypes = {\n isTreeLoading: PropTypes.bool.isRequired,\n departmentsTree: PropTypes.array.isRequired,\n onChangeDepartment: PropTypes.func.isRequired,\n checkedDepartmentId: PropTypes.number.isRequired,\n importDepartmentDialogToggle: PropTypes.func.isRequired,\n};\n\nclass DingtalkDepartmentsTreePanel extends Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n const { departmentsTree } = this.props;\n return (\n
    \n
    \n {this.props.isTreeLoading ?\n :\n
    \n {departmentsTree.length > 0 && departmentsTree.map((department, index) => {\n return (\n \n );\n })}\n
    \n }\n
    \n
    \n );\n }\n}\n\nDingtalkDepartmentsTreePanel.propTypes = DingtalkDepartmentsTreePanelPropTypes;\n\nexport default DingtalkDepartmentsTreePanel;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport Loading from '../loading';\n\nconst propTypes = {\n importDepartmentDialogToggle: PropTypes.func.isRequired,\n onImportDepartmentSubmit: PropTypes.func.isRequired,\n departmentsCount: PropTypes.number.isRequired,\n membersCount: PropTypes.number.isRequired,\n departmentName: PropTypes.string.isRequired,\n};\n\nclass ImportDingtalkDepartmentDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isLoading : false,\n };\n }\n\n toggle = () => {\n this.props.importDepartmentDialogToggle(null);\n };\n\n handleSubmit = () => {\n this.props.onImportDepartmentSubmit();\n this.setState({ isLoading : true });\n };\n\n render() {\n const { departmentsCount, membersCount, departmentName } = this.props;\n return (\n \n \n {'导入部门 '}{departmentName}\n \n \n

    {'将要导入 '}{departmentsCount}{' 个部门,其中包括 '}{membersCount}{' 个成员'}

    \n {this.state.isLoading && }\n
    \n \n \n \n \n
    \n );\n }\n}\n\nImportDingtalkDepartmentDialog.propTypes = propTypes;\n\nexport default ImportDingtalkDepartmentDialog;\n","import React, { Component, Fragment } from 'react';\nimport { Button } from 'reactstrap';\nimport deepCopy from 'deep-copy';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport { siteRoot, isPro } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport MainPanelTopbar from './main-panel-topbar';\nimport toaster from '../../components/toast';\nimport { DingtalkDepartmentMembersList, DingtalkDepartmentsTreePanel } from './dingtalk';\nimport ImportDingtalkDepartmentDialog from '../../components/dialog/import-dingtalk-department-dialog';\n\nimport '../../css/work-weixin-departments.css';\nimport '../../css/dingtalk-departments.css';\n\nclass DingtalkDepartments extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isTreeLoading: true,\n isMembersListLoading: true,\n departmentsTree: [],\n checkedDepartmentId: 0,\n membersTempObj: {},\n membersList: [],\n newUsersTempObj: {},\n isCheckedAll: false,\n canCheckUserIds: [],\n isImportDepartmentDialogShow: false,\n importDepartment: null,\n importDepartmentChildrenCount: 0,\n importDepartmentMembersCount: 0,\n };\n }\n\n getDepartmentsTree = (list) => {\n let childIds = [];\n let parentIds = [];\n for (let i = 0; i < list.length; i++) {\n if (childIds.indexOf(list[i].id) === -1) {\n childIds.push(list[i].id);\n }\n if (parentIds.indexOf(list[i].parentid) === -1) {\n parentIds.push(list[i].parentid);\n }\n }\n let intersection = parentIds.filter((v) => {\n return childIds.indexOf(v) !== -1;\n });\n let rootIds = parentIds.concat(intersection).filter((v) => {\n return parentIds.indexOf(v) === -1 || intersection.indexOf(v) === -1;\n });\n let cloneData = deepCopy(list);\n return cloneData.filter(father => {\n let branchArr = cloneData.filter(child => father.id === child.parentid);\n branchArr.length > 0 ? father.children = branchArr : '';\n return rootIds.indexOf(father.parentid) !== -1;\n });\n };\n\n getDingtalkDepartmentsList = (departmentID) => {\n seafileAPI.adminListDingtalkDepartments(departmentID).then((res) => {\n if (!departmentID) {\n let departmentsTree = this.getDepartmentsTree(res.data.department);\n this.setState({\n isTreeLoading: false,\n departmentsTree: departmentsTree,\n });\n } else {\n this.setState({\n importDepartmentChildrenCount: res.data.department.length,\n importDepartmentMembersCount: this.state.membersTempObj[departmentID].length,\n });\n }\n }).catch((error) => {\n this.handleError(error);\n this.setState({\n isTreeLoading: false,\n isMembersListLoading: false,\n });\n if (error.response && error.response.status === 403) {\n window.location = siteRoot + 'sys/useradmin/';\n }\n });\n };\n\n getDingtalkDepartmentMembersList = (department_id) => {\n this.setState({\n isMembersListLoading: true,\n });\n seafileAPI.adminListDingtalkDepartmentMembers(department_id).then((res) => {\n let membersTempObj = this.state.membersTempObj;\n membersTempObj[department_id] = res.data.userlist;\n let canCheckUserIds = this.getCanCheckUserIds(res.data.userlist);\n this.setState({\n membersTempObj: membersTempObj,\n membersList: res.data.userlist,\n isMembersListLoading: false,\n canCheckUserIds: canCheckUserIds,\n });\n }).catch((error) => {\n this.setState({isMembersListLoading: false});\n this.handleError(error);\n });\n };\n getCanCheckUserIds = (membersList) => {\n let userIds = [];\n membersList.forEach((member) => {\n if (!member.email) userIds.push(member.userid);\n });\n return userIds;\n };\n\n onChangeDepartment = (department_id) => {\n this.setState({\n newUsersTempObj: {},\n isCheckedAll: false,\n checkedDepartmentId: department_id,\n });\n if (!(department_id in this.state.membersTempObj)) {\n this.getDingtalkDepartmentMembersList(department_id);\n } else {\n let canCheckUserIds = this.getCanCheckUserIds(this.state.membersTempObj[department_id]);\n this.setState({\n membersList: this.state.membersTempObj[department_id],\n canCheckUserIds: canCheckUserIds,\n });\n }\n };\n\n onUserChecked = (user) => {\n if (this.state.canCheckUserIds.indexOf(user.userid) !== -1) {\n let newUsersTempObj = this.state.newUsersTempObj;\n if (user.userid in newUsersTempObj) {\n delete newUsersTempObj[user.userid];\n if (this.state.isCheckedAll) {\n this.setState({ isCheckedAll: false });\n }\n } else {\n newUsersTempObj[user.userid] = user;\n if (Object.keys(newUsersTempObj).length === this.state.canCheckUserIds.length) {\n this.setState({ isCheckedAll: true });\n }\n }\n this.setState({ newUsersTempObj: newUsersTempObj });\n }\n };\n\n onAllUsersChecked = () => {\n this.setState({\n isCheckedAll: !this.state.isCheckedAll,\n }, () => {\n if (this.state.isCheckedAll) {\n let newUsersTempObj = {};\n let newUsersTempList = this.state.membersList.filter(user => {\n return this.state.canCheckUserIds.indexOf(user.userid) !== -1;\n });\n for (let i = 0; i < newUsersTempList.length; i++) {\n newUsersTempObj[newUsersTempList[i].userid] = newUsersTempList[i];\n }\n this.setState({ newUsersTempObj: newUsersTempObj });\n } else {\n this.setState({ newUsersTempObj: {} });\n }\n });\n };\n\n onSubmit = () => {\n const { newUsersTempObj } = this.state;\n if (JSON.stringify(newUsersTempObj) === '{}') return;\n let userList = [];\n for (let i in newUsersTempObj) {\n userList.push(newUsersTempObj[i]);\n }\n if (userList.length === 0) {\n toaster.danger('未选择成员', {duration: 3});\n return;\n }\n seafileAPI.adminAddDingtalkUsersBatch(userList).then((res) => {\n this.setState({\n newUsersTempObj: {},\n isCheckedAll: false,\n });\n if (res.data.success) {\n this.handleSubmitSuccess(res.data.success);\n }\n if (res.data.failed) {\n const fails= res.data.failed;\n for (let i = 0; i < fails.length; i++) {\n toaster.danger(fails[i].name + ' ' + fails[i].error_msg, {duration: 3});\n }\n }\n }).catch((error) => {\n this.handleError(error);\n });\n\n };\n\n handleSubmitSuccess = (success) => {\n let { membersTempObj, membersList, canCheckUserIds } = this.state;\n for (let i = 0; i < success.length; i++) {\n let { userid, name, email } = success[i];\n toaster.success(name + ' 成功导入', {duration: 1});\n // refresh all temp\n if (canCheckUserIds.indexOf(userid) !== -1) {\n canCheckUserIds.splice(canCheckUserIds.indexOf(userid), 1);\n }\n for (let j = 0; j < membersList.length; j++) {\n if (membersList[j].userid === userid) {\n membersList[j].email = email;\n break;\n }\n }\n for (let departmentId in membersTempObj) {\n for (let k = 0; k < membersTempObj[departmentId].length; k++) {\n if (membersTempObj[departmentId][k].userid === userid) {\n membersTempObj[departmentId][k].email = email;\n break;\n }\n }\n }\n }\n this.setState({\n membersTempObj: membersTempObj,\n membersList: membersList,\n canCheckUserIds: canCheckUserIds,\n });\n };\n\n importDepartmentDialogToggle = (importDepartment) => {\n this.setState({\n isImportDepartmentDialogShow: !this.state.isImportDepartmentDialogShow,\n importDepartment: importDepartment,\n }, () => {\n if (importDepartment) {\n this.getDingtalkDepartmentsList(importDepartment.id);\n }\n });\n };\n\n onImportDepartmentSubmit = () => {\n let importDepartment = this.state.importDepartment;\n if (!importDepartment) return;\n seafileAPI.adminImportDingtalkDepartment(importDepartment.id).then((res) => {\n this.setState({\n isMembersListLoading: true,\n checkedDepartmentId: importDepartment.id,\n membersTempObj: {},\n membersList: [],\n newUsersTempObj: {},\n isCheckedAll: false,\n canCheckUserIds: [],\n });\n this.getDingtalkDepartmentMembersList(importDepartment.id);\n this.importDepartmentDialogToggle(null);\n if (res.data.success) {\n this.handleImportDepartmentSubmitSuccess(res.data.success);\n }\n if (res.data.failed) {\n this.handleImportDepartmentSubmitFailed(res.data.failed);\n }\n }).catch((error) => {\n this.handleError(error);\n });\n };\n\n handleImportDepartmentSubmitSuccess = (successes) => {\n for (let i = 0, len = successes.length; i < len; i++) {\n let success = successes[i];\n let successMsg = success.type === 'department' ? '部门 ' + success.department_name + ' 导入成功' : success.api_user_name + ' 导入成功' ;\n toaster.success(successMsg, { duration: 3 });\n }\n };\n\n handleImportDepartmentSubmitFailed = (fails) => {\n for (let i = 0, len = fails.length; i < len; i++) {\n let fail = fails[i];\n let failName = fail.type === 'department' ? fail.department_name : fail.api_user_name;\n toaster.danger(failName + ' ' + fail.msg, { duration: 3} );\n }\n };\n\n handleError = (error) => {\n const errorMsg = Utils.getErrorMsg(error);\n toaster.danger(errorMsg);\n };\n\n componentDidMount() {\n this.getDingtalkDepartmentsList(null);\n }\n\n render() {\n const { isImportDepartmentDialogShow, isTreeLoading, importDepartment, importDepartmentChildrenCount, importDepartmentMembersCount } = this.state;\n let canImportDepartment = !!(isPro && isImportDepartmentDialogShow && !isTreeLoading && importDepartment);\n return (\n \n \n \n \n
    \n
    \n
    \n

    {'钉钉集成'}

    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n {canImportDepartment &&\n \n }\n
    \n );\n }\n}\n\nexport default DingtalkDepartments;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'reactstrap';\nimport moment from 'moment';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport toaster from '../../../components/toast';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport OpMenu from '../../../components/dialog/op-menu';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n getPreviousPage = () => {\n this.props.getItemsByPage(this.props.currentPage - 1);\n };\n\n getNextPage = () => {\n this.props.getItemsByPage(this.props.currentPage + 1);\n };\n\n render() {\n const { loading, errorMsg, items, curPerPage, hasNextPage, currentPage } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No invitations')}

    \n
    \n );\n\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {items.map((item, index) => {\n return ();\n })}\n \n
    {gettext('Inviter')}{gettext('Accepter')}{gettext('Type')}{gettext('Invited at')}{gettext('Accepted at')}{gettext('Expired at')}
    \n \n
    \n );\n\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getLogsByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n currentPage: PropTypes.number,\n perPage: PropTypes.number,\n pageInfo: PropTypes.object,\n hasNextPage: PropTypes.bool,\n getItemsByPage: PropTypes.func,\n curPerPage: PropTypes.number,\n deleteItem: PropTypes.func,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n highlight: false\n };\n }\n\n handleMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false\n });\n this.props.onUnfreezedItem();\n };\n\n deleteItem = () => {\n this.props.deleteItem(this.props.item);\n };\n\n translateOperations = (item) => {\n let translateResult = '';\n switch (item) {\n case 'Delete':\n translateResult = gettext('Delete');\n break;\n }\n return translateResult;\n };\n\n onMenuItemClick = (operation) => {\n switch(operation) {\n case 'Delete':\n this.deleteItem();\n break;\n default:\n break;\n }\n };\n\n getInviteTypeText = () => {\n let translateResult = '';\n switch (this.props.item.invite_type) {\n case 'Guest':\n translateResult = gettext('Guest');\n break;\n case 'guest':\n translateResult = gettext('Guest');\n break;\n case 'Default':\n translateResult = gettext('Default');\n break;\n case 'default':\n translateResult = gettext('Default');\n break;\n }\n return translateResult;\n };\n\n render() {\n const { item } = this.props;\n const {\n isOpIconShown\n } = this.state;\n\n return (\n \n \n \n \n \n \n {item.accept_time ?\n :\n item.accepter_email\n }\n \n {this.getInviteTypeText()}\n \n {moment(item.invite_time).fromNow()}\n \n \n {item.accept_time ?\n {moment(item.accept_time).fromNow()} :\n '--'\n }\n \n \n {item.is_expired ?\n {moment(item.expire_time).format('YYYY-MM-DD HH:mm')} :\n moment(item.expire_time).format('YYYY-MM-DD HH:mm')\n }\n \n \n {isOpIconShown &&\n \n }\n \n \n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n deleteItem: PropTypes.func,\n onFreezedItem: PropTypes.func.isRequired,\n};\n\nclass Invitations extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n items: [],\n totalItemCount: 0,\n hasNextPage: false,\n currentPage: 1,\n perPage: 25\n };\n }\n\n componentDidMount () {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getItemsByPage(this.state.currentPage);\n });\n }\n\n getItemsByPage = (page) => {\n let { perPage } = this.state;\n seafileAPI.sysAdminListInvitations(page, perPage).then(res => {\n this.setState({\n loading: false,\n items: res.data.invitation_list,\n hasNextPage: Utils.hasNextPage(page, perPage, res.data.total_count),\n currentPage: page\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n deleteItem = (targetItem) => {\n const token = targetItem.token;\n seafileAPI.sysAdminDeleteInvitation(token).then(res => {\n let items = this.state.items.filter(item => {\n return item.token != token;\n });\n this.setState({items: items});\n toaster.success(gettext('Successfully deleted 1 item.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n deleteItemInBatch = () => {\n seafileAPI.sysAdminDeleteExpiredInvitations().then(res => {\n const prevItems = this.state.items;\n const items = this.state.items.filter(item => !item.is_expired || item.accept_time);\n if (items.length < prevItems.length) {\n this.setState({\n items: items\n });\n toaster.success(gettext('Operation succeeded.'));\n }\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n resetPerPage = (perPage) => {\n this.setState({\n perPage: perPage\n }, () => {\n this.getItemsByPage(1);\n });\n };\n\n render() {\n return (\n \n \n \n \n
    \n
    \n
    \n

    {gettext('Invitations')}

    \n
    \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default Invitations;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap';\nimport { SimpleEditor } from '@seafile/seafile-editor';\nimport { gettext } from '../../utils/constants';\n\nconst propTypes = {\n title: PropTypes.string,\n content: PropTypes.string,\n onCommit: PropTypes.func.isRequired,\n onCloseEditorDialog: PropTypes.func.isRequired,\n};\n\nclass TermsEditorDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isValueChanged: false,\n };\n this.editorRef = React.createRef();\n }\n\n static defaultProps = {\n title: gettext('Terms'),\n };\n\n onKeyDown = (event) => {\n event.stopPropagation();\n };\n\n toggle = () => {\n const { isValueChanged } = this.state;\n if (isValueChanged) {\n let currentContent = this.getCurrentContent();\n this.props.onCommit(currentContent);\n }\n this.props.onCloseEditorDialog();\n };\n\n onContentChanged = () => {\n return this.setState({isValueChanged: true});\n };\n\n getCurrentContent = () => {\n return this.editorRef.current.getValue();\n };\n\n setSimpleEditorRef = (editor) => {\n this.simpleEditor = editor;\n };\n\n render() {\n let { content, title } = this.props;\n return (\n \n {title}\n \n \n \n \n );\n }\n}\n\nTermsEditorDialog.propTypes = propTypes;\n\nexport default TermsEditorDialog;\n","import React, {Fragment} from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter, Input, Alert, FormGroup, Label } from 'reactstrap';\nimport { gettext } from '../../../utils/constants';\nimport TermsPreviewWidget from '../../terms-preview-widget';\nimport TermsEditorDialog from '../terms-editor-dialog';\n\nimport '../../../css/terms-conditions-editor.css';\n\nconst propTypes = {\n isUpdate: PropTypes.bool,\n oldTermObj: PropTypes.object,\n addTerm: PropTypes.func,\n updateTerm: PropTypes.func,\n toggle: PropTypes.func.isRequired,\n};\n\nclass AddOrUpdateTermDialog extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n name: '',\n versionNumber: '',\n text: '',\n isActive: true,\n errorMsg: '',\n isConditionsEditorDialogShow: false,\n };\n }\n\n componentDidMount() {\n let oldTermObj = this.props.oldTermObj;\n if (oldTermObj) {\n this.setState({\n name: oldTermObj.name,\n versionNumber: oldTermObj.version_number,\n text: oldTermObj.text,\n isActive: !(oldTermObj.activate_time === ''),\n });\n }\n }\n\n handleNameChange = (e) => {\n this.setState({name: e.target.value.trim()});\n };\n\n handleVersionNumberChange = (e) => {\n this.setState({versionNumber: e.target.value.trim()});\n };\n\n handleTextChange = (e) => {\n this.setState({text: e.target.value.trim()});\n };\n\n setActive = () => {\n this.setState({isActive: true});\n };\n\n setInActive = () => {\n this.setState({isActive: false});\n };\n\n addTerm = () => {\n let { name, versionNumber, text, isActive } = this.state;\n if (name === '') {\n this.setState({errMsg: gettext('Name is required.')});\n return;\n }\n if (versionNumber === '') {\n this.setState({errMsg: gettext('Version Number is required.')});\n return;\n }\n if (isNaN(versionNumber)) {\n this.setState({errMsg: gettext('Version Number must be a number.')});\n return;\n }\n if (text === '') {\n this.setState({errMsg: gettext('Text is required.')});\n return;\n }\n if (this.props.isUpdate) {\n this.props.updateTerm(name, versionNumber, text, isActive);\n } else {\n this.props.addTerm(name, versionNumber, text, isActive);\n }\n };\n\n onContentClick = () => {\n this.setState({isConditionsEditorDialogShow: !this.state.isConditionsEditorDialogShow});\n };\n\n onCloseEditorDialog = () => {\n this.setState({isConditionsEditorDialogShow: false});\n };\n\n onUpdateContent = (content) => {\n this.setState({ text: content });\n };\n\n render() {\n let title = this.props.isUpdate ? gettext('Update Terms and Conditions') : gettext('Add Terms and Conditions');\n return (\n \n \n {title}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {this.state.errMsg && {this.state.errMsg}}\n \n \n \n \n \n {this.state.isConditionsEditorDialogShow && (\n \n )}\n \n );\n }\n}\n\nAddOrUpdateTermDialog.propTypes = propTypes;\n\nexport default AddOrUpdateTermDialog;\n","const hrefReg = /\\[.+\\]\\(\\S+\\)||!\\[\\]\\(\\S+\\)|<\\S+>/g,\n imageReg1 = /^/,\n imageReg2 = /^!\\[\\]\\((\\S+)\\)/,\n linkReg1 = /^\\[.+\\]\\(\\S+\\)/,\n linkReg2 = /^<\\S+>$/;\n\nconst getLinks = (hrefs) => {\n const hrefObj = {\n links: [],\n images: []\n };\n hrefs.forEach((href) => {\n if (href.search(linkReg1) >= 0 || href.search(linkReg2) >= 0) {\n hrefObj.links.push(href);\n } else {\n let imageSrcs = href.match(imageReg1);\n let imageSrcs1 = href.match(imageReg2);\n if (imageSrcs) {\n hrefObj.images.push(imageSrcs[1]);\n } else if (imageSrcs1) {\n hrefObj.images.push(imageSrcs1[1]);\n }\n }\n });\n return hrefObj;\n};\n\n\nconst getPreviewContent = (markdownContent) => {\n let previewText = '';\n let newMarkdownContent = markdownContent.replace(hrefReg, '');\n for (let index = 0; index < newMarkdownContent.length; index++) {\n if (newMarkdownContent[index] === '#') {\n continue;\n } else if (newMarkdownContent[index] === '\\n') {\n previewText += ' ';\n } else {\n previewText += newMarkdownContent[index];\n }\n if (previewText.length === 30) {\n break;\n }\n }\n\n const hrefs = markdownContent.match(hrefReg);\n if (hrefs) {\n const { images, links } = getLinks(hrefs);\n return { previewText, images, links };\n }\n return { previewText, images: [], links: [] };\n};\n\n\nexport default getPreviewContent;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, ModalHeader, ModalBody } from 'reactstrap';\nimport TermsPreviewWidget from '../terms-preview-widget';\nimport { gettext } from '../../utils/constants';\n\nconst propTypes = {\n title: PropTypes.string,\n content: PropTypes.string,\n onClosePreviewDialog: PropTypes.func.isRequired,\n};\n\nclass TermsPreviewDialog extends React.Component {\n\n static defaultProps = {\n title: gettext('Terms'),\n };\n\n\n toggle = () => {\n this.props.onClosePreviewDialog();\n };\n\n render() {\n let { title, content } = this.props;\n return (\n \n {title}\n \n \n \n \n );\n }\n}\n\nTermsPreviewDialog.propTypes = propTypes;\n\nexport default TermsPreviewDialog;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport { processor } from '@seafile/seafile-editor';\nimport { gettext } from '../../../utils/constants';\nimport { Utils } from '../../../utils/utils';\nimport getPreviewContent from '../../../utils/markdown-utils';\nimport AddOrUpdateTermDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-or-update-term-dialog';\nimport CommonOperationConfirmationDialog from '../../../components/dialog/common-operation-confirmation-dialog';\nimport TermsPerviewDialog from '../../../components/dialog/terms-preview-dialog';\nimport ModalPortal from '../../../components/modal-portal';\nimport OpMenu from '../../../components/dialog/op-menu';\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n itemContent: '...',\n isOpIconShown: false,\n isUpdateDialogOpen: false,\n isDeleteDialogOpen: false,\n isTermsPerviewDialogOpen: false,\n };\n }\n\n componentDidMount() {\n let mdFile = this.props.item.text;\n processor.process(mdFile).then((result) => {\n let innerHtml = String(result);\n this.setState({itemContent: innerHtml});\n });\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.item.text !== this.props.item.text) {\n let mdFile = nextProps.item.text;\n processor.process(mdFile).then((result) => {\n let innerHtml = String(result);\n this.setState({itemContent: innerHtml});\n });\n }\n }\n\n handleMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n toggleUpdateDialog = (e) => {\n this.setState({isUpdateDialogOpen: !this.state.isUpdateDialogOpen});\n };\n\n toggleDeleteDialog = (e) => {\n this.setState({isDeleteDialogOpen: !this.state.isDeleteDialogOpen});\n };\n\n toggleTermsContentDialog = (e) => {\n this.setState({isTermsPerviewDialogOpen: !this.state.isTermsPerviewDialogOpen});\n };\n\n onMenuItemClick = (operation) => {\n switch(operation) {\n case 'Update':\n this.toggleUpdateDialog();\n break;\n case 'Delete':\n this.toggleDeleteDialog();\n break;\n }\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false\n });\n this.props.onUnfreezedItem();\n };\n\n deleteTerm = () => {\n this.props.deleteTerm(this.props.item.id);\n this.toggleDeleteDialog();\n };\n\n updateTerm = (name, versionNumber, text, isActive) => {\n this.props.updateTerm(this.props.item.id, name, versionNumber, text, isActive);\n this.toggleUpdateDialog();\n };\n\n translateOperations = (item) => {\n let translateResult = '';\n switch(item) {\n case 'Update':\n translateResult = gettext('Update');\n break;\n case 'Delete':\n translateResult = gettext('Delete');\n break;\n default:\n break;\n }\n\n return translateResult;\n };\n\n render() {\n let { item } = this.props;\n let { isDeleteDialogOpen, isUpdateDialogOpen, isTermsPerviewDialogOpen } = this.state;\n let previewContent = getPreviewContent(item.text);\n let itemName = '' + Utils.HTMLescape(item.name) + '';\n let deleteDialogMsg = gettext('Are you sure you want to delete {placeholder} ?').replace('{placeholder}', itemName);\n return (\n \n \n {item.name}\n {item.version_number}\n \n {previewContent.previewText}\n \n {moment(item.ctime).fromNow()}\n {item.activate_time ? moment(item.activate_time).fromNow() : '--'}\n \n {this.state.isOpIconShown &&\n \n }\n \n \n {isDeleteDialogOpen &&\n \n \n \n }\n {isUpdateDialogOpen &&\n \n \n \n }\n {isTermsPerviewDialogOpen &&\n \n \n \n }\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n deleteTerm: PropTypes.func.isRequired,\n updateTerm: PropTypes.func.isRequired,\n};\n\nexport default Item;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { gettext } from '../../../utils/constants';\nimport EmptyTip from '../../../components/empty-tip';\nimport Loading from '../../../components/loading';\nimport Item from './item';\n\nconst propTypes = {\n loading: PropTypes.bool.isRequired,\n items: PropTypes.array.isRequired,\n errorMsg: PropTypes.string,\n deleteTerm: PropTypes.func.isRequired,\n updateTerm: PropTypes.func.isRequired,\n};\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n render() {\n const { loading, errorMsg, items } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No terms and conditions')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n \n \n {items &&\n \n {items.map((item, index) => {\n return ();\n })}\n \n }\n
    {gettext('Name')}{gettext('Version')}{gettext('Text')}{gettext('Created')}{gettext('Activated')}{/* operation */}
    \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = propTypes;\n\nexport default Content;\n\n","import React, { Component, Fragment } from 'react';\nimport { Button } from 'reactstrap';\nimport { Utils } from '../../../utils/utils';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport AddOrUpdateTermDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-add-or-update-term-dialog';\nimport ModalPortal from '../../../components/modal-portal';\nimport toaster from '../../../components/toast';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Content from './content';\n\nclass TermsAndConditions extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n termList: [],\n isAddTermDialogOpen: false,\n };\n }\n\n toggleAddTermDialog = () => {\n this.setState({isAddTermDialogOpen: !this.state.isAddTermDialogOpen});\n };\n\n componentDidMount () {\n seafileAPI.sysAdminListTermsAndConditions().then((res) => {\n this.setState({\n termList: res.data.term_and_condition_list,\n loading: false,\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n }\n\n addTerm = (name, versionNumber, text, isActive) => {\n seafileAPI.sysAdminAddTermAndCondition(name, versionNumber, text, isActive).then(res => {\n // After adding the terms, you need to refresh the page.\n location.reload();\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n updateTerm = (termID, name, versionNumber, text, isActive) => {\n seafileAPI.sysAdminUpdateTermAndCondition(termID, name, versionNumber, text, isActive).then(res => {\n let termList = this.state.termList.map(item => {\n if (item.id == termID) {\n return res.data;\n } else {\n return item;\n }\n });\n this.setState({termList: termList});\n toaster.success(gettext('Update succeeded.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n deleteTerm = (termID) => {\n seafileAPI.sysAdminDeleteTermAndCondition(termID).then(res => {\n let termList = this.state.termList.filter(item => item.id != termID);\n this.setState({termList: termList});\n toaster.success(gettext('Successfully deleted 1 item.'));\n }).catch((error) => {\n let errMessage = Utils.getErrorMsg(error);\n toaster.danger(errMessage);\n });\n };\n\n render() {\n let { termList, isAddTermDialogOpen } = this.state;\n return (\n \n \n \n \n
    \n
    \n
    \n

    {gettext('Terms and Conditions')}

    \n
    \n
    \n \n
    \n
    \n
    \n {isAddTermDialogOpen &&\n \n \n \n }\n
    \n );\n }\n}\n\nexport default TermsAndConditions;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { siteRoot, gettext } from '../../../utils/constants';\n\nconst propTypes = {\n currentItem: PropTypes.string.isRequired\n};\n\nclass Nav extends React.Component {\n\n constructor(props) {\n super(props);\n this.navItems = [\n {name: 'all', urlPart: 'all', text: gettext('All')},\n {name: 'unhandled', urlPart: 'unhandled', text: gettext('Unhandled')}\n ];\n }\n\n render() {\n const { currentItem } = this.props;\n return (\n
    \n
      \n {this.navItems.map((item, index) => {\n return (\n
    • \n {item.text}\n
    • \n );\n })}\n
    \n
    \n );\n }\n}\n\nNav.propTypes = propTypes;\n\nexport default Nav;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../../components/toast';\nimport OpMenu from '../../../components/dialog/op-menu';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Nav from './nav';\n\nconst virusFileItemPropTypes = {\n virusFile: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n handleFile: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired,\n};\n\nclass VirusFileItem extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n highlight: false,\n isOpIconShown: false\n };\n }\n\n handleMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false\n });\n this.props.onUnfreezedItem();\n };\n\n onMenuItemClick = (operation) => {\n this.props.handleFile(this.props.virusFile.virus_id, operation);\n };\n\n translateOperations = (item) => {\n let translateResult = '';\n switch(item) {\n case 'delete':\n translateResult = gettext('Delete');\n break;\n case 'ignore':\n translateResult = gettext('Ignore');\n break;\n case 'do-not-ignore':\n translateResult = gettext('Don\\'t ignore');\n break;\n }\n return translateResult;\n };\n\n render() {\n const virusFile = this.props.virusFile;\n let fileStatus = '',\n fileOpList = [];\n if (virusFile.has_deleted) {\n fileStatus = {gettext('Deleted')};\n } else if (virusFile.has_ignored) {\n fileStatus = {gettext('Ignored')};\n fileOpList = ['do-not-ignore'];\n } else {\n fileStatus = {gettext('Unhandled')};\n fileOpList = ['delete', 'ignore'];\n }\n\n return (\n \n {virusFile.repo_name}\n {virusFile.repo_owner}\n {virusFile.file_path}\n {fileStatus}\n \n {fileOpList.length > 0 && this.state.isOpIconShown &&\n \n }\n \n \n );\n }\n}\n\nVirusFileItem.propTypes = virusFileItemPropTypes;\n\n\nconst virusFileListPropTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n virusFiles: PropTypes.array.isRequired,\n currentPage: PropTypes.number,\n hasNextPage: PropTypes.bool,\n curPerPage: PropTypes.number,\n resetPerPage: PropTypes.func,\n getListByPage: PropTypes.func.isRequired,\n handleFile: PropTypes.func.isRequired,\n};\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n getPreviousPage = () => {\n this.props.getListByPage(this.props.currentPage - 1);\n };\n\n getNextPage = () => {\n this.props.getListByPage(this.props.currentPage + 1);\n };\n\n render() {\n const {\n loading, errorMsg, virusFiles,\n curPerPage, hasNextPage, currentPage\n } = this.props;\n\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n {virusFiles.map((virusFile, index) => {\n return (\n \n );\n })}\n \n
    {gettext('Library')}{gettext('Owner')}{gettext('Virus File')}{gettext('Status')}{/* Operations */}
    \n {virusFiles.length > 0 &&\n \n }\n
    \n );\n }\n }\n}\n\nContent.propTypes = virusFileListPropTypes;\n\n\nclass AllVirusFiles extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n virusFiles: [],\n currentPage: 1,\n perPage: 25,\n hasNextPage: false\n };\n }\n\n componentDidMount() {\n let urlParams = (new URL(window.location)).searchParams;\n const {\n currentPage, perPage\n } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getListByPage(this.state.currentPage);\n });\n }\n\n getListByPage = (page) => {\n const { perPage } = this.state;\n seafileAPI.listVirusFiles(page, perPage).then((res) => {\n const data = res.data;\n this.setState({\n loading: false,\n virusFiles: data.virus_file_list,\n hasNextPage: data.has_next_page\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n resetPerPage = (perPage) => {\n this.setState({\n perPage: perPage\n }, () => {\n this.getListByPage(1);\n });\n };\n\n handleFile = (virusID, op) => {\n let request;\n switch(op) {\n case 'delete':\n request = seafileAPI.deleteVirusFile(virusID);\n break;\n case 'ignore':\n request = seafileAPI.toggleIgnoreVirusFile(virusID, true);\n break;\n case 'do-not-ignore':\n request = seafileAPI.toggleIgnoreVirusFile(virusID, false);\n break;\n }\n request.then((res) => {\n this.setState({\n virusFiles: this.state.virusFiles.map((item) => {\n if (item.virus_id == virusID) {\n if (op == 'delete') {\n item.has_deleted = true;\n } else {\n item = res.data.virus_file;\n }\n }\n return item;\n })\n });\n }).catch((error) => {\n toaster.danger(Utils.getErrorMsg(error));\n });\n };\n\n render() {\n return (\n \n \n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default AllVirusFiles;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'reactstrap';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport { Utils } from '../../../utils/utils';\nimport toaster from '../../../components/toast';\nimport OpMenu from '../../../components/dialog/op-menu';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport Nav from './nav';\n\nconst virusFileItemPropTypes = {\n resetPerPage: PropTypes.func,\n getListByPage: PropTypes.func.isRequired,\n handleFile: PropTypes.func.isRequired,\n virusFile: PropTypes.object.isRequired,\n isItemFreezed: PropTypes.bool.isRequired,\n toggleItemSelected: PropTypes.func.isRequired,\n onFreezedItem: PropTypes.func.isRequired,\n onUnfreezedItem: PropTypes.func.isRequired\n};\n\nclass VirusFileItem extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n highlight: false,\n isOpIconShown: false\n };\n }\n\n handleMouseEnter = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: true,\n highlight: true\n });\n }\n };\n\n handleMouseLeave = () => {\n if (!this.props.isItemFreezed) {\n this.setState({\n isOpIconShown: false,\n highlight: false\n });\n }\n };\n\n onUnfreezedItem = () => {\n this.setState({\n highlight: false,\n isOpIconShow: false\n });\n this.props.onUnfreezedItem();\n };\n\n onMenuItemClick = (operation) => {\n this.props.handleFile(this.props.virusFile.virus_id, operation);\n };\n\n translateOperations = (item) => {\n let translateResult = '';\n switch(item) {\n case 'delete':\n translateResult = gettext('Delete');\n break;\n case 'ignore':\n translateResult = gettext('Ignore');\n break;\n case 'do-not-ignore':\n translateResult = gettext('Don\\'t ignore');\n break;\n }\n return translateResult;\n };\n\n toggleItemSelected = (e) => {\n this.props.toggleItemSelected(this.props.virusFile, e.target.checked);\n };\n\n render() {\n const virusFile = this.props.virusFile;\n let fileStatus = '',\n fileOpList = [];\n if (virusFile.has_deleted) {\n fileStatus = {gettext('Deleted')};\n } else if (virusFile.has_ignored) {\n fileStatus = {gettext('Ignored')};\n fileOpList = ['do-not-ignore'];\n } else {\n fileStatus = {gettext('Unhandled')};\n fileOpList = ['delete', 'ignore'];\n }\n\n return (\n \n \n \n \n {virusFile.repo_name}\n {virusFile.repo_owner}\n {virusFile.file_path}\n {fileStatus}\n \n {fileOpList.length > 0 && this.state.isOpIconShown &&\n \n }\n \n \n );\n }\n}\n\nVirusFileItem.propTypes = virusFileItemPropTypes;\n\n\nconst virusFileListPropTypes = {\n currentPage: PropTypes.number,\n hasNextPage: PropTypes.bool,\n curPerPage: PropTypes.number,\n resetPerPage: PropTypes.func,\n getListByPage: PropTypes.func.isRequired,\n handleFile: PropTypes.func.isRequired,\n isAllItemsSelected: PropTypes.bool.isRequired,\n toggleAllSelected: PropTypes.func.isRequired,\n toggleItemSelected: PropTypes.func.isRequired,\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n virusFiles: PropTypes.array.isRequired\n};\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isItemFreezed: false\n };\n }\n\n onFreezedItem = () => {\n this.setState({isItemFreezed: true});\n };\n\n onUnfreezedItem = () => {\n this.setState({isItemFreezed: false});\n };\n\n getPreviousPage = () => {\n this.props.getListByPage(this.props.currentPage - 1);\n };\n\n getNextPage = () => {\n this.props.getListByPage(this.props.currentPage + 1);\n };\n\n render() {\n const {\n loading, errorMsg, virusFiles,\n curPerPage, hasNextPage, currentPage,\n isAllItemsSelected\n } = this.props;\n\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n {virusFiles.map((virusFile, index) => {\n return (\n \n );\n })}\n \n
    \n \n {gettext('Library')}{gettext('Owner')}{gettext('Virus File')}{gettext('Status')}{/* Operations */}
    \n {virusFiles.length > 0 &&\n \n }\n
    \n );\n }\n }\n}\n\nContent.propTypes = virusFileListPropTypes;\n\n\nclass UnhandledVirusFiles extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n virusFiles: [],\n\n isAllItemsSelected: false,\n selectedItems: [],\n\n currentPage: 1,\n perPage: 25,\n hasNextPage: false\n };\n }\n\n componentDidMount() {\n let urlParams = (new URL(window.location)).searchParams;\n const {\n currentPage, perPage\n } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getListByPage(this.state.currentPage);\n });\n }\n\n getListByPage = (page) => {\n const { perPage } = this.state;\n const hasHandled = false;\n seafileAPI.listVirusFiles(page, perPage, hasHandled).then((res) => {\n const data = res.data;\n const items = data.virus_file_list.map(item => {\n item.isSelected = false;\n return item;\n });\n this.setState({\n loading: false,\n virusFiles: items,\n hasNextPage: data.has_next_page\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n resetPerPage = (perPage) => {\n this.setState({\n perPage: perPage\n }, () => {\n this.getListByPage(1);\n });\n };\n\n handleFile = (virusID, op) => {\n let request;\n switch(op) {\n case 'delete':\n request = seafileAPI.deleteVirusFile(virusID);\n break;\n case 'ignore':\n request = seafileAPI.toggleIgnoreVirusFile(virusID, true);\n break;\n case 'do-not-ignore':\n request = seafileAPI.toggleIgnoreVirusFile(virusID, false);\n break;\n }\n request.then((res) => {\n this.setState({\n virusFiles: this.state.virusFiles.map((item) => {\n if (item.virus_id == virusID) {\n if (op == 'delete') {\n item.has_deleted = true;\n } else {\n item = res.data.virus_file;\n }\n }\n return item;\n })\n });\n }).catch((error) => {\n toaster.danger(Utils.getErrorMsg(error));\n });\n };\n\n toggleAllSelected = () => {\n this.setState((prevState) => ({\n isAllItemsSelected: !prevState.isAllItemsSelected,\n virusFiles: this.state.virusFiles.map((item) => {\n item.isSelected = !prevState.isAllItemsSelected;\n return item;\n })\n }));\n };\n\n toggleItemSelected = (targetItem, isSelected) => {\n this.setState({\n virusFiles: this.state.virusFiles.map((item) => {\n if (item === targetItem) {\n item.isSelected = isSelected;\n }\n return item;\n })\n }, () => {\n this.setState({\n isAllItemsSelected: !this.state.virusFiles.some(item => !item.isSelected)\n });\n });\n };\n\n handleSelectedItems = (op) => {\n // op: 'delete-virus', 'ignore-virus'\n const virusIDs = this.state.virusFiles\n .filter(item => {\n if (op == 'delete-virus') {\n return item.isSelected && !item.has_deleted;\n } else {\n return item.isSelected && !item.has_ignored;\n }\n })\n .map(item => item.virus_id);\n seafileAPI.batchProcessVirusFiles(virusIDs, op).then((res) => {\n let fileList = this.state.virusFiles;\n res.data.success.forEach(item => {\n let file = fileList.find(file => file.virus_id == item.virus_id);\n if (op == 'delete-virus') {\n file.has_deleted = true;\n } else {\n file.has_ignored = true;\n }\n });\n this.setState({\n virusFiles: fileList\n });\n\n res.data.failed.forEach(item => {\n const file = fileList.find(file => file.virus_id == item.virus_id);\n let errMsg = op == 'delete-virus' ?\n gettext('Failed to delete %(virus_file) from library %(library): %(error_msg)') :\n gettext('Failed to ignore %(virus_file) from library %(library): %(error_msg)');\n errMsg = errMsg.replace('%(virus_file)', file.file_path)\n .replace('%(library)', file.repo_name)\n .replace('%(error_msg)', item.error_msg);\n toaster.danger(errMsg);\n });\n }).catch((error) => {\n toaster.danger(Utils.getErrorMsg(error));\n });\n };\n\n deleteSelectedItems = () => {\n const op = 'delete-virus';\n this.handleSelectedItems(op);\n };\n\n ignoreSelectedItems = () => {\n const op = 'ignore-virus';\n this.handleSelectedItems(op);\n };\n\n render() {\n return (\n \n {this.state.virusFiles.some(item => item.isSelected) ? (\n \n \n \n \n \n \n ) : \n }\n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default UnhandledVirusFiles;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from '@gatsbyjs/reach-router';\nimport { siteRoot, gettext } from '../../../utils/constants';\n\nconst propTypes = {\n currentItem: PropTypes.string.isRequired\n};\n\nclass LogsNav extends React.Component {\n\n constructor(props) {\n super(props);\n this.navItems = [\n {name: 'adminOperationLogs', urlPart:'admin-logs/operation', text: gettext('Admin Operation Logs')},\n {name: 'adminLoginLogs', urlPart:'admin-logs/login', text: gettext('Admin Login Logs')},\n ];\n }\n\n render() {\n const { currentItem } = this.props;\n return (\n
    \n
      \n {this.navItems.map((item, index) => {\n return (\n
    • \n {item.text}\n
    • \n );\n })}\n
    \n
    \n );\n }\n}\n\nLogsNav.propTypes = propTypes;\n\nexport default LogsNav;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext, siteRoot, enableSysAdminViewRepo, isPro } from '../../../utils/constants';\nimport { Utils } from '../../../utils/utils';\nimport EmptyTip from '../../../components/empty-tip';\nimport moment from 'moment';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport LogsNav from './logs-nav';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n }\n\n getPreviousPage = () => {\n this.props.getLogsByPage(this.props.currentPage - 1);\n };\n\n getNextPage = () => {\n this.props.getLogsByPage(this.props.currentPage + 1);\n };\n\n render() {\n const { loading, errorMsg, items, perPage, currentPage, hasNextPage } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No Admin operation logs')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n {items &&\n \n {items.map((item, index) => {\n return ();\n })}\n \n }\n
    {gettext('Name')}{gettext('Operation')}{gettext('Detail')}{gettext('Time')}
    \n \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getLogsByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n currentPage: PropTypes.number,\n perPage: PropTypes.number,\n pageInfo: PropTypes.object,\n hasNextPage: PropTypes.bool,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n isOpIconShown: false,\n };\n }\n\n getOperationText = (operationType) => {\n switch (operationType) {\n case 'repo_create': return gettext('Create Library');\n case 'repo_delete': return gettext('Delete Library');\n case 'repo_transfer': return gettext('Transfer Library');\n case 'group_create': return gettext('Create Group');\n case 'group_transfer': return gettext('Transfer Group');\n case 'group_delete': return gettext('Delete Group');\n case 'user_add': return gettext('Add User');\n case 'user_delete': return gettext('Delete User');\n default: return '';\n }\n };\n\n getOperationDetail = (item) => {\n let detail = item.detail;\n\n let ownerPageUrl = '';\n if (detail.owner) {\n ownerPageUrl = siteRoot + 'sys/users/' + encodeURIComponent(detail.owner) + '/';\n }\n let userPageUrl = '';\n if (detail.email) {\n userPageUrl = siteRoot + 'sys/users/' + encodeURIComponent(detail.email) + '/';\n }\n let detailText = '';\n let repoPageUrl = '';\n let groupPageUrl = '';\n if (item.operation == 'repo_create' || item.operation == 'repo_delete' || item.operation == 'repo_transfer') {\n repoPageUrl = siteRoot + 'sys/libraries/' + detail.id + '/' + encodeURIComponent(detail.name) + '/';\n }\n if (item.operation == 'group_create' || item.operation == 'group_delete' || item.operation == 'group_transfer') {\n groupPageUrl = siteRoot + 'sys/groups/' + detail.id + '/libraries/';\n }\n\n switch (item.operation) {\n case 'repo_create':\n detailText = gettext('Created library {library_name} with {owner} as its owner')\n .replace('{owner}', '' + detail.owner + '');\n if (isPro && enableSysAdminViewRepo) {\n detailText = detailText.replace('{library_name}', '' + detail.name + '');\n } else {\n detailText = detailText.replace('{library_name}', '' + detail.name + '');\n }\n return detailText;\n\n case 'repo_delete':\n detailText = gettext('Deleted library {library_name}')\n .replace('{library_name}', '' + detail.name + '');\n return detailText;\n\n case 'repo_transfer':\n detailText = gettext('Transferred library {library_name} from {user_from} to {user_to}')\n .replace('{user_from}', '' + detail.from + '')\n .replace('{user_to}', '' + detail.to+ '');\n if (isPro && enableSysAdminViewRepo) {\n detailText = detailText.replace('{library_name}', '' + detail.name + '');\n } else {\n detailText = detailText.replace('{library_name}', '' + detail.name + '');\n }\n return detailText;\n\n case 'group_create':\n detailText = gettext('Created group {group_name}')\n .replace('{group_name}', '' + detail.name+ '');\n return detailText;\n\n case 'group_transfer':\n detailText = gettext('Transferred group {group_name} from {user_from} to {user_to}')\n .replace('{user_from}', '' + detail.from + '')\n .replace('{user_to}', '' + detail.to+ '')\n .replace('{group_name}', '' + detail.name+ '');\n return detailText;\n\n case 'group_delete':\n detailText = gettext('Deleted group {group_name}')\n .replace('{group_name}', '' + detail.name + '');\n return detailText;\n\n case 'user_add':\n detailText = gettext('Added user {user}')\n .replace('{user}', '' + detail.email+ '');\n return detailText;\n\n case 'user_delete':\n detailText = gettext('Deleted user {user}')\n .replace('{user}', '' + detail.email+ '');\n return detailText;\n\n default: return '';\n }\n };\n\n render() {\n let { item } = this.props;\n return (\n \n \n {this.getOperationText(item.operation)}\n \n \n \n {moment(item.datetime).fromNow()}\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n};\n\nclass AdminOperationLogs extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n logList: [],\n perPage: 25,\n currentPage: 1,\n hasNextPage: false,\n };\n this.initPage = 1;\n }\n\n componentDidMount () {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getLogsByPage(this.state.currentPage);\n });\n }\n\n getLogsByPage = (page) => {\n let { perPage } = this.state;\n seafileAPI.sysAdminListAdminLogs(page, perPage).then((res) => {\n this.setState({\n logList: res.data.data,\n loading: false,\n currentPage: page,\n hasNextPage: Utils.hasNextPage(page, perPage, res.data.total_count),\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n resetPerPage = (newPerPage) => {\n this.setState({\n perPage: newPerPage,\n }, () => this.getLogsByPage(this.initPage));\n };\n\n render() {\n let { logList, currentPage, perPage, hasNextPage } = this.state;\n return (\n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default AdminOperationLogs;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { seafileAPI } from '../../../utils/seafile-api';\nimport { gettext } from '../../../utils/constants';\nimport { Utils } from '../../../utils/utils';\nimport EmptyTip from '../../../components/empty-tip';\nimport moment from 'moment';\nimport Loading from '../../../components/loading';\nimport Paginator from '../../../components/paginator';\nimport LogsNav from './logs-nav';\nimport MainPanelTopbar from '../main-panel-topbar';\nimport UserLink from '../user-link';\n\n\nclass Content extends Component {\n\n constructor(props) {\n super(props);\n }\n\n getPreviousPage = () => {\n this.props.getLogsByPage(this.props.currentPage - 1);\n };\n\n getNextPage = () => {\n this.props.getLogsByPage(this.props.currentPage + 1);\n };\n\n render() {\n const { loading, errorMsg, items, perPage, currentPage, hasNextPage } = this.props;\n if (loading) {\n return ;\n } else if (errorMsg) {\n return

    {errorMsg}

    ;\n } else {\n const emptyTip = (\n \n

    {gettext('No Admin login logs')}

    \n
    \n );\n const table = (\n \n \n \n \n \n \n \n \n \n \n {items &&\n \n {items.map((item, index) => {\n return ();\n })}\n \n }\n
    {gettext('Name')}{gettext('IP')}{gettext('Status')}{gettext('Time')}
    \n \n
    \n );\n return items.length ? table : emptyTip;\n }\n }\n}\n\nContent.propTypes = {\n loading: PropTypes.bool.isRequired,\n errorMsg: PropTypes.string.isRequired,\n items: PropTypes.array.isRequired,\n getLogsByPage: PropTypes.func,\n resetPerPage: PropTypes.func,\n currentPage: PropTypes.number,\n perPage: PropTypes.number,\n pageInfo: PropTypes.object,\n hasNextPage: PropTypes.bool,\n};\n\nclass Item extends Component {\n\n constructor(props) {\n super(props);\n }\n\n render() {\n let { item } = this.props;\n return (\n \n \n {item.login_ip}\n {item.login_success ? gettext('Success') : gettext('Failed')}\n {moment(item.login_time).fromNow()}\n \n );\n }\n}\n\nItem.propTypes = {\n item: PropTypes.object.isRequired,\n};\n\nclass AdminLoginLogs extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n loading: true,\n errorMsg: '',\n logList: [],\n perPage: 25,\n currentPage: 1,\n hasNextPage: false,\n };\n this.initPage = 1;\n }\n\n componentDidMount () {\n let urlParams = (new URL(window.location)).searchParams;\n const { currentPage, perPage } = this.state;\n this.setState({\n perPage: parseInt(urlParams.get('per_page') || perPage),\n currentPage: parseInt(urlParams.get('page') || currentPage)\n }, () => {\n this.getLogsByPage(this.state.currentPage);\n });\n }\n\n getLogsByPage = (page) => {\n let { perPage } = this.state;\n seafileAPI.sysAdminListAdminLoginLogs(page, perPage).then((res) => {\n this.setState({\n logList: res.data.data,\n loading: false,\n currentPage: page,\n hasNextPage: Utils.hasNextPage(page, perPage, res.data.total_count),\n });\n }).catch((error) => {\n this.setState({\n loading: false,\n errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403\n });\n });\n };\n\n resetPerPage = (newPerPage) => {\n this.setState({\n perPage: newPerPage,\n }, () => this.getLogsByPage(this.initPage));\n };\n\n render() {\n let { logList, currentPage, perPage, hasNextPage } = this.state;\n return (\n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default AdminLoginLogs;\n","import React, { Component, Fragment } from 'react';\nimport { gettext, siteRoot } from '../../utils/constants';\nimport { seafileAPI } from '../../utils/seafile-api';\nimport toaster from '../../components/toast';\nimport moment from 'moment';\nimport MainPanelTopbar from './main-panel-topbar';\n\nclass AbuseReports extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n abuseReportList: [],\n };\n }\n\n listAbuseReports = () => {\n seafileAPI.sysAdminListAbuseReports().then((res) => {\n this.setState({\n abuseReportList: res.data.abuse_report_list,\n });\n }).catch((error) => {\n this.handleError(error);\n });\n };\n\n updateAbuseReport = (handled, abuseReportId) => {\n seafileAPI.sysAdminUpdateAbuseReport(handled, abuseReportId).then((res) => {\n const abuseReportList = this.state.abuseReportList.map((item, index) => {\n if (item.id === abuseReportId) {\n item.handled = res.data.handled;\n }\n return item;\n });\n this.setState({\n abuseReportList: abuseReportList,\n });\n }).catch((error) => {\n this.handleError(error);\n });\n };\n\n handleError = (e) => {\n if (e.response) {\n toaster.danger(e.response.data.error_msg || e.response.data.detail || gettext('Error'), {duration: 3});\n } else {\n toaster.danger(gettext('Please check the network.'), {duration: 3});\n }\n };\n\n componentDidMount() {\n this.listAbuseReports();\n }\n\n render() {\n const AbuseReportList = this.state.abuseReportList.map((item, index) => {\n const handled = (!item.handled).toString();\n const abuseReportId = item.id;\n const fileUrl = siteRoot + 'lib/' + item.repo_id + '/file' + item.file_path;\n return (\n \n {item.repo_name}\n {item.file_path}\n {item.reporter}\n {item.abuse_type}\n {item.description}\n {moment(item.time).format('YYYY-MM-DD')}\n

    {gettext(item.handled.toString())}

    \n \n );\n });\n\n return (\n \n \n
    \n
    \n
    \n

    {gettext('Abuse Reports')}

    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n {AbuseReportList}\n \n
    {gettext('Library')}{gettext('File')}{gettext('Reporter')}{gettext('Abuse Type')}{gettext('Description')}{gettext('Time')}{gettext('Handled')}
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default AbuseReports;\n","import React from 'react';\nimport ReactDom from 'react-dom';\nimport MediaQuery from 'react-responsive';\nimport { Modal } from 'reactstrap';\nimport { Router } from '@gatsbyjs/reach-router';\nimport { I18nextProvider } from 'react-i18next';\nimport { siteRoot } from '../../utils/constants';\nimport { Utils } from '../../utils/utils';\nimport i18n from '../../_i18n/i18n-seafile-editor';\n\nimport SidePanel from './side-panel';\nimport MainPanel from './main-panel';\n\nimport Info from './info';\n\nimport StatisticFile from './statistic/statistic-file';\nimport StatisticStorage from './statistic/statistic-storage';\nimport StatisticTraffic from './statistic/statistic-traffic';\nimport StatisticUsers from './statistic/statistic-users';\nimport StatisticReport from './statistic/statistic-reports';\n\nimport DesktopDevices from './devices/desktop-devices';\nimport MobileDevices from './devices/mobile-devices';\nimport DeviceErrors from './devices/devices-errors';\n\nimport Users from './users/users';\nimport AdminUsers from './users/admin-users';\nimport LDAPImportedUsers from './users/ldap-imported-users';\nimport LDAPUsers from './users/ldap-users';\nimport SearchUsers from './users/search-users';\nimport User from './users/user-info';\nimport UserOwnedRepos from './users/user-repos';\nimport UserSharedRepos from './users/user-shared-repos';\nimport UserLinks from './users/user-links';\nimport UserGroups from './users/user-groups';\n\nimport AllRepos from './repos/all-repos';\nimport SystemRepo from './repos/system-repo';\nimport TrashRepos from './repos/trash-repos';\nimport SearchRepos from './repos/search-repos';\nimport DirView from './repos/dir-view';\n\nimport Groups from './groups/groups';\nimport SearchGroups from './groups/search-groups';\nimport GroupRepos from './groups/group-repos';\nimport GroupMembers from './groups/group-members';\n\nimport Departments from './departments/departments';\nimport DepartmentList from './departments/department-list';\nimport SubDepartments from './departments/sub-departments';\nimport DepartmentMembers from './departments/department-members';\nimport DepartmentLibraries from './departments/department-libraries';\n\nimport ShareLinks from './links/share-links';\nimport UploadLinks from './links/upload-links';\n\nimport Orgs from './orgs/orgs';\nimport SearchOrgs from './orgs/search-orgs';\nimport OrgInfo from './orgs/org-info';\nimport OrgUsers from './orgs/org-users';\nimport OrgGroups from './orgs/org-groups';\nimport OrgRepos from './orgs/org-repos';\n\nimport Institutions from './institutions/institutions';\nimport InstitutionInfo from './institutions/institution-info';\nimport InstitutionUsers from './institutions/institution-users';\nimport InstitutionAdmins from './institutions/institution-admins';\n\nimport LoginLogs from './logs-page/login-logs';\nimport FileAccessLogs from './logs-page/file-access-logs';\nimport FileUpdateLogs from './logs-page/file-update-logs';\nimport SharePermissionLogs from './logs-page/share-permission-logs';\n\nimport WebSettings from './web-settings/web-settings';\nimport Notifications from './notifications/notifications';\nimport FileScanRecords from './file-scan-records';\nimport WorkWeixinDepartments from './work-weixin-departments';\nimport DingtalkDepartments from './dingtalk-departments';\nimport Invitations from './invitations/invitations';\nimport TermsAndConditions from './terms-and-conditions/terms-and-conditions';\n\nimport AllVirusFiles from './virus-scan/all-virus-files';\nimport UnhandledVirusFiles from './virus-scan/unhandled-virus-files';\n\nimport AdminOperationLogs from './admin-logs/operation-logs';\nimport AdminLoginLogs from './admin-logs/login-logs';\n\nimport AbuseReports from './abuse-reports';\n\nimport '../../css/layout.css';\nimport '../../css/toolbar.css';\n\nclass SysAdmin extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isSidePanelClosed: false,\n currentTab: 'file-scan'\n };\n }\n\n componentDidMount() {\n let href = window.location.href.split('/');\n let currentTab = href[href.length - 2];\n\n const pageList = [\n {\n tab: 'devices',\n urlPartList: ['desktop-devices', 'mobile-devices', 'device-errors']\n },\n {\n tab: 'libraries',\n urlPartList: ['all-libraries', 'search-libraries', 'system-library', 'trash-libraries', 'libraries/']\n },\n {\n tab: 'statistic',\n urlPartList: ['statistics/file', 'statistics/storage', 'statistics/user', 'statistics/traffic', 'statistics/reports']\n },\n {\n tab: 'users',\n urlPartList: ['users/', 'search-users/']\n },\n {\n tab: 'groups',\n urlPartList: ['groups/', 'search-groups/']\n },\n {\n tab: 'organizations',\n urlPartList: ['organizations/', 'search-organizations/']\n },\n {\n tab: 'links',\n urlPartList: ['share-links/', 'upload-links/']\n },\n {\n tab: 'institutions',\n urlPartList: ['institutions/']\n },\n {\n tab: 'termsandconditions',\n urlPartList: ['terms-and-conditions/']\n },\n {\n tab: 'departments',\n urlPartList: ['departments/']\n },\n {\n tab: 'logs',\n urlPartList: ['logs/']\n },\n {\n tab: 'virus-files',\n urlPartList: ['virus-files/']\n },\n {\n tab: 'adminLogs',\n urlPartList: ['admin-logs/']\n }\n ];\n const tmpTab = this.getCurrentTabForPageList(pageList);\n currentTab = tmpTab ? tmpTab : currentTab;\n\n this.setState({currentTab: currentTab});\n }\n\n UNSAFE_componentWillMount() {\n if (!Utils.isDesktop()) {\n this.setState({\n isSidePanelClosed: true\n });\n }\n }\n\n getCurrentTabForPageList = (pageList) => {\n let urlPartList, tab;\n const urlBase = `${siteRoot}sys/`;\n for (let i = 0, len = pageList.length; i < len; i++) {\n urlPartList = pageList[i].urlPartList;\n tab = pageList[i].tab;\n for (let j = 0, jlen = urlPartList.length; j < jlen; j++) {\n if (location.href.indexOf(`${urlBase}${urlPartList[j]}`) != -1) {\n return tab;\n }\n }\n }\n };\n\n onCloseSidePanel = () => {\n this.setState({isSidePanelClosed: !this.state.isSidePanelClosed});\n };\n\n tabItemClick = (param) => {\n this.setState({currentTab: param});\n if (!Utils.isDesktop() && !this.state.isSidePanelClosed) {\n this.setState({ isSidePanelClosed: true });\n }\n };\n\n toggleSidePanel = () => {\n this.setState({\n isSidePanelClosed: !this.state.isSidePanelClosed\n });\n };\n\n render() {\n const { currentTab, isSidePanelClosed } = this.state;\n const commonProps = {\n toggleSidePanel: this.toggleSidePanel\n };\n\n return (\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n\n \n \n\n \n \n \n \n \n \n \n \n \n
    \n );\n }\n}\n\nReactDom.render(\n \n \n ,\n document.getElementById('wrapper')\n);\n","/*!\n * Chart.js v2.9.4\n * https://www.chartjs.org\n * (c) 2020 Chart.js Contributors\n * Released under the MIT License\n */\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(function() { try { return require('moment'); } catch(e) { } }()) :\ntypeof define === 'function' && define.amd ? define(['require'], function(require) { return factory(function() { try { return require('moment'); } catch(e) { } }()); }) :\n(global = global || self, global.Chart = factory(global.moment));\n}(this, (function (moment) { 'use strict';\n\nmoment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nfunction getCjsExportFromNamespace (n) {\n\treturn n && n['default'] || n;\n}\n\nvar colorName = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\n\nvar conversions = createCommonjsModule(function (module) {\n/* MIT license */\n\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nvar reverseKeywords = {};\nfor (var key in colorName) {\n\tif (colorName.hasOwnProperty(key)) {\n\t\treverseKeywords[colorName[key]] = key;\n\t}\n}\n\nvar convert = module.exports = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\n// hide .channels and .labels properties\nfor (var model in convert) {\n\tif (convert.hasOwnProperty(model)) {\n\t\tif (!('channels' in convert[model])) {\n\t\t\tthrow new Error('missing channels property: ' + model);\n\t\t}\n\n\t\tif (!('labels' in convert[model])) {\n\t\t\tthrow new Error('missing channel labels property: ' + model);\n\t\t}\n\n\t\tif (convert[model].labels.length !== convert[model].channels) {\n\t\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t\t}\n\n\t\tvar channels = convert[model].channels;\n\t\tvar labels = convert[model].labels;\n\t\tdelete convert[model].channels;\n\t\tdelete convert[model].labels;\n\t\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\t\tObject.defineProperty(convert[model], 'labels', {value: labels});\n\t}\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar min = Math.min(r, g, b);\n\tvar max = Math.max(r, g, b);\n\tvar delta = max - min;\n\tvar h;\n\tvar s;\n\tvar l;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tvar rdif;\n\tvar gdif;\n\tvar bdif;\n\tvar h;\n\tvar s;\n\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar v = Math.max(r, g, b);\n\tvar diff = v - Math.min(r, g, b);\n\tvar diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = s = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tvar r = rgb[0];\n\tvar g = rgb[1];\n\tvar b = rgb[2];\n\tvar h = convert.rgb.hsl(rgb)[0];\n\tvar w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar c;\n\tvar m;\n\tvar y;\n\tvar k;\n\n\tk = Math.min(1 - r, 1 - g, 1 - b);\n\tc = (1 - r - k) / (1 - k) || 0;\n\tm = (1 - g - k) / (1 - k) || 0;\n\ty = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\n/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\nfunction comparativeDistance(x, y) {\n\treturn (\n\t\tMath.pow(x[0] - y[0], 2) +\n\t\tMath.pow(x[1] - y[1], 2) +\n\t\tMath.pow(x[2] - y[2], 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tvar reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tvar currentClosestDistance = Infinity;\n\tvar currentClosestKeyword;\n\n\tfor (var keyword in colorName) {\n\t\tif (colorName.hasOwnProperty(keyword)) {\n\t\t\tvar value = colorName[keyword];\n\n\t\t\t// Compute comparative distance\n\t\t\tvar distance = comparativeDistance(rgb, value);\n\n\t\t\t// Check if its less, if so set as closest\n\t\t\tif (distance < currentClosestDistance) {\n\t\t\t\tcurrentClosestDistance = distance;\n\t\t\t\tcurrentClosestKeyword = keyword;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn colorName[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tvar y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tvar z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tvar xyz = convert.rgb.xyz(rgb);\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tvar h = hsl[0] / 360;\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar t1;\n\tvar t2;\n\tvar t3;\n\tvar rgb;\n\tvar val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tt1 = 2 * l - t2;\n\n\trgb = [0, 0, 0];\n\tfor (var i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tvar h = hsl[0];\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar smin = s;\n\tvar lmin = Math.max(l, 0.01);\n\tvar sv;\n\tvar v;\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tv = (l + s) / 2;\n\tsv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tvar h = hsv[0] / 60;\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar hi = Math.floor(h) % 6;\n\n\tvar f = h - Math.floor(h);\n\tvar p = 255 * v * (1 - s);\n\tvar q = 255 * v * (1 - (s * f));\n\tvar t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tvar h = hsv[0];\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar vmin = Math.max(v, 0.01);\n\tvar lmin;\n\tvar sl;\n\tvar l;\n\n\tl = (2 - s) * v;\n\tlmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tvar h = hwb[0] / 360;\n\tvar wh = hwb[1] / 100;\n\tvar bl = hwb[2] / 100;\n\tvar ratio = wh + bl;\n\tvar i;\n\tvar v;\n\tvar f;\n\tvar n;\n\n\t// wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\ti = Math.floor(6 * h);\n\tv = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tn = wh + f * (v - wh); // linear interpolation\n\n\tvar r;\n\tvar g;\n\tvar b;\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tvar c = cmyk[0] / 100;\n\tvar m = cmyk[1] / 100;\n\tvar y = cmyk[2] / 100;\n\tvar k = cmyk[3] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = 1 - Math.min(1, c * (1 - k) + k);\n\tg = 1 - Math.min(1, m * (1 - k) + k);\n\tb = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tvar x = xyz[0] / 100;\n\tvar y = xyz[1] / 100;\n\tvar z = xyz[2] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar x;\n\tvar y;\n\tvar z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tvar y2 = Math.pow(y, 3);\n\tvar x2 = Math.pow(x, 3);\n\tvar z2 = Math.pow(z, 3);\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar hr;\n\tvar h;\n\tvar c;\n\n\thr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tc = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tvar l = lch[0];\n\tvar c = lch[1];\n\tvar h = lch[2];\n\tvar a;\n\tvar b;\n\tvar hr;\n\n\thr = h / 360 * 2 * Math.PI;\n\ta = c * Math.cos(hr);\n\tb = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\tvar value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tvar ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\n\t// we use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tvar ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tvar color = args % 10;\n\n\t// handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tvar mult = (~~(args > 50) + 1) * 0.5;\n\tvar r = ((color & 1) * mult) * 255;\n\tvar g = (((color >> 1) & 1) * mult) * 255;\n\tvar b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// handle greyscale\n\tif (args >= 232) {\n\t\tvar c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tvar rem;\n\tvar r = Math.floor(args / 36) / 5 * 255;\n\tvar g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tvar b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tvar integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tvar match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tvar colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(function (char) {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tvar integer = parseInt(colorString, 16);\n\tvar r = (integer >> 16) & 0xFF;\n\tvar g = (integer >> 8) & 0xFF;\n\tvar b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar max = Math.max(Math.max(r, g), b);\n\tvar min = Math.min(Math.min(r, g), b);\n\tvar chroma = (max - min);\n\tvar grayscale;\n\tvar hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar c = 1;\n\tvar f = 0;\n\n\tif (l < 0.5) {\n\t\tc = 2.0 * s * l;\n\t} else {\n\t\tc = 2.0 * s * (1.0 - l);\n\t}\n\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\n\tvar c = s * v;\n\tvar f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tvar h = hcg[0] / 360;\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tvar pure = [0, 0, 0];\n\tvar hi = (h % 1) * 6;\n\tvar v = hi % 1;\n\tvar w = 1 - v;\n\tvar mg = 0;\n\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar v = c + g * (1.0 - c);\n\tvar f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar l = g * (1.0 - c) + 0.5 * c;\n\tvar s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\tvar v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tvar w = hwb[1] / 100;\n\tvar b = hwb[2] / 100;\n\tvar v = 1 - b;\n\tvar c = v - w;\n\tvar g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = convert.gray.hsv = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tvar val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tvar integer = (val << 16) + (val << 8) + val;\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tvar val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n});\nvar conversions_1 = conversions.rgb;\nvar conversions_2 = conversions.hsl;\nvar conversions_3 = conversions.hsv;\nvar conversions_4 = conversions.hwb;\nvar conversions_5 = conversions.cmyk;\nvar conversions_6 = conversions.xyz;\nvar conversions_7 = conversions.lab;\nvar conversions_8 = conversions.lch;\nvar conversions_9 = conversions.hex;\nvar conversions_10 = conversions.keyword;\nvar conversions_11 = conversions.ansi16;\nvar conversions_12 = conversions.ansi256;\nvar conversions_13 = conversions.hcg;\nvar conversions_14 = conversions.apple;\nvar conversions_15 = conversions.gray;\n\n/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tvar graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tvar models = Object.keys(conversions);\n\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tvar graph = buildGraph();\n\tvar queue = [fromModel]; // unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tvar current = queue.pop();\n\t\tvar adjacents = Object.keys(conversions[current]);\n\n\t\tfor (var len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tvar adjacent = adjacents[i];\n\t\t\tvar node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tvar path = [graph[toModel].parent, toModel];\n\tvar fn = conversions[graph[toModel].parent][toModel];\n\n\tvar cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nvar route = function (fromModel) {\n\tvar graph = deriveBFS(fromModel);\n\tvar conversion = {};\n\n\tvar models = Object.keys(graph);\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tvar toModel = models[i];\n\t\tvar node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// no possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\nvar convert = {};\n\nvar models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\tvar result = fn(args);\n\n\t\t// we're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (var len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(function (fromModel) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tvar routes = route(fromModel);\n\tvar routeModels = Object.keys(routes);\n\n\trouteModels.forEach(function (toModel) {\n\t\tvar fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nvar colorConvert = convert;\n\nvar colorName$1 = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\n\n/* MIT license */\n\n\nvar colorString = {\n getRgba: getRgba,\n getHsla: getHsla,\n getRgb: getRgb,\n getHsl: getHsl,\n getHwb: getHwb,\n getAlpha: getAlpha,\n\n hexString: hexString,\n rgbString: rgbString,\n rgbaString: rgbaString,\n percentString: percentString,\n percentaString: percentaString,\n hslString: hslString,\n hslaString: hslaString,\n hwbString: hwbString,\n keyword: keyword\n};\n\nfunction getRgba(string) {\n if (!string) {\n return;\n }\n var abbr = /^#([a-fA-F0-9]{3,4})$/i,\n hex = /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,\n rgba = /^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n keyword = /(\\w+)/;\n\n var rgb = [0, 0, 0],\n a = 1,\n match = string.match(abbr),\n hexAlpha = \"\";\n if (match) {\n match = match[1];\n hexAlpha = match[3];\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match[i] + match[i], 16);\n }\n if (hexAlpha) {\n a = Math.round((parseInt(hexAlpha + hexAlpha, 16) / 255) * 100) / 100;\n }\n }\n else if (match = string.match(hex)) {\n hexAlpha = match[2];\n match = match[1];\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);\n }\n if (hexAlpha) {\n a = Math.round((parseInt(hexAlpha, 16) / 255) * 100) / 100;\n }\n }\n else if (match = string.match(rgba)) {\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match[i + 1]);\n }\n a = parseFloat(match[4]);\n }\n else if (match = string.match(per)) {\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n }\n a = parseFloat(match[4]);\n }\n else if (match = string.match(keyword)) {\n if (match[1] == \"transparent\") {\n return [0, 0, 0, 0];\n }\n rgb = colorName$1[match[1]];\n if (!rgb) {\n return;\n }\n }\n\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = scale(rgb[i], 0, 255);\n }\n if (!a && a != 0) {\n a = 1;\n }\n else {\n a = scale(a, 0, 1);\n }\n rgb[3] = a;\n return rgb;\n}\n\nfunction getHsla(string) {\n if (!string) {\n return;\n }\n var hsl = /^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n var match = string.match(hsl);\n if (match) {\n var alpha = parseFloat(match[4]);\n var h = scale(parseInt(match[1]), 0, 360),\n s = scale(parseFloat(match[2]), 0, 100),\n l = scale(parseFloat(match[3]), 0, 100),\n a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n return [h, s, l, a];\n }\n}\n\nfunction getHwb(string) {\n if (!string) {\n return;\n }\n var hwb = /^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n var match = string.match(hwb);\n if (match) {\n var alpha = parseFloat(match[4]);\n var h = scale(parseInt(match[1]), 0, 360),\n w = scale(parseFloat(match[2]), 0, 100),\n b = scale(parseFloat(match[3]), 0, 100),\n a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n return [h, w, b, a];\n }\n}\n\nfunction getRgb(string) {\n var rgba = getRgba(string);\n return rgba && rgba.slice(0, 3);\n}\n\nfunction getHsl(string) {\n var hsla = getHsla(string);\n return hsla && hsla.slice(0, 3);\n}\n\nfunction getAlpha(string) {\n var vals = getRgba(string);\n if (vals) {\n return vals[3];\n }\n else if (vals = getHsla(string)) {\n return vals[3];\n }\n else if (vals = getHwb(string)) {\n return vals[3];\n }\n}\n\n// generators\nfunction hexString(rgba, a) {\n var a = (a !== undefined && rgba.length === 3) ? a : rgba[3];\n return \"#\" + hexDouble(rgba[0]) \n + hexDouble(rgba[1])\n + hexDouble(rgba[2])\n + (\n (a >= 0 && a < 1)\n ? hexDouble(Math.round(a * 255))\n : \"\"\n );\n}\n\nfunction rgbString(rgba, alpha) {\n if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n return rgbaString(rgba, alpha);\n }\n return \"rgb(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \")\";\n}\n\nfunction rgbaString(rgba, alpha) {\n if (alpha === undefined) {\n alpha = (rgba[3] !== undefined ? rgba[3] : 1);\n }\n return \"rgba(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2]\n + \", \" + alpha + \")\";\n}\n\nfunction percentString(rgba, alpha) {\n if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n return percentaString(rgba, alpha);\n }\n var r = Math.round(rgba[0]/255 * 100),\n g = Math.round(rgba[1]/255 * 100),\n b = Math.round(rgba[2]/255 * 100);\n\n return \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\";\n}\n\nfunction percentaString(rgba, alpha) {\n var r = Math.round(rgba[0]/255 * 100),\n g = Math.round(rgba[1]/255 * 100),\n b = Math.round(rgba[2]/255 * 100);\n return \"rgba(\" + r + \"%, \" + g + \"%, \" + b + \"%, \" + (alpha || rgba[3] || 1) + \")\";\n}\n\nfunction hslString(hsla, alpha) {\n if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {\n return hslaString(hsla, alpha);\n }\n return \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\";\n}\n\nfunction hslaString(hsla, alpha) {\n if (alpha === undefined) {\n alpha = (hsla[3] !== undefined ? hsla[3] : 1);\n }\n return \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \"\n + alpha + \")\";\n}\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\nfunction hwbString(hwb, alpha) {\n if (alpha === undefined) {\n alpha = (hwb[3] !== undefined ? hwb[3] : 1);\n }\n return \"hwb(\" + hwb[0] + \", \" + hwb[1] + \"%, \" + hwb[2] + \"%\"\n + (alpha !== undefined && alpha !== 1 ? \", \" + alpha : \"\") + \")\";\n}\n\nfunction keyword(rgb) {\n return reverseNames[rgb.slice(0, 3)];\n}\n\n// helpers\nfunction scale(num, min, max) {\n return Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n var str = num.toString(16).toUpperCase();\n return (str.length < 2) ? \"0\" + str : str;\n}\n\n\n//create a list of reverse color names\nvar reverseNames = {};\nfor (var name in colorName$1) {\n reverseNames[colorName$1[name]] = name;\n}\n\n/* MIT license */\n\n\n\nvar Color = function (obj) {\n\tif (obj instanceof Color) {\n\t\treturn obj;\n\t}\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj);\n\t}\n\n\tthis.valid = false;\n\tthis.values = {\n\t\trgb: [0, 0, 0],\n\t\thsl: [0, 0, 0],\n\t\thsv: [0, 0, 0],\n\t\thwb: [0, 0, 0],\n\t\tcmyk: [0, 0, 0, 0],\n\t\talpha: 1\n\t};\n\n\t// parse Color() argument\n\tvar vals;\n\tif (typeof obj === 'string') {\n\t\tvals = colorString.getRgba(obj);\n\t\tif (vals) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals = colorString.getHsla(obj)) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals = colorString.getHwb(obj)) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t}\n\t} else if (typeof obj === 'object') {\n\t\tvals = obj;\n\t\tif (vals.r !== undefined || vals.red !== undefined) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals.l !== undefined || vals.lightness !== undefined) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals.v !== undefined || vals.value !== undefined) {\n\t\t\tthis.setValues('hsv', vals);\n\t\t} else if (vals.w !== undefined || vals.whiteness !== undefined) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t} else if (vals.c !== undefined || vals.cyan !== undefined) {\n\t\t\tthis.setValues('cmyk', vals);\n\t\t}\n\t}\n};\n\nColor.prototype = {\n\tisValid: function () {\n\t\treturn this.valid;\n\t},\n\trgb: function () {\n\t\treturn this.setSpace('rgb', arguments);\n\t},\n\thsl: function () {\n\t\treturn this.setSpace('hsl', arguments);\n\t},\n\thsv: function () {\n\t\treturn this.setSpace('hsv', arguments);\n\t},\n\thwb: function () {\n\t\treturn this.setSpace('hwb', arguments);\n\t},\n\tcmyk: function () {\n\t\treturn this.setSpace('cmyk', arguments);\n\t},\n\n\trgbArray: function () {\n\t\treturn this.values.rgb;\n\t},\n\thslArray: function () {\n\t\treturn this.values.hsl;\n\t},\n\thsvArray: function () {\n\t\treturn this.values.hsv;\n\t},\n\thwbArray: function () {\n\t\tvar values = this.values;\n\t\tif (values.alpha !== 1) {\n\t\t\treturn values.hwb.concat([values.alpha]);\n\t\t}\n\t\treturn values.hwb;\n\t},\n\tcmykArray: function () {\n\t\treturn this.values.cmyk;\n\t},\n\trgbaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.rgb.concat([values.alpha]);\n\t},\n\thslaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.hsl.concat([values.alpha]);\n\t},\n\talpha: function (val) {\n\t\tif (val === undefined) {\n\t\t\treturn this.values.alpha;\n\t\t}\n\t\tthis.setValues('alpha', val);\n\t\treturn this;\n\t},\n\n\tred: function (val) {\n\t\treturn this.setChannel('rgb', 0, val);\n\t},\n\tgreen: function (val) {\n\t\treturn this.setChannel('rgb', 1, val);\n\t},\n\tblue: function (val) {\n\t\treturn this.setChannel('rgb', 2, val);\n\t},\n\thue: function (val) {\n\t\tif (val) {\n\t\t\tval %= 360;\n\t\t\tval = val < 0 ? 360 + val : val;\n\t\t}\n\t\treturn this.setChannel('hsl', 0, val);\n\t},\n\tsaturation: function (val) {\n\t\treturn this.setChannel('hsl', 1, val);\n\t},\n\tlightness: function (val) {\n\t\treturn this.setChannel('hsl', 2, val);\n\t},\n\tsaturationv: function (val) {\n\t\treturn this.setChannel('hsv', 1, val);\n\t},\n\twhiteness: function (val) {\n\t\treturn this.setChannel('hwb', 1, val);\n\t},\n\tblackness: function (val) {\n\t\treturn this.setChannel('hwb', 2, val);\n\t},\n\tvalue: function (val) {\n\t\treturn this.setChannel('hsv', 2, val);\n\t},\n\tcyan: function (val) {\n\t\treturn this.setChannel('cmyk', 0, val);\n\t},\n\tmagenta: function (val) {\n\t\treturn this.setChannel('cmyk', 1, val);\n\t},\n\tyellow: function (val) {\n\t\treturn this.setChannel('cmyk', 2, val);\n\t},\n\tblack: function (val) {\n\t\treturn this.setChannel('cmyk', 3, val);\n\t},\n\n\thexString: function () {\n\t\treturn colorString.hexString(this.values.rgb);\n\t},\n\trgbString: function () {\n\t\treturn colorString.rgbString(this.values.rgb, this.values.alpha);\n\t},\n\trgbaString: function () {\n\t\treturn colorString.rgbaString(this.values.rgb, this.values.alpha);\n\t},\n\tpercentString: function () {\n\t\treturn colorString.percentString(this.values.rgb, this.values.alpha);\n\t},\n\thslString: function () {\n\t\treturn colorString.hslString(this.values.hsl, this.values.alpha);\n\t},\n\thslaString: function () {\n\t\treturn colorString.hslaString(this.values.hsl, this.values.alpha);\n\t},\n\thwbString: function () {\n\t\treturn colorString.hwbString(this.values.hwb, this.values.alpha);\n\t},\n\tkeyword: function () {\n\t\treturn colorString.keyword(this.values.rgb, this.values.alpha);\n\t},\n\n\trgbNumber: function () {\n\t\tvar rgb = this.values.rgb;\n\t\treturn (rgb[0] << 16) | (rgb[1] << 8) | rgb[2];\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.values.rgb;\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tdark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.values.rgb;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tlight: function () {\n\t\treturn !this.dark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = [];\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb[i] = 255 - this.values.rgb[i];\n\t\t}\n\t\tthis.setValues('rgb', rgb);\n\t\treturn this;\n\t},\n\n\tlighten: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] += hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdarken: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] -= hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] += hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] -= hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\twhiten: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[1] += hwb[1] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tblacken: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[2] += hwb[2] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tgreyscale: function () {\n\t\tvar rgb = this.values.rgb;\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\tthis.setValues('rgb', [val, val, val]);\n\t\treturn this;\n\t},\n\n\tclearer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha - (alpha * ratio));\n\t\treturn this;\n\t},\n\n\topaquer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha + (alpha * ratio));\n\t\treturn this;\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hsl = this.values.hsl;\n\t\tvar hue = (hsl[0] + degrees) % 360;\n\t\thsl[0] = hue < 0 ? 360 + hue : hue;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Ported from sass implementation in C\n\t * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t */\n\tmix: function (mixinColor, weight) {\n\t\tvar color1 = this;\n\t\tvar color2 = mixinColor;\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn this\n\t\t\t.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue()\n\t\t\t)\n\t\t\t.alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n\n\ttoJSON: function () {\n\t\treturn this.rgb();\n\t},\n\n\tclone: function () {\n\t\t// NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,\n\t\t// making the final build way to big to embed in Chart.js. So let's do it manually,\n\t\t// assuming that values to clone are 1 dimension arrays containing only numbers,\n\t\t// except 'alpha' which is a number.\n\t\tvar result = new Color();\n\t\tvar source = this.values;\n\t\tvar target = result.values;\n\t\tvar value, type;\n\n\t\tfor (var prop in source) {\n\t\t\tif (source.hasOwnProperty(prop)) {\n\t\t\t\tvalue = source[prop];\n\t\t\t\ttype = ({}).toString.call(value);\n\t\t\t\tif (type === '[object Array]') {\n\t\t\t\t\ttarget[prop] = value.slice(0);\n\t\t\t\t} else if (type === '[object Number]') {\n\t\t\t\t\ttarget[prop] = value;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('unexpected color value:', value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n};\n\nColor.prototype.spaces = {\n\trgb: ['red', 'green', 'blue'],\n\thsl: ['hue', 'saturation', 'lightness'],\n\thsv: ['hue', 'saturation', 'value'],\n\thwb: ['hue', 'whiteness', 'blackness'],\n\tcmyk: ['cyan', 'magenta', 'yellow', 'black']\n};\n\nColor.prototype.maxes = {\n\trgb: [255, 255, 255],\n\thsl: [360, 100, 100],\n\thsv: [360, 100, 100],\n\thwb: [360, 100, 100],\n\tcmyk: [100, 100, 100, 100]\n};\n\nColor.prototype.getValues = function (space) {\n\tvar values = this.values;\n\tvar vals = {};\n\n\tfor (var i = 0; i < space.length; i++) {\n\t\tvals[space.charAt(i)] = values[space][i];\n\t}\n\n\tif (values.alpha !== 1) {\n\t\tvals.a = values.alpha;\n\t}\n\n\t// {r: 255, g: 255, b: 255, a: 0.4}\n\treturn vals;\n};\n\nColor.prototype.setValues = function (space, vals) {\n\tvar values = this.values;\n\tvar spaces = this.spaces;\n\tvar maxes = this.maxes;\n\tvar alpha = 1;\n\tvar i;\n\n\tthis.valid = true;\n\n\tif (space === 'alpha') {\n\t\talpha = vals;\n\t} else if (vals.length) {\n\t\t// [10, 10, 10]\n\t\tvalues[space] = vals.slice(0, space.length);\n\t\talpha = vals[space.length];\n\t} else if (vals[space.charAt(0)] !== undefined) {\n\t\t// {r: 10, g: 10, b: 10}\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[space.charAt(i)];\n\t\t}\n\n\t\talpha = vals.a;\n\t} else if (vals[spaces[space][0]] !== undefined) {\n\t\t// {red: 10, green: 10, blue: 10}\n\t\tvar chans = spaces[space];\n\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[chans[i]];\n\t\t}\n\n\t\talpha = vals.alpha;\n\t}\n\n\tvalues.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha)));\n\n\tif (space === 'alpha') {\n\t\treturn false;\n\t}\n\n\tvar capped;\n\n\t// cap values of the space prior converting all values\n\tfor (i = 0; i < space.length; i++) {\n\t\tcapped = Math.max(0, Math.min(maxes[space][i], values[space][i]));\n\t\tvalues[space][i] = Math.round(capped);\n\t}\n\n\t// convert to all the other color spaces\n\tfor (var sname in spaces) {\n\t\tif (sname !== space) {\n\t\t\tvalues[sname] = colorConvert[space][sname](values[space]);\n\t\t}\n\t}\n\n\treturn true;\n};\n\nColor.prototype.setSpace = function (space, args) {\n\tvar vals = args[0];\n\n\tif (vals === undefined) {\n\t\t// color.rgb()\n\t\treturn this.getValues(space);\n\t}\n\n\t// color.rgb(10, 10, 10)\n\tif (typeof vals === 'number') {\n\t\tvals = Array.prototype.slice.call(args);\n\t}\n\n\tthis.setValues(space, vals);\n\treturn this;\n};\n\nColor.prototype.setChannel = function (space, index, val) {\n\tvar svalues = this.values[space];\n\tif (val === undefined) {\n\t\t// color.red()\n\t\treturn svalues[index];\n\t} else if (val === svalues[index]) {\n\t\t// color.red(color.red())\n\t\treturn this;\n\t}\n\n\t// color.red(100)\n\tsvalues[index] = val;\n\tthis.setValues(space, svalues);\n\n\treturn this;\n};\n\nif (typeof window !== 'undefined') {\n\twindow.Color = Color;\n}\n\nvar chartjsColor = Color;\n\nfunction isValidKey(key) {\r\n\treturn ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\r\n}\r\n\r\n/**\r\n * @namespace Chart.helpers\r\n */\r\nvar helpers = {\r\n\t/**\r\n\t * An empty function that can be used, for example, for optional callback.\r\n\t */\r\n\tnoop: function() {},\r\n\r\n\t/**\r\n\t * Returns a unique id, sequentially generated from a global variable.\r\n\t * @returns {number}\r\n\t * @function\r\n\t */\r\n\tuid: (function() {\r\n\t\tvar id = 0;\r\n\t\treturn function() {\r\n\t\t\treturn id++;\r\n\t\t};\r\n\t}()),\r\n\r\n\t/**\r\n\t * Returns true if `value` is neither null nor undefined, else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @since 2.7.0\r\n\t */\r\n\tisNullOrUndef: function(value) {\r\n\t\treturn value === null || typeof value === 'undefined';\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is an array (including typed arrays), else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @function\r\n\t */\r\n\tisArray: function(value) {\r\n\t\tif (Array.isArray && Array.isArray(value)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar type = Object.prototype.toString.call(value);\r\n\t\tif (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is an object (excluding null), else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @since 2.7.0\r\n\t */\r\n\tisObject: function(value) {\r\n\t\treturn value !== null && Object.prototype.toString.call(value) === '[object Object]';\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is a finite number, else returns false\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t */\r\n\tisFinite: function(value) {\r\n\t\treturn (typeof value === 'number' || value instanceof Number) && isFinite(value);\r\n\t},\r\n\r\n\t/**\r\n\t * Returns `value` if defined, else returns `defaultValue`.\r\n\t * @param {*} value - The value to return if defined.\r\n\t * @param {*} defaultValue - The value to return if `value` is undefined.\r\n\t * @returns {*}\r\n\t */\r\n\tvalueOrDefault: function(value, defaultValue) {\r\n\t\treturn typeof value === 'undefined' ? defaultValue : value;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns value at the given `index` in array if defined, else returns `defaultValue`.\r\n\t * @param {Array} value - The array to lookup for value at `index`.\r\n\t * @param {number} index - The index in `value` to lookup for value.\r\n\t * @param {*} defaultValue - The value to return if `value[index]` is undefined.\r\n\t * @returns {*}\r\n\t */\r\n\tvalueAtIndexOrDefault: function(value, index, defaultValue) {\r\n\t\treturn helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);\r\n\t},\r\n\r\n\t/**\r\n\t * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\r\n\t * value returned by `fn`. If `fn` is not a function, this method returns undefined.\r\n\t * @param {function} fn - The function to call.\r\n\t * @param {Array|undefined|null} args - The arguments with which `fn` should be called.\r\n\t * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n\t * @returns {*}\r\n\t */\r\n\tcallback: function(fn, args, thisArg) {\r\n\t\tif (fn && typeof fn.call === 'function') {\r\n\t\t\treturn fn.apply(thisArg, args);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Note(SB) for performance sake, this method should only be used when loopable type\r\n\t * is unknown or in none intensive code (not called often and small loopable). Else\r\n\t * it's preferable to use a regular for() loop and save extra function calls.\r\n\t * @param {object|Array} loopable - The object or array to be iterated.\r\n\t * @param {function} fn - The function to call for each item.\r\n\t * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n\t * @param {boolean} [reverse] - If true, iterates backward on the loopable.\r\n\t */\r\n\teach: function(loopable, fn, thisArg, reverse) {\r\n\t\tvar i, len, keys;\r\n\t\tif (helpers.isArray(loopable)) {\r\n\t\t\tlen = loopable.length;\r\n\t\t\tif (reverse) {\r\n\t\t\t\tfor (i = len - 1; i >= 0; i--) {\r\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor (i = 0; i < len; i++) {\r\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (helpers.isObject(loopable)) {\r\n\t\t\tkeys = Object.keys(loopable);\r\n\t\t\tlen = keys.length;\r\n\t\t\tfor (i = 0; i < len; i++) {\r\n\t\t\t\tfn.call(thisArg, loopable[keys[i]], keys[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\r\n\t * @see https://stackoverflow.com/a/14853974\r\n\t * @param {Array} a0 - The array to compare\r\n\t * @param {Array} a1 - The array to compare\r\n\t * @returns {boolean}\r\n\t */\r\n\tarrayEquals: function(a0, a1) {\r\n\t\tvar i, ilen, v0, v1;\r\n\r\n\t\tif (!a0 || !a1 || a0.length !== a1.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = a0.length; i < ilen; ++i) {\r\n\t\t\tv0 = a0[i];\r\n\t\t\tv1 = a1[i];\r\n\r\n\t\t\tif (v0 instanceof Array && v1 instanceof Array) {\r\n\t\t\t\tif (!helpers.arrayEquals(v0, v1)) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t} else if (v0 !== v1) {\r\n\t\t\t\t// NOTE: two different object instances will never be equal: {x:20} != {x:20}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns a deep copy of `source` without keeping references on objects and arrays.\r\n\t * @param {*} source - The value to clone.\r\n\t * @returns {*}\r\n\t */\r\n\tclone: function(source) {\r\n\t\tif (helpers.isArray(source)) {\r\n\t\t\treturn source.map(helpers.clone);\r\n\t\t}\r\n\r\n\t\tif (helpers.isObject(source)) {\r\n\t\t\tvar target = Object.create(source);\r\n\t\t\tvar keys = Object.keys(source);\r\n\t\t\tvar klen = keys.length;\r\n\t\t\tvar k = 0;\r\n\r\n\t\t\tfor (; k < klen; ++k) {\r\n\t\t\t\ttarget[keys[k]] = helpers.clone(source[keys[k]]);\r\n\t\t\t}\r\n\r\n\t\t\treturn target;\r\n\t\t}\r\n\r\n\t\treturn source;\r\n\t},\r\n\r\n\t/**\r\n\t * The default merger when Chart.helpers.merge is called without merger option.\r\n\t * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\r\n\t * @private\r\n\t */\r\n\t_merger: function(key, target, source, options) {\r\n\t\tif (!isValidKey(key)) {\r\n\t\t\t// We want to ensure we do not copy prototypes over\r\n\t\t\t// as this can pollute global namespaces\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar tval = target[key];\r\n\t\tvar sval = source[key];\r\n\r\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\r\n\t\t\thelpers.merge(tval, sval, options);\r\n\t\t} else {\r\n\t\t\ttarget[key] = helpers.clone(sval);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Merges source[key] in target[key] only if target[key] is undefined.\r\n\t * @private\r\n\t */\r\n\t_mergerIf: function(key, target, source) {\r\n\t\tif (!isValidKey(key)) {\r\n\t\t\t// We want to ensure we do not copy prototypes over\r\n\t\t\t// as this can pollute global namespaces\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar tval = target[key];\r\n\t\tvar sval = source[key];\r\n\r\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\r\n\t\t\thelpers.mergeIf(tval, sval);\r\n\t\t} else if (!target.hasOwnProperty(key)) {\r\n\t\t\ttarget[key] = helpers.clone(sval);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Recursively deep copies `source` properties into `target` with the given `options`.\r\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n\t * @param {object} target - The target object in which all sources are merged into.\r\n\t * @param {object|object[]} source - Object(s) to merge into `target`.\r\n\t * @param {object} [options] - Merging options:\r\n\t * @param {function} [options.merger] - The merge method (key, target, source, options)\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\tmerge: function(target, source, options) {\r\n\t\tvar sources = helpers.isArray(source) ? source : [source];\r\n\t\tvar ilen = sources.length;\r\n\t\tvar merge, i, keys, klen, k;\r\n\r\n\t\tif (!helpers.isObject(target)) {\r\n\t\t\treturn target;\r\n\t\t}\r\n\r\n\t\toptions = options || {};\r\n\t\tmerge = options.merger || helpers._merger;\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tsource = sources[i];\r\n\t\t\tif (!helpers.isObject(source)) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tkeys = Object.keys(source);\r\n\t\t\tfor (k = 0, klen = keys.length; k < klen; ++k) {\r\n\t\t\t\tmerge(keys[k], target, source, options);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn target;\r\n\t},\r\n\r\n\t/**\r\n\t * Recursively deep copies `source` properties into `target` *only* if not defined in target.\r\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n\t * @param {object} target - The target object in which all sources are merged into.\r\n\t * @param {object|object[]} source - Object(s) to merge into `target`.\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\tmergeIf: function(target, source) {\r\n\t\treturn helpers.merge(target, source, {merger: helpers._mergerIf});\r\n\t},\r\n\r\n\t/**\r\n\t * Applies the contents of two or more objects together into the first object.\r\n\t * @param {object} target - The target object in which all objects are merged into.\r\n\t * @param {object} arg1 - Object containing additional properties to merge in target.\r\n\t * @param {object} argN - Additional objects containing properties to merge in target.\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\textend: Object.assign || function(target) {\r\n\t\treturn helpers.merge(target, [].slice.call(arguments, 1), {\r\n\t\t\tmerger: function(key, dst, src) {\r\n\t\t\t\tdst[key] = src[key];\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n\t * Basic javascript inheritance based on the model created in Backbone.js\r\n\t */\r\n\tinherits: function(extensions) {\r\n\t\tvar me = this;\r\n\t\tvar ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() {\r\n\t\t\treturn me.apply(this, arguments);\r\n\t\t};\r\n\r\n\t\tvar Surrogate = function() {\r\n\t\t\tthis.constructor = ChartElement;\r\n\t\t};\r\n\r\n\t\tSurrogate.prototype = me.prototype;\r\n\t\tChartElement.prototype = new Surrogate();\r\n\t\tChartElement.extend = helpers.inherits;\r\n\r\n\t\tif (extensions) {\r\n\t\t\thelpers.extend(ChartElement.prototype, extensions);\r\n\t\t}\r\n\r\n\t\tChartElement.__super__ = me.prototype;\r\n\t\treturn ChartElement;\r\n\t},\r\n\r\n\t_deprecated: function(scope, value, previous, current) {\r\n\t\tif (value !== undefined) {\r\n\t\t\tconsole.warn(scope + ': \"' + previous +\r\n\t\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\r\n\t\t}\r\n\t}\r\n};\r\n\r\nvar helpers_core = helpers;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.callback instead.\r\n * @function Chart.helpers.callCallback\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.callCallback = helpers.callback;\r\n\r\n/**\r\n * Provided for backward compatibility, use Array.prototype.indexOf instead.\r\n * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+\r\n * @function Chart.helpers.indexOf\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.indexOf = function(array, item, fromIndex) {\r\n\treturn Array.prototype.indexOf.call(array, item, fromIndex);\r\n};\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.\r\n * @function Chart.helpers.getValueOrDefault\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.getValueOrDefault = helpers.valueOrDefault;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.\r\n * @function Chart.helpers.getValueAtIndexOrDefault\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\n/**\r\n * Easing functions adapted from Robert Penner's easing equations.\r\n * @namespace Chart.helpers.easingEffects\r\n * @see http://www.robertpenner.com/easing/\r\n */\r\nvar effects = {\r\n\tlinear: function(t) {\r\n\t\treturn t;\r\n\t},\r\n\r\n\teaseInQuad: function(t) {\r\n\t\treturn t * t;\r\n\t},\r\n\r\n\teaseOutQuad: function(t) {\r\n\t\treturn -t * (t - 2);\r\n\t},\r\n\r\n\teaseInOutQuad: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t;\r\n\t\t}\r\n\t\treturn -0.5 * ((--t) * (t - 2) - 1);\r\n\t},\r\n\r\n\teaseInCubic: function(t) {\r\n\t\treturn t * t * t;\r\n\t},\r\n\r\n\teaseOutCubic: function(t) {\r\n\t\treturn (t = t - 1) * t * t + 1;\r\n\t},\r\n\r\n\teaseInOutCubic: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t;\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * t + 2);\r\n\t},\r\n\r\n\teaseInQuart: function(t) {\r\n\t\treturn t * t * t * t;\r\n\t},\r\n\r\n\teaseOutQuart: function(t) {\r\n\t\treturn -((t = t - 1) * t * t * t - 1);\r\n\t},\r\n\r\n\teaseInOutQuart: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t * t;\r\n\t\t}\r\n\t\treturn -0.5 * ((t -= 2) * t * t * t - 2);\r\n\t},\r\n\r\n\teaseInQuint: function(t) {\r\n\t\treturn t * t * t * t * t;\r\n\t},\r\n\r\n\teaseOutQuint: function(t) {\r\n\t\treturn (t = t - 1) * t * t * t * t + 1;\r\n\t},\r\n\r\n\teaseInOutQuint: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t * t * t;\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\r\n\t},\r\n\r\n\teaseInSine: function(t) {\r\n\t\treturn -Math.cos(t * (Math.PI / 2)) + 1;\r\n\t},\r\n\r\n\teaseOutSine: function(t) {\r\n\t\treturn Math.sin(t * (Math.PI / 2));\r\n\t},\r\n\r\n\teaseInOutSine: function(t) {\r\n\t\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\r\n\t},\r\n\r\n\teaseInExpo: function(t) {\r\n\t\treturn (t === 0) ? 0 : Math.pow(2, 10 * (t - 1));\r\n\t},\r\n\r\n\teaseOutExpo: function(t) {\r\n\t\treturn (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1;\r\n\t},\r\n\r\n\teaseInOutExpo: function(t) {\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * Math.pow(2, 10 * (t - 1));\r\n\t\t}\r\n\t\treturn 0.5 * (-Math.pow(2, -10 * --t) + 2);\r\n\t},\r\n\r\n\teaseInCirc: function(t) {\r\n\t\tif (t >= 1) {\r\n\t\t\treturn t;\r\n\t\t}\r\n\t\treturn -(Math.sqrt(1 - t * t) - 1);\r\n\t},\r\n\r\n\teaseOutCirc: function(t) {\r\n\t\treturn Math.sqrt(1 - (t = t - 1) * t);\r\n\t},\r\n\r\n\teaseInOutCirc: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn -0.5 * (Math.sqrt(1 - t * t) - 1);\r\n\t\t}\r\n\t\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\r\n\t},\r\n\r\n\teaseInElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.3;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\r\n\t},\r\n\r\n\teaseOutElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.3;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;\r\n\t},\r\n\r\n\teaseInOutElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif ((t /= 0.5) === 2) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.45;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\tif (t < 1) {\r\n\t\t\treturn -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\r\n\t\t}\r\n\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;\r\n\t},\r\n\teaseInBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\treturn t * t * ((s + 1) * t - s);\r\n\t},\r\n\r\n\teaseOutBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\treturn (t = t - 1) * t * ((s + 1) * t + s) + 1;\r\n\t},\r\n\r\n\teaseInOutBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\r\n\t},\r\n\r\n\teaseInBounce: function(t) {\r\n\t\treturn 1 - effects.easeOutBounce(1 - t);\r\n\t},\r\n\r\n\teaseOutBounce: function(t) {\r\n\t\tif (t < (1 / 2.75)) {\r\n\t\t\treturn 7.5625 * t * t;\r\n\t\t}\r\n\t\tif (t < (2 / 2.75)) {\r\n\t\t\treturn 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75;\r\n\t\t}\r\n\t\tif (t < (2.5 / 2.75)) {\r\n\t\t\treturn 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375;\r\n\t\t}\r\n\t\treturn 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375;\r\n\t},\r\n\r\n\teaseInOutBounce: function(t) {\r\n\t\tif (t < 0.5) {\r\n\t\t\treturn effects.easeInBounce(t * 2) * 0.5;\r\n\t\t}\r\n\t\treturn effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\r\n\t}\r\n};\r\n\r\nvar helpers_easing = {\r\n\teffects: effects\r\n};\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.easing.effects instead.\r\n * @function Chart.helpers.easingEffects\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.easingEffects = effects;\n\nvar PI = Math.PI;\r\nvar RAD_PER_DEG = PI / 180;\r\nvar DOUBLE_PI = PI * 2;\r\nvar HALF_PI = PI / 2;\r\nvar QUARTER_PI = PI / 4;\r\nvar TWO_THIRDS_PI = PI * 2 / 3;\r\n\r\n/**\r\n * @namespace Chart.helpers.canvas\r\n */\r\nvar exports$1 = {\r\n\t/**\r\n\t * Clears the entire canvas associated to the given `chart`.\r\n\t * @param {Chart} chart - The chart for which to clear the canvas.\r\n\t */\r\n\tclear: function(chart) {\r\n\t\tchart.ctx.clearRect(0, 0, chart.width, chart.height);\r\n\t},\r\n\r\n\t/**\r\n\t * Creates a \"path\" for a rectangle with rounded corners at position (x, y) with a\r\n\t * given size (width, height) and the same `radius` for all corners.\r\n\t * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.\r\n\t * @param {number} x - The x axis of the coordinate for the rectangle starting point.\r\n\t * @param {number} y - The y axis of the coordinate for the rectangle starting point.\r\n\t * @param {number} width - The rectangle's width.\r\n\t * @param {number} height - The rectangle's height.\r\n\t * @param {number} radius - The rounded amount (in pixels) for the four corners.\r\n\t * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?\r\n\t */\r\n\troundedRect: function(ctx, x, y, width, height, radius) {\r\n\t\tif (radius) {\r\n\t\t\tvar r = Math.min(radius, height / 2, width / 2);\r\n\t\t\tvar left = x + r;\r\n\t\t\tvar top = y + r;\r\n\t\t\tvar right = x + width - r;\r\n\t\t\tvar bottom = y + height - r;\r\n\r\n\t\t\tctx.moveTo(x, top);\r\n\t\t\tif (left < right && top < bottom) {\r\n\t\t\t\tctx.arc(left, top, r, -PI, -HALF_PI);\r\n\t\t\t\tctx.arc(right, top, r, -HALF_PI, 0);\r\n\t\t\t\tctx.arc(right, bottom, r, 0, HALF_PI);\r\n\t\t\t\tctx.arc(left, bottom, r, HALF_PI, PI);\r\n\t\t\t} else if (left < right) {\r\n\t\t\t\tctx.moveTo(left, y);\r\n\t\t\t\tctx.arc(right, top, r, -HALF_PI, HALF_PI);\r\n\t\t\t\tctx.arc(left, top, r, HALF_PI, PI + HALF_PI);\r\n\t\t\t} else if (top < bottom) {\r\n\t\t\t\tctx.arc(left, top, r, -PI, 0);\r\n\t\t\t\tctx.arc(left, bottom, r, 0, PI);\r\n\t\t\t} else {\r\n\t\t\t\tctx.arc(left, top, r, -PI, PI);\r\n\t\t\t}\r\n\t\t\tctx.closePath();\r\n\t\t\tctx.moveTo(x, y);\r\n\t\t} else {\r\n\t\t\tctx.rect(x, y, width, height);\r\n\t\t}\r\n\t},\r\n\r\n\tdrawPoint: function(ctx, style, radius, x, y, rotation) {\r\n\t\tvar type, xOffset, yOffset, size, cornerRadius;\r\n\t\tvar rad = (rotation || 0) * RAD_PER_DEG;\r\n\r\n\t\tif (style && typeof style === 'object') {\r\n\t\t\ttype = style.toString();\r\n\t\t\tif (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\r\n\t\t\t\tctx.save();\r\n\t\t\t\tctx.translate(x, y);\r\n\t\t\t\tctx.rotate(rad);\r\n\t\t\t\tctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\r\n\t\t\t\tctx.restore();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (isNaN(radius) || radius <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.beginPath();\r\n\r\n\t\tswitch (style) {\r\n\t\t// Default includes circle\r\n\t\tdefault:\r\n\t\t\tctx.arc(x, y, radius, 0, DOUBLE_PI);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'triangle':\r\n\t\t\tctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\trad += TWO_THIRDS_PI;\r\n\t\t\tctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\trad += TWO_THIRDS_PI;\r\n\t\t\tctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'rectRounded':\r\n\t\t\t// NOTE: the rounded rect implementation changed to use `arc` instead of\r\n\t\t\t// `quadraticCurveTo` since it generates better results when rect is\r\n\t\t\t// almost a circle. 0.516 (instead of 0.5) produces results with visually\r\n\t\t\t// closer proportion to the previous impl and it is inscribed in the\r\n\t\t\t// circle with `radius`. For more details, see the following PRs:\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5597\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5858\r\n\t\t\tcornerRadius = radius * 0.516;\r\n\t\t\tsize = radius - cornerRadius;\r\n\t\t\txOffset = Math.cos(rad + QUARTER_PI) * size;\r\n\t\t\tyOffset = Math.sin(rad + QUARTER_PI) * size;\r\n\t\t\tctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\r\n\t\t\tctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\r\n\t\t\tctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\r\n\t\t\tctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'rect':\r\n\t\t\tif (!rotation) {\r\n\t\t\t\tsize = Math.SQRT1_2 * radius;\r\n\t\t\t\tctx.rect(x - size, y - size, 2 * size, 2 * size);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\t/* falls through */\r\n\t\tcase 'rectRot':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'crossRot':\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\t/* falls through */\r\n\t\tcase 'cross':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'star':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'line':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'dash':\r\n\t\t\tctx.moveTo(x, y);\r\n\t\t\tctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tctx.fill();\r\n\t\tctx.stroke();\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if the point is inside the rectangle\r\n\t * @param {object} point - The point to test\r\n\t * @param {object} area - The rectangle\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\t_isPointInArea: function(point, area) {\r\n\t\tvar epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\r\n\r\n\t\treturn point.x > area.left - epsilon && point.x < area.right + epsilon &&\r\n\t\t\tpoint.y > area.top - epsilon && point.y < area.bottom + epsilon;\r\n\t},\r\n\r\n\tclipArea: function(ctx, area) {\r\n\t\tctx.save();\r\n\t\tctx.beginPath();\r\n\t\tctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\r\n\t\tctx.clip();\r\n\t},\r\n\r\n\tunclipArea: function(ctx) {\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\tlineTo: function(ctx, previous, target, flip) {\r\n\t\tvar stepped = target.steppedLine;\r\n\t\tif (stepped) {\r\n\t\t\tif (stepped === 'middle') {\r\n\t\t\t\tvar midpoint = (previous.x + target.x) / 2.0;\r\n\t\t\t\tctx.lineTo(midpoint, flip ? target.y : previous.y);\r\n\t\t\t\tctx.lineTo(midpoint, flip ? previous.y : target.y);\r\n\t\t\t} else if ((stepped === 'after' && !flip) || (stepped !== 'after' && flip)) {\r\n\t\t\t\tctx.lineTo(previous.x, target.y);\r\n\t\t\t} else {\r\n\t\t\t\tctx.lineTo(target.x, previous.y);\r\n\t\t\t}\r\n\t\t\tctx.lineTo(target.x, target.y);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!target.tension) {\r\n\t\t\tctx.lineTo(target.x, target.y);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.bezierCurveTo(\r\n\t\t\tflip ? previous.controlPointPreviousX : previous.controlPointNextX,\r\n\t\t\tflip ? previous.controlPointPreviousY : previous.controlPointNextY,\r\n\t\t\tflip ? target.controlPointNextX : target.controlPointPreviousX,\r\n\t\t\tflip ? target.controlPointNextY : target.controlPointPreviousY,\r\n\t\t\ttarget.x,\r\n\t\t\ttarget.y);\r\n\t}\r\n};\r\n\r\nvar helpers_canvas = exports$1;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.\r\n * @namespace Chart.helpers.clear\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.clear = exports$1.clear;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.\r\n * @namespace Chart.helpers.drawRoundedRectangle\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.drawRoundedRectangle = function(ctx) {\r\n\tctx.beginPath();\r\n\texports$1.roundedRect.apply(exports$1, arguments);\r\n};\n\nvar defaults = {\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_set: function(scope, values) {\r\n\t\treturn helpers_core.merge(this[scope] || (this[scope] = {}), values);\r\n\t}\r\n};\r\n\r\n// TODO(v3): remove 'global' from namespace. all default are global and\r\n// there's inconsistency around which options are under 'global'\r\ndefaults._set('global', {\r\n\tdefaultColor: 'rgba(0,0,0,0.1)',\r\n\tdefaultFontColor: '#666',\r\n\tdefaultFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\r\n\tdefaultFontSize: 12,\r\n\tdefaultFontStyle: 'normal',\r\n\tdefaultLineHeight: 1.2,\r\n\tshowLines: true\r\n});\r\n\r\nvar core_defaults = defaults;\n\nvar valueOrDefault = helpers_core.valueOrDefault;\r\n\r\n/**\r\n * Converts the given font object into a CSS font string.\r\n * @param {object} font - A font object.\r\n * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\r\n * @private\r\n */\r\nfunction toFontString(font) {\r\n\tif (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (font.style ? font.style + ' ' : '')\r\n\t\t+ (font.weight ? font.weight + ' ' : '')\r\n\t\t+ font.size + 'px '\r\n\t\t+ font.family;\r\n}\r\n\r\n/**\r\n * @alias Chart.helpers.options\r\n * @namespace\r\n */\r\nvar helpers_options = {\r\n\t/**\r\n\t * Converts the given line height `value` in pixels for a specific font `size`.\r\n\t * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\r\n\t * @param {number} size - The font size (in pixels) used to resolve relative `value`.\r\n\t * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid).\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\r\n\t * @since 2.7.0\r\n\t */\r\n\ttoLineHeight: function(value, size) {\r\n\t\tvar matches = ('' + value).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\r\n\t\tif (!matches || matches[1] === 'normal') {\r\n\t\t\treturn size * 1.2;\r\n\t\t}\r\n\r\n\t\tvalue = +matches[2];\r\n\r\n\t\tswitch (matches[3]) {\r\n\t\tcase 'px':\r\n\t\t\treturn value;\r\n\t\tcase '%':\r\n\t\t\tvalue /= 100;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn size * value;\r\n\t},\r\n\r\n\t/**\r\n\t * Converts the given value into a padding object with pre-computed width/height.\r\n\t * @param {number|object} value - If a number, set the value to all TRBL component,\r\n\t * else, if and object, use defined properties and sets undefined ones to 0.\r\n\t * @returns {object} The padding values (top, right, bottom, left, width, height)\r\n\t * @since 2.7.0\r\n\t */\r\n\ttoPadding: function(value) {\r\n\t\tvar t, r, b, l;\r\n\r\n\t\tif (helpers_core.isObject(value)) {\r\n\t\t\tt = +value.top || 0;\r\n\t\t\tr = +value.right || 0;\r\n\t\t\tb = +value.bottom || 0;\r\n\t\t\tl = +value.left || 0;\r\n\t\t} else {\r\n\t\t\tt = r = b = l = +value || 0;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop: t,\r\n\t\t\tright: r,\r\n\t\t\tbottom: b,\r\n\t\t\tleft: l,\r\n\t\t\theight: t + b,\r\n\t\t\twidth: l + r\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Parses font options and returns the font object.\r\n\t * @param {object} options - A object that contains font options to be parsed.\r\n\t * @return {object} The font object.\r\n\t * @todo Support font.* options and renamed to toFont().\r\n\t * @private\r\n\t */\r\n\t_parseFont: function(options) {\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);\r\n\t\tvar font = {\r\n\t\t\tfamily: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily),\r\n\t\t\tlineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size),\r\n\t\t\tsize: size,\r\n\t\t\tstyle: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle),\r\n\t\t\tweight: null,\r\n\t\t\tstring: ''\r\n\t\t};\r\n\r\n\t\tfont.string = toFontString(font);\r\n\t\treturn font;\r\n\t},\r\n\r\n\t/**\r\n\t * Evaluates the given `inputs` sequentially and returns the first defined value.\r\n\t * @param {Array} inputs - An array of values, falling back to the last value.\r\n\t * @param {object} [context] - If defined and the current value is a function, the value\r\n\t * is called with `context` as first argument and the result becomes the new input.\r\n\t * @param {number} [index] - If defined and the current value is an array, the value\r\n\t * at `index` become the new input.\r\n\t * @param {object} [info] - object to return information about resolution in\r\n\t * @param {boolean} [info.cacheable] - Will be set to `false` if option is not cacheable.\r\n\t * @since 2.7.0\r\n\t */\r\n\tresolve: function(inputs, context, index, info) {\r\n\t\tvar cacheable = true;\r\n\t\tvar i, ilen, value;\r\n\r\n\t\tfor (i = 0, ilen = inputs.length; i < ilen; ++i) {\r\n\t\t\tvalue = inputs[i];\r\n\t\t\tif (value === undefined) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tif (context !== undefined && typeof value === 'function') {\r\n\t\t\t\tvalue = value(context);\r\n\t\t\t\tcacheable = false;\r\n\t\t\t}\r\n\t\t\tif (index !== undefined && helpers_core.isArray(value)) {\r\n\t\t\t\tvalue = value[index];\r\n\t\t\t\tcacheable = false;\r\n\t\t\t}\r\n\t\t\tif (value !== undefined) {\r\n\t\t\t\tif (info && !cacheable) {\r\n\t\t\t\t\tinfo.cacheable = false;\r\n\t\t\t\t}\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\n\n/**\r\n * @alias Chart.helpers.math\r\n * @namespace\r\n */\r\nvar exports$2 = {\r\n\t/**\r\n\t * Returns an array of factors sorted from 1 to sqrt(value)\r\n\t * @private\r\n\t */\r\n\t_factorize: function(value) {\r\n\t\tvar result = [];\r\n\t\tvar sqrt = Math.sqrt(value);\r\n\t\tvar i;\r\n\r\n\t\tfor (i = 1; i < sqrt; i++) {\r\n\t\t\tif (value % i === 0) {\r\n\t\t\t\tresult.push(i);\r\n\t\t\t\tresult.push(value / i);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (sqrt === (sqrt | 0)) { // if value is a square number\r\n\t\t\tresult.push(sqrt);\r\n\t\t}\r\n\r\n\t\tresult.sort(function(a, b) {\r\n\t\t\treturn a - b;\r\n\t\t}).pop();\r\n\t\treturn result;\r\n\t},\r\n\r\n\tlog10: Math.log10 || function(x) {\r\n\t\tvar exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.\r\n\t\t// Check for whole powers of 10,\r\n\t\t// which due to floating point rounding error should be corrected.\r\n\t\tvar powerOf10 = Math.round(exponent);\r\n\t\tvar isPowerOf10 = x === Math.pow(10, powerOf10);\r\n\r\n\t\treturn isPowerOf10 ? powerOf10 : exponent;\r\n\t}\r\n};\r\n\r\nvar helpers_math = exports$2;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.math.log10 instead.\r\n * @namespace Chart.helpers.log10\r\n * @deprecated since version 2.9.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.log10 = exports$2.log10;\n\nvar getRtlAdapter = function(rectX, width) {\r\n\treturn {\r\n\t\tx: function(x) {\r\n\t\t\treturn rectX + rectX + width - x;\r\n\t\t},\r\n\t\tsetWidth: function(w) {\r\n\t\t\twidth = w;\r\n\t\t},\r\n\t\ttextAlign: function(align) {\r\n\t\t\tif (align === 'center') {\r\n\t\t\t\treturn align;\r\n\t\t\t}\r\n\t\t\treturn align === 'right' ? 'left' : 'right';\r\n\t\t},\r\n\t\txPlus: function(x, value) {\r\n\t\t\treturn x - value;\r\n\t\t},\r\n\t\tleftForLtr: function(x, itemWidth) {\r\n\t\t\treturn x - itemWidth;\r\n\t\t},\r\n\t};\r\n};\r\n\r\nvar getLtrAdapter = function() {\r\n\treturn {\r\n\t\tx: function(x) {\r\n\t\t\treturn x;\r\n\t\t},\r\n\t\tsetWidth: function(w) { // eslint-disable-line no-unused-vars\r\n\t\t},\r\n\t\ttextAlign: function(align) {\r\n\t\t\treturn align;\r\n\t\t},\r\n\t\txPlus: function(x, value) {\r\n\t\t\treturn x + value;\r\n\t\t},\r\n\t\tleftForLtr: function(x, _itemWidth) { // eslint-disable-line no-unused-vars\r\n\t\t\treturn x;\r\n\t\t},\r\n\t};\r\n};\r\n\r\nvar getAdapter = function(rtl, rectX, width) {\r\n\treturn rtl ? getRtlAdapter(rectX, width) : getLtrAdapter();\r\n};\r\n\r\nvar overrideTextDirection = function(ctx, direction) {\r\n\tvar style, original;\r\n\tif (direction === 'ltr' || direction === 'rtl') {\r\n\t\tstyle = ctx.canvas.style;\r\n\t\toriginal = [\r\n\t\t\tstyle.getPropertyValue('direction'),\r\n\t\t\tstyle.getPropertyPriority('direction'),\r\n\t\t];\r\n\r\n\t\tstyle.setProperty('direction', direction, 'important');\r\n\t\tctx.prevTextDirection = original;\r\n\t}\r\n};\r\n\r\nvar restoreTextDirection = function(ctx) {\r\n\tvar original = ctx.prevTextDirection;\r\n\tif (original !== undefined) {\r\n\t\tdelete ctx.prevTextDirection;\r\n\t\tctx.canvas.style.setProperty('direction', original[0], original[1]);\r\n\t}\r\n};\r\n\r\nvar helpers_rtl = {\r\n\tgetRtlAdapter: getAdapter,\r\n\toverrideTextDirection: overrideTextDirection,\r\n\trestoreTextDirection: restoreTextDirection,\r\n};\n\nvar helpers$1 = helpers_core;\r\nvar easing = helpers_easing;\r\nvar canvas = helpers_canvas;\r\nvar options = helpers_options;\r\nvar math = helpers_math;\r\nvar rtl = helpers_rtl;\nhelpers$1.easing = easing;\nhelpers$1.canvas = canvas;\nhelpers$1.options = options;\nhelpers$1.math = math;\nhelpers$1.rtl = rtl;\n\nfunction interpolate(start, view, model, ease) {\r\n\tvar keys = Object.keys(model);\r\n\tvar i, ilen, key, actual, origin, target, type, c0, c1;\r\n\r\n\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\tkey = keys[i];\r\n\r\n\t\ttarget = model[key];\r\n\r\n\t\t// if a value is added to the model after pivot() has been called, the view\r\n\t\t// doesn't contain it, so let's initialize the view to the target value.\r\n\t\tif (!view.hasOwnProperty(key)) {\r\n\t\t\tview[key] = target;\r\n\t\t}\r\n\r\n\t\tactual = view[key];\r\n\r\n\t\tif (actual === target || key[0] === '_') {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tif (!start.hasOwnProperty(key)) {\r\n\t\t\tstart[key] = actual;\r\n\t\t}\r\n\r\n\t\torigin = start[key];\r\n\r\n\t\ttype = typeof target;\r\n\r\n\t\tif (type === typeof origin) {\r\n\t\t\tif (type === 'string') {\r\n\t\t\t\tc0 = chartjsColor(origin);\r\n\t\t\t\tif (c0.valid) {\r\n\t\t\t\t\tc1 = chartjsColor(target);\r\n\t\t\t\t\tif (c1.valid) {\r\n\t\t\t\t\t\tview[key] = c1.mix(c0, ease).rgbString();\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) {\r\n\t\t\t\tview[key] = origin + (target - origin) * ease;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tview[key] = target;\r\n\t}\r\n}\r\n\r\nvar Element = function(configuration) {\r\n\thelpers$1.extend(this, configuration);\r\n\tthis.initialize.apply(this, arguments);\r\n};\r\n\r\nhelpers$1.extend(Element.prototype, {\r\n\t_type: undefined,\r\n\r\n\tinitialize: function() {\r\n\t\tthis.hidden = false;\r\n\t},\r\n\r\n\tpivot: function() {\r\n\t\tvar me = this;\r\n\t\tif (!me._view) {\r\n\t\t\tme._view = helpers$1.extend({}, me._model);\r\n\t\t}\r\n\t\tme._start = {};\r\n\t\treturn me;\r\n\t},\r\n\r\n\ttransition: function(ease) {\r\n\t\tvar me = this;\r\n\t\tvar model = me._model;\r\n\t\tvar start = me._start;\r\n\t\tvar view = me._view;\r\n\r\n\t\t// No animation -> No Transition\r\n\t\tif (!model || ease === 1) {\r\n\t\t\tme._view = helpers$1.extend({}, model);\r\n\t\t\tme._start = null;\r\n\t\t\treturn me;\r\n\t\t}\r\n\r\n\t\tif (!view) {\r\n\t\t\tview = me._view = {};\r\n\t\t}\r\n\r\n\t\tif (!start) {\r\n\t\t\tstart = me._start = {};\r\n\t\t}\r\n\r\n\t\tinterpolate(start, view, model, ease);\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\treturn {\r\n\t\t\tx: this._model.x,\r\n\t\t\ty: this._model.y\r\n\t\t};\r\n\t},\r\n\r\n\thasValue: function() {\r\n\t\treturn helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y);\r\n\t}\r\n});\r\n\r\nElement.extend = helpers$1.inherits;\r\n\r\nvar core_element = Element;\n\nvar exports$3 = core_element.extend({\r\n\tchart: null, // the animation associated chart instance\r\n\tcurrentStep: 0, // the current animation step\r\n\tnumSteps: 60, // default number of steps\r\n\teasing: '', // the easing to use for this animation\r\n\trender: null, // render function used by the animation service\r\n\r\n\tonAnimationProgress: null, // user specified callback to fire on each step of the animation\r\n\tonAnimationComplete: null, // user specified callback to fire when the animation finishes\r\n});\r\n\r\nvar core_animation = exports$3;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.Animation instead\r\n * @prop Chart.Animation#animationObject\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n */\r\nObject.defineProperty(exports$3.prototype, 'animationObject', {\r\n\tget: function() {\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.Animation#chart instead\r\n * @prop Chart.Animation#chartInstance\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n */\r\nObject.defineProperty(exports$3.prototype, 'chartInstance', {\r\n\tget: function() {\r\n\t\treturn this.chart;\r\n\t},\r\n\tset: function(value) {\r\n\t\tthis.chart = value;\r\n\t}\r\n});\n\ncore_defaults._set('global', {\r\n\tanimation: {\r\n\t\tduration: 1000,\r\n\t\teasing: 'easeOutQuart',\r\n\t\tonProgress: helpers$1.noop,\r\n\t\tonComplete: helpers$1.noop\r\n\t}\r\n});\r\n\r\nvar core_animations = {\r\n\tanimations: [],\r\n\trequest: null,\r\n\r\n\t/**\r\n\t * @param {Chart} chart - The chart to animate.\r\n\t * @param {Chart.Animation} animation - The animation that we will animate.\r\n\t * @param {number} duration - The animation duration in ms.\r\n\t * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions\r\n\t */\r\n\taddAnimation: function(chart, animation, duration, lazy) {\r\n\t\tvar animations = this.animations;\r\n\t\tvar i, ilen;\r\n\r\n\t\tanimation.chart = chart;\r\n\t\tanimation.startTime = Date.now();\r\n\t\tanimation.duration = duration;\r\n\r\n\t\tif (!lazy) {\r\n\t\t\tchart.animating = true;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = animations.length; i < ilen; ++i) {\r\n\t\t\tif (animations[i].chart === chart) {\r\n\t\t\t\tanimations[i] = animation;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tanimations.push(animation);\r\n\r\n\t\t// If there are no animations queued, manually kickstart a digest, for lack of a better word\r\n\t\tif (animations.length === 1) {\r\n\t\t\tthis.requestAnimationFrame();\r\n\t\t}\r\n\t},\r\n\r\n\tcancelAnimation: function(chart) {\r\n\t\tvar index = helpers$1.findIndex(this.animations, function(animation) {\r\n\t\t\treturn animation.chart === chart;\r\n\t\t});\r\n\r\n\t\tif (index !== -1) {\r\n\t\t\tthis.animations.splice(index, 1);\r\n\t\t\tchart.animating = false;\r\n\t\t}\r\n\t},\r\n\r\n\trequestAnimationFrame: function() {\r\n\t\tvar me = this;\r\n\t\tif (me.request === null) {\r\n\t\t\t// Skip animation frame requests until the active one is executed.\r\n\t\t\t// This can happen when processing mouse events, e.g. 'mousemove'\r\n\t\t\t// and 'mouseout' events will trigger multiple renders.\r\n\t\t\tme.request = helpers$1.requestAnimFrame.call(window, function() {\r\n\t\t\t\tme.request = null;\r\n\t\t\t\tme.startDigest();\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tstartDigest: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tme.advance();\r\n\r\n\t\t// Do we have more stuff to animate?\r\n\t\tif (me.animations.length > 0) {\r\n\t\t\tme.requestAnimationFrame();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tadvance: function() {\r\n\t\tvar animations = this.animations;\r\n\t\tvar animation, chart, numSteps, nextStep;\r\n\t\tvar i = 0;\r\n\r\n\t\t// 1 animation per chart, so we are looping charts here\r\n\t\twhile (i < animations.length) {\r\n\t\t\tanimation = animations[i];\r\n\t\t\tchart = animation.chart;\r\n\t\t\tnumSteps = animation.numSteps;\r\n\r\n\t\t\t// Make sure that currentStep starts at 1\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/6104\r\n\t\t\tnextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1;\r\n\t\t\tanimation.currentStep = Math.min(nextStep, numSteps);\r\n\r\n\t\t\thelpers$1.callback(animation.render, [chart, animation], chart);\r\n\t\t\thelpers$1.callback(animation.onAnimationProgress, [animation], chart);\r\n\r\n\t\t\tif (animation.currentStep >= numSteps) {\r\n\t\t\t\thelpers$1.callback(animation.onAnimationComplete, [animation], chart);\r\n\t\t\t\tchart.animating = false;\r\n\t\t\t\tanimations.splice(i, 1);\r\n\t\t\t} else {\r\n\t\t\t\t++i;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\n\nvar resolve = helpers$1.options.resolve;\r\n\r\nvar arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\r\n\r\n/**\r\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\r\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\r\n * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.\r\n */\r\nfunction listenArrayEvents(array, listener) {\r\n\tif (array._chartjs) {\r\n\t\tarray._chartjs.listeners.push(listener);\r\n\t\treturn;\r\n\t}\r\n\r\n\tObject.defineProperty(array, '_chartjs', {\r\n\t\tconfigurable: true,\r\n\t\tenumerable: false,\r\n\t\tvalue: {\r\n\t\t\tlisteners: [listener]\r\n\t\t}\r\n\t});\r\n\r\n\tarrayEvents.forEach(function(key) {\r\n\t\tvar method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);\r\n\t\tvar base = array[key];\r\n\r\n\t\tObject.defineProperty(array, key, {\r\n\t\t\tconfigurable: true,\r\n\t\t\tenumerable: false,\r\n\t\t\tvalue: function() {\r\n\t\t\t\tvar args = Array.prototype.slice.call(arguments);\r\n\t\t\t\tvar res = base.apply(this, args);\r\n\r\n\t\t\t\thelpers$1.each(array._chartjs.listeners, function(object) {\r\n\t\t\t\t\tif (typeof object[method] === 'function') {\r\n\t\t\t\t\t\tobject[method].apply(object, args);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n}\r\n\r\n/**\r\n * Removes the given array event listener and cleanup extra attached properties (such as\r\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\r\n */\r\nfunction unlistenArrayEvents(array, listener) {\r\n\tvar stub = array._chartjs;\r\n\tif (!stub) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar listeners = stub.listeners;\r\n\tvar index = listeners.indexOf(listener);\r\n\tif (index !== -1) {\r\n\t\tlisteners.splice(index, 1);\r\n\t}\r\n\r\n\tif (listeners.length > 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tarrayEvents.forEach(function(key) {\r\n\t\tdelete array[key];\r\n\t});\r\n\r\n\tdelete array._chartjs;\r\n}\r\n\r\n// Base class for all dataset controllers (line, bar, etc)\r\nvar DatasetController = function(chart, datasetIndex) {\r\n\tthis.initialize(chart, datasetIndex);\r\n};\r\n\r\nhelpers$1.extend(DatasetController.prototype, {\r\n\r\n\t/**\r\n\t * Element type used to generate a meta dataset (e.g. Chart.element.Line).\r\n\t * @type {Chart.core.element}\r\n\t */\r\n\tdatasetElementType: null,\r\n\r\n\t/**\r\n\t * Element type used to generate a meta data (e.g. Chart.element.Point).\r\n\t * @type {Chart.core.element}\r\n\t */\r\n\tdataElementType: null,\r\n\r\n\t/**\r\n\t * Dataset element option keys to be resolved in _resolveDatasetElementOptions.\r\n\t * A derived controller may override this to resolve controller-specific options.\r\n\t * The keys defined here are for backward compatibility for legend styles.\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderColor',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'borderWidth'\r\n\t],\r\n\r\n\t/**\r\n\t * Data element option keys to be resolved in _resolveDataElementOptions.\r\n\t * A derived controller may override this to resolve controller-specific options.\r\n\t * The keys defined here are for backward compatibility for legend styles.\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'pointStyle'\r\n\t],\r\n\r\n\tinitialize: function(chart, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tme.chart = chart;\r\n\t\tme.index = datasetIndex;\r\n\t\tme.linkScales();\r\n\t\tme.addElements();\r\n\t\tme._type = me.getMeta().type;\r\n\t},\r\n\r\n\tupdateIndex: function(datasetIndex) {\r\n\t\tthis.index = datasetIndex;\r\n\t},\r\n\r\n\tlinkScales: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar chart = me.chart;\r\n\t\tvar scales = chart.scales;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar scalesOpts = chart.options.scales;\r\n\r\n\t\tif (meta.xAxisID === null || !(meta.xAxisID in scales) || dataset.xAxisID) {\r\n\t\t\tmeta.xAxisID = dataset.xAxisID || scalesOpts.xAxes[0].id;\r\n\t\t}\r\n\t\tif (meta.yAxisID === null || !(meta.yAxisID in scales) || dataset.yAxisID) {\r\n\t\t\tmeta.yAxisID = dataset.yAxisID || scalesOpts.yAxes[0].id;\r\n\t\t}\r\n\t},\r\n\r\n\tgetDataset: function() {\r\n\t\treturn this.chart.data.datasets[this.index];\r\n\t},\r\n\r\n\tgetMeta: function() {\r\n\t\treturn this.chart.getDatasetMeta(this.index);\r\n\t},\r\n\r\n\tgetScaleForId: function(scaleID) {\r\n\t\treturn this.chart.scales[scaleID];\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.getMeta().yAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.getMeta().xAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScale: function() {\r\n\t\treturn this.getScaleForId(this._getValueScaleId());\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScale: function() {\r\n\t\treturn this.getScaleForId(this._getIndexScaleId());\r\n\t},\r\n\r\n\treset: function() {\r\n\t\tthis._update(true);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tdestroy: function() {\r\n\t\tif (this._data) {\r\n\t\t\tunlistenArrayEvents(this._data, this);\r\n\t\t}\r\n\t},\r\n\r\n\tcreateMetaDataset: function() {\r\n\t\tvar me = this;\r\n\t\tvar type = me.datasetElementType;\r\n\t\treturn type && new type({\r\n\t\t\t_chart: me.chart,\r\n\t\t\t_datasetIndex: me.index\r\n\t\t});\r\n\t},\r\n\r\n\tcreateMetaData: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar type = me.dataElementType;\r\n\t\treturn type && new type({\r\n\t\t\t_chart: me.chart,\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index\r\n\t\t});\r\n\t},\r\n\r\n\taddElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar data = me.getDataset().data || [];\r\n\t\tvar metaData = meta.data;\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = data.length; i < ilen; ++i) {\r\n\t\t\tmetaData[i] = metaData[i] || me.createMetaData(i);\r\n\t\t}\r\n\r\n\t\tmeta.dataset = meta.dataset || me.createMetaDataset();\r\n\t},\r\n\r\n\taddElementAndReset: function(index) {\r\n\t\tvar element = this.createMetaData(index);\r\n\t\tthis.getMeta().data.splice(index, 0, element);\r\n\t\tthis.updateElement(element, index, true);\r\n\t},\r\n\r\n\tbuildOrUpdateElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar data = dataset.data || (dataset.data = []);\r\n\r\n\t\t// In order to correctly handle data addition/deletion animation (an thus simulate\r\n\t\t// real-time charts), we need to monitor these data modifications and synchronize\r\n\t\t// the internal meta data accordingly.\r\n\t\tif (me._data !== data) {\r\n\t\t\tif (me._data) {\r\n\t\t\t\t// This case happens when the user replaced the data array instance.\r\n\t\t\t\tunlistenArrayEvents(me._data, me);\r\n\t\t\t}\r\n\r\n\t\t\tif (data && Object.isExtensible(data)) {\r\n\t\t\t\tlistenArrayEvents(data, me);\r\n\t\t\t}\r\n\t\t\tme._data = data;\r\n\t\t}\r\n\r\n\t\t// Re-sync meta data in case the user replaced the data array or if we missed\r\n\t\t// any updates and so make sure that we handle number of datapoints changing.\r\n\t\tme.resyncElements();\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the merged user-supplied and default dataset-level options\r\n\t * @private\r\n\t */\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tme._config = helpers$1.merge(Object.create(null), [\r\n\t\t\tme.chart.options.datasets[me._type],\r\n\t\t\tme.getDataset(),\r\n\t\t], {\r\n\t\t\tmerger: function(key, target, source) {\r\n\t\t\t\tif (key !== '_meta' && key !== 'data') {\r\n\t\t\t\t\thelpers$1._merger(key, target, source);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_update: function(reset) {\r\n\t\tvar me = this;\r\n\t\tme._configure();\r\n\t\tme._cachedDataOpts = null;\r\n\t\tme.update(reset);\r\n\t},\r\n\r\n\tupdate: helpers$1.noop,\r\n\r\n\ttransition: function(easingValue) {\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar elements = meta.data || [];\r\n\t\tvar ilen = elements.length;\r\n\t\tvar i = 0;\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\telements[i].transition(easingValue);\r\n\t\t}\r\n\r\n\t\tif (meta.dataset) {\r\n\t\t\tmeta.dataset.transition(easingValue);\r\n\t\t}\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar elements = meta.data || [];\r\n\t\tvar ilen = elements.length;\r\n\t\tvar i = 0;\r\n\r\n\t\tif (meta.dataset) {\r\n\t\t\tmeta.dataset.draw();\r\n\t\t}\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\telements[i].draw();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Returns a set of predefined style properties that should be used to represent the dataset\r\n\t * or the data if the index is specified\r\n\t * @param {number} index - data index\r\n\t * @return {IStyleInterface} style object\r\n\t */\r\n\tgetStyle: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar dataset = meta.dataset;\r\n\t\tvar style;\r\n\r\n\t\tme._configure();\r\n\t\tif (dataset && index === undefined) {\r\n\t\t\tstyle = me._resolveDatasetElementOptions(dataset || {});\r\n\t\t} else {\r\n\t\t\tindex = index || 0;\r\n\t\t\tstyle = me._resolveDataElementOptions(meta.data[index] || {}, index);\r\n\t\t}\r\n\r\n\t\tif (style.fill === false || style.fill === null) {\r\n\t\t\tstyle.backgroundColor = style.borderColor;\r\n\t\t}\r\n\r\n\t\treturn style;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function(element, hover) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasetOpts = me._config;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar options = chart.options.elements[me.datasetElementType.prototype._type] || {};\r\n\t\tvar elementOptions = me._datasetElementOptions;\r\n\t\tvar values = {};\r\n\t\tvar i, ilen, key, readKey;\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataset: me.getDataset(),\r\n\t\t\tdatasetIndex: me.index,\r\n\t\t\thover: hover\r\n\t\t};\r\n\r\n\t\tfor (i = 0, ilen = elementOptions.length; i < ilen; ++i) {\r\n\t\t\tkey = elementOptions[i];\r\n\t\t\treadKey = hover ? 'hover' + key.charAt(0).toUpperCase() + key.slice(1) : key;\r\n\t\t\tvalues[key] = resolve([\r\n\t\t\t\tcustom[readKey],\r\n\t\t\t\tdatasetOpts[readKey],\r\n\t\t\t\toptions[readKey]\r\n\t\t\t], context);\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function(element, index) {\r\n\t\tvar me = this;\r\n\t\tvar custom = element && element.custom;\r\n\t\tvar cached = me._cachedDataOpts;\r\n\t\tif (cached && !custom) {\r\n\t\t\treturn cached;\r\n\t\t}\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasetOpts = me._config;\r\n\t\tvar options = chart.options.elements[me.dataElementType.prototype._type] || {};\r\n\t\tvar elementOptions = me._dataElementOptions;\r\n\t\tvar values = {};\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: me.getDataset(),\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\t// `resolve` sets cacheable to `false` if any option is indexed or scripted\r\n\t\tvar info = {cacheable: !custom};\r\n\r\n\t\tvar keys, i, ilen, key;\r\n\r\n\t\tcustom = custom || {};\r\n\r\n\t\tif (helpers$1.isArray(elementOptions)) {\r\n\t\t\tfor (i = 0, ilen = elementOptions.length; i < ilen; ++i) {\r\n\t\t\t\tkey = elementOptions[i];\r\n\t\t\t\tvalues[key] = resolve([\r\n\t\t\t\t\tcustom[key],\r\n\t\t\t\t\tdatasetOpts[key],\r\n\t\t\t\t\toptions[key]\r\n\t\t\t\t], context, index, info);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tkeys = Object.keys(elementOptions);\r\n\t\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\t\t\tkey = keys[i];\r\n\t\t\t\tvalues[key] = resolve([\r\n\t\t\t\t\tcustom[key],\r\n\t\t\t\t\tdatasetOpts[elementOptions[key]],\r\n\t\t\t\t\tdatasetOpts[key],\r\n\t\t\t\t\toptions[key]\r\n\t\t\t\t], context, index, info);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (info.cacheable) {\r\n\t\t\tme._cachedDataOpts = Object.freeze(values);\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tremoveHoverStyle: function(element) {\r\n\t\thelpers$1.merge(element._model, element.$previousStyle || {});\r\n\t\tdelete element.$previousStyle;\r\n\t},\r\n\r\n\tsetHoverStyle: function(element) {\r\n\t\tvar dataset = this.chart.data.datasets[element._datasetIndex];\r\n\t\tvar index = element._index;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar model = element._model;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\telement.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index);\r\n\t\tmodel.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index);\r\n\t\tmodel.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_removeDatasetHoverStyle: function() {\r\n\t\tvar element = this.getMeta().dataset;\r\n\r\n\t\tif (element) {\r\n\t\t\tthis.removeHoverStyle(element);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_setDatasetHoverStyle: function() {\r\n\t\tvar element = this.getMeta().dataset;\r\n\t\tvar prev = {};\r\n\t\tvar i, ilen, key, keys, hoverOptions, model;\r\n\r\n\t\tif (!element) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmodel = element._model;\r\n\t\thoverOptions = this._resolveDatasetElementOptions(element, true);\r\n\r\n\t\tkeys = Object.keys(hoverOptions);\r\n\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\t\tkey = keys[i];\r\n\t\t\tprev[key] = model[key];\r\n\t\t\tmodel[key] = hoverOptions[key];\r\n\t\t}\r\n\r\n\t\telement.$previousStyle = prev;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tresyncElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar data = me.getDataset().data;\r\n\t\tvar numMeta = meta.data.length;\r\n\t\tvar numData = data.length;\r\n\r\n\t\tif (numData < numMeta) {\r\n\t\t\tmeta.data.splice(numData, numMeta - numData);\r\n\t\t} else if (numData > numMeta) {\r\n\t\t\tme.insertElements(numMeta, numData - numMeta);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tinsertElements: function(start, count) {\r\n\t\tfor (var i = 0; i < count; ++i) {\r\n\t\t\tthis.addElementAndReset(start + i);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataPush: function() {\r\n\t\tvar count = arguments.length;\r\n\t\tthis.insertElements(this.getDataset().data.length - count, count);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataPop: function() {\r\n\t\tthis.getMeta().data.pop();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataShift: function() {\r\n\t\tthis.getMeta().data.shift();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataSplice: function(start, count) {\r\n\t\tthis.getMeta().data.splice(start, count);\r\n\t\tthis.insertElements(start, arguments.length - 2);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataUnshift: function() {\r\n\t\tthis.insertElements(0, arguments.length);\r\n\t}\r\n});\r\n\r\nDatasetController.extend = helpers$1.inherits;\r\n\r\nvar core_datasetController = DatasetController;\n\nvar TAU = Math.PI * 2;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tarc: {\r\n\t\t\tbackgroundColor: core_defaults.global.defaultColor,\r\n\t\t\tborderColor: '#fff',\r\n\t\t\tborderWidth: 2,\r\n\t\t\tborderAlign: 'center'\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction clipArc(ctx, arc) {\r\n\tvar startAngle = arc.startAngle;\r\n\tvar endAngle = arc.endAngle;\r\n\tvar pixelMargin = arc.pixelMargin;\r\n\tvar angleMargin = pixelMargin / arc.outerRadius;\r\n\tvar x = arc.x;\r\n\tvar y = arc.y;\r\n\r\n\t// Draw an inner border by cliping the arc and drawing a double-width border\r\n\t// Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\r\n\tctx.beginPath();\r\n\tctx.arc(x, y, arc.outerRadius, startAngle - angleMargin, endAngle + angleMargin);\r\n\tif (arc.innerRadius > pixelMargin) {\r\n\t\tangleMargin = pixelMargin / arc.innerRadius;\r\n\t\tctx.arc(x, y, arc.innerRadius - pixelMargin, endAngle + angleMargin, startAngle - angleMargin, true);\r\n\t} else {\r\n\t\tctx.arc(x, y, pixelMargin, endAngle + Math.PI / 2, startAngle - Math.PI / 2);\r\n\t}\r\n\tctx.closePath();\r\n\tctx.clip();\r\n}\r\n\r\nfunction drawFullCircleBorders(ctx, vm, arc, inner) {\r\n\tvar endAngle = arc.endAngle;\r\n\tvar i;\r\n\r\n\tif (inner) {\r\n\t\tarc.endAngle = arc.startAngle + TAU;\r\n\t\tclipArc(ctx, arc);\r\n\t\tarc.endAngle = endAngle;\r\n\t\tif (arc.endAngle === arc.startAngle && arc.fullCircles) {\r\n\t\t\tarc.endAngle += TAU;\r\n\t\t\tarc.fullCircles--;\r\n\t\t}\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.startAngle + TAU, arc.startAngle, true);\r\n\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\tctx.stroke();\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.startAngle + TAU);\r\n\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\tctx.stroke();\r\n\t}\r\n}\r\n\r\nfunction drawBorder(ctx, vm, arc) {\r\n\tvar inner = vm.borderAlign === 'inner';\r\n\r\n\tif (inner) {\r\n\t\tctx.lineWidth = vm.borderWidth * 2;\r\n\t\tctx.lineJoin = 'round';\r\n\t} else {\r\n\t\tctx.lineWidth = vm.borderWidth;\r\n\t\tctx.lineJoin = 'bevel';\r\n\t}\r\n\r\n\tif (arc.fullCircles) {\r\n\t\tdrawFullCircleBorders(ctx, vm, arc, inner);\r\n\t}\r\n\r\n\tif (inner) {\r\n\t\tclipArc(ctx, arc);\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.endAngle);\r\n\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\tctx.closePath();\r\n\tctx.stroke();\r\n}\r\n\r\nvar element_arc = core_element.extend({\r\n\t_type: 'arc',\r\n\r\n\tinLabelRange: function(mouseX) {\r\n\t\tvar vm = this._view;\r\n\r\n\t\tif (vm) {\r\n\t\t\treturn (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\tinRange: function(chartX, chartY) {\r\n\t\tvar vm = this._view;\r\n\r\n\t\tif (vm) {\r\n\t\t\tvar pointRelativePosition = helpers$1.getAngleFromPoint(vm, {x: chartX, y: chartY});\r\n\t\t\tvar angle = pointRelativePosition.angle;\r\n\t\t\tvar distance = pointRelativePosition.distance;\r\n\r\n\t\t\t// Sanitise angle range\r\n\t\t\tvar startAngle = vm.startAngle;\r\n\t\t\tvar endAngle = vm.endAngle;\r\n\t\t\twhile (endAngle < startAngle) {\r\n\t\t\t\tendAngle += TAU;\r\n\t\t\t}\r\n\t\t\twhile (angle > endAngle) {\r\n\t\t\t\tangle -= TAU;\r\n\t\t\t}\r\n\t\t\twhile (angle < startAngle) {\r\n\t\t\t\tangle += TAU;\r\n\t\t\t}\r\n\r\n\t\t\t// Check if within the range of the open/close angle\r\n\t\t\tvar betweenAngles = (angle >= startAngle && angle <= endAngle);\r\n\t\t\tvar withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);\r\n\r\n\t\t\treturn (betweenAngles && withinRadius);\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar halfAngle = (vm.startAngle + vm.endAngle) / 2;\r\n\t\tvar halfRadius = (vm.innerRadius + vm.outerRadius) / 2;\r\n\t\treturn {\r\n\t\t\tx: vm.x + Math.cos(halfAngle) * halfRadius,\r\n\t\t\ty: vm.y + Math.sin(halfAngle) * halfRadius\r\n\t\t};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2);\r\n\t\tvar rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\r\n\r\n\t\treturn {\r\n\t\t\tx: vm.x + (Math.cos(centreAngle) * rangeFromCentre),\r\n\t\t\ty: vm.y + (Math.sin(centreAngle) * rangeFromCentre)\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\t\tvar pixelMargin = (vm.borderAlign === 'inner') ? 0.33 : 0;\r\n\t\tvar arc = {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y,\r\n\t\t\tinnerRadius: vm.innerRadius,\r\n\t\t\touterRadius: Math.max(vm.outerRadius - pixelMargin, 0),\r\n\t\t\tpixelMargin: pixelMargin,\r\n\t\t\tstartAngle: vm.startAngle,\r\n\t\t\tendAngle: vm.endAngle,\r\n\t\t\tfullCircles: Math.floor(vm.circumference / TAU)\r\n\t\t};\r\n\t\tvar i;\r\n\r\n\t\tctx.save();\r\n\r\n\t\tctx.fillStyle = vm.backgroundColor;\r\n\t\tctx.strokeStyle = vm.borderColor;\r\n\r\n\t\tif (arc.fullCircles) {\r\n\t\t\tarc.endAngle = arc.startAngle + TAU;\r\n\t\t\tctx.beginPath();\r\n\t\t\tctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);\r\n\t\t\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\t\t\tctx.closePath();\r\n\t\t\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\t\t\tctx.fill();\r\n\t\t\t}\r\n\t\t\tarc.endAngle = arc.startAngle + vm.circumference % TAU;\r\n\t\t}\r\n\r\n\t\tctx.beginPath();\r\n\t\tctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);\r\n\t\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\t\tctx.closePath();\r\n\t\tctx.fill();\r\n\r\n\t\tif (vm.borderWidth) {\r\n\t\t\tdrawBorder(ctx, vm, arc);\r\n\t\t}\r\n\r\n\t\tctx.restore();\r\n\t}\r\n});\n\nvar valueOrDefault$1 = helpers$1.valueOrDefault;\r\n\r\nvar defaultColor = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tline: {\r\n\t\t\ttension: 0.4,\r\n\t\t\tbackgroundColor: defaultColor,\r\n\t\t\tborderWidth: 3,\r\n\t\t\tborderColor: defaultColor,\r\n\t\t\tborderCapStyle: 'butt',\r\n\t\t\tborderDash: [],\r\n\t\t\tborderDashOffset: 0.0,\r\n\t\t\tborderJoinStyle: 'miter',\r\n\t\t\tcapBezierPoints: true,\r\n\t\t\tfill: true, // do we fill in the area between the line and its base axis\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar element_line = core_element.extend({\r\n\t_type: 'line',\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar vm = me._view;\r\n\t\tvar ctx = me._chart.ctx;\r\n\t\tvar spanGaps = vm.spanGaps;\r\n\t\tvar points = me._children.slice(); // clone array\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar globalOptionLineElements = globalDefaults.elements.line;\r\n\t\tvar lastDrawnIndex = -1;\r\n\t\tvar closePath = me._loop;\r\n\t\tvar index, previous, currentVM;\r\n\r\n\t\tif (!points.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (me._loop) {\r\n\t\t\tfor (index = 0; index < points.length; ++index) {\r\n\t\t\t\tprevious = helpers$1.previousItem(points, index);\r\n\t\t\t\t// If the line has an open path, shift the point array\r\n\t\t\t\tif (!points[index]._view.skip && previous._view.skip) {\r\n\t\t\t\t\tpoints = points.slice(index).concat(points.slice(0, index));\r\n\t\t\t\t\tclosePath = spanGaps;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// If the line has a close path, add the first point again\r\n\t\t\tif (closePath) {\r\n\t\t\t\tpoints.push(points[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\r\n\t\t// Stroke Line Options\r\n\t\tctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;\r\n\r\n\t\t// IE 9 and 10 do not support line dash\r\n\t\tif (ctx.setLineDash) {\r\n\t\t\tctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\r\n\t\t}\r\n\r\n\t\tctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset);\r\n\t\tctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\r\n\t\tctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth);\r\n\t\tctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;\r\n\r\n\t\t// Stroke Line\r\n\t\tctx.beginPath();\r\n\r\n\t\t// First point moves to it's starting position no matter what\r\n\t\tcurrentVM = points[0]._view;\r\n\t\tif (!currentVM.skip) {\r\n\t\t\tctx.moveTo(currentVM.x, currentVM.y);\r\n\t\t\tlastDrawnIndex = 0;\r\n\t\t}\r\n\r\n\t\tfor (index = 1; index < points.length; ++index) {\r\n\t\t\tcurrentVM = points[index]._view;\r\n\t\t\tprevious = lastDrawnIndex === -1 ? helpers$1.previousItem(points, index) : points[lastDrawnIndex];\r\n\r\n\t\t\tif (!currentVM.skip) {\r\n\t\t\t\tif ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) {\r\n\t\t\t\t\t// There was a gap and this is the first point after the gap\r\n\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Line to next point\r\n\t\t\t\t\thelpers$1.canvas.lineTo(ctx, previous._view, currentVM);\r\n\t\t\t\t}\r\n\t\t\t\tlastDrawnIndex = index;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (closePath) {\r\n\t\t\tctx.closePath();\r\n\t\t}\r\n\r\n\t\tctx.stroke();\r\n\t\tctx.restore();\r\n\t}\r\n});\n\nvar valueOrDefault$2 = helpers$1.valueOrDefault;\r\n\r\nvar defaultColor$1 = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tpoint: {\r\n\t\t\tradius: 3,\r\n\t\t\tpointStyle: 'circle',\r\n\t\t\tbackgroundColor: defaultColor$1,\r\n\t\t\tborderColor: defaultColor$1,\r\n\t\t\tborderWidth: 1,\r\n\t\t\t// Hover\r\n\t\t\thitRadius: 1,\r\n\t\t\thoverRadius: 4,\r\n\t\t\thoverBorderWidth: 1\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction xRange(mouseX) {\r\n\tvar vm = this._view;\r\n\treturn vm ? (Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius) : false;\r\n}\r\n\r\nfunction yRange(mouseY) {\r\n\tvar vm = this._view;\r\n\treturn vm ? (Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius) : false;\r\n}\r\n\r\nvar element_point = core_element.extend({\r\n\t_type: 'point',\r\n\r\n\tinRange: function(mouseX, mouseY) {\r\n\t\tvar vm = this._view;\r\n\t\treturn vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false;\r\n\t},\r\n\r\n\tinLabelRange: xRange,\r\n\tinXRange: xRange,\r\n\tinYRange: yRange,\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y\r\n\t\t};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\treturn Math.PI * Math.pow(this._view.radius, 2);\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y,\r\n\t\t\tpadding: vm.radius + vm.borderWidth\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function(chartArea) {\r\n\t\tvar vm = this._view;\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar pointStyle = vm.pointStyle;\r\n\t\tvar rotation = vm.rotation;\r\n\t\tvar radius = vm.radius;\r\n\t\tvar x = vm.x;\r\n\t\tvar y = vm.y;\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow\r\n\r\n\t\tif (vm.skip) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Clipping for Points.\r\n\t\tif (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) {\r\n\t\t\tctx.strokeStyle = vm.borderColor || defaultColor;\r\n\t\t\tctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth);\r\n\t\t\tctx.fillStyle = vm.backgroundColor || defaultColor;\r\n\t\t\thelpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation);\r\n\t\t}\r\n\t}\r\n});\n\nvar defaultColor$2 = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\trectangle: {\r\n\t\t\tbackgroundColor: defaultColor$2,\r\n\t\t\tborderColor: defaultColor$2,\r\n\t\t\tborderSkipped: 'bottom',\r\n\t\t\tborderWidth: 0\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction isVertical(vm) {\r\n\treturn vm && vm.width !== undefined;\r\n}\r\n\r\n/**\r\n * Helper function to get the bounds of the bar regardless of the orientation\r\n * @param bar {Chart.Element.Rectangle} the bar\r\n * @return {Bounds} bounds of the bar\r\n * @private\r\n */\r\nfunction getBarBounds(vm) {\r\n\tvar x1, x2, y1, y2, half;\r\n\r\n\tif (isVertical(vm)) {\r\n\t\thalf = vm.width / 2;\r\n\t\tx1 = vm.x - half;\r\n\t\tx2 = vm.x + half;\r\n\t\ty1 = Math.min(vm.y, vm.base);\r\n\t\ty2 = Math.max(vm.y, vm.base);\r\n\t} else {\r\n\t\thalf = vm.height / 2;\r\n\t\tx1 = Math.min(vm.x, vm.base);\r\n\t\tx2 = Math.max(vm.x, vm.base);\r\n\t\ty1 = vm.y - half;\r\n\t\ty2 = vm.y + half;\r\n\t}\r\n\r\n\treturn {\r\n\t\tleft: x1,\r\n\t\ttop: y1,\r\n\t\tright: x2,\r\n\t\tbottom: y2\r\n\t};\r\n}\r\n\r\nfunction swap(orig, v1, v2) {\r\n\treturn orig === v1 ? v2 : orig === v2 ? v1 : orig;\r\n}\r\n\r\nfunction parseBorderSkipped(vm) {\r\n\tvar edge = vm.borderSkipped;\r\n\tvar res = {};\r\n\r\n\tif (!edge) {\r\n\t\treturn res;\r\n\t}\r\n\r\n\tif (vm.horizontal) {\r\n\t\tif (vm.base > vm.x) {\r\n\t\t\tedge = swap(edge, 'left', 'right');\r\n\t\t}\r\n\t} else if (vm.base < vm.y) {\r\n\t\tedge = swap(edge, 'bottom', 'top');\r\n\t}\r\n\r\n\tres[edge] = true;\r\n\treturn res;\r\n}\r\n\r\nfunction parseBorderWidth(vm, maxW, maxH) {\r\n\tvar value = vm.borderWidth;\r\n\tvar skip = parseBorderSkipped(vm);\r\n\tvar t, r, b, l;\r\n\r\n\tif (helpers$1.isObject(value)) {\r\n\t\tt = +value.top || 0;\r\n\t\tr = +value.right || 0;\r\n\t\tb = +value.bottom || 0;\r\n\t\tl = +value.left || 0;\r\n\t} else {\r\n\t\tt = r = b = l = +value || 0;\r\n\t}\r\n\r\n\treturn {\r\n\t\tt: skip.top || (t < 0) ? 0 : t > maxH ? maxH : t,\r\n\t\tr: skip.right || (r < 0) ? 0 : r > maxW ? maxW : r,\r\n\t\tb: skip.bottom || (b < 0) ? 0 : b > maxH ? maxH : b,\r\n\t\tl: skip.left || (l < 0) ? 0 : l > maxW ? maxW : l\r\n\t};\r\n}\r\n\r\nfunction boundingRects(vm) {\r\n\tvar bounds = getBarBounds(vm);\r\n\tvar width = bounds.right - bounds.left;\r\n\tvar height = bounds.bottom - bounds.top;\r\n\tvar border = parseBorderWidth(vm, width / 2, height / 2);\r\n\r\n\treturn {\r\n\t\touter: {\r\n\t\t\tx: bounds.left,\r\n\t\t\ty: bounds.top,\r\n\t\t\tw: width,\r\n\t\t\th: height\r\n\t\t},\r\n\t\tinner: {\r\n\t\t\tx: bounds.left + border.l,\r\n\t\t\ty: bounds.top + border.t,\r\n\t\t\tw: width - border.l - border.r,\r\n\t\t\th: height - border.t - border.b\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction inRange(vm, x, y) {\r\n\tvar skipX = x === null;\r\n\tvar skipY = y === null;\r\n\tvar bounds = !vm || (skipX && skipY) ? false : getBarBounds(vm);\r\n\r\n\treturn bounds\r\n\t\t&& (skipX || x >= bounds.left && x <= bounds.right)\r\n\t\t&& (skipY || y >= bounds.top && y <= bounds.bottom);\r\n}\r\n\r\nvar element_rectangle = core_element.extend({\r\n\t_type: 'rectangle',\r\n\r\n\tdraw: function() {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\t\tvar rects = boundingRects(vm);\r\n\t\tvar outer = rects.outer;\r\n\t\tvar inner = rects.inner;\r\n\r\n\t\tctx.fillStyle = vm.backgroundColor;\r\n\t\tctx.fillRect(outer.x, outer.y, outer.w, outer.h);\r\n\r\n\t\tif (outer.w === inner.w && outer.h === inner.h) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\t\tctx.beginPath();\r\n\t\tctx.rect(outer.x, outer.y, outer.w, outer.h);\r\n\t\tctx.clip();\r\n\t\tctx.fillStyle = vm.borderColor;\r\n\t\tctx.rect(inner.x, inner.y, inner.w, inner.h);\r\n\t\tctx.fill('evenodd');\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\theight: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn vm.base - vm.y;\r\n\t},\r\n\r\n\tinRange: function(mouseX, mouseY) {\r\n\t\treturn inRange(this._view, mouseX, mouseY);\r\n\t},\r\n\r\n\tinLabelRange: function(mouseX, mouseY) {\r\n\t\tvar vm = this._view;\r\n\t\treturn isVertical(vm)\r\n\t\t\t? inRange(vm, mouseX, null)\r\n\t\t\t: inRange(vm, null, mouseY);\r\n\t},\r\n\r\n\tinXRange: function(mouseX) {\r\n\t\treturn inRange(this._view, mouseX, null);\r\n\t},\r\n\r\n\tinYRange: function(mouseY) {\r\n\t\treturn inRange(this._view, null, mouseY);\r\n\t},\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar x, y;\r\n\t\tif (isVertical(vm)) {\r\n\t\t\tx = vm.x;\r\n\t\t\ty = (vm.y + vm.base) / 2;\r\n\t\t} else {\r\n\t\t\tx = (vm.x + vm.base) / 2;\r\n\t\t\ty = vm.y;\r\n\t\t}\r\n\r\n\t\treturn {x: x, y: y};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\tvar vm = this._view;\r\n\r\n\t\treturn isVertical(vm)\r\n\t\t\t? vm.width * Math.abs(vm.y - vm.base)\r\n\t\t\t: vm.height * Math.abs(vm.x - vm.base);\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y\r\n\t\t};\r\n\t}\r\n});\n\nvar elements = {};\r\nvar Arc = element_arc;\r\nvar Line = element_line;\r\nvar Point = element_point;\r\nvar Rectangle = element_rectangle;\nelements.Arc = Arc;\nelements.Line = Line;\nelements.Point = Point;\nelements.Rectangle = Rectangle;\n\nvar deprecated = helpers$1._deprecated;\r\nvar valueOrDefault$3 = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('bar', {\r\n\thover: {\r\n\t\tmode: 'label'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\toffset: true,\r\n\t\t\tgridLines: {\r\n\t\t\t\toffsetGridLines: true\r\n\t\t\t}\r\n\t\t}],\r\n\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear'\r\n\t\t}]\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\tbar: {\r\n\t\t\tcategoryPercentage: 0.8,\r\n\t\t\tbarPercentage: 0.9\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/**\r\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\r\n * @private\r\n */\r\nfunction computeMinSampleSize(scale, pixels) {\r\n\tvar min = scale._length;\r\n\tvar prev, curr, i, ilen;\r\n\r\n\tfor (i = 1, ilen = pixels.length; i < ilen; ++i) {\r\n\t\tmin = Math.min(min, Math.abs(pixels[i] - pixels[i - 1]));\r\n\t}\r\n\r\n\tfor (i = 0, ilen = scale.getTicks().length; i < ilen; ++i) {\r\n\t\tcurr = scale.getPixelForTick(i);\r\n\t\tmin = i > 0 ? Math.min(min, Math.abs(curr - prev)) : min;\r\n\t\tprev = curr;\r\n\t}\r\n\r\n\treturn min;\r\n}\r\n\r\n/**\r\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\r\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\r\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\r\n * @private\r\n */\r\nfunction computeFitCategoryTraits(index, ruler, options) {\r\n\tvar thickness = options.barThickness;\r\n\tvar count = ruler.stackCount;\r\n\tvar curr = ruler.pixels[index];\r\n\tvar min = helpers$1.isNullOrUndef(thickness)\r\n\t\t? computeMinSampleSize(ruler.scale, ruler.pixels)\r\n\t\t: -1;\r\n\tvar size, ratio;\r\n\r\n\tif (helpers$1.isNullOrUndef(thickness)) {\r\n\t\tsize = min * options.categoryPercentage;\r\n\t\tratio = options.barPercentage;\r\n\t} else {\r\n\t\t// When bar thickness is enforced, category and bar percentages are ignored.\r\n\t\t// Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\r\n\t\t// and deprecate barPercentage since this value is ignored when thickness is absolute.\r\n\t\tsize = thickness * count;\r\n\t\tratio = 1;\r\n\t}\r\n\r\n\treturn {\r\n\t\tchunk: size / count,\r\n\t\tratio: ratio,\r\n\t\tstart: curr - (size / 2)\r\n\t};\r\n}\r\n\r\n/**\r\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\r\n * percentage options are 1), based on the previous and following categories. This mode\r\n * generates bars with different widths when data are not evenly spaced.\r\n * @private\r\n */\r\nfunction computeFlexCategoryTraits(index, ruler, options) {\r\n\tvar pixels = ruler.pixels;\r\n\tvar curr = pixels[index];\r\n\tvar prev = index > 0 ? pixels[index - 1] : null;\r\n\tvar next = index < pixels.length - 1 ? pixels[index + 1] : null;\r\n\tvar percent = options.categoryPercentage;\r\n\tvar start, size;\r\n\r\n\tif (prev === null) {\r\n\t\t// first data: its size is double based on the next point or,\r\n\t\t// if it's also the last data, we use the scale size.\r\n\t\tprev = curr - (next === null ? ruler.end - ruler.start : next - curr);\r\n\t}\r\n\r\n\tif (next === null) {\r\n\t\t// last data: its size is also double based on the previous point.\r\n\t\tnext = curr + curr - prev;\r\n\t}\r\n\r\n\tstart = curr - (curr - Math.min(prev, next)) / 2 * percent;\r\n\tsize = Math.abs(next - prev) / 2 * percent;\r\n\r\n\treturn {\r\n\t\tchunk: size / ruler.stackCount,\r\n\t\tratio: options.barPercentage,\r\n\t\tstart: start\r\n\t};\r\n}\r\n\r\nvar controller_bar = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Rectangle,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderSkipped',\r\n\t\t'borderWidth',\r\n\t\t'barPercentage',\r\n\t\t'barThickness',\r\n\t\t'categoryPercentage',\r\n\t\t'maxBarThickness',\r\n\t\t'minBarLength'\r\n\t],\r\n\r\n\tinitialize: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta, scaleOpts;\r\n\r\n\t\tcore_datasetController.prototype.initialize.apply(me, arguments);\r\n\r\n\t\tmeta = me.getMeta();\r\n\t\tmeta.stack = me.getDataset().stack;\r\n\t\tmeta.bar = true;\r\n\r\n\t\tscaleOpts = me._getIndexScale().options;\r\n\t\tdeprecated('bar chart', scaleOpts.barPercentage, 'scales.[x/y]Axes.barPercentage', 'dataset.barPercentage');\r\n\t\tdeprecated('bar chart', scaleOpts.barThickness, 'scales.[x/y]Axes.barThickness', 'dataset.barThickness');\r\n\t\tdeprecated('bar chart', scaleOpts.categoryPercentage, 'scales.[x/y]Axes.categoryPercentage', 'dataset.categoryPercentage');\r\n\t\tdeprecated('bar chart', me._getValueScale().options.minBarLength, 'scales.[x/y]Axes.minBarLength', 'dataset.minBarLength');\r\n\t\tdeprecated('bar chart', scaleOpts.maxBarThickness, 'scales.[x/y]Axes.maxBarThickness', 'dataset.maxBarThickness');\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar rects = me.getMeta().data;\r\n\t\tvar i, ilen;\r\n\r\n\t\tme._ruler = me.getRuler();\r\n\r\n\t\tfor (i = 0, ilen = rects.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(rects[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(rectangle, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar options = me._resolveDataElementOptions(rectangle, index);\r\n\r\n\t\trectangle._xScale = me.getScaleForId(meta.xAxisID);\r\n\t\trectangle._yScale = me.getScaleForId(meta.yAxisID);\r\n\t\trectangle._datasetIndex = me.index;\r\n\t\trectangle._index = index;\r\n\t\trectangle._model = {\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderSkipped: options.borderSkipped,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\tdatasetLabel: dataset.label,\r\n\t\t\tlabel: me.chart.data.labels[index]\r\n\t\t};\r\n\r\n\t\tif (helpers$1.isArray(dataset.data[index])) {\r\n\t\t\trectangle._model.borderSkipped = null;\r\n\t\t}\r\n\r\n\t\tme._updateElementGeometry(rectangle, index, reset, options);\r\n\r\n\t\trectangle.pivot();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_updateElementGeometry: function(rectangle, index, reset, options) {\r\n\t\tvar me = this;\r\n\t\tvar model = rectangle._model;\r\n\t\tvar vscale = me._getValueScale();\r\n\t\tvar base = vscale.getBasePixel();\r\n\t\tvar horizontal = vscale.isHorizontal();\r\n\t\tvar ruler = me._ruler || me.getRuler();\r\n\t\tvar vpixels = me.calculateBarValuePixels(me.index, index, options);\r\n\t\tvar ipixels = me.calculateBarIndexPixels(me.index, index, ruler, options);\r\n\r\n\t\tmodel.horizontal = horizontal;\r\n\t\tmodel.base = reset ? base : vpixels.base;\r\n\t\tmodel.x = horizontal ? reset ? base : vpixels.head : ipixels.center;\r\n\t\tmodel.y = horizontal ? ipixels.center : reset ? base : vpixels.head;\r\n\t\tmodel.height = horizontal ? ipixels.size : undefined;\r\n\t\tmodel.width = horizontal ? undefined : ipixels.size;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the stacks based on groups and bar visibility.\r\n\t * @param {number} [last] - The dataset index\r\n\t * @returns {string[]} The list of stack IDs\r\n\t * @private\r\n\t */\r\n\t_getStacks: function(last) {\r\n\t\tvar me = this;\r\n\t\tvar scale = me._getIndexScale();\r\n\t\tvar metasets = scale._getMatchingVisibleMetas(me._type);\r\n\t\tvar stacked = scale.options.stacked;\r\n\t\tvar ilen = metasets.length;\r\n\t\tvar stacks = [];\r\n\t\tvar i, meta;\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tmeta = metasets[i];\r\n\t\t\t// stacked | meta.stack\r\n\t\t\t// | found | not found | undefined\r\n\t\t\t// false | x | x | x\r\n\t\t\t// true | | x |\r\n\t\t\t// undefined | | x | x\r\n\t\t\tif (stacked === false || stacks.indexOf(meta.stack) === -1 ||\r\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\r\n\t\t\t\tstacks.push(meta.stack);\r\n\t\t\t}\r\n\t\t\tif (meta.index === last) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn stacks;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the effective number of stacks based on groups and bar visibility.\r\n\t * @private\r\n\t */\r\n\tgetStackCount: function() {\r\n\t\treturn this._getStacks().length;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\r\n\t * @param {number} [datasetIndex] - The dataset index\r\n\t * @param {string} [name] - The stack name to find\r\n\t * @returns {number} The stack index\r\n\t * @private\r\n\t */\r\n\tgetStackIndex: function(datasetIndex, name) {\r\n\t\tvar stacks = this._getStacks(datasetIndex);\r\n\t\tvar index = (name !== undefined)\r\n\t\t\t? stacks.indexOf(name)\r\n\t\t\t: -1; // indexOf returns -1 if element is not present\r\n\r\n\t\treturn (index === -1)\r\n\t\t\t? stacks.length - 1\r\n\t\t\t: index;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tgetRuler: function() {\r\n\t\tvar me = this;\r\n\t\tvar scale = me._getIndexScale();\r\n\t\tvar pixels = [];\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {\r\n\t\t\tpixels.push(scale.getPixelForValue(null, i, me.index));\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tpixels: pixels,\r\n\t\t\tstart: scale._startPixel,\r\n\t\t\tend: scale._endPixel,\r\n\t\t\tstackCount: me.getStackCount(),\r\n\t\t\tscale: scale\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Note: pixel values are not clamped to the scale area.\r\n\t * @private\r\n\t */\r\n\tcalculateBarValuePixels: function(datasetIndex, index, options) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar scale = me._getValueScale();\r\n\t\tvar isHorizontal = scale.isHorizontal();\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar metasets = scale._getMatchingVisibleMetas(me._type);\r\n\t\tvar value = scale._parseValue(datasets[datasetIndex].data[index]);\r\n\t\tvar minBarLength = options.minBarLength;\r\n\t\tvar stacked = scale.options.stacked;\r\n\t\tvar stack = me.getMeta().stack;\r\n\t\tvar start = value.start === undefined ? 0 : value.max >= 0 && value.min >= 0 ? value.min : value.max;\r\n\t\tvar length = value.start === undefined ? value.end : value.max >= 0 && value.min >= 0 ? value.max - value.min : value.min - value.max;\r\n\t\tvar ilen = metasets.length;\r\n\t\tvar i, imeta, ivalue, base, head, size, stackLength;\r\n\r\n\t\tif (stacked || (stacked === undefined && stack !== undefined)) {\r\n\t\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\t\timeta = metasets[i];\r\n\r\n\t\t\t\tif (imeta.index === datasetIndex) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (imeta.stack === stack) {\r\n\t\t\t\t\tstackLength = scale._parseValue(datasets[imeta.index].data[index]);\r\n\t\t\t\t\tivalue = stackLength.start === undefined ? stackLength.end : stackLength.min >= 0 && stackLength.max >= 0 ? stackLength.max : stackLength.min;\r\n\r\n\t\t\t\t\tif ((value.min < 0 && ivalue < 0) || (value.max >= 0 && ivalue > 0)) {\r\n\t\t\t\t\t\tstart += ivalue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tbase = scale.getPixelForValue(start);\r\n\t\thead = scale.getPixelForValue(start + length);\r\n\t\tsize = head - base;\r\n\r\n\t\tif (minBarLength !== undefined && Math.abs(size) < minBarLength) {\r\n\t\t\tsize = minBarLength;\r\n\t\t\tif (length >= 0 && !isHorizontal || length < 0 && isHorizontal) {\r\n\t\t\t\thead = base - minBarLength;\r\n\t\t\t} else {\r\n\t\t\t\thead = base + minBarLength;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tsize: size,\r\n\t\t\tbase: base,\r\n\t\t\thead: head,\r\n\t\t\tcenter: head + size / 2\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tcalculateBarIndexPixels: function(datasetIndex, index, ruler, options) {\r\n\t\tvar me = this;\r\n\t\tvar range = options.barThickness === 'flex'\r\n\t\t\t? computeFlexCategoryTraits(index, ruler, options)\r\n\t\t\t: computeFitCategoryTraits(index, ruler, options);\r\n\r\n\t\tvar stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);\r\n\t\tvar center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\r\n\t\tvar size = Math.min(\r\n\t\t\tvalueOrDefault$3(options.maxBarThickness, Infinity),\r\n\t\t\trange.chunk * range.ratio);\r\n\r\n\t\treturn {\r\n\t\t\tbase: center - size / 2,\r\n\t\t\thead: center + size / 2,\r\n\t\t\tcenter: center,\r\n\t\t\tsize: size\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar scale = me._getValueScale();\r\n\t\tvar rects = me.getMeta().data;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar ilen = rects.length;\r\n\t\tvar i = 0;\r\n\r\n\t\thelpers$1.canvas.clipArea(chart.ctx, chart.chartArea);\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tvar val = scale._parseValue(dataset.data[i]);\r\n\t\t\tif (!isNaN(val.min) && !isNaN(val.max)) {\r\n\t\t\t\trects[i].draw();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\thelpers$1.canvas.unclipArea(chart.ctx);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar values = helpers$1.extend({}, core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments));\r\n\t\tvar indexOpts = me._getIndexScale().options;\r\n\t\tvar valueOpts = me._getValueScale().options;\r\n\r\n\t\tvalues.barPercentage = valueOrDefault$3(indexOpts.barPercentage, values.barPercentage);\r\n\t\tvalues.barThickness = valueOrDefault$3(indexOpts.barThickness, values.barThickness);\r\n\t\tvalues.categoryPercentage = valueOrDefault$3(indexOpts.categoryPercentage, values.categoryPercentage);\r\n\t\tvalues.maxBarThickness = valueOrDefault$3(indexOpts.maxBarThickness, values.maxBarThickness);\r\n\t\tvalues.minBarLength = valueOrDefault$3(valueOpts.minBarLength, values.minBarLength);\r\n\r\n\t\treturn values;\r\n\t}\r\n\r\n});\n\nvar valueOrDefault$4 = helpers$1.valueOrDefault;\r\nvar resolve$1 = helpers$1.options.resolve;\r\n\r\ncore_defaults._set('bubble', {\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'linear', // bubble should probably use a linear scale by default\r\n\t\t\tposition: 'bottom',\r\n\t\t\tid: 'x-axis-0' // need an ID so datasets can reference the scale\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'left',\r\n\t\t\tid: 'y-axis-0'\r\n\t\t}]\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\t// Title doesn't make sense for scatter since we format the data as a point\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(item, data) {\r\n\t\t\t\tvar datasetLabel = data.datasets[item.datasetIndex].label || '';\r\n\t\t\t\tvar dataPoint = data.datasets[item.datasetIndex].data[item.index];\r\n\t\t\t\treturn datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_bubble = core_datasetController.extend({\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tdataElementType: elements.Point,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t\t'hoverRadius',\r\n\t\t'hitRadius',\r\n\t\t'pointStyle',\r\n\t\t'rotation'\r\n\t],\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar points = meta.data;\r\n\r\n\t\t// Update Points\r\n\t\thelpers$1.each(points, function(point, index) {\r\n\t\t\tme.updateElement(point, index, reset);\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar xScale = me.getScaleForId(meta.xAxisID);\r\n\t\tvar yScale = me.getScaleForId(meta.yAxisID);\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\t\tvar data = me.getDataset().data[index];\r\n\t\tvar dsIndex = me.index;\r\n\r\n\t\tvar x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);\r\n\t\tvar y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);\r\n\r\n\t\tpoint._xScale = xScale;\r\n\t\tpoint._yScale = yScale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = dsIndex;\r\n\t\tpoint._index = index;\r\n\t\tpoint._model = {\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\thitRadius: options.hitRadius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tradius: reset ? 0 : options.radius,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\tx: x,\r\n\t\t\ty: y,\r\n\t\t};\r\n\r\n\t\tpoint.pivot();\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = options.radius + options.hoverRadius;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function(point, index) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar data = dataset.data[index] || {};\r\n\t\tvar values = core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments);\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: dataset,\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\t// In case values were cached (and thus frozen), we need to clone the values\r\n\t\tif (me._cachedDataOpts === values) {\r\n\t\t\tvalues = helpers$1.extend({}, values);\r\n\t\t}\r\n\r\n\t\t// Custom radius resolution\r\n\t\tvalues.radius = resolve$1([\r\n\t\t\tcustom.radius,\r\n\t\t\tdata.r,\r\n\t\t\tme._config.radius,\r\n\t\t\tchart.options.elements.point.radius\r\n\t\t], context, index);\r\n\r\n\t\treturn values;\r\n\t}\r\n});\n\nvar valueOrDefault$5 = helpers$1.valueOrDefault;\r\n\r\nvar PI$1 = Math.PI;\r\nvar DOUBLE_PI$1 = PI$1 * 2;\r\nvar HALF_PI$1 = PI$1 / 2;\r\n\r\ncore_defaults._set('doughnut', {\r\n\tanimation: {\r\n\t\t// Boolean - Whether we animate the rotation of the Doughnut\r\n\t\tanimateRotate: true,\r\n\t\t// Boolean - Whether we animate scaling the Doughnut from the centre\r\n\t\tanimateScale: false\r\n\t},\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\tlegendCallback: function(chart) {\r\n\t\tvar list = document.createElement('ul');\r\n\t\tvar data = chart.data;\r\n\t\tvar datasets = data.datasets;\r\n\t\tvar labels = data.labels;\r\n\t\tvar i, ilen, listItem, listItemSpan;\r\n\r\n\t\tlist.setAttribute('class', chart.id + '-legend');\r\n\t\tif (datasets.length) {\r\n\t\t\tfor (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {\r\n\t\t\t\tlistItem = list.appendChild(document.createElement('li'));\r\n\t\t\t\tlistItemSpan = listItem.appendChild(document.createElement('span'));\r\n\t\t\t\tlistItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];\r\n\t\t\t\tif (labels[i]) {\r\n\t\t\t\t\tlistItem.appendChild(document.createTextNode(labels[i]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn list.outerHTML;\r\n\t},\r\n\tlegend: {\r\n\t\tlabels: {\r\n\t\t\tgenerateLabels: function(chart) {\r\n\t\t\t\tvar data = chart.data;\r\n\t\t\t\tif (data.labels.length && data.datasets.length) {\r\n\t\t\t\t\treturn data.labels.map(function(label, i) {\r\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\r\n\t\t\t\t\t\tvar style = meta.controller.getStyle(i);\r\n\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\ttext: label,\r\n\t\t\t\t\t\t\tfillStyle: style.backgroundColor,\r\n\t\t\t\t\t\t\tstrokeStyle: style.borderColor,\r\n\t\t\t\t\t\t\tlineWidth: style.borderWidth,\r\n\t\t\t\t\t\t\thidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,\r\n\r\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tonClick: function(e, legendItem) {\r\n\t\t\tvar index = legendItem.index;\r\n\t\t\tvar chart = this.chart;\r\n\t\t\tvar i, ilen, meta;\r\n\r\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\t// toggle visibility of index if exists\r\n\t\t\t\tif (meta.data[index]) {\r\n\t\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tchart.update();\r\n\t\t}\r\n\t},\r\n\r\n\t// The percentage of the chart that we cut out of the middle.\r\n\tcutoutPercentage: 50,\r\n\r\n\t// The rotation of the chart, where the first data arc begins.\r\n\trotation: -HALF_PI$1,\r\n\r\n\t// The total circumference of the chart.\r\n\tcircumference: DOUBLE_PI$1,\r\n\r\n\t// Need to override these to give a nice default\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(tooltipItem, data) {\r\n\t\t\t\tvar dataLabel = data.labels[tooltipItem.index];\r\n\t\t\t\tvar value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\r\n\r\n\t\t\t\tif (helpers$1.isArray(dataLabel)) {\r\n\t\t\t\t\t// show value on first line of multiline label\r\n\t\t\t\t\t// need to clone because we are changing the value\r\n\t\t\t\t\tdataLabel = dataLabel.slice();\r\n\t\t\t\t\tdataLabel[0] += value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdataLabel += value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn dataLabel;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_doughnut = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Arc,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'borderAlign',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t],\r\n\r\n\t// Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly\r\n\tgetRingIndex: function(datasetIndex) {\r\n\t\tvar ringIndex = 0;\r\n\r\n\t\tfor (var j = 0; j < datasetIndex; ++j) {\r\n\t\t\tif (this.chart.isDatasetVisible(j)) {\r\n\t\t\t\t++ringIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ringIndex;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar ratioX = 1;\r\n\t\tvar ratioY = 1;\r\n\t\tvar offsetX = 0;\r\n\t\tvar offsetY = 0;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar arcs = meta.data;\r\n\t\tvar cutout = opts.cutoutPercentage / 100 || 0;\r\n\t\tvar circumference = opts.circumference;\r\n\t\tvar chartWeight = me._getRingWeight(me.index);\r\n\t\tvar maxWidth, maxHeight, i, ilen;\r\n\r\n\t\t// If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\r\n\t\tif (circumference < DOUBLE_PI$1) {\r\n\t\t\tvar startAngle = opts.rotation % DOUBLE_PI$1;\r\n\t\t\tstartAngle += startAngle >= PI$1 ? -DOUBLE_PI$1 : startAngle < -PI$1 ? DOUBLE_PI$1 : 0;\r\n\t\t\tvar endAngle = startAngle + circumference;\r\n\t\t\tvar startX = Math.cos(startAngle);\r\n\t\t\tvar startY = Math.sin(startAngle);\r\n\t\t\tvar endX = Math.cos(endAngle);\r\n\t\t\tvar endY = Math.sin(endAngle);\r\n\t\t\tvar contains0 = (startAngle <= 0 && endAngle >= 0) || endAngle >= DOUBLE_PI$1;\r\n\t\t\tvar contains90 = (startAngle <= HALF_PI$1 && endAngle >= HALF_PI$1) || endAngle >= DOUBLE_PI$1 + HALF_PI$1;\r\n\t\t\tvar contains180 = startAngle === -PI$1 || endAngle >= PI$1;\r\n\t\t\tvar contains270 = (startAngle <= -HALF_PI$1 && endAngle >= -HALF_PI$1) || endAngle >= PI$1 + HALF_PI$1;\r\n\t\t\tvar minX = contains180 ? -1 : Math.min(startX, startX * cutout, endX, endX * cutout);\r\n\t\t\tvar minY = contains270 ? -1 : Math.min(startY, startY * cutout, endY, endY * cutout);\r\n\t\t\tvar maxX = contains0 ? 1 : Math.max(startX, startX * cutout, endX, endX * cutout);\r\n\t\t\tvar maxY = contains90 ? 1 : Math.max(startY, startY * cutout, endY, endY * cutout);\r\n\t\t\tratioX = (maxX - minX) / 2;\r\n\t\t\tratioY = (maxY - minY) / 2;\r\n\t\t\toffsetX = -(maxX + minX) / 2;\r\n\t\t\toffsetY = -(maxY + minY) / 2;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarcs[i]._options = me._resolveDataElementOptions(arcs[i], i);\r\n\t\t}\r\n\r\n\t\tchart.borderWidth = me.getMaxBorderWidth();\r\n\t\tmaxWidth = (chartArea.right - chartArea.left - chart.borderWidth) / ratioX;\r\n\t\tmaxHeight = (chartArea.bottom - chartArea.top - chart.borderWidth) / ratioY;\r\n\t\tchart.outerRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\r\n\t\tchart.innerRadius = Math.max(chart.outerRadius * cutout, 0);\r\n\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1);\r\n\t\tchart.offsetX = offsetX * chart.outerRadius;\r\n\t\tchart.offsetY = offsetY * chart.outerRadius;\r\n\r\n\t\tmeta.total = me.calculateTotal();\r\n\r\n\t\tme.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index);\r\n\t\tme.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0);\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(arcs[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(arc, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar animationOpts = opts.animation;\r\n\t\tvar centerX = (chartArea.left + chartArea.right) / 2;\r\n\t\tvar centerY = (chartArea.top + chartArea.bottom) / 2;\r\n\t\tvar startAngle = opts.rotation; // non reset case handled later\r\n\t\tvar endAngle = opts.rotation; // non reset case handled later\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / DOUBLE_PI$1);\r\n\t\tvar innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;\r\n\t\tvar outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;\r\n\t\tvar options = arc._options || {};\r\n\r\n\t\thelpers$1.extend(arc, {\r\n\t\t\t// Utility\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index,\r\n\r\n\t\t\t// Desired view properties\r\n\t\t\t_model: {\r\n\t\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\t\tborderColor: options.borderColor,\r\n\t\t\t\tborderWidth: options.borderWidth,\r\n\t\t\t\tborderAlign: options.borderAlign,\r\n\t\t\t\tx: centerX + chart.offsetX,\r\n\t\t\t\ty: centerY + chart.offsetY,\r\n\t\t\t\tstartAngle: startAngle,\r\n\t\t\t\tendAngle: endAngle,\r\n\t\t\t\tcircumference: circumference,\r\n\t\t\t\touterRadius: outerRadius,\r\n\t\t\t\tinnerRadius: innerRadius,\r\n\t\t\t\tlabel: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tvar model = arc._model;\r\n\r\n\t\t// Set correct angles if not resetting\r\n\t\tif (!reset || !animationOpts.animateRotate) {\r\n\t\t\tif (index === 0) {\r\n\t\t\t\tmodel.startAngle = opts.rotation;\r\n\t\t\t} else {\r\n\t\t\t\tmodel.startAngle = me.getMeta().data[index - 1]._model.endAngle;\r\n\t\t\t}\r\n\r\n\t\t\tmodel.endAngle = model.startAngle + model.circumference;\r\n\t\t}\r\n\r\n\t\tarc.pivot();\r\n\t},\r\n\r\n\tcalculateTotal: function() {\r\n\t\tvar dataset = this.getDataset();\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar total = 0;\r\n\t\tvar value;\r\n\r\n\t\thelpers$1.each(meta.data, function(element, index) {\r\n\t\t\tvalue = dataset.data[index];\r\n\t\t\tif (!isNaN(value) && !element.hidden) {\r\n\t\t\t\ttotal += Math.abs(value);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t/* if (total === 0) {\r\n\t\t\ttotal = NaN;\r\n\t\t}*/\r\n\r\n\t\treturn total;\r\n\t},\r\n\r\n\tcalculateCircumference: function(value) {\r\n\t\tvar total = this.getMeta().total;\r\n\t\tif (total > 0 && !isNaN(value)) {\r\n\t\t\treturn DOUBLE_PI$1 * (Math.abs(value) / total);\r\n\t\t}\r\n\t\treturn 0;\r\n\t},\r\n\r\n\t// gets the max border or hover width to properly scale pie charts\r\n\tgetMaxBorderWidth: function(arcs) {\r\n\t\tvar me = this;\r\n\t\tvar max = 0;\r\n\t\tvar chart = me.chart;\r\n\t\tvar i, ilen, meta, arc, controller, options, borderWidth, hoverWidth;\r\n\r\n\t\tif (!arcs) {\r\n\t\t\t// Find the outmost visible dataset\r\n\t\t\tfor (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\r\n\t\t\t\tif (chart.isDatasetVisible(i)) {\r\n\t\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\t\tarcs = meta.data;\r\n\t\t\t\t\tif (i !== me.index) {\r\n\t\t\t\t\t\tcontroller = meta.controller;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!arcs) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarc = arcs[i];\r\n\t\t\tif (controller) {\r\n\t\t\t\tcontroller._configure();\r\n\t\t\t\toptions = controller._resolveDataElementOptions(arc, i);\r\n\t\t\t} else {\r\n\t\t\t\toptions = arc._options;\r\n\t\t\t}\r\n\t\t\tif (options.borderAlign !== 'inner') {\r\n\t\t\t\tborderWidth = options.borderWidth;\r\n\t\t\t\thoverWidth = options.hoverBorderWidth;\r\n\r\n\t\t\t\tmax = borderWidth > max ? borderWidth : max;\r\n\t\t\t\tmax = hoverWidth > max ? hoverWidth : max;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn max;\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(arc) {\r\n\t\tvar model = arc._model;\r\n\t\tvar options = arc._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tarc.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth);\r\n\t},\r\n\r\n\t/**\r\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\r\n\t * @private\r\n\t */\r\n\t_getRingWeightOffset: function(datasetIndex) {\r\n\t\tvar ringWeightOffset = 0;\r\n\r\n\t\tfor (var i = 0; i < datasetIndex; ++i) {\r\n\t\t\tif (this.chart.isDatasetVisible(i)) {\r\n\t\t\t\tringWeightOffset += this._getRingWeight(i);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ringWeightOffset;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getRingWeight: function(dataSetIndex) {\r\n\t\treturn Math.max(valueOrDefault$5(this.chart.data.datasets[dataSetIndex].weight, 1), 0);\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the sum of all visibile data set weights. This value can be 0.\r\n\t * @private\r\n\t */\r\n\t_getVisibleDatasetWeightTotal: function() {\r\n\t\treturn this._getRingWeightOffset(this.chart.data.datasets.length);\r\n\t}\r\n});\n\ncore_defaults._set('horizontalBar', {\r\n\thover: {\r\n\t\tmode: 'index',\r\n\t\taxis: 'y'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'bottom'\r\n\t\t}],\r\n\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\tposition: 'left',\r\n\t\t\toffset: true,\r\n\t\t\tgridLines: {\r\n\t\t\t\toffsetGridLines: true\r\n\t\t\t}\r\n\t\t}]\r\n\t},\r\n\r\n\telements: {\r\n\t\trectangle: {\r\n\t\t\tborderSkipped: 'left'\r\n\t\t}\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tmode: 'index',\r\n\t\taxis: 'y'\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\thorizontalBar: {\r\n\t\t\tcategoryPercentage: 0.8,\r\n\t\t\tbarPercentage: 0.9\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_horizontalBar = controller_bar.extend({\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.getMeta().xAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.getMeta().yAxisID;\r\n\t}\r\n});\n\nvar valueOrDefault$6 = helpers$1.valueOrDefault;\r\nvar resolve$2 = helpers$1.options.resolve;\r\nvar isPointInArea = helpers$1.canvas._isPointInArea;\r\n\r\ncore_defaults._set('line', {\r\n\tshowLines: true,\r\n\tspanGaps: false,\r\n\r\n\thover: {\r\n\t\tmode: 'label'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\tid: 'x-axis-0'\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tid: 'y-axis-0'\r\n\t\t}]\r\n\t}\r\n});\r\n\r\nfunction scaleClip(scale, halfBorderWidth) {\r\n\tvar tickOpts = scale && scale.options.ticks || {};\r\n\tvar reverse = tickOpts.reverse;\r\n\tvar min = tickOpts.min === undefined ? halfBorderWidth : 0;\r\n\tvar max = tickOpts.max === undefined ? halfBorderWidth : 0;\r\n\treturn {\r\n\t\tstart: reverse ? max : min,\r\n\t\tend: reverse ? min : max\r\n\t};\r\n}\r\n\r\nfunction defaultClip(xScale, yScale, borderWidth) {\r\n\tvar halfBorderWidth = borderWidth / 2;\r\n\tvar x = scaleClip(xScale, halfBorderWidth);\r\n\tvar y = scaleClip(yScale, halfBorderWidth);\r\n\r\n\treturn {\r\n\t\ttop: y.end,\r\n\t\tright: x.end,\r\n\t\tbottom: y.start,\r\n\t\tleft: x.start\r\n\t};\r\n}\r\n\r\nfunction toClip(value) {\r\n\tvar t, r, b, l;\r\n\r\n\tif (helpers$1.isObject(value)) {\r\n\t\tt = value.top;\r\n\t\tr = value.right;\r\n\t\tb = value.bottom;\r\n\t\tl = value.left;\r\n\t} else {\r\n\t\tt = r = b = l = value;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttop: t,\r\n\t\tright: r,\r\n\t\tbottom: b,\r\n\t\tleft: l\r\n\t};\r\n}\r\n\r\n\r\nvar controller_line = core_datasetController.extend({\r\n\r\n\tdatasetElementType: elements.Line,\r\n\r\n\tdataElementType: elements.Point,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderColor',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'borderWidth',\r\n\t\t'cubicInterpolationMode',\r\n\t\t'fill'\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: {\r\n\t\tbackgroundColor: 'pointBackgroundColor',\r\n\t\tborderColor: 'pointBorderColor',\r\n\t\tborderWidth: 'pointBorderWidth',\r\n\t\thitRadius: 'pointHitRadius',\r\n\t\thoverBackgroundColor: 'pointHoverBackgroundColor',\r\n\t\thoverBorderColor: 'pointHoverBorderColor',\r\n\t\thoverBorderWidth: 'pointHoverBorderWidth',\r\n\t\thoverRadius: 'pointHoverRadius',\r\n\t\tpointStyle: 'pointStyle',\r\n\t\tradius: 'pointRadius',\r\n\t\trotation: 'pointRotation'\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar line = meta.dataset;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar options = me.chart.options;\r\n\t\tvar config = me._config;\r\n\t\tvar showLine = me._showLine = valueOrDefault$6(config.showLine, options.showLines);\r\n\t\tvar i, ilen;\r\n\r\n\t\tme._xScale = me.getScaleForId(meta.xAxisID);\r\n\t\tme._yScale = me.getScaleForId(meta.yAxisID);\r\n\r\n\t\t// Update Line\r\n\t\tif (showLine) {\r\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\r\n\t\t\tif (config.tension !== undefined && config.lineTension === undefined) {\r\n\t\t\t\tconfig.lineTension = config.tension;\r\n\t\t\t}\r\n\r\n\t\t\t// Utility\r\n\t\t\tline._scale = me._yScale;\r\n\t\t\tline._datasetIndex = me.index;\r\n\t\t\t// Data\r\n\t\t\tline._children = points;\r\n\t\t\t// Model\r\n\t\t\tline._model = me._resolveDatasetElementOptions(line);\r\n\r\n\t\t\tline.pivot();\r\n\t\t}\r\n\r\n\t\t// Update Points\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(points[i], i, reset);\r\n\t\t}\r\n\r\n\t\tif (showLine && line._model.tension !== 0) {\r\n\t\t\tme.updateBezierControlPoints();\r\n\t\t}\r\n\r\n\t\t// Now pivot the point for animation\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tpoints[i].pivot();\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar datasetIndex = me.index;\r\n\t\tvar value = dataset.data[index];\r\n\t\tvar xScale = me._xScale;\r\n\t\tvar yScale = me._yScale;\r\n\t\tvar lineModel = meta.dataset._model;\r\n\t\tvar x, y;\r\n\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\r\n\t\tx = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex);\r\n\t\ty = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);\r\n\r\n\t\t// Utility\r\n\t\tpoint._xScale = xScale;\r\n\t\tpoint._yScale = yScale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = datasetIndex;\r\n\t\tpoint._index = index;\r\n\r\n\t\t// Desired view properties\r\n\t\tpoint._model = {\r\n\t\t\tx: x,\r\n\t\t\ty: y,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\t// Appearance\r\n\t\t\tradius: options.radius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\ttension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0),\r\n\t\t\tsteppedLine: lineModel ? lineModel.steppedLine : false,\r\n\t\t\t// Tooltip\r\n\t\t\thitRadius: options.hitRadius\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function(element) {\r\n\t\tvar me = this;\r\n\t\tvar config = me._config;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar options = me.chart.options;\r\n\t\tvar lineOptions = options.elements.line;\r\n\t\tvar values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);\r\n\r\n\t\t// The default behavior of lines is to break at null values, according\r\n\t\t// to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158\r\n\t\t// This option gives lines the ability to span gaps\r\n\t\tvalues.spanGaps = valueOrDefault$6(config.spanGaps, options.spanGaps);\r\n\t\tvalues.tension = valueOrDefault$6(config.lineTension, lineOptions.tension);\r\n\t\tvalues.steppedLine = resolve$2([custom.steppedLine, config.steppedLine, lineOptions.stepped]);\r\n\t\tvalues.clip = toClip(valueOrDefault$6(config.clip, defaultClip(me._xScale, me._yScale, values.borderWidth)));\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tcalculatePointY: function(value, index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar yScale = me._yScale;\r\n\t\tvar sumPos = 0;\r\n\t\tvar sumNeg = 0;\r\n\t\tvar i, ds, dsMeta, stackedRightValue, rightValue, metasets, ilen;\r\n\r\n\t\tif (yScale.options.stacked) {\r\n\t\t\trightValue = +yScale.getRightValue(value);\r\n\t\t\tmetasets = chart._getSortedVisibleDatasetMetas();\r\n\t\t\tilen = metasets.length;\r\n\r\n\t\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\t\tdsMeta = metasets[i];\r\n\t\t\t\tif (dsMeta.index === datasetIndex) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tds = chart.data.datasets[dsMeta.index];\r\n\t\t\t\tif (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id) {\r\n\t\t\t\t\tstackedRightValue = +yScale.getRightValue(ds.data[index]);\r\n\t\t\t\t\tif (stackedRightValue < 0) {\r\n\t\t\t\t\t\tsumNeg += stackedRightValue || 0;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsumPos += stackedRightValue || 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (rightValue < 0) {\r\n\t\t\t\treturn yScale.getPixelForValue(sumNeg + rightValue);\r\n\t\t\t}\r\n\t\t\treturn yScale.getPixelForValue(sumPos + rightValue);\r\n\t\t}\r\n\t\treturn yScale.getPixelForValue(value);\r\n\t},\r\n\r\n\tupdateBezierControlPoints: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar lineModel = meta.dataset._model;\r\n\t\tvar area = chart.chartArea;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar i, ilen, model, controlPoints;\r\n\r\n\t\t// Only consider points that are drawn in case the spanGaps option is used\r\n\t\tif (lineModel.spanGaps) {\r\n\t\t\tpoints = points.filter(function(pt) {\r\n\t\t\t\treturn !pt._model.skip;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction capControlPoint(pt, min, max) {\r\n\t\t\treturn Math.max(Math.min(pt, max), min);\r\n\t\t}\r\n\r\n\t\tif (lineModel.cubicInterpolationMode === 'monotone') {\r\n\t\t\thelpers$1.splineCurveMonotone(points);\r\n\t\t} else {\r\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\t\tmodel = points[i]._model;\r\n\t\t\t\tcontrolPoints = helpers$1.splineCurve(\r\n\t\t\t\t\thelpers$1.previousItem(points, i)._model,\r\n\t\t\t\t\tmodel,\r\n\t\t\t\t\thelpers$1.nextItem(points, i)._model,\r\n\t\t\t\t\tlineModel.tension\r\n\t\t\t\t);\r\n\t\t\t\tmodel.controlPointPreviousX = controlPoints.previous.x;\r\n\t\t\t\tmodel.controlPointPreviousY = controlPoints.previous.y;\r\n\t\t\t\tmodel.controlPointNextX = controlPoints.next.x;\r\n\t\t\t\tmodel.controlPointNextY = controlPoints.next.y;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (chart.options.elements.line.capBezierPoints) {\r\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\t\tmodel = points[i]._model;\r\n\t\t\t\tif (isPointInArea(model, area)) {\r\n\t\t\t\t\tif (i > 0 && isPointInArea(points[i - 1]._model, area)) {\r\n\t\t\t\t\t\tmodel.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);\r\n\t\t\t\t\t\tmodel.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) {\r\n\t\t\t\t\t\tmodel.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);\r\n\t\t\t\t\t\tmodel.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar points = meta.data || [];\r\n\t\tvar area = chart.chartArea;\r\n\t\tvar canvas = chart.canvas;\r\n\t\tvar i = 0;\r\n\t\tvar ilen = points.length;\r\n\t\tvar clip;\r\n\r\n\t\tif (me._showLine) {\r\n\t\t\tclip = meta.dataset._model.clip;\r\n\r\n\t\t\thelpers$1.canvas.clipArea(chart.ctx, {\r\n\t\t\t\tleft: clip.left === false ? 0 : area.left - clip.left,\r\n\t\t\t\tright: clip.right === false ? canvas.width : area.right + clip.right,\r\n\t\t\t\ttop: clip.top === false ? 0 : area.top - clip.top,\r\n\t\t\t\tbottom: clip.bottom === false ? canvas.height : area.bottom + clip.bottom\r\n\t\t\t});\r\n\r\n\t\t\tmeta.dataset.draw();\r\n\r\n\t\t\thelpers$1.canvas.unclipArea(chart.ctx);\r\n\t\t}\r\n\r\n\t\t// Draw the points\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tpoints[i].draw(area);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = valueOrDefault$6(options.hoverRadius, options.radius);\r\n\t},\r\n});\n\nvar resolve$3 = helpers$1.options.resolve;\r\n\r\ncore_defaults._set('polarArea', {\r\n\tscale: {\r\n\t\ttype: 'radialLinear',\r\n\t\tangleLines: {\r\n\t\t\tdisplay: false\r\n\t\t},\r\n\t\tgridLines: {\r\n\t\t\tcircular: true\r\n\t\t},\r\n\t\tpointLabels: {\r\n\t\t\tdisplay: false\r\n\t\t},\r\n\t\tticks: {\r\n\t\t\tbeginAtZero: true\r\n\t\t}\r\n\t},\r\n\r\n\t// Boolean - Whether to animate the rotation of the chart\r\n\tanimation: {\r\n\t\tanimateRotate: true,\r\n\t\tanimateScale: true\r\n\t},\r\n\r\n\tstartAngle: -0.5 * Math.PI,\r\n\tlegendCallback: function(chart) {\r\n\t\tvar list = document.createElement('ul');\r\n\t\tvar data = chart.data;\r\n\t\tvar datasets = data.datasets;\r\n\t\tvar labels = data.labels;\r\n\t\tvar i, ilen, listItem, listItemSpan;\r\n\r\n\t\tlist.setAttribute('class', chart.id + '-legend');\r\n\t\tif (datasets.length) {\r\n\t\t\tfor (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {\r\n\t\t\t\tlistItem = list.appendChild(document.createElement('li'));\r\n\t\t\t\tlistItemSpan = listItem.appendChild(document.createElement('span'));\r\n\t\t\t\tlistItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];\r\n\t\t\t\tif (labels[i]) {\r\n\t\t\t\t\tlistItem.appendChild(document.createTextNode(labels[i]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn list.outerHTML;\r\n\t},\r\n\tlegend: {\r\n\t\tlabels: {\r\n\t\t\tgenerateLabels: function(chart) {\r\n\t\t\t\tvar data = chart.data;\r\n\t\t\t\tif (data.labels.length && data.datasets.length) {\r\n\t\t\t\t\treturn data.labels.map(function(label, i) {\r\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\r\n\t\t\t\t\t\tvar style = meta.controller.getStyle(i);\r\n\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\ttext: label,\r\n\t\t\t\t\t\t\tfillStyle: style.backgroundColor,\r\n\t\t\t\t\t\t\tstrokeStyle: style.borderColor,\r\n\t\t\t\t\t\t\tlineWidth: style.borderWidth,\r\n\t\t\t\t\t\t\thidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,\r\n\r\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tonClick: function(e, legendItem) {\r\n\t\t\tvar index = legendItem.index;\r\n\t\t\tvar chart = this.chart;\r\n\t\t\tvar i, ilen, meta;\r\n\r\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\r\n\t\t\t}\r\n\r\n\t\t\tchart.update();\r\n\t\t}\r\n\t},\r\n\r\n\t// Need to override these to give a nice default\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(item, data) {\r\n\t\t\t\treturn data.labels[item.index] + ': ' + item.yLabel;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_polarArea = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Arc,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'borderAlign',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar start = me.chart.options.startAngle || 0;\r\n\t\tvar starts = me._starts = [];\r\n\t\tvar angles = me._angles = [];\r\n\t\tvar arcs = meta.data;\r\n\t\tvar i, ilen, angle;\r\n\r\n\t\tme._updateRadius();\r\n\r\n\t\tmeta.count = me.countVisibleElements();\r\n\r\n\t\tfor (i = 0, ilen = dataset.data.length; i < ilen; i++) {\r\n\t\t\tstarts[i] = start;\r\n\t\t\tangle = me._computeAngle(i);\r\n\t\t\tangles[i] = angle;\r\n\t\t\tstart += angle;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarcs[i]._options = me._resolveDataElementOptions(arcs[i], i);\r\n\t\t\tme.updateElement(arcs[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_updateRadius: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\r\n\r\n\t\tchart.outerRadius = Math.max(minSize / 2, 0);\r\n\t\tchart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\r\n\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\r\n\r\n\t\tme.outerRadius = chart.outerRadius - (chart.radiusLength * me.index);\r\n\t\tme.innerRadius = me.outerRadius - chart.radiusLength;\r\n\t},\r\n\r\n\tupdateElement: function(arc, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar opts = chart.options;\r\n\t\tvar animationOpts = opts.animation;\r\n\t\tvar scale = chart.scale;\r\n\t\tvar labels = chart.data.labels;\r\n\r\n\t\tvar centerX = scale.xCenter;\r\n\t\tvar centerY = scale.yCenter;\r\n\r\n\t\t// var negHalfPI = -0.5 * Math.PI;\r\n\t\tvar datasetStartAngle = opts.startAngle;\r\n\t\tvar distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\r\n\t\tvar startAngle = me._starts[index];\r\n\t\tvar endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]);\r\n\r\n\t\tvar resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\r\n\t\tvar options = arc._options || {};\r\n\r\n\t\thelpers$1.extend(arc, {\r\n\t\t\t// Utility\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index,\r\n\t\t\t_scale: scale,\r\n\r\n\t\t\t// Desired view properties\r\n\t\t\t_model: {\r\n\t\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\t\tborderColor: options.borderColor,\r\n\t\t\t\tborderWidth: options.borderWidth,\r\n\t\t\t\tborderAlign: options.borderAlign,\r\n\t\t\t\tx: centerX,\r\n\t\t\t\ty: centerY,\r\n\t\t\t\tinnerRadius: 0,\r\n\t\t\t\touterRadius: reset ? resetRadius : distance,\r\n\t\t\t\tstartAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,\r\n\t\t\t\tendAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,\r\n\t\t\t\tlabel: helpers$1.valueAtIndexOrDefault(labels, index, labels[index])\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tarc.pivot();\r\n\t},\r\n\r\n\tcountVisibleElements: function() {\r\n\t\tvar dataset = this.getDataset();\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar count = 0;\r\n\r\n\t\thelpers$1.each(meta.data, function(element, index) {\r\n\t\t\tif (!isNaN(dataset.data[index]) && !element.hidden) {\r\n\t\t\t\tcount++;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn count;\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(arc) {\r\n\t\tvar model = arc._model;\r\n\t\tvar options = arc._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\t\tvar valueOrDefault = helpers$1.valueOrDefault;\r\n\r\n\t\tarc.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_computeAngle: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar count = this.getMeta().count;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar meta = me.getMeta();\r\n\r\n\t\tif (isNaN(dataset.data[index]) || meta.data[index].hidden) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: me.chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: dataset,\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\treturn resolve$3([\r\n\t\t\tme.chart.options.elements.arc.angle,\r\n\t\t\t(2 * Math.PI) / count\r\n\t\t], context, index);\r\n\t}\r\n});\n\ncore_defaults._set('pie', helpers$1.clone(core_defaults.doughnut));\r\ncore_defaults._set('pie', {\r\n\tcutoutPercentage: 0\r\n});\r\n\r\n// Pie charts are Doughnut chart with different defaults\r\nvar controller_pie = controller_doughnut;\n\nvar valueOrDefault$7 = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('radar', {\r\n\tspanGaps: false,\r\n\tscale: {\r\n\t\ttype: 'radialLinear'\r\n\t},\r\n\telements: {\r\n\t\tline: {\r\n\t\t\tfill: 'start',\r\n\t\t\ttension: 0 // no bezier in radar\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_radar = core_datasetController.extend({\r\n\tdatasetElementType: elements.Line,\r\n\r\n\tdataElementType: elements.Point,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderWidth',\r\n\t\t'borderColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'fill'\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: {\r\n\t\tbackgroundColor: 'pointBackgroundColor',\r\n\t\tborderColor: 'pointBorderColor',\r\n\t\tborderWidth: 'pointBorderWidth',\r\n\t\thitRadius: 'pointHitRadius',\r\n\t\thoverBackgroundColor: 'pointHoverBackgroundColor',\r\n\t\thoverBorderColor: 'pointHoverBorderColor',\r\n\t\thoverBorderWidth: 'pointHoverBorderWidth',\r\n\t\thoverRadius: 'pointHoverRadius',\r\n\t\tpointStyle: 'pointStyle',\r\n\t\tradius: 'pointRadius',\r\n\t\trotation: 'pointRotation'\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar line = meta.dataset;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar scale = me.chart.scale;\r\n\t\tvar config = me._config;\r\n\t\tvar i, ilen;\r\n\r\n\t\t// Compatibility: If the properties are defined with only the old name, use those values\r\n\t\tif (config.tension !== undefined && config.lineTension === undefined) {\r\n\t\t\tconfig.lineTension = config.tension;\r\n\t\t}\r\n\r\n\t\t// Utility\r\n\t\tline._scale = scale;\r\n\t\tline._datasetIndex = me.index;\r\n\t\t// Data\r\n\t\tline._children = points;\r\n\t\tline._loop = true;\r\n\t\t// Model\r\n\t\tline._model = me._resolveDatasetElementOptions(line);\r\n\r\n\t\tline.pivot();\r\n\r\n\t\t// Update Points\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(points[i], i, reset);\r\n\t\t}\r\n\r\n\t\t// Update bezier control points\r\n\t\tme.updateBezierControlPoints();\r\n\r\n\t\t// Now pivot the point for animation\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tpoints[i].pivot();\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar scale = me.chart.scale;\r\n\t\tvar pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\t\tvar lineModel = me.getMeta().dataset._model;\r\n\t\tvar x = reset ? scale.xCenter : pointPosition.x;\r\n\t\tvar y = reset ? scale.yCenter : pointPosition.y;\r\n\r\n\t\t// Utility\r\n\t\tpoint._scale = scale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = me.index;\r\n\t\tpoint._index = index;\r\n\r\n\t\t// Desired view properties\r\n\t\tpoint._model = {\r\n\t\t\tx: x, // value not used in dataset scale, but we want a consistent API between scales\r\n\t\t\ty: y,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\t// Appearance\r\n\t\t\tradius: options.radius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\ttension: valueOrDefault$7(custom.tension, lineModel ? lineModel.tension : 0),\r\n\r\n\t\t\t// Tooltip\r\n\t\t\thitRadius: options.hitRadius\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar config = me._config;\r\n\t\tvar options = me.chart.options;\r\n\t\tvar values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);\r\n\r\n\t\tvalues.spanGaps = valueOrDefault$7(config.spanGaps, options.spanGaps);\r\n\t\tvalues.tension = valueOrDefault$7(config.lineTension, options.elements.line.tension);\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tupdateBezierControlPoints: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar area = me.chart.chartArea;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar i, ilen, model, controlPoints;\r\n\r\n\t\t// Only consider points that are drawn in case the spanGaps option is used\r\n\t\tif (meta.dataset._model.spanGaps) {\r\n\t\t\tpoints = points.filter(function(pt) {\r\n\t\t\t\treturn !pt._model.skip;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction capControlPoint(pt, min, max) {\r\n\t\t\treturn Math.max(Math.min(pt, max), min);\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tmodel = points[i]._model;\r\n\t\t\tcontrolPoints = helpers$1.splineCurve(\r\n\t\t\t\thelpers$1.previousItem(points, i, true)._model,\r\n\t\t\t\tmodel,\r\n\t\t\t\thelpers$1.nextItem(points, i, true)._model,\r\n\t\t\t\tmodel.tension\r\n\t\t\t);\r\n\r\n\t\t\t// Prevent the bezier going outside of the bounds of the graph\r\n\t\t\tmodel.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right);\r\n\t\t\tmodel.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom);\r\n\t\t\tmodel.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right);\r\n\t\t\tmodel.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom);\r\n\t\t}\r\n\t},\r\n\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$7(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$7(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$7(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = valueOrDefault$7(options.hoverRadius, options.radius);\r\n\t}\r\n});\n\ncore_defaults._set('scatter', {\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\tid: 'x-axis-1', // need an ID so datasets can reference the scale\r\n\t\t\ttype: 'linear', // scatter should not use a category axis\r\n\t\t\tposition: 'bottom'\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\tid: 'y-axis-1',\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'left'\r\n\t\t}]\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn ''; // doesn't make sense for scatter since data are formatted as a point\r\n\t\t\t},\r\n\t\t\tlabel: function(item) {\r\n\t\t\t\treturn '(' + item.xLabel + ', ' + item.yLabel + ')';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\tscatter: {\r\n\t\t\tshowLine: false\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// Scatter charts use line controllers\r\nvar controller_scatter = controller_line;\n\n// NOTE export a map in which the key represents the controller type, not\r\n// the class, and so must be CamelCase in order to be correctly retrieved\r\n// by the controller in core.controller.js (`controllers[meta.type]`).\r\n\r\nvar controllers = {\r\n\tbar: controller_bar,\r\n\tbubble: controller_bubble,\r\n\tdoughnut: controller_doughnut,\r\n\thorizontalBar: controller_horizontalBar,\r\n\tline: controller_line,\r\n\tpolarArea: controller_polarArea,\r\n\tpie: controller_pie,\r\n\tradar: controller_radar,\r\n\tscatter: controller_scatter\r\n};\n\n/**\r\n * Helper function to get relative position for an event\r\n * @param {Event|IEvent} event - The event to get the position for\r\n * @param {Chart} chart - The chart\r\n * @returns {object} the event position\r\n */\r\nfunction getRelativePosition(e, chart) {\r\n\tif (e.native) {\r\n\t\treturn {\r\n\t\t\tx: e.x,\r\n\t\t\ty: e.y\r\n\t\t};\r\n\t}\r\n\r\n\treturn helpers$1.getRelativePosition(e, chart);\r\n}\r\n\r\n/**\r\n * Helper function to traverse all of the visible elements in the chart\r\n * @param {Chart} chart - the chart\r\n * @param {function} handler - the callback to execute for each visible item\r\n */\r\nfunction parseVisibleItems(chart, handler) {\r\n\tvar metasets = chart._getSortedVisibleDatasetMetas();\r\n\tvar metadata, i, j, ilen, jlen, element;\r\n\r\n\tfor (i = 0, ilen = metasets.length; i < ilen; ++i) {\r\n\t\tmetadata = metasets[i].data;\r\n\t\tfor (j = 0, jlen = metadata.length; j < jlen; ++j) {\r\n\t\t\telement = metadata[j];\r\n\t\t\tif (!element._view.skip) {\r\n\t\t\t\thandler(element);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Helper function to get the items that intersect the event position\r\n * @param {ChartElement[]} items - elements to filter\r\n * @param {object} position - the point to be nearest to\r\n * @return {ChartElement[]} the nearest items\r\n */\r\nfunction getIntersectItems(chart, position) {\r\n\tvar elements = [];\r\n\r\n\tparseVisibleItems(chart, function(element) {\r\n\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\telements.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn elements;\r\n}\r\n\r\n/**\r\n * Helper function to get the items nearest to the event position considering all visible items in teh chart\r\n * @param {Chart} chart - the chart to look at elements from\r\n * @param {object} position - the point to be nearest to\r\n * @param {boolean} intersect - if true, only consider items that intersect the position\r\n * @param {function} distanceMetric - function to provide the distance between points\r\n * @return {ChartElement[]} the nearest items\r\n */\r\nfunction getNearestItems(chart, position, intersect, distanceMetric) {\r\n\tvar minDistance = Number.POSITIVE_INFINITY;\r\n\tvar nearestItems = [];\r\n\r\n\tparseVisibleItems(chart, function(element) {\r\n\t\tif (intersect && !element.inRange(position.x, position.y)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar center = element.getCenterPoint();\r\n\t\tvar distance = distanceMetric(position, center);\r\n\t\tif (distance < minDistance) {\r\n\t\t\tnearestItems = [element];\r\n\t\t\tminDistance = distance;\r\n\t\t} else if (distance === minDistance) {\r\n\t\t\t// Can have multiple items at the same distance in which case we sort by size\r\n\t\t\tnearestItems.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn nearestItems;\r\n}\r\n\r\n/**\r\n * Get a distance metric function for two points based on the\r\n * axis mode setting\r\n * @param {string} axis - the axis mode. x|y|xy\r\n */\r\nfunction getDistanceMetricForAxis(axis) {\r\n\tvar useX = axis.indexOf('x') !== -1;\r\n\tvar useY = axis.indexOf('y') !== -1;\r\n\r\n\treturn function(pt1, pt2) {\r\n\t\tvar deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\r\n\t\tvar deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\r\n\t\treturn Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\r\n\t};\r\n}\r\n\r\nfunction indexMode(chart, e, options) {\r\n\tvar position = getRelativePosition(e, chart);\r\n\t// Default axis for index mode is 'x' to match old behaviour\r\n\toptions.axis = options.axis || 'x';\r\n\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\r\n\tvar elements = [];\r\n\r\n\tif (!items.length) {\r\n\t\treturn [];\r\n\t}\r\n\r\n\tchart._getSortedVisibleDatasetMetas().forEach(function(meta) {\r\n\t\tvar element = meta.data[items[0]._index];\r\n\r\n\t\t// don't count items that are skipped (null data)\r\n\t\tif (element && !element._view.skip) {\r\n\t\t\telements.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn elements;\r\n}\r\n\r\n/**\r\n * @interface IInteractionOptions\r\n */\r\n/**\r\n * If true, only consider items that intersect the point\r\n * @name IInterfaceOptions#boolean\r\n * @type Boolean\r\n */\r\n\r\n/**\r\n * Contains interaction related functions\r\n * @namespace Chart.Interaction\r\n */\r\nvar core_interaction = {\r\n\t// Helper function for different modes\r\n\tmodes: {\r\n\t\tsingle: function(chart, e) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar elements = [];\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\telements.push(element);\r\n\t\t\t\t\treturn elements;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn elements.slice(0, 1);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * @function Chart.Interaction.modes.label\r\n\t\t * @deprecated since version 2.4.0\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\tlabel: indexMode,\r\n\r\n\t\t/**\r\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\r\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\r\n\t\t * @function Chart.Interaction.modes.index\r\n\t\t * @since v2.4.0\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use during interaction\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tindex: indexMode,\r\n\r\n\t\t/**\r\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\r\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\r\n\t\t * @function Chart.Interaction.modes.dataset\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use during interaction\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tdataset: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\toptions.axis = options.axis || 'xy';\r\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\t\t\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\r\n\r\n\t\t\tif (items.length > 0) {\r\n\t\t\t\titems = chart.getDatasetMeta(items[0]._datasetIndex).data;\r\n\t\t\t}\r\n\r\n\t\t\treturn items;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * @function Chart.Interaction.modes.x-axis\r\n\t\t * @deprecated since version 2.4.0. Use index mode and intersect == true\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\t'x-axis': function(chart, e) {\r\n\t\t\treturn indexMode(chart, e, {intersect: false});\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Point mode returns all elements that hit test based on the event position\r\n\t\t * of the event\r\n\t\t * @function Chart.Interaction.modes.intersect\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tpoint: function(chart, e) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\treturn getIntersectItems(chart, position);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * nearest mode returns the element closest to the point\r\n\t\t * @function Chart.Interaction.modes.intersect\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tnearest: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\toptions.axis = options.axis || 'xy';\r\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\t\t\treturn getNearestItems(chart, position, options.intersect, distanceMetric);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * x mode returns the elements that hit-test at the current x coordinate\r\n\t\t * @function Chart.Interaction.modes.x\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tx: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar items = [];\r\n\t\t\tvar intersectsItem = false;\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inXRange(position.x)) {\r\n\t\t\t\t\titems.push(element);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\tintersectsItem = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// If we want to trigger on an intersect and we don't have any items\r\n\t\t\t// that intersect the position, return nothing\r\n\t\t\tif (options.intersect && !intersectsItem) {\r\n\t\t\t\titems = [];\r\n\t\t\t}\r\n\t\t\treturn items;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * y mode returns the elements that hit-test at the current y coordinate\r\n\t\t * @function Chart.Interaction.modes.y\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\ty: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar items = [];\r\n\t\t\tvar intersectsItem = false;\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inYRange(position.y)) {\r\n\t\t\t\t\titems.push(element);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\tintersectsItem = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// If we want to trigger on an intersect and we don't have any items\r\n\t\t\t// that intersect the position, return nothing\r\n\t\t\tif (options.intersect && !intersectsItem) {\r\n\t\t\t\titems = [];\r\n\t\t\t}\r\n\t\t\treturn items;\r\n\t\t}\r\n\t}\r\n};\n\nvar extend = helpers$1.extend;\r\n\r\nfunction filterByPosition(array, position) {\r\n\treturn helpers$1.where(array, function(v) {\r\n\t\treturn v.pos === position;\r\n\t});\r\n}\r\n\r\nfunction sortByWeight(array, reverse) {\r\n\treturn array.sort(function(a, b) {\r\n\t\tvar v0 = reverse ? b : a;\r\n\t\tvar v1 = reverse ? a : b;\r\n\t\treturn v0.weight === v1.weight ?\r\n\t\t\tv0.index - v1.index :\r\n\t\t\tv0.weight - v1.weight;\r\n\t});\r\n}\r\n\r\nfunction wrapBoxes(boxes) {\r\n\tvar layoutBoxes = [];\r\n\tvar i, ilen, box;\r\n\r\n\tfor (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\r\n\t\tbox = boxes[i];\r\n\t\tlayoutBoxes.push({\r\n\t\t\tindex: i,\r\n\t\t\tbox: box,\r\n\t\t\tpos: box.position,\r\n\t\t\thorizontal: box.isHorizontal(),\r\n\t\t\tweight: box.weight\r\n\t\t});\r\n\t}\r\n\treturn layoutBoxes;\r\n}\r\n\r\nfunction setLayoutDims(layouts, params) {\r\n\tvar i, ilen, layout;\r\n\tfor (i = 0, ilen = layouts.length; i < ilen; ++i) {\r\n\t\tlayout = layouts[i];\r\n\t\t// store width used instead of chartArea.w in fitBoxes\r\n\t\tlayout.width = layout.horizontal\r\n\t\t\t? layout.box.fullWidth && params.availableWidth\r\n\t\t\t: params.vBoxMaxWidth;\r\n\t\t// store height used instead of chartArea.h in fitBoxes\r\n\t\tlayout.height = layout.horizontal && params.hBoxMaxHeight;\r\n\t}\r\n}\r\n\r\nfunction buildLayoutBoxes(boxes) {\r\n\tvar layoutBoxes = wrapBoxes(boxes);\r\n\tvar left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\r\n\tvar right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\r\n\tvar top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\r\n\tvar bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\r\n\r\n\treturn {\r\n\t\tleftAndTop: left.concat(top),\r\n\t\trightAndBottom: right.concat(bottom),\r\n\t\tchartArea: filterByPosition(layoutBoxes, 'chartArea'),\r\n\t\tvertical: left.concat(right),\r\n\t\thorizontal: top.concat(bottom)\r\n\t};\r\n}\r\n\r\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\r\n\treturn Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\r\n}\r\n\r\nfunction updateDims(chartArea, params, layout) {\r\n\tvar box = layout.box;\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\tvar newWidth, newHeight;\r\n\r\n\tif (layout.size) {\r\n\t\t// this layout was already counted for, lets first reduce old size\r\n\t\tchartArea[layout.pos] -= layout.size;\r\n\t}\r\n\tlayout.size = layout.horizontal ? box.height : box.width;\r\n\tchartArea[layout.pos] += layout.size;\r\n\r\n\tif (box.getPadding) {\r\n\t\tvar boxPadding = box.getPadding();\r\n\t\tmaxPadding.top = Math.max(maxPadding.top, boxPadding.top);\r\n\t\tmaxPadding.left = Math.max(maxPadding.left, boxPadding.left);\r\n\t\tmaxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\r\n\t\tmaxPadding.right = Math.max(maxPadding.right, boxPadding.right);\r\n\t}\r\n\r\n\tnewWidth = params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right');\r\n\tnewHeight = params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom');\r\n\r\n\tif (newWidth !== chartArea.w || newHeight !== chartArea.h) {\r\n\t\tchartArea.w = newWidth;\r\n\t\tchartArea.h = newHeight;\r\n\r\n\t\t// return true if chart area changed in layout's direction\r\n\t\tvar sizes = layout.horizontal ? [newWidth, chartArea.w] : [newHeight, chartArea.h];\r\n\t\treturn sizes[0] !== sizes[1] && (!isNaN(sizes[0]) || !isNaN(sizes[1]));\r\n\t}\r\n}\r\n\r\nfunction handleMaxPadding(chartArea) {\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\r\n\tfunction updatePos(pos) {\r\n\t\tvar change = Math.max(maxPadding[pos] - chartArea[pos], 0);\r\n\t\tchartArea[pos] += change;\r\n\t\treturn change;\r\n\t}\r\n\tchartArea.y += updatePos('top');\r\n\tchartArea.x += updatePos('left');\r\n\tupdatePos('right');\r\n\tupdatePos('bottom');\r\n}\r\n\r\nfunction getMargins(horizontal, chartArea) {\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\r\n\tfunction marginForPositions(positions) {\r\n\t\tvar margin = {left: 0, top: 0, right: 0, bottom: 0};\r\n\t\tpositions.forEach(function(pos) {\r\n\t\t\tmargin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\r\n\t\t});\r\n\t\treturn margin;\r\n\t}\r\n\r\n\treturn horizontal\r\n\t\t? marginForPositions(['left', 'right'])\r\n\t\t: marginForPositions(['top', 'bottom']);\r\n}\r\n\r\nfunction fitBoxes(boxes, chartArea, params) {\r\n\tvar refitBoxes = [];\r\n\tvar i, ilen, layout, box, refit, changed;\r\n\r\n\tfor (i = 0, ilen = boxes.length; i < ilen; ++i) {\r\n\t\tlayout = boxes[i];\r\n\t\tbox = layout.box;\r\n\r\n\t\tbox.update(\r\n\t\t\tlayout.width || chartArea.w,\r\n\t\t\tlayout.height || chartArea.h,\r\n\t\t\tgetMargins(layout.horizontal, chartArea)\r\n\t\t);\r\n\t\tif (updateDims(chartArea, params, layout)) {\r\n\t\t\tchanged = true;\r\n\t\t\tif (refitBoxes.length) {\r\n\t\t\t\t// Dimensions changed and there were non full width boxes before this\r\n\t\t\t\t// -> we have to refit those\r\n\t\t\t\trefit = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!box.fullWidth) { // fullWidth boxes don't need to be re-fitted in any case\r\n\t\t\trefitBoxes.push(layout);\r\n\t\t}\r\n\t}\r\n\r\n\treturn refit ? fitBoxes(refitBoxes, chartArea, params) || changed : changed;\r\n}\r\n\r\nfunction placeBoxes(boxes, chartArea, params) {\r\n\tvar userPadding = params.padding;\r\n\tvar x = chartArea.x;\r\n\tvar y = chartArea.y;\r\n\tvar i, ilen, layout, box;\r\n\r\n\tfor (i = 0, ilen = boxes.length; i < ilen; ++i) {\r\n\t\tlayout = boxes[i];\r\n\t\tbox = layout.box;\r\n\t\tif (layout.horizontal) {\r\n\t\t\tbox.left = box.fullWidth ? userPadding.left : chartArea.left;\r\n\t\t\tbox.right = box.fullWidth ? params.outerWidth - userPadding.right : chartArea.left + chartArea.w;\r\n\t\t\tbox.top = y;\r\n\t\t\tbox.bottom = y + box.height;\r\n\t\t\tbox.width = box.right - box.left;\r\n\t\t\ty = box.bottom;\r\n\t\t} else {\r\n\t\t\tbox.left = x;\r\n\t\t\tbox.right = x + box.width;\r\n\t\t\tbox.top = chartArea.top;\r\n\t\t\tbox.bottom = chartArea.top + chartArea.h;\r\n\t\t\tbox.height = box.bottom - box.top;\r\n\t\t\tx = box.right;\r\n\t\t}\r\n\t}\r\n\r\n\tchartArea.x = x;\r\n\tchartArea.y = y;\r\n}\r\n\r\ncore_defaults._set('global', {\r\n\tlayout: {\r\n\t\tpadding: {\r\n\t\t\ttop: 0,\r\n\t\t\tright: 0,\r\n\t\t\tbottom: 0,\r\n\t\t\tleft: 0\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/**\r\n * @interface ILayoutItem\r\n * @prop {string} position - The position of the item in the chart layout. Possible values are\r\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\r\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\r\n * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down\r\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\r\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\r\n * @prop {function} getPadding - Returns an object with padding on the edges\r\n * @prop {number} width - Width of item. Must be valid after update()\r\n * @prop {number} height - Height of item. Must be valid after update()\r\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\r\n */\r\n\r\n// The layout service is very self explanatory. It's responsible for the layout within a chart.\r\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\r\n// It is this service's responsibility of carrying out that layout.\r\nvar core_layouts = {\r\n\tdefaults: {},\r\n\r\n\t/**\r\n\t * Register a box to a chart.\r\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\r\n\t * @param {Chart} chart - the chart to use\r\n\t * @param {ILayoutItem} item - the item to add to be layed out\r\n\t */\r\n\taddBox: function(chart, item) {\r\n\t\tif (!chart.boxes) {\r\n\t\t\tchart.boxes = [];\r\n\t\t}\r\n\r\n\t\t// initialize item with default values\r\n\t\titem.fullWidth = item.fullWidth || false;\r\n\t\titem.position = item.position || 'top';\r\n\t\titem.weight = item.weight || 0;\r\n\t\titem._layers = item._layers || function() {\r\n\t\t\treturn [{\r\n\t\t\t\tz: 0,\r\n\t\t\t\tdraw: function() {\r\n\t\t\t\t\titem.draw.apply(item, arguments);\r\n\t\t\t\t}\r\n\t\t\t}];\r\n\t\t};\r\n\r\n\t\tchart.boxes.push(item);\r\n\t},\r\n\r\n\t/**\r\n\t * Remove a layoutItem from a chart\r\n\t * @param {Chart} chart - the chart to remove the box from\r\n\t * @param {ILayoutItem} layoutItem - the item to remove from the layout\r\n\t */\r\n\tremoveBox: function(chart, layoutItem) {\r\n\t\tvar index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\r\n\t\tif (index !== -1) {\r\n\t\t\tchart.boxes.splice(index, 1);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Sets (or updates) options on the given `item`.\r\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\r\n\t * @param {ILayoutItem} item - the item to configure with the given options\r\n\t * @param {object} options - the new item options.\r\n\t */\r\n\tconfigure: function(chart, item, options) {\r\n\t\tvar props = ['fullWidth', 'position', 'weight'];\r\n\t\tvar ilen = props.length;\r\n\t\tvar i = 0;\r\n\t\tvar prop;\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tprop = props[i];\r\n\t\t\tif (options.hasOwnProperty(prop)) {\r\n\t\t\t\titem[prop] = options[prop];\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Fits boxes of the given chart into the given size by having each box measure itself\r\n\t * then running a fitting algorithm\r\n\t * @param {Chart} chart - the chart\r\n\t * @param {number} width - the width to fit into\r\n\t * @param {number} height - the height to fit into\r\n\t */\r\n\tupdate: function(chart, width, height) {\r\n\t\tif (!chart) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar layoutOptions = chart.options.layout || {};\r\n\t\tvar padding = helpers$1.options.toPadding(layoutOptions.padding);\r\n\r\n\t\tvar availableWidth = width - padding.width;\r\n\t\tvar availableHeight = height - padding.height;\r\n\t\tvar boxes = buildLayoutBoxes(chart.boxes);\r\n\t\tvar verticalBoxes = boxes.vertical;\r\n\t\tvar horizontalBoxes = boxes.horizontal;\r\n\r\n\t\t// Essentially we now have any number of boxes on each of the 4 sides.\r\n\t\t// Our canvas looks like the following.\r\n\t\t// The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\r\n\t\t// B1 is the bottom axis\r\n\t\t// There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\r\n\t\t// These locations are single-box locations only, when trying to register a chartArea location that is already taken,\r\n\t\t// an error will be thrown.\r\n\t\t//\r\n\t\t// |----------------------------------------------------|\r\n\t\t// | T1 (Full Width) |\r\n\t\t// |----------------------------------------------------|\r\n\t\t// | | | T2 | |\r\n\t\t// | |----|-------------------------------------|----|\r\n\t\t// | | | C1 | | C2 | |\r\n\t\t// | | |----| |----| |\r\n\t\t// | | | | |\r\n\t\t// | L1 | L2 | ChartArea (C0) | R1 |\r\n\t\t// | | | | |\r\n\t\t// | | |----| |----| |\r\n\t\t// | | | C3 | | C4 | |\r\n\t\t// | |----|-------------------------------------|----|\r\n\t\t// | | | B1 | |\r\n\t\t// |----------------------------------------------------|\r\n\t\t// | B2 (Full Width) |\r\n\t\t// |----------------------------------------------------|\r\n\t\t//\r\n\r\n\t\tvar params = Object.freeze({\r\n\t\t\touterWidth: width,\r\n\t\t\touterHeight: height,\r\n\t\t\tpadding: padding,\r\n\t\t\tavailableWidth: availableWidth,\r\n\t\t\tvBoxMaxWidth: availableWidth / 2 / verticalBoxes.length,\r\n\t\t\thBoxMaxHeight: availableHeight / 2\r\n\t\t});\r\n\t\tvar chartArea = extend({\r\n\t\t\tmaxPadding: extend({}, padding),\r\n\t\t\tw: availableWidth,\r\n\t\t\th: availableHeight,\r\n\t\t\tx: padding.left,\r\n\t\t\ty: padding.top\r\n\t\t}, padding);\r\n\r\n\t\tsetLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\r\n\r\n\t\t// First fit vertical boxes\r\n\t\tfitBoxes(verticalBoxes, chartArea, params);\r\n\r\n\t\t// Then fit horizontal boxes\r\n\t\tif (fitBoxes(horizontalBoxes, chartArea, params)) {\r\n\t\t\t// if the area changed, re-fit vertical boxes\r\n\t\t\tfitBoxes(verticalBoxes, chartArea, params);\r\n\t\t}\r\n\r\n\t\thandleMaxPadding(chartArea);\r\n\r\n\t\t// Finally place the boxes to correct coordinates\r\n\t\tplaceBoxes(boxes.leftAndTop, chartArea, params);\r\n\r\n\t\t// Move to opposite side of chart\r\n\t\tchartArea.x += chartArea.w;\r\n\t\tchartArea.y += chartArea.h;\r\n\r\n\t\tplaceBoxes(boxes.rightAndBottom, chartArea, params);\r\n\r\n\t\tchart.chartArea = {\r\n\t\t\tleft: chartArea.left,\r\n\t\t\ttop: chartArea.top,\r\n\t\t\tright: chartArea.left + chartArea.w,\r\n\t\t\tbottom: chartArea.top + chartArea.h\r\n\t\t};\r\n\r\n\t\t// Finally update boxes in chartArea (radial scale for example)\r\n\t\thelpers$1.each(boxes.chartArea, function(layout) {\r\n\t\t\tvar box = layout.box;\r\n\t\t\textend(box, chart.chartArea);\r\n\t\t\tbox.update(chartArea.w, chartArea.h);\r\n\t\t});\r\n\t}\r\n};\n\n/**\r\n * Platform fallback implementation (minimal).\r\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\r\n */\r\n\r\nvar platform_basic = {\r\n\tacquireContext: function(item) {\r\n\t\tif (item && item.canvas) {\r\n\t\t\t// Support for any object associated to a canvas (including a context2d)\r\n\t\t\titem = item.canvas;\r\n\t\t}\r\n\r\n\t\treturn item && item.getContext('2d') || null;\r\n\t}\r\n};\n\nvar platform_dom = \"/*\\r\\n * DOM element rendering detection\\r\\n * https://davidwalsh.name/detect-node-insertion\\r\\n */\\r\\n@keyframes chartjs-render-animation {\\r\\n\\tfrom { opacity: 0.99; }\\r\\n\\tto { opacity: 1; }\\r\\n}\\r\\n\\r\\n.chartjs-render-monitor {\\r\\n\\tanimation: chartjs-render-animation 0.001s;\\r\\n}\\r\\n\\r\\n/*\\r\\n * DOM element resizing detection\\r\\n * https://github.com/marcj/css-element-queries\\r\\n */\\r\\n.chartjs-size-monitor,\\r\\n.chartjs-size-monitor-expand,\\r\\n.chartjs-size-monitor-shrink {\\r\\n\\tposition: absolute;\\r\\n\\tdirection: ltr;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n\\tright: 0;\\r\\n\\tbottom: 0;\\r\\n\\toverflow: hidden;\\r\\n\\tpointer-events: none;\\r\\n\\tvisibility: hidden;\\r\\n\\tz-index: -1;\\r\\n}\\r\\n\\r\\n.chartjs-size-monitor-expand > div {\\r\\n\\tposition: absolute;\\r\\n\\twidth: 1000000px;\\r\\n\\theight: 1000000px;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n}\\r\\n\\r\\n.chartjs-size-monitor-shrink > div {\\r\\n\\tposition: absolute;\\r\\n\\twidth: 200%;\\r\\n\\theight: 200%;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n}\\r\\n\";\n\nvar platform_dom$1 = /*#__PURE__*/Object.freeze({\n__proto__: null,\n'default': platform_dom\n});\n\nvar stylesheet = getCjsExportFromNamespace(platform_dom$1);\n\nvar EXPANDO_KEY = '$chartjs';\r\nvar CSS_PREFIX = 'chartjs-';\r\nvar CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor';\r\nvar CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';\r\nvar CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';\r\nvar ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];\r\n\r\n/**\r\n * DOM event types -> Chart.js event types.\r\n * Note: only events with different types are mapped.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\r\n */\r\nvar EVENT_TYPES = {\r\n\ttouchstart: 'mousedown',\r\n\ttouchmove: 'mousemove',\r\n\ttouchend: 'mouseup',\r\n\tpointerenter: 'mouseenter',\r\n\tpointerdown: 'mousedown',\r\n\tpointermove: 'mousemove',\r\n\tpointerup: 'mouseup',\r\n\tpointerleave: 'mouseout',\r\n\tpointerout: 'mouseout'\r\n};\r\n\r\n/**\r\n * The \"used\" size is the final value of a dimension property after all calculations have\r\n * been performed. This method uses the computed style of `element` but returns undefined\r\n * if the computed style is not expressed in pixels. That can happen in some cases where\r\n * `element` has a size relative to its parent and this last one is not yet displayed,\r\n * for example because of `display: none` on a parent node.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\r\n * @returns {number} Size in pixels or undefined if unknown.\r\n */\r\nfunction readUsedSize(element, property) {\r\n\tvar value = helpers$1.getStyle(element, property);\r\n\tvar matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\r\n\treturn matches ? Number(matches[1]) : undefined;\r\n}\r\n\r\n/**\r\n * Initializes the canvas style and render size without modifying the canvas display size,\r\n * since responsiveness is handled by the controller.resize() method. The config is used\r\n * to determine the aspect ratio to apply in case no explicit height has been specified.\r\n */\r\nfunction initCanvas(canvas, config) {\r\n\tvar style = canvas.style;\r\n\r\n\t// NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\r\n\t// returns null or '' if no explicit value has been set to the canvas attribute.\r\n\tvar renderHeight = canvas.getAttribute('height');\r\n\tvar renderWidth = canvas.getAttribute('width');\r\n\r\n\t// Chart.js modifies some canvas values that we want to restore on destroy\r\n\tcanvas[EXPANDO_KEY] = {\r\n\t\tinitial: {\r\n\t\t\theight: renderHeight,\r\n\t\t\twidth: renderWidth,\r\n\t\t\tstyle: {\r\n\t\t\t\tdisplay: style.display,\r\n\t\t\t\theight: style.height,\r\n\t\t\t\twidth: style.width\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Force canvas to display as block to avoid extra space caused by inline\r\n\t// elements, which would interfere with the responsive resize process.\r\n\t// https://github.com/chartjs/Chart.js/issues/2538\r\n\tstyle.display = style.display || 'block';\r\n\r\n\tif (renderWidth === null || renderWidth === '') {\r\n\t\tvar displayWidth = readUsedSize(canvas, 'width');\r\n\t\tif (displayWidth !== undefined) {\r\n\t\t\tcanvas.width = displayWidth;\r\n\t\t}\r\n\t}\r\n\r\n\tif (renderHeight === null || renderHeight === '') {\r\n\t\tif (canvas.style.height === '') {\r\n\t\t\t// If no explicit render height and style height, let's apply the aspect ratio,\r\n\t\t\t// which one can be specified by the user but also by charts as default option\r\n\t\t\t// (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\r\n\t\t\tcanvas.height = canvas.width / (config.options.aspectRatio || 2);\r\n\t\t} else {\r\n\t\t\tvar displayHeight = readUsedSize(canvas, 'height');\r\n\t\t\tif (displayWidth !== undefined) {\r\n\t\t\t\tcanvas.height = displayHeight;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn canvas;\r\n}\r\n\r\n/**\r\n * Detects support for options object argument in addEventListener.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\r\n * @private\r\n */\r\nvar supportsEventListenerOptions = (function() {\r\n\tvar supports = false;\r\n\ttry {\r\n\t\tvar options = Object.defineProperty({}, 'passive', {\r\n\t\t\t// eslint-disable-next-line getter-return\r\n\t\t\tget: function() {\r\n\t\t\t\tsupports = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\twindow.addEventListener('e', null, options);\r\n\t} catch (e) {\r\n\t\t// continue regardless of error\r\n\t}\r\n\treturn supports;\r\n}());\r\n\r\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\r\n// https://github.com/chartjs/Chart.js/issues/4287\r\nvar eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\r\n\r\nfunction addListener(node, type, listener) {\r\n\tnode.addEventListener(type, listener, eventListenerOptions);\r\n}\r\n\r\nfunction removeListener(node, type, listener) {\r\n\tnode.removeEventListener(type, listener, eventListenerOptions);\r\n}\r\n\r\nfunction createEvent(type, chart, x, y, nativeEvent) {\r\n\treturn {\r\n\t\ttype: type,\r\n\t\tchart: chart,\r\n\t\tnative: nativeEvent || null,\r\n\t\tx: x !== undefined ? x : null,\r\n\t\ty: y !== undefined ? y : null,\r\n\t};\r\n}\r\n\r\nfunction fromNativeEvent(event, chart) {\r\n\tvar type = EVENT_TYPES[event.type] || event.type;\r\n\tvar pos = helpers$1.getRelativePosition(event, chart);\r\n\treturn createEvent(type, chart, pos.x, pos.y, event);\r\n}\r\n\r\nfunction throttled(fn, thisArg) {\r\n\tvar ticking = false;\r\n\tvar args = [];\r\n\r\n\treturn function() {\r\n\t\targs = Array.prototype.slice.call(arguments);\r\n\t\tthisArg = thisArg || this;\r\n\r\n\t\tif (!ticking) {\r\n\t\t\tticking = true;\r\n\t\t\thelpers$1.requestAnimFrame.call(window, function() {\r\n\t\t\t\tticking = false;\r\n\t\t\t\tfn.apply(thisArg, args);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction createDiv(cls) {\r\n\tvar el = document.createElement('div');\r\n\tel.className = cls || '';\r\n\treturn el;\r\n}\r\n\r\n// Implementation based on https://github.com/marcj/css-element-queries\r\nfunction createResizer(handler) {\r\n\tvar maxSize = 1000000;\r\n\r\n\t// NOTE(SB) Don't use innerHTML because it could be considered unsafe.\r\n\t// https://github.com/chartjs/Chart.js/issues/5902\r\n\tvar resizer = createDiv(CSS_SIZE_MONITOR);\r\n\tvar expand = createDiv(CSS_SIZE_MONITOR + '-expand');\r\n\tvar shrink = createDiv(CSS_SIZE_MONITOR + '-shrink');\r\n\r\n\texpand.appendChild(createDiv());\r\n\tshrink.appendChild(createDiv());\r\n\r\n\tresizer.appendChild(expand);\r\n\tresizer.appendChild(shrink);\r\n\tresizer._reset = function() {\r\n\t\texpand.scrollLeft = maxSize;\r\n\t\texpand.scrollTop = maxSize;\r\n\t\tshrink.scrollLeft = maxSize;\r\n\t\tshrink.scrollTop = maxSize;\r\n\t};\r\n\r\n\tvar onScroll = function() {\r\n\t\tresizer._reset();\r\n\t\thandler();\r\n\t};\r\n\r\n\taddListener(expand, 'scroll', onScroll.bind(expand, 'expand'));\r\n\taddListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));\r\n\r\n\treturn resizer;\r\n}\r\n\r\n// https://davidwalsh.name/detect-node-insertion\r\nfunction watchForRender(node, handler) {\r\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\r\n\tvar proxy = expando.renderProxy = function(e) {\r\n\t\tif (e.animationName === CSS_RENDER_ANIMATION) {\r\n\t\t\thandler();\r\n\t\t}\r\n\t};\r\n\r\n\thelpers$1.each(ANIMATION_START_EVENTS, function(type) {\r\n\t\taddListener(node, type, proxy);\r\n\t});\r\n\r\n\t// #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class\r\n\t// is removed then added back immediately (same animation frame?). Accessing the\r\n\t// `offsetParent` property will force a reflow and re-evaluate the CSS animation.\r\n\t// https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics\r\n\t// https://github.com/chartjs/Chart.js/issues/4737\r\n\texpando.reflow = !!node.offsetParent;\r\n\r\n\tnode.classList.add(CSS_RENDER_MONITOR);\r\n}\r\n\r\nfunction unwatchForRender(node) {\r\n\tvar expando = node[EXPANDO_KEY] || {};\r\n\tvar proxy = expando.renderProxy;\r\n\r\n\tif (proxy) {\r\n\t\thelpers$1.each(ANIMATION_START_EVENTS, function(type) {\r\n\t\t\tremoveListener(node, type, proxy);\r\n\t\t});\r\n\r\n\t\tdelete expando.renderProxy;\r\n\t}\r\n\r\n\tnode.classList.remove(CSS_RENDER_MONITOR);\r\n}\r\n\r\nfunction addResizeListener(node, listener, chart) {\r\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\r\n\r\n\t// Let's keep track of this added resizer and thus avoid DOM query when removing it.\r\n\tvar resizer = expando.resizer = createResizer(throttled(function() {\r\n\t\tif (expando.resizer) {\r\n\t\t\tvar container = chart.options.maintainAspectRatio && node.parentNode;\r\n\t\t\tvar w = container ? container.clientWidth : 0;\r\n\t\t\tlistener(createEvent('resize', chart));\r\n\t\t\tif (container && container.clientWidth < w && chart.canvas) {\r\n\t\t\t\t// If the container size shrank during chart resize, let's assume\r\n\t\t\t\t// scrollbar appeared. So we resize again with the scrollbar visible -\r\n\t\t\t\t// effectively making chart smaller and the scrollbar hidden again.\r\n\t\t\t\t// Because we are inside `throttled`, and currently `ticking`, scroll\r\n\t\t\t\t// events are ignored during this whole 2 resize process.\r\n\t\t\t\t// If we assumed wrong and something else happened, we are resizing\r\n\t\t\t\t// twice in a frame (potential performance issue)\r\n\t\t\t\tlistener(createEvent('resize', chart));\r\n\t\t\t}\r\n\t\t}\r\n\t}));\r\n\r\n\t// The resizer needs to be attached to the node parent, so we first need to be\r\n\t// sure that `node` is attached to the DOM before injecting the resizer element.\r\n\twatchForRender(node, function() {\r\n\t\tif (expando.resizer) {\r\n\t\t\tvar container = node.parentNode;\r\n\t\t\tif (container && container !== resizer.parentNode) {\r\n\t\t\t\tcontainer.insertBefore(resizer, container.firstChild);\r\n\t\t\t}\r\n\r\n\t\t\t// The container size might have changed, let's reset the resizer state.\r\n\t\t\tresizer._reset();\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction removeResizeListener(node) {\r\n\tvar expando = node[EXPANDO_KEY] || {};\r\n\tvar resizer = expando.resizer;\r\n\r\n\tdelete expando.resizer;\r\n\tunwatchForRender(node);\r\n\r\n\tif (resizer && resizer.parentNode) {\r\n\t\tresizer.parentNode.removeChild(resizer);\r\n\t}\r\n}\r\n\r\n/**\r\n * Injects CSS styles inline if the styles are not already present.\r\n * @param {HTMLDocument|ShadowRoot} rootNode - the node to contain the