Commercial real estate news releases from Avison Young Canada
Quarterly and topical research insights to help your business gain competitive edge in commercial real estate.
An error occurred while processing the template.
?substring(...) expects a number as argument #1, but received a Null. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign yturl2 = yturl?substring(index) [in template "20302#20342#NEWS_RELEASE_DETAIL" at line 123, column 13] ----
1<#assign _dlfels = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") />
2<#-- set the default image and alt text -->
3<#assign imgSrc = Image.getData() >
4<#assign imgAltText = Content.getData() >
5<#-- sets Alternate image -->
6<#assign imgSrc2 = Alternate_Hero_Image.getData() >
7<#assign imgAltText2 = Content.getData() >
8
9<#-- try to set more advanced options of image display -->
10<#-- set the base hostname url for environment (local/qa/stg/prod) -->
11<#assign imageBaseUri = ui_config.getCdnCgiUri() >
12<#-- determine if we want to use CDN Image Optimizations or not -->
13<#if ui_config.getUseCdnImageOptimizations() >
14<#-- set the instructions to use for optimizing the image(s) in this item -->
15 <#assign instructionPath = "/cdn-cgi/image/q=50" >
16 <#if !getterUtil.getBoolean(By_pass_Cloudflare_optimization.getData())>
17 <#assign imageBaseUri = imageBaseUri + instructionPath >
18 </#if>
19</#if>
20<#assign treePath = group_util.getGroupFriendlyUrlTreePath(groupId) >
21
22<#assign image_attributes = jsonFactoryUtil.createJSONObject(Image.getAttributes()) >
23<#if (image_attributes.fileEntryId??) >
24 <#assign fileEntryId = image_attributes.fileEntryId?number >
25 <#if fileEntryId??>
26 <#assign fe = _dlfels.getFileEntry(fileEntryId)>
27 <#if fe??>
28 <#assign imgSrc = imageBaseUri + "/documents/" + fe.repositoryId +"/" + fe.fileEntryId + "/" + fe.fileName + "/" + fe.uuid + "?t=" + fe.modifiedDate?long >
29 <#if image_attributes.alt?has_content>
30 <#assign imgAltText = image_attributes.alt >
31 <#else>
32 <#assign imgAltText = imgAltText?replace('<[^>]+>','','r') >
33 </#if>
34 </#if>
35 </#if>
36</#if>
37
38<#assign image_attributes2 = jsonFactoryUtil.createJSONObject(Alternate_Hero_Image.getAttributes()) >
39<#if (image_attributes2.fileEntryId??) >
40 <#assign fileEntryId2 = image_attributes2.fileEntryId?number >
41 <#if fileEntryId2??>
42 <#assign fe = _dlfels.getFileEntry(fileEntryId2)>
43 <#if fe??>
44 <#assign imgSrc2 = imageBaseUri + "/documents/" + fe.repositoryId +"/" + fe.fileEntryId + "/" + fe.fileName + "/" + fe.uuid + "?t=" + fe.modifiedDate?long >
45 <#if image_attributes2.alt?has_content>
46 <#assign imgAltText2 = image_attributes2.alt >
47 <#else>
48 <#assign imgAltText2 = imgAltText2?replace('<[^>]+>','','r') >
49 </#if>
50 </#if>
51 </#if>
52</#if>
53
54<style>
55 /*displays bios on one row if there's room */
56 #ay .ay-news-release__content .contact-group {
57 display:flex;
58 flex-justify:start;
59 flex-wrap:wrap;
60 }
61 /*Keeps the ay-bio from smooshing width-wise.*/
62 #ay .ay-news-release__content .ay-bio {
63 min-width:240px;
64 }
65 /* added the white on hover because the primary button is supposed to have white text, but it has light blue so the text disappears on hover. */
66 #ay .ay-button__primary:hover {
67 color:#FFF;
68 }
69</style>
70
71<#assign displayDate = .vars['reserved-article-display-date'].data>
72<#setting time_zone = languageUtil.get(locale, "template-timezone")>
73<#assign originalLocale = locale>
74<#setting locale = localeUtil.getDefault()>
75<#assign displayDate = displayDate?date("EEE, d MMM yyyy HH:mm:ss Z")>
76<#setting locale = originalLocale>
77<#assign displayDate = displayDate?string("long")>
78
79<div class="ay-news-release">
80 <h1 id="ay-artTitle" class="h2">${Content.getData()}</h1>
81 <#if validator.isNotNull(Youtube_Video_Hero_.getData()) >
82 <#assign yturl = Youtube_Video_Hero_.getData()>
83 <#else>
84 <#assign yturl = ''>
85 </#if>
86 <#if Image.getData()?has_content && !yturl?has_content >
87 <#if Hide_hero_image_on_detail_page.getData()?has_content>
88 <#-- if var doesn't exist or equals false '0'-->
89 <#if !Alternate_Hero_Image.getData()?has_content>
90 <#if getterUtil.getBoolean(By_pass_Cloudflare_optimization.getData())>
91 <img src="${Image.getData()}" alt="${imgAltText}">
92 <#else>
93 <img src="${imgSrc}" alt="${imgAltText}">
94 </#if>
95 <#else>
96 <#if getterUtil.getBoolean(By_pass_Cloudflare_optimization.getData())>
97 <img src="${Alternate_Hero_Image.getData()}" alt="${imgAltText}" style="max-height: none;">
98 <#else>
99 <img src="${imgSrc2}" alt="${imgAltText2}" style="max-height: none;">
100 </#if>
101 </#if>
102 </#if>
103 </#if>
104 <#if validator.isNotNull(Youtube_Video_Hero_.getData()) >
105 <#assign isVimeo = "false">
106 <#assign yturl = Youtube_Video_Hero_.getData()>
107 <#if yturl?contains("https://youtu.be/")>
108 <#assign index = yturl?index_of('https://youtu.be/')>
109 <#assign index = index + 17>
110 </#if>
111 <#if yturl?contains("https://www.youtube.com/watch?v=")>
112 <#assign index = yturl?index_of('https://www.youtube.com/watch?v=')>
113 <#assign index = index + 32>
114 </#if>
115
116 <#if yturl?contains("https://vimeo.com/")>
117 <#assign isVimeo = "true">
118 <#assign index = yturl?remove_beginning("https://vimeo.com/")>
119 <#assign videoEmbedCode = "https://player.vimeo.com/video/" + index>
120 <#assign yturl2 = videoEmbedCode>
121 <#assign linkURL = yturl>
122 <#else>
123 <#assign yturl2 = yturl?substring(index)>
124 <#assign linkURL = "https://www.youtube.com/embed/${yturl2}?rel=0&showinfo=0&autoplay=1">
125 </#if>
126
127 <div class="ay-video-firefox-extra-wrap">
128 <div class="ay-video-wrapper">
129 <#if Image.getData()?has_content>
130 <a href="${linkURL}" target="youtubevideo" style="background:url('${Image.getData()}') no-repeat center center; background-size:cover;"></a>
131 </#if>
132 <div class="<#if isVimeo == 'true'>ytv-container<#else>yt-container ytv-container</#if>" video="${yturl2}">
133 <#if isVimeo == "true">
134 <iframe id="youtubeiframe" name="youtubevideo" width="1280" height="720" src="${videoEmbedCode}" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>
135 </#if>
136 </div>
137 <#if isVimeo == "true">
138 <script src="https://player.vimeo.com/api/player.js"></script>
139 <script>const player = new Vimeo.Player("youtubeiframe");</script>
140 </#if>
141 <script>
142 $(document).ready(function(){
143 $(".ay-video-wrapper a").bind("click",function(event){
144 <#if isVimeo == "true">
145 event.preventDefault();
146 $(this).next().children().css({visibility:'visible'});
147 player.play();
148 <#else>
149 $(this).next().children().css({visibility:'visible'});
150 </#if>
151 if($(".cc-window").hasClass("cc-invisible") == true){
152 if($(".yt-container").html() != ""){
153 $(this).css({display:'none'});
154 <#if isVimeo == "false">
155 $(this).next().children().css({visibility:'visible'}).click();
156 </#if>
157 }
158 }else{
159 event.preventDefault();
160 }
161 });
162 });
163 </script>
164 </div>
165 </div>
166 </#if>
167
168 <small>${displayDate}</small>
169 <div class="ay-news-release__content">
170 <#if SubTitle.getData()?has_content>
171 <h3 class="ay-news-release__subtitle">${SubTitle.getData()}</h3>
172 </#if>
173 ${News_Release_Detail_Content.getData()}
174 <#if Boiler_Plate_Content.getData()?has_content >
175 <div class="ay-news-release__boiler">
176 ${Boiler_Plate_Content.getData()}
177 </div>
178 </#if>
179 <div class="ay-news-release__social">
180 <a id="ay-email-to" href="#" target="_blank" class="ay-news-release__social--item">
181 <svg class="ay-news-release__social--icon">
182 <use xlink:href="/o/ay-theme/resources/images/images.svg#email" />
183 </svg>
184 </a>
185 <a id="ay-social-twitter" href="#" class="ay-news-release__social--item" target="_blank">
186 <svg class="ay-news-release__social--icon">
187 <use xlink:href="/o/ay-theme/resources/images/images.svg#twitter1" />
188 </svg>
189 </a>
190 <a id="ay-social-facebook" href="#" class="ay-news-release__social--item" target="_blank">
191 <svg class="ay-news-release__social--icon">
192 <use xlink:href="/o/ay-theme/resources/images/images.svg#facebook" />
193 </svg>
194 </a>
195 <a id="ay-social-linkedin" href="#" class="ay-news-release__social--item" target="_blank">
196 <svg class="ay-news-release__social--icon">
197 <use xlink:href="/o/ay-theme/resources/images/images.svg#linkedin1" />
198 </svg>
199 </a>
200 <#if treePath?contains("/ay/de/") >
201 <a id="ay-social-xming" href="#" class="ay-news-release__social--item" target="_blank">
202 <svg class="ay-news-release__social--icon">
203 <use xlink:href="/o/ay-theme/resources/images/images.svg#xing-social" />
204 </svg>
205 </a>
206 </#if>
207 </div>
208 </div>
209</div>
210<#assign newsTitle = Content.getData() />
211
212<script>
213 function socialLinks(){
214 uri=window.location;
215 uri=uri.toString();
216 ofLoc=$(".ay-header-options h3 a").html();
217 enc=encodeURIComponent(uri);
218 prtitle=$("#ay-artTitle").html();
219 //prtitle=prtitle.replace(/(\r\n\t|\n|\r\t)/gm,"");
220 prtitle=encodeURI(prtitle);
221 mailtoSub="Avison Young - "+ofLoc+" News: ";
222 mailtoSub=encodeURI(mailtoSub);
223 //alert(enc);
224 $("#ay-social-twitter").attr("href","https://twitter.com/intent/tweet?url="+enc+"&text="+prtitle+"&via=AvisonYoung");
225 $("#ay-social-facebook").attr("href","https://www.facebook.com/sharer/sharer.php?u="+enc);
226 $("#ay-social-linkedin").attr("href","https://www.linkedin.com/cws/share?url="+enc);
227 <#if treePath?contains("/ay/de/") >
228 $("#ay-social-xming").attr("href","https://www.xing.com/spi/shares/new?url="+enc);
229 </#if>
230 $("#ay-email-to").attr("href","mailto:?subject="+mailtoSub+prtitle+"&body="+enc);
231 }
232 $(document).ready(function(){
233 socialLinks();
234 })
235</script>
236
237<style>
238 .ay-news-release__content{
239 min-height:150px;
240 }
241</style>