</tr>
<tr>
<td colspan="2">
- <div style="overflow-y: scroll; overflow-x: scroll; height: 256px; width: 0px;" oncontextmenu="return false;" class="program-track-container">
+ <div style="overflow-y: auto; overflow-x: auto; height: 256px; width: 0px;" oncontextmenu="return false;" class="program-track-container">
<table border=1 class="program-track"></table>
</div>
</td>
break;
}
if (compare == undefined) return r;
- compare = compare.replace(/[\"]/g, "'").trim();
- return compare == r;
+ return compare.toString().replace(/[\"]/g, "'").trim() == r;
}
var INSTRUCTIONS =
[
- "X",
- "Y",
- "Z",
- "H",
- "S",
- "T",
- "S<sup>†</sup>",
- "T<sup>†</sup>",
- "CX",
- "CCX",
- "SW",
- "CSW",
- "Rx",
- "Ry",
- "Rz",
- "|0⟩",
- "|1⟩",
- "🔍",
- "=1",
- "=0",
+ "X", "Pauli-X",
+ "Y", "Pauli-Y",
+ "Z", "Pauli-Z",
+ "H", "Hadamard",
+ "S", "Phase-S",
+ "T", "Phase-T",
+ "S<sup>†</sup>", "Phase-S Hermitian Transpose",
+ "T<sup>†</sup>", "Phase-T Hermitian Transpose",
+ "CX", "Controlled-NOT",
+ "CCX", "Toffoli",
+ "SW", "Swap",
+ "CSW", "Fredkin",
+ "Rx", "Rotation-X",
+ "Ry", "Rotation-Y",
+ "Rz", "Rotation-Z",
+ "|0⟩", "Qubit Set",
+ "|1⟩", "Qubit Reset",
+ "🔍", "Measure",
+ "=1", "Conditional Set",
+ "=0", "Conditional Reset"
];
var ProgramTrack =
{
SCALE: 64,
STATE: [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
DRAG: "",
+ DRAGPOS: [0, 0],
+ DRAGELEM: undefined,
init: () =>
{
for (var i = 0; i < ProgramTrack.STATE.length; i++)
var h = e.innerHTML.replace(/[<].*?[>]/g, "");
h = e.innerHTML;
ProgramTrack.DRAG = h;
+ ProgramTrack.DRAGPOS = [evt.clientX, evt.clientY];
$(".program-drag")[0].innerHTML = tr + td + h + "</tr></td>";
$(".program-drag")[0].style.visibility = "";
}
td = "<td style='width: " + px + "; height: " + px + "; cursor: grab;'";
td += " oncontextmenu='return false;'";
td += " " + drag_event.replace("true", "false");
- td += ">";
var itr = 0;
html = tr;
- for (var i = 0; i < INSTRUCTIONS.length; i++)
+ for (var i = 0; i < INSTRUCTIONS.length; i += 2)
{
- html += td + INSTRUCTIONS[i] + "</td>";
+ html += td + "title='" + INSTRUCTIONS[i + 1] + "'" + ">" + INSTRUCTIONS[i] + "</td>";
itr++;
- if (itr > 4 && i != INSTRUCTIONS.length - 1)
+ if (itr > 4 && i != INSTRUCTIONS.length - 2)
{
html += "</tr>" + tr;
itr = 0;
$(".program-track-container")[0].style.width = $(".program-track-container")[0].parentNode.getBoundingClientRect().width + "px"
};
+ document.body.addEventListener("keydown", e =>
+ {
+ modalFixes();
+ });
document.body.addEventListener("mousemove", e =>
{
+ modalFixes();
var x = $(".program-drag")[0];
var w = parseFloat(getComputedStyle(x).width.replace("px", "")) / 2;
var h = parseFloat(getComputedStyle(x).height.replace("px", "")) / 2;
if (str) {} else {str = ""};
if (str.includes(",") && (trackerElem.innerHTML == "..." || trackerElem.innerHTML == ""))
{
+ ProgramTrack.DRAGELEM = trackerElem;
$(".program-instr")[0].style.display = "none";
$(".program-instr")[0].className = $(".program-instr")[0].className.replace("menu-hidden", "").trim();
$(".program-instr")[0].className += " menu-reveal";
ProgramTrack.draw();
$(".program-drag")[0].style.visibility = "hidden";
ProgramTrack.DRAG = "";
+
var elem = document.elementFromPoint(e.clientX, e.clientY);
+ var dist = Math.sqrt(Math.pow(ProgramTrack.DRAGPOS[0] - e.clientX, 2) + Math.pow(ProgramTrack.DRAGPOS[1] - e.clientY, 2));
+ if (dist < 8) elem = ProgramTrack.DRAGELEM;
var attr = elem.getAttribute("pidx");
if (attr == null) return;
attr = attr.split(",");
default:
if (!qubit) return;
}
+ var f = [0, 0, 0];
switch (html)
{
- case "CX": html = overline("CX", "10"); break;
- case "SW": html = overline("SW", "10"); break;
- case "CCX": html = overline("CCX", "100"); break;
- case "CSW": html = overline("CSW", "100"); break;
+ case "CX":
+ if (ProgramTrack.STATE[attr[0]].length > attr[1])
+ {
+ for (var i = 0; i < ProgramTrack.STATE.length; i++)
+ {
+ if (i != attr[0])
+ {
+ if (overline("CX", "10", ProgramTrack.STATE[i][attr[1]])) f[0] = 1;
+ if (overline("CX", "01", ProgramTrack.STATE[i][attr[1]])) f[1] = 1;
+ }
+ }
+ }
+ if (!f[0]) html = overline("CX", "10");
+ else html = overline("CX", "01");
+ break;
+ case "SW":
+ if (ProgramTrack.STATE[attr[0]].length > attr[1])
+ {
+ for (var i = 0; i < ProgramTrack.STATE.length; i++)
+ {
+ if (i != attr[0])
+ {
+ if (overline("SW", "10", ProgramTrack.STATE[i][attr[1]])) f[0] = 1;
+ if (overline("SW", "01", ProgramTrack.STATE[i][attr[1]])) f[1] = 1;
+ }
+ }
+ }
+ if (!f[0]) html = overline("SW", "10");
+ else html = overline("SW", "01");
+ break;
+ case "CCX":
+ if (ProgramTrack.STATE[attr[0]].length > attr[1])
+ {
+ for (var i = 0; i < ProgramTrack.STATE.length; i++)
+ {
+ if (i != attr[0])
+ {
+ if (overline("CCX", "100", ProgramTrack.STATE[i][attr[1]])) f[0] = 1;
+ if (overline("CCX", "010", ProgramTrack.STATE[i][attr[1]])) f[1] = 1;
+ if (overline("CCX", "001", ProgramTrack.STATE[i][attr[1]])) f[2] = 1;
+ }
+ }
+ }
+ if (!f[0]) html = overline("CCX", "100");
+ else if (!f[1]) html = overline("CCX", "010");
+ else html = overline("CCX", "001");
+ break;
+ case "CSW":
+ if (ProgramTrack.STATE[attr[0]].length > attr[1])
+ {
+ for (var i = 0; i < ProgramTrack.STATE.length; i++)
+ {
+ if (i != attr[0])
+ {
+ if (overline("CSW", "100", ProgramTrack.STATE[i][attr[1]])) f[0] = 1;
+ if (overline("CSW", "010", ProgramTrack.STATE[i][attr[1]])) f[1] = 1;
+ if (overline("CSW", "001", ProgramTrack.STATE[i][attr[1]])) f[2] = 1;
+ }
+ }
+ }
+ if (!f[0]) html = overline("CSW", "100");
+ else if (!f[1]) html = overline("CSW", "010");
+ else html = overline("CSW", "001");
+ break;
case "🔍": html = "🔍<sub>0</sub>"; break;
case "=1": html = "=1<sub>0</sub>"; break;
case "=0": html = "=0<sub>0</sub>"; break;
ProgramTrack.draw();
if (elem.innerHTML.trim() == "...")
{
- $(".program-track-container")[0].scrollLeft = $(".program-track-container")[0].scrollLeftMax;
+ $(".program-track-container")[0].scrollLeft = 999999;
}
});
//Chart
key = key ? key : "";
if (key.split(":").length != 3)
{
+ $("#blocker-div")[0].remove();
+ $("#blocker-img")[0].remove();
errorModal("Please click the gear icon and input your API key.");
return;
}
{
errorModal(x.response, 1);
}
- }).catch(x => errorModal(x.message, 1));
+ }).catch(x =>
+ {
+ $("#blocker-div")[0].remove();
+ $("#blocker-img")[0].remove();
+ errorModal(x.message, 1);
+ });
});
MicroModal.init();
function menu(cmd)
case "clear":
$("#modal-main-title")[0].innerHTML = "Clear Project";
$("#modal-main-content")[0].innerHTML = "<p>Are you sure you want to clear this project?</p>";
+ $("#modal-main-cancel")[0].style.display = "";
$("#modal-main-confirm")[0].style.display = "";
$("#modal-main-confirm")[0].setAttribute("onclick", "ProgramTrack.init(); closeModal();");
- $(".istina-basis")[0].style.visibility = "hidden";
MicroModal.show("modal-main");
break;
case "settings":
$("#apikey")[0].value = apikey;
$("#modal-main-confirm")[0].style.display = "";
$("#modal-main-confirm")[0].setAttribute("onclick", "localStorage.setItem('apikey', $('#modal-main-content input')[0].value); closeModal();");
- $(".istina-basis")[0].style.visibility = "hidden";
MicroModal.show("modal-main");
break;
case "save":
$("#modal-main-cancel")[0].style.display = "none";
$("#modal-main-title")[0].innerHTML = "An Error Occurred";
$("#modal-main-content")[0].innerHTML = "<p style='color: red;'>" + err + "</p>";
- $(".istina-basis")[0].style.visibility = "hidden";
MicroModal.show("modal-main");
}
function closeModal()
{
- $(".istina-basis")[0].style.visibility = "";
MicroModal.close();
}
$("#file-input")[0].addEventListener("change", e =>
document.body.appendChild(div);
document.body.appendChild(img);
}
-
+ function modalFixes()
+ {
+ if (getComputedStyle($("#modal-main")[0]).display == "none")
+ {
+ $(".istina-basis")[0].style.visibility = "";
+ }
+ else
+ {
+ $(".istina-basis")[0].style.visibility = "hidden";
+ }
+ }
</script>
</body>