added object edit
This commit is contained in:
parent
387a0d135f
commit
c9321dc7e5
27
db.js
27
db.js
|
@ -81,8 +81,8 @@ module.exports.ggv = (table,ekey,key,value,callback,prevs = false) => {
|
|||
// set value where
|
||||
module.exports.sv = (table,key,value,ekey,evalue,callback,prevs = false,no_srt = false) => {
|
||||
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) => {
|
||||
// console.log("UPDATE `"+table+"` SET `"+key+"` = '"+value+"' WHERE `"+ekey+"` = '"+evalue+"'");
|
||||
if (err) {
|
||||
console.log("sql 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
|
||||
module.exports.nr = (table,keys,values,prevs = false,callback) =>{
|
||||
// console.log('INSERT INTO `'+table+'`('+keys+') VALUES ('+values+')');
|
||||
|
|
29
index.js
29
index.js
|
@ -212,7 +212,7 @@ app.get("/get_logs", (req,res) => {
|
|||
try{let cook = req.cookies;func.sid(cook,res,()=>{func.logs_file(res);})}
|
||||
catch (error) {func.log("router logs download error - "+error);}
|
||||
})
|
||||
app.post("/new_obj", (req,res) => {
|
||||
app.post("/admin/obj/new", (req,res) => {
|
||||
try{
|
||||
let inp = req.body;
|
||||
let cook = req.cookies;
|
||||
|
@ -223,6 +223,28 @@ app.post("/new_obj", (req,res) => {
|
|||
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) => {
|
||||
try{
|
||||
let inp = req.body;
|
||||
|
@ -300,11 +322,6 @@ app.post("/admin/users/del/user", (req,res) => {
|
|||
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);}
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
52
object.js
52
object.js
|
@ -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)=>{
|
||||
try {
|
||||
db.gav("object_groups","0",(gdata)=>{
|
||||
|
|
|
@ -21,7 +21,10 @@
|
|||
}
|
||||
</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>
|
||||
<div class="img_preview">
|
||||
|
@ -37,7 +40,7 @@
|
|||
<div>
|
||||
<div class="nobj_options">
|
||||
<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>
|
||||
<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')">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<button onclick="set_obj_edit_params()">clear parameters</button>
|
||||
</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() {
|
||||
var preview = document.querySelector('img');
|
||||
var file = document.querySelector('input[type=file]').files[0];
|
||||
|
@ -94,7 +135,7 @@
|
|||
|
||||
function new_obj(name,img,height,width,description,callback){
|
||||
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 ) {
|
||||
// if(res["out"] == "good"){
|
||||
// console.log(res["body"]);
|
||||
|
@ -108,7 +149,7 @@
|
|||
let description = document.getElementById("nobj_description").value;
|
||||
let height = document.getElementById("obj_height").value;
|
||||
let width = document.getElementById("obj_width").value;
|
||||
var img = document.querySelector('img').src;
|
||||
var img = document.querySelector('#img_prev').src;
|
||||
name = name.replace(" ","$");
|
||||
if (img != "http://n0rsrv2:3002/admin"){
|
||||
document.getElementById("obj_resp").innerHTML = "creating object";
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
img{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
}
|
||||
#objs_in_group{
|
||||
display: flex;
|
||||
|
@ -22,10 +23,9 @@
|
|||
<div>
|
||||
<div id="objs_in_group"></div>
|
||||
</div>
|
||||
<div class="cmenu" id="object_menu">
|
||||
<button>del object</button>
|
||||
<button>change name</button>
|
||||
<button>change size</button>
|
||||
<div class="cmenu" id="object_edit_menu">
|
||||
<button onclick="obj_del()">del object</button>
|
||||
<button onclick="set_edit()">edit object</button>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
@ -33,11 +33,16 @@
|
|||
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(){
|
||||
document.getElementById("objs_in_group").innerHTML = "";
|
||||
edit_load_objs((data)=>{
|
||||
data.forEach(value => {
|
||||
// console.log(value);
|
||||
console.log(value);
|
||||
// // console.log($.cookie("cache"));
|
||||
// console.log(localStorage.getItem(`${value["name"]}`));
|
||||
if ($.cookie("cache") == "true"){
|
||||
|
@ -59,17 +64,92 @@
|
|||
})
|
||||
}
|
||||
function make(img){
|
||||
let czones = document.getElementById("objs_in_group");
|
||||
let czone = document.createElement('div');
|
||||
czone.classList.add(value["name"]);
|
||||
czone.classList.add("object");
|
||||
czone.innerHTML = `<img src="${img}">`
|
||||
czones.append(czone)
|
||||
let obj_list = document.getElementById("objs_in_group");
|
||||
let obj = document.createElement('div');
|
||||
obj.id = "object_menu";
|
||||
obj.classList.add(value["name"]);
|
||||
obj.classList.add("object");
|
||||
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){
|
||||
$.post( "/get_obj",{name:name,key:key})
|
||||
.done(function( res ) {
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
if(res["out"] == "good"){
|
||||
// console.log(res["body"]);
|
||||
load_groups();
|
||||
edit_get_objs();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -33,6 +34,7 @@
|
|||
if(res["out"] == "good"){
|
||||
// console.log(res["body"]);
|
||||
load_groups();
|
||||
edit_get_objs();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -116,7 +116,7 @@
|
|||
document.getElementById(`${key}_${id}`).innerText = value;
|
||||
}
|
||||
if(res["out"] == "bad"){
|
||||
alert("cant change name in use")
|
||||
alert("this name is in use")
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -122,6 +122,23 @@
|
|||
// menu.innerHTML = "<p>Option1</p><p>Option2</p><p>Option3</p><p>Option4</p>"
|
||||
// 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{
|
||||
hide_menus();
|
||||
|
|
Loading…
Reference in New Issue
Block a user