@@ -2,20 +2,55 @@ import Darkmode, { IS_BROWSER } from './drkmd'
2
2
export default Darkmode
3
3
4
4
const detect = ( ) => {
5
- const elem = document . querySelector ( '[data-drkmd]' )
5
+ const optsElem = document . querySelector ( '[data-drkmd-opts]' )
6
+ const attachBtnElem = document . querySelector ( '[data-drkmd-attach]' )
6
7
7
- if ( ! elem ) {
8
- window . darkmode = Darkmode
8
+ const toggleElems = document . querySelectorAll ( '[data-drkmd-toggle]' )
9
+ const toLightElems = document . querySelectorAll ( '[data-drkmd-to-light]' )
10
+ const toDarkElems = document . querySelectorAll ( '[data-drkmd-to-dark]' )
11
+
12
+ // If no attributes are found, assume programmatic usage and attach Darkmode class to window
13
+ if ( ! optsElem && ! attachBtnElem && toggleElems . length < 1 && toLightElems . length < 1 && toDarkElems . length < 1 ) {
14
+ window . Darkmode = Darkmode
9
15
10
16
return
11
17
}
12
18
13
- const attribute = elem . getAttribute ( 'data-drkmd' ) || '{}'
14
- const options = JSON . parse ( attribute )
19
+ // Parse options specified in data-drkmd-opts attribute
20
+ const attributeValue = optsElem && optsElem . getAttribute ( 'data-drkmd-opts' ) || '{}'
21
+ const options = JSON . parse ( attributeValue )
15
22
16
23
window . darkmode = new Darkmode ( options )
17
24
18
- if ( window . darkmode . options . attachButton ) {
25
+ // Attach event listeners to data-drkmd-toggle elements
26
+ if ( toggleElems . length > 0 ) {
27
+ for ( let i = 0 ; i < toggleElems . length ; i ++ ) {
28
+ toggleElems [ i ] . addEventListener ( 'click' , ( ) => {
29
+ window . darkmode . toggle ( )
30
+ } )
31
+ }
32
+ }
33
+
34
+ // Attach event listeners to data-drkmd-to-light elements
35
+ if ( toLightElems . length > 0 ) {
36
+ for ( let i = 0 ; i < toLightElems . length ; i ++ ) {
37
+ toLightElems [ i ] . addEventListener ( 'click' , ( ) => {
38
+ window . darkmode . toLight ( )
39
+ } )
40
+ }
41
+ }
42
+
43
+ // Attach event listeners to data-drkmd-to-dark elements
44
+ if ( toDarkElems . length > 0 ) {
45
+ for ( let i = 0 ; i < toDarkElems . length ; i ++ ) {
46
+ toDarkElems [ i ] . addEventListener ( 'click' , ( ) => {
47
+ window . darkmode . toDark ( )
48
+ } )
49
+ }
50
+ }
51
+
52
+ // Attach the default toggle button to the page (data-drkmd-attach or option)
53
+ if ( window . darkmode . options . attach || attachBtnElem ) {
19
54
window . darkmode . attach ( )
20
55
}
21
56
}
0 commit comments