├── .gitignore
├── README.md
├── browser
├── React
│ ├── index.html
│ ├── index.js
│ └── index.jsx
└── Vue
│ ├── index.html
│ └── index.js
├── package.json
├── server
├── React
│ ├── build
│ │ └── index.js
│ └── src
│ │ └── index.jsx
├── Vue
│ ├── app.tpl
│ ├── index.js
│ ├── item.tpl
│ ├── list.tpl
│ └── vue.min.js
└── VueServer
│ ├── app.tpl
│ ├── index.js
│ ├── item.tpl
│ ├── list.tpl
│ └── vue-server.min.js
└── src
├── css.css
└── data.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Тесты производительности React и Vue.js
2 | Для запуска в браузере и ```io.js```
3 |
4 |
5 | ## Тесты для браузера
6 | Лежат в папке browser.
7 | Запускаются открытием ```index.html```
8 |
9 |
10 | ## Тесты для сервера
11 | Лежат в папке server
12 | Тест для Vue не работает под node.js, только под ```io.js``` (ограничение накладывает jsdom).
13 | Запускаются командой ```node index.js```
--------------------------------------------------------------------------------
/browser/React/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/browser/React/index.js:
--------------------------------------------------------------------------------
1 | var PureRenderMixin = React.addons.PureRenderMixin;
2 |
3 | var TodoItem = React.createClass({displayName: "TodoItem",
4 | mixins: [PureRenderMixin],
5 | render: function() {
6 | return (
7 | React.createElement("tbody", {className: "offers-d__item"},
8 | React.createElement("tr", {className: "offers-d__row _head"},
9 | React.createElement("td", {rowSpan: "2", className: "offers-d__cell _price"},
10 | React.createElement("div", {className: "offers-d__prices"},
11 | React.createElement("div", {className: "offers-d__price-main-h"},
12 | React.createElement("strong", {className: "offers-d__price-main"},
13 | this.props.obj.price,
14 | React.createElement("span", {className: "offers-d__rubl-icon"}, "р.")
15 | )
16 | ),
17 | React.createElement("div", {className: "offers-d__price-unit-h"},
18 | React.createElement("span", {className: "offers-d__price-unit"}, this.props.obj.price_sqm,
19 | React.createElement("span", {className: "offers-d__rubl-icon"}, "р."), "/м", React.createElement("sup", null, "2")
20 | )
21 | ),
22 | React.createElement("div", {className: "offer-avg-price"},
23 | React.createElement("span", {className: "offer-avg-price__title"}, "Средняя цена"), React.createElement("br", null),
24 | React.createElement("span", {className: "offer-avg-price__price"}, this.props.obj.price_avg),
25 | React.createElement("span", {className: "offer-avg-price__rubl-icon"}, "р.")
26 | )
27 | )
28 | ),
29 | React.createElement("td", {rowSpan: "2", className: "offers-d__cell _media"},
30 | React.createElement("div", {className: "offers-d__media-h"},
31 | React.createElement("div", {className: "offers-d__photo-h"},
32 | React.createElement("div", null,
33 | React.createElement("img", {alt: "", className: "offers-d__photo", src: "http://static.ngs.ru/cache/realty/photo/c9858b08d70778dd2c92b3cd3f0411a0_155_124_c.jpg"}),
34 | React.createElement("span", {className: "offers-d__photo-count"},
35 | React.createElement("span", {className: "offers-d__photo-count-text"}, this.props.obj.photo.length, " фото")
36 | )
37 | )
38 | ),
39 | React.createElement("div", {className: "offers-d__lifetime-h"},
40 | React.createElement("span", {className: "offers-d__lifetime"}, "3 часа на N1")
41 | ),
42 | React.createElement("div", {className: "offers-d__special-mark"}, "Премиум")
43 | )
44 | ),
45 | React.createElement("td", {className: "offers-d__cell _address"},
46 | React.createElement("div", {className: "offers-d__address-h"},
47 | React.createElement("a", {href: "/view/5413172/", className: "offers-d__address-dynamic"}, this.props.obj.address.join(', ')),
48 | React.createElement("span", {className: "offers-d__address-link-h"}, " ", React.createElement("button", {title: "Открыть в новом окне", className: "offers-d__address-link"}, "Открыть в новом окне"))
49 | ),
50 | React.createElement("div", {className: "offers-d__meta-description"},
51 | React.createElement("div", {className: "offers-d__district-h"},
52 | React.createElement("span", {className: "offers-d__district"}, this.props.obj.district)
53 | ),
54 | React.createElement("div", {className: "offers-d__show-on-map-h"},
55 | React.createElement("span", {className: "offers-d__show-on-map"},
56 | React.createElement("span", {className: "offers-d__show-on-map-text"}, "Показать на карте")
57 | )
58 | )
59 | )
60 | ),
61 | React.createElement("td", {className: "offers-d__cell _area"},
62 | React.createElement("div", null,
63 | React.createElement("div", {className: "offers-d__area-h"},
64 | React.createElement("span", {className: "offers-d__area"}, this.props.obj.area.join(' / '), " м", React.createElement("sup", null, "2"))
65 | ),
66 | React.createElement("ul", {className: "offers-d__about-object"},
67 | React.createElement("li", {className: "offers-d__about-object-item"},
68 | React.createElement("span", null, "балкон")
69 | )
70 | )
71 | )
72 | ),
73 | React.createElement("td", {className: "offers-d__cell _floor"},
74 | React.createElement("div", {className: "offers-d__floor-h"},
75 | React.createElement("span", {className: "offers-d__floor"},
76 | React.createElement("span", null, this.props.obj.floor.join(' / '), " этаж")
77 | )
78 | ),
79 | React.createElement("ul", {className: "offers-d__about-object"},
80 | React.createElement("li", {title: "кирпич", className: "offers-d__about-object-item"}, "кирпич")
81 | )
82 | ),
83 | React.createElement("td", {rowSpan: "2", className: "offers-d__cell _actions"},
84 | React.createElement("ul", {className: "offers-d__actions"},
85 | React.createElement("li", {className: "offers-d__actions-item-h"},
86 | React.createElement("span", {title: "Скрыть из списка", className: "offers-d__actions-item _discard"})
87 | )
88 | )
89 | )
90 | ),
91 | React.createElement("tr", {className: "offers-d__row _addition"},
92 | React.createElement("td", {colSpan: "3", className: "offers-d__cell _addition"},
93 | React.createElement("section", {className: "offers-d__short-description"},
94 | this.props.obj.description
95 | )
96 | )
97 | ),
98 | React.createElement("tr", {className: "offers-d__row _comment"},
99 | React.createElement("td", {colSpan: "6", className: "offers-d__cell _comment"},
100 | React.createElement("div", {className: "offers-d__comment-h"}
101 | )
102 | )
103 | )
104 | )
105 | );
106 | }
107 | });
108 |
109 | var TodoList = React.createClass({displayName: "TodoList",
110 | mixins: [PureRenderMixin],
111 | render: function() {
112 | return (
113 | React.createElement("table", {className: "offers-d__list"},
114 |
115 | this.props.items.map(function(object, i) {
116 | return React.createElement(TodoItem, {obj: object, key: i});
117 | })
118 |
119 | )
120 | );
121 | }
122 | });
123 | var TodoApp = React.createClass({displayName: "TodoApp",
124 | mixins: [PureRenderMixin],
125 | getInitialState: function() {
126 | return {items: items, text: ''};
127 | },
128 | onSubmit: function(e) {
129 | console.time('click')
130 | e.preventDefault();
131 | var nextItems = this.state.items.concat([getItemData()]);
132 | var nextText = '';
133 | this.setState({items: nextItems, text: nextText}, function () {
134 | console.timeEnd('click')
135 | });
136 | },
137 | refreshList: function() {
138 | var items2 = [];
139 | for (var i = 250 - 1; i >= 0; i--) {
140 | items2.push(getItemData());
141 | };
142 |
143 | console.time('refreshList')
144 | this.setState({items: items2}, function () {
145 | window.requestAnimationFrame(function() {
146 | console.timeEnd('refreshList')
147 | });
148 | });
149 | },
150 | render: function() {
151 | return (
152 | React.createElement("div", null,
153 | React.createElement("button", {onClick: this.refreshList}, "Передёнуть список"),
154 | React.createElement("form", {onSubmit: this.onSubmit},
155 | React.createElement("button", null, 'Add #' + (this.state.items.length + 1))
156 | ),
157 | React.createElement(TodoList, {items: this.state.items})
158 | )
159 | );
160 | }
161 | });
162 |
163 | console.time('init')
164 | React.render(React.createElement(TodoApp, null), document.getElementById('app'));
165 | window.requestAnimationFrame(function() {
166 | window.requestAnimationFrame(function() {
167 | console.timeEnd('init')
168 | });
169 | });
170 |
--------------------------------------------------------------------------------
/browser/React/index.jsx:
--------------------------------------------------------------------------------
1 | var PureRenderMixin = React.addons.PureRenderMixin;
2 |
3 | var TodoItem = React.createClass({
4 | mixins: [PureRenderMixin],
5 | render: function() {
6 | return (
7 |
8 |
9 |
10 |
11 |
12 |
13 | {this.props.obj.price}
14 | р.
15 |
16 |
17 |
18 | {this.props.obj.price_sqm}
19 | р./м2
20 |
21 |
22 |
23 | Средняя цена
24 | {this.props.obj.price_avg}
25 | р.
26 |
27 |
28 | |
29 |
30 |
31 |
32 |
33 | 
34 |
35 | {this.props.obj.photo.length} фото
36 |
37 |
38 |
39 |
40 | 3 часа на N1
41 |
42 | Премиум
43 |
44 | |
45 |
46 |
50 |
51 |
52 | {this.props.obj.district}
53 |
54 |
55 |
56 | Показать на карте
57 |
58 |
59 |
60 | |
61 |
62 |
63 |
64 | {this.props.obj.area.join(' / ')} м2
65 |
66 |
67 | -
68 | балкон
69 |
70 |
71 |
72 | |
73 |
74 |
75 |
76 | {this.props.obj.floor.join(' / ')} этаж
77 |
78 |
79 |
82 | |
83 |
84 |
89 | |
90 |
91 |
92 |
93 |
94 | {this.props.obj.description}
95 |
96 | |
97 |
98 |
99 |
100 |
101 |
102 | |
103 |
104 |
105 | );
106 | }
107 | });
108 |
109 | var TodoList = React.createClass({
110 | mixins: [PureRenderMixin],
111 | render: function() {
112 | return (
113 |
114 | {
115 | this.props.items.map(function(object, i) {
116 | return ;
117 | })
118 | }
119 |
120 | );
121 | }
122 | });
123 | var TodoApp = React.createClass({
124 | mixins: [PureRenderMixin],
125 | getInitialState: function() {
126 | return {items: items, text: ''};
127 | },
128 | onSubmit: function(e) {
129 | console.time('click')
130 | e.preventDefault();
131 | var nextItems = this.state.items.concat([getItemData()]);
132 | var nextText = '';
133 | this.setState({items: nextItems, text: nextText}, function () {
134 | console.timeEnd('click')
135 | });
136 | },
137 | refreshList: function() {
138 | var items2 = [];
139 | for (var i = 250 - 1; i >= 0; i--) {
140 | items2.push(getItemData());
141 | };
142 |
143 | console.time('refreshList')
144 | this.setState({items: items2}, function () {
145 | window.requestAnimationFrame(function() {
146 | console.timeEnd('refreshList')
147 | });
148 | });
149 | },
150 | render: function() {
151 | return (
152 |
153 |
154 |
157 |
158 |
159 | );
160 | }
161 | });
162 |
163 | console.time('init')
164 | React.render(, document.getElementById('app'));
165 | window.requestAnimationFrame(function() {
166 | window.requestAnimationFrame(function() {
167 | console.timeEnd('init')
168 | });
169 | });
--------------------------------------------------------------------------------
/browser/Vue/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
19 |
117 |
118 |
119 |
120 |
121 |
--------------------------------------------------------------------------------
/browser/Vue/index.js:
--------------------------------------------------------------------------------
1 | Vue.component('list', {
2 | props: ['items'],
3 | template: '',
4 | components: {
5 | item: {
6 | replace: false,
7 | template: document.getElementById('item-tpl').innerHTML
8 | }
9 | }
10 | });
11 |
12 |
13 | Vue.config.async = false;
14 | console.time('init')
15 | new Vue({
16 | el: '#app',
17 | data: function() {
18 | return {items: items};
19 | },
20 | filters: {
21 | join: function(value, del) {
22 | return value.join(del ? del.replace(/\'/, '') : ', ');
23 | }
24 | },
25 |
26 | methods: {
27 | refreshList: function() {
28 | var items2 = [];
29 | for (var i = 250 - 1; i >= 0; i--) {
30 | items2.push(getItemData());
31 | };
32 |
33 | console.time('refreshList')
34 | this.items = items2;
35 | window.requestAnimationFrame(function() {
36 | console.timeEnd('refreshList')
37 | });
38 | },
39 | onSubmit: function(event) {
40 | var self = this;
41 | console.time('click');
42 | event.preventDefault();
43 | this.items.push(getItemData());
44 | window.requestAnimationFrame(function() {
45 | console.timeEnd('click');
46 | });
47 | }
48 | }
49 | });
50 |
51 | window.requestAnimationFrame(function() {
52 | window.requestAnimationFrame(function() {
53 | console.timeEnd('init')
54 | });
55 | });
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Perfomance",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "data.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "https://github.com/fullfs/Perfomance.git"
12 | },
13 | "author": "",
14 | "license": "ISC",
15 | "bugs": {
16 | "url": "https://github.com/fullfs/Perfomance/issues"
17 | },
18 | "homepage": "https://github.com/fullfs/Perfomance",
19 | "dependencies": {
20 | "express": "^4.13.1",
21 | "handlebars": "^3.0.3",
22 | "jsdom": "^5.6.1",
23 | "react": "^0.13.3"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/server/React/build/index.js:
--------------------------------------------------------------------------------
1 | var React = require('react');
2 |
3 |
4 | var getItemData = function (argument) {
5 | return {
6 | id: (Math.random() * 1000000).toFixed(),
7 | price: (Math.random() * 1000000).toFixed(),
8 | price_sqm: (Math.random() * 100000).toFixed(),
9 | price_avg: (Math.random() * 1000000).toFixed(),
10 | photo: [{}, {}, {}],
11 | address: ['3-к', 'Блюхера', '14'],
12 | district: 'Ленинский район',
13 | area: [42, 21, 15],
14 | floor: [4, 5],
15 | description: 'Поступило в продажу очень редкое предложение! Современная квартира-студия. Нестандартная планировка, качественный ремонт, приятные соседи и месторасположение - это очень приятное сочетание!!!'
16 | };
17 | }
18 |
19 | var items = [];
20 |
21 | for (var i = 250 - 1; i >= 0; i--) {
22 | items.push(getItemData());
23 | };
24 |
25 |
26 | var TodoItem = React.createClass({displayName: "TodoItem",
27 | render: function() {
28 | return (
29 | React.createElement("tbody", {className: "offers-d__item"},
30 | React.createElement("tr", {className: "offers-d__row _head"},
31 | React.createElement("td", {rowSpan: "2", className: "offers-d__cell _price"},
32 | React.createElement("div", {className: "offers-d__prices"},
33 | React.createElement("div", {className: "offers-d__price-main-h"},
34 | React.createElement("strong", {className: "offers-d__price-main"},
35 | this.props.obj.price,
36 | React.createElement("span", {className: "offers-d__rubl-icon"}, "р.")
37 | )
38 | ),
39 | React.createElement("div", {className: "offers-d__price-unit-h"},
40 | React.createElement("span", {className: "offers-d__price-unit"}, this.props.obj.price_sqm,
41 | React.createElement("span", {className: "offers-d__rubl-icon"}, "р."), "/м", React.createElement("sup", null, "2")
42 | )
43 | ),
44 | React.createElement("div", {className: "offer-avg-price"},
45 | React.createElement("span", {className: "offer-avg-price__title"}, "Средняя цена"), React.createElement("br", null),
46 | React.createElement("span", {className: "offer-avg-price__price"}, this.props.obj.price_avg),
47 | React.createElement("span", {className: "offer-avg-price__rubl-icon"}, "р.")
48 | )
49 | )
50 | ),
51 | React.createElement("td", {rowSpan: "2", className: "offers-d__cell _media"},
52 | React.createElement("div", {className: "offers-d__media-h"},
53 | React.createElement("div", {className: "offers-d__photo-h"},
54 | React.createElement("div", null,
55 | React.createElement("img", {alt: "", className: "offers-d__photo", src: "http://static.ngs.ru/cache/realty/photo/c9858b08d70778dd2c92b3cd3f0411a0_155_124_c.jpg"}),
56 | React.createElement("span", {className: "offers-d__photo-count"},
57 | React.createElement("span", {className: "offers-d__photo-count-text"}, this.props.obj.photo.length, " фото")
58 | )
59 | )
60 | ),
61 | React.createElement("div", {className: "offers-d__lifetime-h"},
62 | React.createElement("span", {className: "offers-d__lifetime"}, "3 часа на N1")
63 | ),
64 | React.createElement("div", {className: "offers-d__special-mark"}, "Премиум")
65 | )
66 | ),
67 | React.createElement("td", {className: "offers-d__cell _address"},
68 | React.createElement("div", {className: "offers-d__address-h"},
69 | React.createElement("a", {href: "/view/5413172/", className: "offers-d__address-dynamic"}, this.props.obj.address.join(', ')),
70 | React.createElement("span", {className: "offers-d__address-link-h"}, " ", React.createElement("button", {title: "Открыть в новом окне", className: "offers-d__address-link"}, "Открыть в новом окне"))
71 | ),
72 | React.createElement("div", {className: "offers-d__meta-description"},
73 | React.createElement("div", {className: "offers-d__district-h"},
74 | React.createElement("span", {className: "offers-d__district"}, this.props.obj.district)
75 | ),
76 | React.createElement("div", {className: "offers-d__show-on-map-h"},
77 | React.createElement("span", {className: "offers-d__show-on-map"},
78 | React.createElement("span", {className: "offers-d__show-on-map-text"}, "Показать на карте")
79 | )
80 | )
81 | )
82 | ),
83 | React.createElement("td", {className: "offers-d__cell _area"},
84 | React.createElement("div", null,
85 | React.createElement("div", {className: "offers-d__area-h"},
86 | React.createElement("span", {className: "offers-d__area"}, this.props.obj.area.join(' / '), " м", React.createElement("sup", null, "2"))
87 | ),
88 | React.createElement("ul", {className: "offers-d__about-object"},
89 | React.createElement("li", {className: "offers-d__about-object-item"},
90 | React.createElement("span", null, "балкон")
91 | )
92 | )
93 | )
94 | ),
95 | React.createElement("td", {className: "offers-d__cell _floor"},
96 | React.createElement("div", {className: "offers-d__floor-h"},
97 | React.createElement("span", {className: "offers-d__floor"},
98 | React.createElement("span", null, this.props.obj.floor.join(' / '), " этаж")
99 | )
100 | ),
101 | React.createElement("ul", {className: "offers-d__about-object"},
102 | React.createElement("li", {title: "кирпич", className: "offers-d__about-object-item"}, "кирпич")
103 | )
104 | ),
105 | React.createElement("td", {rowSpan: "2", className: "offers-d__cell _actions"},
106 | React.createElement("ul", {className: "offers-d__actions"},
107 | React.createElement("li", {className: "offers-d__actions-item-h"},
108 | React.createElement("span", {title: "Скрыть из списка", className: "offers-d__actions-item _discard"})
109 | )
110 | )
111 | )
112 | ),
113 | React.createElement("tr", {className: "offers-d__row _addition"},
114 | React.createElement("td", {colSpan: "3", className: "offers-d__cell _addition"},
115 | React.createElement("section", {className: "offers-d__short-description"},
116 | this.props.obj.description
117 | )
118 | )
119 | ),
120 | React.createElement("tr", {className: "offers-d__row _comment"},
121 | React.createElement("td", {colSpan: "6", className: "offers-d__cell _comment"},
122 | React.createElement("div", {className: "offers-d__comment-h"}
123 | )
124 | )
125 | )
126 | )
127 | );
128 | }
129 | });
130 |
131 | var TodoList = React.createClass({displayName: "TodoList",
132 | render: function() {
133 | return (
134 | React.createElement("table", {className: "offers-d__list"},
135 |
136 | this.props.items.map(function(object, i) {
137 | return React.createElement(TodoItem, {obj: object, key: i});
138 | })
139 |
140 | )
141 | );
142 | }
143 | });
144 | var TodoApp = React.createClass({displayName: "TodoApp",
145 | getInitialState: function() {
146 | return {items: items, text: ''};
147 | },
148 | onSubmit: function(e) {
149 | console.time('click')
150 | e.preventDefault();
151 | var nextItems = this.state.items.concat([getItemData()]);
152 | var nextText = '';
153 | this.setState({items: nextItems, text: nextText}, function () {
154 | console.timeEnd('click')
155 | });
156 | },
157 | refreshList: function() {
158 | var items2 = [];
159 | for (var i = 250 - 1; i >= 0; i--) {
160 | items2.push(getItemData());
161 | };
162 |
163 | console.time('refreshList')
164 | this.setState({items: items2}, function () {
165 | window.requestAnimationFrame(function() {
166 | console.timeEnd('refreshList')
167 | });
168 | });
169 | },
170 | render: function() {
171 | var divStyle = {
172 | width: '900px',
173 | margin: '0 auto'
174 | };
175 | return (
176 | React.createElement("div", {id: "app", style: divStyle},
177 | React.createElement("div", null,
178 | React.createElement("button", {onClick: this.refreshList}, "Передёнуть список"),
179 | React.createElement("form", {onSubmit: this.onSubmit},
180 | React.createElement("button", null, 'Add #' + (this.state.items.length + 1))
181 | ),
182 | React.createElement(TodoList, {items: this.state.items})
183 | )
184 | )
185 | );
186 | }
187 | });
188 |
189 |
190 |
191 |
192 | var express = require('express');
193 |
194 | var app = express();
195 | app.use(function(req, res) {
196 | console.time('render')
197 | var html = React.renderToString(React.createElement(TodoApp, null));
198 | console.timeEnd('render')
199 | res.send(html)
200 | });
201 |
202 | app.listen(3000, function() {
203 | console.log('express server at http://localhost:3000');
204 | });
205 |
--------------------------------------------------------------------------------
/server/React/src/index.jsx:
--------------------------------------------------------------------------------
1 | var React = require('react');
2 |
3 |
4 | var getItemData = function (argument) {
5 | return {
6 | id: (Math.random() * 1000000).toFixed(),
7 | price: (Math.random() * 1000000).toFixed(),
8 | price_sqm: (Math.random() * 100000).toFixed(),
9 | price_avg: (Math.random() * 1000000).toFixed(),
10 | photo: [{}, {}, {}],
11 | address: ['3-к', 'Блюхера', '14'],
12 | district: 'Ленинский район',
13 | area: [42, 21, 15],
14 | floor: [4, 5],
15 | description: 'Поступило в продажу очень редкое предложение! Современная квартира-студия. Нестандартная планировка, качественный ремонт, приятные соседи и месторасположение - это очень приятное сочетание!!!'
16 | };
17 | }
18 |
19 | var items = [];
20 |
21 | for (var i = 250 - 1; i >= 0; i--) {
22 | items.push(getItemData());
23 | };
24 |
25 |
26 | var TodoItem = React.createClass({
27 | render: function() {
28 | return (
29 |
30 |
31 |
32 |
33 |
34 |
35 | {this.props.obj.price}
36 | р.
37 |
38 |
39 |
40 | {this.props.obj.price_sqm}
41 | р./м2
42 |
43 |
44 |
45 | Средняя цена
46 | {this.props.obj.price_avg}
47 | р.
48 |
49 |
50 | |
51 |
52 |
53 |
54 |
55 | 
56 |
57 | {this.props.obj.photo.length} фото
58 |
59 |
60 |
61 |
62 | 3 часа на N1
63 |
64 | Премиум
65 |
66 | |
67 |
68 |
72 |
73 |
74 | {this.props.obj.district}
75 |
76 |
77 |
78 | Показать на карте
79 |
80 |
81 |
82 | |
83 |
84 |
85 |
86 | {this.props.obj.area.join(' / ')} м2
87 |
88 |
89 | -
90 | балкон
91 |
92 |
93 |
94 | |
95 |
96 |
97 |
98 | {this.props.obj.floor.join(' / ')} этаж
99 |
100 |
101 |
104 | |
105 |
106 |
111 | |
112 |
113 |
114 |
115 |
116 | {this.props.obj.description}
117 |
118 | |
119 |
120 |
121 |
122 |
123 |
124 | |
125 |
126 |
127 | );
128 | }
129 | });
130 |
131 | var TodoList = React.createClass({
132 | render: function() {
133 | return (
134 |
135 | {
136 | this.props.items.map(function(object, i) {
137 | return ;
138 | })
139 | }
140 |
141 | );
142 | }
143 | });
144 | var TodoApp = React.createClass({
145 | getInitialState: function() {
146 | return {items: items, text: ''};
147 | },
148 | onSubmit: function(e) {
149 | console.time('click')
150 | e.preventDefault();
151 | var nextItems = this.state.items.concat([getItemData()]);
152 | var nextText = '';
153 | this.setState({items: nextItems, text: nextText}, function () {
154 | console.timeEnd('click')
155 | });
156 | },
157 | refreshList: function() {
158 | var items2 = [];
159 | for (var i = 250 - 1; i >= 0; i--) {
160 | items2.push(getItemData());
161 | };
162 |
163 | console.time('refreshList')
164 | this.setState({items: items2}, function () {
165 | window.requestAnimationFrame(function() {
166 | console.timeEnd('refreshList')
167 | });
168 | });
169 | },
170 | render: function() {
171 | var divStyle = {
172 | width: '900px',
173 | margin: '0 auto'
174 | };
175 | return (
176 |
177 |
178 |
179 |
182 |
183 |
184 |
185 | );
186 | }
187 | });
188 |
189 |
190 |
191 |
192 | var express = require('express');
193 |
194 | var app = express();
195 | app.use(function(req, res) {
196 | console.time('render')
197 | var html = React.renderToString();
198 | console.timeEnd('render')
199 | res.send(html)
200 | });
201 |
202 | app.listen(3000, function() {
203 | console.log('express server at http://localhost:3000');
204 | });
--------------------------------------------------------------------------------
/server/Vue/app.tpl:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/server/Vue/index.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var app = express();
3 | var jsdom = require('jsdom');
4 | var fs = require('fs');
5 | var path = require('path');
6 | var compilerSrc = fs.readFileSync(__dirname + '/vue.min.js');
7 |
8 | var getItemData = function (argument) {
9 | return {
10 | id: (Math.random() * 1000000).toFixed(),
11 | price: (Math.random() * 1000000).toFixed(),
12 | price_sqm: (Math.random() * 100000).toFixed(),
13 | price_avg: (Math.random() * 1000000).toFixed(),
14 | photo: [{}, {}, {}],
15 | address: ['3-к', 'Блюхера', '14'],
16 | district: 'Ленинский район',
17 | area: [42, 21, 15],
18 | floor: [4, 5],
19 | description: 'Поступило в продажу очень редкое предложение! Современная квартира-студия. Нестандартная планировка, качественный ремонт, приятные соседи и месторасположение - это очень приятное сочетание!!!'
20 | };
21 | }
22 |
23 | var items = [];
24 |
25 | for (var i = 250 - 1; i >= 0; i--) {
26 | items.push(getItemData());
27 | };
28 |
29 |
30 |
31 |
32 | var ComponentList = {
33 | paramAttributes: ['items'],
34 | template: fs.readFileSync(__dirname + '/list.tpl', 'utf-8').replace(/\n|\r|\t/g, '').replace(/ +/g, ' '),
35 | components: {
36 | item: {
37 | replace: false,
38 | template: fs.readFileSync(__dirname + '/item.tpl', 'utf-8').replace(/\n|\r|\t/g, '').replace(/ +/g, ' ')
39 | }
40 | }
41 | };
42 |
43 | var appTpl = fs.readFileSync(__dirname + '/app.tpl', 'utf-8').replace(/\n|\r|\t/g, '').replace(/ +/g, ' ');
44 |
45 |
46 |
47 |
48 | app.get('/', function(req, res) {
49 | console.time('render')
50 | jsdom.env({
51 | html: '' + appTpl + '',
52 | src: [compilerSrc],
53 | done: function (err, window) {
54 | var Vue = window.Vue;
55 | Vue.config.async = false;
56 |
57 |
58 | var vm = new Vue({
59 | el: window.document.body,
60 | data: function() {
61 | return {items: items};
62 | },
63 | filters: {
64 | join: function(value, del) {
65 | return value.join(del ? del.replace(/\'/, '') : ', ');
66 | }
67 | },
68 |
69 | components: {
70 | 'my-list': ComponentList
71 | },
72 |
73 | methods: {
74 |
75 | refreshList: function() {
76 | var items2 = [];
77 | for (var i = 250 - 1; i >= 0; i--) {
78 | items2.push(getItemData());
79 | };
80 |
81 | console.time('refreshList')
82 | this.items = items2;
83 | window.requestAnimationFrame(function() {
84 | console.timeEnd('refreshList')
85 | });
86 | },
87 | onSubmit: function(event) {
88 | var self = this;
89 | console.time('click');
90 | event.preventDefault();
91 | this.items.push(getItemData());
92 | window.requestAnimationFrame(function() {
93 | console.timeEnd('click');
94 | });
95 | }
96 | }
97 | });
98 |
99 | res.send(window.document.body.innerHTML);
100 | console.timeEnd('render')
101 | }
102 | });
103 | });
104 |
105 | var server = app.listen(3000, function() {
106 | var host = server.address().address;
107 | var port = server.address().port;
108 |
109 | console.log('App listening at http://%s:%s', host, port);
110 | });
111 |
--------------------------------------------------------------------------------
/server/Vue/item.tpl:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{item.price}}р.
6 |
7 |
8 | {{item.price_sqm}}р./м2
9 |
10 |
11 | Средняя цена
12 | {{item.price_avg}}
13 | р.
14 |
15 |
16 | |
17 |
18 |
32 | |
33 |
34 |
38 |
48 | |
49 |
50 |
51 |
52 | {{item.area | join ' / '}} м2
53 |
54 |
55 | -
56 | балкон
57 |
58 |
59 |
60 | |
61 |
62 |
63 |
64 | {{item.floor | join ' / '}} этаж
65 |
66 |
67 |
70 | |
71 |
72 |
77 | |
78 |
79 |
80 |
81 |
82 | {{item.description}}
83 |
84 | |
85 |
86 |
--------------------------------------------------------------------------------
/server/Vue/list.tpl:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/server/Vue/vue.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Vue.js v0.11.0
3 | * (c) 2014 Evan You
4 | * Released under the MIT License.
5 | */
6 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):"object"==typeof exports?exports.Vue=e():t.Vue=e()}(this,function(){return function(t){function e(n){if(i[n])return i[n].exports;var r=i[n]={exports:{},id:n,loaded:!1};return t[n].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){function n(t){this._init(t)}var r=i(1),s=r.extend;s(n,i(2)),n.options={directives:i(8),filters:i(9),partials:{},transitions:{},components:{}};var o=n.prototype;Object.defineProperty(o,"$data",{get:function(){return this._data},set:function(t){this._setData(t)}}),s(o,i(10)),s(o,i(11)),s(o,i(12)),s(o,i(13)),s(o,i(3)),s(o,i(4)),s(o,i(5)),s(o,i(6)),s(o,i(7)),t.exports=r.Vue=n},function(t,e,i){var n=i(14),r=n.extend;r(e,n),r(e,i(15)),r(e,i(16)),r(e,i(17)),r(e,i(18))},function(t,e,i){function n(t){return new Function("return function "+s.camelize(t,!0)+" (options) { this._init(options) }")()}function r(t){c.forEach(function(e){t[e]=function(t,i){return i?void(this.options[e+"s"][t]=i):this.options[e+"s"][t]}}),t.component=function(t,e){return e?(s.isPlainObject(e)&&(e.name=t,e=s.Vue.extend(e)),void(this.options.components[t]=e)):this.options.components[t]}}var s=i(1),o=i(19);e.util=s,e.nextTick=s.nextTick,e.config=i(20),e.cid=0;var a=1;e.extend=function(t){t=t||{};var e=this,i=n(t.name||"VueComponent");return i.prototype=Object.create(e.prototype),i.prototype.constructor=i,i.cid=a++,i.options=o(e.options,t),i["super"]=e,i.extend=e.extend,r(i),i},e.use=function(t){var e=s.toArray(arguments,1);return e.unshift(this),"function"==typeof t.install?t.install.apply(t,e):t.apply(null,e),this};var c=["directive","filter","partial","transition"];r(e)},function(t,e,i){var n=i(1),r=i(21),s=i(41),o=i(42),a=i(43),c=i(44),h=/[^|]\|[^|]/;e.$get=function(t){var e=c.parse(t);return e?e.get.call(this,this):void 0},e.$set=function(t,e){var i=c.parse(t,!0);i&&i.set&&i.set.call(this,this,e)},e.$add=function(t,e){this._data.$add(t,e)},e.$delete=function(t){this._data.$delete(t)},e.$watch=function(t,e,i,n){var s=this,o=i?t+"**deep**":t,a=s._userWatchers[o],c=function(t,i){e.call(s,t,i)};return a?a.addCb(c):a=s._userWatchers[o]=new r(s,t,c,null,!1,i),n&&c(a.value),function(){a.removeCb(c),a.active||(s._userWatchers[o]=null)}},e.$eval=function(t){if(h.test(t)){var e=a.parse(t)[0];return e.filters?n.applyFilters(this.$get(e.expression),n.resolveFilters(this,e.filters).read,this):this.$get(e.expression)}return this.$get(t)},e.$interpolate=function(t){var e=o.parse(t),i=this;return e?1===e.length?i.$eval(e[0].value):e.map(function(t){return t.tag?i.$eval(t.value):t.value}).join(""):t},e.$log=function(t){var e=t?s.get(this,t):this._data;console.log(JSON.parse(JSON.stringify(e)))}},function(t,e,i){function n(t,e,i,n,s){var o=!n&&!t._isAttached&&!h.inDoc(t.$el);t._isBlock?r(t,e,i,s):i(t.$el,e,t,s),o&&t._callHook("attached")}function r(t,e,i,n){for(var r,s=t._blockStart,o=t._blockEnd;r!==o;)r=s.nextSibling,i(s,e,t),s=r;i(o,e,t,n)}function s(t){return"string"==typeof t?document.querySelector(t):t}function o(t,e,i,n){e.appendChild(t),n&&n()}function a(t,e,i,n){h.before(t,e),n&&n()}function c(t,e,i){h.remove(t),i&&i()}var h=i(1),l=i(45);e.$appendTo=function(t,e,i){t=s(t);var r=!h.inDoc(t),a=i===!1||r?o:l.append;return n(this,t,a,r,e),this},e.$prependTo=function(t,e,i){return t=s(t),t.hasChildNodes()?this.$before(t.firstChild,e,i):this.$appendTo(t,e,i),this},e.$before=function(t,e,i){t=s(t);var r=!h.inDoc(t),o=i===!1||r?a:l.before;return n(this,t,o,r,e),this},e.$after=function(t,e,i){return t=s(t),t.nextSibling?this.$before(t.nextSibling,e,i):this.$appendTo(t.parentNode,e,i),this},e.$remove=function(t,e){var i=this._isAttached&&h.inDoc(this.$el);i||(e=!1);var n,s=this,a=function(){i&&s._callHook("detached"),t&&t()};return this._isBlock&&!this._blockFragment.hasChildNodes()?(n=e===!1?o:l.removeThenAppend,r(this,this._blockFragment,n,a)):(n=e===!1?c:l.remove)(this.$el,this,a),this}},function(t,e,i){function n(t,e,i){var n=t.$parent;if(n&&i&&!s.test(e))for(;n;)n._eventsCount[e]=(n._eventsCount[e]||0)+i,n=n.$parent}var r=i(1);e.$on=function(t,e){return(this._events[t]||(this._events[t]=[])).push(e),n(this,t,1),this},e.$once=function(t,e){function i(){n.$off(t,i),e.apply(this,arguments)}var n=this;return i.fn=e,this.$on(t,i),this},e.$off=function(t,e){var i;if(!arguments.length){if(this.$parent)for(t in this._events)i=this._events[t],i&&n(this,t,-i.length);return this._events={},this}if(i=this._events[t],!i)return this;if(1===arguments.length)return n(this,t,-i.length),this._events[t]=null,this;for(var r,s=i.length;s--;)if(r=i[s],r===e||r.fn===e){n(this,t,-1),i.splice(s,1);break}return this},e.$emit=function(t){this._eventCancelled=!1;var e=this._events[t];if(e){for(var i=arguments.length-1,n=new Array(i);i--;)n[i]=arguments[i+1];i=0,e=e.length>1?r.toArray(e):e;for(var s=e.length;s>i;i++)e[i].apply(this,n)===!1&&(this._eventCancelled=!0)}return this},e.$broadcast=function(t){if(this._eventsCount[t]){var e=this._children;if(e)for(var i=0,n=e.length;n>i;i++){var r=e[i];r.$emit.apply(r,arguments),r._eventCancelled||r.$broadcast.apply(r,arguments)}return this}},e.$dispatch=function(){for(var t=this.$parent;t;)t.$emit.apply(t,arguments),t=t._eventCancelled?null:t.$parent;return this};var s=/^hook:/},function(t,e,i){var n=i(1);e.$addChild=function(t,e){e=e||n.Vue,t=t||{};var i,r=this,s=void 0!==t.inherit?t.inherit:e.options.inherit;if(s){var o=r._childCtors;if(o||(o=r._childCtors={}),i=o[e.cid],!i){var a=e.options.name,c=a?n.camelize(a,!0):"VueComponent";i=new Function("return function "+c+" (options) {this.constructor = "+c+";this._init(options) }")(),i.options=e.options,i.prototype=this,o[e.cid]=i}}else i=e;t._parent=r,t._root=r.$root;var h=new i(t);return this._children||(this._children=[]),this._children.push(h),h}},function(t,e,i){function n(){this._isAttached=!0,this._isReady=!0,this._callHook("ready")}function r(t){t._data.__ob__.removeVm(t),t._data=t._watchers=t._userWatchers=t._watcherList=t.$el=t.$parent=t.$root=t._children=t._bindings=t._directives=null,t._isDestroyed=!0,t._callHook("destroyed"),t.$off()}var s=i(1),o=i(46);e.$mount=function(t){if(!this._isCompiled){if(t){if("string"==typeof t){if(t=document.querySelector(t),!t)return}}else t=document.createElement("div");return this._compile(t),this._isCompiled=!0,this._callHook("compiled"),s.inDoc(this.$el)?(this._callHook("attached"),this._initDOMHooks(),n.call(this)):(this._initDOMHooks(),this.$once("hook:attached",n)),this}},e.$destroy=function(t){if(!this._isBeingDestroyed){this._callHook("beforeDestroy"),this._isBeingDestroyed=!0;var e,i=this.$parent;if(i&&!i._isBeingDestroyed&&(e=i._children.indexOf(this),i._children.splice(e,1)),this._children)for(e=this._children.length;e--;)this._children[e].$destroy();for(e=this._directives.length;e--;)this._directives[e]._teardown();for(e in this._userWatchers)this._userWatchers[e].teardown();this.$el&&(this.$el.__vue__=null);var n=this;t&&this.$el?this.$remove(function(){r(n)}):r(n)}},e.$compile=function(t){return o(t,this.$options,!0)(this,t)}},function(t,e,i){e.text=i(22),e.html=i(23),e.attr=i(24),e.show=i(25),e["class"]=i(26),e.el=i(27),e.ref=i(28),e.cloak=i(29),e.style=i(30),e.partial=i(31),e.transition=i(32),e.on=i(33),e.model=i(48),e.component=i(34),e.repeat=i(35),e["if"]=i(36),e["with"]=i(37)},function(t,e,i){var n=i(1);e.json=function(t,e){return JSON.stringify(t,null,Number(e)||2)},e.capitalize=function(t){return t||0===t?(t=t.toString(),t.charAt(0).toUpperCase()+t.slice(1)):""},e.uppercase=function(t){return t||0===t?t.toString().toUpperCase():""},e.lowercase=function(t){return t||0===t?t.toString().toLowerCase():""};var r=/(\d{3})(?=\d)/g;e.currency=function(t,e){if(t=parseFloat(t),!t&&0!==t)return"";e=e||"$";var i=Math.floor(Math.abs(t)).toString(),n=i.length%3,s=n>0?i.slice(0,n)+(i.length>3?",":""):"",o="."+t.toFixed(2).slice(-2);return(0>t?"-":"")+e+s+i.slice(n).replace(r,"$1,")+o},e.pluralize=function(t){var e=n.toArray(arguments,1);return e.length>1?e[t%10-1]||e[e.length-1]:e[0]+(1===t?"":"s")};var s={enter:13,tab:9,"delete":46,up:38,left:37,right:39,down:40,esc:27};e.key=function(t,e){if(t){var i=s[e];return i||(i=parseInt(e,10)),function(e){return e.keyCode===i?t.call(this,e):void 0}}},n.extend(e,i(38))},function(t,e,i){var n=i(19);e._init=function(t){t=t||{},this.$el=null,this.$parent=t._parent,this.$root=t._root||this,this.$={},this.$$={},this._watcherList=[],this._watchers={},this._userWatchers={},this._directives=[],this._isVue=!0,this._events={},this._eventsCount={},this._eventCancelled=!1,this._isBlock=!1,this._blockStart=this._blockEnd=null,this._isCompiled=this._isDestroyed=this._isReady=this._isAttached=this._isBeingDestroyed=!1,this._children=this._childCtors=null,t=this.$options=n(this.constructor.options,t,this),this._data=t.data||{},this._initScope(),this._initEvents(),this._callHook("created"),t.el&&this.$mount(t.el)}},function(t,e,i){function n(t,e,i){if(i){var n,s,o,c;for(s in i)if(n=i[s],a.isArray(n))for(o=0,c=n.length;c>o;o++)r(t,e,s,n[o]);else r(t,e,s,n)}}function r(t,e,i,n){var r=typeof n;if("function"===r)t[e](i,n);else if("string"===r){var s=t.$options.methods,o=s&&s[n];o&&t[e](i,o)}}function s(){this._isAttached=!0;var t=this._children;if(t)for(var e=0,i=t.length;i>e;e++){var n=t[e];!n._isAttached&&c(n.$el)&&n._callHook("attached")}}function o(){this._isAttached=!1;var t=this._children;if(t)for(var e=0,i=t.length;i>e;e++){var n=t[e];n._isAttached&&!c(n.$el)&&n._callHook("detached")}}var a=i(1),c=a.inDoc;e._initEvents=function(){var t=this.$options;n(this,"$on",t.events),n(this,"$watch",t.watch)},e._initDOMHooks=function(){this.$on("hook:attached",s),this.$on("hook:detached",o)},e._callHook=function(t){var e=this.$options[t];if(e)for(var i=0,n=e.length;n>i;i++)e[i].call(this);this.$emit("hook:"+t)}},function(t,e,i){function n(){}var r=i(1),s=i(49),o=i(39);e._initScope=function(){this._initData(),this._initComputed(),this._initMethods(),this._initMeta()},e._initData=function(){for(var t,e=this._data,i=Object.keys(e),n=i.length;n--;)t=i[n],r.isReserved(t)||this._proxy(t);s.create(e).addVm(this)},e._setData=function(t){t=t||{};var e=this._data;this._data=t;var i,n,o;for(i=Object.keys(e),o=i.length;o--;)n=i[o],r.isReserved(n)||n in t||this._unproxy(n);for(i=Object.keys(t),o=i.length;o--;)n=i[o],this.hasOwnProperty(n)||r.isReserved(n)||this._proxy(n);e.__ob__.removeVm(this),s.create(t).addVm(this),this._digest()},e._proxy=function(t){var e=this;Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(i){e._data[t]=i}})},e._unproxy=function(t){delete this[t]},e._digest=function(){for(var t=this._watcherList.length;t--;)this._watcherList[t].update();var e,i=this._children;if(i)for(t=i.length;t--;)e=i[t],e.$options.inherit&&e._digest()},e._initComputed=function(){var t=this.$options.computed;if(t)for(var e in t){var i=t[e],s={enumerable:!0,configurable:!0};"function"==typeof i?(s.get=r.bind(i,this),s.set=n):(s.get=i.get?r.bind(i.get,this):n,s.set=i.set?r.bind(i.set,this):n),Object.defineProperty(this,e,s)}},e._initMethods=function(){var t=this.$options.methods;if(t)for(var e in t)this[e]=r.bind(t[e],this)},e._initMeta=function(){var t=this.$options._meta;if(t)for(var e in t)this._defineMeta(e,t[e])},e._defineMeta=function(t,e){var i=new o;Object.defineProperty(this,t,{enumerable:!0,configurable:!0,get:function(){return s.target&&s.target.addDep(i),e},set:function(t){t!==e&&(e=t,i.notify())}})}},function(t,e,i){var n=i(1),r=i(40),s=i(46),o=i(47);e._compile=function(t){var e=this.$options;if(e._linker)this._initElement(t),e._linker(this,t);else{var i=t;t=o(t,e),this._initElement(t);var r=s(t,e);r(this,t),e.replace&&n.replace(i,t)}return t},e._initElement=function(t){t instanceof DocumentFragment?(this._isBlock=!0,this.$el=this._blockStart=t.firstChild,this._blockEnd=t.lastChild,this._blockFragment=t):this.$el=t,this.$el.__vue__=this,this._callHook("beforeCompile")},e._bindDir=function(t,e,i,n,s){this._directives.push(new r(t,e,this,i,n,s))}},function(t,e){e.isReserved=function(t){var e=t.charCodeAt(0);return 36===e||95===e},e.toString=function(t){return null==t?"":t.toString()},e.toNumber=function(t){return isNaN(t)||null===t||"boolean"==typeof t?t:Number(t)},e.stripQuotes=function(t){var e=t.charCodeAt(0),i=t.charCodeAt(t.length-1);return e!==i||34!==e&&39!==e?!1:t.slice(1,-1)};var i=/[-_](\w)/g,n=/(?:^|[-_])(\w)/g;e.camelize=function(t,e){var r=e?n:i;return t.replace(r,function(t,e){return e?e.toUpperCase():""})},e.bind=function(t,e){return function(){return t.apply(e,arguments)}},e.toArray=function(t,e){e=e||0;for(var i=t.length-e,n=new Array(i);i--;)n[i]=t[i+e];return n},e.extend=function(t,e){for(var i in e)t[i]=e[i]},e.isObject=function(t){return t&&"object"==typeof t};var r=Object.prototype.toString;e.isPlainObject=function(t){return"[object Object]"===r.call(t)},e.isArray=function(t){return Array.isArray(t)},e.define=function(t,e,i,n){Object.defineProperty(t,e,{value:i,enumerable:!!n,writable:!0,configurable:!0})}},function(t,e){e.hasProto="__proto__"in{};var i=Object.prototype.toString,n=e.inBrowser="undefined"!=typeof window&&"[object Object]"!==i.call(window),r=n?window.requestAnimationFrame||window.webkitRequestAnimationFrame||setTimeout:setTimeout;if(e.nextTick=function(t,e){e?r(function(){t.call(e)},0):r(t,0)},e.isIE9=n&&navigator.userAgent.indexOf("MSIE 9.0")>0,n&&!e.isIE9){var s=void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend,o=void 0===window.onanimationend&&void 0!==window.onwebkitanimationend;e.transitionProp=s?"WebkitTransition":"transition",e.transitionEndEvent=s?"webkitTransitionEnd":"transitionend",e.animationProp=o?"WebkitAnimation":"animation",e.animationEndEvent=o?"webkitAnimationEnd":"animationend"}},function(t,e,i){var n=i(20),r="undefined"!=typeof document&&document.documentElement;e.inDoc=function(t){return r&&r.contains(t)},e.attr=function(t,e){e=n.prefix+e;var i=t.getAttribute(e);return null!==i&&t.removeAttribute(e),i},e.before=function(t,e){e.parentNode.insertBefore(t,e)},e.after=function(t,i){i.nextSibling?e.before(t,i.nextSibling):i.parentNode.appendChild(t)},e.remove=function(t){t.parentNode.removeChild(t)},e.prepend=function(t,i){i.firstChild?e.before(t,i.firstChild):i.appendChild(t)},e.replace=function(t,e){var i=t.parentNode;i&&i.replaceChild(e,t)},e.copyAttributes=function(t,e){if(t.hasAttributes())for(var i=t.attributes,n=0,r=i.length;r>n;n++){var s=i[n];e.setAttribute(s.name,s.value)}},e.on=function(t,e,i){t.addEventListener(e,i)},e.off=function(t,e,i){t.removeEventListener(e,i)},e.addClass=function(t,e){if(t.classList)t.classList.add(e);else{var i=" "+(t.getAttribute("class")||"")+" ";i.indexOf(" "+e+" ")<0&&t.setAttribute("class",(i+e).trim())}},e.removeClass=function(t,e){if(t.classList)t.classList.remove(e);else{for(var i=" "+(t.getAttribute("class")||"")+" ",n=" "+e+" ";i.indexOf(n)>=0;)i=i.replace(n," ");t.setAttribute("class",i.trim())}}},function(t,e,i){i(18);e.resolveFilters=function(t,e,i){if(e){var n=i||{};return e.forEach(function(e){var i=t.$options.filters[e.name];if(i){var r,s,o=e.args;"function"==typeof i?r=i:(r=i.read,s=i.write),r&&(n.read||(n.read=[]),n.read.push(function(e){return o?r.apply(t,[e].concat(o)):r.call(t,e)})),s&&(n.write||(n.write=[]),n.write.push(function(e,i){return o?s.apply(t,[e,i].concat(o)):s.call(t,e,i)}))}}),n}},e.applyFilters=function(t,e,i,n){if(!e)return t;for(var r=0,s=e.length;s>r;r++)t=e[r].call(i,t,n);return t}},function(t,e,i){i(20)},function(t,e,i){function n(t){if(t){var e;for(var i in t)e=t[i],r.isPlainObject(e)&&(e.name=i,t[i]=r.Vue.extend(e))}}var r=i(1),s=r.extend,o=Object.create(null);o.data=function(t,e,i){if(!i){if(e&&"function"!=typeof e)return;return e||t}var n="function"==typeof e?e.call(i):e,r="function"==typeof t?t.call(i):void 0;if(n){for(var s in r)n.hasOwnProperty(s)||n.$add(s,r[s]);return n}return r},o.el=function(t,e,i){if(i||!e||"function"==typeof e){var n=e||t;return i&&"function"==typeof n?n.call(i):n}},o.created=o.ready=o.attached=o.detached=o.beforeCompile=o.compiled=o.beforeDestroy=o.destroyed=o.paramAttributes=function(t,e){return e?t?t.concat(e):r.isArray(e)?e:[e]:t},o.directives=o.filters=o.partials=o.transitions=o.components=function(t,e,i,n){var o=Object.create(i&&i.$parent?i.$parent.$options[n]:r.Vue.options[n]);if(t)for(var a,c=Object.keys(t),h=c.length;h--;)a=c[h],o[a]=t[a];return e&&s(o,e),o},o.watch=o.events=function(t,e){if(!e)return t;if(!t)return e;var i={};s(i,t);for(var n in e){var r=i[n],o=e[n];i[n]=r?r.concat(o):[o]}return i},o.methods=o.computed=function(t,e){if(!e)return t;if(!t)return e;var i=Object.create(t);return s(i,e),i};var a=function(t,e){return void 0===e?t:e};t.exports=function(t,e,i){function r(t,e,n){var r=o[n]||a;c[n]=r(t,e,i,n)}n(e.components);var s,c={};for(s in t)r(t[s],e[s],s);for(s in e)t.hasOwnProperty(s)||r(t[s],e[s],s);var h=e.mixins;if(h)for(var l=0,u=h.length;u>l;l++)for(s in h[l])r(c[s],h[l][s],s);return c}},function(t){t.exports={prefix:"v-",debug:!1,silent:!1,proto:!0,interpolate:!0,async:!0,_delimitersChanged:!0};var e=["{{","}}"];Object.defineProperty(t.exports,"delimiters",{get:function(){return e},set:function(t){e=t,this._delimitersChanged=!0}})},function(t,e,i){function n(t,e,i,n,r,s){this.vm=t,t._watcherList.push(this),this.expression=e,this.cbs=[i],this.id=++l,this.active=!0,this.deep=s,this.deps=Object.create(null),this.readFilters=n&&n.read,this.writeFilters=n&&n.write;var o=a.parse(e,r);this.getter=o.get,this.setter=o.set,this.value=this.get()}var r=i(1),s=i(20),o=i(49),a=i(44),c=i(50),h=new c,l=0,u=n.prototype;u.addDep=function(t){var e=t.id;this.newDeps[e]||(this.newDeps[e]=t,this.deps[e]||(this.deps[e]=t,t.addSub(this)))},u.get=function(){this.beforeGet();var t,e=this.vm;try{t=this.getter.call(e,e)}catch(i){}return this.deep&&JSON.stringify(t),t=r.applyFilters(t,this.readFilters,e),this.afterGet(),t},u.set=function(t){var e=this.vm;t=r.applyFilters(t,this.writeFilters,e,this.value);try{this.setter.call(e,e,t)}catch(i){}},u.beforeGet=function(){o.target=this,this.newDeps={}},u.afterGet=function(){o.target=null;for(var t in this.deps)this.newDeps[t]||this.deps[t].removeSub(this);this.deps=this.newDeps},u.update=function(){s.async?h.push(this):this.run()},u.run=function(){if(this.active){var t=this.get();if("object"==typeof t&&null!==t||t!==this.value){var e=this.value;this.value=t;for(var i=this.cbs,n=0,r=i.length;r>n;n++){i[n](t,e);var s=r-i.length;s&&(n-=s,r-=s)}}}},u.addCb=function(t){this.cbs.push(t)},u.removeCb=function(t){var e=this.cbs;if(e.length>1){var i=e.indexOf(t);i>-1&&e.splice(i,1)}else t===e[0]&&this.teardown()},u.teardown=function(){if(this.active){if(!this.vm._isBeingDestroyed){var t=this.vm._watcherList;t.splice(t.indexOf(this))}for(var e in this.deps)this.deps[e].removeSub(this);this.active=!1,this.vm=this.cbs=this.value=null}},t.exports=n},function(t,e,i){var n=i(1);t.exports={bind:function(){this.attr=3===this.el.nodeType?"nodeValue":"textContent"},update:function(t){this.el[this.attr]=n.toString(t)}}},function(t,e,i){var n=i(1),r=i(51);t.exports={bind:function(){8===this.el.nodeType&&(this.nodes=[])},update:function(t){t=n.toString(t),this.nodes?this.swap(t):this.el.innerHTML=t},swap:function(t){for(var e=this.nodes.length;e--;)n.remove(this.nodes[e]);var i=r.parse(t,!0);this.nodes=n.toArray(i.childNodes),n.before(i,this.el)}}},function(t){function e(t){t||0===t?this.el.setAttribute(this.arg,t):this.el.removeAttribute(this.arg)}function i(t){null!=t?this.el.setAttributeNS(n,this.arg,t):this.el.removeAttributeNS(n,"href")}var n="http://www.w3.org/1999/xlink",r=/^xlink:/;t.exports={priority:850,bind:function(){var t=this.arg;this.update=r.test(t)?i:e}}},function(t,e,i){var n=i(45);t.exports=function(t){var e=this.el;n.apply(e,t?1:-1,function(){e.style.display=t?"":"none"},this.vm)}},function(t,e,i){var n=i(1),r=n.addClass,s=n.removeClass;t.exports=function(t){if(this.arg){var e=t?r:s;e(this.el,this.arg)}else this.lastVal&&s(this.el,this.lastVal),t&&(r(this.el,t),this.lastVal=t)}},function(t){t.exports={isLiteral:!0,bind:function(){this.vm.$$[this.expression]=this.el},unbind:function(){delete this.vm.$$[this.expression]}}},function(t,e,i){i(1);t.exports={isLiteral:!0,bind:function(){this.el===this.vm.$el&&(this.owner=this.vm.$parent,this.owner.$[this.expression]=this.vm)},unbind:function(){this.owner.$[this.expression]===this.vm&&delete this.owner.$[this.expression]}}},function(t,e,i){var n=i(20);t.exports={bind:function(){var t=this.el;this.vm.$once("hook:compiled",function(){t.removeAttribute(n.prefix+"cloak")})}}},function(t){var e=["-webkit-","-moz-","-ms-"],i=/!important;?$/;t.exports={bind:function(){var t=this.arg;t&&("$"===t.charAt(0)&&(t=t.slice(1),this.prefixed=!0),this.prop=t)},update:function(t){var n=this.prop;if(null!=t&&(t+=""),n){var r=i.test(t)?"important":"";if(r&&(t=t.replace(i,"").trim()),this.el.style.setProperty(n,t,r),this.prefixed)for(var s=e.length;s--;)this.el.style.setProperty(e[s]+n,t,r)}else this.el.style.cssText=t}}},function(t,e,i){var n=i(1),r=i(51),s=i(45);t.exports={isLiteral:!0,bind:function(){var t=this.el;this.start=document.createComment("v-partial-start"),this.end=document.createComment("v-partial-end"),8!==t.nodeType&&(t.innerHTML=""),"TEMPLATE"===t.tagName||8===t.nodeType?n.replace(t,this.end):t.appendChild(this.end),n.before(this.start,this.end),this._isDynamicLiteral||this.compile(this.expression)},update:function(t){this.teardown(),this.compile(t)},compile:function(t){var e=this.vm.$options.partials[t];if(e){var i=this.vm,n=r.parse(e,!0),o=i.$compile(n);this.decompile=function(){o(),s.blockRemove(this.start,this.end,i)},s.blockAppend(n,this.end,i)}},teardown:function(){this.decompile&&(this.decompile(),this.decompile=null)}}},function(t){t.exports={priority:1e3,isLiteral:!0,bind:function(){this.el.__v_trans={id:this.expression}}}},function(t,e,i){var n=i(1);t.exports={acceptStatement:!0,priority:700,bind:function(){if("IFRAME"===this.el.tagName&&"load"!==this.arg){var t=this;this.iframeBind=function(){n.on(t.el.contentWindow,t.arg,t.handler)},n.on(this.el,"load",this.iframeBind)}},update:function(t){if("function"==typeof t){this.reset();var e=this.vm;this.handler=function(i){i.targetVM=e,e.$event=i;var n=t(i);return e.$event=null,n},this.iframeBind?this.iframeBind():n.on(this.el,this.arg,this.handler)}},reset:function(){var t=this.iframeBind?this.el.contentWindow:this.el;this.handler&&n.off(t,this.arg,this.handler)},unbind:function(){this.reset(),n.off(this.el,"load",this.iframeBind)}}},function(t,e,i){var n=i(1),r=i(51);t.exports={isLiteral:!0,bind:function(){this.el.__vue__||(this.ref=document.createComment("v-component"),n.replace(this.el,this.ref),this.checkKeepAlive(),this.parentLinker=this.el._parentLinker,this._isDynamicLiteral||(this.resolveCtor(this.expression),this.build()))},checkKeepAlive:function(){this.keepAlive=this.el.hasAttribute("keep-alive"),this.keepAlive&&(this.el.removeAttribute("keep-alive"),this.cache={})},resolveCtor:function(t){this.ctorId=t,this.Ctor=this.vm.$options.components[t]},build:function(){if(this.keepAlive){var t=this.cache[this.ctorId];if(t)return this.childVM=t,void t.$before(this.ref)}var e=this.vm;if(this.Ctor&&!this.childVM){if(this.childVM=e.$addChild({el:r.clone(this.el)},this.Ctor),this.parentLinker){var i=e._directives.length,n=this.childVM.$options.inherit?this.childVM:e;this.parentLinker(n,this.childVM.$el),this.parentDirs=e._directives.slice(i)}this.keepAlive&&(this.cache[this.ctorId]=this.childVM),this.childVM.$before(this.ref)}},unbuild:function(t){var e=this.childVM;if(e){if(this.keepAlive)t&&e.$remove();else{e.$destroy(t);var i=this.parentDirs;if(i)for(var n=i.length;n--;)i[n]._teardown()}this.childVM=null}},update:function(t){this.unbuild(!0),t&&(this.resolveCtor(t),this.build())},unbind:function(){this.keepAlive=!1,this.unbuild()}}},function(t,e,i){function n(t,e){for(var i=(t._blockEnd||t.$el).nextSibling;!i.__vue__&&i!==e;)i=i.nextSibling;return i.__vue__}function r(t){if(!o.isPlainObject(t))return t;for(var e,i=Object.keys(t),n=i.length,r=new Array(n);n--;)e=i[n],r[n]={key:e,value:t[e]};return this.converted=!0,r}function s(t){for(var e=-1,i=new Array(t);++eo;o++)i=t[o],r=h?i.value:i,s=!f&&this.getVm(r),s?(s._reused=!0,s.$index=o,h&&(s.$key=i.key),c&&(u?s[u]=r:s._setData(r))):(s=this.build(i,o),s._new=!0),d[o]=s,f&&s.$before(l);if(f)return d;for(o=0,a=e.length;a>o;o++)s=e[o],s._reused||(this.uncacheVm(s),s.$destroy(!0));var p,v;for(o=d.length;o--;)s=d[o],p=d[o+1],p?s._reused?(v=n(s,l),v!==p&&s.$before(p.$el,null,!1)):s.$before(p.$el):s._reused||s.$before(l),s._new=!1,s._reused=!1;return d},build:function(t,e){var i=t,n={$index:e};this.converted&&(n.$key=i.key);var r=this.converted?t.value:t,s=this.arg,o=!a(r)||s;t=o?{}:r,s?t[s]=r:o&&(n.$value=r);var c=this.Ctor||this.resolveCtor(t,n),h=this.vm.$addChild({el:l.clone(this.template),_linker:this._linker,_meta:n,data:t,inherit:this.inherit},c);return this.cacheVm(r,h),h},resolveCtor:function(t,e){var i,n=Object.create(this.vm);for(i in t)o.define(n,i,t[i]);for(i in e)o.define(n,i,e[i]);var r=this.ctorGetter.call(n,n),s=this.vm.$options.components[r];return s},unbind:function(){if(this.childId&&delete this.vm.$[this.childId],this.vms)for(var t,e=this.vms.length;e--;)t=this.vms[e],this.uncacheVm(t),t.$destroy()},cacheVm:function(t,e){var i,n=this.idKey,r=this.cache;n?(i=t[n],r[i]||(r[i]=e)):a(t)?(i=this.id,t.hasOwnProperty(i)?null===t[i]&&(t[i]=e):o.define(t,this.id,e)):r[t]?r[t].push(e):r[t]=[e],e._raw=t},getVm:function(t){if(this.idKey)return this.cache[t[this.idKey]];if(a(t))return t[this.id];var e=this.cache[t];if(e){for(var i=0,n=e[i];n&&(n._reused||n._new);)n=e[++i];return n}},uncacheVm:function(t){var e=t._raw;this.idKey?this.cache[e[this.idKey]]=null:a(e)?(e[this.id]=null,t._raw=null):this.cache[e].pop()}}},function(t,e,i){var n=i(1),r=i(46),s=i(51),o=i(45);t.exports={bind:function(){var t=this.el;t.__vue__?this.invalid=!0:(this.start=document.createComment("v-if-start"),this.end=document.createComment("v-if-end"),n.replace(t,this.end),n.before(this.start,this.end),"TEMPLATE"===t.tagName?this.template=s.parse(t,!0):(this.template=document.createDocumentFragment(),this.template.appendChild(t)),this.linker=r(this.template,this.vm.$options,!0))},update:function(t){this.invalid||(t?this.insert():this.teardown())},insert:function(){if(!this.decompile){var t=this.vm,e=s.clone(this.template),i=this.linker(t,e);this.decompile=function(){i(),o.blockRemove(this.start,this.end,t)},o.blockAppend(e,this.end,t)}},teardown:function(){this.decompile&&(this.decompile(),this.decompile=null)}}},function(t,e,i){var n=(i(1),i(21));t.exports={priority:900,bind:function(){var t=this.vm;if(this.el!==t.$el);else if(t.$parent){var e=this.arg;this.watcher=new n(t.$parent,this.expression,e?function(i){t.$set(e,i)}:function(e){t.$data=e});var i=this.watcher.value;e?t.$set(e,i):t.$data=i}else;},unbind:function(){this.watcher&&this.watcher.teardown()}}},function(t,e,i){function n(t,e){if(r.isObject(t)){for(var i in t)if(n(t[i],e))return!0}else if(null!=t)return t.toString().toLowerCase().indexOf(e)>-1}var r=i(1),s=i(41);e.filterBy=function(t,e,i,o){i&&"in"!==i&&(o=i);var a=r.stripQuotes(e)||this.$get(e);return a?(a=a.toLowerCase(),o=o&&(r.stripQuotes(o)||this.$get(o)),t.filter(function(t){return o?n(s.get(t,o),a):n(t,a)})):t},e.orderBy=function(t,e,i){var n=r.stripQuotes(e)||this.$get(e);if(!n)return t;var o=1;return i&&("-1"===i?o=-1:33===i.charCodeAt(0)?(i=i.slice(1),o=this.$get(i)?1:-1):o=this.$get(i)?-1:1),t.slice().sort(function(t,e){return t=s.get(t,n),e=s.get(e,n),t===e?0:t>e?o:-o})}},function(t){function e(){this.id=++i,this.subs=[]}var i=0,n=e.prototype;n.addSub=function(t){this.subs.push(t)},n.removeSub=function(t){if(this.subs.length){var e=this.subs.indexOf(t);e>-1&&this.subs.splice(e,1)}},n.notify=function(){for(var t=0,e=this.subs.length;e>t;t++)this.subs[t].update()},t.exports=e},function(t,e,i){function n(t,e,i,n,s,o){this.name=t,this.el=e,this.vm=i,this.raw=n.raw,this.expression=n.expression,this.arg=n.arg,this.filters=r.resolveFilters(i,n.filters),this._linker=o,this._locked=!1,this._bound=!1,this._bind(s)}var r=i(1),s=i(20),o=i(21),a=i(42),c=i(44),h=n.prototype;h._bind=function(t){if("cloak"!==this.name&&this.el.removeAttribute&&this.el.removeAttribute(s.prefix+this.name),"function"==typeof t?this.update=t:r.extend(this,t),this._watcherExp=this.expression,this._checkDynamicLiteral(),this.bind&&this.bind(),this.update&&this._watcherExp&&(!this.isLiteral||this._isDynamicLiteral)&&!this._checkStatement()){var e=this.vm._watchers[this.raw],i=this,n=this._update=function(t,e){i._locked||i.update(t,e)};e?e.addCb(n):e=this.vm._watchers[this.raw]=new o(this.vm,this._watcherExp,n,this.filters,this.twoWay),this._watcher=e,null!=this._initValue?e.set(this._initValue):this.update(e.value)}this._bound=!0},h._checkDynamicLiteral=function(){var t=this.expression;if(t&&this.isLiteral){var e=a.parse(t);if(e){var i=a.tokensToExp(e);this.expression=this.vm.$get(i),this._watcherExp=i,this._isDynamicLiteral=!0}}},h._checkStatement=function(){var t=this.expression;if(t&&this.acceptStatement&&!c.pathTestRE.test(t)){var e=c.parse(t).get,i=this.vm,n=function(){e.call(i,i)};return this.filters&&(n=r.applyFilters(n,this.filters.read,i)),this.update(n),!0}},h._teardown=function(){if(this._bound){this.unbind&&this.unbind();var t=this._watcher;t&&t.active&&(t.removeCb(this._update),t.active||(this.vm._watchers[this.raw]=null)),this._bound=!1,this.vm=this.el=this._watcher=null}},h.set=function(t,e){if(this.twoWay&&(e&&(this._locked=!0),this._watcher.set(t),e)){var i=this;r.nextTick(function(){i._locked=!1})}},t.exports=n},function(t,e,i){function n(){}function r(t){if(void 0===t)return"eof";var e=t.charCodeAt(0);switch(e){case 91:case 93:case 46:case 34:case 39:case 48:return t;case 95:case 36:return"ident";case 32:case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"ws"}return e>=97&&122>=e||e>=65&&90>=e?"ident":e>=49&&57>=e?"number":"else"}function s(t){function e(){var e=t[d+1];return"inSingleQuote"===p&&"'"===e||"inDoubleQuote"===p&&'"'===e?(d++,s=e,v.append(),!0):void 0}for(var i,s,o,a,c,h,l,f=[],d=-1,p="beforePath",v={push:function(){void 0!==o&&(f.push(o),o=void 0)},append:function(){void 0===o?o=s:o+=s}};p;)if(d++,i=t[d],"\\"!==i||!e()){if(a=r(i),l=u[p],c=l[a]||l["else"]||"error","error"===c)return;
7 | if(p=c[0],h=v[c[1]]||n,s=void 0===c[2]?i:c[2],h(),"afterPath"===p)return f}}function o(t){return l.test(t)?"."+t:+t===t>>>0?"["+t+"]":'["'+t.replace(/"/g,'\\"')+'"]'}var a=i(1),c=i(52),h=new c(1e3),l=/^[$_a-zA-Z]+[\w$]*$/,u={beforePath:{ws:["beforePath"],ident:["inIdent","append"],"[":["beforeElement"],eof:["afterPath"]},inPath:{ws:["inPath"],".":["beforeIdent"],"[":["beforeElement"],eof:["afterPath"]},beforeIdent:{ws:["beforeIdent"],ident:["inIdent","append"]},inIdent:{ident:["inIdent","append"],0:["inIdent","append"],number:["inIdent","append"],ws:["inPath","push"],".":["beforeIdent","push"],"[":["beforeElement","push"],eof:["afterPath","push"]},beforeElement:{ws:["beforeElement"],0:["afterZero","append"],number:["inIndex","append"],"'":["inSingleQuote","append",""],'"':["inDoubleQuote","append",""]},afterZero:{ws:["afterElement","push"],"]":["inPath","push"]},inIndex:{0:["inIndex","append"],number:["inIndex","append"],ws:["afterElement"],"]":["inPath","push"]},inSingleQuote:{"'":["afterElement"],eof:"error","else":["inSingleQuote","append"]},inDoubleQuote:{'"':["afterElement"],eof:"error","else":["inDoubleQuote","append"]},afterElement:{ws:["afterElement"],"]":["inPath","push"]}};e.compileGetter=function(t){var e="try{return o"+t.map(o).join("")+"}catch(e){};";return new Function("o",e)},e.parse=function(t){var i=h.get(t);return i||(i=s(t),i&&(i.get=e.compileGetter(i),h.put(t,i))),i},e.get=function(t,i){return i=e.parse(i),i?i.get(t):void 0},e.set=function(t,i,n){if("string"==typeof i&&(i=e.parse(i)),!i||!a.isObject(t))return!1;for(var r,s,o=0,c=i.length-1;c>o;o++)r=t,s=i[o],t=t[s],a.isObject(t)||(t={},r.$add(s,t));return s=i[o],s in t?t[s]=n:t.$add(s,n),!0}},function(t,e,i){function n(t){return t.replace(v,"\\$&")}function r(){d._delimitersChanged=!1;var t=d.delimiters[0],e=d.delimiters[1];l=t.charAt(0),u=e.charAt(e.length-1);var i=n(l),r=n(u),s=n(t),o=n(e);c=new RegExp(i+"?"+s+"(.+?)"+o+r+"?","g"),h=new RegExp("^"+i+s+".*"+o+r+"$"),a=new f(1e3)}function s(t,e,i){return t.tag?e&&t.oneTime?'"'+e.$eval(t.value)+'"':i?t.value:o(t.value):'"'+t.value+'"'}function o(t){if(m.test(t)){var e=p.parse(t)[0];if(e.filters){t=e.expression;for(var i=0,n=e.filters.length;n>i;i++){var r=e.filters[i],s=r.args?',"'+r.args.join('","')+'"':"";t='this.$options.filters["'+r.name+'"].apply(this,['+t+s+"])"}return t}return"("+t+")"}return"("+t+")"}var a,c,h,l,u,f=i(52),d=i(20),p=i(43),v=/[-.*+?^${}()|[\]\/\\]/g;e.parse=function(t){d._delimitersChanged&&r();var e=a.get(t);if(e)return e;if(!c.test(t))return null;for(var i,n,s,o,l,u,f=[],p=c.lastIndex=0;i=c.exec(t);)n=i.index,n>p&&f.push({value:t.slice(p,n)}),o=i[1].charCodeAt(0),l=42===o,u=62===o,s=l||u?i[1].slice(1):i[1],f.push({tag:!0,value:s.trim(),html:h.test(i[0]),oneTime:l,partial:u}),p=n+i[0].length;return p1?t.map(function(t){return s(t,e)}).join("+"):s(t[0],e,!0)};var m=/[^|]\|[^|]/},function(t,e,i){function n(){_.raw=s.slice(p,a).trim(),void 0===_.expression?_.expression=s.slice(v,a).trim():b!==p&&r(),(0===a||_.expression)&&m.push(_)}function r(){var t,e=s.slice(b,a).trim();if(e){t={};var i=e.match(k);t.name=i[0],t.args=i.length>1?i.slice(1):null}t&&(_.filters=_.filters||[]).push(t),b=a+1}var s,o,a,c,h,l,u,f,d,p,v,m,_,b,g,y=i(1),w=i(52),$=new w(1e3),x=/^[^\{\?]+$|^'[^']*'$|^"[^"]*"$/,k=/[^\s'"]+|'[^']+'|"[^"]+"/g;e.parse=function(t){var e=$.get(t);if(e)return e;for(s=t,h=l=!1,u=f=d=p=v=0,b=0,m=[],_={},g=null,a=0,c=s.length;c>a;a++)if(o=s.charCodeAt(a),h)39===o&&(h=!h);else if(l)34===o&&(l=!l);else if(44!==o||d||u||f)if(58!==o||_.expression||_.arg)if(124===o&&124!==s.charCodeAt(a+1)&&124!==s.charCodeAt(a-1))void 0===_.expression?(b=a+1,_.expression=s.slice(v,a).trim()):r();else switch(o){case 34:l=!0;break;case 39:h=!0;break;case 40:d++;break;case 41:d--;break;case 91:f++;break;case 93:f--;break;case 123:u++;break;case 125:u--}else g=s.slice(p,a).trim(),x.test(g)&&(v=a+1,_.arg=y.stripQuotes(g)||g);else n(),_={},p=v=b=a+1;return(0===a||p!==a)&&n(),$.put(t,m),m}},function(t,e,i){function n(t){var e=$.length;return $[e]=t.replace(m,"\\n"),'"'+e+'"'}function r(t){var e=t.charAt(0),i=t.slice(1);return w.test(i)?t:(i=i.indexOf('"')>-1?i.replace(b,s):i,e+"scope."+i)}function s(t,e){return $[e]}function o(t,e){$.length=0;var i=t.replace(_,n).replace(v,"");i=(" "+i).replace(y,r).replace(b,s);var o=c(i);return o?{get:o,body:i,set:e?h(i):null}:void 0}function a(t){var e,i;return t.indexOf("[")<0?(i=t.split("."),e=u.compileGetter(i)):(i=u.parse(t),e=i.get),{get:e,set:function(t,e){u.set(t,i,e)}}}function c(t){try{return new Function("scope","return "+t+";")}catch(e){}}function h(t){try{return new Function("scope","value",t+"=value;")}catch(e){}}function l(t){t.set||(t.set=h(t.body))}var u=(i(1),i(41)),f=i(52),d=new f(1e3),p="Math,break,case,catch,continue,debugger,default,delete,do,else,false,finally,for,function,if,in,instanceof,new,null,return,switch,this,throw,true,try,typeof,var,void,while,with,undefined,abstract,boolean,byte,char,class,const,double,enum,export,extends,final,float,goto,implements,import,int,interface,long,native,package,private,protected,public,short,static,super,synchronized,throws,transient,volatile,arguments,let,yield",v=/\s/g,m=/\n/g,_=/[\{,]\s*[\w\$_]+\s*:|'[^']*'|"[^"]*"/g,b=/"(\d+)"/g,g=/^[A-Za-z_$][\w$]*(\.[A-Za-z_$][\w$]*|\['.*?'\]|\[".*?"\])*$/,y=/[^\w$\.]([A-Za-z_$][\w$]*(\.[A-Za-z_$][\w$]*|\['.*?'\]|\[".*?"\])*)/g,w=new RegExp("^("+p.replace(/,/g,"\\b|")+"\\b)"),$=[];e.parse=function(t,e){t=t.trim();var i=d.get(t);if(i)return e&&l(i),i;var n=g.test(t)?a(t):o(t,e);return d.put(t,n),n},e.pathTestRE=g},function(t,e,i){var n=i(1),r=i(53),s=i(54);e.append=function(t,e,i,n){o(t,1,function(){e.appendChild(t)},i,n)},e.before=function(t,e,i,r){o(t,1,function(){n.before(t,e)},i,r)},e.remove=function(t,e,i){o(t,-1,function(){n.remove(t)},e,i)},e.removeThenAppend=function(t,e,i,n){o(t,-1,function(){e.appendChild(t)},i,n)},e.blockAppend=function(t,i,r){for(var s=n.toArray(t.childNodes),o=0,a=s.length;a>o;o++)e.before(s[o],i,r)},e.blockRemove=function(t,i,n){for(var r,s=t.nextSibling;s!==i;)r=s.nextSibling,e.remove(s,n),s=r};var o=e.apply=function(t,e,i,o,a){var c=t.__v_trans;if(!c||!o._isCompiled||o.$parent&&!o.$parent._isCompiled)return i(),void(a&&a());var h=o.$options.transitions[c.id];h?s(t,e,i,c,h,o,a):n.transitionEndEvent?r(t,e,i,c,a):(i(),a&&a())}},function(t,e,i){function n(t,e){var i=t.nodeType;return 1===i&&"SCRIPT"!==t.tagName?r(t,e):3===i&&g.interpolate?o(t,e):void 0}function r(t,e){var i,n,r;if(t.__vue__||(n=t.tagName.toLowerCase(),r=n.indexOf("-")>0&&e.components[n],r&&t.setAttribute(g.prefix+"component",n)),(r||t.hasAttributes())&&(i=d(t,e),!i)){var o=v(t,e);i=o.length?s(o):null}if("TEXTAREA"===t.tagName){var a=i;i=function(t,e){e.value=t.$interpolate(e.value),a&&a(t,e)},i.terminal=!0}return i}function s(t){return function(e,i){for(var n,r,s,o=t.length;o--;)if(n=t[o],n._link)n._link(e,i);else for(s=n.descriptors.length,r=0;s>r;r++)e._bindDir(n.name,i,n.descriptors[r],n.def)}}function o(t,e){var i=y.parse(t.nodeValue);if(!i)return null;for(var n,r,s,o=document.createDocumentFragment(),c=e.directives,h=0,l=i.length;l>h;h++)r=i[h],s=r.value,r.tag?r.oneTime?n=document.createTextNode(s):r.html?(n=document.createComment("v-html"),r.type="html",r.def=c.html,r.descriptor=w.parse(s)[0]):r.partial?(n=document.createComment("v-partial"),r.type="partial",r.def=c.partial,r.descriptor=w.parse(s)[0]):(n=document.createTextNode(" "),r.type="text",r.def=c.text,r.descriptor=w.parse(s)[0]):n=document.createTextNode(s),o.appendChild(n);return a(i,o,e)}function a(t,e){return function(i,n){for(var r,s,o,a=e.cloneNode(!0),c=b.toArray(a.childNodes),h=0,l=t.length;l>h;h++)r=t[h],s=r.value,r.tag&&(o=c[h],r.oneTime?(s=i.$eval(s),r.html?b.replace(o,$.parse(s,!0)):o.nodeValue=s):i._bindDir(r.type,o,r.descriptor,r.def));b.replace(n,a)}}function c(t,e){for(var i,r,s,o=[],a=0,l=t.length;l>a;a++)s=t[a],i=n(s,e),r=i&&i.terminal||!s.hasChildNodes()?null:c(s.childNodes,e),o.push(i,r);return o.length?h(o):null}function h(t){return function(e,i){i=b.toArray(i);for(var n,r,s,o=0,a=0,c=t.length;c>o;a++)n=i[a],r=t[o++],s=t[o++],r&&r(e,n),s&&s(e,n.childNodes)}}function l(t,e,i){for(var n,r,s,o=[],a=e.length;a--;)if(n=e[a],r=t.getAttribute(n),null!==r){s={name:n,value:r};var c=y.parse(r);if(c){if(t.removeAttribute(n),c.length>1)continue;s.dynamic=!0,s.value=c[0].value}o.push(s)}return u(o,i)}function u(t,e){var i=e.directives["with"];return function(e,n){for(var r,s,o=t.length;o--;)r=t[o],s=b.camelize(r.name.replace(x,"")),r.dynamic?e._bindDir("with",n,{arg:s,expression:r.value},i):e.$set(s,r.value)}}function f(){}function d(t,e){if(null!==b.attr(t,"pre"))return f;for(var i,n,r=0;3>r;r++)if(n=k[r],i=b.attr(t,n))return p(t,n,i,e)}function p(t,e,i,n){var r=w.parse(i)[0],o=n.directives[e];if("component"===e){var a=v(t,n,!0);t._parentLinker=a.length?s(a):null}var c=function(t,i){t._bindDir(e,i,r,o)};return c.terminal=!0,c}function v(t,e,i){for(var n,r,s,o,a,c=b.toArray(t.attributes),h=c.length,l=[];h--;)if(n=c[h],r=n.name,0===r.indexOf(g.prefix)){if(o=r.slice(g.prefix.length),i&&("with"===o||"ref"===o))continue;a=e.directives[o],a&&l.push({name:o,descriptors:w.parse(n.value),def:a})}else g.interpolate&&(s=m(t,r,n.value,e),s&&l.push(s));return l.sort(_),l}function m(t,e,i,n){var r=y.parse(i);if(r){for(var s=n.directives.attr,o=r.length,a=!0;o--;){var c=r[o];c.tag&&!c.oneTime&&(a=!1)}return{def:s,_link:a?function(t,n){n.setAttribute(e,t.$interpolate(i))}:function(t,i){var n=y.tokensToExp(r,t),o=w.parse(e+":"+n)[0];t._bindDir("attr",i,o,s)}}}}function _(t,e){return t=t.def.priority||0,e=e.def.priority||0,t>e?1:-1}var b=i(1),g=i(20),y=i(42),w=i(43),$=i(51);t.exports=function(t,e,i){var r=!i&&e.paramAttributes,s=r?l(t,r,e):null,o=t instanceof DocumentFragment?null:n(t,e),a=o&&o.terminal||!t.hasChildNodes()?null:c(t.childNodes,e);return function(t,e){var n=t._directives.length;if(s&&s(t,e),o&&o(t,e),a&&a(t,e.childNodes),i){var r=t._directives.slice(n);return function(){for(var e=r.length;e--;)r[e]._teardown();e=t._directives.indexOf(r[0]),t._directives.splice(e,r.length)}}}};var x=/^data-/,k=["repeat","if","component"];f.terminal=!0},function(t,e,i){function n(t,e){var i=e.template,n=h.parse(i,!0);if(n){if(r(t),e.replace){if(n.childNodes.length>1)return s(n),n;var o=n.firstChild;return c.copyAttributes(t,o),s(o),o}return t.appendChild(n),s(t),t}}function r(t){var e;if(l=null,t.hasChildNodes())for(l=document.createElement("div");e=t.firstChild;)l.appendChild(e)}function s(t){var e=o(t),i=e.length;if(i){for(var n,r,s,h,u;i--;)n=e[i],l?(r=n.getAttribute("select"),r?(s=l.querySelectorAll(r),n.content=c.toArray(s.length?s:n.childNodes)):u=n):n.content=c.toArray(n.childNodes);for(i=0,h=e.length;h>i;i++)n=e[i],n!==u&&a(n,n.content);u&&a(u,c.toArray(l.childNodes))}}function o(t){return c.isArray(t)?u.apply([],t.map(o)):t.querySelectorAll?c.toArray(t.querySelectorAll("content")):[]}function a(t,e){for(var i=t.parentNode,n=0,r=e.length;r>n;n++)i.insertBefore(e[n],t);i.removeChild(t)}var c=i(1),h=i(51);t.exports=function(t,e){return"TEMPLATE"===t.tagName&&(t=h.parse(t)),e&&e.template&&(t=n(t,e)),t instanceof DocumentFragment&&(c.prepend(document.createComment("v-start"),t),t.appendChild(document.createComment("v-end"))),t};var l,u=[].concat},function(t,e,i){var n=(i(1),{_default:i(55),radio:i(56),select:i(57),checkbox:i(58)});t.exports={priority:800,twoWay:!0,handlers:n,bind:function(){var t=this.filters;t&&t.read&&!t.write;var e,i=this.el,r=i.tagName;if("INPUT"===r)e=n[i.type]||n._default;else if("SELECT"===r)e=n.select;else{if("TEXTAREA"!==r)return;e=n._default}e.bind.call(this),this.update=e.update,this.unbind=e.unbind}}},function(t,e,i){function n(t,e){t.__proto__=e}function r(t,e,i){for(var n,r=i.length;r--;)n=i[r],o.define(t,n,e[n])}function s(t,e){if(this.id=++u,this.value=t,this.active=!0,this.bindings=[],o.define(t,"__ob__",this),e===f){var i=a.proto&&o.hasProto?n:r;i(t,h,l),this.observeArray(t)}else e===d&&this.walk(t)}var o=i(1),a=i(20),c=i(39),h=i(59),l=Object.getOwnPropertyNames(h);i(60);var u=0,f=0,d=1;s.target=null;var p=s.prototype;s.create=function(t){return t&&t.hasOwnProperty("__ob__")&&t.__ob__ instanceof s?t.__ob__:o.isArray(t)?new s(t,f):o.isPlainObject(t)&&!t._isVue?new s(t,d):void 0},p.walk=function(t){for(var e,i,n=Object.keys(t),r=n.length;r--;)e=n[r],i=e.charCodeAt(0),36!==i&&95!==i&&this.convert(e,t[e])},p.observe=function(t){return s.create(t)},p.observeArray=function(t){for(var e=t.length;e--;)this.observe(t[e])},p.convert=function(t,e){var i=this,n=i.observe(e),r=new c;n&&n.bindings.push(r),Object.defineProperty(i.value,t,{enumerable:!0,configurable:!0,get:function(){return i.active&&s.target&&s.target.addDep(r),e},set:function(t){if(t!==e){var n=e&&e.__ob__;if(n){var s=n.bindings;s.splice(s.indexOf(r),1)}e=t;var o=i.observe(t);o&&o.bindings.push(r),r.notify()}}})},p.notify=function(){for(var t=this.bindings,e=0,i=t.length;i>e;e++)t[e].notify()},p.addVm=function(t){(this.vms=this.vms||[]).push(t)},p.removeVm=function(t){this.vms.splice(this.vms.indexOf(t),1)},t.exports=s},function(t,e,i){function n(){this.reset()}var r=i(1),s=n.prototype;s.push=function(t){t.id&&this.has[t.id]&&!this.flushing||(this.queue.push(t),this.has[t.id]=t,this.waiting||(this.waiting=!0,r.nextTick(this.flush,this)))},s.flush=function(){this.flushing=!0;for(var t=0;t",""],tr:[2,""],col:[2,""]};h.td=h.th=[3,""],h.option=h.optgroup=[1,'"],h.thead=h.tbody=h.colgroup=h.caption=h.tfoot=[1,""],h.g=h.defs=h.symbol=h.use=h.image=h.text=h.circle=h.ellipse=h.line=h.path=h.polygon=h.polyline=h.rect=[1,'"];var l=/<([\w:]+)/;e.clone=function(t){var e=t.cloneNode(!0);if(c){var i=t.querySelectorAll("template");if(i.length)for(var n=e.querySelectorAll("template"),r=n.length;r--;)n[r].parentNode.replaceChild(i[r].cloneNode(!0),n[r])}return e},e.parse=function(t,i){var s,o;return t instanceof DocumentFragment?i?t.cloneNode(!0):t:("string"==typeof t?"#"===t.charAt(0)?(o=a.get(t),o||(s=document.getElementById(t.slice(1)),s&&(o=r(s),a.put(t,o)))):o=n(t):t.nodeType&&(o=r(t)),o&&i?e.clone(o):o)}},function(t){function e(t){this.size=0,this.limit=t,this.head=this.tail=void 0,this._keymap={}}var i=e.prototype;i.put=function(t,e){var i={key:t,value:e};return this._keymap[t]=i,this.tail?(this.tail.newer=i,i.older=this.tail):this.head=i,this.tail=i,this.size===this.limit?this.shift():void this.size++},i.shift=function(){var t=this.head;return t&&(this.head=this.head.newer,this.head.older=void 0,t.newer=t.older=void 0,this._keymap[t.key]=void 0),t},i.get=function(t,e){var i=this._keymap[t];if(void 0!==i)return i===this.tail?e?i:i.value:(i.newer&&(i===this.head&&(this.head=i.newer),i.newer.older=i.older),i.older&&(i.older.newer=i.newer),i.newer=void 0,i.older=this.tail,this.tail&&(this.tail.newer=i),this.tail=i,e?i:i.value)},t.exports=e},function(t,e,i){function n(t,e,i,n,s){f.push({el:t,dir:e,cb:s,cls:n,op:i}),d||(d=!0,a.nextTick(r))}function r(){document.documentElement.offsetHeight;f.forEach(s),f=[],d=!1}function s(t){function e(t,e){n.event=t;var r=n.callback=function(o){o.target===i&&(a.off(i,t,r),n.event=n.callback=null,e&&e(),s&&s())};a.on(i,t,r)}var i=t.el,n=i.__v_trans,r=t.cls,s=t.cb,c=t.op,l=o(i,n,r);if(t.dir>0)1===l?(h(i,r),s&&e(a.transitionEndEvent)):2===l?e(a.animationEndEvent,function(){h(i,r)}):(h(i,r),s&&s());else if(l){var u=1===l?a.transitionEndEvent:a.animationEndEvent;e(u,function(){c(),h(i,r)})}else c(),h(i,r),s&&s()}function o(t,e,i){var n=e.cache&&e.cache[i];if(n)return n;var r=t.style,s=window.getComputedStyle(t),o=r[l]||s[l];if(o&&"0s"!==o)n=1;else{var a=r[u]||s[u];a&&"0s"!==a&&(n=2)}return n&&(e.cache||(e.cache={}),e.cache[i]=n),n}var a=i(1),c=a.addClass,h=a.removeClass,l=a.transitionProp+"Duration",u=a.animationProp+"Duration",f=[],d=!1;t.exports=function(t,e,i,r,s){var o=r.id||"v",l=o+"-enter",u=o+"-leave";r.callback&&(a.off(t,r.event,r.callback),h(t,l),h(t,u),r.event=r.callback=null),e>0?(c(t,l),i(),n(t,e,null,l,s)):(c(t,u),n(t,e,i,u,s))}},function(t){t.exports=function(t,e,i,n,r,s,o){n.cancel&&(n.cancel(),n.cancel=null),e>0?(r.beforeEnter&&r.beforeEnter.call(s,t),i(),r.enter?n.cancel=r.enter.call(s,t,function(){n.cancel=null,o&&o()}):o&&o()):r.leave?n.cancel=r.leave.call(s,t,function(){n.cancel=null,i(),o&&o()}):(i(),o&&o())}},function(t,e,i){var n=i(1);t.exports={bind:function(){function t(){e.set(s?n.toNumber(i.value):i.value,!0)}var e=this,i=this.el,r=i.hasAttribute("lazy");r&&i.removeAttribute("lazy");var s=i.hasAttribute("number")||"number"===i.type;s&&i.removeAttribute("number");var o=!1;this.cpLock=function(){o=!0},this.cpUnlock=function(){o=!1,t()},n.on(i,"compositionstart",this.cpLock),n.on(i,"compositionend",this.cpUnlock),this.listener=function(){if(!o){var r;try{r=i.value.length-i.selectionStart}catch(s){}t(),n.nextTick(function(){var t=e._watcher.value;if(e.update(t),null!=r){var s=n.toString(t).length-r;i.setSelectionRange(s,s)}})}},this.event=r?"change":"input",n.on(i,this.event,this.listener),!r&&n.isIE9&&(this.onCut=function(){n.nextTick(e.listener)},this.onDel=function(t){(46===t.keyCode||8===t.keyCode)&&e.listener()},n.on(i,"cut",this.onCut),n.on(i,"keyup",this.onDel)),(i.hasAttribute("value")||"TEXTAREA"===i.tagName&&i.value.trim())&&(this._initValue=s?n.toNumber(i.value):i.value)},update:function(t){this.el.value=n.toString(t)},unbind:function(){var t=this.el;n.off(t,this.event,this.listener),n.off(t,"compositionstart",this.cpLock),n.off(t,"compositionend",this.cpUnlock),this.onCut&&(n.off(t,"cut",this.onCut),n.off(t,"keyup",this.onDel))}}},function(t,e,i){var n=i(1);t.exports={bind:function(){var t=this,e=this.el;this.listener=function(){t.set(e.value,!0)},n.on(e,"change",this.listener),e.checked&&(this._initValue=e.value)},update:function(t){this.el.checked=t==this.el.value},unbind:function(){n.off(this.el,"change",this.listener)}}},function(t,e,i){function n(t){function e(t){l.isArray(t)&&(i.el.innerHTML="",r(i.el,t),i._watcher&&i.update(i._watcher.value))}var i=this;this.optionWatcher=new u(this.vm,t,e),e(this.optionWatcher.value)}function r(t,e){for(var i,n,s=0,o=e.length;o>s;s++)i=e[s],i.options?(n=document.createElement("optgroup"),n.label=i.label,r(n,i.options)):(n=document.createElement("option"),"string"==typeof i?n.text=n.value=i:(n.text=i.text,n.value=i.value)),t.appendChild(n)}function s(){for(var t,e=this.el.options,i=0,n=e.length;n>i;i++)e[i].hasAttribute("selected")&&(this.multiple?(t||(t=[])).push(e[i].value):t=e[i].value);t&&(this._initValue=t)}function o(t){return Array.prototype.filter.call(t.options,a).map(c)}function a(t){return t.selected}function c(t){return t.value||t.text}function h(t,e){for(var i=t.length;i--;)if(t[i]==e)return i;return-1}var l=i(1),u=i(21);t.exports={bind:function(){var t=this,e=this.el,i=e.getAttribute("options");i&&(e.removeAttribute("options"),n.call(this,i)),this.multiple=e.hasAttribute("multiple"),this.listener=function(){var i=t.multiple?o(e):e.value;t.set(i,!0)},l.on(e,"change",this.listener),s.call(this)},update:function(t){var e=this.el;e.selectedIndex=-1;for(var i,n=this.multiple&&l.isArray(t),r=e.options,s=r.length;s--;)i=r[s],i.selected=n?h(t,i.value)>-1:t==i.value},unbind:function(){l.off(this.el,"change",this.listener),this.optionWatcher&&this.optionWatcher.teardown()}}},function(t,e,i){var n=i(1);t.exports={bind:function(){var t=this,e=this.el;this.listener=function(){t.set(e.checked,!0)},n.on(e,"change",this.listener),e.checked&&(this._initValue=e.checked)},update:function(t){this.el.checked=!!t},unbind:function(){n.off(this.el,"change",this.listener)}}},function(t,e,i){var n=i(1),r=Array.prototype,s=Object.create(r);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(t){var e=r[t];n.define(s,t,function(){for(var i=arguments.length,n=new Array(i);i--;)n[i]=arguments[i];var r,s=e.apply(this,n),o=this.__ob__;switch(t){case"push":r=n;break;case"unshift":r=n;break;case"splice":r=n.slice(2)}return r&&o.observeArray(r),o.notify(),s})}),n.define(r,"$set",function(t,e){return t>=this.length&&(this.length=t+1),this.splice(t,1,e)[0]}),n.define(r,"$remove",function(t){return"number"!=typeof t&&(t=this.indexOf(t)),t>-1?this.splice(t,1)[0]:void 0}),t.exports=s},function(t,e,i){var n=i(1),r=Object.prototype;n.define(r,"$add",function(t,e){var i=this.__ob__;if(!i)return void(this[t]=e);if(!n.isReserved(t)&&!this.hasOwnProperty(t))if(i.convert(t,e),i.vms)for(var r=i.vms.length;r--;){var s=i.vms[r];s._proxy(t),s._digest()}else i.notify()}),n.define(r,"$delete",function(t){var e=this.__ob__;if(!e)return void delete this[t];if(!n.isReserved(t)&&this.hasOwnProperty(t))if(delete this[t],e.vms)for(var i=e.vms.length;i--;){var r=e.vms[i];r._unproxy(t),r._digest()}else e.notify()})}])});
--------------------------------------------------------------------------------
/server/VueServer/app.tpl:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/server/VueServer/index.js:
--------------------------------------------------------------------------------
1 | var vueServer = require('./vue-server.min');
2 | var Vue = new vueServer.renderer();
3 |
4 | var VueCompile = vueServer.compiler;
5 | var fs = require('fs');
6 |
7 |
8 |
9 | var getItemData = function (argument) {
10 | return {
11 | id: (Math.random() * 1000000).toFixed(),
12 | price: (Math.random() * 1000000).toFixed(),
13 | price_sqm: (Math.random() * 100000).toFixed(),
14 | price_avg: (Math.random() * 1000000).toFixed(),
15 | photo: [{}, {}, {}],
16 | address: ['3-к', 'Блюхера', '14'],
17 | district: 'Ленинский район',
18 | area: [42, 21, 15],
19 | floor: [4, 5],
20 | description: 'Поступило в продажу очень редкое предложение! Современная квартира-студия. Нестандартная планировка, качественный ремонт, приятные соседи и месторасположение - это очень приятное сочетание!!!'
21 | };
22 | }
23 |
24 | var items = [];
25 |
26 | for (var i = 250 - 1; i >= 0; i--) {
27 | items.push(getItemData());
28 | };
29 |
30 |
31 |
32 |
33 | var ComponentList = {
34 | props: ['items'],
35 | template: VueCompile(fs.readFileSync(__dirname + '/list.tpl', 'utf-8').replace(/\n|\r|\t/g, '').replace(/ +/g, ' ')),
36 | components: {
37 | item: {
38 | replace: false,
39 | template: VueCompile(fs.readFileSync(__dirname + '/item.tpl', 'utf-8').replace(/\n|\r|\t/g, '').replace(/ +/g, ' '))
40 | }
41 | }
42 | };
43 |
44 | var appTpl = VueCompile(fs.readFileSync(__dirname + '/app.tpl', 'utf-8').replace(/\n|\r|\t/g, '').replace(/ +/g, ' '));
45 |
46 |
47 | var express = require('express');
48 |
49 | var app = express();
50 | app.use(function(req, res) {
51 | console.time('render')
52 | var vm = new Vue({
53 | template: appTpl,
54 | data: function() {
55 | return {items: items};
56 | },
57 | filters: {
58 | join: function(value, del) {
59 | return value.join(del ? del.replace(/\'/, '') : ', ');
60 | }
61 | },
62 |
63 | components: {
64 | list: ComponentList
65 | },
66 |
67 | methods: {
68 | refreshList: function() {
69 | var items2 = [];
70 | for (var i = 250 - 1; i >= 0; i--) {
71 | items2.push(getItemData());
72 | };
73 |
74 | console.time('refreshList')
75 | this.items = items2;
76 | window.requestAnimationFrame(function() {
77 | console.timeEnd('refreshList')
78 | });
79 | },
80 | onSubmit: function(event) {
81 | var self = this;
82 | console.time('click');
83 | event.preventDefault();
84 | this.items.push(getItemData());
85 | window.requestAnimationFrame(function() {
86 | console.timeEnd('click');
87 | });
88 | }
89 | }
90 | });
91 |
92 |
93 | vm.$on('vueServer.htmlReady', function(html) {
94 | console.timeEnd('render')
95 | res.send(html);
96 | })
97 |
98 | });
99 |
100 | app.listen(3000, function() {
101 | console.log('express server at http://localhost:3000');
102 | });
103 |
104 |
105 |
106 |
107 |
108 |
109 |
--------------------------------------------------------------------------------
/server/VueServer/item.tpl:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{item.price}}р.
6 |
7 |
8 | {{item.price_sqm}}р./м2
9 |
10 |
11 | Средняя цена
12 | {{item.price_avg}}
13 | р.
14 |
15 |
16 | |
17 |
18 |
32 | |
33 |
34 |
38 |
48 | |
49 |
50 |
51 |
52 | {{item.area | join ' / '}} м2
53 |
54 |
55 | -
56 | балкон
57 |
58 |
59 |
60 | |
61 |
62 |
63 |
64 | {{item.floor | join ' / '}} этаж
65 |
66 |
67 |
70 | |
71 |
72 |
77 | |
78 |
79 |
80 |
81 |
82 | {{item.description}}
83 |
84 | |
85 |
86 |
--------------------------------------------------------------------------------
/server/VueServer/list.tpl:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/data.js:
--------------------------------------------------------------------------------
1 | var getItemData = function (argument) {
2 | return {
3 | id: (Math.random() * 1000000).toFixed(),
4 | price: (Math.random() * 1000000).toFixed(),
5 | price_sqm: (Math.random() * 100000).toFixed(),
6 | price_avg: (Math.random() * 1000000).toFixed(),
7 | photo: [{}, {}, {}],
8 | address: ['3-к', 'Блюхера', '14'],
9 | district: 'Ленинский район',
10 | area: [42, 21, 15],
11 | floor: [4, 5],
12 | description: 'Поступило в продажу очень редкое предложение! Современная квартира-студия. Нестандартная планировка, качественный ремонт, приятные соседи и месторасположение - это очень приятное сочетание!!!'
13 | };
14 | }
15 |
16 | var items = [];
17 |
18 | for (var i = 250 - 1; i >= 0; i--) {
19 | items.push(getItemData());
20 | };
--------------------------------------------------------------------------------