Fix sort order in UncachedCategoryNodeTree
[GitHub/WoltLab/WCF.git] / com.woltlab.wcf / templates / recaptcha.tpl
CommitLineData
96714cab
MS
1{if $recaptchaLegacyMode|empty}
2 {include file='captcha'}
3{else}
ec9e64f0
TD
4 {* No explicit keys were set, use legacy V1 API and WoltLab's OEM keys *}
5 {if RECAPTCHA_PUBLICKEY === '' || RECAPTCHA_PRIVATEKEY === ''}
96714cab
MS
6 <fieldset>
7 <legend><label for="recaptcha_response_field">{lang}wcf.recaptcha.title{/lang}</label></legend>
8 <small>{lang}wcf.recaptcha.description{/lang}</small>
376d7839 9
96714cab
MS
10 <dl class="wide reCaptcha{if $errorField|isset && $errorField == 'recaptchaString'} formError{/if}">
11 {if !$ajaxCaptcha|isset || !$ajaxCaptcha}
12 <script data-relocate="true">
13 //<![CDATA[
14 var RecaptchaOptions = {
15 lang: '{@$recaptchaLanguageCode}',
16 theme : 'custom'
17 }
18 //]]>
19 </script>
20 {/if}
21 <dt class="jsOnly">
22 <label for="recaptcha_response_field">reCAPTCHA</label>
23 </dt>
24 <dd class="jsOnly">
25 <div id="recaptcha_image" class="framed"></div>
26 <input type="text" id="recaptcha_response_field" name="recaptcha_response_field" class="medium marginTop" />
27 {if (($errorType|isset && $errorType|is_array && $errorType[recaptchaString]|isset) || ($errorField|isset && $errorField == 'recaptchaString'))}
28 {if $errorType|is_array && $errorType[recaptchaString]|isset}
29 {assign var='__errorType' value=$errorType[recaptchaString]}
30 {else}
31 {assign var='__errorType' value=$errorType}
32 {/if}
b9f4bd69 33 <small class="innerError">
96714cab
MS
34 {if $__errorType == 'empty'}
35 {lang}wcf.global.form.error.empty{/lang}
36 {else}
37 {lang}wcf.recaptcha.error.recaptchaString.{$__errorType}{/lang}
38 {/if}
b9f4bd69
MS
39 </small>
40 {/if}
96714cab
MS
41 </dd>
42
43 {event name='fields'}
44
45 <dd class="jsOnly">
46 <ul class="buttonList smallButtons">
47 <li><a href="javascript:Recaptcha.reload()" class="button small"><span class="icon icon16 icon-repeat"></span> <span>{lang}wcf.recaptcha.reload{/lang}</span></a></li>
48 <li class="recaptcha_only_if_image"><a href="javascript:Recaptcha.switch_type('audio')" class="button small"><span class="icon icon16 icon-volume-up"></span> <span>{lang}wcf.recaptcha.audio{/lang}</span></a></li>
49 <li class="recaptcha_only_if_audio"><a href="javascript:Recaptcha.switch_type('image')" class="button small"><span class="icon icon16 icon-eye-open"></span> <span>{lang}wcf.recaptcha.image{/lang}</span></a></li>
50 <li><a href="javascript:Recaptcha.showhelp()" class="button small"><span class="icon icon16 icon-question-sign"></span> <span>{lang}wcf.recaptcha.help{/lang}</span></a></li>
51 {event name='buttons'}
52 </ul>
53 </dd>
54
55 {if !$ajaxCaptcha|isset || !$ajaxCaptcha}
2a83aa92 56 <script data-relocate="true" src="//www.google.com/recaptcha/api/challenge?k={$recaptchaPublicKey}"></script>
96714cab
MS
57 <noscript>
58 <dd>
2a83aa92 59 <iframe src="//www.google.com/recaptcha/api/noscript?k={$recaptchaPublicKey}" height="300" width="500" seamless="seamless"></iframe><br />
96714cab
MS
60 <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
61 <input type="hidden" name="recaptcha_response_field" value="manual_challenge" />
62 </dd>
63 {if (($errorType|isset && $errorType|is_array && $errorType[recaptchaString]|isset) || ($errorField|isset && $errorField == 'recaptchaString'))}
64 {if $errorType|is_array && $errorType[recaptchaString]|isset}
65 {assign var='__errorType' value=$errorType[recaptchaString]}
66 {else}
67 {assign var='__errorType' value=$errorType}
68 {/if}
69 <small class="innerError">
70 {if $errorType == 'empty'}
71 {lang}wcf.global.form.error.empty{/lang}
72 {else}
73 {lang}wcf.recaptcha.error.recaptchaString.{$__errorType}{/lang}
74 {/if}
75 </small>
76 {/if}
77 </noscript>
78 {else}
79 <script data-relocate="true">
80 //<![CDATA[
2a83aa92
MS
81 $.getScript('//www.google.com/recaptcha/api/js/recaptcha_ajax.js', function() {
82 Recaptcha.create("{$recaptchaPublicKey}", "recaptcha_image", {
83 lang: '{@$recaptchaLanguageCode}',
84 theme : 'custom'
85 });
86
87 WCF.System.Captcha.addCallback('{$captchaID}', function() {
88 return {
89 recaptcha_challenge_field: Recaptcha.get_challenge(),
90 recaptcha_response_field: Recaptcha.get_response()
91 };
92 });
96714cab
MS
93 });
94 //]]>
95 </script>
96 {/if}
97 </dl>
98 </fieldset>
ec9e64f0
TD
99 {else}
100 <fieldset>
101 <legend>{lang}wcf.recaptcha.title{/lang}</legend>
102 {assign var="recaptchaBucketID" value=true|microtime|sha1}
103 <dl class="{if $errorField|isset && $errorField == 'recaptchaString'}formError{/if}">
104 <dt></dt>
105 <dd>
106 <div id="recaptchaBucket{$recaptchaBucketID}"></div>
2ca3c9cb
TD
107 <noscript>
108 <div style="width: 302px; height: 352px;">
109 <div style="width: 302px; height: 352px; position: relative;">
110 <div style="width: 302px; height: 352px; position: absolute;">
111 <iframe src="https://www.google.com/recaptcha/api/fallback?k={RECAPTCHA_PUBLICKEY|encodeJS}" frameborder="0" scrolling="no" style="width: 302px; height:352px; border-style: none;"></iframe>
112 </div>
113 <div style="width: 250px; height: 80px; position: absolute; border-style: none; bottom: 21px; left: 25px; margin: 0px; padding: 0px; right: 25px;">
114 <textarea name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px; height: 80px; border: 1px solid #c1c1c1; margin: 0px; padding: 0px; resize: none;"></textarea>
115 </div>
116 </div>
117 </div>
118 </noscript>
ec9e64f0
TD
119 {if (($errorType|isset && $errorType|is_array && $errorType[recaptchaString]|isset) || ($errorField|isset && $errorField == 'recaptchaString'))}
120 {if $errorType|is_array && $errorType[recaptchaString]|isset}
121 {assign var='__errorType' value=$errorType[recaptchaString]}
122 {else}
123 {assign var='__errorType' value=$errorType}
124 {/if}
125 <small class="innerError">
126 {if $__errorType == 'empty'}
127 {lang}wcf.global.form.error.empty{/lang}
128 {else}
129 {lang}wcf.captcha.recaptchaV2.error.recaptchaString.{$__errorType}{/lang}
130 {/if}
131 </small>
132 {/if}
133 </dd>
134 </dl>
135 <script data-relocate="true">
136 //<![CDATA[
137 if (!WCF.recaptcha) {
138 WCF.recaptcha = {
139 queue: [],
140 callbackCalled: false,
141 mapping: { }
142 };
143
144 // this needs to be in global scope
145 function recaptchaCallback() {
146 var bucket;
147 WCF.recaptcha.callbackCalled = true;
148
149 // clear queue
150 while (bucket = WCF.recaptcha.queue.shift()) {
151 WCF.recaptcha.mapping[bucket] = grecaptcha.render(bucket, {
152 'sitekey' : '{RECAPTCHA_PUBLICKEY|encodeJS}'
153 });
154 }
155 }
156 }
157
158 // add captcha to queue
159 WCF.recaptcha.queue.push('recaptchaBucket{$recaptchaBucketID}');
160
161 // trigger callback immediately, if API already is available
162 if (WCF.recaptcha.callbackCalled) setTimeout(recaptchaCallback, 1);
163
164 {if $ajaxCaptcha|isset && $ajaxCaptcha}
165 WCF.System.Captcha.addCallback('{$captchaID}', function() {
166 return {
167 'g-recaptcha-response': grecaptcha.getResponse(WCF.recaptcha.mapping['recaptchaBucket{$recaptchaBucketID}'])
168 };
169 });
170 {/if}
171
172 // ensure recaptcha API is loaded at most once
173 if (!window.grecaptcha) $.getScript('https://www.google.com/recaptcha/api.js?render=explicit&onload=recaptchaCallback');
174 //]]>
175 </script>
176 </fieldset>
177 {/if}
96714cab 178{/if}