Floating window tetap berada pada halaman artikel
Tombol Connect menampilkan WebChat sebagai panel fixed di atas halaman. Animasi opener menggunakan kombinasi fade, scale dan slide ringan. Saat Close ditekan animasi berjalan terbalik sebelum iframe dihentikan.
Network IRC yang Tersedia
DALnet
dal.net/webchat
Default Network
Libera.Chat
web.libera.chat
Web IRC
QuakeNet
webchat.quakenet.org
WebChat
Undernet
chat.undernet.org
WebChat
EFnet
chat.efnet.org
Web IRC
IRCnet
webchat.ircnet.net
Web IRC
Cara Kerja Widget Multi Server
JavaScript menyimpan konfigurasi WebChat masing-masing network. Ketika pengguna memilih network lalu menekan Connect, script membangun alamat WebChat yang sesuai dan memasukkannya ke floating window.
01
NETWORK
Pilih IRC
02
NICKNAME
JohnDoe
03
CHANNEL
#codeflare
04
WEBCHAT
Floating Panel
Kode Widget IRC Modern
Jika Anda lebih menyukai tampilan modern, gunakan versi ini. Widget modern dirancang dengan interface terminal futuristik, dukungan multi-network, floating WebChat window, animasi opening dan closing serta layout responsif untuk desktop maupun mobile.
MODERN BUILD // INSTALLATION PACKAGE
Paket Kode Widget IRC Modern
Untuk memasang widget secara lengkap, copy ketiga bagian kode berikut secara berurutan. HTML digunakan untuk struktur widget, JavaScript menangani koneksi WebChat dan interaksi, sedangkan CSS mengatur desain serta animasi.
01
HTML
02
JavaScript
03
CSS
READY TO DEPLOY
Urutan pemasangan
Pastikan seluruh HTML, JavaScript dan CSS ikut digunakan. Jika salah satu bagian tidak dipasang, fungsi atau tampilan widget dapat berjalan tidak sempurna.
<div class="cfIRCWrap">
<div class="cfIRCWidget">
<div class="cfIRCGlow"></div>
<div class="cfIRCScanner"></div>
<div class="cfIRCHeader">
<div class="cfIRCBrand">
<div class="cfIRCAvatar">
<i class="fa fa-comments"></i>
<span></span>
</div>
<div>
<strong>IRC WEBCHAT</strong>
<small>CODEFLARE MULTI NETWORK TERMINAL</small>
</div>
</div>
<div class="cfIRCOnline">
<i></i> READY
</div>
</div>
<div class="cfIRCDivider">
<span></span><i></i><span></span>
</div>
<div class="cfIRCForm">
<div class="cfIRCField">
<label><i class="fa fa-server"></i> IRC Network</label>
<div class="cfIRCSelect">
<i class="fa fa-globe"></i>
<select class="cfIRCNetwork">
<option value="dalnet">DALnet</option>
<option value="libera">Libera.Chat</option>
<option value="quakenet">QuakeNet</option>
<option value="undernet">Undernet</option>
<option value="efnet">EFnet</option>
<option value="ircnet">IRCnet</option>
</select>
<i class="fa fa-angle-down cfIRCSelectArrow"></i>
</div>
</div>
<div class="cfIRCField">
<label>
<i class="fa fa-user-secret"></i>
Nickname
</label>
<div class="cfIRCInput">
<i class="fa fa-user"></i>
<input class="cfIRCNick"
type="text"
value="JohnDoe"
maxlength="30" />
</div>
</div>
<div class="cfIRCField">
<label>
<i class="fa fa-hashtag"></i>
Channel
</label>
<div class="cfIRCInput">
<i class="fa fa-hashtag"></i>
<input class="cfIRCChannel"
type="text"
value="codeflare"
maxlength="50" />
</div>
</div>
</div>
<div class="cfIRCActions">
<button class="cfIRCConnect" type="button">
<i class="fa fa-plug"></i>
CONNECT WEBCHAT
</button>
<button class="cfIRCExternal" type="button">
<i class="fa fa-external-link"></i>
</button>
</div>
</div>
<div class="cfIRCOverlay">
<div class="cfIRCPanel">
<div class="cfIRCPanelHead">
<button class="cfIRCCommandsBtn" type="button">
<i class="fa fa-terminal"></i>
Basic Commands
<i class="fa fa-plus-square cfIRCCommandIcon"></i>
</button>
<div class="cfIRCPanelTitle">
<strong class="cfIRCPanelNetwork">DALNET IRC</strong>
</div>
<button class="cfIRCClose" type="button">
Close
<i class="fa fa-window-close"></i>
</button>
</div>
<div class="cfIRCChatBox">
<iframe
class="cfIRCFrame"
title="IRC WebChat">
</iframe>
</div>
</div>
</div>
</div>
<script>
//<![CDATA[
(function(){
'use strict';
/* ========================================
NETWORK DATABASE
======================================== */
var NETWORKS={
dalnet:{
name:'DALnet',
label:'DALNET',
display:'www.dal.net/webchat/',
url:function(nick,channel){
return 'https://www.dal.net/webchat/?nick='
+encodeURIComponent(nick)
+'&channels='
+encodeURIComponent('#'+channel);
}
},
libera:{
name:'Libera.Chat',
label:'LIBERA',
display:'web.libera.chat',
url:function(nick,channel){
return 'https://web.libera.chat/?nick='
+encodeURIComponent(nick)
+'?#'
+encodeURIComponent(channel);
}
},
quakenet:{
name:'QuakeNet',
label:'QUAKENET',
display:'webchat.quakenet.org',
url:function(nick,channel){
return 'https://webchat.quakenet.org/?channels='
+encodeURIComponent(channel)
+'&nick='
+encodeURIComponent(nick);
}
},
undernet:{
name:'Undernet',
label:'UNDERNET',
display:'chat.undernet.org',
url:function(){
return 'https://chat.undernet.org/';
}
},
efnet:{
name:'EFnet',
label:'EFNET',
display:'chat.efnet.org',
url:function(){
return 'https://chat.efnet.org/';
}
},
ircnet:{
name:'IRCnet',
label:'IRCNET',
display:'webchat.ircnet.net',
url:function(nick,channel){
return 'https://webchat.ircnet.net/?channels='
+encodeURIComponent(channel)
+'&nick='
+encodeURIComponent(nick);
}
}
};
/* ========================================
HELPERS
======================================== */
function cleanNick(value){
return String(value||'')
.trim()
.replace(/\s+/g,'');
}
function cleanChannel(value){
return String(value||'')
.trim()
.replace(/^#+/,'')
.replace(/\s+/g,'');
}
/* ========================================
WIDGET INIT
======================================== */
var widgets=
document.querySelectorAll(
'.cfIRCWrap'
);
Array.prototype.forEach.call(
widgets,
function(wrapper){
var widget=
wrapper.querySelector(
'.cfIRCWidget'
);
var overlay=
wrapper.querySelector(
'.cfIRCOverlay'
);
if(!widget || !overlay){
return;
}
var panel=
overlay.querySelector(
'.cfIRCPanel'
);
var network=
widget.querySelector(
'.cfIRCNetwork'
);
var nick=
widget.querySelector(
'.cfIRCNick'
);
var channel=
widget.querySelector(
'.cfIRCChannel'
);
var connect=
widget.querySelector(
'.cfIRCConnect'
);
var external=
widget.querySelector(
'.cfIRCExternal'
);
var status=
widget.querySelector(
'.cfIRCStatusText'
);
var statusNetwork=
widget.querySelector(
'.cfIRCStatusNetwork'
);
var networkName=
widget.querySelector(
'.cfIRCNetworkName'
);
var networkURL=
widget.querySelector(
'.cfIRCNetworkURL'
);
var frame=
overlay.querySelector(
'.cfIRCFrame'
);
var close=
overlay.querySelector(
'.cfIRCClose'
);
var commandsBtn=
overlay.querySelector(
'.cfIRCCommandsBtn'
);
var commandIcon=
overlay.querySelector(
'.cfIRCCommandIcon'
);
var chatBox=
overlay.querySelector(
'.cfIRCChatBox'
);
var commandsPanel=
overlay.querySelector(
'.cfIRCCommandsPanel'
);
var panelNetwork=
overlay.querySelector(
'.cfIRCPanelNetwork'
);
var panelChannel=
overlay.querySelector(
'.cfIRCPanelChannel'
);
var panelNick=
overlay.querySelector(
'.cfIRCPanelNick'
);
var panelSession=
overlay.querySelector(
'.cfIRCPanelSession'
);
/* ========================================
CURRENT VALUES
======================================== */
function getValues(){
var networkID=
network.value||'dalnet';
var nickname=
cleanNick(
nick.value
);
var channelName=
cleanChannel(
channel.value
);
if(!nickname){
nickname='JohnDoe';
nick.value=
nickname;
}
if(!channelName){
channelName='codeflare';
channel.value=
channelName;
}
return {
network:networkID,
nick:nickname,
channel:channelName
};
}
/* ========================================
BUILD WEBCHAT URL
======================================== */
function buildURL(){
var data=
getValues();
var config=
NETWORKS[
data.network
]||
NETWORKS.dalnet;
return config.url(
data.nick,
data.channel
);
}
/* ========================================
UPDATE NETWORK UI
======================================== */
function updateNetwork(){
var config=
NETWORKS[
network.value
]||
NETWORKS.dalnet;
if(networkName){
networkName.textContent=
config.name;
}
if(networkURL){
networkURL.textContent=
config.display;
}
if(statusNetwork){
statusNetwork.textContent=
config.label+
' WEB IRC';
}
status.textContent=
'NETWORK SELECTED';
}
/* ========================================
OPEN WEBCHAT
======================================== */
function openIRC(){
var data=
getValues();
var config=
NETWORKS[
data.network
]||
NETWORKS.dalnet;
panelNetwork.textContent=
config.label+
' IRC';
panelSession.textContent=
config.label+
' SESSION';
panelChannel.textContent=
'#'+data.channel;
panelNick.textContent=
data.nick;
status.textContent=
'CONNECTING...';
frame.src=
buildURL();
chatBox.style.display=
'block';
commandsPanel.style.display=
'none';
commandIcon.className=
'fa fa-plus-square cfIRCCommandIcon';
overlay.classList.remove(
'cfIRCOverlayClosing'
);
overlay.classList.add(
'cfIRCOverlayActive'
);
panel.classList.remove(
'cfIRCPanelClosing'
);
panel.classList.add(
'cfIRCPanelOpening'
);
document.documentElement
.classList.add(
'cfIRCNoScroll'
);
document.body
.classList.add(
'cfIRCNoScroll'
);
setTimeout(function(){
panel.classList.remove(
'cfIRCPanelOpening'
);
status.textContent=
'WEBCHAT OPEN';
},330);
}
/* ========================================
CLOSE WEBCHAT
======================================== */
function closeIRC(){
if(
overlay.classList.contains(
'cfIRCOverlayClosing'
)
){
return;
}
status.textContent=
'CLOSING SESSION...';
overlay.classList.add(
'cfIRCOverlayClosing'
);
panel.classList.add(
'cfIRCPanelClosing'
);
setTimeout(function(){
frame.src=
'about:blank';
overlay.classList.remove(
'cfIRCOverlayActive',
'cfIRCOverlayClosing'
);
panel.classList.remove(
'cfIRCPanelClosing'
);
commandsPanel.style.display=
'none';
chatBox.style.display=
'block';
commandIcon.className=
'fa fa-plus-square cfIRCCommandIcon';
document.documentElement
.classList.remove(
'cfIRCNoScroll'
);
document.body
.classList.remove(
'cfIRCNoScroll'
);
status.textContent=
'SYSTEM READY';
},270);
}
/* ========================================
BASIC COMMANDS
======================================== */
function toggleCommands(){
if(
commandsPanel.style.display===
'block'
){
commandsPanel.style.display=
'none';
chatBox.style.display=
'block';
commandIcon.className=
'fa fa-plus-square cfIRCCommandIcon';
}else{
commandsPanel.style.display=
'block';
chatBox.style.display=
'none';
commandIcon.className=
'fa fa-minus-square cfIRCCommandIcon';
}
}
/* ========================================
EVENTS
======================================== */
network.addEventListener(
'change',
updateNetwork
);
connect.addEventListener(
'click',
openIRC
);
close.addEventListener(
'click',
closeIRC
);
commandsBtn.addEventListener(
'click',
toggleCommands
);
/* OPEN DIRECT */
external.addEventListener(
'click',
function(){
window.open(
buildURL(),
'_blank',
'noopener,noreferrer'
);
}
);
/* QUICK CHANNEL */
var quick=
widget.querySelectorAll(
'.cfIRCQuick button'
);
Array.prototype.forEach.call(
quick,
function(button){
button.addEventListener(
'click',
function(){
channel.value=
this.getAttribute(
'data-channel'
)||'codeflare';
Array.prototype.forEach.call(
quick,
function(item){
item.classList.remove(
'active'
);
}
);
this.classList.add(
'active'
);
status.textContent=
'CHANNEL SELECTED';
}
);
}
);
/* ENTER CONNECT */
[nick,channel].forEach(
function(input){
input.addEventListener(
'keydown',
function(event){
if(event.key==='Enter'){
event.preventDefault();
openIRC();
}
}
);
}
);
/* CLICK OUTSIDE */
overlay.addEventListener(
'click',
function(event){
if(event.target===overlay){
closeIRC();
}
}
);
/* ESC CLOSE */
document.addEventListener(
'keydown',
function(event){
if(
event.key==='Escape' &&
overlay.classList.contains(
'cfIRCOverlayActive'
)
){
closeIRC();
}
}
);
/* INITIAL */
updateNetwork();
}
);
})();
//]]>
</script>
<style>
.cfIRCWrap,
.cfIRCWrap *{
box-sizing:border-box;
}
.cfIRCWidget{
position:relative;
width:100%;
overflow:hidden;
padding:16px;
border:1px solid #1c6d89;
border-radius:10px;
background:#07151d;
color:#eafaff;
box-shadow:
0 10px 35px rgba(0,0,0,.18),
inset 0 0 25px rgba(0,174,239,.05);
font-family:Arial,sans-serif;
}
/* GLOW */
.cfIRCGlow{
position:absolute;
width:180px;
height:180px;
right:-80px;
top:-90px;
border-radius:50%;
background:rgba(0,174,239,.14);
filter:blur(35px);
pointer-events:none;
}
/* SCANNER */
.cfIRCScanner{
position:absolute;
left:0;
top:-50px;
width:100%;
height:40px;
background:linear-gradient(
to bottom,
transparent,
rgba(77,220,255,.07),
transparent
);
pointer-events:none;
animation:cfIRCScanning 6s linear infinite;
}
/* HEADER */
.cfIRCHeader{
position:relative;
display:flex;
align-items:center;
justify-content:space-between;
gap:10px;
}
.cfIRCBrand{
display:flex;
align-items:center;
gap:10px;
}
.cfIRCAvatar{
position:relative;
width:42px;
height:42px;
flex:0 0 42px;
display:flex;
align-items:center;
justify-content:center;
overflow:hidden;
border:1px solid #159ac2;
border-radius:5px;
background:#092635;
color:#54dcff;
font-size:18px;
}
.cfIRCAvatar span{
position:absolute;
left:0;
top:-100%;
width:100%;
height:40%;
background:linear-gradient(
to bottom,
transparent,
rgba(255,255,255,.25),
transparent
);
animation:cfIRCAvatarScan 2.8s linear infinite;
}
.cfIRCBrand strong{
display:block;
font-size:15px;
letter-spacing:1.5px;
color:#f4fcff;
}
.cfIRCBrand small{
display:block;
margin-top:3px;
font-size:9px;
letter-spacing:1px;
color:#77aebb;
}
.cfIRCOnline{
display:flex;
align-items:center;
gap:6px;
font-size:9px;
letter-spacing:1px;
color:#91ffbf;
}
.cfIRCOnline i,
.cfIRCStatusDot,
.cfIRCNetworkState i{
width:7px;
height:7px;
display:inline-block;
border-radius:50%;
background:#32df7e;
box-shadow:0 0 8px #32df7e;
animation:cfIRCPulse 1.7s infinite;
}
/* DIVIDER */
.cfIRCDivider{
display:flex;
align-items:center;
gap:5px;
margin:14px 0;
}
.cfIRCDivider span{
height:1px;
flex:1;
background:linear-gradient(
90deg,
transparent,
#187899
);
}
.cfIRCDivider span:last-child{
background:linear-gradient(
90deg,
#187899,
transparent
);
}
.cfIRCDivider i{
width:6px;
height:6px;
border:1px solid #32d3ff;
transform:rotate(45deg);
}
/* FORM */
.cfIRCForm{
display:grid;
grid-template-columns:1.1fr 1fr 1fr;
gap:10px;
}
.cfIRCField label{
display:block;
margin-bottom:6px;
font-size:10px;
font-weight:bold;
letter-spacing:.6px;
color:#8bc7d8;
}
.cfIRCField label i{
margin-right:4px;
color:#40d8ff;
}
.cfIRCInput,
.cfIRCSelect{
position:relative;
height:40px;
display:flex;
align-items:center;
overflow:hidden;
border:1px solid #164d61;
border-radius:5px;
background:#0b202b;
transition:.25s;
}
.cfIRCInput:focus-within,
.cfIRCSelect:focus-within{
border-color:#39d8ff;
box-shadow:
0 0 0 2px rgba(57,216,255,.08);
}
.cfIRCInput>i,
.cfIRCSelect>i:first-child{
width:38px;
flex:0 0 38px;
text-align:center;
color:#45cdeb;
}
.cfIRCInput input,
.cfIRCSelect select{
width:calc(100% - 38px);
height:100%;
padding:0 30px 0 0;
border:0;
outline:0;
background:transparent;
color:#eafaff;
font-size:12px;
}
.cfIRCSelect select{
appearance:none;
-webkit-appearance:none;
cursor:pointer;
}
.cfIRCSelect option{
background:#0b202b;
color:#eafaff;
}
.cfIRCSelectArrow{
position:absolute;
right:10px;
width:auto!important;
pointer-events:none;
}
/* NETWORK INFO */
.cfIRCNetworkInfo{
display:flex;
align-items:center;
gap:10px;
margin-top:11px;
padding:9px 10px;
border:1px solid #164657;
border-radius:5px;
background:#091e28;
}
.cfIRCNetworkIcon{
width:34px;
height:34px;
flex:0 0 34px;
display:flex;
align-items:center;
justify-content:center;
border-radius:4px;
background:#0d3040;
color:#4bddff;
}
.cfIRCNetworkText{
flex:1;
min-width:0;
}
.cfIRCNetworkText span{
display:block;
font-size:7px;
letter-spacing:.8px;
color:#598996;
}
.cfIRCNetworkText strong{
display:block;
font-size:11px;
color:#eafaff;
}
.cfIRCNetworkText small{
display:block;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
font-size:8px;
color:#75adbb;
}
.cfIRCNetworkState{
display:flex;
align-items:center;
gap:5px;
font-size:8px;
color:#79f6ab;
}
/* QUICK CHANNEL */
.cfIRCQuick{
display:flex;
flex-wrap:wrap;
gap:6px;
margin-top:10px;
}
.cfIRCQuick button{
padding:6px 10px;
border:1px solid #18536a;
border-radius:4px;
background:#0d2935;
color:#91c9d8;
font-size:10px;
cursor:pointer;
transition:.2s;
}
.cfIRCQuick button:hover,
.cfIRCQuick button.active{
border-color:#31d8ff;
background:#103c4d;
color:#fff;
}
/* ACTION */
.cfIRCActions{
display:flex;
gap:7px;
margin-top:12px;
}
.cfIRCConnect,
.cfIRCExternal{
height:42px;
border:0;
border-radius:5px;
cursor:pointer;
transition:.25s;
}
.cfIRCConnect{
flex:1;
background:#0083da;
color:#fefefe;
font-size:12px;
font-weight:bold;
letter-spacing:.5px;
}
.cfIRCConnect:hover{
background:#079b67;
box-shadow:
0 0 18px rgba(7,155,103,.22);
}
.cfIRCExternal{
width:45px;
flex:0 0 45px;
background:#172d38;
border:1px solid #245466;
color:#72ddf6;
}
.cfIRCExternal:hover{
background:#203f4d;
color:#fff;
}
/* STATUS */
.cfIRCStatus{
display:flex;
align-items:center;
justify-content:space-between;
gap:10px;
margin-top:10px;
padding:8px 10px;
border:1px solid #123c4c;
border-radius:4px;
background:#091b24;
font-size:9px;
letter-spacing:.8px;
color:#83cadb;
}
.cfIRCStatus>div{
display:flex;
align-items:center;
gap:6px;
}
.cfIRCFooter{
display:flex;
align-items:center;
justify-content:space-between;
gap:10px;
margin-top:12px;
padding-top:10px;
border-top:1px solid #103747;
font-size:8px;
letter-spacing:1px;
color:#55818d;
}
/* ========================================
FLOATING WINDOW
======================================== */
.cfIRCNoScroll{
overflow:hidden!important;
}
.cfIRCOverlay{
display:none;
position:fixed;
z-index:9999999;
inset:0;
padding:12px;
background:rgba(2,10,15,.48);
backdrop-filter:blur(2px);
-webkit-backdrop-filter:blur(2px);
opacity:0;
}
.cfIRCOverlayActive{
display:flex;
align-items:center;
justify-content:center;
animation:
cfIRCOverlayOpen .28s ease forwards;
}
.cfIRCOverlayClosing{
animation:
cfIRCOverlayClose .27s ease forwards;
}
.cfIRCPanel{
width:min(900px,100%);
height:min(
680px,
calc(100vh - 24px)
);
display:flex;
flex-direction:column;
overflow:hidden;
border:1px solid #1c708e;
border-radius:10px;
background:#07151d;
color:#eafaff;
box-shadow:
0 20px 70px rgba(0,0,0,.45);
}
.cfIRCPanelOpening{
animation:
cfIRCPanelOpen
.33s
cubic-bezier(.22,.8,.25,1)
both;
}
.cfIRCPanelClosing{
animation:
cfIRCPanelClose
.27s
ease
both;
}
/* PANEL HEADER */
.cfIRCPanelHead{
display:grid;
grid-template-columns:1fr auto 1fr;
align-items:center;
gap:8px;
min-height:48px;
padding:7px 9px;
border-bottom:1px solid #17566d;
background:#0b2a38;
color:#eafaff;
}
.cfIRCPanelHead button{
min-height:31px;
padding:5px 9px;
border:1px solid #1b617c;
border-radius:4px;
background:#103b4d;
color:#dff8ff;
font-size:10px;
cursor:pointer;
transition:.2s;
}
.cfIRCPanelHead button:hover{
background:#0083da;
color:#fff;
}
.cfIRCCommandsBtn{
justify-self:start;
}
.cfIRCClose{
justify-self:end;
}
.cfIRCPanelTitle{
display:flex;
align-items:center;
justify-content:center;
gap:7px;
text-align:center;
}
.cfIRCPanelTitle>i{
color:#4adeff;
}
.cfIRCPanelTitle strong{
display:block;
font-size:12px;
letter-spacing:.8px;
color:#f4fcff;
}
.cfIRCPanelTitle small{
display:block;
margin-top:2px;
font-size:8px;
color:#71b5c7;
}
/* PANEL STATUS */
.cfIRCPanelStatus{
display:flex;
align-items:center;
justify-content:space-between;
gap:8px;
padding:6px 10px;
border-bottom:1px solid #123f50;
background:#081e29;
font-size:8px;
letter-spacing:.7px;
color:#6fb5c8;
}
.cfIRCPanelStatus span:first-child{
display:flex;
align-items:center;
gap:5px;
}
.cfIRCPanelStatus i{
width:6px;
height:6px;
display:inline-block;
border-radius:50%;
background:#32df7e;
box-shadow:0 0 6px #32df7e;
}
/* CHAT */
.cfIRCChatBox{
flex:1;
min-height:0;
background:#fff;
color:#111;
}
.cfIRCFrame{
display:block;
width:100%;
height:100%;
border:0;
background:#fff;
}
/* COMMAND PANEL */
.cfIRCCommandsPanel{
display:none;
flex:1;
min-height:0;
overflow:auto;
padding:16px;
background:#f5fafc;
color:#213942;
}
.cfIRCCommandsHead{
display:flex;
align-items:center;
gap:10px;
margin-bottom:15px;
padding-bottom:10px;
border-bottom:1px solid #d2e3e9;
}
.cfIRCCommandsHead>i{
font-size:22px;
color:#0083da;
}
.cfIRCCommandsHead strong{
display:block;
}
.cfIRCCommandsHead small{
display:block;
margin-top:2px;
font-size:8px;
letter-spacing:.8px;
color:#67848e;
}
.cfIRCCommandGrid{
display:grid;
grid-template-columns:1fr 1fr;
gap:8px;
}
.cfIRCCommandGrid>div{
padding:10px;
border:1px solid #d6e4e9;
border-radius:5px;
background:#fff;
color:#253a43;
}
.cfIRCCommandGrid code{
display:block;
margin-bottom:5px;
padding:6px;
border-radius:3px;
background:#102a35;
color:#7be7ff;
font-size:11px;
}
.cfIRCCommandGrid span{
font-size:10px;
}
/* PANEL FOOT */
.cfIRCPanelFoot{
display:flex;
align-items:center;
justify-content:space-between;
gap:8px;
min-height:28px;
padding:5px 10px;
border-top:1px solid #17495b;
background:#091f2a;
font-size:7px;
letter-spacing:.8px;
color:#568593;
}
/* ========================================
ANIMATION
======================================== */
@keyframes cfIRCScanning{
0%{
top:-50px;
}
100%{
top:100%;
}
}
@keyframes cfIRCAvatarScan{
0%{
top:-50%;
}
100%{
top:120%;
}
}
@keyframes cfIRCPulse{
0%,100%{
opacity:.5;
}
50%{
opacity:1;
}
}
@keyframes cfIRCOverlayOpen{
from{
opacity:0;
}
to{
opacity:1;
}
}
@keyframes cfIRCOverlayClose{
from{
opacity:1;
}
to{
opacity:0;
}
}
@keyframes cfIRCPanelOpen{
0%{
opacity:0;
transform:
translateY(-20px)
scale(.94);
}
65%{
opacity:1;
transform:
translateY(3px)
scale(1.008);
}
100%{
opacity:1;
transform:
translateY(0)
scale(1);
}
}
@keyframes cfIRCPanelClose{
0%{
opacity:1;
transform:
translateY(0)
scale(1);
}
100%{
opacity:0;
transform:
translateY(15px)
scale(.95);
}
}
/* ========================================
RESPONSIVE
======================================== */
@media(max-width:800px){
.cfIRCOverlay{
padding:5px;
}
.cfIRCPanel{
width:100%;
height:calc(100vh - 10px);
max-height:none;
}
}
@media(max-width:700px){
.cfIRCForm{
grid-template-columns:1fr;
}
.cfIRCCommandGrid{
grid-template-columns:1fr;
}
}
@media(max-width:500px){
.cfIRCWidget{
padding:12px;
}
.cfIRCBrand strong{
font-size:12px;
}
.cfIRCBrand small{
font-size:7px;
}
.cfIRCOnline{
font-size:7px;
}
.cfIRCPanelHead{
grid-template-columns:
auto 1fr auto;
padding:6px;
}
.cfIRCCommandsBtn span,
.cfIRCClose span{
display:none;
}
.cfIRCPanelTitle strong{
font-size:10px;
}
.cfIRCPanelTitle small{
font-size:7px;
}
.cfIRCFooter,
.cfIRCPanelFoot{
font-size:6px;
}
}
@media(max-width:360px){
.cfIRCActions{
flex-wrap:wrap;
}
.cfIRCConnect{
width:100%;
flex-basis:100%;
}
.cfIRCExternal{
width:100%;
flex-basis:100%;
}
.cfIRCNetworkState{
display:none;
}
}
@media(prefers-reduced-motion:reduce){
.cfIRCScanner,
.cfIRCAvatar span{
animation:none!important;
}
.cfIRCPanelOpening,
.cfIRCPanelClosing,
.cfIRCOverlayActive,
.cfIRCOverlayClosing{
animation-duration:.01ms!important;
}
}
</style>
Live Preview Widget IRC Versi Lama
Widget berikut mempertahankan nuansa biru dan struktur klasik versi sebelumnya. Form Server, Channel dan NickName masih tersedia bersama tombol Dalnet Connect, Server Connect, IRC Server List dan Basic Commands.
LEGACY CODE // LIVE PREVIEW
Widget WebChat IRC Versi Sebelumnya
Tampilan klasik tetap dipertahankan. Hanya bagian engine WebChat yang disesuaikan dengan layanan yang masih tersedia.
LEGACY
Kode Widget IRC Versi Lama
Jika Anda masih menyukai tampilan WebChat klasik CodeFlare, versi lama tetap bisa digunakan. Desain biru dan susunan interface original dipertahankan, sementara bagian koneksi sudah mendapat compatibility update agar dapat diarahkan ke layanan WebChat yang masih tersedia.
LEGACY BUILD // CLASSIC INTERFACE
Paket Kode Widget IRC Versi Lama
Gunakan paket ini jika ingin mempertahankan nuansa widget IRC CodeFlare generasi sebelumnya. Struktur klasiknya tetap sama, tetapi script koneksi sudah diperbarui agar lebih relevan untuk penggunaan sekarang.
01
HTML
02
JavaScript
03
CSS
LEGACY READY
Tampilan lama tetap dipertahankan
Bagian ini sengaja tidak didesain ulang menjadi modern. Warna biru klasik, form Server, Channel, NickName dan karakter panel WebChat lama tetap menjadi identitas versi legacy.
<div class="cfOldMircWidget">
<div class="cfOldMircMain">
<div class="cfOldMircForm">
<div class="cfOldMircTitle">
<span class="cfOldMircLogo">
<i class="fa fa-comments"></i>
</span>
<span>WebChat</span>
</div>
<hr />
<div class="cfOldMircInputArea">
<div class="cfOldMircRow">
<label>
<i class="fa fa-server"></i>
Server
</label>
<div class="cfOldMircControl">
<select class="cfOldMircServer">
<option value="dalnet">DALnet</option>
<option value="libera">Libera.Chat</option>
<option value="quakenet">QuakeNet</option>
<option value="undernet">Undernet</option>
<option value="efnet">EFnet</option>
<option value="ircnet">IRCnet</option>
</select>
</div>
</div>
<div class="cfOldMircRow">
<label>
<i class="fa fa-hashtag"></i>
Channel
</label>
<div class="cfOldMircControl">
<input class="cfOldMircChannel"
type="text"
value="codeflare" />
</div>
</div>
<div class="cfOldMircRow">
<label>
<i class="fa fa-user-secret"></i>
NickName
</label>
<div class="cfOldMircControl">
<input class="cfOldMircNick"
type="text"
value="JohnDoe" />
</div>
</div>
</div>
<div class="cfOldMircButtons">
<button class="cfOldMircDalnet"
type="button">
<i class="fa fa-bolt"></i>
Dalnet Connect
</button>
<button class="cfOldMircConnect"
type="button">
<i class="fa fa-bolt"></i>
Server Connect
</button>
</div>
<div class="cfOldMircMenu">
<button class="cfOldMircListBtn"
type="button">
<i class="fa fa-list"></i>
IRC Server List
</button>
<span>|</span>
<button class="cfOldMircHelpBtn"
type="button">
<i class="fa fa-info-circle"></i>
Basic Commands
</button>
<span>|</span>
<button class="cfOldMircSettings"
type="button">
<i class="fa fa-cogs"></i>
</button>
</div>
<div class="cfOldMircServerList">
<button type="button" data-network="dalnet">
DALnet
</button>
<button type="button" data-network="libera">
Libera.Chat
</button>
<button type="button" data-network="quakenet">
QuakeNet
</button>
<button type="button" data-network="undernet">
Undernet
</button>
<button type="button" data-network="efnet">
EFnet
</button>
<button type="button" data-network="ircnet">
IRCnet
</button>
</div>
</div>
</div>
<div class="cfOldMircOverlay">
<div class="cfOldMircPanel">
<div class="cfOldMircPanelHeader">
<div>
<button class="cfOldMircBasicBtn"
type="button">
Basic Commands
<span class="cfOldMircBasicIcon">
<i class="fa fa-plus-square"></i>
</span>
</button>
</div>
<div class="cfOldMircPanelTitle">
mIRC Chat Panel
<small class="cfOldMircPanelNetwork">
DALnet
</small>
</div>
<div>
<button class="cfOldMircClose"
type="button">
Close
<i class="fa fa-window-close"></i>
</button>
</div>
</div>
<div class="cfOldMircChatBox">
<iframe
class="cfOldMircFrame"
title="Legacy IRC WebChat"
loading="lazy">
</iframe>
</div>
<div class="cfOldMircCommands">
<b>IRC Server Basic Commands</b>
<code>/join #channel</code>
<span>Open Channel</span>
<code>/nick nickname</code>
<span>Change Nick</span>
<code>/msg nickname message</code>
<span>Send Private Message</span>
<code>/whois nickname</code>
<span>View User Information</span>
<code>/list</code>
<span>View Channel List</span>
<code>/part #channel</code>
<span>Leave Channel</span>
<code>/quit</code>
<span>Disconnect IRC</span>
</div>
</div>
</div>
</div>
<script>
//<![CDATA[
(function(){
'use strict';
var NETWORKS={
dalnet:{
name:'DALnet',
url:function(nick,channel){
return 'https://www.dal.net/webchat/?nick='
+encodeURIComponent(nick)
+'&channels='
+encodeURIComponent('#'+channel);
}
},
libera:{
name:'Libera.Chat',
url:function(nick,channel){
return 'https://web.libera.chat/?nick='
+encodeURIComponent(nick)
+'?#'
+encodeURIComponent(channel);
}
},
quakenet:{
name:'QuakeNet',
url:function(nick,channel){
return 'https://webchat.quakenet.org/?channels='
+encodeURIComponent(channel)
+'&nick='
+encodeURIComponent(nick);
}
},
undernet:{
name:'Undernet',
url:function(){
return 'https://chat.undernet.org/';
}
},
efnet:{
name:'EFnet',
url:function(){
return 'https://chat.efnet.org/';
}
},
ircnet:{
name:'IRCnet',
url:function(nick,channel){
return 'https://webchat.ircnet.net/?channels='
+encodeURIComponent(channel)
+'&nick='
+encodeURIComponent(nick);
}
}
};
function cleanNick(value){
return String(value||'')
.trim()
.replace(/\s+/g,'');
}
function cleanChannel(value){
return String(value||'')
.trim()
.replace(/^#+/,'')
.replace(/\s+/g,'');
}
var widgets=
document.querySelectorAll(
'.cfOldMircWidget'
);
Array.prototype.forEach.call(
widgets,
function(widget){
var overlay=
widget.querySelector(
'.cfOldMircOverlay'
);
var panel=
widget.querySelector(
'.cfOldMircPanel'
);
var server=
widget.querySelector(
'.cfOldMircServer'
);
var channel=
widget.querySelector(
'.cfOldMircChannel'
);
var nick=
widget.querySelector(
'.cfOldMircNick'
);
var dalnet=
widget.querySelector(
'.cfOldMircDalnet'
);
var connect=
widget.querySelector(
'.cfOldMircConnect'
);
var listBtn=
widget.querySelector(
'.cfOldMircListBtn'
);
var helpBtn=
widget.querySelector(
'.cfOldMircHelpBtn'
);
var serverList=
widget.querySelector(
'.cfOldMircServerList'
);
var frame=
widget.querySelector(
'.cfOldMircFrame'
);
var chatBox=
widget.querySelector(
'.cfOldMircChatBox'
);
var commands=
widget.querySelector(
'.cfOldMircCommands'
);
var basicBtn=
widget.querySelector(
'.cfOldMircBasicBtn'
);
var basicIcon=
widget.querySelector(
'.cfOldMircBasicIcon'
);
var close=
widget.querySelector(
'.cfOldMircClose'
);
var panelNetwork=
widget.querySelector(
'.cfOldMircPanelNetwork'
);
function buildURL(forceDalnet){
var networkID=
forceDalnet
?'dalnet'
:server.value;
var nickname=
cleanNick(
nick.value
)||'JohnDoe';
var channelName=
cleanChannel(
channel.value
)||'codeflare';
nick.value=
nickname;
channel.value=
channelName;
var config=
NETWORKS[networkID]
||NETWORKS.dalnet;
panelNetwork.textContent=
config.name;
return config.url(
nickname,
channelName
);
}
function openPanel(forceDalnet){
if(forceDalnet){
server.value=
'dalnet';
}
frame.src=
buildURL(
forceDalnet
);
commands.style.display=
'none';
chatBox.style.display=
'block';
basicIcon.innerHTML=
'<i class="fa fa-plus-square"></i>';
overlay.classList.remove(
'cfOldMircOverlayClosing'
);
overlay.classList.add(
'cfOldMircOverlayActive'
);
panel.classList.remove(
'cfOldMircPanelClosing'
);
panel.classList.add(
'cfOldMircPanelOpening'
);
document.documentElement
.classList.add(
'cfOldMircNoScroll'
);
document.body
.classList.add(
'cfOldMircNoScroll'
);
setTimeout(function(){
panel.classList.remove(
'cfOldMircPanelOpening'
);
},320);
}
function closePanel(){
overlay.classList.add(
'cfOldMircOverlayClosing'
);
panel.classList.add(
'cfOldMircPanelClosing'
);
setTimeout(function(){
frame.src=
'about:blank';
overlay.classList.remove(
'cfOldMircOverlayActive',
'cfOldMircOverlayClosing'
);
panel.classList.remove(
'cfOldMircPanelClosing'
);
commands.style.display=
'none';
chatBox.style.display=
'block';
document.documentElement
.classList.remove(
'cfOldMircNoScroll'
);
document.body
.classList.remove(
'cfOldMircNoScroll'
);
},260);
}
function toggleCommands(){
if(
commands.style.display===
'block'
){
commands.style.display=
'none';
chatBox.style.display=
'block';
basicIcon.innerHTML=
'<i class="fa fa-plus-square"></i>';
}else{
commands.style.display=
'block';
chatBox.style.display=
'none';
basicIcon.innerHTML=
'<i class="fa fa-minus-square"></i>';
}
}
connect.addEventListener(
'click',
function(){
openPanel(false);
}
);
dalnet.addEventListener(
'click',
function(){
openPanel(true);
}
);
close.addEventListener(
'click',
closePanel
);
basicBtn.addEventListener(
'click',
toggleCommands
);
helpBtn.addEventListener(
'click',
function(){
overlay.classList.add(
'cfOldMircOverlayActive'
);
panel.classList.add(
'cfOldMircPanelOpening'
);
chatBox.style.display=
'none';
commands.style.display=
'block';
}
);
listBtn.addEventListener(
'click',
function(){
serverList.classList.toggle(
'cfOldMircServerListActive'
);
}
);
var networkButtons=
serverList.querySelectorAll(
'button'
);
Array.prototype.forEach.call(
networkButtons,
function(button){
button.addEventListener(
'click',
function(){
server.value=
this.getAttribute(
'data-network'
);
serverList.classList.remove(
'cfOldMircServerListActive'
);
}
);
}
);
[nick,channel].forEach(
function(input){
input.addEventListener(
'keydown',
function(event){
if(event.key==='Enter'){
event.preventDefault();
openPanel(false);
}
}
);
}
);
overlay.addEventListener(
'click',
function(event){
if(event.target===overlay){
closePanel();
}
}
);
document.addEventListener(
'keydown',
function(event){
if(
event.key==='Escape' &&
overlay.classList.contains(
'cfOldMircOverlayActive'
)
){
closePanel();
}
}
);
}
);
})();
//]]>
</script>
<style>
.cfOldMircWidget{
position:relative;
width:100%;
box-sizing:border-box;
}
.cfOldMircWidget *{
box-sizing:border-box;
}
.cfOldMircMain{
width:100%;
max-width:420px;
margin:auto;
padding:5px;
border-radius:4px;
background-image:linear-gradient(
to bottom,
rgba(50,123,165,.75),
rgba(46,75,90,.75) 50%,
rgba(92,176,220,.75)
);
box-shadow:
inset 0 0 1px #fff,
0 8px 22px rgba(0,0,0,.15);
}
.cfOldMircForm{
padding:5px;
border-radius:4px;
background:#006699;
color:#fff;
}
.cfOldMircTitle{
display:flex;
align-items:center;
justify-content:center;
gap:7px;
font-size:22px;
font-weight:bold;
color:#fff;
}
.cfOldMircLogo{
width:29px;
height:29px;
display:flex;
align-items:center;
justify-content:center;
background:#fff;
color:#0083da;
border-radius:3px;
}
.cfOldMircInputArea{
padding:7px;
background:#0083da;
}
.cfOldMircRow{
display:grid;
grid-template-columns:100px 1fr;
gap:5px;
align-items:center;
margin-bottom:5px;
}
.cfOldMircRow label{
font-size:11px;
font-weight:bold;
color:#fff;
}
.cfOldMircControl input,
.cfOldMircControl select{
width:100%;
height:29px;
padding:0 6px;
border:1px solid #ddd;
background:#fff;
color:#222;
}
.cfOldMircButtons{
display:grid;
grid-template-columns:1fr 1fr;
gap:5px;
margin-top:6px;
}
.cfOldMircButtons button{
min-height:29px;
border:1px solid #fff;
background:#0083da;
color:#fff;
cursor:pointer;
}
.cfOldMircMenu{
display:flex;
align-items:center;
justify-content:center;
gap:5px;
margin-top:6px;
padding:6px;
background:#0083da;
color:#fff;
}
.cfOldMircMenu button{
border:0;
background:transparent;
color:#fff;
cursor:pointer;
}
.cfOldMircServerList{
display:none;
grid-template-columns:repeat(2,1fr);
gap:5px;
margin-top:5px;
padding:6px;
background:#075983;
}
.cfOldMircServerListActive{
display:grid;
}
.cfOldMircServerList button{
padding:6px;
border:1px solid #fff;
background:#0083da;
color:#fff;
}
.cfOldMircNoScroll{
overflow:hidden!important;
}
.cfOldMircOverlay{
display:none;
position:fixed;
z-index:9999998;
inset:0;
padding:8px;
background:rgba(0,0,0,.28);
opacity:0;
}
.cfOldMircOverlayActive{
display:flex;
align-items:center;
justify-content:center;
animation:cfOldOverlayOpen .28s ease forwards;
}
.cfOldMircOverlayClosing{
animation:cfOldOverlayClose .26s ease forwards;
}
.cfOldMircPanel{
width:min(800px,100%);
height:min(610px,calc(100vh - 16px));
display:flex;
flex-direction:column;
overflow:hidden;
padding:5px;
border-radius:4px;
background-image:linear-gradient(
to bottom,
rgba(50,123,165,.97),
rgba(46,75,90,.97) 50%,
rgba(92,176,220,.97)
);
box-shadow:0 15px 45px rgba(0,0,0,.3);
}
.cfOldMircPanelOpening{
animation:cfOldPanelOpen .32s cubic-bezier(.22,.8,.25,1) both;
}
.cfOldMircPanelClosing{
animation:cfOldPanelClose .26s ease both;
}
.cfOldMircPanelHeader{
display:grid;
grid-template-columns:1fr 1fr 1fr;
align-items:center;
gap:5px;
margin-bottom:5px;
}
.cfOldMircPanelHeader button{
min-height:29px;
border:1px solid #fff;
background:#0083da;
color:#fff;
cursor:pointer;
}
.cfOldMircPanelTitle{
text-align:center;
font-weight:bold;
color:#fff;
}
.cfOldMircChatBox,
.cfOldMircCommands{
flex:1;
min-height:0;
}
.cfOldMircFrame{
display:block;
width:100%;
height:100%;
border:1px solid #fff;
background:#fff;
}
.cfOldMircCommands{
display:none;
overflow:auto;
padding:12px;
background:#fff;
color:#222;
}
.cfOldMircCommands code{
display:block;
margin-top:7px;
padding:6px 8px;
background:#163441;
color:#7deaff;
}
@keyframes cfOldOverlayOpen{
from{opacity:0}
to{opacity:1}
}
@keyframes cfOldOverlayClose{
from{opacity:1}
to{opacity:0}
}
@keyframes cfOldPanelOpen{
0%{
opacity:0;
transform:translateY(-18px) scale(.94);
}
100%{
opacity:1;
transform:translateY(0) scale(1);
}
}
@keyframes cfOldPanelClose{
0%{
opacity:1;
transform:translateY(0) scale(1);
}
100%{
opacity:0;
transform:translateY(14px) scale(.95);
}
}
@media(max-width:800px){
.cfOldMircOverlay{
padding:5px;
}
.cfOldMircPanel{
width:100%;
height:calc(100vh - 10px);
}
}
@media(max-width:480px){
.cfOldMircRow{
grid-template-columns:1fr;
}
.cfOldMircButtons{
grid-template-columns:1fr;
}
.cfOldMircPanelHeader{
grid-template-columns:auto 1fr auto;
}
.cfOldMircBasicBtn{
font-size:0;
}
.cfOldMircBasicBtn i,
.cfOldMircBasicIcon{
font-size:12px;
}
.cfOldMircClose{
font-size:0;
}
.cfOldMircClose i{
font-size:12px;
}
}
</style>
Cara Menggunakan Widget
Pilih network, masukkan nickname dan channel kemudian tekan Connect WebChat. Channel tidak perlu ditulis menggunakan tanda pagar karena script akan membersihkan input dan menambahkan format channel sesuai WebChat network.
NETWORK
DALnet
NICKNAME
JohnDoe
CHANNEL
#codeflare
Perintah Dasar IRC
/join #channel
Masuk ke sebuah channel.
/part #channel
Keluar dari channel.
/nick NamaBaru
Mengganti nickname.
/msg nickname pesan
Mengirim pesan pribadi.
/whois nickname
Melihat informasi pengguna.
/list
Menampilkan daftar channel.
/me action
Mengirim action message.
/quit
Keluar dari IRC.
Keamanan Menggunakan IRC
IRC tetap merupakan ruang komunikasi online sehingga prinsip keamanan internet tetap perlu diterapkan.
1Jangan membagikan password.
2Jangan memberikan OTP atau kode autentikasi.
3Hindari memakai informasi sensitif sebagai nickname.
4Jangan sembarangan membuka link.
5Jangan menerima file dari pengguna yang tidak dikenal.
6Ikuti aturan network dan operator channel.
Channel publik bukan ruang privat
Pesan pada channel publik dapat dibaca pengguna lain yang berada di channel tersebut. Hindari membagikan informasi rahasia melalui percakapan publik.
Dengan tetap menyediakan widget modern dan versi sebelumnya, pengguna dapat memilih desain sesuai karakter blog mereka. Versi baru menawarkan tampilan terminal yang lebih modern, sedangkan versi legacy mempertahankan nuansa WebChat IRC klasik yang menjadi ciri widget awal CodeFlare.
CODEFLARE DEVELOPMENT SERVICE
Punya Ide Widget Blogger yang Lebih Unik?
CodeFlare dapat membantu membuat custom widget Blogger seperti live chat, generator, dashboard, API integration maupun JavaScript interaktif sesuai kebutuhan blog Anda.
Custom Widget Blogger
Perbaikan Template
Custom JavaScript
Website Blogger
Custom widget mulai dari Rp50.000 tergantung tingkat kerumitan dan kompleksitas script.
Konsultasikan Project Anda
Keyword: Widget IRC Blogger, WebChat IRC, DALnet, Libera Chat, QuakeNet, Undernet, EFnet, IRCnet, Multi Server IRC, Widget Chat Blogger.
Incoming Search Terms: cara membuat widget IRC multi server, WebChat IRC Blogger, widget mIRC Blogger, DALnet Blogger, Libera Chat Blogger, widget IRC klasik Blogger.
Just Checking my Post comment...
ReplyDelete