From d4e3079314370e9386ba34c49d14e6def410debf Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Tue, 19 Feb 2013 21:31:32 -0300 Subject: a minor typographical change --- askbot/templates/widgets/user_long_score_and_badge_summary.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/askbot/templates/widgets/user_long_score_and_badge_summary.html b/askbot/templates/widgets/user_long_score_and_badge_summary.html index efc59c55..81dacbc9 100644 --- a/askbot/templates/widgets/user_long_score_and_badge_summary.html +++ b/askbot/templates/widgets/user_long_score_and_badge_summary.html @@ -1,7 +1,9 @@ {%- if karma_mode != 'hidden' -%} {% trans %}karma:{% endtrans %} {{user.reputation}} +> + {% trans %}karma:{% endtrans %} {{user.reputation}} +{% if badges_mode == 'public' %},{% endif %} {%- endif -%} {% if badges_mode == 'public' %} {%- if user.gold or user.silver or user.bronze %} -- cgit v1.2.3-1-g7c22 From e98c5d82d4c1383a055f043bf090f125e2ccc275 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Tue, 19 Feb 2013 22:45:36 -0300 Subject: fixed a typo in settings --- askbot/conf/flatpages.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/askbot/conf/flatpages.py b/askbot/conf/flatpages.py index 7af6ae8a..60106f6f 100644 --- a/askbot/conf/flatpages.py +++ b/askbot/conf/flatpages.py @@ -42,7 +42,7 @@ settings.register( LongStringValue( FLATPAGES, 'QUESTION_INSTRUCTIONS', - description=_('Instrutions on how to ask questions'), + description=_('Instructions on how to ask questions'), help_text=\ _( 'HTML is allowed. Save, then ' -- cgit v1.2.3-1-g7c22 From cd77b90e074fdf11ca09a9030a99837605fd56aa Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Wed, 20 Feb 2013 13:52:58 -0300 Subject: prevented double click on the threads load in personal messages --- askbot/media/js/group_messaging.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/askbot/media/js/group_messaging.js b/askbot/media/js/group_messaging.js index c4d5ee74..30519f1f 100644 --- a/askbot/media/js/group_messaging.js +++ b/askbot/media/js/group_messaging.js @@ -610,6 +610,7 @@ SendersList.prototype.decorate = function(element) { */ var MessageCenter = function() { Widget.call(this); + this._loadingStatus = false;//true when loading in is process }; inherits(MessageCenter, Widget); @@ -649,7 +650,14 @@ MessageCenter.prototype.setThreadsList = function(list) { this._secondCol.prepend(list.getElement()); }; +MessageCenter.prototype.setLoadingStatus = function(loadingStatus) { + this._loadingStatus = loadingStatus; +}; + MessageCenter.prototype.hitThreadsList = function(url, senderId, requestMethod) { + if (this._loadingStatus === true) { + return; + }; var threadsList = this._threadsList; var me = this; $.ajax({ @@ -666,9 +674,14 @@ MessageCenter.prototype.hitThreadsList = function(url, senderId, requestMethod) threads.decorate($(data['html'])); me.setThreadsList(threads); me.setState('show-list'); + me.setLoadingStatus(false); + }, + error: function() { + me.setLoadingStatus(false); } } }); + this.setLoadingStatus(true); }; MessageCenter.prototype.deleteOrRestoreThread = function(threadId, senderId) { -- cgit v1.2.3-1-g7c22 From 4a1e912d828915158fb80baeb9a7a7149e4297b3 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Thu, 21 Feb 2013 12:29:21 -0300 Subject: corrected the karma and badges separators in th e header --- askbot/templates/widgets/user_long_score_and_badge_summary.html | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/askbot/templates/widgets/user_long_score_and_badge_summary.html b/askbot/templates/widgets/user_long_score_and_badge_summary.html index 81dacbc9..65966376 100644 --- a/askbot/templates/widgets/user_long_score_and_badge_summary.html +++ b/askbot/templates/widgets/user_long_score_and_badge_summary.html @@ -1,12 +1,10 @@ +{% set have_badges = user.gold or user.silver or user.bronze %} {%- if karma_mode != 'hidden' -%} - {% trans %}karma:{% endtrans %} {{user.reputation}} -{% if badges_mode == 'public' %},{% endif %} +>{% trans %}karma:{% endtrans %} {{user.reputation}}{% if badges_mode == 'public' and have_badges %},{% endif %} {%- endif -%} -{% if badges_mode == 'public' %} - {%- if user.gold or user.silver or user.bronze %} +{% if badges_mode == 'public' and have_badges %} {% trans %}badges:{% endtrans %} @@ -23,5 +21,4 @@ {{user.bronze}} {%- endif -%} - {%- endif -%} {%- endif -%} -- cgit v1.2.3-1-g7c22 From 0216dce8071572545df995050c41fce3239b24a7 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Thu, 21 Feb 2013 13:30:57 -0300 Subject: made search on enter hit in the search bar more reliable --- askbot/media/js/live_search.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/askbot/media/js/live_search.js b/askbot/media/js/live_search.js index cb8a8713..99ffade4 100644 --- a/askbot/media/js/live_search.js +++ b/askbot/media/js/live_search.js @@ -753,6 +753,7 @@ FullTextSearch.prototype.makeKeyDownHandler = function() { var toolTip = this._toolTip; var xButton = this._xButton; var dropMenu = this._dropMenu; + var formSubmitHandler = this.makeFormSubmitHandler(); return function(e) {//don't like the keyup delay to var keyCode = getKeyCode(e); @@ -761,6 +762,9 @@ FullTextSearch.prototype.makeKeyDownHandler = function() { me.reset(); return false; } + } else if (keyCode === 13) { + formSubmitHandler(e); + return false; } var query = me.getSearchQuery(); -- cgit v1.2.3-1-g7c22 From 0b05b5bd15591f0795992787252d9dc5d9a9aab5 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Thu, 21 Feb 2013 17:19:06 -0300 Subject: fixed user search bug in postgresql --- askbot/models/__init__.py | 2 +- askbot/search/postgresql/__init__.py | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py index 32e30add..c4f4454c 100644 --- a/askbot/models/__init__.py +++ b/askbot/models/__init__.py @@ -113,7 +113,7 @@ def get_users_by_text_query(search_query, users_query_set = None): users_query_set = User.objects.all() if 'postgresql_psycopg2' in askbot.get_database_engine_name(): from askbot.search import postgresql - return postgresql.run_thread_search(users_query_set, search_query) + return postgresql.run_user_search(users_query_set, search_query) else: return users_query_set.filter( models.Q(username__icontains=search_query) | diff --git a/askbot/search/postgresql/__init__.py b/askbot/search/postgresql/__init__.py index 3edef65d..e42190a8 100644 --- a/askbot/search/postgresql/__init__.py +++ b/askbot/search/postgresql/__init__.py @@ -65,7 +65,9 @@ def run_full_text_search(query_set, query_text, text_search_vector_name): language_code = get_language() - if getattr(django_settings, 'ASKBOT_MULTILINGUAL', True): + #the table name is a hack, because user does not have the language code + is_multilingual = getattr(django_settings, 'ASKBOT_MULTILINGUAL', True) + if is_multilingual and table_name == 'askbot_thread': where_clause += " AND " + table_name + \ '.' + "language_code='" + language_code + "'" @@ -85,6 +87,8 @@ def run_thread_search(query_set, query): """runs search for full thread content""" return run_full_text_search(query_set, query, 'text_search_vector'); +run_user_search = run_thread_search #an alias + def run_title_search(query_set, query): """runs search for title and tags""" return run_full_text_search(query_set, query, 'title_search_vector') -- cgit v1.2.3-1-g7c22 From 9e799317df0390855b56622bff5d77a43295ee50 Mon Sep 17 00:00:00 2001 From: Alex Rudnick Date: Thu, 21 Feb 2013 16:22:32 -0500 Subject: 'sin respuesta' is too long and breaks the layout for Spanish. Switch to 'nuevos' instead. --- askbot/locale/es/LC_MESSAGES/django.mo | Bin 137973 -> 137966 bytes askbot/locale/es/LC_MESSAGES/django.po | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/askbot/locale/es/LC_MESSAGES/django.mo b/askbot/locale/es/LC_MESSAGES/django.mo index 8edbd712..86cdcf86 100644 Binary files a/askbot/locale/es/LC_MESSAGES/django.mo and b/askbot/locale/es/LC_MESSAGES/django.mo differ diff --git a/askbot/locale/es/LC_MESSAGES/django.po b/askbot/locale/es/LC_MESSAGES/django.po index 2b3e9eb5..f5218dea 100644 --- a/askbot/locale/es/LC_MESSAGES/django.po +++ b/askbot/locale/es/LC_MESSAGES/django.po @@ -6637,7 +6637,7 @@ msgstr "ver preguntas sin respuesta" #: skins/default/templates/widgets/scope_nav.html:8 msgid "UNANSWERED" -msgstr "SIN RESPUESTA" +msgstr "NUEVOS" #: skins/default/templates/widgets/scope_nav.html:11 msgid "see your followed questions" -- cgit v1.2.3-1-g7c22 From d50a7904db62ba161eea6249e2277fb4bb99c4d2 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Thu, 21 Feb 2013 19:00:48 -0300 Subject: added space for display ad after the first answer --- askbot/conf/sidebar_question.py | 15 +++++++++++++++ askbot/templates/question.html | 2 +- askbot/templates/question/content.html | 13 ++++--------- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/askbot/conf/sidebar_question.py b/askbot/conf/sidebar_question.py index feebf896..ffe2f783 100644 --- a/askbot/conf/sidebar_question.py +++ b/askbot/conf/sidebar_question.py @@ -26,6 +26,21 @@ settings.register( ) ) +settings.register( + values.LongStringValue( + SIDEBAR_QUESTION, + 'QUESTION_PAGE_ANSWER_BANNER', + description = _('Answers banner'), + default = '', + help_text = _( + 'This banner will show above the second answer. ' + 'When using this option, please ' + 'use the HTML validation service to make sure that ' + 'your input is valid and works well in all browsers.' + ) + ) +) + settings.register( values.LongStringValue( SIDEBAR_QUESTION, diff --git a/askbot/templates/question.html b/askbot/templates/question.html index 5a317707..e2e6f394 100644 --- a/askbot/templates/question.html +++ b/askbot/templates/question.html @@ -209,7 +209,7 @@ {% endblock %} {% block content %}
- {{ settings.QUESTION_PAGE_TOP_BANNER }} + {{ settings.QUESTION_PAGE_TOP_BANNER|safe }}
{% if is_cacheable %} {% cache long_time "thread-content-html" thread.id %} diff --git a/askbot/templates/question/content.html b/askbot/templates/question/content.html index 66b3014b..7efc1d54 100644 --- a/askbot/templates/question/content.html +++ b/askbot/templates/question/content.html @@ -1,34 +1,29 @@ {% import "macros.html" as macros %} -{# ==== BEGIN: question/question_card.html ==== #} {% include "question/question_card.html" %} -{# ==== END: question/question_card.html ==== #} {% if answers %}
- {# ==== START: question/answer_tab_bar.html ==== #} {% include "question/answer_tab_bar.html" %} - {# ==== END: question/answer_tab_bar.html ==== #}
{{ macros.paginator(paginator_context, anchor='#sort-top') }}
{% for answer in answers %} - {# ==== START: question/answer_card.html ==== #} + {% if answers|length > 1 and loop.index == 2 %} + {{ settings.QUESTION_PAGE_ANSWER_BANNER|safe }} + {% endif %} {% include "question/answer_card.html" %} - {# ==== END: question/answer_card.html ==== #} {% endfor %} + {{ macros.paginator(paginator_context, anchor='#sort-top') }}
{% else %} - {# ==== START: question/sharing_prompt_phrase.html ==== #} {% include "question/sharing_prompt_phrase.html" %} - {# ==== END: question/sharing_prompt_phrase.html ==== #} {% endif %} -{# ==== START: question/new_answer_form.html ==== #} {# buttons below cannot be cached yet #} {% if user_already_gave_answer %} Date: Thu, 21 Feb 2013 22:19:16 -0300 Subject: changed style of the notification --- askbot/media/style/style.css | 1 + askbot/media/style/style.less | 1 + 2 files changed, 2 insertions(+) diff --git a/askbot/media/style/style.css b/askbot/media/style/style.css index f7feb9d5..62c71be3 100644 --- a/askbot/media/style/style.css +++ b/askbot/media/style/style.css @@ -198,6 +198,7 @@ body.user-messages { top: 0px; left: 0px; width: 100%; + height: 31px; z-index: 100000; padding: 0; text-align: center; diff --git a/askbot/media/style/style.less b/askbot/media/style/style.less index a55df7fc..360551f1 100644 --- a/askbot/media/style/style.less +++ b/askbot/media/style/style.less @@ -191,6 +191,7 @@ body.user-messages { top: 0px; left: 0px; width: 100%; + height: 31px; z-index: 100000; padding: 0; text-align: center; -- cgit v1.2.3-1-g7c22 From 9d583557e4c4037a31e36b2a6186ecf806047a1c Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Thu, 21 Feb 2013 22:38:49 -0300 Subject: auto-enabled password login fields with LDAP on --- askbot/conf/ldap.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/askbot/conf/ldap.py b/askbot/conf/ldap.py index 7d384516..34b6ec87 100644 --- a/askbot/conf/ldap.py +++ b/askbot/conf/ldap.py @@ -10,12 +10,20 @@ LDAP_SETTINGS = livesettings.ConfigurationGroup( super_group = EXTERNAL_SERVICES ) +def enable_ldap_callback(current_value, new_value): + """enables local login form when ldap is on""" + if new_value == True: + settings.update('SIGNIN_LOCAL_ENABLED', True) + + return new_value + settings.register( livesettings.BooleanValue( LDAP_SETTINGS, 'USE_LDAP_FOR_PASSWORD_LOGIN', description=_('Use LDAP authentication for the password login'), - defaut=False + defaut=False, + update_callback=enable_ldap_callback ) ) -- cgit v1.2.3-1-g7c22 From cea58736b31c0e2e8448319bb8c5c1519eac2992 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Fri, 22 Feb 2013 19:14:01 -0300 Subject: added 100% width on the email alert table --- askbot/templates/email/base_mail.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/askbot/templates/email/base_mail.html b/askbot/templates/email/base_mail.html index 03e4568e..2487e804 100644 --- a/askbot/templates/email/base_mail.html +++ b/askbot/templates/email/base_mail.html @@ -136,7 +136,7 @@
- +
-- cgit v1.2.3-1-g7c22 From 601c510749d91576aba36dec67ddcbe712892710 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Fri, 22 Feb 2013 19:22:34 -0300 Subject: fixed a bug in the revisions page where wrong author was shown on the revisions --- askbot/templates/revisions.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/askbot/templates/revisions.html b/askbot/templates/revisions.html index a0531b80..1765b728 100644 --- a/askbot/templates/revisions.html +++ b/askbot/templates/revisions.html @@ -50,7 +50,7 @@ {% set contributor_type = "last_updater" %} {% endif %} {{ macros.post_contributor_info( - revision.post, + revision, contributor_type, False, 0 -- cgit v1.2.3-1-g7c22 From 85281c124b3f06567f550c54650ce33857f6197a Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Sun, 24 Feb 2013 21:14:18 -0300 Subject: updated js google code prettify and celery version --- askbot/__init__.py | 4 ++-- askbot/media/js/post.js | 35 +++++++++++++++++++++++++++++------ askbot/media/style/style.less | 34 +++------------------------------- 3 files changed, 34 insertions(+), 39 deletions(-) diff --git a/askbot/__init__.py b/askbot/__init__.py index d90b7daa..0d9156aa 100644 --- a/askbot/__init__.py +++ b/askbot/__init__.py @@ -26,8 +26,8 @@ REQUIREMENTS = { 'sanction': 'sanction', 'unidecode': 'unidecode', 'django_countries': 'django-countries==1.0.5', - 'djcelery': 'django-celery==2.2.7', - 'djkombu': 'django-kombu==0.9.2', + 'djcelery': 'django-celery==3.0.11', + 'djkombu': 'django-kombu==0.9.4', 'followit': 'django-followit', 'recaptcha_works': 'django-recaptcha-works', 'openid': 'python-openid', diff --git a/askbot/media/js/post.js b/askbot/media/js/post.js index e06d95cf..94e230a2 100644 --- a/askbot/media/js/post.js +++ b/askbot/media/js/post.js @@ -4095,9 +4095,32 @@ $(document).ready(function() { } }); - -/* -Prettify -http://www.apache.org/licenses/LICENSE-2.0 -*/ -var PR_SHOULD_USE_CONTINUATION = true; var PR_TAB_WIDTH = 8; var PR_normalizedHtml; var PR; var prettyPrintOne; var prettyPrint; function _pr_isIE6() { var isIE6 = navigator && navigator.userAgent && /\bMSIE 6\./.test(navigator.userAgent); _pr_isIE6 = function() { return isIE6; }; return isIE6; } (function() { function wordSet(words) { words = words.split(/ /g); var set = {}; for (var i = words.length; --i >= 0; ) { var w = words[i]; if (w) { set[w] = null; } } return set; } var FLOW_CONTROL_KEYWORDS = "break continue do else for if return while "; var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " + "double enum extern float goto int long register short signed sizeof " + "static struct switch typedef union unsigned void volatile "; var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " + "new operator private protected public this throw true try "; var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " + "concept concept_map const_cast constexpr decltype " + "dynamic_cast explicit export friend inline late_check " + "mutable namespace nullptr reinterpret_cast static_assert static_cast " + "template typeid typename typeof using virtual wchar_t where "; var JAVA_KEYWORDS = COMMON_KEYWORDS + "boolean byte extends final finally implements import instanceof null " + "native package strictfp super synchronized throws transient "; var CSHARP_KEYWORDS = JAVA_KEYWORDS + "as base by checked decimal delegate descending event " + "fixed foreach from group implicit in interface internal into is lock " + "object out override orderby params readonly ref sbyte sealed " + "stackalloc string select uint ulong unchecked unsafe ushort var "; var JSCRIPT_KEYWORDS = COMMON_KEYWORDS + "debugger eval export function get null set undefined var with " + "Infinity NaN "; var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " + "goto if import last local my next no our print package redo require " + "sub undef unless until use wantarray while BEGIN END "; var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " + "elif except exec finally from global import in is lambda " + "nonlocal not or pass print raise try with yield " + "False True None "; var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" + " defined elsif end ensure false in module next nil not or redo rescue " + "retry self super then true undef unless until when yield BEGIN END "; var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " + "function in local set then until "; var ALL_KEYWORDS = (CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS + PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS); var PR_STRING = 'str'; var PR_KEYWORD = 'kwd'; var PR_COMMENT = 'com'; var PR_TYPE = 'typ'; var PR_LITERAL = 'lit'; var PR_PUNCTUATION = 'pun'; var PR_PLAIN = 'pln'; var PR_TAG = 'tag'; var PR_DECLARATION = 'dec'; var PR_SOURCE = 'src'; var PR_ATTRIB_NAME = 'atn'; var PR_ATTRIB_VALUE = 'atv'; var PR_NOCODE = 'nocode'; function isWordChar(ch) { return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'); } function spliceArrayInto(inserted, container, containerPosition, countReplaced) { inserted.unshift(containerPosition, countReplaced || 0); try { container.splice.apply(container, inserted); } finally { inserted.splice(0, 2); } } var REGEXP_PRECEDER_PATTERN = function() { var preceders = ["!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=", "&=", "(", "*", "*=", "+=", ",", "-=", "->", "/", "/=", ":", "::", ";", "<", "<<", "<<=", "<=", "=", "==", "===", ">", ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[", "^", "^=", "^^", "^^=", "{", "|", "|=", "||", "||=", "~", "break", "case", "continue", "delete", "do", "else", "finally", "instanceof", "return", "throw", "try", "typeof"]; var pattern = '(?:' + '(?:(?:^|[^0-9.])\\.{1,3})|' + '(?:(?:^|[^\\+])\\+)|' + '(?:(?:^|[^\\-])-)'; for (var i = 0; i < preceders.length; ++i) { var preceder = preceders[i]; if (isWordChar(preceder.charAt(0))) { pattern += '|\\b' + preceder; } else { pattern += '|' + preceder.replace(/([^=<>:&])/g, '\\$1'); } } pattern += '|^)\\s*$'; return new RegExp(pattern); } (); var pr_amp = /&/g; var pr_lt = //g; var pr_quot = /\"/g; function attribToHtml(str) { return str.replace(pr_amp, '&').replace(pr_lt, '<').replace(pr_gt, '>').replace(pr_quot, '"'); } function textToHtml(str) { return str.replace(pr_amp, '&').replace(pr_lt, '<').replace(pr_gt, '>'); } var pr_ltEnt = /</g; var pr_gtEnt = />/g; var pr_aposEnt = /'/g; var pr_quotEnt = /"/g; var pr_ampEnt = /&/g; var pr_nbspEnt = / /g; function htmlToText(html) { var pos = html.indexOf('&'); if (pos < 0) { return html; } for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0; ) { var end = html.indexOf(';', pos); if (end >= 0) { var num = html.substring(pos + 3, end); var radix = 10; if (num && num.charAt(0) === 'x') { num = num.substring(1); radix = 16; } var codePoint = parseInt(num, radix); if (!isNaN(codePoint)) { html = (html.substring(0, pos) + String.fromCharCode(codePoint) + html.substring(end + 1)); } } } return html.replace(pr_ltEnt, '<').replace(pr_gtEnt, '>').replace(pr_aposEnt, "'").replace(pr_quotEnt, '"').replace(pr_ampEnt, '&').replace(pr_nbspEnt, ' '); } function isRawContent(node) { return 'XMP' === node.tagName; } function normalizedHtml(node, out) { switch (node.nodeType) { case 1: var name = node.tagName.toLowerCase(); out.push('<', name); for (var i = 0; i < node.attributes.length; ++i) { var attr = node.attributes[i]; if (!attr.specified) { continue; } out.push(' '); normalizedHtml(attr, out); } out.push('>'); for (var child = node.firstChild; child; child = child.nextSibling) { normalizedHtml(child, out); } if (node.firstChild || !/^(?:br|link|img)$/.test(name)) { out.push('<\/', name, '>'); } break; case 2: out.push(node.name.toLowerCase(), '="', attribToHtml(node.value), '"'); break; case 3: case 4: out.push(textToHtml(node.nodeValue)); break; } } var PR_innerHtmlWorks = null; function getInnerHtml(node) { if (null === PR_innerHtmlWorks) { var testNode = document.createElement('PRE'); testNode.appendChild(document.createTextNode('\n')); PR_innerHtmlWorks = !/= 0; nSpaces -= SPACES.length) { out.push(SPACES.substring(0, nSpaces)); } pos = i + 1; break; case '\n': charInLine = 0; break; default: ++charInLine; } } if (!out) { return plainText; } out.push(plainText.substring(pos)); return out.join(''); }; } var pr_chunkPattern = /(?:[^<]+|||<\/?[a-zA-Z][^>]*>|<)/g; var pr_commentPrefix = /^|$)/, null], [PR_SOURCE, /^<\?[\s\S]*?(?:\?>|$)/, null], [PR_SOURCE, /^<%[\s\S]*?(?:%>|$)/, null], [PR_SOURCE, /^<(script|style|xmp)\b[^>]*>[\s\S]*?<\/\1\b[^>]*>/i, null], [PR_TAG, /^<\/?\w[^<>]*>/, null]]); var PR_SOURCE_CHUNK_PARTS = /^(<[^>]*>)([\s\S]*)(<\/[^>]*>)$/; function tokenizeMarkup(source) { var decorations = PR_MARKUP_LEXER(source); for (var i = 0; i < decorations.length; i += 2) { if (decorations[i + 1] === PR_SOURCE) { var start, end; start = decorations[i]; end = i + 2 < decorations.length ? decorations[i + 2] : source.length; var sourceChunk = source.substring(start, end); var match = sourceChunk.match(PR_SOURCE_CHUNK_PARTS); if (match) { decorations.splice(i, 2, start, PR_TAG, start + match[1].length, PR_SOURCE, start + match[1].length + (match[2] || '').length, PR_TAG); } } } return decorations; } var PR_TAG_LEXER = createSimpleLexer([[PR_ATTRIB_VALUE, /^\'[^\']*(?:\'|$)/, null, "'"], [PR_ATTRIB_VALUE, /^\"[^\"]*(?:\"|$)/, null, '"'], [PR_PUNCTUATION, /^[<>\/=]+/, null, '<>/=']], [[PR_TAG, /^[\w:\-]+/, /^= 2 && /^[\"\']/.test(attribValue) && attribValue.charAt(0) === attribValue.charAt(attribLen - 1)); var attribSource; var attribSourceStart; var attribSourceEnd; if (quoted) { attribSourceStart = start + 1; attribSourceEnd = end - 1; attribSource = attribValue; } else { attribSourceStart = start + 1; attribSourceEnd = end - 1; attribSource = attribValue.substring(1, attribValue.length - 1); } var attribSourceDecorations = decorateSource(attribSource); for (var j = 0, m = attribSourceDecorations.length; j < m; j += 2) { attribSourceDecorations[j] += attribSourceStart; } if (quoted) { attribSourceDecorations.push(attribSourceEnd, PR_ATTRIB_VALUE); spliceArrayInto(attribSourceDecorations, decorations, i + 2, 0); } else { spliceArrayInto(attribSourceDecorations, decorations, i, 2); } } nextValueIsSource = false; } } return decorations; } function decorateMarkup(sourceCode) { var decorations = tokenizeMarkup(sourceCode); decorations = splitTagAttributes(sourceCode, decorations); decorations = splitSourceNodes(sourceCode, decorations); decorations = splitSourceAttributes(sourceCode, decorations); return decorations; } function recombineTagsAndDecorations(sourceText, extractedTags, decorations) { var html = []; var outputIdx = 0; var openDecoration = null; var currentDecoration = null; var tagPos = 0; var decPos = 0; var tabExpander = makeTabExpander(PR_TAB_WIDTH); var adjacentSpaceRe = /([\r\n ]) /g; var startOrSpaceRe = /(^| ) /gm; var newlineRe = /\r\n?|\n/g; var trailingSpaceRe = /[ \r\n]$/; var lastWasSpace = true; function emitTextUpTo(sourceIdx) { if (sourceIdx > outputIdx) { if (openDecoration && openDecoration !== currentDecoration) { html.push(''); openDecoration = null; } if (!openDecoration && currentDecoration) { openDecoration = currentDecoration; html.push(''); } var htmlChunk = textToHtml(tabExpander(sourceText.substring(outputIdx, sourceIdx))).replace(lastWasSpace ? startOrSpaceRe : adjacentSpaceRe, '$1 '); lastWasSpace = trailingSpaceRe.test(htmlChunk); html.push(htmlChunk.replace(newlineRe, '
')); outputIdx = sourceIdx; } } while (true) { var outputTag; if (tagPos < extractedTags.length) { if (decPos < decorations.length) { outputTag = extractedTags[tagPos] <= decorations[decPos]; } else { outputTag = true; } } else { outputTag = false; } if (outputTag) { emitTextUpTo(extractedTags[tagPos]); if (openDecoration) { html.push('
'); openDecoration = null; } html.push(extractedTags[tagPos + 1]); tagPos += 2; } else if (decPos < decorations.length) { emitTextUpTo(decorations[decPos]); currentDecoration = decorations[decPos + 1]; decPos += 2; } else { break; } } emitTextUpTo(sourceText.length); if (openDecoration) { html.push(''); } return html.join(''); } var langHandlerRegistry = {}; function registerLangHandler(handler, fileExtensions) { for (var i = fileExtensions.length; --i >= 0; ) { var ext = fileExtensions[i]; if (!langHandlerRegistry.hasOwnProperty(ext)) { langHandlerRegistry[ext] = handler; } else if ('console' in window) { console.log('cannot override language handler %s', ext); } } } registerLangHandler(decorateSource, ['default-code']); registerLangHandler(decorateMarkup, ['default-markup', 'html', 'htm', 'xhtml', 'xml', 'xsl']); registerLangHandler(sourceDecorator({ keywords: CPP_KEYWORDS, hashComments: true, cStyleComments: true }), ['c', 'cc', 'cpp', 'cs', 'cxx', 'cyc']); registerLangHandler(sourceDecorator({ keywords: JAVA_KEYWORDS, cStyleComments: true }), ['java']); registerLangHandler(sourceDecorator({ keywords: SH_KEYWORDS, hashComments: true, multiLineStrings: true }), ['bsh', 'csh', 'sh']); registerLangHandler(sourceDecorator({ keywords: PYTHON_KEYWORDS, hashComments: true, multiLineStrings: true, tripleQuotedStrings: true }), ['cv', 'py']); registerLangHandler(sourceDecorator({ keywords: PERL_KEYWORDS, hashComments: true, multiLineStrings: true, regexLiterals: true }), ['perl', 'pl', 'pm']); registerLangHandler(sourceDecorator({ keywords: RUBY_KEYWORDS, hashComments: true, multiLineStrings: true, regexLiterals: true }), ['rb']); registerLangHandler(sourceDecorator({ keywords: JSCRIPT_KEYWORDS, cStyleComments: true, regexLiterals: true }), ['js']); function prettyPrintOne(sourceCodeHtml, opt_langExtension) { try { var sourceAndExtractedTags = extractTags(sourceCodeHtml); var source = sourceAndExtractedTags.source; var extractedTags = sourceAndExtractedTags.tags; if (!langHandlerRegistry.hasOwnProperty(opt_langExtension)) { opt_langExtension = /^\s*= 0) { var langExtension = cs.className.match(/\blang-(\w+)\b/); if (langExtension) { langExtension = langExtension[1]; } var nested = false; for (var p = cs.parentNode; p; p = p.parentNode) { if ((p.tagName === 'pre' || p.tagName === 'code' || p.tagName === 'xmp') && p.className && p.className.indexOf('prettyprint') >= 0) { nested = true; break; } } if (!nested) { var content = getInnerHtml(cs); content = content.replace(/(?:\r\n?|\n)$/, ''); var newContent = prettyPrintOne(content, langExtension); if (!isRawContent(cs)) { cs.innerHTML = newContent; } else { var pre = document.createElement('PRE'); for (var i = 0; i < cs.attributes.length; ++i) { var a = cs.attributes[i]; if (a.specified) { var aname = a.name.toLowerCase(); if (aname === 'class') { pre.className = a.value; } else { pre.setAttribute(a.name, a.value); } } } pre.innerHTML = newContent; cs.parentNode.replaceChild(pre, cs); cs = pre; } if (isIE6 && cs.tagName === 'PRE') { var lineBreaks = cs.getElementsByTagName('br'); for (var j = lineBreaks.length; --j >= 0; ) { var lineBreak = lineBreaks[j]; lineBreak.parentNode.replaceChild(document.createTextNode('\r\n'), lineBreak); } } } } } if (k < elements.length) { setTimeout(doWork, 250); } else if (opt_whenDone) { opt_whenDone(); } } doWork(); } window['PR_normalizedHtml'] = normalizedHtml; window['prettyPrintOne'] = prettyPrintOne; window['prettyPrint'] = prettyPrint; window['PR'] = { 'createSimpleLexer': createSimpleLexer, 'registerLangHandler': registerLangHandler, 'sourceDecorator': sourceDecorator, 'PR_ATTRIB_NAME': PR_ATTRIB_NAME, 'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE, 'PR_COMMENT': PR_COMMENT, 'PR_DECLARATION': PR_DECLARATION, 'PR_KEYWORD': PR_KEYWORD, 'PR_LITERAL': PR_LITERAL, 'PR_NOCODE': PR_NOCODE, 'PR_PLAIN': PR_PLAIN, 'PR_PUNCTUATION': PR_PUNCTUATION, 'PR_SOURCE': PR_SOURCE, 'PR_STRING': PR_STRING, 'PR_TAG': PR_TAG, 'PR_TYPE': PR_TYPE }; })(); +/* google prettify.js from google code */ +var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= +[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), +l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p