diff --git a/tasks/srp/refactoring/PersonCollection.js b/tasks/srp/refactoring/PersonCollection.js
new file mode 100644
index 0000000..bba7005
--- /dev/null
+++ b/tasks/srp/refactoring/PersonCollection.js
@@ -0,0 +1,8 @@
+var Backbone = require('Backbone'),
+ Person = require('Person');
+
+var PersonCollection = Backbone.Collection.extend({
+ model: Person
+});
+
+module.export = PersonCollection;
diff --git a/tasks/srp/refactoring/PersonView.js b/tasks/srp/refactoring/PersonView.js
new file mode 100644
index 0000000..8330c21
--- /dev/null
+++ b/tasks/srp/refactoring/PersonView.js
@@ -0,0 +1,33 @@
+var Backbone = require('Backbone'),
+ rivets = require('rivets'),
+ yaCounter100500 = require('yaCounter100500');
+
+var PersonView = Backbone.View.extend({
+
+ events: {
+ "click .b-person": "handleClick"
+ },
+
+ layout: $('.header'),
+
+ initialize: function(options) {
+ var viewModel = {
+ model: options.model
+ };
+ this.logger = options.logger;
+
+ this.setElement(this.layout);
+ this.dataBindTo(viewModel);
+ },
+
+ dataBindTo: function (viewModel) {
+ return rivets.bind(this.el, viewModel);
+ },
+
+ handleClick: function () {
+ yaCounter100500.params('user_page_visited');
+ this.logger.log('debug', 'user_page_visited');
+ }
+});
+
+module.export = PersonView;
\ No newline at end of file
diff --git a/tasks/srp/refactoring/formatter.js b/tasks/srp/refactoring/formatter.js
new file mode 100644
index 0000000..5bf2cca
--- /dev/null
+++ b/tasks/srp/refactoring/formatter.js
@@ -0,0 +1,10 @@
+var rivets = require('rivets');
+
+_.extend(rivets.formatters, {
+ isSameOrigin: function (url) {
+ var $parser = $('');
+ $parser.attr('href', url);
+
+ return location.origin === $parser.origin;
+ }
+});
\ No newline at end of file
diff --git a/tasks/srp/refactoring/index.html b/tasks/srp/refactoring/index.html
new file mode 100644
index 0000000..b04b4bf
--- /dev/null
+++ b/tasks/srp/refactoring/index.html
@@ -0,0 +1,13 @@
+
+
+
+ SOLID
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tasks/srp/refactoring/index.js b/tasks/srp/refactoring/index.js
new file mode 100644
index 0000000..4bef113
--- /dev/null
+++ b/tasks/srp/refactoring/index.js
@@ -0,0 +1,10 @@
+var PersonCollection = require('PersonCollection'),
+ PersonView = require('PersonView');
+
+(function () {
+ var options = {
+ model: new PersonCollection(/*...*/),
+ logger: console
+ };
+ var view = new PersonView(options);
+})();
diff --git a/tasks/srp/refactoring/person.js b/tasks/srp/refactoring/person.js
index 7531fd9..9963c3b 100644
--- a/tasks/srp/refactoring/person.js
+++ b/tasks/srp/refactoring/person.js
@@ -1,41 +1,17 @@
function Person(options) {
options = options || {};
- this.name = options.name;
- this.url = options.url;
-
- this.$el = this.render();
- this.bindEvents();
- this.$el.appendTo('.header');
+ this.setName(options.name);
+ this.setUrl(options.url);
}
Person.prototype = {
- render: function () {
- var extraClass = this.isSameOrigin(this.url) ? ' b-person_origin_same' : '';
- return $('');
- },
-
- isSameOrigin: function (url) {
- var parser = document.createElement('a');
- parser.href = url;
-
- return location.origin === parser.origin;
- },
-
setName: function (name) {
this.name = name;
- this.$el.html(this.name);
},
setUrl: function (url) {
this.url = url;
- this.$el.attr('href', this.url);
- this.$el.toggleClass('b-person_origin_same', this.isSameOrigin(this.url));
- },
-
- bindEvents: function () {
- this.$el.on('click', function () {
- yaCounter100500.params('user_page_visited');
- console.log('debug', 'user_page_visited');
- });
}
};
+
+module.export = Person;