Warning: Can't use blame annotator:
svn blame failed on trunk/webapps/js/cmsLayer.js: ("Can't find a temporary directory: Internal error", 20014)

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

Revision 326, 7.0 KB checked in by jdalbey, 7 years ago (diff)

cptms v0.6.3 decomposed into modules

RevLine 
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            loadAllMessages();
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('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('msgcontent1').focus();
66        var span = document.getElementsByClassName("close")[0]
67            // When the user clicks on <span> (x), close the modal
68        span.onclick = function()
69        {
70            handleDialogClose();
71        }
72    });
73}
74
75    // Center justify message text in a 16 column field
76    function justifyCMStext(message)
77    {
78        var kBlanks = "                ";
79        var padLen = (16 - message.length) / 2;
80        var padding = kBlanks.substring(0, padLen);
81        return padding + message;
82    }
83
84    function handleCMSsubmit()
85    {
86        // recover the user's response
87        var response1 = justifyCMStext(document.getElementById('msgcontent1').value.trim());
88        var response2 = justifyCMStext(document.getElementById('msgcontent2').value.trim());
89        var response3 = justifyCMStext(document.getElementById('msgcontent3').value.trim());
90        var newMsg = response1 + response2 + response3;
91        if (newMsg.length == 0)
92        {
93            alert("Nothing to Send ... Proposed is empty.");
94        }
95        else
96        {
97            document.getElementById('msgdisplay1').value = response1;
98            document.getElementById('msgdisplay2').value = response2;
99            document.getElementById('msgdisplay3').value = response3;
100            saveMessage(response1 + "|" + response2 + "|" + response3);
101        }
102    }
103
104    function handleDialogClose()
105    {
106        // hide the display
107        document.getElementById('dialog').style.display = 'none'
108    }
109
110    function handleCMSclear()
111    {
112        document.getElementById('msgdisplay1').value = "";
113        document.getElementById('msgdisplay2').value = "";
114        document.getElementById('msgdisplay3').value = "";
115        saveMessage("||");
116    }
117    // retrieve the current cms message file
118    function showMessage(cmsID)
119    {
120        loadAllMessages();  // because someone else may have made a recent update
121        // lookup the message for this cms ID
122        var message = messageDict[cmsID].cms.message;
123        // show the message in the display
124        document.getElementById('msgdisplay1').value = message.phase1.Line1;
125        document.getElementById('msgdisplay2').value = message.phase1.Line2;
126        document.getElementById('msgdisplay3').value = message.phase1.Line3;
127    }
128    function loadAllMessages()
129    {
130        loadJSON("cms_messages.json", function(response)
131        {
132            // Parse JSON string into object
133            messagejson = JSON.parse(response);
134            // Add each message to a lookup dictionary
135            for (var i = 0; i < messagejson.data.length; i++)
136            {
137                var item = messagejson.data[i];
138                messageDict[item.cms.index] = item;
139                // Set the appropriate icon on the cms icon
140                // set a yellow flag if there's currently no message
141                if (item.cms.message.phase1.Line1 + 
142                    item.cms.message.phase1.Line2 +
143                    item.cms.message.phase1.Line3 == "")
144                {
145                    cmsLayer.overrideStyle(cmsLayer.getFeatureById(item.cms.index), {icon: yellowFlag})
146                }
147                else
148                {
149                    cmsLayer.overrideStyle(cmsLayer.getFeatureById(item.cms.index), {icon: blueFlag})
150                }
151            }
152        });
153    }
154
155    // Save an updated cms message to the file
156    function saveMessage(outMessage)
157    {
158        // Fetch cmsID from hidden field where it was put when dialog opened.
159        var cmsID = document.getElementById('cmsID').value;
160        //console.log("Saving " + outMessage + " for cmsID " + cmsID)
161        msgParts = outMessage.split("|");
162        messageDict[cmsID].cms.message.phase1.Line1 = msgParts[0];
163        messageDict[cmsID].cms.message.phase1.Line2 = msgParts[1];
164        messageDict[cmsID].cms.message.phase1.Line3 = msgParts[2];
165        // Set icon to reflect message state
166        if (outMessage == "||")
167        {
168            currentIcon = {icon: yellowFlag};
169        }
170        else
171        {
172            currentIcon = {icon: blueFlag};
173        }
174        cmsLayer.overrideStyle(cmsLayer.getFeatureById(cmsID), currentIcon)
175        outString = "{\n\t\"data\":\n\t\t" + JSON.stringify(Object.values(messageDict)) + "}";
176
177        var xhttp = new XMLHttpRequest();
178        xhttp.open("GET", "cgi-bin/saveMessage.py?msg=" + outString, true);
179        xhttp.send();
180        // Using POST might be a better idea ... haven't tried this yet
181        //      var xhr = new XMLHttpRequest();
182        //      xhr.open("POST", "/cgi-bin/saveMessage.py?", true);
183        //      xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
184        // send the collected data as JSON
185        //      xhr.send(JSON.stringify(messageList));
186    }
187
Note: See TracBrowser for help on using the repository browser.