PageSourceSearch

https://alphacoders.com/site/about-us

html alphacoders.com collected 2026-10-02 02:19:27 UTC 57,305 bytes, 1,347 lines download raw bytes

1<!DOCTYPE html>
2<html lang='en-US' itemscope itemtype="http://schema.org/WebPage">
3<head>
4    <meta charset="utf-8">
5
6
7    
8
9    <title>About Us</title>
10
11    <meta name="keywords" content="art,wallpaper,wallpapers,backgrounds,photography,images,pictures,gif,gifs,avatar,avatars,pfp,pfps">
12    <meta name="description" content="Alpha Coders - Your Source For Desktop Wallpapers, Phone Wallpapers, Gifs, PFP, and More!">
13    <meta name="viewport" content="width=device-width, initial-scale=1.0">
14
15    <!-- Schema.org markup for Google+ -->
16    <meta itemprop="name" content="About Us">
17    <meta itemprop="description" content="Alpha Coders - Your Source For Desktop Wallpapers, Phone Wallpapers, Gifs, PFP, and More!">
18    
19    <!-- Twitter Card data -->
20    <meta name="twitter:card" content="summary_large_image">
21    <meta name="twitter:site" content="@alphacoders">
22    <meta name="twitter:title" content="About Us">
23    <meta name="twitter:description" content="Alpha Coders - Your Source For Desktop Wallpapers, Phone Wallpapers, Gifs, PFP, and More!">
24    
25    <!-- Open Graph data -->
26    <meta property="og:title" content="About Us">
27    <meta property="og:type" content="website">
28            <meta property="og:url" content="https://alphacoders.com/site/about-us">
29        
30    <meta property="og:description" content="Alpha Coders - Your Source For Desktop Wallpapers, Phone Wallpapers, Gifs, PFP, and More!">
31
32            <meta property="og:site_name" content="Alpha Coders">
33    
34    
35    
36    
37
38    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
39    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
40    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
41    <link rel="manifest" href="/site.webmanifest">
42    <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
43    <meta name="apple-mobile-web-app-title" content="Alpha Coders">
44    <meta name="application-name" content="Alpha Coders">
45    <meta name="msapplication-TileColor" content="#357ec7">
46    <meta name="theme-color" content="#357ec7">
47
48    
48<script>
49        (function() {
50            function getCookie(name) {
51                var value = '; ' + document.cookie;
52                var parts = value.split('; ' + name + '=');
53                if (parts.length === 2) {
54                    return parts.pop().split(';').shift();
55                }
56                return null;
57            }
58
59            var cookie_theme = getCookie('theme');
60            var stored = cookie_theme || localStorage.getItem('theme');
61            var theme = 'light';
62
63            if (stored === 'light') {
64                theme = 'light';
65            } else if (stored === 'dark') {
66                theme = 'dark';
67            } else {
68                if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
69                    theme = 'dark';
70                }
71            }
72
73            document.documentElement.setAttribute('data-theme', theme);
74        })();
75    </script>
75
76
77            <link href="/css/site_light_dark.css" rel="stylesheet" media="screen">
78    
79   
80    
81
82    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
83            
83<script src="https://static.alphacoders.com/jquery-3.2.1.min.js"></script>
83
84    
85
86    
87
88     
89    
89<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" crossorigin="anonymous"></script>
89
90    
90<script>
91    window.googletag = window.googletag || {cmd: []};
92    </script>
92
93
94    
95    
96        <!-- Google tag (gtag.js) -->
vendor: 72 bytes, lines 96-97
96
97        <script async src="https://www.googletagmanager.com/gtag/js?id=
97G-HL65XQTV30
vendor: 20 bytes, lines 97-98
97"></script>
98        
98<script>
99        
vendor: 152 bytes, lines 99-103
99window.dataLayer = window.dataLayer || [];
100        function gtag(){dataLayer.push(arguments);}
101        gtag('js', new Date());
102
103        gtag('config', '
103G-HL65XQTV30
vendor: 12 bytes, lines 103-104
103');
104        
104</script>
104
105    
106    
107
108    
109        
109<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2597887417591492" crossorigin="anonymous"></script>
109
110
111
112        <!-- OPTI DIGITAL TAGS SCRIPT -->
113        <!-- NOTE: Insert these scripts at the top of your HEAD section just after the CMP scripts -->
114        <link rel="preload" href="https://securepubads.g.doubleclick.net/tag/js/gpt.js" as="script" type="text/javascript" />
115        
115<script>
116            var optidigitalQueue = optidigitalQueue || {};
117            optidigitalQueue.cmd = optidigitalQueue.cmd || [];
118        </script>
118
119        
119<script type='module' id='optidigital-ad-init' async data-config='{"adUnit": "/22963265510,4594367/4594367/od.alphacoders.com/list"}'
120            src='//scripts.opti-digital.com/modules/?site=alphacoders_com'>
121        </script>
121
122
123
124        
125            
126
127    
128
129
130    
131    
132
133    
134
135    
136
137
138</head>
139<body>
140
141
142    <div class="header" role="banner">
143        <div class="header-logo">
144            <a class="header-logo" href="https://alphacoders.com">Alpha Coders</a>
145        </div>
146      
147
148        <div class="header-menu">
149            <ul class="header-menu-list">
150                <li class="header-menu-list">
151                    <div class="theme-toggle">
152                        <img class="svg theme-toggle-button" id="theme-toggle-btn"
153                             src="https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs/solid/adjust.svg"
154                             alt="Theme" title="Toggle theme">
155                        <div class="theme-toggle-dropdown" id="theme-toggle-dropdown">
156                            <div class="theme-toggle-option" data-theme-value="light">
157                                <img class="svg" src="https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs/solid/sun.svg" alt=""> Light
158                            </div>
159                            <div class="theme-toggle-option" data-theme-value="dark">
160                                <img class="svg" src="https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs/solid/moon.svg" alt=""> Dark
161                            </div>
162                            <div class="theme-toggle-option" data-theme-value="system">
163                                <img class="svg" src="https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs/regular/computer-classic.svg" alt=""> System
164                            </div>
165                        </div>
166                    </div>
167                </li>
168                <li class="header-menu-list">
169                  
170                                            <a  class="header-menu-list-item"
171                            href="https://alphacoders.com/site/submit" 
172                            title="Submit Desktop Wallpapers, Phone Wallpapers, Gifs/Short Videos, and PFP"><img class="svg svg-white" alt="" src="https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs/solid/upload.svg">&nbsp;Submit</a>
173                                        
174
175                </li>
176                <li class="header-menu-list">
177                    <a  class="header-menu-list-item"
178                        href="https://alphacoders.com/users/community" 
179                        title="The Alpha Coders Community"><img class="svg svg-white" alt="" src="https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs/solid/gift.svg">&nbsp;Community</a>
180                </li>
181
182
183                                    <li class="header-menu-list"><a class="header-menu-list-item" href="https://alphacoders.com/users/login">Login</a></li>
184                    <li class="header-menu-list"><a class="header-menu-list-item" href="https://alphacoders.com/users/register">Register</a></li>
185                
186                            </ul>
187        </div>
188
189
190        <div class="mobile-nav-menu right" onclick="toggleMenu()">
191            <div></div>
192            <div></div>
193            <div></div>
194        </div>
195
196
197
198      
199       
200        <div class="search-container-header right">
201            <form action="https://alphacoders.com/search/view" method="GET">
202                <input class="search-input-header" name="q" maxlength="100" placeholder="Search" type="text">
203                                                <button class="search-button-header" type="submit" aria-label="Search">
204                    <img class="svg svg-white search-button-svg" alt="" src="https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs/solid/search.svg">
205                </button>
206            </form>
207        </div>
208        
209    </div>
210
211    <!-- We have a popup notice -->
212    <div id="notice" class="notice">
213        <span id="notice-message" class="notice-message"></span>
214        <button id="notice-close" class="notice-close" onclick="hideNotice();">
215            <img class="svg svg-white search-button-svg" src="https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs/solid/window-close.svg">    
216        </button>
217    </div>
218
219
220
221    
222    
223    
224        
225
226    <main id="main-content" role="main">
227        
228
229    <h1 class="center title">About Us</h1>
230
231    <div class="container">
232        <div class="row">
233
234            <h3>Alpha Coders is an image discovery platform. Share the things you create, or share the things you love.</h3>
235            <div class="box">
236                        
237               
238                <strong>
239                We are a <a target="_blank" href="https://alphacoders.com/site/hiring">small team</a> from all over the world that love elevating the image discovery experience.
240                </strong>
241                Contact us by email at [email protected] or hop in and chat with us on our <a href="https://discord.gg/5WMUMa8" target="_blank">Discord</a>
242            </div>
243
244
245            <br>
246            <h3>Site Structure, Sub Sites, and Other Projects</h3>
247            <div class="box">
248                        
249                To help people share and discover, we are separated out into different sub-sites that focus on specific
250                types and shapes of images. We outline those below. We also believe strongly in focusing our pages on
251                what you came here for: the images. Good titles, reasonable tags, relevant information for the image(s)
252                being presented, and not much else.
253
254                <br><br>
255                It's fun to work on new projects, and you'll see the various projects listed on our home page.
256            </div>
257                        
258            <br>
259            <h3>About Wallpaper Abyss</h3>
260            <div class="box">
261                <a href="https://wall.alphacoders.com">https://wall.alphacoders.com</a>
262                <ul>
263                    <li>Focused on discovering desktop computer wallpapers and backgrounds.</li>
264                    <li>Here you'll find our content is heavily curated so that when you set it as your desktop, it looks great.</li>
265                </ul>
266            </div>
267
268            <br>
269            <h3>About Avatar Abyss</h3>
270            <div class="box">
271                <a href="https://avatars.alphacoders.com">https://avatars.alphacoders.com</a>
272                <ul>
273                    <li>We all have an online presence. The focus here is to find images specially created for the various forums
274                        and other places where an avatar identifies you.</li>
275                </ul>
276            </div>
277
278            <br>
279            <h3>About Gif Abyss</h3>
280            <div class="box">
281                <a href="https://gifs.alphacoders.com">https://gifs.alphacoders.com</a>
282                <ul>
283                    <li>Moving images! They are so different from static images, that they have this home all to themselves</li>
284                    <li>As the web moves forward, and the formats of gifs change, we endeavor to keep up, and format gifs
285                    in ways people find useful.</li>
286                </ul>
287            </div>
288
289            <br>
290            <h3>About Mobile Abyss</h3>
291            <div class="box">
292                <a href="https://mobile.alphacoders.com">https://mobile.alphacoders.com</a>
293                <ul>
294                    <li>
294Computer wallpapers used to just mean desktop wallpapers. Not any more!</li>
295                    <li>As phones become more and more popular, we separated out mobile sized images</li>
296                    <li>Sort by your phone, or your phone's resolution. Every image here matches a resolution for an actual phone.</li>
297                </ul>
298            </div>
299        </div>
300    </div>
301    </main>
302
303    <button id="scroll_to_top" class="scroll-to-top">↑</button>
304
305
306    <div class="footer" role="contentinfo">
307        <br><br>
308
309        <div class="center">
310            <span class="sub-title bold">Alpha Coders Network Links</span>
311            <br><br>
312            <div class="flex-container-centered">
313                <div class="box-no-margin">
314                    <a href="https://alphacoders.com/site/about-us" rel="nofollow">About Us</a>
315                </div>
316                <div class="box-no-margin">
317                    <a href="https://alphacoders.com/site/faq" rel="nofollow">FAQ</a>
318                </div>
319                <div class="box-no-margin">
320                    <a href="https://alphacoders.com/site/privacy" rel="nofollow">Privacy Policy</a>
321                </div>
322                <div class="box-no-margin">
323                    <a href="https://alphacoders.com/site/tos" rel="nofollow">Terms Of Service</a>
324                </div>
325                <div class="box-no-margin">
326                    <a href="https://alphacoders.com/site/acceptable_use" rel="nofollow">Acceptable Use</a>
327                </div>
328                <div class="box-no-margin">
329                    <a href="https://alphacoders.com/site/etiquette" rel="nofollow">Etiquette</a>
330                </div>
331                <div class="box-no-margin">
332                    <a href="https://alphacoders.com/site/advertising" rel="nofollow">Advertise With Us</a>
333                </div>
334                <div class="box-no-margin">
335                    <a href="https://alphacoders.com/site/copyright">DMCA Copyright Violation</a>
336                </div>
337                <div class="box-no-margin">
338                    
339                    <a href="javascript:googlefc.callbackQueue.push(googlefc.showRevocationMessage)">Privacy and cookie settings</a>
340                </div>
341                
342            </div>
343        </div>
344        <div class="center">
345            <br>
346            <span class="sub-title">Website text and design is copyright 2026 Alpha Coders.<br/>
347                All submitted content remains copyright its original copyright holder
348               <br>Images are for private personal, non commercial use.</span>
349
350
351                
352
353                
354
355                
356                
357                    </div>
358
359        
360    </div>
361
362    
363
364    
364<script>
365
366        document.addEventListener("DOMContentLoaded", () => {
367            const scroll_to_top = document.getElementById("scroll_to_top");
368            
369            // Show button when scrolling down
370            window.addEventListener("scroll", () => {
371                if (window.scrollY > 200) {
372                    scroll_to_top.style.display = "block";
373                } else {
374                    scroll_to_top.style.display = "none";
375                }
376            });
377
378            // Scroll to top when clicked
379            scroll_to_top.addEventListener("click", () => {
380                window.scrollTo({
381                top: 0,
382                behavior: "smooth"
383                });
384            });
385        });
386
387
388        function downloadContent(image_server, content_id, content_file_type) {
389            // Construct the download URL. Adjust this according to your URL scheme.
390            var downloadUrl = 'https://initiate.alphacoders.com' + '/download/' + image_server + '/' + content_id + '/' + content_file_type;
391
392            // Create a temporary link element
393            var tempLink = document.createElement('a');
394            tempLink.href = downloadUrl;
395            tempLink.setAttribute('download', ''); // This can prompt download depending on content type and browser support
396            tempLink.style.display = 'none';
397
398            // Append to the document and trigger the download
399            document.body.appendChild(tempLink);
400            tempLink.click();
401
402            // Clean up by removing the temporary link
403            document.body.removeChild(tempLink);
404        }
405
406        function downloadContentModal(image_server, legacy_content_id, content_file_type, content_table_entry_id) {
407            //return downloadContent(image_server, content_id, content_file_type);
408            // Construct the download URL. Adjust this according to your URL scheme.
409            var downloadUrl = 'https://initiate.alphacoders.com' + '/download/' + image_server + '/' + legacy_content_id + '/' + content_file_type;
410
411            // Show modal with countdown
412            showDownloadModal(downloadUrl, content_table_entry_id);
413        }
414
415        function showDownloadModal(downloadUrl, content_table_entry_id) {
416            let modal_url = "https://initiate.alphacoders.com/download/modal/" + content_table_entry_id;
417
418			fetch(modal_url, {
419				credentials: 'same-origin',
420				headers: {
421					'X-Requested-With': 'XMLHttpRequest',
422				},
423			})
424			.then(function(response) {
425				if(!response.ok) {
426					throw new Error('Unable to load download modal');
427				}
428
429				return response.text();
430			})
431			.then(function(data) {
432				// Insert the modal HTML from the server
433				const wrapper = document.createElement('div');
434				wrapper.innerHTML = data;
435
436				while(wrapper.firstChild) {
437					document.body.appendChild(wrapper.firstChild);
438				}
439
440				// Run script tags from injected modal content (needed for ad initialization)
441				const modal = document.getElementById('downloadModal');
442				if(modal) {
443					const modal_scripts = modal.querySelectorAll('script');
444					modal_scripts.forEach(function(old_script) {
445						const new_script = document.createElement('script');
446
447						for(let i = 0; i < old_script.attributes.length; i++) {
448							const attribute = old_script.attributes[i];
449							new_script.setAttribute(attribute.name, attribute.value);
450						}
451
452						if(old_script.textContent) {
453							new_script.textContent = old_script.textContent;
454						}
455
456						old_script.parentNode.replaceChild(new_script, old_script);
457					});
458				}
459
460				// Now set up the modal functionality
461				setupModalFunctionality(downloadUrl, content_table_entry_id);
462			})
463			.catch(function() {
464				showNotice('error', 'Unable to load download modal');
465			});
466        }
467
468        function setupModalFunctionality(downloadUrl, content_table_entry_id) {
469            var countdown = 5;
470
471            if(content_table_entry_id == 3581636) {
472                countdown = 120;
473            }
474
475            var countdownElement = document.getElementById('countdown');
476            var modal = document.getElementById('downloadModal');
477            var cancelBtn = document.getElementById('cancelDownload');
478            var countdown_message = document.getElementById('downloadCountdownMessage');
479            var rewarded_message = document.getElementById('downloadRewardedMessage');
480            var watch_rewarded_ad_button = document.getElementById('watchRewardedAd');
481            var block_unfilled_rewarded_ad = false;
482            var require_rewarded_ad = false;
483            var reward_granted = false;
484            var rewarded_flow_settled = false;
485            var rewarded_slot = null;
486            var rewarded_ad_slot_name = 'Desktop_RewardedAd';
487            var rewarded_status_timer = null;
488
489            if(modal && modal.getAttribute('data-block-unfilled-rewarded-ad') == '1') {
490                block_unfilled_rewarded_ad = true;
491            }
492
493            if(modal && modal.getAttribute('data-require-rewarded-ad') == '1') {
494                require_rewarded_ad = true;
495            }
496
497            if(modal && modal.getAttribute('data-rewarded-slot-name')) {
498                rewarded_ad_slot_name = modal.getAttribute('data-rewarded-slot-name');
499            }
500
501            function closeModal() {
502                if(rewarded_slot && typeof googletag !== 'undefined' && googletag.destroySlots) {
503                    googletag.destroySlots([rewarded_slot]);
504                    rewarded_slot = null;
505                }
506
507                if (modal && modal.parentNode) {
508                    modal.parentNode.removeChild(modal);
509                }
510            }
511
512            function executeDownload(url) {
513                var tempLink = document.createElement('a');
514                tempLink.href = url;
515                tempLink.setAttribute('download', '');
516                tempLink.style.display = 'none';
517                document.body.appendChild(tempLink);
518                tempLink.click();
519                document.body.removeChild(tempLink);
520            }
521
522            function handleRewardedUnavailable() {
523                if(rewarded_flow_settled) {
524                    return;
525                }
526                rewarded_flow_settled = true;
527
528                console.log('[Rewarded Ad] Unavailable, block_unfilled:', block_unfilled_rewarded_ad);
529                if(rewarded_status_timer) {
530                    clearInterval(rewarded_status_timer);
531                    rewarded_status_timer = null;
532                }
533
534                if(watch_rewarded_ad_button) {
535                    watch_rewarded_ad_button.style.display = 'none';
536                }
537
538                if(block_unfilled_rewarded_ad) {
539                    setRewardedStatus('Rewarded ad unavailable. Please try again in a bit, or go Premium to skip this.');
540                    return;
541                }
542
543                setRewardedStatus('Rewarded ad unavailable, letting you download anyway ;)');
544                setTimeout(function() {
545                    executeDownload(downloadUrl);
546                    closeModal();
547                }, 2500);
548            }
549
550            function setRewardedStatus(text) {
551                if(!rewarded_message) {
552                    return;
553                }
554
555                rewarded_message.style.display = '';
556                rewarded_message.textContent = text;
557            }
558
559            function startCountdown() {
560                console.log('[Rewarded Ad] Falling back to countdown');
561                if(countdown_message) {
562                    countdown_message.style.display = '';
563                }
564                if(rewarded_message) {
565                    rewarded_message.style.display = 'none';
566                }
567                if(watch_rewarded_ad_button) {
568                    watch_rewarded_ad_button.style.display = 'none';
569                }
570
571                function updateCountdown() {
572                    if(countdownElement) {
573                        countdownElement.textContent = countdown;
574                    }
575                    if (countdown <= 0) {
576                        executeDownload(downloadUrl);
577                        closeModal();
578                    } else {
579                        countdown--;
580                        setTimeout(updateCountdown, 1000);
581                    }
582                }
583
584                updateCountdown();
585            }
586
587            function startRewardedAd() {
588                console.log('[Rewarded Ad] startRewardedAd');
589                console.log('[Rewarded Ad] optidigitalQueue defined:', typeof optidigitalQueue !== 'undefined');
590                console.log('[Rewarded Ad] optidigitalToolbox defined:', typeof optidigitalToolbox !== 'undefined');
591                console.log('[Rewarded Ad] googletag defined:', typeof googletag !== 'undefined');
592                console.log('[Rewarded Ad] googletag.apiReady:', typeof googletag !== 'undefined' ? googletag.apiReady : 'n/a');
593                console.log('[Rewarded Ad] googletag.cmd type:', typeof googletag !== 'undefined' && googletag.cmd ? typeof googletag.cmd.push : 'n/a');
594                console.log('[Rewarded Ad] slot name:', rewarded_ad_slot_name);
595
596                if(typeof optidigitalQueue === 'undefined' || !optidigitalQueue.cmd) {
597                    console.log('[Rewarded Ad] optidigitalQueue missing, cannot create slot');
598                    handleRewardedUnavailable();
599                    return;
600                }
601
602                if(watch_rewarded_ad_button) {
603                    watch_rewarded_ad_button.style.display = '';
604                    watch_rewarded_ad_button.disabled = true;
605                    watch_rewarded_ad_button.textContent = 'Loading Ad...';
606                    console.log('[Rewarded Ad] Watch button set to Loading Ad...');
607                } else {
608                    console.log('[Rewarded Ad] Watch button element not found');
609                }
610
611                setRewardedStatus('Finding a rewarded ad...');
612                var loading_status_step = 0;
613                rewarded_status_timer = setInterval(function() {
614                    if(rewarded_flow_settled) {
615                        clearInterval(rewarded_status_timer);
616                        rewarded_status_timer = null;
617                        return;
618                    }
619
620                    loading_status_step++;
621                    if(loading_status_step == 1) {
622                        setRewardedStatus('Requesting an ad...');
623                        if(watch_rewarded_ad_button) {
624                            watch_rewarded_ad_button.textContent = 'Still Loading...';
625                        }
626                    } else if(loading_status_step == 2) {
627                        setRewardedStatus('Still looking for an ad...');
628                    } else {
629                        setRewardedStatus('This is taking a bit longer than usual...');
630                    }
631                }, 3000);
632
633                var rewarded_ready_event = null;
634
635                function assignOptiHandlers() {
636                    if(typeof optidigitalToolbox === 'undefined') {
637                        return;
638                    }
639
640                    var rewarded_ad_configuration = {
641                        rewardedSlotClosed: function(event) {
642                            onRewardedClosed(event, 'optidigital.rewardedSlotClosed');
643                        },
644                        rewardedSlotGranted: function(event) {
645                            onRewardedGranted(event, 'optidigital.rewardedSlotGranted');
646                        },
647                        rewardedSlotReady: function(event) {
648                            enableWatchButton(event, 'optidigital.rewardedSlotReady');
649                        },
650                        rewardedSlotUnfilled: function(slotName) {
651                            console.log('[Rewarded Ad] rewardedSlotUnfilled', slotName);
652                            handleRewardedUnavailable();
653                        }
654                    };
655
656                    optidigitalToolbox.rewardedAdConfiguration = rewarded_ad_configuration;
657                    optidigitalToolbox.rewardedSlotClosed = rewarded_ad_configuration.rewardedSlotClosed;
658                    optidigitalToolbox.rewardedSlotGranted = rewarded_ad_configuration.rewardedSlotGranted;
659                    optidigitalToolbox.rewardedSlotReady = rewarded_ad_configuration.rewardedSlotReady;
660                    optidigitalToolbox.rewardedSlotUnfilled = rewarded_ad_configuration.rewardedSlotUnfilled;
661                }
662
663                function attachGptListeners() {
664                    if(window.__download_rewarded_gpt_listeners) {
665                        console.log('[Rewarded Ad] GPT listeners already attached');
666                        return;
667                    }
668
669                    window.__download_rewarded_gpt_listeners = true;
670                    console.log('[Rewarded Ad] Attaching googletag.pubads rewarded listeners');
671                    googletag.pubads().addEventListener('rewardedSlotReady', function(event) {
672                        enableWatchButton(event, 'googletag.rewardedSlotReady');
673                    });
674                    googletag.pubads().addEventListener('rewardedSlotGranted', function(event) {
675                        onRewardedGranted(event, 'googletag.rewardedSlotGranted');
676                    });
677                    googletag.pubads().addEventListener('rewardedSlotClosed', function(event) {
678                        onRewardedClosed(event, 'googletag.rewardedSlotClosed');
679                    });
680                    googletag.pubads().addEventListener('slotRenderEnded', function(event) {
681                        console.log('[Rewarded Ad] googletag.slotRenderEnded isEmpty:', event.isEmpty, event);
682                        if(event.isEmpty && event.slot === rewarded_slot) {
683                            handleRewardedUnavailable();
684                        }
685                    });
686                    googletag.pubads().addEventListener('slotRequested', function(event) {
687                        console.log('[Rewarded Ad] googletag.slotRequested', event);
688                    });
689                }
690
691                function createNativeRewardedSlot() {
692                    var ad_unit = '/4594367/rewarded_background_removal';
693                    if(window.odT && window.odT.initConfig && window.odT.initConfig.adUnit) {
694                        ad_unit = window.odT.initConfig.adUnit;
695                    }
696
697                    console.log('[Rewarded Ad] Creating native GPT rewarded slot', ad_unit);
698                    var slot = googletag.defineOutOfPageSlot(ad_unit, googletag.enums.OutOfPageFormat.REWARDED);
699                    if(!slot) {
700                        console.log('[Rewarded Ad] defineOutOfPageSlot returned null for', ad_unit);
701                        if(ad_unit !== '/4594367/rewarded_background_removal') {
702                            ad_unit = '/4594367/rewarded_background_removal';
703                            console.log('[Rewarded Ad] Retrying native slot with', ad_unit);
704                            slot = googletag.defineOutOfPageSlot(ad_unit, googletag.enums.OutOfPageFormat.REWARDED);
705                        }
706                    }
707
708                    if(!slot) {
709                        console.log('[Rewarded Ad] Native rewarded slot not supported on this page');
710                        handleRewardedUnavailable();
711                        return;
712                    }
713
714                    slot.addService(googletag.pubads());
715                    if(slot.setTargeting) {
716                        slot.setTargeting('adslot', rewarded_ad_slot_name);
717                    }
718                    rewarded_slot = slot;
719                    displayAndRefreshSlot(slot);
720                }
721
722                function displayAndRefreshSlot(slot) {
723                    console.log('[Rewarded Ad] displayAndRefreshSlot', slot);
724                    try {
725                        googletag.display(slot);
726                        console.log('[Rewarded Ad] googletag.display() called');
727                    } catch (display_error) {
728                        console.log('[Rewarded Ad] googletag.display() error', display_error);
729                    }
730
731                    try {
732                        googletag.pubads().refresh([slot]);
733                        console.log('[Rewarded Ad] googletag.pubads().refresh() called');
734                    } catch (refresh_error) {
735                        console.log('[Rewarded Ad] googletag.pubads().refresh() error', refresh_error);
736                    }
737                }
738
739                function enableWatchButton(event, source) {
740                    console.log('[Rewarded Ad] enabling Watch button from', source, event);
741                    rewarded_flow_settled = true;
742                    rewarded_ready_event = event;
743                    if(rewarded_status_timer) {
744                        clearInterval(rewarded_status_timer);
745                        rewarded_status_timer = null;
746                    }
747                    setRewardedStatus('Ad ready. Watch it to start your download.');
748                    if(!watch_rewarded_ad_button) {
749                        console.log('[Rewarded Ad] Watch button missing in enableWatchButton');
750                        return;
751                    }
752
753                    watch_rewarded_ad_button.style.display = '';
754                    watch_rewarded_ad_button.disabled = false;
755                    watch_rewarded_ad_button.textContent = 'Watch Rewarded Ad';
756                    watch_rewarded_ad_button.onclick = function() {
757                        console.log('[Rewarded Ad] Watch button clicked, calling makeRewardedVisible');
758                        if(rewarded_ready_event && rewarded_ready_event.makeRewardedVisible) {
759                            rewarded_ready_event.makeRewardedVisible();
760                        } else {
761                            console.log('[Rewarded Ad] makeRewardedVisible not available on ready event', rewarded_ready_event);
762                        }
763                    };
764                }
765
766                function getOptiRewardedSlot() {
767                    if(window.odT && window.odT.gptAdSlots && window.odT.gptAdSlots[rewarded_ad_slot_name]) {
768                        return window.odT.gptAdSlots[rewarded_ad_slot_name];
769                    }
770
771                    if(window.odT && window.odT.adAdaptersFactory && window.odT.adAdaptersFactory.rewardedAdsAdapter && window.odT.adAdaptersFactory.rewardedAdsAdapter.getGPTSlot) {
772                        var adapter_slots = window.odT.adAdaptersFactory.rewardedAdsAdapter.getGPTSlot(rewarded_ad_slot_name);
773                        if(adapter_slots && adapter_slots.length) {
774                            return adapter_slots[0];
775                        }
776                    }
777
778                    return null;
779                }
780
781                function onRewardedClosed(event, source) {
782                    console.log('[Rewarded Ad] closed from', source, 'reward_granted:', reward_granted, event);
783                    if(event && event.slot) {
784                        rewarded_slot = event.slot;
785                    }
786
787                    if(rewarded_slot && typeof googletag !== 'undefined' && googletag.destroySlots) {
788                        googletag.destroySlots([rewarded_slot]);
789                        rewarded_slot = null;
790                    }
791                }
792
793                function onRewardedGranted(event, source) {
794                    console.log('[Rewarded Ad] granted from', source, event);
795                    rewarded_flow_settled = true;
796                    reward_granted = true;
797                    if(event && event.slot) {
798                        rewarded_slot = event.slot;
799                    }
800                    executeDownload(downloadUrl);
801                    closeModal();
802                }
803
804                function runCreate() {
805                    console.log('[Rewarded Ad] runCreate');
806                    attachGptListeners();
807                    assignOptiHandlers();
808
809                    var created = false;
810                    if(window.odT && window.odT.adAdaptersFactory && window.odT.adAdaptersFactory.rewardedAdsAdapter && window.odT.adAdaptersFactory.rewardedAdsAdapter.createRewardedAdSlot) {
811                        created = window.odT.adAdaptersFactory.rewardedAdsAdapter.createRewardedAdSlot(rewarded_ad_slot_name, true);
812                        console.log('[Rewarded Ad] adapter.createRewardedAdSlot returned', created);
813                    } else if(typeof optidigitalToolbox !== 'undefined' && optidigitalToolbox.createRewardedAdSlot) {
814                        console.log('[Rewarded Ad] adapter missing, using toolbox.createRewardedAdSlot');
815                        optidigitalToolbox.createRewardedAdSlot(rewarded_ad_slot_name);
816                    } else {
817                        console.log('[Rewarded Ad] No OptiDigital rewarded API, using native GPT');
818                        createNativeRewardedSlot();
819                        return;
820                    }
821
822                    var slot = getOptiRewardedSlot();
823                    console.log('[Rewarded Ad] OptiDigital GPT slot:', slot);
824                    if(slot) {
825                        rewarded_slot = slot;
826                        displayAndRefreshSlot(slot);
827                        return;
828                    }
829
830                    console.log('[Rewarded Ad] OptiDigital did not leave a GPT slot, using native fallback');
831                    createNativeRewardedSlot();
832                }
833
834                function whenGptReady(callback) {
835                    var ran = false;
836
837                    function run() {
838                        if(ran) {
839                            return;
840                        }
841                        ran = true;
842                        console.log('[Rewarded Ad] GPT ready, running create');
843                        callback();
844                    }
845
846                    if(typeof googletag !== 'undefined' && googletag.cmd) {
847                        console.log('[Rewarded Ad] Pushing create onto googletag.cmd');
848                        googletag.cmd.push(run);
849                    }
850
851                    var attempts = 0;
852                    var timer = setInterval(function() {
853                        attempts++;
854                        if(typeof googletag !== 'undefined' && googletag.apiReady) {
855                            clearInterval(timer);
856                            run();
857                            return;
858                        }
859                        if(attempts >= 40) {
860                            clearInterval(timer);
861                            if(!ran) {
862                                console.log('[Rewarded Ad] GPT never became ready');
863                                handleRewardedUnavailable();
864                            }
865                        }
866                    }, 250);
867                }
868
869                console.log('[Rewarded Ad] Pushing to optidigitalQueue.cmd');
870                optidigitalQueue.cmd.push(function() {
871                    console.log('[Rewarded Ad] optidigitalQueue.cmd callback running');
872                    assignOptiHandlers();
873                    whenGptReady(runCreate);
874                });
875
876                setTimeout(function() {
877                    if(!rewarded_flow_settled) {
878                        console.log('[Rewarded Ad] Timed out waiting for rewarded ad');
879                        handleRewardedUnavailable();
880                    }
881                }, 10000);
882            }
883
884            if(cancelBtn) {
885                cancelBtn.addEventListener('click', closeModal);
886            }
887
888            if(!require_rewarded_ad) {
889                document.addEventListener('click', function(e) {
890                    if (modal && !modal.contains(e.target)) {
891                        closeModal();
892                    }
893                });
894            }
895
896            console.log('[Rewarded Ad] setupModalFunctionality require_rewarded_ad:', require_rewarded_ad, 'content_table_entry_id:', content_table_entry_id);
897            if(require_rewarded_ad) {
898                startRewardedAd();
899            } else {
900                startCountdown();
901            }
902        }
903
904
905        async function interactSite(content_type, content_id, user_interaction, page_type = "") {
906
907            url = "https://api.alphacoders.com/site/interact";
908
909            data = {
910                content_type: content_type,
911                content_id: content_id,
912                user_interaction: user_interaction,
913                page_type: page_type
914                
915            }
916
917            
918            response = await fetch(url, {
919                method: 'POST',
920                headers: {
921                    'Content-Type': 'application/json'
922                },
923                body: JSON.stringify(data)
924            });
925
926            if(!response.ok) {
927                const message = `Error ${response.status}: ${response.statusText}`;
928                showNotice('error', message);
929                return;
930            }
931
932            response_data = await response.json();
933
934            interaction_element = document.getElementById(`${content_type}_${content_id}_${user_interaction}`);
935
936            if(response_data.hasOwnProperty('success') && response_data.success == true) {
937
938                /*
939                if(response_data.hasOwnProperty('is_favorite') && response_data.is_favorite == true) {
940                    favorite_tag_button.textContent = "A Favorite!";
941                } else {
942                    favorite_tag_button.textContent = "Favorite";
943                }
944                */
945
946                if(user_interaction == 'down') {
947                    interaction_element.innerHTML = '<img class="svg svg-black" src="https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs/solid/sad-tear.svg">';
948                } else if(user_interaction == 'favorite' && content_type == 'tag' && response_data.hasOwnProperty('removed') && response_data.removed == true) {
949
950
951                    showNotice('success', 'Favorite Removed');
952
953                    let favorite_wrapper_div = document.getElementById(`tag_${content_id}_favorite_wrapper`);
954                    let new_html = `
955                        <span class='button button-favorite' 
956                            title="Favorite This"
957                            onclick="interactSite('tag', ${content_id}, 'favorite'); return false;"
958                            id="tag_${content_id}_favorite">
959                            <img class="svg svg-black" alt="Favorite Icon" src="https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs/solid/star.svg"> 
960                            Favorite
961                        </span>
962                    `;
963                    favorite_wrapper_div.innerHTML = new_html;
964
965                } else if(user_interaction == 'favorite' && content_type == 'tag') {
966
967
968                                            showNotice('success', 'Thanks for the feedback! Login or register to save your favorites!');
969                    
970                    
971                } 
972                else if(user_interaction == "favorite" && response_data.hasOwnProperty('removed') && response_data.removed == true && 
973                    content_type == "content" && response_data.page_type == "content_view") {
974
975                        let favorite_wrapper_div = document.getElementById(`favorite_${content_id}`);
976
977                        let new_html = `
978                            <span class='button button-favorite' 
979                                title="Favorite This"
980                                onclick="interactSite('content', ${content_id}, 'favorite', 'content_view'); return false;"
981                                id="content_${content_id}_favorite">
982                                <img class="svg svg-black" alt="Favorite Icon" src="https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs/solid/heart.svg"> 
983                                ${response_data.favorites}&nbsp;Favorite
984                            </span>
985                        `;
986
987                        favorite_wrapper_div.innerHTML = new_html;
988                        
989                       
990                    }
991                else if(user_interaction == "favorite" && content_type == "content" && response_data.page_type == "content_view") {
992
993                    
994                                      
995                }
996                // Non tag favorites - like a piece of content!
997                else if(user_interaction == 'favorite') {
998
999                    showNotice('success', 'Favorite Added!');
1000                    interaction_element.textContent = "A Favorite!";
1001
1002                } else if(user_interaction == "more") {
1003                    interaction_element.innerHTML = "We're On It!";
1004                    more_message_element = document.getElementById(`more_message`);
1005                    more_message_element.innerHTML = 'You can see what the community is most requesting <a href="https://alphacoders.com/contest">at our community page</a>';
1006                } 
1007                // Removed like on content view page
1008                else if(user_interaction == "up" && response_data.hasOwnProperty('removed') && response_data.removed == true && 
1009                    content_type == "content" && response_data.page_type == "content_view") {
1010
1011                    let rate_wrapper_div = document.getElementById(`rate_${content_id}`);
1012
1013                    let new_html = `
1014                        <span class='button button-green rate-content' 
1015                            title="Like This"
1016                            onclick="interactSite('content', ${content_id}, 'up', 'content_view'); return false;"
1017                            id="content_${content_id}_up">
1018                            <img    class="svg svg-black" 
1019                                    alt="Like Icon" 
1020                                    src="https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs/solid/thumbs-up.svg"> 
1021                                    ${response_data.votes_up}&nbsp;Like
1022                        </span>
1023                    `;
1024
1025                    rate_wrapper_div.innerHTML = new_html;
1026                }
1027                // Like on content view page
1028                else if(user_interaction == "up" && content_type == "content" && response_data.page_type == "content_view") {
1029                    console.log("Rated up on content view page");
1030                    let rate_wrapper_div = document.getElementById(`rate_${content_id}`);
1031
1032                                            let new_html = `
1033                            <img class="svg svg-black" src="https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs/solid/smile-beam.svg"> 
1034                            <img class="svg svg-black" src="https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs/solid/thumbs-up.svg"> 
1035                            ${response_data.votes_up}
1036                        `;
1037
1038                        interaction_element.innerHTML = new_html;
1039                                     
1040
1041                } else if(user_interaction == 'up') {
1042
1043                    let new_html = `
1044                        <img class="svg svg-black" src="https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs/solid/smile-beam.svg"> 
1045                        <img class="svg svg-black" src="https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs/solid/thumbs-up.svg"> 
1046                        ${response_data.votes_up}
1047                    `;
1048
1049                    interaction_element.innerHTML = new_html;
1050                }
1051                
1052            } else {
1053                if(response_data.hasOwnProperty('error')) {
1054                    showNotice('error', response_data.error);
1055                } else {
1056                    showNotice('error', 'Unknown error');
1057                }
1058
1059            }
1060        }
1061
1062        function hideNotice() {
1063            const notice = document.getElementById('notice');
1064
1065            // Fade out the notice
1066            notice.style.opacity = '0';
1067
1068            // Actually hide the notice after the fade-out transition is complete
1069            setTimeout(() => notice.className = 'notice', 500);
1070        }
1071
1072        function showNotice(notice_type, notice_message) {
1073
1074            const notice = document.getElementById('notice');
1075            notice.style.opacity = '100';
1076            const notice_close_button = document.getElementById('notice-close');
1077            const messageElement = document.getElementById('notice-message');
1078
1079            messageElement.innerHTML = notice_message;
1080
1081            if(notice_type == 'success') {
1082
1083                notice.className = 'notice-visible notice-success';
1084                notice_close_button.className = 'notice-close notice-close-success';
1085  
1086              
1087            } else if(notice_type == 'error') {
1088                notice.className = 'notice-visible notice-error';
1089                notice_close_button.className = 'notice-close notice-close-error';
1090            }
1091
1092            // Automatically hide the notice after 4 seconds
1093            setTimeout(hideNotice, 4000);
1094
1095        }
1096
1097        function toggleMenu() {
1098
1099            var header_menu = document.querySelector('div.header-menu');
1100            var header_menu_display_style = window.getComputedStyle(header_menu).display;
1101
1102            // SHOW IT
1103            if(header_menu_display_style == 'none' || header_menu_display_style == '' || header_menu_display_style == false) {
1104
1105                header_menu.style.display = 'flex';
1106            } 
1107            // HIDE IT
1108            else {
1109                header_menu.style.display = 'none';
1110
1111            }
1112            
1113        }
1114
1115
1116        // Theme Toggle
1117        (function() {
1118            var svg_base = "https://static.alphacoders.com/fontawesome-pro-5.15.4-web/svgs";
1119            var theme_icons = {
1120                'dark': svg_base + '/solid/moon.svg',
1121                'light': svg_base + '/solid/sun.svg'
1122            };
1123            var default_icon = svg_base + '/solid/adjust.svg';
1124            var toggle_btn = document.getElementById('theme-toggle-btn');
1125            var dropdown = document.getElementById('theme-toggle-dropdown');
1126
1127            function resolveSystemTheme() {
1128                if (window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches) {
1129                    return 'light';
1130                }
1131                return 'dark';
1132            }
1133
1134            function getCookie(name) {
1135                var value = '; ' + document.cookie;
1136                var parts = value.split('; ' + name + '=');
1137                if (parts.length === 2) {
1138                    return parts.pop().split(';').shift();
1139                }
1140                return null;
1141            }
1142
1143            function setThemePreference(choice) {
1144                try {
1145                    localStorage.setItem('theme', choice);
1146                } catch (e) {
1147                }
1148
1149                var max_age = 60 * 60 * 24 * 365 * 5;
1150                var cookie = 'theme=' + encodeURIComponent(choice) + '; Max-Age=' + max_age + '; Path=/; SameSite=Lax';
1151                var host = window.location.hostname;
1152                if (host && host.indexOf('.') !== -1) {
1153                    var parts = host.split('.');
1154                    if (parts.length >= 2) {
1155                        var base_domain = parts.slice(-2).join('.');
1156                        cookie += '; Domain=.' + base_domain;
1157                    }
1158                }
1159                document.cookie = cookie;
1160            }
1161
1162            function getStoredTheme() {
1163                var cookie_theme = getCookie('theme');
1164                if (cookie_theme) {
1165                    return cookie_theme;
1166                }
1167
1168                try {
1169                    return localStorage.getItem('theme');
1170                } catch (e) {
1171                    return null;
1172                }
1173            }
1174
1175            function applyTheme(choice) {
1176                var effective = choice;
1177                if (choice === 'system' || !choice) {
1178                    effective = resolveSystemTheme();
1179                }
1180                document.documentElement.setAttribute('data-theme', effective);
1181
1182                if (toggle_btn) {
1183                    if (choice && theme_icons[choice]) {
1184                        toggle_btn.src = theme_icons[choice];
1185                    } else {
1186                        toggle_btn.src = default_icon;
1187                    }
1188                }
1189
1190                var options = document.querySelectorAll('.theme-toggle-option');
1191                for (var i = 0; i < options.length; i++) {
1192                    var opt = options[i];
1193                    if (opt.getAttribute('data-theme-value') === choice) {
1194                        opt.classList.add('active');
1195                    } else {
1196                        opt.classList.remove('active');
1197                    }
1198                }
1199            }
1200
1201            var stored_theme = getStoredTheme();
1202            applyTheme(stored_theme || 'system');
1203
1204            if (toggle_btn && dropdown) {
1205                toggle_btn.addEventListener('click', function(e) {
1206                    e.stopPropagation();
1207                    dropdown.classList.toggle('show');
1208                });
1209
1210                var options = dropdown.querySelectorAll('.theme-toggle-option');
1211                for (var i = 0; i < options.length; i++) {
1212                    options[i].addEventListener('click', function(e) {
1213                        var choice = this.getAttribute('data-theme-value');
1214                        setThemePreference(choice);
1215                        applyTheme(choice);
1216                        dropdown.classList.remove('show');
1217                    });
1218                }
1219
1220                document.addEventListener('click', function(e) {
1221                    if (!toggle_btn.contains(e.target) && !dropdown.contains(e.target)) {
1222                        dropdown.classList.remove('show');
1223                    }
1224                });
1225            }
1226
1227            if (window.matchMedia) {
1228                window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function() {
1229                    var current = getStoredTheme();
1230                    if (!current || current === 'system') {
1231                        applyTheme('system');
1232                    }
1233                });
1234            }
1235        })();
1236
1237
1238        function applyRecentContentPanelState() {
1239            recent_content_items = document.getElementById('recent_content_items');
1240            recent_content_toggle = document.getElementById('recent_content_toggle');
1241            if(!recent_content_items || !recent_content_toggle) {
1242                return;
1243            }
1244
1245            if(window.localStorage.getItem('recent_content_minimized') == '1') {
1246                recent_content_items.style.display = 'none';
1247                recent_content_toggle.textContent = 'Show Recent';
1248            } else {
1249                recent_content_items.style.display = 'flex';
1250                recent_content_toggle.textContent = 'Minimize';
1251            }
1252        }
1253
1254        function authorFilter(author_id, filter_type, new_tab = false) {
1255            const form = document.createElement("form");
1256            form.method = "POST";
1257            form.action = "https://alphacoders.com/author/view/" + author_id;
1258            if(new_tab == true) {
1259                form.target = "_blank";
1260            }
1261            
1262            const hidden_field = document.createElement("input");
1263            hidden_field.type = "hidden";
1264            hidden_field.name = "filter";
1265            hidden_field.value = filter_type;
1266            
1267            form.appendChild(hidden_field);
1268            document.body.appendChild(form);
1269            
1270            form.submit();
1271        }
1272
1273        function getSiteInteractionContentType(legacy_ac_type) {
1274            if(legacy_ac_type == 'mobile_wallpaper') {
1275                return 'mobile';
1276            }
1277            if(legacy_ac_type == 'pic') {
1278                return 'picture';
1279            }
1280            return legacy_ac_type;
1281        }
1282
1283        function profileFilter(profile_user_id, profile_user_name, filter_type) {
1284            const form = document.createElement("form");
1285            form.method = "POST";
1286            form.action = "https://alphacoders.com/users/profile/" + profile_user_id + "/" + encodeURIComponent(profile_user_name);
1287            
1288            const hidden_field = document.createElement("input");
1289            hidden_field.type = "hidden";
1290            hidden_field.name = "filter";
1291            hidden_field.value = filter_type;
1292            
1293            form.appendChild(hidden_field);
1294            document.body.appendChild(form);
1295            
1296            form.submit();
1297        }
1298
1299        function toggleRecentContentPanel() {
1300            if(window.localStorage.getItem('recent_content_minimized') == '1') {
1301                window.localStorage.setItem('recent_content_minimized', '0');
1302            } else {
1303                window.localStorage.setItem('recent_content_minimized', '1');
1304            }
1305
1306            applyRecentContentPanelState();
1307        }
1308
1309        recent_content_container = document.getElementById('recent_content');
1310        if(recent_content_container) {
1311            recent_content_observer = new MutationObserver(function() {
1312                applyRecentContentPanelState();
1313            });
1314            recent_content_observer.observe(recent_content_container, { childList: true });
1315        }
1316
1317
1318    </script>
1318
1319
1320    
1321    
1321<script>
1322        document.addEventListener('DOMContentLoaded', function() {
1323            const dropdownButton = document.querySelector('.button-dropdown');
1324            const dropdownContent = document.querySelector('.button-dropdown-content');
1325        
1326            if(dropdownButton && dropdownContent) {
1327                dropdownButton.addEventListener('click', function(e) {
1328                    e.preventDefault();
1329                    dropdownContent.classList.toggle('show');
1330                });
1331            
1332                // Close the dropdown when clicking outside of it
1333                document.addEventListener('click', function(e) {
1334                    if (!dropdownButton.contains(e.target) && !dropdownContent.contains(e.target)) {
1335                        dropdownContent.classList.remove('show');
1336                    }
1337                });
1338            }
1339           
1340        });
1341    </script>
1341
1342
1343    
1344
1345</body>
1346
1347</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.