vtEditorFilesAGENTS.md2 matches
178179- **Redirects:** Use `return new Response(null, { status: 302, headers: { Location: "/place/to/redirect" }})` instead of `Response.redirect` which is broken
180- **Images:** Avoid external images or base64 images. Use emojis, unicode symbols, or icon fonts/libraries instead
181- **AI Image:** To inline generate an AI image use: `<img src="https://maxm-imggenurl.web.val.run/the-description-of-your-image" />`
182- **Storage:** DO NOT use the Deno KV module for storage
183- **Browser APIs:** DO NOT use the `alert()`, `prompt()`, or `confirm()` methods
157<div>
158<label class="block text-sm font-medium text-gray-700 mb-1">
159Banner Image URL
160</label>
161<input type="url" name="banner1_image" id="banner1_image"
162placeholder="https://example.com/header-banner.jpg"
163class="w-full px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-blue-500"
188<div>
189<label class="block text-sm font-medium text-gray-700 mb-1">
190Banner Image URL
191</label>
192<input type="url" name="banner2_image" id="banner2_image"
193placeholder="https://example.com/mid-banner.jpg"
194class="w-full px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-green-500"
217<div>
218<label class="block text-sm font-medium text-gray-700 mb-1">
219Banner Image URL
220</label>
221<input type="url" name="banner3_image" id="banner3_image"
222placeholder="https://example.com/pre-footer-banner.jpg"
223class="w-full px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-purple-500"
246<div>
247<label class="block text-sm font-medium text-gray-700 mb-1">
248Banner Image URL
249</label>
250<input type="url" name="banner4_image" id="banner4_image"
251placeholder="https://example.com/footer-banner.jpg"
252class="w-full px-3 py-2 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-orange-500"
389// Banner preview functionality
390function updateBannerPreview(bannerNumber) {
391const imageUrl = document.getElementById(`banner${bannerNumber}_image`).value;
392const clickUrl = document.getElementById(`banner${bannerNumber}_url`).value;
393const preview = document.getElementById(`banner${bannerNumber}_preview`);
394
395if (imageUrl || clickUrl) {
396let previewHtml = '<div class="border-2 border-dashed border-gray-300 p-3 rounded bg-white">';
397
398if (imageUrl) {
399previewHtml += `
400<img src="${imageUrl}" alt="Banner Preview"
401class="max-w-full h-16 object-contain mx-auto mb-2 rounded"
402onerror="this.style.display='none'; this.nextElementSibling.style.display='block';">
403<div style="display:none;" class="text-gray-500 text-xs text-center">⚠️ Image failed to load</div>
404`;
405}
407if (clickUrl) {
408previewHtml += `<p class="text-xs text-blue-600 text-center mt-1">🔗 Links to: ${clickUrl}</p>`;
409} else if (imageUrl) {
410previewHtml += `<p class="text-xs text-gray-500 text-center mt-1">💡 Add a click URL to make this banner clickable</p>`;
411}
440const banners = [];
441for (let i = 1; i <= 4; i++) {
442const imageUrl = formData.get(`banner${i}_image`);
443const clickUrl = formData.get(`banner${i}_url`);
444if (imageUrl || clickUrl) {
445banners.push({
446position: i,
447imageUrl: imageUrl || '',
448clickUrl: clickUrl || '',
449id: `banner_${i}`
77uri: pl.uri,
78id: pl.id,
79image: pl.images && pl.images.length > 0 ? pl.images[0].url : null,
80};
81}
233{
234id: string,
235type: "paragraph" | "heading_1" | "heading_2" | "heading_3" | "bulleted_list_item" | "numbered_list_item" | "to_do" | "toggle" | "child_page" | "child_database" | "embed" | "image" | "video" | "file" | "pdf" | "bookmark" | "callout" | "quote" | "equation" | "divider" | "table_of_contents" | "column" | "column_list" | "link_preview" | "synced_block" | "template" | "link_to_page" | "table" | "table_row" | "unsupported",
236created_time: string,
237last_edited_time: string,
eventsCalendarREADME.md1 match
9ability to munge an arbitrary event webpage → structured data → Notion db.
1011
1213[(source)](https://mermaid.live/edit#pako:eNplkt1um0AQRl9lNFetAm4cjKGoddWfqGqkJpFi9aLiZg1jTMPukN2hbmr53bsbnLSN2Qt24TtzZgQ7rLgmLNDR3UCmok-taqzSpQF_fWC-1crediTxYnHyTXWw5K0p4PP5El69G2z39o1jTUA_yQhsadWrhhYj_JgO5EVrlKdIQDYEnoOKjQRGOQiG2gdHLERjz8R_bV8PgSdozXZUHpuuejLvv3jX9TJOY6MMw7aVDbh7J6Sht6x7gZNDx_-rR_aZ3IkdKhks1VArUfDi4ubqEnj1Y6wrrXQUhZGi8N5vSaqXx31dsrTsy7XGkRV_E4bz0IODejXGx8gzvSU3dMdz_pPouDmkwNd0d10rVBqMsLFtjYVvnyLUZLUKR9yFWiX676CpxMJva1qr4MDS7D3WK_OdWT-Slodmg8Vadc6fhj4MefhJnp5aMjXZjzwYwWI2faiBxQ5_YTGdzydJliZJOsv9Ss7yCO-xyLNJPpumZ8k8y7PXp_l8H-HvB-vpJM_S_R_n7te3)
TopTenVideosoutput-generator.js5 matches
147*/
148generateBasicAd(ad) {
149if (!ad.imageUrl && !ad.clickUrl && !ad.title) return '';
150151const wrapperStart = ad.clickUrl ?
166<div class="text-center">
167${ad.title ? `<h3 class="text-xl font-semibold text-gray-800 mb-4">${ad.title}</h3>` : ''}
168${ad.imageUrl ? `
169<div class="mb-4">
170<img src="${ad.imageUrl}"
171alt="${ad.title || 'Advertisement'}"
172class="max-w-full h-48 object-contain mx-auto rounded-lg shadow-sm"
405<div class="text-center">
406\${ad.title ? \`<h3 class="text-xl font-semibold text-gray-800 mb-4">\${ad.title}</h3>\` : ''}
407\${ad.imageUrl ? \`
408<div class="mb-4">
409<img src="\${ad.imageUrl}"
410alt="\${ad.title || 'Advertisement'}"
411class="max-w-full h-48 object-contain mx-auto rounded-lg shadow-sm"
165<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
166<div>
167<label class="block text-xs font-medium text-gray-700 mb-1">Image URL</label>
168<input type="url" name="adImageUrl_1" class="ad-image-input w-full px-2 py-1 border border-gray-300 rounded text-sm focus:outline-none focus:ring-1 focus:ring-purple-500"
169placeholder="https://example.com/ad.jpg">
170</div>
344<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
345<div>
346<label class="block text-xs font-medium text-gray-700 mb-1">Image URL</label>
347<input type="url" name="adImageUrl_${slotNumber}" class="w-full px-2 py-1 border border-gray-300 rounded text-sm focus:outline-none focus:ring-1 focus:ring-purple-500" placeholder="https://example.com/ad.jpg">
348</div>
349<div>
404document.querySelectorAll('.ad-slot').forEach(slot => {
405const slotNumber = slot.dataset.slot;
406const imageUrl = formData.get(`adImageUrl_${slotNumber}`);
407const clickUrl = formData.get(`adClickUrl_${slotNumber}`);
408const title = formData.get(`adTitle_${slotNumber}`);
409const weight = parseInt(formData.get(`adWeight_${slotNumber}`)) || 5;
410
411if (imageUrl || clickUrl || title) {
412adSlots.push({
413id: `ad_${slotNumber}`,
414imageUrl, clickUrl, title, weight, slotNumber
415});
416}
TopTenVideosfree-input-iframe.html5 matches
97<div class="space-y-3">
98<div>
99<label for="adImageUrl" class="block text-sm font-medium text-gray-700 mb-1">
100Advertisement Image URL
101</label>
102<input type="url" id="adImageUrl" name="adImageUrl"
103placeholder="https://example.com/ad-banner.jpg"
104class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
231const subNiche = formData.get('subNiche');
232const customSubNiche = formData.get('customSubNiche');
233const adImageUrl = formData.get('adImageUrl');
234const adClickUrl = formData.get('adClickUrl');
235const adTitle = formData.get('adTitle');
244subNiche: finalSubNiche,
245advertisement: {
246imageUrl: adImageUrl,
247clickUrl: adClickUrl,
248title: adTitle
9- **One analysis per session** - refresh page for new analysis
10- **Basic niche selection** with 15+ categories and sub-niches
11- **Single advertisement slot** with image, URL, and title
12- **Professional layout** with video results display
13- **Full 10 video analysis** - we're generous! 😄
TopTenVideosfree-version.html10 matches
94<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
95<div>
96<label for="adImageUrl" class="block text-sm font-medium text-gray-700 mb-2">
97Advertisement Image URL
98</label>
99<input type="url" id="adImageUrl" name="adImageUrl"
100placeholder="https://example.com/ad-banner.jpg"
101class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
338const subNiche = formData.get('subNiche');
339const customSubNiche = formData.get('customSubNiche');
340const adImageUrl = formData.get('adImageUrl');
341const adClickUrl = formData.get('adClickUrl');
342const adTitle = formData.get('adTitle');
349<p><strong>Main Niche:</strong> ${nicheText}</p>
350${finalSubNiche ? `<p><strong>Sub-Niche:</strong> ${finalSubNiche}</p>` : ''}
351${adImageUrl || adClickUrl || adTitle ? `<p><strong>Advertisement:</strong> Basic ad configured</p>` : ''}
352</div>
353`;
354
355results.classList.remove('hidden');
356showVideoResults(nicheText, finalSubNiche, { imageUrl: adImageUrl, clickUrl: adClickUrl, title: adTitle });
357
358// Mark free analysis as used
553const advertisementContent = document.getElementById('advertisementContent');
554
555if (adConfig.imageUrl || adConfig.clickUrl || adConfig.title) {
556let adHtml = '';
557
566}
567
568if (adConfig.imageUrl) {
569adHtml += `
570<div class="mb-4">
571<img src="${adConfig.imageUrl}"
572alt="${adConfig.title || 'Advertisement'}"
573class="max-w-full h-48 object-contain mx-auto rounded-lg shadow-sm"
574onerror="this.style.display='none'; this.nextElementSibling.style.display='block';">
575<div style="display:none;" class="text-gray-500 text-sm mt-2">
576⚠️ Advertisement image failed to load
577</div>
578</div>