From d8b536b3fd6a8f2b2fc21c2beeac442bb0ee945e Mon Sep 17 00:00:00 2001 From: Sergey Gogolev Date: Thu, 8 Oct 2015 17:30:26 +0500 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 9 +++ .gitignore | 5 ++ .travis.yml | 3 + README.md | 136 +++++++++++++++++++++++++++++++++++++++++++- index.html | 3 + package.json | 10 ++++ test/common.js | 58 +++++++++++++++++++ test/getHtml.js | 18 ++++++ test/getUniqTags.js | 14 +++++ 9 files changed, 255 insertions(+), 1 deletion(-) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 index.html create mode 100644 package.json create mode 100644 test/common.js create mode 100644 test/getHtml.js create mode 100644 test/getUniqTags.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..677e36e --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0fdc6d0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.DS_Store +.git +.idea +node_modules +npm-debug.log diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..e4a0865 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - 4.1.2 diff --git a/README.md b/README.md index 31ea9a9..bff3983 100644 --- a/README.md +++ b/README.md @@ -1 +1,135 @@ -# verstka-tasks-2 +# Задача к лекции «HTML, II часть» – «Бабуленькин сервант» + +:sos: [Как создать Pull Request](https://github.com/urfu-2015/guides/blob/master/how-to-pull-request.md) +:warning: При создании PullRequest'а не забудьте указать ваши имя и фамилию. + +### Общие требования + +Мы очень хотим, чтобы код вы написали сами, а не пользовались внешними библиотеками. + +Прежде чем отправлять решение проверьте его на соответствие [общим требованиям](https://github.com/urfu-2015/guides/blob/master/html-codestyle.md). + +Когда вы создадите или обновите пулл-реквест – он частично будет проверен +автоматически. Результаты вы увидите внизу: + +Если всё плохо: +2015-10-08_1845 + +Если всё хорошо: +2015-10-08_1841 + + +Проверить HTML можно и вручную на соответствие вручную требованиям можно так: +```sh +# Устанавливаем проверяльщик +npm install + +# Проверяем +npm test + +# В результате выведутся ошибки, если они есть. +# Если какие-либо ошибки будут не понятны – смело спрашиваем у ментора. +``` + +В помощь вам, мы разместили файл `.editorconfig`. Этот файл содержит базовые +правила оформления кода (codestyle), понятные для большинства редакторов. +Прочитайте [о нём подробнее](https://github.com/urfu-2015/guides/blob/master/editorconfig.md). + +### Задача + +У моей бабуленьки есть старый сервант, где она хранит старые книги и видеокасеты +с фильмами. Она бы хотела разместить информацию о них в «этих ваших интернетах», +чтобы обмениваться с бабуленьками других внучков. + +Итак, у нас есть информация в виде текста о текущих книгах и фильмах. Вам необходимо: +- разметить его **без использования CSS**; +- дополнить книгу красивой обложкой, а автора – фотографией; +- фильмы дополнить трейлерами; +- внизу обязательно разместить удобную форму для добавления новых книг и фильмов; +- * возможно, к книгам вы захотите разместить аудио-версию, а к фильмам субтитры. +- * по некоторым книгам могут быть сняты фильмы ;) + +Собственно, текст (тщательно записанный со слов бабуленьки): + +```text + +- Война и мир. + + Тип: Книга + Издательство: АСТ, Астрель + ISBN: 5-17-006400-4,978-5-17-006400-7 + Год: 1867 г + Тип издания: Авторский сборник + Язык: Русский + Страниц: 704 стр. + Формат: ePub + Переплет: Твердый переплет + Дата размещения: 8 котобря 2015 + Жанр: Русская классика, Литература 19 века + URL: http://babulenkin-servant.com/books/war_and_peace.epub + Описание: Великий роман-эпопея Льва Толстого чудесным образом, как огромная + мозаика, сложен из тысяч картин - батальных, бальных, любовных, бытовых, + политических, философских, портретных, пейзажных, психологических... + + Автор: Лев Николаевич Толстой + Дата рождения: 16 августа 1828 + Дата смерти: 7 ноября 1910 + Место рождения: Ясная Поляна, Тульская губерния, Российская империя + Род деятельности: прозаик, публицист, философ + +- Harry Potter and the Sorcerer's Stone + + Тип: Книга + Издательство: АСТ, Астрель + ISBN: 978-0439708180 + Год: 1998 г + Язык: English + Страниц: 309 стр. + Формат: pdf + Переплет: Мягкий переплет + Дата размещения: 4 котобря 2015 + Жанр: Fantasy, Adventure, Kids & Family + URL: http://babulenkin-servant.com/books/potter.pdf + Описание: Harry Potter has no idea how famous he is. That's because he's + being raised by his miserable aunt and uncle who are terrified Harry will + learn that he's really a wizard, just as his parents were. + + Автор: J. K. Rowling + Дата рождения: 31 июля 1965 + Дата смерти: – + Место рождения: Глостершир, Англия + Род деятельности: прозаик + URL: jkrowling.com + Адрес: 50 Bedford Square, London + Email: info@jkrowlingpr.com + +- Titanic + + Тип: Фильм + Год: 1997 + Страна: США + Слоган: «Ничто на Земле не сможет разлучить их» + Режиссер: Джеймс Кэмерон + Сценарий: Джеймс Кэмерон + Продюсер: Джеймс Кэмерон, Джон Ландау, Памела Исли + Оператор: Рассел Карпентер + Композитор: Джеймс Хорнер + Художник: Питер Ламонт, Мартин Лэйн, Чарльз Дуайт Ли + Монтаж: Конрад Бафф IV, Джеймс Кэмерон, Ричард А. Харрис + Жанр: драма, мелодрама + Дата размещения: 1 котобря 2015 + URL: http://babulenkin-servant.com/films/titanic.mp4 + Описание: Молодые влюбленные Джек и Роза находят друг друга в первом и + последнем плавании «непотопляемого» Титаника. Они не могли знать, что + шикарный лайнер столкнется с айсбергом в холодных водах Северной Атлантики, + и их страстная любовь превратится в схватку со смертью. + + Автор: Джеймс Кэмерон + Дата рождения: 16 августа 1954 + Дата смерти: – + Место рождения: Капускасинг, Онтарио, Канада + Род деятельности: продюсер, режиссер, сценарист, актер + + +А ЗДЕСЬ ФОРМА ДОБАВЛЕНИЯ НОВЫХ КНИГ И ФИЛЬМОВ +``` diff --git a/index.html b/index.html new file mode 100644 index 0000000..2d780b6 --- /dev/null +++ b/index.html @@ -0,0 +1,3 @@ + + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..d9dcd14 --- /dev/null +++ b/package.json @@ -0,0 +1,10 @@ +{ + "private": true, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "mocha": "^2.3.3", + "should": "^7.1.0" + } +} diff --git a/test/common.js b/test/common.js new file mode 100644 index 0000000..e81cbbb --- /dev/null +++ b/test/common.js @@ -0,0 +1,58 @@ +'use strict'; + +require('should'); + +var html = require('./getHtml'); +var tags = require('./getUniqTags'); + +describe('Запрещенные теги.', function () { + it('Не должно быть тега ', function () { + (tags.indexOf('i') === -1).should.be.eql(true); + }); + + it('Не должно быть тега ', function () { + (tags.indexOf('b') === -1).should.be.eql(true); + }); + + it('Не должно быть тега ', function () { + (tags.indexOf('font') === -1).should.be.eql(true); + }); + + it('Не должно быть тега
', function () { + (tags.indexOf('center') === -1).should.be.eql(true); + }); + + it('Не должно быть тега ', function () { + (tags.indexOf('marquee') === -1).should.be.eql(true); + }); + + it('Не должно быть тега ', function () { + (tags.indexOf('u') === -1).should.be.eql(true); + }); + + it('Не должно быть тега ', function () { + (tags.indexOf('s') === -1).should.be.eql(true); + }); +}); + +describe('Сodestyle.', function () { + it('Не должно быть табуляций.', function () { + var hasTabs = /\t/.test(html); + + if (hasTabs) { + console.warn('Вместо табуляций следует использовать 4 пробела на 1 уровень вложенности.') + } + + hasTabs.should.be.eql(false); + }); + + describe('Запрещенные атрибуты элементов.', function () { + it('Не должно быть атрибута style.', function () { + /\<[-\w\'\"\=\s]+style\s*=[-\w\'\"\=\s]*\>/.test(html).should.be.eql(false); + }); + + it('Не должно быть атрибута border у и
.', function () { + /\<\s*(table|td)[-\w\'\"\=\s]+border\s*=(\'|\"|\d)+[-\w\'\"\=\s]*\>/.test(html).should.be.eql(false); + }); + }); +}); diff --git a/test/getHtml.js b/test/getHtml.js new file mode 100644 index 0000000..5c63075 --- /dev/null +++ b/test/getHtml.js @@ -0,0 +1,18 @@ +'use strict'; + +require('should'); + +var fs = require('fs'); +var files = fs.readdirSync('.'); + +files = files.filter(function (file) { + return fs.statSync(file).isFile() && /\.html$/.test(file); +}); + +describe('Кол-во html файлов', function () { + it('Должен быть один html-файл в проекте', function () { + files.length.should.be.eql(1); + }); +}); + +module.exports = fs.readFileSync(files[0], 'utf-8'); diff --git a/test/getUniqTags.js b/test/getUniqTags.js new file mode 100644 index 0000000..dde6fd9 --- /dev/null +++ b/test/getUniqTags.js @@ -0,0 +1,14 @@ +'use strict'; + +var html = require('./getHtml'); +var tags = []; + +html.match(/\<\s*[a-z]+/ig).forEach(function (tag) { + tag = tag.replace('<', ''); + + if (tags.indexOf(tag) === -1) { + tags.push(tag); + } +}); + +module.exports = tags;