{ "version": 3, "sources": ["event.js"], "sourcesContent": ["\uFEFF//\u5168\u5C40Event\u5BF9\u8C61\r\nZCEvent = new Object;\r\nZCData = new Object;\r\nZCEvent.Blog = {};\r\n\r\nZCEvent.Confirm = function (okCallback, cancelCallback) {\r\n var confirmBox = $('#ConfirmBox');\r\n confirmBox.modal({\r\n closable: true,\r\n onDeny: function () {\r\n if (cancelCallback) { cancelCallback(); }\r\n },\r\n onApprove: function () {\r\n if (okCallback) { okCallback(); }\r\n }\r\n }).modal('show');\r\n}\r\n\r\nlet intervalId = -1;\r\nZCEvent.ConfirmCountDownAsync = async function (countDownSeconds) {\r\n var counter = countDownSeconds;\r\n const confirmBox = $('#ConfirmBox');\r\n const positiveButton = $('.positive.button', confirmBox);\r\n\r\n clearInterval(intervalId);\r\n $('.counter', positiveButton).remove();\r\n positiveButton.removeClass('disabled');\r\n\r\n positiveButton.append(` (${counter}) `);\r\n positiveButton.addClass('disabled');\r\n intervalId = setInterval(() => {\r\n if (counter > 0) {\r\n counter--;\r\n $('.counter', positiveButton).remove();\r\n positiveButton.addClass('disabled');\r\n positiveButton.append(` (${counter}) `);\r\n }\r\n if (counter === 0) {\r\n clearInterval(intervalId);\r\n $('.counter', positiveButton).remove();\r\n positiveButton.removeClass('disabled');\r\n }\r\n }, 1000);\r\n\r\n function modalResult() {\r\n return new Promise(resolve => {\r\n confirmBox.modal({\r\n closable: true,\r\n onDeny: function () {\r\n resolve(false);\r\n },\r\n onApprove: function () {\r\n resolve(true);\r\n }\r\n }).modal('show');\r\n });\r\n }\r\n\r\n const result = await modalResult();\r\n return result;\r\n}\r\n\r\nfunction showLoadingMain() {\r\n showLoading($(\"#main\"), true);\r\n}\r\n\r\nfunction loadHome() {\r\n $.ajax({\r\n type: 'GET',\r\n url: \"/home\",\r\n cache: false,\r\n dataType: 'text',\r\n beforeSend: showLoadingMain,\r\n }).done(function (d) {\r\n var mainDiv = $(\"#main\");\r\n mainDiv.html(d);\r\n\r\n $(\"#nav a\").removeClass(\"active\");\r\n $(\"#nav-home\").addClass(\"active\");\r\n });\r\n}\r\n\r\nfunction loadBlog(blogId, scroll_to_id) {\r\n $.ajax({\r\n type: 'GET',\r\n url: \"/blog\",\r\n cache: false,\r\n dataType: 'text',\r\n beforeSend: showLoadingMain,\r\n }).done(function (d) {\r\n var mainDiv = $(\"#main\");\r\n mainDiv.html(d);\r\n\r\n $(\"#nav a\").removeClass(\"active\");\r\n $(\"#nav-blog\").addClass(\"active\");\r\n\r\n //Load blog\r\n if (isNaN(blogId)) {\r\n //\u663E\u793AIndex\u9875\r\n blogFunc.LoadContent(\"/blog/0\", scroll_to_id);\r\n }\r\n else {\r\n blogFunc.LoadContent(\"/blog/\" + blogId, scroll_to_id); // \u52A0\u8F7D\u5BF9\u5E94\u535A\u5BA2\u7684\u5185\u5BB9\r\n if (blogId > 10) { // \u5C55\u5F00\u5206\u7C7B\u6811\u5230\u8BE5\u535A\u5BA2\u7684Entry\u5904(\u82E5\u975E\u7279\u6B8A\u9875\uFF0CID\u5C0F\u4E8E10\u7684blog)\r\n ExpandTreeToEntry(blogId);\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction loadShop() {\r\n $.ajax({\r\n type: 'GET',\r\n url: \"/shop\",\r\n cache: false,\r\n dataType: 'text',\r\n beforeSend: showLoadingMain,\r\n }).done(function (d) {\r\n var mainDiv = $(\"#main\");\r\n mainDiv.html(d);\r\n\r\n $(\"#nav a\").removeClass(\"active\");\r\n $(\"#nav-shop\").addClass(\"active\");\r\n });\r\n}\r\n\r\nfunction loadProject(projectName, scroll_to_id, postLoadCallback) {\r\n $.ajax({\r\n type: 'GET',\r\n url: \"/project/\" + projectName,\r\n cache: false,\r\n dataType: 'text',\r\n beforeSend: showLoadingMain,\r\n }).done(function (d) {\r\n var mainDiv = $(\"#main\");\r\n mainDiv.html(d);\r\n\r\n $(\"#nav a\").removeClass(\"active\");\r\n $(mainDiv).ready(function () {\r\n if (scroll_to_id) {\r\n document.getElementById(scroll_to_id)?.scrollIntoView();\r\n }\r\n if (postLoadCallback) {\r\n postLoadCallback();\r\n }\r\n });\r\n });\r\n}\r\n\r\nfunction loadAbout() {\r\n $.ajax({\r\n type: 'GET',\r\n url: \"/about\",\r\n cache: false,\r\n dataType: 'text',\r\n beforeSend: showLoadingMain,\r\n }).done(function (d) {\r\n var mainDiv = $(\"#main\");\r\n mainDiv.html(d);\r\n\r\n $(\"#nav a\").removeClass(\"active\");\r\n $(\"#nav-about\").addClass(\"active\");\r\n });\r\n}\r\n\r\nfunction loadAdmin() {\r\n $.ajax({\r\n type: 'GET',\r\n url: \"/Admin\",\r\n cache: false,\r\n dataType: 'text',\r\n beforeSend: showLoadingMain,\r\n }).done(function (d) {\r\n var mainDiv = $(\"#main\");\r\n mainDiv.html(d);\r\n\r\n $(\"#nav a\").removeClass(\"active\");\r\n\r\n\r\n });\r\n}\r\n\r\n//\u4F7F\u201C\u56DE\u5230\u9876\u90E8\u201D\u6309\u94AE\u751F\u6548\r\n(function () {\r\n var InitEvent_InitBackToTop = function () {\r\n //\u5F53\u70B9\u51FB\u8DF3\u8F6C\u94FE\u63A5\u540E\uFF0C\u56DE\u5230\u9875\u9762\u9876\u90E8\u4F4D\u7F6E\r\n $(\"#back-to-top\").click(function (e) {\r\n e.preventDefault();\r\n $(\"html, body\").animate({ scrollTop: 0 }, 100);\r\n });\r\n };\r\n ZCEvent.InitBackToTop = InitEvent_InitBackToTop;\r\n}());\r\n\r\nZCBlogEvent = new Object;\r\n\r\nZCBlogEvent.UniqueURL = new Object;\r\nZCBlogEvent.Catalog = new Object;\r\n\r\n\r\n//\u4F2A\u94FE\u63A5\u6EDA\u52A8\u5230#ID\u4F4D\u7F6E\u529F\u80FD\r\n(function () {\r\n var InitEvent_ScrollTo = function (id) {\r\n if (id == null || id.charAt(0) !== '#') {\r\n console.log(\"Error: Scroll target is invalid!\");\r\n return false;\r\n }\r\n id = id.replace(/(:|\\.|\\[|\\]|,)/g, \"\\\\$1\");//\u8F6C\u4E49\u7279\u6B8A\u5B57\u7B26\r\n\r\n $('html, body').animate({\r\n scrollTop: $(id).offset().top - $(\"#Header\").height() - $(id).height()\r\n }, 100);\r\n return true;\r\n };\r\n ZCBlogEvent.ScorllTo = InitEvent_ScrollTo;\r\n}());\r\n\r\njQuery.extend(jQuery.expr[':'], {\r\n inview: function (elem) {\r\n var t = $(elem);\r\n var offset = t.offset();\r\n var win = $(window);\r\n var winST = win.scrollTop();\r\n var elHeight = t.outerHeight(true);\r\n\r\n if (offset.top > winST - elHeight && offset.top < winST + elHeight + win.height()) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n});\r\n\r\nZCData.LoadedCss = new Array;\r\n//\u5224\u65AD\u662F\u5426\u662F\u5DF2\u7ECF\u52A8\u6001\u52A0\u8F7D\u7684CSS\r\n(function () {\r\n function in_array(array, value) {\r\n for (var i = 0; i < array.length; i++) {\r\n return (array[i][0] === value)\r\n }\r\n return false;\r\n }\r\n var _IsLoadedCss = function (filename) {\r\n var result = in_array(ZCData.LoadedCss, filename);\r\n return result;\r\n };\r\n ZCData.IsLoadedCss = _IsLoadedCss;\r\n}());\r\n\r\n//\u52A8\u6001\u52A0\u8F7DCSS\r\n(function () {\r\n function loadCSS(filename) {\r\n var file = document.createElement(\"link\");\r\n file.setAttribute(\"rel\", \"stylesheet\");\r\n file.setAttribute(\"type\", \"text/css\");\r\n file.setAttribute(\"href\", filename);\r\n if (typeof file !== \"undefined\")\r\n document.head.appendChild(file);\r\n return true;\r\n }\r\n var _LoadCss = function (filename) {\r\n if (ZCData.IsLoadedCss(filename)) {\r\n return true;\r\n }\r\n var result = loadCSS(filename);\r\n if (result) {\r\n ZCData.LoadedCss.push(filename);\r\n }\r\n return result;\r\n };\r\n ZCData.LoadCss = _LoadCss;\r\n}());\r\n\r\n\r\n//\u767B\u5F55\u76F8\u5173\r\n(function () {\r\n\r\n function requestCreateAccount(pendingCallback, doneCallback) {\r\n const form = $('#form-register');\r\n $.ajax({\r\n type: 'POST',\r\n url: `/v1/account/create`,\r\n cache: false,\r\n data: form.serialize(),\r\n beforeSend: function () {\r\n pendingCallback?.();\r\n }\r\n }).done(function (result) {\r\n doneCallback?.(result);\r\n }).catch(function (error) {\r\n ZCEvent.ShowFullscreenMsgBox(error.status, error.responseText);\r\n });\r\n }\r\n\r\n function requestLogin(pendingCallback, doneCallback) {\r\n var frm = $('#form-login');\r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/v1/account/login\",\r\n data: frm.serialize(),\r\n beforeSend: function () {\r\n pendingCallback?.();\r\n },\r\n success: function (result) {\r\n doneCallback?.(result);\r\n },\r\n error: function (error) {\r\n ZCEvent.ShowFullscreenMsgBox(error.status, error.responseText);\r\n }\r\n });\r\n }\r\n\r\n function showLoginBox() {\r\n const loginResult = $('.LoginResult');\r\n ZCEvent.ClearAndHideMessage(loginResult);\r\n $(\"#LoginBox\").modal({\r\n onDeny: function () {\r\n return true;\r\n },\r\n onApprove: function () {\r\n requestLogin(\r\n () => ZCEvent.SetMessage(loginResult, 'loading', '', ZCText.LoggingIn),\r\n (result) => {\r\n if (result.Success) {\r\n ZCEvent.SetMessage(loginResult, 'positive', ZCText.LoginSucceeded, result.Description);\r\n if (result.Username === 'cloud') {\r\n ZCEvent.LoadMain(\"#admin\");\r\n $(\"#LoginBox\").modal('hide');\r\n } else {\r\n loadLoginUserFromServer();\r\n setTimeout(function () {\r\n ZCEvent.LoadUserPortal();\r\n $(\"#LoginBox\").modal('hide');\r\n }, 500);\r\n }\r\n } else {\r\n ZCEvent.SetMessage(loginResult, 'error', ZCText.LoginFailed, result.Description);\r\n }\r\n });\r\n return false;\r\n }\r\n })\r\n .modal('setting', 'closable', false)\r\n .modal('show');\r\n }\r\n\r\n function setLoginStateForClient(state) {\r\n $('.LoginNavDropdown').dropdown({ action: 'hide' });\r\n if (state) {\r\n $('.AccountNavButton').hide();\r\n $('.LoginNavDropdown').show();\r\n } else {\r\n Cookies.remove(\"zwcloud_net_0\");\r\n $('.AccountNavButton').show();\r\n $('.LoginNavDropdown').hide();\r\n ZCEvent.LoadMain();//load index page\r\n }\r\n }\r\n\r\n function loadLoginUserFromServer() {\r\n $.ajax({\r\n type: 'GET',\r\n url: \"/v1/account/get_login_user\",\r\n cache: false,\r\n dataType: 'json'\r\n }).done(function (data) {\r\n if (data != null) {\r\n $(\"[data-id='nav-username']\").text(data.Name);\r\n $(\"[data-id='nav-email']\").text(data.Email);\r\n setLoginStateForClient(true);\r\n } else {\r\n $(\"[data-id='nav-username']\").text(' ');\r\n $(\"[data-id='nav-email']\").text(' ');\r\n setLoginStateForClient(false);\r\n }\r\n }).catch(function (error) {\r\n ZCEvent.ShowFullscreenMsgBox(error.status, error.responseText);\r\n //user might have logout from another browser tab\r\n setLoginStateForClient(false);\r\n });\r\n }\r\n\r\n function requestLogout() {\r\n $.ajax({\r\n type: \"GET\",\r\n url: \"/v1/account/logout\",\r\n dataType: 'json',\r\n success: function (data) {\r\n if (data.Success) {\r\n setLoginStateForClient(false);\r\n }\r\n },\r\n error: function (data) {\r\n console.log(data);\r\n }\r\n });\r\n }\r\n\r\n function logoutInClient() {\r\n setLoginStateForClient(false);\r\n }\r\n\r\n ZCEvent.InitLogin = function () {\r\n {\r\n const loginCookie = Cookies.get(\"zwcloud_net_0\");\r\n if (loginCookie != null) {\r\n loadLoginUserFromServer();\r\n }\r\n }\r\n\r\n $('.CreateAccountNavButton').click(function () {\r\n const createAccountBox = $('#CreateAccountBox');\r\n const createAccountResult = $('.CreateAccountResult');\r\n ZCEvent.ClearAndHideMessage(createAccountResult);\r\n createAccountBox.modal({\r\n closable: true,\r\n onDeny: function () {\r\n return true;\r\n },\r\n onApprove: function () {\r\n requestCreateAccount(\r\n () => ZCEvent.SetMessage(createAccountResult, 'loading', '', ZCText.CreatingAccount),\r\n (result) => {\r\n if (result.Success) {\r\n ZCEvent.SetMessage(createAccountResult, 'positive', ZCText.CreateAccountSuccess, result.Description);\r\n setTimeout(() => showLoginBox(), 1000);\r\n } else {\r\n ZCEvent.SetMessage(createAccountResult, 'error', ZCText.CreateAccountFailed, result.Description);\r\n }\r\n }\r\n );\r\n return false;\r\n }\r\n }).modal('show');\r\n });\r\n\r\n $('.LoginNavButton').click(function () {\r\n const cookieAccepted = Cookies.get('accepts-cookies');\r\n if (cookieAccepted == null) {\r\n $('#main').toast({ message: ZCText.NeedToAcceptCookieToLogin });\r\n $('#cookieNag').nag('show');\r\n return;\r\n }\r\n\r\n const loginCookie = Cookies.get(\"zwcloud_net_0\");\r\n if (loginCookie == null) {\r\n //user not login yet, show login box\r\n showLoginBox();\r\n } else {\r\n loadLoginUserFromServer();\r\n }\r\n });\r\n $('.LogoutButton').click(function () {\r\n var confirmBox = $('#LogoutConfirmBox');\r\n confirmBox.modal({\r\n closable: true,\r\n onDeny: function () {\r\n },\r\n onApprove: function () {\r\n requestLogout();\r\n }\r\n }).modal('show');\r\n });\r\n }\r\n\r\n ZCEvent.LogoutInClient = logoutInClient;\r\n}());\r\n\r\n//\u7528\u6237\u76F8\u5173\r\n(function () {\r\n\r\n function loadUserPortal() {\r\n $.ajax({\r\n type: 'GET',\r\n url: \"/user/portal\",\r\n cache: false,\r\n dataType: 'text',\r\n beforeSend: showLoadingMain,\r\n }).done(function (d) {\r\n var mainDiv = $(\"#main\");\r\n mainDiv.html(d);\r\n $(\"#nav a\").removeClass(\"active\");\r\n });\r\n }\r\n\r\n function sendDeactivateMachineRequestToServer(machineId, productId) {\r\n $.ajax({\r\n type: 'GET',\r\n url: `/v1/user/deactivate_machine?machineId=${machineId}&productId=${productId}`,\r\n cache: false,\r\n dataType: 'json'\r\n }).done(function (result) {\r\n if (result.Success) {\r\n ZCEvent.MsgBox(ZCText.Message, result.Description);\r\n } else {\r\n ZCEvent.MsgBox(ZCText.Error, result.Description);\r\n }\r\n }).catch(function (error) {\r\n if (error.status === 401) {\r\n ZCEvent.LogoutInClient();\r\n return;\r\n }\r\n ZCEvent.ShowFullscreenMsgBox(error.status, error.responseText);\r\n });\r\n }\r\n\r\n const dataMachineIdAttributeName = 'machine-id';\r\n\r\n function createMachineView(machine) {\r\n const iconColor = machine.IsLive ? \"green\" : \"red\";\r\n const liveStateDesc = machine.IsLive ? ZCText.MachineIsReadyForRemoteDeactivation : ZCText.MachineIsNotReadyForRemoteDeactivation;\r\n return `\r\n
${JSON.stringify(data, null, 2)}`;\r\n rowContentContainer.html(s);\r\n rowContentContainer.find('.deactivate-button').click(function () {\r\n let machineId = $(this).data(dataMachineIdAttributeName);\r\n sendDeactivateMachineRequestToServer(machineId, productId);\r\n });\r\n }\r\n nextRow.show();\r\n }).catch(function (error) {\r\n if (error.status === 401) {\r\n ZCEvent.LogoutInClient();\r\n return;\r\n }\r\n rowContentContainer.html(`