Mentions légales du service
Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
E
eScriptorium
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Container registry
Model registry
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
scripta
eScriptorium
Commits
c2514d25
Commit
c2514d25
authored
4 years ago
by
Olivier Masson
Browse files
Options
Downloads
Patches
Plain Diff
Update DiploLine.vue
parent
48c706b7
Branches
OM_dilopanel__background_colouring_according_specified_linked_regions
No related tags found
1 merge request
!79
feature: background colouring in diplomatic panel according to specific regions
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
front/vue/components/DiploLine.vue
+207
-1
207 additions, 1 deletion
front/vue/components/DiploLine.vue
with
207 additions
and
1 deletion
front/vue/components/DiploLine.vue
+
207
−
1
View file @
c2514d25
...
@@ -25,6 +25,21 @@ export default Vue.extend({
...
@@ -25,6 +25,21 @@ export default Vue.extend({
this
.
$parent
.
appendLine
();
this
.
$parent
.
appendLine
();
if
(
this
.
line
.
currentTrans
)
this
.
setElContent
(
this
.
line
.
currentTrans
.
content
);
if
(
this
.
line
.
currentTrans
)
this
.
setElContent
(
this
.
line
.
currentTrans
.
content
);
}.
bind
(
this
));
}.
bind
(
this
));
// load colors, regarding user profile and/or region types
let
beSettings
=
userProfile
.
get
(
"
baseline-editor-
"
+
this
.
$store
.
state
.
document
.
id
)
||
{};
this
.
regionColors
=
beSettings
[
"
color-regions
"
]
||
{};
// if a coloring attribute exists, will use it
this
.
regionTypes
=
this
.
$store
.
state
.
document
.
types
.
regions
.
map
((
t
)
=>
t
.
name
);
// or, create region colors using the same algorithm than for segmentation panel for regions:
let
basicColor
=
'
#11FF76
'
;
// same value used from baseline-editor.js
for
(
let
index
in
this
.
regionTypes
)
{
let
type
=
this
.
regionTypes
[
index
];
if
(
this
.
regionColors
[
type
]
==
null
)
{
this
.
regionColors
[
type
]
=
this
.
changeHue
(
basicColor
,
3
*
(
index
+
1
));
}
}
},
},
beforeDestroy
()
{
beforeDestroy
()
{
let
el
=
this
.
getEl
();
let
el
=
this
.
getEl
();
...
@@ -54,13 +69,204 @@ export default Vue.extend({
...
@@ -54,13 +69,204 @@ export default Vue.extend({
setElContent
(
content
)
{
setElContent
(
content
)
{
let
line
=
this
.
getEl
();
let
line
=
this
.
getEl
();
if
(
line
)
line
.
textContent
=
content
;
if
(
line
)
line
.
textContent
=
content
;
// additional code to set/display background-colors when some lines are linked to some specific region type:
let
regionType
=
this
.
getRegionType
();
// return the string of the type / null when no region linked
if
(
regionType
!=
null
){
let
rgb
=
this
.
regionColors
[
regionType
];
let
r
=
rgb
[
0
];
let
g
=
rgb
[
1
];
let
b
=
rgb
[
2
];
let
hexa
=
this
.
rgb2hex
(
r
,
g
,
b
);
let
cmyk
=
this
.
rgb2cmyk
(
r
,
g
,
b
);
cmyk
=
'
cmyk(
'
+
cmyk
.
c
+
'
,
'
+
cmyk
.
m
+
'
,
'
+
cmyk
.
y
+
'
,
'
+
cmyk
.
k
+
'
)
'
;
// would give better results and nearest to svg colors but not working
rgb
=
"
rgb(
"
+
r
+
"
,
"
+
g
+
"
,
"
+
b
+
"
)
"
;
// desaturate colors: more suitable for backgrounuds when reading
let
sat
=
0.6
;
var
gray
=
r
*
0.3086
+
g
*
0.6094
+
b
*
0.0820
;
r
=
Math
.
round
(
r
*
sat
+
gray
*
(
1
-
sat
));
g
=
Math
.
round
(
g
*
sat
+
gray
*
(
1
-
sat
));
b
=
Math
.
round
(
b
*
sat
+
gray
*
(
1
-
sat
));
let
rgba
=
"
rgba(
"
+
r
+
"
,
"
+
g
+
"
,
"
+
b
+
"
, 0.2)
"
;
line
.
style
.
backgroundColor
=
rgba
;
// possible values: hexa,rgb,rgba (allows opacity),(cmyk)
// to display the region type by the nav when mouseoverring: -
// - could next do this in a more accurate way:
// maybe display a semi-transparent fixed div, disappearing after few second and reappearing when scrolling, for example -
line
.
title
=
regionType
;
}
},
},
getRegion
()
{
getRegion
()
{
return
this
.
$store
.
state
.
regions
.
all
.
findIndex
(
r
=>
r
.
pk
==
this
.
line
.
region
);
return
this
.
$store
.
state
.
regions
.
all
.
findIndex
(
r
=>
r
.
pk
==
this
.
line
.
region
);
},
getRegionType
()
{
let
regions
=
this
.
$store
.
state
.
regions
.
all
;
for
(
var
i
=
0
;
i
<
regions
.
length
;
i
++
)
{
var
r
=
regions
[
i
];
if
(
r
.
pk
==
this
.
line
.
region
){
return
r
.
type
;
}
}
return
null
;
// no linked region type has been found
},
// coloring computation methods (one sample from basline-editor methods):
changeHue
(
rgb
,
degree
)
{
// exepcts a string and returns an object
function
rgbToHSL
(
rgb
)
{
// strip the leading # if it's there
rgb
=
rgb
.
replace
(
/^
\s
*#|
\s
*$/g
,
''
);
// convert 3 char codes --> 6, e.g. `E0F` --> `EE00FF`
if
(
rgb
.
length
==
3
){
rgb
=
rgb
.
replace
(
/
(
.
)
/g
,
'
$1$1
'
);
}
var
r
=
parseInt
(
rgb
.
substr
(
0
,
2
),
16
)
/
255
,
g
=
parseInt
(
rgb
.
substr
(
2
,
2
),
16
)
/
255
,
b
=
parseInt
(
rgb
.
substr
(
4
,
2
),
16
)
/
255
,
cMax
=
Math
.
max
(
r
,
g
,
b
),
cMin
=
Math
.
min
(
r
,
g
,
b
),
delta
=
cMax
-
cMin
,
l
=
(
cMax
+
cMin
)
/
2
,
h
=
0
,
s
=
0
;
if
(
delta
==
0
)
{
h
=
0
;
}
else
if
(
cMax
==
r
)
{
h
=
60
*
(((
g
-
b
)
/
delta
)
%
6
);
}
else
if
(
cMax
==
g
)
{
h
=
60
*
(((
b
-
r
)
/
delta
)
+
2
);
}
else
{
h
=
60
*
(((
r
-
g
)
/
delta
)
+
4
);
}
if
(
delta
==
0
)
{
s
=
0
;
}
else
{
s
=
(
delta
/
(
1
-
Math
.
abs
(
2
*
l
-
1
)))
}
return
{
h
:
h
,
s
:
s
,
l
:
l
}
}
// expects an object and returns a string
function
hslToRGB
(
hsl
)
{
var
h
=
hsl
.
h
,
s
=
hsl
.
s
,
l
=
hsl
.
l
,
c
=
(
1
-
Math
.
abs
(
2
*
l
-
1
))
*
s
,
x
=
c
*
(
1
-
Math
.
abs
((
h
/
60
)
%
2
-
1
)),
m
=
l
-
c
/
2
,
r
,
g
,
b
;
if
(
h
<
60
)
{
r
=
c
;
g
=
x
;
b
=
0
;
}
else
if
(
h
<
120
)
{
r
=
x
;
g
=
c
;
b
=
0
;
}
else
if
(
h
<
180
)
{
r
=
0
;
g
=
c
;
b
=
x
;
}
else
if
(
h
<
240
)
{
r
=
0
;
g
=
x
;
b
=
c
;
}
else
if
(
h
<
300
)
{
r
=
x
;
g
=
0
;
b
=
c
;
}
else
{
r
=
c
;
g
=
0
;
b
=
x
;
}
r
=
normalize_rgb_value
(
r
,
m
);
g
=
normalize_rgb_value
(
g
,
m
);
b
=
normalize_rgb_value
(
b
,
m
);
// return rgb2hex(r,g,b);
return
[
r
,
g
,
b
];
}
function
normalize_rgb_value
(
color
,
m
)
{
color
=
Math
.
floor
((
color
+
m
)
*
255
);
if
(
color
<
0
)
{
color
=
0
;
}
return
color
;
}
var
hsl
=
rgbToHSL
(
rgb
);
hsl
.
h
+=
degree
;
if
(
hsl
.
h
>
360
)
{
hsl
.
h
-=
360
;
}
else
if
(
hsl
.
h
<
0
)
{
hsl
.
h
+=
360
;
}
return
hslToRGB
(
hsl
);
},
rgb2hex
(
r
,
g
,
b
)
{
return
"
#
"
+
((
1
<<
24
)
+
(
r
<<
16
)
+
(
g
<<
8
)
+
b
).
toString
(
16
).
slice
(
1
);
},
rgb2cmyk
(
r
,
g
,
b
,
normalized
){
var
c
=
1
-
(
r
/
255
);
var
m
=
1
-
(
g
/
255
);
var
y
=
1
-
(
b
/
255
);
var
k
=
Math
.
min
(
c
,
Math
.
min
(
m
,
y
));
c
=
(
c
-
k
)
/
(
1
-
k
);
m
=
(
m
-
k
)
/
(
1
-
k
);
y
=
(
y
-
k
)
/
(
1
-
k
);
if
(
!
normalized
){
c
=
Math
.
round
(
c
*
10000
)
/
100
;
m
=
Math
.
round
(
m
*
10000
)
/
100
;
y
=
Math
.
round
(
y
*
10000
)
/
100
;
k
=
Math
.
round
(
k
*
10000
)
/
100
;
}
c
=
isNaN
(
c
)
?
0
:
c
;
m
=
isNaN
(
m
)
?
0
:
m
;
y
=
isNaN
(
y
)
?
0
:
y
;
k
=
isNaN
(
k
)
?
0
:
k
;
return
{
c
:
Math
.
round
(
c
)
+
'
%
'
,
m
:
Math
.
round
(
m
)
+
'
%
'
,
y
:
Math
.
round
(
y
)
+
'
%
'
,
k
:
Math
.
round
(
k
)
+
'
%
'
}
}
}
}
}
});
});
</
script
>
</
script
>
<
style
scoped
>
<
style
scoped
>
</
style
>
</
style
>
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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