データの取得(DOM)およびシリアライズ
function getGGBDom() {
var idStr;
if (typeof document.getElementsByClassName('notranslate')[0] === 'undefined') {
idStr = 'ggbApplet';
} else {
idStr = document.getElementsByClassName('notranslate')[0].getAttribute('id');
}
console.log(idStr);
var ggbApplet = (new Function("return " + idStr))();
var xmlStr = ggbApplet.getXML();
var parser = new DOMParser();
var dom = parser.parseFromString(xmlStr, "text/xml");
return dom;
}
function domToXml(dom) {
var serializer = new XMLSerializer();
var xmlStr = serializer.serializeToString(dom);
return xmlStr;
}
function getDOM(objName) {
var xmlText = ggbApplet.getXML(objName);
if (xmlText == "") {
return;
}
var parser = new DOMParser();
var doc = parser.parseFromString(xmlText, "text/xml");
return doc;
}
function evalDOM(dom) {
var serializer = new XMLSerializer();
var xmlStr = serializer.serializeToString(dom);
console.log(xmlStr);
ggbApplet.evalXML(xmlStr);
}
function editElem(objName, tagName, attributesObj) {
var doc = getDOM(objName);
var parentElem = doc.getElementsByTagName("element")[0]
var targetElem = doc.getElementsByTagName(tagName)[0];
if (targetElem) {
var attributeNamesOfTargetElem = targetElem.getAttributeNames();
for (var abName of attributeNamesOfTargetElem) {
console.log(abName);
if (attributesObj[abName] === undefined) {
attributesObj[abName] = targetElem.getAttribute(abName);
}
}
targetElem.remove();
}
console.log(attributesObj);
var newElem = doc.createElement(tagName);
for (var [key, value] of Object.entries(attributesObj)) {
newElem.setAttribute(key, value);
}
console.log(newElem);
parentElem.appendChild(newElem);
evalDOM(doc);
var doc = getDOM(objName);
console.log(doc);
}