@@ -34,6 +34,9 @@ window.MaxExtensionFloatingPanel.initializeQueueSection = function () {
3434 this . queueDisplayArea = document . getElementById ( 'max-extension-queue-display' ) ;
3535 this . queueProgressContainer = document . getElementById ( 'max-extension-queue-progress-container' ) ;
3636 this . queueProgressBar = document . getElementById ( 'max-extension-queue-progress-bar' ) ;
37+ const tosWarningContainer = document . getElementById ( 'max-extension-queue-tos-warning' ) ;
38+ const tosAcceptButton = document . getElementById ( 'max-extension-tos-accept-btn' ) ;
39+ const tosDeclineButton = document . getElementById ( 'max-extension-tos-decline-btn' ) ;
3740
3841 if ( ! this . queueSectionElement ) {
3942 logConCgp ( '[floating-panel-queue] Queue section element not found in the DOM.' ) ;
@@ -45,73 +48,101 @@ window.MaxExtensionFloatingPanel.initializeQueueSection = function () {
4548 event . stopPropagation ( ) ;
4649 } ) ;
4750
48- // --- DELAY INPUT AND UNIT TOGGLE LOGIC ---
49-
51+ // --- DELAY INPUT AND UNIT TOGGLE LOGIC (Profile-specific) ---
5052 const updateDelayUI = ( ) => {
51- const unit = globalMaxExtensionConfig . queueDelayUnit || 'min' ;
53+ const unit = window . globalMaxExtensionConfig . queueDelayUnit || 'min' ;
5254 if ( unit === 'sec' ) {
5355 this . delayUnitToggle . textContent = 'sec' ;
54- this . delayInputElement . value = globalMaxExtensionConfig . queueDelaySeconds ;
56+ this . delayInputElement . value = window . globalMaxExtensionConfig . queueDelaySeconds ;
5557 this . delayInputElement . title = "Delay in seconds between sending each queued prompt. Minimum 2 seconds." ;
5658 } else {
5759 this . delayUnitToggle . textContent = 'min' ;
58- this . delayInputElement . value = globalMaxExtensionConfig . queueDelayMinutes ;
60+ this . delayInputElement . value = window . globalMaxExtensionConfig . queueDelayMinutes ;
5961 this . delayInputElement . title = "Delay in minutes between sending each queued prompt. Minimum 2 minutes." ;
6062 }
6163 } ;
62-
63- // Set initial state from config
6464 updateDelayUI ( ) ;
6565
66- // Add listener for unit toggle
6766 this . delayUnitToggle . addEventListener ( 'click' , ( event ) => {
6867 event . preventDefault ( ) ;
69- globalMaxExtensionConfig . queueDelayUnit = ( globalMaxExtensionConfig . queueDelayUnit === 'min' ) ? 'sec' : 'min' ;
68+ window . globalMaxExtensionConfig . queueDelayUnit = ( window . globalMaxExtensionConfig . queueDelayUnit === 'min' ) ? 'sec' : 'min' ;
7069 updateDelayUI ( ) ;
71- // The config is saved when profile settings are saved.
70+ this . saveCurrentProfileConfig ( ) ; // Save to profile
7271 } ) ;
7372
74- // Add listener for input value changes
7573 this . delayInputElement . addEventListener ( 'change' , ( event ) => {
7674 let delay = parseInt ( event . target . value , 10 ) ;
7775 if ( isNaN ( delay ) || delay < 2 ) {
7876 delay = 2 ;
7977 event . target . value = delay ;
8078 }
8179
82- if ( globalMaxExtensionConfig . queueDelayUnit === 'sec' ) {
83- globalMaxExtensionConfig . queueDelaySeconds = delay ;
84- logConCgp ( `[floating-panel-queue] Queue delay set to ${ delay } seconds.` ) ;
80+ if ( window . globalMaxExtensionConfig . queueDelayUnit === 'sec' ) {
81+ window . globalMaxExtensionConfig . queueDelaySeconds = delay ;
8582 } else {
86- globalMaxExtensionConfig . queueDelayMinutes = delay ;
87- logConCgp ( `[floating-panel-queue] Queue delay set to ${ delay } minutes.` ) ;
83+ window . globalMaxExtensionConfig . queueDelayMinutes = delay ;
8884 }
85+ this . saveCurrentProfileConfig ( ) ; // Save to profile
8986 } ) ;
9087
91- // --- END DELAY LOGIC ---
88+ // --- TOS Confirmation (Global) and Queue Toggle (Profile-specific) ---
89+ const isQueueEnabled = window . globalMaxExtensionConfig . enableQueueMode || false ;
90+
91+ const toggleCallback = ( state ) => {
92+ // Check global TOS setting first
93+ if ( state && ! window . MaxExtensionGlobalSettings . acceptedQueueTOS ) {
94+ tosWarningContainer . style . display = 'block' ;
95+ this . queueModeToggle . style . display = 'none' ; // Hide toggle
96+ this . queueModeToggle . querySelector ( 'input' ) . checked = false ; // Uncheck it
97+ return ;
98+ }
99+
100+ // If TOS is accepted, proceed with profile setting
101+ window . globalMaxExtensionConfig . enableQueueMode = state ;
102+ expandableSection . style . display = state ? 'contents' : 'none' ;
103+ this . queueDisplayArea . style . display = state ? 'flex' : 'none' ;
104+ this . saveCurrentProfileConfig ( ) ; // Save to profile
105+ } ;
92106
93- // Create and insert the Queue Mode toggle
94- const isQueueEnabled = globalMaxExtensionConfig . enableQueueMode || false ;
95107 this . queueModeToggle = MaxExtensionInterface . createToggle (
96108 'enableQueueMode' ,
97109 'Enable Queue Mode' ,
98110 isQueueEnabled ,
99- ( state ) => {
100- globalMaxExtensionConfig . enableQueueMode = state ;
101- expandableSection . style . display = state ? 'contents' : 'none' ;
102- this . queueDisplayArea . style . display = state ? 'flex' : 'none' ;
103- }
111+ toggleCallback
104112 ) ;
105113 this . queueModeToggle . style . margin = '0' ;
106114 this . queueModeToggle . querySelector ( 'label' ) . style . fontSize = '12px' ;
107115 this . queueModeToggle . title = 'When enabled, clicking buttons adds them to a queue instead of sending immediately.' ;
108116 togglePlaceholder . appendChild ( this . queueModeToggle ) ;
109117
110- // Set initial visibility of controls based on config
111118 expandableSection . style . display = isQueueEnabled ? 'contents' : 'none' ;
112119 this . queueDisplayArea . style . display = isQueueEnabled ? 'flex' : 'none' ;
113120
114- // Attach event listeners to buttons
121+ // TOS Button Listeners
122+ tosAcceptButton . addEventListener ( 'click' , ( ) => {
123+ // 1. Update global setting
124+ window . MaxExtensionGlobalSettings . acceptedQueueTOS = true ;
125+ this . saveGlobalSettings ( ) ; // Save global setting
126+
127+ // 2. Update profile setting to enable queue
128+ window . globalMaxExtensionConfig . enableQueueMode = true ;
129+ this . saveCurrentProfileConfig ( ) ; // Save profile setting
130+
131+ // 3. Update UI
132+ tosWarningContainer . style . display = 'none' ;
133+ this . queueModeToggle . style . display = '' ; // Show toggle again
134+ this . queueModeToggle . querySelector ( 'input' ) . checked = true ;
135+ expandableSection . style . display = 'contents' ;
136+ this . queueDisplayArea . style . display = 'flex' ;
137+ } ) ;
138+
139+ tosDeclineButton . addEventListener ( 'click' , ( ) => {
140+ tosWarningContainer . style . display = 'none' ;
141+ this . queueModeToggle . style . display = '' ; // Show toggle again
142+ } ) ;
143+
144+
145+ // Attach event listeners to queue action buttons
115146 this . playQueueButton . addEventListener ( 'click' , ( ) => {
116147 if ( this . isQueueRunning ) {
117148 this . pauseQueue ( ) ;
@@ -124,7 +155,6 @@ window.MaxExtensionFloatingPanel.initializeQueueSection = function () {
124155 this . resetQueue ( ) ;
125156 } ) ;
126157
127- // Initial state update for controls
128158 this . updateQueueControlsState ( ) ;
129159} ;
130160
0 commit comments