From fe18c7cf5c82ab1a74960f6e44ab0d0f8b23a198 Mon Sep 17 00:00:00 2001 From: Mateiadrielrafael <39400800+Mateiadrielrafael@users.noreply.github.com> Date: Fri, 22 Jun 2018 17:09:43 +0300 Subject: [PATCH] Add files via upload Signed-off-by: prescientmoon --- index.html | 83 +++++++++++++++ scripts/and_gate.js | 103 ++++++++++++++++++ scripts/buffer.js | 72 +++++++++++++ scripts/but.js | 79 ++++++++++++++ scripts/edges.js | 94 +++++++++++++++++ scripts/light.js | 83 +++++++++++++++ scripts/main.js | 187 +++++++++++++++++++++++++++++++++ scripts/not.js | 93 ++++++++++++++++ scripts/or.js | 86 +++++++++++++++ scripts/pins.js | 70 ++++++++++++ scripts/text.js | 41 ++++++++ st.css | 22 ++++ textures/gates/Thumbs.db | Bin 0 -> 27136 bytes textures/gates/and_gate.jpg | Bin 0 -> 38492 bytes textures/gates/buffer_gate.jpg | Bin 0 -> 5175 bytes textures/gates/not_gate.jpg | Bin 0 -> 5201 bytes textures/gates/or_gate.jpg | Bin 0 -> 19333 bytes 17 files changed, 1013 insertions(+) create mode 100644 index.html create mode 100644 scripts/and_gate.js create mode 100644 scripts/buffer.js create mode 100644 scripts/but.js create mode 100644 scripts/edges.js create mode 100644 scripts/light.js create mode 100644 scripts/main.js create mode 100644 scripts/not.js create mode 100644 scripts/or.js create mode 100644 scripts/pins.js create mode 100644 scripts/text.js create mode 100644 st.css create mode 100644 textures/gates/Thumbs.db create mode 100644 textures/gates/and_gate.jpg create mode 100644 textures/gates/buffer_gate.jpg create mode 100644 textures/gates/not_gate.jpg create mode 100644 textures/gates/or_gate.jpg diff --git a/index.html b/index.html new file mode 100644 index 0000000..33e2ae8 --- /dev/null +++ b/index.html @@ -0,0 +1,83 @@ + + . + + Logic simulator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/scripts/and_gate.js b/scripts/and_gate.js new file mode 100644 index 0000000..a3e9c1e --- /dev/null +++ b/scripts/and_gate.js @@ -0,0 +1,103 @@ +console.log("and"); +function and(id){ + this.id = id; + this.rep = add(80,80,"blue","black",this.id,false); + this.pin1 = new pin(0); + this.pin2 = new pin(0); + this.o = new pin(1); + this.o.nei = this; + this.activation = function(){ + if (this.pin1.val && this.pin2.val){ + return true; + } + return false; + } + + this.x = function(){ + let name = "#" + this.id; + return parseFloat($(name).attr("x")); + } + + this.y = function(){ + let name = "#" + this.id; + //console.log("y"+parseFloat($(name).attr("y"))); + return parseFloat($(name).attr("y")); + } + + //design + var g = document.createElementNS('http://www.w3.org/2000/svg', 'g'); + $(g).attr({ + width: "100%", + height: "100%" + }); + var skin = $(document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject')).attr({ + x: "50", + y: "50", + id: (id+"-skin"), + width:"80", + height:"80" + }); + var img = $(document.createElement('img')).attr({ + height:"72", + width:"72", + src:"textures/gates/and_gate.jpg" + }); + var iDiv = document.createElement("div"); + $(iDiv).append(img); + this.skin = skin; + this.img = img; + $(skin).append(iDiv); + //noname(this); + $(g).append(skin); + var elem = document.getElementById("svg1"); + elem.appendChild(g); + + //updating + this.update = function(){ + //the main object and his pins + let x = this.x(); + let y = this.y(); + this.pin1.set(x-20,y); + this.pin2.set(x-20,y+60); + this.o.set(x+80,y+30); + + //and the skin + var name = "#"+this.id+"-skin"; + var skin = $(name); + skin.attr("x",(parseFloat($((this.rep)).attr("x"))+4).toString()); + skin.attr("y",(parseFloat($((this.rep)).attr("y"))+4).toString()); + } + pieces[pieces.length] = this; + + + addclk(this); +} + +function addclk(ob){ + var rep = ob.rep; + $((ob.img)).mousedown(function(e){ + var svg = document.getElementById("svg1"); + $(svg).append(ob.rep); + $(svg).append($(ob.pin1.rep)); + $(svg).append($(ob.pin2.rep)); + $(svg).append($(ob.o.rep)); + $(svg).append($(ob.skin)); + selected = ob.id; + }); + $((ob.img)).mouseup(function(e){ + selected = "yay"; + }); +} +/* +function noname(ob){ + $((ob.img)).mousedown(function(e){ + selected = ob.id; + console.log("Clicked!!!"); + }); + $((ob.img)).mouseup(function(e){ + selected = "yay"; + }); +} +*/ + + diff --git a/scripts/buffer.js b/scripts/buffer.js new file mode 100644 index 0000000..d9b600b --- /dev/null +++ b/scripts/buffer.js @@ -0,0 +1,72 @@ +function buffer(id){ + this.id = id; + this.name = "#" + this.id; + this.rep = add(80,80,"green","black",this.id,true); + this.pin1 = new pin(0); + this.o = new pin(1); + this.o.nei = this; + //this.text = new text(this,"Or-gate"); + this.activation = function(){ + if (this.pin1.val){ + return true; + } + return false; + } + + this.x = function(){ + let name = "#" + this.id; + return parseFloat($(name).attr("x")); + } + + this.y = function(){ + let name = "#" + this.id; + //console.log("y"+parseFloat($(name).attr("y"))); + return parseFloat($(name).attr("y")); + } + + //design + var g = document.createElementNS('http://www.w3.org/2000/svg', 'g'); + $(g).attr({ + width: "100%", + height: "100%" + }); + var skin = $(document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject')).attr({ + x: "50", + y: "50", + id: (id+"-skin"), + width:"80", + height:"80" + }); + var img = $(document.createElement('img')).attr({ + height:"80", + width:"80", + src:"textures/gates/buffer_gate.jpg" + }); + var iDiv = document.createElement("div"); + $(iDiv).append(img); + this.skin = skin; + this.img = img; + $(skin).append(iDiv); + //noname(this); + $(g).append(skin); + var elem = document.getElementById("svg1"); + elem.appendChild(g); + + //updating + this.update = function(){ + //the main object and his pins + let x = this.x(); + let y = this.y(); + this.pin1.set(x-20,y+30); + this.o.set(x+80,y+30); + + //and the skin + var name = "#"+this.id+"-skin"; + var skin = $(name); + skin.attr("x",(parseFloat($((this.rep)).attr("x"))+4).toString()); + skin.attr("y",(parseFloat($((this.rep)).attr("y"))+4).toString()); + } + pieces[pieces.length] = this; + + addclk11(this); +} \ No newline at end of file diff --git a/scripts/but.js b/scripts/but.js new file mode 100644 index 0000000..cf91d3c --- /dev/null +++ b/scripts/but.js @@ -0,0 +1,79 @@ +console.log("nut"); +function but(id){ + this.wait = true; + this.id = id; + this.rep = add(80,80,"orange","black",this.id,true); + this.o = new pin(1); + this.val = false; + addevt(this); + $((this.rep)).attr("stroke-width",4); + $((this.rep)).attr("stroke","black"); + this.o.nei = this; + this.activation = function(){ + return this.val; + } + + this.x = function(){ + let name = "#" + this.id; + return parseFloat($(name).attr("x")); + } + + this.y = function(){ + let name = "#" + this.id; + //console.log("y"+parseFloat($(name).attr("y"))); + return parseFloat($(name).attr("y")); + } + + //design + this.init = function(){ + return 0; + } + + this.update = function(){ + let x = this.x(); + let y = this.y(); + this.o.set(x+80,y+30); + } + pieces[pieces.length] = this; +} +function addevt(ob){ + /* + $((ob.rep)).click(function(){ + ob.val = (ob.val+1)%2; + if (ob.val){ + $((ob.rep)).attr("fill","red"); + } + else{ + $((ob.rep)).attr("fill","orange"); + } + }); + */ + + $((ob.rep)).mousedown(function(e){ + var svg = document.getElementById("svg1"); + $(svg).append(ob.rep); + $(svg).append($(ob.o.rep)); + selected = ob.id; + + if (ob.wait){ + ob.val = (ob.val+1)%2; + if (ob.val){ + $((ob.rep)).attr("fill","red"); + } + else{ + $((ob.rep)).attr("fill","orange"); + } + ob.wait = false; + } + }); + $((ob.rep)).mouseup(function(e){ + selected = "yay"; + ob.wait = true; + }); +} + + + + + + diff --git a/scripts/edges.js b/scripts/edges.js new file mode 100644 index 0000000..16f8f37 --- /dev/null +++ b/scripts/edges.js @@ -0,0 +1,94 @@ +var l_count = 0; +var lines = []; +console.log("started2"); +function edge(start,end){ + this.id = l_count.toString()+"line"; + l_count++; + this.start = start; + this.end = end; + console.log(start+end); + + console.log(this.end); + console.log(this.start); + + lines[lines.length] = this; + + var g = document.createElementNS('http://www.w3.org/2000/svg', 'g'); + $(g).attr({ + width: "100%", + height: "100%" + }); + var el = $(document.createElementNS('http://www.w3.org/2000/svg', 'line')).attr({ + x1: "50", + y1:"50", + x2:"55", + y2:"55", + id: this.id, + fill:"yellow", + stroke: "black" + }); + $(el).attr("stroke-width","2"); + $(g).append(el); + var elem = document.getElementById("svg1"); + elem.appendChild(g); + + //console.log("succes"+lines); + + this.rep = el; + this.name = "#"+this.id; + + this.update = function(){ + let adr = this.start.name; + let temp = $(adr).attr("x"); + let n = this.name; + //console.log("updating"+adr+temp+n); + temp = (parseFloat(temp)).toString(); + $(n).attr("x1",temp); + temp = $(adr).attr("y"); + temp = (parseFloat(temp)+10).toString(); + $(n).attr("y1",temp); + adr = this.end.name; + temp = $(adr).attr("x"); + temp = (parseFloat(temp)+20).toString(); + $(n).attr("x2",temp); + temp = $(adr).attr("y"); + temp = (parseFloat(temp)+10).toString(); + $(n).attr("y2",temp); + + //and the color based on the state + if (this.start.val){ + $((this.rep)).attr("stroke","yellow"); + } + else{ + $((this.rep)).attr("stroke","black"); + } + } + + + rem_edge(this); +} + +function rem_edge(ob){ + $((ob.rep)).click(function(e){ + //removing the edge from the array + for (var i = 0; i < lines.length; i++) { + if (lines[i] == (ob.id)) { + lines.splice(i, 1); + } + } + + //removing the visual + $((ob.rep)).remove(); + + //fixing the actual start and end pins + ob.start.nei = "yay"; + ob.start.val = false; + ob.start.state = true; + ob.end.val = false; + ob.end.state = true; + }); +} + + + + diff --git a/scripts/light.js b/scripts/light.js new file mode 100644 index 0000000..62ec951 --- /dev/null +++ b/scripts/light.js @@ -0,0 +1,83 @@ +console.log("bulb"); +function light(id){ + this.id = id; + var g = document.createElementNS('http://www.w3.org/2000/svg', 'g'); + $(g).attr({ + width: "100%", + height: "100%" + }); + var el = $(document.createElementNS('http://www.w3.org/2000/svg', 'circle')).attr({ + cx: "50", + cy:"50", + r: "40", + id: this.id, + fill:"white", + stroke: "black" + }); + $(el).attr("stroke-width","2"); + $(el).attr("class","light"); + $(g).append(el); + //$(el).attr("onmousedown","selected='"+this.id+"';"); + $(el).attr("onmouseup","selected='yay';"); + var elem = document.getElementById("svg1"); + elem.appendChild(g); + this.rep = el; + + this.i = new pin(0); + this.val = false; + //addevt(this); + $((this.rep)).attr("stroke-width",4); + + this.activation = function(){ + return this.i.val; + } + + this.x = function(){ + let name = "#" + this.id; + return parseFloat($(name).attr("cx")); + } + + this.y = function(){ + let name = "#" + this.id; + //console.log("y"+parseFloat($(name).attr("y"))); + return parseFloat($(name).attr("cy")); + } + + //design + this.init = function(){ + return 0; + } + + this.update = function(){ + if (this.i.val != "yay"){ + if ((this.activation())){ + $((this.rep)).attr("fill","yellow"); + } + else{ + $((this.rep)).attr("fill","white"); + } + } + //console.log($((this.rep)).attr("fill")); + let x = this.x(); + let y = this.y(); + this.i.set(x-60,y-10); + } + pieces[pieces.length] = this; + + addclk_light(this); +} + +function addclk_light(ob){ + var rep = ob.rep; + $(ob.rep).mousedown(function(e){ + var svg = document.getElementById("svg1"); + $(svg).append(ob.rep); + $(svg).append($(ob.i.rep)); + selected=ob.id; + }); +} + + + + + diff --git a/scripts/main.js b/scripts/main.js new file mode 100644 index 0000000..64e29bd --- /dev/null +++ b/scripts/main.js @@ -0,0 +1,187 @@ +//the absolute start, adding the buttons +//adding the button for the modal +var order = 0; +var selecte="yay" +var pieces = []; +var modal = add(40,40,"blue","black","butt",false); +$(modal).mousedown(function(e){ + $("#addel").modal("show"); + selected = "butt"; +}); +$(modal).mouseup(function(e){ + selected = "yay"; +}); +$(modal).attr("y","500"); +$(modal).attr("x","500"); + +//var desc = new text(modal,"+") + +function getname(){ + return ((order++).toString()+"piece") +} + +function addel(){ + var added = eval("new "+$("#sel option:selected").attr("value")+"(getname())"); +} + +//variables +$("img,rect,circle,svg,p").mousedown(function(e){ + e.preventDefault(); +}); +$("*").mouseup(function(e){ + e.preventDefault(); +}); +$("img").click(function(e){ + e.preventDefault(); +}); +var selected = "yay"; +var firstx = 0; +var firsty = 0; +var fx = 0; +var fy = 0; +let snap = false; +console.log("started"); +//events + +$("body").mousemove(function(e){ + drag(e,selected); +}); +$("body").mouseup(function(e){ + selected = "yay"; +}); +$("body").mousedown(function(e){ + if (selected!="yay"){ + firstx = e.pageX; + firsty = e.pageY; + name = "#"+selected; + if ($(name).attr("class")=="light"){ + fx = parseFloat($(name).attr("cx")); + fy = parseFloat($(name).attr("cy")); + } + else{ + fx = parseFloat($(name).attr("x")); + fy = parseFloat($(name).attr("y")); + } + } +}); +//functions +function drag(e,selected){ + + //the name + let name = "#" + selected; + + //the positions + let x = e.pageX; + let y = e.pageY; + + //updating positions + set_position(name,x,y); +} + +function set_position(name,x,y){ + var obj,objx,objy; + obj = "#"+selected; + if ($(name).attr("class")!="light"){ + //getting the variables + obj = "#"+selected; + objx = parseFloat($(obj).attr("x")); + objy = parseFloat($(obj).attr("y")); + + x = parseFloat(x); + y = parseFloat(y); + + xdif = fx - firstx; + ydif = fy - firsty; + + x += xdif; + y += ydif; + + //x -= parseFloat($(obj).attr("width")); + //y -= parseFloat($(obj).attr("height")); + if (snap){ + x = Math.floor(x/80)*80; + y = Math.floor(y/80)*80; + } + //console.log("obj:"+obj+"objx:"+objx+"objy:"+objy+"xdif:"+xdif+"ydif:"+ydif) + //setting the new positions + $(obj).attr("x",(x).toString()); + $(obj).attr("y",(y).toString()); + } + else{ + //for circles + //getting the variables + obj = "#"+selected; + objx = parseFloat($(obj).attr("cx")); + objy = parseFloat($(obj).attr("cy")); + + x = parseFloat(x); + y = parseFloat(y); + + xdif = fx - firstx; + ydif = fy - firsty; + + x += xdif; + y += ydif; + + //x -= parseFloat($(obj).attr("width")); + //y -= parseFloat($(obj).attr("height")); + if (snap){ + x = Math.floor(x/80)*80+40; + y = Math.floor(y/80)*80+40; + } + //console.log("obj:"+obj+"objx:"+objx+"objy:"+objy+"xdif:"+xdif+"ydif:"+ydif) + //setting the new positions + $(obj).attr("cx",(x).toString()); + $(obj).attr("cy",(y).toString()); + } +} + +function add(h,w,color,stroke,id,on){ + var g = document.createElementNS('http://www.w3.org/2000/svg', 'g'); + $(g).attr({ + width: "100%", + height: "100%" + }); + var el = $(document.createElementNS('http://www.w3.org/2000/svg', 'rect')).attr({ + x: "50", + y:"50", + id: id, + fill:color, + height: h.toString()+"px", + width: w.toString()+"px", + stroke: stroke, + rx:"20", + ry:"20" + }); + if (on){ + $(el).attr("onmousedown","selected='"+id+"';"); + $(el).attr("onmouseup","selected='yay';"); + } + $(el).attr("stroke-width","4"); + $(g).append(el); + var elem = document.getElementById("svg1"); + elem.appendChild(g); + return el; +} + +console.log(pieces); +setInterval(function(){ + for (var i = 0;i < pieces.length;i++){ + pieces[i].update(); + } + for (var i = 0;i < lines.length;i++){ + lines[i].update(); + } + for (var i = 0;i < pins.length;i++){ + pins[i].update(); + } +},0.001); + + + + + + + + +//objects are made in other files \ No newline at end of file diff --git a/scripts/not.js b/scripts/not.js new file mode 100644 index 0000000..2ba4a78 --- /dev/null +++ b/scripts/not.js @@ -0,0 +1,93 @@ +function not(id){ + this.id = id; + this.name = "#" + this.id; + this.rep = add(80,80,"green","black",this.id,true); + this.pin1 = new pin(0); + this.o = new pin(1); + this.o.nei = this; + //this.text = new text(this,"Or-gate"); + this.activation = function(){ + if (!this.pin1.val){ + return true; + } + return false; + } + + this.x = function(){ + let name = "#" + this.id; + return parseFloat($(name).attr("x")); + } + + this.y = function(){ + let name = "#" + this.id; + //console.log("y"+parseFloat($(name).attr("y"))); + return parseFloat($(name).attr("y")); + } + + //design + var g = document.createElementNS('http://www.w3.org/2000/svg', 'g'); + $(g).attr({ + width: "100%", + height: "100%" + }); + var skin = $(document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject')).attr({ + x: "50", + y: "50", + id: (id+"-skin"), + width:"80", + height:"80" + }); + var img = $(document.createElement('img')).attr({ + height:"80", + width:"80", + src:"textures/gates/not_gate.jpg" + }); + var iDiv = document.createElement("div"); + $(iDiv).append(img); + this.skin = skin; + this.img = img; + $(skin).append(iDiv); + //noname(this); + $(g).append(skin); + var elem = document.getElementById("svg1"); + elem.appendChild(g); + + //updating + this.update = function(){ + //the main object and his pins + let x = this.x(); + let y = this.y(); + this.pin1.set(x-20,y+30); + this.o.set(x+80,y+30); + + //and the skin + var name = "#"+this.id+"-skin"; + var skin = $(name); + skin.attr("x",(parseFloat($((this.rep)).attr("x"))+4).toString()); + skin.attr("y",(parseFloat($((this.rep)).attr("y"))+4).toString()); + } + pieces[pieces.length] = this; + + addclk11(this); +} + +function addclk11(ob){ + var rep = ob.rep; + $((ob.img)).mousedown(function(e){ + var svg = document.getElementById("svg1"); + $(svg).append(ob.rep); + $(svg).append($(ob.pin1.rep)); + $(svg).append($(ob.o.rep)); + $(svg).append($(ob.skin)); + selected = ob.id; + }); + $((ob.img)).mouseup(function(e){ + selected = "yay"; + }); +} + + + + + + diff --git a/scripts/or.js b/scripts/or.js new file mode 100644 index 0000000..07009b5 --- /dev/null +++ b/scripts/or.js @@ -0,0 +1,86 @@ +function or(id){ + this.id = id; + this.name = "#" + this.id; + this.rep = add(80,80,"green","black",this.id,true); + this.pin1 = new pin(0); + this.pin2 = new pin(0); + this.o = new pin(1); + this.o.nei = this; + //this.text = new text(this,"Or-gate"); + this.activation = function(){ + if (this.pin1.val || this.pin2.val){ + return true; + } + return false; + } + + this.x = function(){ + let name = "#" + this.id; + return parseFloat($(name).attr("x")); + } + + this.y = function(){ + let name = "#" + this.id; + //console.log("y"+parseFloat($(name).attr("y"))); + return parseFloat($(name).attr("y")); + } + + //design + var g = document.createElementNS('http://www.w3.org/2000/svg', 'g'); + $(g).attr({ + width: "100%", + height: "100%" + }); + var skin = $(document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject')).attr({ + x: "50", + y: "50", + id: (id+"-skin"), + width:"80", + height:"80" + }); + var img = $(document.createElement('img')).attr({ + height:"80", + width:"80", + src:"textures/gates/or_gate.jpg" + }); + var iDiv = document.createElement("div"); + $(iDiv).append(img); + this.skin = skin; + this.img = img; + $(skin).append(iDiv); + //noname(this); + $(g).append(skin); + var elem = document.getElementById("svg1"); + elem.appendChild(g); + + //updating + this.update = function(){ + //the main object and his pins + let x = this.x(); + let y = this.y(); + this.pin1.set(x-20,y); + this.pin2.set(x-20,y+60); + this.o.set(x+80,y+30); + + //and the skin + var name = "#"+this.id+"-skin"; + var skin = $(name); + skin.attr("x",(parseFloat($((this.rep)).attr("x"))+4).toString()); + skin.attr("y",(parseFloat($((this.rep)).attr("y"))+4).toString()); + } + pieces[pieces.length] = this; + + addclk(this); +} +/* +function addclk(ob){ + var rep = ob.rep; + $(ob.rep).mousedown(function(e){ + var svg = document.getElementById("svg1"); + $(svg).append(ob.rep); + $(svg).append($(ob.pin1.rep)); + $(svg).append($(ob.pin2.rep)); + $(svg).append($(ob.o.rep)); + }); +} +*/ diff --git a/scripts/pins.js b/scripts/pins.js new file mode 100644 index 0000000..552f599 --- /dev/null +++ b/scripts/pins.js @@ -0,0 +1,70 @@ +var count = 0; +var pins = []; +var sels = "yay"; +var sele = "yay"; +var num; +function pin(type){ + this.state = true; + this.nei = "yay"; + this.val = false; + if (type == 0){ + this.type = true; + color = "black"; + } + else{ + this.type = false; + color = "red"; + } + this.update = function(){ + if (this.nei != "yay"){ + if (!(this.type)){ + this.val = this.nei.activation(); + } + else{ + this.val = this.nei.val; + } + } + if (this.val){ + $((this.rep)).attr("fill","red"); + } + else{ + $((this.rep)).attr("fill","yellow"); + } + } + this.id = count.toString(); + this.name = "#"+this.id; + this.rep = add(20,20,"yellow","black",this.id,false); + clicked(this); + count++; + this.name = "#"+this.id; + this.set = function(x,y){ + $(this.name).attr("x",x.toString()); + $(this.name).attr("y",y.toString()); + } + pins[pins.length] = this; + this.num = pins.length-1; +} + +function clicked(ob){ + $(ob.rep).click(function(e){ + if (ob.type == true){ + sels = ob; + } + else{ + sele = ob; + } + console.log("click"+sels+sele+ob.type); + if ((sels!="yay")&&(sele!="yay")){ + console.log("step 2"); + if ((sels.state)){ + sels.nei = sele; + sels.state = false; + sele.state = false; + a = new edge(sels,sele); + sels = "yay"; + sele = "yay"; + console.log("end"); + } + } + }); +} \ No newline at end of file diff --git a/scripts/text.js b/scripts/text.js new file mode 100644 index 0000000..d266c7a --- /dev/null +++ b/scripts/text.js @@ -0,0 +1,41 @@ +var t_count = 0; +function text(parent,value){ + //variables + this.parent = parent; + this.val = value; + this.id = t_count.toString() + "text"; + t_count++; + this.name = "#"+this.id; + + //adding the text to the SVG + var g = document.createElementNS('http://www.w3.org/2000/svg', 'g'); + $(g).attr({ + width: "100%", + height: "100%" + }); + var el = $(document.createElementNS('http://www.w3.org/2000/svg', 'text')).attr({ + x: "50", + y:"50", + id: this.id, + fill:"white", + stroke: "black" + }); + $(el).text(value); + $(el).attr("class","heavy"); + $(g).append(el); + var elem = document.getElementById("svg1"); + elem.appendChild(g); + this.rep = el; + $((this.rep)).click(function(e){ + e.preventDefault(); + }); + + //updating + this.update = function(){ + $((this.name)).attr("x",(parseFloat($((this.parent)).attr("x"))+15).toString()); + $((this.name)).attr("y",(parseFloat($((this.parent)).attr("y"))+25).toString()); + } + + //beeing sure it would be updated + pieces[pieces.length] = this; +} \ No newline at end of file diff --git a/st.css b/st.css new file mode 100644 index 0000000..dfc12c4 --- /dev/null +++ b/st.css @@ -0,0 +1,22 @@ +body { + background-color:rgba(0,0,0,0.7); + /* + background-image: url("bg.jpg"); + background-repeat: no-repeat; + background-size: cover; + */ + margin:0; +} + +.heavy { font: bold 20px sans-serif; } + +img { + border-radius: 17px; + height: 74; + width: 74; +} + +#butt { + rx: 10; + ry: 10; +} \ No newline at end of file diff --git a/textures/gates/Thumbs.db b/textures/gates/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..04791af956a06f22cf2ea0db76112125046f7920 GIT binary patch literal 27136 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 A{Qv*} literal 0 HcmV?d00001 diff --git a/textures/gates/and_gate.jpg b/textures/gates/and_gate.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c9ee14f464bd3b61305331c9a08145ddee2fd837 GIT binary patch literal 38492 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 literal 0 HcmV?d00001 diff --git a/textures/gates/not_gate.jpg b/textures/gates/not_gate.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c12ab4a9964c32cbc916b40100873cbcb7f7348d GIT binary patch literal 5201 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 TpZvrKN2#X!)ky2s0fYYmJ-UN- literal 0 HcmV?d00001 diff --git a/textures/gates/or_gate.jpg b/textures/gates/or_gate.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f78a1687e0a4c07cfba2aa99f334986ad8510ad GIT binary patch literal 19333 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