OILS / web / osh-to-oil.js View on Github | oilshell.org

79 lines, 65 significant
1// For osh-to-oil.html.
2
3'use strict';
4
5// Append a message to an element. Used for errors.
6function appendMessage(elem, msg) {
7 elem.innerHTML += msg + '<br />';
8}
9
10// jQuery-like AJAX helper, but simpler.
11
12// Requires an element with id "status" to show errors.
13//
14// Args:
15// errElem: optional element to append error messages to. If null, then
16// alert() on error.
17// success: callback that is passed the xhr object.
18function ajaxGet(url, errElem, success) {
19 var xhr = new XMLHttpRequest();
20 xhr.open('GET', url, true /*async*/);
21 xhr.onreadystatechange = function() {
22 if (xhr.readyState != 4 /*DONE*/) {
23 return;
24 }
25
26 if (xhr.status != 200) {
27 var msg = 'ERROR requesting ' + url + ': ' + xhr.status + ' ' +
28 xhr.statusText;
29 if (errElem) {
30 appendMessage(errElem, msg);
31 } else {
32 alert(msg);
33 }
34 return;
35 }
36
37 success(xhr);
38 };
39 xhr.send();
40}
41
42// Fill in title and iframe src attributes.
43function loadSource(sourceName, statusElem) {
44 document.getElementById('title').innerHTML = sourceName;
45
46 document.getElementById('orig').src = sourceName + '.txt';
47 document.getElementById('oil').src = sourceName + '__oil.txt';
48 document.getElementById('ast').src = sourceName + '__ast.html';
49
50 document.getElementById('link-orig').href = sourceName + '.txt';
51 document.getElementById('link-oil').href = sourceName + '__oil.txt';
52 document.getElementById('link-ast').href = sourceName + '__ast.html';
53
54 // NOTE: There is no error checking here. They will just see a 404 in the
55 // iframe pane.
56 // http://stackoverflow.com/questions/16499117/how-to-detect-an-error-404-in-an-iframe
57 //appendMessage(statusElem, "Loaded contents for " + sourceName);
58}
59
60function getNameFromHash(urlHash, statusElem) {
61 var h = urlHash.substring(1); // without leading #
62 if (h.length < 1) {
63 appendMessage(statusElem, "Invalid URL hash: [" + urlHash + "]");
64 return null;
65 }
66 return h;
67}
68
69function onLoad(urlHash, globals, statusElem) {
70 onHashChange(urlHash, globals, statusElem);
71}
72
73// This is the onhashchange handler.
74function onHashChange(urlHash, globals, statusElem) {
75 var sourceName = getNameFromHash(urlHash, statusElem);
76 if (sourceName === null) return;
77
78 loadSource(sourceName, statusElem)
79}