source: tmcsimulator/trunk/webapps/js/cmsLayer.js @ 327

Revision 327, 8.7 KB checked in by jdalbey, 7 years ago (diff)

Add HAR layer.

Line 
1function initCMSbutton()
2{
3    var cmsBtnDiv = document.getElementById('cmsButton');
4    map.controls[google.maps.ControlPosition.LEFT_BOTTOM].push(cmsBtnDiv)
5    cmsBtnDiv.title = 'Click to toggle cms view';
6    // Setup the click event listeners to toggle icon display
7    cmsBtnDiv.addEventListener('click', function()
8    {
9        cms_showing = !cms_showing;
10        // Determine which button image to show
11        if (cms_showing)
12        {
13            pic = "images/btnDepressed_CMS.png"
14            // It's nice when icons become visible that the messages have been refreshed.
15            loadAllcmsMessages();
16        }
17        else
18        {
19            pic = "images/btnReady_CMS.png"
20        }
21        document.getElementById('cmsBtnImg').src = pic;
22        // reveal or hide all the icons
23        cmsLayer.forEach(function(feature)
24        {
25            cmsLayer.overrideStyle(feature,
26            {
27                visible: cms_showing
28            });
29        });
30    });
31}
32function loadCMSlayer()
33{
34    cmsLayer = new google.maps.Data();
35    cmsLayer.setMap(map);
36    cmsLayer.loadGeoJson(kCMSfile); 
37    cmsLayer.setStyle(function(feature)
38    {
39        // return the StyleOptions
40        return {
41            icon: yellowFlag,
42            title: feature.getId()+ " " +feature.getProperty("location")+ " " 
43                    + feature.getProperty("street"),
44            visible: false
45        };
46    });
47   
48    cmsLayer.addListener('click', function(event)
49    {
50        var dialog = document.getElementById('cms-dialog');
51        // Note: If the dialog is already being displayed when someone else
52        // updates the message, it won't be reflected in the dialog, until
53        // you close and reopen it.
54        dialog.style.display = 'block';
55        cmsID = event.feature.getId();
56        // Assign to the hidden field
57        document.getElementById('cmsID').value = cmsID;
58        showMessage(cmsID); // note: this is async
59        document.getElementById('cms-info-label').innerHTML = "CMS ID: " +
60            cmsID + "   LOCATION: " + event.feature.getProperty("location");
61        // clear input fields
62        document.getElementById('msgcontent1').value = "";
63        document.getElementById('msgcontent2').value = "";
64        document.getElementById('msgcontent3').value = "";
65        document.getElementById('msgcontent4').value = "";
66        document.getElementById('msgcontent5').value = "";
67        document.getElementById('msgcontent6').value = "";
68        document.getElementById('msgcontent1').focus();
69        var span = document.getElementById("cms-close");
70            // When the user clicks on <span> (x), close the modal
71        span.onclick = function()
72        {
73            handleDialogClose('cms-dialog');
74        }
75    });
76}
77
78    // Center justify message text in a 16 column field
79    function justifyCMStext(message)
80    {
81        // don't bother justifying a blank message
82        if (message.length == 0) return message;   
83        // determine how much padding is needed
84        var kBlanks = "                ";
85        var padLen = (16 - message.length) / 2;
86        // apply the padding
87        var padding = kBlanks.substring(0, padLen);
88        return padding + message;
89    }
90
91    function handleCMSsubmit()
92    {
93        // recover the user's response
94        var response1 = justifyCMStext(document.getElementById('msgcontent1').value.trim());
95        var response2 = justifyCMStext(document.getElementById('msgcontent2').value.trim());
96        var response3 = justifyCMStext(document.getElementById('msgcontent3').value.trim());
97        var response4 = justifyCMStext(document.getElementById('msgcontent4').value.trim());
98        var response5 = justifyCMStext(document.getElementById('msgcontent5').value.trim());
99        var response6 = justifyCMStext(document.getElementById('msgcontent6').value.trim());
100        var newMsg = response1 + response2 + response3 + response4 + response5 + response6;
101        if (newMsg.length == 0)
102        {
103            alert("Nothing to Send ... input fields are empty.");
104        }
105        else
106        {
107            document.getElementById('msgdisplay1').value = response1;
108            document.getElementById('msgdisplay2').value = response2;
109            document.getElementById('msgdisplay3').value = response3;
110            document.getElementById('msgdisplay4').value = response4;
111            document.getElementById('msgdisplay5').value = response5;
112            document.getElementById('msgdisplay6').value = response6;
113            saveMessage(response1 + "|" + response2 + "|" + response3 + "|" +
114                        response4 + "|" + response5 + "|" + response6);
115        }
116    }
117
118    function handleCMSclear()
119    {
120        document.getElementById('msgdisplay1').value = "";
121        document.getElementById('msgdisplay2').value = "";
122        document.getElementById('msgdisplay3').value = "";
123        document.getElementById('msgdisplay4').value = "";
124        document.getElementById('msgdisplay5').value = "";
125        document.getElementById('msgdisplay6').value = "";
126        saveMessage("|||||");
127    }
128
129    // Save an updated cms message to the file
130    function saveMessage(outMessage)
131    {
132        // Fetch cmsID from hidden field where it was put when dialog opened.
133        var cmsID = document.getElementById('cmsID').value;
134        //console.log("Saving " + outMessage + " for cmsID " + cmsID)
135        msgParts = outMessage.split("|");
136        messageDict[cmsID].cms.message.phase1.Line1 = msgParts[0];
137        messageDict[cmsID].cms.message.phase1.Line2 = msgParts[1];
138        messageDict[cmsID].cms.message.phase1.Line3 = msgParts[2];
139        messageDict[cmsID].cms.message.phase2.Line1 = msgParts[3];
140        messageDict[cmsID].cms.message.phase2.Line2 = msgParts[4];
141        messageDict[cmsID].cms.message.phase2.Line3 = msgParts[5];
142        // Set icon to reflect message state
143        if (outMessage == "|||||")
144        {
145            currentIcon = {icon: yellowFlag};
146        }
147        else
148        {
149            currentIcon = {icon: blueFlag};
150        }
151        cmsLayer.overrideStyle(cmsLayer.getFeatureById(cmsID), currentIcon)
152        // break the json string into lines for readability
153        jsonstring = JSON.stringify(Object.values(messageDict)); //,null,4);
154        outString = "{\"data\":" + jsonstring + "}";
155
156        var xhttp = new XMLHttpRequest();
157        xhttp.open("GET", "cgi-bin/saveCMSmessage.py?msg=" + outString, true);
158        xhttp.send();
159        // Using POST might be a better idea ... haven't tried this yet
160        //      var xhr = new XMLHttpRequest();
161        //      xhr.open("POST", "/cgi-bin/saveMessage.py?", true);
162        //      xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
163        // send the collected data as JSON
164        //      xhr.send(JSON.stringify(messageList));
165    }
166
167    // retrieve the current cms message file
168    function showMessage(cmsID)
169    {
170        loadAllcmsMessages();  // because someone else may have made a recent update
171        // lookup the message for this cms ID
172        var message = messageDict[cmsID].cms.message;
173        // show the message in the display
174        document.getElementById('msgdisplay1').value = message.phase1.Line1;
175        document.getElementById('msgdisplay2').value = message.phase1.Line2;
176        document.getElementById('msgdisplay3').value = message.phase1.Line3;
177        document.getElementById('msgdisplay4').value = message.phase2.Line1;
178        document.getElementById('msgdisplay5').value = message.phase2.Line2;
179        document.getElementById('msgdisplay6').value = message.phase2.Line3;
180    }
181    function loadAllcmsMessages()
182    {
183        loadJSON("cms_messages.json", function(response)
184        {
185            // Parse JSON string into object
186            messagejson = JSON.parse(response);
187            // Add each message to a lookup dictionary
188            for (var i = 0; i < messagejson.data.length; i++)
189            {
190                var item = messagejson.data[i];
191                messageDict[item.cms.index] = item;
192                // Set the appropriate icon on the cms icon
193                // set a yellow flag if there's currently no message
194                if (item.cms.message.phase1.Line1 + 
195                    item.cms.message.phase1.Line2 +
196                    item.cms.message.phase1.Line3 +
197                    item.cms.message.phase2.Line1 + 
198                    item.cms.message.phase2.Line2 +
199                    item.cms.message.phase2.Line3 == "")
200                {
201                    cmsLayer.overrideStyle(cmsLayer.getFeatureById(item.cms.index), {icon: yellowFlag})
202                }
203                else
204                {
205                    cmsLayer.overrideStyle(cmsLayer.getFeatureById(item.cms.index), {icon: blueFlag})
206                }
207            }
208        });
209    }
210
211
Note: See TracBrowser for help on using the repository browser.