|
|
|
@ -1,7 +1,7 @@
|
|
|
|
|
import React, { Component } from 'react';
|
|
|
|
|
import { Link } from "react-router-dom";
|
|
|
|
|
import { markdownToHTML, configShareForCustom,getImageUrl} from 'educoder'
|
|
|
|
|
import { Divider, Tooltip } from 'antd';
|
|
|
|
|
import { markdownToHTML, configShareForCustom,getImageUrl,getUploadActionUrlthree,appendFileSizeToUploadFileAll} from 'educoder'
|
|
|
|
|
import { Divider, Tooltip,Upload,Spin} from 'antd';
|
|
|
|
|
import LoadingSpin from '../../../../common/LoadingSpin';
|
|
|
|
|
import 'antd/lib/pagination/style/index.css';
|
|
|
|
|
import '../shixunchildCss/Challenges.css';
|
|
|
|
@ -19,12 +19,16 @@ class Challengesjupyter extends Component {
|
|
|
|
|
iFrameHeight: '0px',
|
|
|
|
|
jupyter_port:0,
|
|
|
|
|
jupyter_url:null,
|
|
|
|
|
jupyter_urls:null,
|
|
|
|
|
username:"",
|
|
|
|
|
booljupyterurls:false,
|
|
|
|
|
loading:false,
|
|
|
|
|
boxoffsetHeigh:0,
|
|
|
|
|
opentitletype:true,
|
|
|
|
|
isopentitletype:"Less",
|
|
|
|
|
enlarge:false,
|
|
|
|
|
fileList:[],
|
|
|
|
|
shuaxin:false,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -47,44 +51,66 @@ class Challengesjupyter extends Component {
|
|
|
|
|
isopentitletype:"Less",
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
this.getjianjiesize()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}).catch((error) => {
|
|
|
|
|
//console.log(error)
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
getjianjiesize=()=>{
|
|
|
|
|
let {ChallengesDataList}=this.state;
|
|
|
|
|
let boxoffsetHeigh;
|
|
|
|
|
let box=document.getElementById("shixunchallengesid");
|
|
|
|
|
|
|
|
|
|
if(box){
|
|
|
|
|
boxoffsetHeigh=box.offsetHeight
|
|
|
|
|
if(ChallengesDataList === undefined || ChallengesDataList&&ChallengesDataList.description=== ""||ChallengesDataList&&ChallengesDataList.description===null||ChallengesDataList&&ChallengesDataList.description===undefined){
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
if(this.state.isopentitletype==="greater"){
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
if(boxoffsetHeigh>=300){
|
|
|
|
|
this.setState({
|
|
|
|
|
opentitletype:true,
|
|
|
|
|
isopentitletype:"greater",
|
|
|
|
|
boxoffsetHeigh:boxoffsetHeigh
|
|
|
|
|
})
|
|
|
|
|
}else{
|
|
|
|
|
this.setState({
|
|
|
|
|
isopentitletype:"Less",
|
|
|
|
|
boxoffsetHeigh:boxoffsetHeigh
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
componentDidUpdate = (prevProps,prevState) => {
|
|
|
|
|
|
|
|
|
|
//防止陷入无限循环
|
|
|
|
|
if(prevState.ChallengesDataList!=this.state.ChallengesDataList){
|
|
|
|
|
let boxoffsetHeigh;
|
|
|
|
|
let box=document.getElementById("shixunchallengesid");
|
|
|
|
|
if(box){
|
|
|
|
|
boxoffsetHeigh=box.offsetHeight
|
|
|
|
|
if(boxoffsetHeigh<300){
|
|
|
|
|
this.setState({
|
|
|
|
|
isopentitletype:"Less",
|
|
|
|
|
boxoffsetHeigh:boxoffsetHeigh
|
|
|
|
|
})
|
|
|
|
|
}else{
|
|
|
|
|
this.setState({
|
|
|
|
|
isopentitletype:"greater",
|
|
|
|
|
opentitletype:true,
|
|
|
|
|
boxoffsetHeigh:boxoffsetHeigh
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
if(this.state.isopentitletype==="greater"){
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
this.getjianjiesize()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
componentDidMount() {
|
|
|
|
|
var that=this;
|
|
|
|
|
setTimeout(this.ChallengesList(), 1000);
|
|
|
|
|
let id = this.props.match.params.shixunId;
|
|
|
|
|
let ChallengesURL = `/jupyters/get_info_with_tpm.json`;
|
|
|
|
|
let datas={
|
|
|
|
|
identifier:id,
|
|
|
|
|
}
|
|
|
|
|
let datas={
|
|
|
|
|
identifier:id,
|
|
|
|
|
}
|
|
|
|
|
axios.get(ChallengesURL, {params: datas}).then((response) => {
|
|
|
|
|
if (response.data.status === 403||response.data.status === 401||response.data.status === 500) {
|
|
|
|
|
setTimeout(() => {
|
|
|
|
@ -92,26 +118,24 @@ class Challengesjupyter extends Component {
|
|
|
|
|
booljupyterurls:true,
|
|
|
|
|
})
|
|
|
|
|
}, 600)
|
|
|
|
|
}else{
|
|
|
|
|
if(response.data.status===0){
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.setState({
|
|
|
|
|
jupyter_url:response.data.url,
|
|
|
|
|
jupyter_urls:response.data.url,
|
|
|
|
|
jupyter_port:response.data.port,
|
|
|
|
|
booljupyterurls:true,
|
|
|
|
|
})
|
|
|
|
|
}, 800)
|
|
|
|
|
}else{
|
|
|
|
|
if(response.data.status===0){
|
|
|
|
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.setState({
|
|
|
|
|
jupyter_url:response.data.url,
|
|
|
|
|
jupyter_port:response.data.port,
|
|
|
|
|
booljupyterurls:true,
|
|
|
|
|
})
|
|
|
|
|
}, 800)
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.setState({
|
|
|
|
|
booljupyterurls:true,
|
|
|
|
|
})
|
|
|
|
|
}, 600)
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.setState({
|
|
|
|
|
booljupyterurls:true,
|
|
|
|
|
})
|
|
|
|
|
}, 600)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}).catch((error) => {
|
|
|
|
@ -122,6 +146,22 @@ class Challengesjupyter extends Component {
|
|
|
|
|
}, 600)
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
setTimeout(this.getjianjiesize(), 1000);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
window.addEventListener('message', (e) => {
|
|
|
|
|
|
|
|
|
|
console.log(e);
|
|
|
|
|
if(e){
|
|
|
|
|
if(e.data){
|
|
|
|
|
if(e.data==="jupytermessage"){
|
|
|
|
|
that.modifyjupyter();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
updatamakedowns = () => {
|
|
|
|
@ -146,6 +186,7 @@ class Challengesjupyter extends Component {
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.setState({
|
|
|
|
|
jupyter_url:response.data.url,
|
|
|
|
|
jupyter_urls:response.data.url,
|
|
|
|
|
jupyter_port:response.data.port,
|
|
|
|
|
booljupyterurls:true,
|
|
|
|
|
})
|
|
|
|
@ -174,14 +215,16 @@ class Challengesjupyter extends Component {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
modifyjupyter=()=>{
|
|
|
|
|
this.props.showNotification('实训正在保存中...!');
|
|
|
|
|
|
|
|
|
|
let id=this.props.match.params.shixunId;
|
|
|
|
|
var jupyter_port="";
|
|
|
|
|
try{
|
|
|
|
|
jupyter_port= parseInt(this.state.jupyter_port);
|
|
|
|
|
}catch (e) {
|
|
|
|
|
jupyter_port=this.state.jupyter_port;
|
|
|
|
|
var jupyter_port="";
|
|
|
|
|
try{
|
|
|
|
|
jupyter_port= parseInt(this.state.jupyter_port);
|
|
|
|
|
}catch (e) {
|
|
|
|
|
jupyter_port=this.state.jupyter_port;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
const url=`/jupyters/save_with_tpm.json`;
|
|
|
|
|
const data={
|
|
|
|
|
identifier:id,
|
|
|
|
@ -190,9 +233,14 @@ class Challengesjupyter extends Component {
|
|
|
|
|
axios.get(url, {params: data})
|
|
|
|
|
.then((result) => {
|
|
|
|
|
if (result.data.status === 0) {
|
|
|
|
|
this.props.showNotification(`应用成功`);
|
|
|
|
|
// this.props.showNotification(`应用成功`);
|
|
|
|
|
console.log("应用成功了");
|
|
|
|
|
this.props.showNotification('实训保存成功!');
|
|
|
|
|
}else{
|
|
|
|
|
this.props.showNotification(result.data.message);
|
|
|
|
|
}
|
|
|
|
|
}).catch((error) => {
|
|
|
|
|
this.props.showNotification('实训保存失败!');
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
@ -201,10 +249,75 @@ class Challengesjupyter extends Component {
|
|
|
|
|
opentitletype:!this.state.opentitletype
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
onclki=(bool)=>{
|
|
|
|
|
this.setState({
|
|
|
|
|
enlarge:bool
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
Importingfiles=()=>{
|
|
|
|
|
// 导入文件
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
handleChange = (info) => {
|
|
|
|
|
if(info.file.status == "done" || info.file.status == "uploading" || info.file.status === 'removed'){
|
|
|
|
|
let fileList = info.fileList;
|
|
|
|
|
this.setState({
|
|
|
|
|
fileList: appendFileSizeToUploadFileAll(fileList),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if(info.file.status === 'done'){
|
|
|
|
|
if(info.file.response){
|
|
|
|
|
if(info.file.response.status===-1||info.file.response.status==="-1"){
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(info.file.response){
|
|
|
|
|
if(info.file.response.status===-1||info.file.response.status==="-1"){
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
if(info.file.response.status===0){
|
|
|
|
|
try {
|
|
|
|
|
this.modifyjupyter();
|
|
|
|
|
}catch (e) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
this.setState({
|
|
|
|
|
jupyter_url : null,
|
|
|
|
|
booljupyterurls:false,
|
|
|
|
|
})
|
|
|
|
|
setTimeout(()=>{
|
|
|
|
|
this.setState({
|
|
|
|
|
jupyter_url : this.state.jupyter_urls,
|
|
|
|
|
booljupyterurls:true,
|
|
|
|
|
})
|
|
|
|
|
},1000);
|
|
|
|
|
this.props.showNotification('上传文件成功!');
|
|
|
|
|
}catch (e) {
|
|
|
|
|
this.setState({
|
|
|
|
|
jupyter_url : null,
|
|
|
|
|
booljupyterurls:false,
|
|
|
|
|
})
|
|
|
|
|
setTimeout(()=>{
|
|
|
|
|
this.setState({
|
|
|
|
|
jupyter_url : this.state.jupyter_urls,
|
|
|
|
|
booljupyterurls:true,
|
|
|
|
|
})
|
|
|
|
|
},1000);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
render() {
|
|
|
|
|
let{ChallengesDataList,booljupyterurls}=this.state;
|
|
|
|
|
let{ChallengesDataList,booljupyterurls,enlarge,fileList}=this.state;
|
|
|
|
|
let id = this.props.match.params.shixunId;
|
|
|
|
|
//老师
|
|
|
|
|
const is_teacher = this.props&&this.props.current_user&&this.props.current_user.is_teacher?this.props.current_user.is_teacher:false;
|
|
|
|
@ -219,7 +332,35 @@ class Challengesjupyter extends Component {
|
|
|
|
|
}catch (e) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
const uploadProps = {
|
|
|
|
|
width: 600,
|
|
|
|
|
fileList,
|
|
|
|
|
multiple: false,
|
|
|
|
|
data:{
|
|
|
|
|
identifier:id,
|
|
|
|
|
},
|
|
|
|
|
//multiple 是否支持多选 查重的时候不能多选 不然弹许多框出来
|
|
|
|
|
// https://github.com/ant-design/ant-design/issues/15505
|
|
|
|
|
// showUploadList={false},然后外部拿到 fileList 数组自行渲染列表。
|
|
|
|
|
// showUploadList: false,
|
|
|
|
|
action: `${getUploadActionUrlthree()}`,
|
|
|
|
|
showUploadList:false,
|
|
|
|
|
onChange: this.handleChange,
|
|
|
|
|
beforeUpload: (file) => {
|
|
|
|
|
//上传前的操作
|
|
|
|
|
// console.log('beforeUpload', file.name);
|
|
|
|
|
if(file.name.indexOf('.ipynb') === -1){
|
|
|
|
|
this.props.showNotification('请上传10m以内ipynb格式的文件!');
|
|
|
|
|
return false
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
const isLt10M = file.size / 1024 / 1024 < 10;
|
|
|
|
|
if (!isLt10M) {
|
|
|
|
|
this.props.showNotification('请上传10m以内ipynb格式的文件!');
|
|
|
|
|
}
|
|
|
|
|
return isLt10M;
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
return (
|
|
|
|
|
<React.Fragment>
|
|
|
|
|
<div className="">
|
|
|
|
@ -227,23 +368,45 @@ class Challengesjupyter extends Component {
|
|
|
|
|
<div className={"shixunjianjie"}>
|
|
|
|
|
<span className="font-16 fl">简介</span>
|
|
|
|
|
<Tooltip placement="bottom" title={"编辑"}>
|
|
|
|
|
<Link style={{ display: this.props.identity < 5 && ChallengesDataList&&ChallengesDataList.shixun_status < 3 ? "block" : 'none' }}
|
|
|
|
|
to={"/shixuns/" + id + "/settings?edit=1"} className="fr color-blue font-14">
|
|
|
|
|
<a style={{ display: this.props.identity < 5 && ChallengesDataList&&ChallengesDataList.shixun_status < 3 ? "block" : 'none' }}
|
|
|
|
|
href={"/shixuns/" + id + "/settings?edit=1"} className="fr color-blue font-14">
|
|
|
|
|
编辑
|
|
|
|
|
</Link>
|
|
|
|
|
</a>
|
|
|
|
|
</Tooltip>
|
|
|
|
|
</div>
|
|
|
|
|
{this.state.opentitletype===true?<style>
|
|
|
|
|
{
|
|
|
|
|
`
|
|
|
|
|
|
|
|
|
|
<div>
|
|
|
|
|
<style>
|
|
|
|
|
{
|
|
|
|
|
`
|
|
|
|
|
.markdown-body img{
|
|
|
|
|
min-height: 200px;
|
|
|
|
|
}
|
|
|
|
|
`
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|
|
|
|
|
|
{ChallengesDataList === undefined || ChallengesDataList&&ChallengesDataList.description=== ""||ChallengesDataList&&ChallengesDataList.description===null||ChallengesDataList&&ChallengesDataList.description===undefined?<style>
|
|
|
|
|
{
|
|
|
|
|
`
|
|
|
|
|
#shixunchallengesid{
|
|
|
|
|
max-height: 300px;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
}
|
|
|
|
|
`
|
|
|
|
|
}
|
|
|
|
|
</style>:""}
|
|
|
|
|
<div>
|
|
|
|
|
}
|
|
|
|
|
</style>:""}
|
|
|
|
|
{ChallengesDataList === undefined || ChallengesDataList&&ChallengesDataList.description=== ""||ChallengesDataList&&ChallengesDataList.description===null||ChallengesDataList&&ChallengesDataList.description===undefined?"":this.state.isopentitletype==="greater"&&this.state.opentitletype===true?
|
|
|
|
|
<style>
|
|
|
|
|
{
|
|
|
|
|
`
|
|
|
|
|
#shixunchallengesid{
|
|
|
|
|
max-height:260px;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
}
|
|
|
|
|
`
|
|
|
|
|
}
|
|
|
|
|
</style>:""}
|
|
|
|
|
|
|
|
|
|
<div className={"pd20"} id={"shixunchallengesid"}>
|
|
|
|
|
<p id="ReactMarkdown" style={{overflow:'hidden'}}>
|
|
|
|
@ -320,18 +483,48 @@ class Challengesjupyter extends Component {
|
|
|
|
|
""
|
|
|
|
|
:
|
|
|
|
|
(
|
|
|
|
|
admin===true||business===true||mysidentity===true?
|
|
|
|
|
<div className={"shixunjianjiecballenges edu-back-white sortinxdirection mt20"}>
|
|
|
|
|
<div className="renwuxiangssi sortinxdirection">
|
|
|
|
|
<div><p className="renwuxiangqdiv">任务详情</p></div>
|
|
|
|
|
<div><p className="renwuxiangqdivtest ml1 shixunbingbaocun">(请将实训题目写在下方并保存)</p></div>
|
|
|
|
|
</div>
|
|
|
|
|
<div className="renwuxiangssit xaxisreverseorder">
|
|
|
|
|
<div className="challenbaocun" onClick={() => this.modifyjupyter(this.state)}><p
|
|
|
|
|
className="challenbaocuntest">应用到实训</p></div>
|
|
|
|
|
admin===true||business===true||mysidentity===true?
|
|
|
|
|
<div style={{
|
|
|
|
|
height: '63px',
|
|
|
|
|
}} className={enlarge?"shixunjianjiecballenges edu-back-white intermediatecenter fangdaone":"shixunjianjiecballenges edu-back-white mt20"}>
|
|
|
|
|
|
|
|
|
|
<div className={enlarge?"sortinxdirection jupyterswidth":"sortinxdirection"} >
|
|
|
|
|
<div className="renwuxiangssi sortinxdirection">
|
|
|
|
|
<div><p className="renwuxiangqdiv">任务详情</p></div>
|
|
|
|
|
<div><p className="renwuxiangqdivtest ml1 shixunbingbaocun">(请将实训题目写在下方并保存)</p></div>
|
|
|
|
|
</div>
|
|
|
|
|
<div className="renwuxiangssit xaxisreverseorder">
|
|
|
|
|
{
|
|
|
|
|
enlarge===true?
|
|
|
|
|
<i className="iconfont icon-suoxiao2 font-18 ml2 ysliconfont" style={{
|
|
|
|
|
marginLeft: '30px',
|
|
|
|
|
}} onClick={()=>this.onclki(false)}></i>
|
|
|
|
|
:
|
|
|
|
|
<i className="iconfont icon-fangda font-18 ml2 ysliconfont" style={{
|
|
|
|
|
marginLeft: '30px',
|
|
|
|
|
}} onClick={()=>this.onclki(true)}></i>
|
|
|
|
|
}
|
|
|
|
|
<style>
|
|
|
|
|
{
|
|
|
|
|
`
|
|
|
|
|
.ant-upload-list{
|
|
|
|
|
display:none
|
|
|
|
|
}
|
|
|
|
|
`
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|
<Upload {...uploadProps}>
|
|
|
|
|
<div className="challenbaocun" type="upload">
|
|
|
|
|
<p
|
|
|
|
|
className="challenbaocuntest" type="upload" >导入</p>
|
|
|
|
|
</div>
|
|
|
|
|
</Upload>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
:
|
|
|
|
|
|
|
|
|
|
:
|
|
|
|
|
""
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
@ -348,7 +541,6 @@ class Challengesjupyter extends Component {
|
|
|
|
|
}
|
|
|
|
|
iframe {
|
|
|
|
|
border-left: 1px solid #eeeeee;
|
|
|
|
|
border-top: 1px solid #eeeeee;
|
|
|
|
|
border-right: 1px solid #eeeeee;
|
|
|
|
|
border-bottom: 1px solid #eeeeee;
|
|
|
|
|
}
|
|
|
|
@ -363,25 +555,26 @@ class Challengesjupyter extends Component {
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|
{
|
|
|
|
|
admin===true||business===true||mysidentity===true?
|
|
|
|
|
<div>
|
|
|
|
|
<div className="pb47">
|
|
|
|
|
{
|
|
|
|
|
this.state.jupyter_url===null || this.state.jupyter_url===undefined?
|
|
|
|
|
(
|
|
|
|
|
booljupyterurls===false?
|
|
|
|
|
<LoadingSpin></LoadingSpin>
|
|
|
|
|
:""
|
|
|
|
|
)
|
|
|
|
|
:
|
|
|
|
|
<iframe src={this.state.jupyter_url}
|
|
|
|
|
sandbox="allow-same-origin allow-scripts allow-top-navigation " scrolling="no" id="frame"
|
|
|
|
|
name="framename" width="100%" height="700" frameBorder="0"
|
|
|
|
|
></iframe>
|
|
|
|
|
}
|
|
|
|
|
</div>
|
|
|
|
|
admin===true||business===true||mysidentity===true?
|
|
|
|
|
<div>
|
|
|
|
|
<div className="pb47">
|
|
|
|
|
{
|
|
|
|
|
this.state.jupyter_url===null || this.state.jupyter_url===undefined?
|
|
|
|
|
(
|
|
|
|
|
booljupyterurls===false?
|
|
|
|
|
<LoadingSpin></LoadingSpin>
|
|
|
|
|
:""
|
|
|
|
|
)
|
|
|
|
|
:
|
|
|
|
|
|
|
|
|
|
<iframe src={this.state.jupyter_url} className={enlarge?"fangdatwo":""}
|
|
|
|
|
scrolling="no" id="frame"
|
|
|
|
|
name="framename" width="100%" height="700" frameBorder="0"
|
|
|
|
|
></iframe>
|
|
|
|
|
}
|
|
|
|
|
</div>
|
|
|
|
|
:""
|
|
|
|
|
</div>
|
|
|
|
|
:""
|
|
|
|
|
}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|