added object edit

This commit is contained in:
N0rdye 2023-07-10 14:41:59 +05:00
parent 387a0d135f
commit c9321dc7e5
8 changed files with 265 additions and 31 deletions

27
db.js
View File

@ -81,8 +81,8 @@ module.exports.ggv = (table,ekey,key,value,callback,prevs = false) => {
// set value where // set value where
module.exports.sv = (table,key,value,ekey,evalue,callback,prevs = false,no_srt = false) => { module.exports.sv = (table,key,value,ekey,evalue,callback,prevs = false,no_srt = false) => {
value = (no_srt)? value:`'${value}'`; value = (no_srt)? value:`'${value}'`;
// console.log(`UPDATE ${table} SET ${key} = ${value} WHERE ${ekey} = '${evalue}'`);
db(prevs).query(`UPDATE ${table} SET ${key} = ${value} WHERE ${ekey} = '${evalue}'`, (err , rows) => { db(prevs).query(`UPDATE ${table} SET ${key} = ${value} WHERE ${ekey} = '${evalue}'`, (err , rows) => {
// console.log("UPDATE `"+table+"` SET `"+key+"` = '"+value+"' WHERE `"+ekey+"` = '"+evalue+"'");
if (err) { if (err) {
console.log("sql err"); console.log("sql err");
throw err; throw err;
@ -91,6 +91,31 @@ module.exports.sv = (table,key,value,ekey,evalue,callback,prevs = false,no_srt =
} }
}) })
} }
module.exports.uv = (table,keys,values,ekey,evalue,callback,prevs = false,no_srt = false) => {
values = values.split(".");
keys = keys.split(".");
let sets = '';
for (let i = 0; i < keys.length; i++) {
if(i != keys.length-1){
sets+=`${keys[i]} = ${values[i]},`;
}
else{
sets+=`${keys[i]} = ${values[i]}`;
}
}
// console.log(`UPDATE ${table} SET ${sets} WHERE ${ekey} = '${evalue}'`);
db(prevs).query(`UPDATE ${table} SET ${sets} WHERE ${ekey} = '${evalue}'`, (err , rows) => {
if (err) {
console.log("sql err");
throw err;
}else{
if(callback)callback(rows);
}
})
}
// new record // new record
module.exports.nr = (table,keys,values,prevs = false,callback) =>{ module.exports.nr = (table,keys,values,prevs = false,callback) =>{
// console.log('INSERT INTO `'+table+'`('+keys+') VALUES ('+values+')'); // console.log('INSERT INTO `'+table+'`('+keys+') VALUES ('+values+')');

View File

@ -212,7 +212,7 @@ app.get("/get_logs", (req,res) => {
try{let cook = req.cookies;func.sid(cook,res,()=>{func.logs_file(res);})} try{let cook = req.cookies;func.sid(cook,res,()=>{func.logs_file(res);})}
catch (error) {func.log("router logs download error - "+error);} catch (error) {func.log("router logs download error - "+error);}
}) })
app.post("/new_obj", (req,res) => { app.post("/admin/obj/new", (req,res) => {
try{ try{
let inp = req.body; let inp = req.body;
let cook = req.cookies; let cook = req.cookies;
@ -223,6 +223,28 @@ app.post("/new_obj", (req,res) => {
func.log("router object creating error - "+error); func.log("router object creating error - "+error);
} }
}) })
app.post("/admin/obj/edit", (req,res) => {
try{
let inp = req.body;
let cook = req.cookies;
func.sid(cook,res,()=>{
obj.save(inp,cook,res);
},true,true)
} catch (error) {
func.log("router object creating error - "+error);
}
})
app.post("/admin/obj/del", (req,res) => {
try{
let inp = req.body;
let cook = req.cookies;
func.sid(cook,res,()=>{
obj.del(inp,cook,res);
},true,true)
} catch (error) {
func.log("router object creating error - "+error);
}
})
app.post("/admin/new/group", (req,res) => { app.post("/admin/new/group", (req,res) => {
try{ try{
let inp = req.body; let inp = req.body;
@ -300,11 +322,6 @@ app.post("/admin/users/del/user", (req,res) => {
func.log("router object creating error - "+error); func.log("router object creating error - "+error);
} }
}) })
app.post("/admin/change_objs", (req,res) => {
try{let cook = req.cookies;func.sid(cook,res,()=>{func.logs_file(res);})}
catch (error) {func.log("router logs download error - "+error);}
})

View File

@ -49,6 +49,58 @@ module.exports.new = (inp,cook,res)=>{
} }
} }
module.exports.save = (inp,cook,res)=>{
try {
// let changed = [];
let changes = JSON.parse(inp["changes"]);
let taken_name = false;
Object.entries(changes).forEach(([key,value]) => {
// console.log(key,value);
// console.log( Object.keys(changes).pop());
if(key == "name"){
db.ggv("objects","id","name",`'${value}'`,(gname)=>{gname = gname[0]
if(gname == null){
db.sv("objects",key,value,"id",inp["id"],()=>{
chack_if_last(key)
},true);
}
else{
taken_name = true;
// console.log(taken_name);
chack_if_last(key)
}
})
}
else if (key != "name"){
// console.log("not name");
db.sv("objects",key,value,"id",inp["id"],()=>{
chack_if_last(key)
},true);
// changed.push(key);
}
});
function chack_if_last(key){
if(key == Object.keys(changes).at(-1)){
res.send({out:"good",name_err:taken_name});
}
}
} catch (error) {
func.log("backend object creating error - "+error);
}
}
module.exports.del = (inp,cook,res)=>{
try {
let name = inp["name"].split("/")[0];
let group = inp["name"].split("/").at(-1);
db.dl("objects",`id`,`'${inp["id"]}' AND gid = '${inp["gid"]}'`,()=>{
func.log(`admin group deleted ${name} from ${group}`);
res.send({out:"good"});
},true);
} catch (error) {
func.log("backend single object loading err0r - "+error);
}
}
module.exports.load_groups = (inp,cook,res)=>{ module.exports.load_groups = (inp,cook,res)=>{
try { try {
db.gav("object_groups","0",(gdata)=>{ db.gav("object_groups","0",(gdata)=>{

View File

@ -21,7 +21,10 @@
} }
</style> </style>
<h1><%= lang("create new object") %></h1> <div style="display: flex;justify-content: space-between;">
<h1>object</h1>
<h1 id="object_edit_type">creation</h1>
</div>
<div class="nobj"> <div class="nobj">
<div> <div>
<div class="img_preview"> <div class="img_preview">
@ -37,7 +40,7 @@
<div> <div>
<div class="nobj_options"> <div class="nobj_options">
<input type="text" id="nobj_name" placeholder="<%= lang("object name") %>"> <input type="text" id="nobj_name" placeholder="<%= lang("object name") %>">
<button onclick="create_obj()"><%= lang("create object")%></button> <button onclick="create_obj()" id="obj_apply_btn"><%= lang("create object")%></button>
<div id="obj_resp"></div> <div id="obj_resp"></div>
</div> </div>
<div id="obj_input"> <div id="obj_input">
@ -56,6 +59,9 @@
<input style="width: 100%;" type="range" step="0.5" min="1" max="100" id="obj_width" value="100" oninput="obj_size_change('width')"> <input style="width: 100%;" type="range" step="0.5" min="1" max="100" id="obj_width" value="100" oninput="obj_size_change('width')">
</div> </div>
</div> </div>
<div>
<button onclick="set_obj_edit_params()">clear parameters</button>
</div>
</div> </div>
</div> </div>
@ -76,6 +82,41 @@
} }
} }
function set_obj_edit_params(img = "",name = "",description="",height = 100,width = 100){
if(img ==""&&name ==""&&description == ""){
document.getElementById("object_edit_type").innerText = "creation";
document.getElementById("obj_apply_btn").innerText = "create object";
document.getElementById("obj_apply_btn").setAttribute("onclick","create_obj()");
}else {
document.getElementById("object_edit_type").innerText = "edit";
document.getElementById("obj_apply_btn").innerText = "save edited object";
document.getElementById("obj_apply_btn").setAttribute("onclick","save_edited_obj()");
}
let img_file = document.getElementById("img_file");
let img_prev = document.getElementById("img_prev");
let name_div = document.getElementById("nobj_name");
let description_div = document.getElementById("nobj_description");
let height_slider = document.getElementById("obj_height");
let height_text = document.getElementById("obj_height_value");
let width_slider = document.getElementById("obj_width");
let width_text = document.getElementById("obj_width_value");
name_div.value = name;
img_file.value = null;
img_prev.src = img;
img_prev.style.height = `${height*2}px`;
img_prev.style.width = `${width*2}px`;
description_div.value = description;
height_slider.value = height;
width_slider.value = width;
height_text.innerText = `${height}см`;
width_text.innerText = `${width}см`;
}
function previewFile() { function previewFile() {
var preview = document.querySelector('img'); var preview = document.querySelector('img');
var file = document.querySelector('input[type=file]').files[0]; var file = document.querySelector('input[type=file]').files[0];
@ -94,7 +135,7 @@
function new_obj(name,img,height,width,description,callback){ function new_obj(name,img,height,width,description,callback){
let select = document.getElementById("group_select"); let select = document.getElementById("group_select");
$.post( "/new_obj", { name:name,img:img,desc:description,height:height,width:width,gid:select.options[select.selectedIndex].getAttribute("gid")}) $.post( "/admin/obj/new", { name:name,img:img,desc:description,height:height,width:width,gid:select.options[select.selectedIndex].getAttribute("gid")})
.done(function( res ) { .done(function( res ) {
// if(res["out"] == "good"){ // if(res["out"] == "good"){
// console.log(res["body"]); // console.log(res["body"]);
@ -108,7 +149,7 @@
let description = document.getElementById("nobj_description").value; let description = document.getElementById("nobj_description").value;
let height = document.getElementById("obj_height").value; let height = document.getElementById("obj_height").value;
let width = document.getElementById("obj_width").value; let width = document.getElementById("obj_width").value;
var img = document.querySelector('img').src; var img = document.querySelector('#img_prev').src;
name = name.replace(" ","$"); name = name.replace(" ","$");
if (img != "http://n0rsrv2:3002/admin"){ if (img != "http://n0rsrv2:3002/admin"){
document.getElementById("obj_resp").innerHTML = "creating object"; document.getElementById("obj_resp").innerHTML = "creating object";

View File

@ -11,6 +11,7 @@
img{ img{
width: 100%; width: 100%;
height: 100%; height: 100%;
pointer-events: none;
} }
#objs_in_group{ #objs_in_group{
display: flex; display: flex;
@ -22,10 +23,9 @@
<div> <div>
<div id="objs_in_group"></div> <div id="objs_in_group"></div>
</div> </div>
<div class="cmenu" id="object_menu"> <div class="cmenu" id="object_edit_menu">
<button>del object</button> <button onclick="obj_del()">del object</button>
<button>change name</button> <button onclick="set_edit()">edit object</button>
<button>change size</button>
</div> </div>
<script> <script>
@ -33,11 +33,16 @@
edit_get_objs(); edit_get_objs();
}); });
function set_edit(){
let menu = document.getElementById("object_edit_menu");
set_obj_edit_params(menu.getAttribute("obj_img"),menu.getAttribute("obj_name").split("/")[0],menu.getAttribute("obj_description"),menu.getAttribute("obj_height"),menu.getAttribute("obj_width"));
}
function edit_get_objs(){ function edit_get_objs(){
document.getElementById("objs_in_group").innerHTML = ""; document.getElementById("objs_in_group").innerHTML = "";
edit_load_objs((data)=>{ edit_load_objs((data)=>{
data.forEach(value => { data.forEach(value => {
// console.log(value); console.log(value);
// // console.log($.cookie("cache")); // // console.log($.cookie("cache"));
// console.log(localStorage.getItem(`${value["name"]}`)); // console.log(localStorage.getItem(`${value["name"]}`));
if ($.cookie("cache") == "true"){ if ($.cookie("cache") == "true"){
@ -59,17 +64,92 @@
}) })
} }
function make(img){ function make(img){
let czones = document.getElementById("objs_in_group"); let obj_list = document.getElementById("objs_in_group");
let czone = document.createElement('div'); let obj = document.createElement('div');
czone.classList.add(value["name"]); obj.id = "object_menu";
czone.classList.add("object"); obj.classList.add(value["name"]);
czone.innerHTML = `<img src="${img}">` obj.classList.add("object");
czones.append(czone) obj.setAttribute("name",value["name"])
obj.setAttribute("description",value["description"])
obj.setAttribute("src",img)
obj.setAttribute("height",value["height"])
obj.setAttribute("width",value["width"])
obj.setAttribute("obj_id",value["id"])
obj.innerHTML = `<img src="${img}">`
obj_list.append(obj)
} }
}); });
}) })
} }
function obj_del(){
let select = document.getElementById("group_select");
let menu = document.getElementById("object_edit_menu");
if (confirm(`are you sure you want to delete object ${menu.getAttribute("obj_name").split("/")[0]}`)){
$.post( "/admin/obj/del", { id:menu.getAttribute(`obj_id`),gid:select.options[select.selectedIndex].getAttribute("gid"),name:menu.getAttribute("obj_name")})
.done(function( res ) {
if(res["out"] == "good"){
edit_get_objs();
}
});
}
}
function save_edited_obj(){
let select = document.getElementById("group_select");
let menu = document.getElementById("object_edit_menu");
let attributes = ["name","description","img","height","width"];
let cur_atts = {
name : document.getElementById("nobj_name").value,
description : document.getElementById("nobj_description").value,
height : document.getElementById("obj_height").value,
width : document.getElementById("obj_width").value,
img : document.querySelector('#img_prev').src
}
let changes = {}
localStorage.removeItem((cur_atts["name"]+"/g/"+select.options[select.selectedIndex].value).replace(" ","$"));
attributes.forEach(element => {
// console.log(cur_atts[element],menu.getAttribute(`obj_${element}`));
if(element != attributes.at(-1)){
check_change(element);
// console.log(element);
}
else{
check_change(element);
// console.log(changes);
if(Object.keys(changes).length > 0){
make_obj_save(changes);
}
}
});
function check_change(element){
if(element == "name" && cur_atts[element] != menu.getAttribute(`obj_${element}`).split("/")[0]){
changes[element] = cur_atts[element];
}
else if (element != "name" && cur_atts[element] != menu.getAttribute(`obj_${element}`)){
changes[element] = cur_atts[element];
}
}
function make_obj_save(){
if(changes["name"]) changes["name"] = (changes["name"]+"/g/"+select.options[select.selectedIndex].value).replace(" ","$");
document.getElementById("obj_resp").innerHTML = "saving object";
$.post( "/admin/obj/edit", { id:menu.getAttribute(`obj_id`),changes:JSON.stringify(changes),gid:select.options[select.selectedIndex].getAttribute("gid")})
.done(function( res ) {
// console.log(res);
if(res["out"] == "good"){
document.getElementById("obj_resp").innerHTML = "object saved";
setTimeout(()=>{
edit_get_objs();
set_obj_edit_params();
if(res["name_err"]){
document.getElementById("obj_resp").innerHTML = ("name was not changed because its taken");
}
},1000)
}
});
}
}
function edit_load_obj(name,key,callback){ function edit_load_obj(name,key,callback){
$.post( "/get_obj",{name:name,key:key}) $.post( "/get_obj",{name:name,key:key})
.done(function( res ) { .done(function( res ) {

View File

@ -21,6 +21,7 @@
if(res["out"] == "good"){ if(res["out"] == "good"){
// console.log(res["body"]); // console.log(res["body"]);
load_groups(); load_groups();
edit_get_objs();
} }
}); });
} }
@ -33,6 +34,7 @@
if(res["out"] == "good"){ if(res["out"] == "good"){
// console.log(res["body"]); // console.log(res["body"]);
load_groups(); load_groups();
edit_get_objs();
} }
}); });
} }

View File

@ -116,7 +116,7 @@
document.getElementById(`${key}_${id}`).innerText = value; document.getElementById(`${key}_${id}`).innerText = value;
} }
if(res["out"] == "bad"){ if(res["out"] == "bad"){
alert("cant change name in use") alert("this name is in use")
} }
}); });
} }

