From 55532d54f3d5a1b3a255010a9591709ccf005ac6 Mon Sep 17 00:00:00 2001
From: Mathis Dedial <mathis@dedial.net>
Date: Sat, 10 Mar 2018 13:51:56 +0100
Subject: [PATCH] WIP: Start working on issue #12

---
 package.json                         |  4 +++
 src/index.js                         | 12 ++++++++
 src/models/companies.js              | 13 +++++++++
 src/views/companies/companyDetail.js | 22 +++++++++++++++
 src/views/companies/companyList.js   | 15 ++++++++++
 src/views/companies/markdown/1.md    | 42 ++++++++++++++++++++++++++++
 src/views/companies/markdown/2.md    | 20 +++++++++++++
 src/views/companies/markdown/list.md |  3 ++
 webpack.config.js                    | 16 +++++++++++
 9 files changed, 147 insertions(+)
 create mode 100644 src/models/companies.js
 create mode 100644 src/views/companies/companyDetail.js
 create mode 100644 src/views/companies/companyList.js
 create mode 100644 src/views/companies/markdown/1.md
 create mode 100644 src/views/companies/markdown/2.md
 create mode 100644 src/views/companies/markdown/list.md

diff --git a/package.json b/package.json
index 807b7759..798ff110 100644
--- a/package.json
+++ b/package.json
@@ -31,5 +31,9 @@
     "uglifyjs-webpack-plugin": "^1.0.1",
     "webpack": "^3.8.1",
     "webpack-dev-server": "^2.9.3"
+  },
+  "devDependencies": {
+    "file-loader": "^1.1.11",
+    "markdown-loader": "^2.0.2"
   }
 }
diff --git a/src/index.js b/src/index.js
index b61b3dbb..5585c36a 100644
--- a/src/index.js
+++ b/src/index.js
@@ -15,6 +15,8 @@ import aufenthaltsraum from './views/amiv/aufenthaltsraum';
 import board from './views/amiv/board';
 import jobOfferList from './views/jobs/jobofferList';
 import jobOfferDetails from './views/jobs/jobofferDetails';
