diff --git a/tasks/srp/refactoring/person.html b/tasks/srp/refactoring/person.html
new file mode 100644
index 0000000..318449c
--- /dev/null
+++ b/tasks/srp/refactoring/person.html
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tasks/srp/refactoring/person.js b/tasks/srp/refactoring/person.js
index 7531fd9..94c32c6 100644
--- a/tasks/srp/refactoring/person.js
+++ b/tasks/srp/refactoring/person.js
@@ -1,41 +1,50 @@
-function Person(options) {
- options = options || {};
- this.name = options.name;
- this.url = options.url;
-
- this.$el = this.render();
- this.bindEvents();
- this.$el.appendTo('.header');
-}
-
-Person.prototype = {
- render: function () {
- var extraClass = this.isSameOrigin(this.url) ? ' b-person_origin_same' : '';
- return $('');
+var isSameOrigin = function (url) {
+ var parser = document.createElement('a');
+ parser.href = url;
+
+ return location.origin === parser.origin;
+};
+
+var Logger = {
+ log: function (msg) {
+ //yaCounter100500.params(msg);
+ console.log('debug', msg);
+ }
+};
+
+var PersonModel = Backbone.Model.extend({});
+
+var PersonView = Backbone.View.extend({
+ initialize: function (o) {
+ this.listenTo(this.model, 'change:name', this._onNameChange);
+ this.listenTo(this.model, 'change:url', this._onUrlChange);
+
+ this.template = o.template;
+ this.logger = o.logger
},
- isSameOrigin: function (url) {
- var parser = document.createElement('a');
- parser.href = url;
+ events: {
+ 'click a': '_onLinkClick'
+ },
- return location.origin === parser.origin;
+ _onNameChange: function () {
+ this.render();
},
- setName: function (name) {
- this.name = name;
- this.$el.html(this.name);
+ _onUrlChange: function () {
+ this.render();
},
- setUrl: function (url) {
- this.url = url;
- this.$el.attr('href', this.url);
- this.$el.toggleClass('b-person_origin_same', this.isSameOrigin(this.url));
+ _onLinkClick: function (e) {
+ this.logger.log('user_page_visited');
+ e.preventDefault();
},
- bindEvents: function () {
- this.$el.on('click', function () {
- yaCounter100500.params('user_page_visited');
- console.log('debug', 'user_page_visited');
- });
+ render: function() {
+ this.$el.html(this.template({
+ data: this.model.attributes,
+ isSameOrigin: isSameOrigin
+ }));
+ return this;
}
-};
+});