[BUGFIX] Re-add parsing for list elements
[Packages/TYPO3.CMS.git] / typo3 / sysext / css_styled_content / static / setup.txt
1 # ***************************************************************************
2 # Notice: "styles." (and "temp.") objects are UNSET after template parsing!
3 # Use "lib." for persisting storage of objects.
4 # ***************************************************************************
5
6 # Clear out any constants in this reserved room!
7 styles.content >
8
9 # get content
10 styles.content.get = CONTENT
11 styles.content.get {
12         table = tt_content
13         select.orderBy = sorting
14         select.where = colPos=0
15         select.languageField = sys_language_uid
16 }
17
18 # get content, left
19 styles.content.getLeft < styles.content.get
20 styles.content.getLeft.select.where = colPos=1
21
22 # get content, right
23 styles.content.getRight < styles.content.get
24 styles.content.getRight.select.where = colPos=2
25
26 # get content, margin
27 styles.content.getBorder < styles.content.get
28 styles.content.getBorder.select.where = colPos=3
29
30 # get news
31 styles.content.getNews < styles.content.get
32 styles.content.getNews.select.pidInList = {$styles.content.getNews.newsPid}
33
34 # Edit page object:
35 styles.content.editPanelPage = COA
36 styles.content.editPanelPage {
37         10 = EDITPANEL
38         10 {
39                 allow = toolbar,move,hide
40                 label.data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:eIcon.page
41                 label.wrap = |&nbsp;<b>%s</b>
42         }
43 }
44
45
46
47
48
49 # default link target for external URLs
50 config.extTarget = {$styles.content.links.extTarget}
51
52
53
54
55 # *********************************************************************
56 # "lib." objects are preserved from unsetting after template parsing
57 # *********************************************************************
58
59 # Creates a condition for targets. Not allowed in XHTML except for xhtml frames DTD
60 lib.parseTarget {
61         override =
62         override.if {
63                 isTrue.data = TSFE:dtdAllowsFrames
64         }
65 }
66
67 # Creates persistent ParseFunc setup for non-HTML content. This is recommended to use (as a reference!)
68 lib.parseFunc {
69         makelinks = 1
70         makelinks.http.keep = {$styles.content.links.keep}
71         makelinks.http.extTarget < lib.parseTarget
72         makelinks.http.extTarget =
73         makelinks.http.extTarget.override = {$styles.content.links.extTarget}
74         makelinks.mailto.keep = path
75         tags {
76                 link = TEXT
77                 link {
78                         current = 1
79                         typolink.parameter.data = parameters : allParams
80                         typolink.extTarget < lib.parseTarget
81                         typolink.extTarget =
82                         typolink.extTarget.override = {$styles.content.links.extTarget}
83                         typolink.target < lib.parseTarget
84                         typolink.target =
85                         typolink.target.override = {$styles.content.links.target}
86                         parseFunc.constants =1
87                 }
88         }
89         allowTags = {$styles.content.links.allowTags}
90         denyTags = *
91         sword = <span class="csc-sword">|</span>
92         constants = 1
93
94         nonTypoTagStdWrap.HTMLparser = 1
95         nonTypoTagStdWrap.HTMLparser {
96                 keepNonMatchedTags = 1
97                 htmlSpecialChars = 2
98         }
99 }
100
101 # good old parsefunc in "styles.content.parseFunc" is created for backwards compatibility. Don't use it, just ignore.
102 styles.content.parseFunc < lib.parseFunc
103
104 # Creates persistent ParseFunc setup for RTE content (which is mainly HTML) based on the "ts_css" transformation.
105 lib.parseFunc_RTE < lib.parseFunc
106 lib.parseFunc_RTE {
107         //  makelinks >
108         # Processing <table> and <blockquote> blocks separately
109         externalBlocks = article, aside, blockquote, div, dd, dl, footer, header, nav, ol, section, table, ul
110         externalBlocks {
111                 # The blockquote content is passed into parseFunc again...
112                 blockquote.stripNL=1
113                 blockquote.callRecursive=1
114
115                 table.stripNL=1
116                 table.stdWrap.HTMLparser = 1
117                 table.stdWrap.HTMLparser.tags.table.fixAttrib.class {
118                         default = contenttable
119                         always = 1
120                         list = contenttable
121                 }
122                 table.stdWrap.HTMLparser.keepNonMatchedTags = 1
123                 table.HTMLtableCells=1
124                 table.HTMLtableCells {
125                         # Recursive call to self but without wrapping non-wrapped cell content
126                         default.stdWrap {
127                                 parseFunc =< lib.parseFunc_RTE
128                                 parseFunc.nonTypoTagStdWrap.encapsLines.nonWrappedTag =
129                         }
130                         addChr10BetweenParagraphs=1
131                 }
132                 div.stripNL = 1
133                 div.callRecursive = 1
134
135                 article < .div
136                 aside < .div
137                 footer < .div
138                 header < .div
139                 nav < .div
140                 section < .div
141
142                 # List processing
143                 dl < .div
144                 dd < .div
145                 ol < .div
146                 ul < .div
147                 li.stdWrap.parseFunc < lib.parseFunc
148         }
149         nonTypoTagStdWrap.encapsLines {
150                 encapsTagList = p,pre,h1,h2,h3,h4,h5,h6,hr,dt,li
151                 remapTag.DIV = P
152                 nonWrappedTag = P
153                 innerStdWrap_all.ifBlank = &nbsp;
154                 addAttributes.P.class = bodytext
155                 addAttributes.P.class.setOnly=blank
156         }
157         nonTypoTagStdWrap.HTMLparser = 1
158         nonTypoTagStdWrap.HTMLparser {
159                 keepNonMatchedTags = 1
160                 htmlSpecialChars = 2
161         }
162 }
163
164
165 # Content header:
166 lib.stdheader = COA
167 lib.stdheader {
168
169         # Create class attribute for <Hx> tags
170         3 = LOAD_REGISTER
171         3 {
172                 headerClass {
173                         cObject = COA
174                         cObject {
175                                 # Create alignment class for <Hx> tags
176                                 10 = TEXT
177                                 10 {
178                                         field = header_position
179                                         required = 1
180                                         noTrimWrap = |csc-header-alignment-| |
181                                 }
182                                 # Create "csc-firstHeader" class for <Hx> tags
183                                 20 = TEXT
184                                 20 {
185                                         value = csc-firstHeader
186                                         if {
187                                                 value = 1
188                                                 equals.data = cObj:parentRecordNumber
189                                         }
190                                 }
191                                 stdWrap {
192                                         trim = 1
193                                         noTrimWrap = | class="|"|
194                                         required = 1
195                                 }
196                         }
197                 }
198         }
199
200         # Date format (not HTML5)
201         5 = TEXT
202         5 {
203                 field = date
204                 if {
205                         isTrue {
206                                 field = date
207                         }
208                         isFalse = 1
209                         isFalse {
210                                 if {
211                                         value = html5
212                                         equals.data = TSFE:config|config|doctype
213                                 }
214                         }
215                 }
216                 strftime = %x
217                 wrap = <p class="csc-header-date">|</p>
218                 prefixComment = 2 | Header date:
219         }
220
221         # This CASE cObject renders the header content:
222         # currentValue is set to the header data, possibly wrapped in link-tags.
223         10 = CASE
224         10.setCurrent {
225                 field = header
226                 htmlSpecialChars = 1
227                 typolink.parameter.field = header_link
228         }
229         10.key.field = header_layout
230         10.key.ifEmpty = {$content.defaultHeaderType}
231         10.key.ifEmpty.override.data = register: defaultHeaderType
232
233         10.1 = TEXT
234         10.1.current = 1
235         10.1.dataWrap = <h1{register:headerClass}>|</h1>
236
237         10.2 < .10.1
238         10.2.dataWrap = <h2{register:headerClass}>|</h2>
239
240         10.3 < .10.1
241         10.3.dataWrap = <h3{register:headerClass}>|</h3>
242
243         10.4 < .10.1
244         10.4.dataWrap = <h4{register:headerClass}>|</h4>
245
246         10.5 < .10.1
247         10.5.dataWrap = <h5{register:headerClass}>|</h5>
248
249         # HTML5 subheader
250         20 = CASE
251         20 {
252                 key {
253                         field = header_layout
254                 }
255
256                 default = TEXT
257                 default {
258                         wrap = <h2>|</h2>
259                         htmlSpecialChars = 1
260                         field = subheader
261                 }
262
263                 1 < .default
264
265                 2 < .default
266                 2.wrap = <h3>|</h3>
267
268                 3 < .default
269                 3.wrap = <h4>|</h4>
270
271                 4 < .default
272                 4.wrap = <h5>|</h5>
273
274                 5 < .default
275                 5.wrap = <h6>|</h6>
276
277                 if {
278                         isTrue {
279                                 field = subheader
280                         }
281                         value = html5
282                         equals.data = TSFE:config|config|doctype
283                 }
284         }
285
286         # HTML5 Date
287         40 = COA
288         40 {
289
290                 stdWrap {
291                         wrap = <p class="csc-header-date">|</p>
292                         innerWrap {
293                                 cObject = COA
294                                 cObject {
295                                         10 = TEXT
296                                         10 {
297                                                 value = <time
298                                         }
299                                         20 = TEXT
300                                         20 {
301                                                 noTrimWrap = | datetime="|"|
302                                                 field = date
303                                                 strftime = %Y-%m-%d
304                                         }
305                                         30 = TEXT
306                                         30 {
307                                                 value = >|</time>
308                                         }
309                                 }
310                         }
311                         required = 1
312                 }
313                 10 = TEXT
314                 10 {
315                         field = date
316                         strftime = %B %e, %Y
317                 }
318                 if {
319                         isTrue {
320                                 field = date
321                         }
322                         value = html5
323                         equals.data = TSFE:config|config|doctype
324                 }
325         }
326
327         # Pops the used registers off the stack:
328         98 = RESTORE_REGISTER
329
330         # Post-processing:
331         stdWrap.fieldRequired = header
332         stdWrap.if {
333                 equals.field = header_layout
334                 value = 100
335                 negate = 1
336         }
337
338         stdWrap.editIcons = tt_content : header, [header_layout | header_position], [header_link|date]
339         stdWrap.editIcons.beforeLastTag = 1
340         stdWrap.editIcons.iconTitle.data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:eIcon.header
341
342         stdWrap {
343                 dataWrap = <div class="csc-header csc-header-n{cObj:parentRecordNumber}">|</div>
344                 dataWrap {
345                         override = <header class="csc-header csc-header-n{cObj:parentRecordNumber}">|</header>
346                         override {
347                                 if {
348                                         isTrue {
349                                                 field = date
350                                         }
351                                         value = html5
352                                         equals.data = TSFE:config|config|doctype
353                                 }
354                         }
355                 }
356         }
357         stdWrap.prefixComment = 2 | Header:
358 }
359
360
361
362
363
364 #**********************************
365 # tt_content is started
366 #**********************************
367 tt_content >
368 tt_content = CASE
369 tt_content.key.field = CType
370 tt_content.stdWrap {
371         innerWrap.cObject = CASE
372         innerWrap.cObject {
373                 key.field = section_frame
374
375                 default = COA
376                 default {
377                         10 = TEXT
378                         10 {
379                                 cObject = CASE
380                                 cObject {
381                                         key.field = CType
382
383                                         default = TEXT
384                                         default {
385                                                 value = <div id="c{field:uid}"
386                                         }
387
388                                         div = TEXT
389                                         div {
390                                                 value = <div
391                                         }
392
393                                         menu < .default
394                                         menu {
395                                                 override = <nav id="c{field:uid}"
396                                                 override {
397                                                         if {
398                                                                 value = html5
399                                                                 equals.data = TSFE:config|config|doctype
400                                                         }
401                                                 }
402                                         }
403                                 }
404                                 insertData = 1
405                         }
406
407                         20 = COA
408                         20 {
409                                 # Create default class for content
410                                 10 = TEXT
411                                 10 {
412                                         value = csc-default
413                                         required = 1
414                                         noTrimWrap = || |
415                                 }
416                                 # Create class for space before content
417                                 20 = USER
418                                 20 {
419                                         userFunc = TYPO3\CMS\CssStyledContent\Controller\CssStyledContentController->renderSpace
420                                         space = before
421                                         constant = {$content.spaceBefore}
422                                         classStdWrap {
423                                                 noTrimWrap = |csc-space-before-| |
424                                         }
425                                 }
426                                 # Create class for space after content
427                                 30 = USER
428                                 30 {
429                                         userFunc = TYPO3\CMS\CssStyledContent\Controller\CssStyledContentController->renderSpace
430                                         space = after
431                                         constant = {$content.spaceAfter}
432                                         classStdWrap {
433                                                 noTrimWrap = |csc-space-after-| |
434                                         }
435                                 }
436                                 stdWrap {
437                                         trim = 1
438                                         noTrimWrap = | class="|"|
439                                         required = 1
440                                 }
441                         }
442
443                         30 = TEXT
444                         30 {
445                                 cObject = CASE
446                                 cObject {
447                                         key.field = CType
448
449                                         default = TEXT
450                                         default {
451                                                 value = >|</div>
452                                         }
453
454                                         menu < .default
455                                         menu {
456                                                 override = >|</nav>
457                                                 override {
458                                                         if {
459                                                                 value = html5
460                                                                 equals.data = TSFE:config|config|doctype
461                                                         }
462                                                 }
463                                         }
464                                 }
465                         }
466                 }
467
468                 1 =< tt_content.stdWrap.innerWrap.cObject.default
469                 1.20.10.value = csc-frame csc-frame-invisible
470
471                 5 =< tt_content.stdWrap.innerWrap.cObject.default
472                 5.20.10.value = csc-frame csc-frame-rulerBefore
473
474                 6 =< tt_content.stdWrap.innerWrap.cObject.default
475                 6.20.10.value = csc-frame csc-frame-rulerAfter
476
477                 10 =< tt_content.stdWrap.innerWrap.cObject.default
478                 10.20.10.value = csc-frame csc-frame-indent
479
480                 11 =< tt_content.stdWrap.innerWrap.cObject.default
481                 11.20.10.value = csc-frame csc-frame-indent3366
482
483                 12 =< tt_content.stdWrap.innerWrap.cObject.default
484                 12.20.10.value = csc-frame csc-frame-indent6633
485
486                 20 =< tt_content.stdWrap.innerWrap.cObject.default
487                 20.20.10.value = csc-frame csc-frame-frame1
488
489                 21 =< tt_content.stdWrap.innerWrap.cObject.default
490                 21.20.10.value = csc-frame csc-frame-frame2
491
492                 66 = COA
493                 66 {
494                         10 = TEXT
495                         10 {
496                                 value = <a id="c{field:uid}"></a>
497                                 insertData = 1
498                         }
499                         # Create div with class for space before content
500                         20 = COA
501                         20 {
502                                 10 = USER
503                                 10 {
504                                         userFunc = TYPO3\CMS\CssStyledContent\Controller\CssStyledContentController->renderSpace
505                                         space = before
506                                         constant = {$content.spaceBefore}
507                                         classStdWrap {
508                                                 wrap = csc-space-before-|
509                                         }
510                                 }
511                                 stdWrap {
512                                         wrap = <div class="|"></div>
513                                         required = 1
514                                 }
515                         }
516
517                         30 = TEXT
518                         30 {
519                                 value = |
520                         }
521
522                         # Create div with class for space after content
523                         40 < .20
524                         40 {
525                                 10 {
526                                         space = after
527                                         constant = {$content.spaceAfter}
528                                         classStdWrap {
529                                                 wrap = csc-space-after-|
530                                         }
531                                 }
532                         }
533                 }
534         }
535
536         innerWrap2 = | <p class="csc-linkToTop"><a href="#">{LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:label.toTop}</a></p>
537         innerWrap2.insertData = 1
538         innerWrap2.fieldRequired = linkToTop
539
540         prepend = TEXT
541         prepend.dataWrap = <a id="c{field:_LOCALIZED_UID}"></a>
542         prepend.if.isTrue.field = _LOCALIZED_UID
543
544         editPanel = 1
545         editPanel {
546                 allow = move,new,edit,hide,delete
547                 line = 5
548                 label = %s
549                 onlyCurrentPid = 1
550                 previewBorder = 4
551                 edit.displayRecord = 1
552         }
553
554         prefixComment = 1 | CONTENT ELEMENT, uid:{field:uid}/{field:CType}
555 }
556
557
558
559 # *****************
560 # CType: header
561 # *****************
562 # See Object path "lib.stdheader"
563 tt_content.header = COA
564 tt_content.header {
565         10 = < lib.stdheader
566
567         20 = TEXT
568         20 {
569                 field = subheader
570                 required = 1
571
572                 dataWrap = <p class="csc-subheader csc-subheader-{field:layout}">|</p>
573                 htmlSpecialChars = 1
574
575                 if {
576                         value = html5
577                         equals.data = TSFE:config|config|doctype
578                         negate = 1
579                 }
580
581                 editIcons = tt_content:subheader,layout
582                 editIcons.beforeLastTag = 1
583                 editIcons.iconTitle.data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:eIcon.subheader
584
585                 prefixComment = 2 | Subheader:
586         }
587 }
588
589
590
591 # *****************
592 # CType: text
593 # *****************
594 tt_content.text = COA
595 tt_content.text {
596         10 = < lib.stdheader
597
598         20 = TEXT
599         20 {
600                 field = bodytext
601                 required = 1
602
603                 parseFunc = < lib.parseFunc_RTE
604
605                 editIcons = tt_content:bodytext, rte_enabled
606                 editIcons.beforeLastTag = 1
607                 editIcons.iconTitle.data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:eIcon.bodytext
608
609                 prefixComment = 2 | Text:
610         }
611 }
612
613
614
615 # *****************
616 # CType: image
617 # *****************
618 # (also used for rendering 'textpic' type):
619 tt_content.image = COA
620 tt_content.image.10 = < lib.stdheader
621 tt_content.image.20 = USER
622 tt_content.image.20 {
623         userFunc = TYPO3\CMS\CssStyledContent\Controller\CssStyledContentController->render_textpic
624
625         preRenderRegisters {
626                 // To optimize performance we load all image captions into a register
627                 // because we need to know if at least one image has a caption at
628                 // multiple places to determine the render method.
629                 allImageCaptions.cObject = FILES
630                 allImageCaptions.cObject {
631                         references {
632                                 table = tt_content
633                                 fieldName = image
634                         }
635                         renderObj = TEXT
636                         renderObj.data = file:current:description
637                 }
638         }
639
640         # Image source
641         imgList.cObject = FILES
642         imgList.cObject {
643                 references < tt_content.image.20.preRenderRegisters.allImageCaptions.cObject.references
644                 renderObj = TEXT
645                 renderObj.data = file:current:uid
646                 renderObj.wrap = |,
647         }
648         imgPath = uploads/pics/
649
650         // This needs to be set because the UID list generated in the imgList
651         // setting contains UIDs of file references (not files).
652         imgListContainsReferenceUids = 1
653
654         # Single image rendering
655         imgObjNum = 1
656         1 {
657                 file.import.data = file:current:uid
658                 file.treatIdAsReference = 1
659                 file.width.field = imagewidth
660
661                 layoutKey = {$styles.content.imgtext.layoutKey}
662                 layout {
663                         default {
664                                 element = <img src="###SRC###" width="###WIDTH###" height="###HEIGHT###"###PARAMS######ALTPARAMS######BORDER######SELFCLOSINGTAGSLASH###>
665                         }
666                         srcset {
667                                 element = <img src="###SRC###" srcset="###SOURCECOLLECTION###"###PARAMS######ALTPARAMS######SELFCLOSINGTAGSLASH###>
668                                 source = |*|###SRC### ###SRCSETCANDIDATE###,|*|###SRC### ###SRCSETCANDIDATE###
669                         }
670                         picture {
671                                 element = <picture>###SOURCECOLLECTION###<img src="###SRC###"###PARAMS######ALTPARAMS######SELFCLOSINGTAGSLASH###></picture>
672                                 source = <source srcset="###SRC###" media="###MEDIAQUERY###"###SELFCLOSINGTAGSLASH###>
673                         }
674                         data {
675                                 element = <img src="###SRC###"###SOURCECOLLECTION######PARAMS######ALTPARAMS######SELFCLOSINGTAGSLASH###>
676                                 source = data-###DATAKEY###="###SRC###"
677                                 source.noTrimWrap = ; ;;
678                                 source.noTrimWrap.splitChar = ;
679                         }
680                 }
681                 # Default sourceCollection as an example
682                 # Please write your own sourceCollection (highly recommended)
683                 sourceCollection {
684                         small {
685                                 width = 200
686
687                                 srcsetCandidate = 600w
688                                 mediaQuery = (max-device-width: 600px)
689                                 dataKey = small
690                         }
691                         smallRetina {
692                                 if {
693                                         value = {$styles.content.imgtext.layoutKey}
694                                         equals = default
695                                         negate = 1
696                                 }
697
698                                 width = 200
699                                 pixelDensity = 2
700
701                                 srcsetCandidate = 600w 2x
702                                 mediaQuery = (max-device-width: 600px) AND (min-resolution: 192dpi)
703                                 dataKey = smallRetina
704                         }
705                 }
706
707                 imageLinkWrap = 1
708                 imageLinkWrap {
709                         bodyTag = <body style="margin:0; background:#fff;">
710                         wrap = <a href="javascript:close();"> | </a>
711                         width = {$styles.content.imgtext.linkWrap.width}
712                         height = {$styles.content.imgtext.linkWrap.height}
713                         effects = {$styles.content.imgtext.linkWrap.effects}
714
715                         JSwindow = 1
716                         JSwindow.newWindow = {$styles.content.imgtext.linkWrap.newWindow}
717                         JSwindow.if.isFalse = {$styles.content.imgtext.linkWrap.lightboxEnabled}
718
719                         directImageLink = {$styles.content.imgtext.linkWrap.lightboxEnabled}
720
721                         enable.field = image_zoom
722                         enable.ifEmpty.typolink.parameter.data = file:current:link
723                         enable.ifEmpty.typolink.returnLast = url
724
725                         typolink.parameter.data = file:current:link
726
727                         typolink.target < lib.parseTarget
728                         typolink.target =
729                         typolink.target.override = {$styles.content.links.target}
730
731                         typolink.extTarget < lib.parseTarget
732                         typolink.extTarget =
733                         typolink.extTarget.override = {$styles.content.links.extTarget}
734
735                         linkParams.ATagParams.dataWrap =  class="{$styles.content.imgtext.linkWrap.lightboxCssClass}" rel="{$styles.content.imgtext.linkWrap.lightboxRelAttribute}"
736                 }
737
738                 altText = TEXT
739                 altText {
740                         data = file:current:alternative
741                         stripHtml = 1
742                 }
743
744                 titleText < .altText
745                 titleText.data = file:current:title
746
747                 longdescURL {
748                         parameter {
749                                 field = longdescURL
750                                 split {
751                                         token {
752                                                 char = 10
753                                         }
754                                         returnKey.data = register : IMAGE_NUM_CURRENT
755                                 }
756                         }
757                 }
758
759                 emptyTitleHandling = {$styles.content.imgtext.emptyTitleHandling}
760                 titleInLink = {$styles.content.imgtext.titleInLink}
761                 titleInLinkAndImg = {$styles.content.imgtext.titleInLinkAndImg}
762         }
763
764         textPos.field = imageorient
765         maxW = {$styles.content.imgtext.maxW}
766         maxW.override.data = register:maxImageWidth
767         maxWInText = {$styles.content.imgtext.maxWInText}
768         maxWInText.override.data = register:maxImageWidthInText
769
770         equalH.field = imageheight
771
772         image_compression.field = image_compression
773         image_effects.field = image_effects
774
775         noRows.field = image_noRows
776
777         cols.field = imagecols
778         border.field = imageborder
779
780         caption {
781                 1 = COA
782                 1 {
783                         1 = TEXT
784                         1 {
785                                 data = file:current:description
786                                 required = 1
787                                 parseFunc =< lib.parseFunc
788                                 br = 1
789                         }
790                 }
791         }
792
793         captionAlign.field = imagecaption_position
794
795         // This needs to be set to TRUE because otherwise render_textpic will
796         // render a global caption which we do not have.
797         imageTextSplit = 1
798
799         borderThick = {$styles.content.imgtext.borderThick}
800         borderClass = {$styles.content.imgtext.borderClass}
801         colSpace = {$styles.content.imgtext.colSpace}
802         textMargin = {$styles.content.imgtext.textMargin}
803
804         borderSpace = {$styles.content.imgtext.borderSpace}
805         separateRows = {$styles.content.imgtext.separateRows}
806         addClasses =
807         addClassesCol =
808         addClassesCol.ifEmpty = csc-textpic-firstcol csc-textpic-lastcol
809         addClassesCol.override = csc-textpic-firstcol |*| |*| csc-textpic-lastcol
810         addClassesCol.override.if {
811                 isGreaterThan.field = imagecols
812                 value = 1
813         }
814
815         addClassesImage = csc-textpic-first |*| |*| csc-textpic-last
816
817         #
818         imageStdWrap.dataWrap = <div class="csc-textpic-imagewrap" style="width:{register:totalwidth}px;"> | </div>
819         imageStdWrapNoWidth.wrap = <div class="csc-textpic-imagewrap"> | </div>
820
821         # if noRows is set, wrap around each column:
822         imageColumnStdWrap.dataWrap = <div class="csc-textpic-imagecolumn" style="width:{register:columnwidth}px;"> | </div>
823
824         layout = CASE
825         layout {
826                 key.field = imageorient
827                 # above-center
828                 default = TEXT
829                 default {
830                         value = <div class="csc-textpic csc-textpic-center csc-textpic-above###CLASSES###">###IMAGES######TEXT###</div>
831                         override = <div class="csc-textpic csc-textpic-responsive csc-textpic-center csc-textpic-above###CLASSES###">###IMAGES######TEXT###</div>
832                         override {
833                                 if {
834                                         value = default
835                                         equals = {$styles.content.imgtext.layoutKey}
836                                         negate = 1
837                                 }
838                         }
839                 }
840                 # above-right
841                 1 = TEXT
842                 1 {
843                         value = <div class="csc-textpic csc-textpic-right csc-textpic-above###CLASSES###">###IMAGES######TEXT###</div>
844                         override = <div class="csc-textpic csc-textpic-responsive csc-textpic-right csc-textpic-above###CLASSES###">###IMAGES######TEXT###</div>
845                         override {
846                                 if {
847                                         value = default
848                                         equals = {$styles.content.imgtext.layoutKey}
849                                         negate = 1
850                                 }
851                         }
852                 }
853                 # above-left
854                 2 = TEXT
855                 2 {
856                         value = <div class="csc-textpic csc-textpic-left csc-textpic-above###CLASSES###">###IMAGES######TEXT###</div>
857                         override = <div class="csc-textpic csc-textpic-responsive csc-textpic-left csc-textpic-above###CLASSES###">###IMAGES######TEXT###</div>
858                         override {
859                                 if {
860                                         value = default
861                                         equals = {$styles.content.imgtext.layoutKey}
862                                         negate = 1
863                                 }
864                         }
865                 }
866                 # below-center
867                 8 = TEXT
868                 8 {
869                         value = <div class="csc-textpic csc-textpic-center csc-textpic-below###CLASSES###">###TEXT######IMAGES###</div>
870                         override = <div class="csc-textpic csc-textpic-responsive csc-textpic-center csc-textpic-below###CLASSES###">###TEXT######IMAGES###</div>
871                         override {
872                                 if {
873                                         value = default
874                                         equals = {$styles.content.imgtext.layoutKey}
875                                         negate = 1
876                                 }
877                         }
878                 }
879                 # below-right
880                 9 = TEXT
881                 9 {
882                         value = <div class="csc-textpic csc-textpic-right csc-textpic-below###CLASSES###">###TEXT######IMAGES###</div>
883                         override = <div class="csc-textpic csc-textpic-responsive csc-textpic-right csc-textpic-below###CLASSES###">###TEXT######IMAGES###</div>
884                         override {
885                                 if {
886                                         value = default
887                                         equals = {$styles.content.imgtext.layoutKey}
888                                         negate = 1
889                                 }
890                         }
891                 }
892                 # below-left
893                 10 = TEXT
894                 10 {
895                         value = <div class="csc-textpic csc-textpic-left csc-textpic-below###CLASSES###">###TEXT######IMAGES###</div>
896                         override = <div class="csc-textpic csc-textpic-responsive csc-textpic-left csc-textpic-below###CLASSES###">###TEXT######IMAGES###</div>
897                         override {
898                                 if {
899                                         value = default
900                                         equals = {$styles.content.imgtext.layoutKey}
901                                         negate = 1
902                                 }
903                         }
904                 }
905                 # intext-right
906                 17 = TEXT
907                 17 {
908                         value = <div class="csc-textpic csc-textpic-intext-right###CLASSES###">###IMAGES######TEXT###</div>
909                         override = <div class="csc-textpic csc-textpic-responsive csc-textpic-intext-right###CLASSES###">###IMAGES######TEXT###</div>
910                         override {
911                                 if {
912                                         value = default
913                                         equals = {$styles.content.imgtext.layoutKey}
914                                         negate = 1
915                                 }
916                         }
917                 }
918                 # intext-left
919                 18 = TEXT
920                 18 {
921                         value = <div class="csc-textpic csc-textpic-intext-left###CLASSES###">###IMAGES######TEXT###</div>
922                         override = <div class="csc-textpic csc-textpic-responsive csc-textpic-intext-left###CLASSES###">###IMAGES######TEXT###</div>
923                         override {
924                                 if {
925                                         value = default
926                                         equals = {$styles.content.imgtext.layoutKey}
927                                         negate = 1
928                                 }
929                         }
930                 }
931                 # intext-right-nowrap
932                 25 = TEXT
933                 25 {
934                         value = <div class="csc-textpic csc-textpic-intext-right-nowrap###CLASSES###">###IMAGES######TEXT###</div>
935                         override = <div class="csc-textpic csc-textpic-responsive csc-textpic-intext-right-nowrap###CLASSES###">###IMAGES######TEXT###</div>
936                         override {
937                                 if {
938                                         value = default
939                                         equals = {$styles.content.imgtext.layoutKey}
940                                         negate = 1
941                                 }
942                         }
943                 }
944                 # intext-left-nowrap
945                 26 = TEXT
946                 26 {
947                         value = <div class="csc-textpic csc-textpic-intext-left-nowrap###CLASSES###">###IMAGES######TEXT###</div>
948                         override = <div class="csc-textpic csc-textpic-responsive csc-textpic-intext-left-nowrap###CLASSES###">###IMAGES######TEXT###</div>
949                         override {
950                                 if {
951                                         value = default
952                                         equals = {$styles.content.imgtext.layoutKey}
953                                         negate = 1
954                                 }
955                         }
956                 }
957         }
958
959         rendering {
960                 # Single image - No caption
961                 singleNoCaption {
962                         # Choose another rendering for special edge cases
963                         fallbackRendering = COA
964                         fallbackRendering {
965                                 # Single image - Caption
966                                 10 = TEXT
967                                 10 {
968                                         if {
969                                                 isTrue.data = file:current:description
970                                                 value = 1
971                                                 equals.data = register:imageCount
972                                         }
973                                         value = singleCaption
974                                 }
975
976                                 # Multiple images and split caption
977                                 20 = TEXT
978                                 20 {
979                                         if {
980                                                 value = 1
981                                                 isGreaterThan.data = register:imageCount
982                                                 isTrue.if.isFalse.data = register:renderGlobalCaption
983                                                 isTrue.data = register:allImageCaptions
984                                         }
985                                         value = splitCaption
986                                 }
987
988                                 # Multiple images and no caption at all
989                                 40 = TEXT
990                                 40 {
991                                         if {
992                                                 value = 1
993                                                 isGreaterThan.data = register:imageCount
994                                                 isFalse.data = register:allImageCaptions
995                                         }
996                                         value = noCaption
997                                 }
998                         }
999                         allStdWrap {
1000                                 dataWrap = <div class="csc-textpic-imagewrap"> | </div>
1001                                 dataWrap {
1002                                         override = <div class="csc-textpic-imagewrap" data-csc-images="{register:imageCount}" data-csc-cols="{field:imagecols}"> | </div>
1003                                         override {
1004                                                 if {
1005                                                         value = html5
1006                                                         equals.data = TSFE:config|config|doctype
1007                                                 }
1008                                         }
1009                                 }
1010                                 innerWrap.cObject = CASE
1011                                 innerWrap.cObject {
1012                                         key.field = imageorient
1013                                         # above-center
1014                                         0 = TEXT
1015                                         0.value = <div class="csc-textpic-center-outer"><div class="csc-textpic-center-inner"> | </div></div>
1016                                         # below-center
1017                                         8 < .0
1018                                 }
1019                         }
1020                         singleStdWrap {
1021                                 wrap = <div class="csc-textpic-image###CLASSES###"> | </div>
1022                                 wrap {
1023                                         override = <figure class="csc-textpic-image###CLASSES###"> | </figure>
1024                                         override {
1025                                                 if {
1026                                                         value = html5
1027                                                         equals.data = TSFE:config|config|doctype
1028                                                 }
1029                                         }
1030                                 }
1031                         }
1032                         rowStdWrap.wrap = |
1033                         noRowsStdWrap.wrap = |
1034                         lastRowStdWrap.wrap = |
1035                         columnStdWrap.wrap = |
1036                         imgTagStdWrap.wrap = |
1037                         editIconsStdWrap.wrap = <div> | </div>
1038                         caption.wrap = |
1039                 }
1040                 noCaption {
1041                         # Multiple images and no caption at all
1042                         fallbackRendering < tt_content.image.20.rendering.singleNoCaption.fallbackRendering.10
1043                         allStdWrap {
1044                                 dataWrap = <div class="csc-textpic-imagewrap"> | </div>
1045                                 dataWrap {
1046                                         override = <div class="csc-textpic-imagewrap" data-csc-images="{register:imageCount}" data-csc-cols="{field:imagecols}"> | </div>
1047                                         override {
1048                                                 if {
1049                                                         value = html5
1050                                                         equals.data = TSFE:config|config|doctype
1051                                                 }
1052                                         }
1053                                 }
1054                         }
1055                         singleStdWrap {
1056                                 wrap = <div class="csc-textpic-image###CLASSES###"> | </div>
1057                                 wrap {
1058                                         override = <figure class="csc-textpic-image###CLASSES###"> | </figure>
1059                                 }
1060                         }
1061                         rowStdWrap.wrap = <div class="csc-textpic-imagerow"> | </div>
1062                         noRowsStdWrap.wrap = <div class="csc-textpic-imagerow csc-textpic-imagerow-none"> | </div>
1063                         lastRowStdWrap.wrap = <div class="csc-textpic-imagerow csc-textpic-imagerow-last"> | </div>
1064                         columnStdWrap.wrap = <div class="csc-textpic-imagecolumn###CLASSES###"> | </div>
1065                 }
1066                 singleCaption {
1067                         # Just one image with a caption
1068                         fallbackRendering < tt_content.image.20.rendering.singleNoCaption.fallbackRendering.10
1069                         singleStdWrap {
1070                                 wrap = <div class="csc-textpic-image###CLASSES###"><table>###CAPTION###<tbody><tr><td> | </td></tr></tbody></table></div>
1071                                 wrap {
1072                                         override = <figure class="csc-textpic-image###CLASSES###">|###CAPTION###</figure>
1073                                         override {
1074                                                 if {
1075                                                         value = html5
1076                                                         equals.data = TSFE:config|config|doctype
1077                                                 }
1078                                         }
1079                                 }
1080                         }
1081                         caption {
1082                                 required = 1
1083                                 wrap = <caption class="csc-textpic-caption###CLASSES###"> | </caption>
1084                                 wrap {
1085                                         override = <figcaption class="csc-textpic-caption###CLASSES###"> | </figcaption>
1086                                         override {
1087                                                 if {
1088                                                         value = html5
1089                                                         equals.data = TSFE:config|config|doctype
1090                                                 }
1091                                         }
1092                                 }
1093                         }
1094                 }
1095                 splitCaption {
1096                         fallbackRendering < tt_content.image.20.rendering.singleNoCaption.fallbackRendering.10
1097                         singleStdWrap {
1098                                 wrap = <div class="csc-textpic-image###CLASSES###"><table>###CAPTION###<tbody><tr><td> | </td></tr></tbody></table></div>
1099                                 wrap {
1100                                         override = <figure class="csc-textpic-image###CLASSES###">|###CAPTION###</figure>
1101                                         override {
1102                                                 if {
1103                                                         value = html5
1104                                                         equals.data = TSFE:config|config|doctype
1105                                                 }
1106                                         }
1107                                 }
1108                         }
1109                         rowStdWrap.wrap = <div class="csc-textpic-imagerow"> | </div>
1110                         noRowsStdWrap.wrap = <div class="csc-textpic-imagerow csc-textpic-imagerow-none"> | </div>
1111                         lastRowStdWrap.wrap = <div class="csc-textpic-imagerow csc-textpic-imagerow-last"> | </div>
1112                         columnStdWrap.wrap = <div class="csc-textpic-imagecolumn###CLASSES###"> | </div>
1113                         caption {
1114                                 required = 1
1115                                 wrap = <caption class="csc-textpic-caption###CLASSES###"> | </caption>
1116                                 wrap {
1117                                         override = <figcaption class="csc-textpic-caption###CLASSES###"> | </figcaption>
1118                                         override {
1119                                                 if {
1120                                                         value = html5
1121                                                         equals.data = TSFE:config|config|doctype
1122                                                 }
1123                                         }
1124                                 }
1125                         }
1126                 }
1127         }
1128         renderMethod = singleNoCaption
1129
1130         editIcons = tt_content : image [imageorient|imagewidth|imageheight],[imagecols|image_noRows|imageborder],[image_zoom],[image_compression|image_effects|image_frames],[imagecaption_position]
1131         editIcons.iconTitle.data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:eIcon.images
1132
1133         caption.editIcons = tt_content : imagecaption_position
1134         caption.editIcons.beforeLastTag=1
1135         caption.editIcons.iconTitle.data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:eIcon.caption_position
1136
1137         stdWrap.prefixComment = 2 | Image block:
1138 }
1139
1140 # *****************
1141 # CType: textpic
1142 # *****************
1143 tt_content.textpic = COA
1144 tt_content.textpic {
1145         10 = COA
1146         10.if.value = 25
1147         10.if.isLessThan.field = imageorient
1148         10.10 = < lib.stdheader
1149
1150         20  = < tt_content.image.20
1151         20 {
1152                 text.10 = COA
1153                 text.10 {
1154                         if.value = 24
1155                         if.isGreaterThan.field = imageorient
1156                         10 = < lib.stdheader
1157                         10.stdWrap.dataWrap = <div class="csc-textpicHeader csc-textpicHeader-{field:imageorient}">|</div>
1158                 }
1159                 text.20 = < tt_content.text.20
1160                 text.wrap = <div class="csc-textpic-text"> | </div>
1161         }
1162 }
1163
1164
1165
1166 # *****************
1167 # CType: bullet
1168 # *****************
1169 tt_content.bullets = COA
1170 tt_content.bullets {
1171         10 = < lib.stdheader
1172
1173         20 = TEXT
1174         20 {
1175                 field = bodytext
1176                 trim = 1
1177                 split{
1178                         token.char = 10
1179                         cObjNum = |*|1|| 2|*|
1180                         1.current = 1
1181                         1.parseFunc =< lib.parseFunc
1182                         1.wrap = <li class="odd">|</li>
1183
1184                         2.current = 1
1185                         2.parseFunc =< lib.parseFunc
1186                         2.wrap = <li class="even">|</li>
1187                 }
1188                 dataWrap = <ul class="csc-bulletlist csc-bulletlist-{field:layout}">|</ul>
1189                 editIcons = tt_content: bodytext, [layout]
1190                 editIcons.beforeLastTag = 1
1191                 editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.xlf:eIcon.bullets
1192
1193                 prefixComment = 2 | Bullet list:
1194         }
1195 }
1196
1197
1198 # *****************
1199 # CType: uploads
1200 # *****************
1201 tt_content.uploads = COA
1202 tt_content.uploads {
1203         10 = < lib.stdheader
1204
1205         20 = FILES
1206         20 {
1207                 # get from file references:
1208                 references {
1209                         table = tt_content
1210                         fieldName = media
1211                 }
1212
1213                 collections.field = file_collections
1214
1215                 # get from path (backwards compatibility, contains strings like "fileadmin/user_uploads/")
1216                 folders.field = select_key
1217
1218                 sorting.field = filelink_sorting
1219
1220                 # render the files
1221                 renderObj = COA
1222                 renderObj {
1223                         10 = IMAGE
1224                         10 {
1225                                 file.import.data = file:current:originalUid // file:current:uid
1226                                 file.width = 150
1227                                 stdWrap {
1228                                         if.value = 1
1229                                         if.isGreaterThan.field = layout
1230
1231                                         typolink {
1232                                                 parameter.data = file:current:originalUid // file:current:uid
1233                                                 parameter.wrap = file:|
1234                                                 fileTarget < lib.parseTarget
1235                                                 fileTarget =
1236                                                 fileTarget.override = {$styles.content.uploads.target}
1237                                                 fileTarget.override.override.field = target
1238                                                 removePrependedNumbers = 1
1239
1240                                                 title {
1241                                                         data = file:current:title
1242                                                         htmlSpecialChars = 1
1243                                                 }
1244
1245                                                 /*
1246                                                 jumpurl = {$styles.content.uploads.jumpurl}
1247                                                 jumpurl {
1248                                                         secure = {$styles.content.uploads.jumpurl_secure}
1249                                                         secure.mimeTypes = {$styles.content.uploads.jumpurl_secure_mimeTypes}
1250                                                 }
1251                                                 */
1252                                         }
1253                                 }
1254                         }
1255
1256                         # icon
1257                         15 = IMAGE
1258                         15 {
1259                                 file.import = typo3/gfx/fileicons/
1260                                 file.import.data = file:current:extension
1261                                 file.import.case = lower
1262                                 file.import.wrap = |.gif
1263                                 stdWrap {
1264                                         if {
1265                                                 value = 0
1266                                                 isGreaterThan.field = layout
1267
1268                                                 # only show the icon if we don't have a thumbnail:
1269                                                 isFalse.cObject = IMG_RESOURCE
1270                                                 isFalse.cObject.file < tt_content.uploads.20.renderObj.10.file
1271                                                 isFalse.cObject.stdWrap.if < tt_content.uploads.20.renderObj.10.stdWrap.if
1272                                         }
1273
1274                                         typolink < tt_content.uploads.20.renderObj.10.stdWrap.typolink
1275                                 }
1276                         }
1277
1278                         # filename
1279                         20 = TEXT
1280                         20 {
1281                                 data = file:current:title // file:current:name
1282                                 htmlSpecialChars = 1
1283                                 required = 1
1284
1285                                 replacement {
1286                                         # equivalent to former useSpacesInLinkText = 0; remove using > to disable it
1287                                         10 {
1288                                                 search = _
1289                                                 replace.char = 32
1290                                         }
1291
1292                                         # equivalent to former stripFileExtensionFromLinkText = 0; move "_20" to "20" to enable it. Disabled by default.
1293                                         _20 {
1294                                                 search = /(.*)(\..*)/
1295                                                 replace = \1
1296                                                 useRegExp = 1
1297                                         }
1298                                 }
1299
1300                                 typolink < tt_content.uploads.20.renderObj.10.stdWrap.typolink
1301
1302                                 wrap = <span class="csc-uploads-fileName">|</span>
1303                         }
1304
1305                         # description
1306                         30 = TEXT
1307                         30 {
1308                                 data = file:current:description
1309                                 htmlSpecialChars = 1
1310                                 wrap = <span class="csc-uploads-description">|</span>
1311
1312                                 required = 1
1313                         }
1314
1315                         # file size
1316                         40 = TEXT
1317                         40 {
1318                                 if.isTrue.field = filelink_size
1319                                 data = file:current:size
1320                                 wrap = <span class="csc-uploads-fileSize">|</span>
1321                                 bytes = 1
1322                                 bytes.labels = {$styles.content.uploads.filesizeBytesLabels}
1323                         }
1324
1325                         # wrap of each listed file with odd/even class
1326                         wrap.cObject = COA
1327                         wrap.cObject {
1328                                 10 = LOAD_REGISTER
1329                                 10 {
1330                                         oddEvenClass = li-odd li-first |*| li-even || li-odd
1331                                         elementClass = csc-uploads-element csc-uploads-element-{file:current:extension}
1332                                         elementClass.insertData = 1
1333                                 }
1334
1335                                 20 = TEXT
1336                                 20 {
1337                                         value = <li class="{register:oddEvenClass} {register:elementClass}">|</li>
1338                                         insertData = 1
1339                                 }
1340                                 30 = RESTORE_REGISTER
1341                         }
1342                 }
1343
1344                 # wrap around whole content element with <ul> and editIcons
1345                 stdWrap {
1346                         editIcons = tt_content: media, layout [table_bgColor|table_border|table_cellspacing|table_cellpadding], filelink_size
1347                         editIcons.iconTitle.data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:eIcon.filelist
1348                         prefixComment = 2 | File list:
1349                         dataWrap = <ul class="csc-uploads csc-uploads-{field:layout}">|</ul>
1350                 }
1351         }
1352 }
1353
1354
1355
1356 # *****************
1357 # CType: table
1358 # *****************
1359 # Rendered by a PHP function specifically written to handle CE tables. See EXT:css_styled_content/Classes/Controller/CssStyledContentController.php
1360 tt_content.table = COA
1361 tt_content.table {
1362         10 = < lib.stdheader
1363
1364         20 = USER
1365         20.userFunc = TYPO3\CMS\CssStyledContent\Controller\CssStyledContentController->render_table
1366         20.field = bodytext
1367
1368         20.color {
1369                 default =
1370                 1 = {$styles.content.table.backgroundColor.1}
1371                 2 = {$styles.content.table.backgroundColor.2}
1372                 200 =
1373                 240 = {$styles.content.table.backgroundColor.240}
1374                 241 = {$styles.content.table.backgroundColor.241}
1375                 242 = {$styles.content.table.backgroundColor.242}
1376                 243 = {$styles.content.table.backgroundColor.243}
1377                 244 = {$styles.content.table.backgroundColor.244}
1378         }
1379         20.tableParams_0 {
1380                 border =
1381                 cellpadding =
1382                 cellspacing =
1383         }
1384         20.tableParams_1 {
1385                 border =
1386                 cellpadding =
1387                 cellspacing =
1388         }
1389         20.tableParams_2 {
1390                 border =
1391                 cellpadding =
1392                 cellspacing =
1393         }
1394         20.tableParams_3 {
1395                 border =
1396                 cellpadding =
1397                 cellspacing =
1398         }
1399         20.innerStdWrap.wrap = |
1400         20.innerStdWrap.parseFunc = < lib.parseFunc
1401
1402         20.stdWrap {
1403                 editIcons = tt_content: cols, bodytext, [layout], [table_bgColor|table_border|table_cellspacing|table_cellpadding]
1404                 editIcons.beforeLastTag = 1
1405                 editIcons.iconTitle.data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:eIcon.table
1406
1407                 prefixComment = 2 | Table:
1408         }
1409 }
1410
1411 # ****************
1412 # CType: menu
1413 # ****************
1414 tt_content.menu = COA
1415 tt_content.menu {
1416         10 = < lib.stdheader
1417
1418         20 = CASE
1419         20 {
1420                 key.field = menu_type
1421
1422                 # "Menu of these pages"
1423                 default = HMENU
1424                 default {
1425                         special = list
1426                         special.value.field = pages
1427                         stdWrap {
1428                                 prepend = COA
1429                                 prepend {
1430                                         stdWrap {
1431                                                 if.isTrue.field = accessibility_bypass
1432                                         }
1433                                         10 = LOAD_REGISTER
1434                                         10 {
1435                                                 accessibility_bypass_text = TEXT
1436                                                 accessibility_bypass_text {
1437                                                         field = accessibility_bypass_text
1438                                                 }
1439                                         }
1440                                         20 = CONTENT
1441                                         20 {
1442                                                 table = tt_content
1443                                                 select {
1444                                                         pidInList = this
1445                                                         orderBy = sorting
1446                                                         where {
1447                                                                 dataWrap = sorting>{field:sorting}
1448                                                         }
1449                                                         languageField = sys_language_uid
1450                                                         max = 1
1451                                                 }
1452                                                 renderObj = TEXT
1453                                                 renderObj {
1454                                                         required = 1
1455                                                         data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:menu.bypassNavigation
1456                                                         override.data = register:accessibility_bypass_text
1457                                                         trim = 1
1458                                                         htmlSpecialChars = 1
1459                                                         typolink {
1460                                                                 parameter {
1461                                                                         field = pid
1462                                                                 }
1463                                                                 section {
1464                                                                         field = uid
1465                                                                 }
1466                                                         }
1467                                                         wrap = <li class="csc-nav-bypass">|</li>
1468                                                 }
1469                                         }
1470                                         30 = RESTORE_REGISTER
1471                                 }
1472                                 outerWrap = <ul class="csc-menu csc-menu-def">|</ul>
1473                                 required = 1
1474                         }
1475                         1 = TMENU
1476                         1 {
1477                                 target < lib.parseTarget
1478                                 target =
1479                                 target.override = {$PAGE_TARGET}
1480                                 NO {
1481                                         stdWrap.htmlSpecialChars = 1
1482                                         wrapItemAndSub = <li>|</li>
1483                                         ATagTitle.field = description // title
1484                                 }
1485                         }
1486                 }
1487
1488                 # "Menu of subpages to these pages"
1489                 1 < .default
1490                 1 {
1491                         special = directory
1492                         stdWrap {
1493                                 outerWrap = <ul class="csc-menu csc-menu-1">|</ul>
1494                         }
1495                 }
1496
1497                 # "Sitemap - liststyle"
1498                 2 = HMENU
1499                 2 {
1500                         stdWrap < tt_content.menu.20.default.stdWrap
1501                         stdWrap {
1502                                 outerWrap = <div class="csc-sitemap">|</div>
1503                         }
1504                         1 = TMENU
1505                         1 {
1506                                 target < lib.parseTarget
1507                                 target =
1508                                 target.override = {$PAGE_TARGET}
1509                                 expAll = 1
1510                                 wrap = <ul>|</ul>
1511                                 NO {
1512                                         stdWrap.htmlSpecialChars = 1
1513                                         wrapItemAndSub = <li>|</li>
1514                                         ATagTitle.field = description // title
1515                                 }
1516                         }
1517                         2 < .1
1518                         3 < .1
1519                         4 < .1
1520                         5 < .1
1521                         6 < .1
1522                         7 < .1
1523                 }
1524
1525                 # "Section index (pagecontent w/Index checked - liststyle)"
1526                 3 < .default
1527                 3 {
1528                         special {
1529                                 value {
1530                                         override {
1531                                                 data = page:uid
1532                                                 if {
1533                                                         isFalse.field = pages
1534                                                 }
1535                                         }
1536                                 }
1537                         }
1538                         stdWrap {
1539                                 outerWrap = <ul class="csc-menu csc-menu-3">|</ul>
1540                         }
1541                         1 = TMENU
1542                         1 {
1543                                 sectionIndex = 1
1544                                 sectionIndex.type = header
1545                                 NO.wrapItemAndSub = <li class="csc-section">|</li>
1546                         }
1547                 }
1548
1549                 # "Menu of subpages to these pages (with abstract)"
1550                 4 < .1
1551                 4 {
1552                         stdWrap {
1553                                 prepend.20.renderObj.wrap = <dt class="csc-nav-bypass">|</dt><dd>&nbsp;</dd>
1554                                 outerWrap = <dl class="csc-menu csc-menu-4">|</dl>
1555                         }
1556                         1.NO {
1557                                 wrapItemAndSub >
1558                                 linkWrap = <dt>|</dt>
1559                                 after {
1560                                         cObject = TEXT
1561                                         cObject {
1562                                                 data = field : abstract // field : description // field : subtitle
1563                                                 htmlSpecialChars = 1
1564                                                 required = 1
1565                                         }
1566                                         ifBlank = &nbsp;
1567                                         wrap = <dd>|</dd>
1568                                 }
1569                                 ATagTitle.field = description // title
1570                         }
1571                 }
1572
1573                 # "Recently updated pages"
1574                 5 < .default
1575                 5 {
1576                         stdWrap {
1577                                 outerWrap = <ul class="csc-menu csc-menu-5">|</ul>
1578                         }
1579                         special = updated
1580                         special {
1581                                 maxAge = 3600*24*7
1582                                 excludeNoSearchPages = 1
1583                         }
1584                 }
1585
1586                 # "Related pages (based on keywords)"
1587                 6 < .default
1588                 6 {
1589                         stdWrap {
1590                                 outerWrap = <ul class="csc-menu csc-menu-6">|</ul>
1591                         }
1592                         special = keywords
1593                         special {
1594                                 excludeNoSearchPages = 1
1595                         }
1596                 }
1597
1598                 # "Menu of subpages to these pages + sections - liststyle"
1599                 7 < .1
1600                 7 {
1601                         stdWrap {
1602                                 outerWrap = <ul class="csc-menu csc-menu-7">|</ul>
1603                         }
1604                         1.expAll = 1
1605                         2 < .1
1606                         2 {
1607                                 sectionIndex = 1
1608                                 sectionIndex.type = header
1609                                 wrap = <ul>|</ul>
1610                                 NO.wrapItemAndSub = <li class="csc-section">|</li>
1611                         }
1612                 }
1613
1614                 # "Sitemaps of selected pages - liststyle"
1615                 8 < .2
1616                 8 {
1617                         special = directory
1618                         special.value.field = pages
1619                 }
1620
1621                 # Menu of categorized pages
1622                 categorized_pages < .default
1623                 categorized_pages {
1624                         special = categories
1625                         special.value.field = selected_categories
1626                         special.relation.field = category_field
1627                         special.sorting = title
1628                         special.order = asc
1629                         stdWrap {
1630                                 outerWrap = <ul class="csc-menu csc-menu-categorized-pages">|</ul>
1631                         }
1632                 }
1633
1634                 # Menu of categorized content elements
1635                 categorized_content = RECORDS
1636                 categorized_content {
1637                         categories.field = selected_categories
1638                         categories.relation.field = category_field
1639                         tables = tt_content
1640                         conf.tt_content = TEXT
1641                         conf.tt_content {
1642                                 field = header
1643                                 typolink.parameter = {field:pid}#{field:uid}
1644                                 typolink.parameter.insertData = 1
1645                                 wrap = <li>|</li>
1646                         }
1647                         wrap = <ul>|</ul>
1648                 }
1649         }
1650
1651         20.stdWrap {
1652                 wrap {
1653                         cObject = COA
1654                         cObject {
1655                                 10 = TEXT
1656                                 10 {
1657                                         field = accessibility_title
1658                                         htmlSpecialChars = 1
1659                                         dataWrap = <map id="map{field:uid}" title="|">
1660                                         dataWrap {
1661                                                 override = <map name="map{field:uid}" title="|">
1662                                                 override {
1663                                                         if {
1664                                                                 isFalse.data = TSFE:xhtmlDoctype
1665                                                         }
1666                                                 }
1667                                         }
1668                                 }
1669
1670                                 20 = TEXT
1671                                 20 {
1672                                         value = |</map>
1673                                 }
1674                         }
1675                         if {
1676                                 isTrue {
1677                                         field = accessibility_title
1678                                 }
1679                         }
1680                 }
1681                 editIcons = tt_content: menu_type, pages
1682                 editIcons.iconTitle.data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:eIcon.menuSitemap
1683
1684                 prefixComment = 2 | Menu/Sitemap element:
1685         }
1686 }
1687
1688
1689
1690 # ****************
1691 # CType: shortcut
1692 # ****************
1693 # Should be a complete copy from the old static template "content (default)"
1694 tt_content.shortcut = COA
1695 tt_content.shortcut {
1696
1697         20 = RECORDS
1698         20 {
1699                 source.field = records
1700                 tables = {$content.shortcut.tables}
1701         }
1702
1703         20.stdWrap {
1704                 editIcons = tt_content: records
1705                 editIcons.iconTitle.data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:eIcon.recordList
1706
1707                 prefixComment = 2 | Inclusion of other records (by reference):
1708         }
1709 }
1710
1711
1712 # ****************
1713 # CType: list
1714 # ****************
1715 # Should be a complete copy from the old static template "content (default)" (except "lib.stdheader")
1716 tt_content.list = COA
1717 tt_content.list {
1718         10 = < lib.stdheader
1719
1720         20 = CASE
1721         20.key.field = list_type
1722
1723         20.stdWrap {
1724                 editIcons = tt_content: list_type, layout, select_key, pages [recursive]
1725                 editIcons.iconTitle.data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:eIcon.plugin
1726
1727                 prefixComment = 2 | Plugin inserted:
1728         }
1729 }
1730
1731
1732 # ****************
1733 # CType: div
1734 # ****************
1735 tt_content.div = TEXT
1736 tt_content.div {
1737         value = <hr>
1738         override = <hr />
1739         override.if {
1740                 isTrue.data = TSFE:xhtmlDoctype
1741         }
1742         wrap = <div class="divider">|</div>
1743         prefixComment = 2 | Div element
1744 }
1745
1746
1747 # ****************
1748 # CType: html
1749 # ****************
1750 # This truely IS a content object, launched from inside the PHP class of course.
1751 # Should be a complete copy from the old static template "content (default)"
1752 tt_content.html = TEXT
1753 tt_content.html {
1754         field = bodytext
1755
1756         editIcons = tt_content:bodytext
1757         editIcons.beforeLastTag = 1
1758         editIcons.iconTitle.data = LLL:EXT:css_styled_content/Resources/Private/Language/locallang.xlf:eIcon.html
1759
1760         prefixComment = 2 | Raw HTML content:
1761 }
1762
1763
1764 # ****************
1765 # Default error msg:
1766 # ****************
1767 tt_content.default = TEXT
1768 tt_content.default {
1769         field = CType
1770         wrap = <p style="background-color: yellow;"><b>ERROR:</b> Content Element type "|" has no rendering definition!</p>
1771
1772         prefixComment = 2 | Unknown element message:
1773 }
1774
1775 # *********************************************************************
1776 # ACCESSIBILTY MODE
1777 # *********************************************************************
1778
1779
1780
1781
1782
1783
1784
1785 plugin.tx_cssstyledcontent._CSS_DEFAULT_STYLE (
1786         /* Headers */
1787         .csc-header-alignment-center { text-align: center; }
1788         .csc-header-alignment-right { text-align: right; }
1789         .csc-header-alignment-left { text-align: left; }
1790
1791         div.csc-textpic-responsive, div.csc-textpic-responsive * { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;  }
1792
1793         /* Clear floats after csc-textpic and after csc-textpic-imagerow */
1794         div.csc-textpic, div.csc-textpic div.csc-textpic-imagerow, ul.csc-uploads li { overflow: hidden; }
1795
1796         /* Set padding for tables */
1797         div.csc-textpic .csc-textpic-imagewrap table { border-collapse: collapse; border-spacing: 0; }
1798         div.csc-textpic .csc-textpic-imagewrap table tr td { padding: 0; vertical-align: top; }
1799
1800         /* Settings for figure and figcaption (HTML5) */
1801         div.csc-textpic .csc-textpic-imagewrap figure, div.csc-textpic figure.csc-textpic-imagewrap { margin: 0; display: table; }
1802
1803         /* Captions */
1804         figcaption.csc-textpic-caption { display: table-caption; }
1805         .csc-textpic-caption { text-align: left; caption-side: bottom; }
1806         div.csc-textpic-caption-c .csc-textpic-caption, .csc-textpic-imagewrap .csc-textpic-caption-c { text-align: center; }
1807         div.csc-textpic-caption-r .csc-textpic-caption, .csc-textpic-imagewrap .csc-textpic-caption-r { text-align: right; }
1808         div.csc-textpic-caption-l .csc-textpic-caption, .csc-textpic-imagewrap .csc-textpic-caption-l { text-align: left; }
1809
1810         /* Float the columns */
1811         div.csc-textpic div.csc-textpic-imagecolumn { float: left; }
1812
1813         /* Border just around the image */
1814         {$styles.content.imgtext.borderSelector} {
1815                 border: {$styles.content.imgtext.borderThick}px solid {$styles.content.imgtext.borderColor};
1816                 padding: {$styles.content.imgtext.borderSpace}px {$styles.content.imgtext.borderSpace}px;
1817         }
1818
1819         div.csc-textpic .csc-textpic-imagewrap img { border: none; display: block; }
1820
1821         /* Space below each image (also in-between rows) */
1822         div.csc-textpic .csc-textpic-imagewrap .csc-textpic-image { margin-bottom: {$styles.content.imgtext.rowSpace}px; }
1823         div.csc-textpic .csc-textpic-imagewrap .csc-textpic-imagerow-last .csc-textpic-image { margin-bottom: 0; }
1824
1825         /* colSpace around image columns, except for last column */
1826         div.csc-textpic-imagecolumn, td.csc-textpic-imagecolumn .csc-textpic-image { margin-right: {$styles.content.imgtext.colSpace}px; }
1827         div.csc-textpic-imagecolumn.csc-textpic-lastcol, td.csc-textpic-imagecolumn.csc-textpic-lastcol .csc-textpic-image { margin-right: 0; }
1828
1829         /* Add margin from image-block to text (in case of "Text & Images") */
1830         div.csc-textpic-intext-left .csc-textpic-imagewrap,
1831         div.csc-textpic-intext-left-nowrap .csc-textpic-imagewrap {
1832                 margin-right: {$styles.content.imgtext.textMargin}px;
1833         }
1834         div.csc-textpic-intext-right .csc-textpic-imagewrap,
1835         div.csc-textpic-intext-right-nowrap .csc-textpic-imagewrap {
1836                 margin-left: {$styles.content.imgtext.textMargin}px;
1837         }
1838
1839         /* Positioning of images: */
1840
1841         /* Center (above or below) */
1842         div.csc-textpic-center .csc-textpic-imagewrap, div.csc-textpic-center figure.csc-textpic-imagewrap { overflow: hidden; }
1843         div.csc-textpic-center .csc-textpic-center-outer { position: relative; float: right; right: 50%; }
1844         div.csc-textpic-center .csc-textpic-center-inner { position: relative; float: right; right: -50%; }
1845
1846         /* Right (above or below) */
1847         div.csc-textpic-right .csc-textpic-imagewrap { float: right; }
1848         div.csc-textpic-right div.csc-textpic-text { clear: right; }
1849
1850         /* Left (above or below) */
1851         div.csc-textpic-left .csc-textpic-imagewrap { float: left; }
1852         div.csc-textpic-left div.csc-textpic-text { clear: left; }
1853
1854         /* Left (in text) */
1855         div.csc-textpic-intext-left .csc-textpic-imagewrap { float: left; }
1856
1857         /* Right (in text) */
1858         div.csc-textpic-intext-right .csc-textpic-imagewrap { float: right; }
1859
1860         /* Right (in text, no wrap around) */
1861         div.csc-textpic-intext-right-nowrap .csc-textpic-imagewrap { float: right; }
1862
1863         /* Left (in text, no wrap around) */
1864         div.csc-textpic-intext-left-nowrap .csc-textpic-imagewrap { float: left; }
1865
1866         div.csc-textpic div.csc-textpic-imagerow-last, div.csc-textpic div.csc-textpic-imagerow-none div.csc-textpic-last { margin-bottom: 0; }
1867
1868         /* Browser fixes: */
1869
1870         /* Fix for unordered and ordered list with image "In text, left" */
1871         .csc-textpic-intext-left ol, .csc-textpic-intext-left ul { padding-left: 40px; overflow: auto; }
1872
1873         /* File Links */
1874         ul.csc-uploads { padding: 0; }
1875         ul.csc-uploads li { list-style: none outside none; margin: 1em 0; }
1876         ul.csc-uploads img { float: left; margin-right: 1em; vertical-align: top; }
1877         ul.csc-uploads span { display: block; }
1878         ul.csc-uploads span.csc-uploads-fileName { text-decoration: underline; }
1879
1880         /* Table background colors: */
1881
1882         table.contenttable-color-1 { background-color: {$styles.content.table.backgroundColor.1}; }
1883         table.contenttable-color-2 { background-color: {$styles.content.table.backgroundColor.2}; }
1884         table.contenttable-color-240 { background-color: {$styles.content.table.backgroundColor.240}; }
1885         table.contenttable-color-241 { background-color: {$styles.content.table.backgroundColor.241}; }
1886         table.contenttable-color-242 { background-color: {$styles.content.table.backgroundColor.242}; }
1887         table.contenttable-color-243 { background-color: {$styles.content.table.backgroundColor.243}; }
1888         table.contenttable-color-244 { background-color: {$styles.content.table.backgroundColor.244}; }
1889 )