Skip to content

Instantly share code, notes, and snippets.

@disolovyov
Created September 20, 2011 01:25
Show Gist options
  • Select an option

  • Save disolovyov/1228082 to your computer and use it in GitHub Desktop.

Select an option

Save disolovyov/1228082 to your computer and use it in GitHub Desktop.
Объектно-ориентированное программирование. Лабораторная работа 1.

Рабочие файлы

  • data.js — исходные данные для программы;
  • main.js — собственно, программа, которую мы редактируем;
  • index.html — HTML-документ, в котором «живёт» наша программа. Его следует открыть в браузере, чтобы видеть результат выполнения программы.

Задания

  • На 6: Добавить каждому человеку страну рождения, включая визуальное отображение. Страны можно придумать, а можно взять всамделишные из Википедии или найти в другой части интернета.
  • На 7: Добавить функциональность: при уменьшении зарплаты до нуля фон всего блока интерфейса одного человека должен окрашиваться в жёлтый. При повышении зарплаты фон необходимо установить обратно в белый.
  • На 8: Добавить каждому человеку короткое описание (несколько биографических предложений). Добавить третью кнопку, которая переключает видимость этого описания: показывает, либо скрывает.
  • На 9: Добавить после всех блоков людей ещё один блок, в котором будет показываться сумма зарплат. Разумеется, что при смене индивидуальных зарплат, сумма должна обновляться.
  • На 10: Добавить каждому человеку массив ключевых слов. Вывести ключевые слова всех людей в одну кучу, после блока суммы зарплат, в виде кнопок. При нажатии на одну такую кнопку показываются только те люди, которые обладают ключевым словом на кнопке. Остальные прячутся.

Текстовые редакторы

Для тех, кто всё ещё не определился, в какой программе лучше редактировать JavaScript, хороший вариант это: Sublime Text 2 и удобные настройки к нему (устанавливаются в Preferences → File Settings - User)

var getPeople = function() {
return [
{
name: 'Brendan',
surname: 'Eich',
creation: 'JavaScript'
},
{
name: 'Douglas',
surname: 'Crockford',
creation: 'JSON'
},
{
name: 'John',
surname: 'Resig',
creation: 'jQuery'
},
{
name: 'Jeremy',
surname: 'Ashkenas',
creation: 'CoffeeScript'
},
{
name: 'Lars',
surname: 'Bak',
creation: 'V8'
},
{
name: 'Ryan',
surname: 'Dahl',
creation: 'Node.js'
}
];
};
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript" src="data.js"></script>
<script type="text/javascript" src="main.js"></script>
<style type="text/css">
body {
font-family: 'Calibri', sans-serif;
}
</style>
<title>Лабораторная работа 1</title>
</head>
<body>
</body>
</html>
// Фабрика блочных элементов HTML: <div>.
// <div> является одним из HTML элементов общего назначения (вместе со <span>).
// Его особенность в том, что у него совершенно нет никаких особенностей.
// Элемент <div> не обладает ни визуальными, ни смысловыми свойствами.
// Это всего лишь некоторая обозначенная прямоугольная область интерфейса,
// прямоугольный блок. По этой причине при создании веб-приложений <div>
// повсеместно используют как фундаментальный логический кирпичик.
var makeDiv = function(str, style) {
// Создаём новый <div> в памяти и сохраняем в переменную.
var div = $('<div>');
// Добавляем созданному элементу некоторые указанные визуальные свойства.
div.css(style);
// Размещаем внутри созданного элемента текст.
// Это действие аналогично записи <div>(содержимое str)</div> в HTML.
div.text(str);
return div;
};
// Фабрика элементов кнопок.
// Мы передаём в функцию как текст кнопки, так и функцию-обработчик, которая
// будет вызвана при нажатии пользователем кнопки.
var makeButton = function(str, handler) {
// Создаём новую кнопку и сохраняем в переменную.
var btn = $('<button>');
// Устанавливаем текст кнопки.
// Это действите аналогично записи <button>(содержимое str)</button> в HTML.
btn.text(str);
// Указываем, что по нажатию на кнопку нужно запустить функцию handler.
btn.click(handler);
return btn;
};
// Фабрика интерактивных элементов интерфейса.
// Внутри этой функции мы создаём всё необходимое для работы
// кусочка интерфейса, отображающего один конкретный экземпляр человека
// (и связанные с ним данные).
var makePersonUI = function(person) {
// Создаём блок для отображения полного имени.
// Кроме размещения в нём полного имени, изменяем стиль средствами CSS.
// Следует отметить, что взрослые дяди так не делают. Всё, что касается
// внешнего вида элементов на экране, выносится в отдельный файл.
// Но в образовательных целях мы позволим себе согрешить.
var fullNameDiv = makeDiv(person.name + ' ' + person.surname, {
backgroundColor: 'gray', // Цвет фона.
color: 'white', // Цвет текста.
padding: '2px 6px', // Отступ текста от краёв прямоугольника.
fontSize: '14pt', // Размер шрифта.
fontWeight: 'bold' // Начертание шрифта.
});
// Создаём блок для отображения занятия человека.
// Делаем текст цвета неба и воды.
var creationDiv = makeDiv('Working on ' + person.creation, {
color: 'blue',
padding: '0 6px'
});
// Блок для отображения зарплаты.
var salaryDiv = makeDiv('', {
color: 'green',
padding: '0 6px'
});
// Собственно, сама зарплата в у.е.
var salary = 0;
// Функция получения зарплаты.
// Зарплату получать хорошо, вызывайте эту функцию почаще.
var getSalary = function() {
return salary;
}
// Функция назначения зарплаты.
// При установке значения меняет текст в блоке отображения зарплаты,
// а также контроллирует, чтобы зарплата не стала отрицательной.
var setSalary = function(newSalary) {
salary = newSalary;
if (salary > 0) {
salaryDiv.text('Salary: Ls ' + salary);
} else {
salary = 0;
salaryDiv.text('Working for free!');
}
};
// Функция изменения зарплаты на определённую сумму.
// Сумма может быть как положительной, так и отрицательной.
// Все операции с зарплатой производятся через приготовленные ранее
// функции getSalary и setSalary.
var changeSalary = function(amount) {
setSalary(getSalary() + amount);
}
// Создаём кнопку для повышения зарплаты.
var incButton = makeButton('Pay More', function() {
changeSalary(100);
});
// Создаём ещё одну кнопку, для понижения зарплаты.
// Понижать зарплату приходится стремительнее, чем повышать.
var decButton = makeButton('Pay Less', function() {
changeSalary(-500);
});
// Создаём главный блок. В него мы добавим все блоки и кнопки,
// заготовленные ранее.
var UI = makeDiv('', { margin: 20 });
UI.append(fullNameDiv, creationDiv, salaryDiv, incButton, decButton);
// Устанавливаем начальное значение зарплаты.
setSalary(Math.round(Math.random() * 10000) + 300);
return UI;
};
// Запускаем функцию, когда страница загрузилась
// и с ней (страницей) можно начинать работать.
jQuery(function($) {
// Достаём данные о людях в переменную people.
var people = getPeople();
// В цикле выводим одного за другим всех людей и создаём
// визуальный интерфейс для каждого из них. После чего размещаем
// этот интерфейс в теле документа средствами jQuery.
for (var i = 0; i < people.length; i++) {
var personUI = makePersonUI(people[i]);
$('body').append(personUI);
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment