Events & Observances

Military Community & Family Policy recognizes and supports various events and observances that support service members and their families. Learn more about the latest events and observances planned throughout the year.

Press Contact

Department of Defense
Press Operations Center

703-697-5131

Mon - Fri: 8 a.m. - 5 p.m. ET

An error occurred while processing the template.
The following has evaluated to null or missing:
==> assetRenderer.getArticle()  [in template "20155#20195#3706662" at line 55, column 32]

----
Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign article = assetRenderer.getAr...  [in template "20155#20195#3706662" at line 55, column 13]
----
1<#assign threeMonths = .now?long?number + 7776000000 /> 
2 
3<div class="toolkits-detail"> 
4    <a onclick="javascript:saveAsPdf()" id="generatepdf" style="cursor:pointer;"> 
5    	<div class="media-card"> 
6    		<div class="media-attributes"> 
7    			<img alt="Download" src="/o/falcon-theme/images/icon--download.svg"> 
8    		</div> 
9    		<div class="media-image"> 
10    			<img alt="" src="/o/falcon-theme/images/icons/toolkits-white.svg"> 
11    		</div> 
12    		<div class="media-info"> 
13    			<div class="media-title">Download Events &amp; Observances from ${.now?string["MMM d, YYYY"]} to ${threeMonths?number_to_date?string["MMM d, YYYY"]}</div> 
14    		</div> 
15    	</div> 
16    </a> 
17</div> 
18 
19<script> 
20    function saveAsPdf() { 
21        var imgData = 'data:image/png;base64,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'; 
22        var doc = new jsPDF('p', 'pt', 'letter'); 
23 
24        doc.addImage(imgData, 'JPEG', 40, 40, 160, 39) 
25         
26        doc.addFont('Arial'); 
27        doc.setTextColor(25,72,103); 
28 
29        var yPos = 130 
30        var xPos = 40 
31 
32        doc.setFontSize(24); 
33        doc.setFontType('bold'); 
34 
35        var text = "Events & Observances" 
36        var lineHeight = doc.getLineHeight(text) / doc.internal.scaleFactor 
37        var splitTitle = doc.splitTextToSize(text, 522); 
38        var lines = splitTitle.length 
39        var blockHeight = lines * lineHeight 
40        doc.text(xPos, yPos, splitTitle); 
41        yPos += blockHeight - 10 
42 
43        doc.setFontSize(14); 
44        var text = "${.now?string['MMM d, YYYY']} to ${threeMonths?number_to_date?string['MMM d, YYYY']}" 
45        var lineHeight = doc.getLineHeight(text) / doc.internal.scaleFactor 
46        var splitTitle = doc.splitTextToSize(text, 522); 
47        var lines = splitTitle.length 
48        var blockHeight = lines * lineHeight 
49        doc.text(xPos, yPos, splitTitle); 
50        yPos += blockHeight + 24 
51 
52        <#if entries?has_content> 
53          <#list entries as curEntry> 
54            <#assign assetRenderer = curEntry.getAssetRenderer()> 
55            <#assign article = assetRenderer.getArticle()> 
56            <#assign document = saxReaderUtil.read(article.getContent()) /> 
57            <#assign rootElement = document.getRootElement() /> 
58             
59            <#assign fromdateNode = rootElement.selectSingleNode("//dynamic-element[@name='fromdate']/dynamic-content").getText() /> 
60            <#assign fromdateNode = (fromdateNode?date("yyyy-MM-dd")?long)?string /> 
61             
62            <#assign todateNode = rootElement.selectSingleNode("//dynamic-element[@name='todate']/dynamic-content").getText() /> 
63            <#if todateNode != ""> 
64                <#assign todateNode = (todateNode?date("yyyy-MM-dd")?long)?string /> 
65            </#if> 
66 
67            <#assign descriptionNode = rootElement.selectSingleNode("//dynamic-element[@name='description']/dynamic-content").getText() /> 
68            <#assign durationNode = rootElement.selectSingleNode("//dynamic-element[@name='duration']/dynamic-content").getText() /> 
69            <#assign urlNode = rootElement.selectSingleNode("//dynamic-element[@name='url']/dynamic-content").getText() /> 
70 
71            <#if todateNode = ""> 
72                <#assign todateNode = fromdateNode /> 
73            </#if> 
74            <#if ((.now < fromdateNode?number?number_to_datetime) && (fromdateNode?number?number_to_datetime < threeMonths?number_to_datetime)) || ((.now < todateNode?number?number_to_datetime) && (todateNode?number?number_to_datetime < threeMonths?number_to_datetime))> 
75 
76              doc.setDrawColor(224,224,224) 
77              doc.line(40, yPos, 572, yPos) 
78              yPos += 25 
79 
80              if ((yPos + blockHeight) >= 720) { 
81                doc.addPage(); 
82                var yPos = 50 
83
84 
85              doc.setFontSize(14); 
86              doc.setFontType('bold'); 
87              doc.setTextColor(25,72,103); 
88              yPos += 10 
89 
90              var text = "${curEntry.getTitle(locale)}" 
91              var lineHeight = doc.getLineHeight(text) / doc.internal.scaleFactor 
92              var splitTitle = doc.splitTextToSize(text, 522); 
93              var lines = splitTitle.length 
94              var blockHeight = lines * lineHeight 
95              doc.text(xPos, yPos, splitTitle); 
96              yPos += blockHeight - 3 
97 
98              if ((yPos + blockHeight) >= 720) { 
99                doc.addPage(); 
100                var yPos = 50 
101
102 
103              doc.setFontSize(10); 
104 
105              var text = "${durationNode}" 
106              var lineHeight = doc.getLineHeight(text) / doc.internal.scaleFactor 
107              var splitTitle = doc.splitTextToSize(text, 522); 
108              var lines = splitTitle.length 
109              var blockHeight = lines * lineHeight 
110              doc.text(xPos, yPos, splitTitle); 
111              yPos += blockHeight + 10 
112 
113              if ((yPos + blockHeight) >= 720) { 
114                doc.addPage(); 
115                var yPos = 50 
116
117 
118              doc.setFontSize(11); 
119              doc.setFontType('normal'); 
120              doc.setTextColor(74,74,74); 
121 
122              <#assign descriptionNode = descriptionNode?replace('"|“|”',"'",'r') /> 
123 
124              var text = "<@compress single_line=true>${descriptionNode?replace('<[^>]+>','','r')}</@compress>" 
125              var lineHeight = doc.getLineHeight(text) / doc.internal.scaleFactor 
126              var splitTitle = doc.splitTextToSize(text, 522); 
127              var lines = splitTitle.length 
128              var blockHeight = lines * lineHeight 
129              doc.text(xPos, yPos, splitTitle); 
130              yPos += blockHeight + 15 
131               
132                <#if urlNode?has_content> 
133                    doc.setTextColor(184,33,50); 
134                    var text = "View Website" 
135                    var lineHeight = doc.getLineHeight(text) / doc.internal.scaleFactor 
136                    var lines = 1 
137                    var blockHeight = lines * lineHeight 
138                    doc.textWithLink(text, xPos, yPos, {url: '${urlNode}'}); 
139                    yPos += blockHeight + 15 
140                </#if> 
141 
142            </#if> 
143          </#list> 
144        </#if> 
145 
146        doc.save("events-and-observances-from-${.now?string['MMM-d-YYYY']?lower_case}-to-${threeMonths?number_to_date?string['MMM-d-YYYY']?lower_case}.pdf"); 
147
148</script> 

Upcoming Events

An error occurred while processing the template.
The following has evaluated to null or missing:
==> assetRenderer.getArticle()  [in template "20155#20195#3749374" at line 7, column 32]

----
Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign article = assetRenderer.getAr...  [in template "20155#20195#3749374" at line 7, column 13]
----
1<div class="events"> 
2    <#if entries?has_content> 
3        <#assign counter = 0/> 
4         
5        <#list entries as curEntry> 
6            <#assign assetRenderer = curEntry.getAssetRenderer()> 
7            <#assign article = assetRenderer.getArticle()> 
8            <#assign document = saxReaderUtil.read(article.getContent()) /> 
9            <#assign rootElement = document.getRootElement() /> 
10             
11            <#assign typeNode = rootElement.selectSingleNode("//dynamic-element[@name='type']/dynamic-content").getText() /> 
12            <#assign descriptionNode = rootElement.selectSingleNode("//dynamic-element[@name='description']/dynamic-content").getText() /> 
13            <#assign durationNode = rootElement.selectSingleNode("//dynamic-element[@name='duration']/dynamic-content").getText() /> 
14            <#assign fromdateNode = rootElement.selectSingleNode("//dynamic-element[@name='fromdate']/dynamic-content").getText() /> 
15            <#assign todateNode = rootElement.selectSingleNode("//dynamic-element[@name='todate']/dynamic-content").getText() /> 
16            <#assign urlNode = rootElement.selectSingleNode("//dynamic-element[@name='url']/dynamic-content").getText() /> 
17            <#assign graphicdisplaytypeNode = rootElement.selectSingleNode("//dynamic-element[@name='graphicdisplaytype']/dynamic-content").getText() /> 
18             
19            <#assign fromdateNode = (fromdateNode?date("yyyy-MM-dd")?long)?string /> 
20             
21            <#if todateNode != ""> 
22                <#assign todateNode = (todateNode?date("yyyy-MM-dd")?long)?string /> 
23            <#else> 
24                <#assign todateNode = fromdateNode /> 
25            </#if> 
26                 
27            <#if (.now < todateNode?number?number_to_datetime) && typeNode == "event"> 
28                <#assign 
29                    assetRenderer = curEntry.getAssetRenderer() 
30                    entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale)) 
31                /> 
32                <div class="event <#if (counter > 3)>hide</#if>"> 
33                    <div class="custom-edit"> 
34                        <@getEditIcon /> 
35                    </div> 
36                    <#if urlNode != ""> 
37                        <a href="${urlNode}" title="${curEntry.getTitle(locale)}" target="_blank"> 
38                    </#if> 
39                        <div class="image-box"> 
40                            <div class="blue-overlay"></div> 
41                            <div class="date"> 
42                                <#assign fromdate = fromdateNode?number?number_to_date /> 
43                                <#assign frommonth = fromdate?string["MMMM"]/> 
44                                <#assign fromday = fromdate?string["d"]/> 
45                                <#assign fromyear = fromdate?string["YYYY"]/> 
46     
47                                <#assign todate = todateNode?number?number_to_date /> 
48                                <#assign tomonth = todate?string["MMMM"]/> 
49                                <#assign today = todate?string["d"]/> 
50                                <#assign toyear = todate?string["YYYY"]/> 
51     
52                                <#if graphicdisplaytypeNode == "daymonth"> 
53                                    <#if frommonth == tomonth> 
54                                        <div class="singledate"> 
55                                            <div class="month">                                     
56                                                ${frommonth} 
57                                            </div> 
58                                            <div class="day"> 
59                                                <#if fromday == today> 
60                                                    ${fromday} 
61                                                <#else> 
62                                                    ${fromday}-${today} 
63                                                </#if> 
64                                            </div> 
65                                        </div> 
66                                    <#else> 
67                                        <div class="frommonth"> 
68                                            <div class="month">                                     
69                                                ${frommonth} 
70                                            </div> 
71                                            <div class="day"> 
72                                                ${fromday} 
73                                            </div> 
74                                        </div> 
75                                        <div class="divider"> 
76                                            <div class="to">To</div> 
77                                        </div> 
78                                        <div class="tomonth"> 
79                                            <div class="month">                                     
80                                                ${tomonth} 
81                                            </div> 
82                                            <div class="day"> 
83                                                ${today} 
84                                            </div> 
85                                        </div> 
86                                    </#if> 
87                                </#if> 
88                                <#if graphicdisplaytypeNode == "monthyear"> 
89                                    <#if frommonth == tomonth> 
90                                        <div class="singledate"> 
91                                            <div class="month">                                     
92                                                ${frommonth} 
93                                            </div> 
94                                            <div class="year"> 
95                                                ${fromyear} 
96                                            </div> 
97                                        </div> 
98                                    <#else> 
99                                        <div class="fromyear"> 
100                                            <div class="month">                                     
101                                                ${frommonth} 
102                                            </div> 
103                                            <div class="year"> 
104                                                ${fromyear} 
105                                            </div> 
106                                        </div> 
107                                        <div class="divider"> 
108                                            <div class="to">To</div> 
109                                        </div> 
110                                        <div class="toyear"> 
111                                            <div class="month">                                     
112                                                ${tomonth} 
113                                            </div> 
114                                            <div class="year"> 
115                                                ${toyear} 
116                                            </div> 
117                                        </div> 
118                                    </#if> 
119                                </#if> 
120                            </div> 
121                        </div> 
122                        <div class="content-box"> 
123                            <h2 class="c-heading--sub">${curEntry.getTitle(locale)}</h2> 
124                            <#if durationNode != ""> 
125                                <p class="time">${durationNode}</p> 
126                            </#if> 
127                            <div class="description">${descriptionNode}</div> 
128                        </div> 
129                        <div class="clearfix"></div> 
130                    <#if urlNode != ""> 
131                        </a> 
132                    </#if> 
133                    <#assign counter = counter + 1/> 
134                </div> 
135            </#if> 
136        </#list> 
137    </#if> 
138</div> 
139<#if (counter > 4)> 
140    <div class="viewmore-holder"> 
141        <a class="button button--primary filled-button red viewmore">View More</a> 
142        <a class="button button--primary filled-button red viewless hide">View Less</a> 
143    </div> 
144</#if> 
145<script> 
146    $(document).ready(function() { 
147        $("a.viewmore").click(function() { 
148            $(this).addClass("hide"); 
149            $("a.viewless").removeClass("hide"); 
150            $(".event").each(function() { 
151              $(this).removeClass("hide"); 
152            }); 
153        }); 
154        $("a.viewless").click(function() { 
155            $('html, body').animate({ 
156                scrollTop: $("#column-3").offset().top - 180 
157            }, 200); 
158            setTimeout(function(){ 
159                $("a.viewless").addClass("hide"); 
160                $("a.viewmore").removeClass("hide"); 
161                $(".event:nth-child(n+5)").each(function() { 
162                  $(this).addClass("hide"); 
163                }); 
164            }, 200); 
165        }); 
166    }); 
167</script> 
168<#macro getEditIcon> 
169    <#if assetRenderer.hasEditPermission(themeDisplay.getPermissionChecker())> 
170        <#assign editPortletURL = assetRenderer.getURLEdit(renderRequest, renderResponse, windowStateFactory.getWindowState("NORMAL"), themeDisplay.getURLCurrent())!"" /> 
171 
172        <#if validator.isNotNull(editPortletURL)> 
173            <#assign title = languageUtil.format(locale, "edit-x", entryTitle, false) /> 
174 
175            <@liferay_ui["icon"] 
176                cssClass="icon-monospaced visible-interaction" 
177                icon="pencil" 
178                markupView="lexicon" 
179                message=title 
180                url=editPortletURL.toString() 
181            /> 
182        </#if> 
183    </#if> 
184</#macro>