| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 <head> | 
|  | 2 <style type="text/css"> | 
|  | 3 h2 | 
|  | 4 { | 
|  | 5   padding-top: 20px; | 
|  | 6   border-top: 1px solid #ccc; | 
|  | 7 } | 
|  | 8 | 
|  | 9 label | 
|  | 10 { | 
|  | 11   display: block; | 
|  | 12 } | 
|  | 13 | 
|  | 14 input | 
|  | 15 { | 
|  | 16   vertical-align: top; | 
|  | 17 } | 
|  | 18 | 
|  | 19 button, label | 
|  | 20 { | 
|  | 21   display: inline-block; | 
|  | 22   margin-bottom: 0; | 
|  | 23   font-weight: 400; | 
|  | 24   text-align: center; | 
|  | 25   vertical-align: middle; | 
|  | 26   cursor: pointer; | 
|  | 27   background-image: none; | 
|  | 28   border: 1px solid transparent; | 
|  | 29   white-space: nowrap; | 
|  | 30   padding: 6px 12px; | 
|  | 31   font-size: 14px; | 
|  | 32   line-height: 1.42857143; | 
|  | 33   border-radius: 4px; | 
|  | 34   -webkit-user-select: none; | 
|  | 35   -moz-user-select: none; | 
|  | 36   -ms-user-select: none; | 
|  | 37   user-select: none; | 
|  | 38   color: #333; | 
|  | 39   background-color: #fff; | 
|  | 40   border-color: #ccc; | 
|  | 41 } | 
|  | 42 | 
|  | 43 button:hover | 
|  | 44 { | 
|  | 45   background-color: #ebebeb; | 
|  | 46   border-color: #adadad; | 
|  | 47 } | 
|  | 48 | 
|  | 49 button:active | 
|  | 50 { | 
|  | 51   background-color: #ebebeb; | 
|  | 52   border-color: #adadad; | 
|  | 53   outline: 0; | 
|  | 54   -webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,.125); | 
|  | 55   box-shadow: inset 0 3px 5px rgba(0,0,0,.125); | 
|  | 56 } | 
|  | 57 | 
|  | 58 .hidden | 
|  | 59 { | 
|  | 60   display: none; | 
|  | 61 } | 
|  | 62 | 
|  | 63 .contentfield_content .hidden | 
|  | 64 { | 
|  | 65   display: block; | 
|  | 66 } | 
|  | 67 | 
|  | 68 #form strong | 
|  | 69 { | 
|  | 70   display: block; | 
|  | 71   margin: 10px 0px; | 
|  | 72 } | 
|  | 73 | 
|  | 74 #form button | 
|  | 75 { | 
|  | 76   font-size: 18px; | 
|  | 77 } | 
|  | 78 | 
|  | 79 /* Credit Card */ | 
|  | 80 | 
|  | 81 #form.none button.credit-card, | 
|  | 82 #form.credit-card button.credit-card | 
|  | 83 { | 
|  | 84   color: #fff; | 
|  | 85   background-color: #d9534f; | 
|  | 86   border-color: #d43f3a; | 
|  | 87 } | 
|  | 88 | 
|  | 89 #form.none button.credit-card:hover, | 
|  | 90 #form.credit-card button.credit-card:hover | 
|  | 91 { | 
|  | 92   background-color: #d2322d; | 
|  | 93   border-color: #ac2925; | 
|  | 94 } | 
|  | 95 | 
|  | 96 /* Paypal */ | 
|  | 97 | 
|  | 98 #form.none button.paypal, | 
|  | 99 #form.paypal button.paypal | 
|  | 100 { | 
|  | 101   color: #fff; | 
|  | 102   background-color: #428bca; | 
|  | 103   border-color: #357ebd; | 
|  | 104 } | 
|  | 105 | 
|  | 106 #form.none button.paypal:hover, | 
|  | 107 #form.paypal button.paypal:hover | 
|  | 108 { | 
|  | 109   background-color: #3276b1; | 
|  | 110   border-color: #285e8e; | 
|  | 111 } | 
|  | 112 | 
|  | 113 /* Bitcoin */ | 
|  | 114 | 
|  | 115 #form.none button.bitcoin, | 
|  | 116 #form.bitcoin button.bitcoin | 
|  | 117 { | 
|  | 118   color: #fff; | 
|  | 119   background-color: #f0ad4e; | 
|  | 120   border-color: #eea236; | 
|  | 121 } | 
|  | 122 | 
|  | 123 #form.none button.bitcoin:hover, | 
|  | 124 #form.bitcoin button.bitcoin:hover | 
|  | 125 { | 
|  | 126   background-color: #ed9c28; | 
|  | 127   border-color: #d58512; | 
|  | 128 } | 
|  | 129 | 
|  | 130 /* Secondary Form Elements */ | 
|  | 131 | 
|  | 132 #form-fields | 
|  | 133 { | 
|  | 134   display: none; | 
|  | 135 } | 
|  | 136 | 
|  | 137 #form.credit-card #form-fields, | 
|  | 138 #form.paypal #form-fields, | 
|  | 139 #form.bitcoin #form-fields | 
|  | 140 { | 
|  | 141   display: block; | 
|  | 142 } | 
|  | 143 | 
|  | 144 #form.bitcoin #form-price | 
|  | 145 { | 
|  | 146   display: none; | 
|  | 147 } | 
|  | 148 | 
|  | 149 #donate | 
|  | 150 { | 
|  | 151   color: #fff; | 
|  | 152   background-color: #5cb85c; | 
|  | 153   border-color: #4cae4c; | 
|  | 154 } | 
|  | 155 | 
|  | 156 #donate:hover | 
|  | 157 { | 
|  | 158   background-color: #47a447; | 
|  | 159   border-color: #398439; | 
|  | 160 } | 
|  | 161 | 
|  | 162 #error | 
|  | 163 { | 
|  | 164   color: #d9534f; | 
|  | 165   vertical-align: middle; | 
|  | 166 } | 
|  | 167 | 
|  | 168 #refund-message | 
|  | 169 { | 
|  | 170   margin-top: 50px; | 
|  | 171   font-style: italic; | 
|  | 172 } | 
|  | 173 | 
|  | 174 #refund-message * | 
|  | 175 { | 
|  | 176   font-size: 12px; | 
|  | 177 } | 
|  | 178 | 
|  | 179 #refund-message div | 
|  | 180 { | 
|  | 181   margin-bottom: 5px; | 
|  | 182 } | 
|  | 183 | 
|  | 184 #refund-message ul | 
|  | 185 { | 
|  | 186   padding-top: 0px; | 
|  | 187   margin-top: 0px; | 
|  | 188 } | 
|  | 189 | 
|  | 190 .custom-input | 
|  | 191 { | 
|  | 192   display: inline-block; | 
|  | 193   margin-left: 6px; | 
|  | 194 } | 
|  | 195 | 
|  | 196 .custom-input .addon | 
|  | 197 { | 
|  | 198   padding: 2px 6px; | 
|  | 199   text-align: center; | 
|  | 200   color: #555; | 
|  | 201   font-size: 14px; | 
|  | 202   border: 1px solid #ccc; | 
|  | 203   border-right: 0; | 
|  | 204   border-radius: 3px; | 
|  | 205   border-bottom-right-radius: 0; | 
|  | 206   border-top-right-radius: 0; | 
|  | 207   background-color: #eee; | 
|  | 208 } | 
|  | 209 | 
|  | 210 .custom-input input | 
|  | 211 { | 
|  | 212   width: 75px; | 
|  | 213   margin: 0px; | 
|  | 214   padding: 2px; | 
|  | 215   text-align: right; | 
|  | 216   font-size: 14px; | 
|  | 217   color: #555; | 
|  | 218   border: 1px solid #ccc; | 
|  | 219   border-radius: 4px; | 
|  | 220   border-bottom-left-radius: 0; | 
|  | 221   border-top-left-radius: 0; | 
|  | 222   -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); | 
|  | 223   box-shadow: inset 0 1px 1px rgba(0,0,0,.075); | 
|  | 224   -webkit-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; | 
|  | 225   transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; | 
|  | 226 } | 
|  | 227 </style> | 
|  | 228 | 
|  | 229 <script type="text/javascript"> | 
|  | 230 // <!-- | 
|  | 231 (function() | 
|  | 232 { | 
|  | 233   var textAttr = ("textContent" in document.documentElement) ? "textContent" : "
     innerText"; | 
|  | 234 | 
|  | 235   var formValues = { | 
|  | 236     currency: "USD", | 
|  | 237     description: null, | 
|  | 238     name: null | 
|  | 239   }; | 
|  | 240 | 
|  | 241   var priceValue = { | 
|  | 242     get: function() | 
|  | 243     { | 
|  | 244       var value = document.querySelector("input[name=price]:checked").value; | 
|  | 245       if (value == 0) | 
|  | 246         value = document.getElementById("price-other").value >> 0; | 
|  | 247       return value; | 
|  | 248     }, | 
|  | 249     verify: function() | 
|  | 250     { | 
|  | 251       var selected = document.querySelector("input[name=price]:checked"); | 
|  | 252       if (!selected) | 
|  | 253         return "Please select an amount"; | 
|  | 254       if (selected.value == 0) | 
|  | 255       { | 
|  | 256         var other = document.getElementById("price-other"); | 
|  | 257         if (other.value < 0 || isNaN(other.value)) | 
|  | 258           return "Please select a valid amount"; | 
|  | 259       } | 
|  | 260       return null; | 
|  | 261     } | 
|  | 262   }; | 
|  | 263 | 
|  | 264   var langValue = { | 
|  | 265     get: function(langs) | 
|  | 266     { | 
|  | 267       var lang = document.documentElement.lang; | 
|  | 268       if (lang in langs) | 
|  | 269         return langs[lang]; | 
|  | 270       if ("en" in langs) | 
|  | 271         return langs["en"]; | 
|  | 272       return "en"; | 
|  | 273     } | 
|  | 274   }; | 
|  | 275 | 
|  | 276   var recurrenceValue = { | 
|  | 277     get: function(recurrences) | 
|  | 278     { | 
|  | 279       var checked = document.getElementById("recurrence").checked; | 
|  | 280       return (checked && recurrences.monthly) ? recurrences.monthly : undefined | 
|  | 281     } | 
|  | 282   }; | 
|  | 283 | 
|  | 284   var providers = { | 
|  | 285     "bitcoin": function() | 
|  | 286     { | 
|  | 287       var recurring = recurrenceValue.get({ | 
|  | 288         "monthly": "https://coinbase.com/checkouts/d46825e3f22461f6a25b3249f8ce7
     c2a" | 
|  | 289       }); | 
|  | 290       openProviderPage({ | 
|  | 291         action: (recurring) ? recurring : "https://coinbase.com/checkouts/ab08a1
     65e21d72b503cff8f30bece652" | 
|  | 292       }); | 
|  | 293     }, | 
|  | 294     "credit-card": function() | 
|  | 295     { | 
|  | 296       if (verify(priceValue)) | 
|  | 297         return; | 
|  | 298 | 
|  | 299       openProviderPage({ | 
|  | 300         action: "https://www.2checkout.com/checkout/purchase", | 
|  | 301         fields: { | 
|  | 302           sid: "202208429", | 
|  | 303           mode: "2CO", | 
|  | 304           currency_code: formValues.currency, | 
|  | 305           lang: langValue.get({ | 
|  | 306             "de": "gr", | 
|  | 307             "en": "en", | 
|  | 308             "es": "es_ib", | 
|  | 309             "fr": "fr", | 
|  | 310             "nl": "nl", | 
|  | 311             "pt_br": "pt", | 
|  | 312             "zh_cn": "zh", | 
|  | 313             "zh_tw": "zh" | 
|  | 314           }), | 
|  | 315           pay_method: "CC", // CC: Credit Card, PPI: PayPal | 
|  | 316           li_0_type: "product", | 
|  | 317           li_0_name: formValues.name, | 
|  | 318           li_0_description: formValues.description, | 
|  | 319           li_0_price: priceValue.get(), | 
|  | 320           li_0_tangible: "N", | 
|  | 321           li_0_recurrence: recurrenceValue.get({ | 
|  | 322             "monthly": "1 Month" | 
|  | 323           }) | 
|  | 324         } | 
|  | 325       }); | 
|  | 326     }, | 
|  | 327     // see https://developer.paypal.com/webapps/developer/docs/classic/paypal-pa
     yments-standard/integration-guide/Appx_websitestandard_htmlvariables/#id08A6HI00
     JQU | 
|  | 328     "paypal": function() | 
|  | 329     { | 
|  | 330       if (verify(priceValue)) | 
|  | 331         return; | 
|  | 332 | 
|  | 333       var recurrence = recurrenceValue.get({ | 
|  | 334         "monthly": "M" | 
|  | 335       }); | 
|  | 336 | 
|  | 337       var fields = { | 
|  | 338         business: "jobp@adblockplus.org", | 
|  | 339         item_name: formValues.name, | 
|  | 340         currency_code: formValues.currency, | 
|  | 341         lc: langValue.get({ | 
|  | 342           "de": "DE", | 
|  | 343           "en": "US", | 
|  | 344           "es": "ES", | 
|  | 345           "fr": "FR", | 
|  | 346           "nl": "NL", | 
|  | 347           "pt_br": "BR", | 
|  | 348           "zh_cn": "C2", | 
|  | 349           "zh_tw": "TW" | 
|  | 350         }) | 
|  | 351       }; | 
|  | 352       if (recurrence) | 
|  | 353       { | 
|  | 354         fields.cmd = "_xclick-subscriptions"; | 
|  | 355         fields.a3 = priceValue.get(); | 
|  | 356         fields.p3 = 1; | 
|  | 357         fields.t3 = recurrence; | 
|  | 358         fields.src = 1; | 
|  | 359         fields.modify = 1; | 
|  | 360       } | 
|  | 361       else | 
|  | 362       { | 
|  | 363         fields.cmd = "_donations"; | 
|  | 364         fields.amount = priceValue.get(); | 
|  | 365       } | 
|  | 366 | 
|  | 367       openProviderPage({ | 
|  | 368         action: "https://www.paypal.com/cgi-bin/webscr", | 
|  | 369         fields: fields | 
|  | 370       }); | 
|  | 371     } | 
|  | 372   }; | 
|  | 373 | 
|  | 374   function verify() | 
|  | 375   { | 
|  | 376     var error = null; | 
|  | 377     for (var i in arguments) | 
|  | 378     { | 
|  | 379       error = arguments[i].verify(); | 
|  | 380       if (error) | 
|  | 381       { | 
|  | 382         document.getElementById("error")[textAttr] = error; | 
|  | 383         break; | 
|  | 384       } | 
|  | 385     } | 
|  | 386     return error; | 
|  | 387   } | 
|  | 388 | 
|  | 389   function openProviderPage(provider) | 
|  | 390   { | 
|  | 391     document.getElementById("error")[textAttr] = ""; | 
|  | 392 | 
|  | 393     var form = document.createElement("form"); | 
|  | 394     form.target = "_blank"; | 
|  | 395     form.action = provider.action; | 
|  | 396 | 
|  | 397     var fields = provider.fields; | 
|  | 398     if (fields) | 
|  | 399     { | 
|  | 400       for (var i in fields) | 
|  | 401       { | 
|  | 402         var field = document.createElement("input"); | 
|  | 403         field.name = i; | 
|  | 404         field.value = fields[i]; | 
|  | 405         form.appendChild(field); | 
|  | 406       } | 
|  | 407     } | 
|  | 408 | 
|  | 409     // To submit a form in Firefox it needs to be part of the DOM | 
|  | 410     document.head.appendChild(form); | 
|  | 411     form.submit(); | 
|  | 412     document.head.removeChild(form); | 
|  | 413   } | 
|  | 414 | 
|  | 415   function getText(id) | 
|  | 416   { | 
|  | 417     var element = document.getElementById(id); | 
|  | 418     return element[textAttr]; | 
|  | 419   } | 
|  | 420 | 
|  | 421   document.addEventListener("DOMContentLoaded", function() | 
|  | 422   { | 
|  | 423     formValues.description = getText("i18n_description"); | 
|  | 424     formValues.name = getText("i18n_name"); | 
|  | 425 | 
|  | 426     document.getElementById("payment").addEventListener("click", function(event) | 
|  | 427     { | 
|  | 428       if (event.target.localName != "button") | 
|  | 429         return; | 
|  | 430 | 
|  | 431       document.getElementById("form").className = event.target.className; | 
|  | 432     }, true); | 
|  | 433     document.getElementById("donate").addEventListener("click", function(event) | 
|  | 434     { | 
|  | 435       var provider = providers[document.getElementById("form").className]; | 
|  | 436       if (provider) | 
|  | 437         provider(); | 
|  | 438     }, false); | 
|  | 439   }, false); | 
|  | 440 })(); | 
|  | 441 | 
|  | 442 // --> | 
|  | 443 </script> | 
|  | 444 </head> | 
|  | 445 <span class="hidden" id="i18n_name">$s1$ </span> | 
|  | 446 <span class="hidden" id="i18n_description">$s2$</span> | 
|  | 447 | 
|  | 448 <p> | 
|  | 449   $s3$ | 
|  | 450 </p> | 
|  | 451 | 
|  | 452 <div class="paypal" id="form"> | 
|  | 453   <p id="payment"> | 
|  | 454     <strong>$s4$</strong> | 
|  | 455 | 
|  | 456     <button class="paypal">$s5$</button> | 
|  | 457 <!-- Commented out until it works properly, see https://issues.adblockplus.org/t
     icket/732 | 
