11 let html = `<h1>${valTownInspo.title}</h1>
12 <p>${valTownInspo.description}</p>
13 <a href="https://val.town/${valTownInspo.val}"><img src="${valTownInspo.image}" style="max-width:576px"/></a>
14 <p><a href="https://www.val.town/settings/intervals">Unsubscribe here</a></p>`;
15
11 let html = `<h1>${valTownInspo.title}</h1>
12 <p>${valTownInspo.description}</p>
13 <a href="https://val.town/${valTownInspo.val}"><img src="${valTownInspo.image}" style="max-width:576px"/></a>
14 <p><a href="https://www.val.town/settings/intervals">Unsubscribe here</a></p>`;
15
11 let html = `<h1>${valTownInspo.title}</h1>
12 <p>${valTownInspo.description}</p>
13 <a href="https://val.town/${valTownInspo.val}"><img src="${valTownInspo.image}" style="max-width:576px"/></a>
14 <p><a href="https://www.val.town/settings/intervals">Unsubscribe here</a></p>`;
15
3View and interact with your Val Town SQLite data. It's based off Steve's excellent [SQLite Admin](https://www.val.town/v/stevekrouse/sqlite_admin?v=46) val, adding the ability to run SQLite queries directly in the interface. This new version has a revised UI and that's heavily inspired by [LibSQL Studio](https://github.com/invisal/libsql-studio) by [invisal](https://github.com/invisal). This is now more an SPA, with tables, queries and results showing up on the same page.
4
5
6
7## Install
1# Code on Val Town
2
3
4
5Adds a "Code on Val Town" ribbon to your page. This lets your website visitors navigate to the code behind it.
3Protect your vals behind a password. Use session cookies to persist authentication.
4
5
6
7## Demo
3This is a lightweight Blob Admin interface to view and debug your Blob data.
4
5
6
7Use this button to install the val:
70 .error { color: red; }
71 #refreshButton { padding: 10px 20px; font-size: 16px; margin-bottom: 20px; }
72 .embedded-image { max-width: 100%; height: auto; margin-top: 10px; border-radius: 4px; }
73 </style>
74 </head>
84 <div class="author">${item.author?.displayName || 'Unknown'} (@${item.author?.username || 'unknown'})</div>
85 <div>${item.text || 'No content'}</div>
86 ${item.embeds?.images && item.embeds.images.length > 0 ?
87 `<img src="${item.embeds.images[0].url}" alt="Embedded image" class="embedded-image">` :
88 ''}
89 <div class="timestamp">${new Date(item.timestamp || Date.now()).toLocaleString()}</div>
105 <div class="author">\${item.author?.displayName || 'Unknown'} (@\${item.author?.username || 'unknown'})</div>
106 <div>\${item.text || 'No content'}</div>
107 \${item.embeds?.images && item.embeds.images.length > 0 ?
108 \`<img src="\${item.embeds.images[0].url}" alt="Embedded image" class="embedded-image">\` :
109 ''}
110 <div class="timestamp">\${new Date(item.timestamp || Date.now()).toLocaleString()}</div>
4
5
6<img width="400px" src="https://imagedelivery.net/iHX6Ovru0O7AjmyT5yZRoA/2661d748-d7a7-4d1e-85a4-f60fae262000/public" />
7
4
5
6<img width="400px" src="https://imagedelivery.net/iHX6Ovru0O7AjmyT5yZRoA/2661d748-d7a7-4d1e-85a4-f60fae262000/public" />
7