From aff9862b1825f532c20d27d23ec5b1780b81d42c Mon Sep 17 00:00:00 2001 From: Matias Simone Date: Tue, 30 Oct 2018 13:44:51 -0300 Subject: [PATCH 1/6] Topic 3 - HTML5 APIs --- 03-HTML5-APIs/.empty | 0 03-HTML5-APIs/.gitignore | 21 ++ 03-HTML5-APIs/css/grid.css | 144 ++++++++++++++ 03-HTML5-APIs/css/normalize.css | 341 ++++++++++++++++++++++++++++++++ 03-HTML5-APIs/css/style.css | 38 ++++ 03-HTML5-APIs/img/favicon.png | Bin 0 -> 26602 bytes 03-HTML5-APIs/index.html | 51 +++++ 03-HTML5-APIs/js/scripts.js | 110 +++++++++++ 8 files changed, 705 insertions(+) delete mode 100644 03-HTML5-APIs/.empty create mode 100644 03-HTML5-APIs/.gitignore create mode 100644 03-HTML5-APIs/css/grid.css create mode 100644 03-HTML5-APIs/css/normalize.css create mode 100644 03-HTML5-APIs/css/style.css create mode 100644 03-HTML5-APIs/img/favicon.png create mode 100644 03-HTML5-APIs/index.html create mode 100644 03-HTML5-APIs/js/scripts.js diff --git a/03-HTML5-APIs/.empty b/03-HTML5-APIs/.empty deleted file mode 100644 index e69de29b..00000000 diff --git a/03-HTML5-APIs/.gitignore b/03-HTML5-APIs/.gitignore new file mode 100644 index 00000000..185e6631 --- /dev/null +++ b/03-HTML5-APIs/.gitignore @@ -0,0 +1,21 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw* diff --git a/03-HTML5-APIs/css/grid.css b/03-HTML5-APIs/css/grid.css new file mode 100644 index 00000000..ba4204d5 --- /dev/null +++ b/03-HTML5-APIs/css/grid.css @@ -0,0 +1,144 @@ +/*________________________________________________________________________________________________ +Borders and padding are drawn inside the set width of your content. The margin is drawn outside.*/ + +*, +*:before, +*:after { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +/*________________________________________________________________________________________________ +Grid Layout.*/ + +@media (min-width: 600px) { + main { + display: grid; + grid-template-columns: repeat(6, 1fr); + } + + + .col-1-row-1 { + grid-column: span 1; + grid-row: span 1; + } + + .col-2-row-1 { + grid-column: span 2; + grid-row: span 1; + } + + .col-3-row-1 { + grid-column: span 3; + grid-row: span 1; + } + + .col-4-row-1 { + grid-column: span 4; + grid-row: span 1; + } + + .col-5-row-1 { + grid-column: span 5; + grid-row: span 1; + } + + .col-6-row-1 { + grid-column: span 6; + grid-row: span 1; + } + + .col-1-row-1 { + grid-column: span 1; + grid-row: span 1; + } + + .col-2-row-2 { + grid-column: span 2; + grid-row: span 2; + } + + .col-3-row-2 { + grid-column: span 3; + grid-row: span 2; + } + + .col-4-row-2 { + grid-column: span 4; + grid-row: span 2; + } + + .col-5-row-2 { + grid-column: span 5; + grid-row: span 2; + } + + .col-6-row-2 { + grid-column: span 6; + grid-row: span 2; + } + + .col-1-row-3 { + grid-column: span 1; + grid-row: span 3; + } + + .col-2-row-3 { + grid-column: span 2; + grid-row: span 3; + } + + .col-3-row-3 { + grid-column: span 3; + grid-row: span 3; + } + + .col-4-row-3 { + grid-column: span 4; + grid-row: span 3; + } + + .col-5-row-3 { + grid-column: span 5; + grid-row: span 3; + } + + .col-6-row-3 { + grid-column: span 6; + grid-row: span 3; + } + + .col-1-row-4 { + grid-column: span 1; + grid-row: span 4; + } + + .col-2-row-4 { + grid-column: span 2; + grid-row: span 4; + } + + .col-3-row-4 { + grid-column: span 3; + grid-row: span 4; + } + + .col-4-row-4 { + grid-column: span 4; + grid-row: span 4; + } + + .col-5-row-4 { + grid-column: span 5; + grid-row: span 4; + } + + .col-6-row-4 { + grid-column: span 6; + grid-row: span 4; + } + +} + +/*________________________________________________________________________________________________*/ \ No newline at end of file diff --git a/03-HTML5-APIs/css/normalize.css b/03-HTML5-APIs/css/normalize.css new file mode 100644 index 00000000..aba238fe --- /dev/null +++ b/03-HTML5-APIs/css/normalize.css @@ -0,0 +1,341 @@ +/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + + html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ + } + + /* Sections + ========================================================================== */ + + /** + * Remove the margin in all browsers. + */ + + body { + margin: 0; + } + + /** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + + h1 { + font-size: 2em; + margin: 0.67em 0; + } + + /* Grouping content + ========================================================================== */ + + /** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + + hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ + } + + /** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + + pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ + } + + /* Text-level semantics + ========================================================================== */ + + /** + * Remove the gray background on active links in IE 10. + */ + + a { + background-color: transparent; + } + + /** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + + abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ + } + + /** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + + b, + strong { + font-weight: bolder; + } + + /** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + + code, + kbd, + samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ + } + + /** + * Add the correct font size in all browsers. + */ + + small { + font-size: 80%; + } + + /** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + + sub, + sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + + sub { + bottom: -0.25em; + } + + sup { + top: -0.5em; + } + + /* Embedded content + ========================================================================== */ + + /** + * Remove the border on images inside links in IE 10. + */ + + img { + border-style: none; + } + + /* Forms + ========================================================================== */ + + /** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + + button, + input, + optgroup, + select, + textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ + } + + /** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + + button, + input { /* 1 */ + overflow: visible; + } + + /** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + + button, + select { /* 1 */ + text-transform: none; + } + + /** + * Correct the inability to style clickable types in iOS and Safari. + */ + + button, + [type="button"], + [type="reset"], + [type="submit"] { + -webkit-appearance: button; + } + + /** + * Remove the inner border and padding in Firefox. + */ + + button::-moz-focus-inner, + [type="button"]::-moz-focus-inner, + [type="reset"]::-moz-focus-inner, + [type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; + } + + /** + * Restore the focus styles unset by the previous rule. + */ + + button:-moz-focusring, + [type="button"]:-moz-focusring, + [type="reset"]:-moz-focusring, + [type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; + } + + /** + * Correct the padding in Firefox. + */ + + fieldset { + padding: 0.35em 0.75em 0.625em; + } + + /** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + + legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ + } + + /** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + + progress { + vertical-align: baseline; + } + + /** + * Remove the default vertical scrollbar in IE 10+. + */ + + textarea { + overflow: auto; + } + + /** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + + [type="checkbox"], + [type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ + } + + /** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + + [type="number"]::-webkit-inner-spin-button, + [type="number"]::-webkit-outer-spin-button { + height: auto; + } + + /** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + + [type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ + } + + /** + * Remove the inner padding in Chrome and Safari on macOS. + */ + + [type="search"]::-webkit-search-decoration { + -webkit-appearance: none; + } + + /** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + + ::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ + } + + /* Interactive + ========================================================================== */ + + /* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + + details { + display: block; + } + + /* + * Add the correct display in all browsers. + */ + + summary { + display: list-item; + } + + /* Misc + ========================================================================== */ + + /** + * Add the correct display in IE 10+. + */ + + template { + display: none; + } + + /** + * Add the correct display in IE 10. + */ + + [hidden] { + display: none; + } \ No newline at end of file diff --git a/03-HTML5-APIs/css/style.css b/03-HTML5-APIs/css/style.css new file mode 100644 index 00000000..f1b67dd9 --- /dev/null +++ b/03-HTML5-APIs/css/style.css @@ -0,0 +1,38 @@ +body { + max-width: 1600px; + margin: 0 auto; + font-family: Helvetica, sans-serif; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; +} + +#textBio { + text-align: center; +} + +h1 { + border-collapse: collapse; + padding: 0; + margin: 0; + text-align: center; + font-size: 3em; + line-height: 1.3em; +} + +h2 { + font-size: 2em; + margin-bottom: 1em; +} + +.footer { + + right: 0; + bottom: 0; + left: 0; + padding: 1rem; + background-color: #efefef; + text-align: center; + font-size: 2em; + line-height: 1.3em; + font-family: trench +} diff --git a/03-HTML5-APIs/img/favicon.png b/03-HTML5-APIs/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..7518023d24fcc770d06f2b24c22965976277212d GIT binary patch literal 26602 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 literal 0 HcmV?d00001 diff --git a/03-HTML5-APIs/index.html b/03-HTML5-APIs/index.html new file mode 100644 index 00000000..c515a37a --- /dev/null +++ b/03-HTML5-APIs/index.html @@ -0,0 +1,51 @@ + + + + + + + 03-HTML5-APIs + + + + + + + + + + +
+