|  | 458     <button class="credit-card">Credit Card</button> | 
|  | 459 --> | 
|  | 460     <button class="bitcoin">$s6$</button> | 
|  | 461   </p> | 
|  | 462 | 
|  | 463   <div id="form-fields"> | 
|  | 464     <p id="form-price"> | 
|  | 465       <strong>$s7$</strong> | 
|  | 466 | 
|  | 467       <label> | 
|  | 468         <input name="price" type="radio" value="5"> | 
|  | 469         $s8$ | 
|  | 470       </label> | 
|  | 471       <label> | 
|  | 472         <input name="price" type="radio" value="10"> | 
|  | 473         $s9$ | 
|  | 474       </label> | 
|  | 475       <label> | 
|  | 476         <input name="price" type="radio" value="20"> | 
|  | 477         $s10$ | 
|  | 478       </label> | 
|  | 479       <label> | 
|  | 480         <input name="price" type="radio" value="40"> | 
|  | 481         $s11$ | 
|  | 482       </label> | 
|  | 483       <label> | 
|  | 484         <input name="price" type="radio" value="0"> | 
|  | 485         $s12$ | 
|  | 486         <span class="custom-input"> | 
|  | 487           <span class="addon">$s13$</span><input id="price-other" min="1" type="
     number" value="1"> | 
