🔀 Merge “release/v81” into “master”
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / web / WebInterfaceModule.kt
1 package net.pterodactylus.sone.web
2
3 import com.google.inject.*
4 import freenet.support.api.*
5 import net.pterodactylus.sone.core.*
6 import net.pterodactylus.sone.data.*
7 import net.pterodactylus.sone.database.*
8 import net.pterodactylus.sone.freenet.*
9 import net.pterodactylus.sone.freenet.wot.*
10 import net.pterodactylus.sone.main.*
11 import net.pterodactylus.sone.template.*
12 import net.pterodactylus.sone.text.*
13 import net.pterodactylus.util.notify.*
14 import net.pterodactylus.util.template.*
15 import javax.inject.*
16 import javax.inject.Singleton
17
18 class WebInterfaceModule : AbstractModule() {
19
20         @Provides
21         @Singleton
22         fun getTemplateContextFactory(
23                         soneAccessor: SoneAccessor,
24                         postAccessor: PostAccessor,
25                         replyAccessor: ReplyAccessor,
26                         identityAccessor: IdentityAccessor,
27                         profileAccessor: ProfileAccessor,
28                         l10nFilter: L10nFilter,
29                         parserFilter: ParserFilter,
30                         renderFilter: RenderFilter,
31                         linkedElementsFilter: LinkedElementsFilter,
32                         unknownDateFilter: UnknownDateFilter,
33                         imageLinkFilter: ImageLinkFilter,
34                         loaders: Loaders
35         ) =
36                         TemplateContextFactory().apply {
37                                 addAccessor(Any::class.java, ReflectionAccessor())
38                                 addAccessor(Collection::class.java, CollectionAccessor())
39                                 addAccessor(Sone::class.java, soneAccessor)
40                                 addAccessor(Post::class.java, postAccessor)
41                                 addAccessor(Reply::class.java, replyAccessor)
42                                 addAccessor(Album::class.java, AlbumAccessor())
43                                 addAccessor(Image::class.java, ImageAccessor())
44                                 addAccessor(Identity::class.java, identityAccessor)
45                                 addAccessor(Trust::class.java, TrustAccessor())
46                                 addAccessor(HTTPRequest::class.java, HttpRequestAccessor())
47                                 addAccessor(Profile::class.java, profileAccessor)
48
49                                 addFilter("date", DateFilter())
50                                 addFilter("html", HtmlFilter())
51                                 addFilter("replace", ReplaceFilter())
52                                 addFilter("store", StoreFilter())
53                                 addFilter("l10n", l10nFilter)
54                                 addFilter("substring", SubstringFilter())
55                                 addFilter("xml", XmlFilter())
56                                 addFilter("change", RequestChangeFilter())
57                                 addFilter("match", MatchFilter())
58                                 addFilter("css", CssClassNameFilter())
59                                 addFilter("js", JavascriptFilter())
60                                 addFilter("parse", parserFilter)
61                                 addFilter("shorten", ShortenFilter())
62                                 addFilter("render", renderFilter)
63                                 addFilter("linked-elements", linkedElementsFilter)
64                                 addFilter("render-linked-element", LinkedElementRenderFilter())
65                                 addFilter("reparse", ReparseFilter())
66                                 addFilter("unknown", unknownDateFilter)
67                                 addFilter("format", FormatFilter())
68                                 addFilter("duration", DurationFormatFilter())
69                                 addFilter("sort", CollectionSortFilter())
70                                 addFilter("image-link", imageLinkFilter)
71                                 addFilter("replyGroup", ReplyGroupFilter())
72                                 addFilter("in", ContainsFilter())
73                                 addFilter("unique", UniqueElementFilter())
74                                 addFilter("mod", ModFilter())
75                                 addFilter("paginate", PaginationFilter())
76                                 addFilter("render-histogram", HistogramRenderer())
77
78                                 addProvider(TemplateProvider.TEMPLATE_CONTEXT_PROVIDER)
79                                 addProvider(loaders.templateProvider)
80                         }
81
82         @Provides
83         fun getSoneAccessor(core: Core, timeTextConverter: TimeTextConverter) =
84                         SoneAccessor(core, timeTextConverter)
85
86         @Provides
87         fun getPostAccessor(core: Core) =
88                         PostAccessor(core)
89
90         @Provides
91         fun getReplyAccessor(core: Core) =
92                         ReplyAccessor(core)
93
94         @Provides
95         fun getIdentityAccessor(core: Core) =
96                         IdentityAccessor(core)
97
98         @Provides
99         fun getProfileAccessor(core: Core) =
100                         ProfileAccessor(core)
101
102         @Provides
103         fun getL10nFilter(translation: Translation) =
104                         L10nFilter(translation)
105
106         @Provides
107         fun getParserFilter(core: Core, soneTextParser: SoneTextParser) =
108                         ParserFilter(core, soneTextParser)
109
110         @Provides
111         fun getRenderFilter(soneProvider: SoneProvider, soneTextParser: SoneTextParser, htmlFilter: HtmlFilter) =
112                         RenderFilter(soneProvider, soneTextParser, htmlFilter)
113
114         @Provides
115         fun getLinkedElementsFilter(elementLoader: ElementLoader) =
116                         LinkedElementsFilter(elementLoader)
117
118         @Provides
119         fun getUnknownDateFilter(translation: Translation) =
120                         UnknownDateFilter(translation, "View.Sone.Text.UnknownDate")
121
122         @Provides
123         fun getImageLinkFilter(core: Core) =
124                         ImageLinkFilter(core)
125
126         @Provides
127         @Named("toadletPathPrefix")
128         fun getPathPrefix(): String = "/Sone/"
129
130         @Provides
131         @Singleton
132         fun getNotificationManager() =
133                         NotificationManager()
134
135 }