11import { parseUserScriptMetadata } from "../utils/metadataParser.js" ;
2-
32function setupGreasyfork ( elements ) {
43 if ( ! elements . button ) return ;
54
@@ -38,7 +37,7 @@ async function searchGreasyfork(elements) {
3837 const query = elements . searchInput . value . trim ( ) ;
3938 if ( ! query ) return ;
4039
41- elements . results . innerHTML = "" ;
40+ elements . results . textContent = "" ;
4241 elements . loading . style . display = "block" ;
4342
4443 try {
@@ -53,68 +52,82 @@ async function searchGreasyfork(elements) {
5352
5453 const scripts = await response . json ( ) ;
5554
55+ elements . results . textContent = "" ; // Safer than innerHTML reset
56+
5657 if ( scripts . length === 0 ) {
57- elements . results . innerHTML = `
58- <div class="no-results">
59- No scripts found for "${ escapeHtml (
60- query
61- ) } ". Try a different search term.
62- </div>
63- ` ;
58+ const div = document . createElement ( "div" ) ;
59+ div . className = "no-results" ;
60+ div . textContent = `No scripts found for "${ query } ". Try a different search term.` ;
61+ elements . results . appendChild ( div ) ;
6462 } else {
65- elements . results . innerHTML = scripts
66- . map ( ( script ) => createScriptCard ( script ) )
67- . join ( "" ) ;
68-
69- elements . results
70- . querySelectorAll ( ".import-greasy-fork" )
71- . forEach ( ( button ) => {
72- button . addEventListener ( "click" , ( ) => {
73- const codeUrl = button . closest ( ".script-card" ) . dataset . codeUrl ;
74- importGreasyforkScript ( codeUrl ) ;
75- } ) ;
76- } ) ;
63+ for ( const script of scripts ) {
64+ const card = createScriptCard ( script ) ;
65+ elements . results . appendChild ( card ) ;
66+ }
7767 }
68+
69+ elements . results
70+ . querySelectorAll ( ".import-greasy-fork" )
71+ . forEach ( ( button ) => {
72+ button . addEventListener ( "click" , ( ) => {
73+ const codeUrl = button . closest ( ".script-card" ) . dataset . codeUrl ;
74+ importGreasyforkScript ( codeUrl ) ;
75+ } ) ;
76+ } ) ;
7877 } catch ( error ) {
7978 console . error ( "Error searching Greasy Fork:" , error ) ;
80- elements . results . innerHTML = `
81- <div class="error-message">
82- Error searching Greasy Fork: ${ error . message } . Please try again later.
83- </div>
84- ` ;
79+ const errorDiv = document . createElement ( "div" ) ;
80+ errorDiv . className = "error-message" ;
81+ errorDiv . textContent = `Error searching Greasy Fork: ${ error . message } . Please try again later.` ;
82+ elements . results . appendChild ( errorDiv ) ;
8583 } finally {
8684 elements . loading . style . display = "none" ;
8785 }
8886}
8987
9088function createScriptCard ( script ) {
91- const formatNumber = ( num ) => {
92- return num ? num . toLocaleString ( ) : "0" ;
93- } ;
94-
95- return `
96- <div class="script-card" data-code-url="${ escapeHtml ( script . code_url ) } ">
97- <h3>${ escapeHtml ( script . name ) } </h3>
98- <div class="script-card-meta">
99- <span>👤 ${ formatNumber ( script . total_installs ) } </span>
100- <span>👍 ${ formatNumber ( script . good_ratings ) } </span>
101- <span>v${ script . version || "1.0.0" } </span>
102- </div>
103- <p class="script-card-description">${ escapeHtml (
104- script . description || ""
105- ) } </p>
106- <div class="script-card-actions">
107- <a href="${
108- script . url
109- } " target="_blank" rel="noopener noreferrer" class="secondary">
110- View on Greasy Fork
111- </a>
112- <button class="primary import-greasy-fork">
113- Import
114- </button>
115- </div>
116- </div>
89+ const formatNumber = ( num ) => ( num ? num . toLocaleString ( ) : "0" ) ;
90+
91+ const card = document . createElement ( "div" ) ;
92+ card . className = "script-card" ;
93+ card . dataset . codeUrl = script . code_url ;
94+
95+ const title = document . createElement ( "h3" ) ;
96+ title . textContent = script . name ;
97+ card . appendChild ( title ) ;
98+
99+ const meta = document . createElement ( "div" ) ;
100+ meta . className = "script-card-meta" ;
101+ meta . innerHTML = `
102+ <span>👤 ${ formatNumber ( script . total_installs ) } </span>
103+ <span>👍 ${ formatNumber ( script . good_ratings ) } </span>
104+ <span>v${ script . version || "1.0.0" } </span>
117105 ` ;
106+ card . appendChild ( meta ) ;
107+
108+ const description = document . createElement ( "p" ) ;
109+ description . className = "script-card-description" ;
110+ description . textContent = script . description || "" ;
111+ card . appendChild ( description ) ;
112+
113+ const actions = document . createElement ( "div" ) ;
114+ actions . className = "script-card-actions" ;
115+
116+ const viewLink = document . createElement ( "a" ) ;
117+ viewLink . href = script . url ;
118+ viewLink . target = "_blank" ;
119+ viewLink . rel = "noopener noreferrer" ;
120+ viewLink . className = "secondary" ;
121+ viewLink . textContent = "View on Greasy Fork" ;
122+ actions . appendChild ( viewLink ) ;
123+
124+ const importBtn = document . createElement ( "button" ) ;
125+ importBtn . className = "primary import-greasy-fork" ;
126+ importBtn . textContent = "Import" ;
127+ actions . appendChild ( importBtn ) ;
128+
129+ card . appendChild ( actions ) ;
130+ return card ;
118131}
119132
120133async function importGreasyforkScript ( codeUrl ) {
@@ -195,4 +208,4 @@ async function importGreasyforkScript(codeUrl) {
195208 }
196209}
197210
198- export { setupGreasyfork } ;
211+ export { setupGreasyfork } ;
0 commit comments