mirror of
https://bitbucket.org/wisemapping/wisemapping-frontend.git
synced 2024-11-11 01:43:23 +01:00
Work IP
This commit is contained in:
parent
60fffe2c40
commit
5d3f04fe77
@ -16,13 +16,12 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import Toolkit from './Toolkit';
|
||||
import TransformUtil from './peer/utils/TransformUtils';
|
||||
import Toolkit from './Toolkit';
|
||||
|
||||
class Font {
|
||||
constructor(fontFamily, textPeer) {
|
||||
this.peer = Toolkit[`create${fontFamily}Font`]();
|
||||
this._textPeer = textPeer;
|
||||
constructor(fontName) {
|
||||
this.peer = Toolkit.createFontByName(fontName);
|
||||
}
|
||||
|
||||
getHtmlSize() {
|
||||
@ -51,10 +50,6 @@ class Font {
|
||||
return this.peer.getWeight();
|
||||
}
|
||||
|
||||
getFontFamily() {
|
||||
return this.peer.getFontFamily();
|
||||
}
|
||||
|
||||
setSize(size) {
|
||||
return this.peer.setSize(size);
|
||||
}
|
||||
@ -67,18 +62,20 @@ class Font {
|
||||
return this.peer.setWeight(weight);
|
||||
}
|
||||
|
||||
getFont() {
|
||||
setFontName(fontName) {
|
||||
return this.peer.setFontName(fontName);
|
||||
}
|
||||
|
||||
getFontName() {
|
||||
return this.peer.getFont();
|
||||
}
|
||||
|
||||
getFontPeer() {
|
||||
return this.peer;
|
||||
}
|
||||
|
||||
getWidthMargin() {
|
||||
return this.peer.getWidthMargin();
|
||||
}
|
||||
}
|
||||
|
||||
Font.ARIAL = 'Arial';
|
||||
Font.TIMES = 'Times';
|
||||
Font.TAHOMA = 'Tahoma';
|
||||
Font.VERDANA = 'Verdana';
|
||||
|
||||
export default Font;
|
||||
|
@ -17,13 +17,14 @@
|
||||
*/
|
||||
|
||||
import { $assert } from '@wisemapping/core-js';
|
||||
import Font from './Font';
|
||||
import ElementClass from './ElementClass';
|
||||
import Toolkit from './Toolkit';
|
||||
import Font from './Font';
|
||||
|
||||
class Text extends ElementClass {
|
||||
constructor(attributes) {
|
||||
const peer = Toolkit.createText(Font);
|
||||
const defaultFont = new Font('Arial');
|
||||
const peer = Toolkit.createText(defaultFont);
|
||||
super(peer, attributes);
|
||||
}
|
||||
|
||||
@ -53,6 +54,10 @@ class Text extends ElementClass {
|
||||
this.peer.setFont(font, size, style, weight);
|
||||
}
|
||||
|
||||
setFontName(fontName) {
|
||||
this.peer.setFontName(fontName);
|
||||
}
|
||||
|
||||
setColor(color) {
|
||||
this.peer.setColor(color);
|
||||
}
|
||||
@ -69,10 +74,6 @@ class Text extends ElementClass {
|
||||
this.peer.setWeight(weight);
|
||||
}
|
||||
|
||||
setFontFamily(family) {
|
||||
this.peer.setFontFamily(family);
|
||||
}
|
||||
|
||||
getFont() {
|
||||
return this.peer.getFont();
|
||||
}
|
||||
@ -81,8 +82,8 @@ class Text extends ElementClass {
|
||||
this.peer.setSize(size);
|
||||
}
|
||||
|
||||
getHtmlFontSize() {
|
||||
return this.peer.getHtmlFontSize();
|
||||
getHtmlFontSize(scale) {
|
||||
return this.peer.getHtmlFontSize(scale);
|
||||
}
|
||||
|
||||
getWidth() {
|
||||
|
@ -29,8 +29,14 @@ import ArialFont from './peer/svg/ArialFont';
|
||||
import TimesFont from './peer/svg/TimesFont';
|
||||
import VerdanaFont from './peer/svg/VerdanaFont';
|
||||
import TahomaFont from './peer/svg/TahomaFont';
|
||||
import BrushScriptMTFont from './peer/svg/BrushScriptFont';
|
||||
|
||||
class Toolkit {
|
||||
static createFontByName(fontName) {
|
||||
const font = fontName.replaceAll(' ', '');
|
||||
return Toolkit[`create${font}Font`]();
|
||||
}
|
||||
|
||||
static createWorkspace(element) {
|
||||
return new WorkspacePeer(element);
|
||||
}
|
||||
@ -59,8 +65,8 @@ class Toolkit {
|
||||
return new ArrowPeer();
|
||||
}
|
||||
|
||||
static createText(Font) {
|
||||
return new TextPeer(Font);
|
||||
static createText(font) {
|
||||
return new TextPeer(font.getFontPeer());
|
||||
}
|
||||
|
||||
static createImage() {
|
||||
@ -86,6 +92,10 @@ class Toolkit {
|
||||
static createTahomaFont() {
|
||||
return new TahomaFont();
|
||||
}
|
||||
|
||||
static createBrushScriptMTFont() {
|
||||
return new BrushScriptMTFont();
|
||||
}
|
||||
}
|
||||
|
||||
export default Toolkit;
|
||||
|
@ -15,21 +15,11 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import Font from './Font';
|
||||
import FontPeer from './FontPeer';
|
||||
|
||||
class ArialFont extends Font {
|
||||
class ArialFont extends FontPeer {
|
||||
constructor() {
|
||||
super();
|
||||
this._fontFamily = 'Arial';
|
||||
}
|
||||
|
||||
getFontFamily() {
|
||||
return this._fontFamily;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line class-methods-use-this
|
||||
getFont() {
|
||||
return Font.ARIAL;
|
||||
super('Arial');
|
||||
}
|
||||
}
|
||||
|
||||
|
27
packages/web2d/src/components/peer/svg/BrushScriptFont.js
Normal file
27
packages/web2d/src/components/peer/svg/BrushScriptFont.js
Normal file
@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright [2021] [wisemapping]
|
||||
*
|
||||
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
|
||||
* It is basically the Apache License, Version 2.0 (the "License") plus the
|
||||
* "powered by wisemapping" text requirement on every single page;
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the license at
|
||||
*
|
||||
* http://www.wisemapping.org/license
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import FontPeer from './FontPeer';
|
||||
|
||||
class BrushScriptMTFont extends FontPeer {
|
||||
// eslint-disable-next-line class-methods-use-this
|
||||
constructor() {
|
||||
super('Brush Script MT');
|
||||
}
|
||||
}
|
||||
|
||||
export default BrushScriptMTFont;
|
@ -17,11 +17,12 @@
|
||||
*/
|
||||
import { $assert, $defined } from '@wisemapping/core-js';
|
||||
|
||||
class Font {
|
||||
constructor() {
|
||||
class FontPeer {
|
||||
constructor(fontName) {
|
||||
this._size = 10;
|
||||
this._style = 'normal';
|
||||
this._weight = 'normal';
|
||||
this._fontName = fontName;
|
||||
}
|
||||
|
||||
init(args) {
|
||||
@ -89,6 +90,11 @@ class Font {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line class-methods-use-this
|
||||
getFontName() {
|
||||
return this._fontName;
|
||||
}
|
||||
}
|
||||
|
||||
export default Font;
|
||||
export default FontPeer;
|
@ -15,21 +15,11 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import Font from './Font';
|
||||
import FontPeer from './FontPeer';
|
||||
|
||||
class TahomaFont extends Font {
|
||||
class TahomaFont extends FontPeer {
|
||||
constructor() {
|
||||
super();
|
||||
this._fontFamily = 'Tahoma';
|
||||
}
|
||||
|
||||
getFontFamily() {
|
||||
return this._fontFamily;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line class-methods-use-this
|
||||
getFont() {
|
||||
return Font.TAHOMA;
|
||||
super('Verdana');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -18,14 +18,14 @@
|
||||
import { $defined } from '@wisemapping/core-js';
|
||||
import ElementPeer from './ElementPeer';
|
||||
import { getPosition } from '../utils/DomUtils';
|
||||
import Toolkit from '../../Toolkit';
|
||||
|
||||
class TextPeer extends ElementPeer {
|
||||
constructor(Font) {
|
||||
constructor(fontPeer) {
|
||||
const svgElement = window.document.createElementNS(ElementPeer.svgNamespace, 'text');
|
||||
super(svgElement);
|
||||
this.Font = Font;
|
||||
this._position = { x: 0, y: 0 };
|
||||
this._font = new Font('Arial', this);
|
||||
this._font = fontPeer;
|
||||
}
|
||||
|
||||
append(element) {
|
||||
@ -84,10 +84,11 @@ class TextPeer extends ElementPeer {
|
||||
return getPosition(this._native);
|
||||
}
|
||||
|
||||
setFont(font, size, style, weight) {
|
||||
if ($defined(font)) {
|
||||
this._font = new this.Font(font, this);
|
||||
setFont(fontName, size, style, weight) {
|
||||
if ($defined(fontName)) {
|
||||
this._font = Toolkit.createFontByName(fontName);
|
||||
}
|
||||
|
||||
if ($defined(style)) {
|
||||
this._font.setStyle(style);
|
||||
}
|
||||
@ -101,7 +102,7 @@ class TextPeer extends ElementPeer {
|
||||
}
|
||||
|
||||
_updateFontStyle() {
|
||||
this._native.setAttribute('font-family', this._font.getFontFamily());
|
||||
this._native.setAttribute('font-family', this._font.getFontName());
|
||||
this._native.setAttribute('font-size', this._font.getGraphSize());
|
||||
this._native.setAttribute('font-style', this._font.getStyle());
|
||||
this._native.setAttribute('font-weight', this._font.getWeight());
|
||||
@ -134,9 +135,9 @@ class TextPeer extends ElementPeer {
|
||||
this._updateFontStyle();
|
||||
}
|
||||
|
||||
setFontFamily(family) {
|
||||
setFontName(fontName) {
|
||||
const oldFont = this._font;
|
||||
this._font = new this.Font(family, this);
|
||||
this._font = Toolkit.createFontByName(fontName);
|
||||
this._font.setSize(oldFont.getSize());
|
||||
this._font.setStyle(oldFont.getStyle());
|
||||
this._font.setWeight(oldFont.getWeight());
|
||||
@ -145,7 +146,7 @@ class TextPeer extends ElementPeer {
|
||||
|
||||
getFont() {
|
||||
return {
|
||||
font: this._font.getFont(),
|
||||
font: this._font.getFontName(),
|
||||
size: parseInt(this._font.getSize(), 10),
|
||||
style: this._font.getStyle(),
|
||||
weight: this._font.getWeight(),
|
||||
@ -158,21 +159,10 @@ class TextPeer extends ElementPeer {
|
||||
}
|
||||
|
||||
getWidth() {
|
||||
let computedWidth;
|
||||
// Firefox hack for this issue:http://stackoverflow.com/questions/6390065/doing-ajax-updates-in-svg-breaks-getbbox-is-there-a-workaround
|
||||
try {
|
||||
computedWidth = this._native.getBBox().width;
|
||||
// Chrome bug is producing this error, oly during page loading.
|
||||
// Remove the hack if it works. The issue seems to be
|
||||
// caused when the element is hidden. I don't know why, but it works ...
|
||||
if (computedWidth === 0) {
|
||||
const bbox = this._native.getBBox();
|
||||
computedWidth = bbox.width;
|
||||
}
|
||||
} catch (e) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.error(e);
|
||||
computedWidth = 10;
|
||||
let computedWidth = this._native.getBBox().width;
|
||||
if (computedWidth === 0) {
|
||||
const bbox = this._native.getBBox();
|
||||
computedWidth = bbox.width;
|
||||
}
|
||||
|
||||
let width = parseInt(computedWidth, 10);
|
||||
@ -181,19 +171,12 @@ class TextPeer extends ElementPeer {
|
||||
}
|
||||
|
||||
getHeight() {
|
||||
// Firefox hack for this
|
||||
// issue:http://stackoverflow.com/questions/6390065/doing-ajax-updates-in-svg-breaks-getbbox-is-there-a-workaround
|
||||
let computedHeight;
|
||||
try {
|
||||
computedHeight = this._native.getBBox().height;
|
||||
} catch (e) {
|
||||
computedHeight = 10;
|
||||
}
|
||||
const computedHeight = this._native.getBBox().height;
|
||||
return parseInt(computedHeight, 10);
|
||||
}
|
||||
|
||||
getHtmlFontSize() {
|
||||
return this._font.getHtmlSize();
|
||||
getHtmlFontSize(scale) {
|
||||
return this._font.getHtmlSize(scale);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -15,21 +15,11 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import Font from './Font';
|
||||
import FontPeer from './FontPeer';
|
||||
|
||||
class TimesFont extends Font {
|
||||
class TimesFont extends FontPeer {
|
||||
constructor() {
|
||||
super();
|
||||
this._fontFamily = 'Times';
|
||||
}
|
||||
|
||||
getFontFamily() {
|
||||
return this._fontFamily;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line class-methods-use-this
|
||||
getFont() {
|
||||
return Font.TIMES;
|
||||
super('Times');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -15,21 +15,11 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import Font from './Font';
|
||||
import FontPeer from './FontPeer';
|
||||
|
||||
class VerdanaFont extends Font {
|
||||
class VerdanaFont extends FontPeer {
|
||||
constructor() {
|
||||
super();
|
||||
this._fontFamily = 'Verdana';
|
||||
}
|
||||
|
||||
getFontFamily() {
|
||||
return this._fontFamily;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line class-methods-use-this
|
||||
getFont() {
|
||||
return Font.VERDANA;
|
||||
super('Verdana');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
<td>Tahoma</td>
|
||||
<td>Verdana</td>
|
||||
<td>Times</td>
|
||||
<td>Brush Script MT</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@ -32,6 +33,9 @@
|
||||
<td>
|
||||
<div id="multi3"></div>
|
||||
</td>
|
||||
<td>
|
||||
<div id="multi4"></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
@ -49,6 +53,9 @@
|
||||
<td>
|
||||
<div id="amulti3"></div>
|
||||
</td>
|
||||
<td>
|
||||
<div id="amulti4"></div>
|
||||
</td>
|
||||
</tr>
|
||||
<!--**************************************************************************-->
|
||||
</tbody>
|
||||
|
@ -1,11 +1,11 @@
|
||||
import $ from 'jquery';
|
||||
import {
|
||||
Toolkit, Workspace, Text,
|
||||
Workspace, Text,
|
||||
} from '../../src';
|
||||
|
||||
global.$ = $;
|
||||
|
||||
function multiline(text, family, elemId) {
|
||||
function multiline(text, fontName, elemId) {
|
||||
const workspace = new Workspace();
|
||||
workspace.setSize('200px', '240px');
|
||||
workspace.setCoordSize('200', '240');
|
||||
@ -16,7 +16,7 @@ function multiline(text, family, elemId) {
|
||||
workspace.append(wText);
|
||||
|
||||
wText.setText(text);
|
||||
wText.setFont(family, size, 'bold');
|
||||
wText.setFont(fontName, size, 'bold');
|
||||
wText.setPosition(30, 50 * i);
|
||||
wText.setColor('blue');
|
||||
});
|
||||
@ -45,11 +45,11 @@ function alignments(text, family, elemId) {
|
||||
}
|
||||
|
||||
// Multine tests ...
|
||||
['Arial', 'Tahoma', 'Verdana', 'Times'].forEach((family, i) => {
|
||||
multiline('This multine text.\nLine 1 :)\nLine2', family, `multi${i}`);
|
||||
['Arial', 'Tahoma', 'Verdana', 'Times', 'Brush Script MT'].forEach((fontName, i) => {
|
||||
multiline('This multine text.\nLine 1 :)\nLine2', fontName, `multi${i}`);
|
||||
});
|
||||
|
||||
// Multine tests and alingments .. ...
|
||||
['Arial', 'Tahoma', 'Verdana', 'Times'].forEach((family, i) => {
|
||||
alignments('This multine text.\nThis is the long line just because :)\nShort line', family, `amulti${i}`);
|
||||
['Arial', 'Tahoma', 'Verdana', 'Times', 'Brush Script MT'].forEach((fontName, i) => {
|
||||
alignments('This multine text.\nThis is the long line just because :)\nShort line', fontName, `amulti${i}`);
|
||||
});
|
||||
|
@ -18,7 +18,7 @@ const textTestHelper = function textTestHelper(coordSize, textval, font, fontSiz
|
||||
const workspace = new Workspace();
|
||||
|
||||
workspace.setSize('300px', '100px');
|
||||
workspace.setCoordSize('coordSize', coordSize);
|
||||
workspace.setCoordSize(coordSize, coordSize);
|
||||
workspace.setCoordOrigin(0, 0);
|
||||
workspace.addItAsChildTo($(`#${htmlElemId}`));
|
||||
|
||||
@ -36,7 +36,7 @@ const textTestHelper = function textTestHelper(coordSize, textval, font, fontSiz
|
||||
span.setAttribute('id', `textoHTML${iesimo}`);
|
||||
const textsize = `${textval} - Scale: ${scale.height}`;
|
||||
const textHtml = document.createTextNode(textsize);
|
||||
const fontSize = text.getHtmlFontSize();
|
||||
const fontSize = text.getHtmlFontSize(textsize);
|
||||
span.append(textHtml);
|
||||
span.setAttribute('style', `font-weight:${modifier};font-style: ${style}; font-size:${fontSize}pt; font-family: ${font};width:30;height:30;`);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user