Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
W
wax-prosemirror
Manage
Activity
Members
Labels
Plan
Issues
34
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
2
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Container Registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
wax
wax-prosemirror
Commits
887be427
Commit
887be427
authored
4 years ago
by
chris
Browse files
Options
Downloads
Patches
Plain Diff
insert table tool with hooks
parent
a2a095bc
No related branches found
No related tags found
1 merge request
!161
Connect ui
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
wax-prosemirror-components/src/ui/tables/InsertTableTool.js
+115
-121
115 additions, 121 deletions
wax-prosemirror-components/src/ui/tables/InsertTableTool.js
with
115 additions
and
121 deletions
wax-prosemirror-components/src/ui/tables/InsertTableTool.js
+
115
−
121
View file @
887be427
...
...
@@ -14,7 +14,7 @@
/* eslint-disable max-classes-per-file */
/* eslint-disable jsx-a11y/no-static-element-interactions */
import
React
from
'
react
'
;
import
React
,
{
useEffect
,
useState
}
from
'
react
'
;
import
PropTypes
from
'
prop-types
'
;
import
ReactDOM
from
'
react-dom
'
;
...
...
@@ -99,53 +99,46 @@ GridCell.propTypes = {
selected
:
PropTypes
.
bool
.
isRequired
,
};
c
lass
TableGridSizeEditor
extends
React
.
PureComponent
{
_ex
=
0
;
_ey
=
0
;
_mx
=
0
;
_my
=
0
;
_rafID
=
0
;
_ref
=
null
;
_entered
=
fals
e
;
c
onst
TableGridSizeEditor
=
props
=>
{
let
_ex
=
0
;
let
_ey
=
0
;
let
_mx
=
0
;
let
_my
=
0
;
let
_rafID
=
0
;
let
_ref
=
null
;
let
_entered
=
tru
e
;
constructor
(
props
)
{
super
(
props
);
this
.
state
=
{
rows
:
1
,
cols
:
1
,
};
}
componentWillUnmount
()
{
if
(
this
.
_entered
)
{
document
.
removeEventListener
(
'
mousemove
'
,
this
.
_onMouseMove
,
true
);
}
this
.
_rafID
&&
cancelAnimationFrame
(
this
.
_rafID
);
}
const
[
colsRows
,
setColsRows
]
=
useState
({
rows
:
1
,
cols
:
1
});
_onRef
=
ref
=>
{
this
.
_ref
=
ref
;
};
useEffect
(()
=>
{
_entered
=
false
;
return
()
=>
{
if
(
_entered
)
{
document
.
removeEventListener
(
'
mousemove
'
,
_onMouseMove
,
true
);
}
_rafID
&&
cancelAnimationFrame
(
_rafID
);
};
},
[]);
_onMouseEnter
=
e
=>
{
const
_onMouseEnter
=
e
=>
{
const
node
=
e
.
currentTarget
;
if
(
node
instanceof
HTMLElement
)
{
const
rect
=
fromHTMlElement
(
node
);
const
mx
=
Math
.
round
(
e
.
clientX
);
const
my
=
Math
.
round
(
e
.
clientY
);
this
.
_ex
=
rect
.
x
;
this
.
_ey
=
rect
.
y
;
this
.
_mx
=
mx
;
this
.
_my
=
my
;
if
(
!
this
.
_entered
)
{
this
.
_entered
=
true
;
document
.
addEventListener
(
'
mousemove
'
,
this
.
_onMouseMove
,
true
);
_ex
=
rect
.
x
;
_ey
=
rect
.
y
;
_mx
=
mx
;
_my
=
my
;
if
(
!
_entered
)
{
_entered
=
true
;
document
.
addEventListener
(
'
mousemove
'
,
_onMouseMove
,
true
);
}
}
};
_onMouseMove
=
e
=>
{
const
el
=
this
.
_ref
&&
ReactDOM
.
findDOMNode
(
this
.
_ref
);
const
_onMouseMove
=
e
=>
{
const
el
=
_ref
&&
ReactDOM
.
findDOMNode
(
_ref
);
const
elRect
=
el
?
htmlElementToRect
(
el
)
:
null
;
const
mouseRect
=
fromXY
(
e
.
screenX
,
e
.
screenY
,
10
);
...
...
@@ -155,105 +148,106 @@ class TableGridSizeEditor extends React.PureComponent {
e
.
stopImmediatePropagation
();
}
const
_updateGridSize
=
()
=>
{
_rafID
=
0
;
const
mx
=
_mx
;
const
my
=
_my
;
const
x
=
mx
-
_ex
;
const
y
=
my
-
_ey
;
const
rr
=
clamp
(
1
,
Math
.
ceil
(
y
/
(
CELL_SIZE
+
GUTTER_SIZE
)),
MAX_SIZE
);
const
cc
=
clamp
(
1
,
Math
.
ceil
(
x
/
(
CELL_SIZE
+
GUTTER_SIZE
)),
MAX_SIZE
);
const
{
rows
,
cols
}
=
colsRows
;
if
(
rows
!==
rr
||
cols
!==
cc
)
{
setColsRows
({
rows
:
rr
,
cols
:
cc
});
}
};
const
mx
=
Math
.
round
(
e
.
clientX
);
const
my
=
Math
.
round
(
e
.
clientY
);
if
(
mx
!==
this
.
_mx
||
my
!==
this
.
_my
)
{
this
.
_mx
=
mx
;
this
.
_my
=
my
;
this
.
_rafID
&&
cancelAnimationFrame
(
this
.
_rafID
);
this
.
_rafID
=
requestAnimationFrame
(
this
.
_updateGridSize
);
if
(
mx
!==
_mx
||
my
!==
_my
)
{
_mx
=
mx
;
_my
=
my
;
_rafID
&&
window
.
cancelAnimationFrame
(
_rafID
);
_rafID
=
window
.
requestAnimationFrame
(
_updateGridSize
);
}
};
_updateGridSize
=
()
=>
{
this
.
_rafID
=
0
;
const
mx
=
this
.
_mx
;
const
my
=
this
.
_my
;
const
x
=
mx
-
this
.
_ex
;
const
y
=
my
-
this
.
_ey
;
const
rr
=
clamp
(
1
,
Math
.
ceil
(
y
/
(
CELL_SIZE
+
GUTTER_SIZE
)),
MAX_SIZE
);
const
cc
=
clamp
(
1
,
Math
.
ceil
(
x
/
(
CELL_SIZE
+
GUTTER_SIZE
)),
MAX_SIZE
);
const
{
rows
,
cols
}
=
this
.
state
;
if
(
rows
!==
rr
||
cols
!==
cc
)
{
this
.
setState
({
rows
:
rr
,
cols
:
cc
});
}
const
_onRef
=
ref
=>
{
_ref
=
ref
;
};
_onMouseDown
=
e
=>
{
const
_onMouseDown
=
e
=>
{
e
.
preventDefault
();
this
.
props
.
onGridSelect
(
this
.
state
);
props
.
onGridSelect
(
colsRows
);
};
render
()
{
const
{
rows
,
cols
}
=
this
.
state
;
let
rr
=
Math
.
max
(
5
,
rows
);
let
cc
=
Math
.
max
(
5
,
cols
);
if
(
rr
===
rows
)
{
rr
=
Math
.
min
(
MAX_SIZE
,
rr
+
1
);
}
if
(
cc
===
cols
)
{
cc
=
Math
.
min
(
MAX_SIZE
,
cc
+
1
);
}
const
cells
=
[];
let
ii
=
0
;
let
y
=
0
;
let
w
=
0
;
let
h
=
0
;
while
(
ii
<
rr
)
{
y
+=
GUTTER_SIZE
;
let
jj
=
0
;
let
x
=
0
;
while
(
jj
<
cc
)
{
x
+=
GUTTER_SIZE
;
const
selected
=
ii
<
rows
&&
jj
<
cols
;
cells
.
push
(
<
GridCell
key
=
{
`
${
String
(
ii
)}
-
${
String
(
jj
)}
`
}
selected
=
{
selected
}
x
=
{
x
}
y
=
{
y
}
/>
,
);
x
+=
CELL_SIZE
;
w
=
x
+
GUTTER_SIZE
;
jj
++
;
}
y
+=
CELL_SIZE
;
h
=
y
+
GUTTER_SIZE
;
ii
++
;
const
{
rows
,
cols
}
=
colsRows
;
let
rr
=
Math
.
max
(
5
,
rows
);
let
cc
=
Math
.
max
(
5
,
cols
);
if
(
rr
===
rows
)
{
rr
=
Math
.
min
(
MAX_SIZE
,
rr
+
1
);
}
if
(
cc
===
cols
)
{
cc
=
Math
.
min
(
MAX_SIZE
,
cc
+
1
);
}
const
cells
=
[];
let
ii
=
0
;
let
y
=
0
;
let
w
=
0
;
let
h
=
0
;
while
(
ii
<
rr
)
{
y
+=
GUTTER_SIZE
;
let
jj
=
0
;
let
x
=
0
;
while
(
jj
<
cc
)
{
x
+=
GUTTER_SIZE
;
const
selected
=
ii
<
rows
&&
jj
<
cols
;
cells
.
push
(
<
GridCell
key
=
{
`
${
String
(
ii
)}
-
${
String
(
jj
)}
`
}
selected
=
{
selected
}
x
=
{
x
}
y
=
{
y
}
/>
,
);
x
+=
CELL_SIZE
;
w
=
x
+
GUTTER_SIZE
;
jj
++
;
}
y
+=
CELL_SIZE
;
h
=
y
+
GUTTER_SIZE
;
ii
++
;
}
const
wrapperStyle
=
{
background
:
'
#fff
'
,
border
:
'
1px solid gray
'
,
boxSizing
:
'
border-box
'
,
display
:
'
block
'
,
position
:
'
absolute
'
,
zIndex
:
2
,
};
const
wrapperStyle
=
{
background
:
'
#fff
'
,
border
:
'
1px solid gray
'
,
boxSizing
:
'
border-box
'
,
display
:
'
block
'
,
position
:
'
absolute
'
,
zIndex
:
2
,
};
const
bodyStyle
=
{
width
:
w
+
'
px
'
,
height
:
h
+
'
px
'
,
position
:
'
relative
'
,
};
const
bodyStyle
=
{
width
:
w
+
'
px
'
,
height
:
h
+
'
px
'
,
position
:
'
relative
'
,
};
return
(
<
div
style
=
{
wrapperStyle
}
ref
=
{
this
.
_onRef
}
>
<
div
onMouseDown
=
{
this
.
_onMouseDown
}
onMouseEnter
=
{
this
.
_onMouseEnter
}
style
=
{
bodyStyle
}
>
{
cells
}
<
/div
>
<
div
>
{
rows
}
X
{
cols
}
<
/div
>
return
(
<
div
style
=
{
wrapperStyle
}
ref
=
{
_onRef
}
>
<
div
onMouseDown
=
{
_onMouseDown
}
onMouseEnter
=
{
_onMouseEnter
}
style
=
{
bodyStyle
}
>
{
cells
}
<
/div
>
);
}
}
<
div
>
{
rows
}
X
{
cols
}
<
/div
>
<
/div
>
);
};
TableGridSizeEditor
.
propTypes
=
{
onGridSelect
:
PropTypes
.
func
.
isRequired
,
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment