Lots of changes
|
|
@ -1074,7 +1074,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lupt"
|
name = "lupt"
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"actix",
|
"actix",
|
||||||
"actix-broker",
|
"actix-broker",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "lupt"
|
name = "lupt"
|
||||||
version = "0.1.0"
|
version = "0.2.0"
|
||||||
description = "Chat app for lupt(लुप्त) users!"
|
description = "Chat app for lupt(लुप्त) users!"
|
||||||
authors = ["Piyush Raj <piyush.raj.kit@gmail.com>"]
|
authors = ["Piyush Raj <piyush.raj.kit@gmail.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,11 @@ use crate::{ws_sansad, messages as ms};
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
pub struct ChatPinnd {
|
pub struct ChatPinnd {
|
||||||
grih: HashMap<String, Grih>, // kunjika, Grih
|
kaksh: HashMap<String, Kaksh>, // kunjika, Kaksh
|
||||||
vyaktigat_waitlist: Vec<VyaktiWatchlist>,
|
vyaktigat_waitlist: Vec<VyaktiWatchlist>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Grih {
|
pub struct Kaksh {
|
||||||
length: Option<usize>,
|
length: Option<usize>,
|
||||||
loog: Vec<Loog>
|
loog: Vec<Loog>
|
||||||
}
|
}
|
||||||
|
|
@ -48,17 +48,17 @@ impl Actor for ChatPinnd {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Join grih
|
/// Join kaksh
|
||||||
impl Handler<ms::JoinGrih> for ChatPinnd {
|
impl Handler<ms::JoinKaksh> for ChatPinnd {
|
||||||
type Result = ms::Resp;
|
type Result = ms::Resp;
|
||||||
|
|
||||||
fn handle(&mut self, msg: ms::JoinGrih, _: &mut Self::Context) -> Self::Result {
|
fn handle(&mut self, msg: ms::JoinKaksh, _: &mut Self::Context) -> Self::Result {
|
||||||
// check if user exist
|
// check if user exist
|
||||||
if let Some(_) = self.vyaktigat_waitlist.iter().position(|vk| vk.kunjika == msg.kunjika) {
|
if let Some(_) = self.vyaktigat_waitlist.iter().position(|vk| vk.kunjika == msg.kunjika) {
|
||||||
return ms::Resp::Err("Kunjika already exist".to_owned());
|
return ms::Resp::Err("Kunjika already exist".to_owned());
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(_) = self.grih.iter().position(|(_,g)| {
|
if let Some(_) = self.kaksh.iter().position(|(_,g)| {
|
||||||
match g.loog.iter().position(|a| a.kunjika == msg.kunjika) {
|
match g.loog.iter().position(|a| a.kunjika == msg.kunjika) {
|
||||||
Some(_) => true,
|
Some(_) => true,
|
||||||
None => false
|
None => false
|
||||||
|
|
@ -67,33 +67,33 @@ impl Handler<ms::JoinGrih> for ChatPinnd {
|
||||||
return ms::Resp::Err("Kunjika already exist".to_owned());
|
return ms::Resp::Err("Kunjika already exist".to_owned());
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if grih exist and add user
|
// check if kaksh exist and add user
|
||||||
match self.grih.get_mut(&msg.grih_kunjika) {
|
match self.kaksh.get_mut(&msg.kaksh_kunjika) {
|
||||||
Some(grih) =>{ // exist
|
Some(kaksh) =>{ // exist
|
||||||
// check if grih have no space left
|
// check if kaksh have no space left
|
||||||
if let Some(n) = grih.length {
|
if let Some(n) = kaksh.length {
|
||||||
if grih.loog.len() >= n {
|
if kaksh.loog.len() >= n {
|
||||||
return ms::Resp::Err("Grih have no space".to_owned());
|
return ms::Resp::Err("Kaksh have no space".to_owned());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
grih.loog.iter().for_each(|a: &Loog| {
|
kaksh.loog.iter().for_each(|a: &Loog| {
|
||||||
a.addr.do_send(ms::WsConnected {
|
a.addr.do_send(ms::WsConnected {
|
||||||
name: msg.name.to_owned(),
|
name: msg.name.to_owned(),
|
||||||
kunjika: msg.kunjika.to_owned()
|
kunjika: msg.kunjika.to_owned()
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
grih.loog.push(Loog::new(msg.addr, msg.kunjika,msg.name, None));
|
kaksh.loog.push(Loog::new(msg.addr, msg.kunjika,msg.name, None));
|
||||||
|
|
||||||
|
|
||||||
}, None => { // don't exist
|
}, None => { // don't exist
|
||||||
// add grih and notify
|
// add kaksh and notify
|
||||||
msg.addr.do_send(ms::WsConnected {
|
msg.addr.do_send(ms::WsConnected {
|
||||||
name: msg.name.to_owned(),
|
name: msg.name.to_owned(),
|
||||||
kunjika: msg.kunjika.to_owned()
|
kunjika: msg.kunjika.to_owned()
|
||||||
});
|
});
|
||||||
self.grih.insert(msg.grih_kunjika, Grih {
|
self.kaksh.insert(msg.kaksh_kunjika, Kaksh {
|
||||||
length: msg.length,
|
length: msg.length,
|
||||||
loog: vec![Loog::new(msg.addr,msg.kunjika,msg.name, None)]
|
loog: vec![Loog::new(msg.addr,msg.kunjika,msg.name, None)]
|
||||||
});
|
});
|
||||||
|
|
@ -116,7 +116,7 @@ impl Handler<ms::JoinRandom> for ChatPinnd {
|
||||||
return ms::Resp::Err("Kunjika already exist".to_owned());
|
return ms::Resp::Err("Kunjika already exist".to_owned());
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(_) = self.grih.iter().position(|(_,g)| {
|
if let Some(_) = self.kaksh.iter().position(|(_,g)| {
|
||||||
match g.loog.iter().position(|a| a.kunjika == msg.kunjika) {
|
match g.loog.iter().position(|a| a.kunjika == msg.kunjika) {
|
||||||
Some(_) => true,
|
Some(_) => true,
|
||||||
None => false
|
None => false
|
||||||
|
|
@ -159,7 +159,7 @@ impl Handler<ms::JoinRandom> for ChatPinnd {
|
||||||
|
|
||||||
let vayakti_watchlist = self.vyaktigat_waitlist.remove(pos);
|
let vayakti_watchlist = self.vyaktigat_waitlist.remove(pos);
|
||||||
let group_kunjika = format!("gupt_{}>{}",msg.kunjika.to_owned(), vayakti_watchlist.kunjika);
|
let group_kunjika = format!("gupt_{}>{}",msg.kunjika.to_owned(), vayakti_watchlist.kunjika);
|
||||||
self.grih.insert(group_kunjika.to_owned(), Grih {
|
self.kaksh.insert(group_kunjika.to_owned(), Kaksh {
|
||||||
length: Some(2),
|
length: Some(2),
|
||||||
loog: vec![Loog::new(msg.addr.clone(), msg.kunjika.to_owned(), msg.name.to_owned(), Some(msg.tags.clone())),
|
loog: vec![Loog::new(msg.addr.clone(), msg.kunjika.to_owned(), msg.name.to_owned(), Some(msg.tags.clone())),
|
||||||
Loog::new(vayakti_watchlist.addr.clone(), vayakti_watchlist.kunjika.to_owned(), vayakti_watchlist.name.to_owned(), Some(vayakti_watchlist.tags.clone()))]
|
Loog::new(vayakti_watchlist.addr.clone(), vayakti_watchlist.kunjika.to_owned(), vayakti_watchlist.name.to_owned(), Some(vayakti_watchlist.tags.clone()))]
|
||||||
|
|
@ -169,12 +169,12 @@ impl Handler<ms::JoinRandom> for ChatPinnd {
|
||||||
msg.addr.do_send(ms::WsConnectedRandom {
|
msg.addr.do_send(ms::WsConnectedRandom {
|
||||||
name: vayakti_watchlist.name,
|
name: vayakti_watchlist.name,
|
||||||
kunjika: vayakti_watchlist.kunjika,
|
kunjika: vayakti_watchlist.kunjika,
|
||||||
grih_kunjika: group_kunjika.to_owned()
|
kaksh_kunjika: group_kunjika.to_owned()
|
||||||
});
|
});
|
||||||
vayakti_watchlist.addr.do_send(ms::WsConnectedRandom {
|
vayakti_watchlist.addr.do_send(ms::WsConnectedRandom {
|
||||||
name: msg.name,
|
name: msg.name,
|
||||||
kunjika: msg.kunjika.to_owned(),
|
kunjika: msg.kunjika.to_owned(),
|
||||||
grih_kunjika: group_kunjika
|
kaksh_kunjika: group_kunjika
|
||||||
});
|
});
|
||||||
|
|
||||||
ms::Resp::Ok
|
ms::Resp::Ok
|
||||||
|
|
@ -185,16 +185,25 @@ impl Handler<ms::JoinRandom> for ChatPinnd {
|
||||||
impl Handler<ms::JoinRandomNext> for ChatPinnd {
|
impl Handler<ms::JoinRandomNext> for ChatPinnd {
|
||||||
type Result = ms::Resp;
|
type Result = ms::Resp;
|
||||||
fn handle(&mut self, msg: ms::JoinRandomNext, _: &mut Self::Context) -> Self::Result {
|
fn handle(&mut self, msg: ms::JoinRandomNext, _: &mut Self::Context) -> Self::Result {
|
||||||
let grih = self.grih.get_mut(&msg.grih_kunjika).unwrap();
|
let kaksh = match self.kaksh.get_mut(&msg.kaksh_kunjika) {
|
||||||
|
Some(v) => v,
|
||||||
|
None => return ms::Resp::Err("Failed to join, check entries!".to_owned())
|
||||||
|
};
|
||||||
|
|
||||||
let loog_i = grih.loog.iter().position(|a| a.kunjika == msg.kunjika).unwrap();
|
let loog_i = match kaksh.loog.iter().position(|a| a.kunjika == msg.kunjika) {
|
||||||
|
Some(v) => v,
|
||||||
|
None => return ms::Resp::Err("Failed to join, check entries!".to_owned())
|
||||||
|
};
|
||||||
|
|
||||||
let addr;
|
let addr;
|
||||||
let name;
|
let name;
|
||||||
let tags;
|
let tags;
|
||||||
|
|
||||||
{
|
{
|
||||||
let loog = grih.loog.get(loog_i).unwrap();
|
let loog = match kaksh.loog.get(loog_i) {
|
||||||
|
Some(v) => v,
|
||||||
|
None => return ms::Resp::Err("Failed to join, check entries!".to_owned())
|
||||||
|
};
|
||||||
|
|
||||||
if let None = loog.tags {
|
if let None = loog.tags {
|
||||||
return ms::Resp::Err("You are not a randome vyakti!".to_owned());
|
return ms::Resp::Err("You are not a randome vyakti!".to_owned());
|
||||||
|
|
@ -202,12 +211,15 @@ impl Handler<ms::JoinRandomNext> for ChatPinnd {
|
||||||
|
|
||||||
addr = loog.addr.clone();
|
addr = loog.addr.clone();
|
||||||
name = loog.name.to_owned();
|
name = loog.name.to_owned();
|
||||||
tags = loog.tags.clone().unwrap();
|
tags = match loog.tags.clone() {
|
||||||
|
Some(v) => v,
|
||||||
|
None => return ms::Resp::Err("Failed to join, check entries!".to_owned())
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove from old grih
|
// remove from old kaksh
|
||||||
grih.loog.remove(loog_i);
|
kaksh.loog.remove(loog_i);
|
||||||
grih.loog.iter().for_each(|a| {
|
kaksh.loog.iter().for_each(|a| {
|
||||||
a.addr.do_send(ms::WsDisconnected {
|
a.addr.do_send(ms::WsDisconnected {
|
||||||
kunjika: msg.kunjika.to_owned(),
|
kunjika: msg.kunjika.to_owned(),
|
||||||
name: name.to_owned()
|
name: name.to_owned()
|
||||||
|
|
@ -247,12 +259,12 @@ impl Handler<ms::JoinRandomNext> for ChatPinnd {
|
||||||
let vayakti_watchlist = self.vyaktigat_waitlist.remove(pos);
|
let vayakti_watchlist = self.vyaktigat_waitlist.remove(pos);
|
||||||
let group_kunjika = format!("gupt_{}>{}",msg.kunjika.to_owned(), vayakti_watchlist.kunjika);
|
let group_kunjika = format!("gupt_{}>{}",msg.kunjika.to_owned(), vayakti_watchlist.kunjika);
|
||||||
|
|
||||||
let log_count = grih.loog.len();
|
let log_count = kaksh.loog.len();
|
||||||
drop(grih);
|
drop(kaksh);
|
||||||
if log_count == 0 {
|
if log_count == 0 {
|
||||||
self.grih.remove(&msg.grih_kunjika);
|
self.kaksh.remove(&msg.kaksh_kunjika);
|
||||||
}
|
}
|
||||||
self.grih.insert(group_kunjika.to_owned(), Grih {
|
self.kaksh.insert(group_kunjika.to_owned(), Kaksh {
|
||||||
length: Some(2),
|
length: Some(2),
|
||||||
loog: vec![Loog::new(addr.clone(), msg.kunjika.to_owned(), name.to_owned(), Some(tags.clone())),
|
loog: vec![Loog::new(addr.clone(), msg.kunjika.to_owned(), name.to_owned(), Some(tags.clone())),
|
||||||
Loog::new(vayakti_watchlist.addr.clone(), vayakti_watchlist.kunjika.to_owned(), vayakti_watchlist.name.to_owned(), Some(vayakti_watchlist.tags.clone()))]
|
Loog::new(vayakti_watchlist.addr.clone(), vayakti_watchlist.kunjika.to_owned(), vayakti_watchlist.name.to_owned(), Some(vayakti_watchlist.tags.clone()))]
|
||||||
|
|
@ -261,13 +273,13 @@ impl Handler<ms::JoinRandomNext> for ChatPinnd {
|
||||||
addr.do_send(ms::WsConnectedRandom {
|
addr.do_send(ms::WsConnectedRandom {
|
||||||
name: vayakti_watchlist.name,
|
name: vayakti_watchlist.name,
|
||||||
kunjika: vayakti_watchlist.kunjika,
|
kunjika: vayakti_watchlist.kunjika,
|
||||||
grih_kunjika: group_kunjika.to_owned()
|
kaksh_kunjika: group_kunjika.to_owned()
|
||||||
});
|
});
|
||||||
|
|
||||||
vayakti_watchlist.addr.do_send(ms::WsConnectedRandom {
|
vayakti_watchlist.addr.do_send(ms::WsConnectedRandom {
|
||||||
name,
|
name,
|
||||||
kunjika: msg.kunjika.to_owned(),
|
kunjika: msg.kunjika.to_owned(),
|
||||||
grih_kunjika: group_kunjika
|
kaksh_kunjika: group_kunjika
|
||||||
});
|
});
|
||||||
|
|
||||||
ms::Resp::Ok
|
ms::Resp::Ok
|
||||||
|
|
@ -279,8 +291,8 @@ impl Handler<ms::SendText> for ChatPinnd {
|
||||||
type Result = ();
|
type Result = ();
|
||||||
|
|
||||||
fn handle(&mut self, msg: ms::SendText, _: &mut Self::Context) -> Self::Result {
|
fn handle(&mut self, msg: ms::SendText, _: &mut Self::Context) -> Self::Result {
|
||||||
if let Some(grih) = self.grih.get(&msg.grih_kunjika) {
|
if let Some(kaksh) = self.kaksh.get(&msg.kaksh_kunjika) {
|
||||||
grih.loog.iter().for_each(|c| {
|
kaksh.loog.iter().for_each(|c| {
|
||||||
c.addr.do_send(ms::WsText {
|
c.addr.do_send(ms::WsText {
|
||||||
sender_kunjika: msg.kunjika.to_owned(),
|
sender_kunjika: msg.kunjika.to_owned(),
|
||||||
text: msg.text.to_owned(),
|
text: msg.text.to_owned(),
|
||||||
|
|
@ -296,8 +308,8 @@ impl Handler<ms::SendStatus> for ChatPinnd {
|
||||||
type Result = ();
|
type Result = ();
|
||||||
|
|
||||||
fn handle(&mut self, msg: ms::SendStatus, _: &mut Self::Context) -> Self::Result {
|
fn handle(&mut self, msg: ms::SendStatus, _: &mut Self::Context) -> Self::Result {
|
||||||
if let Some(grih) = self.grih.get(&msg.grih_kunjika) {
|
if let Some(kaksh) = self.kaksh.get(&msg.kaksh_kunjika) {
|
||||||
grih.loog.iter().for_each(|c| {
|
kaksh.loog.iter().for_each(|c| {
|
||||||
if c.kunjika == msg.kunjika {
|
if c.kunjika == msg.kunjika {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -315,9 +327,9 @@ impl Handler<ms::List> for ChatPinnd {
|
||||||
type Result = String;
|
type Result = String;
|
||||||
|
|
||||||
fn handle(&mut self, msg: ms::List, _: &mut Self::Context) -> Self::Result {
|
fn handle(&mut self, msg: ms::List, _: &mut Self::Context) -> Self::Result {
|
||||||
if let Some(grih) = self.grih.get(&msg.grih_kunjika) {
|
if let Some(kaksh) = self.kaksh.get(&msg.kaksh_kunjika) {
|
||||||
let mut list = Vec::new();
|
let mut list = Vec::new();
|
||||||
for x in grih.loog.iter() {
|
for x in kaksh.loog.iter() {
|
||||||
list.push((x.kunjika.to_owned(),x.name.to_owned()));
|
list.push((x.kunjika.to_owned(),x.name.to_owned()));
|
||||||
}
|
}
|
||||||
serde_json::json!(list).to_string()
|
serde_json::json!(list).to_string()
|
||||||
|
|
@ -327,21 +339,21 @@ impl Handler<ms::List> for ChatPinnd {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Notifiy a user disconnected and trim grih
|
/// Notifiy a user disconnected and trim kaksh
|
||||||
impl Handler<ms::LeaveUser> for ChatPinnd {
|
impl Handler<ms::LeaveUser> for ChatPinnd {
|
||||||
type Result = ();
|
type Result = ();
|
||||||
|
|
||||||
fn handle(&mut self, msg: ms::LeaveUser, _: &mut Self::Context) -> Self::Result {
|
fn handle(&mut self, msg: ms::LeaveUser, _: &mut Self::Context) -> Self::Result {
|
||||||
if let Some(grih_kunjika) = &msg.grih_kunjika {
|
if let Some(kaksh_kunjika) = &msg.kaksh_kunjika {
|
||||||
if let Some(grih) = self.grih.get_mut(grih_kunjika) {
|
if let Some(kaksh) = self.kaksh.get_mut(kaksh_kunjika) {
|
||||||
let name = if let Some(i) = grih.loog.iter().position(|x| x.addr == msg.addr) {
|
let name = if let Some(i) = kaksh.loog.iter().position(|x| x.addr == msg.addr) {
|
||||||
grih.loog.remove(i).name
|
kaksh.loog.remove(i).name
|
||||||
} else { "".to_owned() };
|
} else { "".to_owned() };
|
||||||
|
|
||||||
if grih.loog.len() == 0 {
|
if kaksh.loog.len() == 0 {
|
||||||
self.grih.remove(grih_kunjika);
|
self.kaksh.remove(kaksh_kunjika);
|
||||||
} else {
|
} else {
|
||||||
grih.loog.iter().for_each(|a| {
|
kaksh.loog.iter().for_each(|a| {
|
||||||
a.addr.do_send(ms::WsDisconnected {
|
a.addr.do_send(ms::WsDisconnected {
|
||||||
kunjika: msg.kunjika.to_owned(),
|
kunjika: msg.kunjika.to_owned(),
|
||||||
name: name.to_owned()
|
name: name.to_owned()
|
||||||
|
|
@ -360,7 +372,7 @@ impl Handler<ms::LeaveUser> for ChatPinnd {
|
||||||
impl Default for ChatPinnd {
|
impl Default for ChatPinnd {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
ChatPinnd {
|
ChatPinnd {
|
||||||
grih: HashMap::new(),
|
kaksh: HashMap::new(),
|
||||||
vyaktigat_waitlist: Vec::new()
|
vyaktigat_waitlist: Vec::new()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct GrihFullError;
|
pub struct KakshFullError;
|
||||||
|
|
||||||
impl fmt::Display for GrihFullError {
|
impl fmt::Display for KakshFullError {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
write!(f, "No space left for more user!")
|
write!(f, "No space left for more user!")
|
||||||
}
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
mod grih_full_error;
|
mod kaksh_full_error;
|
||||||
mod user_kunjika_error;
|
mod user_kunjika_error;
|
||||||
|
|
||||||
pub use grih_full_error::GrihFullError;
|
pub use kaksh_full_error::KakshFullError;
|
||||||
pub use user_kunjika_error::AlreadyExistError;
|
pub use user_kunjika_error::AlreadyExistError;
|
||||||
|
|
@ -7,11 +7,11 @@ use crate::ws_sansad::WsSansad;
|
||||||
//################################################## For ChatPinnd ##################################################
|
//################################################## For ChatPinnd ##################################################
|
||||||
/// Request to change information of vayakti to list of vayakti im ChatPind
|
/// Request to change information of vayakti to list of vayakti im ChatPind
|
||||||
|
|
||||||
/// Request to Grih with its kunjika
|
/// Request to Kaksh with its kunjika
|
||||||
#[derive(Clone, Message)]
|
#[derive(Clone, Message)]
|
||||||
#[rtype(result = "Resp")]
|
#[rtype(result = "Resp")]
|
||||||
pub struct JoinGrih {
|
pub struct JoinKaksh {
|
||||||
pub grih_kunjika: String,
|
pub kaksh_kunjika: String,
|
||||||
pub length: Option<usize>,
|
pub length: Option<usize>,
|
||||||
pub addr: Addr<WsSansad>,
|
pub addr: Addr<WsSansad>,
|
||||||
pub kunjika: String,
|
pub kunjika: String,
|
||||||
|
|
@ -31,7 +31,7 @@ pub struct JoinRandom {
|
||||||
#[derive(Clone, Message)]
|
#[derive(Clone, Message)]
|
||||||
#[rtype(result = "Resp")]
|
#[rtype(result = "Resp")]
|
||||||
pub struct JoinRandomNext {
|
pub struct JoinRandomNext {
|
||||||
pub grih_kunjika: String,
|
pub kaksh_kunjika: String,
|
||||||
pub kunjika: String
|
pub kunjika: String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -39,7 +39,7 @@ pub struct JoinRandomNext {
|
||||||
#[derive(Clone, Message)]
|
#[derive(Clone, Message)]
|
||||||
#[rtype(result = "()")]
|
#[rtype(result = "()")]
|
||||||
pub struct SendText {
|
pub struct SendText {
|
||||||
pub grih_kunjika: String,
|
pub kaksh_kunjika: String,
|
||||||
pub kunjika: String,
|
pub kunjika: String,
|
||||||
pub text: String,
|
pub text: String,
|
||||||
pub reply: Option<String>,
|
pub reply: Option<String>,
|
||||||
|
|
@ -49,7 +49,7 @@ pub struct SendText {
|
||||||
#[derive(Clone, Message)]
|
#[derive(Clone, Message)]
|
||||||
#[rtype(result = "()")]
|
#[rtype(result = "()")]
|
||||||
pub struct SendStatus {
|
pub struct SendStatus {
|
||||||
pub grih_kunjika: String,
|
pub kaksh_kunjika: String,
|
||||||
pub kunjika: String,
|
pub kunjika: String,
|
||||||
pub status: String
|
pub status: String
|
||||||
}
|
}
|
||||||
|
|
@ -58,14 +58,14 @@ pub struct SendStatus {
|
||||||
#[derive(Clone, Message)]
|
#[derive(Clone, Message)]
|
||||||
#[rtype(result = "String")]
|
#[rtype(result = "String")]
|
||||||
pub struct List {
|
pub struct List {
|
||||||
pub grih_kunjika: String
|
pub kaksh_kunjika: String
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Request to leave grih
|
/// Request to leave kaksh
|
||||||
#[derive(Clone, Message)]
|
#[derive(Clone, Message)]
|
||||||
#[rtype(result = "()")]
|
#[rtype(result = "()")]
|
||||||
pub struct LeaveUser {
|
pub struct LeaveUser {
|
||||||
pub grih_kunjika: Option<String>,
|
pub kaksh_kunjika: Option<String>,
|
||||||
pub kunjika: String,
|
pub kunjika: String,
|
||||||
pub addr: Addr<WsSansad>
|
pub addr: Addr<WsSansad>
|
||||||
}
|
}
|
||||||
|
|
@ -125,7 +125,7 @@ pub struct WsResponse {
|
||||||
pub struct WsConnectedRandom {
|
pub struct WsConnectedRandom {
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub kunjika: String,
|
pub kunjika: String,
|
||||||
pub grih_kunjika: String
|
pub kaksh_kunjika: String
|
||||||
}
|
}
|
||||||
//################################################## Helper ##################################################
|
//################################################## Helper ##################################################
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
|
||||||
102
src/ws_sansad.rs
|
|
@ -28,7 +28,7 @@ pub struct WsSansad {
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
enum Isthiti {
|
enum Isthiti {
|
||||||
None,
|
None,
|
||||||
Grih(String),
|
Kaksh(String),
|
||||||
VraktigatWaitlist
|
VraktigatWaitlist
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -42,7 +42,7 @@ impl Actor for WsSansad {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn stopping(&mut self, _: &mut Self::Context) -> Running {
|
fn stopping(&mut self, _: &mut Self::Context) -> Running {
|
||||||
futures::executor::block_on(self.leave_grih()); // notify leaving
|
futures::executor::block_on(self.leave_kaksh()); // notify leaving
|
||||||
Running::Stop
|
Running::Stop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -151,7 +151,7 @@ impl Handler<ms::WsDisconnected> for WsSansad {
|
||||||
impl Handler<ms::WsConnectedRandom> for WsSansad {
|
impl Handler<ms::WsConnectedRandom> for WsSansad {
|
||||||
type Result = ();
|
type Result = ();
|
||||||
fn handle(&mut self, msg: ms::WsConnectedRandom, ctx: &mut Self::Context) -> Self::Result {
|
fn handle(&mut self, msg: ms::WsConnectedRandom, ctx: &mut Self::Context) -> Self::Result {
|
||||||
self.isthiti = Isthiti::Grih(msg.grih_kunjika);
|
self.isthiti = Isthiti::Kaksh(msg.kaksh_kunjika);
|
||||||
let json = json!({
|
let json = json!({
|
||||||
"cmd": "random",
|
"cmd": "random",
|
||||||
"name": msg.name,
|
"name": msg.name,
|
||||||
|
|
@ -182,7 +182,7 @@ impl WsSansad {
|
||||||
// heartbeat timed out
|
// heartbeat timed out
|
||||||
|
|
||||||
// stop actor
|
// stop actor
|
||||||
futures::executor::block_on(act.leave_grih()); // notify leaving
|
futures::executor::block_on(act.leave_kaksh()); // notify leaving
|
||||||
ctx.stop();
|
ctx.stop();
|
||||||
// don't try to send a ping
|
// don't try to send a ping
|
||||||
return;
|
return;
|
||||||
|
|
@ -202,7 +202,7 @@ impl WsSansad {
|
||||||
// heartbeat timed out
|
// heartbeat timed out
|
||||||
|
|
||||||
// stop actor
|
// stop actor
|
||||||
futures::executor::block_on(act.leave_grih()); // notify leaving
|
futures::executor::block_on(act.leave_kaksh()); // notify leaving
|
||||||
ctx.stop();
|
ctx.stop();
|
||||||
|
|
||||||
// don't try to send a ping
|
// don't try to send a ping
|
||||||
|
|
@ -214,14 +214,23 @@ impl WsSansad {
|
||||||
/// parse the request text from client
|
/// parse the request text from client
|
||||||
async fn parse_text_handle(&mut self, msg: String) {
|
async fn parse_text_handle(&mut self, msg: String) {
|
||||||
if let Ok(val) = serde_json::from_str::<Value>(&msg) {
|
if let Ok(val) = serde_json::from_str::<Value>(&msg) {
|
||||||
|
// let cmd = match val.get("cmd") {
|
||||||
|
// Some(v) => v,
|
||||||
|
// None => return
|
||||||
|
// };
|
||||||
|
// let cmd = match cmd.as_str() {
|
||||||
|
// Some(v) => v,
|
||||||
|
// None => return
|
||||||
|
// };
|
||||||
|
|
||||||
match val.get("cmd").unwrap().as_str().unwrap() {
|
match val.get("cmd").unwrap().as_str().unwrap() {
|
||||||
"join" => { self.join_grih(val).await },
|
"join" => { self.join_kaksh(val).await },
|
||||||
"rand" => { self.join_random(val).await },
|
"rand" => { self.join_random(val).await },
|
||||||
"randnext" => { self.join_random_next().await },
|
"randnext" => { self.join_random_next().await },
|
||||||
"text" => { self.send_text(val).await },
|
"text" => { self.send_text(val).await },
|
||||||
"status" => { self.send_status(val).await },
|
"status" => { self.send_status(val).await },
|
||||||
"list" => { self.list().await },
|
"list" => { self.list().await },
|
||||||
"leave" => { self.leave_grih().await },
|
"leave" => { self.leave_kaksh().await },
|
||||||
_ => ()
|
_ => ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -250,7 +259,7 @@ impl WsSansad {
|
||||||
Isthiti::VraktigatWaitlist => {
|
Isthiti::VraktigatWaitlist => {
|
||||||
self.send_ok_response("watchlist");
|
self.send_ok_response("watchlist");
|
||||||
return;
|
return;
|
||||||
}, Isthiti::Grih(_) => return
|
}, Isthiti::Kaksh(_) => return
|
||||||
}
|
}
|
||||||
|
|
||||||
let kunjika = match val.get("kunjika") {
|
let kunjika = match val.get("kunjika") {
|
||||||
|
|
@ -314,12 +323,12 @@ impl WsSansad {
|
||||||
/// Request for joining to random person
|
/// Request for joining to random person
|
||||||
async fn join_random_next(&mut self) {
|
async fn join_random_next(&mut self) {
|
||||||
// Check is already joined
|
// Check is already joined
|
||||||
let grih_kunjika = match &self.isthiti {
|
let kaksh_kunjika = match &self.isthiti {
|
||||||
Isthiti::VraktigatWaitlist => {
|
Isthiti::VraktigatWaitlist => {
|
||||||
self.send_ok_response("watchlist");
|
self.send_ok_response("watchlist");
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
Isthiti::Grih(grih_kunjika) => grih_kunjika,
|
Isthiti::Kaksh(kaksh_kunjika) => kaksh_kunjika,
|
||||||
Isthiti::None => {
|
Isthiti::None => {
|
||||||
self.send_ok_response("Not allowed");
|
self.send_ok_response("Not allowed");
|
||||||
return;
|
return;
|
||||||
|
|
@ -329,7 +338,7 @@ impl WsSansad {
|
||||||
// request
|
// request
|
||||||
let result: Resp = ChatPinnd::from_registry().send(ms::JoinRandomNext {
|
let result: Resp = ChatPinnd::from_registry().send(ms::JoinRandomNext {
|
||||||
kunjika: self.kunjika.to_owned(),
|
kunjika: self.kunjika.to_owned(),
|
||||||
grih_kunjika: grih_kunjika.to_owned(),
|
kaksh_kunjika: kaksh_kunjika.to_owned(),
|
||||||
}).await.unwrap();
|
}).await.unwrap();
|
||||||
|
|
||||||
match result {
|
match result {
|
||||||
|
|
@ -346,8 +355,8 @@ impl WsSansad {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Request to join to grih
|
/// Request to join to kaksh
|
||||||
async fn join_grih(&mut self, val: Value) {
|
async fn join_kaksh(&mut self, val: Value) {
|
||||||
// Check is already joined
|
// Check is already joined
|
||||||
match self.isthiti {
|
match self.isthiti {
|
||||||
Isthiti::None => (),
|
Isthiti::None => (),
|
||||||
|
|
@ -374,7 +383,7 @@ impl WsSansad {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let grih_kunjika = match val.get("grih_kunjika") {
|
let kaksh_kunjika = match val.get("kaksh_kunjika") {
|
||||||
Some(val ) => val.as_str().unwrap().to_owned(),
|
Some(val ) => val.as_str().unwrap().to_owned(),
|
||||||
None => {
|
None => {
|
||||||
self.send_err_response("Invalid request");
|
self.send_err_response("Invalid request");
|
||||||
|
|
@ -391,7 +400,7 @@ impl WsSansad {
|
||||||
|
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if let Some(val ) = validate(vec![vl::NonEmpty, vl::NoGupt, vl::NoSpace], &grih_kunjika, "Grih Kunjika") {
|
if let Some(val ) = validate(vec![vl::NonEmpty, vl::NoGupt, vl::NoSpace], &kaksh_kunjika, "Kaksh Kunjika") {
|
||||||
self.send_err_response(&val);
|
self.send_err_response(&val);
|
||||||
return;
|
return;
|
||||||
} else if let Some(val ) = validate(vec![vl::NonEmpty, vl::NoSpace, vl::NoHashtag], &kunjika, "Kunjika") {
|
} else if let Some(val ) = validate(vec![vl::NonEmpty, vl::NoSpace, vl::NoHashtag], &kunjika, "Kunjika") {
|
||||||
|
|
@ -403,8 +412,8 @@ impl WsSansad {
|
||||||
}
|
}
|
||||||
|
|
||||||
// request
|
// request
|
||||||
let result: Resp = ChatPinnd::from_registry().send(ms::JoinGrih {
|
let result: Resp = ChatPinnd::from_registry().send(ms::JoinKaksh {
|
||||||
grih_kunjika: grih_kunjika.to_owned(),
|
kaksh_kunjika: kaksh_kunjika.to_owned(),
|
||||||
length,
|
length,
|
||||||
addr: self.addr.clone().unwrap(),
|
addr: self.addr.clone().unwrap(),
|
||||||
kunjika: kunjika.to_owned(),
|
kunjika: kunjika.to_owned(),
|
||||||
|
|
@ -415,7 +424,7 @@ impl WsSansad {
|
||||||
match result {
|
match result {
|
||||||
Resp::Err(err) => self.send_err_response(&err),
|
Resp::Err(err) => self.send_err_response(&err),
|
||||||
Resp::Ok => {
|
Resp::Ok => {
|
||||||
self.isthiti = Isthiti::Grih(grih_kunjika);
|
self.isthiti = Isthiti::Kaksh(kaksh_kunjika);
|
||||||
self.kunjika = kunjika;
|
self.kunjika = kunjika;
|
||||||
self.send_ok_response("joined")
|
self.send_ok_response("joined")
|
||||||
}
|
}
|
||||||
|
|
@ -423,19 +432,19 @@ impl WsSansad {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Request to join to grih
|
/// Request to join to kaksh
|
||||||
async fn list(&mut self) {
|
async fn list(&mut self) {
|
||||||
// check if vayakti exist
|
// check if vayakti exist
|
||||||
if let Isthiti::None = self.isthiti {
|
if let Isthiti::None = self.isthiti {
|
||||||
self.send_err_response("Not in any Grih");
|
self.send_err_response("Not in any Kaksh");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if connected to any grih
|
// check if connected to any kaksh
|
||||||
match &self.isthiti {
|
match &self.isthiti {
|
||||||
Isthiti::Grih(kunjika) => {
|
Isthiti::Kaksh(kunjika) => {
|
||||||
let json: String = ChatPinnd::from_registry().send(ms::List {
|
let json: String = ChatPinnd::from_registry().send(ms::List {
|
||||||
grih_kunjika: kunjika.to_owned()
|
kaksh_kunjika: kunjika.to_owned()
|
||||||
}).await.unwrap();
|
}).await.unwrap();
|
||||||
|
|
||||||
self.addr.clone().unwrap().do_send(ms::WsList {
|
self.addr.clone().unwrap().do_send(ms::WsList {
|
||||||
|
|
@ -443,25 +452,25 @@ impl WsSansad {
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
self.send_err_response("Grih not connected");
|
self.send_err_response("Kaksh not connected");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// send text to vayakti in grih
|
/// send text to vayakti in kaksh
|
||||||
async fn send_text(&mut self, val: Value) {
|
async fn send_text(&mut self, val: Value) {
|
||||||
// check if vayakti exist
|
// check if vayakti exist
|
||||||
if let Isthiti::None = self.isthiti {
|
if let Isthiti::None = self.isthiti {
|
||||||
self.send_err_response("Not in any Grih");
|
self.send_err_response("Not in any Kaksh");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if connected to any grih
|
// check if connected to any kaksh
|
||||||
match self.isthiti {
|
match self.isthiti {
|
||||||
Isthiti::Grih(_) => (),
|
Isthiti::Kaksh(_) => (),
|
||||||
_ => {
|
_ => {
|
||||||
self.send_err_response("Grih not connected");
|
self.send_err_response("Kaksh not connected");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -480,34 +489,34 @@ impl WsSansad {
|
||||||
None => None
|
None => None
|
||||||
};
|
};
|
||||||
|
|
||||||
let grih_kunjika = match &self.isthiti {
|
let kaksh_kunjika = match &self.isthiti {
|
||||||
Isthiti::Grih(grih_kunjika) => {
|
Isthiti::Kaksh(kaksh_kunjika) => {
|
||||||
grih_kunjika.to_owned()
|
kaksh_kunjika.to_owned()
|
||||||
}, _ => {
|
}, _ => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Broker::<SystemBroker>::issue_async(ms::SendText {
|
Broker::<SystemBroker>::issue_async(ms::SendText {
|
||||||
grih_kunjika,
|
kaksh_kunjika,
|
||||||
kunjika: self.kunjika.to_owned(),
|
kunjika: self.kunjika.to_owned(),
|
||||||
text,
|
text,
|
||||||
reply
|
reply
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// send status to vayakti in grih
|
/// send status to vayakti in kaksh
|
||||||
async fn send_status(&mut self, val: Value) {
|
async fn send_status(&mut self, val: Value) {
|
||||||
// check if vayakti exist
|
// check if vayakti exist
|
||||||
if let Isthiti::None = self.isthiti {
|
if let Isthiti::None = self.isthiti {
|
||||||
self.send_err_response("Not in any Grih");
|
self.send_err_response("Not in any Kaksh");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if connected to any grih
|
// check if connected to any kaksh
|
||||||
match self.isthiti {
|
match self.isthiti {
|
||||||
Isthiti::Grih(_) => (),
|
Isthiti::Kaksh(_) => (),
|
||||||
_ => {
|
_ => {
|
||||||
self.send_err_response("Grih not connected");
|
self.send_err_response("Kaksh not connected");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -520,34 +529,33 @@ impl WsSansad {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}.as_str().unwrap().to_owned();
|
}.as_str().unwrap().to_owned();
|
||||||
let grih_kunjika = match &self.isthiti {
|
let kaksh_kunjika = match &self.isthiti {
|
||||||
Isthiti::Grih(grih_kunjika) => {
|
Isthiti::Kaksh(kaksh_kunjika) => {
|
||||||
grih_kunjika.to_owned()
|
kaksh_kunjika.to_owned()
|
||||||
}, _ => {
|
}, _ => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Broker::<SystemBroker>::issue_async(ms::SendStatus {
|
Broker::<SystemBroker>::issue_async(ms::SendStatus {
|
||||||
grih_kunjika,
|
kaksh_kunjika,
|
||||||
kunjika: self.kunjika.to_owned(),
|
kunjika: self.kunjika.to_owned(),
|
||||||
status
|
status
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// notify leaving
|
/// notify leaving
|
||||||
async fn leave_grih(&mut self) {
|
async fn leave_kaksh(&mut self) {
|
||||||
let grih_kunjika = match &self.isthiti {
|
let kaksh_kunjika = match &self.isthiti {
|
||||||
Isthiti::Grih(val) => Some(val.to_owned()),
|
Isthiti::Kaksh(val) => Some(val.to_owned()),
|
||||||
_ => None
|
_ => None
|
||||||
};
|
};
|
||||||
|
|
||||||
Broker::<SystemBroker>::issue_async(ms::LeaveUser {
|
Broker::<SystemBroker>::issue_async(ms::LeaveUser {
|
||||||
grih_kunjika,
|
kaksh_kunjika,
|
||||||
kunjika: self.kunjika.to_owned(),
|
kunjika: self.kunjika.to_owned(),
|
||||||
addr: self.addr.clone().unwrap()
|
addr: self.addr.clone().unwrap()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
self.isthiti = Isthiti::None;
|
self.isthiti = Isthiti::None;
|
||||||
self.send_ok_response("left");
|
self.send_ok_response("left");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,44 @@
|
||||||
|
|
||||||
|
@import url(chota.min.css);
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Itim";
|
||||||
|
src: url("../img/Itim-Regular.ttf");
|
||||||
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--bg-color: #ffffff;
|
||||||
|
--bg-secondary-color: #f3f3f6;
|
||||||
|
--color-primary: #14854F;
|
||||||
|
--color-lightGrey: #d2d6dd;
|
||||||
|
--color-grey: #747681;
|
||||||
|
--color-darkGrey: #3f4144;
|
||||||
|
--color-error: #d43939;
|
||||||
|
--color-success: #28bd14;
|
||||||
|
--grid-maxWidth: 120rem;
|
||||||
|
--grid-gutter: 2rem;
|
||||||
|
--font-size: 1.8rem;
|
||||||
|
--font-color: #333333;
|
||||||
|
--font-family-sans: "Itim";
|
||||||
|
--font-family-mono: monaco, "Consolas", "Lucida Console", monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
body > .container {
|
||||||
|
max-width: 720px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form > div {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
pre {
|
pre {
|
||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Itim;
|
||||||
font-size: 0.9em;
|
font-size: 0.9em;
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
|
background: none;
|
||||||
|
padding: 0.1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
textarea {
|
textarea {
|
||||||
|
|
@ -13,15 +48,8 @@ textarea {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hidden {
|
.bg-white {
|
||||||
display: none;
|
background-color: white;
|
||||||
}
|
|
||||||
|
|
||||||
.siimple-progress.progress-bar {
|
|
||||||
height: 10px !important;
|
|
||||||
position: fixed;
|
|
||||||
top: 0; left: 0; right: 0;
|
|
||||||
z-index: 99999;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.cover-screen {
|
.cover-screen {
|
||||||
|
|
@ -31,34 +59,68 @@ textarea {
|
||||||
}
|
}
|
||||||
|
|
||||||
.chatpanel {
|
.chatpanel {
|
||||||
display: flex;
|
background-image: url(../img/pattern.svg);
|
||||||
justify-content: center;
|
background-size: 30px;
|
||||||
width: 100%;
|
|
||||||
height: 44px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.chatpanel-left {
|
.chatpanel-top {
|
||||||
position: fixed;
|
width: 100%;
|
||||||
display: inline;
|
height: 50px;
|
||||||
width: 34px;
|
text-align: center;
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.chatpanel-mid {
|
.chatpanel-mid {
|
||||||
position: fixed;
|
height: calc(100% - 2*50px);
|
||||||
display: inline;
|
padding: 5px;
|
||||||
width: calc(100% - 54px - 34px);
|
overflow-y: scroll;
|
||||||
bottom: 3px;
|
|
||||||
left: 34px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.chatpanel-right {
|
.chatpanel-bot {
|
||||||
|
width: 100%;
|
||||||
|
height: 50px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chatpanel-top-l {
|
||||||
|
height: 50px;
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chatpanel-top-m {
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chatpanel-top-r {
|
||||||
|
height: 50px;
|
||||||
|
float: right;
|
||||||
|
position: fixed;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chatpanel-bot-l {
|
||||||
|
height: 50px;
|
||||||
|
width: 50px;
|
||||||
|
float: left;
|
||||||
|
padding: 1rem;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chatpanel-bot-m {
|
||||||
|
width: calc(100% - 100px);
|
||||||
position: fixed;
|
position: fixed;
|
||||||
display: inline;
|
|
||||||
width: 44px;
|
|
||||||
bottom: 5px;
|
bottom: 5px;
|
||||||
right: 5px;
|
left: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chatpanel-bot-r {
|
||||||
|
height: 50px;
|
||||||
|
width: 50px;
|
||||||
|
float: right;
|
||||||
|
padding: 0.2rem;
|
||||||
|
margin: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#send_box {
|
#send_box {
|
||||||
|
|
@ -97,7 +159,7 @@ textarea {
|
||||||
}
|
}
|
||||||
|
|
||||||
.message .message-by {
|
.message .message-by {
|
||||||
font-size: 0.7rem;
|
font-size: 1.3rem;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
padding-bottom: 1px;
|
padding-bottom: 1px;
|
||||||
|
|
@ -116,23 +178,25 @@ textarea {
|
||||||
.clip-win {
|
.clip-win {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
z-index: 9999;
|
z-index: 9999;
|
||||||
padding: 8px;
|
padding: 6px;
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
bottom: 44px;
|
bottom: 50px;
|
||||||
border: 1px dashed #1E86D7;
|
border: 1px dashed #1E86D7;
|
||||||
}
|
}
|
||||||
|
|
||||||
.clip-win.reply-clip {
|
.clip-win.reply-clip {
|
||||||
width: calc(100% - 2*8px - 3*5px);
|
width: calc(100% - 2*8px - 3*5px);
|
||||||
max-width: 720px;
|
max-width: 720px;
|
||||||
height: 1.5em;
|
height: 2em;
|
||||||
|
padding: 2px;
|
||||||
border-left: 5px solid #1E86D7;
|
border-left: 5px solid #1E86D7;
|
||||||
border-radius: 0px 30px 30px 0px;
|
border-radius: 0px 30px 30px 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.clip-win.selected-clip {
|
.clip-win.selected-clip {
|
||||||
width: fit-content;
|
width: fit-content;
|
||||||
height: 34px;
|
min-width: 250px;
|
||||||
|
height: fit-content;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
border-radius: 15px;
|
border-radius: 15px;
|
||||||
|
|
@ -143,3 +207,9 @@ textarea {
|
||||||
width: calc(100% - 2*8px - 3*5px);
|
width: calc(100% - 2*8px - 3*5px);
|
||||||
max-width: 720px;
|
max-width: 720px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 600px) {
|
||||||
|
div[name="error_msg"] {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
style="enable-background:new 0 0 477.175 477.175;"
|
style="enable-background:new 0 0 477.175 477.175;"
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
sodipodi:docname="back.svg"
|
sodipodi:docname="back.svg"
|
||||||
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"><metadata
|
inkscape:version="1.0.2 (e86c870879, 2021-01-15, custom)"><metadata
|
||||||
id="metadata41"><rdf:RDF><cc:Work
|
id="metadata41"><rdf:RDF><cc:Work
|
||||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||||
|
|
@ -28,24 +28,25 @@
|
||||||
guidetolerance="10"
|
guidetolerance="10"
|
||||||
inkscape:pageopacity="0"
|
inkscape:pageopacity="0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:window-width="738"
|
inkscape:window-width="903"
|
||||||
inkscape:window-height="480"
|
inkscape:window-height="453"
|
||||||
id="namedview37"
|
id="namedview37"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:zoom="1.7582648"
|
inkscape:zoom="1.243281"
|
||||||
inkscape:cx="238.58749"
|
inkscape:cx="246.24387"
|
||||||
inkscape:cy="238.58749"
|
inkscape:cy="236.82063"
|
||||||
inkscape:window-x="0"
|
inkscape:window-x="0"
|
||||||
inkscape:window-y="27"
|
inkscape:window-y="54"
|
||||||
inkscape:window-maximized="0"
|
inkscape:window-maximized="0"
|
||||||
inkscape:current-layer="Capa_1" />
|
inkscape:current-layer="Capa_1"
|
||||||
|
inkscape:document-rotation="0" />
|
||||||
<g
|
<g
|
||||||
id="g4"
|
id="g4"
|
||||||
style="fill:#f9f9f9">
|
style="fill:#1a1a1a">
|
||||||
<path
|
<path
|
||||||
d="M145.188,238.575l215.5-215.5c5.3-5.3,5.3-13.8,0-19.1s-13.8-5.3-19.1,0l-225.1,225.1c-5.3,5.3-5.3,13.8,0,19.1l225.1,225 c2.6,2.6,6.1,4,9.5,4s6.9-1.3,9.5-4c5.3-5.3,5.3-13.8,0-19.1L145.188,238.575z"
|
d="M145.188,238.575l215.5-215.5c5.3-5.3,5.3-13.8,0-19.1s-13.8-5.3-19.1,0l-225.1,225.1c-5.3,5.3-5.3,13.8,0,19.1l225.1,225 c2.6,2.6,6.1,4,9.5,4s6.9-1.3,9.5-4c5.3-5.3,5.3-13.8,0-19.1L145.188,238.575z"
|
||||||
id="path2"
|
id="path2"
|
||||||
style="fill:#f9f9f9" />
|
style="fill:#1a1a1a" />
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
id="g6">
|
id="g6">
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
|
@ -0,0 +1,102 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
version="1.1"
|
||||||
|
id="Layer_1"
|
||||||
|
x="0px"
|
||||||
|
y="0px"
|
||||||
|
viewBox="0 0 330 330"
|
||||||
|
style="enable-background:new 0 0 330 330;"
|
||||||
|
xml:space="preserve"
|
||||||
|
sodipodi:docname="close.svg"
|
||||||
|
inkscape:version="1.0.2 (e86c870879, 2021-01-15, custom)"><metadata
|
||||||
|
id="metadata39"><rdf:RDF><cc:Work
|
||||||
|
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||||
|
id="defs37" /><sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="832"
|
||||||
|
inkscape:window-height="480"
|
||||||
|
id="namedview35"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="2.5909091"
|
||||||
|
inkscape:cx="165"
|
||||||
|
inkscape:cy="165"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="Layer_1" />
|
||||||
|
<g
|
||||||
|
id="XMLID_28_"
|
||||||
|
style="fill:#ff2a2a">
|
||||||
|
<path
|
||||||
|
id="XMLID_29_"
|
||||||
|
d="M 165,0 C 120.926,0 79.492,17.163 48.328,48.327 -16.006,112.66 -16.006,217.338 48.326,281.672 79.49,312.837 120.926,330 165,330 c 44.072,0 85.508,-17.163 116.672,-48.328 64.334,-64.334 64.334,-169.012 0,-233.345 C 250.508,17.163 209.072,0 165,0 Z m 74.246,239.245 c -2.93,2.929 -6.768,4.394 -10.607,4.394 -3.838,0 -7.678,-1.465 -10.605,-4.394 L 165,186.213 111.967,239.246 c -2.93,2.929 -6.768,4.394 -10.607,4.394 -3.838,0 -7.678,-1.465 -10.605,-4.394 -5.859,-5.857 -5.859,-15.355 0,-21.213 L 143.787,165 90.754,111.967 c -5.859,-5.857 -5.859,-15.355 0,-21.213 5.857,-5.857 15.355,-5.857 21.213,0 L 165,143.787 218.031,90.754 c 5.857,-5.857 15.355,-5.857 21.213,0 5.859,5.857 5.859,15.355 0,21.213 L 186.213,165 l 53.033,53.032 c 5.858,5.858 5.858,15.356 0,21.213 z"
|
||||||
|
style="fill:#ff2a2a" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g4">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g6">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g8">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g10">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g12">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g14">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g16">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g18">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g20">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g22">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g24">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g26">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g28">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g30">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g32">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g43"
|
||||||
|
style="fill:#ff2a2a">
|
||||||
|
<path
|
||||||
|
id="path41"
|
||||||
|
d="M 165,0 C 120.926,0 79.492,17.163 48.328,48.327 -16.006,112.66 -16.006,217.338 48.326,281.672 79.49,312.837 120.926,330 165,330 c 44.072,0 85.508,-17.163 116.672,-48.328 64.334,-64.334 64.334,-169.012 0,-233.345 C 250.508,17.163 209.072,0 165,0 Z m 74.246,239.245 c -2.93,2.929 -6.768,4.394 -10.607,4.394 -3.838,0 -7.678,-1.465 -10.605,-4.394 L 165,186.213 111.967,239.246 c -2.93,2.929 -6.768,4.394 -10.607,4.394 -3.838,0 -7.678,-1.465 -10.605,-4.394 -5.859,-5.857 -5.859,-15.355 0,-21.213 L 143.787,165 90.754,111.967 c -5.859,-5.857 -5.859,-15.355 0,-21.213 5.857,-5.857 15.355,-5.857 21.213,0 L 165,143.787 218.031,90.754 c 5.857,-5.857 15.355,-5.857 21.213,0 5.859,5.857 5.859,15.355 0,21.213 L 186.213,165 l 53.033,53.032 c 5.858,5.858 5.858,15.356 0,21.213 z"
|
||||||
|
style="fill:#ff2a2a" />
|
||||||
|
</g></svg>
|
||||||
|
After Width: | Height: | Size: 3.4 KiB |
|
|
@ -1,104 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="710"
|
|
||||||
height="260"
|
|
||||||
viewBox="0 0 710 260.00001"
|
|
||||||
version="1.1"
|
|
||||||
id="svg8"
|
|
||||||
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
|
|
||||||
sodipodi:docname="label-l.svg">
|
|
||||||
<defs
|
|
||||||
id="defs2" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="0.98994949"
|
|
||||||
inkscape:cx="641.86295"
|
|
||||||
inkscape:cy="202.32654"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:current-layer="layer1"
|
|
||||||
inkscape:document-rotation="0"
|
|
||||||
showgrid="false"
|
|
||||||
units="px"
|
|
||||||
inkscape:window-width="1496"
|
|
||||||
inkscape:window-height="1026"
|
|
||||||
inkscape:window-x="128"
|
|
||||||
inkscape:window-y="27"
|
|
||||||
inkscape:window-maximized="0" />
|
|
||||||
<metadata
|
|
||||||
id="metadata5">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title></dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1">
|
|
||||||
<text
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:96px;line-height:1.25;font-family:sans-serif;fill:#d7f4ee;fill-opacity:1;stroke:none;"
|
|
||||||
x="268.32236"
|
|
||||||
y="211.30991"
|
|
||||||
id="text52"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan50"
|
|
||||||
x="268.32236"
|
|
||||||
y="211.30991"
|
|
||||||
style="font-size:96px;fill:#d7f4ee;">Lupt Chat </tspan></text>
|
|
||||||
<text
|
|
||||||
xml:space="preserve"
|
|
||||||
style="font-style:normal;font-weight:normal;font-size:96px;line-height:1.25;font-family:sans-serif;fill:#aaccff;fill-opacity:1;stroke:none;"
|
|
||||||
x="281.27032"
|
|
||||||
y="102.09531"
|
|
||||||
id="text56"><tspan
|
|
||||||
sodipodi:role="line"
|
|
||||||
id="tspan54"
|
|
||||||
x="281.27032"
|
|
||||||
y="102.09531">लुप्त चैट</tspan></text>
|
|
||||||
<g
|
|
||||||
style="fill:#5fd3bc"
|
|
||||||
id="g49"
|
|
||||||
transform="matrix(-12.364986,0,0,12.637333,279.67091,-13.563207)">
|
|
||||||
<path
|
|
||||||
d="M 8,9.50004 C 7.30964,9.50004 6.75,10.0597 6.75,10.75 6.75,11.4404 7.30964,12 8,12 8.69036,12 9.25,11.4404 9.25,10.75 9.25,10.0597 8.69036,9.50004 8,9.50004 Z"
|
|
||||||
fill="#000000"
|
|
||||||
id="path29"
|
|
||||||
style="fill:#5fd3bc" />
|
|
||||||
<path
|
|
||||||
d="m 12,9.50004 c -0.6904,0 -1.25,0.55966 -1.25,1.24996 0,0.6904 0.5596,1.25 1.25,1.25 0.6904,0 1.25,-0.5596 1.25,-1.25 0,-0.6903 -0.5596,-1.24996 -1.25,-1.24996 z"
|
|
||||||
fill="#000000"
|
|
||||||
id="path31"
|
|
||||||
style="fill:#5fd3bc" />
|
|
||||||
<path
|
|
||||||
d="m 14.75,10.75 c 0,-0.6903 0.5596,-1.24996 1.25,-1.24996 0.6904,0 1.25,0.55966 1.25,1.24996 0,0.6904 -0.5596,1.25 -1.25,1.25 -0.6904,0 -1.25,-0.5596 -1.25,-1.25 z"
|
|
||||||
fill="#000000"
|
|
||||||
id="path33"
|
|
||||||
style="fill:#5fd3bc" />
|
|
||||||
<path
|
|
||||||
fill-rule="evenodd"
|
|
||||||
clip-rule="evenodd"
|
|
||||||
d="M 16.1007,4.59283 C 13.4065,4.36307 10.6983,4.34974 8.00194,4.55296 L 7.80871,4.56752 C 5.23741,4.76132 3.25,6.90415 3.25,9.48275 V 18 c 0,0.2639 0.13867,0.5084 0.36515,0.6438 0.22648,0.1354 0.50746,0.1418 0.73989,0.0169 L 8.26583,16.559 C 8.44774,16.4612 8.65104,16.41 8.85756,16.41 H 17.834 c 1.1321,0 2.1022,-0.8094 2.3052,-1.9231 0.4113,-2.2572 0.4437,-4.5672 0.0961,-6.83511 L 20.1329,6.98346 C 19.9464,5.76671 18.951,4.8359 17.7245,4.7313 Z M 8.11468,6.04871 C 10.731,5.85152 13.359,5.86446 15.9733,6.0874 l 1.6237,0.13848 c 0.5364,0.04574 0.9716,0.45277 1.0532,0.98485 l 0.1024,0.66833 C 19.075,9.98234 19.0449,12.1246 18.6635,14.218 18.5904,14.6188 18.2413,14.91 17.834,14.91 H 8.85756 c -0.45434,0 -0.9016,0.1126 -1.30181,0.3277 L 4.75,16.7455 V 9.48275 C 4.75,7.68884 6.13262,6.1981 7.92144,6.06328 Z"
|
|
||||||
fill="#000000"
|
|
||||||
id="path35"
|
|
||||||
style="fill:#5fd3bc" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
|
@ -12,7 +12,7 @@
|
||||||
viewBox="0 0 710 260.00001"
|
viewBox="0 0 710 260.00001"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg8"
|
id="svg8"
|
||||||
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
|
inkscape:version="1.0.2 (e86c870879, 2021-01-15, custom)"
|
||||||
sodipodi:docname="label.svg">
|
sodipodi:docname="label.svg">
|
||||||
<defs
|
<defs
|
||||||
id="defs2" />
|
id="defs2" />
|
||||||
|
|
@ -23,18 +23,18 @@
|
||||||
borderopacity="1.0"
|
borderopacity="1.0"
|
||||||
inkscape:pageopacity="0.0"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="0.7"
|
inkscape:zoom="0.98994949"
|
||||||
inkscape:cx="411.10748"
|
inkscape:cx="358.08713"
|
||||||
inkscape:cy="261.91995"
|
inkscape:cy="34.196821"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="layer1"
|
inkscape:current-layer="layer1"
|
||||||
inkscape:document-rotation="0"
|
inkscape:document-rotation="0"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
units="px"
|
units="px"
|
||||||
inkscape:window-width="1496"
|
inkscape:window-width="1496"
|
||||||
inkscape:window-height="1026"
|
inkscape:window-height="1019"
|
||||||
inkscape:window-x="128"
|
inkscape:window-x="342"
|
||||||
inkscape:window-y="27"
|
inkscape:window-y="0"
|
||||||
inkscape:window-maximized="0" />
|
inkscape:window-maximized="0" />
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata5">
|
id="metadata5">
|
||||||
|
|
@ -54,51 +54,53 @@
|
||||||
id="layer1">
|
id="layer1">
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
style="font-style:normal;font-weight:normal;font-size:96px;line-height:1.25;font-family:sans-serif;fill:#217867;fill-opacity:1;stroke:none"
|
style="font-style:normal;font-weight:normal;font-size:96px;line-height:1.25;font-family:sans-serif;fill:#216778;fill-opacity:1;stroke:none;"
|
||||||
x="268.32236"
|
x="152.76921"
|
||||||
y="211.30991"
|
y="232.96042"
|
||||||
id="text52"><tspan
|
id="text52"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
id="tspan50"
|
id="tspan50"
|
||||||
x="268.32236"
|
x="152.76921"
|
||||||
y="211.30991"
|
y="232.96042"
|
||||||
style="font-size:96px;fill:#217867">Lupt Chat </tspan></text>
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:96px;font-family:Itim;-inkscape-font-specification:Itim;fill:#216778;">Lupt Chat </tspan></text>
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
style="font-style:normal;font-weight:normal;font-size:96px;line-height:1.25;font-family:sans-serif;fill:#535d6c;fill-opacity:1;stroke:none;"
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:133.333px;line-height:1.25;font-family:Teko;-inkscape-font-specification:Teko;fill:#374548;fill-opacity:1;stroke:none"
|
||||||
x="281.27032"
|
x="268.19843"
|
||||||
y="102.09531"
|
y="130.02667"
|
||||||
id="text56"><tspan
|
id="text56"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
id="tspan54"
|
id="tspan54"
|
||||||
x="281.27032"
|
x="268.19843"
|
||||||
y="102.09531">लुप्त चैट</tspan></text>
|
y="130.02667"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:133.333px;font-family:Rajdhani;-inkscape-font-specification:'Rajdhani Medium';fill:#374548">लुप्त चैट</tspan></text>
|
||||||
<g
|
<g
|
||||||
style="fill:#d45500"
|
style="fill:#d45500;stroke:#005544;stroke-width:0.385726;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
id="g49"
|
id="g49"
|
||||||
transform="matrix(-12.364986,0,0,12.637333,279.67091,-13.563207)">
|
transform="matrix(-10.249207,0,0,10.492348,280.41862,-26.401894)">
|
||||||
<path
|
<path
|
||||||
d="M 8,9.50004 C 7.30964,9.50004 6.75,10.0597 6.75,10.75 6.75,11.4404 7.30964,12 8,12 8.69036,12 9.25,11.4404 9.25,10.75 9.25,10.0597 8.69036,9.50004 8,9.50004 Z"
|
d="M 8,9.50004 C 7.30964,9.50004 6.75,10.0597 6.75,10.75 6.75,11.4404 7.30964,12 8,12 8.69036,12 9.25,11.4404 9.25,10.75 9.25,10.0597 8.69036,9.50004 8,9.50004 Z"
|
||||||
fill="#000000"
|
fill="#000000"
|
||||||
id="path29"
|
id="path29"
|
||||||
style="fill:#d45500" />
|
style="fill:none;stroke:#005544;stroke-width:0.385726;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
<path
|
<path
|
||||||
d="m 12,9.50004 c -0.6904,0 -1.25,0.55966 -1.25,1.24996 0,0.6904 0.5596,1.25 1.25,1.25 0.6904,0 1.25,-0.5596 1.25,-1.25 0,-0.6903 -0.5596,-1.24996 -1.25,-1.24996 z"
|
d="m 12,9.50004 c -0.6904,0 -1.25,0.55966 -1.25,1.24996 0,0.6904 0.5596,1.25 1.25,1.25 0.6904,0 1.25,-0.5596 1.25,-1.25 0,-0.6903 -0.5596,-1.24996 -1.25,-1.24996 z"
|
||||||
fill="#000000"
|
fill="#000000"
|
||||||
id="path31"
|
id="path31"
|
||||||
style="fill:#d45500" />
|
style="fill:none;stroke:#005544;stroke-width:0.385726;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
<path
|
<path
|
||||||
d="m 14.75,10.75 c 0,-0.6903 0.5596,-1.24996 1.25,-1.24996 0.6904,0 1.25,0.55966 1.25,1.24996 0,0.6904 -0.5596,1.25 -1.25,1.25 -0.6904,0 -1.25,-0.5596 -1.25,-1.25 z"
|
d="m 14.75,10.75 c 0,-0.6903 0.5596,-1.24996 1.25,-1.24996 0.6904,0 1.25,0.55966 1.25,1.24996 0,0.6904 -0.5596,1.25 -1.25,1.25 -0.6904,0 -1.25,-0.5596 -1.25,-1.25 z"
|
||||||
fill="#000000"
|
fill="#000000"
|
||||||
id="path33"
|
id="path33"
|
||||||
style="fill:#d45500" />
|
style="fill:none;stroke:#005544;stroke-width:0.385726;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||||
<path
|
<path
|
||||||
fill-rule="evenodd"
|
fill-rule="evenodd"
|
||||||
clip-rule="evenodd"
|
clip-rule="evenodd"
|
||||||
d="M 16.1007,4.59283 C 13.4065,4.36307 10.6983,4.34974 8.00194,4.55296 L 7.80871,4.56752 C 5.23741,4.76132 3.25,6.90415 3.25,9.48275 V 18 c 0,0.2639 0.13867,0.5084 0.36515,0.6438 0.22648,0.1354 0.50746,0.1418 0.73989,0.0169 L 8.26583,16.559 C 8.44774,16.4612 8.65104,16.41 8.85756,16.41 H 17.834 c 1.1321,0 2.1022,-0.8094 2.3052,-1.9231 0.4113,-2.2572 0.4437,-4.5672 0.0961,-6.83511 L 20.1329,6.98346 C 19.9464,5.76671 18.951,4.8359 17.7245,4.7313 Z M 8.11468,6.04871 C 10.731,5.85152 13.359,5.86446 15.9733,6.0874 l 1.6237,0.13848 c 0.5364,0.04574 0.9716,0.45277 1.0532,0.98485 l 0.1024,0.66833 C 19.075,9.98234 19.0449,12.1246 18.6635,14.218 18.5904,14.6188 18.2413,14.91 17.834,14.91 H 8.85756 c -0.45434,0 -0.9016,0.1126 -1.30181,0.3277 L 4.75,16.7455 V 9.48275 C 4.75,7.68884 6.13262,6.1981 7.92144,6.06328 Z"
|
d="M 16.1007,4.59283 C 13.4065,4.36307 10.6983,4.34974 8.00194,4.55296 L 7.80871,4.56752 C 5.23741,4.76132 3.25,6.90415 3.25,9.48275 V 18 c 0,0.2639 0.13867,0.5084 0.36515,0.6438 0.22648,0.1354 0.50746,0.1418 0.73989,0.0169 L 8.26583,16.559 C 8.44774,16.4612 8.65104,16.41 8.85756,16.41 H 17.834 c 1.1321,0 2.1022,-0.8094 2.3052,-1.9231 0.4113,-2.2572 0.4437,-4.5672 0.0961,-6.83511 L 20.1329,6.98346 C 19.9464,5.76671 18.951,4.8359 17.7245,4.7313 Z"
|
||||||
fill="#000000"
|
fill="#000000"
|
||||||
id="path35"
|
id="path35"
|
||||||
style="fill:#d45500" />
|
style="fill:none;stroke:#005544;stroke-width:0.385726;stroke-miterlimit:4;stroke-dasharray:none"
|
||||||
|
sodipodi:nodetypes="cccsssccssccccc" />
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.7 KiB |
|
|
@ -0,0 +1,15 @@
|
||||||
|
|
||||||
|
<svg version="1.1" id="L3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 100 100" enable-background="new 0 0 0 0" xml:space="preserve">
|
||||||
|
<circle fill="none" stroke="#000" stroke-width="4" cx="50" cy="50" r="44" style="opacity:0.5;"/>
|
||||||
|
<circle fill="#fff" stroke="#008066" stroke-width="3" cx="8" cy="54" r="6" >
|
||||||
|
<animateTransform
|
||||||
|
attributeName="transform"
|
||||||
|
dur="2s"
|
||||||
|
type="rotate"
|
||||||
|
from="0 50 48"
|
||||||
|
to="360 50 52"
|
||||||
|
repeatCount="indefinite" />
|
||||||
|
|
||||||
|
</circle>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 593 B |
|
|
@ -15,7 +15,7 @@
|
||||||
style="enable-background:new 0 0 477.175 477.175;"
|
style="enable-background:new 0 0 477.175 477.175;"
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
sodipodi:docname="next.svg"
|
sodipodi:docname="next.svg"
|
||||||
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"><metadata
|
inkscape:version="1.0.2 (e86c870879, 2021-01-15, custom)"><metadata
|
||||||
id="metadata41"><rdf:RDF><cc:Work
|
id="metadata41"><rdf:RDF><cc:Work
|
||||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||||
|
|
@ -28,24 +28,25 @@
|
||||||
guidetolerance="10"
|
guidetolerance="10"
|
||||||
inkscape:pageopacity="0"
|
inkscape:pageopacity="0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:window-width="738"
|
inkscape:window-width="903"
|
||||||
inkscape:window-height="480"
|
inkscape:window-height="480"
|
||||||
id="namedview37"
|
id="namedview37"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:zoom="1.7582648"
|
inkscape:zoom="0.4395662"
|
||||||
inkscape:cx="238.58749"
|
inkscape:cx="323.57023"
|
||||||
inkscape:cy="238.58749"
|
inkscape:cy="216.28028"
|
||||||
inkscape:window-x="0"
|
inkscape:window-x="595"
|
||||||
inkscape:window-y="27"
|
inkscape:window-y="132"
|
||||||
inkscape:window-maximized="0"
|
inkscape:window-maximized="0"
|
||||||
inkscape:current-layer="Capa_1" />
|
inkscape:current-layer="Capa_1"
|
||||||
|
inkscape:document-rotation="0" />
|
||||||
<g
|
<g
|
||||||
id="g4"
|
id="g4"
|
||||||
style="fill:#f9f9f9">
|
style="fill:#1a1a1a">
|
||||||
<path
|
<path
|
||||||
d="M360.731,229.075l-225.1-225.1c-5.3-5.3-13.8-5.3-19.1,0s-5.3,13.8,0,19.1l215.5,215.5l-215.5,215.5 c-5.3,5.3-5.3,13.8,0,19.1c2.6,2.6,6.1,4,9.5,4c3.4,0,6.9-1.3,9.5-4l225.1-225.1C365.931,242.875,365.931,234.275,360.731,229.075z "
|
d="M360.731,229.075l-225.1-225.1c-5.3-5.3-13.8-5.3-19.1,0s-5.3,13.8,0,19.1l215.5,215.5l-215.5,215.5 c-5.3,5.3-5.3,13.8,0,19.1c2.6,2.6,6.1,4,9.5,4c3.4,0,6.9-1.3,9.5-4l225.1-225.1C365.931,242.875,365.931,234.275,360.731,229.075z "
|
||||||
id="path2"
|
id="path2"
|
||||||
style="fill:#f9f9f9" />
|
style="fill:#1a1a1a" />
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
id="g6">
|
id="g6">
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.1 KiB |
|
|
@ -0,0 +1,100 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
version="1.1"
|
||||||
|
id="Layer_1"
|
||||||
|
x="0px"
|
||||||
|
y="0px"
|
||||||
|
viewBox="0 0 512.001 512.001"
|
||||||
|
style="enable-background:new 0 0 512.001 512.001;"
|
||||||
|
xml:space="preserve"
|
||||||
|
sodipodi:docname="pattern.svg"
|
||||||
|
inkscape:version="1.0.2 (e86c870879, 2021-01-15, custom)"><metadata
|
||||||
|
id="metadata43"><rdf:RDF><cc:Work
|
||||||
|
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||||
|
id="defs41" /><sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1721"
|
||||||
|
inkscape:window-height="1019"
|
||||||
|
id="namedview39"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="0.20873984"
|
||||||
|
inkscape:cx="-1382.0481"
|
||||||
|
inkscape:cy="-167.56932"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="Layer_1"
|
||||||
|
inkscape:document-rotation="0" />
|
||||||
|
<g
|
||||||
|
id="g6"
|
||||||
|
style="fill:#f0efeb;fill-opacity:1">
|
||||||
|
<g
|
||||||
|
id="g4"
|
||||||
|
style="fill:#f0efeb;fill-opacity:1">
|
||||||
|
<path
|
||||||
|
d="m 503.032,394.775 h -76.738 l 82.927,-82.624 c 1.686,-1.681 2.636,-3.963 2.638,-6.346 0.002,-2.382 -0.941,-4.665 -2.625,-6.35 l -43.004,-43.03 43.01,-43.108 c 3.496,-3.504 3.492,-9.177 -0.008,-12.678 l -83.372,-83.362 77.179,-0.056 c 4.95,0 8.961,-4.016 8.961,-8.966 V 9.443 c 0,-4.955 -4.015,-8.969 -8.969,-8.969 h -98.812 c -4.955,0 -8.969,4.015 -8.969,8.969 V 86.676 L 311.664,3.1 c -1.681,-1.681 -3.963,-2.627 -6.344,-2.626 -2.379,0.001 -4.661,0.946 -6.343,2.63 L 255.976,46.141 212.935,3.1 c -1.683,-1.681 -3.963,-2.626 -6.343,-2.626 -2.38,0 -4.66,0.946 -6.343,2.627 L 116.752,86.633 V 9.443 c 0,-4.955 -4.016,-8.969 -8.969,-8.969 H 8.969 C 4.016,0.474 0,4.488 0,9.443 v 98.812 c 0,4.955 4.016,8.969 8.969,8.969 H 86.171 L 2.626,200.801 C 0.944,202.485 0,204.766 0,207.145 c 0,2.379 0.947,4.66 2.63,6.343 l 43.061,43.028 -43.065,43.098 c -1.684,1.685 -2.629,3.972 -2.625,6.354 0.004,2.382 0.954,4.665 2.643,6.347 l 82.891,82.462 H 8.969 C 4.016,394.777 0,398.792 0,403.746 v 98.812 c 0,4.955 4.016,8.969 8.969,8.969 h 98.812 c 4.953,0 8.969,-4.015 8.969,-8.969 v -76.726 l 83.517,83.085 c 1.75,1.74 4.037,2.611 6.326,2.611 2.294,0 4.589,-0.874 6.34,-2.624 l 43.085,-43.048 43.046,43.046 c 1.752,1.751 4.047,2.626 6.343,2.626 2.29,0 4.58,-0.872 6.331,-2.615 l 83.512,-83.207 v 76.852 c 0,4.955 4.015,8.969 8.969,8.969 h 98.812 c 4.955,0 8.969,-4.015 8.969,-8.969 v -98.812 c 10e-4,-4.956 -4.013,-8.971 -8.968,-8.971 z m -12.837,-88.991 -77.007,76.725 v -72.92 l 40.372,-40.464 z m 0.017,-98.791 -36.662,36.746 -40.361,-40.386 V 129.979 Z M 413.188,18.411 h 80.874 v 80.882 l -80.874,0.057 z m -107.862,3.718 77.221,77.213 -73.422,-0.053 -40.464,-40.465 z m 89.923,95.161 v 80.808 H 314.375 V 117.233 Z M 206.595,22.128 243.298,58.831 202.877,99.286 h -73.409 z m -89.844,95.096 h 80.874 v 80.874 H 116.751 Z M 17.939,99.286 V 18.412 h 80.874 v 80.874 z m 3.715,107.853 77.158,-77.187 v 73.401 L 58.37,243.827 Z m 77.158,286.45 H 17.939 v -80.874 h 80.874 v 80.874 z m 0,-110.908 -77.145,-76.745 36.712,-36.74 40.433,40.402 z m 107.769,107.211 -77.579,-77.177 h 73.876 l 40.455,40.455 z m -89.83,-95.115 V 314.85 l 80.869,-0.001 h 0.005 v 79.928 z m 188.667,95.108 -36.71,-36.71 40.413,-40.38 73.73,-0.062 z m 89.831,-95.1 -80.874,0.068 v -80.002 h 80.874 z m 5.249,-97.874 h -95.092 c -4.955,0 -8.969,4.015 -8.969,8.969 v 94.232 l -40.413,40.379 -40.461,-40.46 V 305.88 c 0,-2.379 -0.945,-4.659 -2.627,-6.343 -1.683,-1.681 -3.963,-2.626 -6.342,-2.626 l -95.099,10e-4 -40.435,-40.404 40.44,-40.471 h 95.095 c 4.953,0 8.969,-4.015 8.969,-8.969 v -95.1 l 40.418,-40.452 40.455,40.455 v 95.097 c 0,4.955 4.015,8.969 8.969,8.969 h 95.095 l 40.378,40.401 z m 93.563,196.678 h -80.874 v -80.874 h 80.874 z"
|
||||||
|
id="path2"
|
||||||
|
style="fill:#f0efeb;fill-opacity:1" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g8">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g10">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g12">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g14">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g16">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g18">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g20">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g22">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g24">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g26">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g28">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g30">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g32">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g34">
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g36">
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.6 KiB |
|
|
@ -13,8 +13,8 @@
|
||||||
fill="none"
|
fill="none"
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg4"
|
id="svg4"
|
||||||
sodipodi:docname="send2.svg"
|
sodipodi:docname="send.svg"
|
||||||
inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
|
inkscape:version="1.0.2 (e86c870879, 2021-01-15, custom)">
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata10">
|
id="metadata10">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
|
|
@ -41,16 +41,17 @@
|
||||||
inkscape:window-height="810"
|
inkscape:window-height="810"
|
||||||
id="namedview6"
|
id="namedview6"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:zoom="17.479167"
|
inkscape:zoom="15.22"
|
||||||
inkscape:cx="10.309773"
|
inkscape:cx="10.195351"
|
||||||
inkscape:cy="11.868146"
|
inkscape:cy="15.765659"
|
||||||
inkscape:window-x="0"
|
inkscape:window-x="0"
|
||||||
inkscape:window-y="27"
|
inkscape:window-y="27"
|
||||||
inkscape:window-maximized="0"
|
inkscape:window-maximized="0"
|
||||||
inkscape:current-layer="svg4" />
|
inkscape:current-layer="svg4"
|
||||||
|
inkscape:document-rotation="0" />
|
||||||
<path
|
<path
|
||||||
d="M 7.7577801,6.14799 C 6.84443,5.77187 6.0833001,5.45843 5.49196,5.30702 4.91915,5.16036 4.18085,5.07761 3.63766,5.62862 3.09447,6.17962 3.18776,6.91666 3.34259,7.48732 3.50242,8.0764399 3.8267,8.83302 4.21583,9.7409 L 4.86259,11.25 H 10 c 0.4142,0 0.75,0.3358 0.75,0.75 0,0.4142 -0.3358,0.75 -0.75,0.75 H 4.8626 l -0.64677,1.5091 c -0.38913,0.9079 -0.71341,1.6645 -0.87324,2.2536 -0.15483,0.5706 -0.24812,1.3077 0.29507,1.8587 0.54319,0.551 1.28149,0.4682 1.8543,0.3216 0.5913401,-0.1514 1.35247,-0.4649 2.2658102,-0.841 L 19.1997,13.1406 c 0.2056,-0.0845 0.4282,-0.1761 0.5944,-0.2736 0.1499,-0.088 0.5493,-0.3478 0.5493,-0.867 0,-0.5192 -0.3994,-0.779 -0.5493,-0.867 -0.1662,-0.0975 -0.3888,-0.1891 -0.5944,-0.2736 z"
|
d="M 7.7577801,6.14799 C 6.84443,5.77187 6.0833001,5.45843 5.49196,5.30702 4.91915,5.16036 4.18085,5.07761 3.63766,5.62862 3.09447,6.17962 3.18776,6.91666 3.34259,7.48732 3.50242,8.0764399 3.8267,8.83302 4.21583,9.7409 L 4.86259,11.25 H 10 c 0.4142,0 0.75,0.3358 0.75,0.75 0,0.4142 -0.3358,0.75 -0.75,0.75 H 4.8626 l -0.64677,1.5091 c -0.38913,0.9079 -0.71341,1.6645 -0.87324,2.2536 -0.15483,0.5706 -0.24812,1.3077 0.29507,1.8587 0.54319,0.551 1.28149,0.4682 1.8543,0.3216 0.5913401,-0.1514 1.35247,-0.4649 2.2658102,-0.841 L 19.1997,13.1406 c 0.2056,-0.0845 0.4282,-0.1761 0.5944,-0.2736 0.1499,-0.088 0.5493,-0.3478 0.5493,-0.867 0,-0.5192 -0.3994,-0.779 -0.5493,-0.867 -0.1662,-0.0975 -0.3888,-0.1891 -0.5944,-0.2736 z"
|
||||||
fill="black"
|
fill="black"
|
||||||
id="path2"
|
id="path2"
|
||||||
style="fill:#f9f9f9;stroke-width:1" />
|
style="fill:#2ca089;stroke-width:1" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.3 KiB |
|
|
@ -3,176 +3,197 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<link rel="stylesheet" href="css/siimple.min.css">
|
|
||||||
<link rel="stylesheet" href="css/style.css">
|
<link rel="stylesheet" href="css/style.css">
|
||||||
<title>Lupt Chat</title>
|
<title>Lupt Chat</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="progressbar" class="siimple-progress siimple-progress--primary siimple-progress--striped progress-bar">
|
<div id="progress" class="bg-white" style="z-index: 9999; position: fixed; top: 0; bottom: 0;width: 100%; height: 100%;">
|
||||||
<span style="width:100%;"></span>
|
<div style="top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
width:10em;
|
||||||
|
height:10em;
|
||||||
|
margin-top: -5em; /*set to a negative number 1/2 of your height*/
|
||||||
|
margin-left: -5em; /*set to a negative number 1/2 of your width*/
|
||||||
|
position:fixed;
|
||||||
|
text-align: center;
|
||||||
|
">
|
||||||
|
<img src="img/loading.svg" style="height: 100%;">
|
||||||
|
<button class="button" onclick="leave()">Close</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Connect Screen -->
|
<!-- Connect Screen -->
|
||||||
<div id="connect_panel" class="siimple-content siimple-content--extra-small">
|
<div id="connect_panel" class="container">
|
||||||
<div class="siimple--px-5 siimple--py-0">
|
<div class="logo is-center" style="padding-top: 20px;">
|
||||||
<tabs>
|
<img src="img/label.png" alt="Lupt Chat" width="400">
|
||||||
<div class="siimple-jumbotron siimple--text-center siimple--py-4">
|
|
||||||
<div class="siimple-jumbotron-title"><img src="img/label.svg" alt="Lupt Chat" style="width: 100%; height: auto;"></div>
|
|
||||||
<div class="siimple-jumbotron-detail">Chat in group or to strangers</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="siimple-tabs">
|
<tabs>
|
||||||
<div for="grih_sec" class="siimple-tabs-item siimple-tabs-tab--selected">Grih</div>
|
<div class="tabs is-center">
|
||||||
<div for="stranger_sec" class="siimple-tabs-item">Stranger</div>
|
<a name="kaksh_sec" class="active">Kaksh(Room)</a>
|
||||||
|
<a name="stranger_sec">Stranger</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form name="grih_sec" cmd="join" class="siimple-form">
|
<form name="kaksh_sec" cmd="join">
|
||||||
<div name="error_area" class="siimple-content siimple--py-1 siimple--text-small siimple--color-primary siimple-content--fluid"></div>
|
<div class="is-center">
|
||||||
<div class="siimple-form-detail">Connect Grih(home) with kunjika(id).</div>
|
Connect Kaksh(room) with kunjika(id)
|
||||||
<div class="siimple-form-field">
|
|
||||||
<div class="siimple-form-field-label">Grih kunjika(home id)</div>
|
|
||||||
<input name="grih_kunjika" type="text" class="siimple-input siimple-input--fluid" placeholder="Grih kunjika">
|
|
||||||
<div class="siimple-form-field-helper">New grih is created if no such grih exists</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="siimple-form-field">
|
<div>
|
||||||
<div class="siimple-form-field-label">Your kunjika(id)</div>
|
<label>Kaksh kunjika(room id)</label>
|
||||||
<input name="kunjika" type="text" class="siimple-input siimple-input--fluid" placeholder="Your kunjika">
|
<input name="kaksh_kunjika" type="text" placeholder="Kaksh kunjika">
|
||||||
|
<small class="text-grey">Pick a random id to create new kaksh</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="siimple-form-field">
|
<div>
|
||||||
<div class="siimple-form-field-label">Your name</div>
|
<label>Your kunjika(your id)</label>
|
||||||
<input name="name" type="text" class="siimple-input siimple-input--fluid" placeholder="Your name">
|
<input name="kunjika" type="text" placeholder="Your kunjika">
|
||||||
|
<small class="text-grey">Pick a random kunjika(id)</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="siimple-form-field">
|
<div>
|
||||||
<div class="siimple-form-field-label">Size of Grih</div>
|
<label>Your name</label>
|
||||||
<input name="length" type="number" class="siimple-input siimple-input--fluid" placeholder="Size">
|
<input name="name" type="text" placeholder="Your name">
|
||||||
<div class="siimple-form-field-helper">Number of perople allowed in grih. Leave empty for infinite</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
<label>Size of kaksh(<i>Optional</i>)</label>
|
||||||
|
<input name="length" type="number" placeholder="Size">
|
||||||
|
<small class="text-grey">Number of perople allowed in kaksh.</small>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col is-vertical-align text-right"><div name="error_msg" class="text-error is-hidden"></div></div>
|
||||||
|
<div class="col is-right">
|
||||||
|
<a name="connect" class="button outline primary">Connect</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="siimple-form-field siimple--text-right" style="width: 100%;">
|
|
||||||
<div><span name="error_msg" class="siimple-tag siimple-tag--error siimple--my-2 hidden"></span></div>
|
|
||||||
<div name="connect" class="siimple-btn siimple-btn--success">Connect</div>
|
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<form name="stranger_sec" cmd="rand" class="siimple-form hidden">
|
<form name="stranger_sec" cmd="rand" class="is-hidden">
|
||||||
<div class="siimple-form-detail">Connect random stranger</div>
|
<div class="is-center">
|
||||||
<div class="siimple-form-field">
|
Connect random stranger
|
||||||
<div class="siimple-form-field-label">Your kunjika(id)</div>
|
|
||||||
<input name="kunjika" type="text" class="siimple-input siimple-input--fluid" placeholder="Your kunjika">
|
|
||||||
</div>
|
</div>
|
||||||
<div class="siimple-form-field">
|
<div>
|
||||||
<div class="siimple-form-field-label">Your name</div>
|
<label>Your kunjika(your id)</label>
|
||||||
<input name="name" type="text" class="siimple-input siimple-input--fluid" placeholder="Your name">
|
<input name="kunjika" type="text" placeholder="Your kunjika">
|
||||||
|
<small class="text-grey">Pick a random kunjika(id)</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="siimple-form-field">
|
<div>
|
||||||
<div class="siimple-form-field-label">Tags</div>
|
<label>Your name</label>
|
||||||
<input name="tags" type="text" class="siimple-input siimple-input--fluid" placeholder="Tags">
|
<input name="name" type="text" placeholder="Your name">
|
||||||
<div class="siimple-form-field-helper">Seperated by space. Leave empty to connect anyone. Its recommended to try without tags if you don't get anyone</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
<label>Tags</label>
|
||||||
|
<input name="tags" type="text" placeholder="Tags">
|
||||||
|
<small class="text-grey text-center">
|
||||||
|
Seperated by space. Leave empty to connect anyone.
|
||||||
|
Its recommended to try without tags if you don't get anyone.
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col is-vertical-align text-right"><div name="error_msg" class="text-error is-hidden"></div></div>
|
||||||
|
<div class="col is-right">
|
||||||
|
<a name="connect" class="button outline primary">Connect</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="siimple-form-field siimple--text-right" style="width: 100%;">
|
|
||||||
<div><span name="error_msg" class="siimple-tag siimple-tag--error siimple--my-2 hidden"></span></div>
|
|
||||||
<div name="connect" class="siimple-btn siimple-btn--success">Connect</div>
|
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</tabs>
|
</tabs>
|
||||||
<div class="siimple-content siimple-content--fluid siimple--text-center siimple--py-1">
|
<div class="is-center text-center">
|
||||||
<div class="siimple-form-field-helper">By tapping "Connect" button I agree with <a class="siimple-link" href="/terms.html">Terms of Service</a> and <a class="siimple-link" href="policy.html">Privacy Policy</a></div>
|
<small>
|
||||||
</div>
|
By tapping "Connect" button I agree with
|
||||||
</div>
|
<a href="/terms.html">Terms of Service</a> and
|
||||||
<div class="siimple-footer" align="center">
|
<a href="policy.html">Privacy Policy</a>
|
||||||
Made with ❤️️ by <a href="https://gitlab.com/PiyushXCoder" class="siimple-link">Piyush Mishra</a>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<footer class="is-center" style="padding: 60px;">
|
||||||
|
<small>Made with ❤️️ by <a href="https://gitlab.com/PiyushXCoder" >Piyush Mishra</a></small>
|
||||||
|
</footer>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Chat Screen -->
|
<!-- Chat Screen -->
|
||||||
<div id="chat_panel" class="cover-screen siimple--bg-white hidden">
|
<div id="chat_panel" class="cover-screen chatpanel is-hidden">
|
||||||
<div class="siimple-navbar siimple--py-1 siimple-navbar--dark">
|
<div class="chatpanel-top bg-light">
|
||||||
<div class="siimple--float-left">
|
<button onclick="leave()" class="button chatpanel-top-l">
|
||||||
<a onclick="leave()" class="siimple-navbar-item"><img src="img/back.svg" alt="" height="12px"> Back</a>
|
<img src="img/back.svg" alt="" height="12px"> Back
|
||||||
|
</button>
|
||||||
|
<img src="img/label.png" alt="Lupt Chat" height="40px" class="chatpanel-top-m">
|
||||||
|
<button id="next_btn" onclick="connect_next()" class="button chatpanel-top-r is-hidden">
|
||||||
|
Next <img src="img/next.svg" alt="" height="12px">
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<a class="siimple-navbar-title"><img src="img/label-l.svg" alt="Lupt Chat" height="34px"></a>
|
<div id="message_area_scroll" class="chatpanel-mid">
|
||||||
<div class="siimple--float-right">
|
<div id="message_area">
|
||||||
<a id="next_btn" onclick="connect_next()" class="siimple-navbar-item">Next <img src="img/next.svg" alt="" height="12px"> </a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="message_area_scroll" style="height: calc(100% - 2*44px - 2*5px); padding: 5px; overflow-y: scroll;" class="siimple--bg-light">
|
|
||||||
<div id="message_area" class="siimple--my-1">
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div id="status_area" class="siimple--my-1">
|
<div id="status_area">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="siimple--bg-light chatpanel">
|
<div class="chatpanel-bot bg-light">
|
||||||
<div class="chatpanel-left">
|
<button onclick="$('#action_clip').toggleClass('is-hidden')" class="button chatpanel-bot-l">
|
||||||
<div onclick="$('#action_clip').toggleClass('hidden')" class="siimple-btn siimple-btn--grey siimple--px-1"><img src="img/clip.svg" alt="send" width="24"></div>
|
<img src="img/clip.svg" alt="send" width="24">
|
||||||
</div>
|
</button>
|
||||||
<div class="chatpanel-mid">
|
<div class="chatpanel-bot-m">
|
||||||
<textarea id="send_box" class="siimple-textarea"></textarea>
|
<textarea id="send_box" rows="1"></textarea>
|
||||||
</div>
|
|
||||||
<div class="chatpanel-right">
|
|
||||||
<div onclick="send()" class="siimple-btn siimple-btn--blue siimple-btn--rounded siimple--px-2" style="height: 24px;"><img src="img/send.svg" alt="Send" width="24"></div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<button onclick="send()" class="button chatpanel-bot-r">
|
||||||
|
<img src="img/send.svg" alt="Send" width="50">
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Reply Clip -->
|
<!-- Reply Clip -->
|
||||||
<div id="reply_clip" class="clip-win reply-clip siimple--bg-white hidden">
|
<div id="reply_clip" class="clip-win reply-clip bg-white is-hidden">
|
||||||
<span></span>
|
<span>sss</span>
|
||||||
<div onclick="$('#reply_clip > span').text(''); $('#reply_clip').addClass('hidden');" class="siimple-close siimple--float-right"></div>
|
<a onclick="$('#reply_clip > span').text(''); $('#reply_clip').addClass('hidden');" style="float: right; padding: 3px 6px;">
|
||||||
|
<img src="img/close.svg" alt="X" style="height: 1.8rem; width: auto; cursor: pointer;">
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Selected Clip -->
|
<!-- Selected Clip -->
|
||||||
<div id="selected_clip" class="clip-win selected-clip siimple--bg-white hidden">
|
<div id="selected_clip" class="clip-win selected-clip bg-white is-hidden">
|
||||||
<div class="siimple-btn-group">
|
<div style="padding: 4px;">
|
||||||
<div onclick="copyMessagesToClipboard()" class="siimple-btn siimple-btn--blue siimple--px-2" style="height: 24px;">Copy</div>
|
<div onclick="copyMessagesToClipboard()" class="button outline primary">Copy</div>
|
||||||
<div onclick="prepareReply()" class="siimple-btn siimple-btn--blue siimple--px-2" style="height: 24px;">Reply</div>
|
<div onclick="prepareReply()" class="button outline primary">Reply</div>
|
||||||
|
<a onclick="Messages.unselectAll()" style="float: right; padding: 6px 2px 6px 8px;">
|
||||||
|
<img src="img/close.svg" alt="X" style="height: 1.8rem; width: auto; cursor: pointer;">
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="siimple-close siimple--float-right siimple--my-1 siimple--ml-2"></div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Action Clip -->
|
<!-- Action Clip -->
|
||||||
<div id="action_clip" class="clip-win action-clip siimple--bg-white hidden">
|
<div id="action_clip" class="clip-win action-clip is-hidden bg-white">
|
||||||
<div class="siimple--my-1 hidden">
|
<div class="is-hidden">
|
||||||
<div class="siimple-btn siimple-btn--light">
|
<button class="button">
|
||||||
<img src="img/image.svg" alt="Image" width="50" class="siimple--py-2 siimple--px-2">
|
<img src="img/image.svg" alt="Image" width="50" class="siimple--py-2 siimple--px-2">
|
||||||
<div>send image</div>
|
<div>send image</div>
|
||||||
</div>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<a onclick="cleanMessage()" class="siimple-btn siimple-btn--blue">Clear</a>
|
<button onclick="Messages.cleanMessage()" class="button">Clear</button>
|
||||||
<a onclick="vayaktiList()" class="siimple-btn siimple-btn--blue">List Vyakti(Users)</a>
|
<button onclick="vayaktiList()" class="button">List Vyakti(Users)</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Vyakti List -->
|
<!-- vayakti -->
|
||||||
<div id="vayakti_model" class="siimple-modal siimple-modal--large hidden" style="z-index: 9999;" id="modal">
|
<div id="vayakti_model" class="card is-hidden" style="position: fixed; top: 50px; bottom: 50px; right: 0; z-index: 9999; width: 100%; max-width: 500px;">
|
||||||
<div class="siimple-modal-content">
|
<header>
|
||||||
<div class="siimple-modal-header">
|
<h4>
|
||||||
<div class="siimple-modal-header-title">List Vyakti(Users)</div>
|
List Vyakti(Users)
|
||||||
<div onclick="$('#vayakti_model').addClass('hidden')" class="siimple-modal-header-close" id="modal-close"></div>
|
<button onclick="$('#vayakti_model').addClass('is-hidden'); $('#vayakti_list').empty()" class="button bg-red" style="float: right;"><img src="img/close.svg" alt="X" style="height: 1.8rem; width: auto; cursor: pointer;"></button>
|
||||||
</div>
|
</h4>
|
||||||
<div class="siimple-modal-body siimple--px-0">
|
</header>
|
||||||
<div class="siimple-table siimple--px-3">
|
<div style="overflow-y: scroll; max-height: calc(100% - 40px);">
|
||||||
<div class="siimple-table-header">
|
<table>
|
||||||
<div class="siimple-table-row">
|
<thead>
|
||||||
<div class="siimple-table-cell">Name</div>
|
<th>Name</th>
|
||||||
<div class="siimple-table-cell">Kunjika</div>
|
<th>Kunjika</th>
|
||||||
|
</thead>
|
||||||
|
<tbody id="vayakti_list">
|
||||||
|
<tr>
|
||||||
|
<td>1</td>
|
||||||
|
<td>2</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="vayakti_list" class="siimple-table-body">
|
|
||||||
<div class="siimple-table-row">
|
|
||||||
<div class="siimple-table-cell">a</div>
|
|
||||||
<div class="siimple-table-cell">a</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="siimple-modal-footer siimple--py-2">
|
|
||||||
<a onclick="$('#vayakti_model').addClass('hidden'); $('#vayakti_list').empty()" class="siimple-btn siimple-btn--blue">Close</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script src="js/jquery-3.5.1.min.js"></script>
|
<script src="js/jquery-3.5.1.min.js"></script>
|
||||||
<script src="js/app.js"></script>
|
<script src="js/app.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
597
static/js/app.js
|
|
@ -1,32 +1,54 @@
|
||||||
$(document).ready(() => {
|
|
||||||
$(".siimple-tabs-item").click(function() {
|
let State = class {
|
||||||
var t = $(this);
|
static login() {
|
||||||
var tab = $(t.parents('tabs').first());
|
$('#connect_panel').removeClass('is-hidden');
|
||||||
tab.find('form').each((i,elm) => {
|
$('#chat_panel').addClass('is-hidden');
|
||||||
|
$('#reply_clip').addClass('is-hidden');
|
||||||
|
$('#selected_clip').addClass('is-hidden');
|
||||||
|
$('#action_clip').addClass('is-hidden');
|
||||||
|
$('#vayakti_model').addClass('is-hidden');
|
||||||
|
$('[name="error_msg"]').addClass('is-hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
static chat() {
|
||||||
|
$('#chat_panel').removeClass('is-hidden');
|
||||||
|
$('#connect_panel').addClass('is-hidden');
|
||||||
|
$('#reply_clip').addClass('is-hidden');
|
||||||
|
$('#selected_clip').addClass('is-hidden');
|
||||||
|
$('#action_clip').addClass('is-hidden');
|
||||||
|
$('#vayakti_model').addClass('is-hidden');
|
||||||
|
$('#next_btn').addClass('is-hidden');
|
||||||
|
$('#send_box').focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
static showProgress() {
|
||||||
|
$('#progress').removeClass('is-hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
static hideProgress() {
|
||||||
|
$('#progress').addClass('is-hidden');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let Messages = class {
|
||||||
|
static pick(elm) {
|
||||||
var elm = $(elm);
|
var elm = $(elm);
|
||||||
if(elm.attr('name') == t.attr('for'))
|
elm.toggleClass('active');
|
||||||
elm.removeClass('hidden');
|
|
||||||
|
if($('.active').length == 0)
|
||||||
|
$('#selected_clip').addClass('is-hidden');
|
||||||
else
|
else
|
||||||
elm.addClass('hidden');
|
$('#selected_clip').removeClass('is-hidden');
|
||||||
});
|
}
|
||||||
|
|
||||||
t.parent().find('.siimple-tabs-item').each((i, elm) => {
|
static unselectAll(msg) {
|
||||||
var elm = $(elm);
|
$('.active').each(function() {
|
||||||
if(elm.attr('for') === t.attr('for'))
|
$(this).removeClass('active');
|
||||||
elm.addClass('siimple-tabs-tab--selected');
|
|
||||||
else
|
|
||||||
elm.removeClass('siimple-tabs-tab--selected');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
$('.message-me, .message-other').click(function() {
|
|
||||||
selectMessage(this);
|
|
||||||
});
|
|
||||||
|
|
||||||
$('#selected_clip > .siimple-close').click(function() {
|
|
||||||
unselectMessages();
|
|
||||||
});
|
});
|
||||||
|
$('#selected_clip').addClass('is-hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
static setupTyping() {
|
||||||
var send_typing = false;
|
var send_typing = false;
|
||||||
var timeout = null;
|
var timeout = null;
|
||||||
$('#send_box').keydown(function(e) {
|
$('#send_box').keydown(function(e) {
|
||||||
|
|
@ -51,207 +73,9 @@ $(document).ready(() => {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#send_box').bind('input propertychange keyup', function() {
|
|
||||||
var height = ($(window).height()*0.0165).toFixed(0)*20;
|
|
||||||
var sheight = this.scrollHeight;
|
|
||||||
if(sheight < height) {
|
|
||||||
$(this).height(0);
|
|
||||||
height = this.scrollHeight;
|
|
||||||
$(this).height(height - 20);
|
|
||||||
$('#reply_clip').css('bottom', (this.scrollHeight + 10) + 'px');
|
|
||||||
$('#selected_clip').css('bottom', (this.scrollHeight + 10) + 'px');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$('[name=connect]').click(function () {
|
|
||||||
connect($(this).parents('form').first());
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
function sendTyping() {
|
|
||||||
socket.send(JSON.stringify({
|
|
||||||
cmd: 'status',
|
|
||||||
status: "typing"
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function sendTypingEnd() {
|
static pushTypingStatus() {
|
||||||
socket.send(JSON.stringify({
|
|
||||||
cmd: 'status',
|
|
||||||
status: "typing_end"
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
function calcHeight(value) {
|
|
||||||
let numberOfLineBreaks = (value.match(/\n/g) || []).length;
|
|
||||||
// min-height + lines x line-height + padding + border
|
|
||||||
let newHeight = 20 + numberOfLineBreaks * 20 + 12 + 2;
|
|
||||||
return newHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create WebSocket connection.
|
|
||||||
const socket = new WebSocket('ws://'+window.location.host+'/ws/');
|
|
||||||
var callbacks = [];
|
|
||||||
var myinfo = {
|
|
||||||
kunjika: "",
|
|
||||||
name: ""
|
|
||||||
};
|
|
||||||
var vayakti = {};
|
|
||||||
var typing = [];
|
|
||||||
var no_name_message = false;
|
|
||||||
|
|
||||||
// Connection opened
|
|
||||||
socket.addEventListener('open', function (event) {
|
|
||||||
$('#progressbar').addClass('hidden');
|
|
||||||
});
|
|
||||||
|
|
||||||
// Listen for messages
|
|
||||||
socket.addEventListener('message', function (event) {
|
|
||||||
var j = JSON.parse(event.data);
|
|
||||||
switch(j.cmd) {
|
|
||||||
case 'resp':
|
|
||||||
if(j.result == 'Err') {
|
|
||||||
if($('#chat_panel').hasClass('hidden')) {
|
|
||||||
$('[name="error_msg"]').text(j.message);
|
|
||||||
$('[name="error_msg"]').removeClass('hidden');
|
|
||||||
$('#progressbar').addClass('hidden');
|
|
||||||
joining = false;
|
|
||||||
callbacks = [];
|
|
||||||
} else {
|
|
||||||
pushStatus(j.message);
|
|
||||||
}
|
|
||||||
} else if(j.result == 'Ok'){
|
|
||||||
if(callbacks.length > 0) {
|
|
||||||
callbacks[0]();
|
|
||||||
callbacks.shift();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'random':
|
|
||||||
callbacks[0]();
|
|
||||||
callbacks = [];
|
|
||||||
$('#next_btn').removeClass('hidden');
|
|
||||||
no_name_message = true;
|
|
||||||
pushStatus('Say hi to '+j.name);
|
|
||||||
break;
|
|
||||||
case 'status':
|
|
||||||
if(j.status == "typing") {
|
|
||||||
typing.push(j.kunjika);
|
|
||||||
pushTypingStatus();
|
|
||||||
} else if(j.status == "typing_end") {
|
|
||||||
const index = typing.indexOf(j.kunjika);
|
|
||||||
if (index > -1) typing.splice(index, 1);
|
|
||||||
pushTypingStatus();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'text':
|
|
||||||
pushMessage(j.kunjika, j.text, j.reply);
|
|
||||||
break;
|
|
||||||
case 'connected':
|
|
||||||
vayakti[j.kunjika] = j.name;
|
|
||||||
pushStatus('Vyakti '+j.name+' connected as '+j.kunjika+' at '+currentTime());
|
|
||||||
break;
|
|
||||||
case 'disconnected':
|
|
||||||
delete vayakti[j.kunjika];
|
|
||||||
pushStatus('Vyakti '+j.name+' disconnected as '+j.kunjika+' at '+currentTime());
|
|
||||||
break;
|
|
||||||
case 'left':
|
|
||||||
$('#chat_panel').addClass('hidden');
|
|
||||||
$('#reply_clip').addClass('hidden');
|
|
||||||
$('#selected_clip').addClass('hidden');
|
|
||||||
$('#action_clip').addClass('hidden');
|
|
||||||
$('#connect_panel').removeClass('hidden');
|
|
||||||
myinfo.kunjika = '';
|
|
||||||
myinfo.name = '';
|
|
||||||
break;
|
|
||||||
case 'list':
|
|
||||||
JSON.parse(j.vayakti).forEach(function(usr) {
|
|
||||||
vayakti[usr[0]] = usr[1];
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var joining = false;
|
|
||||||
function connect(frm) {
|
|
||||||
if(joining) return;
|
|
||||||
joining = true;
|
|
||||||
var frm = $(frm);
|
|
||||||
$('#progressbar').removeClass('hidden');
|
|
||||||
var data = {};
|
|
||||||
frm.serializeArray().forEach(el => {
|
|
||||||
if(typeof el.value == 'string')
|
|
||||||
data[el.name] = el.value.trim();
|
|
||||||
else
|
|
||||||
data[el.name] = el.value;
|
|
||||||
});
|
|
||||||
if(data['length'] !== undefined) {
|
|
||||||
data['length'] = parseInt(data['length']);
|
|
||||||
}
|
|
||||||
callbacks.push(() => {
|
|
||||||
cleanMessage();
|
|
||||||
$('#progressbar').addClass('hidden');
|
|
||||||
$('#send_box').text('');
|
|
||||||
$('#connect_panel').addClass('hidden');
|
|
||||||
$('[name="error_msg"]').addClass('hidden');
|
|
||||||
$('#chat_panel').removeClass('hidden');
|
|
||||||
$('#send_box').focus();
|
|
||||||
$('#next_btn').addClass('hidden');
|
|
||||||
myinfo.kunjika = data.kunjika;
|
|
||||||
myinfo.name = data.name;
|
|
||||||
no_name_message = false;
|
|
||||||
joining = false;
|
|
||||||
vayakti = [];
|
|
||||||
pushStatus('Connected at '+currentTime());
|
|
||||||
socket.send(JSON.stringify({cmd: 'list'}));
|
|
||||||
});
|
|
||||||
socket.send(JSON.stringify(Object.assign({cmd: frm.attr('cmd')}, data)));
|
|
||||||
}
|
|
||||||
|
|
||||||
function connect_next() {
|
|
||||||
if(joining) return;
|
|
||||||
joining = true;
|
|
||||||
$('#progressbar').removeClass('hidden');
|
|
||||||
callbacks.push(() => {
|
|
||||||
cleanMessage();
|
|
||||||
$('#progressbar').addClass('hidden');
|
|
||||||
$('#send_box').text('');
|
|
||||||
$('#connect_panel').addClass('hidden');
|
|
||||||
$('[name="error_msg"]').addClass('hidden');
|
|
||||||
$('#chat_panel').removeClass('hidden');
|
|
||||||
$('#send_box').focus();
|
|
||||||
joining = false;
|
|
||||||
vayakti = [];
|
|
||||||
pushStatus('Connected at '+currentTime());
|
|
||||||
socket.send(JSON.stringify({cmd: 'list'}));
|
|
||||||
});
|
|
||||||
socket.send(JSON.stringify({ cmd: 'randnext' }));
|
|
||||||
}
|
|
||||||
|
|
||||||
var leaving = false;
|
|
||||||
function leave() {
|
|
||||||
if(leaving) return;
|
|
||||||
leaving = true;
|
|
||||||
callbacks = [];
|
|
||||||
callbacks.push(() => {
|
|
||||||
$('#progressbar').addClass('hidden');
|
|
||||||
$('#chat_panel').addClass('hidden');
|
|
||||||
$('#reply_clip').addClass('hidden');
|
|
||||||
$('#selected_clip').addClass('hidden');
|
|
||||||
$('#action_clip').addClass('hidden');
|
|
||||||
$('#connect_panel').removeClass('hidden');
|
|
||||||
myinfo.kunjika = '';
|
|
||||||
myinfo.name = '';
|
|
||||||
joining = false;
|
|
||||||
leaving = false;
|
|
||||||
});
|
|
||||||
socket.send(JSON.stringify({
|
|
||||||
cmd: 'leave'
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
function pushTypingStatus() {
|
|
||||||
var elm = $('#status_area > #typing');
|
var elm = $('#status_area > #typing');
|
||||||
if(elm.length > 0) elm.remove();
|
if(elm.length > 0) elm.remove();
|
||||||
if(typing.length == 0) return;
|
if(typing.length == 0) return;
|
||||||
|
|
@ -268,7 +92,7 @@ function pushTypingStatus() {
|
||||||
scroll.scrollTop(scroll[0].scrollHeight);
|
scroll.scrollTop(scroll[0].scrollHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
function pushMessage(sender, text, reply = null) {
|
static pushMessage(sender, text, reply = null) {
|
||||||
var isMe = myinfo.kunjika == sender;
|
var isMe = myinfo.kunjika == sender;
|
||||||
var area = $('#message_area');
|
var area = $('#message_area');
|
||||||
var elm = $('<div>', {class: 'message '+(isMe?'message-me':'message-other')});
|
var elm = $('<div>', {class: 'message '+(isMe?'message-me':'message-other')});
|
||||||
|
|
@ -297,34 +121,17 @@ function pushMessage(sender, text, reply = null) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// in message area
|
// in message area
|
||||||
function pushStatus(text) {
|
static pushStatus(text) {
|
||||||
var area = $('#message_area');
|
var area = $('#message_area');
|
||||||
var elm = $('<div>', {class: 'status'});
|
var elm = $('<div>', {class: 'status'});
|
||||||
elm.append($('<span>', {class: 'siimple-tag siimple-tag--dark'}).append(text));
|
elm.append($('<small>', {class: 'tag bg-light'}).append(text));
|
||||||
area.append(elm);
|
area.append(elm);
|
||||||
|
|
||||||
var scroll = $("#message_area_scroll");
|
var scroll = $("#message_area_scroll");
|
||||||
scroll.scrollTop(scroll[0].scrollHeight);
|
scroll.scrollTop(scroll[0].scrollHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
function unselectMessages() {
|
static selectedMessageToText() {
|
||||||
$('.active').each(function() {
|
|
||||||
$(this).removeClass('active');
|
|
||||||
});
|
|
||||||
$('#selected_clip').addClass('hidden');
|
|
||||||
}
|
|
||||||
|
|
||||||
function selectMessage(t) {
|
|
||||||
var t = $(t);
|
|
||||||
t.toggleClass('active');
|
|
||||||
|
|
||||||
if($('.active').length == 0)
|
|
||||||
$('#selected_clip').addClass('hidden');
|
|
||||||
else
|
|
||||||
$('#selected_clip').removeClass('hidden');
|
|
||||||
}
|
|
||||||
|
|
||||||
function selectedMessageToText() {
|
|
||||||
var text = "";
|
var text = "";
|
||||||
$('.active').each(function() {
|
$('.active').each(function() {
|
||||||
$(this).find('pre').each(function() {
|
$(this).find('pre').each(function() {
|
||||||
|
|
@ -335,15 +142,276 @@ function selectedMessageToText() {
|
||||||
return text.trim();
|
return text.trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
function prepareReply() {
|
static prepareReply() {
|
||||||
var text = selectedMessageToText();
|
var text = this.selectedMessageToText();
|
||||||
var el = $('#reply_clip');
|
var el = $('#reply_clip');
|
||||||
el.removeClass('hidden');
|
el.removeClass('is-hidden');
|
||||||
el.attr('msg', text);
|
el.attr('msg', text);
|
||||||
$('#reply_clip > span').text(text.substr(0, 15)+ '...');
|
$('#reply_clip > span').text(text.substr(0, 15)+ '...');
|
||||||
unselectMessages();
|
unselectMessages();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static copyMessagesToClipboard() {
|
||||||
|
var $temp = $("<textarea>");
|
||||||
|
$("body").append($temp);
|
||||||
|
$temp.val(this.selectedMessageToText()).select();
|
||||||
|
document.execCommand("copy");
|
||||||
|
$temp.remove();
|
||||||
|
unselectMessages();
|
||||||
|
}
|
||||||
|
|
||||||
|
static cleanMessage() {
|
||||||
|
$('#message_area').empty();
|
||||||
|
$('#status_area').empty();
|
||||||
|
$('#action_clip').addClass('is-hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
static currentTime() {
|
||||||
|
var today = new Date();
|
||||||
|
return today.getHours()+':'+today.getMinutes();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Actions {
|
||||||
|
actions = []; // [[id, func]]
|
||||||
|
|
||||||
|
execute() {
|
||||||
|
if(this.actions.length <= 0) return;
|
||||||
|
|
||||||
|
var act = this.actions[0];
|
||||||
|
this.actions.shift();
|
||||||
|
|
||||||
|
act[1]();
|
||||||
|
}
|
||||||
|
|
||||||
|
clear() {
|
||||||
|
this.actions = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
clear_key(ac) {
|
||||||
|
this.actions = this.actions.filter(function (arr) {
|
||||||
|
return arr[0] != ac
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
has_key(ac) {
|
||||||
|
var out = this.actions.find(function (arr) {
|
||||||
|
return arr[0] == ac
|
||||||
|
});
|
||||||
|
return out != undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
add(id, func) {
|
||||||
|
this.actions.push([id, func]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var actions = new Actions();
|
||||||
|
|
||||||
|
$(document).ready(() => {
|
||||||
|
$(".tabs > a").click(function() {
|
||||||
|
var t = $(this);
|
||||||
|
$(t.parents('tabs').first()).find('form').each(function(i,elm) {
|
||||||
|
var elm = $(elm);
|
||||||
|
if(elm.attr('name') == t.attr('name'))
|
||||||
|
elm.removeClass('is-hidden');
|
||||||
|
else elm.addClass('is-hidden');
|
||||||
|
});
|
||||||
|
$(".tabs > a").each(function(i,elm) {
|
||||||
|
var elm = $(elm);
|
||||||
|
if(elm.attr('name') != t.attr('name'))
|
||||||
|
elm.removeClass('active');
|
||||||
|
else elm.addClass('active');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.message-me, .message-other').click(function() {
|
||||||
|
Messages.select();
|
||||||
|
});
|
||||||
|
|
||||||
|
Messages.setupTyping();
|
||||||
|
|
||||||
|
$('[name=connect]').click(function () {
|
||||||
|
State.showProgress();
|
||||||
|
connect($(this).parents('form').first());
|
||||||
|
});
|
||||||
|
|
||||||
|
var textarea = $('#send_box')[0];
|
||||||
|
|
||||||
|
textarea.addEventListener('keydown', autosize);
|
||||||
|
|
||||||
|
function autosize(){
|
||||||
|
var el = this;
|
||||||
|
setTimeout(function(){
|
||||||
|
el.style.cssText = 'height:auto; padding:0';
|
||||||
|
el.style.cssText = 'height:' + el.scrollHeight + 'px';
|
||||||
|
},0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Create WebSocket connection.
|
||||||
|
const socket = new WebSocket('ws://'+window.location.host+'/ws/');
|
||||||
|
var myinfo = {
|
||||||
|
kunjika: "",
|
||||||
|
name: ""
|
||||||
|
};
|
||||||
|
var vayakti = {};
|
||||||
|
var typing = [];
|
||||||
|
var no_name_message = false;
|
||||||
|
|
||||||
|
// Connection opened
|
||||||
|
socket.addEventListener('open', function (event) {
|
||||||
|
var params = window.location.search;
|
||||||
|
params = params.substr(1,params.length).split('&');
|
||||||
|
|
||||||
|
if(params.length < 3) {
|
||||||
|
State.hideProgress();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var frm = $('form[name=kaksh_sec]');
|
||||||
|
frm.find('[name=kaksh_kunjika]').val(params[0]);
|
||||||
|
frm.find('[name=kunjika]').val(params[1]);
|
||||||
|
frm.find('[name=name]').val(params[2]);
|
||||||
|
|
||||||
|
connect(frm);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Listen for messages
|
||||||
|
socket.addEventListener('message', function (event) {
|
||||||
|
var j = JSON.parse(event.data);
|
||||||
|
switch(j.cmd) {
|
||||||
|
case 'resp':
|
||||||
|
if(j.result == 'Err') {
|
||||||
|
if($('#chat_panel').hasClass('is-hidden')) {
|
||||||
|
$('[name="error_msg"]').text(j.message);
|
||||||
|
$('[name="error_msg"]').removeClass('is-hidden');
|
||||||
|
State.hideProgress();
|
||||||
|
actions.clear_key('join');
|
||||||
|
} else {
|
||||||
|
Messages.pushStatus(j.message);
|
||||||
|
}
|
||||||
|
} else if(j.result == 'Ok'){
|
||||||
|
actions.execute();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'random':
|
||||||
|
actions.execute();
|
||||||
|
actions.clear_key('join');
|
||||||
|
$('#next_btn').removeClass('is-hidden');
|
||||||
|
no_name_message = true;
|
||||||
|
Messages.pushStatus('Say hi to '+j.name);
|
||||||
|
break;
|
||||||
|
case 'status':
|
||||||
|
if(j.status == "typing") {
|
||||||
|
typing.push(j.kunjika);
|
||||||
|
Messages.pushTypingStatus();
|
||||||
|
} else if(j.status == "typing_end") {
|
||||||
|
const index = typing.indexOf(j.kunjika);
|
||||||
|
if (index > -1) typing.splice(index, 1);
|
||||||
|
Messages.pushTypingStatus();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'text':
|
||||||
|
Messages.pushMessage(j.kunjika, j.text, j.reply);
|
||||||
|
break;
|
||||||
|
case 'connected':
|
||||||
|
vayakti[j.kunjika] = j.name;
|
||||||
|
if(!$('#vayakti_model').hasClass('.is-hidden')) refreshVayaktiList();
|
||||||
|
Messages.pushStatus('Vyakti '+j.name+' connected as '+j.kunjika+' at '+Messages.currentTime());
|
||||||
|
break;
|
||||||
|
case 'disconnected':
|
||||||
|
delete vayakti[j.kunjika];
|
||||||
|
if(!$('#vayakti_model').hasClass('.is-hidden')) refreshVayaktiList();
|
||||||
|
Messages.pushStatus('Vyakti '+j.name+' disconnected as '+j.kunjika+' at '+Messages.currentTime());
|
||||||
|
break;
|
||||||
|
case 'left':
|
||||||
|
myinfo.kunjika = '';
|
||||||
|
myinfo.name = '';
|
||||||
|
State.login();
|
||||||
|
break;
|
||||||
|
case 'list':
|
||||||
|
JSON.parse(j.vayakti).forEach(function(usr) {
|
||||||
|
vayakti[usr[0]] = usr[1];
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function connect(frm) {
|
||||||
|
if(actions.has_key('join') || actions.has_key('leave')) return;
|
||||||
|
var frm = $(frm);
|
||||||
|
var data = {};
|
||||||
|
frm.serializeArray().forEach(el => {
|
||||||
|
if(typeof el.value == 'string')
|
||||||
|
data[el.name] = el.value.trim();
|
||||||
|
else
|
||||||
|
data[el.name] = el.value;
|
||||||
|
});
|
||||||
|
|
||||||
|
if(data['length'] !== undefined) {
|
||||||
|
data['length'] = parseInt(data['length']);
|
||||||
|
}
|
||||||
|
|
||||||
|
actions.add('join', function() {
|
||||||
|
Messages.cleanMessage();
|
||||||
|
myinfo.kunjika = data.kunjika;
|
||||||
|
myinfo.name = data.name;
|
||||||
|
no_name_message = false;
|
||||||
|
joining = false;
|
||||||
|
vayakti = [];
|
||||||
|
typing = [];
|
||||||
|
State.chat();
|
||||||
|
State.hideProgress();
|
||||||
|
Messages.pushStatus('Connected at '+Messages.currentTime());
|
||||||
|
socket.send(JSON.stringify({cmd: 'list'}));
|
||||||
|
})
|
||||||
|
|
||||||
|
data = Object.assign({cmd: frm.attr('cmd')}, data);
|
||||||
|
socket.send(JSON.stringify(data));
|
||||||
|
}
|
||||||
|
|
||||||
|
function connect_next() {
|
||||||
|
if(actions.has_key('join') || actions.has_key('leave')) return;
|
||||||
|
State.showProgress();
|
||||||
|
actions.add('join', function() {
|
||||||
|
Messages.cleanMessage();
|
||||||
|
State.chat();
|
||||||
|
vayakti = [];
|
||||||
|
typing = [];
|
||||||
|
State.hideProgress();
|
||||||
|
Messages.pushStatus('Connected at '+Messages.currentTime());
|
||||||
|
socket.send(JSON.stringify({cmd: 'list'}));
|
||||||
|
});
|
||||||
|
socket.send(JSON.stringify({ cmd: 'randnext' }));
|
||||||
|
}
|
||||||
|
|
||||||
|
function leave() {
|
||||||
|
if(actions.has_key('leave')) return;
|
||||||
|
actions.clear();
|
||||||
|
actions.add('leave', function() {
|
||||||
|
myinfo.kunjika = '';
|
||||||
|
myinfo.name = '';
|
||||||
|
State.login();
|
||||||
|
State.hideProgress();
|
||||||
|
});
|
||||||
|
socket.send(JSON.stringify({cmd: 'leave'}));
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendTyping() {
|
||||||
|
socket.send(JSON.stringify({
|
||||||
|
cmd: 'status',
|
||||||
|
status: 'typing'
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendTypingEnd() {
|
||||||
|
socket.send(JSON.stringify({
|
||||||
|
cmd: 'status',
|
||||||
|
status: 'typing_end'
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
function send() {
|
function send() {
|
||||||
var text = $('#send_box').val().trim();
|
var text = $('#send_box').val().trim();
|
||||||
if(text.length == 0) return;
|
if(text.length == 0) return;
|
||||||
|
|
@ -354,37 +422,22 @@ function send() {
|
||||||
}));
|
}));
|
||||||
$('#send_box').val('');
|
$('#send_box').val('');
|
||||||
$('#reply_clip').attr('msg', '');
|
$('#reply_clip').attr('msg', '');
|
||||||
$('#reply_clip').addClass('hidden');
|
$('#reply_clip').addClass('is-hidden');
|
||||||
$('#reply_clip > span').text('');
|
$('#reply_clip > span').text('');
|
||||||
}
|
}
|
||||||
|
|
||||||
function copyMessagesToClipboard() {
|
|
||||||
var $temp = $("<textarea>");
|
|
||||||
$("body").append($temp);
|
|
||||||
$temp.val(selectedMessageToText()).select();
|
|
||||||
document.execCommand("copy");
|
|
||||||
$temp.remove();
|
|
||||||
unselectMessages();
|
|
||||||
}
|
|
||||||
|
|
||||||
function cleanMessage() {
|
|
||||||
$('#message_area').empty();
|
|
||||||
$('#action_clip').addClass('hidden');
|
|
||||||
}
|
|
||||||
|
|
||||||
function vayaktiList() {
|
function vayaktiList() {
|
||||||
|
refreshVayaktiList();
|
||||||
|
$('#vayakti_model').removeClass('is-hidden');
|
||||||
|
$('#action_clip').addClass('is-hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
function refreshVayaktiList() {
|
||||||
var v = $('#vayakti_list');
|
var v = $('#vayakti_list');
|
||||||
v.empty();
|
v.empty();
|
||||||
Object.keys(vayakti).forEach((key) => {
|
Object.keys(vayakti).forEach((key) => {
|
||||||
v.append($('<div>', {class: 'siimple-table-row'})
|
v.append($('<tr>')
|
||||||
.append($('<div>', {class: 'siimple-table-cell'}).append(key))
|
.append($('<td>').append(key))
|
||||||
.append($('<div>', {class: 'siimple-table-cell'}).append(vayakti[key])));
|
.append($('<td>').append(vayakti[key])));
|
||||||
});
|
});
|
||||||
$('#vayakti_model').removeClass('hidden');
|
|
||||||
$('#action_clip').addClass('hidden');
|
|
||||||
}
|
|
||||||
|
|
||||||
function currentTime() {
|
|
||||||
var today = new Date();
|
|
||||||
return today.getHours()+':'+today.getMinutes();
|
|
||||||
}
|
}
|
||||||