feat:add style namespace

pr675
Hufe921 3 years ago
parent 790d669401
commit ca676f5993

@ -45,7 +45,7 @@ describe('控件-列举型', () => {
cy.get('@canvas').type(`{leftArrow}`) cy.get('@canvas').type(`{leftArrow}`)
cy.get('.select-control-popup li').eq(0).click() cy.get('.ce-select-control-popup li').eq(0).click()
cy.get('@canvas').type('{ctrl}s') cy.get('@canvas').type('{ctrl}s')
}) })

@ -36,7 +36,7 @@ describe('控件-文本型', () => {
cy.get('@canvas').type(`{leftArrow}`) cy.get('@canvas').type(`{leftArrow}`)
cy.get('.inputarea').type(text) cy.get('.ce-inputarea').type(text)
cy.get('@canvas').type('{ctrl}s') cy.get('@canvas').type('{ctrl}s')
}) })

@ -29,7 +29,7 @@ describe('基础功能', () => {
it('模式切换', () => { it('模式切换', () => {
cy.get('@canvas').click() cy.get('@canvas').click()
cy.get('.cursor').should('have.css', 'display', 'block') cy.get('.ce-cursor').should('have.css', 'display', 'block')
cy.get('.editor-mode').click().click() cy.get('.editor-mode').click().click()
@ -37,7 +37,7 @@ describe('基础功能', () => {
cy.get('@canvas').click() cy.get('@canvas').click()
cy.get('.cursor').should('have.css', 'display', 'none') cy.get('.ce-cursor').should('have.css', 'display', 'none')
}) })
it('页面缩放', () => { it('页面缩放', () => {

@ -219,7 +219,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="editor" editor-component="main"></div> <div class="editor"></div>
<div class="footer" editor-component="footer"> <div class="footer" editor-component="footer">
<div> <div>
<div class="page-mode"> <div class="page-mode">

@ -1,4 +1,4 @@
.block-item { .ce-block-item {
position: absolute; position: absolute;
z-index: 0; z-index: 0;
overflow: hidden; overflow: hidden;

@ -0,0 +1,132 @@
.ce-contextmenu-container {
z-index: 9;
position: fixed;
display: none;
padding: 4px;
overflow-x: hidden;
overflow-y: auto;
background: #fff;
box-shadow: 0 2px 12px 0 rgb(56 56 56 / 20%);
border: 1px solid #e2e6ed;
border-radius: 2px;
}
.ce-contextmenu-content {
display: flex;
flex-direction: column;
}
.ce-contextmenu-content .ce-contextmenu-sub-item::after {
position: absolute;
content: "";
width: 16px;
height: 16px;
right: 12px;
background: url(../../images/submenu-dropdown.svg);
}
.ce-contextmenu-content .ce-contextmenu-item {
min-width: 140px;
padding: 0 32px 0 16px;
height: 30px;
display: flex;
align-items: center;
white-space: nowrap;
box-sizing: border-box;
cursor: pointer;
}
.ce-contextmenu-content .ce-contextmenu-item.hover {
background: rgba(25, 55, 88, .04);
}
.ce-contextmenu-content .ce-contextmenu-item span {
max-width: 300px;
font-size: 12px;
color: #3d4757;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.ce-contextmenu-content .ce-contextmenu-item span.ce-shortcut {
color: #767c85;
height: 30px;
flex: 1;
text-align: right;
line-height: 30px;
margin-left: 20px;
}
.ce-contextmenu-content .ce-contextmenu-item i {
width: 16px;
height: 16px;
vertical-align: middle;
display: inline-block;
background-repeat: no-repeat;
background-size: 100% 100%;
flex-shrink: 0;
margin-right: 8px;
}
.ce-contextmenu-divider {
background-color: #e2e6ed;
margin: 4px 16px;
height: 1px;
}
.ce-contextmenu-print {
background-image: url(../../../assets/images/print.svg);
}
.ce-contextmenu-image {
background-image: url(../../../assets/images/image.svg);
}
.ce-contextmenu-image-change {
background-image: url(../../../assets/images/image-change.svg);
}
.ce-contextmenu-insert-row-col {
background-image: url(../../../assets/images/insert-row-col.svg);
}
.ce-contextmenu-insert-top-row {
background-image: url(../../../assets/images/insert-top-row.svg);
}
.ce-contextmenu-insert-bottom-row {
background-image: url(../../../assets/images/insert-bottom-row.svg);
}
.ce-contextmenu-insert-left-col {
background-image: url(../../../assets/images/insert-left-col.svg);
}
.ce-contextmenu-insert-right-col {
background-image: url(../../../assets/images/insert-right-col.svg);
}
.ce-contextmenu-delete-row-col {
background-image: url(../../../assets/images/delete-row-col.svg);
}
.ce-contextmenu-delete-row {
background-image: url(../../../assets/images/delete-row.svg);
}
.ce-contextmenu-delete-col {
background-image: url(../../../assets/images/delete-col.svg);
}
.ce-contextmenu-delete-table {
background-image: url(../../../assets/images/delete-table.svg);
}
.ce-contextmenu-merge-cell {
background-image: url(../../../assets/images/merge-cell.svg);
}
.ce-contextmenu-merge-cancel-cell {
background-image: url(../../../assets/images/merge-cancel-cell.svg);
}

@ -1,4 +1,4 @@
.select-control-popup { .ce-select-control-popup {
max-width: 160px; max-width: 160px;
min-width: 69px; min-width: 69px;
max-height: 225px; max-height: 225px;
@ -13,14 +13,14 @@
overflow-y: auto; overflow-y: auto;
} }
.select-control-popup ul { .ce-select-control-popup ul {
list-style: none; list-style: none;
padding: 3px 0; padding: 3px 0;
margin: 0; margin: 0;
box-sizing: border-box; box-sizing: border-box;
} }
.select-control-popup ul li { .ce-select-control-popup ul li {
font-size: 13px; font-size: 13px;
padding: 0 20px; padding: 0 20px;
position: relative; position: relative;
@ -34,11 +34,11 @@
cursor: pointer; cursor: pointer;
} }
.select-control-popup ul li:hover { .ce-select-control-popup ul li:hover {
background-color: #EEF2FD; background-color: #EEF2FD;
} }
.select-control-popup ul li.active { .ce-select-control-popup ul li.active {
color: var(--COLOR-HOVER, #5175f4); color: var(--COLOR-HOVER, #5175f4);
font-weight: 700; font-weight: 700;
} }

@ -1,4 +1,4 @@
.date-container { .ce-date-container {
display: none; display: none;
width: 300px; width: 300px;
overflow: hidden; overflow: hidden;
@ -15,19 +15,19 @@
box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%); box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
} }
.date-container.active { .ce-date-container.active {
display: block; display: block;
} }
.date-wrap { .ce-date-wrap {
display: none; display: none;
} }
.date-wrap.active { .ce-date-wrap.active {
display: block; display: block;
} }
.date-title { .ce-date-title {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
@ -36,40 +36,40 @@
font-size: 16px; font-size: 16px;
} }
.date-title>span { .ce-date-title>span {
display: inline-block; display: inline-block;
} }
.date-title>span:not(.date-title__now) { .ce-date-title>span:not(.ce-date-title__now) {
font-family: cursive; font-family: cursive;
cursor: pointer; cursor: pointer;
} }
.date-title>span:not(.date-title__now):hover { .ce-date-title>span:not(.ce-date-title__now):hover {
color: #5175F4; color: #5175F4;
} }
.date-title .date-title__pre-year { .ce-date-title .ce-date-title__pre-year {
width: 15%; width: 15%;
} }
.date-title .date-title__pre-month { .ce-date-title .ce-date-title__pre-month {
width: 15%; width: 15%;
} }
.date-title .date-title__now { .ce-date-title .ce-date-title__now {
width: 40%; width: 40%;
} }
.date-title .date-title__next-year { .ce-date-title .ce-date-title__next-year {
width: 15%; width: 15%;
} }
.date-title .date-title__next-month { .ce-date-title .ce-date-title__next-month {
width: 15%; width: 15%;
} }
.date-week { .ce-date-week {
width: 100%; width: 100%;
display: flex; display: flex;
justify-content: center; justify-content: center;
@ -78,7 +78,7 @@
border-bottom: 1px solid #e4e7ed; border-bottom: 1px solid #e4e7ed;
} }
.date-week>span { .ce-date-week>span {
list-style: none; list-style: none;
width: calc(100%/7); width: calc(100%/7);
text-align: center; text-align: center;
@ -86,7 +86,7 @@
font-size: 14px; font-size: 14px;
} }
.date-day { .ce-date-day {
width: 100%; width: 100%;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
@ -94,7 +94,7 @@
margin-top: 5px; margin-top: 5px;
} }
.date-day>div { .ce-date-day>div {
width: calc(100%/7); width: calc(100%/7);
height: 40px; height: 40px;
text-align: center; text-align: center;
@ -105,85 +105,85 @@
border-radius: 4px; border-radius: 4px;
} }
.date-day>div:hover { .ce-date-day>div:hover {
color: #5175F4; color: #5175F4;
opacity: .8; opacity: .8;
} }
.date-day>div.active { .ce-date-day>div.active {
color: #5175F4; color: #5175F4;
font-weight: 700; font-weight: 700;
} }
.date-day>div.disable { .ce-date-day>div.disable {
color: #c0c4cc; color: #c0c4cc;
} }
.date-day>div.select { .ce-date-day>div.select {
color: #fff; color: #fff;
background-color: #5175F4; background-color: #5175F4;
} }
.time-wrap { .ce-time-wrap {
display: none; display: none;
padding: 10px; padding: 10px;
height: 286px; height: 286px;
} }
.time-wrap ::-webkit-scrollbar { .ce-time-wrap ::-webkit-scrollbar {
width: 0; width: 0;
} }
.time-wrap.active { .ce-time-wrap.active {
display: flex; display: flex;
} }
.time-wrap li { .ce-time-wrap li {
list-style: none; list-style: none;
} }
.time-wrap>li { .ce-time-wrap>li {
width: 33.3%; width: 33.3%;
height: 100%; height: 100%;
text-align: center; text-align: center;
} }
.time-wrap>li>span { .ce-time-wrap>li>span {
transform: translateY(-5px); transform: translateY(-5px);
display: inline-block; display: inline-block;
} }
.time-wrap>li>ol { .ce-time-wrap>li>ol {
height: calc(100% - 20px); height: calc(100% - 20px);
overflow-y: auto; overflow-y: auto;
border: 1px solid #e2e2e2; border: 1px solid #e2e2e2;
position: relative; position: relative;
} }
.time-wrap>li:first-child>ol { .ce-time-wrap>li:first-child>ol {
border-right: 0; border-right: 0;
} }
.time-wrap>li:last-child>ol { .ce-time-wrap>li:last-child>ol {
border-left: 0; border-left: 0;
} }
.time-wrap>li>ol>li { .ce-time-wrap>li>ol>li {
line-height: 30px; line-height: 30px;
cursor: pointer; cursor: pointer;
transition: all .3s; transition: all .3s;
} }
.time-wrap>li>ol>li:hover { .ce-time-wrap>li>ol>li:hover {
background-color: #eaeaea; background-color: #eaeaea;
} }
.time-wrap>li>ol>li.active { .ce-time-wrap>li>ol>li.active {
color: #ffffff; color: #ffffff;
background: #5175F4; background: #5175F4;
} }
.date-menu { .ce-date-menu {
width: 100%; width: 100%;
height: 28px; height: 28px;
display: flex; display: flex;
@ -194,7 +194,7 @@
border-top: 1px solid #e4e7ed; border-top: 1px solid #e4e7ed;
} }
.date-menu button { .ce-date-menu button {
display: inline-block; display: inline-block;
line-height: 1; line-height: 1;
white-space: nowrap; white-space: nowrap;
@ -216,18 +216,18 @@
margin-left: 10px; margin-left: 10px;
} }
.date-menu button:hover { .ce-date-menu button:hover {
color: #5175F4; color: #5175F4;
border-color: #5175F4; border-color: #5175F4;
} }
.date-menu button.date-menu__time { .ce-date-menu button.ce-date-menu__time {
border: 1px solid transparent; border: 1px solid transparent;
position: absolute; position: absolute;
left: 0; left: 0;
margin-left: 0; margin-left: 0;
} }
.date-menu button.date-menu__time:hover { .ce-date-menu button.ce-date-menu__time:hover {
color: #5175F4; color: #5175F4;
} }

@ -0,0 +1,24 @@
.ce-hyperlink-popup {
min-width: 100px;
font-size: 12px;
line-height: 20px;
background: #fff;
box-shadow: 0 2px 12px 0 rgb(98 107 132 / 20%);
border-radius: 2px;
color: #3d4757;
padding: 16px;
white-space: nowrap;
position: absolute;
z-index: 1;
text-align: center;
display: none;
}
.ce-hyperlink-popup a {
cursor: pointer;
text-decoration: none;
border-bottom-width: 1px;
border-bottom-style: solid;
padding-bottom: 2px;
color: #0000ff;
}

@ -1,8 +1,13 @@
@import './control/select.css'; @import './control/select.css';
@import './date/datePicker.css'; @import './date/datePicker.css';
@import './block/block.css'; @import './block/block.css';
@import './table/table.css';
@import './resizer/resizer.css';
@import './previewer/previewer.css';
@import './contextmenu/contextmenu.css';
@import './hyperlink/hyperlink.css';
.inputarea { .ce-inputarea {
width: 0; width: 0;
height: 12px; height: 12px;
min-width: 0; min-width: 0;
@ -23,7 +28,7 @@
background-color: transparent; background-color: transparent;
} }
.cursor { .ce-cursor {
width: 1px; width: 1px;
height: 20px; height: 20px;
left: 0; left: 0;
@ -34,7 +39,7 @@
pointer-events: none; pointer-events: none;
} }
.cursor--animation { .ce-cursor.ce-cursor--animation {
animation-duration: 1s; animation-duration: 1s;
animation-iteration-count: infinite; animation-iteration-count: infinite;
animation-name: cursorAnimation; animation-name: cursorAnimation;
@ -60,399 +65,4 @@
to { to {
opacity: 1 opacity: 1
} }
}
.resizer-selection {
position: absolute;
border: 1px solid;
}
.resizer-selection>div {
position: absolute;
width: 10px;
height: 10px;
box-shadow: 0 1px 4px 0 rgb(0 0 0 / 30%);
border-radius: 5px;
border: 2px solid #ffffff;
box-sizing: border-box;
}
.resizer-selection .handle-0 {
cursor: nw-resize;
}
.resizer-selection .handle-1 {
cursor: n-resize;
}
.resizer-selection .handle-2 {
cursor: ne-resize;
}
.resizer-selection .handle-3 {
cursor: e-resize;
}
.resizer-selection .handle-4 {
cursor: se-resize;
}
.resizer-selection .handle-5 {
cursor: s-resize;
}
.resizer-selection .handle-6 {
cursor: sw-resize;
}
.resizer-selection .handle-7 {
cursor: w-resize;
}
.resizer-image {
position: absolute;
opacity: 0.5;
}
.image-previewer {
position: fixed;
left: 0;
top: 0;
z-index: 1000;
width: 100%;
height: 100%;
overflow: hidden;
background: #f2f4f7;
display: flex;
align-items: center;
justify-content: center;
animation: previewerAnimation .3s;
}
@keyframes previewerAnimation {
0% {
opacity: 0.1;
}
100% {
opacity: 1;
}
}
.image-previewer .image-close {
width: 24px;
height: 24px;
display: inline-block;
position: absolute;
right: 50px;
top: 30px;
z-index: 99;
cursor: pointer;
background: url(../images/close.svg) no-repeat;
background-size: 100% 100%;
transition: all .3s;
border-radius: 50%;
}
.image-previewer .image-close:hover {
background-color: #e2e6ed;
}
.image-previewer .image-container {
position: relative;
}
.image-previewer .image-container img {
cursor: move;
position: relative;
}
.image-previewer .image-menu {
height: 50px;
position: absolute;
bottom: 50px;
z-index: 99;
display: flex;
align-items: center;
justify-content: center;
}
.image-previewer .image-menu i {
width: 32px;
height: 32px;
margin: 0 8px;
cursor: pointer;
display: inline-block;
background-repeat: no-repeat;
background-size: 100% 100%;
transition: all .3s;
border-radius: 50%;
}
.image-previewer .image-menu i:hover {
background-color: #e2e6ed;
}
.image-previewer .image-menu i.zoom-in {
background-image: url(../images/zoom-in.svg);
}
.image-previewer .image-menu i.zoom-out {
background-image: url(../images/zoom-out.svg);
}
.image-previewer .image-menu i.rotate {
background-image: url(../images/rotate.svg);
}
.image-previewer .image-menu i.original-size {
background-image: url(../images/original-size.svg);
}
.image-previewer .image-menu i.image-download {
background-image: url(../images/image-download.svg);
}
.table-tool__row {
position: absolute;
width: 12px;
border-radius: 6.5px;
overflow: hidden;
background-color: #E2E6ED;
}
.table-tool__row .table-tool__row__item {
width: 100%;
position: relative;
}
.table-tool__row .table-tool__row__item::after {
content: '';
position: absolute;
bottom: 0;
left: 2px;
width: 8px;
height: 1px;
background-color: #C0C6CF;
}
.table-tool__row .table-tool__row__item:last-child:after {
display: none;
}
.table-tool__col {
position: absolute;
height: 12px;
border-radius: 6.5px;
overflow: hidden;
background-color: #E2E6ED;
display: flex;
}
.table-tool__col .table-tool__col__item {
height: 100%;
position: relative;
}
.table-tool__col .table-tool__col__item::after {
content: '';
position: absolute;
top: 2px;
left: -1px;
width: 1px;
height: 8px;
z-index: 1;
background-color: #C0C6CF;
}
.table-tool__col .table-tool__col__item:first-child:after {
display: none;
}
.table-tool__row .table-tool__row__item.active,
.table-tool__col .table-tool__col__item.active {
background-color: #C4D7FA;
}
.table-tool__col .table-tool__anchor {
right: -5px;
width: 10px;
height: 12px;
z-index: 9;
position: absolute;
cursor: col-resize;
}
.table-tool__row .table-tool__anchor {
bottom: -5px;
left: 0;
width: 12px;
height: 10px;
z-index: 9;
position: absolute;
cursor: row-resize;
}
.table-anchor__line {
z-index: 9;
position: absolute;
border: 1px dotted #000000;
}
.contextmenu-container {
z-index: 9;
position: fixed;
display: none;
padding: 4px;
overflow-x: hidden;
overflow-y: auto;
background: #fff;
box-shadow: 0 2px 12px 0 rgb(56 56 56 / 20%);
border: 1px solid #e2e6ed;
border-radius: 2px;
}
.contextmenu-content {
display: flex;
flex-direction: column;
}
.contextmenu-content .contextmenu-sub-item::after {
position: absolute;
content: "";
width: 16px;
height: 16px;
right: 12px;
background: url(../images/submenu-dropdown.svg);
}
.contextmenu-content .contextmenu-item {
min-width: 140px;
padding: 0 32px 0 16px;
height: 30px;
display: flex;
align-items: center;
white-space: nowrap;
box-sizing: border-box;
cursor: pointer;
}
.contextmenu-content .contextmenu-item.hover {
background: rgba(25, 55, 88, .04);
}
.contextmenu-content .contextmenu-item span {
max-width: 300px;
font-size: 12px;
color: #3d4757;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.contextmenu-content .contextmenu-item span.shortcut {
color: #767c85;
height: 30px;
flex: 1;
text-align: right;
line-height: 30px;
margin-left: 20px;
}
.contextmenu-content .contextmenu-item i {
width: 16px;
height: 16px;
vertical-align: middle;
display: inline-block;
background-repeat: no-repeat;
background-size: 100% 100%;
flex-shrink: 0;
margin-right: 8px;
}
.contextmenu-divider {
background-color: #e2e6ed;
margin: 4px 16px;
height: 1px;
}
.contextmenu-print {
background-image: url(../../assets/images/print.svg);
}
.contextmenu-image {
background-image: url(../../assets/images/image.svg);
}
.contextmenu-image-change {
background-image: url(../../assets/images/image-change.svg);
}
.contextmenu-insert-row-col {
background-image: url(../../assets/images/insert-row-col.svg);
}
.contextmenu-insert-top-row {
background-image: url(../../assets/images/insert-top-row.svg);
}
.contextmenu-insert-bottom-row {
background-image: url(../../assets/images/insert-bottom-row.svg);
}
.contextmenu-insert-left-col {
background-image: url(../../assets/images/insert-left-col.svg);
}
.contextmenu-insert-right-col {
background-image: url(../../assets/images/insert-right-col.svg);
}
.contextmenu-delete-row-col {
background-image: url(../../assets/images/delete-row-col.svg);
}
.contextmenu-delete-row {
background-image: url(../../assets/images/delete-row.svg);
}
.contextmenu-delete-col {
background-image: url(../../assets/images/delete-col.svg);
}
.contextmenu-delete-table {
background-image: url(../../assets/images/delete-table.svg);
}
.contextmenu-merge-cell {
background-image: url(../../assets/images/merge-cell.svg);
}
.contextmenu-merge-cancel-cell {
background-image: url(../../assets/images/merge-cancel-cell.svg);
}
.hyperlink-popup {
min-width: 100px;
font-size: 12px;
line-height: 20px;
background: #fff;
box-shadow: 0 2px 12px 0 rgb(98 107 132 / 20%);
border-radius: 2px;
color: #3d4757;
padding: 16px;
white-space: nowrap;
position: absolute;
z-index: 1;
text-align: center;
display: none;
}
.hyperlink-popup a {
cursor: pointer;
text-decoration: none;
border-bottom-width: 1px;
border-bottom-style: solid;
padding-bottom: 2px;
color: #0000ff;
} }

@ -0,0 +1,98 @@
.ce-image-previewer {
position: fixed;
left: 0;
top: 0;
z-index: 1000;
width: 100%;
height: 100%;
overflow: hidden;
background: #f2f4f7;
display: flex;
align-items: center;
justify-content: center;
animation: previewerAnimation .3s;
}
@keyframes previewerAnimation {
0% {
opacity: 0.1;
}
100% {
opacity: 1;
}
}
.ce-image-previewer .image-close {
width: 24px;
height: 24px;
display: inline-block;
position: absolute;
right: 50px;
top: 30px;
z-index: 99;
cursor: pointer;
background: url(../../images/close.svg) no-repeat;
background-size: 100% 100%;
transition: all .3s;
border-radius: 50%;
}
.ce-image-previewer .image-close:hover {
background-color: #e2e6ed;
}
.ce-image-previewer .ce-image-container {
position: relative;
}
.ce-image-previewer .ce-image-container img {
cursor: move;
position: relative;
}
.ce-image-previewer .ce-image-menu {
height: 50px;
position: absolute;
bottom: 50px;
z-index: 99;
display: flex;
align-items: center;
justify-content: center;
}
.ce-image-previewer .ce-image-menu i {
width: 32px;
height: 32px;
margin: 0 8px;
cursor: pointer;
display: inline-block;
background-repeat: no-repeat;
background-size: 100% 100%;
transition: all .3s;
border-radius: 50%;
}
.ce-image-previewer .ce-image-menu i:hover {
background-color: #e2e6ed;
}
.ce-image-previewer .ce-image-menu i.zoom-in {
background-image: url(../../images/zoom-in.svg);
}
.ce-image-previewer .ce-image-menu i.zoom-out {
background-image: url(../../images/zoom-out.svg);
}
.ce-image-previewer .ce-image-menu i.rotate {
background-image: url(../../images/rotate.svg);
}
.ce-image-previewer .ce-image-menu i.original-size {
background-image: url(../../images/original-size.svg);
}
.ce-image-previewer .ce-image-menu i.image-download {
background-image: url(../../images/image-download.svg);
}

@ -0,0 +1,51 @@
.ce-resizer-selection {
position: absolute;
border: 1px solid;
}
.ce-resizer-selection>div {
position: absolute;
width: 10px;
height: 10px;
box-shadow: 0 1px 4px 0 rgb(0 0 0 / 30%);
border-radius: 5px;
border: 2px solid #ffffff;
box-sizing: border-box;
}
.ce-resizer-selection .handle-0 {
cursor: nw-resize;
}
.ce-resizer-selection .handle-1 {
cursor: n-resize;
}
.ce-resizer-selection .handle-2 {
cursor: ne-resize;
}
.ce-resizer-selection .handle-3 {
cursor: e-resize;
}
.ce-resizer-selection .handle-4 {
cursor: se-resize;
}
.ce-resizer-selection .handle-5 {
cursor: s-resize;
}
.ce-resizer-selection .handle-6 {
cursor: sw-resize;
}
.ce-resizer-selection .handle-7 {
cursor: w-resize;
}
.ce-resizer-image {
position: absolute;
opacity: 0.5;
}

@ -0,0 +1,85 @@
.ce-table-tool__row {
position: absolute;
width: 12px;
border-radius: 6.5px;
overflow: hidden;
background-color: #E2E6ED;
}
.ce-table-tool__row .ce-table-tool__row__item {
width: 100%;
position: relative;
}
.ce-table-tool__row .ce-table-tool__row__item::after {
content: '';
position: absolute;
bottom: 0;
left: 2px;
width: 8px;
height: 1px;
background-color: #C0C6CF;
}
.ce-table-tool__row .ce-table-tool__row__item:last-child:after {
display: none;
}
.ce-table-tool__col {
position: absolute;
height: 12px;
border-radius: 6.5px;
overflow: hidden;
background-color: #E2E6ED;
display: flex;
}
.ce-table-tool__col .ce-table-tool__col__item {
height: 100%;
position: relative;
}
.ce-table-tool__col .ce-table-tool__col__item::after {
content: '';
position: absolute;
top: 2px;
left: -1px;
width: 1px;
height: 8px;
z-index: 1;
background-color: #C0C6CF;
}
.ce-table-tool__col .ce-table-tool__col__item:first-child:after {
display: none;
}
.ce-table-tool__row .ce-table-tool__row__item.active,
.ce-table-tool__col .ce-table-tool__col__item.active {
background-color: #C4D7FA;
}
.ce-table-tool__col .ce-table-tool__anchor {
right: -5px;
width: 10px;
height: 12px;
z-index: 9;
position: absolute;
cursor: col-resize;
}
.ce-table-tool__row .ce-table-tool__anchor {
bottom: -5px;
left: 0;
width: 12px;
height: 10px;
z-index: 9;
position: absolute;
cursor: row-resize;
}
.ce-table-anchor__line {
z-index: 9;
position: absolute;
border: 1px dotted #000000;
}

@ -1,5 +1,5 @@
import { NAME_PLACEHOLDER } from '../../dataset/constant/ContextMenu' import { NAME_PLACEHOLDER } from '../../dataset/constant/ContextMenu'
import { EDITOR_COMPONENT } from '../../dataset/constant/Editor' import { EDITOR_COMPONENT, EDITOR_PREFIX } from '../../dataset/constant/Editor'
import { EditorComponent } from '../../dataset/enum/Editor' import { EditorComponent } from '../../dataset/enum/Editor'
import { IContextMenuContext, IRegisterContextMenu } from '../../interface/contextmenu/ContextMenu' import { IContextMenuContext, IRegisterContextMenu } from '../../interface/contextmenu/ContextMenu'
import { findParent } from '../../utils' import { findParent } from '../../utils'
@ -137,7 +137,7 @@ export class ContextMenu {
private _createContextMenuContainer(): HTMLDivElement { private _createContextMenuContainer(): HTMLDivElement {
const contextMenuContainer = document.createElement('div') const contextMenuContainer = document.createElement('div')
contextMenuContainer.classList.add('contextmenu-container') contextMenuContainer.classList.add(`${EDITOR_PREFIX}-contextmenu-container`)
contextMenuContainer.setAttribute(EDITOR_COMPONENT, EditorComponent.CONTEXTMENU) contextMenuContainer.setAttribute(EDITOR_COMPONENT, EditorComponent.CONTEXTMENU)
this.container.append(contextMenuContainer) this.container.append(contextMenuContainer)
return contextMenuContainer return contextMenuContainer
@ -147,7 +147,7 @@ export class ContextMenu {
const { contextMenuList, left, top, parentMenuContainer } = payload const { contextMenuList, left, top, parentMenuContainer } = payload
const contextMenuContainer = this._createContextMenuContainer() const contextMenuContainer = this._createContextMenuContainer()
const contextMenuContent = document.createElement('div') const contextMenuContent = document.createElement('div')
contextMenuContent.classList.add('contextmenu-content') contextMenuContent.classList.add(`${EDITOR_PREFIX}-contextmenu-content`)
// 直接子菜单 // 直接子菜单
let childMenuContainer: HTMLDivElement | null = null let childMenuContainer: HTMLDivElement | null = null
// 父菜单添加子菜单映射关系 // 父菜单添加子菜单映射关系
@ -160,15 +160,15 @@ export class ContextMenu {
// 首尾分隔符不渲染 // 首尾分隔符不渲染
if (c !== 0 && c !== contextMenuList.length - 1) { if (c !== 0 && c !== contextMenuList.length - 1) {
const divider = document.createElement('div') const divider = document.createElement('div')
divider.classList.add('contextmenu-divider') divider.classList.add(`${EDITOR_PREFIX}-contextmenu-divider`)
contextMenuContent.append(divider) contextMenuContent.append(divider)
} }
} else { } else {
const menuItem = document.createElement('div') const menuItem = document.createElement('div')
menuItem.classList.add('contextmenu-item') menuItem.classList.add(`${EDITOR_PREFIX}-contextmenu-item`)
// 菜单事件 // 菜单事件
if (menu.childMenus) { if (menu.childMenus) {
menuItem.classList.add('contextmenu-sub-item') menuItem.classList.add(`${EDITOR_PREFIX}-contextmenu-sub-item`)
menuItem.onmouseenter = () => { menuItem.onmouseenter = () => {
this._setHoverStatus(menuItem, true) this._setHoverStatus(menuItem, true)
this._removeSubMenu(contextMenuContainer) this._removeSubMenu(contextMenuContainer)
@ -208,7 +208,7 @@ export class ContextMenu {
const icon = document.createElement('i') const icon = document.createElement('i')
menuItem.append(icon) menuItem.append(icon)
if (menu.icon) { if (menu.icon) {
icon.classList.add(`contextmenu-${menu.icon}`) icon.classList.add(`${EDITOR_PREFIX}-contextmenu-${menu.icon}`)
} }
// 文本 // 文本
const span = document.createElement('span') const span = document.createElement('span')
@ -218,7 +218,7 @@ export class ContextMenu {
// 快捷方式提示 // 快捷方式提示
if (menu.shortCut) { if (menu.shortCut) {
const span = document.createElement('span') const span = document.createElement('span')
span.classList.add('shortcut') span.classList.add(`${EDITOR_PREFIX}-shortcut`)
span.append(document.createTextNode(menu.shortCut)) span.append(document.createTextNode(menu.shortCut))
menuItem.append(span) menuItem.append(span)
} }
@ -250,7 +250,7 @@ export class ContextMenu {
private _setHoverStatus(payload: HTMLDivElement, status: boolean) { private _setHoverStatus(payload: HTMLDivElement, status: boolean) {
if (status) { if (status) {
payload.parentNode?.querySelectorAll('.contextmenu-item') payload.parentNode?.querySelectorAll(`${EDITOR_PREFIX}-contextmenu-item`)
.forEach(child => child.classList.remove('hover')) .forEach(child => child.classList.remove('hover'))
payload.classList.add('hover') payload.classList.add('hover')
} else { } else {

@ -1,4 +1,5 @@
import { CURSOR_AGENT_HEIGHT } from '../../dataset/constant/Cursor' import { CURSOR_AGENT_HEIGHT } from '../../dataset/constant/Cursor'
import { EDITOR_PREFIX } from '../../dataset/constant/Editor'
import { IEditorOption } from '../../interface/Editor' import { IEditorOption } from '../../interface/Editor'
import { Draw } from '../draw/Draw' import { Draw } from '../draw/Draw'
import { CanvasEvent } from '../event/CanvasEvent' import { CanvasEvent } from '../event/CanvasEvent'
@ -21,7 +22,7 @@ export class Cursor {
this.options = draw.getOptions() this.options = draw.getOptions()
this.cursorDom = document.createElement('div') this.cursorDom = document.createElement('div')
this.cursorDom.classList.add('cursor') this.cursorDom.classList.add(`${EDITOR_PREFIX}-cursor`)
this.container.append(this.cursorDom) this.container.append(this.cursorDom)
this.cursorAgent = new CursorAgent(draw, canvasEvent) this.cursorAgent = new CursorAgent(draw, canvasEvent)
} }
@ -64,13 +65,13 @@ export class Cursor {
this.cursorDom.style.display = isReadonly ? 'none' : 'block' this.cursorDom.style.display = isReadonly ? 'none' : 'block'
this.cursorDom.style.height = `${cursorHeight}px` this.cursorDom.style.height = `${cursorHeight}px`
setTimeout(() => { setTimeout(() => {
this.cursorDom.classList.add('cursor--animation') this.cursorDom.classList.add(`${EDITOR_PREFIX}-cursor--animation`)
}, 200) }, 200)
} }
public recoveryCursor() { public recoveryCursor() {
this.cursorDom.style.display = 'none' this.cursorDom.style.display = 'none'
this.cursorDom.classList.remove('cursor--animation') this.cursorDom.classList.remove(`${EDITOR_PREFIX}-cursor--animation`)
} }
} }

@ -1,3 +1,4 @@
import { EDITOR_PREFIX } from '../../dataset/constant/Editor'
import { ElementType } from '../../dataset/enum/Element' import { ElementType } from '../../dataset/enum/Element'
import { debounce } from '../../utils' import { debounce } from '../../utils'
import { getElementListByHTML } from '../../utils/clipboard' import { getElementListByHTML } from '../../utils/clipboard'
@ -18,7 +19,7 @@ export class CursorAgent {
// 代理光标绘制 // 代理光标绘制
const agentCursorDom = document.createElement('textarea') const agentCursorDom = document.createElement('textarea')
agentCursorDom.autocomplete = 'off' agentCursorDom.autocomplete = 'off'
agentCursorDom.classList.add('inputarea') agentCursorDom.classList.add(`${EDITOR_PREFIX}-inputarea`)
agentCursorDom.innerText = '' agentCursorDom.innerText = ''
this.container.append(agentCursorDom) this.container.append(agentCursorDom)
this.agentCursorDom = agentCursorDom this.agentCursorDom = agentCursorDom

@ -47,7 +47,7 @@ import { Previewer } from './particle/previewer/Previewer'
import { DateParticle } from './particle/date/DateParticle' import { DateParticle } from './particle/date/DateParticle'
import { IMargin } from '../../interface/Margin' import { IMargin } from '../../interface/Margin'
import { BlockParticle } from './particle/block/BlockParticle' import { BlockParticle } from './particle/block/BlockParticle'
import { EDITOR_COMPONENT } from '../../dataset/constant/Editor' import { EDITOR_COMPONENT, EDITOR_PREFIX } from '../../dataset/constant/Editor'
export class Draw { export class Draw {
@ -531,7 +531,7 @@ export class Draw {
private _createPageContainer(): HTMLDivElement { private _createPageContainer(): HTMLDivElement {
const pageContainer = document.createElement('div') const pageContainer = document.createElement('div')
pageContainer.classList.add('page-container') pageContainer.classList.add(`${EDITOR_PREFIX}-page-container`)
this.container.append(pageContainer) this.container.append(pageContainer)
return pageContainer return pageContainer
} }

@ -1,4 +1,4 @@
import { EDITOR_COMPONENT } from '../../../../dataset/constant/Editor' import { EDITOR_COMPONENT, EDITOR_PREFIX } from '../../../../dataset/constant/Editor'
import { ControlComponent } from '../../../../dataset/enum/Control' import { ControlComponent } from '../../../../dataset/enum/Control'
import { EditorComponent } from '../../../../dataset/enum/Editor' import { EditorComponent } from '../../../../dataset/enum/Editor'
import { KeyMap } from '../../../../dataset/enum/KeyMap' import { KeyMap } from '../../../../dataset/enum/KeyMap'
@ -210,7 +210,7 @@ export class SelectControl implements IControlInstance {
if (!position) return if (!position) return
// dom树<div><ul><li>item</li></ul></div> // dom树<div><ul><li>item</li></ul></div>
const selectPopupContainer = document.createElement('div') const selectPopupContainer = document.createElement('div')
selectPopupContainer.classList.add('select-control-popup') selectPopupContainer.classList.add(`${EDITOR_PREFIX}-select-control-popup`)
selectPopupContainer.setAttribute(EDITOR_COMPONENT, EditorComponent.POPUP) selectPopupContainer.setAttribute(EDITOR_COMPONENT, EditorComponent.POPUP)
const ul = document.createElement('ul') const ul = document.createElement('ul')
for (let v = 0; v < valueSets.length; v++) { for (let v = 0; v < valueSets.length; v++) {

@ -1,4 +1,5 @@
import { IElement } from '../../..' import { IElement } from '../../..'
import { EDITOR_PREFIX } from '../../../dataset/constant/Editor'
import { IEditorOption } from '../../../interface/Editor' import { IEditorOption } from '../../../interface/Editor'
import { IElementPosition } from '../../../interface/Element' import { IElementPosition } from '../../../interface/Element'
import { IRowElement } from '../../../interface/Row' import { IRowElement } from '../../../interface/Row'
@ -23,7 +24,7 @@ export class HyperlinkParticle {
private _createHyperlinkPopupDom() { private _createHyperlinkPopupDom() {
const hyperlinkPopupContainer = document.createElement('div') const hyperlinkPopupContainer = document.createElement('div')
hyperlinkPopupContainer.classList.add('hyperlink-popup') hyperlinkPopupContainer.classList.add(`${EDITOR_PREFIX}-hyperlink-popup`)
const hyperlinkDom = document.createElement('a') const hyperlinkDom = document.createElement('a')
hyperlinkDom.target = '_blank' hyperlinkDom.target = '_blank'
hyperlinkPopupContainer.append(hyperlinkDom) hyperlinkPopupContainer.append(hyperlinkDom)

@ -1,3 +1,4 @@
import { EDITOR_PREFIX } from '../../../../dataset/constant/Editor'
import { ElementType } from '../../../../dataset/enum/Element' import { ElementType } from '../../../../dataset/enum/Element'
import { IRowElement } from '../../../../interface/Row' import { IRowElement } from '../../../../interface/Row'
import { Draw } from '../../Draw' import { Draw } from '../../Draw'
@ -20,7 +21,7 @@ export class BlockParticle {
private _createBlockContainer(): HTMLDivElement { private _createBlockContainer(): HTMLDivElement {
const blockContainer = document.createElement('div') const blockContainer = document.createElement('div')
blockContainer.classList.add('block-container') blockContainer.classList.add(`${EDITOR_PREFIX}-block-container`)
return blockContainer return blockContainer
} }

@ -1,3 +1,4 @@
import { EDITOR_PREFIX } from '../../../../../dataset/constant/Editor'
import { BlockType } from '../../../../../dataset/enum/Block' import { BlockType } from '../../../../../dataset/enum/Block'
import { IRowElement } from '../../../../../interface/Row' import { IRowElement } from '../../../../../interface/Row'
import { Draw } from '../../../Draw' import { Draw } from '../../../Draw'
@ -28,7 +29,7 @@ export class BaseBlock {
private _createBlockItem(): HTMLDivElement { private _createBlockItem(): HTMLDivElement {
const blockItem = document.createElement('div') const blockItem = document.createElement('div')
blockItem.classList.add('block-item') blockItem.classList.add(`${EDITOR_PREFIX}-block-item`)
return blockItem return blockItem
} }

@ -1,3 +1,4 @@
import { EDITOR_PREFIX } from '../../../../dataset/constant/Editor'
import { IElement, IElementPosition } from '../../../../interface/Element' import { IElement, IElementPosition } from '../../../../interface/Element'
export interface IDatePickerOption { export interface IDatePickerOption {
@ -60,25 +61,25 @@ export class DatePicker {
private _createDom(): IDatePickerDom { private _createDom(): IDatePickerDom {
const datePickerContainer = document.createElement('div') const datePickerContainer = document.createElement('div')
datePickerContainer.classList.add('date-container') datePickerContainer.classList.add(`${EDITOR_PREFIX}-date-container`)
// title-切换年月、年月显示 // title-切换年月、年月显示
const dateWrap = document.createElement('div') const dateWrap = document.createElement('div')
dateWrap.classList.add('date-wrap') dateWrap.classList.add(`${EDITOR_PREFIX}-date-wrap`)
const datePickerTitle = document.createElement('div') const datePickerTitle = document.createElement('div')
datePickerTitle.classList.add('date-title') datePickerTitle.classList.add(`${EDITOR_PREFIX}-date-title`)
const preYearTitle = document.createElement('span') const preYearTitle = document.createElement('span')
preYearTitle.classList.add('date-title__pre-year') preYearTitle.classList.add(`${EDITOR_PREFIX}-date-title__pre-year`)
preYearTitle.innerText = `<<` preYearTitle.innerText = `<<`
const preMonthTitle = document.createElement('span') const preMonthTitle = document.createElement('span')
preMonthTitle.classList.add('date-title__pre-month') preMonthTitle.classList.add(`${EDITOR_PREFIX}-date-title__pre-month`)
preMonthTitle.innerText = `<` preMonthTitle.innerText = `<`
const nowTitle = document.createElement('span') const nowTitle = document.createElement('span')
nowTitle.classList.add('date-title__now') nowTitle.classList.add(`${EDITOR_PREFIX}-date-title__now`)
const nextMonthTitle = document.createElement('span') const nextMonthTitle = document.createElement('span')
nextMonthTitle.classList.add('date-title__next-month') nextMonthTitle.classList.add(`${EDITOR_PREFIX}-date-title__next-month`)
nextMonthTitle.innerText = `>` nextMonthTitle.innerText = `>`
const nextYearTitle = document.createElement('span') const nextYearTitle = document.createElement('span')
nextYearTitle.classList.add('date-title__next-year') nextYearTitle.classList.add(`${EDITOR_PREFIX}-date-title__next-year`)
nextYearTitle.innerText = `>>` nextYearTitle.innerText = `>>`
datePickerTitle.append(preYearTitle) datePickerTitle.append(preYearTitle)
datePickerTitle.append(preMonthTitle) datePickerTitle.append(preMonthTitle)
@ -87,7 +88,7 @@ export class DatePicker {
datePickerTitle.append(nextYearTitle) datePickerTitle.append(nextYearTitle)
// week-星期显示 // week-星期显示
const datePickerWeek = document.createElement('div') const datePickerWeek = document.createElement('div')
datePickerWeek.classList.add('date-week') datePickerWeek.classList.add(`${EDITOR_PREFIX}-date-week`)
const weekList = ['日', '一', '二', '三', '四', '五', '六'] const weekList = ['日', '一', '二', '三', '四', '五', '六']
weekList.forEach(week => { weekList.forEach(week => {
const weekDom = document.createElement('span') const weekDom = document.createElement('span')
@ -96,14 +97,14 @@ export class DatePicker {
}) })
// day-天数显示 // day-天数显示
const datePickerDay = document.createElement('div') const datePickerDay = document.createElement('div')
datePickerDay.classList.add('date-day') datePickerDay.classList.add(`${EDITOR_PREFIX}-date-day`)
// 日期内容构建 // 日期内容构建
dateWrap.append(datePickerTitle) dateWrap.append(datePickerTitle)
dateWrap.append(datePickerWeek) dateWrap.append(datePickerWeek)
dateWrap.append(datePickerDay) dateWrap.append(datePickerDay)
// time-时间选择 // time-时间选择
const timeWrap = document.createElement('ul') const timeWrap = document.createElement('ul')
timeWrap.classList.add('time-wrap') timeWrap.classList.add(`${EDITOR_PREFIX}-time-wrap`)
let hourTime: HTMLOListElement let hourTime: HTMLOListElement
let minuteTime: HTMLOListElement let minuteTime: HTMLOListElement
let secondTime: HTMLOListElement let secondTime: HTMLOListElement
@ -135,15 +136,15 @@ export class DatePicker {
}) })
// menu-选择时间、现在、确定 // menu-选择时间、现在、确定
const datePickerMenu = document.createElement('div') const datePickerMenu = document.createElement('div')
datePickerMenu.classList.add('date-menu') datePickerMenu.classList.add(`${EDITOR_PREFIX}-date-menu`)
const timeMenu = document.createElement('button') const timeMenu = document.createElement('button')
timeMenu.classList.add('date-menu__time') timeMenu.classList.add(`${EDITOR_PREFIX}-date-menu__time`)
timeMenu.innerText = '时间选择' timeMenu.innerText = '时间选择'
const nowMenu = document.createElement('button') const nowMenu = document.createElement('button')
nowMenu.classList.add('date-menu__now') nowMenu.classList.add(`${EDITOR_PREFIX}-date-menu__now`)
nowMenu.innerText = '此刻' nowMenu.innerText = '此刻'
const submitMenu = document.createElement('button') const submitMenu = document.createElement('button')
submitMenu.classList.add('date-menu__submit') submitMenu.classList.add(`${EDITOR_PREFIX}-date-menu__submit`)
submitMenu.innerText = '确定' submitMenu.innerText = '确定'
datePickerMenu.append(timeMenu) datePickerMenu.append(timeMenu)
datePickerMenu.append(nowMenu) datePickerMenu.append(nowMenu)

@ -1,3 +1,4 @@
import { EDITOR_PREFIX } from '../../../../dataset/constant/Editor'
import { IEditorOption } from '../../../../interface/Editor' import { IEditorOption } from '../../../../interface/Editor'
import { IElement, IElementPosition } from '../../../../interface/Element' import { IElement, IElementPosition } from '../../../../interface/Element'
import { IPreviewerCreateResult, IPreviewerDrawOption } from '../../../../interface/Previewer' import { IPreviewerCreateResult, IPreviewerDrawOption } from '../../../../interface/Previewer'
@ -57,7 +58,7 @@ export class Previewer {
private _createResizerDom(): IPreviewerCreateResult { private _createResizerDom(): IPreviewerCreateResult {
// 拖拽边框 // 拖拽边框
const resizerSelection = document.createElement('div') const resizerSelection = document.createElement('div')
resizerSelection.classList.add('resizer-selection') resizerSelection.classList.add(`${EDITOR_PREFIX}-resizer-selection`)
resizerSelection.style.display = 'none' resizerSelection.style.display = 'none'
resizerSelection.style.borderColor = this.options.resizerColor resizerSelection.style.borderColor = this.options.resizerColor
const resizerHandleList: HTMLDivElement[] = [] const resizerHandleList: HTMLDivElement[] = []
@ -73,7 +74,7 @@ export class Previewer {
this.container.append(resizerSelection) this.container.append(resizerSelection)
// 拖拽镜像 // 拖拽镜像
const resizerImageContainer = document.createElement('div') const resizerImageContainer = document.createElement('div')
resizerImageContainer.classList.add('resizer-image') resizerImageContainer.classList.add(`${EDITOR_PREFIX}-resizer-image`)
resizerImageContainer.style.display = 'none' resizerImageContainer.style.display = 'none'
const resizerImage = document.createElement('img') const resizerImage = document.createElement('img')
resizerImageContainer.append(resizerImage) resizerImageContainer.append(resizerImage)
@ -175,7 +176,7 @@ export class Previewer {
private _drawPreviewer() { private _drawPreviewer() {
const previewerContainer = document.createElement('div') const previewerContainer = document.createElement('div')
previewerContainer.classList.add('image-previewer') previewerContainer.classList.add(`${EDITOR_PREFIX}-image-previewer`)
// 关闭按钮 // 关闭按钮
const closeBtn = document.createElement('i') const closeBtn = document.createElement('i')
closeBtn.classList.add('image-close') closeBtn.classList.add('image-close')
@ -185,7 +186,7 @@ export class Previewer {
previewerContainer.append(closeBtn) previewerContainer.append(closeBtn)
// 图片 // 图片
const imgContainer = document.createElement('div') const imgContainer = document.createElement('div')
imgContainer.classList.add('image-container') imgContainer.classList.add(`${EDITOR_PREFIX}-image-container`)
const img = document.createElement('img') const img = document.createElement('img')
img.src = this.curElementSrc img.src = this.curElementSrc
img.draggable = false img.draggable = false
@ -198,7 +199,7 @@ export class Previewer {
let scaleSize = 1 let scaleSize = 1
let rotateSize = 0 let rotateSize = 0
const menuContainer = document.createElement('div') const menuContainer = document.createElement('div')
menuContainer.classList.add('image-menu') menuContainer.classList.add(`${EDITOR_PREFIX}-image-menu`)
const zoomIn = document.createElement('i') const zoomIn = document.createElement('i')
zoomIn.classList.add('zoom-in') zoomIn.classList.add('zoom-in')
zoomIn.onclick = () => { zoomIn.onclick = () => {

@ -1,4 +1,5 @@
import { IElement } from '../../../..' import { IElement } from '../../../..'
import { EDITOR_PREFIX } from '../../../../dataset/constant/Editor'
import { TableOrder } from '../../../../dataset/enum/table/TableTool' import { TableOrder } from '../../../../dataset/enum/table/TableTool'
import { IEditorOption } from '../../../../interface/Editor' import { IEditorOption } from '../../../../interface/Editor'
import { IElementPosition } from '../../../../interface/Element' import { IElementPosition } from '../../../../interface/Element'
@ -65,17 +66,17 @@ export class TableTool {
const colList = colgroup!.map(col => col.width) const colList = colgroup!.map(col => col.width)
// 渲染行 // 渲染行
const rowContainer = document.createElement('div') const rowContainer = document.createElement('div')
rowContainer.classList.add('table-tool__row') rowContainer.classList.add(`${EDITOR_PREFIX}-table-tool__row`)
rowContainer.style.transform = `translateX(-${this.translate * scale}px)` rowContainer.style.transform = `translateX(-${this.translate * scale}px)`
for (let r = 0; r < rowList.length; r++) { for (let r = 0; r < rowList.length; r++) {
const rowHeight = rowList[r] * scale const rowHeight = rowList[r] * scale
const rowItem = document.createElement('div') const rowItem = document.createElement('div')
rowItem.classList.add('table-tool__row__item') rowItem.classList.add(`${EDITOR_PREFIX}-table-tool__row__item`)
if (r === rowIndex) { if (r === rowIndex) {
rowItem.classList.add('active') rowItem.classList.add('active')
} }
const rowItemAnchor = document.createElement('div') const rowItemAnchor = document.createElement('div')
rowItemAnchor.classList.add('table-tool__anchor') rowItemAnchor.classList.add(`${EDITOR_PREFIX}-table-tool__anchor`)
rowItemAnchor.onmousedown = (evt) => { rowItemAnchor.onmousedown = (evt) => {
this._mousedown({ this._mousedown({
evt, evt,
@ -96,17 +97,17 @@ export class TableTool {
// 渲染列 // 渲染列
const colContainer = document.createElement('div') const colContainer = document.createElement('div')
colContainer.classList.add('table-tool__col') colContainer.classList.add(`${EDITOR_PREFIX}-table-tool__col`)
colContainer.style.transform = `translateY(-${this.translate * scale}px)` colContainer.style.transform = `translateY(-${this.translate * scale}px)`
for (let c = 0; c < colList.length; c++) { for (let c = 0; c < colList.length; c++) {
const colHeight = colList[c] * scale const colHeight = colList[c] * scale
const colItem = document.createElement('div') const colItem = document.createElement('div')
colItem.classList.add('table-tool__col__item') colItem.classList.add(`${EDITOR_PREFIX}-table-tool__col__item`)
if (c === colIndex) { if (c === colIndex) {
colItem.classList.add('active') colItem.classList.add('active')
} }
const colItemAnchor = document.createElement('div') const colItemAnchor = document.createElement('div')
colItemAnchor.classList.add('table-tool__anchor') colItemAnchor.classList.add(`${EDITOR_PREFIX}-table-tool__anchor`)
colItemAnchor.onmousedown = (evt) => { colItemAnchor.onmousedown = (evt) => {
this._mousedown({ this._mousedown({
evt, evt,
@ -146,14 +147,14 @@ export class TableTool {
let startX = 0 let startX = 0
let startY = 0 let startY = 0
const anchorLine = document.createElement('div') const anchorLine = document.createElement('div')
anchorLine.classList.add('table-anchor__line') anchorLine.classList.add(`${EDITOR_PREFIX}-table-anchor__line`)
if (order === TableOrder.ROW) { if (order === TableOrder.ROW) {
anchorLine.classList.add('table-anchor__line__row') anchorLine.classList.add(`${EDITOR_PREFIX}-table-anchor__line__row`)
anchorLine.style.width = `${width}px` anchorLine.style.width = `${width}px`
startX = 0 startX = 0
startY = prePageHeight + this.mousedownY - canvasRect.top startY = prePageHeight + this.mousedownY - canvasRect.top
} else { } else {
anchorLine.classList.add('table-anchor__line__col') anchorLine.classList.add(`${EDITOR_PREFIX}-table-anchor__line__col`)
anchorLine.style.height = `${height}px` anchorLine.style.height = `${height}px`
startX = this.mousedownX - canvasRect.left startX = this.mousedownX - canvasRect.left
startY = prePageHeight startY = prePageHeight

@ -5,6 +5,7 @@ import { Cursor } from '../cursor/Cursor'
import { Control } from '../draw/control/Control' import { Control } from '../draw/control/Control'
import { Draw } from '../draw/Draw' import { Draw } from '../draw/Draw'
import { HyperlinkParticle } from '../draw/particle/HyperlinkParticle' import { HyperlinkParticle } from '../draw/particle/HyperlinkParticle'
import { DateParticle } from '../draw/particle/date/DateParticle'
import { Previewer } from '../draw/particle/previewer/Previewer' import { Previewer } from '../draw/particle/previewer/Previewer'
import { TableTool } from '../draw/particle/table/TableTool' import { TableTool } from '../draw/particle/table/TableTool'
import { RangeManager } from '../range/RangeManager' import { RangeManager } from '../range/RangeManager'
@ -22,6 +23,7 @@ export class GlobalEvent {
private tableTool: TableTool private tableTool: TableTool
private hyperlinkParticle: HyperlinkParticle private hyperlinkParticle: HyperlinkParticle
private control: Control private control: Control
private dateParticle: DateParticle
constructor(draw: Draw, canvasEvent: CanvasEvent) { constructor(draw: Draw, canvasEvent: CanvasEvent) {
this.draw = draw this.draw = draw
@ -33,6 +35,7 @@ export class GlobalEvent {
this.previewer = draw.getPreviewer() this.previewer = draw.getPreviewer()
this.tableTool = draw.getTableTool() this.tableTool = draw.getTableTool()
this.hyperlinkParticle = draw.getHyperlinkParticle() this.hyperlinkParticle = draw.getHyperlinkParticle()
this.dateParticle = draw.getDateParticle()
this.control = draw.getControl() this.control = draw.getControl()
} }
@ -81,6 +84,7 @@ export class GlobalEvent {
this.tableTool.dispose() this.tableTool.dispose()
this.hyperlinkParticle.clearHyperlinkPopup() this.hyperlinkParticle.clearHyperlinkPopup()
this.control.destroyControl() this.control.destroyControl()
this.dateParticle.clearDatePicker()
} }
public setDragState = () => { public setDragState = () => {

@ -1 +1,2 @@
export const EDITOR_COMPONENT = 'editor-component' export const EDITOR_COMPONENT = 'editor-component'
export const EDITOR_PREFIX = 'ce'

@ -609,11 +609,8 @@ ul {
margin: 80px auto; margin: 80px auto;
} }
.page-container {
width: 100%;
}
.page-container canvas { .ce-page-container canvas {
box-shadow: rgb(158 161 165 / 40%) 0px 2px 12px 0px; box-shadow: rgb(158 161 165 / 40%) 0px 2px 12px 0px;
} }
@ -761,6 +758,6 @@ ul {
left: unset; left: unset;
} }
.contextmenu-signature { .ce-contextmenu-signature {
background-image: url('./assets/images/signature.svg'); background-image: url('./assets/images/signature.svg');
} }
Loading…
Cancel
Save