In his films, Woody Allen consistently uses the same typeface in the opening and closing credits. Midnight in Paris (2011):
Remember that memorable interrogation scene on Pier 32 from The Naked Gun?
The actor who played the sleazy dock foreman is named Joe Grifasi.
Famabara languages
1 г. назад
Famabara currently supports 4 languages: English, Spanish, German and Russian.
The language setting affects the site interface. Also, the language must be specified when creating a post.
The language setting affects the site interface. Also, the language must be specified when creating a post.
Preformatted text
1 г. назад
Famabara supports preformatted text now. You can use it inside posts and comments.
Just write some text between triple backticks "```".
Backticks must be placed in the beginning of a new line.
Just write some text between triple backticks "```".
Backticks must be placed in the beginning of a new line.
const years = [2024, 2030, 2050];
for (const year of years) {
console.log(year);
};
It can be useful when showing some code - all spaces are saved:<div>
<div>
Some text
</div>
<div>
Other text
</div>
</div>
Quotes in posts and comments
1 г. назад
Famabara now supports quotes in posts and comments. Write ">" character in the beginning of a new line and this line will become a quote.
Example:
The text I wrote:
Stay with Famabara!
Example:
I want to eat 3 pizzas.
No, don't do it! I want to eat an apple.
And a peach.
That's a good idea!And a peach.
The text I wrote:
> I want to eat 3 pizzas. No, don't do it! > I want to eat an apple. > And a peach. That's a good idea!
Stay with Famabara!
Search and tags subscriptions
1 г. назад
Several useful changes have been added to the site over the past few days.
First, search was added to Famabara. All posts are indexed automatically.
Secondly, users can now subscribe to tags.
Of course, many minor changes have been made to improve the interaction with the site.
First, search was added to Famabara. All posts are indexed automatically.
Secondly, users can now subscribe to tags.
Of course, many minor changes have been made to improve the interaction with the site.
Syntax highlight in preformatted text
1 г. назад
Write language name after triple backticks (```) and content of preformatted text will be highlighted.
This is example:
Golang syntax highlight example:
Javascript syntax highlight example:
SQL example:
For C++ write "cpp", not "c++".
For C# write "csharp", not "c#"
Famabara uses highlight.js for syntax highlight.
This is example:
``` ts let projectName: string|null = null; projectName = 'Famabara'; ```Of course, you shouldn't start backticks-line with a space.
Golang syntax highlight example:
package main
import "fmt"
func main() {
fmt.Println("Hello, from Go!")
}
Javascript syntax highlight example:
console.log(2**2**3); // 256 console.log(2**(2**3)); // 256 console.log((2**2)**3); // 65
SQL example:
SELECT p.id, p.title FROM posts p LIMIT 10;
For C++ write "cpp", not "c++".
For C# write "csharp", not "c#"
Famabara uses highlight.js for syntax highlight.
If you try to use Quill Editor with Nuxt 3 when rendering a page in SSR you will get this error:
a NodeJS environment, not a browser.
The sad fact: <client-only> won't help with this problem. The problem with quill's code is that during import, it assumes it's being executed in the browser. I hope you remember that the code imported from the module is not just imported, but executed, i.e. the authors of Quill wrote it so that the 'document' object is immediately accessed there. Very bad.
One solution is to disable SSR, but its an awful solution. But the second solution is to use dynamic JS imports.
My <script lang="ts" setup> in QuillEditor.vue in Nuxt 3 project:
Now your Quill editor will work in Nuxt 3 even during SSR!
500 document is not defined.
That means NodeJS doesn't have the global variable 'document'. Because SSR rendering is executed ina NodeJS environment, not a browser.
The sad fact: <client-only> won't help with this problem. The problem with quill's code is that during import, it assumes it's being executed in the browser. I hope you remember that the code imported from the module is not just imported, but executed, i.e. the authors of Quill wrote it so that the 'document' object is immediately accessed there. Very bad.
One solution is to disable SSR, but its an awful solution. But the second solution is to use dynamic JS imports.
My <script lang="ts" setup> in QuillEditor.vue in Nuxt 3 project:
import 'quill/dist/quill.core.css';
import 'quill/dist/quill.snow.css';
// import Quill from 'quill'; // SSR problem with 'document', need to use dynamic import
import type Quill from 'quill';
const elemForQuillEditor = ref<HTMLDivElement|null>(null);
let editor: null|Quill = null; // Do not store in ref() - it causes bugs!
// ...
async function createQuillAndSetListeners() {
const Quill = (await import('quill')).default; // This is most important thing - usage of JS dynamic import
if (!elemForQuillEditor.value) return;
editor = new Quill(elemForQuillEditor.value, {
theme: 'snow',
modules: {
history: {
delay: 2000,
maxStack: 500,
userOnly: true,
},
toolbar: {
container: [
['bold', 'italic', 'underline', 'strike'],
['link'],
[{ list: 'ordered' }, { list: 'bullet' }],
[{ script: 'sub' }, { script: 'super' }],
[{ header: [1, 2, 3, 4, 5, 6, false] }],
[{ color: [] }, { background: [] }],
['clean'],
['undo', 'redo'],
],
handlers: {
undo() {
editor?.history.undo();
},
redo() {
editor?.history.redo();
},
},
},
},
placeholder: props.placeholder,
});
editor.on('text-change', () => {
if (!editor) return;
// ... my other code
});
}
// ...
onMounted(createQuillAndSetListeners);
Now your Quill editor will work in Nuxt 3 even during SSR!
Вы не вошли в свой аккаунт, а жаль
You can now insert previously uploaded images and videos into posts and comments by selecting them from a list.
If, while editing a post, a user accidentally deletes a content block, it can now be restored using a button in the notification in the corner of the screen.
New types of complaints have been added: content created by a AI and copyright infringement.
The project rules have been updated.
A small profanity check is now performed when saving a post or comment.
If, while editing a post, a user accidentally deletes a content block, it can now be restored using a button in the notification in the corner of the screen.
New types of complaints have been added: content created by a AI and copyright infringement.
The project rules have been updated.
A small profanity check is now performed when saving a post or comment.
Latest changes on Famabara
недавно
Fixed a bug with displaying the number of unread comments.
Improved error display when mobile internet connection is lost.
Added a sticky loader when saving a comment.
Improved aria-attributes for screen readers.
Added Open Graph support for some pages.
When publishing a post, a like is automatically added to the published post.
In open posts, a button icon was added to quickly jump to comments.
Separate language-specific home pages were created on sub-URLs like /es, /de, etc.
The site header is now fixed at the top on most pages.
Improved error display when mobile internet connection is lost.
Added a sticky loader when saving a comment.
Improved aria-attributes for screen readers.
Added Open Graph support for some pages.
When publishing a post, a like is automatically added to the published post.
In open posts, a button icon was added to quickly jump to comments.
Separate language-specific home pages were created on sub-URLs like /es, /de, etc.
The site header is now fixed at the top on most pages.
At work, on one of our projects, I ran into an issue in Nuxt 4 where a page component needs to perform different redirects via navigateTo() based on various conditions during the execution of the setup function. Something like this:
This is where the problem appears: in the end, the redirect always goes to the very last URL, i.e. in the example above the navigation ends up at /?abc=4. I dug into the documentation but couldn't find anything built-in to prevent subsequent navigateTo calls from being triggered. It seems this behavior is related to vue router.
You can't write it like this either:
In the end, the only solution that worked was introducing a boolean variable and checking it before calling navigateTo:
<template>
Some page
</template>
<script lang="ts" setup>
if (1 + 1 === 2) {
await navigateTo('/?abc=1', {
redirectCode: 302,
});
}
if (2 + 2 === 4) {
await navigateTo('/?abc=2', {
redirectCode: 302,
});
}
if (3 + 3 === 6) {
await navigateTo('/?abc=3', {
redirectCode: 302,
});
}
if (4 + 4 === 8) {
await navigateTo('/?abc=4', {
redirectCode: 302,
});
}
</script>
This is where the problem appears: in the end, the redirect always goes to the very last URL, i.e. in the example above the navigation ends up at /?abc=4. I dug into the documentation but couldn't find anything built-in to prevent subsequent navigateTo calls from being triggered. It seems this behavior is related to vue router.
You can't write it like this either:
if (1 + 1 === 2) {
await navigateTo('/?abc=1', {
redirectCode: 302,
});
return; // not allowed in script setup
}
In the end, the only solution that worked was introducing a boolean variable and checking it before calling navigateTo:
let isAlreadyRedirected = false;
if (1 + 1 === 2) {
await navigateTo('/?abc=1', {
redirectCode: 302,
});
isAlreadyRedirected = true;
}
if (!isAlreadyRedirected && 2 + 2 === 4) {
await navigateTo('/?abc=2', {
redirectCode: 302,
});
isAlreadyRedirected = true;
}
if (!isAlreadyRedirected && 3 + 3 === 6) {
await navigateTo('/?abc=3', {
redirectCode: 302,
});
isAlreadyRedirected = true;
}
if (!isAlreadyRedirected && 4 + 4 === 8) {
await navigateTo('/?abc=4', {
redirectCode: 302,
});
isAlreadyRedirected = true;
}
Once again: this is the only thing that solved the problem for me. If you have any other solution, please let me know.Поздравляем! Больше нет постов для загрузки.



