2 Commits 1aa4d7bdc4 ... 57adef1fb2

Auteur SHA1 Bericht Datum
  Benoît Hubert 57adef1fb2 fix empty.css path 7 jaren geleden
  Benoît Hubert 6bd8dfbc35 Add examples and settings 7 jaren geleden

+ 1 - 1
empty.html

@@ -6,7 +6,7 @@
     <title></title>
     <meta name="description" content="">
     <meta name="viewport" content="width=device-width, initial-scale=1">
-    <link rel="stylesheet" href="css/empty.css">
+    <link rel="stylesheet" href="assets/css/empty.css">
 		<style>
 		.ok-vegane { color: green; }
 		.pas-vegane { color: red; font-weight: bold; }

+ 18 - 0
exemples/4-bases-python-tdd/5-tdd.py

@@ -0,0 +1,18 @@
+import unittest
+
+def is_major(age):
+    if type(age) is not int:
+        age = int(age)
+    return True if age >= 18 else False
+
+class TestIsMajor(unittest.TestCase):
+
+    def test_is_major(self):
+        self.assertTrue(is_major(30))
+        self.assertFalse(is_major(11))
+        self.assertTrue(is_major("18"))
+        self.assertFalse(is_major("17"))
+        self.assertRaises(ValueError, is_major, 'bla')
+
+if __name__ == '__main__':
+    unittest.main()

+ 1 - 1
react-tuto/src/components/About.js

@@ -3,7 +3,7 @@ import React from 'react';
 class About extends React.Component {
   render() {
     return (
-      <div class="about">
+      <div className="about">
 
         <p>Cette appli a été réalisée avec les technos open-source suivantes.</p>
 

+ 1 - 0
react-tuto/src/components/Navbar.js

@@ -10,6 +10,7 @@ class Navbar extends React.Component {
           <img src="assets/img/logo-python.png" alt="logo Python" />
         </Link>
           <ul className="right hide-on-med-and-down">
+            <li><Link to="/settings"><i className="material-icons">settings</i></Link></li>
             <li><Link to="/a-propos">&Agrave; propos</Link></li>
           </ul>
 

+ 80 - 0
react-tuto/src/components/Settings.js

@@ -0,0 +1,80 @@
+import React from 'react';
+import { Link } from 'react-router-dom';
+
+function camelize(str) {
+  return str.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); });
+}
+
+class Settings extends React.Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      iframeSrc: ''
+    };
+    this.onChange = this.onChange.bind(this);
+    this.onSubmit = this.onSubmit.bind(this);
+  }
+
+  componentDidMount() {
+    this.restoreFromLS();
+  }
+
+  restoreFromLS() {
+    const savedSettings = localStorage.getItem('rpywSettings');
+    if(savedSettings) {
+      try {
+        const settings = JSON.parse(savedSettings);
+        console.log('restore settings', settings);
+        this.setState(settings);
+      }
+      catch(e) {
+        console.error('Error while trying to restore settings from localStorage', e);
+      }
+    }
+  }
+
+  saveToLS() {
+    const settingsJson = JSON.stringify(this.state);
+    console.log('saving', settingsJson);
+    localStorage.setItem('rpywSettings', settingsJson);
+  }
+
+  onChange(e) {
+    const { state } = this;
+    const { name, value } = e.target;
+    const camelName = camelize(name);
+    console.log(name, camelName, value);
+    this.setState(
+      Object.assign({ ...state }, { [camelName]: value })
+    );
+    // console.log(camelize(e.target.name));
+  }
+
+  onSubmit(e) {
+    e.preventDefault();
+    const { iframeSrc } = this.state;
+    console.log('iframe src', iframeSrc);
+    $('#iframe').attr('src', iframeSrc);
+    this.saveToLS();
+  }
+
+  render() {
+    const { iframeSrc } = this.state;
+    console.log(this.state, iframeSrc);
+    return (
+      <div className="row">
+        <form className="col s12" onSubmit={this.onSubmit}>
+
+          <div className="input-field">
+            <input name="iframe-src" type="text" className="validate" value={iframeSrc} onChange={this.onChange} />
+            <label htmlFor="iframe-src">Iframe source URL</label>
+          </div>
+
+          <a type="submit" className="waves-effect waves-light btn">Save</a>
+        </form>
+      </div>
+    );
+  }
+}
+
+export default Settings;

+ 2 - 0
react-tuto/src/index.js

@@ -6,6 +6,7 @@ import About from './components/About';
 import Home from './components/Home';
 import Navbar from './components/Navbar';
 import Page from './components/Page';
+import Settings from './components/Settings';
 const markdown = require('./resources/markdown.json');
 
 const $leftPanel = $('#left-panel');
@@ -96,6 +97,7 @@ ReactDOM.render(
         <div className="main">
           <Switch>
             <Route exact path="/" component={Home} />
+            <Route exact path="/settings" component={Settings} />
             <Route exact path="/a-propos" component={About} />
             {
               markdown.map(getSectionRoutes)

+ 3 - 0
react-tuto/src/markdown/4. Bases de Python/05. TDD - exemple.md

@@ -12,6 +12,9 @@ class TestIsMajor(unittest.TestCase):
     def test_is_major(self):
         self.assertTrue(is_major(30))
         self.assertFalse(is_major(11))
+        self.assertTrue(is_major("18"))
+        self.assertFalse(is_major("17"))
+        self.assertFalse(is_major("bla"))
 
 if __name__ == '__main__':
     unittest.main()

+ 0 - 0
react-tuto/src/markdown/6. Django/01. Mise en route.md


File diff suppressed because it is too large
+ 1 - 1
react-tuto/src/resources/markdown.json