|  | 488         </span> | 
|  | 489       </label> | 
|  | 490     </p> | 
|  | 491 | 
|  | 492     <p id="form-recurrence"> | 
|  | 493       <label> | 
|  | 494         <input id="recurrence" type="checkbox"> | 
|  | 495         $s14$ | 
|  | 496       </label> | 
|  | 497     </p> | 
|  | 498 | 
|  | 499     <button id="donate">$s15$</button> | 
|  | 500     <span id="error"></span> | 
|  | 501 | 
|  | 502     <div id="refund-message"> | 
|  | 503       <div> | 
|  | 504         $s16(mailto:info@adblockplus.org)$ | 
|  | 505       </div> | 
|  | 506       <div> | 
|  | 507         $s17$ | 
|  | 508         <ul> | 
|  | 509           <li><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_manage-paylist
     " target="_blank">$s18$</a></li> | 
|  | 510           <li><a href="mailto:info@adblockplus.org" target="_blank">$s19$</a></l
     i> | 
|  | 511           <li><a href="https://coinbase.com/recurring_payments" target="_blank">
     $s20$</a></li> | 
|  | 512         </ul> | 
|  | 513       </div> | 
|  | 514     </div> | 
|  | 515   </div> | 
|  | 516 </div> | 
| OLD | NEW | 
|---|