185185h6 code {
186186 font-size : 0.9em ;
187187}
188- </ style > </ head > < title > Rust Basel Meetups</ title > < a href ="https://rust-basel.ch "> < h1 > Rust Basel | Meetups | Workshops</ h1 > </ a > < div > < input type =" search " id =" search " placeholder =" Search Meetups " > < button > Search </ button > </ div > < div id =" 0 " > < h2 > Opensource Contributions Meetup | ? | 0 </ h2 > </ div > < div > < p > Level 4 - Optravis Headquarter | Barfüsserplatz 6 | Basel | 4051 </ p > </ div > < h3 > Sponsors </ h3 > < div > < p > Optravic LLC </ p > < a href =" http://optravis.com " > http://optravis.com </ a > < p > </ p > </ div > < div > < h3 > Meetup</ h3 >
188+ </ style > </ head > < title > Rust Basel Meetups</ title > < a href ="https://rust-basel.ch "> < h1 > Rust Basel | Meetups | Workshops</ h1 > </ a > < div > < h3 > Meetup</ h3 >
189189< p > Welcome to the first Rust Basel meetup focused on open source contributions!</ p >
190- < h3 > Featured Projects and Issues</ h3 >
190+ < h3 > Projects and Issues</ h3 >
191191< h4 > Issues</ h4 >
192192< ul >
193193< li > < a href ="https://github.com/vleue/vleue_navigator/issues/106 "> https://github.com/vleue/vleue_navigator/issues/106</ a > </ li >
194+ < li > maybe you have an issue already</ li >
194195</ ul >
195196< h4 > Repositories</ h4 >
196197< ul >
197198< li > < a href ="https://github.com/BloopAI/vibe-kanban "> https://github.com/BloopAI/vibe-kanban</ a > </ li >
198199< li > < a href ="https://github.com/ironcalc/IronCalc "> https://github.com/ironcalc/IronCalc</ a > </ li >
199200< li > < a href ="https://github.com/rust-basel/cli "> https://github.com/rust-basel/cli</ a > </ li >
201+ < li > your ideas</ li >
200202< li > Create your own Rust Open Source Project</ li >
201203</ ul >
202204< h3 > Teambuilding</ h3 >
203205< ul >
204- < li > We vote on which projects people want to work on.</ li >
205- < li > If more than three people want to work on the same project, we split the team into two teams.</ li >
206- < li > Make your spaces.</ li >
206+ < li >
207+ < p > We vote on which projects people want to work on.</ p >
208+ </ li >
209+ < li >
210+ < p > If more than three people want to work on the same project, split the team into two teams.</ p >
211+ </ li >
212+ < li >
213+ < p > Oranize yourself in physical space</ p >
214+ </ li >
207215</ ul >
208- < h3 > We vote on which ones are left over </ h3 >
216+ < h4 > Tips for contributing </ h4 >
209217< ul >
210- < li > Contribute to an existing Rust Open Source Project</ li >
211- < li > Start your own Open Source Project that integrates with Software via some Protocols or APIs
218+ < li > Check tickets with Help Wanted Label</ li >
219+ < li > Check tickets with Good First Issue Label</ li >
220+ < li > Reproducing a bug is also contributing</ li >
221+ < li > Be nice</ li >
222+ </ ul >
223+ < h4 > When starting your own project</ h4 >
212224< ul >
213225< li >
214- < p > Open Source Software </ p >
226+ < p > think about one feature and only implement that in this session </ p >
215227</ li >
216228< li >
217- < p > Proprietary Software (Please be aware of Licenses and Terms of Service restrictions) </ p >
229+ < p > try to use cargo commands to get things done </ p >
218230</ li >
219- </ ul >
231+ < li >
232+ < p > cargo init</ p >
233+ </ li >
234+ < li >
235+ < p > cargo add <dependency></ p >
236+ </ li >
237+ < li >
238+ < p > cargo run</ p >
239+ </ li >
240+ < li >
241+ < p > cargo test</ p >
242+ </ li >
243+ < li >
244+ < p > cargo fmt</ p >
245+ </ li >
246+ < li >
247+ < p > cargo clippy --fix</ p >
248+ </ li >
249+ < li >
250+ < p > cargo install --path .</ p >
220251</ li >
221252</ ul >
222- < h4 > Solving Tickets</ h4 >
223- < p > What to look out for:</ p >
224- < ul >
225- < li > Tickets with Help Wanted Label</ li >
226- < li > Tickets with Good First Issue Label</ li >
227- </ ul >
228- </ div > < script > /**
229- * Automatically jumps to elements based on search input field changes
230- * Searches through all text content in the page and scrolls to the first match
231- */
232- ( function ( ) {
233- // Find all input fields with type="search" or role="search" or class containing "search"
234- const searchInputs = document . querySelectorAll ( "search" ) ;
235-
236- // If no search inputs found, create a listener for any input field
237- const inputs =
238- searchInputs . length > 0
239- ? searchInputs
240- : document . querySelectorAll ( "search" ) ;
241-
242- /**
243- * Highlights matching text in the document
244- */
245- function highlightText ( text ) {
246- // Remove previous highlights
247- document . querySelectorAll ( ".search-highlight" ) . forEach ( ( el ) => {
248- const parent = el . parentNode ;
249- parent . replaceChild ( document . createTextNode ( el . textContent ) , el ) ;
250- parent . normalize ( ) ;
251- } ) ;
252-
253- if ( ! text || text . length < 2 ) return null ;
254-
255- // Find all text nodes in the document
256- const walker = document . createTreeWalker (
257- document . body ,
258- NodeFilter . SHOW_TEXT ,
259- {
260- acceptNode : function ( node ) {
261- // Skip script, style, and input elements
262- if ( node . parentElement . matches ( "script, style, input, textarea" ) ) {
263- return NodeFilter . FILTER_REJECT ;
264- }
265- return NodeFilter . FILTER_ACCEPT ;
266- } ,
267- } ,
268- ) ;
269-
270- let node ;
271- let firstMatch = null ;
272- const textLower = text . toLowerCase ( ) ;
273-
274- while ( ( node = walker . nextNode ( ) ) ) {
275- const nodeText = node . textContent ;
276- const nodeLower = nodeText . toLowerCase ( ) ;
277- const index = nodeLower . indexOf ( textLower ) ;
278-
279- if ( index !== - 1 ) {
280- // Create highlighted version
281- const before = nodeText . substring ( 0 , index ) ;
282- const match = nodeText . substring ( index , index + text . length ) ;
283- const after = nodeText . substring ( index + text . length ) ;
284-
285- const highlight = document . createElement ( "mark" ) ;
286- highlight . className = "search-highlight" ;
287- highlight . textContent = match ;
288- highlight . style . backgroundColor = "#ce422b" ;
289- highlight . style . color = "#ffffff" ;
290- highlight . style . padding = "2px 4px" ;
291- highlight . style . borderRadius = "2px" ;
292-
293- const fragment = document . createDocumentFragment ( ) ;
294- fragment . appendChild ( document . createTextNode ( before ) ) ;
295- fragment . appendChild ( highlight ) ;
296- fragment . appendChild ( document . createTextNode ( after ) ) ;
297-
298- node . parentNode . replaceChild ( fragment , node ) ;
299-
300- if ( ! firstMatch ) {
301- firstMatch = highlight ;
302- }
303- }
304- }
305-
306- return firstMatch ;
307- }
308-
309- /**
310- * Jumps to the first matching element
311- */
312- function jumpToMatch ( searchText ) {
313- const firstMatch = highlightText ( searchText ) ;
314-
315- if ( firstMatch ) {
316- firstMatch . scrollIntoView ( {
317- behavior : "smooth" ,
318- block : "center" ,
319- } ) ;
320- return true ;
321- }
322- return false ;
323- }
324-
325- // Add event listeners to all search inputs
326- inputs . forEach ( ( input ) => {
327- let debounceTimer ;
328-
329- input . addEventListener ( "input" , function ( e ) {
330- clearTimeout ( debounceTimer ) ;
331-
332- // Debounce to avoid excessive processing while typing
333- debounceTimer = setTimeout ( ( ) => {
334- const searchText = e . target . value . trim ( ) ;
335- jumpToMatch ( searchText ) ;
336- } , 300 ) ;
337- } ) ;
338- } ) ;
339-
340- console . log ( `Search-to-jump initialized on ${ inputs . length } input field(s)` ) ;
341- } ) ( ) ;
342- </ script >
253+ </ div >
0 commit comments