Software zum Installieren eines Smart-Mirror Frameworks , zum Nutzen von hochschulrelevanten Informationen, auf einem Raspberry-Pi.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PTHAFASDomBuilder.js 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. "use strict";
  2. class PTHAFASDomBuilder {
  3. constructor(config) {
  4. this.config = config;
  5. this.headingSymbols = {
  6. time: "fa fa-clock-o",
  7. line: "fa fa-bus",
  8. direction: "fa fa-exchange",
  9. platform: "fa fa-map-marker"
  10. };
  11. }
  12. getSimpleDom(message) {
  13. let wrapper = this.getWrapper();
  14. wrapper.appendChild(this.getDiv(message));
  15. return wrapper;
  16. }
  17. getDom(departures, headings, noDeparturesMessage) {
  18. let wrapper = this.getWrapper();
  19. let departuresTable = this.getDeparturesTable(departures, headings, noDeparturesMessage);
  20. wrapper.appendChild(departuresTable);
  21. return wrapper;
  22. }
  23. getWrapper() {
  24. let wrapper = document.createElement("div");
  25. wrapper.className = "pthWrapper";
  26. wrapper.appendChild(this.createHeadingElement(this.config.headerPrefix, this.config.stationName, this.config.headerAppendix));
  27. return wrapper;
  28. }
  29. getDiv(message, cssClasses = "small light dimmed") {
  30. let messageDiv = document.createElement("div");
  31. messageDiv.className = cssClasses;
  32. messageDiv.innerHTML = message;
  33. return messageDiv;
  34. }
  35. // Create the module header. Prepend headerPrefix if given.
  36. createHeadingElement(headerPrefix, stationName, headerAppendix) {
  37. let headingElement = document.createElement("header");
  38. let heading = stationName;
  39. if (headerPrefix !== "") {
  40. heading = headerPrefix + " " + heading;
  41. }
  42. if (headerAppendix !== "") {
  43. heading += " " + headerAppendix;
  44. }
  45. headingElement.innerHTML = heading;
  46. return headingElement;
  47. }
  48. getDeparturesTable(departures, headings, noDepartureMessage) {
  49. let table = document.createElement("table");
  50. table.className = "pthTable small";
  51. if (this.config.showTableHeaders) {
  52. let tableHeader = this.getDeparturesTableHeader(headings);
  53. table.appendChild(tableHeader);
  54. }
  55. let tableBodyBuilder = new PTHAFASTableBodyBuilder(this.config);
  56. let tableBody = tableBodyBuilder.getDeparturesTableBody(departures, noDepartureMessage);
  57. table.appendChild(tableBody);
  58. return table;
  59. }
  60. getDeparturesTableHeader(headings) {
  61. let tHead = document.createElement("thead");
  62. let headerRow = document.createElement("tr");
  63. headerRow.className = "bold dimmed";
  64. this.config.tableHeaderOrder.forEach((key) => {
  65. let values = this.getHeadingValues(key, headings);
  66. headerRow.appendChild(this.getHeaderCell(values));
  67. });
  68. tHead.appendChild(headerRow);
  69. return tHead;
  70. }
  71. getHeadingValues(key, headings) {
  72. let result = {
  73. text: headings[key],
  74. symbol: this.headingSymbols[key],
  75. cssClass: ""
  76. };
  77. if (key === "line" || key === "direction" || key === "platform") {
  78. result.cssClass = "pthTextCenter";
  79. }
  80. return result;
  81. }
  82. getHeaderCell(values) {
  83. let textContent = values.text;
  84. let symbol = values.symbol;
  85. let cssClass = values.cssClass;
  86. let cell = document.createElement("td");
  87. cell.className = cssClass;
  88. if (this.config.showTableHeadersAsSymbols) {
  89. let content = document.createElement("i");
  90. content.className = symbol;
  91. cell.appendChild(content);
  92. } else {
  93. cell.innerHTML = textContent;
  94. }
  95. return cell;
  96. }
  97. }