View File

@ -122,6 +122,23 @@
// menu.innerHTML = "<p>Option1</p><p>Option2</p><p>Option3</p><p>Option4</p>" // menu.innerHTML = "<p>Option1</p><p>Option2</p><p>Option3</p><p>Option4</p>"
// document.body.appendChild(menu) // document.body.appendChild(menu)
}
else if(e.target.id == "object_menu"){
hide_menus();
let menu = document.getElementById("object_edit_menu");
let obj = e.target;
menu.setAttribute("obj_img",obj.getAttribute("src"));
menu.setAttribute("obj_name",obj.getAttribute("name"));
menu.setAttribute("obj_description",obj.getAttribute("description"));
menu.setAttribute("obj_height",obj.getAttribute("height"));
menu.setAttribute("obj_width",obj.getAttribute("width"));
menu.setAttribute("obj_id",obj.getAttribute("obj_id"));
menu.style.display = 'block';
menu.style = `top:${e.target.getBoundingClientRect().top+30}px;left:${e.target.getBoundingClientRect().left-40}px`;
// menu.onmouseleave = () => menu.style.display = 'none';
// menu.innerHTML = "<p>Option1</p><p>Option2</p><p>Option3</p><p>Option4</p>"
// document.body.appendChild(menu)
} }
else{ else{
hide_menus(); hide_menus();