OSDN Git Service

Changed strncpy to strlcpy
authorwatanaby <watanaby@users.sorceforge.net>
Mon, 29 Sep 2014 02:29:26 +0000 (11:29 +0900)
committerwatanaby <watanaby@users.sorceforge.net>
Mon, 29 Sep 2014 02:29:26 +0000 (11:29 +0900)
html/showlog.js [new file with mode: 0644]

diff --git a/html/showlog.js b/html/showlog.js
new file mode 100644 (file)
index 0000000..e95836c
--- /dev/null
@@ -0,0 +1,313 @@
+// Program to show opengatem usage log in web page\r
+//  Programmed by Yoshiaki Watanabe, 2013\r
+//  Revised by Minoru Kishira, 2013\r
+//\r
+// canvas.js by Satoru Takabayashi is used partially.\r
+//  http://0xcc.net/blog/archives/canvas.js\r
+//\r
+// You can redistribute it and/or modify it under the terms of \r
+// the GNU General Public License version 2.\r
+//\r
+\r
+// variables\r
+var nTime=24; // time division per day\r
+var beginTime;\r
+var endTime;\r
+var cellWidth="20px";\r
+var cellHeight="8px";\r
+var deviceList=[]; // devices used\r
+\r
+var colorList={0:"LimeGreen", 1:"Orange", 2:"SkyBlue", 3:"Tan", 4:"Thistle",\r
+        "none":"WhiteSmoke", "sunday":"Pink","saturday":"LightBlue", "blank":"white", "popup":"yellow"};\r
+var weekString = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");\r
+var today = new Date();\r
+var weekday;\r
+var monthday;\r
+\r
+////////////////////////////\r
+// make handler of mouseover\r
+function onmouseoverHandler(element, logItemNo) {\r
+\r
+    // save local values\r
+    var day=monthday;\r
+    var week=weekday;\r
+\r
+    // return the mandler \r
+    return function(e) {\r
+    \r
+    // if log item is found, show the item as popup\r
+    if(logItemNo[0]>=0){\r
+\r
+               // popup style\r
+               popup.style.position = "fixed"; \r
+               popup.style.left = e.clientX+20; \r
+               popup.style.top  = e.clientY+10; \r
+               popup.style.background = colorList["popup"]; \r
+               popup.style.display = "block";\r
+\r
+               // popup string\r
+               popup.innerHTML=loglist[logItemNo[0]].device +" ["+loglist[logItemNo[0]].macAddress+"]<BR>";\r
+               for(var i=0; i<logItemNo.length; i++){\r
+                       popup.innerHTML+="Used at "+ loglist[logItemNo[i]].gateway+"<BR>"\r
+                               +"( "+loglist[logItemNo[i]].openTime+" -> "+loglist[logItemNo[i]].closeTime+" )<BR>";\r
+                       }\r
+        }\r
+    }\r
+}\r
+\r
+////////////////////////////\r
+// make handler of mouseout\r
+function onmouseoutHandler(element) {\r
+\r
+    // off the display\r
+    return function() {\r
+        popup.style.display = "none";\r
+    }\r
+}\r
+\r
+////////////////////////////\r
+// make cells to show every date-time range\r
+function makeCells() {\r
+\r
+    // make html table\r
+    var table = document.createElement("table");\r
+    var tbody = document.createElement("tbody");\r
+    table.border ="2px #808080 solid";\r
+\r
+    // grouping columns (title, 0-5, 6-11, 12-17, 18-23 hours)\r
+    table.rules ="groups";\r
+    cgroup0=document.createElement("colgroup"); cgroup0.span=1; table.appendChild(cgroup0);\r
+    cgroup1=document.createElement("colgroup"); cgroup1.span=6; table.appendChild(cgroup1);\r
+    cgroup2=document.createElement("colgroup"); cgroup2.span=6; table.appendChild(cgroup2);\r
+    cgroup3=document.createElement("colgroup"); cgroup3.span=6; table.appendChild(cgroup3);\r
+    cgroup4=document.createElement("colgroup"); cgroup4.span=6; table.appendChild(cgroup4);\r
+\r
+    // add header to display the hours\r
+    tbody.appendChild(makeHeaderRow());\r
+\r
+    // make row for each day and each device \r
+       var nDate=loglist["info"].dateCount;\r
+       var nDevice=deviceList.length;\r
+    for (var date = 0; date < nDate; date++) {\r
+        for(var iDevice = 0; iDevice < nDevice+1; iDevice++){\r
+            var tr = document.createElement("tr");\r
+\r
+            // make leftmost title column spanning 6 rows\r
+            if(iDevice==0) tr.appendChild(makeHeaderColumn(date));\r
+\r
+            // make column representing 0 hour to 23 hour\r
+            for (var time = 0; time < nTime; time++) {\r
+                var td = document.createElement("td");\r
+                setupCellProperties(td, date, time, iDevice);\r
+                if(iDevice==nDevice) td.style.background=colorList["blank"];\r
+                tr.appendChild(td);\r
+            }\r
+\r
+            tbody.appendChild(tr);\r
+        }\r
+    }\r
+    table.appendChild(tbody);\r
+    return table;\r
+}\r
+\r
+////////////////////////////\r
+// make the top title row to display hours\r
+function makeHeaderRow(){\r
+    var tr = document.createElement("tr");\r
+    var td = document.createElement("td");\r
+    tr.appendChild(td);\r
+    for (var time = 0; time < nTime; time++) {\r
+        var td = document.createElement("td");\r
+        var text = document.createTextNode(time);\r
+        td.appendChild(text);\r
+        tr.appendChild(td);\r
+    }\r
+    return tr;\r
+}\r
+\r
+////////////////////////////\r
+// make the leftmost title comumn spanning to all devices row\r
+function makeHeaderColumn(date){\r
+    var td = document.createElement("td");\r
+       var nDevice=deviceList.length;\r
+\r
+    td.rowSpan=nDevice+1;\r
+    dateStr=getRealDate(date);\r
+    var text = document.createTextNode(dateStr);\r
+    td.appendChild(text);\r
+    if(dateStr.indexOf(weekString[0])!=-1)\r
+        td.style.background=colorList["sunday"];\r
+    else if(dateStr.indexOf(weekString[6])!=-1)\r
+        td.style.background=colorList["saturday"];\r
+    return td;\r
+}\r
+\r
+////////////////////////////\r
+// get the real date string from date number(0 means begin date)\r
+function getRealDate(date){\r
+    var beginTime=new Date(loglist["info"].beginTime.replace(/-/g, "/"));\r
+    var y=beginTime.getFullYear();\r
+    var m=beginTime.getMonth();\r
+    var d=beginTime.getDate();\r
+    var realDate = new Date(y, m, d+date);\r
+    return (realDate.getMonth()+1)+"/"+realDate.getDate()+" "+ weekString[realDate.getDay()];\r
+}\r
+\r
+////////////////////////////\r
+// setup cell properties\r
+function setupCellProperties(td, date, time, iDevice){\r
+\r
+    td.width=cellWidth; td.height=cellHeight;\r
+\r
+    // search log for the time range;\r
+       var logItemNo = searchLog(date, time, iDevice);\r
+\r
+    td.onmouseover = onmouseoverHandler(td, logItemNo);\r
+    td.onmouseout = onmouseoutHandler(td);\r
\r
+       //set background color of the cell\r
+       //if two or more items are found, display red border\r
+       if(logItemNo.length > 1){\r
+               td.style.background=colorList[iDevice];\r
+               td.style.border="3px solid Red";\r
+       }\r
+       // one item is found (if the item number == -1, no log is matched)\r
+       else if(logItemNo.length == 1){\r
+               if(logItemNo[0] == -1)  td.style.background=colorList["none"];\r
+               else td.style.background=colorList[iDevice];\r
+       }\r
+       // no item\r
+       else td.style.background=colorList["blank"];\r
+}\r
+\r
+////////////////////////////\r
+// search the usage log corresponding to to the time range and the device number\r
+function searchLog(date, hour, iDevice){\r
+\r
+    var y=beginTime.getFullYear();\r
+    var m=beginTime.getMonth();\r
+    var d=beginTime.getDate();\r
+\r
+    var timeRangeBegin = new Date(y, m, d+date, hour);\r
+    var timeRangeEnd = new Date(y, m, d+date, hour+1);\r
+\r
+    // omit the range before beginTime or after endTime\r
+    if(timeRangeEnd < beginTime || endTime < timeRangeBegin) return -2;\r
+\r
+    // make the week number and month/date string\r
+    weekday=timeRangeBegin.getDay();\r
+    monthday=timeRangeBegin.getFullYear()+"/"+(timeRangeBegin.getMonth()+1)+"/"+timeRangeBegin.getDate();\r
+\r
+    // search the device in loglist \r
+    var logItemNoArray = new Array();\r
+    \r
+    nList=loglist["info"].listCount;\r
+    for (var i=0; i<nList; i++){\r
+        if(deviceList[iDevice] == loglist[i].device){\r
+\r
+            // loglist includes '2000-10-10 00:00:00' but Date() reads '2000/10/10 00:00:00'\r
+            var openTime = new Date(loglist[i].openTime.replace(/-/g, "/"));\r
+            var closeTime = new Date(loglist[i].closeTime.replace(/-/g, "/"));\r
+\r
+            // if the device is used in the time range, return the log item number\r
+            // second line check the device not closed yet\r
+            if(timeRangeBegin < closeTime && openTime < timeRangeEnd) logItemNoArray.push(i);\r
+            \r
+            if(loglist[i].closeTime=="0000-00-00 00:00:00" && openTime < timeRangeEnd) logItemNoArray.push(i);\r
+        }\r
+    }\r
+\r
+    // cannot found\r
+    if(logItemNoArray.length==0) logItemNoArray.push(-1);\r
+    return logItemNoArray;\r
+}\r
+\r
+////////////////////////////\r
+// make table for the legend of devices\r
+function makeDevicesLegend() {\r
+\r
+    var table = document.createElement("table");\r
+    table.border ="2px #808080 solid";\r
+    var tbody = document.createElement("tbody");\r
+       var nDevice=deviceList.length;\r
+\r
+    if(nDevice>0){\r
+        for (var iDevice = 0; iDevice<nDevice; iDevice++) {\r
+            var tr = document.createElement("tr");\r
+            var td = document.createElement("td");\r
+            td.innerHTML=deviceList[iDevice];\r
+            tr.appendChild(td);\r
+            var td = document.createElement("td");\r
+            td.width=50;\r
+            td.style.background=colorList[iDevice];\r
+            tr.appendChild(td);\r
+            tbody.appendChild(tr);\r
+        }\r
+    }else{\r
+        var tr = document.createElement("tr");\r
+        var td = document.createElement("td");\r
+        td.innerHTML="No device is used in this period";\r
+        tr.appendChild(td);\r
+        tbody.appendChild(tr);\r
+    }\r
+\r
+    table.appendChild(tbody);\r
+    return table;\r
+}\r
+\r
+////////////////////////////\r
+// get the device names in loglist\r
+function getDeviceList(){\r
+\r
+    var nList=loglist["info"].listCount;\r
+    var deviceList = new Array();\r
+    for (var i=0; i<nList; i++){\r
+        logItem=loglist[i];\r
+        if(deviceList.indexOf(logItem.device)==-1){\r
+            deviceList.push(logItem.device);\r
+        }\r
+    }\r
+       return deviceList;\r
+}\r
+\r
+// make canvas to display usage log\r
+function makeCanvas() {\r
+    var canvas = document.getElementById("usagelog");\r
+    if (canvas) {\r
+        var cell = makeCells();\r
+        canvas.appendChild(cell);\r
+        var devicesLegend = makeDevicesLegend();\r
+        canvas.appendChild(devicesLegend);\r
+    }\r
+}\r
+\r
+////////////////////////////\r
+// set up event listner\r
+function addOnLoadEvent(func) {\r
+  if (window.addEventListener) {\r
+    window.addEventListener("load", func, false);\r
+  } else if (window.attachEvent) {  // for IE\r
+    window.attachEvent("onload", func);\r
+  } else  {\r
+    window.onload = func;\r
+  }\r
+}\r
+\r
+////////////////////////////\r
+// initialize\r
+function init(){\r
+\r
+    // get loglist info\r
+    beginTime=new Date(loglist["info"].beginTime.replace(/-/g, "/"));\r
+    endTime=new Date(loglist["info"].endTime.replace(/-/g, "/"));\r
+    // get device names in loglist\r
+    deviceList=getDeviceList();\r
+\r
+       // set up onLoad event listner\r
+       addOnLoadEvent(makeCanvas);\r
+}\r
+\r
+////////////////////////////\r
+// startup from here\r
+init();\r
+\r