touchstudy-core 0.1.192 → 0.1.193
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/dist/components/Chats/components/CanvasOverlay.d.ts +11 -0
- package/dist/components/Chats/components/InputChat.d.ts +1 -2
- package/dist/components/Chats/components/SketchDialog/CanvasOverlay.d.ts +11 -0
- package/dist/components/Chats/components/SketchDialog/ColorPicker.d.ts +7 -0
- package/dist/components/Chats/components/SketchDialog/index.d.ts +7 -0
- package/dist/components/Chats/components/SketchDialog.d.ts +7 -0
- package/dist/components/Chats/hooks/useChatContainer.d.ts +1 -1
- package/dist/components/List/hooks/useVirtualListView.d.ts +2 -1
- package/dist/index.js +114 -68
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +116 -70
- package/dist/index.modern.js.map +1 -1
- package/dist/utils/hooks/useVirtualList.d.ts +2 -0
- package/package.json +1 -1
@@ -1,12 +1,11 @@
|
|
1
1
|
import { FC } from "react";
|
2
|
-
import { MessageRequest } from "../configs/types";
|
3
2
|
export interface IInputChatProps {
|
4
3
|
text: string;
|
5
4
|
onSubmit: () => void;
|
6
5
|
onChangeInput: (text: string) => void;
|
7
6
|
isCompleted?: boolean;
|
8
7
|
handleUploadImage: (file: File) => void;
|
9
|
-
selectedFile?:
|
8
|
+
selectedFile?: string | null;
|
10
9
|
handleDeleteSelectedImage: () => void;
|
11
10
|
}
|
12
11
|
interface Props extends IInputChatProps {
|
@@ -29,7 +29,7 @@ declare const useChatContainer: (props: Props) => {
|
|
29
29
|
handleDeleteMessage: (conversationId: number, id: number, callback: any) => Promise<void>;
|
30
30
|
};
|
31
31
|
inputProps: {
|
32
|
-
selectedFile:
|
32
|
+
selectedFile: string | null;
|
33
33
|
text: string;
|
34
34
|
onChangeInput: (text: string) => void;
|
35
35
|
onSubmit: () => Promise<void>;
|
@@ -1,7 +1,8 @@
|
|
1
1
|
import { ScrollParams } from "react-virtualized";
|
2
2
|
import { VirtualListViewProps } from "../configs/interfaces";
|
3
|
+
import _ from "lodash";
|
3
4
|
declare const useVirtualListView: (props: VirtualListViewProps<any>) => {
|
4
5
|
rowCount: number;
|
5
|
-
onScroll: ({ scrollTop, clientHeight, scrollHeight }: ScrollParams) => void
|
6
|
+
onScroll: _.DebouncedFunc<({ scrollTop, clientHeight, scrollHeight }: ScrollParams) => void>;
|
6
7
|
};
|
7
8
|
export default useVirtualListView;
|
package/dist/index.js
CHANGED
@@ -1576,6 +1576,7 @@ var recent_class_exams = "최근 수업 시험";
|
|
1576
1576
|
var there_are_no_problems_you_were_working_on = "풀던 문제가 없습니다.";
|
1577
1577
|
var incomplete_exam = "미참가";
|
1578
1578
|
var completed_exam = "참가";
|
1579
|
+
var failed_to_send_the_image_error = "이미지를 보내지 못했습니다: {{ message }}";
|
1579
1580
|
var lang_ko = {
|
1580
1581
|
problem_solving: problem_solving,
|
1581
1582
|
my_story: my_story,
|
@@ -2783,7 +2784,8 @@ var lang_ko = {
|
|
2783
2784
|
recent_class_exams: recent_class_exams,
|
2784
2785
|
there_are_no_problems_you_were_working_on: there_are_no_problems_you_were_working_on,
|
2785
2786
|
incomplete_exam: incomplete_exam,
|
2786
|
-
completed_exam: completed_exam
|
2787
|
+
completed_exam: completed_exam,
|
2788
|
+
failed_to_send_the_image_error: failed_to_send_the_image_error
|
2787
2789
|
};
|
2788
2790
|
|
2789
2791
|
var problem_solving$1 = "Problem Solving";
|
@@ -4018,6 +4020,7 @@ var recent_class_exams$1 = "Recent Class Exams";
|
|
4018
4020
|
var there_are_no_problems_you_were_working_on$1 = "There are no problems you were working on";
|
4019
4021
|
var incomplete_exam$1 = "Incomplete";
|
4020
4022
|
var completed_exam$1 = "Completed";
|
4023
|
+
var failed_to_send_the_image_error$1 = "Failed to send the image: {{ message }}";
|
4021
4024
|
var lang_en = {
|
4022
4025
|
problem_solving: problem_solving$1,
|
4023
4026
|
my_story: my_story$1,
|
@@ -5227,7 +5230,8 @@ var lang_en = {
|
|
5227
5230
|
recent_class_exams: recent_class_exams$1,
|
5228
5231
|
there_are_no_problems_you_were_working_on: there_are_no_problems_you_were_working_on$1,
|
5229
5232
|
incomplete_exam: incomplete_exam$1,
|
5230
|
-
completed_exam: completed_exam$1
|
5233
|
+
completed_exam: completed_exam$1,
|
5234
|
+
failed_to_send_the_image_error: failed_to_send_the_image_error$1
|
5231
5235
|
};
|
5232
5236
|
|
5233
5237
|
i18n__default.use(reactI18next.initReactI18next).init({
|
@@ -7345,15 +7349,18 @@ var useVirtualList = function useVirtualList(defaultFilter, getItemsApi) {
|
|
7345
7349
|
var _useState2 = React.useState(0),
|
7346
7350
|
totalPages = _useState2[0],
|
7347
7351
|
setTotalPages = _useState2[1];
|
7348
|
-
var _useState3 = React.useState(),
|
7349
|
-
|
7350
|
-
|
7351
|
-
var _useState4 = React.useState(
|
7352
|
-
|
7353
|
-
|
7354
|
-
var _useState5 = React.useState(),
|
7355
|
-
|
7356
|
-
|
7352
|
+
var _useState3 = React.useState(0),
|
7353
|
+
totalItems = _useState3[0],
|
7354
|
+
setTotalItems = _useState3[1];
|
7355
|
+
var _useState4 = React.useState(),
|
7356
|
+
selectedItem = _useState4[0],
|
7357
|
+
setSelectedItem = _useState4[1];
|
7358
|
+
var _useState5 = React.useState(false),
|
7359
|
+
isLoading = _useState5[0],
|
7360
|
+
setLoading = _useState5[1];
|
7361
|
+
var _useState6 = React.useState(),
|
7362
|
+
filter = _useState6[0],
|
7363
|
+
setFilter = _useState6[1];
|
7357
7364
|
var handleChangeSelectedItem = function handleChangeSelectedItem(data) {
|
7358
7365
|
setSelectedItem(data);
|
7359
7366
|
};
|
@@ -7372,6 +7379,7 @@ var useVirtualList = function useVirtualList(defaultFilter, getItemsApi) {
|
|
7372
7379
|
return Promise.resolve(getItemsApi(filter)).then(function (res) {
|
7373
7380
|
var responseData = res.data;
|
7374
7381
|
setTotalPages((responseData === null || responseData === void 0 ? void 0 : responseData.totalPages) || 0);
|
7382
|
+
setTotalItems((responseData === null || responseData === void 0 ? void 0 : responseData.totalItems) || 0);
|
7375
7383
|
var responseItems = (responseData === null || responseData === void 0 ? void 0 : responseData.items) || [];
|
7376
7384
|
var results = responseItems;
|
7377
7385
|
if (filter !== null && filter !== void 0 && filter.currentPage && filter.currentPage > 1) {
|
@@ -7388,16 +7396,13 @@ var useVirtualList = function useVirtualList(defaultFilter, getItemsApi) {
|
|
7388
7396
|
}
|
7389
7397
|
};
|
7390
7398
|
var handleLoadMore = React.useCallback(function () {
|
7391
|
-
if (
|
7392
|
-
return;
|
7393
|
-
}
|
7399
|
+
if (isLoading) return;
|
7394
7400
|
setFilter(function (state) {
|
7395
|
-
|
7396
|
-
|
7397
|
-
currentPage: ((_filter$currentPage = filter.currentPage) != null ? _filter$currentPage : 0) + 1
|
7401
|
+
return !state || state.currentPage === undefined || state.currentPage >= totalPages ? state : _extends({}, state, {
|
7402
|
+
currentPage: state.currentPage + 1
|
7398
7403
|
});
|
7399
7404
|
});
|
7400
|
-
}, [
|
7405
|
+
}, [totalPages, isLoading]);
|
7401
7406
|
var handleItemAdded = function handleItemAdded(item) {
|
7402
7407
|
var results = [].concat(_$a.uniqBy([item].concat(items), "id"));
|
7403
7408
|
setItems(results);
|
@@ -7414,7 +7419,13 @@ var useVirtualList = function useVirtualList(defaultFilter, getItemsApi) {
|
|
7414
7419
|
var handleChangeFilter = function handleChangeFilter(newFilter) {
|
7415
7420
|
setFilter(newFilter);
|
7416
7421
|
};
|
7422
|
+
var resetData = function resetData() {
|
7423
|
+
setTotalPages(0);
|
7424
|
+
setTotalItems(0);
|
7425
|
+
setItems([]);
|
7426
|
+
};
|
7417
7427
|
React.useEffect(function () {
|
7428
|
+
resetData();
|
7418
7429
|
setFilter(function (state) {
|
7419
7430
|
if (JSON.stringify(state) == JSON.stringify(defaultFilter)) getItems();
|
7420
7431
|
return defaultFilter;
|
@@ -7429,6 +7440,8 @@ var useVirtualList = function useVirtualList(defaultFilter, getItemsApi) {
|
|
7429
7440
|
selectedItem: selectedItem,
|
7430
7441
|
items: items,
|
7431
7442
|
isLoading: isLoading,
|
7443
|
+
totalItems: totalItems,
|
7444
|
+
resetData: resetData,
|
7432
7445
|
handleChangeFilter: handleChangeFilter,
|
7433
7446
|
setItems: setItems,
|
7434
7447
|
handleChangeSelectedItem: handleChangeSelectedItem,
|
@@ -9630,24 +9643,27 @@ var InputChat = function InputChat(_ref) {
|
|
9630
9643
|
width: "fit-content"
|
9631
9644
|
}
|
9632
9645
|
}, React__default.createElement("img", {
|
9633
|
-
src: selectedFile
|
9646
|
+
src: selectedFile,
|
9634
9647
|
style: {
|
9635
9648
|
height: "100px",
|
9636
9649
|
objectFit: "contain",
|
9637
9650
|
objectPosition: "center"
|
9638
9651
|
}
|
9639
|
-
}), React__default.createElement(
|
9652
|
+
}), React__default.createElement(material.IconButton, {
|
9653
|
+
size: "small",
|
9654
|
+
color: "error",
|
9640
9655
|
style: {
|
9641
9656
|
position: "absolute",
|
9642
9657
|
right: 0,
|
9643
9658
|
top: 0,
|
9644
|
-
|
9659
|
+
padding: "8px",
|
9660
|
+
cursor: "pointer",
|
9661
|
+
background: grey[100]
|
9645
9662
|
},
|
9646
9663
|
onClick: handleDeleteSelectedImage
|
9647
|
-
}, React__default.createElement(
|
9648
|
-
|
9649
|
-
|
9650
|
-
}))), React__default.createElement(TinyChatEditor, {
|
9664
|
+
}, React__default.createElement(fa.FaTrash, {
|
9665
|
+
size: 16
|
9666
|
+
}))), !selectedFile && React__default.createElement(TinyChatEditor, {
|
9651
9667
|
initValue: text,
|
9652
9668
|
onChange: onChangeInput,
|
9653
9669
|
disabled: isCompleted
|
@@ -10348,14 +10364,17 @@ var useChatContainer = function useChatContainer(props) {
|
|
10348
10364
|
selectedConversation = _useState[0],
|
10349
10365
|
setSelectedConversation = _useState[1];
|
10350
10366
|
var _useState2 = React.useState(),
|
10351
|
-
|
10352
|
-
|
10353
|
-
var _useState3 = React.useState(),
|
10354
|
-
|
10355
|
-
|
10356
|
-
var _useState4 = React.useState(
|
10357
|
-
|
10358
|
-
|
10367
|
+
file = _useState2[0],
|
10368
|
+
setFile = _useState2[1];
|
10369
|
+
var _useState3 = React.useState(null),
|
10370
|
+
backgroundImage = _useState3[0],
|
10371
|
+
setBackgroundImage = _useState3[1];
|
10372
|
+
var _useState4 = React.useState(),
|
10373
|
+
message = _useState4[0],
|
10374
|
+
setMessage = _useState4[1];
|
10375
|
+
var _useState5 = React.useState(true),
|
10376
|
+
isScrollToEnd = _useState5[0],
|
10377
|
+
setScrollToEnd = _useState5[1];
|
10359
10378
|
var isAdmin = roles === null || roles === void 0 ? void 0 : roles.includes(exports.Role.Admin);
|
10360
10379
|
var _useMessageList = useMessageList({
|
10361
10380
|
student: student
|
@@ -10378,34 +10397,39 @@ var useChatContainer = function useChatContainer(props) {
|
|
10378
10397
|
};
|
10379
10398
|
var handleAddMessage = function handleAddMessage() {
|
10380
10399
|
try {
|
10381
|
-
var
|
10400
|
+
var _temp3 = function _temp3(_result2) {
|
10401
|
+
if (_exit) return _result2;
|
10382
10402
|
loadingRef.current = false;
|
10383
10403
|
};
|
10404
|
+
var _exit = false;
|
10384
10405
|
if (loadingRef.current) return Promise.resolve();
|
10385
10406
|
loadingRef.current = true;
|
10386
10407
|
if (!(selectedConversation !== null && selectedConversation !== void 0 && selectedConversation.id)) return Promise.resolve();
|
10387
10408
|
setScrollToEnd(true);
|
10388
|
-
var
|
10389
|
-
|
10390
|
-
function
|
10391
|
-
|
10392
|
-
|
10393
|
-
|
10394
|
-
|
10409
|
+
var _temp2 = _catch(function () {
|
10410
|
+
if (file) {
|
10411
|
+
return Promise.resolve(handleUploadImageData(file)).then(function (selectedFile) {
|
10412
|
+
if (!selectedFile) {
|
10413
|
+
_exit = true;
|
10414
|
+
return;
|
10415
|
+
}
|
10416
|
+
return Promise.resolve(apiAddMessage(selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id, _extends({}, selectedFile, {
|
10417
|
+
contentType: 1
|
10418
|
+
}))).then(function () {
|
10419
|
+
setFile(undefined);
|
10420
|
+
setBackgroundImage(null);
|
10421
|
+
});
|
10422
|
+
});
|
10423
|
+
} else {
|
10424
|
+
var _temp4 = function (_message$content) {
|
10395
10425
|
if (message !== null && message !== void 0 && (_message$content = message.content) !== null && _message$content !== void 0 && _message$content.trim().length) {
|
10396
|
-
return Promise.resolve(apiAddMessage(selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id, _extends({}, message))).then(function () {
|
10426
|
+
return Promise.resolve(apiAddMessage(selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id, _extends({}, message))).then(function () {
|
10427
|
+
handleChangeInput('');
|
10428
|
+
});
|
10397
10429
|
}
|
10398
10430
|
}();
|
10399
|
-
|
10431
|
+
if (_temp4 && _temp4.then) return _temp4.then(function () {});
|
10400
10432
|
}
|
10401
|
-
var _temp3 = function () {
|
10402
|
-
if (selectedFile !== null && selectedFile !== void 0 && selectedFile.content) {
|
10403
|
-
return Promise.resolve(apiAddMessage(selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id, _extends({}, selectedFile, {
|
10404
|
-
contentType: 1
|
10405
|
-
}))).then(function () {});
|
10406
|
-
}
|
10407
|
-
}();
|
10408
|
-
return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
|
10409
10433
|
}, function (error) {
|
10410
10434
|
setMessages(function (state) {
|
10411
10435
|
return [].concat(state.filter(function (i) {
|
@@ -10414,31 +10438,51 @@ var useChatContainer = function useChatContainer(props) {
|
|
10414
10438
|
});
|
10415
10439
|
reactToastify.toast.error(getErrorMessage(t, error));
|
10416
10440
|
});
|
10417
|
-
return Promise.resolve(
|
10441
|
+
return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(_temp3) : _temp3(_temp2));
|
10418
10442
|
} catch (e) {
|
10419
10443
|
return Promise.reject(e);
|
10420
10444
|
}
|
10421
10445
|
};
|
10422
10446
|
var handleUploadImage = function handleUploadImage(file) {
|
10423
|
-
|
10424
|
-
|
10447
|
+
try {
|
10448
|
+
if (file) {
|
10449
|
+
setFile(file);
|
10450
|
+
var reader = new FileReader();
|
10451
|
+
reader.onload = function () {
|
10452
|
+
setBackgroundImage(reader.result);
|
10453
|
+
};
|
10454
|
+
reader.readAsDataURL(file);
|
10455
|
+
}
|
10456
|
+
return Promise.resolve();
|
10457
|
+
} catch (e) {
|
10458
|
+
return Promise.reject(e);
|
10459
|
+
}
|
10460
|
+
};
|
10461
|
+
var handleUploadImageData = function handleUploadImageData(file) {
|
10462
|
+
try {
|
10463
|
+
return Promise.resolve(_catch(function () {
|
10425
10464
|
var formData = new FormData();
|
10426
10465
|
formData.append("upload", file);
|
10427
10466
|
return Promise.resolve(apiUploadImageFile(formData)).then(function (res) {
|
10428
10467
|
var _res$data;
|
10429
|
-
|
10468
|
+
return {
|
10430
10469
|
content: res === null || res === void 0 ? void 0 : (_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.url
|
10431
|
-
}
|
10470
|
+
};
|
10432
10471
|
});
|
10433
10472
|
}, function (error) {
|
10473
|
+
reactToastify.toast.error(t("failed_to_send_the_image_error", {
|
10474
|
+
message: getErrorMessage(t, error)
|
10475
|
+
}));
|
10434
10476
|
setMessages(function (state) {
|
10435
10477
|
return [].concat(state.filter(function (i) {
|
10436
10478
|
return (i === null || i === void 0 ? void 0 : i.id) !== 0;
|
10437
10479
|
}));
|
10438
10480
|
});
|
10439
|
-
|
10440
|
-
});
|
10441
|
-
}
|
10481
|
+
return null;
|
10482
|
+
}));
|
10483
|
+
} catch (e) {
|
10484
|
+
return Promise.reject(e);
|
10485
|
+
}
|
10442
10486
|
};
|
10443
10487
|
var handleChangeInput = function handleChangeInput(text) {
|
10444
10488
|
setMessage({
|
@@ -10447,7 +10491,7 @@ var useChatContainer = function useChatContainer(props) {
|
|
10447
10491
|
};
|
10448
10492
|
var handleNewMessageSent = function handleNewMessageSent(data) {
|
10449
10493
|
try {
|
10450
|
-
var
|
10494
|
+
var _temp5 = function _temp5(_updateLastTimeReadCo) {
|
10451
10495
|
_updateLastTimeReadCo;
|
10452
10496
|
};
|
10453
10497
|
if (!data) return Promise.resolve();
|
@@ -10456,14 +10500,14 @@ var useChatContainer = function useChatContainer(props) {
|
|
10456
10500
|
return [].concat(state, [data]);
|
10457
10501
|
});
|
10458
10502
|
var _selectedConversation = selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id;
|
10459
|
-
return Promise.resolve(_selectedConversation ? Promise.resolve(updateLastTimeReadConversation(selectedConversation.id)).then(
|
10503
|
+
return Promise.resolve(_selectedConversation ? Promise.resolve(updateLastTimeReadConversation(selectedConversation.id)).then(_temp5) : _temp5(_selectedConversation));
|
10460
10504
|
} catch (e) {
|
10461
10505
|
return Promise.reject(e);
|
10462
10506
|
}
|
10463
10507
|
};
|
10464
10508
|
var handleNewConversation = function handleNewConversation(data) {
|
10465
10509
|
try {
|
10466
|
-
var
|
10510
|
+
var _temp6 = function _temp6(_updateLastTimeReadCo2) {
|
10467
10511
|
_updateLastTimeReadCo2;
|
10468
10512
|
};
|
10469
10513
|
if (!data) return Promise.resolve();
|
@@ -10473,7 +10517,7 @@ var useChatContainer = function useChatContainer(props) {
|
|
10473
10517
|
return [].concat(state, [item]);
|
10474
10518
|
});
|
10475
10519
|
var _selectedConversation2 = selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id;
|
10476
|
-
return Promise.resolve(_selectedConversation2 ? Promise.resolve(updateLastTimeReadConversation(selectedConversation.id)).then(
|
10520
|
+
return Promise.resolve(_selectedConversation2 ? Promise.resolve(updateLastTimeReadConversation(selectedConversation.id)).then(_temp6) : _temp6(_selectedConversation2));
|
10477
10521
|
} catch (e) {
|
10478
10522
|
return Promise.reject(e);
|
10479
10523
|
}
|
@@ -10492,7 +10536,8 @@ var useChatContainer = function useChatContainer(props) {
|
|
10492
10536
|
}
|
10493
10537
|
};
|
10494
10538
|
var handleDeleteSelectedImage = function handleDeleteSelectedImage() {
|
10495
|
-
|
10539
|
+
setFile(undefined);
|
10540
|
+
setBackgroundImage(null);
|
10496
10541
|
};
|
10497
10542
|
var cleanupPusher = function cleanupPusher() {
|
10498
10543
|
pusher === null || pusher === void 0 ? void 0 : pusher.unbind("new-message-event", handleNewMessageSent);
|
@@ -10578,7 +10623,7 @@ var useChatContainer = function useChatContainer(props) {
|
|
10578
10623
|
handleDeleteMessage: handleDeleteMessage
|
10579
10624
|
},
|
10580
10625
|
inputProps: {
|
10581
|
-
selectedFile:
|
10626
|
+
selectedFile: backgroundImage,
|
10582
10627
|
text: (message === null || message === void 0 ? void 0 : message.content) || "",
|
10583
10628
|
onChangeInput: handleChangeInput,
|
10584
10629
|
onSubmit: handleAddMessage,
|
@@ -10661,10 +10706,11 @@ var useVirtualListView = function useVirtualListView(props) {
|
|
10661
10706
|
handleLoadMore();
|
10662
10707
|
}
|
10663
10708
|
};
|
10709
|
+
var decounceScroll = _$a.debounce(onScroll, 300);
|
10664
10710
|
var rowCount = data.length + (loading ? 1 : 0);
|
10665
10711
|
return {
|
10666
10712
|
rowCount: rowCount,
|
10667
|
-
onScroll:
|
10713
|
+
onScroll: decounceScroll
|
10668
10714
|
};
|
10669
10715
|
};
|
10670
10716
|
|
@@ -16070,7 +16116,7 @@ var useStudentInfoDrawer = function useStudentInfoDrawer(props) {
|
|
16070
16116
|
var _temp2 = function _temp2() {
|
16071
16117
|
setLoading(false);
|
16072
16118
|
};
|
16073
|
-
if (!studentId) return Promise.resolve();
|
16119
|
+
if (!studentId || !open) return Promise.resolve();
|
16074
16120
|
setLoading(true);
|
16075
16121
|
var _temp = _catch(function () {
|
16076
16122
|
return Promise.resolve(getUserByIdApi(studentId)).then(function (res) {
|
@@ -16083,7 +16129,7 @@ var useStudentInfoDrawer = function useStudentInfoDrawer(props) {
|
|
16083
16129
|
}
|
16084
16130
|
};
|
16085
16131
|
getStudent();
|
16086
|
-
}, [studentId]);
|
16132
|
+
}, [open, studentId]);
|
16087
16133
|
React.useEffect(function () {
|
16088
16134
|
if (open && inert) {
|
16089
16135
|
var _document$getElementB;
|