1+ // Import Third-party Dependencies
2+ import { LitElement , html , css } from "lit" ;
3+ import { classMap } from "lit/directives/class-map.js" ;
4+
15// Import Internal Dependencies
26import * as utils from "../../common/utils.js" ;
37import { EVENTS } from "../../core/events.js" ;
8+ import "../icon/icon.js" ;
9+
10+ export class Locker extends LitElement {
11+ static styles = css `
12+ #network-locker {
13+ position: absolute;
14+ bottom: 10px;
15+ right: 10px;
16+ z-index: 30;
17+ display: flex;
18+ height: 30px;
19+ border-radius: 4px;
20+ align-items: center;
21+ box-sizing: border-box;
22+ overflow: hidden;
23+ background-color: var(--primary);
24+ transition: 0.3s all linear;
25+ cursor: pointer;
26+ }
27+
28+ #network-locker:not(.enabled) {
29+ background-color: var(--primary);
30+ }
31+
32+ #network-locker.enabled {
33+ background-color: #af2222;
34+ }
35+
36+ #network-locker> div {
37+ height: inherit;
38+ padding: 0 5px;
39+ display: flex;
40+ align-items: center;
41+ border-radius: 4px;
42+ margin-right: 10px;
43+ transition: 0.3s all linear;
44+ }
45+
46+ #network-locker> div> nsecure-icon {
47+ margin: 0;
48+ transform: translateX(3px);
49+ }
50+
51+
52+ #network-locker> div:not(.enabled) {
53+ background-color: var(--primary-lighter);
54+ }
55+
56+ #network-locker> div.enabled {
57+ background-color: #cb3d3d;
58+ }
59+
60+ #network-locker> p {
61+ font-family: mononoki;
62+ padding-right: 10px;
63+ display: flex;
64+ align-items: center;
65+ height: inherit;
66+ text-transform: capitalize;
67+ }
68+ ` ;
69+
70+ static get properties ( ) {
71+ return {
72+ locked : { type : Boolean } ,
73+ unlockAuthorized : { type : Boolean } ,
74+ nsn : { type : Object } ,
75+ isNetworkViewHidden : { type : Boolean }
76+ } ;
77+ }
478
5- export class Locker {
6- constructor ( nsn ) {
7- this . dom = document . getElementById ( "network-locker" ) ;
8- this . networkView = document . getElementById ( "network--view" ) ;
9- this . nsn = nsn ;
79+ constructor ( ) {
80+ super ( ) ;
1081 this . locked = false ;
1182 this . unlockAuthorized = true ;
12- this . renderUnlock ( ) ;
83+ this . isNetworkViewHidden = false ;
84+ this . hideNetworkView = ( ) => {
85+ if ( this . isNetworkViewHidden ) {
86+ return ;
87+ }
88+ this . isNetworkViewHidden = true ;
89+ } ;
1390
14- document . addEventListener ( "keydown" , ( event ) => {
15- const isNetworkViewHidden = this . networkView . classList . contains ( "hidden" ) ;
91+ this . showNetworkView = ( ) => {
92+ if ( ! this . isNetworkViewHidden ) {
93+ return ;
94+ }
95+ this . isNetworkViewHidden = false ;
96+ } ;
97+
98+ this . onKeyDown = ( event ) => {
1699 const isTargetInput = event . target . tagName === "INPUT" ;
17100 const isTargetPopup = event . target . id === "popup--background" ;
18- if ( isNetworkViewHidden || isTargetInput || isTargetPopup ) {
101+ if ( this . isNetworkViewHidden || isTargetInput || isTargetPopup ) {
19102 return ;
20103 }
21104
@@ -26,9 +109,61 @@ export class Locker {
26109 break ;
27110 }
28111 }
112+ } ;
113+ }
114+
115+ connectedCallback ( ) {
116+ super . connectedCallback ( ) ;
117+ window . addEventListener ( EVENTS . NETWORK_VIEW_HID , this . hideNetworkView ) ;
118+ window . addEventListener ( EVENTS . NETWORK_VIEW_SHOWED , this . showNetworkView ) ;
119+ document . addEventListener ( "keydown" , this . onKeyDown ) ;
120+ }
121+
122+ disconnectedCallback ( ) {
123+ window . removeEventListener ( EVENTS . NETWORK_VIEW_HID , this . hideNetworkView ) ;
124+ window . removeEventListener ( EVENTS . NETWORK_VIEW_SHOWED , this . showNetworkView ) ;
125+ document . removeEventListener ( "keydown" , this . onKeyDown ) ;
126+ super . disconnectedCallback ( ) ;
127+ }
128+
129+ updated ( changedProperties ) {
130+ if ( changedProperties . has ( "nsn" ) ) {
131+ const oldNsn = changedProperties . get ( "nsn" ) ;
132+
133+ if ( oldNsn ) {
134+ oldNsn . network . off ( "highlight_done" , this . highlightDone ) ;
135+ }
136+
137+ if ( this . nsn ) {
138+ this . nsn . network . on ( "highlight_done" , this . highlightDone ) ;
139+ }
140+ }
141+ }
142+
143+ render ( ) {
144+ const networkLockerClasses = classMap ( {
145+ enabled : this . locked
29146 } ) ;
30- this . dom . addEventListener ( "click" , ( ) => this . auto ( ) ) ;
31- this . nsn . network . on ( "highlight_done" , this . highlightDone . bind ( this ) ) ;
147+ const iconClasses = classMap ( {
148+ enabled : this . locked
149+ } ) ;
150+
151+ return html `< div @click =${ this . auto } class =${ networkLockerClasses } id="network-locker">
152+ < div class =${ iconClasses } >
153+ < nsecure-icon name =${ this . locked ? "lock" : "unlock" } > </ nsecure-icon >
154+ </ div >
155+ < p > ${ this . locked ? window . i18n [ utils . currentLang ( ) ] . network . locked
156+ : window . i18n [ utils . currentLang ( ) ] . network . unlocked } </ p >
157+ </ div > ` ;
158+ }
159+
160+ auto ( ) {
161+ // Refuse locking if there is no multi selections
162+ if ( this . nsn . lastHighlightedIds === null ) {
163+ return ;
164+ }
165+
166+ this [ this . locked ? "unlock" : "lock" ] ( ) ;
32167 }
33168
34169 highlightDone ( ) {
@@ -45,19 +180,9 @@ export class Locker {
45180 this . unlock ( ) ;
46181 }
47182
48- auto ( ) {
49- // Refuse locking if there is no multi selections
50- if ( this . nsn . lastHighlightedIds === null ) {
51- return ;
52- }
53-
54- this [ this . locked ? "unlock" : "lock" ] ( ) ;
55- }
56-
57183 lock ( ) {
58184 if ( ! this . locked ) {
59185 console . log ( "[LOCKER] lock triggered" ) ;
60- this . renderLock ( ) ;
61186 this . locked = true ;
62187 window . dispatchEvent ( new CustomEvent ( EVENTS . LOCKED , { composed : true } ) ) ;
63188 }
@@ -69,7 +194,6 @@ export class Locker {
69194 }
70195
71196 console . log ( "[LOCKER] unlock triggered" ) ;
72- this . renderUnlock ( ) ;
73197 this . locked = false ;
74198 window . dispatchEvent ( new CustomEvent ( EVENTS . UNLOCKED , { composed : true } ) ) ;
75199
@@ -83,26 +207,6 @@ export class Locker {
83207 this . nsn . neighbourHighlight ( selectedNode , window . i18n [ utils . currentLang ( ) ] ) ;
84208 }
85209 }
86-
87- renderLock ( ) {
88- this . dom . classList . add ( "enabled" ) ;
89- this . dom . querySelector ( "p" ) . textContent = window . i18n [ utils . currentLang ( ) ] . network . locked ;
90- this . networkView . classList . add ( "locked" ) ;
91-
92- const iconElement = this . dom . querySelector ( "i" ) ;
93- iconElement . classList . remove ( "icon-lock-open" ) ;
94- iconElement . classList . add ( "icon-lock" ) ;
95- iconElement . classList . add ( "enabled" ) ;
96- }
97-
98- renderUnlock ( ) {
99- this . dom . classList . remove ( "enabled" ) ;
100- this . dom . querySelector ( "p" ) . textContent = window . i18n [ utils . currentLang ( ) ] . network . unlocked ;
101- this . networkView . classList . remove ( "locked" ) ;
102-
103- const iconElement = this . dom . querySelector ( "i" ) ;
104- iconElement . classList . remove ( "icon-lock" ) ;
105- iconElement . classList . remove ( "enabled" ) ;
106- iconElement . classList . add ( "icon-lock-open" ) ;
107- }
108210}
211+
212+ customElements . define ( "nsecure-locker" , Locker ) ;
0 commit comments