Spaces:
Configuration error
Configuration error
File size: 7,419 Bytes
c132e32 67a483e 7f30a93 67a483e a53f3f6 c4929ba 67a483e c132e32 cbe21a9 c132e32 a53f3f6 c132e32 67a483e 7f30a93 c132e32 67a483e c132e32 7f30a93 67a483e a53f3f6 7f30a93 a53f3f6 c132e32 a53f3f6 c4929ba 67a483e c4929ba 7f30a93 771fa31 7f30a93 67a483e 7f30a93 a53f3f6 c132e32 c4929ba 67a483e a53f3f6 7f30a93 a53f3f6 67a483e c4929ba 67a483e c4929ba a53f3f6 67a483e a53f3f6 67a483e a53f3f6 67a483e c4929ba 67a483e c132e32 120450c 67a483e 771fa31 67a483e 120450c 7f30a93 c132e32 120450c 67a483e a53f3f6 771fa31 7f30a93 67a483e a53f3f6 67a483e 7f30a93 67a483e a53f3f6 67a483e a53f3f6 67a483e 2e9d0a6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
import React from "react"
import {TbResize} from 'react-icons/tb'
import {BiCube, BiRefresh} from 'react-icons/bi'
import {BsTrash} from 'react-icons/bs'
import {CgLayoutGridSmall} from 'react-icons/cg'
import '../../css/counter.css'
export default class CustomNodeIframe extends React.Component {
constructor({id , data}){
super()
this.myRef = React.createRef()
this.state = {
id : id,
reachable : this.isFetchable(data.host),
selected : true,
data : data,
width : 540,
height : 600,
size : false,
iframe : 0
}
}
handelSelected = () => {
this.setState({id : this.state.id, reachable : this.state.reachable, selected : !this.state.selected, data : this.state.data, width : this.state.width, height : this.state.height, size : this.state.size, iframe : this.state.iframe})
}
handelSizeState = () => {
this.setState({id : this.state.id, reachable : this.state.reachable, selected : this.state.selected, data : this.state.data, width : this.state.width, height : this.state.height, size : !this.state.size, iframe : this.state.iframe})
}
isFetchable = async (host) => {
fetch(host, {mode: 'no-cors'}).then((re) => {
return true
}).catch((err)=>{
alert(`🤪 Something went wrong the url that that was put in is not reachable...\n\n${err}`)
return false
})
return false
}
onNodeClick = (id) => {
this.state.data.delete(id)
}
onRefresh(){
if(!this.isFetchable) this.onNodeClick(this.state.data.label)
else{
this.setState({id : this.state.id, reachable : this.state.reachable, selected : this.state.selected, data : this.state.data, width : this.state.width, height : this.state.height, size : this.state.size, iframe : this.state.iframe + 1})
}
}
handelOnChange(evt, type){
this.setState({id : this.state.id, reachable : this.state.reachable, selected : this.state.selected, data : this.state.data, width : type === "width" ? parseInt(evt.target.value) : this.state.width, height : type === "height" ? parseInt(evt.target.value) : this.state.height, size : this.state.size, iframe : this.state.iframe})
type === "width" ? this.myRef.current.style.width = `${parseInt(evt.target.value)}px` : this.myRef.current.style.height = `${parseInt(evt.target.value)}px`
}
handelSize(evt, increment, change){
if (evt === "increment") {
this.setState({id : this.state.id, reachable : this.state.reachable, selected : this.state.selected, data : this.state.data, width : change === "width" ? this.state.width + increment : this.state.width, height : change === "height" ? this.state.height + increment : this.state.height, size : this.state.size, iframe : this.state.iframe})
change === "width" ? this.myRef.current.style.width = `${this.state.width + increment}px` : this.myRef.current.style.height = `${this.state.height + increment}px`
}
}
Counter(focus, size){
return (<div className="custom-number-input h-10 w-32 dark:text-white text-black ">
<div className="flex flex-row h-10 w-full rounded-lg relative bg-transparent">
<button data-action="decrement" className=" border-2 border-dotted border-Retro-dark-blue hover:border-rose-700 rounded-l-xl hover:animate-pulse h-full w-20 cursor-pointer outline-none " onClick={(e)=> {this.handelSize("increment", -5, focus)}}>
<span className="m-auto text-2xl font-bold">−</span>
</button>
<input type="number" className="focus:outline-none border-Retro-dark-blue border-y-2 border-dotted text-center w-full font-semibold text-md focus:from-fuchsia-200 md:text-basecursor-default flex items-cente outline-none bg-transparent" name="input-number" value={size} onChange={(e) => this.handelOnChange(e, focus)} onKeyDown={(e) => {this.handelSize(e.key, size, focus)}}></input>
<button data-action="increment" className="border-2 border-dotted border-Retro-dark-blue hover:border-green-400 rounded-r-xl hover:animate-pulse h-full w-20 cursor-pointer" onClick={(e)=> {this.handelSize("increment", 5, focus)}} >
<span className="m-auto text-2xl font-bold">+</span>
</button>
</div>
</div>)
}
render(){
if (!this.state.reachable) this.onNodeClick(this.state.data.label)
return (<>
<>
<div className=" flex w-full h-10 top-0 cursor-pointer" onClick={this.handelEvent}>
<div title="Collaspse Node" className=" duration-300 cursor-pointer shadow-xl border-2 border-white h-10 w-10 mr-2 -mt-3 bg-Warm-Blue rounded-xl" onClick={this.handelSelected}><CgLayoutGridSmall className="h-full w-full text-white p-1"/></div>
<div className={` flex ${this.state.selected ? '' : 'w-0 hidden'}`}>
<div title="Adjust Node Size" className="duration-300 cursor-pointer shadow-xl border-2 dark:border-white border-white h-10 w-10 mr-2 -mt-3 bg-Warm-Violet rounded-xl" onClick={this.handelSizeState}><TbResize className="h-full w-full text-white p-1"/></div>
<a href={this.state.data.host} target="_blank" rel="noopener noreferrer"><div title="Gradio Host Site" className="duration-300 cursor-pointer shadow-xl border-2 dark:border-white border-white h-10 w-10 mr-2 -mt-3 bg-Warm-Pink rounded-xl"><BiCube className="h-full w-full text-white p-1"/></div></a>
<div title="Delete Node" className="duration-300 cursor-pointer shadow-xl border-2 dark:border-white border-white h-10 w-10 mr-2 -mt-3 bg-Warm-Red rounded-xl" onClick={() => this.onNodeClick(this.state.data.label)}><BsTrash className="h-full w-full text-white p-1"/></div>
<div title="Refresh Node" className="duration-300 cursor-pointer shadow-xl border-2 dark:border-white border-white h-10 w-10 mr-2 -mt-3 bg-Warm-Orange rounded-xl" onClick={() => this.onRefresh()}><BiRefresh className="h-full w-full text-white p-1"/></div>
{ this.state.size && <div className="duration-300 flex w-auto h-full mr-2 -mt-3 space-x-4">
{this.Counter("width", this.state.width)}
{this.Counter("height", this.state.height)}
</div>}
</div>
</div>
<div className={`relative w-[540px] h-[600px] overflow-hidden m-0 p-0 shadow-2xl`} ref={this.myRef}>
<div className={`absolute h-full w-full ${this.state.data.colour} border-1shadow-2xl shadow-black rounded-xl -z-20`}></div>
<iframe
id="iframe"
key={this.state.iframe}
src={this.state.data.host}
title={this.state.data.label}
frameBorder="0"
className=" -z-10 container h-full p-2 flex-grow space-iframe overflow-scroll "
sandbox="allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"></iframe>
</div>
</>
</>)
}
}
|