Browse Source

updated elm, added elm client + node server combo

Brandon Wong 7 years ago
parent
commit
6b5555efb0

+ 2 - 2
elm/Main.elm

@@ -1,9 +1,9 @@
 
-module $foldername exposing (..)
+module $Foldername exposing (..)
 
 import Html exposing (..)
 import Html.Events exposing (..)
-import Html.Attributes exposing (id, class, classList)
+import Html.Attributes exposing (id, class)
 
 
 type alias Model =

+ 20 - 0
elm/index.html

@@ -0,0 +1,20 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+    <meta charset="UTF-8">
+    <title>$Foldername</title>
+    <link rel="stylesheet" href="style.css" />
+</head>
+<body>
+    <script type="text/javascript" src="client.js"></script>
+    <script>
+        const app = Elm.$Foldername.fullscreen();
+        /*
+        app.ports.elmToJs.subscribe(function subs(action) {
+            
+        });
+        app.ports.jsToElm.send([]);
+        */
+    </script>
+</body>
+</html>

+ 1 - 0
elm/style.css

@@ -0,0 +1 @@
+

+ 8 - 0
elmserver/.gitignore

@@ -0,0 +1,8 @@
+.idea
+node_modules
+build
+test-build
+npm-debug*
+*.swp
+elm-stuff
+client/client.js

+ 52 - 0
elmserver/client/Main.elm

@@ -0,0 +1,52 @@
+
+module $Foldername exposing (..)
+
+import Html exposing (..)
+import Html.Events exposing (..)
+import Html.Attributes exposing (id, class)
+
+
+type alias Model =
+    {
+    }
+
+initModel : Model
+initModel =
+    {
+    }
+
+
+type Msg
+    = NoOp
+
+
+view : Model -> Html Msg
+view model =
+    div
+        []
+        [ text "$Foldername" ]
+
+update : Msg -> Model -> (Model, Cmd Msg)
+update msg model =
+    ( model, Cmd.none )
+
+-- to use ports, add "port" in front of the module definition
+--port elmToJs : (List String) -> Cmd msg
+--port jsToElm : (List String -> msg) -> Sub msg
+
+--subscriptions : Model -> Sub Msg
+--subscriptions model =
+--    Sub.batch
+--        [ jsToElm External
+--        ]
+
+main =
+    Html.program
+        { init = (initModel, Cmd.none)
+        , view = view
+        , update = update
+        --, subscriptions = subscriptions
+        , subscriptions = \_ -> Sub.none
+        }
+
+

+ 20 - 0
elmserver/client/index.html

@@ -0,0 +1,20 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+    <meta charset="UTF-8">
+    <title>$Foldername</title>
+    <link rel="stylesheet" href="style.css" />
+</head>
+<body>
+    <script type="text/javascript" src="client.js"></script>
+    <script>
+        const app = Elm.$Foldername.fullscreen();
+        /*
+        app.ports.elmToJs.subscribe(function subs(action) {
+            
+        });
+        app.ports.jsToElm.send([]);
+        */
+    </script>
+</body>
+</html>

+ 1 - 0
elmserver/client/style.css

@@ -0,0 +1 @@
+

+ 9 - 0
elmserver/server/.babelrc

@@ -0,0 +1,9 @@
+{
+  "presets": ["latest"],
+  "plugins": ["transform-runtime", "transform-object-rest-spread"],
+  "env": {
+    "production": {
+      "plugins": ["transform-remove-console"]
+    }
+  }
+}

+ 34 - 0
elmserver/server/package.json

