Here’s a very basic example to get you started
\define drop-actions()
<$let dropped-link={{{ [<event-param>jsonget[0],[text]] }}} >
<$action-createtiddler $basetitle="NewBook" tags="book"
link={{{ [<dropped-link>split[
]first[]] }}}
text={{{ [<dropped-link>split[
]butfirst[]] }}}>
</$let>
\end
<$messagecatcher $tm-import-tiddlers=<<drop-actions>>>
<$dropzone class="books-import">
<ul>
<$list filter="[tag[book]]" emptyMessage="Drag a link here to add a book to the list">
<li>{{||$:/core/ui/Buttons/delete}} <a href={{!!link}}><$view field="text"><$text text={{!!link}}/></$view></a></li>
</$list>
</ul>
</$dropzone>
<$messagecatcher>
<style>
.books-import li>button{
float:left;
}
.books-import a>p{
display:contents;
}
.books-import.tc-dragover{
border: 2px dashed <<colour dropzone-background>>;
}
.books-import.tc-dragover:before{
content: "<<lingo DropMessage>>";
}
</style>
https://demos.tiddlyhost.com/#List%20of%20books
EDIT: Here’s a short explanation of what the code above does :
The dropzone widget send a tm-import-tiddlers message when a drop event is fired. Usually, this message is handled by the navigator widget and it opens the $:/Import tiddler + update the story, to prevent that, I used a messagecatcher widget. When it receive the tm-import-tiddlers message, the macro drop-actions is executed.
When a link is dropped on the wiki, it’s actually in a json form, so this macro get the json that is saved in the variable event-param, then create a tiddler with a base title of NewBook, a book tag, set the text field to the text content of the link, and the link field to the link dropped.
The list show every tiddler tagged with book, so it is updated and the link you dropped is listed.
This doesnt handle the BibText format but you could probably extend this code to detect if the input is in the bibtext format or not and save the data as appropriate. The bibtext plugin could help, I guess.