From 6c2e1fd1657e757e666f31806d2fd8dc6e8f08ec Mon Sep 17 00:00:00 2001
From: Manuel Kaufmann <humitos@gmail.com>
Date: Tue, 18 Sep 2012 12:53:58 -0300
Subject: [PATCH Browse] Error page SL #3500
Added an "Error page" with Sugar style that informs the users about
the the page could not be loaded for any reason.
This patch contains a HTML template (error_page.tmpl) that is used to
generate the error page with the correct language.
Signed-off-by: Manuel Kaufmann <humitos@gmail.com>
---
browser.py | 22 +++++++++++++++++++++
data/error_page.tmpl | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 77 insertions(+)
create mode 100644 data/error_page.tmpl
diff --git a/browser.py b/browser.py
index de546f2..39699fc 100644
a
|
b
|
_NON_SEARCH_REGEX = re.compile(''' |
58 | 58 | ^file:.*$) |
59 | 59 | ''', re.VERBOSE) |
60 | 60 | |
| 61 | DEFAULT_ERROR_PAGE = os.path.join(activity.get_bundle_path(), |
| 62 | 'data/error_page.tmpl') |
| 63 | |
61 | 64 | |
62 | 65 | class CommandListener(object): |
63 | 66 | def __init__(self, window): |
… |
… |
class Browser(WebKit.WebView): |
462 | 465 | self.__mime_type_policy_cb) |
463 | 466 | self.connect('new-window-policy-decision-requested', |
464 | 467 | self.__new_window_policy_cb) |
| 468 | self.connect('load-error', self.__load_error_cb) |
465 | 469 | |
466 | 470 | try: |
467 | 471 | self.connect('run-file-chooser', self.__run_file_chooser) |
… |
… |
class Browser(WebKit.WebView): |
603 | 607 | downloadmanager.add_download(download, browser) |
604 | 608 | return True |
605 | 609 | |
| 610 | def __load_error_cb(self, web_view, web_frame, uri, web_error): |
| 611 | """Show Sugar's error page""" |
| 612 | |
| 613 | data = { |
| 614 | 'page_title': _('This web page could not be loaded'), |
| 615 | 'title': _('This web page could not be loaded'), |
| 616 | 'message': _('"%s" could not be loaded. Please check for ' |
| 617 | 'typing errors, and make sure you are connected ' |
| 618 | 'to the internet.') % uri, |
| 619 | 'btn_value': _('Try again'), |
| 620 | 'url': uri, |
| 621 | } |
| 622 | |
| 623 | html = open(DEFAULT_ERROR_PAGE, 'r').read() % data |
| 624 | web_frame.load_alternate_string(html, '', uri) |
| 625 | |
| 626 | return True |
| 627 | |
606 | 628 | |
607 | 629 | class PopupDialog(Gtk.Window): |
608 | 630 | def __init__(self): |
diff --git a/data/error_page.tmpl b/data/error_page.tmpl
new file mode 100644
index 0000000..4fb4386
-
|
+
|
|
| 1 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
| 2 | <html xmlns="http://www.w3.org/1999/xhtml"> |
| 3 | <head> |
| 4 | <title>%(page_title)s</title> |
| 5 | <style type="text/css"> |
| 6 | body { |
| 7 | font-family: sans-serif; |
| 8 | text-align:center; |
| 9 | color: #a1a1a1; |
| 10 | } |
| 11 | |
| 12 | #browse-logo { |
| 13 | align: center; |
| 14 | width: 130px; |
| 15 | } |
| 16 | |
| 17 | p { |
| 18 | font-size: 1em; |
| 19 | max-width: 1000px; |
| 20 | } |
| 21 | |
| 22 | #button { |
| 23 | color: white; |
| 24 | min-width: 150px; |
| 25 | height: 35px; |
| 26 | background-color: #a3a1a3; |
| 27 | border: 0; |
| 28 | font-size: 12pt; |
| 29 | font-weight: bold; |
| 30 | -webkit-border-radius: 20px; |
| 31 | background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAASCAYAAAC9+TVUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPNgAADzYBTE5UtQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAFeSURBVDiNlZM9SwNBEIbfXCMawcqURxohjZUkWFgJ/oR0gZBKO6sIimBhZ6e9BG3tbfwDGhERkoh6oCJoI4KNiBgei8zKZo35GBhm5+adh7n9SAEKbEJSWVJB0pykGUl3ki4k1SUdSPro6gB8XwAS+ltiut8+H1AF2p64BRwCmxZbXq1t+i5IAfg2wStQDCZ0XrQ6pp93kDGgaYU3IP4H4Dw2HcANMC5g2RuzNADgvOT1rAioWdIYEuC8YX21SFLeDuo8POsB5vT5SFLOkuaIEKfPRZIeLcmOCIktPkWSrtxYFsuSjoeAFiw23CVztuht2FGfTV3yetYFpIFn+9AEdm39BWR6ADLAtWlegElXqHjke29dDQCzdL+tCsHb2eavPVgtC5wEtR0g5UPSwBpw2QOUs/q75Z/Aqj+hW+z3aAaoA1Om2QI2gOngF9UZp3Ose5JuJZ1KOrOYDHNhfgA9ndj5pIgf9QAAAABJRU5ErkJggg=="); |
| 32 | background-position: 16px; |
| 33 | background-repeat: no-repeat; |
| 34 | text-align: center; |
| 35 | padding-left: 40px; |
| 36 | padding-right: 15px; |
| 37 | } |
| 38 | |
| 39 | #container { |
| 40 | /* we need double percent sign here because |
| 41 | of Python sustitution */ |
| 42 | margin: 15%%; |
| 43 | } |
| 44 | </style> |
| 45 | </head> |
| 46 | |
| 47 | <body> |
| 48 | <div id="container"> |
| 49 | <img id="browse-logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAACCCAYAAACKAxD9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAApiwAAKYsBK9yyHwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAABctSURBVHic7Z1bTFzX1YC/uQDDGAw22MXBjmG4NQanxsF2bGNkx2lqOW7y1EpVpNNffYnU16gPTZ7TPlR9jZSHVvKRokjpUxvLddU0tNiQxOVmG+xwMRBDArEN5mYYLsP8D+cMHjCXvfaZYQbqTxoh43P22XPWYu2911p7bVc4HGYrYppmDlAW9QkA2UAGsM3+GfkATEZ9Hts/R4EeoCPyMQxjeOO+xcbh2gqKYJrmDuAMcBY4hCX4nDg9bhhLKVqBfwG1hmE8itOzNoxNqQimafqBk1iCfxWoBNwJ6s4C0AJ8hqUY9YZhTCWoL9psGkUwTdMD/Bj4JfAmkJ7YHq3KNPBX4CLwT8MwQgnujxJJrwimaR4EDOAtYE+CuyNlEPgIMA3DuJXozqxFUiqCaZou4A3gXeBogrsTK64DvwP+ZhhG0r30pFIE0zTdwM+A94CDCe5OvLgFvA/8xTCMhUR3JkJSKIJpml4s0/9brBn//wIdwO+BjwzDmE90ZxKuCKZpVgMfsHUtwHrcAn5tGMa1RHYiYYpgmuYu4A9YE0FXQjqRPIQBE/iNYRgPEtGBDVcEex7wNtY4uWNDH578PMKaH3240fOHDVUE0zTzgY+BUxv20M3JVeAXhmF8u1EP3DBvnGma57HcsjFVApfLRUZGxvoXxoHMzExyc3NxuWI+sp0CWu13tiHE3SKYppmCtX5+hxjOBXJycggEAmzbto26ujoWFhKzEisvL6e8vJze3l56enoYHo5pTCoM/BF41zCMuVg2vJy4KoJpmvuAT4CXY9Gez+ejpKSEQCBAVlYWY2Nj/P3vf2d2djYWzWtTXV1NIBAAYGxsjJ6eHrq6uggGg7F6xJfAzw3D6I9Vg8uJmyKYpnkAuALsc9qW3++nvLyc0tJSPB4PAMFgkMuXLzM5Oem0ecd4PB5+8pOfkJubu/i7UChEZ2cn7e3tTE3FJAbVD5wzDON2LBpbTlwUwTTNE8CnwE4n7WRkZFBRUUFxcTFu95PpTCgU4h//+AcPHz502NPYkZ6ezuuvv47f71/y+4WFBbq7u2lra4uF0o4APzUMo8FpQ8uJuSKYpnkBazjQjg6mpqZSWVlJaWnpihOx//znP3zzzTfidvPy8hgaGlK61uv1Mj8vc/jl5ORw7ty5RasVTTgcprOzk5aWFqdD2TTWMHHJSSPLiakimKb5K+BDwKvbRiAQoKqqCp/Pt+L/NzU10d7eLm73xIkTDA8P09HRoXR9YWEh9+/f5/Hjx6LnFBYWcurU6gujYDBIY2MjPT09onaXMQ+8bRjGn500Ek3Mlo+2EvwJTSXIysritddeo7q6elUluHfvnpYSHD58mOLiYtE9qampvPrqq6SkpIju6+3t5dat1SPOPp+P6upqXnvtNbKyskRtR+EF/mS/85gQE0Wwh4MPde8vKyvjwoUL5OXlrXrN9PQ0X3zxhbjtkpISKioqtPqVlZVFTU2N2E/Q2trKgwdre4rz8vK4cOECZWWOYmwf2u/eMY4VwZ4YfoKGJfB6vdTU1HDs2LEVx9Vo6uvrmZmZEbW/Z88eXn7Z2co1Pz+fw4cPi+4Jh8Ncu3Zt3TmGx+Ph2LFj1NTU4PVqGVIv8IktA0c4UgR7ifgpGhPD7OxsLly4QEFBwbrX3rlzh++++07c/unTp2Pi9SsvL1/0E6gyMTFBU1OT0rUFBQVcuHCB7Oxsne6lA5/astBGWxFsZ9EVNJaIe/fu5fz582zfvn3da0dHR2lubha1n56eztmzZ8Xj+1ocP358iZ9AhY6ODgYHB5Wu3b59O+fPn2fv3r063dsJXLFlooWWIthu40/QcBYVFRVx5swZJVMYCoW4evUqoZB6/qfX6+WVV15h27Zt0q6ticfj4fTp06Sny4xffX298nLR6/Vy5swZioqKdLq4D2uY0NJ+XYvwOzTcxhUVFZw8eVLZXLe0tPDokWzLwKlTp8jJic+WBr/fz5kzZ9adz0QzNTXF9evXla93uVycPHlSd4L7MpZsxIgVwY6IvSO976WXXhJNugYHB7l9W+ZNfeGFF9i3z7FHe01yc3M5duyY6J6enh7u3bsnuufw4cO89NJLonts3tGJWooUwc4nuIgwilhRUUF5ebny9TMzM9TX10seQXZ2tnh2r0txcbFY4b788ktxEKq8vFzHMriAi7aslFFWBDuz6GNANGMqKioSC6i5uVkUqHG73Zw6dUpksp1y/Phx0tLSlK8PBoNafpDDhw/rzBlygY9tmSkhsQhvI0wq2bt3LydOyJa44+PjdHd3i+6prKxkx46NzXrz+XxiH0V/fz+9vb3iZ504cUJnNXEKS2ZKKCmCnWj6vqQX2dnZWl65lpYWJPGPvLw8DhxwtITWZv/+/RQWForuaW1tFSfRuFwuampqdPwM79uyWxdVi/AHBImmXq+X06dPi71lw8PDoqhiamqqaBUSD44ePSpaUk5MTIgtHmi/0x1YsluXdRXB3ndgSJ5+4sQJJWfRclpaWkTXHzt2LOb+AilpaWni4e/mzZsi30iE7du3i58FGLYM12RNRbB3IH2AYJVQVlam5DZeztDQkMiNXFBQIDbL8SI/P18U3ZyamlIOhy+noKBAGqhyAR/YslyV9SzCWwh2IGVlZVFVVaV6+RIk1sDj8eiusePGkSNHRNbp1q1bzM3p5aNWVVVJQ9gHsWS5Kqsqgr30+K3kaSpRxJXo7+9fN2wbTWlpacKHhOWkpKRw6NAh5etnZmbEDrMIkailkN+utZxcyyL8DMGG1EAgsGY+wWqEw2GRNfB6vRw8mJzbJCPZ1arcvn1bHFqPkJeXJ42IlmHJdEVWVAS7PsF7qk9ITU3VHhJ6enoYHR1Vvv7AgQOrZjAlGpfLRWVlpfL1c3NztLW1aT+vqqqK1NRUyS3v2bJ9itUswhsI5gaVlZVawllYWODGjRvK16elpSXMZ6DK888/Lwp6ff3119rp7j6fT6R4WDJ9Y6X/WE0R3lVtOSMjg9LSUklnFvnmm29EKd4VFRXSv4CEIHGph0KhNXMc16O0tFS65W9F2T6lCHbNIuVyNRUVFdoOna6uLuVr/X4/P/zhD7Wes9Hs2bNHNF/q7u7WTnF3uVzSwNRRW8ZLWMkiKDuP/H6/ODs4wuTkpPIeA4AXX3xxQ4NKTpGY7FAo5Ci9vbi4+KmNNevwlIyXKIJdwm7N9WY05eXlS3YgSZC4WTMzM7UVLlHs2rVLFCjScTtHcLvdojA/8JYt6ydtLLvgxyiWsPP5fNpzg3A4zN27d5WvP3jwoLbCJRKJVRgZGXG0k7q0tFQyYd+DJetFlr/dX6q2VFJSom2qBwcHlXcQpaamarmsk4EdO3aIElicWAWPx0NJSYnkliWyXlQEu6ztm6qtSNO7o5HE5AsKCnRz/pMCiXB6e3u1glERhDJ505Y5sNQinERxf0JOTo6T7Vp8+616RRihlicd+fn5yhO52dlZ0QR6OVlZWRIfRjqWzIGlinBWtQUn1mBkZEQ5d2/nzp1xy0jeKFwul2iiOzAw4Oh5QtksyjxaEV5VudPlcjkK/0qsQbKEmZ0iUQTJ+1mJwsJCiV9nUeZuWDzvQGmKm5OT48jXL/mi+fmiRNykJSMjQ3mX1OTkJGNjY9rP8vl8Eitaact+0SKcQTFtTSfCGGFubk453Oz3+3X3AiYlEqV2ahUEMnJjyX5R+Mrzgz179Cvlf//998qJqc8995z2c5IRiXPJ6TxBKKOz8EQRlDIq3G43u3YpJcWuiCTcvFWGhQiSIfXBgweiTO7l7Nq1S+KAOwRPFEEpASU3N9fRml51H6PL5XJkeZIVVasQCoUYHx/Xfo7X65Xs3C4DcNunoSnNLnbv3q3ZNQtVRdi+ffumCDdLkQx30s2/yxHIKsc0zRw3gnQ0nRT1CAsLC8pavpUmidHs3KleSsKpIghlVbZhijA2Nqa8w2ejt69tFJmZmcrxGcl8aiWSVhEkGr5VFcHlcilbu0RYBCWfZGpqqiNHkiQlbasODaCu5JOTk+KCn9H4fD7JPCvgxTomd13S0tIcBUQkK4bHjx+LC12qIEkSnZqacvR9V0MSuu/v7xeX6okmLS1NNQUu23Xx4sUG4Lj2056xFfjCjXVg9jP+t9nm5slp6c/43yXjmSI8A54pwjNsMjZfavAz4oIbSPxZOM9INJPPFOEZ8EwRnmEz6QZi78J7xmbjsRdFi5CZmcnx4/oOyDt37tDfv/6xhR6Ph7NnlTPn4tIHgH379vHCCy/EvA8DAwPKJXNOnjzpqETQF198wcTEhMqlk15AKd45MzPjKHF1cHBQSQihUIidO3fGJTFFUsPR7/c7+r6rIakcl5+f7yjQJyjLM+oGlPZjz87OOjrZVPKFnMbikxnV4FtKSoojJQgGg5KaCz1uQLngn5M8Oklo2WksPplR/W5OQ/FCWXVsmCJIkk22qkWYnZ1VDoU7Tc5JWkXw+XzKpm6rWgSJgm+4IhiGMQwoVWi4f/++VqciqH65rWoRvv/+e+VrnQ4NAlkNG4YxHIk1KFmFhw8fOkqfUlWE2dnZpDoAPFZIdjA5sQjz8/OS99cBTza4tKrcsbCwICqVuxzJl5Oe85jszMzMKAvH6b6OBw8eSM6EaIUnivAv1btUzzFcCcm5iU43giYb33333Ybt+xTK6F/wRBFqASUVclrRQ9VT9vDhQ+06xcmIRLE1DwFdRCCjBSzZW4pgGMYjQKky9vDwsCPHkurm1nA47Mj6JBNzc3PKx/15vV5+8IMfaD8rGAxKqrO12LJfUhPhM5U7w+Gw1gFVESS7nJ08J5no6+tTnmTn5eU5Kiza29sr2Um9KPNoRVCeJzipEpqXl6e8ZXtgYMCR9UkWJGXznA4LQtksyjxaIvXAtMrdw8PD2uVdUlJSlGssSAtzJiNjY2PKKy2Xy+VIEcbGxiTDwjSWzIEoRTAMYwr4q2orTqzC888/r3ytpHB3MiKxBs8995y0pvIShDL5qy1z4Om6SRdVW+nq6tIuDllYWKg8PIyPjzv2aCaKubk5kSI4qTcdCoWkfzRLZL1cGv8ElKbqwWCQzs5OyYMX8fl8otK0Tk45SSTt7e3KS2DpO1lOZ2enZD41iCXrRZYogmEYIeAj1dba29vFp5pGkBah3GxWIRgMcufOHeXrA4GAduHxhYUF2tvbJbd8ZMt6kZWebKq2NjU1pV1IWjoeNjc3az0nUbS1tYmO83NSari7u1t6HNBTMn5KEQzDuAVcV22xra1NqwKYtDTt/fv3N43b+fHjx6IDPnfv3q1d2zocDkuHzuu2jJewmi36nWqrk5OT2nOF0tJSkfNks1iFGzduiCbSkvMil9PZ2SkqQsIqsl1NEf4GKJ841dLSouX48fv9ouNtHz16lPTexvHxcZHvQ3r+UzTBYFB6nvYtLNk+xYqKYBhGGHhftfXZ2VkaGxslHVrk4MGDpKSkKF/f2trqqBhlvGlpaRH1T3Ii3HIaGxulh4K9b8v2Kdaapv4FQRpbT0+PVmQyLS1NdB7RxMRE0jqZRkZGRCnz+/fv1z6GYGhoSOpA6sCS6YqsqgiGYSwAv5c86auvvtJyMklPd71586ajk07iRVNTk/K10lNjowmFQnz11VfS235vy3RF1lu4foRgrjA2NqY1RHi9Xl588UXl66emprQP2I4XXV1dorB5UVGRdrnCxsZGaaznFuv4h9ZUBMMw5oFfA8qDXkdHB319faqXLyI90fTmzZtJk+08MTHBf//7X+XrPR6P9kqhr69PtDTFkt2vbVmuyrquLMMwriFwMgE0NDSIU9/dbrfo5YRCIa5evZrwISIcDlNfXy9K6i0rK9MKLo2Pj9PQ0CC9zbRluCaqPs3fAMp/fvPz8/z73/8WZzwXFhaK0rhHR0dF43I8uH37tsj9nZKSwsGDyuevL6L5Th9hyW5dlBTBMIwHwHuSHoyOjlJXVydaSulMoL7++uuEeRwfPXokXcdTXl5OWlqa6J5wOExdXZ3Ofo/3bNmtiyTK8SFwVdKLgYEBsSnbt2+f+HCQhoaGDc9kWlhY4Nq1a6KgW0ZGBgcOHBA/q6GhQedUl6tYMlNCWRHspccvANHOk7t374pdw0eOHBGdQD89Pa0zdjqitbVVNFl1uVxUV1eLDz5pbm7WydJ6CPxireXickRxT8MwvsU6Slbk2mtraxOFSXNzc8Wz6oGBAe2Yh5T79+9Lw74cOHBAfPBJe3u7Ti5GGPilLStlxAFwwzAuA3+U3tfU1CSyDBUVFeK0bo31tZipqSnx3GfHjh1ixW5ubtadCP/RlpEI3TqL7wJfSm9qa2ujvr5e6SVGTKlk69f8/Dy1tbVx2xgTCoWora0Vxf7dbjfV1dXKUdbIclQzK+tLLNmI0VIEwzDmgJ8DagWJorh79y61tbVKy6Bt27bx8ssvi9ofHx/n888/j4t/ob6+XpIlDFghZtU9nxFF1szc7gd+bstGjHblVcMw+oFzwIj03oGBAS5fvqzkdCooKKCoqEjU/oMHD7h69WpMo5Q3btwQe0x3796tHFAbHx/n8uXLumc+jgDnbJlo4agEr2EYt4GforgfIprR0VEuXbqk9HKPHj1KZmamqP179+5ph8aX09fXx40bN0T3eL1eqqurlVY/fX19XLp0SbcuxDTwU1sW2jiuxWwYRgPWMCEunDA/P09dXd26UcuUlBTllxrNnTt3HAenhoeHqa+vX//CZRw5cmTd2EkkilhXV6dbd2IeazhwvHaOSVFuwzAuAW/r3t/R0cGlS5fWzGfYtWsXP/rRj8RtNzU1iXIEopmamqK2tlY839i/f/+6yahDQ0NcunRJGkBaztv2u3eMK5bjqGmav8LyZmkfFxsIBKiqqloxPyEcDvP555+LXcoej4dXXnmFe/fuKb/44uJihoeHxRHOnTt3cu7cuVUdR8FgkMbGRkc7xbAswduGYfzZSSPRxFQRAEzTvAB8AmifSpWamkplZSWlpaVPDQfz8/NcuXKFkRHZHNXj8bBnzx7lyVhaWpp4GZqens7rr7++YmQxHA7T2dlJS0uLNL1sOdNYw0FMLEGEmCsCgGmaJ4BPAfWjT1cgIyODiooKiouLl2z+mJ6e5vLly3E5CU4Xj8fDuXPnnko9W1hYoLu7m7a2Nmm28UqMYE0MY+5Pj4siAJimeQC4Aujv47Lx+/2Ul5cvSX8fHR3lypUrTv+6YkZNTQ0FBQWL/w6FQnR2dtLe3i7dfLIa/VhLxLikZsVNEQBM09yHNUzIvEKr4PP5KCkpIRAIkJWVxdDQEJ999pn2trtYcejQocVUu7GxMXp6eujq6oplRPRLrOFA20+wHnFVBADTNFOwNlW8A8jWf2uQk5NDIBDA5XJx/bryxqyYU1BQwNGjR+nt7aWnp0fseVyHMFZc511dj6EqcVeECKZpnsfaiq1eWk0Bl8tFenp6rMyviPT0dPx+PyMjI/HYa/EQK4ooDiDpsGGKAGCaZj7wMXBqwx66ObmKlU+wYalXG3rKm/3FTmNlRidHCnJy8Qjr3ZzeSCWADbYI0ZimuQv4A2AQw7nDJiWMlSn+G9Ucw1iTMEWIYJpmNfABIE/t3Rrcwtp3sG7KeTxJ+AGg9gs4DPwfgr2WW4AOrO98ONFKAElgEaIxTdMN/AwrdX6rWohbWDvN/yJJLo03SaUIEUzTdAFvYKVdHU1wd2LFdSx/yt9W25qeSJJSEaIxTfMg1oTyLWBPgrsjZRBr86m5UrmaZCLpFSGCaZoe4MdY6fRv4iC6GWemsQqXXgT+ubx6WbKyaRQhGtM0/cBJ4CzwKlBJ4ia+C1iV7T/Dqm1cH13RdLOwKRVhOaZp7gDOYCnGIaAM0CtFsj7DWDP+VizB10ZK3W9mtoQirIRpmjlYChH5BIBsIAPYZv+MfMA6GjnyeWz/HMU6ILUj8rEPQ9ty/D8hHxNBQyqmHgAAAABJRU5ErkJggg=="></img> |
| 50 | <h3>%(title)s</h3> |
| 51 | <p>%(message)s</p> |
| 52 | <input id="button" type="button" value="%(btn_value)s" onclick="location.href='%(url)s';" /> |
| 53 | </div> |
| 54 | </body> |
| 55 | </html> |