Merge pull request #925 from annando/markdown-escape
[friendica-addons.git/.git] / advancedcontentfilter / doc / advancedcontentfilter.md
1 <style>
2 .advancedcontentfilter-content-wrapper {
3         min-height: calc(100vh - 150px);
4     padding: 15px;
5     padding-bottom: 20px;
6     margin-bottom: 20px;
7     border: none;
8     /*background-color: #fff;*/
9     background-color: rgba(255,255,255,0.95);
10     border-radius: 4px;
11     position: relative;
12     /*overflow: hidden;*/
13     color: #555;
14     box-shadow: 0 0 3px #dadada;
15     -webkit-box-shadow: 0 0 3px #dadada;
16     -moz-box-shadow: 0 0 3px #dadada;
17 }
18 </style>
19
20 <a href="advancedcontentfilter">🔙 Back to Advanced Content Filter Settings</a>
21
22 # Advanced Content Filter Help
23
24 The advanced Content Filter uses Symfony's Expression Language.
25 This help page includes a summary of [the Symfony's Expression Language documentation page.](https://symfony.com/doc/current/components/expression_language/syntax.html)
26
27 ## Basics
28
29 The advanced content filter matches each post that is about to be displayed against each enabled rule you set.
30
31 A rule is a boolean expression that should return either `true` or `false` depending on post variables.
32
33 If the expression using a post variables returns `true`, the post will be collapsed and the matching rule name will be displayed above the collapsed content.
34
35 A post will be collapsed if at least one rule matches, but all matching rule names will be displayed above the collapsed content.
36
37 ## Expression Syntax
38
39 ### Supported Literals
40
41 - **strings** - single and double quotes (e.g. `'hello'`).
42 - **numbers** - e.g. `103`.
43 - **arrays** - using JSON-like notation (e.g. `[1, 2]`).
44 - **hashes** - using JSON-like notation (e.g. `{ foo: 'bar' }`).
45 - **booleans** - `true` and `false`.
46 - **null** - `null`.
47
48 A backslash (``\``) must be escaped by 2 backslashes (``\\``) in a string and 4 backslashes (``\\\\``) in a regex::
49
50 `"a\\b" matches "/^a\\\\b$/"`
51
52 Control characters (e.g. ``\n``) in expressions are replaced with whitespace. To avoid this, escape the sequence with a single backslash (e.g.  ``\\n``).
53
54 ### Supported Operators
55
56 The component comes with a lot of operators:
57
58 #### Arithmetic Operators
59
60 * ``+`` (addition)
61 * ``-`` (subtraction)
62 * ``*`` (multiplication)
63 * ``/`` (division)
64 * ``%`` (modulus)
65 * ``**`` (pow)
66
67 #### Bitwise Operators
68
69 * ``&`` (and)
70 * ``|`` (or)
71 * ``^`` (xor)
72
73 #### Comparison Operators
74
75 * ``==`` (equal)
76 * ``===`` (identical)
77 * ``!=`` (not equal)
78 * ``!==`` (not identical)
79 * ``<`` (less than)
80 * ``>`` (greater than)
81 * ``<=`` (less than or equal to)
82 * ``>=`` (greater than or equal to)
83 * ``matches`` (regex match)
84
85 To test if a string does *not* match a regex, use the logical ``not`` operator in combination with the ``matches`` operator:
86
87 `not ("foo" matches "/bar/")`
88
89 You must use parenthesis because the unary operator ``not`` has precedence over the binary operator ``matches``.
90
91 #### Logical Operators
92
93 * ``not`` or ``!``
94 * ``and`` or ``&&``
95 * ``or`` or ``||``
96
97 #### String Operators
98
99 * ``~`` (concatenation)
100
101 For example: ``firstName ~ " " ~ lastName``
102
103 #### Array Operators
104
105 * ``in`` (contain)
106 * ``not in`` (does not contain)
107
108 For example: ``user.group in ["human_resources", "marketing"]``
109
110 #### Numeric Operators
111
112 * ``..`` (range)
113
114 For example: ``user.age in 18..45``
115
116 #### Ternary Operators
117
118 * ``foo ? 'yes' : 'no'``
119 * ``foo ?: 'no'`` (equal to ``foo ? foo : 'no'``)
120 * ``foo ? 'yes'`` (equal to ``foo ? 'yes' : ''``)
121
122 ### Supported variables
123
124 Here are a sample of the available variables you can use in your expressions.
125 You can also retrieve the variables of a specific post by pasting its URL below the rule list.
126
127 <table class="table-bordered table-condensed table-striped">
128 <thead>
129         <tr>
130                 <th>Variable</th>
131                 <th>Type</th>
132                 <th>Sample Value</th>
133         </tr>
134 </thead>
135 <tbody>
136         <tr>
137                 <th>author_id</th>
138                 <td>number</td>
139                 <td>6</td>
140         </tr>
141         <tr>
142                 <th>author_link</th>
143                 <td>string</td>
144                 <td>https://friendica.mrpetovan.com/profile/hypolite</td>
145         </tr>
146         <tr>
147                 <th>author_name</th>
148                 <td>string</td>
149                 <td>Hypolite Petovan</td>
150         </tr>
151         <tr>
152                 <th>author_avatar</th>
153                 <td>string</td>
154                 <td>https://friendica.mrpetovan.com/photo/41084997915a94a8c83cc39708500207-5.png</td>
155         </tr>
156         <tr>
157                 <th>owner_id</th>
158                 <td>number</td>
159                 <td>6</td>
160         </tr>
161         <tr>
162                 <th>owner_link</th>
163                 <td>string</td>
164                 <td>https://friendica.mrpetovan.com/profile/hypolite</td>
165         </tr>
166         <tr>
167                 <th>owner_name</th>
168                 <td>string</td>
169                 <td>Hypolite Petovan</td>
170         </tr>
171         <tr>
172                 <th>owner_avatar</th>
173                 <td>string</td>
174                 <td>https://friendica.mrpetovan.com/photo/41084997915a94a8c83cc39708500207-5.png</td>
175         </tr>
176         <tr>
177                 <th>contact_id</th>
178                 <td>number</td>
179                 <td>1</td>
180         </tr>
181         <tr>
182                 <th>uid</th>
183                 <td>number</td>
184                 <td>1</td>
185         </tr>
186         <tr>
187                 <th>id</th>
188                 <td>number</td>
189                 <td>791875</td>
190         </tr>
191         <tr>
192                 <th>parent</th>
193                 <td>number</td>
194                 <td>791875</td>
195         </tr>
196         <tr>
197                 <th>uri</th>
198                 <td>string</td>
199                 <td>urn:X-dfrn:friendica.mrpetovan.com:1:twit:978740198937907200</td>
200         </tr>
201         <tr>
202                 <th>thr_parent</th>
203                 <td>string</td>
204                 <td>urn:X-dfrn:friendica.mrpetovan.com:1:twit:978740198937907200</td>
205         </tr>
206         <tr>
207                 <th>parent_uri</th>
208                 <td>string</td>
209                 <td>urn:X-dfrn:friendica.mrpetovan.com:1:twit:978740198937907200</td>
210         </tr>
211         <tr>
212                 <th>content_warning</th>
213                 <td>string</td>
214                 <td></td>
215         </tr>
216         <tr>
217                 <th>commented</th>
218                 <td>date</td>
219                 <td>2018-03-27 21:10:18</td>
220         </tr>
221         <tr>
222                 <th>created</th>
223                 <td>date</td>
224                 <td>2018-03-27 21:10:18</td>
225         </tr>
226         <tr>
227                 <th>edited</th>
228                 <td>date</td>
229                 <td>2018-03-27 21:10:18</td>
230         </tr>
231         <tr>
232                 <th>received</th>
233                 <td>date</td>
234                 <td>2018-03-27 21:10:18</td>
235         </tr>
236         <tr>
237                 <th>verb</th>
238                 <td>string</td>
239                 <td>http://activitystrea.ms/schema/1.0/post</td>
240         </tr>
241         <tr>
242                 <th>object_type</th>
243                 <td>string</td>
244                 <td>http://activitystrea.ms/schema/1.0/bookmark</td>
245         </tr>
246         <tr>
247                 <th>postopts</th>
248                 <td>string</td>
249                 <td>twitter&lang=pidgin;0.24032407407407:english;0.225:french;0.18055555555556</td>
250         </tr>
251         <tr>
252                 <th>plink</th>
253                 <td>string</td>
254                 <td>https://friendica.mrpetovan.com/display/735a2029995abab33a5c006052376776</td>
255         </tr>
256         <tr>
257                 <th>guid</th>
258                 <td>string</td>
259                 <td>735a2029995abab33a5c006052376776</td>
260         </tr>
261         <tr>
262                 <th>wall</th>
263                 <td>boolean</td>
264                 <td>1</td>
265         </tr>
266         <tr>
267                 <th>private</th>
268                 <td>boolean</td>
269                 <td>0</td>
270         </tr>
271         <tr>
272                 <th>starred</th>
273                 <td>boolean</td>
274                 <td>0</td>
275         </tr>
276         <tr>
277                 <th>title</th>
278                 <td>string</td>
279                 <td></td>
280         </tr>
281         <tr>
282                 <th>body</th>
283                 <td>string</td>
284                 <td>Over-compensation #[url=https://friendica.mrpetovan.com/search?tag=Street]Street[/url] #[url=https://friendica.mrpetovan.com/search?tag=Night]Night[/url] #[url=https://friendica.mrpetovan.com/search?tag=CarLights]CarLights[/url] #[url=https://friendica.mrpetovan.com/search?tag=Jeep]Jeep[/url] #[url=https://friendica.mrpetovan.com/search?tag=NoPeople]NoPeople[/url] #[url=https://friendica.mrpetovan.com/search?tag=Close]Close[/url]-up
285         [attachment type='link' url='https://www.eyeem.com/p/120800309' title='Over-compensation Street Night Car Lights Jeep No | EyeEm' image='https://cdn.eyeem.com/thumb/b2f019738cbeef06e2f8c9517c6286a8adcd3a00-1522184820641/640/480']Photo by @[url=https://twitter.com/MrPetovan]MrPetovan[/url][/attachment]</td>
286         </tr>
287         <tr>
288                 <th>file</th>
289                 <td>string</td>
290                 <td></td>
291         </tr>
292         <tr>
293                 <th>event_id</th>
294                 <td>number</td>
295                 <td>null
296         <tr>
297                 <th>location</th>
298                 <td>string</td>
299                 <td></td>
300         </tr>
301         <tr>
302                 <th>coord</th>
303                 <td>string</td>
304                 <td></td>
305         </tr>
306         <tr>
307                 <th>app</th>
308                 <td>string</td>
309                 <td>EyeEm</td>
310         </tr>
311         <tr>
312                 <th>attach</th>
313                 <td>string</td>
314                 <td></td>
315         </tr>
316         <tr>
317                 <th>rendered_hash</th>
318                 <td>string</td>
319                 <td>b70abdea8b362dc5dcf63e1b2836ad89</td>
320         </tr>
321         <tr>
322                 <th>rendered_html</th>
323                 <td>string</td>
324                 <td>
325                         Over-compensation #&lt;a href="https://friendica.mrpetovan.com/search?tag=Street" class="tag" title="Street"&gt;Street&lt;/a&gt; #&lt;a href="https://friendica.mrpetovan.com/search?tag=Night" class="tag" title="Night"&gt;Night&lt;/a&gt; #&lt;a href="https://friendica.mrpetovan.com/search?tag=CarLights" class="tag" title="CarLights"&gt;CarLights&lt;/a&gt; #&lt;a href="https://friendica.mrpetovan.com/search?tag=Jeep" class="tag" title="Jeep"&gt;Jeep&lt;/a&gt; #&lt;a href="https://friendica.mrpetovan.com/search?tag=NoPeople" class="tag" title="NoPeople"&gt;NoPeople&lt;/a&gt; #&lt;a href="https://friendica.mrpetovan.com/search?tag=Close" class="tag" title="Close"&gt;Close&lt;/a&gt;-up &lt;div class="type-link"&gt;&lt;a href="https://www.eyeem.com/p/120800309" target="_blank"&gt;&lt;img src="https://friendica.mrpetovan.com/proxy/bb/aHR0cHM6Ly9jZG4uZXllZW0uY29tL3RodW1iL2IyZjAxOTczOGNiZWVmMDZlMmY4Yzk1MTdjNjI4NmE4YWRjZDNhMDAtMTUyMjE4NDgyMDY0MS82NDAvNDgw" alt="" title="Over-compensation Street Night Car Lights Jeep No | EyeEm" class="attachment-image"&gt;&lt;/a&gt;&lt;br&gt;&lt;h4&gt;&lt;a href="https://www.eyeem.com/p/120800309"&gt;Over-compensation Street Night Car Lights Jeep No | EyeEm&lt;/a&gt;&lt;/h4&gt;&lt;blockquote&gt;Photo by @&lt;a href="https://twitter.com/MrPetovan" class="userinfo mention" title="MrPetovan"&gt;MrPetovan&lt;/a&gt;&lt;/blockquote&gt;&lt;sup&gt;&lt;a href="https://www.eyeem.com/p/120800309"&gt;www.eyeem.com&lt;/a&gt;&lt;/sup&gt;&lt;/div&gt;
326                 </td>
327         </tr>
328         <tr>
329                 <th>object</th>
330                 <td>string</td>
331                 <td>{"created_at":"Tue Mar 27 21:07:02 +0000 2018","id":978740198937907200,"id_str":"978740198937907200","full_text":"Over-compensation #Street #Night #CarLights #Jeep #NoPeople #Close-up https:\/\/t.co\/7w4ua13QA7","truncated":false,"display_text_range":[0,93],"entities":{"hashtags":[{"text":"Street","indices":[18,25]},{"text":"Night","indices":[26,32]},{"text":"CarLights","indices":[33,43]},{"text":"Jeep","indices":[44,49]},{"text":"NoPeople","indices":[50,59]},{"text":"Close","indices":[60,66]}],"symbols":[],"user_mentions":[],"urls":[{"url":"https:\/\/t.co\/7w4ua13QA7","expanded_url":"http:\/\/EyeEm.com\/p\/120800309","display_url":"EyeEm.com\/p\/120800309","indices":[70,93]}]},"source":"&lt;a href=\"http:\/\/www.eyeem.com\" rel=\"nofollow\"&gt;EyeEm&lt;\/a&gt;","in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":403748896,"id_str":"403748896","name":"\ud83d\udc30yp\ud83e\udd5ali\u271d\ufe0fe Pet\ud83e\udd5avan","screen_name":"MrPetovan","location":"NYC","description":"White male form of milquetoast. Avatar by @DearMsDear inspired by @TSG_LAB.\n\nFriendica\/Diaspora\/Mastodon: hypolite@friendica.mrpetovan.com","url":"https:\/\/t.co\/PcARi5OhQO","entities":{"url":{"urls":[{"url":"https:\/\/t.co\/PcARi5OhQO","expanded_url":"https:\/\/mrpetovan.com","display_url":"mrpetovan.com","indices":[0,23]}]},"description":{"urls":[]}},"protected":false,"followers_count":182,"friends_count":146,"listed_count":15,"created_at":"Wed Nov 02 23:13:14 +0000 2011","favourites_count":45826,"utc_offset":-14400,"time_zone":"Eastern Time (US &amp; Canada)","geo_enabled":false,"verified":false,"statuses_count":15554,"lang":"en","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"000000","profile_background_image_url":"http:\/\/pbs.twimg.com\/profile_background_images\/370213187\/fond_twitter_mrpetovan.png","profile_background_image_url_https":"https:\/\/pbs.twimg.com\/profile_background_images\/370213187\/fond_twitter_mrpetovan.png","profile_background_tile":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/968008546322395136\/6qLCiu0o_normal.jpg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/968008546322395136\/6qLCiu0o_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/403748896\/1464321684","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"000000","profile_use_background_image":true,"has_extended_profile":true,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false,"translator_type":"none"},"geo":null,"coordinates":null,"place":null,"contributors":null,"is_quote_status":false,"retweet_count":0,"favorite_count":0,"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"}</td>
332         </tr>
333         <tr>
334                 <th>allow_cid</th>
335                 <td>string</td>
336                 <td></td>
337         </tr>
338         <tr>
339                 <th>allow_gid</th>
340                 <td>string</td>
341                 <td></td>
342         </tr>
343         <tr>
344                 <th>deny_cid</th>
345                 <td>string</td>
346                 <td></td>
347         </tr>
348         <tr>
349                 <th>deny_gid</th>
350                 <td>string</td>
351                 <td></td>
352         </tr>
353         <tr>
354                 <th>item_id</th>
355                 <td>number</td>
356                 <td>791875</td>
357         </tr>
358         <tr>
359                 <th>item_network</th>
360                 <td>string</td>
361                 <td>dfrn</td>
362         </tr>
363         <tr>
364                 <th>author_thumb</th>
365                 <td>string</td>
366                 <td>https://friendica.mrpetovan.com/photo/0cb3d7231eb751139d7d309c7c686c49-5.png?ts=1522941604</td>
367         </tr>
368         <tr>
369                 <th>owner_thumb</th>
370                 <td>string</td>
371                 <td>https://friendica.mrpetovan.com/photo/0cb3d7231eb751139d7d309c7c686c49-5.png?ts=1522941604</td>
372         </tr>
373         <tr>
374                 <th>network</th>
375                 <td>string</td>
376                 <td></td>
377         </tr>
378         <tr>
379                 <th>url</th>
380                 <td>string</td>
381                 <td>https://friendica.mrpetovan.com/profile/hypolite</td>
382         </tr>
383         <tr>
384                 <th>name</th>
385                 <td>string</td>
386                 <td>Hypolite Petovan</td>
387         </tr>
388         <tr>
389                 <th>writable</th>
390                 <td>boolean</td>
391                 <td>0</td>
392         </tr>
393         <tr>
394                 <th>self</th>
395                 <td>boolean</td>
396                 <td>1</td>
397         </tr>
398         <tr>
399                 <th>cid</th>
400                 <td>number</td>
401                 <td>1</td>
402         </tr>
403         <tr>
404                 <th>alias</th>
405                 <td>string</td>
406                 <td></td>
407         </tr>
408         <tr>
409                 <th>event_created</th>
410                 <td>date</td>
411                 <td>null</td>
412         </tr>
413         <tr>
414                 <th>event_edited</th>
415                 <td>date</td>
416                 <td>null</td>
417         </tr>
418         <tr>
419                 <th>event_start</th>
420                 <td>date</td>
421                 <td>null</td>
422         </tr>
423         <tr>
424                 <th>event_finish</th>
425                 <td>date</td>
426                 <td>null</td>
427         </tr>
428         <tr>
429                 <th>event_summary</th>
430                 <td>string</td>
431                 <td>null</td>
432         </tr>
433         <tr>
434                 <th>event_desc</th>
435                 <td>string</td>
436                 <td>null</td>
437         </tr>
438         <tr>
439                 <th>event_location</th>
440                 <td>string</td>
441                 <td>null</td>
442         </tr>
443         <tr>
444                 <th>event_type</th>
445                 <td>string</td>
446                 <td>null</td>
447         </tr>
448         <tr>
449                 <th>event_nofinish</th>
450                 <td>string</td>
451                 <td>null</td>
452         </tr>
453         <tr>
454                 <th>event_adjust</th>
455                 <td>boolean</td>
456                 <td>null</td>
457         </tr>
458         <tr>
459                 <th>event_ignore</th>
460                 <td>boolean</td>
461                 <td>null</td>
462         </tr>
463         <tr>
464                 <th>pagedrop</th>
465                 <td>string</td>
466                 <td>true</td>
467         </tr>
468         <tr>
469                 <th>tags</th>
470                 <td>list</td>
471                 <td>
472                         <ol start="0">
473                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Street" target="_blank"&gt;street&lt;/a&gt;</li>
474                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Night" target="_blank"&gt;night&lt;/a&gt;</li>
475                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=CarLights" target="_blank"&gt;carlights&lt;/a&gt;</li>
476                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Jeep" target="_blank"&gt;jeep&lt;/a&gt;</li>
477                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=NoPeople" target="_blank"&gt;nopeople&lt;/a&gt;</li>
478                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Close" target="_blank"&gt;close&lt;/a&gt;</li>
479                                 <li>@&lt;a href="https://twitter.com/MrPetovan" target="_blank"&gt;mrpetovan&lt;/a&gt;</li>
480                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Close-up" target="_blank"&gt;close-up&lt;/a&gt;</li>
481                         </ol>
482                 </td>
483         </tr>
484         <tr>
485                 <th>hashtags</th>
486                 <td>list</td>
487                 <td>
488                         <ol start="0">
489                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Street" target="_blank"&gt;street&lt;/a&gt;</li>
490                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Night" target="_blank"&gt;night&lt;/a&gt;</li>
491                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=CarLights" target="_blank"&gt;carlights&lt;/a&gt;</li>
492                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Jeep" target="_blank"&gt;jeep&lt;/a&gt;</li>
493                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=NoPeople" target="_blank"&gt;nopeople&lt;/a&gt;</li>
494                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Close" target="_blank"&gt;close&lt;/a&gt;</li>
495                                 <li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Close-up" target="_blank"&gt;close-up&lt;/a&gt;</li>
496                         </ol>
497                 </td>
498         </tr>
499         <tr>
500                 <th>mentions</th>
501                 <td>string</td>
502                 <td>
503                         <ol start="0">
504                                 <li>@&lt;a href="https://twitter.com/MrPetovan" target="_blank"&gt;mrpetovan&lt;/a&gt;</li>
505                         </ol>
506                 </td>
507         </tr>
508 </tbody>
509 </table>