Browse Source

Merge branch 'master' of node/npmcomment into master

node 6 years ago
parent
commit
e6067411d5
47 changed files with 694 additions and 549 deletions
  1. 6
    0
      CHANGELOG.md
  2. 5
    1
      README.md
  3. 89
    77
      lib/App.js
  4. 1
    1
      lib/App.js.map
  5. 2
    2
      lib/Comment.js
  6. 1
    1
      lib/Comment.js.map
  7. 2
    2
      lib/avatar.js
  8. 1
    1
      lib/avatar.js.map
  9. 3
    3
      lib/axios.js
  10. 1
    1
      lib/axios.js.map
  11. 26
    26
      lib/components/CommentBox/index.js
  12. 1
    1
      lib/components/CommentBox/index.js.map
  13. 21
    15
      lib/components/CommentInput/index.js
  14. 1
    1
      lib/components/CommentInput/index.js.map
  15. 17
    17
      lib/components/CommentList/index.js
  16. 1
    1
      lib/components/CommentList/index.js.map
  17. 87
    56
      lib/components/ContentItem/index.js
  18. 1
    1
      lib/components/ContentItem/index.js.map
  19. 27
    27
      lib/components/Editor/Emoji.js
  20. 1
    1
      lib/components/Editor/Emoji.js.map
  21. 36
    34
      lib/components/Editor/Upload.js
  22. 1
    1
      lib/components/Editor/Upload.js.map
  23. 1
    1
      lib/components/Editor/index.css
  24. 73
    65
      lib/components/Editor/index.js
  25. 1
    1
      lib/components/Editor/index.js.map
  26. 5
    5
      lib/components/RenderText/index.js
  27. 1
    1
      lib/components/RenderText/index.js.map
  28. 9
    7
      lib/constant.js
  29. 1
    1
      lib/constant.js.map
  30. 111
    111
      lib/emoji.js
  31. 1
    1
      lib/emoji.js.map
  32. 23
    13
      lib/helper.js
  33. 1
    1
      lib/helper.js.map
  34. 15
    15
      lib/index.js
  35. 1
    1
      lib/index.js.map
  36. 11
    11
      lib/lang/index.js
  37. 1
    1
      lib/lang/index.js.map
  38. 14
    14
      lib/registerServiceWorker.js
  39. 1
    1
      lib/registerServiceWorker.js.map
  40. 17
    5
      src/App.js
  41. 7
    2
      src/components/CommentInput/index.js
  42. 32
    4
      src/components/ContentItem/index.js
  43. 3
    4
      src/components/Editor/Upload.js
  44. 14
    6
      src/components/Editor/index.js
  45. 2
    0
      src/constant.js
  46. 17
    7
      src/helper.js
  47. 1
    1
      src/index.js

+ 6
- 0
CHANGELOG.md View File

2
 
2
 
3
 ## 0.4.0
3
 ## 0.4.0
4
 
4
 
5
+- [x] fix: XSS 注入
6
+- [x] feat: Comment 添加 showAlertComment/showAlertReply/showAlertFavor 属性
7
+- [x] feat: Editor 添加 maxUpload 属性,定义最多上传的图片数量
8
+
9
+## 0.4.0
10
+
5
 - [x] fix: 前端 HTML 编码
11
 - [x] fix: 前端 HTML 编码
6
 
12
 
7
 ## 0.3.1
13
 ## 0.3.1

+ 5
- 1
README.md View File

2
 
2
 
3
 通用评论系统及编辑器
3
 通用评论系统及编辑器
4
 
4
 
5
-`version 0.4.0`
5
+**`version 0.4.1`**
6
 
6
 
7
 ```js
7
 ```js
8
 import Comment, { Editor, RenderText } from 'comment';
8
 import Comment, { Editor, RenderText } from 'comment';
21
 | showList   | boolean | true                               | false    | 是否显示评论列表                             |
21
 | showList   | boolean | true                               | false    | 是否显示评论列表                             |
22
 | showEditor | boolean | true                               | false    | 是否显示评论输入框                           |
22
 | showEditor | boolean | true                               | false    | 是否显示评论输入框                           |
23
 | showHeader | boolean | true                               | false    | 是否显示评论顶部的提示                       |
23
 | showHeader | boolean | true                               | false    | 是否显示评论顶部的提示                       |
24
+| showAlertComment | boolean | false                               | false    | 评论成功之后,是否通过 Antd 的 Message 组件进行提示  |
25
+| showAlertReply | boolean | false                               | false    | 回复成功之后,是否通过 Antd 的 Message 组件进行提示  |
26
+| showAlertFavor | boolean | false                               | false    | 点赞/取消点赞成功之后,是否通过 Antd 的 Message 组件进行提示  |
24
 | token      | string  |                                    | false    |  [deprecate] token,用于身份认证,非必须。默认使用 cookie |
27
 | token      | string  |                                    | false    |  [deprecate] token,用于身份认证,非必须。默认使用 cookie |
25
 
28
 
26
 
29
 
33
 | placeholder   | string          | 说点什么吧... | false    | 评论的中的提示文字                                                                                |
36
 | placeholder   | string          | 说点什么吧... | false    | 评论的中的提示文字                                                                                |
34
 | showEmoji     | boolean         | true          | false    | 是否显示 Toolbar 中表情工具                                                                       |
37
 | showEmoji     | boolean         | true          | false    | 是否显示 Toolbar 中表情工具                                                                       |
35
 | showUpload    | boolean         | true          | false    | 是否显示 Toolbar 中 上传图片工具                                                                  |
38
 | showUpload    | boolean         | true          | false    | 是否显示 Toolbar 中 上传图片工具                                                                  |
39
+| maxUpload    | number         |  1          | false    | 最大能够上传的图片数量                                                                  |
36
 | value         | string          |               | false    | 编辑器的值。如果设置了该属性,则编辑器变为受控组件,需要父组件来维护 value                        |
40
 | value         | string          |               | false    | 编辑器的值。如果设置了该属性,则编辑器变为受控组件,需要父组件来维护 value                        |
37
 | onChange      | function(value) |               | false    | 编辑器内容改变的回调函数                                                                          |
41
 | onChange      | function(value) |               | false    | 编辑器内容改变的回调函数                                                                          |
38
 | onSubmit      | function({ text, files }) |               | false    | 点击提交按钮的回调函数,text 为编辑器的文本,files 为上传的文件列表                           |
42
 | onSubmit      | function({ text, files }) |               | false    | 点击提交按钮的回调函数,text 为编辑器的文本,files 为上传的文件列表                           |

+ 89
- 77
lib/App.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 Object.defineProperty(exports, "__esModule", {
3
 Object.defineProperty(exports, "__esModule", {
4
   value: true
4
   value: true
5
 });
5
 });
6
 exports.RenderText = exports.Editor = undefined;
6
 exports.RenderText = exports.Editor = undefined;
7
 
7
 
8
-var _tag = require("antd/es/tag");
8
+var _tag = require('antd/es/tag');
9
 
9
 
10
 var _tag2 = _interopRequireDefault(_tag);
10
 var _tag2 = _interopRequireDefault(_tag);
11
 
11
 
12
-var _message2 = require("antd/es/message");
12
+var _message2 = require('antd/es/message');
13
 
13
 
14
 var _message3 = _interopRequireDefault(_message2);
14
 var _message3 = _interopRequireDefault(_message2);
15
 
15
 
17
 
17
 
18
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
18
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
19
 
19
 
20
-require("antd/es/tag/style/css");
20
+require('antd/es/tag/style/css');
21
 
21
 
22
-require("antd/es/message/style/css");
22
+require('antd/es/message/style/css');
23
 
23
 
24
-var _react = require("react");
24
+var _react = require('react');
25
 
25
 
26
 var _react2 = _interopRequireDefault(_react);
26
 var _react2 = _interopRequireDefault(_react);
27
 
27
 
28
-var _propTypes = require("prop-types");
28
+var _propTypes = require('prop-types');
29
 
29
 
30
 var _propTypes2 = _interopRequireDefault(_propTypes);
30
 var _propTypes2 = _interopRequireDefault(_propTypes);
31
 
31
 
32
-var _axios = require("axios");
32
+var _axios = require('axios');
33
 
33
 
34
 var _axios2 = _interopRequireDefault(_axios);
34
 var _axios2 = _interopRequireDefault(_axios);
35
 
35
 
36
-var _constant = require("./constant");
36
+var _constant = require('./constant');
37
 
37
 
38
-var _Comment = require("./Comment");
38
+var _Comment = require('./Comment');
39
 
39
 
40
-var _helper = require("./helper");
40
+var _helper = require('./helper');
41
 
41
 
42
-var _CommentInput = require("./components/CommentInput");
42
+var _CommentInput = require('./components/CommentInput');
43
 
43
 
44
 var _CommentInput2 = _interopRequireDefault(_CommentInput);
44
 var _CommentInput2 = _interopRequireDefault(_CommentInput);
45
 
45
 
46
-var _CommentList = require("./components/CommentList");
46
+var _CommentList = require('./components/CommentList');
47
 
47
 
48
 var _CommentList2 = _interopRequireDefault(_CommentList);
48
 var _CommentList2 = _interopRequireDefault(_CommentList);
49
 
49
 
50
-var _Editor = require("./components/Editor");
50
+var _Editor = require('./components/Editor');
51
 
51
 
52
 var _Editor2 = _interopRequireDefault(_Editor);
52
 var _Editor2 = _interopRequireDefault(_Editor);
53
 
53
 
54
-var _RenderText = require("./components/RenderText");
54
+var _RenderText = require('./components/RenderText');
55
 
55
 
56
 var _RenderText2 = _interopRequireDefault(_RenderText);
56
 var _RenderText2 = _interopRequireDefault(_RenderText);
57
 
57
 
58
-var _lang = require("./lang");
58
+var _lang = require('./lang');
59
 
59
 
60
 var _lang2 = _interopRequireDefault(_lang);
60
 var _lang2 = _interopRequireDefault(_lang);
61
 
61
 
62
-require("./App.css");
62
+require('./App.css');
63
 
63
 
64
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
64
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
65
 
65
 
102
   }
102
   }
103
 
103
 
