copy iconfont

dev_hjm
hjm 6 years ago
parent 23f58a0c33
commit c6b6a85a5c

File diff suppressed because one or more lines are too long

@ -20,7 +20,7 @@ class ActionBtn extends Component {
className={"Actionbtn "+`${map[style || 'blue']} ${this.props.className}`} className={"Actionbtn "+`${map[style || 'blue']} ${this.props.className}`}
>{children}</a> >{children}</a>
: :
<Link to={to} className={"btn "+`${map[this.props.style]} ${this.props.className}`}>{this.props.children}</Link> <Link to={to} className={"btn "+`${map[this.props.style]} ${this.props.className}`} {...others}>{this.props.children}</Link>
} }
</React.Fragment> </React.Fragment>
) )

@ -32,8 +32,8 @@ function HeadlessModal (props) {
} }
.headless .closeBtn { .headless .closeBtn {
position: absolute; position: absolute;
top: -18px; top: -20px;
right: -12px; right: -14px;
font-size: 24px !important; font-size: 24px !important;
color: ${theme.foreground_select} color: ${theme.foreground_select}
} }

@ -8,6 +8,7 @@ import EditVideoModal from './EditVideoModal'
import './InfosVideo.css' import './InfosVideo.css'
import InfoTab from '../common/InfoTab' import InfoTab from '../common/InfoTab'
import HeadlessModal from '../common/HeadlessModal' import HeadlessModal from '../common/HeadlessModal'
import ClipboardJS from 'clipboard'
function useModal(initValue) { function useModal(initValue) {
const [visible, setVisible] = useState(initValue) const [visible, setVisible] = useState(initValue)
@ -38,8 +39,10 @@ function usePagination() {
} }
} }
const PAGE_SIZE = 3 const PAGE_SIZE = 3
const DEFAULT_VIDEO_WIDTH_IN_MD = "90%" // 400
const DEFAULT_VIDEO_HEIGHT_IN_MD = "55%" // 400
let videoId = {}; let videoId = {};
let _clipboard = null;
function InfoVideo (props) { function InfoVideo (props) {
const [videoes, setVideoes] = useState([]) const [videoes, setVideoes] = useState([])
const [reviewVideoes, setReviewVideoes] = useState([]) const [reviewVideoes, setReviewVideoes] = useState([])
@ -53,7 +56,7 @@ function InfoVideo (props) {
const editModalEl = useRef(null); const editModalEl = useRef(null);
const videoEl = useRef(null); const videoEl = useRef(null);
const { showNotification } = props;
const username = props.match.params.username const username = props.match.params.username
function fetchVideoes() { function fetchVideoes() {
@ -107,10 +110,26 @@ function InfoVideo (props) {
if (videoModalObj.visible == false) { if (videoModalObj.visible == false) {
// 关闭视频 // 关闭视频
videoEl.current && videoEl.current.pause() videoEl.current && videoEl.current.pause()
if (_clipboard) {
_clipboard.destroy();
_clipboard = null;
}
} else { } else {
setTimeout(() => {
if (!_clipboard) {
_clipboard = new ClipboardJS('.copybtn');
_clipboard.on('success', (e) => {
showNotification('复制成功')
});
}
}, 200)
} }
}, [videoModalObj.visible]) }, [videoModalObj.visible])
useEffect(() => {
}, [])
function editSuccess() { function editSuccess() {
fetchVideoes() fetchVideoes()
} }
@ -128,11 +147,16 @@ function InfoVideo (props) {
videoId = { videoId = {
videoId: item.id, videoId: item.id,
title: item.title, title: item.title,
file_url: item.file_url file_url: item.file_url,
cover_url: item.cover_url
} }
videoModalObj.setVisible(true) videoModalObj.setVisible(true)
} }
const _inputValue = `<video src="${videoId.file_url}" controls="true" controlslist="nodownload" width="400">您的浏览器不支持 video 标签。</video>` function getCopyText (file_url, cover_url) {
return `<video src="${file_url}" controls="true" controlslist="nodownload" width="${DEFAULT_VIDEO_WIDTH_IN_MD}" height="${DEFAULT_VIDEO_HEIGHT_IN_MD}" poster="${cover_url}">您的浏览器不支持 video 标签。</video>`
}
const _inputValue = getCopyText(videoId.file_url, videoId.cover_url)
return ( return (
<div className="educontent infoVideo"> <div className="educontent infoVideo">
<EditVideoModal {...props} {...editModalObj} <EditVideoModal {...props} {...editModalObj}
@ -154,7 +178,7 @@ function InfoVideo (props) {
<Input value={_inputValue} <Input value={_inputValue}
className="dark" className="dark"
></Input> ></Input>
<ActionBtn>复制视频地址</ActionBtn> <ActionBtn className="copybtn" data-clipboard-text={_inputValue}>复制视频地址</ActionBtn>
</div> </div>
</HeadlessModal> </HeadlessModal>
<style>{` <style>{`
@ -233,6 +257,7 @@ function InfoVideo (props) {
key={item.id} key={item.id}
onEditVideo={onEditVideo} onEditVideo={onEditVideo}
onMaskClick={onMaskClick} onMaskClick={onMaskClick}
getCopyText={getCopyText}
> >
</VideoInReviewItem>) </VideoInReviewItem>)

@ -4,6 +4,7 @@ import { getUrl2, isDev, CBreadcrumb, ActionBtn, ThemeContext } from 'educoder'
import axios from 'axios' import axios from 'axios'
import moment from 'moment' import moment from 'moment'
import playIcon from './images/play.png' import playIcon from './images/play.png'
import ClipboardJS from 'clipboard'
/** /**
cover_url: "http://video.educoder.net/f6ba49c3944b43ee98736898e31b7d88/snapshots/12da3f7df07c499b8f0fc6dc410094e9-00005.jpg" cover_url: "http://video.educoder.net/f6ba49c3944b43ee98736898e31b7d88/snapshots/12da3f7df07c499b8f0fc6dc410094e9-00005.jpg"
@ -14,11 +15,22 @@ published_at: "2019-08-12 15:38:00"
title: "测试标题" title: "测试标题"
updated_at: "2019-08-12 17:17:09" updated_at: "2019-08-12 17:17:09"
*/ */
let _clipboard = null;
function VideoInReviewItem (props) { function VideoInReviewItem (props) {
const theme = useContext(ThemeContext); const theme = useContext(ThemeContext);
const { history, cover_url, title, created_at, isReview const { history, file_url, cover_url, title, created_at, isReview, id
, onEditVideo, onMaskClick } = props; , onEditVideo, onMaskClick, getCopyText, showNotification } = props;
useEffect(()=> {
if (!isReview) {
_clipboard = new ClipboardJS(`.copybtn_item_${id}`);
_clipboard.on('success', (e) => {
showNotification('复制成功')
});
}
return () => {
_clipboard && _clipboard.destroy();
}
}, [])
const username = props.match.params.username const username = props.match.params.username
function toList() { function toList() {
history.push(`/users/${username}/videoes`) history.push(`/users/${username}/videoes`)
@ -43,10 +55,12 @@ function VideoInReviewItem (props) {
<span className="time">{moment(created_at).format('YYYY-MM-DD HH:mm:ss')}</span> <span className="time">{moment(created_at).format('YYYY-MM-DD HH:mm:ss')}</span>
{ isReview != true && <div> { isReview != true && <div>
<Tooltip title="编辑"> <Tooltip title="编辑">
<i className="icon-fuzhi iconfont" onClick={() => onEditVideo(props)}></i> <i className="icon-bianji1 iconfont" onClick={() => onEditVideo(props)}
style={{ marginTop: '1px', display: 'inline-block'}}
></i>
</Tooltip> </Tooltip>
<Tooltip title="复制视频地址"> <Tooltip title="复制视频地址">
<i className="icon-fuzhi iconfont"></i> <i className={`icon-fuzhi iconfont copybtn_item_${id}`} data-clipboard-text={getCopyText(file_url, cover_url)}></i>
</Tooltip> </Tooltip>
</div> } </div> }
</div> </div>

Loading…
Cancel
Save