Skip to content

Instantly share code, notes, and snippets.

View levvsha's full-sized avatar

Mikhail Shabrikov levvsha

View GitHub Profile
@levvsha
levvsha / useOnClickOutside.ts
Created May 9, 2023 12:44
useOnClickOutside react hook with TypeScript
function useOnClickOutside(
ref: React.RefObject<HTMLDivElement>,
handler: (event: TouchEvent | MouseEvent) => void,
) {
useEffect(() => {
const listener = (event: TouchEvent | MouseEvent) => {
if (!ref.current || ref.current.contains(event.target as HTMLElement)) {
return;
}
handler(event);
@levvsha
levvsha / javascript-sorting-algorithms.js
Last active January 10, 2020 21:57 — forked from famence/javascript-sorting-algorithms.js
Реализация популярных алгоритмов сортировки на JavaScript с комментариями-пояснениями
// Пузырьковая сортировка
function bubbleSort(a){
var n = a.length;
for (var i = 0; i < n-1; i++){ // Выполняется для каждого элемента массива, кроме последнего.
for (var j = 0; j < n-1-i; j++){ // Для всех последующих за текущим элементов
if (a[j+1] < a[j]){ // выпоняется проверка, и если следующий элемент меньше текущего
var t = a[j+1]; a[j+1] = a[j]; a[j] = t; // то эти элементы меняются местами.
}
}
}
...
import converter from './converter';
...
logMarkup() {
const markup = converter(this.state.editorState.getCurrentContent()); // <-- [1]
document.getElementById('js-markup-container').innerHTML = markup;
console.log('markup ==> ', markup); // <-- [2]
const sliders = document.querySelectorAll('.js-slider');// <-- [3]
...
export const options = { // <-- [1]
styleToHTML,
blockToHTML,
entityToHTML,
};
const converterFunction = convertToHTML(options); // <-- [2]
export default contentState => converterFunction(contentState);
import React from 'react';
import { convertToHTML } from 'draft-convert';
export const styleToHTML = (style) => { // <-- [1]
switch (style) {
case 'ITALIC':
return <em className="italic" />;
case 'BOLD':
return <strong className="bold" />;
case 'HIGHLIGHT':
updateData(data) {
const editorState = this.props.blockProps.getEditorState();
const content = editorState.getCurrentContent();
const selection = new SelectionState({
anchorKey: this.props.block.key,
anchorOffset: 0,
focusKey: this.props.block.key,
focusOffset: this.props.block.getLength()
});
handleDroppedFiles(selection, files) {
const filteredFiles = files
.filter(file => (file.type.indexOf('image/') === 0)); // <-- [1]
if (!filteredFiles.length) {
return 'not_handled';
}
this.onChange(addNewBlockAt( // <-- [2]
this.state.editorState,
render() {
...
<Editor
editorState={editorState}
onChange={this.onChange}
handleKeyCommand={this.handleKeyCommand}
customStyleMap={customStyleMap}
handleDroppedFiles={this.handleDroppedFiles} // <-- [3]
handleReturn={this.handleReturn} // <-- [2]
blockRenderMap={RenderMap} // <-- [1]
constructor() {
...
this.getEditorState = () => this.state.editorState;
this.blockRendererFn = customBlockRenderer(
this.onChange,
this.getEditorState
);
}
...
function findLinkEntities(contentBlock, callback, contentState) {
contentBlock.findEntityRanges(
(character) => {
const entityKey = character.getEntity();
return (
entityKey !== null &&
contentState.getEntity(entityKey).getType() === 'LINK'
);
},
callback