03-HTML5-APIs

+
+ +
+

+
+ +

+ +
+
+ + +
+
+
+ + +
+
+
+ +
+
+ Matias Simone || matiassimone.d@gmail.com || 2018 BootcampUI +
+ + + + + \ No newline at end of file diff --git a/03-HTML5-APIs/js/scripts.js b/03-HTML5-APIs/js/scripts.js new file mode 100644 index 00000000..116926d3 --- /dev/null +++ b/03-HTML5-APIs/js/scripts.js @@ -0,0 +1,110 @@ +function clearContent(id) { + document.getElementById(id).value = ''; +} + +function indexedDB_Suported() { + let isSuported = false; + + if (self.indexedDB) { + isSuported = true; + } + return isSuported; +} + +function indexedDB_CreateDB(dbName, nameObjectStore) { + + if (indexedDB_Suported) { + + let requestDB = self.indexedDB.open(dbName); + + requestDB.onupgradeneeded = event => { + let db = event.target.result; + db.createObjectStore(nameObjectStore, { + autoIncrement: true + }); + } + requestDB.onerror = event => { + this.handleError(event.target.errorCode); + } + + } else { + this.handleError('IndexedDB not is supported') + } +} + + +function indexedDB_Save(dbName, nameObjectStore, toSave) { + + if (indexedDB_Suported) { + + this.indexedDB_CreateDB(dbName, nameObjectStore); + + let requestDB = self.indexedDB.open(dbName); + + requestDB.onsuccess = event => { + let db = event.target.result; + let transaction = db.transaction(nameObjectStore, 'readwrite'); + + let store = transaction.objectStore(nameObjectStore); + store.put(toSave); + + transaction.oncomplete = event => { + console.log('The element "' + toSave + '" has saved correctly in IndexedDB.'); + } + transaction.onerror = event => { + this.handleError(event.target.errorCode); + } + } + requestDB.onerror = event => { + this.handleError(event.target.errorCode); + } + + } else { + this.handleError('IndexedDB not is supported') + } +} + +function indexedDB_Clear(dbName, nameObjectStore) { + + if (indexedDB_Suported) { + + let requestDB = self.indexedDB.open(dbName); + + requestDB.onsuccess = event => { + let db = event.target.result; + let transaction = db.transaction(nameObjectStore, 'readwrite'); + + let store = transaction.objectStore(nameObjectStore); + store.clear(); + + transaction.oncomplete = event => { + console.log('The IndexedDB has erased correctly.'); + } + transaction.onerror = event => { + this.handleError(event.target.errorCode); + } + } + requestDB.onerror = event => { + this.handleError(event.target.errorCode); + } + + } else { + this.handleError('IndexedDB not is supported') + } +} + +function handleError(err) { + console.log("Database error: " + err); +} + +function localStorage_Save(keyName, toSave) { + localStorage.setItem(keyName, JSON.stringify(toSave)); + console.log('The element "' + toSave + '" has saved correctly in LocalStorage.'); +} + +function localStorage_Clear(keyName) { + localStorage.removeItem(keyName); + console.log('The LocalStorage has erased correctly.'); +} + + From cdd07d4d49b0061d7f0d1c5e94baf83e8cc14f45 Mon Sep 17 00:00:00 2001 From: Matias Simone Date: Tue, 30 Oct 2018 13:56:18 -0300 Subject: [PATCH 2/6] Update ReadMe with links and information --- 03-HTML5-APIs/readme.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 03-HTML5-APIs/readme.md diff --git a/03-HTML5-APIs/readme.md b/03-HTML5-APIs/readme.md new file mode 100644 index 00000000..718dcbcf --- /dev/null +++ b/03-HTML5-APIs/readme.md @@ -0,0 +1,12 @@ +# Topic 3 - HTML5 APIs + + +### Storages + +:black_large_square: **IndexedDB** + +If your wish is using IndexedDB but with promises, exits one library call idb written by Jake Archibald. + +[IndexedDB with promises and async/await Medium Blog](https://medium.com/@filipvitas/indexeddb-with-promises-and-async-await-3d047dddd313) + +[IndexedDB, with promises GitHub](https://github.com/jakearchibald/idb) From 69050c60c6246cec4777523a02c2e9378c914aa4 Mon Sep 17 00:00:00 2001 From: Matias Simone Date: Tue, 30 Oct 2018 16:58:41 -0300 Subject: [PATCH 3/6] Ex Drag and Drop --- 03-HTML5-APIs/css/style.css | 4 ++++ 03-HTML5-APIs/index.html | 4 +++- 03-HTML5-APIs/js/scripts.js | 30 +++++++++++++++++++++++++++++- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/03-HTML5-APIs/css/style.css b/03-HTML5-APIs/css/style.css index f1b67dd9..13ba685d 100644 --- a/03-HTML5-APIs/css/style.css +++ b/03-HTML5-APIs/css/style.css @@ -10,6 +10,10 @@ body { text-align: center; } +#bio { + border: 5px solid green; +} + h1 { border-collapse: collapse; padding: 0; diff --git a/03-HTML5-APIs/index.html b/03-HTML5-APIs/index.html index c515a37a..30372687 100644 --- a/03-HTML5-APIs/index.html +++ b/03-HTML5-APIs/index.html @@ -24,7 +24,7 @@

