diff --git a/frontend/src/components/cur-dir-path/dir-path.js b/frontend/src/components/cur-dir-path/dir-path.js
index 36ce2b9178..9db4254590 100644
--- a/frontend/src/components/cur-dir-path/dir-path.js
+++ b/frontend/src/components/cur-dir-path/dir-path.js
@@ -128,7 +128,9 @@ class DirPath extends React.Component {
return (
-
+
+
+
{this.props.pathPrefix && this.props.pathPrefix.map((item, index) => {
return (
diff --git a/frontend/src/components/cur-dir-path/dir-tool.js b/frontend/src/components/cur-dir-path/dir-tool.js
index 95ba12bb96..98ceab7d14 100644
--- a/frontend/src/components/cur-dir-path/dir-tool.js
+++ b/frontend/src/components/cur-dir-path/dir-tool.js
@@ -24,6 +24,7 @@ class DirTool extends React.Component {
super(props);
this.state = {
isRepoTagDialogOpen: false,
+ isSwitchModeDropdownMenuOpen: false,
isDropdownMenuOpen: false
};
}
@@ -34,6 +35,12 @@ class DirTool extends React.Component {
});
};
+ toggleSwitchModeDropdownMenu = () => {
+ this.setState({
+ isSwitchModeDropdownMenuOpen: !this.state.isSwitchModeDropdownMenuOpen
+ });
+ };
+
hidePopover = (e) => {
if (e) {
let dom = e.target;
@@ -115,27 +122,66 @@ class DirTool extends React.Component {
};
render() {
- let baseClass = 'btn btn-secondary btn-icon sf-view-mode-btn ';
const menuItems = this.getMenuList();
- const { isDropdownMenuOpen } = this.state;
+ const { isDropdownMenuOpen, isSwitchModeDropdownMenuOpen } = this.state;
const { repoID } = this.props;
return (
-
-
-
-
+
+
+
+
+
+ }
+ data-toggle="dropdown"
+ title={gettext('Change view mode')}
+ aria-label={gettext('Change view mode')}
+ aria-expanded={isSwitchModeDropdownMenuOpen}
+ >
+
+
+
+
+
+
+ {gettext('List view')}
+
+
+ {this.props.currentMode === 'list' && }
+
+
+
+
+
+
+
+ {gettext('Grid view')}
+
+
+ {this.props.currentMode === 'grid' && }
+
+
+
+
+
{menuItems.length > 0 &&
diff --git a/frontend/src/css/layout.css b/frontend/src/css/layout.css
index db80f2c21f..2a90e73073 100644
--- a/frontend/src/css/layout.css
+++ b/frontend/src/css/layout.css
@@ -102,6 +102,32 @@
border-bottom: 1px solid #eee;
}
+.cur-view-path .cur-view-path-btn {
+ cursor: pointer;
+ height: 24px;
+ min-width: 24px;
+ width: fit-content;
+ display: inline-flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.cur-view-path .cur-view-path-btn.sf3-font,
+.cur-view-path .cur-view-path-btn .sf3-font {
+ font-size: 16px;
+ color: #666;
+}
+
+.cur-view-path .cur-view-path-btn:hover {
+ background-color: #EFEFEF;
+ border-radius: 3px;
+}
+
+.cur-view-path .cur-view-path-btn .sf3-font-down {
+ transform: scale(0.8);
+ margin-left: 2px;
+}
+
.cur-view-content {
padding: 0rem 1rem;
flex: 1;
diff --git a/frontend/src/css/lib-content-view.css b/frontend/src/css/lib-content-view.css
index e7bc8965bf..dedb1c65fb 100644
--- a/frontend/src/css/lib-content-view.css
+++ b/frontend/src/css/lib-content-view.css
@@ -252,7 +252,7 @@
}
.dir-view-path .path-item-dropdown-toggle {
- color: #999;
+ color: #666;
font-size: .6rem;
}
diff --git a/frontend/src/css/toolbar.css b/frontend/src/css/toolbar.css
index 1137760b77..304d7bcf05 100644
--- a/frontend/src/css/toolbar.css
+++ b/frontend/src/css/toolbar.css
@@ -58,42 +58,23 @@
/* end file-operation toolbar */
-/* begin view-mode toolbar */
-.view-modes {
- padding: 2px;
- background-color: #e5e6e7;
- border-radius: 3px;
- height: 32px;
-}
-.sf-view-mode-btn {
- width: 44px;
- height: 28px;
- padding: 0;
- background-color: transparent;
- color: #444;
- font-size: 14px;
- line-height: 2;
- border: 0;
- border-radius: 2px;
- font-weight: normal;
-}
-
-.sf-view-mode-btn:hover {
- background-color: #d2d3d3;
-}
-
-.sf-view-mode-btn.current-mode {
- background-color: #fff;
-}
-/* end view-mode toolbar */
-
#cur-folder-more-op-toggle {
- color: #444;
- font-size: 14px;
- height: 32px;
- padding: 0;
- line-height: 30px;
margin-left: 10px;
+ margin-right: -4px;
+}
+
+#cur-view-change-mode-dropdown .dropdown-item {
+ padding: 4px 16px;
+}
+
+#cur-view-change-mode-dropdown .dropdown-item .fas,
+#cur-view-change-mode-dropdown .dropdown-item .sf3-font {
+ color: #666;
+}
+
+#cur-view-change-mode-dropdown .dropdown-item:hover .fas,
+#cur-view-change-mode-dropdown .dropdown-item:hover .sf3-font {
+ color: #fff;
}
/* begin common-toolbar */
diff --git a/frontend/src/pages/wiki2/index.js b/frontend/src/pages/wiki2/index.js
index 4568ac8429..05d5cd0854 100644
--- a/frontend/src/pages/wiki2/index.js
+++ b/frontend/src/pages/wiki2/index.js
@@ -171,13 +171,13 @@ class Wiki extends Component {
callback && callback();
});
};
-
+
onUpdatePage = (pageId, newPage) => {
if (newPage.name === '') {
toaster.danger(gettext('Page name cannot be empty'));
return;
}
- const { config } = this.state
+ const { config } = this.state;
let pages = config.pages;
let newPages = pages.map(page => {
if (page.id === pageId) {
@@ -188,8 +188,8 @@ class Wiki extends Component {
const newConfig = { ...config, pages: newPages };
this.saveWikiConfig(newConfig);
};
- render() {
+ render() {
return (
{
- const newName = e.target.value.trim()
- const { currentPageConfig } = this.state
- const { id, name, icon } = currentPageConfig
+ const newName = e.target.value.trim();
+ const { currentPageConfig } = this.state;
+ const { id, name, icon } = currentPageConfig;
if (newName === name) return;
- const pageConfig = { name: newName, icon }
- this.props.onUpdatePage(id, pageConfig)
+ const pageConfig = { name: newName, icon };
+ this.props.onUpdatePage(id, pageConfig);
// Reset title if name is empty
if (!newName) e.target.value = name;
- }
+ };
render() {
const { permission, pathExist, isDataLoading, isViewFile, config } = this.props;
- const { currentPageConfig } = this.state
+ const { currentPageConfig } = this.state;
const isViewingFile = pathExist && !isDataLoading && isViewFile;
const isReadOnly = !(permission === 'rw');
diff --git a/frontend/src/pages/wiki2/utils/index.js b/frontend/src/pages/wiki2/utils/index.js
index 1d7c975369..978e72b4d6 100644
--- a/frontend/src/pages/wiki2/utils/index.js
+++ b/frontend/src/pages/wiki2/utils/index.js
@@ -44,7 +44,7 @@ const getIconURL = (repoId, fileName) => {
};
const getCurrentPageConfig = (pages,pageId) => {
- return pages.filter(page => page.id === pageId)[0]
-}
+ return pages.filter(page => page.id === pageId)[0];
+};
export { generatorBase64Code, generateUniqueId, isObjectNotEmpty, getIconURL, getCurrentPageConfig };
diff --git a/media/css/sf_font3/iconfont.css b/media/css/sf_font3/iconfont.css
index 03043c8000..1d3bbbda58 100644
--- a/media/css/sf_font3/iconfont.css
+++ b/media/css/sf_font3/iconfont.css
@@ -1,11 +1,11 @@
@font-face {
font-family: "sf3-font"; /* Project id 1230969 */
- src: url('iconfont.eot?t=1716950761276'); /* IE9 */
- src: url('iconfont.eot?t=1716950761276#iefix') format('embedded-opentype'), /* IE6-IE8 */
- url('iconfont.woff2?t=1716950761276') format('woff2'),
- url('iconfont.woff?t=1716950761276') format('woff'),
- url('iconfont.ttf?t=1716950761276') format('truetype'),
- url('iconfont.svg?t=1716950761276#sf3-font') format('svg');
+ src: url('iconfont.eot?t=1717754578668'); /* IE9 */
+ src: url('iconfont.eot?t=1717754578668#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url('iconfont.woff2?t=1717754578668') format('woff2'),
+ url('iconfont.woff?t=1717754578668') format('woff'),
+ url('iconfont.ttf?t=1717754578668') format('truetype'),
+ url('iconfont.svg?t=1717754578668#sf3-font') format('svg');
}
.sf3-font {
@@ -16,6 +16,22 @@
-moz-osx-font-smoothing: grayscale;
}
+.sf3-font-monitor:before {
+ content: "\e827";
+}
+
+.sf3-font-star-empty:before {
+ content: "\e825";
+}
+
+.sf3-font-star:before {
+ content: "\e826";
+}
+
+.sf3-font-down:before {
+ content: "\e824";
+}
+
.sf3-font-new-page:before {
content: "\e823";
}
diff --git a/media/css/sf_font3/iconfont.eot b/media/css/sf_font3/iconfont.eot
index cc08c124d2..85eb6293f9 100644
Binary files a/media/css/sf_font3/iconfont.eot and b/media/css/sf_font3/iconfont.eot differ
diff --git a/media/css/sf_font3/iconfont.js b/media/css/sf_font3/iconfont.js
index f355507d33..9376c047ad 100644
--- a/media/css/sf_font3/iconfont.js
+++ b/media/css/sf_font3/iconfont.js
@@ -1 +1 @@
-window._iconfont_svg_string_1230969='',function(h){var c=(c=document.getElementsByTagName("script"))[c.length-1],l=c.getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var s,o,t,v,i,m=function(c,l){l.parentNode.insertBefore(c,l)};if(l&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}s=function(){var c,l=document.createElement("div");l.innerHTML=h._iconfont_svg_string_1230969,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(c=document.body).firstChild?m(l,c.firstChild):c.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(s,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),s()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(t=s,v=h.document,i=!1,f(),v.onreadystatechange=function(){"complete"==v.readyState&&(v.onreadystatechange=null,z())})}function z(){i||(i=!0,t())}function f(){try{v.documentElement.doScroll("left")}catch(c){return void setTimeout(f,50)}z()}}(window);
\ No newline at end of file
+window._iconfont_svg_string_1230969='',function(h){var c=(c=document.getElementsByTagName("script"))[c.length-1],l=c.getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var s,o,t,v,i,m=function(c,l){l.parentNode.insertBefore(c,l)};if(l&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}s=function(){var c,l=document.createElement("div");l.innerHTML=h._iconfont_svg_string_1230969,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(c=document.body).firstChild?m(l,c.firstChild):c.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(s,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),s()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(t=s,v=h.document,i=!1,f(),v.onreadystatechange=function(){"complete"==v.readyState&&(v.onreadystatechange=null,z())})}function z(){i||(i=!0,t())}function f(){try{v.documentElement.doScroll("left")}catch(c){return void setTimeout(f,50)}z()}}(window);
\ No newline at end of file
diff --git a/media/css/sf_font3/iconfont.svg b/media/css/sf_font3/iconfont.svg
index d047c168dc..4ef9c7bfc5 100644
--- a/media/css/sf_font3/iconfont.svg
+++ b/media/css/sf_font3/iconfont.svg
@@ -14,6 +14,14 @@
/>
+
+
+
+
+
+
+
+
@@ -44,7 +52,7 @@
-
+
diff --git a/media/css/sf_font3/iconfont.ttf b/media/css/sf_font3/iconfont.ttf
index ba46c15d02..812341a495 100644
Binary files a/media/css/sf_font3/iconfont.ttf and b/media/css/sf_font3/iconfont.ttf differ
diff --git a/media/css/sf_font3/iconfont.woff b/media/css/sf_font3/iconfont.woff
index cf8c7a4429..1e48b96037 100644
Binary files a/media/css/sf_font3/iconfont.woff and b/media/css/sf_font3/iconfont.woff differ
diff --git a/media/css/sf_font3/iconfont.woff2 b/media/css/sf_font3/iconfont.woff2
index 50af2462be..6a11774715 100644
Binary files a/media/css/sf_font3/iconfont.woff2 and b/media/css/sf_font3/iconfont.woff2 differ