@@ -34,19 +34,24 @@ export const highlightOnPage = () => {
3434 if ( div ) div . remove ( ) ;
3535 } ;
3636
37+ const createLabelText = ( element ) => {
38+ const predictedProbabilityPercent = Math . round ( element . predicted_probability * 100 ) ;
39+ return `${ predictedProbabilityPercent } %, ${ element . jdi_class_name } ` ;
40+ } ;
41+
3742 const assignType = ( element ) => {
3843 const div = document . getElementById ( element . element_id ) ;
39- div . querySelector ( ".jdn-class" ) . textContent = element . jdi_class_name ;
44+ div . querySelector ( ".jdn-class" ) . textContent = createLabelText ( element ) ;
4045 } ;
4146
4247 const changeElementName = ( element ) => {
4348 const div = document . getElementById ( element . element_id ) ;
44- div . querySelector ( ".jdn-class" ) . textContent = element . jdi_class_name ;
49+ div . querySelector ( ".jdn-class" ) . textContent = createLabelText ( element ) ;
4550 } ;
4651
4752 const drawRectangle = (
4853 element ,
49- { element_id, jdi_class_name, predicted_probability }
54+ { element_id, jdi_class_name, predicted_probability, predicted_label }
5055 ) => {
5156 const divDefaultStyle = ( rect ) => {
5257 const { top, left, height, width } = rect || { } ;
@@ -59,14 +64,39 @@ export const highlightOnPage = () => {
5964 }
6065 : { } ;
6166 } ;
62-
67+ const tooltipDefaultStyle = ( rect ) => {
68+ const { right, top, height, width} = rect ;
69+ return rect ? {
70+ right : `calc(100% - ${ right + window . pageXOffset - width / 2 } px)` ,
71+ top : `${ top + window . pageYOffset + height } px` ,
72+ } : { } ;
73+ } ;
74+ const predictedProbabilityPercent = Math . round ( predicted_probability * 100 ) ;
6375 const div = document . createElement ( "div" ) ;
6476 div . id = element_id ;
65- div . className = "jdn-highlight jdn-primary"
77+ div . className = "jdn-highlight jdn-primary" ;
6678 div . setAttribute ( "jdn-highlight" , true ) ;
67- div . innerHTML = `<div><span class="jdn-label"><span class="jdn-class">${ jdi_class_name } </span> ${ predicted_probability } </span></div>` ;
68- Object . assign ( div . style , divDefaultStyle ( element . getBoundingClientRect ( ) ) ) ;
79+ const tooltip = document . createElement ( 'div' ) ;
80+ tooltip . className = 'jdn-tooltip' ;
81+ tooltip . innerHTML = `
82+ <p><b>Name:</b> ${ predicted_label } </p>
83+ <p><b>Type:</b> ${ jdi_class_name } </p>
84+ <p><b>Prediction accuracy:</b> ${ predictedProbabilityPercent } %</p>` ;
85+ const labelContainer = document . createElement ( 'div' ) ;
86+ const label = document . createElement ( 'span' ) ;
87+ label . className = 'jdn-label' ;
88+ label . innerHTML = `<span class="jdn-class">${ predictedProbabilityPercent } %, ${ jdi_class_name } </span>` ;
89+ label . addEventListener ( 'mouseover' , ( ) => {
90+ Object . assign ( tooltip . style , tooltipDefaultStyle ( label . getBoundingClientRect ( ) ) ) ;
91+ document . body . appendChild ( tooltip ) ;
92+ } ) ;
93+ label . addEventListener ( 'mouseout' , ( ) => {
94+ document . body . removeChild ( tooltip ) ;
95+ } ) ;
6996
97+ Object . assign ( div . style , divDefaultStyle ( element . getBoundingClientRect ( ) ) ) ;
98+ labelContainer . appendChild ( label ) ;
99+ div . insertAdjacentElement ( 'afterBegin' , labelContainer ) ;
70100 div . onclick = ( ) => {
71101 chrome . runtime . sendMessage ( {
72102 message : "TOGGLE_ELEMENT" ,
0 commit comments