@selfcommunity/react-ui 0.7.0-alpha.323 → 0.7.0-alpha.324
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/components/CommentObject/CommentObject.js +8 -4
- package/lib/cjs/components/CommentsObject/CommentsObject.d.ts +1 -1
- package/lib/cjs/components/CommentsObject/CommentsObject.js +4 -4
- package/lib/cjs/components/Feed/Feed.js +1 -1
- package/lib/cjs/components/FeedObject/Activities/Activities.js +1 -1
- package/lib/cjs/components/FeedObject/FeedObject.js +6 -3
- package/lib/esm/components/CommentObject/CommentObject.js +8 -4
- package/lib/esm/components/CommentsObject/CommentsObject.d.ts +1 -1
- package/lib/esm/components/CommentsObject/CommentsObject.js +4 -4
- package/lib/esm/components/Feed/Feed.js +1 -1
- package/lib/esm/components/FeedObject/Activities/Activities.js +1 -1
- package/lib/esm/components/FeedObject/FeedObject.js +6 -3
- package/lib/umd/react-ui.js +1 -1
- package/package.json +2 -2
|
@@ -192,7 +192,10 @@ function CommentObject(inProps) {
|
|
|
192
192
|
setIsReplying(true);
|
|
193
193
|
performReply(comment)
|
|
194
194
|
.then((data) => {
|
|
195
|
-
|
|
195
|
+
// if add a comment -> the comment must be untruncated
|
|
196
|
+
const _data = data;
|
|
197
|
+
_data.summary_truncated = false;
|
|
198
|
+
updateObject(Object.assign(Object.assign({}, obj), { comment_count: obj.comment_count + 1, latest_comments: [...obj.latest_comments, _data] }));
|
|
196
199
|
setReplyComment(null);
|
|
197
200
|
setIsReplying(false);
|
|
198
201
|
})
|
|
@@ -329,8 +332,8 @@ function CommentObject(inProps) {
|
|
|
329
332
|
// or the comment author is the logged user
|
|
330
333
|
return null;
|
|
331
334
|
}
|
|
332
|
-
const
|
|
333
|
-
const
|
|
335
|
+
const summaryHtmlTruncated = 'summary_truncated' in comment ? comment.summary_truncated : false;
|
|
336
|
+
const commentHtml = 'summary_html' in comment && truncateContent && summaryHtmlTruncated ? comment.summary_html : comment.html;
|
|
334
337
|
const summaryHtml = (0, contribution_1.getContributionHtml)(commentHtml, scRoutingContext.url);
|
|
335
338
|
return (react_1.default.createElement(react_1.default.Fragment, { key: comment.id },
|
|
336
339
|
editComment && editComment.id === comment.id ? (react_1.default.createElement(material_1.Box, { className: classes.comment },
|
|
@@ -362,7 +365,8 @@ function CommentObject(inProps) {
|
|
|
362
365
|
* @param comment
|
|
363
366
|
*/
|
|
364
367
|
function renderLatestComment(comment) {
|
|
365
|
-
return (react_1.default.createElement(CommentsObject_1.default, { feedObject: commentsObject.feedObject, feedObjectType: commentsObject.feedObject ? commentsObject.feedObject.type : feedObjectType, hideAdvertising: true, comments: [].concat(commentsObject.comments).reverse(), endComments: comment.latest_comments, previous: comment.comment_count > comment.latest_comments.length ? commentsObject.next : null, isLoadingPrevious: commentsObject.isLoadingNext, handlePrevious: commentsObject.getNextPage, CommentComponentProps: Object.assign(Object.assign({ onOpenReply: reply, CommentObjectSkeletonProps, elevation: elevation, linkableCommentDateTime: linkableCommentDateTime }, rest), { cacheStrategy
|
|
368
|
+
return (react_1.default.createElement(CommentsObject_1.default, { feedObject: commentsObject.feedObject, feedObjectType: commentsObject.feedObject ? commentsObject.feedObject.type : feedObjectType, hideAdvertising: true, comments: [].concat(commentsObject.comments).reverse(), endComments: comment.latest_comments, previous: comment.comment_count > comment.latest_comments.length ? commentsObject.next : null, isLoadingPrevious: commentsObject.isLoadingNext, handlePrevious: commentsObject.getNextPage, CommentComponentProps: Object.assign(Object.assign({ onOpenReply: reply, CommentObjectSkeletonProps, elevation: elevation, linkableCommentDateTime: linkableCommentDateTime }, rest), { cacheStrategy,
|
|
369
|
+
truncateContent }), CommentsObjectSkeletonProps: { count: 1, CommentObjectSkeletonProps: CommentObjectSkeletonProps }, cacheStrategy: cacheStrategy, inPlaceLoadMoreContents: true }));
|
|
366
370
|
}
|
|
367
371
|
/**
|
|
368
372
|
* Render comments
|
|
@@ -199,9 +199,9 @@ function CommentsObject(inProps) {
|
|
|
199
199
|
/**
|
|
200
200
|
* Render comments and load others with load more button
|
|
201
201
|
*/
|
|
202
|
-
function renderComments(comments
|
|
202
|
+
function renderComments(comments) {
|
|
203
203
|
return (react_1.default.createElement(react_1.default.Fragment, null, comments.map((comment, index) => (react_1.default.createElement(react_1.default.Fragment, { key: index },
|
|
204
|
-
react_1.default.createElement(CommentComponent, Object.assign({ key: comment.id, commentObject: comment, onOpenReply: openReplyBox, feedObject: obj }, CommentComponentProps, { CommentObjectSkeletonProps: CommentObjectSkeletonProps }
|
|
204
|
+
react_1.default.createElement(CommentComponent, Object.assign({ key: comment.id, commentObject: comment, onOpenReply: openReplyBox, feedObject: obj }, CommentComponentProps, { CommentObjectSkeletonProps: CommentObjectSkeletonProps })),
|
|
205
205
|
advPosition === index && renderAdvertising())))));
|
|
206
206
|
}
|
|
207
207
|
/**
|
|
@@ -233,8 +233,8 @@ function CommentsObject(inProps) {
|
|
|
233
233
|
* Renders root object
|
|
234
234
|
*/
|
|
235
235
|
return (react_1.default.createElement(Root, Object.assign({ id: id, className: (0, classnames_1.default)(classes.root, className) }, rest),
|
|
236
|
-
renderComments(getFilteredComments(startComments)
|
|
236
|
+
renderComments(getFilteredComments(startComments)),
|
|
237
237
|
commentsRendered,
|
|
238
|
-
renderComments(getFilteredComments(endComments)
|
|
238
|
+
renderComments(getFilteredComments(endComments))));
|
|
239
239
|
}
|
|
240
240
|
exports.default = CommentsObject;
|
|
@@ -415,7 +415,7 @@ const Feed = (inProps, ref) => {
|
|
|
415
415
|
react_1.default.createElement(CustomAdv_1.default, Object.assign({ position: types_1.SCCustomAdvPosition.POSITION_BELOW_TOPBAR }, CustomAdvProps)))) : null,
|
|
416
416
|
react_1.default.createElement(material_1.Grid, { item: true, xs: 12, md: 7 },
|
|
417
417
|
react_1.default.createElement("div", { style: { overflow: 'visible' } },
|
|
418
|
-
react_1.default.createElement(InfiniteScroll_1.default, { className: classes.left, dataLength: feedDataLeft.length, next: getNextPage, previous: getPreviousPage, hasMoreNext: Boolean(feedDataObject.next), hasMorePrevious: Boolean(feedDataObject.previous), header: PreviousPageLink, footer: NextPageLink, loaderNext: react_1.default.createElement(ItemSkeleton, Object.assign({}, ItemSkeletonProps)), loaderPrevious: react_1.default.createElement(ItemSkeleton, Object.assign({}, ItemSkeletonProps)), scrollThreshold:
|
|
418
|
+
react_1.default.createElement(InfiniteScroll_1.default, { className: classes.left, dataLength: feedDataLeft.length, next: getNextPage, previous: getPreviousPage, hasMoreNext: Boolean(feedDataObject.next), hasMorePrevious: Boolean(feedDataObject.previous), header: PreviousPageLink, footer: NextPageLink, loaderNext: react_1.default.createElement(ItemSkeleton, Object.assign({}, ItemSkeletonProps)), loaderPrevious: react_1.default.createElement(ItemSkeleton, Object.assign({}, ItemSkeletonProps)), scrollThreshold: '90%', endMessage: react_1.default.createElement(material_1.Box, { className: classes.end },
|
|
419
419
|
react_1.default.createElement(Widget_1.default, { className: classes.endMessage },
|
|
420
420
|
react_1.default.createElement(material_1.CardContent, null, endMessage)),
|
|
421
421
|
advEnabled && !hideAdvs && enabledCustomAdvPositions.includes(types_1.SCCustomAdvPosition.POSITION_ABOVE_FOOTER_BAR) ? (react_1.default.createElement(CustomAdv_1.default, Object.assign({ position: types_1.SCCustomAdvPosition.POSITION_ABOVE_FOOTER_BAR }, CustomAdvProps))) : null,
|
|
@@ -90,7 +90,7 @@ function Activities(inProps) {
|
|
|
90
90
|
* Render comments of feedObject
|
|
91
91
|
*/
|
|
92
92
|
function renderComments() {
|
|
93
|
-
return (react_1.default.createElement(react_1.default.Fragment, null, (commentsObject.feedObject.comment_count > 0 || comments.length > 0) && (react_1.default.createElement(CommentsObject_1.default, Object.assign({ feedObject: commentsObject.feedObject, comments: commentsObject.comments, startComments: comments, next: commentsObject.next, isLoadingNext: commentsObject.isLoadingNext, handleNext: handleNext, totalLoadedComments: commentsObject.comments.length + comments.length, totalComments: commentsObject.feedObject.comment_count, hideAdvertising: true }, CommentsObjectProps, { cacheStrategy: cacheStrategy, CommentsObjectSkeletonProps: { count: skeletonsCount }, CommentComponentProps: Object.assign(Object.assign(Object.assign({}, CommentComponentProps), { cacheStrategy }), (CommentsObjectProps.CommentComponentProps ? CommentsObjectProps.CommentComponentProps : {})), inPlaceLoadMoreContents: false })))));
|
|
93
|
+
return (react_1.default.createElement(react_1.default.Fragment, null, (commentsObject.feedObject.comment_count > 0 || comments.length > 0) && (react_1.default.createElement(CommentsObject_1.default, Object.assign({ feedObject: commentsObject.feedObject, comments: commentsObject.comments, startComments: comments, next: commentsObject.next, isLoadingNext: commentsObject.isLoadingNext, handleNext: handleNext, totalLoadedComments: commentsObject.comments.length + comments.length, totalComments: commentsObject.feedObject.comment_count, hideAdvertising: true }, CommentsObjectProps, { cacheStrategy: cacheStrategy, CommentsObjectSkeletonProps: { count: skeletonsCount }, CommentComponentProps: Object.assign(Object.assign(Object.assign({ truncateContent: true }, CommentComponentProps), { cacheStrategy }), (CommentsObjectProps.CommentComponentProps ? CommentsObjectProps.CommentComponentProps : {})), inPlaceLoadMoreContents: false })))));
|
|
94
94
|
}
|
|
95
95
|
/**
|
|
96
96
|
* Renders root object
|
|
@@ -348,12 +348,15 @@ function FeedObject(inProps) {
|
|
|
348
348
|
setIsReplying(true);
|
|
349
349
|
performReply(comment)
|
|
350
350
|
.then((data) => {
|
|
351
|
+
// if add a comment -> the comment must be untruncated
|
|
352
|
+
const _data = data;
|
|
353
|
+
_data.summary_truncated = false;
|
|
351
354
|
if (selectedActivities !== feedObject_1.SCFeedObjectActivitiesType.RECENT_COMMENTS) {
|
|
352
355
|
setComments([]);
|
|
353
356
|
setSelectedActivities(feedObject_1.SCFeedObjectActivitiesType.RECENT_COMMENTS);
|
|
354
357
|
}
|
|
355
358
|
else {
|
|
356
|
-
setComments([...[
|
|
359
|
+
setComments([...[_data], ...comments]);
|
|
357
360
|
}
|
|
358
361
|
setIsReplying(false);
|
|
359
362
|
const newObj = Object.assign({}, obj, { comment_count: obj.comment_count + 1 });
|
|
@@ -380,8 +383,8 @@ function FeedObject(inProps) {
|
|
|
380
383
|
* Get contribution summary
|
|
381
384
|
*/
|
|
382
385
|
const getContributionSummary = (0, react_1.useCallback)((obj, template) => {
|
|
383
|
-
const contributionHtml =
|
|
384
|
-
const summaryHtmlTruncated =
|
|
386
|
+
const contributionHtml = 'summary_html' in obj ? obj.summary_html : obj.summary;
|
|
387
|
+
const summaryHtmlTruncated = 'summary_truncated' in obj ? obj.summary_truncated : obj.html.length >= Feed_1.MAX_SUMMARY_LENGTH;
|
|
385
388
|
const summaryHtml = expanded || template === feedObject_1.SCFeedObjectTemplateType.DETAIL
|
|
386
389
|
? (0, contribution_1.getContributionHtml)(obj.html, scRoutingContext.url)
|
|
387
390
|
: (0, contribution_1.getContributionHtml)(contributionHtml, scRoutingContext.url);
|
|
@@ -190,7 +190,10 @@ export default function CommentObject(inProps) {
|
|
|
190
190
|
setIsReplying(true);
|
|
191
191
|
performReply(comment)
|
|
192
192
|
.then((data) => {
|
|
193
|
-
|
|
193
|
+
// if add a comment -> the comment must be untruncated
|
|
194
|
+
const _data = data;
|
|
195
|
+
_data.summary_truncated = false;
|
|
196
|
+
updateObject(Object.assign(Object.assign({}, obj), { comment_count: obj.comment_count + 1, latest_comments: [...obj.latest_comments, _data] }));
|
|
194
197
|
setReplyComment(null);
|
|
195
198
|
setIsReplying(false);
|
|
196
199
|
})
|
|
@@ -327,8 +330,8 @@ export default function CommentObject(inProps) {
|
|
|
327
330
|
// or the comment author is the logged user
|
|
328
331
|
return null;
|
|
329
332
|
}
|
|
330
|
-
const
|
|
331
|
-
const
|
|
333
|
+
const summaryHtmlTruncated = 'summary_truncated' in comment ? comment.summary_truncated : false;
|
|
334
|
+
const commentHtml = 'summary_html' in comment && truncateContent && summaryHtmlTruncated ? comment.summary_html : comment.html;
|
|
332
335
|
const summaryHtml = getContributionHtml(commentHtml, scRoutingContext.url);
|
|
333
336
|
return (React.createElement(React.Fragment, { key: comment.id },
|
|
334
337
|
editComment && editComment.id === comment.id ? (React.createElement(Box, { className: classes.comment },
|
|
@@ -360,7 +363,8 @@ export default function CommentObject(inProps) {
|
|
|
360
363
|
* @param comment
|
|
361
364
|
*/
|
|
362
365
|
function renderLatestComment(comment) {
|
|
363
|
-
return (React.createElement(CommentsObject, { feedObject: commentsObject.feedObject, feedObjectType: commentsObject.feedObject ? commentsObject.feedObject.type : feedObjectType, hideAdvertising: true, comments: [].concat(commentsObject.comments).reverse(), endComments: comment.latest_comments, previous: comment.comment_count > comment.latest_comments.length ? commentsObject.next : null, isLoadingPrevious: commentsObject.isLoadingNext, handlePrevious: commentsObject.getNextPage, CommentComponentProps: Object.assign(Object.assign({ onOpenReply: reply, CommentObjectSkeletonProps, elevation: elevation, linkableCommentDateTime: linkableCommentDateTime }, rest), { cacheStrategy
|
|
366
|
+
return (React.createElement(CommentsObject, { feedObject: commentsObject.feedObject, feedObjectType: commentsObject.feedObject ? commentsObject.feedObject.type : feedObjectType, hideAdvertising: true, comments: [].concat(commentsObject.comments).reverse(), endComments: comment.latest_comments, previous: comment.comment_count > comment.latest_comments.length ? commentsObject.next : null, isLoadingPrevious: commentsObject.isLoadingNext, handlePrevious: commentsObject.getNextPage, CommentComponentProps: Object.assign(Object.assign({ onOpenReply: reply, CommentObjectSkeletonProps, elevation: elevation, linkableCommentDateTime: linkableCommentDateTime }, rest), { cacheStrategy,
|
|
367
|
+
truncateContent }), CommentsObjectSkeletonProps: { count: 1, CommentObjectSkeletonProps: CommentObjectSkeletonProps }, cacheStrategy: cacheStrategy, inPlaceLoadMoreContents: true }));
|
|
364
368
|
}
|
|
365
369
|
/**
|
|
366
370
|
* Render comments
|
|
@@ -197,9 +197,9 @@ export default function CommentsObject(inProps) {
|
|
|
197
197
|
/**
|
|
198
198
|
* Render comments and load others with load more button
|
|
199
199
|
*/
|
|
200
|
-
function renderComments(comments
|
|
200
|
+
function renderComments(comments) {
|
|
201
201
|
return (React.createElement(React.Fragment, null, comments.map((comment, index) => (React.createElement(React.Fragment, { key: index },
|
|
202
|
-
React.createElement(CommentComponent, Object.assign({ key: comment.id, commentObject: comment, onOpenReply: openReplyBox, feedObject: obj }, CommentComponentProps, { CommentObjectSkeletonProps: CommentObjectSkeletonProps }
|
|
202
|
+
React.createElement(CommentComponent, Object.assign({ key: comment.id, commentObject: comment, onOpenReply: openReplyBox, feedObject: obj }, CommentComponentProps, { CommentObjectSkeletonProps: CommentObjectSkeletonProps })),
|
|
203
203
|
advPosition === index && renderAdvertising())))));
|
|
204
204
|
}
|
|
205
205
|
/**
|
|
@@ -231,7 +231,7 @@ export default function CommentsObject(inProps) {
|
|
|
231
231
|
* Renders root object
|
|
232
232
|
*/
|
|
233
233
|
return (React.createElement(Root, Object.assign({ id: id, className: classNames(classes.root, className) }, rest),
|
|
234
|
-
renderComments(getFilteredComments(startComments)
|
|
234
|
+
renderComments(getFilteredComments(startComments)),
|
|
235
235
|
commentsRendered,
|
|
236
|
-
renderComments(getFilteredComments(endComments)
|
|
236
|
+
renderComments(getFilteredComments(endComments))));
|
|
237
237
|
}
|
|
@@ -412,7 +412,7 @@ const Feed = (inProps, ref) => {
|
|
|
412
412
|
React.createElement(CustomAdv, Object.assign({ position: SCCustomAdvPosition.POSITION_BELOW_TOPBAR }, CustomAdvProps)))) : null,
|
|
413
413
|
React.createElement(Grid, { item: true, xs: 12, md: 7 },
|
|
414
414
|
React.createElement("div", { style: { overflow: 'visible' } },
|
|
415
|
-
React.createElement(InfiniteScroll, { className: classes.left, dataLength: feedDataLeft.length, next: getNextPage, previous: getPreviousPage, hasMoreNext: Boolean(feedDataObject.next), hasMorePrevious: Boolean(feedDataObject.previous), header: PreviousPageLink, footer: NextPageLink, loaderNext: React.createElement(ItemSkeleton, Object.assign({}, ItemSkeletonProps)), loaderPrevious: React.createElement(ItemSkeleton, Object.assign({}, ItemSkeletonProps)), scrollThreshold:
|
|
415
|
+
React.createElement(InfiniteScroll, { className: classes.left, dataLength: feedDataLeft.length, next: getNextPage, previous: getPreviousPage, hasMoreNext: Boolean(feedDataObject.next), hasMorePrevious: Boolean(feedDataObject.previous), header: PreviousPageLink, footer: NextPageLink, loaderNext: React.createElement(ItemSkeleton, Object.assign({}, ItemSkeletonProps)), loaderPrevious: React.createElement(ItemSkeleton, Object.assign({}, ItemSkeletonProps)), scrollThreshold: '90%', endMessage: React.createElement(Box, { className: classes.end },
|
|
416
416
|
React.createElement(Widget, { className: classes.endMessage },
|
|
417
417
|
React.createElement(CardContent, null, endMessage)),
|
|
418
418
|
advEnabled && !hideAdvs && enabledCustomAdvPositions.includes(SCCustomAdvPosition.POSITION_ABOVE_FOOTER_BAR) ? (React.createElement(CustomAdv, Object.assign({ position: SCCustomAdvPosition.POSITION_ABOVE_FOOTER_BAR }, CustomAdvProps))) : null,
|
|
@@ -88,7 +88,7 @@ export default function Activities(inProps) {
|
|
|
88
88
|
* Render comments of feedObject
|
|
89
89
|
*/
|
|
90
90
|
function renderComments() {
|
|
91
|
-
return (React.createElement(React.Fragment, null, (commentsObject.feedObject.comment_count > 0 || comments.length > 0) && (React.createElement(CommentsObject, Object.assign({ feedObject: commentsObject.feedObject, comments: commentsObject.comments, startComments: comments, next: commentsObject.next, isLoadingNext: commentsObject.isLoadingNext, handleNext: handleNext, totalLoadedComments: commentsObject.comments.length + comments.length, totalComments: commentsObject.feedObject.comment_count, hideAdvertising: true }, CommentsObjectProps, { cacheStrategy: cacheStrategy, CommentsObjectSkeletonProps: { count: skeletonsCount }, CommentComponentProps: Object.assign(Object.assign(Object.assign({}, CommentComponentProps), { cacheStrategy }), (CommentsObjectProps.CommentComponentProps ? CommentsObjectProps.CommentComponentProps : {})), inPlaceLoadMoreContents: false })))));
|
|
91
|
+
return (React.createElement(React.Fragment, null, (commentsObject.feedObject.comment_count > 0 || comments.length > 0) && (React.createElement(CommentsObject, Object.assign({ feedObject: commentsObject.feedObject, comments: commentsObject.comments, startComments: comments, next: commentsObject.next, isLoadingNext: commentsObject.isLoadingNext, handleNext: handleNext, totalLoadedComments: commentsObject.comments.length + comments.length, totalComments: commentsObject.feedObject.comment_count, hideAdvertising: true }, CommentsObjectProps, { cacheStrategy: cacheStrategy, CommentsObjectSkeletonProps: { count: skeletonsCount }, CommentComponentProps: Object.assign(Object.assign(Object.assign({ truncateContent: true }, CommentComponentProps), { cacheStrategy }), (CommentsObjectProps.CommentComponentProps ? CommentsObjectProps.CommentComponentProps : {})), inPlaceLoadMoreContents: false })))));
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
94
94
|
* Renders root object
|
|
@@ -346,12 +346,15 @@ export default function FeedObject(inProps) {
|
|
|
346
346
|
setIsReplying(true);
|
|
347
347
|
performReply(comment)
|
|
348
348
|
.then((data) => {
|
|
349
|
+
// if add a comment -> the comment must be untruncated
|
|
350
|
+
const _data = data;
|
|
351
|
+
_data.summary_truncated = false;
|
|
349
352
|
if (selectedActivities !== SCFeedObjectActivitiesType.RECENT_COMMENTS) {
|
|
350
353
|
setComments([]);
|
|
351
354
|
setSelectedActivities(SCFeedObjectActivitiesType.RECENT_COMMENTS);
|
|
352
355
|
}
|
|
353
356
|
else {
|
|
354
|
-
setComments([...[
|
|
357
|
+
setComments([...[_data], ...comments]);
|
|
355
358
|
}
|
|
356
359
|
setIsReplying(false);
|
|
357
360
|
const newObj = Object.assign({}, obj, { comment_count: obj.comment_count + 1 });
|
|
@@ -378,8 +381,8 @@ export default function FeedObject(inProps) {
|
|
|
378
381
|
* Get contribution summary
|
|
379
382
|
*/
|
|
380
383
|
const getContributionSummary = useCallback((obj, template) => {
|
|
381
|
-
const contributionHtml =
|
|
382
|
-
const summaryHtmlTruncated =
|
|
384
|
+
const contributionHtml = 'summary_html' in obj ? obj.summary_html : obj.summary;
|
|
385
|
+
const summaryHtmlTruncated = 'summary_truncated' in obj ? obj.summary_truncated : obj.html.length >= MAX_SUMMARY_LENGTH;
|
|
383
386
|
const summaryHtml = expanded || template === SCFeedObjectTemplateType.DETAIL
|
|
384
387
|
? getContributionHtml(obj.html, scRoutingContext.url)
|
|
385
388
|
: getContributionHtml(contributionHtml, scRoutingContext.url);
|