1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-05-13 18:35:20 +00:00

12.0 remove font awesome ()

* remove font-awesome

* remove font awesome 3.2.1
This commit is contained in:
Michael An 2024-06-28 08:39:44 +08:00 committed by GitHub
parent f8b98517ee
commit 6233649970
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
140 changed files with 448 additions and 5672 deletions
frontend/src
components
css
file-history-old.jsfile-history.js
pages

View File

@ -6,7 +6,7 @@ function CommonAddTool(props) {
const { callBack, footerName, className, addIconClassName } = props;
return (
<div className={`add-item-btn ${className ? className : ''}`} onClick={(e) => {callBack(e);}}>
<span className={`fas fa-plus mr-2 ${addIconClassName || ''}`}></span>
<span className={`sf3-font sf3-font-enlarge mr-2 ${addIconClassName || ''}`}></span>
<span className='add-new-option' title={footerName}>{footerName}</span>
</div>
);

View File

@ -12,7 +12,7 @@ class GoBack extends Component {
render() {
return (
<div className="go-back" onClick={this.onBackClick}>
<span className="fas fa-chevron-left"></span>
<span className="sf3-font sf3-font-down rotate-90 d-inline-block"></span>
</div>
);
}

View File

@ -70,7 +70,7 @@ class CreateTagDialog extends React.Component {
return (
<Fragment>
<ModalHeader toggle={this.props.onClose}>
<span className="tag-dialog-back fas fa-sm fa-arrow-left" onClick={this.props.toggleCancel} aria-label={gettext('Back')}></span>
<span className="tag-dialog-back sf3-font sf3-font-arrow rotate-180 d-inline-block" onClick={this.props.toggleCancel} aria-label={gettext('Back')}></span>
{gettext('New Tag')}
</ModalHeader>
<ModalBody>

View File

@ -119,7 +119,7 @@ class CustomPermissionEditor extends React.Component {
<div className="permission-header">
<div className="d-flex align-items-center">
<OpIcon
className="fa fa-arrow-left back-icon"
className="sf3-font sf3-font-arrow rotate-180 d-inline-block back-icon"
op={this.props.onChangeMode}
title={gettext('Back')}
/>
@ -167,7 +167,7 @@ class CustomPermissionEditor extends React.Component {
<Label check>
<Input type="checkbox" onChange={this.onChangePermission('modify')} checked={permission.modify}/>
<span>{gettext('Modify')}</span>
<span id="modify-tip" className="fa fa-question-circle ml-2" style={{color: '#999'}}></span>
<span id="modify-tip" className="sf3-font sf3-font-tips ml-2" style={{color: '#999'}}></span>
<Tooltip
toggle={this.toggle}
delay={{show: 0, hide: 0}}

View File

@ -51,12 +51,12 @@ class CustomPermissionItem extends React.Component {
{this.state.isShowOperations && (
<Fragment>
<OpIcon
className="fa fa-pencil-alt attr-action-icon"
className="sf3-font sf3-font-rename attr-action-icon"
title={gettext('Edit')}
op={this.onEditCustomPermission}
/>
<OpIcon
className="fa fa-trash attr-action-icon"
className="sf3-font sf3-font-delete1 attr-action-icon"
title={gettext('Delete')}
op={this.onDeleteCustomPermission}
/>

View File

@ -299,7 +299,14 @@ class GenerateUploadLink extends React.Component {
<dd className="d-flex">
<div className="d-flex align-items-center">
<input id="stored-password" className="border-0 mr-1" type="text" value={this.state.storedPasswordVisible ? sharedUploadInfo.password : '****************************************'} readOnly={true} size={Math.max(sharedUploadInfo.password.length, 10)} />
<span tabIndex="0" role="button" aria-label={this.state.storedPasswordVisible ? gettext('Hide') : gettext('Show')} onKeyDown={this.onIconKeyDown} onClick={this.toggleStoredPasswordVisible} className={`eye-icon fas ${this.state.storedPasswordVisible ? 'fa-eye': 'fa-eye-slash'}`}></span>
<span
tabIndex="0"
role="button"
aria-label={this.state.storedPasswordVisible ? gettext('Hide') : gettext('Show')}
onKeyDown={this.onIconKeyDown}
onClick={this.toggleStoredPasswordVisible}
className={`eye-icon sf3-font sf3-font-eye${this.state.storedPasswordVisible ? '': '-slash'}`}
></span>
</div>
</dd>
</FormGroup>
@ -316,7 +323,7 @@ class GenerateUploadLink extends React.Component {
role="button"
aria-label={gettext('Edit')}
title={gettext('Edit')}
className="fa fa-pencil-alt attr-action-icon"
className="sf3-font sf3-font-rename attr-action-icon"
onClick={this.editExpirationToggle}>
</a>
)}
@ -381,8 +388,12 @@ class GenerateUploadLink extends React.Component {
<InputGroup style={{width: inputWidth}}>
<Input id="passwd" type={this.state.passwordVisible ? 'text':'password'} value={this.state.password || ''} onChange={this.inputPassword} />
<InputGroupAddon addonType="append">
<Button onClick={this.togglePasswordVisible}><i className={`link-operation-icon fas ${this.state.passwordVisible ? 'fa-eye': 'fa-eye-slash'}`}></i></Button>
<Button onClick={this.generatePassword}><i className="link-operation-icon fas fa-magic"></i></Button>
<Button onClick={this.togglePasswordVisible}>
<i className={`link-operation-icon sf3-font sf3-font-eye${this.state.passwordVisible ? '': '-slash'}`}></i>
</Button>
<Button onClick={this.generatePassword}>
<i className="link-operation-icon sf3-font sf3-font-magic"></i>
</Button>
</InputGroupAddon>
</InputGroup>
</FormGroup>

View File

@ -49,7 +49,7 @@ class OpMenu extends React.Component {
<Dropdown isOpen={this.state.isItemMenuShow} toggle={this.toggleOperationMenu}>
<DropdownToggle
tag="i"
className="d-flex w-5 h-5 align-items-center justify-content-center sf-dropdown-toggle fa fa-ellipsis-v"
className="d-flex w-5 h-5 align-items-center justify-content-center sf-dropdown-toggle sf3-font sf3-font-more-vertical"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -146,8 +146,12 @@ class AddOrgUserDialog extends React.Component {
<InputGroup className="passwd">
<Input id="userPwd" innerRef={input => {this.passwdInput = input;}} value={this.state.password || ''} onChange={this.inputPassword} />
<InputGroupAddon addonType="append">
<Button onClick={this.togglePasswordVisible}><i className={`link-operation-icon fas ${this.state.isPasswordVisible ? 'fa-eye-slash' : 'fa-eye'}`}></i></Button>
<Button onClick={this.generatePassword}><i className="link-operation-icon fas fa-magic"></i></Button>
<Button onClick={this.togglePasswordVisible}>
<i className={`link-operation-icon sf3-font sf3-font-eye${this.state.isPasswordVisible ? '-slash' : ''}`}></i>
</Button>
<Button onClick={this.generatePassword}>
<i className="link-operation-icon sf3-font sf3-font-magic"></i>
</Button>
</InputGroupAddon>
</InputGroup>
</FormGroup>

View File

@ -65,7 +65,7 @@ class APITokenItem extends React.Component {
<span>{item.api_token}</span>
{this.state.isOperationShow &&
<OpIcon
className="far fa-copy action-icon"
className="action-icon sf3-font sf3-font-copy1"
op={this.onCopyAPIToken}
title={gettext('Copy')}
/>

View File

@ -86,7 +86,7 @@ class Item extends Component {
role="button"
aria-label={gettext('Edit')}
title={gettext('Edit')}
className="fa fa-pencil-alt attr-action-icon"
className="sf3-font sf3-font-rename attr-action-icon"
onClick={this.onEditPermission}>
</a>
)}

View File

@ -86,7 +86,7 @@ class Item extends Component {
role="button"
aria-label={gettext('Edit')}
title={gettext('Edit')}
className="fa fa-pencil-alt attr-action-icon"
className="sf3-font sf3-font-rename attr-action-icon"
onClick={this.onEditPermission}>
</a>
)}

View File

@ -74,8 +74,12 @@ class ResetWebdavPassword extends Component {
<InputGroup>
<Input type={this.state.isPasswordVisible ? 'text' : 'password'} value={this.state.password} onChange={this.handleInputChange} autoComplete="new-password"/>
<InputGroupAddon addonType="append">
<Button onClick={this.togglePasswordVisible}><i className={`fas ${this.state.isPasswordVisible ? 'fa-eye': 'fa-eye-slash'}`}></i></Button>
<Button onClick={this.generatePassword}><i className="fas fa-magic"></i></Button>
<Button onClick={this.togglePasswordVisible}>
<i className={`sf3-font sf3-font-eye${this.state.isPasswordVisible ? '': '-slash'}`}></i>
</Button>
<Button onClick={this.generatePassword}>
<i className="sf3-font sf3-font-magic"></i>
</Button>
</InputGroupAddon>
</InputGroup>
<p className="form-text text-muted m-0">{passwordTip}</p>

View File

@ -74,8 +74,12 @@ class SetWebdavPassword extends Component {
<InputGroup>
<Input type={this.state.isPasswordVisible ? 'text' : 'password'} value={this.state.password} onChange={this.handleInputChange} autoComplete="new-password"/>
<InputGroupAddon addonType="append">
<Button onClick={this.togglePasswordVisible}><i className={`fas ${this.state.isPasswordVisible ? 'fa-eye': 'fa-eye-slash'}`}></i></Button>
<Button onClick={this.generatePassword}><i className="fas fa-magic"></i></Button>
<Button onClick={this.togglePasswordVisible}>
<i className={`sf3-font sf3-font-eye${this.state.isPasswordVisible ? '': 'slash'}`}></i>
</Button>
<Button onClick={this.generatePassword}>
<i className="sf3-font sf3-font-magic"></i>
</Button>
</InputGroupAddon>
</InputGroup>
<p className="form-text text-muted m-0">{passwordTip}</p>

View File

@ -98,7 +98,7 @@ class SysAdminAddOrgDialog extends React.Component {
<FormGroup>
<Label>
{gettext('Owner')}
<span className="small text-secondary ml-1 fas fa-question-circle" title={gettext('Owner can use admin panel in an organization, must be a new account.')}></span>
<span className="small text-secondary ml-1 sf3-font sf3-font-tips" title={gettext('Owner can use admin panel in an organization, must be a new account.')}></span>
</Label>
<Input value={email} onChange={this.inputEmail} />
</FormGroup>

View File

@ -138,7 +138,7 @@ class SysAdminAddUserDialog extends React.Component {
<FormGroup>
<Label>
{gettext('Role')}
<span className="small text-secondary ml-1 fas fa-question-circle" title={gettext('You can also add a user as a guest, who will not be allowed to create libraries and groups.')}></span>
<span className="small text-secondary ml-1 sf3-font sf3-font-tips" title={gettext('You can also add a user as a guest, who will not be allowed to create libraries and groups.')}></span>
</Label>
<SysAdminUserRoleEditor
isTextMode={false}
@ -154,8 +154,12 @@ class SysAdminAddUserDialog extends React.Component {
<InputGroup>
<Input autoComplete="new-password" type={isPasswordVisible ? 'text' : 'password'} value={password || ''} onChange={this.inputPassword} />
<InputGroupAddon addonType="append">
<Button className="mt-0" onClick={this.togglePasswordVisible}><i className={`link-operation-icon fas ${this.state.isPasswordVisible ? 'fa-eye': 'fa-eye-slash'}`}></i></Button>
<Button className="mt-0" onClick={this.generatePassword}><i className="link-operation-icon fas fa-magic"></i></Button>
<Button className="mt-0" onClick={this.togglePasswordVisible}>
<i className={`link-operation-icon sf3-font sf3-font-eye${this.state.isPasswordVisible ? '': '-slash'}`}></i>
</Button>
<Button className="mt-0" onClick={this.generatePassword}>
<i className="link-operation-icon sf3-font sf3-font-magic"></i>
</Button>
</InputGroupAddon>
</InputGroup>
</FormGroup>

View File

@ -1,4 +1,4 @@
import React, { Fragment } from 'react';
import React from 'react';
import PropTypes from 'prop-types';
import { Utils } from '../../utils/utils';
import { gettext, siteRoot } from '../../utils/constants';
@ -59,11 +59,9 @@ class DirColumnFile extends React.Component {
repoID={this.props.repoID}
path={this.props.path}
>
<Fragment>
<span className='wiki-open-file position-fixed' onClick={this.onOpenFile}>
<i className="fas fa-expand-arrows-alt"></i>
</span>
</Fragment>
<span className='wiki-open-file position-fixed' onClick={this.onOpenFile}>
<i className="sf3-font sf3-font-expand-arrows-alt"></i>
</span>
</SeafileMarkdownViewer>
);
}

View File

@ -737,7 +737,7 @@ class DirentListItem extends React.Component {
<td className="pl10">
{dirent.starred !== undefined &&
<a href="#" role="button" aria-label={dirent.starred ? gettext('Unstar') : gettext('Star')} onClick={this.onItemStarred}>
<i className={`fa-star ${dirent.starred ? 'fas' : 'far star-empty'}`}></i>
<i className={`sf3-font ${dirent.starred ? 'sf3-font-star' : 'sf3-font-star-empty'}`}></i>
</a>
}
</td>
@ -810,7 +810,7 @@ class DirentListItem extends React.Component {
<Dropdown isOpen={this.state.isOpMenuOpen} toggle={this.toggleOpMenu}>
<DropdownToggle
tag="i"
className="sf-dropdown-toggle fa fa-ellipsis-v ml-0"
className="sf-dropdown-toggle sf3-font sf3-font-more-vertical ml-0"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -481,7 +481,7 @@ class FileChooser extends React.Component {
<div className="file-chooser-search-input">
<Input className="search-input mb-2" placeholder={gettext('Search')} type='text' value={this.state.searchInfo} onChange={this.onSearchInfoChanged}></Input>
{this.state.searchInfo.length !== 0 && (
<span className="search-control attr-action-icon fas fa-times" onClick={this.onCloseSearching}></span>
<span className="search-control attr-action-icon sf3-font sf3-font-x-01" onClick={this.onCloseSearching}></span>
)}
</div>
)}

View File

@ -207,7 +207,7 @@ class RepoListItem extends React.Component {
<div className="item-left-icon">
<span className={`item-toggle icon sf3-font ${this.state.isShowChildren ? 'sf3-font-down' : 'sf3-font-down rotate-270 d-inline-block'}`} onClick={this.onToggleClick}></span>
<i className="tree-node-icon">
<span className="icon far fa-folder tree-node-icon"></span>
<span className="icon sf3-font sf3-font-folder tree-node-icon"></span>
</i>
</div>
</div>

View File

@ -110,7 +110,7 @@ class TreeViewItem extends React.Component {
<span className={`icon item-toggle sf3-font ${node.isExpanded ? 'sf3-font-down' : 'sf3-font-down rotate-270 d-inline-block'}`} onClick={this.onToggleClick}></span>
}
<i className="tree-node-icon">
<span className={`icon far ${node.object.type === 'dir' ? 'fa-folder' : 'fa-file'}`}></span>
<span className={`icon sf3-font ${node.object.type === 'dir' ? 'sf3-font-folder' : 'sf3-font-file'}`}></span>
</i>
</div>
</div>

View File

@ -66,10 +66,10 @@ class FileContent extends React.Component {
return (
<div className="file-view-content flex-1 image-file-view">
{previousImage && (
<a href={previousImageUrl} id="img-prev" title={gettext('you can also press ← ')}><span className="fas fa-chevron-left"></span></a>
<a href={previousImageUrl} id="img-prev" title={gettext('you can also press ← ')}><span className="sf3-font sf3-font-down rotate-90 d-inline-block"></span></a>
)}
{nextImage && (
<a href={nextImageUrl} id="img-next" title={gettext('you can also press →')}><span className="fas fa-chevron-right"></span></a>
<a href={nextImageUrl} id="img-next" title={gettext('you can also press →')}><span className="sf3-font sf3-font-down rotate-270 d-inline-block"></span></a>
)}
<img src={xmindSrc || thumbnailURL || rawPath} alt={fileName} id="image-view" onError={this.handleLoadFailure} />
</div>

View File

@ -19,7 +19,7 @@ class ForbidUploadListItem extends React.Component {
<td>{Utils.bytesToSize(file.size)}</td>
<td>
<div className="d-flex align-items-center">
<span className="upload-failure-icon fas fa-exclamation mr-2"></span>
<span className="upload-failure-icon sf3-font sf3-font-info mr-2"></span>
<span className="upload-failure-msg">{gettext('File too large')}</span>
</div>
</td>

View File

@ -133,7 +133,7 @@ class UploadListItem extends React.Component {
)}
{this.state.uploadState === UPLOAD_ERROR && (
<div className="d-flex align-items-center">
<span className="upload-failure-icon fas fa-exclamation mr-2"></span>
<span className="upload-failure-icon sf3-font sf3-font-info mr-2"></span>
<span className="upload-failure-msg" dangerouslySetInnerHTML={{__html: error}}></span>
</div>
)}

View File

@ -33,7 +33,7 @@ class FileInfo extends React.PureComponent {
<div className="text-truncate">
<h2 className="file-title d-flex align-items-center">
<span className="file-name text-truncate" title={fileName}>{fileName}</span>
<a className={`file-star ${isStarred ? 'fa' : 'far'} fa-star`}
<a className={`file-star sf3-font ${isStarred ? 'sf3-font-star' : 'sf3-font-star-empty'}`}
href="#"
title={starredText}
role="button"

View File

@ -90,11 +90,11 @@ class FileToolbar extends React.Component {
if (!isLocked) {
showLockUnlockBtn = true;
lockUnlockText = gettext('Lock');
lockUnlockIcon = 'fa fa-lock';
lockUnlockIcon = 'sf3-font sf3-font-lock';
} else if (lockedByMe) {
showLockUnlockBtn = true;
lockUnlockText = gettext('Unlock');
lockUnlockIcon = 'fa fa-unlock';
lockUnlockIcon = 'sf3-font sf3-font-unlock';
}
}
@ -117,13 +117,13 @@ class FileToolbar extends React.Component {
{fileType == 'PDF' && (
<IconButton
id="seafile-pdf-print"
icon="fa fa-print"
icon="sf3-font sf3-font-print"
text={gettext('Print')}
/>
)}
<IconButton
id="open-parent-folder"
icon="fa fa-folder-open"
icon="sf3-font sf3-font-folder-open"
text={gettext('Open parent folder')}
tag="a"
href={`${siteRoot}library/${repoID}/${Utils.encodePath(repoName + parentDir)}`}
@ -139,35 +139,34 @@ class FileToolbar extends React.Component {
{showShareBtn && (
<IconButton
id="share-file"
icon='fa fa-share-alt'
icon='sf3-font sf3-font-share'
text={gettext('Share')}
onClick={this.toggleShareDialog}
/>
)}
{(canEditFile && fileType != 'SDoc' && !err) &&
( this.props.isSaving ?
<button type={'button'} aria-label={gettext('Saving...')} className={'btn btn-icon btn-secondary btn-active'}>
<i className={'fa fa-spin fa-spinner'}/></button> :
(
this.props.needSave ?
<IconButton
text={gettext('Save')}
id={'saveButton'}
icon={'fa fa-save'}
// button imported in this file does not have functionalities of
// isActive as button imported in markdowneditor has
//isActive={!isContentChanged}
onClick={this.props.onSave}
/> :
<button type={'button'} className={'btn btn-icon btn-secondary btn-active'} disabled>
<i className={'fa fa-save'}/></button>
)
)}
(this.props.isSaving ?
<button type='button' aria-label={gettext('Saving...')} className={'btn btn-icon btn-secondary btn-active'}>
<i className='sf3-font sf3-font-spinner'/>
</button>
:
(this.props.needSave ?
<IconButton
text={gettext('Save')}
id={'saveButton'}
icon='sf3-font sf3-font-save'
onClick={this.props.onSave}
/>
:
<button type='button' className='btn btn-icon btn-secondary btn-active' disabled>
<i className='sf3-font sf3-font-save'/>
</button>
))}
{canDownloadFile && (
<IconButton
id="download-file"
icon="fa fa-download"
icon="sf3-font sf3-font-download1"
text={gettext('Download')}
tag="a"
href="?dl=1"
@ -175,7 +174,7 @@ class FileToolbar extends React.Component {
)}
<IconButton
id="file-details"
icon='fas fa-info'
icon='sf3-font sf3-font-info1'
text={gettext('Details')}
onClick={this.props.toggleDetailsPanel}
/>
@ -189,8 +188,8 @@ class FileToolbar extends React.Component {
/>
)}
<ButtonDropdown isOpen={moreDropdownOpen} toggle={this.toggleMoreOpMenu}>
<DropdownToggle aria-label={gettext('More operations')}>
<span className="fas fa-ellipsis-v"></span>
<DropdownToggle className="file-toolbar-more-operations" aria-label={gettext('More operations')}>
<span className="sf3-font sf3-font-more-vertical"></span>
</DropdownToggle>
<DropdownMenu right={true}>
{filePerm == 'rw' && (
@ -206,23 +205,22 @@ class FileToolbar extends React.Component {
<ButtonGroup >
{(canEditFile && fileType != 'SDoc' && !err) &&
(this.props.isSaving ?
<button type={'button'} aria-label={gettext('Saving...')} className={'btn btn-icon btn-secondary btn-active'}>
<i className={'fa fa-spin fa-spinner'}/></button> :
(
this.props.needSave ?
<IconButton
text={gettext('Save')}
id={'saveButton'}
icon={'fa fa-save'}
// button imported in this file does not have functionalities of
// isActive as button imported in markdowneditor has
//isActive={!isContentChanged}
onClick={this.props.onSave}
/> :
<button type={'button'} className={'btn btn-icon btn-secondary btn-active'} disabled>
<i className={'fa fa-save'}/></button>
)
)}
<button type='button' aria-label={gettext('Saving...')} className={'btn btn-icon btn-secondary btn-active'}>
<i className='sf3-font sf3-font-spinner'/>
</button>
:
(this.props.needSave ?
<IconButton
text={gettext('Save')}
id={'saveButton'}
icon='sf3-font sf3-font-save'
onClick={this.props.onSave}
/>
:
<button type='button' className={'btn btn-icon btn-secondary btn-active'} disabled>
<i className={'sf3-font sf3-font-save'}/>
</button>
))}
</ButtonGroup>
<DropdownToggle className="sf2-icon-more mx-1" aria-label={gettext('More operations')}></DropdownToggle>

View File

@ -93,7 +93,7 @@ class HistoryListItem extends React.Component {
<Dropdown isOpen={this.state.isMenuShow} toggle={this.onToggleClick}>
<DropdownToggle
tag='a'
className={`fas fa-ellipsis-v ${(this.state.isShowOperationIcon || isHigtlightItem) ? '' : 'invisible'}`}
className={`sf3-font sf3-font-more-vertical ${(this.state.isShowOperationIcon || isHigtlightItem) ? '' : 'invisible'}`}
data-toggle="dropdown"
aria-expanded={this.state.isMenuShow}
title={gettext('More operations')}

View File

@ -192,7 +192,7 @@ class ManageMembersDialog extends React.Component {
{groupMembers.length > 10 &&
<InputGroup className={`search-group-members rounded ${searchActive ? 'active' : ''}`}>
<InputGroupText>
<i className="fas fa-search" aria-hidden={true}></i>
<i className="sf3-font sf3-font-search" aria-hidden={true}></i>
</InputGroupText>
<Input
type="text"

View File

@ -10,7 +10,7 @@ class MenuControl extends React.Component {
render() {
return (
<i className={`fas fa-ellipsis-v ${this.props.isShow ? '' : 'invisible'}`} onClick={this.props.onClick}></i>
<i className={`sf3-font sf3-font-more-vertical ${this.props.isShow ? '' : 'invisible'}`} onClick={this.props.onClick}></i>
);
}
}

View File

@ -28,7 +28,7 @@ class InternalLinkOperation extends React.Component {
return (
<Fragment>
<span className='dialog-operation'>
<i className="file-internal-link fa fa-link" title={title} aria-label={title} onClick={this.onInternalLinkDialogToggle}/>
<i className="file-internal-link sf3-font sf3-font-link" title={title} aria-label={title} onClick={this.onInternalLinkDialogToggle}/>
</span>
{isShowInternalLinkDialog && (
<InternalLinkDialog

View File

@ -56,7 +56,7 @@ class Paginator extends Component {
disabled={currentPage == 1}
onClick={this.goToPrevious}
>
<span className="fas fa-chevron-left"></span>
<span className="sf3-font sf3-font-down rotate-90 d-inline-block"></span>
</button>
<span className="btn btn-primary mx-4">{currentPage}</span>
<button
@ -64,7 +64,7 @@ class Paginator extends Component {
disabled={!this.props.hasNextPage}
onClick={this.goToNext}
>
<span className="fas fa-chevron-right"></span>
<span className="sf3-font sf3-font-down rotate-270 d-inline-block"></span>
</button>
<select

View File

@ -109,7 +109,7 @@ export default class TagListFooter extends Component {
render() {
return (
<div className="tag-list-footer">
<span className="fa fa-question-circle mr-2" style={{color: '#999'}} id="import-export-tags-tip"></span>
<span className="sf3-font sf3-font-tips mr-2" style={{color: '#999'}} id="import-export-tags-tip"></span>
<Tooltip
toggle={this.toggleTooltip}
delay={{show: 0, hide: 0}}

View File

@ -124,13 +124,15 @@ class SdocWikiPageViewer extends React.Component {
const containerClass = `wiki-page-container ${containerClassName}`;
// In dir-column-file width is 100%;
// In wiki-viewer width isn't 100%
const contentClassName = `wiki-page-content ${!isWiki ? + 'w-100' : ''}`;
const contentClassName = `wiki-page-content ${isWiki ? '' : 'w-100'}`;
return (
<div ref={this.scrollRef} className={containerClass}>
<div className={contentClassName}>
{this.props.children}
{this.renderMarkdown()}
<p id="wiki-page-last-modified">{gettext('Last modified by')} {this.props.latestContributor}, <span>{this.props.lastModified}</span></p>
<p id="wiki-page-last-modified">
{gettext('Last modified by')} {this.props.latestContributor}, <span>{this.props.lastModified}</span>
</p>
</div>
</div>
);

View File

@ -110,13 +110,15 @@ class SeafileMarkdownViewer extends React.Component {
const containerClass = `wiki-page-container ${containerClassName}`;
// In dir-column-file width is 100%;
// In wiki-viewer width isn't 100%
const contentClassName = `wiki-page-content ${!isWiki ? + 'w-100' : ''}`;
const contentClassName = `wiki-page-content ${isWiki ? '' : 'w-100'}`;
return (
<div ref={this.scrollRef} className={containerClass}>
<div className={contentClassName}>
{this.props.children}
{this.renderMarkdown()}
<p id="wiki-page-last-modified">{gettext('Last modified by')} {this.props.latestContributor}, <span>{this.props.lastModified}</span></p>
<p id="wiki-page-last-modified">
{gettext('Last modified by')} {this.props.latestContributor}, <span>{this.props.lastModified}</span>
</p>
</div>
</div>
);

View File

@ -421,7 +421,7 @@ export default class AISearch extends Component {
return (
<div className="search-types">
<div className="search-types-repos search-types-highlight" onClick={this.searchAllRepos} tabIndex={0}>
<i className="search-icon-left input-icon-addon fas fa-search"></i>
<i className="search-icon-left input-icon-addon sf3-font sf3-font-search"></i>
{inputValue}
<span className="search-types-text">{gettext('in all libraries')}</span>
</div>
@ -433,17 +433,17 @@ export default class AISearch extends Component {
return (
<div className="search-types">
<div className={`search-types-repo ${highlightIndex === 0 ? 'search-types-highlight' : ''}`} onClick={this.searchRepo} tabIndex={0}>
<i className="search-icon-left input-icon-addon fas fa-search"></i>
<i className="search-icon-left input-icon-addon sf3-font sf3-font-search"></i>
{inputValue}
<span className="search-types-text">{gettext('in this library')}</span>
</div>
<div className={`search-types-folder ${highlightIndex === 1 ? 'search-types-highlight' : ''}`} onClick={this.searchFolder} tabIndex={0}>
<i className="search-icon-left input-icon-addon fas fa-search"></i>
<i className="search-icon-left input-icon-addon sf3-font sf3-font-search"></i>
{inputValue}
<span className="search-types-text">{gettext('in this folder')}</span>
</div>
<div className={`search-types-repos ${highlightIndex === 2 ? 'search-types-highlight' : ''}`} onClick={this.searchAllRepos} tabIndex={0}>
<i className="search-icon-left input-icon-addon fas fa-search"></i>
<i className="search-icon-left input-icon-addon sf3-font sf3-font-search"></i>
{inputValue}
<span className="search-types-text">{gettext('in all libraries')}</span>
</div>
@ -453,12 +453,12 @@ export default class AISearch extends Component {
return (
<div className="search-types">
<div className={`search-types-repo ${highlightIndex === 0 ? 'search-types-highlight' : ''}`} onClick={this.searchRepo} tabIndex={0}>
<i className="search-icon-left input-icon-addon fas fa-search"></i>
<i className="search-icon-left input-icon-addon sf3-font sf3-font-search"></i>
{inputValue}
<span className="search-types-text">{gettext('in this library')}</span>
</div>
<div className={`search-types-repos ${highlightIndex === 1 ? 'search-types-highlight' : ''}`} onClick={this.searchAllRepos} tabIndex={0}>
<i className="search-icon-left input-icon-addon fas fa-search"></i>
<i className="search-icon-left input-icon-addon sf3-font sf3-font-search"></i>
{inputValue}
<span className="search-types-text">{gettext('in all libraries')}</span>
</div>
@ -716,7 +716,7 @@ export default class AISearch extends Component {
}
<button
type="button"
className="search-icon-right input-icon-addon fas fa-times border-0 bg-transparent mr-4"
className="search-icon-right input-icon-addon sf3-font sf3-font-x-01 border-0 bg-transparent mr-4"
onClick={this.onCloseHandler}
aria-label={gettext('Close')}
></button>
@ -756,7 +756,7 @@ export default class AISearch extends Component {
autoComplete="off"
/>
{this.state.isCloseShow &&
<button type="button" className="search-icon-right input-icon-addon fas fa-times border-0 bg-transparent" onClick={this.onCloseHandler} aria-label={gettext('Close')}></button>
<button type="button" className="search-icon-right input-icon-addon sf3-font sf3-font-x-01 border-0 bg-transparent" onClick={this.onCloseHandler} aria-label={gettext('Close')}></button>
}
</div>
<div className="search-result-container dropdown-search-result-container" onScroll={this.onResultListScroll}>

View File

@ -30,7 +30,7 @@ class SearchByName extends Component {
return (
<Fragment>
<i
className="fas fa-search top-search-file-icon"
className="sf3-font sf3-font-search top-search-file-icon"
onClick={this.toggleDialog}
title={gettext('Search files in this library')}
></i>

View File

@ -420,7 +420,7 @@ class Search extends Component {
return (
<div className="search-types">
<div className="search-types-repos search-types-highlight" onClick={this.searchAllRepos} tabIndex={0}>
<i className="search-icon-left input-icon-addon fas fa-search"></i>
<i className="search-icon-left input-icon-addon sf3-font sf3-font-search"></i>
{inputValue}
<span className="search-types-text">{gettext('in all libraries')}</span>
</div>
@ -432,17 +432,17 @@ class Search extends Component {
return (
<div className="search-types">
<div className={`search-types-repo ${highlightIndex === 0 ? 'search-types-highlight' : ''}`} onClick={this.searchRepo} tabIndex={0}>
<i className="search-icon-left input-icon-addon fas fa-search"></i>
<i className="search-icon-left input-icon-addon sf3-font sf3-font-search"></i>
{inputValue}
<span className="search-types-text">{gettext('in this library')}</span>
</div>
<div className={`search-types-folder ${highlightIndex === 1 ? 'search-types-highlight' : ''}`} onClick={this.searchFolder} tabIndex={0}>
<i className="search-icon-left input-icon-addon fas fa-search"></i>
<i className="search-icon-left input-icon-addon sf3-font sf3-font-search"></i>
{inputValue}
<span className="search-types-text">{gettext('in this folder')}</span>
</div>
<div className={`search-types-repos ${highlightIndex === 2 ? 'search-types-highlight' : ''}`} onClick={this.searchAllRepos} tabIndex={0}>
<i className="search-icon-left input-icon-addon fas fa-search"></i>
<i className="search-icon-left input-icon-addon sf3-font sf3-font-search"></i>
{inputValue}
<span className="search-types-text">{gettext('in all libraries')}</span>
</div>
@ -452,12 +452,12 @@ class Search extends Component {
return (
<div className="search-types">
<div className={`search-types-repo ${highlightIndex === 0 ? 'search-types-highlight' : ''}`} onClick={this.searchRepo} tabIndex={0}>
<i className="search-icon-left input-icon-addon fas fa-search"></i>
<i className="search-icon-left input-icon-addon sf3-font sf3-font-search"></i>
{inputValue}
<span className="search-types-text">{gettext('in this library')}</span>
</div>
<div className={`search-types-repos ${highlightIndex === 1 ? 'search-types-highlight' : ''}`} onClick={this.searchAllRepos} tabIndex={0}>
<i className="search-icon-left input-icon-addon fas fa-search"></i>
<i className="search-icon-left input-icon-addon sf3-font sf3-font-search"></i>
{inputValue}
<span className="search-types-text">{gettext('in all libraries')}</span>
</div>
@ -551,7 +551,7 @@ class Search extends Component {
<div className={`search-mask ${isMaskShow ? 'show' : 'hide'}`} onClick={this.onCloseHandler}></div>
<div className={`search-container ${isMaskShow ? 'show' : ''}`}>
<div className={`input-icon ${isMaskShow ? 'mb-1' : ''}`}>
<i className="search-icon-left input-icon-addon fas fa-search"></i>
<i className="search-icon-left input-icon-addon sf3-font sf3-font-search"></i>
<input
type="text"
className="form-control search-input"
@ -565,7 +565,7 @@ class Search extends Component {
ref={this.inputRef}
/>
{this.state.isCloseShow &&
<button type="button" className="search-icon-right input-icon-addon fas fa-times border-0 bg-transparent mr-4" onClick={this.onCloseHandler} aria-label={gettext('Close')}></button>
<button type="button" className="search-icon-right input-icon-addon sf3-font sf3-font-x-01 border-0 bg-transparent mr-4" onClick={this.onCloseHandler} aria-label={gettext('Close')}></button>
}
</div>
<div
@ -580,14 +580,14 @@ class Search extends Component {
</MediaQuery>
<MediaQuery query="(max-width: 767.8px)">
<div className="search-icon-container">
<i className="search-icon fas fa-search" onClick={this.onSearchToggle}></i>
<i className="search-icon sf3-font sf3-font-search" onClick={this.onSearchToggle}></i>
</div>
{this.state.isSearchInputShow &&
<div className="search">
<div className={`search-mask ${isMaskShow ? '' : 'hide'}`} onClick={this.onCloseHandler}></div>
<div className="search-container">
<div className="input-icon">
<i className="search-icon-left input-icon-addon fas fa-search"></i>
<i className="search-icon-left input-icon-addon sf3-font sf3-font-search"></i>
<input
type="text"
className="form-control search-input"
@ -600,7 +600,7 @@ class Search extends Component {
autoComplete="off"
/>
{this.state.isCloseShow &&
<button type="button" className="search-icon-right input-icon-addon fas fa-times border-0 bg-transparent" onClick={this.onCloseHandler} aria-label={gettext('Close')}></button>
<button type="button" className="search-icon-right input-icon-addon sf3-font sf3-font-x-01 border-0 bg-transparent" onClick={this.onCloseHandler} aria-label={gettext('Close')}></button>
}
</div>
<div className="search-result-container dropdown-search-result-container" onScroll={this.onResultListScroll}>

View File

@ -228,7 +228,7 @@ class Search extends Component {
<div className={`search-mask ${this.state.isMaskShow ? '' : 'hide'}`} onClick={this.onCloseHandler}></div>
<div className="search-container">
<div className="input-icon">
<i className="search-icon-left input-icon-addon fas fa-search"></i>
<i className="search-icon-left input-icon-addon sf3-font sf3-font-search"></i>
<input
type="text"
className="form-control search-input"
@ -240,7 +240,7 @@ class Search extends Component {
onChange={this.onChangeHandler}
autoComplete="off"
/>
{this.state.isCloseShow && <i className='search-icon-right input-icon-addon fas fa-times' onClick={this.onCloseHandler}></i>}
{this.state.isCloseShow && <i className='search-icon-right input-icon-addon sf3-font sf3-font-x-01' onClick={this.onCloseHandler}></i>}
</div>
<div className="search-result-container dropdown-search-result-container">
{this.renderSearchResult()}
@ -250,14 +250,14 @@ class Search extends Component {
</MediaQuery>
<MediaQuery query="(max-width: 767.8px)">
<div className="search-icon-container">
<i className="search-icon fas fa-search" onClick={this.onSearchToggle}></i>
<i className="search-icon sf3-font sf3-font-search" onClick={this.onSearchToggle}></i>
</div>
{this.state.isSearchInputShow &&
<div className="search">
<div className={`search-mask ${this.state.isMaskShow ? '' : 'hide'}`} onClick={this.onCloseHandler}></div>
<div className="search-container">
<div className="input-icon">
<i className="search-icon-left input-icon-addon fas fa-search"></i>
<i className="search-icon-left input-icon-addon sf3-font sf3-font-search"></i>
<input
type="text"
className="form-control search-input"
@ -269,7 +269,7 @@ class Search extends Component {
onChange={this.onChangeHandler}
autoComplete="off"
/>
{this.state.isCloseShow && <i className='search-icon-right input-icon-addon fas fa-times' onClick={this.onCloseHandler}></i>}
{this.state.isCloseShow && <i className='search-icon-right input-icon-addon sf3-font sf3-font-x-01' onClick={this.onCloseHandler}></i>}
</div>
<div className="search-result-container dropdown-search-result-container">
{this.renderSearchResult()}

View File

@ -148,7 +148,7 @@ class AddSeatableAccountSetting extends Component {
<InputGroup>
<Input value={seatable_api_token} type={passwordType} onChange={this.onChangeSeatableApiToken}/>
<InputGroupText>
<i className={`fas ${passwordType === 'password' ? 'fa-eye-slash' : 'fa-eye'} cursor-pointer`} onClick={this.togglePasswordShow} />
<i className={`sf3-font sf3-font-eye${passwordType === 'password' ? '-slash' : ''} cursor-pointer`} onClick={this.togglePasswordShow} />
</InputGroupText>
</InputGroup>
</FormGroup>

View File

@ -61,7 +61,7 @@ class RepoAPITokenPermissionEditor extends React.Component {
<Fragment>
<span>{optionTranslation}</span>
{this.props.isEditIconShow &&
<OpIcon title={gettext('Edit')} className="fa fa-pencil-alt attr-action-icon" op={this.onEditPermission} />
<OpIcon title={gettext('Edit')} className="sf3-font sf3-font-rename attr-action-icon" op={this.onEditPermission} />
}
</Fragment>
:

View File

@ -62,7 +62,7 @@ class SelectEditor extends React.Component {
isDisabled: true,
label: (
<div className="permission-editor-btn-add-custom-permission" onClick={this.props.onAddCustomPermissionToggle}>
<i className="fa fa-plus"></i>
<i className="sf3-font sf3-font-enlarge"></i>
<span>{gettext('Add custom permission')}</span>
</div>
)
@ -136,7 +136,7 @@ class SelectEditor extends React.Component {
role="button"
aria-label={gettext('Edit')}
title={gettext('Edit')}
className="fa fa-pencil-alt attr-action-icon"
className="sf3-font sf3-font-rename attr-action-icon"
onClick={this.onEditPermission}>
</a>
)}

View File

@ -256,7 +256,7 @@ class LinkCreation extends React.Component {
<Fragment>
<div className="d-flex align-items-center pb-2 border-bottom">
<h6 className="font-weight-normal m-0">
<button className="fa fa-arrow-left back-icon border-0 bg-transparent text-secondary p-0 mr-2" onClick={this.goBack} title={gettext('Back')} aria-label={gettext('Back')}></button>
<button className="sf3-font sf3-font-arrow rotate-180 d-inline-block back-icon border-0 bg-transparent text-secondary p-0 mr-2" onClick={this.goBack} title={gettext('Back')} aria-label={gettext('Back')}></button>
{type == 'batch' ? gettext('Generate links in batch') : gettext('Generate Link')}</h6>
</div>
<Form className="pt-4">
@ -286,8 +286,12 @@ class LinkCreation extends React.Component {
<InputGroup style={{width: inputWidth}}>
<Input id="passwd" type={this.state.isPasswordVisible ? 'text' : 'password'} value={this.state.password || ''} onChange={this.inputPassword} />
<InputGroupAddon addonType="append">
<Button onClick={this.togglePasswordVisible}><i className={`link-operation-icon fas ${this.state.isPasswordVisible ? 'fa-eye': 'fa-eye-slash'}`}></i></Button>
<Button onClick={this.generatePassword}><i className="link-operation-icon fas fa-magic"></i></Button>
<Button onClick={this.togglePasswordVisible}>
<i className={`link-operation-icon sf3-font sf3-font-eye${this.state.isPasswordVisible ? '': '-slash'}`}></i>
</Button>
<Button onClick={this.generatePassword}>
<i className="link-operation-icon sf3-font sf3-font-magic"></i>
</Button>
</InputGroupAddon>
</InputGroup>
</FormGroup>

View File

@ -163,7 +163,7 @@ class LinkDetails extends React.Component {
return (
<div>
<button className="fa fa-arrow-left back-icon border-0 bg-transparent text-secondary p-0" onClick={this.goBack} title={gettext('Back')} aria-label={gettext('Back')}></button>
<button className="sf3-font sf3-font-arrow rotate-180 d-inline-block back-icon border-0 bg-transparent text-secondary p-0" onClick={this.goBack} title={gettext('Back')} aria-label={gettext('Back')}></button>
<dl>
<dt className="text-secondary font-weight-normal">{gettext('Link:')}</dt>
<dd>
@ -190,7 +190,7 @@ class LinkDetails extends React.Component {
<dt className="text-secondary font-weight-normal">{gettext('Password:')}</dt>
<dd className="d-flex align-items-center">
<span className="mr-1">{this.state.storedPasswordVisible ? sharedLinkInfo.password : '***************'}</span>
<span tabIndex="0" role="button" aria-label={this.state.storedPasswordVisible ? gettext('Hide') : gettext('Show')} onKeyDown={this.onIconKeyDown} onClick={this.toggleStoredPasswordVisible} className={`eye-icon fas ${this.state.storedPasswordVisible ? 'fa-eye': 'fa-eye-slash'}`}></span>
<span tabIndex="0" role="button" aria-label={this.state.storedPasswordVisible ? gettext('Hide') : gettext('Show')} onKeyDown={this.onIconKeyDown} onClick={this.toggleStoredPasswordVisible} className={`eye-icon sf3-font sf3-font-eye${this.state.storedPasswordVisible ? '': '-slash'}`}></span>
</dd>
</>
)}
@ -205,7 +205,7 @@ class LinkDetails extends React.Component {
role="button"
aria-label={gettext('Edit')}
title={gettext('Edit')}
className="fa fa-pencil-alt attr-action-icon"
className="sf3-font sf3-font-rename attr-action-icon"
onClick={this.editingExpirationToggle}>
</a>
)}

View File

@ -19,7 +19,7 @@ class ForbidUploadListItem extends React.Component {
<td>{Utils.bytesToSize(file.size)}</td>
<td>
<div className="d-flex align-items-center">
<span className="upload-failure-icon fas fa-exclamation mr-2"></span>
<span className="upload-failure-icon sf3-font sf3-font-info mr-2"></span>
<span className="upload-failure-msg">{gettext('File too large')}</span>
</div>
</td>

View File

@ -133,7 +133,7 @@ class UploadListItem extends React.Component {
)}
{this.state.uploadState === UPLOAD_ERROR && (
<div className="d-flex align-items-center">
<span className="upload-failure-icon fas fa-exclamation mr-2"></span>
<span className="upload-failure-icon sf3-font sf3-font-info mr-2"></span>
<span className="upload-failure-msg" dangerouslySetInnerHTML={{__html: error}}></span>
</div>
)}

View File

@ -468,7 +468,7 @@ class SharedRepoListItem extends React.Component {
<Dropdown isOpen={this.state.isItemMenuShow} toggle={this.toggleOperationMenu}>
<DropdownToggle
tag="i"
className="sf-dropdown-toggle fa fa-ellipsis-v ml-0"
className="sf-dropdown-toggle sf3-font sf3-font-more-vertical ml-0"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -21,7 +21,8 @@ class SidePanel extends React.Component {
<Logo onCloseSidePanel={this.props.onCloseSidePanel}/>
</div>
<div className="side-panel-center">
{children ? children :
{children ?
children :
<MainSideNav tabItemClick={this.props.tabItemClick} currentTab={this.props.currentTab} />
}
</div>

View File

@ -14,15 +14,15 @@ class Alert extends React.PureComponent {
getIconClass(intent) {
switch (intent) {
case 'success':
return 'fa fa-check-circle';
return 'sf3-font sf3-font-check-circle';
case 'warning':
return 'fa fa-exclamation-triangle';
return 'sf3-font sf3-font-exclamation-triangle';
case 'none':
return 'fa fa-exclamation-circle';
return 'sf3-font sf3-font-exclamation-circle';
case 'danger':
return 'fa fa-exclamation-circle';
return 'sf3-font sf3-font-exclamation-circle';
default:
return 'fa fa-check-circle';
return 'sf3-font sf3-font-check-circle';
}
}

View File

@ -28,7 +28,7 @@ class InvitationsToolbar extends React.Component {
{Utils.isDesktop() ? (
<div className="operation">
<Button color="btn btn-secondary operation-item" onClick={toggleInvitePeopleDialog}>
<i className="fas fa-plus-square text-secondary mr-1"></i>{gettext('Invite Guest')}
<i className="sf3-font sf3-font-enlarge text-secondary mr-1"></i>{gettext('Invite Guest')}
</Button>
</div>
) : (

View File

@ -54,7 +54,7 @@ class MyLibsToolbar extends React.Component {
{Utils.isDesktop() ? (
<div className="operation">
<button className="btn btn-secondary operation-item" title={gettext('New Library')} onClick={this.onCreateToggle}>
<i className="fas fa-plus-square text-secondary mr-1"></i>{gettext('New Library')}
<i className="sf3-font sf3-font-enlarge text-secondary mr-1"></i>{gettext('New Library')}
</button>
{moreShown &&
<Dropdown isOpen={this.state.isOpen} toggle={this.toggleMore}>

View File

@ -178,25 +178,25 @@ class TreeNodeView extends React.Component {
let icon = '';
let type = '';
if (node.object.type === 'dir') {
icon = <i className="far fa-folder"></i>;
icon = <i className="sf3-font sf3-font-folder"></i>;
type = 'dir';
} else {
let index = node.object.name.lastIndexOf('.');
if (index === -1) {
icon = <i className="far fa-file"></i>;
icon = <i className="sf3-font sf3-font-file"></i>;
type = 'file';
} else {
let suffix = node.object.name.slice(index).toLowerCase();
if (suffix === '.png' || suffix === '.jpg' || suffix === '.jpeg' || suffix === '.gif' || suffix === '.bmp') {
icon = <i className="far fa-image"></i>;
icon = <i className="sf3-font sf3-font-image"></i>;
type = 'image';
}
else if (suffix === '.md' || suffix === '.markdown') {
icon = <i className="far fa-file-alt"></i>;
icon = <i className="sf3-font sf3-font-files2"></i>;
type = 'file';
}
else {
icon = <i className="far fa-file"></i>;
icon = <i className="sf3-font sf3-font-file"></i>;
type = 'file';
}
}
@ -318,7 +318,7 @@ class TreeNodeView extends React.Component {
{((userPerm === 'rw' || permission || isCustomPermission) && this.state.isShowOperationMenu) && (
<ItemDropdownMenu
item={this.props.node}
toggleClass={'fas fa-ellipsis-v'}
toggleClass={'sf3-font sf3-font-more-vertical'}
getMenuList={this.calculateMenuList}
onMenuItemClick={this.onMenuItemClick}
freezeItem={this.props.freezeItem}

View File

@ -160,7 +160,7 @@ class Item extends Component {
<Dropdown isOpen={this.state.isOpMenuOpen} toggle={this.toggleOpMenu}>
<DropdownToggle
tag="i"
className="sf-dropdown-toggle fa fa-ellipsis-v ml-0"
className="sf-dropdown-toggle sf3-font sf3-font-more-vertical ml-0"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -94,7 +94,7 @@ class UserAvatarForm extends React.Component {
<div className="col-auto position-relative" onMouseOver={this.handleMouseOver} onMouseOut={this.handleMouseOut} onFocus={this.handleMouseOver} tabIndex="0">
<img src={this.state.avatarSrc} width="80" height="80" alt="" className="user-avatar" />
<input type="file" name="avatar" className="d-none" onChange={this.fileInputChange} ref={this.fileInput} />
<span className={`avatar-edit fas fa-edit ${!this.state.isEditShown && 'd-none'}`} onClick={this.openFileInput} role="button" aria-label={gettext('Edit')} tabIndex="0" onKeyDown={this.onEditIconKeyDown}></span>
<span className={`avatar-edit sf3-font sf3-font-rename ${!this.state.isEditShown && 'd-none'}`} onClick={this.openFileInput} role="button" aria-label={gettext('Edit')} tabIndex="0" onKeyDown={this.onEditIconKeyDown}></span>
</div>
</form>
);

View File

@ -78,7 +78,14 @@ class WebAPIAuthToken extends React.Component {
<div className="d-flex align-items-center">
<label className="m-0 mr-2" htmlFor="token">{gettext('Token:')}</label>
<input id="token" className="border-0 mr-1" type="text" value={isAuthTokenVisible ? authToken : '****************************************'} readOnly={true} size={Math.max(authToken.length, 10)} />
<span tabIndex="0" role="button" aria-label={isAuthTokenVisible ? gettext('Hide') : gettext('Show')} onKeyDown={this.onIconKeyDown} onClick={this.toggleAuthTokenVisible} className={`eye-icon fas ${this.state.isAuthTokenVisible ? 'fa-eye': 'fa-eye-slash'}`}></span>
<span
tabIndex="0"
role="button"
aria-label={isAuthTokenVisible ? gettext('Hide') : gettext('Show')}
onKeyDown={this.onIconKeyDown}
onClick={this.toggleAuthTokenVisible}
className={`eye-icon sf3-font sf3-font-eye${this.state.isAuthTokenVisible ? '': '-slash'}`}
></span>
</div>
<button className="btn btn-outline-primary mt-2" onClick={this.deleteAuthToken}>{gettext('Delete')}</button>
</React.Fragment>

View File

@ -1,42 +1,56 @@
body {
overflow: hidden;
}
#wrapper {
height: 100%;
}
.file-view-header {
padding: 4px 10px;
background: #fff;
border-bottom: 1px solid #c9c9c9;
flex-shrink: 0;
}
.file-view-header .file-toolbar-more-operations {
height: 38px;
padding: 0;
}
.file-title {
font-size: 1.2rem;
font-weight: bold;
line-height: 1.5;
margin-bottom: 0;
}
.file-star {
font-size: .875rem;
color: #999;
margin-left: .5rem;
}
.file-star:hover,
.file-star:focus {
text-decoration: none;
color: #999;
}
.file-locked-icon {
margin-left: .5rem;
}
.meta-info {
font-size: .8125rem;
}
.file-view-content {
padding: 30px 0;
background: #f4f4f4;
border-right: 4px solid transparent;
}
.tip {
color: #808080;
}
@ -51,6 +65,7 @@ body {
animation: move .5s ease-in-out 1;
z-index: 50;
}
@keyframes move {
from {
right: -500px;
@ -61,10 +76,12 @@ body {
opacity: 1;
}
}
/* for mobile */
/* for mobile */
.file-view-body .seafile-comment {
width: 100%;
}
@media (min-width: 768px) {
.file-view-body .seafile-comment {
width: 300px;

View File

@ -312,7 +312,8 @@ img[src=""],img:not([src]) { /* for first loading img*/
padding: 0 1rem;
}
.cur-view-container .fa-star.fas {
.cur-view-container .sf3-font-star-empty.sf3-font,
.cur-view-container .sf3-font-star.sf3-font {
color: #999;
}

View File

@ -191,6 +191,8 @@
.dir-content-main .wiki-open-file {
width: 40px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-radius: 50%;
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);
@ -204,12 +206,6 @@
cursor: pointer;
}
.dir-content-main .wiki-open-file i {
position: absolute;
top: 12px;
left: 12px;
}
.dir-content-main .wiki-open-file:hover {
background-color: #f6f6f6;
}

View File

@ -194,8 +194,8 @@
padding-left: 0.5rem;
width: 30rem;
}
.search-page .search-page-container .fa-angle-double-up,
.search-page .search-page-container .fa-angle-double-down {
.search-page .search-page-container .sf3-font-angles-up,
.search-page .search-page-container .sf3-font-angles-down {
font-size: 1rem;
}
.search-page .advanced-search .search-file-types .search-input {

View File

@ -232,7 +232,7 @@ class FileHistory extends React.Component {
<div className="old-history-main">
<Fragment>
<a href="#" className="go-back" title="Back" onClick={this.goBack}>
<span className="fas fa-chevron-left"></span>
<span className="sf3-font sf3-font-down rotate-90 d-inline-block"></span>
</a>
<h2><span className="file-name">{fileName}</span>{' '}{gettext('History Versions')}</h2>
</Fragment>

View File

@ -52,7 +52,7 @@ class FileHistory extends React.Component {
<div className="history-header file-history-header flex-shrink-0">
<div className="title d-flex mw-100">
<a href="#" className="go-back" title="Back" onClick={this.onBackClick}>
<span className="fas fa-chevron-left"></span>
<span className="sf3-font sf3-font-down rotate-90 d-inline-block"></span>
</a>
<span className="name text-truncate" title={fileName}>{fileName}</span>
</div>

View File

@ -115,7 +115,7 @@ class MoreMenu extends React.PureComponent {
<Dropdown isOpen={this.state.dropdownOpen} toggle={this.dropdownToggle} direction="down" className="mx-1 old-history-more-operation">
<DropdownToggle
tag='i'
className='fa fa-ellipsis-v'
className='sf3-font sf3-font-more-vertical'
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -59,7 +59,7 @@ export default function UserInfo() {
{`${Utils.bytesToSize(user.quota_usage)} / ${user.quota_total > 0 ? Utils.bytesToSize(user.quota_total) : '--'}`}
<span
title={gettext('Edit')}
className="fa fa-pencil-alt attr-action-icon"
className="sf3-font sf3-font-rename attr-action-icon"
onClick={toggleSetQuotaDialog}>
</span>
</dd>

View File

@ -122,7 +122,7 @@ class Item extends React.Component {
<Dropdown isOpen={this.state.isOpMenuOpen} toggle={this.toggleOpMenu}>
<DropdownToggle
tag="i"
className="sf-dropdown-toggle fa fa-ellipsis-v ml-0"
className="sf-dropdown-toggle sf3-font sf3-font-more-vertical ml-0"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -162,7 +162,7 @@ class Item extends Component {
<Dropdown isOpen={this.state.isOpMenuOpen} toggle={this.toggleOpMenu}>
<DropdownToggle
tag="i"
className="sf-dropdown-toggle fa fa-ellipsis-v ml-0"
className="sf-dropdown-toggle sf3-font sf3-font-more-vertical ml-0"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -79,14 +79,14 @@ class HeaderToolbar extends React.Component {
<ButtonGroup>
<ButtonItem
text={gettext('Open parent directory')}
id={'parentDirectory'}
icon={'fa fa-folder-open'}
id='parentDirectory'
icon='sf3-font sf3-font-folder-open'
onMouseDown={this.openParentDirectory}
/>
{(canLockUnlockFile && !isLocked) && (
<ButtonItem
id="lock-unlock-file"
icon='fa fa-lock'
icon='sf3-font sf3-font-lock'
text={gettext('Lock')}
onMouseDown={this.props.toggleLockFile}
/>
@ -94,31 +94,31 @@ class HeaderToolbar extends React.Component {
{(canLockUnlockFile && lockedByMe) && (
<ButtonItem
id="lock-unlock-file"
icon='fa fa-unlock'
icon='sf3-font sf3-font-unlock'
text={gettext('Unlock')}
onMouseDown={this.props.toggleLockFile}
/>
)}
{canGenerateShareLink && (
<ButtonItem
id={'shareBtn'}
id='shareBtn'
text={gettext('Share')}
icon={'fa fa-share-alt'}
icon='sf3-font sf3-font-share'
onMouseDown={this.props.toggleShareLinkDialog}
/>
)}
{saving ?
<button type={'button'} aria-label={gettext('Saving...')} className={'btn btn-icon btn-secondary btn-active'}>
<i className={'fa fa-spin fa-spinner'}/>
<i className='sf3-font sf3-font-spinner'/>
</button>
:
<ButtonItem text={gettext('Save')} id={'saveButton'} icon={'fa fa-save'} disabled={!contentChanged}
<ButtonItem text={gettext('Save')} id={'saveButton'} icon='sf3-font sf3-font-save' disabled={!contentChanged}
onMouseDown={this.props.onSaveEditorContent} isActive={contentChanged}/>
}
{canDownloadFile && (
<ButtonItem
id="download-file"
icon="fa fa-download"
icon="sf3-font sf3-font-download1"
text={gettext('Download')}
onClick={this.downloadFile}
/>
@ -153,9 +153,9 @@ class HeaderToolbar extends React.Component {
<ButtonGroup>
{saving ?
<button type={'button'} aria-label={gettext('Saving...')} className={'btn btn-icon btn-secondary btn-active'}>
<i className={'fa fa-spin fa-spinner'}/></button>
<i className='sf3-font sf3-font-spinner'/></button>
:
<ButtonItem text={gettext('Save')} id={'saveButton'} icon={'fa fa-save'} disabled={!contentChanged}
<ButtonItem text={gettext('Save')} id={'saveButton'} icon='sf3-font sf3-font-save' disabled={!contentChanged}
onMouseDown={this.props.onSaveEditorContent} isActive={contentChanged}/>
}
</ButtonGroup>
@ -193,10 +193,10 @@ class HeaderToolbar extends React.Component {
<ButtonGroup>
{saving ?
<button type={'button'} className={'btn btn-icon btn-secondary btn-active'}>
<i className={'fa fa-spin fa-spinner'}/>
<i className='sf3-font sf3-font-spinner'/>
</button>
:
<ButtonItem id={'saveButton'} text={gettext('Save')} icon={'fa fa-save'} onMouseDown={this.props.onSaveEditorContent} disabled={!contentChanged} isActive={contentChanged} />
<ButtonItem id={'saveButton'} text={gettext('Save')} icon='sf3-font sf3-font-save' onMouseDown={this.props.onSaveEditorContent} disabled={!contentChanged} isActive={contentChanged} />
}
</ButtonGroup>
<MoreMenu
@ -215,12 +215,12 @@ class HeaderToolbar extends React.Component {
<ButtonGroup>
{saving ?
<button type={'button'} className={'btn btn-icon btn-secondary btn-active'}>
<i className={'fa fa-spin fa-spinner'}/></button>
<i className='sf3-font sf3-font-spinner'/></button>
:
<ButtonItem
id={'saveButton'}
text={gettext('Save')}
icon={'fa fa-save'}
icon='sf3-font sf3-font-save'
onMouseDown={this.props.onSaveEditorContent}
disabled={!contentChanged}
isActive={contentChanged}

View File

@ -51,7 +51,7 @@ class MoreMenu extends React.PureComponent {
return (
<Dropdown isOpen={this.state.dropdownOpen} toggle={this.dropdownToggle} direction="down" className="mx-1">
<DropdownToggle id="moreButton" aria-label={gettext('More operations')}>
<i className="fa fa-ellipsis-v"/>
<i className="sf3-font sf3-font-more-vertical"/>
<Tooltip toggle={this.tooltipToggle} delay={{show: 0, hide: 0}} target="moreButton" placement='bottom' isOpen={this.state.tooltipOpen}>{gettext('More')}
</Tooltip>
</DropdownToggle>

View File

@ -259,7 +259,7 @@ class MylibRepoMenu extends React.Component {
<Dropdown isOpen={this.state.isItemMenuShow} toggle={this.toggleOperationMenu}>
<DropdownToggle
tag="i"
className="sf-dropdown-toggle fa fa-ellipsis-v ml-0"
className="sf-dropdown-toggle sf3-font sf3-font-more-vertical ml-0"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -110,7 +110,7 @@ class GroupItem extends React.Component {
<td>{moment(group.created_at).fromNow()}</td>
<td>
{Utils.bytesToSize(group.quota)}{' '}
<span onClick={this.toggleSetQuotaDialog} title={gettext('Edit Quota')} className={`fa fa-pencil-alt attr-action-icon ${highlight ? '' : 'vh'}`}></span>
<span onClick={this.toggleSetQuotaDialog} title={gettext('Edit Quota')} className={`sf3-font sf3-font-rename attr-action-icon ${highlight ? '' : 'vh'}`}></span>
</td>
<td>
{isOpIconShown &&

View File

@ -64,7 +64,7 @@ class Content extends Component {
<h2>{gettext('No libraries')}</h2>
</EmptyTip>
);
const initialSortIcon = <span className="fas fa-sort"></span>;
const initialSortIcon = <span className="sf3-font sf3-font-sort3"></span>;
const sortIcon = <span className="sf3-font sf3-font-down"></span>;
const table = (
<Fragment>
@ -256,7 +256,7 @@ class RepoItem extends React.Component {
<Dropdown isOpen={this.state.isItemMenuShow} toggle={this.toggleOperationMenu}>
<DropdownToggle
tag="a"
className="attr-action-icon fas fa-ellipsis-v"
className="attr-action-icon sf3-font sf3-font-more-vertical"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -104,7 +104,7 @@ class GroupItem extends React.Component {
<Dropdown isOpen={this.state.isItemMenuShow} toggle={this.toggleOperationMenu}>
<DropdownToggle
tag="a"
className="attr-action-icon fas fa-ellipsis-v"
className="attr-action-icon sf3-font sf3-font-more-vertical"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -42,7 +42,7 @@ class Search extends React.Component {
render() {
return (
<div className="input-icon">
<i className="d-flex input-icon-addon fas fa-search"></i>
<i className="d-flex input-icon-addon sf3-font sf3-font-search"></i>
<input
type="text"
className="form-control search-input h-6 mr-1"
@ -295,7 +295,7 @@ class GroupItem extends React.Component {
<Dropdown isOpen={this.state.isItemMenuShow} toggle={this.toggleOperationMenu}>
<DropdownToggle
tag="a"
className="attr-action-icon fas fa-ellipsis-v"
className="attr-action-icon sf3-font sf3-font-more-vertical"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -205,7 +205,7 @@ class RepoItem extends React.Component {
<Dropdown isOpen={this.state.isItemMenuShow} toggle={this.toggleOperationMenu}>
<DropdownToggle
tag="a"
className="attr-action-icon fas fa-ellipsis-v"
className="attr-action-icon sf3-font sf3-font-more-vertical"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -183,7 +183,7 @@ class UserItem extends React.Component {
<Dropdown isOpen={this.state.isItemMenuShow} toggle={this.toggleOperationMenu}>
<DropdownToggle
tag="a"
className="attr-action-icon fas fa-ellipsis-v"
className="attr-action-icon sf3-font sf3-font-more-vertical"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -136,13 +136,13 @@ class Content extends Component {
<dt>{gettext('Name')}</dt>
<dd>
{name || '--'}
<span title={gettext('Edit')} className="attr-action-icon fa fa-pencil-alt" onClick={this.toggleSetNameDialog}></span>
<span title={gettext('Edit')} className="attr-action-icon sf3-font sf3-font-rename" onClick={this.toggleSetNameDialog}></span>
</dd>
<dt>{gettext('Contact Email')}</dt>
<dd>
{contact_email || '--'}
<span title={gettext('Edit')} className="attr-action-icon fa fa-pencil-alt" onClick={this.toggleSetContactEmailDialog}></span>
<span title={gettext('Edit')} className="attr-action-icon sf3-font sf3-font-rename" onClick={this.toggleSetContactEmailDialog}></span>
</dd>
<dt>{gettext('Organization')}</dt>
@ -151,7 +151,7 @@ class Content extends Component {
<dt>{gettext('Space Used / Quota')}</dt>
<dd>
{`${Utils.bytesToSize(quota_usage)}${quota_total > 0 ? ' / ' + Utils.bytesToSize(quota_total) : ''}`}
<span title={gettext('Edit')} className="attr-action-icon fa fa-pencil-alt" onClick={this.toggleSetQuotaDialog}></span>
<span title={gettext('Edit')} className="attr-action-icon sf3-font sf3-font-rename" onClick={this.toggleSetQuotaDialog}></span>
</dd>
</dl>
{isSetNameDialogOpen &&

View File

@ -97,7 +97,7 @@ class OrgUsers extends Component {
topbarChildren = (
<Fragment>
<button className={topBtn} title={gettext('Add admin')} onClick={this.toggleAddOrgAdmin}>
<i className="fas fa-plus-square text-secondary mr-1"></i>{gettext('Add admin')}
<i className="sf3-font sf3-font-enlarge text-secondary mr-1"></i>{gettext('Add admin')}
</button>
{this.state.isShowAddOrgAdminDialog &&
<ModalPortal>

View File

@ -59,7 +59,7 @@ class OrgUsersList extends React.Component {
let sortIcon;
if (sortBy == '') {
// initial sort icon
sortIcon = <span className="fas fa-sort"></span>;
sortIcon = <span className="sf3-font sf3-font-sort3"></span>;
} else {
sortIcon = <span className={`sf3-font ${sortOrder == 'asc' ? 'sf3-font-down rotate-180 d-inline-block' : 'sf3-font-down'}`}></span>;
}

View File

@ -48,7 +48,7 @@ class Search extends React.Component {
render() {
return (
<div className="input-icon">
<i className="d-flex input-icon-addon fas fa-search"></i>
<i className="d-flex input-icon-addon sf3-font sf3-font-search"></i>
<input
type="text"
className="form-control search-input h-6 mr-1"
@ -269,14 +269,14 @@ class OrgUsers extends Component {
<Fragment>
<button className="btn btn-secondary operation-item" onClick={this.toggleImportOrgUsersDialog}>{gettext('Import users')}</button>
<button className={topBtn} title={gettext('Add user')} onClick={this.toggleAddOrgUser}>
<i className="fas fa-plus-square text-secondary mr-1"></i>{gettext('Add user')}</button>
<i className="sf3-font sf3-font-enlarge text-secondary mr-1"></i>{gettext('Add user')}</button>
{orgEnableAdminInviteUser &&
<button className={topBtn} title={gettext('Invite users')} onClick={this.toggleInviteUserDialog}>
<i className="fas fa-plus-square text-secondary mr-1"></i>{gettext('Invite users')}</button>
<i className="sf3-font sf3-font-enlarge text-secondary mr-1"></i>{gettext('Invite users')}</button>
}
{invitationLink &&
<button className={topBtn} title={'通过微信邀请用户'} onClick={this.toggleInviteUserViaWeiXinDialog}>
<i className="fas fa-plus-square text-secondary mr-1"></i>{''}</button>
<i className="sf3-font sf3-font-enlarge text-secondary mr-1"></i>{''}</button>
}
{this.state.isImportOrgUsersDialogOpen &&
<ModalPortal>

View File

@ -164,7 +164,7 @@ class SidePanel extends Component {
<Dropdown isOpen={this.state.isHeaderMenuShow} toggle={this.toggleOperationMenu}>
<DropdownToggle
tag="i"
className="fas fa-ellipsis-v"
className="sf3-font sf3-font-more-vertical"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -125,7 +125,7 @@ class HistoryVersion extends React.Component {
? (
<>
<a
className={`fas fa-ellipsis-v ${(this.state.isShowOperationIcon || isHighlightItem) ? '' : 'invisible'}`}
className={`sf3-font sf3-font-more-vertical ${(this.state.isShowOperationIcon || isHighlightItem) ? '' : 'invisible'}`}
title={gettext('More operations')}
aria-label={gettext('More operations')}
aria-expanded={this.state.isMenuShow}
@ -158,7 +158,7 @@ class HistoryVersion extends React.Component {
: (<Dropdown isOpen={this.state.isMenuShow} toggle={this.onToggleClick}>
<DropdownToggle
tag='a'
className={`fas fa-ellipsis-v ${(this.state.isShowOperationIcon || isHighlightItem) ? '' : 'invisible'}`}
className={`sf3-font sf3-font-more-vertical ${(this.state.isShowOperationIcon || isHighlightItem) ? '' : 'invisible'}`}
data-toggle="dropdown"
aria-expanded={this.state.isMenuShow}
title={gettext('More operations')}

View File

@ -278,7 +278,7 @@ class SdocFileHistory extends React.Component {
id="sdoc-file-changes-last"
onClick={this.lastChange}
>
<span className="fas fa-chevron-up"></span>
<span className="sf3-font sf3-font-down rotate-180 d-inline-block"></span>
</div>
<div className="sdoc-file-changes-divider"></div>
<div
@ -286,7 +286,7 @@ class SdocFileHistory extends React.Component {
id="sdoc-file-changes-next"
onClick={this.nextChange}
>
<span className="fas fa-chevron-down"></span>
<span className="sf3-font sf3-font-down"></span>
</div>
<UncontrolledTooltip placement="bottom" target="sdoc-file-changes-last" delay={0} fade={false}>
{gettext('Last modification')}

View File

@ -204,7 +204,7 @@ class AdvancedSearch extends React.Component {
onChange={this.props.handleTimeFromInput}
showHourAndMinute={false}
/>
<span className="select-data-icon"><i className="fa fa-calendar-alt"></i></span>
<span className="select-data-icon"><i className="sf3-font sf3-font-calendar-alt"></i></span>
</Col>
<div className="mt-2">-</div>
<Col md="4" lg="4" sm="4" xs="5" className="position-relative">
@ -215,7 +215,7 @@ class AdvancedSearch extends React.Component {
onChange={this.props.handleTimeToInput}
showHourAndMinute={false}
/>
<span className="select-data-icon"><i className="fa fa-calendar-alt"></i></span>
<span className="select-data-icon"><i className="sf3-font sf3-font-calendar-alt"></i></span>
</Col>
</Row>
{errorDateMsg && <Row><Col md="2" lg="2"></Col><Col md="8" className="error mt-2">{errorDateMsg}</Col></Row>}

View File

@ -331,8 +331,8 @@ class SearchViewPanel extends React.Component {
onChange={this.handleSearchInput}
onKeyDown={this.handleKeyDown}
/>
<i className="search-icon-right input-icon-addon fas fa-search" onClick={this.handleSubmit}></i>
<i className={`fas action-icon fa-angle-double-${isCollapseOpen ? 'up' : 'down'}`} onClick={this.toggleCollapse}></i>
<i className="search-icon-right input-icon-addon sf3-font sf3-font-search" onClick={this.handleSubmit}></i>
<i className={`action-icon sf3-font sf3-font-angles-${isCollapseOpen ? 'up' : 'down'}`} onClick={this.toggleCollapse}></i>
</div>
{this.state.errorMsg && <div className="error">{this.state.errorMsg}</div>}
<AdvancedSearch

View File

@ -226,7 +226,7 @@ class Item extends Component {
role="button"
aria-label={gettext('Edit')}
title={gettext('Edit')}
className="fa fa-pencil-alt attr-action-icon"
className="sf3-font sf3-font-rename attr-action-icon"
onClick={this.onEditPermission}>
</a>
)}
@ -263,7 +263,7 @@ class Item extends Component {
<Dropdown isOpen={this.state.isOpMenuOpen} toggle={this.toggleOpMenu}>
<DropdownToggle
tag="i"
className="sf-dropdown-toggle fa fa-ellipsis-v ml-0"
className="sf-dropdown-toggle sf3-font sf3-font-more-vertical ml-0"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -240,7 +240,7 @@ class Item extends Component {
role="button"
aria-label={gettext('Edit')}
title={gettext('Edit')}
className="fa fa-pencil-alt attr-action-icon"
className="sf3-font sf3-font-rename attr-action-icon"
onClick={this.onEditPermission}>
</a>
)}
@ -277,7 +277,7 @@ class Item extends Component {
<Dropdown isOpen={this.state.isOpMenuOpen} toggle={this.toggleOpMenu}>
<DropdownToggle
tag="i"
className="sf-dropdown-toggle fa fa-ellipsis-v ml-0"
className="sf-dropdown-toggle sf3-font sf3-font-more-vertical ml-0"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -318,7 +318,7 @@ class Item extends Component {
<Dropdown isOpen={this.state.isOpMenuOpen} toggle={this.toggleOpMenu}>
<DropdownToggle
tag="i"
className="sf-dropdown-toggle fa fa-ellipsis-v ml-0"
className="sf-dropdown-toggle sf3-font sf3-font-more-vertical ml-0"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -169,7 +169,7 @@ class Item extends Component {
<Dropdown isOpen={this.state.isOpMenuOpen} toggle={this.toggleOpMenu}>
<DropdownToggle
tag="i"
className="sf-dropdown-toggle fa fa-ellipsis-v ml-0"
className="sf-dropdown-toggle sf3-font sf3-font-more-vertical ml-0"
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -410,7 +410,7 @@ class Item extends Component {
<Dropdown isOpen={this.state.isOpMenuOpen} toggle={this.toggleOpMenu}>
<DropdownToggle
tag="i"
className="sf-dropdown-toggle fa fa-ellipsis-v ml-0"
className="sf-dropdown-toggle sf3-font sf3-font-more-vertical ml-0"
title={gettext('More operations')}
data-toggle="dropdown"
aria-expanded={this.state.isOpMenuOpen}

View File

@ -81,7 +81,7 @@ class TopToolbar extends React.Component {
<Dropdown isOpen={this.state.isCreateMenuShow} toggle={this.onAddRepoToggle}>
<MediaQuery query="(min-width: 768px)">
<DropdownToggle className='btn btn-secondary operation-item'>
<i className="fas fa-plus-square text-secondary mr-1"></i>{gettext('Add Library')}
<i className="sf3-font sf3-font-enlarge text-secondary mr-1"></i>{gettext('Add Library')}
</DropdownToggle>
</MediaQuery>
<MediaQuery query="(max-width: 767.8px)">

View File

@ -261,7 +261,7 @@ class Item extends Component {
<Dropdown isOpen={this.state.isOpMenuOpen} toggle={this.toggleOpMenu}>
<DropdownToggle
tag="i"
className="sf-dropdown-toggle fa fa-ellipsis-v ml-0"
className="sf-dropdown-toggle sf3-font sf3-font-more-vertical ml-0"
title={gettext('More operations')}
data-toggle="dropdown"
aria-expanded={this.state.isOpMenuOpen}

View File

@ -117,7 +117,7 @@ class GroupItem extends React.Component {
<td>{moment(group.created_at).fromNow()}</td>
<td>
{Utils.bytesToSize(group.quota)}{' '}
<span onClick={this.toggleSetQuotaDialog} title={gettext('Edit')} className={`fa fa-pencil-alt attr-action-icon ${highlight ? '' : 'vh'}`}></span>
<span onClick={this.toggleSetQuotaDialog} title={gettext('Edit')} className={`sf3-font sf3-font-rename attr-action-icon ${highlight ? '' : 'vh'}`}></span>
</td>
<td>
{isOpIconShown &&

View File

@ -116,7 +116,7 @@ class DingtalkDepartmentsTreeNode extends Component {
>
<DropdownToggle
tag='i'
className='fa fa-ellipsis-v cursor-pointer attr-action-icon'
className='sf3-font sf3-font-more-vertical cursor-pointer attr-action-icon'
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -26,7 +26,7 @@ class Content extends Component {
return (
<span
title={gettext('Edit')}
className="fa fa-pencil-alt attr-action-icon"
className="sf3-font sf3-font-rename attr-action-icon"
onClick={action}>
</span>
);

View File

@ -54,7 +54,7 @@ class Content extends Component {
</EmptyTip>
);
const initialSortIcon = <span className="fas fa-sort"></span>;
const initialSortIcon = <span className="sf3-font sf3-font-sort3"></span>;
const sortIcon = <span className={`sf3-font ${sortOrder == 'asc' ? 'sf3-font-down rotate-180 d-inline-block' : 'sf3-font-down'}`}></span>;
const table = (
<Fragment>

View File

@ -39,7 +39,7 @@ class Content extends Component {
return (
<span
title={gettext('Edit')}
className="fa fa-pencil-alt attr-action-icon"
className="sf3-font sf3-font-rename attr-action-icon"
onClick={action}>
</span>
);

View File

@ -150,7 +150,7 @@ class AllRepos extends Component {
<Fragment>
<MainPanelTopbar search={this.getSearch()} {...this.props}>
<Button className="btn btn-secondary operation-item" onClick={this.toggleCreateRepoDialog}>
<i className="fas fa-plus-square text-secondary mr-1"></i>{gettext('New Library')}
<i className="sf3-font sf3-font-enlarge text-secondary mr-1"></i>{gettext('New Library')}
</Button>
</MainPanelTopbar>
<div className="main-panel-center flex-row">

View File

@ -66,7 +66,7 @@ class Content extends Component {
<h2>{gettext('No libraries')}</h2>
</EmptyTip>
);
const initialSortIcon = <span className="fas fa-sort"></span>;
const initialSortIcon = <span className="sf3-font sf3-font-sort3"></span>;
const sortIcon = <span className="sf3-font sf3-font-down"></span>;
const table = (
<Fragment>

View File

@ -39,7 +39,7 @@ class Search extends React.Component {
render() {
return (
<div className="input-icon">
<i className="d-flex input-icon-addon fas fa-search"></i>
<i className="d-flex input-icon-addon sf3-font sf3-font-search"></i>
<input
type="text"
className="form-control search-input h-6 mr-1"

View File

@ -89,7 +89,7 @@ class Content extends Component {
return (
<span
title={gettext('Edit')}
className="fa fa-pencil-alt attr-action-icon"
className="sf3-font sf3-font-rename attr-action-icon"
onClick={action}>
</span>
);

View File

@ -76,7 +76,7 @@ class Content extends Component {
let sortIcon;
if (sortBy == '') {
// initial sort icon
sortIcon = <span className="fas fa-sort"></span>;
sortIcon = <span className="sf3-font sf3-font-sort3"></span>;
} else {
sortIcon = <span className={`sf3-font ${sortOrder == 'asc' ? 'sf3-font-down rotate-180 d-inline-block' : 'sf3-font-down'}`}></span>;
}
@ -536,7 +536,7 @@ class Item extends Component {
{`${Utils.bytesToSize(item.quota_usage)} / ${item.quota_total > 0 ? Utils.bytesToSize(item.quota_total) : '--'}`}
<span
title={gettext('Edit')}
className={`fa fa-pencil-alt attr-action-icon ${isOpIconShown ? '' : 'invisible'}`}
className={`sf3-font sf3-font-rename attr-action-icon ${isOpIconShown ? '' : 'invisible'}`}
onClick={this.toggleSetQuotaDialog}>
</span>
</td>

View File

@ -116,7 +116,7 @@ class WorkWeixinDepartmentsTreeNode extends Component {
>
<DropdownToggle
tag='i'
className='fa fa-ellipsis-v cursor-pointer attr-action-icon'
className='sf3-font sf3-font-more-vertical cursor-pointer attr-action-icon'
title={gettext('More operations')}
aria-label={gettext('More operations')}
data-toggle="dropdown"

View File

@ -19,7 +19,7 @@ class ForbidUploadListItem extends React.Component {
<td>{Utils.bytesToSize(file.size)}</td>
<td>
<div className="d-flex align-items-center">
<span className="upload-failure-icon fas fa-exclamation mr-2"></span>
<span className="upload-failure-icon sf3-font sf3-font-info mr-2"></span>
<span className="upload-failure-msg">{gettext('File too large')}</span>
</div>
</td>

Some files were not shown because too many files have changed in this diff Show More