var CONTROL = { syncTime: "0", browser: null, page: null, link: null, memo: null, draw: null, responsiveUI: null }; var getSyncData, prevTime; function sync_data(a) { var b = { ebookId: String(ViewerManager.GetData.EPUB.ID), userId: String(ViewerManager.userInfo.loginKey) }; $.ajax({ async: false, type: "post", url: API.syncTime(), data: b, error: function(c, e, d) { console.log("error : function (jqXHR, textStatus, errorThrown)") }, success: function(e) { var d = $.xml2json(e); if (d.RESULT == "SUCCESS") { console.log("sync_data", a, d.message); CONTROL.syncTime = d.message; if (a == "down") { prevTime = CONTROL.syncTime } if (a == "complete") { prevTime = CONTROL.syncTime; return } var c = true; if (CONTROL.syncTime == "0" || CONTROL.syncTime == "") { c = false } updateSync(a, c) } } }) } function updateSync(d, b) { console.log("updateSync", d, b); var i = {}; var f = []; var j = []; var g = []; var c = []; var a = []; var h = []; var e = false; console.log("function updateSync(loadtype, bool)"); if (b) { $.ajax({ async: false, url: "/Sviewer/user_logdata/" + String(ViewerManager.GetData.EPUB.ID) + "/" + String(ViewerManager.userInfo.loginKey) + "/mycontents.json", success: function(k) {}, error: function(k, m, l) { console.log("error", k, m, l); e = true; CONTROL.syncTime = "" }, complete: function(k) { if (e == true) { updateSync(d, false); return } getSyncData = k.responseText; if (String(location.href).match("titanbooks.co.kr")) { getSyncData = JSON.parse(getSyncData); mix_data(d, "bookmark"); mix_data(d, "memo"); mix_data(d, "link"); mix_data(d, "draw") } else {} } }) } else { getSyncData = ""; mix_data(d, "bookmark"); mix_data(d, "memo"); mix_data(d, "link"); mix_data(d, "draw") } } var uploadCount = 0; function mix_data(b, o) { console.log("function mix_data(loadtype, gettype)"); var x, v, t; var u = CONTROL.save_target(o); var c = JSON.parse(u); if (b == "down") { var f = c[o]; var p = getSyncData[o]; if (o == "bookmark") { if ((p == null || p == undefined) && (f == null || f == undefined)) { return } var s = parseInt(ViewerManager.PAGE_TOTAL_NUMBER); var y = [], l = [], E = [], C; if (p != undefined && p.length > 0) { for (x = 1; x <= s; x++) { var B = x; if (p[x - 1] != undefined) { B = parseInt(p[x - 1].pageno) } if (p[x - 1] != undefined) { y[B] = p[x - 1] } } } var A = 0; if (f != undefined && f.length > 0) { for (x = 1; x <= s; x++) { var B = x; if (f[x - 1] != undefined) { B = parseInt(f[x - 1].pageno); if (A < parseInt(f[x - 1].lastdate)) { A = parseInt(f[x - 1].lastdate) } } if (f[x - 1] != undefined) { l[B] = f[x - 1] } } } for (x = 1; x <= s; x++) { if (y[x] == undefined && l[x] == undefined) { continue } else { if (y[x] != undefined && l[x] == undefined) { if (A <= parseInt(CONTROL.syncTime)) { y[x].bookId = ViewerManager.GetData.EPUB.ID; E.push(y[x]) } } else { if (y[x] == undefined && l[x] != undefined) { if (A >= parseInt(CONTROL.syncTime)) { E.push(l[x]) } } else { if (y[x] != undefined && l[x] != undefined) { if (A < parseInt(CONTROL.syncTime)) { y[x].bookId = ViewerManager.GetData.EPUB.ID; E.push(y[x]) } else { E.push(l[x]) } } } } } } var w = JSON.parse(CONTROL.save_target("bookmark")); w.bookmark = E; CONTROL.save_target("bookmark", JSON.stringify(w)) } if (o == "memo") { if ((p == null || p == undefined) && (f == null || f == undefined)) { return } var F = []; if (p != null && p != undefined && p.length > 0) { for (x = 0; x < p.length; x++) { var q = false; var r; if (f != null && f != undefined && f.length > 0) { for (v = 0; v < f.length; v++) { if (p[x].createdate == f[v].createdate) { q = true; r = f[v]; break } else { q = false } } if (q == true) { if (parseInt(p[x].lastdate) <= parseInt(r.lastdate)) { r.bookId = ViewerManager.GetData.EPUB.ID; F.push(r) } else { p[x].bookId = ViewerManager.GetData.EPUB.ID; F.push(p[x]) } } else { p[x].bookId = ViewerManager.GetData.EPUB.ID; F.push(p[x]) } } else { if (p[x] != undefined) { p[x].bookId = ViewerManager.GetData.EPUB.ID; F.push(p[x]) } } } } if (f.length > 0) { for (x = 0; x < f.length; x++) { if (parseInt(f[x].createdate) > parseInt(CONTROL.syncTime)) { F.push(f[x]) } } } var d = JSON.parse(CONTROL.save_target("memo")); d.memo = F; CONTROL.save_target("memo", JSON.stringify(d)) } if (o == "link") { if ((p == null || p == undefined) && (f == null || f == undefined)) { return } var e = []; if (p != null && p != undefined && p.length > 0) { for (x = 0; x < p.length; x++) { var q = false; var r; if (f != null && f != undefined && f.length > 0) { for (v = 0; v < f.length; v++) { if (p[x] != undefined && p[x].createdate == f[v].createdate) { q = true; r = f[v]; break } else { q = false } } if (q == true) { if (parseInt(p[x].lastdate) <= parseInt(r.lastdate)) { r.bookId = ViewerManager.GetData.EPUB.ID; e.push(r) } else { p[x].bookId = ViewerManager.GetData.EPUB.ID; e.push(p[x]) } } else { if (p[x] != undefined) { p[x].bookId = ViewerManager.GetData.EPUB.ID; e.push(p[x]) } } } else { if (p[x] != undefined) { p[x].bookId = ViewerManager.GetData.EPUB.ID; e.push(p[x]) } } } } if (f.length > 0) { for (x = 0; x < f.length; x++) { if (parseInt(f[x].createdate) > parseInt(CONTROL.syncTime)) { e.push(f[x]) } } } var a = JSON.parse(CONTROL.save_target("link")); a.link = e; CONTROL.save_target("link", JSON.stringify(a)) } if (o == "draw") { if ((p == null || p == undefined) && (f == null || f == undefined)) { return } var n = [], g = []; if (p != null && p != undefined && f != undefined) { if (p.length > 0) { for (x = 0; x < p.length; x++) { var m = { pageno: p[x].pageno, lastdate: p[x].lastdate, drawurl: p[x].drawurl, svg: "" }, h = false; var z = "/Sviewer/user_logdata/" + String(ViewerManager.GetData.EPUB.ID) + "/" + String(ViewerManager.userInfo.loginKey) + "/" + p[x].drawurl; $.ajax({ async: true, url: z, dataType: "xml", error: function(i, k, j) { console.log("svg load error"); h = true }, success: function(j) { if (h == false) { var i = j.childNodes[0].children == undefined ? j.childNodes[0].childNodes : j.childNodes[0].children; var k = CONTROL.draw.convertAppToWeb(i); m.svg = k; n.push(m); if (x == p.length - 1) { for (v = 0; v < n.length; v++) { if (f.length > 0) { for (t = 0; t < f.length; t++) { if (n[v].pageno == f[t].pageno) { if (parseInt(n[v].lastdate) > parseInt(f[t].lastdate)) { g.push(n[v]) } else { if (parseInt(n[v].lastdate) < parseInt(f[t].lastdate)) { g.push(f[t]) } else { g.push(f[t]) } } } } } else { g.push(n[v]) } } for (v = 0; v < g.length; v++) { for (t = 0; t < f.length; t++) { if (g[v].pageno != f[t].pageno) { if (parseInt(f[t].lastdate) > parseInt(CONTROL.syncTime)) { g.push(f[t]) } } } } var G = JSON.parse(CONTROL.save_target("draw")); G.draw = g; CONTROL.save_target("draw", JSON.stringify(G)); CONTROL.draw._refresh() } } } }) } } } else { if ((f != null || f != undefined) && (p == null && p == undefined)) { console.log("only web"); if (f.length > 0) { for (x = 0; x < f.length; x++) { n.push(f[x]) } } } else { if (p != undefined && f == undefined) { console.log("only app"); if (p.length > 0) { for (x = 0; x < p.length; x++) { var m = { pageno: p[x].pageno, lastdate: p[x].lastdate, drawurl: p[x].drawurl, svg: "" }, h = false; var z = "/Sviewer/user_logdata/" + String(ViewerManager.GetData.EPUB.ID) + "/" + String(ViewerManager.userInfo.loginKey) + "/" + p[x].drawurl; $.ajax({ async: false, url: z, dataType: "xml", error: function(i, k, j) { console.log("svg load error"); h = true }, success: function(i) { if (h == false) { var j = CONTROL.draw.convertAppToWeb(i.childNodes[0].children); m.svg = j; n.push(m); if (x == p.length - 1) { var k = JSON.parse(CONTROL.save_target("draw")); k.draw = n; CONTROL.save_target("draw", JSON.stringify(k)); CONTROL.draw._refresh() } } } }) } } } } } } } else { if (b == "up") { if (uploadCount < 4) { uploadCount++; if (uploadCount == 4) { var D = { ebookId: String(ViewerManager.GetData.EPUB.ID), userId: String(ViewerManager.userInfo.loginKey) }; $.ajax({ async: false, type: "post", url: API.syncTime(), data: D, error: function(i, k, j) { console.log("sync up error") }, success: function(k) { var j = $.xml2json(k); if (j.RESULT == "SUCCESS") { CONTROL.syncTime = j.message; console.log("SUCCESS", prevTime, CONTROL.syncTime); if (prevTime >= CONTROL.syncTime) { console.log("just up"); var i = ["bookmark", "memo", "link", "draw"]; if (getSyncData == "") { getSyncData = {} } for (x = 0; x < i.length; x++) { u = CONTROL.save_target(i[x]); c = JSON.parse(u); getSyncData[i[x]] = []; if (c[i[x]].length == 0) { getSyncData[i[x]] = [] } else { if (c[i[x]].length > 0) { for (v = 0; v < c[i[x]].length; v++) { getSyncData[i[x]].push(makeObject(i[x], c[i[x]][v])) } } } } CONTROL.save_data("mycontents", JSON.stringify(getSyncData)); uploadCount = 0; setTimeout(function() { CONTROL.save_svg_each(); sync_data("complete") }, 100) } else { console.log("remix"); mix_data("down", "bookmark"); mix_data("down", "memo"); mix_data("down", "link"); mix_data("down", "draw"); uploadCount = 0 } } } }) } } } } } function makeObject(b, c) { var a = new Object(); switch (b) { case "bookmark": a.pageno = c.pageno; a.lastdate = c.lastdate; break; case "memo": a.pageno = c.pageno; a.createdate = c.createdate; a.lastdate = c.lastdate; a.title = c.title; a.memo = c.memo; a.locx = c.locx; a.locy = c.locy; break; case "link": a.pageno = c.pageno; a.createdate = c.createdate; a.lastdate = c.lastdate; a.linkname = c.linkname; a.linkurl = c.linkurl; a.locx = c.locx; a.locy = c.locy; break; case "draw": a.pageno = c.pageno; a.lastdate = c.lastdate; a.drawurl = c.drawurl; break } return a } CONTROL.serverdata = {}; CONTROL.save_target = function(a, d) { var f; if (ViewerManager.VIEWER_TYPE == "TITAN") { if (window.sessionStorage.getItem(a) == null) { window.sessionStorage.setItem(a, e(a)) } if (CONTROL.serverdata[a] == undefined) { if (ViewerManager.VIEWER_TYPE == "TITAN" && (a == "draw" || a == "bookmark" || a == "memo" || a == "link")) { var c = String(ViewerManager.GetData.EPUB.ID) + "/" + String(ViewerManager.userInfo.loginKey); var b = { filetype: String(a), cntid: String(ViewerManager.GetData.EPUB.ID), usrid: String(ViewerManager.userInfo.loginKey) }; $.ajax({ async: false, type: "post", url: API.fileCheck(), data: b, dataType: "text", error: function(h, j, i) { console.log("error", h, j, i) }, success: function(i) { if (parseInt(i) == 1) { var h = String(ViewerManager.GetData.EPUB.ID) + "/" + String(ViewerManager.userInfo.loginKey); $.ajax({ async: false, type: "post", url: "/Sviewer/user_logdata/" + h + "/" + a + ".json", error: function(j, l, k) { console.log("error", j, l, k) }, success: function(j) { if (j.length == undefined) { CONTROL.serverdata[a] = JSON.stringify(JSON.parse('{"' + a + '" : []}')); CONTROL.save_data(a, CONTROL.serverdata[a]); window.sessionStorage.setItem(a, JSON.stringify(JSON.parse('{"' + a + '" : []}'))) } else { if (CONTROL.serverdata[a] != JSON.stringify(JSON.parse(j))) { CONTROL.serverdata[a] = JSON.stringify(JSON.parse(j)); window.sessionStorage.setItem(a, JSON.stringify(JSON.parse(j))) } } } }) } else { if (CONTROL.serverdata[a] != JSON.stringify(JSON.parse('{"' + a + '" : []}'))) { CONTROL.serverdata[a] = JSON.stringify(JSON.parse('{"' + a + '" : []}')); CONTROL.save_data(a, CONTROL.serverdata[a]) } if (window.sessionStorage.getItem(a) != JSON.stringify(JSON.parse('{"' + a + '" : []}'))) { window.sessionStorage.setItem(a, JSON.stringify(JSON.parse('{"' + a + '" : []}'))) } } } }) } } if (d == undefined) { f = window.sessionStorage.getItem(a); return f } else { if (d != CONTROL.serverdata[a]) { CONTROL.serverdata[a] = d; window.sessionStorage.setItem(a, d); if (String(location.href).match("titanbooks.co.kr") && String(ViewerManager.userInfo.loginKey).length > 0) { CONTROL.save_data(a, d) } } return } } else { var g = window.localStorage; if (g.getItem(a) == null) { g.setItem(a, e(a)) } if (d != undefined) { CONTROL.serverdata[a] = d; g.setItem(a, d); return } else { f = g.getItem(a); return f } } function e(i) { var h; switch (i) { case "draw": h = JSON.stringify({ draw: [] }); break; case "bookmark": h = JSON.stringify({ bookmark: [] }); break; case "link": h = JSON.stringify({ link: [] }); break; case "memo": h = JSON.stringify({ memo: [] }); break; case "palette": h = JSON.stringify({ palette: [] }); break } return h } }; CONTROL.deleteContents = function(a, b, c) { $("#dataDeleteTemplet").css("left", (window.innerWidth / 2 - 150) + "px"); $("#dataDeleteTemplet").fadeIn("fast", function() { $(this).find("#dataDeletePopupNoBtn").on("click", function() { $("#dataDeleteTemplet").fadeOut("fast") }); $(this).find("#dataDeletePopupYesBtn").on("click", function() { var e = JSON.parse(CONTROL.save_target(a)); if (e[a].length > 0) { for (var d = 0; d < e[a].length; d++) { if (e[a][d].lastdate == String(c)) { console.log(CONTROL.serverdata[d], e[a][d]); e[a].splice(d, 1); CONTROL.save_target(a, JSON.stringify(e)); ViewerManager.pageLoading(ViewerManager.PAGE_CURRENT_NUMBER); break } } $("#dataDeleteTemplet").fadeOut("fast") } }) }) }; CONTROL.save_data = function(a, b, e) { if (ViewerManager.VIEWER_TYPE == "TITAN") { var f = e == undefined ? ".json" : e; var d = String(ViewerManager.GetData.EPUB.ID) + "/" + String(ViewerManager.userInfo.loginKey); var c = { gettype: String(a), filetype: String(f), cntid: String(ViewerManager.GetData.EPUB.ID), usrid: String(ViewerManager.userInfo.loginKey), filedata: b }; $.ajax({ type: "post", url: API.fileSave(), data: c, error: function(g, i, h) { console.log("error", g, i, h) }, success: function(g) {} }); return CONTROL.serverdata } }; CONTROL.save_svg = function(b) { console.log("CONTROL.save_svg"); var f, e, c, g, l; var m = JSON.parse(b); var h = parseInt(ViewerManager.PAGE_CURRENT_NUMBER) == 1 ? parseInt(ViewerManager.PAGE_CURRENT_NUMBER) : parseInt(ViewerManager.PAGE_CURRENT_NUMBER) % 2 == 0 ? parseInt(ViewerManager.PAGE_CURRENT_NUMBER) : parseInt(ViewerManager.PAGE_CURRENT_NUMBER) - 1; for (f = 0; f < m.draw.length; f++) { var a = m.draw[f].pageNo == undefined ? parseInt(m.draw[f].pageNum) : parseInt(m.draw[f].pageNo); a = m.draw[f].pageno == undefined ? a : parseInt(m.draw[f].pageno); if (a == h) { imgData = CONTROL.draw.convertWebToApp(m.draw[f].svg); CONTROL.makeSVG(imgData, "svg"); break } } }; CONTROL.save_svg_each = function() { console.log("CONTROL.save_svg_each"); var f = JSON.parse(CONTROL.save_target("draw")); var d = parseInt(ViewerManager.PAGE_CURRENT_NUMBER) == 1 ? parseInt(ViewerManager.PAGE_CURRENT_NUMBER) : parseInt(ViewerManager.PAGE_CURRENT_NUMBER) % 2 == 0 ? parseInt(ViewerManager.PAGE_CURRENT_NUMBER) : parseInt(ViewerManager.PAGE_CURRENT_NUMBER) - 1; if (f.draw.length > 0) { for (var c = 0; c < f.draw.length; c++) { var e = CONTROL.draw.convertWebToApp(f.draw[c].svg); var a = f.draw[c].drawurl; CONTROL.makeSVG(e, "svg", a); if (f.draw[c].pageno == d) { var b = document.getElementById("drawingSVG"); b.innerHTML = f.draw[c].svg } } } }; CONTROL.makeSVG = function(h, c, g) { var a, e = false; if (ViewerManager.VIEWER_TYPE == "TITAN" || e == true) { var b = "", d = "", i; var f = parseInt(ViewerManager.PAGE_CURRENT_NUMBER) == 1 ? parseInt(ViewerManager.PAGE_CURRENT_NUMBER) : parseInt(ViewerManager.PAGE_CURRENT_NUMBER) % 2 == 0 ? parseInt(ViewerManager.PAGE_CURRENT_NUMBER) : parseInt(ViewerManager.PAGE_CURRENT_NUMBER) - 1; if (f < 10) { f = "000" + String(f) } else { if (f >= 10 && f < 100) { f = "00" + String(f) } else { if (f >= 100 && f < 1000) { f = "0" + String(f) } else { if (f >= 1000 && f <= 10000) { f = String(f) } } } } if (g != undefined) { f = g } f = f.replace(".svg", ""); if (c == "delete") { i = { gettype: String(f), filetype: ".svg", cntid: String(ViewerManager.GetData.EPUB.ID), usrid: String(ViewerManager.userInfo.loginKey) }; $.ajax({ type: "post", url: API.fileRemove(), data: i, error: function(j, l, k) {}, success: function(j) { console.log("success delete") } }) } else { if (c == "svg") { d = ''; d = d + h; d = d + ""; i = { gettype: String(f), filetype: ".svg", cntid: String(ViewerManager.GetData.EPUB.ID), usrid: String(ViewerManager.userInfo.loginKey), filedata: d }; $.ajax({ async: false, type: "post", url: API.fileSave(), data: i, error: function(j, l, k) { console.log("error", j, l, k) }, success: function(j) { console.log(f + ".svg make success") } }) } } } }; CONTROL.convertSVG = function(a, e) { var b, f, c; switch (a) { case "path": for (b = 0; b < e.d.length; b++) { var g; if (b == 0) { g = "M" + String(e.d[b][0]); g = g + "," + String(e.d[b][1]) } else { if (b == 1) { g = g + " Q" + String(e.d[b][0]); g = g + "," + String(e.d[b][1]) } else { g = g + " " + String(e.d[b][0]); g = g + "," + String(e.d[b][1]) } } f = g } c = '\n'; break; case "rect": c = '\n'; break } return c }; $("#btn_sync").on("click", function(a) { sync_data("up") }); CONTROL.init = function() { setInnerHTML(); CONTROL.draw._init(); CONTROL.memo._init(); }; CONTROL.loadStart = function() { CONTROL.draw._loadStart(); CONTROL.memo._loadStart(); CONTROL.responsiveUI._loadStart() }; CONTROL.loadComplete = function() { CONTROL.draw._loadComplete(); CONTROL.memo._loadComplete() }; CONTROL.save = function() { CONTROL.draw._save(); CONTROL.memo._save() }; CONTROL.resize = function() { CONTROL.draw._resize(); CONTROL.memo._resize(); CONTROL.responsiveUI._resize() }; CONTROL.refresh = function() { CONTROL.draw._refresh(); CONTROL.memo._refresh() }; CONTROL.closeUtils = function(a) { switch (a) { case "memo": CONTROL.link.linkIndex(); break; case "link": CONTROL.memo.memoIndex(); break } }; CONTROL.refreshAD = function() { var a; if (String(location.href).match("titanbooks.co.kr") && !String(location.href).match(".html")) { if (document.getElementById("div-ad-left")) { a = $("#div-ad-left")[0].innerHTML; $("#div-ad-left")[0].innerHTML = ""; $("#div-ad-left")[0].innerHTML = a; $("#img-adclose-left").css("display", "inline-block").on("click", function(b) { $("#div-ad-left").remove() }) } if (document.getElementById("div-ad-right")) { a = $("#div-ad-right")[0].innerHTML; $("#div-ad-right")[0].innerHTML = ""; $("#div-ad-right")[0].innerHTML = a; $("#img-adclose-right").css("display", "inline-block").on("click", function(b) { $("#div-ad-right").remove() }) } } }; String.prototype.getStringLength = function(b) { var d = this, g, f, e, c = ""; f = 0; e = d.length; for (var a = 0; a < e; a++) { g = d.charAt(a); f++; if (f > b - 1) { break } c += g } if (e > c.length) { c = c + "..." } return c }; String.prototype.replaceAt = function(a, b) { return this.substr(0, a) + b + this.substr(a + b.length) }; Date.prototype.yyyymmddhh24miss = function() { var f = this.getFullYear().toString(), e = (this.getMonth() + 1).toString(), a = this.getDate().toString(), b = this.getHours().toString(), c = this.getMinutes().toString(), d = this.getSeconds().toString(); return f + (e[1] ? e : "0" + e[0]) + (a[1] ? a : "0" + a[0]) + (b[1] ? b : "0" + b[0]) + (c[1] ? c : "0" + c[0]) + (d[1] ? d : "0" + d[0]) }; Number.prototype.setPoint = function(c) { var a = Math.pow(10, c); var b = this * a; b = Math.floor(b) / a; return b }; function setInnerHTML() { //if ((!CONTROL.browser.chrome && !CONTROL.browser.firefox && SVGElement.prototype.innerHTML == undefined) || CONTROL.browser.edge) { try{ if ((!CONTROL.browser.chrome && !CONTROL.browser.firefox && SVGElement.prototype.innerHTML == undefined) || CONTROL.browser.edge) { Object.defineProperty(SVGElement.prototype, "innerHTML", { get: function() { var e, b, f, d, a, c; f = document.createElement("div"); b = this.cloneNode(true); c = b.childNodes; for (d = 0, a = c.length; d < a; d++) { if (c[d].nodeType == "1") { e = c[d].cloneNode(true); f.appendChild(e) } } return f.innerHTML }, set: function(e) { var d, c, f, h, b, g, a; while (this.firstChild) { this.firstChild.parentNode.removeChild(this.firstChild) } e = "" + e + ""; d = document.createElement("div"); d.innerHTML = e; f = d.querySelector("svg#wrapper"); g = f.childNodes; a = []; for (h = 0, b = g.length; h < b; h++) { if (g[h].nodeType == "1") { c = g[h].cloneNode(true); a.push(this.appendChild(c)) } } return a }, enumerable: false, configurable: true }) } }catch(e){console.log(e);} } function new_category_open() { var a = (screen.width / 2); var c = (screen.height - 80); var b = window.open(API.treeEdit() + "?epubNum=" + ViewerManager.GetData.EPUB.ID, "new_category", "scrollbars=yes,toolbar=no,location=no,status=no,menubar=no,resizable=yes,width=" + a + ",height=" + c + ",left=0,top=0"); b.focus(); return false };