+import companyList from './views/companies/companyList';
+import companyDetail from './views/companies/companyDetail';
 
 m.route(document.body, '/', {
   '/': {
@@ -82,4 +84,14 @@ m.route(document.body, '/', {
       return m(layout, m(profile, vnode.attrs));
     },
   },
+  '/companies': {
+    render() {
+      return m(layout, m(companyList));
+    },
+  },
+  '/companies/:companyId': {
+    render(vnode) {
+      return m(layout, m(companyDetail, vnode.attrs));
+    },
+  },
 });
diff --git a/src/models/companies.js b/src/models/companies.js
new file mode 100644
index 00000000..d3048136
--- /dev/null
+++ b/src/models/companies.js
@@ -0,0 +1,13 @@
+import m from 'mithril';
+
+// ensure that all markdown files are compiled
+require.context('../views/companies/markdown');
+
+export default function loadMarkdown(companyId) {
+  // dynamically load markdown
+  return m.request({
+    url: `/dist/companies/${companyId}.html`,
+    method: 'GET',
+    deserialize: response => response,
+  });
+}
diff --git a/src/views/companies/companyDetail.js b/src/views/companies/companyDetail.js
new file mode 100644
index 00000000..c946e2c4
--- /dev/null
+++ b/src/views/companies/companyDetail.js
@@ -0,0 +1,22 @@
+import m from 'mithril';
+import loadMarkdown from '../../models/companies';
+
+export default class companyDetail {
+  static oninit(vnode) {
+    this.content = '';
+    loadMarkdown(vnode.attrs.companyId).then((response) => {
+      this.content = response;
+    });
+  }
+
+  static onbeforeupdate(vnode) {
+    // load markdown whenever component is reloaded
+    loadMarkdown(vnode.attrs.companyId).then((response) => {
+      this.content = response;
+    });
+  }
+
+  static view() {
+    return m.trust(this.content);
+  }
+}
diff --git a/src/views/companies/companyList.js b/src/views/companies/companyList.js
new file mode 100644
index 00000000..080adcb9
--- /dev/null
+++ b/src/views/companies/companyList.js
@@ -0,0 +1,15 @@
+import m from 'mithril';
+import loadMarkdown from '../../models/companies';
+
+export default class companyList {
+  static oninit() {
+    this.content = '';
+    loadMarkdown('list').then((response) => {
+      this.content = response;
+    });
+  }
+
+  static view() {
+    return m.trust(this.content);
+  }
+}
diff --git a/src/views/companies/markdown/1.md b/src/views/companies/markdown/1.md
new file mode 100644
index 00000000..0cee901e
--- /dev/null
+++ b/src/views/companies/markdown/1.md
@@ -0,0 +1,42 @@
+# ABB
+Webseite: [ABB Website](http://www.abb.ch/)
+
+Angestellte: 145'000 weltweit, 6'800 in der Schweiz
+
+## Kontakt
+
+ABB Schweiz AG  
+Herr Marcel Winkelmann  
+Brown Boveri Strasse 6  
+5400 Baden  
+hrmarketing@ch.abb.com
+
+## Portrait
+
+ABB ist weltweit führend in der Energie- und Automationstechnik. Das Unternehmen ermöglicht seinen Kunden in der Energieversorgung und der Industrie, ihre Leistung zu verbessern und gleichzeitig die Umweltbelastung zu reduzieren. ABB beschäftigt rund 130'000 Mitarbeitende in über 100 Länder.  
+
+In der Schweiz arbeiten rund 6'600 Mitarbeiter und Mitarbeiterinnen. In der Energietechnik arbeitet ABB Schweiz für Kunden, die in der Elektrizitäts-, Gas- oder Wasserversorgung tätig sind. ABB deckt fast die gesamte Palette der Stromübertragung und -verteilung von Kraftwerkkomponenten bis zur Steckdose ab. Dies umfasst Hoch- und Mittelspannungsschaltanlagen, Schaltanlagenkomponenten, Leistungshalbleiter sowie Transformatoren und Trafostationen. Die Automationstechnik von ABB Schweiz beliefert die Industrie in den Bereichen Zement, Metall- und Bergbau sowie Chemie, Pharma, Konsumgüter und Lebensmittel. Zu den Kunden gehören zudem Unternehmen aus der Fertigung, der Papier- und Druckindustrie sowie dem Maschinen-, Auto- und Schiffbau.  
+
+Im ABB-Forschungszentrum in Baden-Dättwil wird Innovation gross geschrieben: Die 170 Beschäftigten aus mehr als 25 Ländern arbeiten schon heute an der Lösung der Probleme von morgen. Denn für einen Technologiekonzern wie ABB sind erfolgreiche Innovationen überlebenswichtig. In der Schweiz wird überdurchschnittlich viel Kapital in die Forschung und Entwicklung investiert. Die Schwerpunkte im Corporate Research Center der Schweiz sind Automatisierung und Informatik, Materialien und Technologien für die Elektrotechnik, Leistungselektronik, Kommunikation sowie Elektronik, Messtechnik und Sensorik.
+
+## Standorte in der Schweiz
+
+Baden, Baden-Dättwil, Lenzburg, Turgi, Klingnau, Zürich-Oerlikon, Schaffhausen, Genf
+
+## Gesuchte Fachrichtungen
+
+*   Elektrotechnik und Informationstechnologie
+*   Informatik
+*   MTEC
+*   Maschinenbau und Verfahrenstechnik
+*   Materialwissenschaft
+*   Physik
+
+## Möglichkeiten
+
+*   Direkteinstieg
+*   Verschiedene Trainee Programme
+*   Praktikum
+*   Bachelor- und Masterarbeiten
+
+[Alles zu Ihrer Karriere](http://www.abb.ch/karriere)
\ No newline at end of file
diff --git a/src/views/companies/markdown/2.md b/src/views/companies/markdown/2.md
new file mode 100644
index 00000000..5ee547b6
--- /dev/null
+++ b/src/views/companies/markdown/2.md
@@ -0,0 +1,20 @@
+# Sensirion
+## Kontakt
+
+Marco Höhener  
++41 44 927 11 96  
+www.xing.to/Marco_Hoehener
+
+## Ãœber uns
+
+Die Sensirion AG ist ein aus der ETH Zürich hervorgegangenes, innovatives und international tätiges Hightech Unternehmen mit Sitz am Zürichsee mit über 500 Mitarbeitenden.  
+  
+High Tech Made in Switzerland - Die weltweit führende Sensortechnologie zur Messung von Feuchtigkeit, Gas- und Flüssigkeitsdurchflüsse sowie Differenzdrucke sorgen für mehr Lebensqualität sowie den schonenden Umgang mit Ressourcen.  
+  
+Geforscht, entwickelt und produziert wird im Headquarter in Stäfa (ZH). Der Vertrieb wird durch ein internationales Netzwerk mit Büros in den USA, Deutschland, China, Taiwan, Japan und Korea unterstützt. Die Kombination aus Teamgeist und technologischer Kompetenzführerschaft macht Sensirion zum bevorzugten Partner der Automobilbranche, Medizinaltechnik, Gebäudetechnologie, Prozessautomatisierung und Konsumgüterindustrie.
+
+## Schwerpunkt
+
+Die Forschung und Entwicklung von neuen, digitalen Mikrosensorprodukten sowie von Produktionsprozessen zur Massenfertigung dieser Produkte bieten zahlreiche Herausforderungen.  
+  
+Sensirion ermöglicht Physikern/-innen und Ingenieuren/-innen in der F&E und in unserem Produktionsumfeld, sowohl mit interdisziplinärer Arbeit als auch mit der Lösung hoch spezialisierter Technologiefragen, Mikrosensortechnik an der Weltspitze mit zu gestalten.
\ No newline at end of file
diff --git a/src/views/companies/markdown/list.md b/src/views/companies/markdown/list.md
new file mode 100644
index 00000000..648392fb
--- /dev/null
+++ b/src/views/companies/markdown/list.md
@@ -0,0 +1,3 @@
+# Our partner companies
+* [ABB](/#!/companies/1)
+* [Sensirion](/#!/companies/2)
diff --git a/webpack.config.js b/webpack.config.js
index 4637ad02..b90e8103 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -28,6 +28,22 @@ const config = {
           options: { presets: ['env'] },
         }],
       },
+      {
+        test: /\.md$/, // Check for all md files
+        use: [
+          {
+            loader: 'file-loader', // Writes the generated HTML to a file
+            options: {
+              name: '[name].html',
+              outputPath: 'companies',
+              publicPath: '/dist/companies',
+            },
+          },
+          {
+            loader: 'markdown-loader', // Converts Markdown to HTML
+          },
+        ],
+      },
     ],
   },
 
-- 
GitLab