@@ -0,0 +1,34 @@
+{
+  "name": "@brwong/$foldername",
+  "author": "Brandon Wong",
+  "main": "build/service.js",
+  "version": "0.1.0",
+  "scripts": {
+    "test": "node test-build/service.js",
+    "compile-prod": "cross-env NODE_ENV=production npm run compile",
+    "compile": "npm run compile-src && npm run compile-test",
+    "compile-test": "babel test --out-dir test-build",
+    "compile-src": "babel src --out-dir build",
+    "watch": "nodemon --watch src --watch test --exec \"npm run compile --silent\"",
+    "serverwatch": "nodemon --watch src --watch test --exec \"npm run compile --silent && node build/service.js\"",
+    "testwatch": "nodemon --watch src --watch test --exec \"npm run compile --silent && npm test\""
+  },
+  "dependencies": {
+    "babel-cli": "^6.23.0",
+    "babel-plugin-transform-object-rest-spread": "^6.20.2",
+    "babel-plugin-transform-remove-console": "^6.8.0",
+    "babel-plugin-transform-runtime": "^6.15.0",
+    "babel-preset-latest": "^6.22.0",
+    "cross-env": "^3.1.4",
+    "express": "^4.14.1"
+  },
+  "devDependencies": {
+    "nodemon": "^1.11.0",
+    "tape": "^4.6.3",
+    "tape-promise": "^2.0.1"
+  },
+  "directories": {
+    "test": "test"
+  },
+  "private": true
+}

+ 22 - 0
elmserver/server/src/service.js

@@ -0,0 +1,22 @@
+
+import express from 'express';
+import http from 'http';
+
+
+const port = process.env.port ? parseInt(process.env.port) : 8080,
+    app = express(),
+    httpserver = http.createServer(app);
+
+httpserver.listen(port, function listening() {
+    console.log('$foldername service now listening on port', port);
+});
+
+app.get('/', function serve(req, res) {
+    res.send('$foldername service');
+});
+
+
+
+
+
+

+ 64 - 0
elmserver/server/test/service.js

@@ -0,0 +1,64 @@
+
+import {fork} from 'child_process';
+import tape from 'tape';
+import _test from 'tape-promise';
+import http from 'http';
+
+const tapetest = _test(tape);
+
+tapetest('service', async function testService(t) {
+    const server = fork('build/service.js'),
+        connstring = 'http://localhost:8080';
+
+    try {
+        await waitPro();
+        const data = await requestPro(connstring + '/');
+        console.log('data', data);
+    }
+    catch(e) {
+        console.log('error somewhere', e);
+        t.fail('error somewhere');
+    }
+
+    server.kill();
+    t.end();
+});
+
+
+function waitPro(n = 1000) {
+    return new Promise(function pro(resolve, reject) {
+        setTimeout(resolve, n);
+    });
+}
+function requestPro(reqopts, data) {
+    return new Promise(function prot(resolve, reject) {
+        try {
+            let req = http.request(reqopts, function received(resp) {
+                let str = '';
+                resp.on('data', function p(part) {
+                    str += part;
+                });
+                resp.on('end', function done() {
+                    if( resp.statusCode >= 400 && resp.statusCode <= 599 ) {
+                        reject(str);
+                    }
+                    else {
+                        resolve(str);
+                    }
+                });
+            });
+            if( data ) {
+                req.write(data);
+            }
+            req.end();
+        }
+        catch(e) {
+            reject(e);
+        }
+    });
+}
+
+
+
+
+

+ 4 - 8
maker.sh

@@ -41,16 +41,12 @@ cp -R $maker_folder/$projecttype/. $folderpath/$foldername
 
 cd $foldername
 
-for i in `grep -rl '$foldername' .`;
+for i in `grep -ril '$foldername' .`;
 do
     echo "replacing folder name in $i";
-    if [[ $i == *".elm" ]]
-    then
-        caps=( $foldername )
-        sed -i "s/\$foldername/${caps[@]^}/" $i;
-    else
-        sed -i "s/\$foldername/$foldername/" $i;
-    fi
+    caps=( $foldername )
+    sed -i "s/\$Foldername/${caps[@]^}/g" $i;
+    sed -i "s/\$foldername/$foldername/g" $i;
 done;