104
   _createClass(App, [{
104
   _createClass(App, [{
105
-    key: "componentWillMount",
105
+    key: 'componentWillMount',
106
     value: function componentWillMount() {
106
     value: function componentWillMount() {
107
       this.axios = _axios2.default;
107
       this.axios = _axios2.default;
108
       this.axios.defaults.withCredentials = true;
108
       this.axios.defaults.withCredentials = true;
109
       if (this.props.token) {
109
       if (this.props.token) {
110
-        this.axios.defaults.headers.common["Authorization"] = "Bearer " + this.props.token;
110
+        this.axios.defaults.headers.common['Authorization'] = 'Bearer ' + this.props.token;
111
       }
111
       }
112
     }
112
     }
113
   }, {
113
   }, {
114
-    key: "componentDidMount",
114
+    key: 'componentDidMount',
115
     value: function componentDidMount() {}
115
     value: function componentDidMount() {}
116
 
116
 
117
     /**
117
     /**
121
      */
121
      */
122
 
122
 
123
   }, {
123
   }, {
124
-    key: "handleChangeLoading",
124
+    key: 'handleChangeLoading',
125
     value: function handleChangeLoading(key, value) {
125
     value: function handleChangeLoading(key, value) {
126
       var loading = this.state.loading;
126
       var loading = this.state.loading;
127
 
127
 
134
      */
134
      */
135
 
135
 
136
   }, {
136
   }, {
137
-    key: "sGetComment",
137
+    key: 'sGetComment',
138
     value: function sGetComment() {
138
     value: function sGetComment() {
139
       var _this2 = this;
139
       var _this2 = this;
140
 
140
 
142
           _ref$page = _ref.page,
142
           _ref$page = _ref.page,
143
           page = _ref$page === undefined ? 1 : _ref$page;
143
           page = _ref$page === undefined ? 1 : _ref$page;
144
 
144
 
145
-      this.handleChangeLoading("sGetComment", true);
145
+      this.handleChangeLoading('sGetComment', true);
146
       var _props = this.props,
146
       var _props = this.props,
147
           API = _props.API,
147
           API = _props.API,
148
           type = _props.type,
148
           type = _props.type,
149
           businessId = _props.businessId;
149
           businessId = _props.businessId;
150
 
150
 
151
-      this.axios.get(API + "/comments?type=" + type + "&business_id=" + businessId + "&page=" + page + "&limit=" + _constant.LIMIT).then(function (response) {
151
+      this.axios.get(API + '/comments?type=' + type + '&business_id=' + businessId + '&page=' + page + '&limit=' + _constant.LIMIT).then(function (response) {
152
         var _response$data = response.data,
152
         var _response$data = response.data,
153
             list = _response$data.list,
153
             list = _response$data.list,
154
             page = _response$data.page,
154
             page = _response$data.page,
171
             total: total
171
             total: total
172
           });
172
           });
173
         } else {
173
         } else {
174
-          _message3.default.info("没有更多评论了");
174
+          _message3.default.info('没有更多评论了');
175
           _this2.setState({
175
           _this2.setState({
176
             isNoMoreComment: true
176
             isNoMoreComment: true
177
           });
177
           });
183
         }
183
         }
184
         _message3.default.error(_lang2.default[error.message] || _constant.ERROR_DEFAULT);
184
         _message3.default.error(_lang2.default[error.message] || _constant.ERROR_DEFAULT);
185
       }).finally(function () {
185
       }).finally(function () {
186
-        _this2.handleChangeLoading("sGetComment", false);
186
+        _this2.handleChangeLoading('sGetComment', false);
187
       });
187
       });
188
     }
188
     }
189
 
189
 
192
      */
192
      */
193
 
193
 
194
   }, {
194
   }, {
195
-    key: "sGetReply",
195
+    key: 'sGetReply',
196
     value: function sGetReply() {
196
     value: function sGetReply() {
197
       var _this3 = this;
197
       var _this3 = this;
198
 
198
 
201
           _ref2$page = _ref2.page,
201
           _ref2$page = _ref2.page,
202
           page = _ref2$page === undefined ? 1 : _ref2$page;
202
           page = _ref2$page === undefined ? 1 : _ref2$page;
203
 
203
 
204
-      this.handleChangeLoading("sGetReply", true);
204
+      this.handleChangeLoading('sGetReply', true);
205
       var API = this.props.API;
205
       var API = this.props.API;
206
 
206
 
207
-      this.axios.get(API + "/replies?comment_id=" + commentId + "&page=" + page + "&limit=" + _constant.LIMIT).then(function (response) {
207
+      this.axios.get(API + '/replies?comment_id=' + commentId + '&page=' + page + '&limit=' + _constant.LIMIT).then(function (response) {
208
         if (!response.data.list) {
208
         if (!response.data.list) {
209
-          _message3.default.info("没有更多数据了!");
209
+          _message3.default.info('没有更多数据了!');
210
         }
210
         }
211
         var list = _this3.state.list.map(function (item) {
211
         var list = _this3.state.list.map(function (item) {
212
           if (item.id === commentId) {
212
           if (item.id === commentId) {
238
         }
238
         }
239
         _message3.default.error(_lang2.default[error.message] || _constant.ERROR_DEFAULT);
239
         _message3.default.error(_lang2.default[error.message] || _constant.ERROR_DEFAULT);
240
       }).finally(function () {
240
       }).finally(function () {
241
-        _this3.handleChangeLoading("sGetReply", false);
241
+        _this3.handleChangeLoading('sGetReply', false);
242
       });
242
       });
243
     }
243
     }
244
 
244
 
248
      */
248
      */
249
 
249
 
250
   }, {
250
   }, {
251
-    key: "sCreateComment",
251
+    key: 'sCreateComment',
252
     value: function sCreateComment() {
252
     value: function sCreateComment() {
253
       var _this4 = this;
253
       var _this4 = this;
254
 
254
 
257
 
257
 
258
       var cb = arguments[1];
258
       var cb = arguments[1];
259
 
259
 
260
-      if (!content) return _message3.default.error("评论内容不能为空 ");
261
-      this.handleChangeLoading("sCreateComment", true);
260
+      if (!content) return _message3.default.error('评论内容不能为空 ');
261
+      this.handleChangeLoading('sCreateComment', true);
262
       var _props2 = this.props,
262
       var _props2 = this.props,
263
           API = _props2.API,
263
           API = _props2.API,
264
           type = _props2.type,
264
           type = _props2.type,
265
           businessId = _props2.businessId;
265
           businessId = _props2.businessId;
266
 
266
 
267
-      this.axios(API + "/comments", {
268
-        method: "post",
267
+      this.axios(API + '/comments', {
268
+        method: 'post',
269
         data: {
269
         data: {
270
           type: type,
270
           type: type,
271
           business_id: businessId,
271
           business_id: businessId,
273
         },
273
         },
274
         withCredentials: true
274
         withCredentials: true
275
       }).then(function (response) {
275
       }).then(function (response) {
276
-        _message3.default.success("评论成功!");
276
+        if (_this4.props.showAlertComment) {
277
+          _message3.default.success('评论成功!');
278
+        }
277
         if ((0, _helper.isFunction)(cb)) cb();
279
         if ((0, _helper.isFunction)(cb)) cb();
278
         // 将数据写入到 list 中
280
         // 将数据写入到 list 中
279
         // 临时插入
281
         // 临时插入
293
         }
295
         }
294
         _message3.default.error(_lang2.default[error.message] || _constant.ERROR_DEFAULT);
296
         _message3.default.error(_lang2.default[error.message] || _constant.ERROR_DEFAULT);
295
       }).finally(function () {
297
       }).finally(function () {
296
-        _this4.handleChangeLoading("sCreateComment", false);
298
+        _this4.handleChangeLoading('sCreateComment', false);
297
       });
299
       });
298
     }
300
     }
299
 
301
 
304
      */
306
      */
305
 
307
 
306
   }, {
308
   }, {
307
-    key: "sCreateReply",
309
+    key: 'sCreateReply',
308
     value: function sCreateReply(data, cb) {
310
     value: function sCreateReply(data, cb) {
309
       var _this5 = this;
311
       var _this5 = this;
310
 
312
 
311
-      if (!data.content) return _message3.default.error("回复内容不能为空 ");
312
-      this.handleChangeLoading("sCreateReply", true);
313
+      if (!data.content) return _message3.default.error('回复内容不能为空 ');
314
+      this.handleChangeLoading('sCreateReply', true);
313
       var API = this.props.API;
315
       var API = this.props.API;
314
 
316
 
315
-      this.axios(API + "/replies", {
316
-        method: "post",
317
+      this.axios(API + '/replies', {
318
+        method: 'post',
317
         data: data,
319
         data: data,
318
         withCredentials: true
320
         withCredentials: true
319
       }).then(function (response) {
321
       }).then(function (response) {
320
-        _message3.default.success("回复成功!");
322
+        if (_this5.props.showAlertReply) {
323
+          _message3.default.success('回复成功!');
324
+        }
321
         if ((0, _helper.isFunction)(cb)) cb();
325
         if ((0, _helper.isFunction)(cb)) cb();
322
         // 将数据写入到 list 中
326
         // 将数据写入到 list 中
323
         // 临时插入
327
         // 临时插入
340
         }
344
         }
341
         _message3.default.error(_lang2.default[error.message] || _constant.ERROR_DEFAULT);
345
         _message3.default.error(_lang2.default[error.message] || _constant.ERROR_DEFAULT);
342
       }).finally(function () {
346
       }).finally(function () {
343
-        _this5.handleChangeLoading("sCreateReply", false);
347
+        _this5.handleChangeLoading('sCreateReply', false);
344
       });
348
       });
345
     }
349
     }
346
 
350
 
351
      */
355
      */
352
 
356
 
353
   }, {
357
   }, {
354
-    key: "sCommentFavor",
358
+    key: 'sCommentFavor',
355
     value: function sCommentFavor(commentId, favored) {
359
     value: function sCommentFavor(commentId, favored) {
356
       var _this6 = this;
360
       var _this6 = this;
357
 
361
 
358
-      this.handleChangeLoading("sCommentFavor", true);
362
+      this.handleChangeLoading('sCommentFavor', true);
359
       var API = this.props.API;
363
       var API = this.props.API;
360
 
364
 
361
-      this.axios(API + "/comments/" + commentId + "/favor", {
362
-        method: favored ? "delete" : "put",
365
+      this.axios(API + '/comments/' + commentId + '/favor', {
366
+        method: favored ? 'delete' : 'put',
363
         withCredentials: true
367
         withCredentials: true
364
       }).then(function (response) {
368
       }).then(function (response) {
365
-        _message3.default.success(favored ? "取消点赞成功!" : "点赞成功!");
369
+        if (_this6.props.showAlertFavor) {
370
+          _message3.default.success(favored ? '取消点赞成功!' : '点赞成功!');
371
+        }
366
         // 更新 list 中的该项数据的 favored
372
         // 更新 list 中的该项数据的 favored
367
         var list = _this6.state.list.map(function (item) {
373
         var list = _this6.state.list.map(function (item) {
368
           if (item.id === commentId) {
374
           if (item.id === commentId) {
379
         }
385
         }
380
         _message3.default.error(_lang2.default[error.message] || _constant.ERROR_DEFAULT);
386
         _message3.default.error(_lang2.default[error.message] || _constant.ERROR_DEFAULT);
381
       }).finally(function () {
387
       }).finally(function () {
382
-        _this6.handleChangeLoading("sCommentFavor", false);
388
+        _this6.handleChangeLoading('sCommentFavor', false);
383
       });
389
       });
384
     }
390
     }
385
 
391
 
391
      */
397
      */
392
 
398
 
393
   }, {
399
   }, {
394
-    key: "sReplyFavor",
400
+    key: 'sReplyFavor',
395
     value: function sReplyFavor(replyId, commentId, favored) {
401
     value: function sReplyFavor(replyId, commentId, favored) {
396
       var _this7 = this;
402
       var _this7 = this;
397
 
403
 
398
-      this.handleChangeLoading("sReplyFavor", true);
404
+      this.handleChangeLoading('sReplyFavor', true);
399
       var API = this.props.API;
405
       var API = this.props.API;
400
 
406
 
401
-      this.axios(API + "/replies/" + replyId + "/favor", {
402
-        method: favored ? "delete" : "put",
407
+      this.axios(API + '/replies/' + replyId + '/favor', {
408
+        method: favored ? 'delete' : 'put',
403
         data: {
409
         data: {
404
           comment_id: commentId
410
           comment_id: commentId
405
         },
411
         },
406
         withCredentials: true
412
         withCredentials: true
407
       }).then(function (response) {
413
       }).then(function (response) {
408
-        _message3.default.success(favored ? "取消点赞成功!" : "点赞成功!");
414
+        _message3.default.success(favored ? '取消点赞成功!' : '点赞成功!');
409
         // 更新 list 中的该项数据的 favored
415
         // 更新 list 中的该项数据的 favored
410
         var list = _this7.state.list.map(function (item) {
416
         var list = _this7.state.list.map(function (item) {
411
           if (item.id === commentId) {
417
           if (item.id === commentId) {
430
         }
436
         }
431
         _message3.default.error(_lang2.default[error.message] || _constant.ERROR_DEFAULT);
437
         _message3.default.error(_lang2.default[error.message] || _constant.ERROR_DEFAULT);
432
       }).finally(function () {
438
       }).finally(function () {
433
-        _this7.handleChangeLoading("sReplyFavor", false);
439
+        _this7.handleChangeLoading('sReplyFavor', false);
434
       });
440
       });
435
     }
441
     }
436
 
442
 
439
      */
445
      */
440
 
446
 
441
   }, {
447
   }, {
442
-    key: "sOssSts",
448
+    key: 'sOssSts',
443
     value: function sOssSts() {
449
     value: function sOssSts() {
444
       var _this8 = this;
450
       var _this8 = this;
445
 
451
 
446
-      this.handleChangeLoading("sOssSts", true);
447
-      this.axios.get("http://api.links123.net/comment/v1/oss/sts").then(function (response) {
452
+      this.handleChangeLoading('sOssSts', true);
453
+      this.axios.get('http://api.links123.net/comment/v1/oss/sts').then(function (response) {
448
         _this8.setState({ oss: _extends({}, response.data) });
454
         _this8.setState({ oss: _extends({}, response.data) });
449
       }).catch(function (error) {
455
       }).catch(function (error) {
450
         if (error.response && error.response.data && error.response.data.msg) {
456
         if (error.response && error.response.data && error.response.data.msg) {
453
         }
459
         }
454
         _message3.default.error(_lang2.default[error.message] || _constant.ERROR_DEFAULT);
460
         _message3.default.error(_lang2.default[error.message] || _constant.ERROR_DEFAULT);
455
       }).finally(function () {
461
       }).finally(function () {
456
-        _this8.handleChangeLoading("sOssSts", false);
462
+        _this8.handleChangeLoading('sOssSts', false);
457
       });
463
       });
458
     }
464
     }
459
   }, {
465
   }, {
460
-    key: "render",
466
+    key: 'render',
461
     value: function render() {
467
     value: function render() {
462
       // 添加到 Context 的数据
468
       // 添加到 Context 的数据
463
       var value = _extends({}, this.state, this.props, {
469
       var value = _extends({}, this.state, this.props, {
474
         _Comment.CommentContext.Provider,
480
         _Comment.CommentContext.Provider,
475
         { value: value },
481
         { value: value },
476
         _react2.default.createElement(
482
         _react2.default.createElement(
477
-          "div",
478
-          { className: "comment" },
483
+          'div',
484
+          { className: 'comment' },
479
           this.props.showHeader && _react2.default.createElement(
485
           this.props.showHeader && _react2.default.createElement(
480
-            "div",
486
+            'div',
481
             { style: { marginBottom: 15 } },
487
             { style: { marginBottom: 15 } },
482
             _react2.default.createElement(
488
             _react2.default.createElement(
483
               _tag2.default,
489
               _tag2.default,
484
-              { className: "comment-header-tag" },
485
-              "\u7559\u8A00"
490
+              { className: 'comment-header-tag' },
491
+              '\u7559\u8A00'
486
             ),
492
             ),
487
             _react2.default.createElement(
493
             _react2.default.createElement(
488
-              "span",
489
-              { className: "comment-header-tip" },
490
-              "\u53E3\u7891"
494
+              'span',
495
+              { className: 'comment-header-tip' },
496
+              '\u53E3\u7891'
491
             ),
497
             ),
492
             _react2.default.createElement(
498
             _react2.default.createElement(
493
-              "span",
494
-              { className: "comment-header-text" },
495
-              "(\u5168\u7AD9\u6311\u51FA\u6BDB\u75C5\u6216\u63D0\u51FA\u5408\u7406\u5EFA\u8BAE\uFF0C\u5956\u52B110\u5230100\u5143\u7EA2\u5305)"
499
+              'span',
500
+              { className: 'comment-header-text' },
501
+              '(\u5168\u7AD9\u6311\u51FA\u6BDB\u75C5\u6216\u63D0\u51FA\u5408\u7406\u5EFA\u8BAE\uFF0C\u5956\u52B110\u5230100\u5143\u7EA2\u5305)'
496
             )
502
             )
497
           ),
503
           ),
498
           this.props.showEditor && _react2.default.createElement(_CommentInput2.default, { content: this.props.children }),
504
           this.props.showEditor && _react2.default.createElement(_CommentInput2.default, { content: this.props.children }),
499
           this.props.showList && _react2.default.createElement(
505
           this.props.showList && _react2.default.createElement(
500
-            "div",
506
+            'div',
501
             { style: { marginTop: 20 } },
507
             { style: { marginTop: 20 } },
502
             _react2.default.createElement(_CommentList2.default, null)
508
             _react2.default.createElement(_CommentList2.default, null)
503
           )
509
           )
515
   API: _propTypes2.default.string, // 评论的 API 前缀
521
   API: _propTypes2.default.string, // 评论的 API 前缀
516
   showList: _propTypes2.default.bool, // 是否显示评论列表
522
   showList: _propTypes2.default.bool, // 是否显示评论列表
517
   showEditor: _propTypes2.default.bool, // 是否显示评论输入框
523
   showEditor: _propTypes2.default.bool, // 是否显示评论输入框
518
-  showHeader: _propTypes2.default.bool // 是否显示评论顶部的提示
524
+  showHeader: _propTypes2.default.bool, // 是否显示评论顶部的提示
525
+  showAlertComment: _propTypes2.default.bool, // 评论成功之后,是否通过 Antd 的 Message 组件进行提示
526
+  showAlertReply: _propTypes2.default.bool, // 回复成功之后,是否通过 Antd 的 Message 组件进行提示
527
+  showAlertFavor: _propTypes2.default.bool // 点赞/取消点赞成功之后,是否通过 Antd 的 Message 组件进行提示
519
 };
528
 };
520
 
529
 
521
 App.defaultProps = {
530
 App.defaultProps = {
522
-  API: "http://api.links123.net/comment/v1",
531
+  API: 'http://api.links123.net/comment/v1',
523
   showList: true,
532
   showList: true,
524
   showEditor: true,
533
   showEditor: true,
525
-  showHeader: true
534
+  showHeader: true,
535
+  showAlertComment: false,
536
+  showAlertReply: false,
537
+  showAlertFavor: false
526
 };
538
 };
527
 
539
 
528
 exports.Editor = _Editor2.default;
540
 exports.Editor = _Editor2.default;

+ 1
- 1
lib/App.js.map
File diff suppressed because it is too large
View File


+ 2
- 2
lib/Comment.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 Object.defineProperty(exports, "__esModule", {
3
 Object.defineProperty(exports, "__esModule", {
4
   value: true
4
   value: true
9
 
9
 
10
 exports.Comment = Comment;
10
 exports.Comment = Comment;
11
 
11
 
12
-var _react = require("react");
12
+var _react = require('react');
13
 
13
 
14
 var _react2 = _interopRequireDefault(_react);
14
 var _react2 = _interopRequireDefault(_react);
15
 
15
 

+ 1
- 1
lib/Comment.js.map View File

1
-{"version":3,"sources":["../src/Comment.js"],"names":["Comment","CommentContext","React","createContext","Component","props","app"],"mappings":";;;;;;;;;QAKgBA,O,GAAAA,O;;AALhB;;;;;;AAEA,IAAMC,iBAAiBC,gBAAMC,aAAN,EAAvB;;AAEA;AACO,SAASH,OAAT,CAAiBI,SAAjB,EAA4B;AACjC;AACA,SAAO,UAASC,KAAT,EAAgB;AACrB;AACA;AACA,WACE;AAAC,oBAAD,CAAgB,QAAhB;AAAA;AACG;AAAA,eAAO,8BAAC,SAAD,eAAeA,KAAf,IAAsB,KAAKC,GAA3B,IAAP;AAAA;AADH,KADF;AAKD,GARD;AASD;;QAEQL,c,GAAAA,c;kBAEMD,O","file":"Comment.js","sourcesContent":["import React from \"react\";\n\nconst CommentContext = React.createContext();\n\n// This function takes a component...\nexport function Comment(Component) {\n  // ...and returns another component...\n  return function(props) {\n    // ... and renders the wrapped component with the context theme!\n    // Notice that we pass through any additional props as well\n    return (\n      <CommentContext.Consumer>\n        {app => <Component {...props} app={app} />}\n      </CommentContext.Consumer>\n    );\n  };\n}\n\nexport { CommentContext };\n\nexport default Comment;\n"]}
1
+{"version":3,"sources":["../src/Comment.js"],"names":["Comment","CommentContext","React","createContext","Component","props","app"],"mappings":";;;;;;;;;QAKgBA,O,GAAAA,O;;AALhB;;;;;;AAEA,IAAMC,iBAAiBC,gBAAMC,aAAN,EAAvB;;AAEA;AACO,SAASH,OAAT,CAAiBI,SAAjB,EAA4B;AACjC;AACA,SAAO,UAASC,KAAT,EAAgB;AACrB;AACA;AACA,WACE;AAAC,oBAAD,CAAgB,QAAhB;AAAA;AACG;AAAA,eAAO,8BAAC,SAAD,eAAeA,KAAf,IAAsB,KAAKC,GAA3B,IAAP;AAAA;AADH,KADF;AAKD,GARD;AASD;;QAEQL,c,GAAAA,c;kBAEMD,O","file":"Comment.js","sourcesContent":["import React from 'react';\n\nconst CommentContext = React.createContext();\n\n// This function takes a component...\nexport function Comment(Component) {\n  // ...and returns another component...\n  return function(props) {\n    // ... and renders the wrapped component with the context theme!\n    // Notice that we pass through any additional props as well\n    return (\n      <CommentContext.Consumer>\n        {app => <Component {...props} app={app} />}\n      </CommentContext.Consumer>\n    );\n  };\n}\n\nexport { CommentContext };\n\nexport default Comment;\n"]}

+ 2
- 2
lib/avatar.js
File diff suppressed because it is too large
View File


+ 1
- 1
lib/avatar.js.map
File diff suppressed because it is too large
View File


+ 3
- 3
lib/axios.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 Object.defineProperty(exports, "__esModule", {
3
 Object.defineProperty(exports, "__esModule", {
4
   value: true
4
   value: true
5
 });
5
 });
6
 
6
 
7
-var _axios = require("axios");
7
+var _axios = require('axios');
8
 
8
 
9
 var _axios2 = _interopRequireDefault(_axios);
9
 var _axios2 = _interopRequireDefault(_axios);
10
 
10
 
11
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
 
12
 
13
 _axios2.default.defaults.withCredentials = true;
13
 _axios2.default.defaults.withCredentials = true;
14
-_axios2.default.defaults.headers.common["Authorization"] = "Bearer ";
14
+_axios2.default.defaults.headers.common['Authorization'] = 'Bearer ';
15
 
15
 
16
 exports.default = _axios2.default;
16
 exports.default = _axios2.default;
17
 //# sourceMappingURL=axios.js.map
17
 //# sourceMappingURL=axios.js.map

+ 1
- 1
lib/axios.js.map View File

1
-{"version":3,"sources":["../src/axios.js"],"names":["axios","defaults","withCredentials","headers","common"],"mappings":";;;;;;AAAA;;;;;;AAEAA,gBAAMC,QAAN,CAAeC,eAAf,GAAiC,IAAjC;AACAF,gBAAMC,QAAN,CAAeE,OAAf,CAAuBC,MAAvB,CAA8B,eAA9B,IAAiD,SAAjD;;kBAEeJ,e","file":"axios.js","sourcesContent":["import axios from \"axios\";\n\naxios.defaults.withCredentials = true;\naxios.defaults.headers.common[\"Authorization\"] = \"Bearer \";\n\nexport default axios;\n"]}
1
+{"version":3,"sources":["../src/axios.js"],"names":["axios","defaults","withCredentials","headers","common"],"mappings":";;;;;;AAAA;;;;;;AAEAA,gBAAMC,QAAN,CAAeC,eAAf,GAAiC,IAAjC;AACAF,gBAAMC,QAAN,CAAeE,OAAf,CAAuBC,MAAvB,CAA8B,eAA9B,IAAiD,SAAjD;;kBAEeJ,e","file":"axios.js","sourcesContent":["import axios from 'axios';\n\naxios.defaults.withCredentials = true;\naxios.defaults.headers.common['Authorization'] = 'Bearer ';\n\nexport default axios;\n"]}

+ 26
- 26
lib/components/CommentBox/index.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 Object.defineProperty(exports, "__esModule", {
3
 Object.defineProperty(exports, "__esModule", {
4
   value: true
4
   value: true
5
 });
5
 });
6
 
6
 
7
-var _icon = require("antd/es/icon");
7
+var _icon = require('antd/es/icon');
8
 
8
 
9
 var _icon2 = _interopRequireDefault(_icon);
9
 var _icon2 = _interopRequireDefault(_icon);
10
 
10
 
11
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
11
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
12
 
12
 
13
-require("antd/es/icon/style/css");
13
+require('antd/es/icon/style/css');
14
 
14
 
15
-var _react = require("react");
15
+var _react = require('react');
16
 
16
 
17
 var _react2 = _interopRequireDefault(_react);
17
 var _react2 = _interopRequireDefault(_react);
18
 
18
 
19
-var _propTypes = require("prop-types");
19
+var _propTypes = require('prop-types');
20
 
20
 
21
 var _propTypes2 = _interopRequireDefault(_propTypes);
21
 var _propTypes2 = _interopRequireDefault(_propTypes);
22
 
22
 
23
-var _Comment = require("../../Comment");
23
+var _Comment = require('../../Comment');
24
 
24
 
25
 var _Comment2 = _interopRequireDefault(_Comment);
25
 var _Comment2 = _interopRequireDefault(_Comment);
26
 
26
 
27
-var _ContentItem = require("./../ContentItem");
27
+var _ContentItem = require('./../ContentItem');
28
 
28
 
29
 var _ContentItem2 = _interopRequireDefault(_ContentItem);
29
 var _ContentItem2 = _interopRequireDefault(_ContentItem);
30
 
30
 
31
-require("./index.css");
31
+require('./index.css');
32
 
32
 
33
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
34
 
34
 
63
 
63
 
64
 
64
 
65
   _createClass(CommentBox, [{
65
   _createClass(CommentBox, [{
66
-    key: "handleToggleReply",
66
+    key: 'handleToggleReply',
67
     value: function handleToggleReply() {
67
     value: function handleToggleReply() {
68
       this.setState({ showReply: !this.state.showReply });
68
       this.setState({ showReply: !this.state.showReply });
69
     }
69
     }
74
      */
74
      */
75
 
75
 
76
   }, {
76
   }, {
77
-    key: "handleGetMoreReply",
77
+    key: 'handleGetMoreReply',
78
     value: function handleGetMoreReply(commentId) {
78
     value: function handleGetMoreReply(commentId) {
79
       // 从第一页开始获取评论
79
       // 从第一页开始获取评论
80
       var page = this.state.page;
80
       var page = this.state.page;
91
      */
91
      */
92
 
92
 
93
   }, {
93
   }, {
94
-    key: "renderReplies",
94
+    key: 'renderReplies',
95
     value: function renderReplies(replies, replyCount, isNoMoreReply) {
95
     value: function renderReplies(replies, replyCount, isNoMoreReply) {
96
       var _this2 = this;
96
       var _this2 = this;
97
 
97
 
101
       if (showReply && replies && replies.length) {
101
       if (showReply && replies && replies.length) {
102
         var len = replies.length;
102
         var len = replies.length;
103
         return _react2.default.createElement(
103
         return _react2.default.createElement(
104
-          "div",
104
+          'div',
105
           { style: { marginLeft: 50 } },
105
           { style: { marginLeft: 50 } },
106
           replies.map(function (item, index) {
106
           replies.map(function (item, index) {
107
             if (index === len - 1) {
107
             if (index === len - 1) {
110
                 replyId: item.id,
110
                 replyId: item.id,
111
                 key: item.id,
111
                 key: item.id,
112
                 content: item,
112
                 content: item,
113
-                action: "replyToReply" // 回复的回复
113
+                action: 'replyToReply' // 回复的回复
114
               }), _react2.default.createElement(
114
               }), _react2.default.createElement(
115
-                "div",
116
-                { className: "comment-more-box", key: "show_more_button" },
115
+                'div',
116
+                { className: 'comment-more-box', key: 'show_more_button' },
117
                 !isNoMoreReply && replyCount !== len && _react2.default.createElement(
117
                 !isNoMoreReply && replyCount !== len && _react2.default.createElement(
118
-                  "span",
118
+                  'span',
119
                   {
119
                   {
120
-                    className: "comment-show-more",
120
+                    className: 'comment-show-more',
121
                     onClick: function onClick() {
121
                     onClick: function onClick() {
122
                       return _this2.handleGetMoreReply(commentId);
122
                       return _this2.handleGetMoreReply(commentId);
123
                     }
123
                     }
124
                   },
124
                   },
125
-                  "\u67E5\u770B\u66F4\u591A\u56DE\u590D"
125
+                  '\u67E5\u770B\u66F4\u591A\u56DE\u590D'
126
                 ),
126
                 ),
127
                 _react2.default.createElement(
127
                 _react2.default.createElement(
128
-                  "a",
128
+                  'a',
129
                   {
129
                   {
130
-                    style: { float: "right" },
130
+                    style: { float: 'right' },
131
                     onClick: _this2.handleToggleReply
131
                     onClick: _this2.handleToggleReply
132
                   },
132
                   },
133
-                  _react2.default.createElement(_icon2.default, { type: "up" }),
134
-                  " \u6536\u8D77\u56DE\u590D"
133
+                  _react2.default.createElement(_icon2.default, { type: 'up' }),
134
+                  ' \u6536\u8D77\u56DE\u590D'
135
                 )
135
                 )
136
               )];
136
               )];
137
             }
137
             }
140
               replyId: item.id,
140
               replyId: item.id,
141
               key: item.id,
141
               key: item.id,
142
               content: item,
142
               content: item,
143
-              action: "replyToReply" // 评论的回复
143
+              action: 'replyToReply' // 评论的回复
144
             });
144
             });
145
           })
145
           })
146
         );
146
         );
148
       return null;
148
       return null;
149
     }
149
     }
150
   }, {
150
   }, {
151
-    key: "render",
151
+    key: 'render',
152
     value: function render() {
152
     value: function render() {
153
       var content = this.props.content;
153
       var content = this.props.content;
154
       var showReply = this.state.showReply;
154
       var showReply = this.state.showReply;
155
 
155
 
156
       return _react2.default.createElement(
156
       return _react2.default.createElement(
157
-        "div",
157
+        'div',
158
         null,
158
         null,
159
         _react2.default.createElement(_ContentItem2.default, {
159
         _react2.default.createElement(_ContentItem2.default, {
160
           content: content,
160
           content: content,
161
           onShowReply: this.handleToggleReply,
161
           onShowReply: this.handleToggleReply,
162
           showReply: showReply,
162
           showReply: showReply,
163
           commentId: content.id,
163
           commentId: content.id,
164
-          action: "reply" // 评论的回复
164
+          action: 'reply' // 评论的回复
165
         }),
165
         }),
166
         this.renderReplies(content.replies, content.reply_count, content.isNoMoreReply)
166
         this.renderReplies(content.replies, content.reply_count, content.isNoMoreReply)
167
       );
167
       );

+ 1
- 1
lib/components/CommentBox/index.js.map
File diff suppressed because it is too large
View File


+ 21
- 15
lib/components/CommentInput/index.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 Object.defineProperty(exports, "__esModule", {
3
 Object.defineProperty(exports, "__esModule", {
4
   value: true
4
   value: true
8
 
8
 
9
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
9
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
10
 
10
 
11
-var _react = require("react");
11
+var _react = require('react');
12
 
12
 
13
 var _react2 = _interopRequireDefault(_react);
13
 var _react2 = _interopRequireDefault(_react);
14
 
14
 
15
-var _propTypes = require("prop-types");
15
+var _propTypes = require('prop-types');
16
 
16
 
17
 var _propTypes2 = _interopRequireDefault(_propTypes);
17
 var _propTypes2 = _interopRequireDefault(_propTypes);
18
 
18
 
19
-var _Comment = require("../../Comment");
19
+var _constant = require('../../constant');
20
+
21
+var _Comment = require('../../Comment');
20
 
22
 
21
 var _Comment2 = _interopRequireDefault(_Comment);
23
 var _Comment2 = _interopRequireDefault(_Comment);
22
 
24
 
49
 
51
 
50
 
52
 
51
   _createClass(CommentInput, [{
53
   _createClass(CommentInput, [{
52
-    key: "handleSubmit",
54
+    key: 'handleSubmit',
53
     value: function handleSubmit(_ref, cb) {
55
     value: function handleSubmit(_ref, cb) {
54
       var text = _ref.text,
56
       var text = _ref.text,
55
           files = _ref.files;
57
           files = _ref.files;
56
 
58
 
57
       var value = text;
59
       var value = text;
58
       if (files && files.length) {
60
       if (files && files.length) {
59
-        value += "<br /><br />";
61
+        value += _constant.IMAGE_SPLIT;
60
         files.forEach(function (file) {
62
         files.forEach(function (file) {
61
-          value += "[" + file + "]";
63
+          value += file + ',';
62
         });
64
         });
63
       }
65
       }
66
+      if (value.substr(-1) === ',') {
67
+        value = value.slice(0, -1);
68
+      }
69
+
64
       var _props = this.props,
70
       var _props = this.props,
65
           action = _props.action,
71
           action = _props.action,
66
           commentId = _props.commentId,
72
           commentId = _props.commentId,
67
           replyId = _props.replyId,
73
           replyId = _props.replyId,
68
           callback = _props.callback;
74
           callback = _props.callback;
69
 
75
 
70
-      if (action === "comment") {
76
+      if (action === 'comment') {
71
         this.props.app.sCreateComment({
77
         this.props.app.sCreateComment({
72
           content: value
78
           content: value
73
         }, cb);
79
         }, cb);
74
-      } else if (action === "reply") {
80
+      } else if (action === 'reply') {
75
         this.props.app.sCreateReply({
81
         this.props.app.sCreateReply({
76
           comment_id: commentId,
82
           comment_id: commentId,
77
           content: value
83
           content: value
78
         }, function () {
84
         }, function () {
79
           return callback && callback();
85
           return callback && callback();
80
         });
86
         });
81
-      } else if (action === "replyToReply") {
87
+      } else if (action === 'replyToReply') {
82
         this.props.app.sCreateReply({
88
         this.props.app.sCreateReply({
83
           comment_id: commentId,
89
           comment_id: commentId,
84
           content: value,
90
           content: value,
89
       }
95
       }
90
     }
96
     }
91
   }, {
97
   }, {
92
-    key: "render",
98
+    key: 'render',
93
     value: function render() {
99
     value: function render() {
94
       var _this2 = this;
100
       var _this2 = this;
95
 
101
 
102
           onSubmit: _this2.handleSubmit
108
           onSubmit: _this2.handleSubmit
103
         }, child.props, {
109
         }, child.props, {
104
           // 如果当前的编辑器不是“评论”,则编辑器高度减小一些
110
           // 如果当前的编辑器不是“评论”,则编辑器高度减小一些
105
-          rows: _this2.props.action === "comment" ? child.props.rows : child.props.rows - 1
111
+          rows: _this2.props.action === 'comment' ? child.props.rows : child.props.rows - 1
106
         }));
112
         }));
107
       });
113
       });
108
 
114
 
109
       return _react2.default.createElement(
115
       return _react2.default.createElement(
110
-        "div",
116
+        'div',
111
         null,
117
         null,
112
         childrenWithProps
118
         childrenWithProps
113
       );
119
       );
121
   // comment 评论
127
   // comment 评论
122
   // reply 评论的回复
128
   // reply 评论的回复
123
   // replyToReply 回复的回复
129
   // replyToReply 回复的回复
124
-  action: _propTypes2.default.oneOf(["comment", "reply", "replyToReply"])
130
+  action: _propTypes2.default.oneOf(['comment', 'reply', 'replyToReply'])
125
 };
131
 };
126
 
132
 
127
 CommentInput.defaultProps = {
133
 CommentInput.defaultProps = {
128
-  action: "comment"
134
+  action: 'comment'
129
 };
135
 };
130
 
136
 
131
 exports.default = (0, _Comment2.default)(CommentInput);
137
 exports.default = (0, _Comment2.default)(CommentInput);

+ 1
- 1
lib/components/CommentInput/index.js.map View File

1
-{"version":3,"sources":["../../../src/components/CommentInput/index.js"],"names":["CommentInput","props","state","handleSubmit","bind","cb","text","files","value","length","forEach","file","action","commentId","replyId","callback","app","sCreateComment","content","sCreateReply","comment_id","reply_id","childrenWithProps","React","Children","map","cloneElement","child","onSubmit","rows","Component","propTypes","PropTypes","oneOf","defaultProps"],"mappings":";;;;;;;;;;AAAA;;;;AACA;;;;AACA;;;;;;;;;;;;IAEMA,Y;;;AACJ,wBAAYC,KAAZ,EAAmB;AAAA;;AAAA,4HACXA,KADW;;AAEjB,UAAKC,KAAL,GAAa,EAAb;AACA,UAAKC,YAAL,GAAoB,MAAKA,YAAL,CAAkBC,IAAlB,OAApB;AAHiB;AAIlB;;AAED;;;;;;;;;uCAK8BC,E,EAAI;AAAA,UAAnBC,IAAmB,QAAnBA,IAAmB;AAAA,UAAbC,KAAa,QAAbA,KAAa;;AAChC,UAAIC,QAAQF,IAAZ;AACA,UAAIC,SAASA,MAAME,MAAnB,EAA2B;AACzBD,iBAAS,cAAT;AACAD,cAAMG,OAAN,CAAc,gBAAQ;AACpBF,yBAAaG,IAAb;AACD,SAFD;AAGD;AAP+B,mBAQiB,KAAKV,KARtB;AAAA,UAQxBW,MARwB,UAQxBA,MARwB;AAAA,UAQhBC,SARgB,UAQhBA,SARgB;AAAA,UAQLC,OARK,UAQLA,OARK;AAAA,UAQIC,QARJ,UAQIA,QARJ;;AAShC,UAAIH,WAAW,SAAf,EAA0B;AACxB,aAAKX,KAAL,CAAWe,GAAX,CAAeC,cAAf,CACE;AACEC,mBAASV;AADX,SADF,EAIEH,EAJF;AAMD,OAPD,MAOO,IAAIO,WAAW,OAAf,EAAwB;AAC7B,aAAKX,KAAL,CAAWe,GAAX,CAAeG,YAAf,CACE;AACEC,sBAAYP,SADd;AAEEK,mBAASV;AAFX,SADF,EAKE;AAAA,iBAAMO,YAAYA,UAAlB;AAAA,SALF;AAOD,OARM,MAQA,IAAIH,WAAW,cAAf,EAA+B;AACpC,aAAKX,KAAL,CAAWe,GAAX,CAAeG,YAAf,CACE;AACEC,sBAAYP,SADd;AAEEK,mBAASV,KAFX;AAGEa,oBAAUP;AAHZ,SADF,EAME;AAAA,iBAAMC,YAAYA,UAAlB;AAAA,SANF;AAQD;AACF;;;6BAEQ;AAAA;;AACP,UAAMO,oBAAoBC,gBAAMC,QAAN,CAAeC,GAAf,CAAmB,KAAKxB,KAAL,CAAWiB,OAA9B,EAAuC,iBAAS;AACxE,eAAOK,gBAAMG,YAAN,CAAmBC,KAAnB;AACL;AACA;AACA;AACA;AACAC,oBAAU,OAAKzB;AALV,WAMFwB,MAAM1B,KANJ;AAOL;AACA4B,gBACE,OAAK5B,KAAL,CAAWW,MAAX,KAAsB,SAAtB,GACIe,MAAM1B,KAAN,CAAY4B,IADhB,GAEIF,MAAM1B,KAAN,CAAY4B,IAAZ,GAAmB;AAXpB,WAAP;AAaD,OAdyB,CAA1B;;AAgBA,aAAO;AAAA;AAAA;AAAMP;AAAN,OAAP;AACD;;;;EAlEwBQ,gB;;AAqE3B9B,aAAa+B,SAAb,GAAyB;AACvB;AACA;AACA;AACAnB,UAAQoB,oBAAUC,KAAV,CAAgB,CAAC,SAAD,EAAY,OAAZ,EAAqB,cAArB,CAAhB;AAJe,CAAzB;;AAOAjC,aAAakC,YAAb,GAA4B;AAC1BtB,UAAQ;AADkB,CAA5B;;kBAIe,uBAAQZ,YAAR,C","file":"index.js","sourcesContent":["import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport Comment from \"../../Comment\";\n\nclass CommentInput extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {};\n    this.handleSubmit = this.handleSubmit.bind(this);\n  }\n\n  /**\n   * 提交评论\n   * @param {object} { text<string>, files<array> } 需要提交的评论的文本和图片\n   * @param {function} cb 提交成功后的回掉\n   */\n  handleSubmit({ text, files }, cb) {\n    let value = text;\n    if (files && files.length) {\n      value += \"<br /><br />\";\n      files.forEach(file => {\n        value += `[${file}]`;\n      });\n    }\n    const { action, commentId, replyId, callback } = this.props;\n    if (action === \"comment\") {\n      this.props.app.sCreateComment(\n        {\n          content: value\n        },\n        cb\n      );\n    } else if (action === \"reply\") {\n      this.props.app.sCreateReply(\n        {\n          comment_id: commentId,\n          content: value\n        },\n        () => callback && callback()\n      );\n    } else if (action === \"replyToReply\") {\n      this.props.app.sCreateReply(\n        {\n          comment_id: commentId,\n          content: value,\n          reply_id: replyId\n        },\n        () => callback && callback()\n      );\n    }\n  }\n\n  render() {\n    const childrenWithProps = React.Children.map(this.props.content, child => {\n      return React.cloneElement(child, {\n        // 编辑器本身不提交值,但 CommentInput 会提交\n        // CommentInput 主要是负责评论的业务逻辑,提交评论和回复\n        // 默认使用 CommentInput 的 onSubmit 来提交评论\n        // 但也可以使用 Editor 的 props 来覆盖 onSubmit\n        onSubmit: this.handleSubmit,\n        ...child.props,\n        // 如果当前的编辑器不是“评论”,则编辑器高度减小一些\n        rows:\n          this.props.action === \"comment\"\n            ? child.props.rows\n            : child.props.rows - 1\n      });\n    });\n\n    return <div>{childrenWithProps}</div>;\n  }\n}\n\nCommentInput.propTypes = {\n  // comment 评论\n  // reply 评论的回复\n  // replyToReply 回复的回复\n  action: PropTypes.oneOf([\"comment\", \"reply\", \"replyToReply\"])\n};\n\nCommentInput.defaultProps = {\n  action: \"comment\"\n};\n\nexport default Comment(CommentInput);\n"]}
1
+{"version":3,"sources":["../../../src/components/CommentInput/index.js"],"names":["CommentInput","props","state","handleSubmit","bind","cb","text","files","value","length","IMAGE_SPLIT","forEach","file","substr","slice","action","commentId","replyId","callback","app","sCreateComment","content","sCreateReply","comment_id","reply_id","childrenWithProps","React","Children","map","cloneElement","child","onSubmit","rows","Component","propTypes","PropTypes","oneOf","defaultProps"],"mappings":";;;;;;;;;;AAAA;;;;AACA;;;;AACA;;AACA;;;;;;;;;;;;IAEMA,Y;;;AACJ,wBAAYC,KAAZ,EAAmB;AAAA;;AAAA,4HACXA,KADW;;AAEjB,UAAKC,KAAL,GAAa,EAAb;AACA,UAAKC,YAAL,GAAoB,MAAKA,YAAL,CAAkBC,IAAlB,OAApB;AAHiB;AAIlB;;AAED;;;;;;;;;uCAK8BC,E,EAAI;AAAA,UAAnBC,IAAmB,QAAnBA,IAAmB;AAAA,UAAbC,KAAa,QAAbA,KAAa;;AAChC,UAAIC,QAAQF,IAAZ;AACA,UAAIC,SAASA,MAAME,MAAnB,EAA2B;AACzBD,iBAASE,qBAAT;AACAH,cAAMI,OAAN,CAAc,gBAAQ;AACpBH,mBAAYI,IAAZ;AACD,SAFD;AAGD;AACD,UAAIJ,MAAMK,MAAN,CAAa,CAAC,CAAd,MAAqB,GAAzB,EAA8B;AAC5BL,gBAAQA,MAAMM,KAAN,CAAY,CAAZ,EAAe,CAAC,CAAhB,CAAR;AACD;;AAV+B,mBAYiB,KAAKb,KAZtB;AAAA,UAYxBc,MAZwB,UAYxBA,MAZwB;AAAA,UAYhBC,SAZgB,UAYhBA,SAZgB;AAAA,UAYLC,OAZK,UAYLA,OAZK;AAAA,UAYIC,QAZJ,UAYIA,QAZJ;;AAahC,UAAIH,WAAW,SAAf,EAA0B;AACxB,aAAKd,KAAL,CAAWkB,GAAX,CAAeC,cAAf,CACE;AACEC,mBAASb;AADX,SADF,EAIEH,EAJF;AAMD,OAPD,MAOO,IAAIU,WAAW,OAAf,EAAwB;AAC7B,aAAKd,KAAL,CAAWkB,GAAX,CAAeG,YAAf,CACE;AACEC,sBAAYP,SADd;AAEEK,mBAASb;AAFX,SADF,EAKE;AAAA,iBAAMU,YAAYA,UAAlB;AAAA,SALF;AAOD,OARM,MAQA,IAAIH,WAAW,cAAf,EAA+B;AACpC,aAAKd,KAAL,CAAWkB,GAAX,CAAeG,YAAf,CACE;AACEC,sBAAYP,SADd;AAEEK,mBAASb,KAFX;AAGEgB,oBAAUP;AAHZ,SADF,EAME;AAAA,iBAAMC,YAAYA,UAAlB;AAAA,SANF;AAQD;AACF;;;6BAEQ;AAAA;;AACP,UAAMO,oBAAoBC,gBAAMC,QAAN,CAAeC,GAAf,CAAmB,KAAK3B,KAAL,CAAWoB,OAA9B,EAAuC,iBAAS;AACxE,eAAOK,gBAAMG,YAAN,CAAmBC,KAAnB;AACL;AACA;AACA;AACA;AACAC,oBAAU,OAAK5B;AALV,WAMF2B,MAAM7B,KANJ;AAOL;AACA+B,gBACE,OAAK/B,KAAL,CAAWc,MAAX,KAAsB,SAAtB,GACIe,MAAM7B,KAAN,CAAY+B,IADhB,GAEIF,MAAM7B,KAAN,CAAY+B,IAAZ,GAAmB;AAXpB,WAAP;AAaD,OAdyB,CAA1B;;AAgBA,aAAO;AAAA;AAAA;AAAMP;AAAN,OAAP;AACD;;;;EAtEwBQ,gB;;AAyE3BjC,aAAakC,SAAb,GAAyB;AACvB;AACA;AACA;AACAnB,UAAQoB,oBAAUC,KAAV,CAAgB,CAAC,SAAD,EAAY,OAAZ,EAAqB,cAArB,CAAhB;AAJe,CAAzB;;AAOApC,aAAaqC,YAAb,GAA4B;AAC1BtB,UAAQ;AADkB,CAA5B;;kBAIe,uBAAQf,YAAR,C","file":"index.js","sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { IMAGE_SPLIT } from '../../constant';\nimport Comment from '../../Comment';\n\nclass CommentInput extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {};\n    this.handleSubmit = this.handleSubmit.bind(this);\n  }\n\n  /**\n   * 提交评论\n   * @param {object} { text<string>, files<array> } 需要提交的评论的文本和图片\n   * @param {function} cb 提交成功后的回掉\n   */\n  handleSubmit({ text, files }, cb) {\n    let value = text;\n    if (files && files.length) {\n      value += IMAGE_SPLIT;\n      files.forEach(file => {\n        value += `${file},`;\n      });\n    }\n    if (value.substr(-1) === ',') {\n      value = value.slice(0, -1);\n    }\n\n    const { action, commentId, replyId, callback } = this.props;\n    if (action === 'comment') {\n      this.props.app.sCreateComment(\n        {\n          content: value,\n        },\n        cb\n      );\n    } else if (action === 'reply') {\n      this.props.app.sCreateReply(\n        {\n          comment_id: commentId,\n          content: value,\n        },\n        () => callback && callback()\n      );\n    } else if (action === 'replyToReply') {\n      this.props.app.sCreateReply(\n        {\n          comment_id: commentId,\n          content: value,\n          reply_id: replyId,\n        },\n        () => callback && callback()\n      );\n    }\n  }\n\n  render() {\n    const childrenWithProps = React.Children.map(this.props.content, child => {\n      return React.cloneElement(child, {\n        // 编辑器本身不提交值,但 CommentInput 会提交\n        // CommentInput 主要是负责评论的业务逻辑,提交评论和回复\n        // 默认使用 CommentInput 的 onSubmit 来提交评论\n        // 但也可以使用 Editor 的 props 来覆盖 onSubmit\n        onSubmit: this.handleSubmit,\n        ...child.props,\n        // 如果当前的编辑器不是“评论”,则编辑器高度减小一些\n        rows:\n          this.props.action === 'comment'\n            ? child.props.rows\n            : child.props.rows - 1,\n      });\n    });\n\n    return <div>{childrenWithProps}</div>;\n  }\n}\n\nCommentInput.propTypes = {\n  // comment 评论\n  // reply 评论的回复\n  // replyToReply 回复的回复\n  action: PropTypes.oneOf(['comment', 'reply', 'replyToReply']),\n};\n\nCommentInput.defaultProps = {\n  action: 'comment',\n};\n\nexport default Comment(CommentInput);\n"]}

+ 17
- 17
lib/components/CommentList/index.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 Object.defineProperty(exports, "__esModule", {
3
 Object.defineProperty(exports, "__esModule", {
4
   value: true
4
   value: true
5
 });
5
 });
6
 
6
 
7
-var _spin = require("antd/es/spin");
7
+var _spin = require('antd/es/spin');
8
 
8
 
9
 var _spin2 = _interopRequireDefault(_spin);
9
 var _spin2 = _interopRequireDefault(_spin);
10
 
10
 
11
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
11
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
12
 
12
 
13
-require("antd/es/spin/style/css");
13
+require('antd/es/spin/style/css');
14
 
14
 
15
-var _react = require("react");
15
+var _react = require('react');
16
 
16
 
17
 var _react2 = _interopRequireDefault(_react);
17
 var _react2 = _interopRequireDefault(_react);
18
 
18
 
19
-var _Comment = require("../../Comment");
19
+var _Comment = require('../../Comment');
20
 
20
 
21
 var _Comment2 = _interopRequireDefault(_Comment);
21
 var _Comment2 = _interopRequireDefault(_Comment);
22
 
22
 
23
-var _CommentBox = require("../CommentBox");
23
+var _CommentBox = require('../CommentBox');
24
 
24
 
25
 var _CommentBox2 = _interopRequireDefault(_CommentBox);
25
 var _CommentBox2 = _interopRequireDefault(_CommentBox);
26
 
26
 
27
-require("./index.css");
27
+require('./index.css');
28
 
28
 
29
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
30
 
30
 
47
   }
47
   }
48
 
48
 
49
   _createClass(CommentList, [{
49
   _createClass(CommentList, [{
50
-    key: "componentWillMount",
50
+    key: 'componentWillMount',
51
     value: function componentWillMount() {
51
     value: function componentWillMount() {
52
       this.props.app.sGetComment();
52
       this.props.app.sGetComment();
53
     }
53
     }
54
   }, {
54
   }, {
55
-    key: "render",
55
+    key: 'render',
56
     value: function render() {
56
     value: function render() {
57
       var _props$app = this.props.app,
57
       var _props$app = this.props.app,
58
           list = _props$app.list,
58
           list = _props$app.list,
65
 
65
 
66
       var spinning = Boolean(loading.sGetComment || loading.sCommentFavor || loading.sReplyFavor);
66
       var spinning = Boolean(loading.sGetComment || loading.sCommentFavor || loading.sReplyFavor);
67
       return _react2.default.createElement(
67
       return _react2.default.createElement(
68
-        "div",
68
+        'div',
69
         null,
69
         null,
70
         _react2.default.createElement(
70
         _react2.default.createElement(
71
           _spin2.default,
71
           _spin2.default,
72
           { spinning: spinning },
72
           { spinning: spinning },
73
           _react2.default.createElement(
73
           _react2.default.createElement(
74
-            "div",
74
+            'div',
75
             null,
75
             null,
76
-            "\u5171 ",
76
+            '\u5171 ',
77
             total,
77
             total,
78
-            " \u6761\u8BC4\u8BBA"
78
+            ' \u6761\u8BC4\u8BBA'
79
           ),
79
           ),
80
           list.map(function (item) {
80
           list.map(function (item) {
81
             return _react2.default.createElement(_CommentBox2.default, { content: item, key: item.id, commentId: item.id });
81
             return _react2.default.createElement(_CommentBox2.default, { content: item, key: item.id, commentId: item.id });
82
           }),
82
           }),
83
           !isNoMoreComment && list.length !== total && _react2.default.createElement(
83
           !isNoMoreComment && list.length !== total && _react2.default.createElement(
84
-            "div",
84
+            'div',
85
             {
85
             {
86
-              className: "comment-list-show-more",
86
+              className: 'comment-list-show-more',
87
               onClick: function onClick() {
87
               onClick: function onClick() {
88
                 return sGetComment({ page: page + 1 });
88
                 return sGetComment({ page: page + 1 });
89
               }
89
               }
90
             },
90
             },
91
             _react2.default.createElement(
91
             _react2.default.createElement(
92
-              "span",
92
+              'span',
93
               null,
93
               null,
94
-              "\u67E5\u770B\u66F4\u591A\u8BC4\u8BBA"
94
+              '\u67E5\u770B\u66F4\u591A\u8BC4\u8BBA'
95
             )
95
             )
96
           )
96
           )
97
         )
97
         )

+ 1
- 1
lib/components/CommentList/index.js.map View File

1
-{"version":3,"sources":["../../../src/components/CommentList/index.js"],"names":["CommentList","props","state","app","sGetComment","list","total","page","loading","isNoMoreComment","spinning","Boolean","sCommentFavor","sReplyFavor","map","item","id","length","Component","propTypes"],"mappings":";;;;;;;;;;;;;;AAAA;;;;AAEA;;;;AACA;;;;AACA;;;;;;;;;;IAEMA,W;;;AACJ,uBAAYC,KAAZ,EAAmB;AAAA;;AAAA,0HACXA,KADW;;AAEjB,UAAKC,KAAL,GAAa,EAAb;AAFiB;AAGlB;;;;yCAEoB;AACnB,WAAKD,KAAL,CAAWE,GAAX,CAAeC,WAAf;AACD;;;6BAEQ;AAAA,uBAQH,KAAKH,KAAL,CAAWE,GARR;AAAA,UAELE,IAFK,cAELA,IAFK;AAAA,UAGLC,KAHK,cAGLA,KAHK;AAAA,UAILC,IAJK,cAILA,IAJK;AAAA,UAKLC,OALK,cAKLA,OALK;AAAA,UAMLC,eANK,cAMLA,eANK;AAAA,UAOLL,WAPK,cAOLA,WAPK;;;AAUP,UAAMM,WAAWC,QACfH,QAAQJ,WAAR,IAAuBI,QAAQI,aAA/B,IAAgDJ,QAAQK,WADzC,CAAjB;AAGA,aACE;AAAA;AAAA;AACE;AAAA;AAAA,YAAM,UAAUH,QAAhB;AACE;AAAA;AAAA;AAAA;AAAQJ,iBAAR;AAAA;AAAA,WADF;AAEGD,eAAKS,GAAL,CAAS;AAAA,mBACR,8BAAC,oBAAD,IAAY,SAASC,IAArB,EAA2B,KAAKA,KAAKC,EAArC,EAAyC,WAAWD,KAAKC,EAAzD,GADQ;AAAA,WAAT,CAFH;AAMG,WAACP,eAAD,IACCJ,KAAKY,MAAL,KAAgBX,KADjB,IAEG;AAAA;AAAA;AACE,yBAAU,wBADZ;AAEE,uBAAS;AAAA,uBAAMF,YAAY,EAAEG,MAAMA,OAAO,CAAf,EAAZ,CAAN;AAAA;AAFX;AAIE;AAAA;AAAA;AAAA;AAAA;AAJF;AARN;AADF,OADF;AAoBD;;;;EA3CuBW,gB;;AA8C1BlB,YAAYmB,SAAZ,GAAwB,EAAxB;;kBAEe,uBAAQnB,WAAR,C","file":"index.js","sourcesContent":["import React, { Component } from \"react\";\nimport { Spin } from \"antd\";\nimport Comment from \"../../Comment\";\nimport CommentBox from \"../CommentBox\";\nimport \"./index.css\";\n\nclass CommentList extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {};\n  }\n\n  componentWillMount() {\n    this.props.app.sGetComment();\n  }\n\n  render() {\n    const {\n      list,\n      total,\n      page,\n      loading,\n      isNoMoreComment,\n      sGetComment\n    } = this.props.app;\n\n    const spinning = Boolean(\n      loading.sGetComment || loading.sCommentFavor || loading.sReplyFavor\n    );\n    return (\n      <div>\n        <Spin spinning={spinning}>\n          <div>共 {total} 条评论</div>\n          {list.map(item => (\n            <CommentBox content={item} key={item.id} commentId={item.id} />\n          ))}\n\n          {!isNoMoreComment &&\n            list.length !== total && (\n              <div\n                className=\"comment-list-show-more\"\n                onClick={() => sGetComment({ page: page + 1 })}\n              >\n                <span>查看更多评论</span>\n              </div>\n            )}\n        </Spin>\n      </div>\n    );\n  }\n}\n\nCommentList.propTypes = {};\n\nexport default Comment(CommentList);\n"]}
1
+{"version":3,"sources":["../../../src/components/CommentList/index.js"],"names":["CommentList","props","state","app","sGetComment","list","total","page","loading","isNoMoreComment","spinning","Boolean","sCommentFavor","sReplyFavor","map","item","id","length","Component","propTypes"],"mappings":";;;;;;;;;;;;;;AAAA;;;;AAEA;;;;AACA;;;;AACA;;;;;;;;;;IAEMA,W;;;AACJ,uBAAYC,KAAZ,EAAmB;AAAA;;AAAA,0HACXA,KADW;;AAEjB,UAAKC,KAAL,GAAa,EAAb;AAFiB;AAGlB;;;;yCAEoB;AACnB,WAAKD,KAAL,CAAWE,GAAX,CAAeC,WAAf;AACD;;;6BAEQ;AAAA,uBAQH,KAAKH,KAAL,CAAWE,GARR;AAAA,UAELE,IAFK,cAELA,IAFK;AAAA,UAGLC,KAHK,cAGLA,KAHK;AAAA,UAILC,IAJK,cAILA,IAJK;AAAA,UAKLC,OALK,cAKLA,OALK;AAAA,UAMLC,eANK,cAMLA,eANK;AAAA,UAOLL,WAPK,cAOLA,WAPK;;;AAUP,UAAMM,WAAWC,QACfH,QAAQJ,WAAR,IAAuBI,QAAQI,aAA/B,IAAgDJ,QAAQK,WADzC,CAAjB;AAGA,aACE;AAAA;AAAA;AACE;AAAA;AAAA,YAAM,UAAUH,QAAhB;AACE;AAAA;AAAA;AAAA;AAAQJ,iBAAR;AAAA;AAAA,WADF;AAEGD,eAAKS,GAAL,CAAS;AAAA,mBACR,8BAAC,oBAAD,IAAY,SAASC,IAArB,EAA2B,KAAKA,KAAKC,EAArC,EAAyC,WAAWD,KAAKC,EAAzD,GADQ;AAAA,WAAT,CAFH;AAMG,WAACP,eAAD,IACCJ,KAAKY,MAAL,KAAgBX,KADjB,IAEG;AAAA;AAAA;AACE,yBAAU,wBADZ;AAEE,uBAAS;AAAA,uBAAMF,YAAY,EAAEG,MAAMA,OAAO,CAAf,EAAZ,CAAN;AAAA;AAFX;AAIE;AAAA;AAAA;AAAA;AAAA;AAJF;AARN;AADF,OADF;AAoBD;;;;EA3CuBW,gB;;AA8C1BlB,YAAYmB,SAAZ,GAAwB,EAAxB;;kBAEe,uBAAQnB,WAAR,C","file":"index.js","sourcesContent":["import React, { Component } from 'react';\nimport { Spin } from 'antd';\nimport Comment from '../../Comment';\nimport CommentBox from '../CommentBox';\nimport './index.css';\n\nclass CommentList extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {};\n  }\n\n  componentWillMount() {\n    this.props.app.sGetComment();\n  }\n\n  render() {\n    const {\n      list,\n      total,\n      page,\n      loading,\n      isNoMoreComment,\n      sGetComment,\n    } = this.props.app;\n\n    const spinning = Boolean(\n      loading.sGetComment || loading.sCommentFavor || loading.sReplyFavor\n    );\n    return (\n      <div>\n        <Spin spinning={spinning}>\n          <div>共 {total} 条评论</div>\n          {list.map(item => (\n            <CommentBox content={item} key={item.id} commentId={item.id} />\n          ))}\n\n          {!isNoMoreComment &&\n            list.length !== total && (\n              <div\n                className=\"comment-list-show-more\"\n                onClick={() => sGetComment({ page: page + 1 })}\n              >\n                <span>查看更多评论</span>\n              </div>\n            )}\n        </Spin>\n      </div>\n    );\n  }\n}\n\nCommentList.propTypes = {};\n\nexport default Comment(CommentList);\n"]}

+ 87
- 56
lib/components/ContentItem/index.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 Object.defineProperty(exports, "__esModule", {
3
 Object.defineProperty(exports, "__esModule", {
4
   value: true
4
   value: true
5
 });
5
 });
6
 
6
 
7
-var _icon = require("antd/es/icon");
7
+var _icon = require('antd/es/icon');
8
 
8
 
9
 var _icon2 = _interopRequireDefault(_icon);
9
 var _icon2 = _interopRequireDefault(_icon);
10
 
10
 
11
-var _tooltip = require("antd/es/tooltip");
11
+var _tooltip = require('antd/es/tooltip');
12
 
12
 
13
 var _tooltip2 = _interopRequireDefault(_tooltip);
13
 var _tooltip2 = _interopRequireDefault(_tooltip);
14
 
14
 
15
-var _avatar = require("antd/es/avatar");
15
+var _avatar = require('antd/es/avatar');
16
 
16
 
17
 var _avatar2 = _interopRequireDefault(_avatar);
17
 var _avatar2 = _interopRequireDefault(_avatar);
18
 
18
 
19
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
19
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
20
 
20
 
21
-require("antd/es/icon/style/css");
21
+require('antd/es/icon/style/css');
22
 
22
 
23
-require("antd/es/tooltip/style/css");
23
+require('antd/es/tooltip/style/css');
24
 
24
 
25
-require("antd/es/avatar/style/css");
25
+require('antd/es/avatar/style/css');
26
 
26
 
27
-var _react = require("react");
27
+var _react = require('react');
28
 
28
 
29
 var _react2 = _interopRequireDefault(_react);
29
 var _react2 = _interopRequireDefault(_react);
30
 
30
 
31
-var _propTypes = require("prop-types");
31
+var _propTypes = require('prop-types');
32
 
32
 
33
 var _propTypes2 = _interopRequireDefault(_propTypes);
33
 var _propTypes2 = _interopRequireDefault(_propTypes);
34
 
34
 
35
-var _dayjs = require("dayjs");
35
+var _dayjs = require('dayjs');
36
 
36
 
37
 var _dayjs2 = _interopRequireDefault(_dayjs);
37
 var _dayjs2 = _interopRequireDefault(_dayjs);
38
 
38
 
39
-require("dayjs/locale/zh-cn");
39
+require('dayjs/locale/zh-cn');
40
 
40
 
41
-var _relativeTime = require("dayjs/plugin/relativeTime");
41
+var _relativeTime = require('dayjs/plugin/relativeTime');
42
 
42
 
43
 var _relativeTime2 = _interopRequireDefault(_relativeTime);
43
 var _relativeTime2 = _interopRequireDefault(_relativeTime);
44
 
44
 
45
-var _Comment = require("../../Comment");
45
+var _Comment = require('../../Comment');
46
 
46
 
47
 var _Comment2 = _interopRequireDefault(_Comment);
47
 var _Comment2 = _interopRequireDefault(_Comment);
48
 
48
 
49
-var _CommentInput = require("../CommentInput");
49
+var _CommentInput = require('../CommentInput');
50
 
50
 
51
 var _CommentInput2 = _interopRequireDefault(_CommentInput);
51
 var _CommentInput2 = _interopRequireDefault(_CommentInput);
52
 
52
 
53
-var _avatar3 = require("../../avatar");
53
+var _avatar3 = require('../../avatar');
54
 
54
 
55
 var _avatar4 = _interopRequireDefault(_avatar3);
55
 var _avatar4 = _interopRequireDefault(_avatar3);
56
 
56
 
57
-var _helper = require("../../helper");
57
+var _helper = require('../../helper');
58
 
58
 
59
-require("./index.css");
59
+var _constant = require('../../constant');
60
+
61
+require('./index.css');
60
 
62
 
61
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
63
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
62
 
64
 
66
 
68
 
67
 function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
69
 function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
68
 
70
 
69
-_dayjs2.default.locale("zh-cn");
71
+_dayjs2.default.locale('zh-cn');
70
 _dayjs2.default.extend(_relativeTime2.default);
72
 _dayjs2.default.extend(_relativeTime2.default);
71
 
73
 
72
 var CommentItem = function (_Component) {
74
 var CommentItem = function (_Component) {
86
   }
88
   }
87
 
89
 
88
   _createClass(CommentItem, [{
90
   _createClass(CommentItem, [{
89
-    key: "handleToggleInput",
91
+    key: 'handleToggleInput',
90
     value: function handleToggleInput() {
92
     value: function handleToggleInput() {
91
       this.setState({ showInput: !this.state.showInput });
93
       this.setState({ showInput: !this.state.showInput });
92
     }
94
     }
93
   }, {
95
   }, {
94
-    key: "renderTextWithReply",
96
+    key: 'renderTextWithReply',
95
     value: function renderTextWithReply(text, content) {
97
     value: function renderTextWithReply(text, content) {
96
       var newText = text;
98
       var newText = text;
97
       var reply = content.reply;
99
       var reply = content.reply;
98
 
100
 
99
       if (reply) {
101
       if (reply) {
100
-        newText = newText + " //@<a href=\"/" + reply.user_id + "\">" + reply.user_name + "</a> " + reply.content;
102
+        // newText = `${newText} //@<a href="/${reply.user_id}">${
103
+        //   reply.user_name
104
+        // }</a> ${reply.content}`;
105
+        newText = newText + ' //@' + reply.user_name + ' ' + reply.content;
106
+        // newText = (
107
+        //   <span>
108
+        //     {newText}
109
+        //     @<a href={`/${reply.user_id}`}>{reply.user_name}</a>{reply.content}
110
+        //   </span>
111
+        // )
101
         if (reply.reply) {
112
         if (reply.reply) {
102
           return this.renderTextWithReply(newText, reply);
113
           return this.renderTextWithReply(newText, reply);
103
         }
114
         }
105
       return newText;
116
       return newText;
106
     }
117
     }
107
   }, {
118
   }, {
108
-    key: "render",
119
+    key: 'render',
109
     value: function render() {
120
     value: function render() {
110
       var _props = this.props,
121
       var _props = this.props,
111
           commentId = _props.commentId,
122
           commentId = _props.commentId,
118
       var showInput = this.state.showInput;
129
       var showInput = this.state.showInput;
119
 
130
 
120
 
131
 
132
+      var newContent = content.content;
133
+      var images = '';
134
+      if (newContent.indexOf(_constant.IMAGE_SPLIT) !== -1) {
135
+        newContent = newContent.split(_constant.IMAGE_SPLIT);
136
+        images = newContent.pop();
137
+        newContent = newContent.join('');
138
+      }
139
+
121
       return _react2.default.createElement(
140
       return _react2.default.createElement(
122
-        "div",
123
-        { className: "comment-item-box" },
141
+        'div',
142
+        { className: 'comment-item-box' },
124
         _react2.default.createElement(
143
         _react2.default.createElement(
125
-          "div",
126
-          { className: "comment-item-left" },
127
-          _react2.default.createElement(_avatar2.default, { src: content.user_avatar || _avatar4.default, size: "large" })
144
+          'div',
145
+          { className: 'comment-item-left' },
146
+          _react2.default.createElement(_avatar2.default, { src: content.user_avatar || _avatar4.default, size: 'large' })
128
         ),
147
         ),
129
         _react2.default.createElement(
148
         _react2.default.createElement(
130
-          "div",
131
-          { className: "comment-item-right" },
149
+          'div',
150
+          { className: 'comment-item-right' },
132
           _react2.default.createElement(
151
           _react2.default.createElement(
133
-            "div",
152
+            'div',
134
             null,
153
             null,
135
             _react2.default.createElement(
154
             _react2.default.createElement(
136
-              "a",
137
-              { href: "/" + content.user_id },
138
-              content.user_name || "暂无昵称"
155
+              'a',
156
+              { href: '/' + content.user_id },
157
+              content.user_name || '暂无昵称'
139
             ),
158
             ),
140
             _react2.default.createElement(
159
             _react2.default.createElement(
141
-              "span",
160
+              'span',
142
               { style: { marginLeft: 10 } },
161
               { style: { marginLeft: 10 } },
143
               _react2.default.createElement(
162
               _react2.default.createElement(
144
                 _tooltip2.default,
163
                 _tooltip2.default,
145
                 {
164
                 {
146
-                  placement: "top",
147
-                  title: (0, _dayjs2.default)(content.created * 1000).format("YYYY-MM-DD HH:mm:ss")
165
+                  placement: 'top',
166
+                  title: (0, _dayjs2.default)(content.created * 1000).format('YYYY-MM-DD HH:mm:ss')
148
                 },
167
                 },
149
                 (0, _dayjs2.default)(content.created * 1000).fromNow()
168
                 (0, _dayjs2.default)(content.created * 1000).fromNow()
150
               )
169
               )
151
             )
170
             )
152
           ),
171
           ),
153
-          _react2.default.createElement("div", {
154
-            className: "comment-item-content",
172
+          _react2.default.createElement('div', {
173
+            className: 'comment-item-content',
155
             dangerouslySetInnerHTML: {
174
             dangerouslySetInnerHTML: {
156
-              __html: (0, _helper.renderContent)(this.renderTextWithReply(content.content, content))
175
+              __html: (0, _helper.renderContent)(this.renderTextWithReply(newContent, content))
157
             }
176
             }
158
           }),
177
           }),
159
           _react2.default.createElement(
178
           _react2.default.createElement(
160
-            "div",
161
-            { className: "comment-item-bottom" },
179
+            'div',
180
+            { className: 'comment-item-image' },
181
+            images.split(',').map(function (item, index) {
182
+              return _react2.default.createElement('img', {
183
+                key: index,
184
+                src: item,
185
+                alt: item,
186
+                style: { maxWidth: '100%' }
187
+              });
188
+            })
189
+          ),
190
+          _react2.default.createElement(
191
+            'div',
192
+            { className: 'comment-item-bottom' },
162
             content.reply_count ? _react2.default.createElement(
193
             content.reply_count ? _react2.default.createElement(
163
-              "div",
194
+              'div',
164
               null,
195
               null,
165
               _react2.default.createElement(
196
               _react2.default.createElement(
166
-                "a",
167
-                { className: "comment-item-bottom-left", onClick: onShowReply },
197
+                'a',
198
+                { className: 'comment-item-bottom-left', onClick: onShowReply },
168
                 content.reply_count,
199
                 content.reply_count,
169
-                " \u6761\u56DE\u590D",
170
-                showReply ? _react2.default.createElement(_icon2.default, { type: "up" }) : _react2.default.createElement(_icon2.default, { type: "down" })
200
+                ' \u6761\u56DE\u590D',
201
+                showReply ? _react2.default.createElement(_icon2.default, { type: 'up' }) : _react2.default.createElement(_icon2.default, { type: 'down' })
171
               )
202
               )
172
             ) : null,
203
             ) : null,
173
             _react2.default.createElement(
204
             _react2.default.createElement(
174
-              "a",
205
+              'a',
175
               {
206
               {
176
                 onClick: this.handleToggleInput,
207
                 onClick: this.handleToggleInput,
177
-                className: "comment-item-bottom-right"
208
+                className: 'comment-item-bottom-right'
178
               },
209
               },
179
-              "\xA0 \u56DE\u590D"
210
+              '\xA0 \u56DE\u590D'
180
             ),
211
             ),
181
             _react2.default.createElement(
212
             _react2.default.createElement(
182
-              "div",
213
+              'div',
183
               {
214
               {
184
-                className: "comment-item-bottom-right",
215
+                className: 'comment-item-bottom-right',
185
                 onClick: function onClick() {
216
                 onClick: function onClick() {
186
                   if (replyId) {
217
                   if (replyId) {
187
                     // 如果有 replyId,则说明是评论的回复
218
                     // 如果有 replyId,则说明是评论的回复
192
                 }
223
                 }
193
               },
224
               },
194
               _react2.default.createElement(_icon2.default, {
225
               _react2.default.createElement(_icon2.default, {
195
-                type: "like-o",
196
-                className: content.favored ? "comment-favor comment-favored" : "comment-favor"
226
+                type: 'like-o',
227
+                className: content.favored ? 'comment-favor comment-favored' : 'comment-favor'
197
               }),
228
               }),
198
-              "\xA0",
229
+              '\xA0',
199
               content.favor_count
230
               content.favor_count
200
             )
231
             )
201
           )
232
           )
219
   // comment 评论
250
   // comment 评论
220
   // reply 评论的回复
251
   // reply 评论的回复
221
   // replyToReply 回复的回复
252
   // replyToReply 回复的回复
222
-  action: _propTypes2.default.oneOf(["comment", "reply", "replyToReply"]),
253
+  action: _propTypes2.default.oneOf(['comment', 'reply', 'replyToReply']),
223
   onShowReply: _propTypes2.default.func
254
   onShowReply: _propTypes2.default.func
224
 };
255
 };
225
 
256
 
226
 CommentItem.defaultProps = {
257
 CommentItem.defaultProps = {
227
-  action: "comment",
258
+  action: 'comment',
228
   onShowReply: function onShowReply() {}
259
   onShowReply: function onShowReply() {}
229
 };
260
 };
230
 
261
 

+ 1
- 1
lib/components/ContentItem/index.js.map
File diff suppressed because it is too large
View File


+ 27
- 27
lib/components/Editor/Emoji.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 Object.defineProperty(exports, "__esModule", {
3
 Object.defineProperty(exports, "__esModule", {
4
   value: true
4
   value: true
5
 });
5
 });
6
 
6
 
7
-var _carousel = require("antd/es/carousel");
7
+var _carousel = require('antd/es/carousel');
8
 
8
 
9
 var _carousel2 = _interopRequireDefault(_carousel);
9
 var _carousel2 = _interopRequireDefault(_carousel);
10
 
10
 
11
-require("antd/es/carousel/style/css");
11
+require('antd/es/carousel/style/css');
12
 
12
 
13
-var _react = require("react");
13
+var _react = require('react');
14
 
14
 
15
 var _react2 = _interopRequireDefault(_react);
15
 var _react2 = _interopRequireDefault(_react);
16
 
16
 
17
-var _emoji = require("../../emoji");
17
+var _emoji = require('../../emoji');
18
 
18
 
19
 var _emoji2 = _interopRequireDefault(_emoji);
19
 var _emoji2 = _interopRequireDefault(_emoji);
20
 
20
 
21
-require("./Emoji.css");
21
+require('./Emoji.css');
22
 
22
 
23
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
 
24
 
45
     _carousel2.default,
45
     _carousel2.default,
46
     null,
46
     null,
47
     _react2.default.createElement(
47
     _react2.default.createElement(
48
-      "div",
48
+      'div',
49
       null,
49
       null,
50
       content[0].map(function (item, index) {
50
       content[0].map(function (item, index) {
51
         return _react2.default.createElement(
51
         return _react2.default.createElement(
52
-          "div",
53
-          { className: "item", key: item.value },
54
-          _react2.default.createElement("span", { className: "helper" }),
55
-          _react2.default.createElement("img", {
56
-            src: "" + _emoji.prefixUrl + item.value + "." + _emoji.ext,
52
+          'div',
53
+          { className: 'item', key: item.value },
54
+          _react2.default.createElement('span', { className: 'helper' }),
55
+          _react2.default.createElement('img', {
56
+            src: '' + _emoji.prefixUrl + item.value + '.' + _emoji.ext,
57
             alt: item.title,
57
             alt: item.title,
58
-            style: { display: "inline-block" },
58
+            style: { display: 'inline-block' },
59
             onClick: function onClick() {
59
             onClick: function onClick() {
60
               return _onClick(item.title);
60
               return _onClick(item.title);
61
             }
61
             }
64
       })
64
       })
65
     ),
65
     ),
66
     _react2.default.createElement(
66
     _react2.default.createElement(
67
-      "div",
67
+      'div',
68
       null,
68
       null,
69
       content[1].map(function (item, index) {
69
       content[1].map(function (item, index) {
70
         return _react2.default.createElement(
70
         return _react2.default.createElement(
71
-          "div",
72
-          { className: "item", key: item.value },
73
-          _react2.default.createElement("span", { className: "helper" }),
74
-          _react2.default.createElement("img", {
75
-            src: "" + _emoji.prefixUrl + item.value + "." + _emoji.ext,
71
+          'div',
72
+          { className: 'item', key: item.value },
73
+          _react2.default.createElement('span', { className: 'helper' }),
74
+          _react2.default.createElement('img', {
75
+            src: '' + _emoji.prefixUrl + item.value + '.' + _emoji.ext,
76
             alt: item.title,
76
             alt: item.title,
77
-            style: { display: "inline-block" },
77
+            style: { display: 'inline-block' },
78
             onClick: function onClick() {
78
             onClick: function onClick() {
79
               return _onClick(item.title);
79
               return _onClick(item.title);
80
             }
80
             }
83
       })
83
       })
84
     ),
84
     ),
85
     _react2.default.createElement(
85
     _react2.default.createElement(
86
-      "div",
86
+      'div',
87
       null,
87
       null,
88
       content[2].map(function (item) {
88
       content[2].map(function (item) {
89
         return _react2.default.createElement(
89
         return _react2.default.createElement(
90
-          "div",
91
-          { className: "item", key: item.value },
92
-          _react2.default.createElement("span", { className: "helper" }),
93
-          _react2.default.createElement("img", {
94
-            src: "" + _emoji.prefixUrl + item.value + "." + _emoji.ext,
90
+          'div',
91
+          { className: 'item', key: item.value },
92
+          _react2.default.createElement('span', { className: 'helper' }),
93
+          _react2.default.createElement('img', {
94
+            src: '' + _emoji.prefixUrl + item.value + '.' + _emoji.ext,
95
             alt: item.title,
95
             alt: item.title,
96
-            style: { display: "inline-block" },
96
+            style: { display: 'inline-block' },
97
             onClick: function onClick() {
97
             onClick: function onClick() {
98
               return _onClick(item.title);
98
               return _onClick(item.title);
99
             }
99
             }

+ 1
- 1
lib/components/Editor/Emoji.js.map View File

1
-{"version":3,"sources":["../../../src/components/Editor/Emoji.js"],"names":["Emoji","onClick","content","i","emoji","length","push","map","item","index","value","prefixUrl","ext","title","display"],"mappings":";;;;;;;;;;;;AAAA;;;;AAEA;;;;AACA;;;;AACA;AACA;;AAEA;;AAEA,IAAMA,QAAQ,SAARA,KAAQ,OAAiB;AAAA,MAAdC,QAAc,QAAdA,OAAc;;AAC7B,MAAMC,UAAU,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,CAAhB;;AAEA,OAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAIC,gBAAMC,MAA1B,EAAkCF,GAAlC,EAAuC;AACrC,QAAIA,IAAI,EAAR,EAAY;AACVD,cAAQ,CAAR,EAAWI,IAAX,CAAgBF,gBAAMD,CAAN,CAAhB;AACD,KAFD,MAEO,IAAIA,IAAI,EAAR,EAAY;AACjBD,cAAQ,CAAR,EAAWI,IAAX,CAAgBF,gBAAMD,CAAN,CAAhB;AACD,KAFM,MAEA,IAAIA,IAAIC,gBAAMC,MAAd,EAAsB;AAC3BH,cAAQ,CAAR,EAAWI,IAAX,CAAgBF,gBAAMD,CAAN,CAAhB;AACD;AACF;AACD,SACE;AAAA;AAAA;AACE;AAAA;AAAA;AACGD,cAAQ,CAAR,EAAWK,GAAX,CAAe,UAACC,IAAD,EAAOC,KAAP;AAAA,eACd;AAAA;AAAA,YAAK,WAAU,MAAf,EAAsB,KAAKD,KAAKE,KAAhC;AACE,kDAAM,WAAU,QAAhB,GADF;AAEE;AACE,sBAAQC,gBAAR,GAAoBH,KAAKE,KAAzB,SAAkCE,UADpC;AAEE,iBAAKJ,KAAKK,KAFZ;AAGE,mBAAO,EAAEC,SAAS,cAAX,EAHT;AAIE,qBAAS;AAAA,qBAAMb,SAAQO,KAAKK,KAAb,CAAN;AAAA;AAJX;AAFF,SADc;AAAA,OAAf;AADH,KADF;AAcE;AAAA;AAAA;AACGX,cAAQ,CAAR,EAAWK,GAAX,CAAe,UAACC,IAAD,EAAOC,KAAP;AAAA,eACd;AAAA;AAAA,YAAK,WAAU,MAAf,EAAsB,KAAKD,KAAKE,KAAhC;AACE,kDAAM,WAAU,QAAhB,GADF;AAEE;AACE,sBAAQC,gBAAR,GAAoBH,KAAKE,KAAzB,SAAkCE,UADpC;AAEE,iBAAKJ,KAAKK,KAFZ;AAGE,mBAAO,EAAEC,SAAS,cAAX,EAHT;AAIE,qBAAS;AAAA,qBAAMb,SAAQO,KAAKK,KAAb,CAAN;AAAA;AAJX;AAFF,SADc;AAAA,OAAf;AADH,KAdF;AA2BE;AAAA;AAAA;AACGX,cAAQ,CAAR,EAAWK,GAAX,CAAe;AAAA,eACd;AAAA;AAAA,YAAK,WAAU,MAAf,EAAsB,KAAKC,KAAKE,KAAhC;AACE,kDAAM,WAAU,QAAhB,GADF;AAEE;AACE,sBAAQC,gBAAR,GAAoBH,KAAKE,KAAzB,SAAkCE,UADpC;AAEE,iBAAKJ,KAAKK,KAFZ;AAGE,mBAAO,EAAEC,SAAS,cAAX,EAHT;AAIE,qBAAS;AAAA,qBAAMb,SAAQO,KAAKK,KAAb,CAAN;AAAA;AAJX;AAFF,SADc;AAAA,OAAf;AADH;AA3BF,GADF;AA2CD,CAvDD;;kBAyDeb,K","file":"Emoji.js","sourcesContent":["import React from \"react\";\nimport { Carousel } from \"antd\";\nimport emoji, { prefixUrl, ext } from \"../../emoji\";\nimport \"./Emoji.css\";\n// 每页 20  5*4\n// 共 20 * 3 = 60 (实际是 54)\n\n// class Emoji\n\nconst Emoji = ({ onClick }) => {\n  const content = [[], [], []];\n\n  for (let i = 0; i < emoji.length; i++) {\n    if (i < 20) {\n      content[0].push(emoji[i]);\n    } else if (i < 40) {\n      content[1].push(emoji[i]);\n    } else if (i < emoji.length) {\n      content[2].push(emoji[i]);\n    }\n  }\n  return (\n    <Carousel>\n      <div>\n        {content[0].map((item, index) => (\n          <div className=\"item\" key={item.value}>\n            <span className=\"helper\" />\n            <img\n              src={`${prefixUrl}${item.value}.${ext}`}\n              alt={item.title}\n              style={{ display: \"inline-block\" }}\n              onClick={() => onClick(item.title)}\n            />\n          </div>\n        ))}\n      </div>\n      <div>\n        {content[1].map((item, index) => (\n          <div className=\"item\" key={item.value}>\n            <span className=\"helper\" />\n            <img\n              src={`${prefixUrl}${item.value}.${ext}`}\n              alt={item.title}\n              style={{ display: \"inline-block\" }}\n              onClick={() => onClick(item.title)}\n            />\n          </div>\n        ))}\n      </div>\n      <div>\n        {content[2].map(item => (\n          <div className=\"item\" key={item.value}>\n            <span className=\"helper\" />\n            <img\n              src={`${prefixUrl}${item.value}.${ext}`}\n              alt={item.title}\n              style={{ display: \"inline-block\" }}\n              onClick={() => onClick(item.title)}\n            />\n          </div>\n        ))}\n      </div>\n    </Carousel>\n  );\n};\n\nexport default Emoji;\n"]}
1
+{"version":3,"sources":["../../../src/components/Editor/Emoji.js"],"names":["Emoji","onClick","content","i","emoji","length","push","map","item","index","value","prefixUrl","ext","title","display"],"mappings":";;;;;;;;;;;;AAAA;;;;AAEA;;;;AACA;;;;AACA;AACA;;AAEA;;AAEA,IAAMA,QAAQ,SAARA,KAAQ,OAAiB;AAAA,MAAdC,QAAc,QAAdA,OAAc;;AAC7B,MAAMC,UAAU,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,CAAhB;;AAEA,OAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAIC,gBAAMC,MAA1B,EAAkCF,GAAlC,EAAuC;AACrC,QAAIA,IAAI,EAAR,EAAY;AACVD,cAAQ,CAAR,EAAWI,IAAX,CAAgBF,gBAAMD,CAAN,CAAhB;AACD,KAFD,MAEO,IAAIA,IAAI,EAAR,EAAY;AACjBD,cAAQ,CAAR,EAAWI,IAAX,CAAgBF,gBAAMD,CAAN,CAAhB;AACD,KAFM,MAEA,IAAIA,IAAIC,gBAAMC,MAAd,EAAsB;AAC3BH,cAAQ,CAAR,EAAWI,IAAX,CAAgBF,gBAAMD,CAAN,CAAhB;AACD;AACF;AACD,SACE;AAAA;AAAA;AACE;AAAA;AAAA;AACGD,cAAQ,CAAR,EAAWK,GAAX,CAAe,UAACC,IAAD,EAAOC,KAAP;AAAA,eACd;AAAA;AAAA,YAAK,WAAU,MAAf,EAAsB,KAAKD,KAAKE,KAAhC;AACE,kDAAM,WAAU,QAAhB,GADF;AAEE;AACE,sBAAQC,gBAAR,GAAoBH,KAAKE,KAAzB,SAAkCE,UADpC;AAEE,iBAAKJ,KAAKK,KAFZ;AAGE,mBAAO,EAAEC,SAAS,cAAX,EAHT;AAIE,qBAAS;AAAA,qBAAMb,SAAQO,KAAKK,KAAb,CAAN;AAAA;AAJX;AAFF,SADc;AAAA,OAAf;AADH,KADF;AAcE;AAAA;AAAA;AACGX,cAAQ,CAAR,EAAWK,GAAX,CAAe,UAACC,IAAD,EAAOC,KAAP;AAAA,eACd;AAAA;AAAA,YAAK,WAAU,MAAf,EAAsB,KAAKD,KAAKE,KAAhC;AACE,kDAAM,WAAU,QAAhB,GADF;AAEE;AACE,sBAAQC,gBAAR,GAAoBH,KAAKE,KAAzB,SAAkCE,UADpC;AAEE,iBAAKJ,KAAKK,KAFZ;AAGE,mBAAO,EAAEC,SAAS,cAAX,EAHT;AAIE,qBAAS;AAAA,qBAAMb,SAAQO,KAAKK,KAAb,CAAN;AAAA;AAJX;AAFF,SADc;AAAA,OAAf;AADH,KAdF;AA2BE;AAAA;AAAA;AACGX,cAAQ,CAAR,EAAWK,GAAX,CAAe;AAAA,eACd;AAAA;AAAA,YAAK,WAAU,MAAf,EAAsB,KAAKC,KAAKE,KAAhC;AACE,kDAAM,WAAU,QAAhB,GADF;AAEE;AACE,sBAAQC,gBAAR,GAAoBH,KAAKE,KAAzB,SAAkCE,UADpC;AAEE,iBAAKJ,KAAKK,KAFZ;AAGE,mBAAO,EAAEC,SAAS,cAAX,EAHT;AAIE,qBAAS;AAAA,qBAAMb,SAAQO,KAAKK,KAAb,CAAN;AAAA;AAJX;AAFF,SADc;AAAA,OAAf;AADH;AA3BF,GADF;AA2CD,CAvDD;;kBAyDeb,K","file":"Emoji.js","sourcesContent":["import React from 'react';\nimport { Carousel } from 'antd';\nimport emoji, { prefixUrl, ext } from '../../emoji';\nimport './Emoji.css';\n// 每页 20  5*4\n// 共 20 * 3 = 60 (实际是 54)\n\n// class Emoji\n\nconst Emoji = ({ onClick }) => {\n  const content = [[], [], []];\n\n  for (let i = 0; i < emoji.length; i++) {\n    if (i < 20) {\n      content[0].push(emoji[i]);\n    } else if (i < 40) {\n      content[1].push(emoji[i]);\n    } else if (i < emoji.length) {\n      content[2].push(emoji[i]);\n    }\n  }\n  return (\n    <Carousel>\n      <div>\n        {content[0].map((item, index) => (\n          <div className=\"item\" key={item.value}>\n            <span className=\"helper\" />\n            <img\n              src={`${prefixUrl}${item.value}.${ext}`}\n              alt={item.title}\n              style={{ display: 'inline-block' }}\n              onClick={() => onClick(item.title)}\n            />\n          </div>\n        ))}\n      </div>\n      <div>\n        {content[1].map((item, index) => (\n          <div className=\"item\" key={item.value}>\n            <span className=\"helper\" />\n            <img\n              src={`${prefixUrl}${item.value}.${ext}`}\n              alt={item.title}\n              style={{ display: 'inline-block' }}\n              onClick={() => onClick(item.title)}\n            />\n          </div>\n        ))}\n      </div>\n      <div>\n        {content[2].map(item => (\n          <div className=\"item\" key={item.value}>\n            <span className=\"helper\" />\n            <img\n              src={`${prefixUrl}${item.value}.${ext}`}\n              alt={item.title}\n              style={{ display: 'inline-block' }}\n              onClick={() => onClick(item.title)}\n            />\n          </div>\n        ))}\n      </div>\n    </Carousel>\n  );\n};\n\nexport default Emoji;\n"]}

+ 36
- 34
lib/components/Editor/Upload.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 Object.defineProperty(exports, "__esModule", {
3
 Object.defineProperty(exports, "__esModule", {
4
   value: true
4
   value: true
5
 });
5
 });
6
 
6
 
7
-var _modal = require("antd/es/modal");
7
+var _modal = require('antd/es/modal');
8
 
8
 
9
 var _modal2 = _interopRequireDefault(_modal);
9
 var _modal2 = _interopRequireDefault(_modal);
10
 
10
 
11
-var _upload = require("antd/es/upload");
11
+var _upload = require('antd/es/upload');
12
 
12
 
13
 var _upload2 = _interopRequireDefault(_upload);
13
 var _upload2 = _interopRequireDefault(_upload);
14
 
14
 
15
-var _icon = require("antd/es/icon");
15
+var _icon = require('antd/es/icon');
16
 
16
 
17
 var _icon2 = _interopRequireDefault(_icon);
17
 var _icon2 = _interopRequireDefault(_icon);
18
 
18
 
19
-var _message2 = require("antd/es/message");
19
+var _message2 = require('antd/es/message');
20
 
20
 
21
 var _message3 = _interopRequireDefault(_message2);
21
 var _message3 = _interopRequireDefault(_message2);
22
 
22
 
23
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
23
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
24
 
24
 
25
-require("antd/es/modal/style/css");
25
+require('antd/es/modal/style/css');
26
 
26
 
27
-require("antd/es/upload/style/css");
27
+require('antd/es/upload/style/css');
28
 
28
 
29
-require("antd/es/icon/style/css");
29
+require('antd/es/icon/style/css');
30
 
30
 
31
-require("antd/es/message/style/css");
31
+require('antd/es/message/style/css');
32
 
32
 
33
-var _react = require("react");
33
+var _react = require('react');
34
 
34
 
35
 var _react2 = _interopRequireDefault(_react);
35
 var _react2 = _interopRequireDefault(_react);
36
 
36
 
37
-var _dayjs = require("dayjs");
37
+var _dayjs = require('dayjs');
38
 
38
 
39
 var _dayjs2 = _interopRequireDefault(_dayjs);
39
 var _dayjs2 = _interopRequireDefault(_dayjs);
40
 
40
 
41
-var _shortid = require("shortid");
41
+var _shortid = require('shortid');
42
 
42
 
43
 var _shortid2 = _interopRequireDefault(_shortid);
43
 var _shortid2 = _interopRequireDefault(_shortid);
44
 
44
 
45
-var _constant = require("../../constant");
45
+var _constant = require('../../constant');
46
 
46
 
47
-var _Comment = require("../../Comment");
47
+var _Comment = require('../../Comment');
48
 
48
 
49
 var _Comment2 = _interopRequireDefault(_Comment);
49
 var _Comment2 = _interopRequireDefault(_Comment);
50
 
50
 
51
-require("./Upload.css");
51
+require('./Upload.css');
52
 
52
 
53
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
53
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
54
 
54
 
69
 };
69
 };
70
 
70
 
71
 var uploadPath = function uploadPath(path, file) {
71
 var uploadPath = function uploadPath(path, file) {
72
-  return path + "/" + (0, _dayjs2.default)().format("YYYYMMDD") + "/" + _shortid2.default.generate() + "." + file.type.split("/")[1];
72
+  return path + '/' + (0, _dayjs2.default)().format('YYYYMMDD') + '/' + _shortid2.default.generate() + '.' + file.type.split('/')[1];
73
 };
73
 };
74
 
74
 
75
 var UploadToOss = function UploadToOss(oss, path, file) {
75
 var UploadToOss = function UploadToOss(oss, path, file) {
93
 
93
 
94
     _this.state = {
94
     _this.state = {
95
       previewVisible: false,
95
       previewVisible: false,
96
-      previewImage: ""
96
+      previewImage: ''
97
     };
97
     };
98
     _this.handleCancel = _this.handleCancel.bind(_this);
98
     _this.handleCancel = _this.handleCancel.bind(_this);
99
     _this.handlePreview = _this.handlePreview.bind(_this);
99
     _this.handlePreview = _this.handlePreview.bind(_this);
103
   }
103
   }
104
 
104
 
105
   _createClass(App, [{
105
   _createClass(App, [{
106
-    key: "componentDidMount",
106
+    key: 'componentDidMount',
107
     value: function componentDidMount() {
107
     value: function componentDidMount() {
108
       this.props.app.sOssSts();
108
       this.props.app.sOssSts();
109
     }
109
     }
110
   }, {
110
   }, {
111
-    key: "handleCancel",
111
+    key: 'handleCancel',
112
     value: function handleCancel() {
112
     value: function handleCancel() {
113
       this.setState({ previewVisible: false });
113
       this.setState({ previewVisible: false });
114
     }
114
     }
115
   }, {
115
   }, {
116
-    key: "handlePreview",
116
+    key: 'handlePreview',
117
     value: function handlePreview(file) {
117
     value: function handlePreview(file) {
118
       this.setState({
118
       this.setState({
119
         previewImage: file.url || file.thumbUrl,
119
         previewImage: file.url || file.thumbUrl,
121
       });
121
       });
122
     }
122
     }
123
   }, {
123
   }, {
124
-    key: "handleChange",
124
+    key: 'handleChange',
125
     value: function handleChange(_ref) {
125
     value: function handleChange(_ref) {
126
       var fileList = _ref.fileList;
126
       var fileList = _ref.fileList;
127
 
127
 
128
       this.props.onChangeFileList(fileList);
128
       this.props.onChangeFileList(fileList);
129
     }
129
     }
130
   }, {
130
   }, {
131
-    key: "customRequest",
131
+    key: 'customRequest',
132
     value: function customRequest(info) {
132
     value: function customRequest(info) {
133
       var _this2 = this;
133
       var _this2 = this;
134
 
134
 
151
       };
151
       };
152
     }
152
     }
153
   }, {
153
   }, {
154
-    key: "render",
154
+    key: 'render',
155
     value: function render() {
155
     value: function render() {
156
       var _state = this.state,
156
       var _state = this.state,
157
           previewVisible = _state.previewVisible,
157
           previewVisible = _state.previewVisible,
158
           previewImage = _state.previewImage;
158
           previewImage = _state.previewImage;
159
-      var fileList = this.props.fileList;
159
+      var _props = this.props,
160
+          fileList = _props.fileList,
161
+          maxUpload = _props.maxUpload;
160
 
162
 
161
       var uploadButton = _react2.default.createElement(
163
       var uploadButton = _react2.default.createElement(
162
-        "div",
164
+        'div',
163
         null,
165
         null,
164
-        _react2.default.createElement(_icon2.default, { type: "plus" }),
166
+        _react2.default.createElement(_icon2.default, { type: 'plus' }),
165
         _react2.default.createElement(
167
         _react2.default.createElement(
166
-          "div",
167
-          { className: "ant-upload-text" },
168
-          "\u4E0A\u4F20"
168
+          'div',
169
+          { className: 'ant-upload-text' },
170
+          '\u4E0A\u4F20'
169
         )
171
         )
170
       );
172
       );
171
       return _react2.default.createElement(
173
       return _react2.default.createElement(
172
-        "div",
174
+        'div',
173
         null,
175
         null,
174
         _react2.default.createElement(
176
         _react2.default.createElement(
175
           _upload2.default,
177
           _upload2.default,
176
           {
178
           {
177
-            accept: "image/jpg,image/jpeg,image/png,image/bmp",
178
-            listType: "picture-card",
179
+            accept: 'image/jpg,image/jpeg,image/png,image/bmp',
180
+            listType: 'picture-card',
179
             fileList: fileList,
181
             fileList: fileList,
180
             customRequest: this.customRequest,
182
             customRequest: this.customRequest,
181
             onPreview: this.handlePreview,
183
             onPreview: this.handlePreview,
182
             onChange: this.handleChange
184
             onChange: this.handleChange
183
           },
185
           },
184
-          fileList.length >= _constant.MAX_UPLOAD_NUMBER ? null : uploadButton
186
+          fileList.length >= maxUpload ? null : uploadButton
185
         ),
187
         ),
186
         _react2.default.createElement(
188
         _react2.default.createElement(
187
           _modal2.default,
189
           _modal2.default,
190
             footer: null,
192
             footer: null,
191
             onCancel: this.handleCancel
193
             onCancel: this.handleCancel
192
           },
194
           },
193
-          _react2.default.createElement("img", { alt: "upload", style: { width: "100%" }, src: previewImage })
195
+          _react2.default.createElement('img', { alt: 'upload', style: { width: '100%' }, src: previewImage })
194
         )
196
         )
195
       );
197
       );
196
     }
198
     }

+ 1
- 1
lib/components/Editor/Upload.js.map
File diff suppressed because it is too large
View File


+ 1
- 1
lib/components/Editor/index.css View File

30
   box-shadow: none;
30
   box-shadow: none;
31
   border-bottom: 1px solid #eee;
31
   border-bottom: 1px solid #eee;
32
 }
32
 }
33
-.comment-editor [contentEditable="true"]:empty:not(:focus):before {
33
+.comment-editor [contentEditable='true']:empty:not(:focus):before {
34
   content: attr(data-text);
34
   content: attr(data-text);
35
   color: #bfbfbf;
35
   color: #bfbfbf;
36
 }
36
 }

+ 73
- 65
lib/components/Editor/index.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 Object.defineProperty(exports, "__esModule", {
3
 Object.defineProperty(exports, "__esModule", {
4
   value: true
4
   value: true
5
 });
5
 });
6
 
6
 
7
-var _button = require("antd/es/button");
7
+var _button = require('antd/es/button');
8
 
8
 
9
 var _button2 = _interopRequireDefault(_button);
9
 var _button2 = _interopRequireDefault(_button);
10
 
10
 
11
-var _popover = require("antd/es/popover");
11
+var _popover = require('antd/es/popover');
12
 
12
 
13
 var _popover2 = _interopRequireDefault(_popover);
13
 var _popover2 = _interopRequireDefault(_popover);
14
 
14
 
15
-var _icon = require("antd/es/icon");
15
+var _icon = require('antd/es/icon');
16
 
16
 
17
 var _icon2 = _interopRequireDefault(_icon);
17
 var _icon2 = _interopRequireDefault(_icon);
18
 
18
 
19
-var _input = require("antd/es/input");
19
+var _input = require('antd/es/input');
20
 
20
 
21
 var _input2 = _interopRequireDefault(_input);
21
 var _input2 = _interopRequireDefault(_input);
22
 
22
 
23
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
23
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
24
 
24
 
25
-require("antd/es/button/style/css");
25
+require('antd/es/button/style/css');
26
 
26
 
27
-require("antd/es/popover/style/css");
27
+require('antd/es/popover/style/css');
28
 
28
 
29
-require("antd/es/icon/style/css");
29
+require('antd/es/icon/style/css');
30
 
30
 
31
-require("antd/es/input/style/css");
31
+require('antd/es/input/style/css');
32
 
32
 
33
-var _react = require("react");
33
+var _react = require('react');
34
 
34
 
35
 var _react2 = _interopRequireDefault(_react);
35
 var _react2 = _interopRequireDefault(_react);
36
 
36
 
37
-var _propTypes = require("prop-types");
37
+var _propTypes = require('prop-types');
38
 
38
 
39
 var _propTypes2 = _interopRequireDefault(_propTypes);
39
 var _propTypes2 = _interopRequireDefault(_propTypes);
40
 
40
 
41
-var _constant = require("../../constant");
41
+var _constant = require('../../constant');
42
 
42
 
43
-var _helper = require("../../helper");
43
+var _helper = require('../../helper');
44
 
44
 
45
-var _Upload = require("./Upload");
45
+var _Upload = require('./Upload');
46
 
46
 
47
 var _Upload2 = _interopRequireDefault(_Upload);
47
 var _Upload2 = _interopRequireDefault(_Upload);
48
 
48
 
49
-var _Emoji = require("./Emoji");
49
+var _Emoji = require('./Emoji');
50
 
50
 
51
 var _Emoji2 = _interopRequireDefault(_Emoji);
51
 var _Emoji2 = _interopRequireDefault(_Emoji);
52
 
52
 
53
-require("./index.css");
53
+require('./index.css');
54
 
54
 
55
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
55
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
56
 
56
 
72
 
72
 
73
     _this.state = {
73
     _this.state = {
74
       showUpload: false,
74
       showUpload: false,
75
-      value: "", // 编辑器里面的值
75
+      value: '', // 编辑器里面的值
76
 
76
 
77
       fileList: [], // 图片列表
77
       fileList: [], // 图片列表
78
       fileMap: {} // 已经上传的图片路径和 uid 的映射 { uid: path }
78
       fileMap: {} // 已经上传的图片路径和 uid 的映射 { uid: path }
88
   }
88
   }
89
 
89
 
90
   _createClass(Editor, [{
90
   _createClass(Editor, [{
91
-    key: "componentDidMount",
91
+    key: 'componentDidMount',
92
     value: function componentDidMount() {
92
     value: function componentDidMount() {
93
       if ((0, _helper.isFunction)(this.props.onRef)) {
93
       if ((0, _helper.isFunction)(this.props.onRef)) {
94
         this.props.onRef(this);
94
         this.props.onRef(this);
102
      */
102
      */
103
 
103
 
104
   }, {
104
   }, {
105
-    key: "handleChange",
105
+    key: 'handleChange',
106
     value: function handleChange(value) {
106
     value: function handleChange(value) {
107
       this.setState({ value: value });
107
       this.setState({ value: value });
108
       if (this.props.onChange) {
108
       if (this.props.onChange) {
119
      */
119
      */
120
 
120
 
121
   }, {
121
   }, {
122
-    key: "handleClickEmoji",
122
+    key: 'handleClickEmoji',
123
     value: function handleClickEmoji(emoji) {
123
     value: function handleClickEmoji(emoji) {
124
       var value = this.state.value;
124
       var value = this.state.value;
125
 
125
 
126
-      value += "[" + emoji + "]";
126
+      value += '[' + emoji + ']';
127
       this.handleChange(value);
127
       this.handleChange(value);
128
     }
128
     }
129
 
129
 
133
      */
133
      */
134
 
134
 
135
   }, {
135
   }, {
136
-    key: "handleChangeFileList",
136
+    key: 'handleChangeFileList',
137
     value: function handleChangeFileList(fileList) {
137
     value: function handleChangeFileList(fileList) {
138
       this.setState({ fileList: fileList });
138
       this.setState({ fileList: fileList });
139
     }
139
     }
144
      */
144
      */
145
 
145
 
146
   }, {
146
   }, {
147
-    key: "handleShowUpload",
147
+    key: 'handleShowUpload',
148
     value: function handleShowUpload(showUpload) {
148
     value: function handleShowUpload(showUpload) {
149
-      if (typeof showUpload === "boolean") {
149
+      if (typeof showUpload === 'boolean') {
150
         this.setState({ showUpload: showUpload });
150
         this.setState({ showUpload: showUpload });
151
       } else {
151
       } else {
152
         this.setState({ showUpload: !this.state.showUpload });
152
         this.setState({ showUpload: !this.state.showUpload });
159
      */
159
      */
160
 
160
 
161
   }, {
161
   }, {
162
-    key: "handleUpload",
162
+    key: 'handleUpload',
163
     value: function handleUpload(_ref) {
163
     value: function handleUpload(_ref) {
164
       var uid = _ref.uid,
164
       var uid = _ref.uid,
165
           path = _ref.path;
165
           path = _ref.path;
176
      */
176
      */
177
 
177
 
178
   }, {
178
   }, {
179
-    key: "handleSubmit",
179
+    key: 'handleSubmit',
180
     value: function handleSubmit() {
180
     value: function handleSubmit() {
181
       var _this2 = this;
181
       var _this2 = this;
182
 
182
 
188
       var files = [];
188
       var files = [];
189
       if (fileList.length) {
189
       if (fileList.length) {
190
         fileList.forEach(function (item) {
190
         fileList.forEach(function (item) {
191
-          files.push("" + _constant.OSS_LINK + fileMap[item.uid]);
191
+          files.push('' + _constant.OSS_LINK + fileMap[item.uid]);
192
         });
192
         });
193
       }
193
       }
194
       this.props.onSubmit({ text: value, files: files }, function () {
194
       this.props.onSubmit({ text: value, files: files }, function () {
196
       });
196
       });
197
     }
197
     }
198
   }, {
198
   }, {
199
-    key: "resetState",
199
+    key: 'resetState',
200
     value: function resetState() {
200
     value: function resetState() {
201
       this.setState({
201
       this.setState({
202
         showUpload: false,
202
         showUpload: false,
203
-        value: "",
203
+        value: '',
204
         fileList: [],
204
         fileList: [],
205
         fileMap: {}
205
         fileMap: {}
206
       });
206
       });
207
     }
207
     }
208
   }, {
208
   }, {
209
-    key: "render",
209
+    key: 'render',
210
     value: function render() {
210
     value: function render() {
211
       var _this3 = this;
211
       var _this3 = this;
212
 
212
 
216
           rows = _props.rows,
216
           rows = _props.rows,
217
           showEmoji = _props.showEmoji,
217
           showEmoji = _props.showEmoji,
218
           showUpload = _props.showUpload,
218
           showUpload = _props.showUpload,
219
+          maxUpload = _props.maxUpload,
219
           btnSubmitText = _props.btnSubmitText,
220
           btnSubmitText = _props.btnSubmitText,
220
           btnLoading = _props.btnLoading,
221
           btnLoading = _props.btnLoading,
221
           btnDisabled = _props.btnDisabled,
222
           btnDisabled = _props.btnDisabled,
226
       var handleSubmit = this.handleSubmit;
227
       var handleSubmit = this.handleSubmit;
227
       var disabledSubmit = btnDisabled || !this.props.value && !this.state.value && !this.state.fileList.length;
228
       var disabledSubmit = btnDisabled || !this.props.value && !this.state.value && !this.state.fileList.length;
228
       return _react2.default.createElement(
229
       return _react2.default.createElement(
229
-        "div",
230
-        { className: "comment-editor" },
230
+        'div',
231
+        { className: 'comment-editor' },
231
         _react2.default.createElement(TextArea, {
232
         _react2.default.createElement(TextArea, {
232
           value: value || this.state.value,
233
           value: value || this.state.value,
233
           onChange: function onChange(e) {
234
           onChange: function onChange(e) {
237
           placeholder: placeholder
238
           placeholder: placeholder
238
         }),
239
         }),
239
         _react2.default.createElement(
240
         _react2.default.createElement(
240
-          "div",
241
-          { className: "comment-toolbar" },
241
+          'div',
242
+          { className: 'comment-toolbar' },
242
           _react2.default.createElement(
243
           _react2.default.createElement(
243
-            "div",
244
-            { className: "comment-toolbar-left" },
244
+            'div',
245
+            { className: 'comment-toolbar-left' },
245
             showEmoji && _react2.default.createElement(
246
             showEmoji && _react2.default.createElement(
246
               _popover2.default,
247
               _popover2.default,
247
               {
248
               {
248
-                trigger: "click",
249
-                placement: "bottomLeft",
249
+                trigger: 'click',
250
+                placement: 'bottomLeft',
250
                 autoAdjustOverflow: false,
251
                 autoAdjustOverflow: false,
251
                 content: _react2.default.createElement(
252
                 content: _react2.default.createElement(
252
-                  "div",
253
+                  'div',
253
                   { style: { width: 200 } },
254
                   { style: { width: 200 } },
254
                   _react2.default.createElement(_Emoji2.default, { onClick: this.handleClickEmoji })
255
                   _react2.default.createElement(_Emoji2.default, { onClick: this.handleClickEmoji })
255
                 ),
256
                 ),
256
-                overlayClassName: "comment-emoji-popover"
257
+                overlayClassName: 'comment-emoji-popover'
257
               },
258
               },
258
-              emojiToolIcon || _react2.default.createElement(_icon2.default, { type: "smile-o", className: "comment-toolbar-icon" })
259
+              emojiToolIcon || _react2.default.createElement(_icon2.default, { type: 'smile-o', className: 'comment-toolbar-icon' })
259
             ),
260
             ),
260
             showUpload && _react2.default.createElement(
261
             showUpload && _react2.default.createElement(
261
               _popover2.default,
262
               _popover2.default,
263
                 visible: this.state.showUpload,
264
                 visible: this.state.showUpload,
264
                 overlayStyle: { zIndex: 999 },
265
                 overlayStyle: { zIndex: 999 },
265
                 content: _react2.default.createElement(
266
                 content: _react2.default.createElement(
266
-                  "div",
267
+                  'div',
267
                   {
268
                   {
268
-                    style: { width: 112 * _constant.MAX_UPLOAD_NUMBER, minHeight: 100 }
269
+                    style: {
270
+                      width: 112 * maxUpload,
271
+                      minHeight: 100,
272
+                      margin: '0 auto'
273
+                    }
269
                   },
274
                   },
270
                   _react2.default.createElement(_Upload2.default, {
275
                   _react2.default.createElement(_Upload2.default, {
271
                     onChangeFileList: this.handleChangeFileList,
276
                     onChangeFileList: this.handleChangeFileList,
272
                     onUpload: this.handleUpload,
277
                     onUpload: this.handleUpload,
278
+                    maxUpload: maxUpload,
273
                     fileList: this.state.fileList
279
                     fileList: this.state.fileList
274
                   })
280
                   })
275
                 ),
281
                 ),
276
-                placement: "bottomLeft",
282
+                placement: 'bottomLeft',
277
                 title: _react2.default.createElement(
283
                 title: _react2.default.createElement(
278
-                  "div",
279
-                  { style: { margin: "5px auto" } },
284
+                  'div',
285
+                  { style: { margin: '5px auto' } },
280
                   _react2.default.createElement(
286
                   _react2.default.createElement(
281
-                    "span",
287
+                    'span',
282
                     null,
288
                     null,
283
-                    "\u4E0A\u4F20\u56FE\u7247",
284
-                    _react2.default.createElement(
285
-                      "span",
286
-                      { style: { color: "#666", fontWeight: 400 } },
287
-                      "(\u60A8\u8FD8\u80FD\u4E0A\u4F20",
288
-                      _constant.MAX_UPLOAD_NUMBER - this.state.fileList.length,
289
-                      "\u5F20\u56FE\u7247)"
290
-                    )
289
+                    '\u4E0A\u4F20\u56FE\u7247',
290
+                    maxUpload >= 2 ? _react2.default.createElement(
291
+                      'span',
292
+                      { style: { color: '#666', fontWeight: 400 } },
293
+                      '(\u60A8\u8FD8\u80FD\u4E0A\u4F20',
294
+                      maxUpload - this.state.fileList.length,
295
+                      '\u5F20\u56FE\u7247)'
296
+                    ) : null
291
                   ),
297
                   ),
292
                   _react2.default.createElement(_icon2.default, {
298
                   _react2.default.createElement(_icon2.default, {
293
-                    type: "close",
299
+                    type: 'close',
294
                     onClick: function onClick() {
300
                     onClick: function onClick() {
295
                       return _this3.handleShowUpload(false);
301
                       return _this3.handleShowUpload(false);
296
                     },
302
                     },
297
                     style: {
303
                     style: {
298
-                      float: "right",
299
-                      cursor: "pointer",
304
+                      float: 'right',
305
+                      cursor: 'pointer',
300
                       marginTop: 4
306
                       marginTop: 4
301
                     }
307
                     }
302
                   })
308
                   })
307
                   return _this3.handleShowUpload(true);
313
                   return _this3.handleShowUpload(true);
308
                 }
314
                 }
309
               }) : _react2.default.createElement(_icon2.default, {
315
               }) : _react2.default.createElement(_icon2.default, {
310
-                type: "picture",
311
-                className: "comment-toolbar-icon",
316
+                type: 'picture',
317
+                className: 'comment-toolbar-icon',
312
                 style: { marginLeft: 10 },
318
                 style: { marginLeft: 10 },
313
                 onClick: function onClick() {
319
                 onClick: function onClick() {
314
                   return _this3.handleShowUpload(true);
320
                   return _this3.handleShowUpload(true);
317
             )
323
             )
318
           ),
324
           ),
319
           _react2.default.createElement(
325
           _react2.default.createElement(
320
-            "div",
321
-            { className: "comment-toolbar-right" },
326
+            'div',
327
+            { className: 'comment-toolbar-right' },
322
             button ? _react2.default.cloneElement(button, {
328
             button ? _react2.default.cloneElement(button, {
323
               onClick: button.props.onClick || handleSubmit
329
               onClick: button.props.onClick || handleSubmit
324
             }) : _react2.default.createElement(
330
             }) : _react2.default.createElement(
327
                 onClick: function onClick() {
333
                 onClick: function onClick() {
328
                   return _this3.handleSubmit();
334
                   return _this3.handleSubmit();
329
                 },
335
                 },
330
-                type: "primary",
336
+                type: 'primary',
331
                 loading: btnLoading,
337
                 loading: btnLoading,
332
                 disabled: disabledSubmit
338
                 disabled: disabledSubmit
333
               },
339
               },
347
   placeholder: _propTypes2.default.string,
353
   placeholder: _propTypes2.default.string,
348
   showEmoji: _propTypes2.default.bool,
354
   showEmoji: _propTypes2.default.bool,
349
   showUpload: _propTypes2.default.bool,
355
   showUpload: _propTypes2.default.bool,
356
+  maxUpload: _propTypes2.default.number,
350
   value: _propTypes2.default.string,
357
   value: _propTypes2.default.string,
351
   onChange: _propTypes2.default.func,
358
   onChange: _propTypes2.default.func,
352
   onSubmit: _propTypes2.default.func,
359
   onSubmit: _propTypes2.default.func,
360
 
367
 
361
 Editor.defaultProps = {
368
 Editor.defaultProps = {
362
   rows: 5,
369
   rows: 5,
363
-  placeholder: "说点什么吧...",
370
+  placeholder: '说点什么吧...',
364
   showEmoji: true,
371
   showEmoji: true,
365
   showUpload: true,
372
   showUpload: true,
366
-  btnSubmitText: "发表",
373
+  maxUpload: 1,
374
+  btnSubmitText: '发表',
367
   btnLoading: false,
375
   btnLoading: false,
368
   btnDisabled: false
376
   btnDisabled: false
369
 };
377
 };

+ 1
- 1
lib/components/Editor/index.js.map
File diff suppressed because it is too large
View File


+ 5
- 5
lib/components/RenderText/index.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 Object.defineProperty(exports, "__esModule", {
3
 Object.defineProperty(exports, "__esModule", {
4
   value: true
4
   value: true
5
 });
5
 });
6
 
6
 
7
-var _react = require("react");
7
+var _react = require('react');
8
 
8
 
9
 var _react2 = _interopRequireDefault(_react);
9
 var _react2 = _interopRequireDefault(_react);
10
 
10
 
11
-var _helper = require("../../helper");
11
+var _helper = require('../../helper');
12
 
12
 
13
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
 
14
 
15
 var App = function App(text) {
15
 var App = function App(text) {
16
-  return _react2.default.createElement("div", {
17
-    className: "comment-item-content",
16
+  return _react2.default.createElement('div', {
17
+    className: 'comment-item-content',
18
     dangerouslySetInnerHTML: {
18
     dangerouslySetInnerHTML: {
19
       __html: (0, _helper.renderContent)(text)
19
       __html: (0, _helper.renderContent)(text)
20
     }
20
     }

+ 1
- 1
lib/components/RenderText/index.js.map View File

1
-{"version":3,"sources":["../../../src/components/RenderText/index.js"],"names":["App","__html","text"],"mappings":";;;;;;AAAA;;;;AACA;;;;AAEA,IAAMA,MAAM,SAANA,GAAM;AAAA,SACV;AACE,eAAU,sBADZ;AAEE,6BAAyB;AACvBC,cAAQ,2BAAcC,IAAd;AADe;AAF3B,IADU;AAAA,CAAZ;;kBASeF,G","file":"index.js","sourcesContent":["import React from \"react\";\nimport { renderContent } from \"../../helper\";\n\nconst App = text => (\n  <div\n    className=\"comment-item-content\"\n    dangerouslySetInnerHTML={{\n      __html: renderContent(text)\n    }}\n  />\n);\n\nexport default App;\n"]}
1
+{"version":3,"sources":["../../../src/components/RenderText/index.js"],"names":["App","__html","text"],"mappings":";;;;;;AAAA;;;;AACA;;;;AAEA,IAAMA,MAAM,SAANA,GAAM;AAAA,SACV;AACE,eAAU,sBADZ;AAEE,6BAAyB;AACvBC,cAAQ,2BAAcC,IAAd;AADe;AAF3B,IADU;AAAA,CAAZ;;kBASeF,G","file":"index.js","sourcesContent":["import React from 'react';\nimport { renderContent } from '../../helper';\n\nconst App = text => (\n  <div\n    className=\"comment-item-content\"\n    dangerouslySetInnerHTML={{\n      __html: renderContent(text),\n    }}\n  />\n);\n\nexport default App;\n"]}

+ 9
- 7
lib/constant.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 Object.defineProperty(exports, "__esModule", {
3
 Object.defineProperty(exports, "__esModule", {
4
   value: true
4
   value: true
5
 });
5
 });
6
-var ERROR_DEFAULT = exports.ERROR_DEFAULT = "出错了!";
6
+var ERROR_DEFAULT = exports.ERROR_DEFAULT = '出错了!';
7
 
7
 
8
 var LIMIT = exports.LIMIT = 10; // 默认 limit
8
 var LIMIT = exports.LIMIT = 10; // 默认 limit
9
 
9
 
10
-var OSS_ENDPOINT = exports.OSS_ENDPOINT = "oss-cn-beijing.aliyuncs.com";
11
-var OSS_BUCKET = exports.OSS_BUCKET = "links-comment";
12
-var DRIVER_LICENSE_PATH = exports.DRIVER_LICENSE_PATH = "/comment";
10
+var OSS_ENDPOINT = exports.OSS_ENDPOINT = 'oss-cn-beijing.aliyuncs.com';
11
+var OSS_BUCKET = exports.OSS_BUCKET = 'links-comment';
12
+var DRIVER_LICENSE_PATH = exports.DRIVER_LICENSE_PATH = '/comment';
13
 
13
 
14
-var OSS_LINK = exports.OSS_LINK = "http://links-comment.oss-cn-beijing.aliyuncs.com";
14
+var OSS_LINK = exports.OSS_LINK = 'http://links-comment.oss-cn-beijing.aliyuncs.com';
15
 
15
 
16
 var MAX_UPLOAD_NUMBER = exports.MAX_UPLOAD_NUMBER = 4;
16
 var MAX_UPLOAD_NUMBER = exports.MAX_UPLOAD_NUMBER = 4;
17
 
17
 
18
 var REGEXP = exports.REGEXP = /\[.+?\]/g;
18
 var REGEXP = exports.REGEXP = /\[.+?\]/g;
19
 
19
 
20
-var AVATAR = exports.AVATAR = "";
20
+var AVATAR = exports.AVATAR = '';
21
+
22
+var IMAGE_SPLIT = exports.IMAGE_SPLIT = 'IMAGE_SPLIT';
21
 //# sourceMappingURL=constant.js.map
23
 //# sourceMappingURL=constant.js.map

+ 1
- 1
lib/constant.js.map View File

1
-{"version":3,"sources":["../src/constant.js"],"names":["ERROR_DEFAULT","LIMIT","OSS_ENDPOINT","OSS_BUCKET","DRIVER_LICENSE_PATH","OSS_LINK","MAX_UPLOAD_NUMBER","REGEXP","AVATAR"],"mappings":";;;;;AAAO,IAAMA,wCAAgB,MAAtB;;AAEA,IAAMC,wBAAQ,EAAd,C,CAAkB;;AAElB,IAAMC,sCAAe,6BAArB;AACA,IAAMC,kCAAa,eAAnB;AACA,IAAMC,oDAAsB,UAA5B;;AAEA,IAAMC,8BAAW,kDAAjB;;AAEA,IAAMC,gDAAoB,CAA1B;;AAEA,IAAMC,0BAAS,UAAf;;AAEA,IAAMC,0BAAS,EAAf","file":"constant.js","sourcesContent":["export const ERROR_DEFAULT = \"出错了!\";\n\nexport const LIMIT = 10; // 默认 limit\n\nexport const OSS_ENDPOINT = \"oss-cn-beijing.aliyuncs.com\";\nexport const OSS_BUCKET = \"links-comment\";\nexport const DRIVER_LICENSE_PATH = \"/comment\";\n\nexport const OSS_LINK = \"http://links-comment.oss-cn-beijing.aliyuncs.com\";\n\nexport const MAX_UPLOAD_NUMBER = 4;\n\nexport const REGEXP = /\\[.+?\\]/g;\n\nexport const AVATAR = \"\";\n"]}
1
+{"version":3,"sources":["../src/constant.js"],"names":["ERROR_DEFAULT","LIMIT","OSS_ENDPOINT","OSS_BUCKET","DRIVER_LICENSE_PATH","OSS_LINK","MAX_UPLOAD_NUMBER","REGEXP","AVATAR","IMAGE_SPLIT"],"mappings":";;;;;AAAO,IAAMA,wCAAgB,MAAtB;;AAEA,IAAMC,wBAAQ,EAAd,C,CAAkB;;AAElB,IAAMC,sCAAe,6BAArB;AACA,IAAMC,kCAAa,eAAnB;AACA,IAAMC,oDAAsB,UAA5B;;AAEA,IAAMC,8BAAW,kDAAjB;;AAEA,IAAMC,gDAAoB,CAA1B;;AAEA,IAAMC,0BAAS,UAAf;;AAEA,IAAMC,0BAAS,EAAf;;AAEA,IAAMC,oCAAc,aAApB","file":"constant.js","sourcesContent":["export const ERROR_DEFAULT = '出错了!';\n\nexport const LIMIT = 10; // 默认 limit\n\nexport const OSS_ENDPOINT = 'oss-cn-beijing.aliyuncs.com';\nexport const OSS_BUCKET = 'links-comment';\nexport const DRIVER_LICENSE_PATH = '/comment';\n\nexport const OSS_LINK = 'http://links-comment.oss-cn-beijing.aliyuncs.com';\n\nexport const MAX_UPLOAD_NUMBER = 4;\n\nexport const REGEXP = /\\[.+?\\]/g;\n\nexport const AVATAR = '';\n\nexport const IMAGE_SPLIT = 'IMAGE_SPLIT';\n"]}

+ 111
- 111
lib/emoji.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 Object.defineProperty(exports, "__esModule", {
3
 Object.defineProperty(exports, "__esModule", {
4
   value: true
4
   value: true
5
 });
5
 });
6
 var emoji = [{
6
 var emoji = [{
7
-  value: "0",
8
-  title: "捶地"
7
+  value: '0',
8
+  title: '捶地'
9
 }, {
9
 }, {
10
-  value: "1",
11
-  title: "怀疑"
10
+  value: '1',
11
+  title: '怀疑'
12
 }, {
12
 }, {
13
-  value: "2",
14
-  title: "撇嘴"
13
+  value: '2',
14
+  title: '撇嘴'
15
 }, {
15
 }, {
16
-  value: "3",
17
-  title: "色"
16
+  value: '3',
17
+  title: '色'
18
 }, {
18
 }, {
19
-  value: "4",
20
-  title: "发呆"
19
+  value: '4',
20
+  title: '发呆'
21
 }, {
21
 }, {
22
-  value: "5",
23
-  title: "酷"
22
+  value: '5',
23
+  title: '酷'
24
 }, {
24
 }, {
25
-  value: "6",
26
-  title: "害羞"
25
+  value: '6',
26
+  title: '害羞'
27
 }, {
27
 }, {
28
-  value: "7",
29
-  title: "闭嘴"
28
+  value: '7',
29
+  title: '闭嘴'
30
 }, {
30
 }, {
31
-  value: "8",
32
-  title: "睡觉"
31
+  value: '8',
32
+  title: '睡觉'
33
 }, {
33
 }, {
34
-  value: "9",
35
-  title: "大哭"
34
+  value: '9',
35
+  title: '大哭'
36
 }, {
36
 }, {
37
-  value: "10",
38
-  title: "尴尬"
37
+  value: '10',
38
+  title: '尴尬'
39
 }, {
39
 }, {
40
-  value: "11",
41
-  title: "发怒"
40
+  value: '11',
41
+  title: '发怒'
42
 }, {
42
 }, {
43
-  value: "12",
44
-  title: "调皮"
43
+  value: '12',
44
+  title: '调皮'
45
 }, {
45
 }, {
46
-  value: "13",
47
-  title: "呲牙"
46
+  value: '13',
47
+  title: '呲牙'
48
 }, {
48
 }, {
49
-  value: "14",
50
-  title: "微笑"
49
+  value: '14',
50
+  title: '微笑'
51
 }, {
51
 }, {
52
-  value: "15",
53
-  title: "难过"
52
+  value: '15',
53
+  title: '难过'
54
 }, {
54
 }, {
55
-  value: "16",
56
-  title: "帅呆"
55
+  value: '16',
56
+  title: '帅呆'
57
 }, {
57
 }, {
58
-  value: "17",
59
-  title: "折磨"
58
+  value: '17',
59
+  title: '折磨'
60
 }, {
60
 }, {
61
-  value: "18",
62
-  title: "吐"
61
+  value: '18',
62
+  title: '吐'
63
 }, {
63
 }, {
64
-  value: "19",
65
-  title: "偷笑"
64
+  value: '19',
65
+  title: '偷笑'
66
 }, {
66
 }, {
67
-  value: "20",
68
-  title: "可爱"
67
+  value: '20',
68
+  title: '可爱'
69
 }, {
69
 }, {
70
-  value: "21",
71
-  title: "白眼"
70
+  value: '21',
71
+  title: '白眼'
72
 }, {
72
 }, {
73
-  value: "22",
74
-  title: "傲慢"
73
+  value: '22',
74
+  title: '傲慢'
75
 }, {
75
 }, {
76
-  value: "23",
77
-  title: "嘴馋"
76
+  value: '23',
77
+  title: '嘴馋'
78
 }, {
78
 }, {
79
-  value: "24",
80
-  title: "困"
79
+  value: '24',
80
+  title: '困'
81
 }, {
81
 }, {
82
-  value: "25",
83
-  title: "恐慌"
82
+  value: '25',
83
+  title: '恐慌'
84
 }, {
84
 }, {
85
-  value: "26",
86
-  title: "流汗"
85
+  value: '26',
86
+  title: '流汗'
87
 }, {
87
 }, {
88
-  value: "27",
89
-  title: "憨笑"
88
+  value: '27',
89
+  title: '憨笑'
90
 }, {
90
 }, {
91
-  value: "28",
92
-  title: "大兵"
91
+  value: '28',
92
+  title: '大兵'
93
 }, {
93
 }, {
94
-  value: "29",
95
-  title: "奋斗"
94
+  value: '29',
95
+  title: '奋斗'
96
 }, {
96
 }, {
97
-  value: "30",
98
-  title: "疑问"
97
+  value: '30',
98
+  title: '疑问'
99
 }, {
99
 }, {
100
-  value: "31",
101
-  title: "嘘"
100
+  value: '31',
101
+  title: '嘘'
102
 }, {
102
 }, {
103
-  value: "32",
104
-  title: "晕"
103
+  value: '32',
104
+  title: '晕'
105
 }, {
105
 }, {
106
-  value: "33",
107
-  title: "被炸了"
106
+  value: '33',
107
+  title: '被炸了'
108
 }, {
108
 }, {
109
-  value: "34",
110
-  title: "骷髅"
109
+  value: '34',
110
+  title: '骷髅'
111
 }, {
111
 }, {
112
-  value: "35",
113
-  title: "敲打"
112
+  value: '35',
113
+  title: '敲打'
114
 }, {
114
 }, {
115
-  value: "36",
116
-  title: "拜拜"
115
+  value: '36',
116
+  title: '拜拜'
117
 }, {
117
 }, {
118
-  value: "37",
119
-  title: "发抖"
118
+  value: '37',
119
+  title: '发抖'
120
 }, {
120
 }, {
121
-  value: "38",
122
-  title: "亲密"
121
+  value: '38',
122
+  title: '亲密'
123
 }, {
123
 }, {
124
-  value: "39",
125
-  title: "跳"
124
+  value: '39',
125
+  title: '跳'
126
 }, {
126
 }, {
127
-  value: "40",
128
-  title: "猪头"
127
+  value: '40',
128
+  title: '猪头'
129
 }, {
129
 }, {
130
-  value: "41",
131
-  title: "拥抱"
130
+  value: '41',
131
+  title: '拥抱'
132
 }, {
132
 }, {
133
-  value: "42",
134
-  title: "生日蛋糕"
133
+  value: '42',
134
+  title: '生日蛋糕'
135
 }, {
135
 }, {
136
-  value: "43",
137
-  title: "闪电"
136
+  value: '43',
137
+  title: '闪电'
138
 }, {
138
 }, {
139
-  value: "44",
140
-  title: "地雷"
139
+  value: '44',
140
+  title: '地雷'
141
 }, {
141
 }, {
142
-  value: "45",
143
-  title: "刀"
142
+  value: '45',
143
+  title: '刀'
144
 }, {
144
 }, {
145
-  value: "46",
146
-  title: "足球"
145
+  value: '46',
146
+  title: '足球'
147
 }, {
147
 }, {
148
-  value: "47",
149
-  title: "便便"
148
+  value: '47',
149
+  title: '便便'
150
 }, {
150
 }, {
151
-  value: "48",
152
-  title: "咖啡"
151
+  value: '48',
152
+  title: '咖啡'
153
 }, {
153
 }, {
154
-  value: "49",
155
-  title: "米饭"
154
+  value: '49',
155
+  title: '米饭'
156
 }, {
156
 }, {
157
-  value: "50",
158
-  title: "玫瑰"
157
+  value: '50',
158
+  title: '玫瑰'
159
 }, {
159
 }, {
160
-  value: "51",
161
-  title: "枯萎玫瑰"
160
+  value: '51',
161
+  title: '枯萎玫瑰'
162
 }, {
162
 }, {
163
-  value: "52",
164
-  title: "爱心"
163
+  value: '52',
164
+  title: '爱心'
165
 }, {
165
 }, {
166
-  value: "53",
167
-  title: "心碎"
166
+  value: '53',
167
+  title: '心碎'
168
 }];
168
 }];
169
 
169
 
170
-var prefixUrl = exports.prefixUrl = "https://a.links123.cn/site/src/feed/imgs/qq/";
170
+var prefixUrl = exports.prefixUrl = 'https://a.links123.cn/site/src/feed/imgs/qq/';
171
 
171
 
172
-var ext = exports.ext = "gif";
172
+var ext = exports.ext = 'gif';
173
 
173
 
174
 exports.default = emoji;
174
 exports.default = emoji;
175
 //# sourceMappingURL=emoji.js.map
175
 //# sourceMappingURL=emoji.js.map

+ 1
- 1
lib/emoji.js.map
File diff suppressed because it is too large
View File


+ 23
- 13
lib/helper.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 Object.defineProperty(exports, "__esModule", {
3
 Object.defineProperty(exports, "__esModule", {
4
   value: true
4
   value: true
9
 exports.htmlEncode = htmlEncode;
9
 exports.htmlEncode = htmlEncode;
10
 exports.renderContent = renderContent;
10
 exports.renderContent = renderContent;
11
 
11
 
12
-var _constant = require("./constant");
12
+var _constant = require('./constant');
13
 
13
 
14
-var _emoji = require("./emoji");
14
+var _emoji = require('./emoji');
15
 
15
 
16
 var _emoji2 = _interopRequireDefault(_emoji);
16
 var _emoji2 = _interopRequireDefault(_emoji);
17
 
17
 
18
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
 
19
 
20
+var emojiObejct = arrayToObject(_emoji2.default, 'title');
21
+
20
 function isFunction(functionToCheck) {
22
 function isFunction(functionToCheck) {
21
-  return functionToCheck && {}.toString.call(functionToCheck) === "[object Function]";
23
+  return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';
22
 }
24
 }
23
 
25
 
24
 function isUrl(userInput) {
26
 function isUrl(userInput) {
45
  * @param {string} str 文本
47
  * @param {string} str 文本
46
  */
48
  */
47
 function htmlEncode(str) {
49
 function htmlEncode(str) {
48
-  if (!str) return "";
49
-  // /[\u00A0-\u9999<>\&]/gim  // 中文和 HTML 字符
50
-  return str.replace(/[<>\&]/gim, function (i) {
51
-    return "&#" + i.charCodeAt(0) + ";";
50
+  if (!str) return '';
51
+  return str.replace(/<\/?(?!a)\w*\b[^>]*>/gim, function (i) {
52
+    return '&#' + i.charCodeAt(0) + ';';
52
   });
53
   });
53
 }
54
 }
54
 
55
 
58
  * @param {strig} content
59
  * @param {strig} content
59
  */
60
  */
60
 function renderContent(content, onClick) {
61
 function renderContent(content, onClick) {
61
-  return htmlEncode(content).replace(_constant.REGEXP, function (a, b) {
62
+  var newContent = content;
63
+  if (newContent.indexOf(_constant.IMAGE_SPLIT) !== -1) {
64
+    newContent = newContent.split(_constant.IMAGE_SPLIT);
65
+    newContent.pop();
66
+    newContent = newContent.join('');
67
+  }
68
+
69
+  return htmlEncode(newContent).replace(_constant.REGEXP, function (a, b) {
62
     var src = a.slice(1, -1);
70
     var src = a.slice(1, -1);
71
+
72
+    // 兼容旧的评
73
+    // 因为旧的评论用 [img url] 方式存储的
63
     if (isUrl(src)) {
74
     if (isUrl(src)) {
64
-      return "<img src=\"" + src + "\" alt=\"" + src + "\" style=\"max-width: 300px\" />";
75
+      return '<br/><img src="' + src + '" alt="' + src + '" style="max-width: 100%" />';
65
     }
76
     }
66
-    var emojiObejct = arrayToObject(_emoji2.default, "title");
67
-    var value = emojiObejct[src].value;
68
-    return "<img src=\"" + _emoji.prefixUrl + value + "." + _emoji.ext + "\" alt=\"" + value + "\" />";
77
+    var value = emojiObejct[src] ? emojiObejct[src].value : src;
78
+    return '<img src="' + _emoji.prefixUrl + value + '.' + _emoji.ext + '" alt="' + value + '" />';
69
   });
79
   });
70
 }
80
 }
71
 //# sourceMappingURL=helper.js.map
81
 //# sourceMappingURL=helper.js.map

+ 1
- 1
lib/helper.js.map View File

1
-{"version":3,"sources":["../src/helper.js"],"names":["isFunction","isUrl","arrayToObject","htmlEncode","renderContent","functionToCheck","toString","call","userInput","regexp","res","match","array","keyField","reduce","obj","item","str","replace","i","charCodeAt","content","onClick","REGEXP","a","b","src","slice","emojiObejct","emoji","value","prefixUrl","ext"],"mappings":";;;;;QAGgBA,U,GAAAA,U;QAMAC,K,GAAAA,K;QAYAC,a,GAAAA,a;QAYAC,U,GAAAA,U;QAaAC,a,GAAAA,a;;AA9ChB;;AACA;;;;;;AAEO,SAASJ,UAAT,CAAoBK,eAApB,EAAqC;AAC1C,SACEA,mBAAmB,GAAGC,QAAH,CAAYC,IAAZ,CAAiBF,eAAjB,MAAsC,mBAD3D;AAGD;;AAEM,SAASJ,KAAT,CAAeO,SAAf,EAA0B;AAC/B,MAAMC,SAAS,kGAAf;AACA,MAAIC,MAAMF,UAAUG,KAAV,CAAgBF,MAAhB,CAAV;AACA,MAAIC,QAAQ,IAAZ,EAAkB,OAAO,KAAP,CAAlB,KACK,OAAO,IAAP;AACN;;AAED;;;;;AAKO,SAASR,aAAT,CAAuBU,KAAvB,EAA8BC,QAA9B,EAAwC;AAC7C,SAAOD,MAAME,MAAN,CAAa,UAACC,GAAD,EAAMC,IAAN,EAAe;AACjCD,QAAIC,KAAKH,QAAL,CAAJ,IAAsBG,IAAtB;AACA,WAAOD,GAAP;AACD,GAHM,EAGJ,EAHI,CAAP;AAID;;AAED;;;;;AAKO,SAASZ,UAAT,CAAoBc,GAApB,EAAyB;AAC9B,MAAI,CAACA,GAAL,EAAU,OAAO,EAAP;AACV;AACA,SAAOA,IAAIC,OAAJ,CAAY,WAAZ,EAAyB,UAASC,CAAT,EAAY;AAC1C,WAAO,OAAOA,EAAEC,UAAF,CAAa,CAAb,CAAP,GAAyB,GAAhC;AACD,GAFM,CAAP;AAGD;;AAED;;;;;AAKO,SAAShB,aAAT,CAAuBiB,OAAvB,EAAgCC,OAAhC,EAAyC;AAC9C,SAAOnB,WAAWkB,OAAX,EAAoBH,OAApB,CAA4BK,gBAA5B,EAAoC,UAASC,CAAT,EAAYC,CAAZ,EAAe;AACxD,QAAMC,MAAMF,EAAEG,KAAF,CAAQ,CAAR,EAAW,CAAC,CAAZ,CAAZ;AACA,QAAI1B,MAAMyB,GAAN,CAAJ,EAAgB;AACd,6BAAoBA,GAApB,iBAAiCA,GAAjC;AACD;AACD,QAAME,cAAc1B,cAAc2B,eAAd,EAAqB,OAArB,CAApB;AACA,QAAMC,QAAQF,YAAYF,GAAZ,EAAiBI,KAA/B;AACA,2BAAoBC,gBAApB,GAAgCD,KAAhC,SAAyCE,UAAzC,iBAAsDF,KAAtD;AACD,GARM,CAAP;AASD","file":"helper.js","sourcesContent":["import { REGEXP } from \"./constant\";\nimport emoji, { prefixUrl, ext } from \"./emoji\";\n\nexport function isFunction(functionToCheck) {\n  return (\n    functionToCheck && {}.toString.call(functionToCheck) === \"[object Function]\"\n  );\n}\n\nexport function isUrl(userInput) {\n  const regexp = /(http(s)?:\\/\\/.)?(www\\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/g;\n  var res = userInput.match(regexp);\n  if (res === null) return false;\n  else return true;\n}\n\n/**\n * 将对象数组转换为对象\n * @param {array} array Array of Objects\n * @param {string} keyField string\n */\nexport function arrayToObject(array, keyField) {\n  return array.reduce((obj, item) => {\n    obj[item[keyField]] = item;\n    return obj;\n  }, {});\n}\n\n/**\n * HTML 编码\n * 将 < > 等字符串进行编码\n * @param {string} str 文本\n */\nexport function htmlEncode(str) {\n  if (!str) return \"\";\n  // /[\\u00A0-\\u9999<>\\&]/gim  // 中文和 HTML 字符\n  return str.replace(/[<>\\&]/gim, function(i) {\n    return \"&#\" + i.charCodeAt(0) + \";\";\n  });\n}\n\n/**\n * 渲染编辑器\n * [x] => <img src=\"x\" />\n * @param {strig} content\n */\nexport function renderContent(content, onClick) {\n  return htmlEncode(content).replace(REGEXP, function(a, b) {\n    const src = a.slice(1, -1);\n    if (isUrl(src)) {\n      return `<img src=\"${src}\" alt=\"${src}\" style=\"max-width: 300px\" />`;\n    }\n    const emojiObejct = arrayToObject(emoji, \"title\");\n    const value = emojiObejct[src].value;\n    return `<img src=\"${prefixUrl}${value}.${ext}\" alt=\"${value}\" />`;\n  });\n}\n"]}
1
+{"version":3,"sources":["../src/helper.js"],"names":["isFunction","isUrl","arrayToObject","htmlEncode","renderContent","emojiObejct","emoji","functionToCheck","toString","call","userInput","regexp","res","match","array","keyField","reduce","obj","item","str","replace","i","charCodeAt","content","onClick","newContent","indexOf","IMAGE_SPLIT","split","pop","join","REGEXP","a","b","src","slice","value","prefixUrl","ext"],"mappings":";;;;;QAKgBA,U,GAAAA,U;QAMAC,K,GAAAA,K;QAYAC,a,GAAAA,a;QAYAC,U,GAAAA,U;QAYAC,a,GAAAA,a;;AA/ChB;;AACA;;;;;;AAEA,IAAMC,cAAcH,cAAcI,eAAd,EAAqB,OAArB,CAApB;;AAEO,SAASN,UAAT,CAAoBO,eAApB,EAAqC;AAC1C,SACEA,mBAAmB,GAAGC,QAAH,CAAYC,IAAZ,CAAiBF,eAAjB,MAAsC,mBAD3D;AAGD;;AAEM,SAASN,KAAT,CAAeS,SAAf,EAA0B;AAC/B,MAAMC,SAAS,kGAAf;AACA,MAAIC,MAAMF,UAAUG,KAAV,CAAgBF,MAAhB,CAAV;AACA,MAAIC,QAAQ,IAAZ,EAAkB,OAAO,KAAP,CAAlB,KACK,OAAO,IAAP;AACN;;AAED;;;;;AAKO,SAASV,aAAT,CAAuBY,KAAvB,EAA8BC,QAA9B,EAAwC;AAC7C,SAAOD,MAAME,MAAN,CAAa,UAACC,GAAD,EAAMC,IAAN,EAAe;AACjCD,QAAIC,KAAKH,QAAL,CAAJ,IAAsBG,IAAtB;AACA,WAAOD,GAAP;AACD,GAHM,EAGJ,EAHI,CAAP;AAID;;AAED;;;;;AAKO,SAASd,UAAT,CAAoBgB,GAApB,EAAyB;AAC9B,MAAI,CAACA,GAAL,EAAU,OAAO,EAAP;AACV,SAAOA,IAAIC,OAAJ,CAAY,yBAAZ,EAAuC,UAASC,CAAT,EAAY;AACxD,WAAO,OAAOA,EAAEC,UAAF,CAAa,CAAb,CAAP,GAAyB,GAAhC;AACD,GAFM,CAAP;AAGD;;AAED;;;;;AAKO,SAASlB,aAAT,CAAuBmB,OAAvB,EAAgCC,OAAhC,EAAyC;AAC9C,MAAIC,aAAaF,OAAjB;AACA,MAAIE,WAAWC,OAAX,CAAmBC,qBAAnB,MAAoC,CAAC,CAAzC,EAA4C;AAC1CF,iBAAaA,WAAWG,KAAX,CAAiBD,qBAAjB,CAAb;AACAF,eAAWI,GAAX;AACAJ,iBAAaA,WAAWK,IAAX,CAAgB,EAAhB,CAAb;AACD;;AAED,SAAO3B,WAAWsB,UAAX,EAAuBL,OAAvB,CAA+BW,gBAA/B,EAAuC,UAASC,CAAT,EAAYC,CAAZ,EAAe;AAC3D,QAAMC,MAAMF,EAAEG,KAAF,CAAQ,CAAR,EAAW,CAAC,CAAZ,CAAZ;;AAEA;AACA;AACA,QAAIlC,MAAMiC,GAAN,CAAJ,EAAgB;AACd,iCAAyBA,GAAzB,eAAsCA,GAAtC;AACD;AACD,QAAME,QAAQ/B,YAAY6B,GAAZ,IAAmB7B,YAAY6B,GAAZ,EAAiBE,KAApC,GAA4CF,GAA1D;AACA,0BAAoBG,gBAApB,GAAgCD,KAAhC,SAAyCE,UAAzC,eAAsDF,KAAtD;AACD,GAVM,CAAP;AAWD","file":"helper.js","sourcesContent":["import { REGEXP, IMAGE_SPLIT } from './constant';\nimport emoji, { prefixUrl, ext } from './emoji';\n\nconst emojiObejct = arrayToObject(emoji, 'title');\n\nexport function isFunction(functionToCheck) {\n  return (\n    functionToCheck && {}.toString.call(functionToCheck) === '[object Function]'\n  );\n}\n\nexport function isUrl(userInput) {\n  const regexp = /(http(s)?:\\/\\/.)?(www\\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/g;\n  var res = userInput.match(regexp);\n  if (res === null) return false;\n  else return true;\n}\n\n/**\n * 将对象数组转换为对象\n * @param {array} array Array of Objects\n * @param {string} keyField string\n */\nexport function arrayToObject(array, keyField) {\n  return array.reduce((obj, item) => {\n    obj[item[keyField]] = item;\n    return obj;\n  }, {});\n}\n\n/**\n * HTML 编码\n * 将 < > 等字符串进行编码\n * @param {string} str 文本\n */\nexport function htmlEncode(str) {\n  if (!str) return '';\n  return str.replace(/<\\/?(?!a)\\w*\\b[^>]*>/gim, function(i) {\n    return '&#' + i.charCodeAt(0) + ';';\n  });\n}\n\n/**\n * 渲染编辑器\n * [x] => <img src=\"x\" />\n * @param {strig} content\n */\nexport function renderContent(content, onClick) {\n  let newContent = content;\n  if (newContent.indexOf(IMAGE_SPLIT) !== -1) {\n    newContent = newContent.split(IMAGE_SPLIT);\n    newContent.pop();\n    newContent = newContent.join('');\n  }\n\n  return htmlEncode(newContent).replace(REGEXP, function(a, b) {\n    const src = a.slice(1, -1);\n\n    // 兼容旧的评\n    // 因为旧的评论用 [img url] 方式存储的\n    if (isUrl(src)) {\n      return `<br/><img src=\"${src}\" alt=\"${src}\" style=\"max-width: 100%\" />`;\n    }\n    const value = emojiObejct[src] ? emojiObejct[src].value : src;\n    return `<img src=\"${prefixUrl}${value}.${ext}\" alt=\"${value}\" />`;\n  });\n}\n"]}

+ 15
- 15
lib/index.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
3
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
4
 
4
 
5
-var _react = require("react");
5
+var _react = require('react');
6
 
6
 
7
 var _react2 = _interopRequireDefault(_react);
7
 var _react2 = _interopRequireDefault(_react);
8
 
8
 
9
-var _reactDom = require("react-dom");
9
+var _reactDom = require('react-dom');
10
 
10
 
11
 var _reactDom2 = _interopRequireDefault(_reactDom);
11
 var _reactDom2 = _interopRequireDefault(_reactDom);
12
 
12
 
13
-var _App = require("./App");
13
+var _App = require('./App');
14
 
14
 
15
 var _App2 = _interopRequireDefault(_App);
15
 var _App2 = _interopRequireDefault(_App);
16
 
16
 
17
-var _registerServiceWorker = require("./registerServiceWorker");
17
+var _registerServiceWorker = require('./registerServiceWorker');
18
 
18
 
19
 var _registerServiceWorker2 = _interopRequireDefault(_registerServiceWorker);
19
 var _registerServiceWorker2 = _interopRequireDefault(_registerServiceWorker);
20
 
20
 
38
     var _this = _possibleConstructorReturn(this, (Index.__proto__ || Object.getPrototypeOf(Index)).call(this, props));
38
     var _this = _possibleConstructorReturn(this, (Index.__proto__ || Object.getPrototypeOf(Index)).call(this, props));
39
 
39
 
40
     _this.state = {
40
     _this.state = {
41
-      value: ""
41
+      value: ''
42
     };
42
     };
43
     _this.handleChangeValue = _this.handleChangeValue.bind(_this);
43
     _this.handleChangeValue = _this.handleChangeValue.bind(_this);
44
     _this.handleChangeSubmit = _this.handleChangeSubmit.bind(_this);
44
     _this.handleChangeSubmit = _this.handleChangeSubmit.bind(_this);
46
   }
46
   }
47
 
47
 
48
   _createClass(Index, [{
48
   _createClass(Index, [{
49
-    key: "handleChangeValue",
49
+    key: 'handleChangeValue',
50
     value: function handleChangeValue(value) {
50
     value: function handleChangeValue(value) {
51
       this.setState({ value: value });
51
       this.setState({ value: value });
52
-      console.log("handleChangeValue value: ", value);
52
+      console.log('handleChangeValue value: ', value);
53
     }
53
     }
54
   }, {
54
   }, {
55
-    key: "handleChangeSubmit",
55
+    key: 'handleChangeSubmit',
56
     value: function handleChangeSubmit(_ref) {
56
     value: function handleChangeSubmit(_ref) {
57
       var _this2 = this;
57
       var _this2 = this;
58
 
58
 
64
           _this2.setState({ loading: false });
64
           _this2.setState({ loading: false });
65
         }, 2000);
65
         }, 2000);
66
       });
66
       });
67
-      console.log("submit text: ", text);
68
-      console.log("submit files: ", files);
67
+      console.log('submit text: ', text);
68
+      console.log('submit files: ', files);
69
     }
69
     }
70
   }, {
70
   }, {
71
-    key: "render",
71
+    key: 'render',
72
     value: function render() {
72
     value: function render() {
73
       // 最简单的用法
73
       // 最简单的用法
74
       return _react2.default.createElement(
74
       return _react2.default.createElement(
75
         _App2.default,
75
         _App2.default,
76
-        { type: 1, businessId: "test" },
77
-        _react2.default.createElement(_App.Editor, null)
76
+        { type: 1, businessId: 'test' },
77
+        _react2.default.createElement(_App.Editor, { maxUpload: 4 })
78
       );
78
       );
79
 
79
 
80
       // e.g.
80
       // e.g.
122
   return Index;
122
   return Index;
123
 }(_react.Component);
123
 }(_react.Component);
124
 
124
 
125
-_reactDom2.default.render(_react2.default.createElement(Index, null), document.getElementById("root-comment"));
125
+_reactDom2.default.render(_react2.default.createElement(Index, null), document.getElementById('root-comment'));
126
 (0, _registerServiceWorker2.default)();
126
 (0, _registerServiceWorker2.default)();
127
 //# sourceMappingURL=index.js.map
127
 //# sourceMappingURL=index.js.map

+ 1
- 1
lib/index.js.map View File

1
-{"version":3,"sources":["../src/index.js"],"names":["Index","props","state","value","handleChangeValue","bind","handleChangeSubmit","setState","console","log","text","files","loading","setTimeout","Component","ReactDOM","render","document","getElementById"],"mappings":";;;;AAAA;;;;AACA;;;;AAGA;;;;AACA;;;;;;;;;;;AAHA;AACA;;;IAIMA,K;;;AACJ,iBAAYC,KAAZ,EAAmB;AAAA;;AAAA,8GACXA,KADW;;AAEjB,UAAKC,KAAL,GAAa;AACXC,aAAO;AADI,KAAb;AAGA,UAAKC,iBAAL,GAAyB,MAAKA,iBAAL,CAAuBC,IAAvB,OAAzB;AACA,UAAKC,kBAAL,GAA0B,MAAKA,kBAAL,CAAwBD,IAAxB,OAA1B;AANiB;AAOlB;;;;sCAEiBF,K,EAAO;AACvB,WAAKI,QAAL,CAAc,EAAEJ,YAAF,EAAd;AACAK,cAAQC,GAAR,CAAY,2BAAZ,EAAyCN,KAAzC;AACD;;;6CAEmC;AAAA;;AAAA,UAAfO,IAAe,QAAfA,IAAe;AAAA,UAATC,KAAS,QAATA,KAAS;;AAClC,WAAKJ,QAAL,CAAc,EAAEK,SAAS,IAAX,EAAd,EAAiC,YAAM;AACrCC,mBAAW,YAAM;AACf,iBAAKN,QAAL,CAAc,EAAEK,SAAS,KAAX,EAAd;AACD,SAFD,EAEG,IAFH;AAGD,OAJD;AAKAJ,cAAQC,GAAR,CAAY,eAAZ,EAA6BC,IAA7B;AACAF,cAAQC,GAAR,CAAY,gBAAZ,EAA8BE,KAA9B;AACD;;;6BAEQ;AACP;AACA,aACE;AAAC,qBAAD;AAAA,UAAK,MAAM,CAAX,EAAc,YAAW,MAAzB;AACE,sCAAC,WAAD;AADF,OADF;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACD;;;;EAxEiBG,gB;;AA2EpBC,mBAASC,MAAT,CAAgB,8BAAC,KAAD,OAAhB,EAA2BC,SAASC,cAAT,CAAwB,cAAxB,CAA3B;AACA","file":"index.js","sourcesContent":["import React, { Component } from \"react\";\nimport ReactDOM from \"react-dom\";\n// e.g.\n// import { Button, Icon } from \"antd\";\nimport App, { Editor, RenderText } from \"./App\";\nimport registerServiceWorker from \"./registerServiceWorker\";\n\nclass Index extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      value: \"\"\n    };\n    this.handleChangeValue = this.handleChangeValue.bind(this);\n    this.handleChangeSubmit = this.handleChangeSubmit.bind(this);\n  }\n\n  handleChangeValue(value) {\n    this.setState({ value });\n    console.log(\"handleChangeValue value: \", value);\n  }\n\n  handleChangeSubmit({ text, files }) {\n    this.setState({ loading: true }, () => {\n      setTimeout(() => {\n        this.setState({ loading: false });\n      }, 2000);\n    });\n    console.log(\"submit text: \", text);\n    console.log(\"submit files: \", files);\n  }\n\n  render() {\n    // 最简单的用法\n    return (\n      <App type={1} businessId=\"test\">\n        <Editor />\n      </App>\n    );\n\n    // e.g.\n    // 复杂的用户法\n    // const props = {\n    //   type: 1,\n    //   businessId: \"1\",\n    //   API: \"http://api.links123.net/comment/v1\",\n    //   showList: true\n    // };\n\n    // const editorProps = {\n    //   showEmoji: true,\n    //   placeholder: \"说点什么吧\",\n    //   rows: 5,\n    //   btnLoading: this.state.loading,\n    //   btnDisable: this.state.loading,\n    //   btnSubmitText: \"提交\",\n    //   value: this.state.value,\n    //   onChange: v => this.handleChangeValue(v),\n    //   onSubmit: v => this.handleChangeSubmit(v),\n    //   button: (\n    //     <Button\n    //       type=\"primary\"\n    //       ghost\n    //       // onClick={() => console.log('click btn: ', this.state.value)}\n    //     >\n    //       自定义按钮\n    //     </Button>\n    //   ),\n    //   emojiToolIcon: <Icon type=\"smile\" style={{ fontSize: 23 }} />,\n    //   imageToolIcon: (\n    //     <Icon type=\"cloud-upload-o\" style={{ fontSize: 25, marginLeft: 10 }} />\n    //   )\n    // };\n\n    // return (\n    //   <App {...props}>\n    //     <Editor {...editorProps} />\n    //   </App>\n    // );\n  }\n}\n\nReactDOM.render(<Index />, document.getElementById(\"root-comment\"));\nregisterServiceWorker();\n"]}
1
+{"version":3,"sources":["../src/index.js"],"names":["Index","props","state","value","handleChangeValue","bind","handleChangeSubmit","setState","console","log","text","files","loading","setTimeout","Component","ReactDOM","render","document","getElementById"],"mappings":";;;;AAAA;;;;AACA;;;;AAGA;;;;AACA;;;;;;;;;;;AAHA;AACA;;;IAIMA,K;;;AACJ,iBAAYC,KAAZ,EAAmB;AAAA;;AAAA,8GACXA,KADW;;AAEjB,UAAKC,KAAL,GAAa;AACXC,aAAO;AADI,KAAb;AAGA,UAAKC,iBAAL,GAAyB,MAAKA,iBAAL,CAAuBC,IAAvB,OAAzB;AACA,UAAKC,kBAAL,GAA0B,MAAKA,kBAAL,CAAwBD,IAAxB,OAA1B;AANiB;AAOlB;;;;sCAEiBF,K,EAAO;AACvB,WAAKI,QAAL,CAAc,EAAEJ,YAAF,EAAd;AACAK,cAAQC,GAAR,CAAY,2BAAZ,EAAyCN,KAAzC;AACD;;;6CAEmC;AAAA;;AAAA,UAAfO,IAAe,QAAfA,IAAe;AAAA,UAATC,KAAS,QAATA,KAAS;;AAClC,WAAKJ,QAAL,CAAc,EAAEK,SAAS,IAAX,EAAd,EAAiC,YAAM;AACrCC,mBAAW,YAAM;AACf,iBAAKN,QAAL,CAAc,EAAEK,SAAS,KAAX,EAAd;AACD,SAFD,EAEG,IAFH;AAGD,OAJD;AAKAJ,cAAQC,GAAR,CAAY,eAAZ,EAA6BC,IAA7B;AACAF,cAAQC,GAAR,CAAY,gBAAZ,EAA8BE,KAA9B;AACD;;;6BAEQ;AACP;AACA,aACE;AAAC,qBAAD;AAAA,UAAK,MAAM,CAAX,EAAc,YAAW,MAAzB;AACE,sCAAC,WAAD,IAAQ,WAAW,CAAnB;AADF,OADF;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACD;;;;EAxEiBG,gB;;AA2EpBC,mBAASC,MAAT,CAAgB,8BAAC,KAAD,OAAhB,EAA2BC,SAASC,cAAT,CAAwB,cAAxB,CAA3B;AACA","file":"index.js","sourcesContent":["import React, { Component } from 'react';\nimport ReactDOM from 'react-dom';\n// e.g.\n// import { Button, Icon } from \"antd\";\nimport App, { Editor, RenderText } from './App';\nimport registerServiceWorker from './registerServiceWorker';\n\nclass Index extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      value: '',\n    };\n    this.handleChangeValue = this.handleChangeValue.bind(this);\n    this.handleChangeSubmit = this.handleChangeSubmit.bind(this);\n  }\n\n  handleChangeValue(value) {\n    this.setState({ value });\n    console.log('handleChangeValue value: ', value);\n  }\n\n  handleChangeSubmit({ text, files }) {\n    this.setState({ loading: true }, () => {\n      setTimeout(() => {\n        this.setState({ loading: false });\n      }, 2000);\n    });\n    console.log('submit text: ', text);\n    console.log('submit files: ', files);\n  }\n\n  render() {\n    // 最简单的用法\n    return (\n      <App type={1} businessId=\"test\">\n        <Editor maxUpload={4} />\n      </App>\n    );\n\n    // e.g.\n    // 复杂的用户法\n    // const props = {\n    //   type: 1,\n    //   businessId: \"1\",\n    //   API: \"http://api.links123.net/comment/v1\",\n    //   showList: true\n    // };\n\n    // const editorProps = {\n    //   showEmoji: true,\n    //   placeholder: \"说点什么吧\",\n    //   rows: 5,\n    //   btnLoading: this.state.loading,\n    //   btnDisable: this.state.loading,\n    //   btnSubmitText: \"提交\",\n    //   value: this.state.value,\n    //   onChange: v => this.handleChangeValue(v),\n    //   onSubmit: v => this.handleChangeSubmit(v),\n    //   button: (\n    //     <Button\n    //       type=\"primary\"\n    //       ghost\n    //       // onClick={() => console.log('click btn: ', this.state.value)}\n    //     >\n    //       自定义按钮\n    //     </Button>\n    //   ),\n    //   emojiToolIcon: <Icon type=\"smile\" style={{ fontSize: 23 }} />,\n    //   imageToolIcon: (\n    //     <Icon type=\"cloud-upload-o\" style={{ fontSize: 25, marginLeft: 10 }} />\n    //   )\n    // };\n\n    // return (\n    //   <App {...props}>\n    //     <Editor {...editorProps} />\n    //   </App>\n    // );\n  }\n}\n\nReactDOM.render(<Index />, document.getElementById('root-comment'));\nregisterServiceWorker();\n"]}

+ 11
- 11
lib/lang/index.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 Object.defineProperty(exports, "__esModule", {
3
 Object.defineProperty(exports, "__esModule", {
4
   value: true
4
   value: true
6
 // 语言包
6
 // 语言包
7
 // 英文短语和中文提示的对应
7
 // 英文短语和中文提示的对应
8
 var data = {
8
 var data = {
9
-  "not found": "没有数据",
10
-  "auth failed": "请先登录",
11
-  "create comment failed": "创建评论失败",
12
-  "comment favor failed": "评论点赞失败",
13
-  "delete comment favor failed": "评论取消点赞失败",
14
-  "get comments failed": "获取评论列表失败",
15
-  "create reply failed": "创建回复失败",
16
-  "reply favor failed": "回复点赞失败",
17
-  "delete reply favor failed": "删除回复点赞失败",
18
-  "get replies failed": "获取回复列表失败"
9
+  'not found': '没有数据',
10
+  'auth failed': '请先登录',
11
+  'create comment failed': '创建评论失败',
12
+  'comment favor failed': '评论点赞失败',
13
+  'delete comment favor failed': '评论取消点赞失败',
14
+  'get comments failed': '获取评论列表失败',
15
+  'create reply failed': '创建回复失败',
16
+  'reply favor failed': '回复点赞失败',
17
+  'delete reply favor failed': '删除回复点赞失败',
18
+  'get replies failed': '获取回复列表失败'
19
 };
19
 };
20
 
20
 
21
 exports.default = data;
21
 exports.default = data;

+ 1
- 1
lib/lang/index.js.map View File

1
-{"version":3,"sources":["../../src/lang/index.js"],"names":["data"],"mappings":";;;;;AAAA;AACA;AACA,IAAMA,OAAO;AACX,eAAa,MADF;AAEX,iBAAe,MAFJ;AAGX,2BAAyB,QAHd;AAIX,0BAAwB,QAJb;AAKX,iCAA+B,UALpB;AAMX,yBAAuB,UANZ;AAOX,yBAAuB,QAPZ;AAQX,wBAAsB,QARX;AASX,+BAA6B,UATlB;AAUX,wBAAsB;AAVX,CAAb;;kBAaeA,I","file":"index.js","sourcesContent":["// 语言包\n// 英文短语和中文提示的对应\nconst data = {\n  \"not found\": \"没有数据\",\n  \"auth failed\": \"请先登录\",\n  \"create comment failed\": \"创建评论失败\",\n  \"comment favor failed\": \"评论点赞失败\",\n  \"delete comment favor failed\": \"评论取消点赞失败\",\n  \"get comments failed\": \"获取评论列表失败\",\n  \"create reply failed\": \"创建回复失败\",\n  \"reply favor failed\": \"回复点赞失败\",\n  \"delete reply favor failed\": \"删除回复点赞失败\",\n  \"get replies failed\": \"获取回复列表失败\"\n};\n\nexport default data;\n"]}
1
+{"version":3,"sources":["../../src/lang/index.js"],"names":["data"],"mappings":";;;;;AAAA;AACA;AACA,IAAMA,OAAO;AACX,eAAa,MADF;AAEX,iBAAe,MAFJ;AAGX,2BAAyB,QAHd;AAIX,0BAAwB,QAJb;AAKX,iCAA+B,UALpB;AAMX,yBAAuB,UANZ;AAOX,yBAAuB,QAPZ;AAQX,wBAAsB,QARX;AASX,+BAA6B,UATlB;AAUX,wBAAsB;AAVX,CAAb;;kBAaeA,I","file":"index.js","sourcesContent":["// 语言包\n// 英文短语和中文提示的对应\nconst data = {\n  'not found': '没有数据',\n  'auth failed': '请先登录',\n  'create comment failed': '创建评论失败',\n  'comment favor failed': '评论点赞失败',\n  'delete comment favor failed': '评论取消点赞失败',\n  'get comments failed': '获取评论列表失败',\n  'create reply failed': '创建回复失败',\n  'reply favor failed': '回复点赞失败',\n  'delete reply favor failed': '删除回复点赞失败',\n  'get replies failed': '获取回复列表失败',\n};\n\nexport default data;\n"]}

+ 14
- 14
lib/registerServiceWorker.js View File

1
-"use strict";
1
+'use strict';
2
 
2
 
3
 Object.defineProperty(exports, "__esModule", {
3
 Object.defineProperty(exports, "__esModule", {
4
   value: true
4
   value: true
15
 // To learn more about the benefits of this model, read https://goo.gl/KwvDNy.
15
 // To learn more about the benefits of this model, read https://goo.gl/KwvDNy.
16
 // This link also includes instructions on opting out of this behavior.
16
 // This link also includes instructions on opting out of this behavior.
17
 
17
 
18
-var isLocalhost = Boolean(window.location.hostname === "localhost" ||
18
+var isLocalhost = Boolean(window.location.hostname === 'localhost' ||
19
 // [::1] is the IPv6 localhost address.
19
 // [::1] is the IPv6 localhost address.
20
-window.location.hostname === "[::1]" ||
20
+window.location.hostname === '[::1]' ||
21
 // 127.0.0.1/8 is considered localhost for IPv4.
21
 // 127.0.0.1/8 is considered localhost for IPv4.
22
 window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));
22
 window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));
23
 
23
 
24
 function register() {
24
 function register() {
25
-  if (process.env.NODE_ENV === "production" && "serviceWorker" in navigator) {
25
+  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
26
     // The URL constructor is available in all browsers that support SW.
26
     // The URL constructor is available in all browsers that support SW.
27
     var publicUrl = new URL(process.env.PUBLIC_URL, window.location);
27
     var publicUrl = new URL(process.env.PUBLIC_URL, window.location);
28
     if (publicUrl.origin !== window.location.origin) {
28
     if (publicUrl.origin !== window.location.origin) {
32
       return;
32
       return;
33
     }
33
     }
34
 
34
 
35
-    window.addEventListener("load", function () {
36
-      var swUrl = process.env.PUBLIC_URL + "/service-worker.js";
35
+    window.addEventListener('load', function () {
36
+      var swUrl = process.env.PUBLIC_URL + '/service-worker.js';
37
 
37
 
38
       if (isLocalhost) {
38
       if (isLocalhost) {
39
         // This is running on localhost. Lets check if a service worker still exists or not.
39
         // This is running on localhost. Lets check if a service worker still exists or not.
42
         // Add some additional logging to localhost, pointing developers to the
42
         // Add some additional logging to localhost, pointing developers to the
43
         // service worker/PWA documentation.
43
         // service worker/PWA documentation.
44
         navigator.serviceWorker.ready.then(function () {
44
         navigator.serviceWorker.ready.then(function () {
45
-          console.log("This web app is being served cache-first by a service " + "worker. To learn more, visit https://goo.gl/SC7cgQ");
45
+          console.log('This web app is being served cache-first by a service ' + 'worker. To learn more, visit https://goo.gl/SC7cgQ');
46
         });
46
         });
47
       } else {
47
       } else {
48
         // Is not local host. Just register service worker
48
         // Is not local host. Just register service worker
57
     registration.onupdatefound = function () {
57
     registration.onupdatefound = function () {
58
       var installingWorker = registration.installing;
58
       var installingWorker = registration.installing;
59
       installingWorker.onstatechange = function () {
59
       installingWorker.onstatechange = function () {
60
-        if (installingWorker.state === "installed") {
60
+        if (installingWorker.state === 'installed') {
61
           if (navigator.serviceWorker.controller) {
61
           if (navigator.serviceWorker.controller) {
62
             // At this point, the old content will have been purged and
62
             // At this point, the old content will have been purged and
63
             // the fresh content will have been added to the cache.
63
             // the fresh content will have been added to the cache.
64
             // It's the perfect time to display a "New content is
64
             // It's the perfect time to display a "New content is
65
             // available; please refresh." message in your web app.
65
             // available; please refresh." message in your web app.
66
-            console.log("New content is available; please refresh.");
66
+            console.log('New content is available; please refresh.');
67
           } else {
67
           } else {
68
             // At this point, everything has been precached.
68
             // At this point, everything has been precached.
69
             // It's the perfect time to display a
69
             // It's the perfect time to display a
70
             // "Content is cached for offline use." message.
70
             // "Content is cached for offline use." message.
71
-            console.log("Content is cached for offline use.");
71
+            console.log('Content is cached for offline use.');
72
           }
72
           }
73
         }
73
         }
74
       };
74
       };
75
     };
75
     };
76
   }).catch(function (error) {
76
   }).catch(function (error) {
77
-    console.error("Error during service worker registration:", error);
77
+    console.error('Error during service worker registration:', error);
78
   });
78
   });
79
 }
79
 }
80
 
80
 
82
   // Check if the service worker can be found. If it can't reload the page.
82
   // Check if the service worker can be found. If it can't reload the page.
83
   fetch(swUrl).then(function (response) {
83
   fetch(swUrl).then(function (response) {
84
     // Ensure service worker exists, and that we really are getting a JS file.
84
     // Ensure service worker exists, and that we really are getting a JS file.
85
-    if (response.status === 404 || response.headers.get("content-type").indexOf("javascript") === -1) {
85
+    if (response.status === 404 || response.headers.get('content-type').indexOf('javascript') === -1) {
86
       // No service worker found. Probably a different app. Reload the page.
86
       // No service worker found. Probably a different app. Reload the page.
87
       navigator.serviceWorker.ready.then(function (registration) {
87
       navigator.serviceWorker.ready.then(function (registration) {
88
         registration.unregister().then(function () {
88
         registration.unregister().then(function () {
94
       registerValidSW(swUrl);
94
       registerValidSW(swUrl);
95
     }
95
     }
96
   }).catch(function () {
96
   }).catch(function () {
97
-    console.log("No internet connection found. App is running in offline mode.");
97
+    console.log('No internet connection found. App is running in offline mode.');
98
   });
98
   });
99
 }
99
 }
100
 
100
 
101
 function unregister() {
101
 function unregister() {
102
-  if ("serviceWorker" in navigator) {
102
+  if ('serviceWorker' in navigator) {
103
     navigator.serviceWorker.ready.then(function (registration) {
103
     navigator.serviceWorker.ready.then(function (registration) {
104
       registration.unregister();
104
       registration.unregister();
105
     });
105
     });

+ 1
- 1
lib/registerServiceWorker.js.map
File diff suppressed because it is too large
View File


+ 17
- 5
src/App.js View File

171
       withCredentials: true
171
       withCredentials: true
172
     })
172
     })
173
       .then(response => {
173
       .then(response => {
174
-        message.success("评论成功!");
174
+        if (this.props.showAlertComment) {
175
+          message.success("评论成功!");
176
+        }
175
         if (isFunction(cb)) cb();
177
         if (isFunction(cb)) cb();
176
         // 将数据写入到 list 中
178
         // 将数据写入到 list 中
177
         // 临时插入
179
         // 临时插入
210
       withCredentials: true
212
       withCredentials: true
211
     })
213
     })
212
       .then(response => {
214
       .then(response => {
213
-        message.success("回复成功!");
215
+        if (this.props.showAlertReply) {
216
+          message.success("回复成功!");
217
+        }
214
         if (isFunction(cb)) cb();
218
         if (isFunction(cb)) cb();
215
         // 将数据写入到 list 中
219
         // 将数据写入到 list 中
216
         // 临时插入
220
         // 临时插入
253
       withCredentials: true
257
       withCredentials: true
254
     })
258
     })
255
       .then(response => {
259
       .then(response => {
256
-        message.success(favored ? "取消点赞成功!" : "点赞成功!");
260
+        if (this.props.showAlertFavor) {
261
+          message.success(favored ? "取消点赞成功!" : "点赞成功!");
262
+        }
257
         // 更新 list 中的该项数据的 favored
263
         // 更新 list 中的该项数据的 favored
258
         const list = this.state.list.map(item => {
264
         const list = this.state.list.map(item => {
259
           if (item.id === commentId) {
265
           if (item.id === commentId) {
392
   API: PropTypes.string, // 评论的 API 前缀
398
   API: PropTypes.string, // 评论的 API 前缀
393
   showList: PropTypes.bool, // 是否显示评论列表
399
   showList: PropTypes.bool, // 是否显示评论列表
394
   showEditor: PropTypes.bool, // 是否显示评论输入框
400
   showEditor: PropTypes.bool, // 是否显示评论输入框
395
-  showHeader: PropTypes.bool // 是否显示评论顶部的提示
401
+  showHeader: PropTypes.bool, // 是否显示评论顶部的提示
402
+  showAlertComment: PropTypes.bool, // 评论成功之后,是否通过 Antd 的 Message 组件进行提示
403
+  showAlertReply: PropTypes.bool, // 回复成功之后,是否通过 Antd 的 Message 组件进行提示
404
+  showAlertFavor: PropTypes.bool // 点赞/取消点赞成功之后,是否通过 Antd 的 Message 组件进行提示
396
 };
405
 };
397
 
406
 
398
 App.defaultProps = {
407
 App.defaultProps = {
399
   API: "http://api.links123.net/comment/v1",
408
   API: "http://api.links123.net/comment/v1",
400
   showList: true,
409
   showList: true,
401
   showEditor: true,
410
   showEditor: true,
402
-  showHeader: true
411
+  showHeader: true,
412
+  showAlertComment: false,
413
+  showAlertReply: false,
414
+  showAlertFavor: false
403
 };
415
 };
404
 
416
 
405
 export { Editor, RenderText };
417
 export { Editor, RenderText };

+ 7
- 2
src/components/CommentInput/index.js View File

1
 import React, { Component } from "react";
1
 import React, { Component } from "react";
2
 import PropTypes from "prop-types";
2
 import PropTypes from "prop-types";
3
+import { IMAGE_SPLIT } from "../../constant";
3
 import Comment from "../../Comment";
4
 import Comment from "../../Comment";
4
 
5
 
5
 class CommentInput extends Component {
6
 class CommentInput extends Component {
17
   handleSubmit({ text, files }, cb) {
18
   handleSubmit({ text, files }, cb) {
18
     let value = text;
19
     let value = text;
19
     if (files && files.length) {
20
     if (files && files.length) {
20
-      value += "<br /><br />";
21
+      value += IMAGE_SPLIT;
21
       files.forEach(file => {
22
       files.forEach(file => {
22
-        value += `[${file}]`;
23
+        value += `${file},`;
23
       });
24
       });
24
     }
25
     }
26
+    if (value.substr(-1) === ",") {
27
+      value = value.slice(0, -1);
28
+    }
29
+
25
     const { action, commentId, replyId, callback } = this.props;
30
     const { action, commentId, replyId, callback } = this.props;
26
     if (action === "comment") {
31
     if (action === "comment") {
27
       this.props.app.sCreateComment(
32
       this.props.app.sCreateComment(

+ 32
- 4
src/components/ContentItem/index.js View File

8
 import CommentInput from "../CommentInput";
8
 import CommentInput from "../CommentInput";
9
 import avatar from "../../avatar";
9
 import avatar from "../../avatar";
10
 import { renderContent } from "../../helper";
10
 import { renderContent } from "../../helper";
11
+import { IMAGE_SPLIT } from "../../constant";
11
 import "./index.css";
12
 import "./index.css";
12
 
13
 
13
 dayjs.locale("zh-cn");
14
 dayjs.locale("zh-cn");
31
     let newText = text;
32
     let newText = text;
32
     const { reply } = content;
33
     const { reply } = content;
33
     if (reply) {
34
     if (reply) {
34
-      newText = `${newText} //@<a href="/${reply.user_id}">${
35
-        reply.user_name
36
-      }</a> ${reply.content}`;
35
+      // newText = `${newText} //@<a href="/${reply.user_id}">${
36
+      //   reply.user_name
37
+      // }</a> ${reply.content}`;
38
+      newText = `${newText} //@${reply.user_name} ${reply.content}`;
39
+      // newText = (
40
+      //   <span>
41
+      //     {newText}
42
+      //     @<a href={`/${reply.user_id}`}>{reply.user_name}</a>{reply.content}
43
+      //   </span>
44
+      // )
37
       if (reply.reply) {
45
       if (reply.reply) {
38
         return this.renderTextWithReply(newText, reply);
46
         return this.renderTextWithReply(newText, reply);
39
       }
47
       }
54
 
62
 
55
     const { showInput } = this.state;
63
     const { showInput } = this.state;
56
 
64
 
65
+    let newContent = content.content;
66
+    let images = "";
67
+    if (newContent.indexOf(IMAGE_SPLIT) !== -1) {
68
+      newContent = newContent.split(IMAGE_SPLIT);
69
+      images = newContent.pop();
70
+      newContent = newContent.join("");
71
+    }
72
+
57
     return (
73
     return (
58
       <div className="comment-item-box">
74
       <div className="comment-item-box">
59
         <div className="comment-item-left">
75
         <div className="comment-item-left">
80
             className="comment-item-content"
96
             className="comment-item-content"
81
             dangerouslySetInnerHTML={{
97
             dangerouslySetInnerHTML={{
82
               __html: renderContent(
98
               __html: renderContent(
83
-                this.renderTextWithReply(content.content, content)
99
+                this.renderTextWithReply(newContent, content)
84
               )
100
               )
85
             }}
101
             }}
86
           />
102
           />
103
+          <div className="comment-item-image">
104
+            {images.split(",").map((item, index) => {
105
+              return (
106
+                <img
107
+                  key={index}
108
+                  src={item}
109
+                  alt={item}
110
+                  style={{ maxWidth: "100%" }}
111
+                />
112
+              );
113
+            })}
114
+          </div>
87
           <div className="comment-item-bottom">
115
           <div className="comment-item-bottom">
88
             {content.reply_count ? (
116
             {content.reply_count ? (
89
               <div>
117
               <div>

+ 3
- 4
src/components/Editor/Upload.js View File

6
   OSS_ENDPOINT,
6
   OSS_ENDPOINT,
7
   OSS_BUCKET,
7
   OSS_BUCKET,
8
   DRIVER_LICENSE_PATH,
8
   DRIVER_LICENSE_PATH,
9
-  ERROR_DEFAULT,
10
-  MAX_UPLOAD_NUMBER
9
+  ERROR_DEFAULT
11
 } from "../../constant";
10
 } from "../../constant";
12
 import Comment from "../../Comment";
11
 import Comment from "../../Comment";
13
 import "./Upload.css";
12
 import "./Upload.css";
97
 
96
 
98
   render() {
97
   render() {
99
     const { previewVisible, previewImage } = this.state;
98
     const { previewVisible, previewImage } = this.state;
100
-    const { fileList } = this.props;
99
+    const { fileList, maxUpload } = this.props;
101
     const uploadButton = (
100
     const uploadButton = (
102
       <div>
101
       <div>
103
         <Icon type="plus" />
102
         <Icon type="plus" />
114
           onPreview={this.handlePreview}
113
           onPreview={this.handlePreview}
115
           onChange={this.handleChange}
114
           onChange={this.handleChange}
116
         >
115
         >
117
-          {fileList.length >= MAX_UPLOAD_NUMBER ? null : uploadButton}
116
+          {fileList.length >= maxUpload ? null : uploadButton}
118
         </Upload>
117
         </Upload>
119
         <Modal
118
         <Modal
120
           visible={previewVisible}
119
           visible={previewVisible}

+ 14
- 6
src/components/Editor/index.js View File

2
 import PropTypes from "prop-types";
2
 import PropTypes from "prop-types";
3
 import { Icon, Button, Popover, Input } from "antd";
3
 import { Icon, Button, Popover, Input } from "antd";
4
 import { OSS_LINK } from "../../constant";
4
 import { OSS_LINK } from "../../constant";
5
-import { MAX_UPLOAD_NUMBER } from "../../constant";
6
 import { isFunction } from "../../helper";
5
 import { isFunction } from "../../helper";
7
 import Upload from "./Upload";
6
 import Upload from "./Upload";
8
 import Emoji from "./Emoji";
7
 import Emoji from "./Emoji";
124
       rows,
123
       rows,
125
       showEmoji,
124
       showEmoji,
126
       showUpload,
125
       showUpload,
126
+      maxUpload,
127
       btnSubmitText,
127
       btnSubmitText,
128
       btnLoading,
128
       btnLoading,
129
       btnDisabled,
129
       btnDisabled,
170
                 overlayStyle={{ zIndex: 999 }}
170
                 overlayStyle={{ zIndex: 999 }}
171
                 content={
171
                 content={
172
                   <div
172
                   <div
173
-                    style={{ width: 112 * MAX_UPLOAD_NUMBER, minHeight: 100 }}
173
+                    style={{
174
+                      width: 112 * maxUpload,
175
+                      minHeight: 100,
176
+                      margin: "0 auto"
177
+                    }}
174
                   >
178
                   >
175
                     <Upload
179
                     <Upload
176
                       onChangeFileList={this.handleChangeFileList}
180
                       onChangeFileList={this.handleChangeFileList}
177
                       onUpload={this.handleUpload}
181
                       onUpload={this.handleUpload}
182
+                      maxUpload={maxUpload}
178
                       fileList={this.state.fileList}
183
                       fileList={this.state.fileList}
179
                     />
184
                     />
180
                   </div>
185
                   </div>
184
                   <div style={{ margin: "5px auto" }}>
189
                   <div style={{ margin: "5px auto" }}>
185
                     <span>
190
                     <span>
186
                       上传图片
191
                       上传图片
187
-                      <span style={{ color: "#666", fontWeight: 400 }}>
188
-                        (您还能上传{MAX_UPLOAD_NUMBER -
189
-                          this.state.fileList.length}张图片)
190
-                      </span>
192
+                      {maxUpload >= 2 ? (
193
+                        <span style={{ color: "#666", fontWeight: 400 }}>
194
+                          (您还能上传{maxUpload - this.state.fileList.length}张图片)
195
+                        </span>
196
+                      ) : null}
191
                     </span>
197
                     </span>
192
                     <Icon
198
                     <Icon
193
                       type="close"
199
                       type="close"
244
   placeholder: PropTypes.string,
250
   placeholder: PropTypes.string,
245
   showEmoji: PropTypes.bool,
251
   showEmoji: PropTypes.bool,
246
   showUpload: PropTypes.bool,
252
   showUpload: PropTypes.bool,
253
+  maxUpload: PropTypes.number,
247
   value: PropTypes.string,
254
   value: PropTypes.string,
248
   onChange: PropTypes.func,
255
   onChange: PropTypes.func,
249
   onSubmit: PropTypes.func,
256
   onSubmit: PropTypes.func,
260
   placeholder: "说点什么吧...",
267
   placeholder: "说点什么吧...",
261
   showEmoji: true,
268
   showEmoji: true,
262
   showUpload: true,
269
   showUpload: true,
270
+  maxUpload: 1,
263
   btnSubmitText: "发表",
271
   btnSubmitText: "发表",
264
   btnLoading: false,
272
   btnLoading: false,
265
   btnDisabled: false
273
   btnDisabled: false

+ 2
- 0
src/constant.js View File

13
 export const REGEXP = /\[.+?\]/g;
13
 export const REGEXP = /\[.+?\]/g;
14
 
14
 
15
 export const AVATAR = "";
15
 export const AVATAR = "";
16
+
17
+export const IMAGE_SPLIT = "IMAGE_SPLIT";

+ 17
- 7
src/helper.js View File

1
-import { REGEXP } from "./constant";
1
+import { REGEXP, IMAGE_SPLIT } from "./constant";
2
 import emoji, { prefixUrl, ext } from "./emoji";
2
 import emoji, { prefixUrl, ext } from "./emoji";
3
 
3
 
4
+const emojiObejct = arrayToObject(emoji, "title");
5
+
4
 export function isFunction(functionToCheck) {
6
 export function isFunction(functionToCheck) {
5
   return (
7
   return (
6
     functionToCheck && {}.toString.call(functionToCheck) === "[object Function]"
8
     functionToCheck && {}.toString.call(functionToCheck) === "[object Function]"
33
  */
35
  */
34
 export function htmlEncode(str) {
36
 export function htmlEncode(str) {
35
   if (!str) return "";
37
   if (!str) return "";
36
-  // /[\u00A0-\u9999<>\&]/gim  // 中文和 HTML 字符
37
-  return str.replace(/[<>\&]/gim, function(i) {
38
+  return str.replace(/<\/?(?!a)\w*\b[^>]*>/gim, function(i) {
38
     return "&#" + i.charCodeAt(0) + ";";
39
     return "&#" + i.charCodeAt(0) + ";";
39
   });
40
   });
40
 }
41
 }
45
  * @param {strig} content
46
  * @param {strig} content
46
  */
47
  */
47
 export function renderContent(content, onClick) {
48
 export function renderContent(content, onClick) {
48
-  return htmlEncode(content).replace(REGEXP, function(a, b) {
49
+  let newContent = content;
50
+  if (newContent.indexOf(IMAGE_SPLIT) !== -1) {
51
+    newContent = newContent.split(IMAGE_SPLIT);
52
+    newContent.pop();
53
+    newContent = newContent.join("");
54
+  }
55
+
56
+  return htmlEncode(newContent).replace(REGEXP, function(a, b) {
49
     const src = a.slice(1, -1);
57
     const src = a.slice(1, -1);
58
+
59
+    // 兼容旧的评
60
+    // 因为旧的评论用 [img url] 方式存储的
50
     if (isUrl(src)) {
61
     if (isUrl(src)) {
51
-      return `<img src="${src}" alt="${src}" style="max-width: 300px" />`;
62
+      return `<br/><img src="${src}" alt="${src}" style="max-width: 100%" />`;
52
     }
63
     }
53
-    const emojiObejct = arrayToObject(emoji, "title");
54
-    const value = emojiObejct[src].value;
64
+    const value = emojiObejct[src] ? emojiObejct[src].value : src;
55
     return `<img src="${prefixUrl}${value}.${ext}" alt="${value}" />`;
65
     return `<img src="${prefixUrl}${value}.${ext}" alt="${value}" />`;
56
   });
66
   });
57
 }
67
 }

+ 1
- 1
src/index.js View File

34
     // 最简单的用法
34
     // 最简单的用法
35
     return (
35
     return (
36
       <App type={1} businessId="test">
36
       <App type={1} businessId="test">
37
-        <Editor />
37
+        <Editor maxUpload={4} />
38
       </App>
38
       </App>
39
     );
39
     );
40
 
40