File size: 11,488 Bytes
9218ec0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description"

        content="Machine Learning Systems - An interactive PDF viewer for exploring machine learning systems concepts, architectures, and best practices.">
    <meta name="keywords" content="machine learning, ML systems, AI, deep learning, MLOps">
    <meta name="author" content="Machine Learning Systems">

    <title>Machine Learning Systems | Interactive PDF Viewer</title>

    <!-- Fonts -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link

        href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=Fira+Code:wght@400;500&display=swap"

        rel="stylesheet">

    <!-- Styles -->
    <link rel="stylesheet" href="styles.css">

    <!-- PDF.js -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.min.js"></script>
</head>

<body>
    <!-- Header -->
    <header class="header">
        <div class="header-content">
            <div class="logo-section">
                <div class="logo-icon">
                    <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                        <path d="M12 2L2 7L12 12L22 7L12 2Z" stroke="currentColor" stroke-width="2"

                            stroke-linecap="round" stroke-linejoin="round" />
                        <path d="M2 17L12 22L22 17" stroke="currentColor" stroke-width="2" stroke-linecap="round"

                            stroke-linejoin="round" />
                        <path d="M2 12L12 17L22 12" stroke="currentColor" stroke-width="2" stroke-linecap="round"

                            stroke-linejoin="round" />
                    </svg>
                </div>
                <div class="logo-text">
                    <h1>Machine Learning Systems</h1>
                    <p class="subtitle">Interactive PDF Viewer</p>
                </div>
            </div>

            <div class="header-actions">
                <button class="btn-icon" id="themeToggle" title="Toggle theme">
                    <svg id="sunIcon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                        <circle cx="12" cy="12" r="5" stroke="currentColor" stroke-width="2" />
                        <path

                            d="M12 1V3M12 21V23M4.22 4.22L5.64 5.64M18.36 18.36L19.78 19.78M1 12H3M21 12H23M4.22 19.78L5.64 18.36M18.36 5.64L19.78 4.22"

                            stroke="currentColor" stroke-width="2" stroke-linecap="round" />
                    </svg>
                    <svg id="moonIcon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"

                        style="display: none;">
                        <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" stroke="currentColor" stroke-width="2"

                            stroke-linecap="round" stroke-linejoin="round" />
                    </svg>
                </button>
                <button class="btn-icon" id="searchBtn" title="Search (Ctrl+F)">
                    <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                        <circle cx="11" cy="11" r="8" stroke="currentColor" stroke-width="2" />
                        <path d="M21 21L16.65 16.65" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
                    </svg>
                </button>
                <button class="btn-icon" id="fullscreenBtn" title="Fullscreen">
                    <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                        <path

                            d="M8 3H5C3.89543 3 3 3.89543 3 5V8M21 8V5C21 3.89543 20.1046 3 19 3H16M16 21H19C20.1046 21 21 20.1046 21 19V16M3 16V19C3 20.1046 3.89543 21 5 21H8"

                            stroke="currentColor" stroke-width="2" stroke-linecap="round" />
                    </svg>
                </button>
                <a href="Machine-Learning-Systems.pdf" download class="btn-primary">
                    <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                        <path d="M21 15V19C21 20.1046 20.1046 21 19 21H5C3.89543 21 3 20.1046 3 19V15"

                            stroke="currentColor" stroke-width="2" stroke-linecap="round" />
                        <path d="M7 10L12 15L17 10" stroke="currentColor" stroke-width="2" stroke-linecap="round"

                            stroke-linejoin="round" />
                        <path d="M12 15V3" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
                    </svg>
                    Download PDF
                </a>
            </div>
        </div>
    </header>

    <!-- Main Content -->
    <main class="main-container">
        <!-- Sidebar -->
        <aside class="sidebar" id="sidebar">
            <div class="sidebar-header">
                <h2>Navigation</h2>
                <button class="btn-icon" id="closeSidebarBtn" title="Close sidebar">
                    <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                        <path d="M18 6L6 18M6 6L18 18" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
                    </svg>
                </button>
            </div>

            <div class="page-info">
                <div class="info-item">
                    <span class="info-label">Current Page</span>
                    <span class="info-value" id="currentPageDisplay">1</span>
                </div>
                <div class="info-item">
                    <span class="info-label">Total Pages</span>
                    <span class="info-value" id="totalPagesDisplay">-</span>
                </div>
            </div>

            <div class="page-navigation">
                <label for="pageInput">Go to Page</label>
                <div class="page-input-group">
                    <input type="number" id="pageInput" min="1" placeholder="1">
                    <button class="btn-secondary" id="goToPageBtn">Go</button>
                </div>
            </div>

            <div class="thumbnails" id="thumbnails">
                <p class="loading-text">Loading pages...</p>
            </div>
        </aside>

        <!-- PDF Viewer -->
        <div class="viewer-container">
            <button class="sidebar-toggle" id="sidebarToggle" title="Toggle sidebar">
                <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                    <path d="M3 12H21M3 6H21M3 18H21" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
                </svg>
            </button>

            <!-- Search Panel -->
            <div class="search-panel" id="searchPanel">
                <div class="search-input-group">
                    <input type="text" id="searchInput" placeholder="Search in PDF...">
                    <button class="btn-secondary" id="searchNextBtn">Next</button>
                    <button class="btn-secondary" id="searchPrevBtn">Previous</button>
                    <button class="btn-icon" id="closeSearchBtn">
                        <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                            <path d="M18 6L6 18M6 6L18 18" stroke="currentColor" stroke-width="2"

                                stroke-linecap="round" />
                        </svg>
                    </button>
                </div>
                <p class="search-results" id="searchResults"></p>
            </div>

            <!-- Controls -->
            <div class="controls">
                <div class="control-group">
                    <button class="btn-icon" id="prevPageBtn" title="Previous page (←)">
                        <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                            <path d="M15 18L9 12L15 6" stroke="currentColor" stroke-width="2" stroke-linecap="round"

                                stroke-linejoin="round" />
                        </svg>
                    </button>

                    <span class="page-indicator">
                        <span id="pageNum">1</span> / <span id="pageCount">-</span>
                    </span>

                    <button class="btn-icon" id="nextPageBtn" title="Next page (→)">
                        <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                            <path d="M9 18L15 12L9 6" stroke="currentColor" stroke-width="2" stroke-linecap="round"

                                stroke-linejoin="round" />
                        </svg>
                    </button>
                </div>

                <div class="control-group">
                    <button class="btn-icon" id="zoomOutBtn" title="Zoom out (-)">
                        <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                            <circle cx="11" cy="11" r="8" stroke="currentColor" stroke-width="2" />
                            <path d="M21 21L16.65 16.65" stroke="currentColor" stroke-width="2"

                                stroke-linecap="round" />
                            <path d="M8 11H14" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
                        </svg>
                    </button>

                    <span class="zoom-level" id="zoomLevel">100%</span>

                    <button class="btn-icon" id="zoomInBtn" title="Zoom in (+)">
                        <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                            <circle cx="11" cy="11" r="8" stroke="currentColor" stroke-width="2" />
                            <path d="M21 21L16.65 16.65" stroke="currentColor" stroke-width="2"

                                stroke-linecap="round" />
                            <path d="M11 8V14M8 11H14" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
                        </svg>
                    </button>

                    <button class="btn-icon" id="fitWidthBtn" title="Fit to width">
                        <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                            <rect x="3" y="3" width="18" height="18" rx="2" stroke="currentColor" stroke-width="2" />
                            <path d="M9 12H15M9 12L11 10M9 12L11 14M15 12L13 10M15 12L13 14" stroke="currentColor"

                                stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
                        </svg>
                    </button>
                </div>
            </div>

            <!-- Canvas Container -->
            <div class="canvas-container" id="canvasContainer">
                <div class="loading-overlay" id="loadingOverlay">
                    <div class="spinner"></div>
                    <p>Loading PDF...</p>
                </div>
                <canvas id="pdfCanvas"></canvas>
            </div>
        </div>
    </main>

    <!-- Scripts -->
    <script src="script.js"></script>
</body>

</html>