03-HTML5-APIs



- +
+

Write or drop a file text in the Text Area.

+

This Text Area only suport files based in text, for example (text/plain , text/html , text/css)


diff --git a/03-HTML5-APIs/js/scripts.js b/03-HTML5-APIs/js/scripts.js index 116926d3..47118cd4 100644 --- a/03-HTML5-APIs/js/scripts.js +++ b/03-HTML5-APIs/js/scripts.js @@ -1,5 +1,5 @@ function clearContent(id) { - document.getElementById(id).value = ''; + document.getElementById(id).innerText = ''; } function indexedDB_Suported() { @@ -108,3 +108,31 @@ function localStorage_Clear(keyName) { } +function handlerDrop(event, idToPut) { + + let htmlPut = document.getElementById(idToPut); + event.preventDefault(); + + let file = event.dataTransfer.files[0]; + let reader = new FileReader(); + + reader.readAsText(file); + + reader.onload = event => { + if(/text/.test(file.type)){ + htmlPut.innerText = event.target.result; + }else{ + console.log("Only suport files based in text"); + } + } + removeData(event); +} + +function removeData (event) { + if (event.dataTransfer.items) { + event.dataTransfer.items.clear(); + } else { + event.dataTransfer.clearData(); + } +} + From 2fc0bd58019ab5a310a890f5b82b272c678dc4e2 Mon Sep 17 00:00:00 2001 From: Matias Simone Date: Tue, 30 Oct 2018 19:11:36 -0300 Subject: [PATCH 4/6] Modularized all classes --- 03-HTML5-APIs/index.html | 13 +++-- 03-HTML5-APIs/js/clearContent.js | 4 ++ 03-HTML5-APIs/js/dragAndDrop.js | 27 ++++++++++ 03-HTML5-APIs/js/{scripts.js => indexedDB.js} | 50 ++----------------- 03-HTML5-APIs/js/localStorage.js | 10 ++++ 5 files changed, 54 insertions(+), 50 deletions(-) create mode 100644 03-HTML5-APIs/js/clearContent.js create mode 100644 03-HTML5-APIs/js/dragAndDrop.js rename 03-HTML5-APIs/js/{scripts.js => indexedDB.js} (68%) create mode 100644 03-HTML5-APIs/js/localStorage.js diff --git a/03-HTML5-APIs/index.html b/03-HTML5-APIs/index.html index 30372687..a49115d7 100644 --- a/03-HTML5-APIs/index.html +++ b/03-HTML5-APIs/index.html @@ -12,6 +12,8 @@ + + @@ -27,13 +29,13 @@

03-HTML5-APIs


- - +

-
@@ -47,7 +49,10 @@

03-HTML5-APIs

Matias Simone || matiassimone.d@gmail.com || 2018 BootcampUI - + + + + \ No newline at end of file diff --git a/03-HTML5-APIs/js/clearContent.js b/03-HTML5-APIs/js/clearContent.js new file mode 100644 index 00000000..0e9a7ad4 --- /dev/null +++ b/03-HTML5-APIs/js/clearContent.js @@ -0,0 +1,4 @@ +function clearContent(id) { + let clear = document.getElementById(id); + clear.innerText = ""; +} \ No newline at end of file diff --git a/03-HTML5-APIs/js/dragAndDrop.js b/03-HTML5-APIs/js/dragAndDrop.js new file mode 100644 index 00000000..1427d82c --- /dev/null +++ b/03-HTML5-APIs/js/dragAndDrop.js @@ -0,0 +1,27 @@ +function handlerDrop(event, idToPut) { + + let htmlPut = document.getElementById(idToPut); + event.preventDefault(); + + let file = event.dataTransfer.files[0]; + let reader = new FileReader(); + + reader.readAsText(file); + + reader.onload = event => { + if(/text/.test(file.type)){ + htmlPut.innerText = event.target.result; + }else{ + console.log("Only suport files based in text"); + } + } + removeData(event); +} + +function removeData (event) { + if (event.dataTransfer.items) { + event.dataTransfer.items.clear(); + } else { + event.dataTransfer.clearData(); + } +} \ No newline at end of file diff --git a/03-HTML5-APIs/js/scripts.js b/03-HTML5-APIs/js/indexedDB.js similarity index 68% rename from 03-HTML5-APIs/js/scripts.js rename to 03-HTML5-APIs/js/indexedDB.js index 47118cd4..599d771c 100644 --- a/03-HTML5-APIs/js/scripts.js +++ b/03-HTML5-APIs/js/indexedDB.js @@ -1,7 +1,3 @@ -function clearContent(id) { - document.getElementById(id).innerText = ''; -} - function indexedDB_Suported() { let isSuported = false; @@ -33,7 +29,9 @@ function indexedDB_CreateDB(dbName, nameObjectStore) { } -function indexedDB_Save(dbName, nameObjectStore, toSave) { +function indexedDB_Save(dbName, nameObjectStore, idToSave) { + + let toSave = document.getElementById(idToSave).value; if (indexedDB_Suported) { @@ -95,44 +93,4 @@ function indexedDB_Clear(dbName, nameObjectStore) { function handleError(err) { console.log("Database error: " + err); -} - -function localStorage_Save(keyName, toSave) { - localStorage.setItem(keyName, JSON.stringify(toSave)); - console.log('The element "' + toSave + '" has saved correctly in LocalStorage.'); -} - -function localStorage_Clear(keyName) { - localStorage.removeItem(keyName); - console.log('The LocalStorage has erased correctly.'); -} - - -function handlerDrop(event, idToPut) { - - let htmlPut = document.getElementById(idToPut); - event.preventDefault(); - - let file = event.dataTransfer.files[0]; - let reader = new FileReader(); - - reader.readAsText(file); - - reader.onload = event => { - if(/text/.test(file.type)){ - htmlPut.innerText = event.target.result; - }else{ - console.log("Only suport files based in text"); - } - } - removeData(event); -} - -function removeData (event) { - if (event.dataTransfer.items) { - event.dataTransfer.items.clear(); - } else { - event.dataTransfer.clearData(); - } -} - +} \ No newline at end of file diff --git a/03-HTML5-APIs/js/localStorage.js b/03-HTML5-APIs/js/localStorage.js new file mode 100644 index 00000000..efb48c98 --- /dev/null +++ b/03-HTML5-APIs/js/localStorage.js @@ -0,0 +1,10 @@ +function localStorage_Save(keyName, idToSave) { + let toSave = document.getElementById(idToSave).value; + localStorage.setItem(keyName, JSON.stringify(toSave)); + console.log('The element "' + toSave + '" has saved correctly in LocalStorage.'); +} + +function localStorage_Clear(keyName) { + localStorage.removeItem(keyName); + console.log('The LocalStorage has erased correctly.'); +} \ No newline at end of file From 2d70e246bcf5a7d236e2a07b78d3bf0fd863210b Mon Sep 17 00:00:00 2001 From: Matias Simone Date: Tue, 30 Oct 2018 20:27:11 -0300 Subject: [PATCH 5/6] Ex3 WebSockets and fixed the function clearContent --- 03-HTML5-APIs/css/style.css | 10 +++++++++- 03-HTML5-APIs/index.html | 17 ++++++++++++++--- 03-HTML5-APIs/js/clearContent.js | 2 +- 03-HTML5-APIs/js/dragAndDrop.js | 2 +- 03-HTML5-APIs/js/socket.js | 29 +++++++++++++++++++++++++++++ 5 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 03-HTML5-APIs/js/socket.js diff --git a/03-HTML5-APIs/css/style.css b/03-HTML5-APIs/css/style.css index 13ba685d..4954d88d 100644 --- a/03-HTML5-APIs/css/style.css +++ b/03-HTML5-APIs/css/style.css @@ -6,7 +6,11 @@ body { -webkit-font-smoothing: antialiased; } -#textBio { +label { + font-weight: bold; +} + +#textCenter { text-align: center; } @@ -14,6 +18,10 @@ body { border: 5px solid green; } +#socket { + border: 5px solid red; +} + h1 { border-collapse: collapse; padding: 0; diff --git a/03-HTML5-APIs/index.html b/03-HTML5-APIs/index.html index a49115d7..3d0424b2 100644 --- a/03-HTML5-APIs/index.html +++ b/03-HTML5-APIs/index.html @@ -23,7 +23,7 @@

03-HTML5-APIs



-
+


@@ -39,11 +39,21 @@

03-HTML5-APIs

in Local Storage
-

Write or drop a file text in the Text Area.

+

Write or drop a text file in the Text Area Green.

+

This Text Area only suport files based in text, for example (text/plain , text/html , text/css)

+
+
+

+
+ +

+ +
+ +

Write or drop a text file in the Text Area Red.

This Text Area only suport files based in text, for example (text/plain , text/html , text/css)


-