From 1a6f065419290b3f4234ce4a89bb2c46b13e8a12 Mon Sep 17 00:00:00 2001 From: Aditi Mittal Date: Fri, 21 Jun 2013 08:55:46 -0700 Subject: [PATCH 001/140] Initial commit --- README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..d6b023a9 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +mediagoblin_blog +================ From 0ff6db861aee2c767b0b5d4321172601debe0008 Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 26 Jun 2013 23:27:45 +0530 Subject: [PATCH 002/140] Created filr structure for blog as a plugin(option 1). --- mediagoblin/plugins/blog/LICENCE | 0 mediagoblin/plugins/blog/README.srt | 0 mediagoblin/plugins/blog/__init__.py | 0 mediagoblin/plugins/blog/forms.py | 17 +++++++++++++++++ mediagoblin/plugins/blog/setup.py | 10 ++++++++++ .../plugins/blog/templates/blogpost_edit.html | 19 +++++++++++++++++++ mediagoblin/plugins/blog/views.py | 16 ++++++++++++++++ 7 files changed, 62 insertions(+) create mode 100644 mediagoblin/plugins/blog/LICENCE create mode 100644 mediagoblin/plugins/blog/README.srt create mode 100644 mediagoblin/plugins/blog/__init__.py create mode 100644 mediagoblin/plugins/blog/forms.py create mode 100644 mediagoblin/plugins/blog/setup.py create mode 100644 mediagoblin/plugins/blog/templates/blogpost_edit.html create mode 100644 mediagoblin/plugins/blog/views.py diff --git a/mediagoblin/plugins/blog/LICENCE b/mediagoblin/plugins/blog/LICENCE new file mode 100644 index 00000000..e69de29b diff --git a/mediagoblin/plugins/blog/README.srt b/mediagoblin/plugins/blog/README.srt new file mode 100644 index 00000000..e69de29b diff --git a/mediagoblin/plugins/blog/__init__.py b/mediagoblin/plugins/blog/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/mediagoblin/plugins/blog/forms.py b/mediagoblin/plugins/blog/forms.py new file mode 100644 index 00000000..52af1cf1 --- /dev/null +++ b/mediagoblin/plugins/blog/forms.py @@ -0,0 +1,17 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import wtforms diff --git a/mediagoblin/plugins/blog/setup.py b/mediagoblin/plugins/blog/setup.py new file mode 100644 index 00000000..c4e0ee97 --- /dev/null +++ b/mediagoblin/plugins/blog/setup.py @@ -0,0 +1,10 @@ +from setuptools import setup, find_packages + +setup( + name = 'blog', + version = '1.0', + packages = find_packages(); + include_package_data = True, + install_requires = [], + license = 'AGPLv3', + ) diff --git a/mediagoblin/plugins/blog/templates/blogpost_edit.html b/mediagoblin/plugins/blog/templates/blogpost_edit.html new file mode 100644 index 00000000..fec7a9c2 --- /dev/null +++ b/mediagoblin/plugins/blog/templates/blogpost_edit.html @@ -0,0 +1,19 @@ +{# +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +-#} +{% extends "mediagoblin/base.html" %} + diff --git a/mediagoblin/plugins/blog/views.py b/mediagoblin/plugins/blog/views.py new file mode 100644 index 00000000..c4e8601d --- /dev/null +++ b/mediagoblin/plugins/blog/views.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . From 65630db19bc3922ff0e8f35920a3a4d785306833 Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 26 Jun 2013 23:43:26 +0530 Subject: [PATCH 003/140] Add basic files models, views, forms, routing, __init__ to for a new media_type blog. --- mediagoblin/media_types/blog/__init__.py | 0 mediagoblin/media_types/blog/forms.py | 0 mediagoblin/media_types/blog/models.py | 0 mediagoblin/media_types/blog/routing.py | 0 mediagoblin/media_types/blog/views.py | 0 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 mediagoblin/media_types/blog/__init__.py create mode 100644 mediagoblin/media_types/blog/forms.py create mode 100644 mediagoblin/media_types/blog/models.py create mode 100644 mediagoblin/media_types/blog/routing.py create mode 100644 mediagoblin/media_types/blog/views.py diff --git a/mediagoblin/media_types/blog/__init__.py b/mediagoblin/media_types/blog/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/mediagoblin/media_types/blog/forms.py b/mediagoblin/media_types/blog/forms.py new file mode 100644 index 00000000..e69de29b diff --git a/mediagoblin/media_types/blog/models.py b/mediagoblin/media_types/blog/models.py new file mode 100644 index 00000000..e69de29b diff --git a/mediagoblin/media_types/blog/routing.py b/mediagoblin/media_types/blog/routing.py new file mode 100644 index 00000000..e69de29b diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py new file mode 100644 index 00000000..e69de29b From 9b6f25b88787630e9fc752b2fea72252c57cb264 Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 26 Jun 2013 23:53:27 +0530 Subject: [PATCH 004/140] Add BlogPostEditForm for editing and creating a blog post entry. --- mediagoblin/media_types/blog/forms.py | 36 +++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/mediagoblin/media_types/blog/forms.py b/mediagoblin/media_types/blog/forms.py index e69de29b..3e94998e 100644 --- a/mediagoblin/media_types/blog/forms.py +++ b/mediagoblin/media_types/blog/forms.py @@ -0,0 +1,36 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import wtforms + +from mediagoblin.tols.text import tag_length_validator, TOO_LONG_TAG_WARNING +from mediagoblin.tools.translate import lazy_pass_to_uggettext as _ +from mediagoblin.tools.licences import licences_as_choices + +class BlogPostEditForm(wtforms.Form): + title = wtforms.TextField(_('Title'), + [wtforms.validators.Length(min=0, max=500)]) + description = wtforms.TextAreaField(_('Content')) + tags = wtforms.TextField(_('Tags'), [tag_length_validator], + description="Seperate tags by commas.") + license = wtforms.SelectField(_('License'), + [wtforms.validators.Optional(),], choices=licenses_as_choices()) + + + + + + From f79d00dc869537a0c86eb75a3a2f109ee13e5136 Mon Sep 17 00:00:00 2001 From: Aditi Date: Thu, 27 Jun 2013 10:36:21 +0530 Subject: [PATCH 005/140] Add url mapping for blog-admin, blog-collection-admin, blog edit/create, blog post edit/create views. --- mediagoblin/media_types/blog/routing.py | 52 +++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/mediagoblin/media_types/blog/routing.py b/mediagoblin/media_types/blog/routing.py index e69de29b..c9aa61b7 100644 --- a/mediagoblin/media_types/blog/routing.py +++ b/mediagoblin/media_types/blog/routing.py @@ -0,0 +1,52 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +from mediagoblin.tools.routing import add_route + +#URL mapping for blog-admin, where all the blog posts of a particular blog +#are listed. providing the facility of edit, delete and view a particular blog post." +add_route('mediagoblin.media_types.blog.blog-admin', \ + '/u//b//blog-admin', 'mediagoblin.media_types.blog.views:blog-admin') + +#URL mapping for creating a new blog post. +add_route('mediagoblin.media_types.blog.blogpost.create', '/u//b//create', + 'mediagoblin.media_types.blog.views:blog_post_edit') + +#URL mapping for editing an existing blog post. +add_route('mediagoblin.media_types.blog.blogpost.edit', '/u//b//p/blog_post_slug/edit', + 'mediagoblin.media_types.blog.views:blog_post_edit') + +#URL mapping for blog-collection-admin, where all the blogs of the user +#are listed. providing the facility of edit, delete and view a blog. +#view facility redirects to blog-admin page of that particular blog. +add_route('mediagoblin.media_types.blog.blog-collection-admin', \ + '/u//blog-collection-admin', 'mediagoblin.media_types.blog.views:blog-collection-admin') + +#URL mapping for creating a new blog. +add_route('mediagoblin.media_types.blog.create', '/u//b/create', + 'mediagoblin.media_types.blog.views:blog_edit') + +#URL mapping for editing an existing blog. +add_route('mediagoblin.media_types.blog.create', '/u//b//edit', + 'mediagoblin.media_types.blog.views:blog_edit') + +#route for gallery view of blog posts and blogs. + + + + + + From 4daf5ddbc615c6c832eb01f742e93b93c01cecb9 Mon Sep 17 00:00:00 2001 From: Aditi Date: Fri, 28 Jun 2013 22:21:27 +0530 Subject: [PATCH 006/140] Add forms for editing and creating forms --- mediagoblin/media_types/blog/forms.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/mediagoblin/media_types/blog/forms.py b/mediagoblin/media_types/blog/forms.py index 3e94998e..fa409519 100644 --- a/mediagoblin/media_types/blog/forms.py +++ b/mediagoblin/media_types/blog/forms.py @@ -16,9 +16,9 @@ import wtforms -from mediagoblin.tols.text import tag_length_validator, TOO_LONG_TAG_WARNING -from mediagoblin.tools.translate import lazy_pass_to_uggettext as _ -from mediagoblin.tools.licences import licences_as_choices +from mediagoblin.tools.text import tag_length_validator, TOO_LONG_TAG_WARNING +from mediagoblin.tools.translate import lazy_pass_to_ugettext as _ +from mediagoblin.tools.licenses import licenses_as_choices class BlogPostEditForm(wtforms.Form): title = wtforms.TextField(_('Title'), @@ -28,6 +28,12 @@ class BlogPostEditForm(wtforms.Form): description="Seperate tags by commas.") license = wtforms.SelectField(_('License'), [wtforms.validators.Optional(),], choices=licenses_as_choices()) + +class BlogEditForm(wtforms.Form): + title = wtforms.TextField(_('Title'), + [wtforms.validators.Length(min=0, max=500)]) + description = wtforms.TextAreaField(_('Content')) + From de37d85c7d1e2cd8755e9d6cd1f69c32da08ba9e Mon Sep 17 00:00:00 2001 From: Aditi Date: Fri, 28 Jun 2013 22:22:28 +0530 Subject: [PATCH 007/140] Register blog create url in routing.py --- mediagoblin/media_types/blog/routing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediagoblin/media_types/blog/routing.py b/mediagoblin/media_types/blog/routing.py index c9aa61b7..6d2aaa1f 100644 --- a/mediagoblin/media_types/blog/routing.py +++ b/mediagoblin/media_types/blog/routing.py @@ -37,7 +37,7 @@ add_route('mediagoblin.media_types.blog.blog-collection-admin', \ #URL mapping for creating a new blog. add_route('mediagoblin.media_types.blog.create', '/u//b/create', - 'mediagoblin.media_types.blog.views:blog_edit') + 'mediagoblin.media_types.blog.views:blog_create') #URL mapping for editing an existing blog. add_route('mediagoblin.media_types.blog.create', '/u//b//edit', From af05d34a21e31ca6ea29fb73cb059bbac5350665 Mon Sep 17 00:00:00 2001 From: Aditi Date: Fri, 28 Jun 2013 22:56:46 +0530 Subject: [PATCH 008/140] Register blog urls with mediagoblin --- mediagoblin/routing.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mediagoblin/routing.py b/mediagoblin/routing.py index 986eb2ed..4228d29b 100644 --- a/mediagoblin/routing.py +++ b/mediagoblin/routing.py @@ -36,6 +36,7 @@ def get_url_map(): import mediagoblin.webfinger.routing import mediagoblin.listings.routing import mediagoblin.notifications.routing + import mediagoblin.media_types.blog.routing for route in PluginManager().get_routes(): add_route(*route) From cf46184aa148e615d36d98fbbe3d1deca2316fe7 Mon Sep 17 00:00:00 2001 From: Aditi Date: Fri, 28 Jun 2013 22:58:07 +0530 Subject: [PATCH 009/140] Add views for creating and editing a blog --- mediagoblin/media_types/blog/views.py | 128 ++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index e69de29b..b3e7c0a4 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -0,0 +1,128 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +from datetime import datetime + +from werkzeug.exceptions import Forbidden + +from mediagoblin import messages +from mediagoblin import mg_globals + +from mediagoblin.media_types.blog import forms as blog_forms +#from mediagoblin.edit.lib import may_edit_media +from mediagoblin.decorators import (require_active_login, active_user_from_url, + get_media_entry_by_id, user_may_alter_collection, + get_user_collection) +from mediagoblin.tools.response import (render_to_response, + redirect, redirect_obj, render_404) +from mediagoblin.tools.translate import pass_to_ugettext as _ +from mediagoblin.tools.template import render_template +from mediagoblin.tools.text import ( + convert_to_tag_list_of_dicts, media_tags_as_string) +from mediagoblin.tools.url import slugify +from mediagoblin.db.util import check_media_slug_used, check_collection_slug_used +from mediagoblin.db.models import User, Collection + +@require_active_login +def blog_create(request, media=None): + """ + View to create and edit a blog + """ + + blog_form = blog_forms.BlogEditForm(request.form) + + if request.method == 'POST' and blog_form.validate(): + blog = request.db.Collection() + + blog.title = unicode(blog_form.title.data) + blog.description = unicode(blog_form.description.data) + blog.creator = request.user.id + blog.generate_slug() + + # Make sure this user isn't duplicating an existing collection + existing_blog_name = request.db.Collection.find_one({ + 'creator': request.user.id, + 'title':blog.title}) + + if existing_blog_name: + add_message(request, messages.ERROR, + _('You already have a blog called "%s"!') \ + % blog.title) + else: + blog.save() + + add_message(request, SUCCESS, + _('Blog "%s" added!') % blog.title) + + return redirect(request, "mediagoblin.user_pages.user_home", + user=request.user.username) + + return render_to_response( + request, + 'mediagoblin/blog/blog_edit_create.html', + {'blog_form': blog_form, + 'app_config': mg_globals.app_config}) + +@require_active_login +@user_may_alter_collection +@get_user_collection +def blog_edit(request, collection): + """ + View for editing an existing blog which is a collection of MediaEntries. + """ + blog = collection + defaults = dict( + title = blog.title, + description = blog.description) + existing_blog = request.db.Collection.find_one({ + 'creator': request.user.id, + 'title':blog_form.title.data}) + if existing_blog and existing_blog.id != blog.id: + messages.add_message( + request, messages.ERROR, + _('You already have a blog called "%s"!') % \ + blog_form.title.data) + else: + blog.title = unicode(blog_form.title.data) + blog.description = unicode(blog_form.description.data) + + blog.save() + + return redirect_obj(request, blog) + + if request.user.is_admin \ + and blog.creator != request.user.id \ + and request.method != 'POST': + messages.add_message( + request, messages.WARNING, + _("You are editing another user's blog. Proceed with caution.")) + + return render_to_response( + request, + 'mediagoblin/blog/blog_edit_create.html', + {'blog': blog, + 'form': blog_form}) + + + + + + + + + + + From 6e947ab94319e94d7c621b6aa099890fafaff72a Mon Sep 17 00:00:00 2001 From: Aditi Date: Sun, 30 Jun 2013 09:31:29 +0530 Subject: [PATCH 010/140] Add user in template dictonary as it is in the url field. --- mediagoblin/media_types/blog/views.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index b3e7c0a4..5a9498cd 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -22,6 +22,7 @@ from mediagoblin import messages from mediagoblin import mg_globals from mediagoblin.media_types.blog import forms as blog_forms +from mediagoblin.messages import add_message, SUCCESS #from mediagoblin.edit.lib import may_edit_media from mediagoblin.decorators import (require_active_login, active_user_from_url, get_media_entry_by_id, user_may_alter_collection, @@ -74,8 +75,10 @@ def blog_create(request, media=None): request, 'mediagoblin/blog/blog_edit_create.html', {'blog_form': blog_form, + 'user' : request.user, 'app_config': mg_globals.app_config}) + @require_active_login @user_may_alter_collection @get_user_collection @@ -116,9 +119,8 @@ def blog_edit(request, collection): {'blog': blog, 'form': blog_form}) - - - + + From c8a26376371b067dfd8a2357cb13ab4d368ea3cc Mon Sep 17 00:00:00 2001 From: Aditi Date: Sun, 30 Jun 2013 09:33:04 +0530 Subject: [PATCH 011/140] Add template for blog edit and create page. --- .../mediagoblin/blog/blog_edit_create.html | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 mediagoblin/templates/mediagoblin/blog/blog_edit_create.html diff --git a/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html b/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html new file mode 100644 index 00000000..385e1417 --- /dev/null +++ b/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html @@ -0,0 +1,34 @@ +{# +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +#} +{% extends "mediagoblin/base.html" %} + +{% import "/mediagoblin/utils/wtforms.html" as wtforms_util %} + +{% block mediagoblin_content %} +
+
+

{% trans %}Create/Edit a Blog{% endtrans %}

+ {{ wtforms_util.render_divs(blog_form) }} +
+ {{ csrf_token }} + +
+
+
+{% endblock %} From 7d00fa8c3cd5696dfc4f768ecdd81465f5240eef Mon Sep 17 00:00:00 2001 From: Aditi Date: Tue, 2 Jul 2013 07:34:05 +0530 Subject: [PATCH 012/140] Add '/' at the end of each url. --- mediagoblin/media_types/blog/routing.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mediagoblin/media_types/blog/routing.py b/mediagoblin/media_types/blog/routing.py index 6d2aaa1f..b674042b 100644 --- a/mediagoblin/media_types/blog/routing.py +++ b/mediagoblin/media_types/blog/routing.py @@ -19,28 +19,28 @@ from mediagoblin.tools.routing import add_route #URL mapping for blog-admin, where all the blog posts of a particular blog #are listed. providing the facility of edit, delete and view a particular blog post." add_route('mediagoblin.media_types.blog.blog-admin', \ - '/u//b//blog-admin', 'mediagoblin.media_types.blog.views:blog-admin') + '/u//b//blog-admin/', 'mediagoblin.media_types.blog.views:blog-admin') #URL mapping for creating a new blog post. -add_route('mediagoblin.media_types.blog.blogpost.create', '/u//b//create', +add_route('mediagoblin.media_types.blog.blogpost.create', '/u//b//create/', 'mediagoblin.media_types.blog.views:blog_post_edit') #URL mapping for editing an existing blog post. -add_route('mediagoblin.media_types.blog.blogpost.edit', '/u//b//p/blog_post_slug/edit', +add_route('mediagoblin.media_types.blog.blogpost.edit', '/u//b//p/blog_post_slug/edit/', 'mediagoblin.media_types.blog.views:blog_post_edit') #URL mapping for blog-collection-admin, where all the blogs of the user #are listed. providing the facility of edit, delete and view a blog. #view facility redirects to blog-admin page of that particular blog. add_route('mediagoblin.media_types.blog.blog-collection-admin', \ - '/u//blog-collection-admin', 'mediagoblin.media_types.blog.views:blog-collection-admin') + '/u//blog-collection-admin/', 'mediagoblin.media_types.blog.views:blog-collection-admin') #URL mapping for creating a new blog. -add_route('mediagoblin.media_types.blog.create', '/u//b/create', +add_route('mediagoblin.media_types.blog.create', '/u//b/create/', 'mediagoblin.media_types.blog.views:blog_create') #URL mapping for editing an existing blog. -add_route('mediagoblin.media_types.blog.create', '/u//b//edit', +add_route('mediagoblin.media_types.blog.create', '/u//b//edit/', 'mediagoblin.media_types.blog.views:blog_edit') #route for gallery view of blog posts and blogs. From 2392fbc02bbf6d05d998de5091b8f11f37c101f0 Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 3 Jul 2013 08:22:48 +0530 Subject: [PATCH 013/140] Typo error. --- mediagoblin/processing/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediagoblin/processing/__init__.py b/mediagoblin/processing/__init__.py index f3a85940..27d89895 100644 --- a/mediagoblin/processing/__init__.py +++ b/mediagoblin/processing/__init__.py @@ -171,7 +171,7 @@ class BaseProcessingFail(Exception): subclass from. You shouldn't call this itself; instead you should subclass it - and provid the exception_path and general_message applicable to + and provide the exception_path and general_message applicable to this error. """ general_message = u'' From 2b2df22d2ae0d6ffb256b34449855138d2daad0d Mon Sep 17 00:00:00 2001 From: Aditi Date: Tue, 16 Jul 2013 12:08:03 +0530 Subject: [PATCH 014/140] Create Blog and BlogPostData models. --- mediagoblin/media_types/blog/models.py | 51 ++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/mediagoblin/media_types/blog/models.py b/mediagoblin/media_types/blog/models.py index e69de29b..e5c93d00 100644 --- a/mediagoblin/media_types/blog/models.py +++ b/mediagoblin/media_types/blog/models.py @@ -0,0 +1,51 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import datetime + +from mediagoblin.db.base import Base +from mediagoblin.db.models import Collection, User + +from sqlalchemy import ( + Column, Integer, ForeignKey, Unicode, UnicodeText, DateTime) +from sqlalchemy.orm import relationship, backref + +class Blog(Base): + __tablename__ = "core__blogs" + id = Column(Integer, primary_key=True) + title = Column(Unicode) + description = Column(UnicodeText) + author = Column(Integer, ForeignKey(User.id), nullable=False, index=True) + created = Column(DateTime, nullable=False, default=datetime.datetime.now, + index=True) + + +BACKREF_NAME = "blogpost__media_data" + + +class BlogpostData(Base): + __tablename__ = "blogpost__mediadata" + + # The primary key *and* reference to the main media_entry + media_entry = Column(Integer, ForeignKey('core__media_entries.id'), + primary_key=True) + get_media_entry = relationship("MediaEntry", + backref=backref(BACKREF_NAME, uselist=False, + cascade="all, delete-orphan")) + + +DATA_MODEL = BlogpostData +MODELS = [BlogpostData] From c80186a98f74ee7e105793c0e98b8d898cf022a4 Mon Sep 17 00:00:00 2001 From: Aditi Date: Tue, 16 Jul 2013 12:28:05 +0530 Subject: [PATCH 015/140] Change the field name in BlogEditForm. --- mediagoblin/media_types/blog/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediagoblin/media_types/blog/forms.py b/mediagoblin/media_types/blog/forms.py index fa409519..3b279071 100644 --- a/mediagoblin/media_types/blog/forms.py +++ b/mediagoblin/media_types/blog/forms.py @@ -32,7 +32,7 @@ class BlogPostEditForm(wtforms.Form): class BlogEditForm(wtforms.Form): title = wtforms.TextField(_('Title'), [wtforms.validators.Length(min=0, max=500)]) - description = wtforms.TextAreaField(_('Content')) + description = wtforms.TextAreaField(_('Description')) From 52b5d5a0f4f0a949f17046a7063fde2e1d5c02d6 Mon Sep 17 00:00:00 2001 From: Aditi Date: Tue, 16 Jul 2013 16:11:36 +0530 Subject: [PATCH 016/140] Add config_spec for blog plugin specification. --- mediagoblin/media_types/blog/config_spec.ini | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 mediagoblin/media_types/blog/config_spec.ini diff --git a/mediagoblin/media_types/blog/config_spec.ini b/mediagoblin/media_types/blog/config_spec.ini new file mode 100644 index 00000000..e0a6844e --- /dev/null +++ b/mediagoblin/media_types/blog/config_spec.ini @@ -0,0 +1,2 @@ +[plugin_spec] +max_blog_count = integer(default=1) From af8f995f38953318885fa196468481fbb69a763f Mon Sep 17 00:00:00 2001 From: Aditi Date: Fri, 19 Jul 2013 16:37:22 +0530 Subject: [PATCH 017/140] Add view for blog edit and create page. --- mediagoblin/media_types/blog/views.py | 139 +++++++++++--------------- 1 file changed, 58 insertions(+), 81 deletions(-) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index 5a9498cd..35ed5809 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -14,15 +14,19 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import logging + +_log = logging.getLogger(__name__) + from datetime import datetime from werkzeug.exceptions import Forbidden -from mediagoblin import messages from mediagoblin import mg_globals from mediagoblin.media_types.blog import forms as blog_forms -from mediagoblin.messages import add_message, SUCCESS +from mediagoblin.media_types.blog.models import Blog +from mediagoblin.messages import add_message, SUCCESS, ERROR #from mediagoblin.edit.lib import may_edit_media from mediagoblin.decorators import (require_active_login, active_user_from_url, get_media_entry_by_id, user_may_alter_collection, @@ -35,96 +39,69 @@ from mediagoblin.tools.text import ( convert_to_tag_list_of_dicts, media_tags_as_string) from mediagoblin.tools.url import slugify from mediagoblin.db.util import check_media_slug_used, check_collection_slug_used -from mediagoblin.db.models import User, Collection +from mediagoblin.db.models import User, Collection, MediaEntry + @require_active_login -def blog_create(request, media=None): +def blog_edit(request): """ - View to create and edit a blog + View for editing the existing blog or automatically + creating a new blog if user does not have any yet. """ + url_user = request.matchdict.get('user', None) + blog_slug = request.matchdict.get('blog_slug', None) - blog_form = blog_forms.BlogEditForm(request.form) + max_blog_count = 1 + form = blog_forms.BlogEditForm(request.form) + # the blog doesn't exists yet + if not blog_slug: + if Blog.query.filter_by(author=request.user.id).count() Date: Fri, 19 Jul 2013 16:40:21 +0530 Subject: [PATCH 018/140] Create file for utility function and add function. --- mediagoblin/media_types/blog/lib.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 mediagoblin/media_types/blog/lib.py diff --git a/mediagoblin/media_types/blog/lib.py b/mediagoblin/media_types/blog/lib.py new file mode 100644 index 00000000..7549f090 --- /dev/null +++ b/mediagoblin/media_types/blog/lib.py @@ -0,0 +1,26 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +from mediagoblin.db.base import Session + + +def check_blog_slug_used(author_id, slug, ignore_b_id=None): + from mediagoblin.media_types.blog.models import Blog + query = Blog.query.filter_by(author=author_id, slug=slug) + if ignore_b_id: + query = query.filter(Blog.id != ignore_b_id) + does_exist = query.first() is not None + return does_exist From 8ab67da4aebd2231c12fc033084c4abf1bd26710 Mon Sep 17 00:00:00 2001 From: Aditi Date: Fri, 19 Jul 2013 16:47:27 +0530 Subject: [PATCH 019/140] Add class BlogMixin. --- mediagoblin/media_types/blog/models.py | 38 +++++++++++++++++--------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/mediagoblin/media_types/blog/models.py b/mediagoblin/media_types/blog/models.py index e5c93d00..f7e907a5 100644 --- a/mediagoblin/media_types/blog/models.py +++ b/mediagoblin/media_types/blog/models.py @@ -1,5 +1,5 @@ # GNU MediaGoblin -- federated, autonomous media hosting -# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -17,21 +17,34 @@ import datetime from mediagoblin.db.base import Base -from mediagoblin.db.models import Collection, User +from mediagoblin.db.models import Collection, User, MediaEntry +from mediagoblin.db.mixin import GenerateSlugMixin + +from mediagoblin.media_types.blog.lib import check_blog_slug_used + +from mediagoblin.tools.text import cleaned_markdown_conversion from sqlalchemy import ( Column, Integer, ForeignKey, Unicode, UnicodeText, DateTime) from sqlalchemy.orm import relationship, backref -class Blog(Base): - __tablename__ = "core__blogs" - id = Column(Integer, primary_key=True) - title = Column(Unicode) - description = Column(UnicodeText) - author = Column(Integer, ForeignKey(User.id), nullable=False, index=True) - created = Column(DateTime, nullable=False, default=datetime.datetime.now, - index=True) + +class BlogMixin(GenerateSlugMixin): + def check_slug_used(self, slug): + return check_blog_slug_used(self.author, slug, self.id) + +class Blog(Base, BlogMixin): + __tablename__ = "mediatype__blogs" + id = Column(Integer, primary_key=True) + title = Column(Unicode) + description = Column(UnicodeText) + author = Column(Integer, ForeignKey(User.id), nullable=False, index=True) #similar to uploader + created = Column(DateTime, nullable=False, default=datetime.datetime.now, index=True) + slug = Column(Unicode) +#class BlogPost(MediaEntry): + #__tablename__ = "mediatype__blog_blogposts" + #blog = Column(Integer, ForeignKey(Blog.id), nullable=False) BACKREF_NAME = "blogpost__media_data" @@ -40,12 +53,11 @@ class BlogpostData(Base): __tablename__ = "blogpost__mediadata" # The primary key *and* reference to the main media_entry - media_entry = Column(Integer, ForeignKey('core__media_entries.id'), - primary_key=True) + media_entry = Column(Integer, ForeignKey('core__media_entries.id'), primary_key=True) get_media_entry = relationship("MediaEntry", backref=backref(BACKREF_NAME, uselist=False, cascade="all, delete-orphan")) DATA_MODEL = BlogpostData -MODELS = [BlogpostData] +MODELS = [BlogpostData, Blog] From e0e02e98bcd4664b1c0a57e422ea4c0e5b6ba059 Mon Sep 17 00:00:00 2001 From: Aditi Date: Fri, 19 Jul 2013 16:52:35 +0530 Subject: [PATCH 020/140] Replace hardcoded URL by variable for the same. --- mediagoblin/media_types/image/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediagoblin/media_types/image/__init__.py b/mediagoblin/media_types/image/__init__.py index 1bb9c6f3..bf42e0b3 100644 --- a/mediagoblin/media_types/image/__init__.py +++ b/mediagoblin/media_types/image/__init__.py @@ -26,7 +26,7 @@ MEDIA_TYPE = 'mediagoblin.media_types.image' def setup_plugin(): - config = pluginapi.get_config('mediagoblin.media_types.image') + config = pluginapi.get_config(MEDIA_TYPE) class ImageMediaManager(MediaManagerBase): From b1e234365c4dbe2d2588d17acd1a0553e36e9d43 Mon Sep 17 00:00:00 2001 From: Aditi Date: Fri, 19 Jul 2013 16:55:42 +0530 Subject: [PATCH 021/140] Change view and urls for blog edit/create page. --- mediagoblin/media_types/blog/routing.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/mediagoblin/media_types/blog/routing.py b/mediagoblin/media_types/blog/routing.py index b674042b..5c141c31 100644 --- a/mediagoblin/media_types/blog/routing.py +++ b/mediagoblin/media_types/blog/routing.py @@ -18,9 +18,9 @@ from mediagoblin.tools.routing import add_route #URL mapping for blog-admin, where all the blog posts of a particular blog #are listed. providing the facility of edit, delete and view a particular blog post." -add_route('mediagoblin.media_types.blog.blog-admin', \ - '/u//b//blog-admin/', 'mediagoblin.media_types.blog.views:blog-admin') - +#add_route('mediagoblin.media_types.blog.blog-admin', \ +# '/u//b//blog-admin/', 'mediagoblin.media_types.blog.views:blog-admin') + #URL mapping for creating a new blog post. add_route('mediagoblin.media_types.blog.blogpost.create', '/u//b//create/', 'mediagoblin.media_types.blog.views:blog_post_edit') @@ -35,12 +35,20 @@ add_route('mediagoblin.media_types.blog.blogpost.edit', '/u//b//blog-collection-admin/', 'mediagoblin.media_types.blog.views:blog-collection-admin') +##URL mapping for creating a new blog. +#add_route('mediagoblin.media_types.blog.create', '/u//b/create/', + #'mediagoblin.media_types.blog.views:blog_create') + + #URL mapping for creating a new blog. add_route('mediagoblin.media_types.blog.create', '/u//b/create/', - 'mediagoblin.media_types.blog.views:blog_create') + 'mediagoblin.media_types.blog.views:blog_edit') + + + #URL mapping for editing an existing blog. -add_route('mediagoblin.media_types.blog.create', '/u//b//edit/', +add_route('mediagoblin.media_types.blog.edit', '/u//b//edit/', 'mediagoblin.media_types.blog.views:blog_edit') #route for gallery view of blog posts and blogs. From 03e2a0f8067186e6f276581ff62152ad3ad62826 Mon Sep 17 00:00:00 2001 From: Aditi Date: Fri, 19 Jul 2013 16:58:35 +0530 Subject: [PATCH 022/140] Add blog media_type plugin to plugin section. --- mediagoblin.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/mediagoblin.ini b/mediagoblin.ini index 30dacadf..cb908dd2 100644 --- a/mediagoblin.ini +++ b/mediagoblin.ini @@ -45,3 +45,4 @@ base_url = /mgoblin_media/ [[mediagoblin.plugins.geolocation]] [[mediagoblin.plugins.basic_auth]] [[mediagoblin.media_types.image]] +[[mediagoblin.media_types.blog]] From fa5a13f8f31a3acae1b59732c34d2520d9cbe782 Mon Sep 17 00:00:00 2001 From: Aditi Date: Fri, 19 Jul 2013 19:29:13 +0530 Subject: [PATCH 023/140] Wrote blogpost_create view. --- mediagoblin/media_types/blog/views.py | 49 +++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index 35ed5809..885594b1 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -41,6 +41,8 @@ from mediagoblin.tools.url import slugify from mediagoblin.db.util import check_media_slug_used, check_collection_slug_used from mediagoblin.db.models import User, Collection, MediaEntry +from mediagoblin.notifications import add_comment_subscription + @require_active_login def blog_edit(request): @@ -99,9 +101,50 @@ def blog_edit(request): 'user': request.user, 'app_config': mg_globals.app_config}) else: - pass + if request.method == 'POST' and form.validate(): + blog.title = unicode(form.title.data) + blog.description = unicode(form.description.data) + blog.author = request.user.id + blog.generate_slug() + + blog.save() + add_message(request, SUCCESS, "Your blog is updated.") + return redirect(request, "mediagoblin.user_pages.user_home", + user=request.user.username) - - +@require_active_login +def blogpost_create(request): + form = blog_forms.BlogPostEditForm(request.form, license=request.user.license_preference) + + if request.method == 'POST' and form.validate(): + blogpost = MediaEntry() + blogpost.media_type = 'blog_post' + blogpost.title = unicode(form.title.data) + blogpost.description = unicode(form.description.data) + blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data) + blogpost.license = unicode(form.license.data) or None + blogpost.uploader = request.user.id + #blogpost.state = 'processed' + + blogpost.generate_slug() + + blogpost.save() + + add_message(request, SUCCESS, _('Woohoo! Submitted!')) + add_comment_subscription(request.user, blogpost) + return redirect(request, "mediagoblin.user_pages.user_home", + user=request.user.username) + + return render_to_response( + request, + 'mediagoblin/blog/blog_post_edit_create.html', + {'form': form, + 'app_config': mg_globals.app_config, + 'user': request.user.username}) + + + + + From 0574d30d9a0e362f97f34f3330911ee5568c8897 Mon Sep 17 00:00:00 2001 From: Aditi Date: Fri, 19 Jul 2013 19:33:49 +0530 Subject: [PATCH 024/140] temperory url change for creating a new blog. --- mediagoblin/media_types/blog/routing.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mediagoblin/media_types/blog/routing.py b/mediagoblin/media_types/blog/routing.py index 5c141c31..1d297182 100644 --- a/mediagoblin/media_types/blog/routing.py +++ b/mediagoblin/media_types/blog/routing.py @@ -22,8 +22,8 @@ from mediagoblin.tools.routing import add_route # '/u//b//blog-admin/', 'mediagoblin.media_types.blog.views:blog-admin') #URL mapping for creating a new blog post. -add_route('mediagoblin.media_types.blog.blogpost.create', '/u//b//create/', - 'mediagoblin.media_types.blog.views:blog_post_edit') +add_route('mediagoblin.media_types.blog.blogpost.create', '/u//b/blogpost/create/', + 'mediagoblin.media_types.blog.views:blogpost_create') #URL mapping for editing an existing blog post. add_route('mediagoblin.media_types.blog.blogpost.edit', '/u//b//p/blog_post_slug/edit/', @@ -45,8 +45,6 @@ add_route('mediagoblin.media_types.blog.create', '/u//b/create/', 'mediagoblin.media_types.blog.views:blog_edit') - - #URL mapping for editing an existing blog. add_route('mediagoblin.media_types.blog.edit', '/u//b//edit/', 'mediagoblin.media_types.blog.views:blog_edit') From 145a173851ef003b0301d88f69a079bb88953d3f Mon Sep 17 00:00:00 2001 From: Aditi Date: Sat, 20 Jul 2013 11:01:52 +0530 Subject: [PATCH 025/140] Indent properly. --- mediagoblin/media_types/blog/views.py | 74 +++++++++---------- .../mediagoblin/blog/blog_edit_create.html | 2 +- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index 885594b1..a48e65e0 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -102,49 +102,49 @@ def blog_edit(request): 'app_config': mg_globals.app_config}) else: if request.method == 'POST' and form.validate(): - blog.title = unicode(form.title.data) - blog.description = unicode(form.description.data) - blog.author = request.user.id - blog.generate_slug() - - blog.save() - add_message(request, SUCCESS, "Your blog is updated.") - return redirect(request, "mediagoblin.user_pages.user_home", - user=request.user.username) - + blog.title = unicode(form.title.data) + blog.description = unicode(form.description.data) + blog.author = request.user.id + blog.generate_slug() + + blog.save() + add_message(request, SUCCESS, "Your blog is updated.") + return redirect(request, "mediagoblin.user_pages.user_home", + user=request.user.username) + @require_active_login def blogpost_create(request): - form = blog_forms.BlogPostEditForm(request.form, license=request.user.license_preference) - - if request.method == 'POST' and form.validate(): - blogpost = MediaEntry() - blogpost.media_type = 'blog_post' - blogpost.title = unicode(form.title.data) - blogpost.description = unicode(form.description.data) - blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data) - blogpost.license = unicode(form.license.data) or None - blogpost.uploader = request.user.id - #blogpost.state = 'processed' - - blogpost.generate_slug() - - blogpost.save() - - add_message(request, SUCCESS, _('Woohoo! Submitted!')) - add_comment_subscription(request.user, blogpost) - return redirect(request, "mediagoblin.user_pages.user_home", - user=request.user.username) - - return render_to_response( + form = blog_forms.BlogPostEditForm(request.form, license=request.user.license_preference) + + if request.method == 'POST' and form.validate(): + blogpost = MediaEntry() + blogpost.media_type = 'blog_post' + blogpost.title = unicode(form.title.data) + blogpost.description = unicode(form.description.data) + blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data) + blogpost.license = unicode(form.license.data) or None + blogpost.uploader = request.user.id + #blogpost.state = 'processed' + + blogpost.generate_slug() + + blogpost.save() + + add_message(request, SUCCESS, _('Woohoo! Submitted!')) + add_comment_subscription(request.user, blogpost) + return redirect(request, "mediagoblin.user_pages.user_home", + user=request.user.username) + + return render_to_response( request, 'mediagoblin/blog/blog_post_edit_create.html', {'form': form, 'app_config': mg_globals.app_config, 'user': request.user.username}) - - - - - + + + + + diff --git a/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html b/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html index 385e1417..7f9b0cb5 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html @@ -24,7 +24,7 @@ method="POST" enctype="multipart/form-data">

{% trans %}Create/Edit a Blog{% endtrans %}

- {{ wtforms_util.render_divs(blog_form) }} + {{ wtforms_util.render_divs(form) }}
{{ csrf_token }} From 9505f1a395ae8ab87b16134c096f81f0b6a06260 Mon Sep 17 00:00:00 2001 From: Aditi Date: Sat, 20 Jul 2013 11:23:12 +0530 Subject: [PATCH 026/140] Add BlogPostMediaManager and setup_plugin. --- mediagoblin/media_types/blog/__init__.py | 44 ++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/mediagoblin/media_types/blog/__init__.py b/mediagoblin/media_types/blog/__init__.py index e69de29b..f0d98ff1 100644 --- a/mediagoblin/media_types/blog/__init__.py +++ b/mediagoblin/media_types/blog/__init__.py @@ -0,0 +1,44 @@ +#GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +from mediagoblin.media_types import MediaManagerBase + +from mediagoblin.tools import pluginapi + +MEDIA_TYPE = 'mediagoblin.media_types.blog' + +def setup_plugin(): + config = pluginapi.get_config(MEDIA_TYPE) + +class BlogPostMediaManager(MediaManagerBase): + human_readable = "Blog Post" + display_template = "mediagoblin/media_displays/blogpost.html" + default_thumb = "images/media_thumbs/blogpost.jpg" + +def get_media_type_and_manager(): + return MEDIA_TYPE, BlogPostMediaManager + + +hooks = { + 'setup': setup_plugin, + 'get_media_type_and_manager': get_media_type_and_manager, + ('media_manager', MEDIA_TYPE): lambda: BlogPostMediaManager, +} + + + + + From 00993a68e513a6f0a31f84f7bea8b918db6147e3 Mon Sep 17 00:00:00 2001 From: Aditi Date: Sat, 20 Jul 2013 11:25:32 +0530 Subject: [PATCH 027/140] Add temporary template for blogpost create/edit view. --- .../blog/blog_post_edit_create.html | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html diff --git a/mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html b/mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html new file mode 100644 index 00000000..ad2a1008 --- /dev/null +++ b/mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html @@ -0,0 +1,38 @@ +{# +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +#} +{% extends "mediagoblin/base.html" %} + +{% import "/mediagoblin/utils/wtforms.html" as wtforms_util %} + +{% block title -%} + {% trans %}Create/Edit a blog post.{% endtrans %} — {{ super() }} +{%- endblock %} + +{% block mediagoblin_content %} +
+
+

{% trans %}Create a blog post.{% endtrans %}

+ {{ wtforms_util.render_divs(form) }} +
+ {{ csrf_token }} + +
+
+
+{% endblock %} From bafaa93d8cbbe4c07ca524e4bb3ad5922015a069 Mon Sep 17 00:00:00 2001 From: Aditi Date: Sat, 20 Jul 2013 11:28:10 +0530 Subject: [PATCH 028/140] Remove BlogPost model and Add attribute for blog id in BlogPostData. --- mediagoblin/media_types/blog/models.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/mediagoblin/media_types/blog/models.py b/mediagoblin/media_types/blog/models.py index f7e907a5..a641861b 100644 --- a/mediagoblin/media_types/blog/models.py +++ b/mediagoblin/media_types/blog/models.py @@ -41,19 +41,16 @@ class Blog(Base, BlogMixin): author = Column(Integer, ForeignKey(User.id), nullable=False, index=True) #similar to uploader created = Column(DateTime, nullable=False, default=datetime.datetime.now, index=True) slug = Column(Unicode) - -#class BlogPost(MediaEntry): - #__tablename__ = "mediatype__blog_blogposts" - #blog = Column(Integer, ForeignKey(Blog.id), nullable=False) + BACKREF_NAME = "blogpost__media_data" - class BlogpostData(Base): __tablename__ = "blogpost__mediadata" # The primary key *and* reference to the main media_entry media_entry = Column(Integer, ForeignKey('core__media_entries.id'), primary_key=True) + #blog = Column(Integer, ForeignKey('mediatype__blogs.id', nullable=False) get_media_entry = relationship("MediaEntry", backref=backref(BACKREF_NAME, uselist=False, cascade="all, delete-orphan")) From 26de7c226724f68e8e4461c10c72f919205078c4 Mon Sep 17 00:00:00 2001 From: Aditi Date: Sat, 20 Jul 2013 11:35:46 +0530 Subject: [PATCH 029/140] Change in blogpost create Url. --- mediagoblin/media_types/blog/routing.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mediagoblin/media_types/blog/routing.py b/mediagoblin/media_types/blog/routing.py index 1d297182..d0ea2cb1 100644 --- a/mediagoblin/media_types/blog/routing.py +++ b/mediagoblin/media_types/blog/routing.py @@ -21,13 +21,13 @@ from mediagoblin.tools.routing import add_route #add_route('mediagoblin.media_types.blog.blog-admin', \ # '/u//b//blog-admin/', 'mediagoblin.media_types.blog.views:blog-admin') -#URL mapping for creating a new blog post. +#URL mapping for creating a new blog post. (add blo_slug in the url at "blogpost" place later" add_route('mediagoblin.media_types.blog.blogpost.create', '/u//b/blogpost/create/', 'mediagoblin.media_types.blog.views:blogpost_create') #URL mapping for editing an existing blog post. -add_route('mediagoblin.media_types.blog.blogpost.edit', '/u//b//p/blog_post_slug/edit/', - 'mediagoblin.media_types.blog.views:blog_post_edit') +add_route('mediagoblin.media_types.blog.blogpost.edit', '/u//b/blogpost/p//edit/', + 'mediagoblin.media_types.blog.views:blogpost_edit') #URL mapping for blog-collection-admin, where all the blogs of the user #are listed. providing the facility of edit, delete and view a blog. From aebc179da21f14fedf870e211f758bc63bb4c203 Mon Sep 17 00:00:00 2001 From: Aditi Date: Sun, 21 Jul 2013 11:22:46 +0530 Subject: [PATCH 030/140] Remove unused import. --- mediagoblin/media_types/blog/lib.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/mediagoblin/media_types/blog/lib.py b/mediagoblin/media_types/blog/lib.py index 7549f090..f628d27a 100644 --- a/mediagoblin/media_types/blog/lib.py +++ b/mediagoblin/media_types/blog/lib.py @@ -14,8 +14,6 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from mediagoblin.db.base import Session - def check_blog_slug_used(author_id, slug, ignore_b_id=None): from mediagoblin.media_types.blog.models import Blog From e058cdce91c3f2e9149673d911302d5ca901733a Mon Sep 17 00:00:00 2001 From: Aditi Date: Sun, 21 Jul 2013 11:24:44 +0530 Subject: [PATCH 031/140] Create view for blogpost_edit. --- mediagoblin/media_types/blog/views.py | 48 ++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index a48e65e0..1efd1742 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -27,7 +27,6 @@ from mediagoblin import mg_globals from mediagoblin.media_types.blog import forms as blog_forms from mediagoblin.media_types.blog.models import Blog from mediagoblin.messages import add_message, SUCCESS, ERROR -#from mediagoblin.edit.lib import may_edit_media from mediagoblin.decorators import (require_active_login, active_user_from_url, get_media_entry_by_id, user_may_alter_collection, get_user_collection) @@ -124,7 +123,7 @@ def blogpost_create(request): blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data) blogpost.license = unicode(form.license.data) or None blogpost.uploader = request.user.id - #blogpost.state = 'processed' + blogpost.state = 'processed' blogpost.generate_slug() @@ -141,10 +140,43 @@ def blogpost_create(request): {'form': form, 'app_config': mg_globals.app_config, 'user': request.user.username}) + + +@require_active_login +def blogpost_edit(request): + + blogpost = MediaEntry.query.filter_by( + blog=request.matchdict['blog_slug'], + slug=request.matchdict['blog_post_slug'], uploader=request.user.id).first() + defaults = dict( + title = blogpost.title, + description = blogpost.description, + tags=media_tags_as_string(blogpost.tags), + license=blogpost.license) + + form = blog_forms.BlogPostEditForm(request.form, **defaults) + if request.method == 'POST' and form.validate(): + blogpost.title = unicode(form.title.data) + blogpost.description = unicode(form.description.data) + blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data) + blogpost.license = unicode(form.license.data) + + blogpost.generate_slug() + blogpost.save() + + add_message(request, SUCCESS, _('Woohoo! edited blogpost is submitted')) + return redirect(request, "mediagoblin.user_pages.user_home", + user=request.user.username) + + return render_to_response( + request, + 'mediagoblin/blog/blog_post_edit_create.html', + {'form': form, + 'app_config': mg_globals.app_config, + 'user': request.user.username, + 'blog_post_slug': blogpost.slug, + 'blog_slug':blogpost.blog}) + +#def blog_admin_view(request): - - - - - - + From 783b50057b8e08e2ea53e5f3fa926c6b21e38415 Mon Sep 17 00:00:00 2001 From: Aditi Date: Sun, 21 Jul 2013 17:19:57 +0530 Subject: [PATCH 032/140] Make changes in blogpost_edit view. --- mediagoblin/media_types/blog/views.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index 1efd1742..e7141119 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -117,7 +117,7 @@ def blogpost_create(request): if request.method == 'POST' and form.validate(): blogpost = MediaEntry() - blogpost.media_type = 'blog_post' + blogpost.media_type = 'mediagoblin.media_types.blogpost' blogpost.title = unicode(form.title.data) blogpost.description = unicode(form.description.data) blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data) @@ -145,9 +145,7 @@ def blogpost_create(request): @require_active_login def blogpost_edit(request): - blogpost = MediaEntry.query.filter_by( - blog=request.matchdict['blog_slug'], - slug=request.matchdict['blog_post_slug'], uploader=request.user.id).first() + blogpost = MediaEntry.query.filter_by(slug=request.matchdict['blog_post_slug'], uploader=request.user.id).first() defaults = dict( title = blogpost.title, description = blogpost.description, @@ -174,8 +172,8 @@ def blogpost_edit(request): {'form': form, 'app_config': mg_globals.app_config, 'user': request.user.username, - 'blog_post_slug': blogpost.slug, - 'blog_slug':blogpost.blog}) + 'blog_post_slug': blogpost.slug + }) #def blog_admin_view(request): From 511ce0d6c755dbdbe4f045f20fd57164584958f3 Mon Sep 17 00:00:00 2001 From: Aditi Date: Sun, 21 Jul 2013 17:21:01 +0530 Subject: [PATCH 033/140] Fix media type. --- mediagoblin/media_types/blog/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mediagoblin/media_types/blog/__init__.py b/mediagoblin/media_types/blog/__init__.py index f0d98ff1..a579a179 100644 --- a/mediagoblin/media_types/blog/__init__.py +++ b/mediagoblin/media_types/blog/__init__.py @@ -18,7 +18,7 @@ from mediagoblin.media_types import MediaManagerBase from mediagoblin.tools import pluginapi -MEDIA_TYPE = 'mediagoblin.media_types.blog' +MEDIA_TYPE = 'mediagoblin.media_types.blogpost' def setup_plugin(): config = pluginapi.get_config(MEDIA_TYPE) @@ -28,7 +28,7 @@ class BlogPostMediaManager(MediaManagerBase): display_template = "mediagoblin/media_displays/blogpost.html" default_thumb = "images/media_thumbs/blogpost.jpg" -def get_media_type_and_manager(): +def get_media_type_and_manager(ext): return MEDIA_TYPE, BlogPostMediaManager From 5230b41895051a9d6ece080837c52cd7f5d8cedc Mon Sep 17 00:00:00 2001 From: Aditi Date: Sun, 21 Jul 2013 18:03:48 +0530 Subject: [PATCH 034/140] Remove form action url. --- .../templates/mediagoblin/blog/blog_post_edit_create.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html b/mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html index ad2a1008..b422f129 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html @@ -24,8 +24,7 @@ {%- endblock %} {% block mediagoblin_content %} -
+

{% trans %}Create a blog post.{% endtrans %}

{{ wtforms_util.render_divs(form) }} From 391f4456a2034885d5af0760dc8070450e6aa4e2 Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 22 Jul 2013 07:01:28 +0530 Subject: [PATCH 035/140] Create may_edit_blogpost function. --- mediagoblin/media_types/blog/lib.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mediagoblin/media_types/blog/lib.py b/mediagoblin/media_types/blog/lib.py index f628d27a..7de173ec 100644 --- a/mediagoblin/media_types/blog/lib.py +++ b/mediagoblin/media_types/blog/lib.py @@ -22,3 +22,9 @@ def check_blog_slug_used(author_id, slug, ignore_b_id=None): query = query.filter(Blog.id != ignore_b_id) does_exist = query.first() is not None return does_exist + +def may_edit_blogpost(request, blog): + if request.is_admin or request.user.id == blog.author: + return True + return False + From 63533625468eb96097a5de85ad99a7b0a20bfedd Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 22 Jul 2013 07:04:29 +0530 Subject: [PATCH 036/140] Change class name to BlogPostData(camelcase) and add blog id attribute to the class. --- mediagoblin/media_types/blog/models.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mediagoblin/media_types/blog/models.py b/mediagoblin/media_types/blog/models.py index a641861b..a9288c00 100644 --- a/mediagoblin/media_types/blog/models.py +++ b/mediagoblin/media_types/blog/models.py @@ -45,16 +45,16 @@ class Blog(Base, BlogMixin): BACKREF_NAME = "blogpost__media_data" -class BlogpostData(Base): +class BlogPostData(Base): __tablename__ = "blogpost__mediadata" # The primary key *and* reference to the main media_entry media_entry = Column(Integer, ForeignKey('core__media_entries.id'), primary_key=True) - #blog = Column(Integer, ForeignKey('mediatype__blogs.id', nullable=False) + blog = Column(Integer, ForeignKey('mediatype__blogs.id'), nullable=False) get_media_entry = relationship("MediaEntry", backref=backref(BACKREF_NAME, uselist=False, cascade="all, delete-orphan")) -DATA_MODEL = BlogpostData -MODELS = [BlogpostData, Blog] +DATA_MODEL = BlogPostData +MODELS = [BlogPostData, Blog] From f6cee302e420a0dc46d7651adb7e226ba4a40ae5 Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 22 Jul 2013 19:10:36 +0530 Subject: [PATCH 037/140] Fix attribute error by writing request.user.is_admin. --- mediagoblin/media_types/blog/lib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediagoblin/media_types/blog/lib.py b/mediagoblin/media_types/blog/lib.py index 7de173ec..f95ecca5 100644 --- a/mediagoblin/media_types/blog/lib.py +++ b/mediagoblin/media_types/blog/lib.py @@ -24,7 +24,7 @@ def check_blog_slug_used(author_id, slug, ignore_b_id=None): return does_exist def may_edit_blogpost(request, blog): - if request.is_admin or request.user.id == blog.author: + if request.user.is_admin or request.user.id == blog.author: return True return False From 5cb38a2886d8e48889520b6ff40d2d6ccba80e5f Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 22 Jul 2013 19:11:33 +0530 Subject: [PATCH 038/140] Write blog_dashboard view. --- mediagoblin/media_types/blog/views.py | 105 +++++++++++++++++++------- 1 file changed, 77 insertions(+), 28 deletions(-) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index e7141119..d4c78b4d 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -25,7 +25,9 @@ from werkzeug.exceptions import Forbidden from mediagoblin import mg_globals from mediagoblin.media_types.blog import forms as blog_forms -from mediagoblin.media_types.blog.models import Blog +from mediagoblin.media_types.blog.models import Blog, BlogPostData +from mediagoblin.media_types.blog.lib import may_edit_blogpost + from mediagoblin.messages import add_message, SUCCESS, ERROR from mediagoblin.decorators import (require_active_login, active_user_from_url, get_media_entry_by_id, user_may_alter_collection, @@ -37,6 +39,7 @@ from mediagoblin.tools.template import render_template from mediagoblin.tools.text import ( convert_to_tag_list_of_dicts, media_tags_as_string) from mediagoblin.tools.url import slugify + from mediagoblin.db.util import check_media_slug_used, check_collection_slug_used from mediagoblin.db.models import User, Collection, MediaEntry @@ -113,10 +116,17 @@ def blog_edit(request): @require_active_login def blogpost_create(request): - form = blog_forms.BlogPostEditForm(request.form, license=request.user.license_preference) + + form = blog_forms.BlogPostEditForm(request.form, license=request.user.license_preference) + if request.method == 'POST' and form.validate(): - blogpost = MediaEntry() + blog_slug = request.matchdict.get('blog_slug') + blog = request.db.Blog.query.filter_by(slug=blog_slug, + author=request.user.id).first() + + + blogpost = request.db.MediaEntry() blogpost.media_type = 'mediagoblin.media_types.blogpost' blogpost.title = unicode(form.title.data) blogpost.description = unicode(form.description.data) @@ -128,6 +138,12 @@ def blogpost_create(request): blogpost.generate_slug() blogpost.save() + + # connect this blogpost to its blog + blog_post_data = request.db.BlogPostData() + blog_post_data.blog = blog.id + blog_post_data.media_entry = blogpost.id + blog_post_data.save() add_message(request, SUCCESS, _('Woohoo! Submitted!')) add_comment_subscription(request.user, blogpost) @@ -144,37 +160,70 @@ def blogpost_create(request): @require_active_login def blogpost_edit(request): - - blogpost = MediaEntry.query.filter_by(slug=request.matchdict['blog_post_slug'], uploader=request.user.id).first() - defaults = dict( - title = blogpost.title, - description = blogpost.description, - tags=media_tags_as_string(blogpost.tags), - license=blogpost.license) - - form = blog_forms.BlogPostEditForm(request.form, **defaults) - if request.method == 'POST' and form.validate(): - blogpost.title = unicode(form.title.data) - blogpost.description = unicode(form.description.data) - blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data) - blogpost.license = unicode(form.license.data) - - blogpost.generate_slug() - blogpost.save() - - add_message(request, SUCCESS, _('Woohoo! edited blogpost is submitted')) - return redirect(request, "mediagoblin.user_pages.user_home", - user=request.user.username) - - return render_to_response( + blog_slug = request.matchdict.get('blog_slug') + blog_post_slug = request.matchdict.get('blog_post_slug') + + blog = request.db.Blog.query.filter_by(slug=blog_slug, author=request.user.id).first() + blog_post_data = request.db.BlogPostData.query.filter_by(blog=blog.id).first() + + blogpost = blog_post_data.get_media_entry + + defaults = dict( + title = blogpost.title, + description = blogpost.description, + tags=media_tags_as_string(blogpost.tags), + license=blogpost.license) + + form = blog_forms.BlogPostEditForm(request.form, **defaults) + if request.method == 'POST' and form.validate(): + blogpost.title = unicode(form.title.data) + blogpost.description = unicode(form.description.data) + blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data) + blogpost.license = unicode(form.license.data) + + blogpost.generate_slug() + blogpost.save() + + add_message(request, SUCCESS, _('Woohoo! edited blogpost is submitted')) + return redirect(request, "mediagoblin.user_pages.user_home", + user=request.user.username) + + return render_to_response( request, 'mediagoblin/blog/blog_post_edit_create.html', {'form': form, 'app_config': mg_globals.app_config, 'user': request.user.username, - 'blog_post_slug': blogpost.slug + 'blog_post_slug': blog_post_slug }) -#def blog_admin_view(request): +@require_active_login +def blog_dashboard(request): + blog_posts_list = [] + blog_slug = request.matchdict.get('blog_slug') + _log.info(blog_slug) + + blog = request.db.Blog.query.filter_by(slug=blog_slug).first() + blog_post_data = request.db.BlogPostData.query.filter_by(blog=blog.id).all() + + for each_blog_post_data in blog_post_data: + blog_post = each_blog_post_data.get_media_entry + if blog_post: + blog_posts_list.append(blog_post) + blog_post_count = len(blog_posts_list) + + if may_edit_blogpost(request, blog): + return render_to_response( + request, + 'mediagoblin/blog/blog_admin_dashboard.html', + {'blog_posts_list': blog_posts_list, + 'blog_slug':blog_slug, + 'blog':blog, + 'blog_post_count':blog_post_count + }) + + + + From bdc3dfde653c64fc8e47a5d41a5065588a1484b3 Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 22 Jul 2013 19:12:54 +0530 Subject: [PATCH 039/140] Format url for blog_dashboard view. --- mediagoblin/media_types/blog/routing.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/mediagoblin/media_types/blog/routing.py b/mediagoblin/media_types/blog/routing.py index d0ea2cb1..2f879d20 100644 --- a/mediagoblin/media_types/blog/routing.py +++ b/mediagoblin/media_types/blog/routing.py @@ -18,16 +18,18 @@ from mediagoblin.tools.routing import add_route #URL mapping for blog-admin, where all the blog posts of a particular blog #are listed. providing the facility of edit, delete and view a particular blog post." -#add_route('mediagoblin.media_types.blog.blog-admin', \ -# '/u//b//blog-admin/', 'mediagoblin.media_types.blog.views:blog-admin') +add_route('mediagoblin.media_types.blog.blog-dashboard', \ + '/u//b//blog_dashboard/', 'mediagoblin.media_types.blog.views:blog_dashboard') #URL mapping for creating a new blog post. (add blo_slug in the url at "blogpost" place later" -add_route('mediagoblin.media_types.blog.blogpost.create', '/u//b/blogpost/create/', - 'mediagoblin.media_types.blog.views:blogpost_create') +add_route('mediagoblin.media_types.blog.blogpost.create', + '/u//b//p/create/', + 'mediagoblin.media_types.blog.views:blogpost_create') #URL mapping for editing an existing blog post. -add_route('mediagoblin.media_types.blog.blogpost.edit', '/u//b/blogpost/p//edit/', - 'mediagoblin.media_types.blog.views:blogpost_edit') +add_route('mediagoblin.media_types.blog.blogpost.edit', + '/u//b//p//edit/', + 'mediagoblin.media_types.blog.views:blogpost_edit') #URL mapping for blog-collection-admin, where all the blogs of the user #are listed. providing the facility of edit, delete and view a blog. From 06aca6af7368dc3d59e37ec2f0c731d4df756ae8 Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 22 Jul 2013 19:15:06 +0530 Subject: [PATCH 040/140] Write template for blog_dashboard. --- .../blog/blog_admin_dashboard.html | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html diff --git a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html new file mode 100644 index 00000000..f4f4b156 --- /dev/null +++ b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html @@ -0,0 +1,54 @@ +{# +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +#} + +{% extends "mediagoblin/base.html" %} + +{% block title -%} +{{blog.title}} Dashboard — {{ super() }} +{%- endblock title %} + +{% block mediagoblin_content %} +

{{blog.title}} Dashboard

+

+ {{blog.description}} +

+

Blog Post Entries

+ {% if blog_post_count!=0 %} + + + + + + + + {% for blog_post in blog_posts_list %} + + + + + + + {% endfor %} +
IDUserTitlesubmitted
{{ blog_post.id }}{{ blog_post.get_uploader.username }}{{ blog_post.title }}{{ blog_post.created.strftime("%F %R") }}
+ {% else %} + {% trans %} No blog post yet. {% endtrans %} + {% endif %} +{% endblock %} + + + From 9a5f8b37a3bf4f800212c7d64d4891f16ffabb03 Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 24 Jul 2013 15:34:51 +0530 Subject: [PATCH 041/140] Add 'Add Blog Post' button on blog dashboard. --- .../templates/mediagoblin/blog/blog_admin_dashboard.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html index f4f4b156..45da73a9 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html @@ -27,6 +27,10 @@

{{blog.description}}

+ + +{%- trans %}Add Blog Post{% endtrans -%} +

Blog Post Entries

{% if blog_post_count!=0 %} From 500cb7f91c106757f3efd7f1f8b58574e188c10a Mon Sep 17 00:00:00 2001 From: Aditi Date: Thu, 25 Jul 2013 13:17:44 +0530 Subject: [PATCH 042/140] Add edit url for each blog post. --- .../templates/mediagoblin/blog/blog_admin_dashboard.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html index 45da73a9..4effaf01 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html @@ -36,16 +36,17 @@
- + {% for blog_post in blog_posts_list %} - + + {% endfor %}
IDUser Title submitted
{{ blog_post.id }}{{ blog_post.get_uploader.username }} {{ blog_post.title }} {{ blog_post.created.strftime("%F %R") }}Edit
From 0ccfedf8a11b2b0d50e39b07f3661269cb6315d1 Mon Sep 17 00:00:00 2001 From: Aditi Date: Thu, 25 Jul 2013 13:21:35 +0530 Subject: [PATCH 043/140] Change edit url to a button for each blog post. --- .../templates/mediagoblin/blog/blog_admin_dashboard.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html index 4effaf01..290b5944 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html @@ -46,7 +46,7 @@ {{ blog_post.title }} {{ blog_post.created.strftime("%F %R") }} - Edit + Edit {% endfor %} From bed960cba98988ff953ce7bd3b4996af5d4bc18a Mon Sep 17 00:00:00 2001 From: Aditi Date: Thu, 25 Jul 2013 15:00:31 +0530 Subject: [PATCH 044/140] Fix blog extraction for get and post both type of requests. --- mediagoblin/media_types/blog/views.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index d4c78b4d..91688f09 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -85,10 +85,10 @@ def blog_edit(request): user=request.user.username) - + #Blog already exists. else: + blog = Blog.query.filter_by(slug=blog_slug).first() if request.method == 'GET': - blog = Blog.query.filter_by(slug=blog_slug).first() defaults = dict( title = blog.title, description = blog.description, @@ -119,8 +119,11 @@ def blogpost_create(request): form = blog_forms.BlogPostEditForm(request.form, license=request.user.license_preference) - + if request.method == 'POST' and form.validate(): + + _log.info(request.form['status']) + blog_slug = request.matchdict.get('blog_slug') blog = request.db.Blog.query.filter_by(slug=blog_slug, author=request.user.id).first() @@ -220,9 +223,7 @@ def blog_dashboard(request): 'blog_slug':blog_slug, 'blog':blog, 'blog_post_count':blog_post_count - }) - - + }) From c29e790d57619ff25fb3441c346587daeb5e62db Mon Sep 17 00:00:00 2001 From: Aditi Date: Thu, 25 Jul 2013 15:04:05 +0530 Subject: [PATCH 045/140] Remove action url from form action. --- mediagoblin/templates/mediagoblin/blog/blog_edit_create.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html b/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html index 7f9b0cb5..c40cc34d 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html @@ -20,7 +20,7 @@ {% import "/mediagoblin/utils/wtforms.html" as wtforms_util %} {% block mediagoblin_content %} -

{% trans %}Create/Edit a Blog{% endtrans %}

From 8f6a0bf44e83bab9b0d2c4dc9177a8f28b7fb19c Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 29 Jul 2013 11:08:03 +0530 Subject: [PATCH 046/140] Change Redirect url to blog dashboard in blog_edit view. --- mediagoblin/media_types/blog/views.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index 91688f09..b353b690 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -77,8 +77,9 @@ def blog_edit(request): blog.generate_slug() blog.save() - return redirect(request, "mediagoblin.user_pages.user_home", - user=request.user.username) + return redirect(request, "mediagoblin.media_types.blog.blog-dashboard", + user=request.user.username, + blog_slug=blog.slug) else: add_message(request, ERROR, "You can not create any more blogs") return redirect(request, "mediagoblin.user_pages.user_home", @@ -111,8 +112,9 @@ def blog_edit(request): blog.save() add_message(request, SUCCESS, "Your blog is updated.") - return redirect(request, "mediagoblin.user_pages.user_home", - user=request.user.username) + return redirect(request, "mediagoblin.media_types.blog.blog-dashboard", + user=request.user.username, + blog_slug=blog.slug) @require_active_login def blogpost_create(request): @@ -163,8 +165,8 @@ def blogpost_create(request): @require_active_login def blogpost_edit(request): - blog_slug = request.matchdict.get('blog_slug') - blog_post_slug = request.matchdict.get('blog_post_slug') + blog_slug = request.matchdict.get('blog_slug', None) + blog_post_slug = request.matchdict.get('blog_post_slug', None) blog = request.db.Blog.query.filter_by(slug=blog_slug, author=request.user.id).first() blog_post_data = request.db.BlogPostData.query.filter_by(blog=blog.id).first() From 221cde571104ae4b7f5c6d47a2ddd21dc9550149 Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 29 Jul 2013 13:27:30 +0530 Subject: [PATCH 047/140] Fix error in blog edit view. --- mediagoblin/media_types/blog/views.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index b353b690..1d7788cb 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -167,11 +167,8 @@ def blogpost_create(request): def blogpost_edit(request): blog_slug = request.matchdict.get('blog_slug', None) blog_post_slug = request.matchdict.get('blog_post_slug', None) - + blogpost = request.db.MediaEntry.query.filter_by(slug=blog_post_slug, uploader=request.user.id).first() blog = request.db.Blog.query.filter_by(slug=blog_slug, author=request.user.id).first() - blog_post_data = request.db.BlogPostData.query.filter_by(blog=blog.id).first() - - blogpost = blog_post_data.get_media_entry defaults = dict( title = blogpost.title, From 47b0c3160e750b1250fb2162b3deec9faea46736 Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 29 Jul 2013 18:00:02 +0530 Subject: [PATCH 048/140] Add Blog Edit button. --- .../mediagoblin/blog/blog_admin_dashboard.html | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html index 290b5944..8fe4133d 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html @@ -23,14 +23,19 @@ {%- endblock title %} {% block mediagoblin_content %} -

{{blog.title}} Dashboard

+

{{blog.title}}

{{blog.description}}

- - +

+ {%- trans %}Add Blog Post{% endtrans -%} +· + +{%- trans %}Edit Blog{% endtrans -%} + +

Blog Post Entries

{% if blog_post_count!=0 %} @@ -46,7 +51,11 @@ - + + {% endfor %}
{{ blog_post.title }} {{ blog_post.created.strftime("%F %R") }} EditEdit + Delete +
From b5ae96851c12b7fdc81727ee385900b4c8324ee3 Mon Sep 17 00:00:00 2001 From: Aditi Date: Tue, 30 Jul 2013 15:26:11 +0530 Subject: [PATCH 049/140] Add feature: redirect to 404 error if blog or blog post slug do not exist. --- mediagoblin/media_types/blog/views.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index 1d7788cb..85e6aed2 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -82,8 +82,9 @@ def blog_edit(request): blog_slug=blog.slug) else: add_message(request, ERROR, "You can not create any more blogs") - return redirect(request, "mediagoblin.user_pages.user_home", - user=request.user.username) + return redirect(request, "mediagoblin.media_types.blog.blog-dashboard", + user=request.user.username, + blog_slug=blog.slug) #Blog already exists. @@ -167,9 +168,13 @@ def blogpost_create(request): def blogpost_edit(request): blog_slug = request.matchdict.get('blog_slug', None) blog_post_slug = request.matchdict.get('blog_post_slug', None) + blogpost = request.db.MediaEntry.query.filter_by(slug=blog_post_slug, uploader=request.user.id).first() blog = request.db.Blog.query.filter_by(slug=blog_slug, author=request.user.id).first() - + + if not blogpost or not blog: + return render_404(request) + defaults = dict( title = blogpost.title, description = blogpost.description, @@ -201,11 +206,17 @@ def blogpost_edit(request): @require_active_login def blog_dashboard(request): + + url_user = request.matchdict.get('user') blog_posts_list = [] blog_slug = request.matchdict.get('blog_slug') _log.info(blog_slug) blog = request.db.Blog.query.filter_by(slug=blog_slug).first() + + if not blog: + return render_404(request) + blog_post_data = request.db.BlogPostData.query.filter_by(blog=blog.id).all() for each_blog_post_data in blog_post_data: From 0a2da087e7148e72eabeaee8b3a398f0de2f0a7a Mon Sep 17 00:00:00 2001 From: Aditi Date: Tue, 30 Jul 2013 15:32:21 +0530 Subject: [PATCH 050/140] Add temporary blogpost display template. --- .../mediagoblin/media_displays/blogpost.html | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 mediagoblin/templates/mediagoblin/media_displays/blogpost.html diff --git a/mediagoblin/templates/mediagoblin/media_displays/blogpost.html b/mediagoblin/templates/mediagoblin/media_displays/blogpost.html new file mode 100644 index 00000000..b96ab34b --- /dev/null +++ b/mediagoblin/templates/mediagoblin/media_displays/blogpost.html @@ -0,0 +1,33 @@ +{# +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +#} + +{% extends 'mediagoblin/user_pages/media.html' %} + +{% block mediagoblin_head %} + {{ super() }} +{% endblock %} + +{% block mediagoblin_media %} +

{{media.title}}

+

{{media.description}}

+ +{% endblock %} + + + + From 7b23b1e58b71008f21a1130780fc91998acc58ea Mon Sep 17 00:00:00 2001 From: Aditi Date: Tue, 30 Jul 2013 15:56:57 +0530 Subject: [PATCH 051/140] Change blogpost_create redirect url. --- mediagoblin/media_types/blog/views.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index 85e6aed2..80b64798 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -153,8 +153,9 @@ def blogpost_create(request): add_message(request, SUCCESS, _('Woohoo! Submitted!')) add_comment_subscription(request.user, blogpost) - return redirect(request, "mediagoblin.user_pages.user_home", - user=request.user.username) + return redirect(request, "mediagoblin.media_types.blog.blog-dashboard", + user=request.user.username, + blog_slug=blog.slug) return render_to_response( request, From f2a17ed6a7ad118eaea1e7adced44a38e29f0225 Mon Sep 17 00:00:00 2001 From: Aditi Date: Tue, 30 Jul 2013 18:48:41 +0530 Subject: [PATCH 052/140] Add tinymce in head for description field of blog, blogpost edit and create templates. --- mediagoblin/templates/mediagoblin/extra_head.html | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mediagoblin/templates/mediagoblin/extra_head.html b/mediagoblin/templates/mediagoblin/extra_head.html index 973e2b48..513a03bc 100644 --- a/mediagoblin/templates/mediagoblin/extra_head.html +++ b/mediagoblin/templates/mediagoblin/extra_head.html @@ -17,3 +17,12 @@ -#} {# Add extra head declarations here for your theme, if appropriate #} + + + From d59a4b2da0b731de35b81de0606da4eefee127f3 Mon Sep 17 00:00:00 2001 From: Aditi Date: Tue, 30 Jul 2013 18:49:55 +0530 Subject: [PATCH 053/140] Manually render form fields for the integration of tinymce. --- .../templates/mediagoblin/blog/blog_edit_create.html | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html b/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html index c40cc34d..b09a7cd9 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html @@ -24,7 +24,14 @@ method="POST" enctype="multipart/form-data">

{% trans %}Create/Edit a Blog{% endtrans %}

- {{ wtforms_util.render_divs(form) }} + Title +
+

{{ form.title}}

+
+ Description +
+

{{form.description}}

+
{{ csrf_token }} From 59e5c448e90b39cad9895b851a6fd25caa5de509 Mon Sep 17 00:00:00 2001 From: Aditi Date: Tue, 30 Jul 2013 18:58:17 +0530 Subject: [PATCH 054/140] Reverse order of blog posts on blog dashboard. --- mediagoblin/media_types/blog/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index 80b64798..7ab46892 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -224,6 +224,7 @@ def blog_dashboard(request): blog_post = each_blog_post_data.get_media_entry if blog_post: blog_posts_list.append(blog_post) + blog_posts_list.reverse() blog_post_count = len(blog_posts_list) if may_edit_blogpost(request, blog): From 46e0bba3dac5395a286b05f1573584755ceaf068 Mon Sep 17 00:00:00 2001 From: Aditi Date: Tue, 30 Jul 2013 19:01:17 +0530 Subject: [PATCH 055/140] Remove ID of the blog post. --- .../templates/mediagoblin/blog/blog_admin_dashboard.html | 2 -- 1 file changed, 2 deletions(-) diff --git a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html index 8fe4133d..4b9a019d 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html @@ -40,14 +40,12 @@ {% if blog_post_count!=0 %} - {% for blog_post in blog_posts_list %} - From ec1d5a4e8ef85c9c5bcddbbb12b55068f56d078e Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 31 Jul 2013 14:04:16 +0530 Subject: [PATCH 056/140] Add blog post state field to blog dashboard. --- .../blog/blog_admin_dashboard.html | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html index 4b9a019d..c45f0e30 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html @@ -28,11 +28,17 @@ {{blog.description}}

- + {% set blogpost_create_url = request.urlgen('mediagoblin.media_types.blog.blogpost.create', + blog_slug=blog.slug, + user=request.user.username) %} + {%- trans %}Add Blog Post{% endtrans -%} · - + {% set blog_edit_url = request.urlgen('mediagoblin.media_types.blog.edit', + blog_slug=blog.slug, + user=request.user.username) %} + {%- trans %}Edit Blog{% endtrans -%}

@@ -42,15 +48,17 @@
- + {% for blog_post in blog_posts_list %} - - + {% set blogpost_edit_url = request.urlgen('mediagoblin.media_types.blog.blogpost.edit', + blog_slug=blog.slug, user=request.user.username, + blog_post_slug=blog_post.slug) %} + From 2867663d8719a9e2110e4f3dfc89d52d84f214bc Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 31 Jul 2013 14:06:31 +0530 Subject: [PATCH 057/140] Change div class for wider firm fields. --- .../templates/mediagoblin/blog/blog_edit_create.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html b/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html index b09a7cd9..fbed93db 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html @@ -22,14 +22,14 @@ {% block mediagoblin_content %} -
+

{% trans %}Create/Edit a Blog{% endtrans %}

Title -
+

{{ form.title}}

Description -
+

{{form.description}}

From fc52268fbede0eff13a94eae9b7b7a341817e0ab Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 31 Jul 2013 14:08:12 +0530 Subject: [PATCH 058/140] Integrate tinymce, Draft status. --- .../blog/blog_post_edit_create.html | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html b/mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html index b422f129..b380d44c 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html @@ -25,12 +25,28 @@ {% block mediagoblin_content %} -
-

{% trans %}Create a blog post.{% endtrans %}

- {{ wtforms_util.render_divs(form) }} +
+

{% trans %}Create a Blog Post.{% endtrans %}

+ Title +
+

{{ form.title}}

+
+ Description +
+

{{form.description|safe}}

+
+ Tags +
+

{{form.tags}}

+
+ License +
+

{{form.license}}

+
{{ csrf_token }} +
From 36c7c131859daabdd7cb7f2b76ea26fd04b36d9e Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 31 Jul 2013 14:09:47 +0530 Subject: [PATCH 059/140] Fix size and selector for tinymce. --- mediagoblin/templates/mediagoblin/extra_head.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mediagoblin/templates/mediagoblin/extra_head.html b/mediagoblin/templates/mediagoblin/extra_head.html index 513a03bc..57b34820 100644 --- a/mediagoblin/templates/mediagoblin/extra_head.html +++ b/mediagoblin/templates/mediagoblin/extra_head.html @@ -22,7 +22,9 @@ src="{{request.staticdirect('/tinymce/jscripts/tiny_mce/tiny_mce.js')}}"> From f506419c8961beaab2d97c300a0f1c115ebc14e6 Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 31 Jul 2013 14:10:50 +0530 Subject: [PATCH 060/140] Add Url for blog post listing. --- mediagoblin/media_types/blog/routing.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/mediagoblin/media_types/blog/routing.py b/mediagoblin/media_types/blog/routing.py index 2f879d20..b34c8280 100644 --- a/mediagoblin/media_types/blog/routing.py +++ b/mediagoblin/media_types/blog/routing.py @@ -37,11 +37,6 @@ add_route('mediagoblin.media_types.blog.blogpost.edit', add_route('mediagoblin.media_types.blog.blog-collection-admin', \ '/u//blog-collection-admin/', 'mediagoblin.media_types.blog.views:blog-collection-admin') -##URL mapping for creating a new blog. -#add_route('mediagoblin.media_types.blog.create', '/u//b/create/', - #'mediagoblin.media_types.blog.views:blog_create') - - #URL mapping for creating a new blog. add_route('mediagoblin.media_types.blog.create', '/u//b/create/', 'mediagoblin.media_types.blog.views:blog_edit') @@ -51,7 +46,9 @@ add_route('mediagoblin.media_types.blog.create', '/u//b/create/', add_route('mediagoblin.media_types.blog.edit', '/u//b//edit/', 'mediagoblin.media_types.blog.views:blog_edit') -#route for gallery view of blog posts and blogs. +#URL mapping for blog_post_listing view. +add_route('mediagoblin.media_types.blog.blog_post_listing', '/u//b/', + 'mediagoblin.media_types.blog.views:blog_post_listing') From 3e329412993722ad121aab88927d70799286a8a0 Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 31 Jul 2013 14:33:56 +0530 Subject: [PATCH 061/140] Add Draft feature and add view blog_post_listing. --- mediagoblin/media_types/blog/views.py | 45 ++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index 7ab46892..44f61f0f 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -37,7 +37,8 @@ from mediagoblin.tools.response import (render_to_response, from mediagoblin.tools.translate import pass_to_ugettext as _ from mediagoblin.tools.template import render_template from mediagoblin.tools.text import ( - convert_to_tag_list_of_dicts, media_tags_as_string) + convert_to_tag_list_of_dicts, media_tags_as_string, clean_html, + cleaned_markdown_conversion) from mediagoblin.tools.url import slugify from mediagoblin.db.util import check_media_slug_used, check_collection_slug_used @@ -81,6 +82,8 @@ def blog_edit(request): user=request.user.username, blog_slug=blog.slug) else: + #the case when max blog count is one. + blog = request.db.Blog.query.filter_by(author=request.user.id).first() add_message(request, ERROR, "You can not create any more blogs") return redirect(request, "mediagoblin.media_types.blog.blog-dashboard", user=request.user.username, @@ -125,7 +128,9 @@ def blogpost_create(request): if request.method == 'POST' and form.validate(): - _log.info(request.form['status']) + state_value = request.form['status'] + if state_value == u'Publish': + state_value = u'processed' blog_slug = request.matchdict.get('blog_slug') blog = request.db.Blog.query.filter_by(slug=blog_slug, @@ -139,7 +144,7 @@ def blogpost_create(request): blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data) blogpost.license = unicode(form.license.data) or None blogpost.uploader = request.user.id - blogpost.state = 'processed' + blogpost.state = state_value blogpost.generate_slug() @@ -184,17 +189,23 @@ def blogpost_edit(request): form = blog_forms.BlogPostEditForm(request.form, **defaults) if request.method == 'POST' and form.validate(): + + state_value = request.form['status'] + if state_value == u'Publish': + state_value = u'processed' blogpost.title = unicode(form.title.data) blogpost.description = unicode(form.description.data) blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data) blogpost.license = unicode(form.license.data) blogpost.generate_slug() + blogpost.state = state_value blogpost.save() add_message(request, SUCCESS, _('Woohoo! edited blogpost is submitted')) - return redirect(request, "mediagoblin.user_pages.user_home", - user=request.user.username) + return redirect(request, "mediagoblin.media_types.blog.blog-dashboard", + user=request.user.username, + blog_slug=blog.slug) return render_to_response( request, @@ -237,6 +248,30 @@ def blog_dashboard(request): 'blog_post_count':blog_post_count }) +#supposed to list all the blog posts not just belonging to a particular post. +def blog_post_listing(request): + + blog_owner = request.matchdict.get('user') + _log.info("Username is %s"%(blog_owner)) + owner_user = User.query.filter_by(username=blog_owner).one() + + if not owner_user: + return render_404(request) + + all_blog_posts = MediaEntry.query.filter_by( + uploader=owner_user.id, media_type='mediagoblin.media_types.blogpost', + state=u'processed').all() + all_blog_posts.reverse() + _log.info(len(all_blog_posts)) + + return render_to_response( + request, + 'mediagoblin/blog/blog_post_listing.html', + {'blog_posts': all_blog_posts, + 'blog_owner': blog_owner + }) + + From ed46df89aa8f319c6958a8101309374b2312eaf1 Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 31 Jul 2013 14:37:00 +0530 Subject: [PATCH 062/140] Add elements for blog system. --- mediagoblin/static/css/base.css | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/mediagoblin/static/css/base.css b/mediagoblin/static/css/base.css index 84d274d1..85027d77 100644 --- a/mediagoblin/static/css/base.css +++ b/mediagoblin/static/css/base.css @@ -288,6 +288,20 @@ text-align: center; max-width: 460px; } +.blog_form_box_xl { + background-color: #222; + border-top: 6px solid #D49086; + padding: 3% 5%; + display: block; + float: none; + width: 90%; + max-width: 700px; + min-height: 500px; + margin-left: auto; + margin-right: auto; +} + + .edit_box { border-top: 6px dashed #D49086 } @@ -296,6 +310,10 @@ text-align: center; width: 100%; } +.blog_form_field_input input, .blog_form_field_input textarea { + width: 100%; +} + .form_field_input { margin-bottom: 10px; } From 5955e619c00d8910653b7d35b1b9c08fe8653921 Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 31 Jul 2013 14:38:00 +0530 Subject: [PATCH 063/140] Change field name to description. --- mediagoblin/media_types/blog/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediagoblin/media_types/blog/forms.py b/mediagoblin/media_types/blog/forms.py index 3b279071..9f595fcf 100644 --- a/mediagoblin/media_types/blog/forms.py +++ b/mediagoblin/media_types/blog/forms.py @@ -23,7 +23,7 @@ from mediagoblin.tools.licenses import licenses_as_choices class BlogPostEditForm(wtforms.Form): title = wtforms.TextField(_('Title'), [wtforms.validators.Length(min=0, max=500)]) - description = wtforms.TextAreaField(_('Content')) + description = wtforms.TextAreaField(_('Description')) tags = wtforms.TextField(_('Tags'), [tag_length_validator], description="Seperate tags by commas.") license = wtforms.SelectField(_('License'), From ef010b6453d1a4152abe6869b0b019ee1fb3dc6b Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 31 Jul 2013 16:14:26 +0530 Subject: [PATCH 064/140] Update version on tinymce. --- mediagoblin/templates/mediagoblin/extra_head.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediagoblin/templates/mediagoblin/extra_head.html b/mediagoblin/templates/mediagoblin/extra_head.html index 57b34820..176a77da 100644 --- a/mediagoblin/templates/mediagoblin/extra_head.html +++ b/mediagoblin/templates/mediagoblin/extra_head.html @@ -19,7 +19,7 @@ {# Add extra head declarations here for your theme, if appropriate #} + src="{{request.staticdirect('/tinymce/js/tinymce/tinymce.min.js')}}"> '); + tinymce.ScriptLoader.markDone(u); + } + } + }, + + /** + * Executes a color picker on the specified element id. When the user + * then selects a color it will be set as the value of the specified element. + * + * @method pickColor + * @param {DOMEvent} e DOM event object. + * @param {string} element_id Element id to be filled with the color value from the picker. + */ + pickColor : function(e, element_id) { + this.execCommand('mceColorPicker', true, { + color : document.getElementById(element_id).value, + func : function(c) { + document.getElementById(element_id).value = c; + + try { + document.getElementById(element_id).onchange(); + } catch (ex) { + // Try fire event, ignore errors + } + } + }); + }, + + /** + * Opens a filebrowser/imagebrowser this will set the output value from + * the browser as a value on the specified element. + * + * @method openBrowser + * @param {string} element_id Id of the element to set value in. + * @param {string} type Type of browser to open image/file/flash. + * @param {string} option Option name to get the file_broswer_callback function name from. + */ + openBrowser : function(element_id, type, option) { + tinyMCEPopup.restoreSelection(); + this.editor.execCallback('file_browser_callback', element_id, document.getElementById(element_id).value, type, window); + }, + + /** + * Creates a confirm dialog. Please don't use the blocking behavior of this + * native version use the callback method instead then it can be extended. + * + * @method confirm + * @param {String} t Title for the new confirm dialog. + * @param {function} cb Callback function to be executed after the user has selected ok or cancel. + * @param {Object} s Optional scope to execute the callback in. + */ + confirm : function(t, cb, s) { + this.editor.windowManager.confirm(t, cb, s, window); + }, + + /** + * Creates a alert dialog. Please don't use the blocking behavior of this + * native version use the callback method instead then it can be extended. + * + * @method alert + * @param {String} t Title for the new alert dialog. + * @param {function} cb Callback function to be executed after the user has selected ok. + * @param {Object} s Optional scope to execute the callback in. + */ + alert : function(tx, cb, s) { + this.editor.windowManager.alert(tx, cb, s, window); + }, + + /** + * Closes the current window. + * + * @method close + */ + close : function() { + var t = this; + + // To avoid domain relaxing issue in Opera + function close() { + t.editor.windowManager.close(window); + tinymce = tinyMCE = t.editor = t.params = t.dom = t.dom.doc = null; // Cleanup + }; + + if (tinymce.isOpera) + t.getWin().setTimeout(close, 0); + else + close(); + }, + + // Internal functions + + _restoreSelection : function() { + var e = window.event.srcElement; + + if (e.nodeName == 'INPUT' && (e.type == 'submit' || e.type == 'button')) + tinyMCEPopup.restoreSelection(); + }, + +/* _restoreSelection : function() { + var e = window.event.srcElement; + + // If user focus a non text input or textarea + if ((e.nodeName != 'INPUT' && e.nodeName != 'TEXTAREA') || e.type != 'text') + tinyMCEPopup.restoreSelection(); + },*/ + + _onDOMLoaded : function() { + var t = tinyMCEPopup, ti = document.title, bm, h, nv; + + // Translate page + if (t.features.translate_i18n !== false) { + h = document.body.innerHTML; + + // Replace a=x with a="x" in IE + if (tinymce.isIE) + h = h.replace(/ (value|title|alt)=([^"][^\s>]+)/gi, ' $1="$2"') + + document.dir = t.editor.getParam('directionality',''); + + if ((nv = t.editor.translate(h)) && nv != h) + document.body.innerHTML = nv; + + if ((nv = t.editor.translate(ti)) && nv != ti) + document.title = ti = nv; + } + + if (!t.editor.getParam('browser_preferred_colors', false) || !t.isWindow) + t.dom.addClass(document.body, 'forceColors'); + + document.body.style.display = ''; + + // Restore selection in IE when focus is placed on a non textarea or input element of the type text + if (tinymce.isIE) { + document.attachEvent('onmouseup', tinyMCEPopup._restoreSelection); + + // Add base target element for it since it would fail with modal dialogs + t.dom.add(t.dom.select('head')[0], 'base', {target : '_self'}); + } + + t.restoreSelection(); + t.resizeToInnerSize(); + + // Set inline title + if (!t.isWindow) + t.editor.windowManager.setTitle(window, ti); + else + window.focus(); + + if (!tinymce.isIE && !t.isWindow) { + t.dom.bind(document, 'focus', function() { + t.editor.windowManager.focus(t.id); + }); + } + + // Patch for accessibility + tinymce.each(t.dom.select('select'), function(e) { + e.onkeydown = tinyMCEPopup._accessHandler; + }); + + // Call onInit + // Init must be called before focus so the selection won't get lost by the focus call + tinymce.each(t.listeners, function(o) { + o.func.call(o.scope, t.editor); + }); + + // Move focus to window + if (t.getWindowArg('mce_auto_focus', true)) { + window.focus(); + + // Focus element with mceFocus class + tinymce.each(document.forms, function(f) { + tinymce.each(f.elements, function(e) { + if (t.dom.hasClass(e, 'mceFocus') && !e.disabled) { + e.focus(); + return false; // Break loop + } + }); + }); + } + + document.onkeyup = tinyMCEPopup._closeWinKeyHandler; + }, + + _accessHandler : function(e) { + e = e || window.event; + + if (e.keyCode == 13 || e.keyCode == 32) { + var elm = e.target || e.srcElement; + + if (elm.onchange) + elm.onchange(); + + return tinymce.dom.Event.cancel(e); + } + }, + + _closeWinKeyHandler : function(e) { + e = e || window.event; + + if (e.keyCode == 27) + tinyMCEPopup.close(); + }, + + _eventProxy: function(id) { + return function(evt) { + tinyMCEPopup.dom.events.callNativeHandler(id, evt); + }; + } +}; + +tinyMCEPopup.init(); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/compat3x/validate.js b/mediagoblin/static/tinymce/js/tinymce/plugins/compat3x/validate.js new file mode 100644 index 00000000..d13aaa1b --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/compat3x/validate.js @@ -0,0 +1,252 @@ +/** + * validate.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/** + // String validation: + + if (!Validator.isEmail('myemail')) + alert('Invalid email.'); + + // Form validation: + + var f = document.forms['myform']; + + if (!Validator.isEmail(f.myemail)) + alert('Invalid email.'); +*/ + +var Validator = { + isEmail : function(s) { + return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$'); + }, + + isAbsUrl : function(s) { + return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$'); + }, + + isSize : function(s) { + return this.test(s, '^[0-9.]+(%|in|cm|mm|em|ex|pt|pc|px)?$'); + }, + + isId : function(s) { + return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$'); + }, + + isEmpty : function(s) { + var nl, i; + + if (s.nodeName == 'SELECT' && s.selectedIndex < 1) + return true; + + if (s.type == 'checkbox' && !s.checked) + return true; + + if (s.type == 'radio') { + for (i=0, nl = s.form.elements; i parseInt(v)) + st = this.mark(f, n); + } + } + + return st; + }, + + hasClass : function(n, c, d) { + return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className); + }, + + getNum : function(n, c) { + c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0]; + c = c.replace(/[^0-9]/g, ''); + + return c; + }, + + addClass : function(n, c, b) { + var o = this.removeClass(n, c); + n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c; + }, + + removeClass : function(n, c) { + c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' '); + return n.className = c != ' ' ? c : ''; + }, + + tags : function(f, s) { + return f.getElementsByTagName(s); + }, + + mark : function(f, n) { + var s = this.settings; + + this.addClass(n, s.invalid_cls); + n.setAttribute('aria-invalid', 'true'); + this.markLabels(f, n, s.invalid_cls); + + return false; + }, + + markLabels : function(f, n, ic) { + var nl, i; + + nl = this.tags(f, "label"); + for (i=0; iKx}s1_F$4FCWDA^8LW0018VEC2ui01^Na000Hw;3tYzX_jM3Qpv$_M?zI9i5=0S zX-{-uv=l3%&P0s%m9Ox_a(m_c|u z01g3U0`Wll5)poVdma=N8y<3f0Sf~hXmTC}2oxMW4FdxUj+z4<0}lrX2nP=qkDRIt z9Ge*(qzMrj3jrIOjvI{`5eWzt3`G_T8yChG8w(a19SkK12@M(+799Zr9n=~PzBCmA z5)BU-)YKUd4H5!D9|!^o9kWIe9SH(WDHRk92}DZ?3})2$P@$55g90f0N)ZA8JID5J Aw*UYD literal 0 HcmV?d00001 diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-cry.gif b/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-cry.gif new file mode 100644 index 0000000000000000000000000000000000000000..74d897a4f6d22e814e2b054e98b8a75fb464b4be GIT binary patch literal 329 zcmV-P0k-}}Nk%w1VG;lm0Mr-&E)xPSit@9T3%;vR+|V+?t0A(pllJjXrMl7n=_A_a za^B+Su$LjvyC3@TIQZNZa##w=!k(SO^P#bO*w(eU#;{U83XFCU_V)J5wrb+;g2vkN z#>U24qVoOvY5)KLA^8LW0018VEC2ui01^Na000HX;3tY$X_jM3QUfCh%s^o(nF++< zc?Th6v=oL>*by8K!mhvwelUXuuW&&U9iGO3hM@>Njw{l^#0q9mWpcefdI;O$;efnY zkd~@r-o$*74FCWI1%d((4+jDz0va0>69^fI6%`W{8w!gU1pyL>prH>E0R<%k6Aq%H z4ij+^9TEwM5P}eh2@)L<~6+>@EpxfA0YrcPNsSu literal 0 HcmV?d00001 diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-embarassed.gif b/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-embarassed.gif new file mode 100644 index 0000000000000000000000000000000000000000..963a96b8a7593b1d8bcbab073abe5ee4e539dbf6 GIT binary patch literal 331 zcmV-R0kr-{Nk%w1VG;lm0MrryDh>j~yq&6%75dW~z^P39(NxsGDE{UkxtkIEq(S-a zRKlwv+S=Lr?>hbYY~sQ?c3T&ZcN_Nh_EU3s(>Io6B&>WW`@bsw**)Ocy1bht z{*G6|uwwqUQ2+n{A^8LW0018VEC2ui01^Na000HZ;3tYwX_jM3YQ!c88=*-m*&&bO zILd=`w3KAC;8hxpif*w9ek6oqV-Z0L77fROK$BSR@5BAv-%C>6y>>#+D4e#&nz^qMDItlpp zTG728+|V&?R13PIEBW(C`uh6d*t-1sZ^XQv;oDD}iYLOV7uVO;{`xl4#4tJ{0;h@! z>)kdc3IhA?Hvj+tA^8La0018VEC2ui01^Na06+!P;3tYuX_ljS7!u|-O)I}TzP1q%xT4HOFwMJaO;2ml)!00$)141pU08x3594IX?4 o5YuAA8yXz~76K1c;3^jg77WP185Rf^u}23N0sR5^q(T4yJ1sVN5dZ)H literal 0 HcmV?d00001 diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-frown.gif b/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-frown.gif new file mode 100644 index 0000000000000000000000000000000000000000..716f55e161bfebb1c3d34f0b0f40c177fc82c30b GIT binary patch literal 340 zcmV-a0jvH;Nk%w1VG;lm0MroxK_>;q#>Sw62=mns-On=0wransPVevT^YK{Dy(0YY zH)vE6x0?;Wqb>gZas1^OT0si>`ugD5y87}*#H$s=yq(wA*8cf7{`y+(+9J7|9QfT7 z`ROHiU=Y&6FaQ7mA^8LW0018VEC2ui01^Na000Hi;3tYvX_jM3N`@u~nju9hSuh^r zIEcp-wA7(NL0~2d#RP+(G!CPPA>o*KJjv_CkucCA5=K?AfF#RG2V*8BU@jL304|4P z2;PGRF@bj$et;Jf2pR_mVsIA<85|n}kQ*Bq42Ovqj*yy>6P0=h3X&9Z01yyk~2N4w%7#RW^55W%`0vQ+-6(y_*2pqz~90*;x9}yM}%$UI(7t#$D mK_3Se1{4HKM+6iG7EmeH6$V631{L5n)#CyC0qx-*Apkoyg?w!Q literal 0 HcmV?d00001 diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-innocent.gif b/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-innocent.gif new file mode 100644 index 0000000000000000000000000000000000000000..334d49e0e60f2997c9ba24071764f95d9e08a5cc GIT binary patch literal 336 zcmV-W0k8f?Nk%w1VG;lm0MrryI4TI-%dP0m5~*+Y`T~ z7Rth){q{I_X%*S48uRZ|(b3V&wIKTX`u+WJzo<^$#wuY;3W|Cf{O29IkTAcaE&lpe z+P*^H)-tknA^-pYA^8LW0018VEC2ui01^Na000He;3tYwX_n)75QgVvNQ`6#5gcMm zEEG~blgXokptKAJgCU?%JT?yos!R6cPtcQWh2siHlNI2L}ifQhgX02^InZ2?-ktkqVRyZJY^Trk|lv zovp437?1~d46O)?2(1i+2NDYk8<+_Kil!K!3njA^!I#dL8x<729}*B65mC=m5gHH@ iDi9P3f*VjB3KS4HDb_qqRul{0DIT=Nk%w1VG;lm0Mrx!QauaC#>Vb6G=_5=^YB^9wrc376Sb5I-qJGf@9vZ# z5WlKU(!eVB+7tfnDXp0zyB`?BZ5IChalob*`uh6d*t+@dKGHcU+L|83yq*5~IoH?L zy`?Gp<{bX|SpWb4A^8LW0018VEC2ui01^Na000Hg;3tYyX_jM3R?Bl7&r(q;SsVx< zNd$5fv{ZsKA$SlL3&KN~a1tZRf*~1Ltkx9~2uL3&z-yb0WJDRY082|tP literal 0 HcmV?d00001 diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-laughing.gif b/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-laughing.gif new file mode 100644 index 0000000000000000000000000000000000000000..82c5b182e61d32bd394acae551eff180f1eebd26 GIT binary patch literal 343 zcmV-d0jT~*Nk%w1VG;lm0Q4UK!lp8=s;1-69HWK?p_PpF=Pd8~Ygtcnp*fHAL z**;z>w3iC}`fmL6IkKB1N;3zEa}&zKpsu1;_V)HocR5-{J~BcYvE`YXhBnc@CfU=! za(Ec zG>66zv=rqr;2j)}gKqE$ekcSD?}0=WLB?AWp85)qALd+P=4)6X4oXy{bw2>K^d$ z@6ERvva+(4ib~41YUkTEn1&#?rzrOHT>1I=Y*h`+%*@WtPUPg|!@EEI_d5LgZ>^Og z-qyBKJqy*wF8}}lA^8La0018VEC2ui01^Na06+!6;3tYxX_lj?7+U61R3gAaEg8x< zT>%mSfCwURnWQF&g=Q0ZxH1ulW`QtH0>O!5%iT_X0VBy_@EkOngU8?ye~=H!t21{= z9@Uj3a_UbE88~kh5Eq7rh!7QSBn1c?0|Off1&k^`5*QE<4-gmSR<4C>Dj%C>6W(lWoQPVevT^YB^Fy&h6M z4YZgH{O~qtR1(Ci8T;lQ`uh6d*t-7xar*K{#Jrulo-Wtd*44u?{`oh#n;gQXGXDEo z_}UUC3IeK%0ssI2A^8La0018VEC2ui01^Na06+!R;3tYuX_ljSEE482&%+G^XK%|f zLKbCc4u{4-u|QG~LqamSTo?@JM3OKZAr!|Z2IzP@fY`=CIg$vA3qm46TowfLCt29I z6pDKuvnf~)83+sm9yW#?9s>^(89F=~2?!W44-6Ox2^vNza}fp^9v&G65pp936%Gg+ z6HpTy2o4oGoh+>l3Q)KVQwybl2oo*<4a3D469|nfEii|MH4`}p1_cZp0ssj%2>=2d q41Na?)CpS;4gvxWVpZcR76uLludD?Q1{SnP2NnVU0rZ&)0RTIit8@_n literal 0 HcmV?d00001 diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-surprised.gif b/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-surprised.gif new file mode 100644 index 0000000000000000000000000000000000000000..0cc9bb71cca4cdeafbb248ce7e07c3708c1cbd64 GIT binary patch literal 338 zcmV-Y0j>T=Nk%w1VG;lm0Q4UK`{WwN#>SnDDC*4*{OcpiwransPVevTQacIr@mkQp zCf(06s)_=>r7UYx48o@u`uh6d*t-7rH~ji<`P&oj;5Wp)o!8ga`SV6TA_BIW5#ZWV z{`*)c32kA}f=futY?#YE7kxGD|7L}4&OEDw$hkm+~<00QS>F_H?J#bz?uEHnl42f5(9 z5O)`6Q9V2o5;YVLUK)Y`7!Nr+4GMq?85s%^2?`BGDRU798Vn2?1`%>22R{iO0u>bk z9tlA?nk*O<3zHJH6&Mp5qALj)E(mxM!Y&vII4dm@1Ov{`f*8pL3xPEVUI>D>1_uxa kNm?`6VH{N6Di;P13m6<67z+;u7qCYM7XkVK^`jvGJD~P?KL7v# literal 0 HcmV?d00001 diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-tongue-out.gif b/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-tongue-out.gif new file mode 100644 index 0000000000000000000000000000000000000000..2075dc16058f1f17912167675ce5cfb9986fc71d GIT binary patch literal 328 zcmV-O0k{4~Nk%w1VG;lm0Mrx!CJF+^#>SU@3-{U*rx+Q^wrc$ABfqLn@9*x?z8(4X zSW-O=@){bmmI~g|GQXoP);cvj3|f1M8e@{G*!tYaiCEujj1NGxRN#6#tiCETo+{x{Hkzt z5k-kPvcD=V2nbmjCgL6k{uF&2nP-t0s;w<385Nx2oxDb z9T5Pp7qJl?3Kkh9oe2sCr5F$p7zPSlsUH*@54w*83=9Or4;w)r2pcU95(FL|1Th;< aDaRQH4;Tal7#Y$v#?=Au0pHUfApkpvZg^t= literal 0 HcmV?d00001 diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-undecided.gif b/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-undecided.gif new file mode 100644 index 0000000000000000000000000000000000000000..bef7e257303f8243c89787e7a7f9955dd1f112e2 GIT binary patch literal 337 zcmV-X0j~Z>Nk%w1VG;lm0MroxDi#99#>R?y8~4}{%C>6#>?OadPVevTr-=vi@LATn z4rERY-qJF+n+?CCE&B3D{{3Shh?>WT0o%`b%*Voqm`dL;(4F35y zc485^n;g!+Bme*aA^8LW0018VEC2ui01^Na000Hf;3tYvX_jM3N=AnuogqakNi<9X zK?&0kwA8^tNn{?C$|IAYI1ZzT!2>}iuMddFK#NEkRl!7%6brJAnUs;)XcnA}TNBSP zxQ9;SvEfwYeSaGd2^|LqU~(QF1qBxr3Ii7x84ZVt8wCTKoSYAqc?p`G2onnpk`IOl z1`HLGj}riN2p1K12N4z&8IBDc6tEWs859;JtRB6>lf+xO9}yT19toMv8wnl`7(pKg j7zPv!OGgY81{hE&(iR3pP6ig;HPPS!_yOwPA0Yrc)=Yf3 literal 0 HcmV?d00001 diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-wink.gif b/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-wink.gif new file mode 100644 index 0000000000000000000000000000000000000000..0631c7616ec8624ddeee02b633326f697ee72f80 GIT binary patch literal 350 zcmV-k0ipg!Nk%w1VG;lm0Q4UK(ZVUl#>Sn03F^-g-qAA3wransPV?|t@9*x%vmQ`7 z4E*pcw3rOOq%3t@4*K#({N^40{c-yG`rz2Q!KfI-yq*61HrBop*VoqW<}&{JS@_x# zwwfF$4Fdh~IsgCwA^8La0018VEC2ui01^Na06+!X;3tYwX_ljiFp=e23$zWxW@`*G zN?2ty6iUNT!AMdPLn89IbS7WCB_mWF$+hzY-{PWkp(?(Xf;zbH~P z3jOdj?W+^YwrakfE8fyG&5jTBz!3WS`fgM_;MltQ+c}4GO8)(E`S3`@yq&d~5!ct& z)v79NObo)O7XSbNA^8LW0018VEC2ui01^Na000He;3tYwX_jM3QifI(nn6h_*=Wyk zUB{y}v=qYOIUF#R3dZPhAVv~H;(|a2yN_5FH&J0|$eJ3kw4gj1Y?v5d#>LMV12^6BYy$1)ZKA zga!|m2?POz0R)f>4+aPl8KD{gz`+G_9vLMFQU?RU!8uyH9}*i52|cC+7S0YEK_3Vk i1|APfM-Ltb8&4_H83sg61{vHn(cc000qNZzApkp'}),e+="
"}),e+="
ID Title submitted
{{ blog_post.id }} {{ blog_post.title }} {{ blog_post.created.strftime("%F %R") }}
Title submitted
{{ blog_post.title }} {{ blog_post.created.strftime("%F %R") }}Edit +
{{ blog_post.state }}
Edit Delete
"}var i=[["cool","cry","embarassed","foot-in-mouth"],["frown","innocent","kiss","laughing"],["money-mouth","sealed","smile","surprised"],["tongue-out","undecided","wink","yell"]];e.addButton("emoticons",{type:"panelbutton",popoverAlign:"bc-tl",panel:{autohide:!0,html:n,onclick:function(t){var n=e.dom.getParent(t.target,"a");n&&(e.insertContent(''),this.hide())}},tooltip:"Emoticons"})}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/example/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/example/plugin.min.js new file mode 100644 index 00000000..24a64c8e --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/example/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("example",function(e){e.addButton("example",{text:"My button",icon:!1,onclick:function(){e.windowManager.open({title:"Example plugin",body:[{type:"textbox",name:"title",label:"Title"}],onsubmit:function(t){e.insertContent("Title: "+t.data.title)}})}}),e.addMenuItem("example",{text:"Example plugin",context:"tools",onclick:function(){e.windowManager.open({title:"TinyMCE site",url:"http://www.tinymce.com",width:800,height:600,buttons:[{text:"Close",onclick:"close"}]})}})}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/example_dependency/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/example_dependency/plugin.min.js new file mode 100644 index 00000000..e61bf473 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/example_dependency/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("example_dependency",function(){},["example"]); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/fullpage/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/fullpage/plugin.min.js new file mode 100644 index 00000000..0f15de46 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/fullpage/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("fullpage",function(e){function t(){var t=n();e.windowManager.open({title:"Document properties",data:t,defaults:{type:"textbox",size:40},body:[{name:"title",label:"Title"},{name:"keywords",label:"Keywords"},{name:"description",label:"Description"},{name:"robots",label:"Robots"},{name:"author",label:"Author"},{name:"docencoding",label:"Encoding"}],onSubmit:function(e){i(tinymce.extend(t,e.data))}})}function n(){function t(e,t){var n=e.attr(t);return n||""}var n,i,r=a(),o={};return o.fontface=e.getParam("fullpage_default_fontface",""),o.fontsize=e.getParam("fullpage_default_fontsize",""),n=r.firstChild,7==n.type&&(o.xml_pi=!0,i=/encoding="([^"]+)"/.exec(n.value),i&&(o.docencoding=i[1])),n=r.getAll("#doctype")[0],n&&(o.doctype=""),n=r.getAll("title")[0],n&&n.firstChild&&(o.title=n.firstChild.value),u(r.getAll("meta"),function(e){var t,n=e.attr("name"),i=e.attr("http-equiv");n?o[n.toLowerCase()]=e.attr("content"):"Content-Type"==i&&(t=/charset\s*=\s*(.*)\s*/gi.exec(e.attr("content")),t&&(o.docencoding=t[1]))}),n=r.getAll("html")[0],n&&(o.langcode=t(n,"lang")||t(n,"xml:lang")),n=r.getAll("link")[0],n&&"stylesheet"==n.attr("rel")&&(o.stylesheet=n.attr("href")),n=r.getAll("body")[0],n&&(o.langdir=t(n,"dir"),o.style=t(n,"style"),o.visited_color=t(n,"vlink"),o.link_color=t(n,"link"),o.active_color=t(n,"alink")),o}function i(t){function n(e,t,n){e.attr(t,n?n:void 0)}function i(e){o.firstChild?o.insert(e,o.firstChild):o.append(e)}var r,o,l,c,m,f=e.dom;r=a(),o=r.getAll("head")[0],o||(c=r.getAll("html")[0],o=new d("head",1),c.firstChild?c.insert(o,c.firstChild,!0):c.append(o)),c=r.firstChild,t.xml_pi?(m='version="1.0"',t.docencoding&&(m+=' encoding="'+t.docencoding+'"'),7!=c.type&&(c=new d("xml",7),r.insert(c,r.firstChild,!0)),c.value=m):c&&7==c.type&&c.remove(),c=r.getAll("#doctype")[0],t.doctype?(c||(c=new d("#doctype",10),t.xml_pi?r.insert(c,r.firstChild):i(c)),c.value=t.doctype.substring(9,t.doctype.length-1)):c&&c.remove(),t.docencoding&&(c=null,u(r.getAll("meta"),function(e){"Content-Type"==e.attr("http-equiv")&&(c=e)}),c||(c=new d("meta",1),c.attr("http-equiv","Content-Type"),c.shortEnded=!0,i(c)),c.attr("content","text/html; charset="+t.docencoding)),c=r.getAll("title")[0],t.title?c||(c=new d("title",1),c.append(new d("#text",3)).value=t.title,i(c)):c&&c.remove(),u("keywords,description,author,copyright,robots".split(","),function(e){var n,a,o=r.getAll("meta"),l=t[e];for(n=0;n"))}function a(){return new tinymce.html.DomParser({validate:!1,root_name:"#document"}).parse(s)}function r(t){function n(e){return e.replace(/<\/?[A-Z]+/g,function(e){return e.toLowerCase()})}var i,r,l,d,m=t.content,f="",g=e.dom;t.selection||"raw"==t.format&&s||t.source_view&&e.getParam("fullpage_hide_in_source_view")||(m=m.replace(/<(\/?)BODY/gi,"<$1body"),i=m.indexOf("",i),s=n(m.substring(0,i+1)),r=m.indexOf("\n"),l=a(),u(l.getAll("style"),function(e){e.firstChild&&(f+=e.firstChild.value)}),d=l.getAll("body")[0],d&&g.setAttribs(e.getBody(),{style:d.attr("style")||"",dir:d.attr("dir")||"",vLink:d.attr("vlink")||"",link:d.attr("link")||"",aLink:d.attr("alink")||""}),g.remove("fullpage_styles"),f&&(g.add(e.getDoc().getElementsByTagName("head")[0],"style",{id:"fullpage_styles"},f),d=g.get("fullpage_styles"),d.styleSheet&&(d.styleSheet.cssText=f)))}function o(){var t,n="",i="";return e.getParam("fullpage_default_xml_pi")&&(n+='\n'),n+=e.getParam("fullpage_default_doctype",""),n+="\n\n\n",(t=e.getParam("fullpage_default_title"))&&(n+=""+t+"\n"),(t=e.getParam("fullpage_default_encoding"))&&(n+='\n'),(t=e.getParam("fullpage_default_font_family"))&&(i+="font-family: "+t+";"),(t=e.getParam("fullpage_default_font_size"))&&(i+="font-size: "+t+";"),(t=e.getParam("fullpage_default_text_color"))&&(i+="color: "+t+";"),n+="\n\n"}function l(t){t.selection||t.source_view&&e.getParam("fullpage_hide_in_source_view")||(t.content=tinymce.trim(s)+"\n"+tinymce.trim(t.content)+"\n"+tinymce.trim(c))}var s,c,u=tinymce.each,d=tinymce.html.Node;e.addCommand("mceFullPageProperties",t),e.addButton("fullpage",{title:"Document properties",cmd:"mceFullPageProperties"}),e.addMenuItem("fullpage",{text:"Document properties",cmd:"mceFullPageProperties",context:"file"}),e.on("BeforeSetContent",r),e.on("GetContent",l)}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js new file mode 100644 index 00000000..92a3b703 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("fullscreen",function(e){function t(){var e,t,n=window,i=document,a=i.body;return a.offsetWidth&&(e=a.offsetWidth,t=a.offsetHeight),n.innerWidth&&n.innerHeight&&(e=n.innerWidth,t=n.innerHeight),{w:e,h:t}}function n(){function n(){l.setStyle(c,"height",t().h-(s.clientHeight-c.clientHeight))}var s,c,u,d=document.body,m=document.documentElement;o=!o,s=e.getContainer().firstChild,c=e.getContentAreaContainer().firstChild,u=c.style,o?(i=u.width,a=u.height,u.width=u.height="100%",l.addClass(d,"mce-fullscreen"),l.addClass(m,"mce-fullscreen"),l.addClass(s,"mce-fullscreen"),l.bind(window,"resize",n),n(),r=n):(u.width=i,u.height=a,l.removeClass(d,"mce-fullscreen"),l.removeClass(m,"mce-fullscreen"),l.removeClass(s,"mce-fullscreen"),l.unbind(window,"resize",r)),e.fire("FullscreenStateChanged",{state:o})}var i,a,r,o=!1,l=tinymce.DOM;if(!e.settings.inline)return e.on("init",function(){e.addShortcut("Ctrl+Alt+F","",n)}),e.on("remove",function(){r&&l.unbind(window,"resize",r)}),e.addCommand("mceFullScreen",n),e.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Alt+F",selectable:!0,onClick:n,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})},context:"view"}),e.addButton("fullscreen",{tooltip:"Fullscreen",shortcut:"Ctrl+Alt+F",onClick:n,onPostRender:function(){var t=this;e.on("FullscreenStateChanged",function(e){t.active(e.state)})}}),{isFullscreen:function(){return o}}}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/hr/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/hr/plugin.min.js new file mode 100644 index 00000000..f9268ae0 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/hr/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("hr",function(e){e.addCommand("InsertHorizontalRule",function(){e.execCommand("mceInsertContent",!1,"
")}),e.addButton("hr",{icon:"hr",tooltip:"Insert horizontal ruler",cmd:"InsertHorizontalRule"}),e.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/image/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/image/plugin.min.js new file mode 100644 index 00000000..7c3b8af4 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/image/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("image",function(e){function t(e,t){function n(e,n){i.parentNode.removeChild(i),t({width:e,height:n})}var i=document.createElement("img");i.onload=function(){n(i.clientWidth,i.clientHeight)},i.onerror=function(){n()},i.src=e;var a=i.style;a.visibility="hidden",a.position="fixed",a.bottom=a.left=0,a.width=a.height="auto",document.body.appendChild(i)}function n(t){return function(){var n=e.settings.image_list;"string"==typeof n?tinymce.util.XHR.send({url:n,success:function(e){t(tinymce.util.JSON.parse(e))}}):t(n)}}function i(n){function i(){var e=[{text:"None",value:""}];return tinymce.each(n,function(t){e.push({text:t.text||t.title,value:t.value||t.url,menu:t.menu})}),e}function a(e){var t,n,i,a;t=c.find("#width")[0],n=c.find("#height")[0],i=t.value(),a=n.value(),c.find("#constrain")[0].checked()&&u&&m&&i&&a&&(e.control==t?(a=Math.round(i/u*a),n.value(a)):(i=Math.round(a/m*i),t.value(i))),u=i,m=a}function r(){function t(t){function i(){t.onload=t.onerror=null,e.selection.select(t),e.nodeChanged()}t.onload=function(){n.width||n.height||f.setAttribs(t,{width:t.clientWidth,height:t.clientHeight}),i()},t.onerror=i}var n=c.toJSON();""===n.width&&(n.width=null),""===n.height&&(n.height=null),""===n.style&&(n.style=null),n={src:n.src,alt:n.alt,width:n.width,height:n.height,style:n.style},h?f.setAttribs(h,n):(n.id="__mcenew",e.insertContent(f.createHTML("img",n)),h=f.get("__mcenew"),f.setAttrib(h,"id",null)),t(h)}function o(e){return e&&(e=e.replace(/px$/,"")),e}function l(){t(this.value(),function(e){e.width&&e.height&&(u=e.width,m=e.height,c.find("#width").value(u),c.find("#height").value(m))})}function s(){function e(e){return e.length>0&&/^[0-9]+$/.test(e)&&(e+="px"),e}var t=c.toJSON(),n=f.parseStyle(t.style);delete n.margin,n["margin-top"]=n["margin-bottom"]=e(t.vspace),n["margin-left"]=n["margin-right"]=e(t.hspace),n["border-width"]=e(t.border),c.find("#style").value(f.serializeStyle(f.parseStyle(f.serializeStyle(n))))}var c,d,u,m,g,f=e.dom,h=e.selection.getNode();u=f.getAttrib(h,"width"),m=f.getAttrib(h,"height"),"IMG"!=h.nodeName||h.getAttribute("data-mce-object")?h=null:d={src:f.getAttrib(h,"src"),alt:f.getAttrib(h,"alt"),width:u,height:m},n&&(g={name:"target",type:"listbox",label:"Image list",values:i(),onselect:function(e){var t=c.find("#alt");(!t.value()||e.lastControl&&t.value()==e.lastControl.text())&&t.value(e.control.text()),c.find("#src").value(e.control.value())}});var p=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:l},g,{name:"alt",type:"textbox",label:"Image description"},{type:"container",label:"Dimensions",layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:3,size:3,onchange:a},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:3,size:3,onchange:a},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}];e.settings.image_advtab?(h&&(d.hspace=o(h.style.marginLeft||h.style.marginRight),d.vspace=o(h.style.marginTop||h.style.marginBottom),d.border=o(h.style.borderWidth),d.style=e.dom.serializeStyle(e.dom.parseStyle(e.dom.getAttrib(h,"style")))),c=e.windowManager.open({title:"Insert/edit image",data:d,bodyType:"tabpanel",body:[{title:"General",type:"form",items:p},{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox"},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:s},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]}],onSubmit:r})):c=e.windowManager.open({title:"Edit image",data:d,body:p,onSubmit:r})}e.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:n(i),stateSelector:"img:not([data-mce-object])"}),e.addMenuItem("image",{icon:"image",text:"Insert image",onclick:n(i),context:"insert",prependToContext:!0})}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js new file mode 100644 index 00000000..224554d4 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("insertdatetime",function(e){function t(t,n){function i(e,t){if(e=""+e,e.length'+i+"";var r=e.dom.getParent(e.selection.getStart(),"time");if(r)return e.dom.setOuterHTML(r,i),void 0}e.insertContent(i)}var i,a="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),r="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),o="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),l="January February March April May June July August September October November December".split(" "),s=[];e.addCommand("mceInsertDate",function(){n(e.getParam("insertdate_dateformat",e.translate("%Y-%m-%d")))}),e.addCommand("mceInsertTime",function(){n(e.getParam("insertdate_timeformat",e.translate("%H:%M:%S")))}),e.addButton("inserttime",{type:"splitbutton",title:"Insert time",onclick:function(){n(i||"%H:%M:%S")},menu:s}),tinymce.each(e.settings.insertdate_formats||["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"],function(e){s.push({text:t(e),onclick:function(){i=e,n(e)}})}),e.addMenuItem("insertdatetime",{icon:"date",text:"Insert date/time",menu:s,context:"insert"})}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/layer/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/layer/plugin.min.js new file mode 100644 index 00000000..eb1ad4b6 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/layer/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("layer",function(e){function t(e){do if(e.className&&-1!=e.className.indexOf("mceItemLayer"))return e;while(e=e.parentNode)}function n(t){var n=e.dom;tinymce.each(n.select("div,p",t),function(e){/^(absolute|relative|fixed)$/i.test(e.style.position)&&(e.hasVisual?n.addClass(e,"mceItemVisualAid"):n.removeClass(e,"mceItemVisualAid"),n.addClass(e,"mceItemLayer"))})}function i(n){var i,o,a=[],r=t(e.selection.getNode()),l=-1,s=-1;for(o=[],tinymce.walk(e.getBody(),function(e){1==e.nodeType&&/^(absolute|relative|static)$/i.test(e.style.position)&&o.push(e)},"childNodes"),i=0;il&&o[i]==r&&(l=i);if(0>n){for(i=0;i-1?(o[l].style.zIndex=a[s],o[s].style.zIndex=a[l]):a[l]>0&&(o[l].style.zIndex=a[l]-1)}else{for(i=0;ia[l]){s=i;break}s>-1?(o[l].style.zIndex=a[s],o[s].style.zIndex=a[l]):o[l].style.zIndex=a[l]+1}e.execCommand("mceRepaint")}function o(){var t=e.dom,n=t.getPos(t.getParent(e.selection.getNode(),"*")),i=e.getBody();e.dom.add(i,"div",{style:{position:"absolute",left:n.x,top:n.y>20?n.y:20,width:100,height:100},"class":"mceItemVisualAid mceItemLayer"},e.selection.getContent()||e.getLang("layer.content")),tinymce.Env.ie&&t.setHTML(i,i.innerHTML)}function a(){var n=t(e.selection.getNode());n||(n=e.dom.getParent(e.selection.getNode(),"DIV,P,IMG")),n&&("absolute"==n.style.position.toLowerCase()?(e.dom.setStyles(n,{position:"",left:"",top:"",width:"",height:""}),e.dom.removeClass(n,"mceItemVisualAid"),e.dom.removeClass(n,"mceItemLayer")):(n.style.left||(n.style.left="20px"),n.style.top||(n.style.top="20px"),n.style.width||(n.style.width=n.width?n.width+"px":"100px"),n.style.height||(n.style.height=n.height?n.height+"px":"100px"),n.style.position="absolute",e.dom.setAttrib(n,"data-mce-style",""),e.addVisual(e.getBody())),e.execCommand("mceRepaint"),e.nodeChanged())}e.addCommand("mceInsertLayer",o),e.addCommand("mceMoveForward",function(){i(1)}),e.addCommand("mceMoveBackward",function(){i(-1)}),e.addCommand("mceMakeAbsolute",function(){a()}),e.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"}),e.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"}),e.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"}),e.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"}),e.on("init",function(){tinymce.Env.ie&&e.getDoc().execCommand("2D-Position",!1,!0)}),e.on("mouseup",function(n){var i=t(n.target);i&&e.dom.setAttrib(i,"data-mce-style","")}),e.on("mousedown",function(n){var i,o=n.target,a=e.getDoc();tinymce.Env.gecko&&(t(o)?"on"!==a.designMode&&(a.designMode="on",o=a.body,i=o.parentNode,i.removeChild(o),i.appendChild(o)):"on"==a.designMode&&(a.designMode="off"))}),e.on("NodeChange",n)}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js new file mode 100644 index 00000000..4f6f7c1a --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js @@ -0,0 +1 @@ +!function(e){e.on("AddEditor",function(e){e.editor.settings.inline_styles=!1}),e.PluginManager.add("legacyoutput",function(t){t.on("init",function(){var n="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",i=e.explode(t.settings.font_size_style_values),o=t.schema;t.formatter.register({alignleft:{selector:n,attributes:{align:"left"}},aligncenter:{selector:n,attributes:{align:"center"}},alignright:{selector:n,attributes:{align:"right"}},alignjustify:{selector:n,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:!0}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:!0}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(t){return e.inArray(i,t.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}}),e.each("b,i,u,strike".split(","),function(e){o.addValidElements(e+"[*]")}),o.getElementRule("font")||o.addValidElements("font[face|size|color|style]"),e.each(n.split(","),function(e){var t=o.getElementRule(e);t&&(t.attributes.align||(t.attributes.align={},t.attributesOrder.push("align")))})})})}(tinymce); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/link/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/link/plugin.min.js new file mode 100644 index 00000000..3387911c --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/link/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("link",function(t){function e(e){return function(){var n=t.settings.link_list;"string"==typeof n?tinymce.util.XHR.send({url:n,success:function(t){e(tinymce.util.JSON.parse(t))}}):e(n)}}function n(e){function n(t){var e=d.find("#text");(!e.value()||t.lastControl&&e.value()==t.lastControl.text())&&e.value(t.control.text()),d.find("#href").value(t.control.value())}function l(){var t=[{text:"None",value:""}];return tinymce.each(e,function(e){t.push({text:e.text||e.title,value:e.value||e.url,menu:e.menu})}),t}function i(e){var n=[{text:"None",value:""}];return tinymce.each(t.settings.rel_list,function(t){n.push({text:t.text||t.title,value:t.value,selected:e===t.value})}),n}function a(e){var n=[{text:"None",value:""}];return t.settings.target_list||n.push({text:"New window",value:"_blank"}),tinymce.each(t.settings.target_list,function(t){n.push({text:t.text||t.title,value:t.value,selected:e===t.value})}),n}function r(e){var l=[];return tinymce.each(t.dom.select("a:not([href])"),function(t){var n=t.name||t.id;n&&l.push({text:n,value:"#"+n,selected:-1!=e.indexOf("#"+n)})}),l.length?(l.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:l,onselect:n}):void 0}function o(){c||0!==v.text.length||this.parent().parent().find("#text")[0].value(this.value())}var u,s,c,d,f,h,x,v={},g=t.selection,m=t.dom;u=g.getNode(),s=m.getParent(u,"a[href]"),s&&g.select(s),v.text=c=g.getContent({format:"text"}),v.href=s?m.getAttrib(s,"href"):"",v.target=s?m.getAttrib(s,"target"):"",v.rel=s?m.getAttrib(s,"rel"):"","IMG"==u.nodeName&&(v.text=c=" "),e&&(f={type:"listbox",label:"Link list",values:l(),onselect:n}),t.settings.target_list!==!1&&(x={name:"target",type:"listbox",label:"Target",values:a(v.target)}),t.settings.rel_list&&(h={name:"rel",type:"listbox",label:"Rel",values:i(v.rel)}),d=t.windowManager.open({title:"Insert link",data:v,body:[{name:"href",type:"filepicker",filetype:"file",size:40,autofocus:!0,label:"Url",onchange:o,onkeyup:o},{name:"text",type:"textbox",size:40,label:"Text to display",onchange:function(){v.text=this.value()}},r(v.href),f,h,x],onSubmit:function(e){function n(e,n){window.setTimeout(function(){t.windowManager.confirm(e,n)},0)}function l(){i.text!=c?s?(t.focus(),s.innerHTML=i.text,m.setAttribs(s,{href:a,target:i.target?i.target:null,rel:i.rel?i.rel:null}),g.select(s)):t.insertContent(m.createHTML("a",{href:a,target:i.target?i.target:null,rel:i.rel?i.rel:null},i.text)):t.execCommand("mceInsertLink",!1,{href:a,target:i.target,rel:i.rel?i.rel:null})}var i=e.data,a=i.href;return a?a.indexOf("@")>0&&-1==a.indexOf("//")&&-1==a.indexOf("mailto:")?(n("The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",function(t){t&&(a="mailto:"+a),l()}),void 0):/^\s*www\./i.test(a)?(n("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(t){t&&(a="http://"+a),l()}),void 0):(l(),void 0):(t.execCommand("unlink"),void 0)}})}t.addButton("link",{icon:"link",tooltip:"Insert/edit link",shortcut:"Ctrl+K",onclick:e(n),stateSelector:"a[href]"}),t.addButton("unlink",{icon:"unlink",tooltip:"Remove link",cmd:"unlink",stateSelector:"a[href]"}),t.addShortcut("Ctrl+K","",e(n)),this.showDialog=n,t.addMenuItem("link",{icon:"link",text:"Insert link",shortcut:"Ctrl+K",onclick:e(n),stateSelector:"a[href]",context:"insert",prependToContext:!0})}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/lists/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/lists/plugin.min.js new file mode 100644 index 00000000..1d4f342e --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/lists/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("lists",function(e){var t=this;e.on("init",function(){function n(e){function t(t){var i,a,r;a=e[t?"startContainer":"endContainer"],r=e[t?"startOffset":"endOffset"],1==a.nodeType&&(i=b.create("span",{"data-mce-type":"bookmark"}),a.hasChildNodes()?(r=Math.min(r,a.childNodes.length-1),a.insertBefore(i,a.childNodes[r])):a.appendChild(i),a=i,r=0),n[t?"startContainer":"endContainer"]=a,n[t?"startOffset":"endOffset"]=r}var n={};return t(!0),t(),n}function i(e){function t(t){function n(e){for(var t=e.parentNode.firstChild,n=0;t;){if(t==e)return n;(1!=t.nodeType||"bookmark"!=t.getAttribute("data-mce-type"))&&n++,t=t.nextSibling}return-1}var i,a,r;i=r=e[t?"startContainer":"endContainer"],a=e[t?"startOffset":"endOffset"],1==i.nodeType&&(t?(a=n(i),i=i.parentNode):(a=n(i),i=i.parentNode),b.remove(r)),e[t?"startContainer":"endContainer"]=i,e[t?"startOffset":"endOffset"]=a}t(!0),t();var n=b.createRng();n.setStart(e.startContainer,e.startOffset),n.setEnd(e.endContainer,e.endOffset),x.setRng(n)}function a(e){return e&&/^(OL|UL)$/.test(e.nodeName)}function r(e){return e.parentNode.firstChild==e}function o(e){return e.parentNode.lastChild==e}function l(t){return t&&!!e.schema.getTextBlockElements()[t.nodeName]}function s(t,n){var i,a;if(e.settings.forced_root_block&&(n=n||e.settings.forced_root_block),a=n?b.create(n):b.createFragment(),t)for(;i=t.firstChild;)a.appendChild(i);return e.settings.forced_root_block||a.appendChild(b.create("br")),a.hasChildNodes()||tinymce.isIE||(a.innerHTML='
'),a}function c(){return tinymce.grep(x.getSelectedBlocks(),function(e){return"LI"==e.nodeName})}function d(){return tinymce.grep(x.getSelectedBlocks(),l)}function u(e,t,n){var i,a;n=n||s(t),i=b.createRng(),i.setStartAfter(t),i.setEndAfter(e),a=i.extractContents(),b.isEmpty(a)||b.insertAfter(a,e),b.isEmpty(n)||b.insertAfter(n,e),b.isEmpty(t.parentNode)&&b.remove(t.parentNode),b.remove(t)}function m(e){var t,n;if(t=e.nextSibling,t&&a(t)&&t.nodeName==e.nodeName){for(;n=t.firstChild;)e.appendChild(n);b.remove(t)}if(t=e.previousSibling,t&&a(t)&&t.nodeName==e.nodeName){for(;n=t.firstChild;)e.insertBefore(n,e.firstChild);b.remove(t)}}function f(e){tinymce.each(tinymce.grep(b.select("ol,ul",e)),function(e){var t,n=e.parentNode;"LI"==n.nodeName&&n.firstChild==e&&(t=n.previousSibling,t&&"LI"==t.nodeName&&(t.appendChild(e),b.isEmpty(n)&&b.remove(n))),a(n)&&(t=n.previousSibling,t&&"LI"==t.nodeName&&t.appendChild(e))})}function g(){var e,t=n(x.getRng(!0));return tinymce.each(c(),function(t){var n,i;return n=t.previousSibling,n&&"UL"==n.nodeName?(n.appendChild(t),void 0):n&&"LI"==n.nodeName&&a(n.lastChild)?(n.lastChild.appendChild(t),void 0):(n=t.nextSibling,n&&"UL"==n.nodeName?(n.insertBefore(t,n.firstChild),void 0):(n&&"LI"==n.nodeName&&a(t.lastChild)||(n=t.previousSibling,n&&"LI"==n.nodeName&&(i=b.create(t.parentNode.nodeName),n.appendChild(i),i.appendChild(t)),e=!0),void 0))}),i(t),e}function p(){function e(e){b.isEmpty(e)&&b.remove(e)}var t,l=n(x.getRng(!0));return tinymce.each(c(),function(n){var i,l=n.parentNode,c=l.parentNode;if(r(n)&&o(n))if("LI"==c.nodeName)b.insertAfter(n,c),e(c);else{if(!a(c))return;b.remove(l,!0)}else if(r(n))if("LI"==c.nodeName)b.insertAfter(n,c),i=b.create("LI"),i.appendChild(l),b.insertAfter(i,n),e(c);else{if(!a(c))return;c.insertBefore(n,l)}else if(o(n))if("LI"==c.nodeName)b.insertAfter(n,c);else{if(!a(c))return;b.insertAfter(n,l)}else{if("LI"==c.nodeName)l=c,i=s(n,"LI");else{if(!a(c))return;i=s(n,"LI")}u(l,n,i),f(l.parentNode)}t=!0}),i(l),t}function h(t){function r(){function t(t){var n,i,a=e.getBody();for(n=o[t?"startContainer":"endContainer"],i=o[t?"startOffset":"endOffset"],1==n.nodeType&&(n=n.childNodes[Math.min(i,n.childNodes.length-1)]||n);n.parentNode!=a;){if(l(n))return n;if(/^(TD|TH)$/.test(n.parentNode.nodeName))return n;n=n.parentNode}return n}function n(e,t){var n,i=[];if(!l(e)){for(;e&&(n=e[t?"previousSibling":"nextSibling"],!b.isBlock(n)&&n);)e=n;for(;e;)i.push(e),e=e[t?"nextSibling":"previousSibling"]}return i}var i,a,r=t(!0),s=t();a=n(r,!0),r!=s&&(a=a.concat(n(s).reverse())),tinymce.each(a,function(e){if(!b.isBlock(e)||"BR"==e.nodeName){if(!i||"BR"==e.nodeName){if("BR"==e.nodeName&&(!e.nextSibling||b.isBlock(e.nextSibling)&&"BR"!=e.nextSibling.nodeName))return b.remove(e),!1;i=b.create("p"),c.push(i),e.parentNode.insertBefore(i,e)}return"BR"!=e.nodeName?i.appendChild(e):b.remove(e),e==s?!1:void 0}})}var o=x.getRng(!0),s=n(o),c=d();r(),tinymce.each(c,function(e){var n,i;i=e.previousSibling,i&&a(i)&&i.nodeName==t?(n=i,e=b.rename(e,"LI"),i.appendChild(e)):(n=b.create(t),e.parentNode.insertBefore(n,e),n.appendChild(e),e=b.rename(e,"LI")),m(n)}),i(s)}function y(){var e=n(x.getRng(!0));tinymce.each(c(),function(e){var t,n;for(t=e;t;t=t.parentNode)a(t)&&(n=t);u(n,e)}),i(e)}function v(e){var t=b.getParent(x.getStart(),"OL,UL");if(t)if(t.nodeName==e)y(e);else{var a=n(x.getRng(!0));m(b.rename(t,e)),i(a)}else h(e)}var b=e.dom,x=e.selection;t.backspaceDelete=function(e){function t(e,t){var n=e.startContainer,i=e.startOffset;if(3==n.nodeType&&(t?i0))return n;for(var a=new tinymce.dom.TreeWalker(e.startContainer);n=a[t?"next":"prev"]();)if(3==n.nodeType&&n.data.length>0)return n}function r(e,t){var n,i,r=e.parentNode;for(a(t.lastChild)&&(i=t.lastChild),n=t.lastChild,n&&"BR"==n.nodeName&&e.hasChildNodes()&&b.remove(n);n=e.firstChild;)t.appendChild(n);i&&t.appendChild(i),b.remove(e),b.isEmpty(r)&&b.remove(r)}if(x.isCollapsed()){var o=b.getParent(x.getStart(),"LI");if(o){var l=x.getRng(!0),s=b.getParent(t(l,e),"LI");if(s&&s!=o){var c=n(l);return e?r(s,o):r(o,s),i(c),!0}if(!s&&!e&&y(o.parentNode.nodeName))return!0}}},e.addCommand("Indent",function(){return g()?void 0:!0}),e.addCommand("Outdent",function(){return p()?void 0:!0}),e.addCommand("InsertUnorderedList",function(){v("UL")}),e.addCommand("InsertOrderedList",function(){v("OL")})}),e.on("keydown",function(e){e.keyCode==tinymce.util.VK.BACKSPACE?t.backspaceDelete()&&e.preventDefault():e.keyCode==tinymce.util.VK.DELETE&&t.backspaceDelete(!0)&&e.preventDefault()})}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/media/moxieplayer.swf b/mediagoblin/static/tinymce/js/tinymce/plugins/media/moxieplayer.swf new file mode 100644 index 0000000000000000000000000000000000000000..19c771bea50c6665fe0ee5f46515e9686427dbc7 GIT binary patch literal 20017 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':-1!=i.source1mime.indexOf("audio")?e.settings.audio_template_callback?a=e.settings.audio_template_callback(i):a+='":a=e.settings.video_template_callback?e.settings.video_template_callback(i):'"),a):""}function o(e){var t={};return new tinymce.html.SaxParser({validate:!1,special:"script,noscript",start:function(e,n){t.source1||"param"!=e||(t.source1=n.map.movie),("iframe"==e||"object"==e||"embed"==e||"video"==e||"audio"==e)&&(t=tinymce.extend(n.map,t)),"source"==e&&(t.source1?t.source2||(t.source2=n.map.src):t.source1=n.map.src)}}).parse(e),t.source1=t.source1||t.src||t.data,t.source2=t.source2||"",t.poster=t.poster||"",t}function l(t){return t.getAttribute("data-mce-object")?o(e.serializer.serialize(t,{selection:!0})):{}}function s(e,t,n){function i(e,t){var n,i,a,r;for(n in t)if(a=""+t[n],e.map[n])for(i=e.length;i--;)r=e[i],r.name==n&&(a?(e.map[n]=a,r.value=a):(delete e.map[n],e.splice(i,1)));else a&&(e.push({name:n,value:a}),e.map[n]=a)}var a=new tinymce.html.Writer,r=0;return new tinymce.html.SaxParser({validate:!1,special:"script,noscript",comment:function(e){a.comment(e)},cdata:function(e){a.cdata(e)},text:function(e,t){a.text(e,t)},start:function(e,o,l){switch(e){case"video":case"object":case"img":case"iframe":i(o,{width:t.width,height:t.height})}if(n)switch(e){case"video":i(o,{poster:t.poster,src:""}),t.source2&&i(o,{src:""});break;case"iframe":i(o,{src:t.source1});break;case"source":if(r++,2>=r&&(i(o,{src:t["source"+r],type:t["source"+r+"mime"]}),!t["source"+r]))return}a.start(e,o,l)},end:function(e){if("video"==e&&n)for(var o=1;2>=o;o++)if(t["source"+o]){var l=[];l.map={},o>r&&(i(l,{src:t["source"+o],type:t["source"+o+"mime"]}),a.start("source",l,!0))}a.end(e)}},new tinymce.html.Schema({})).parse(e),a.getContent()}var c=[{regex:/youtu\.be\/([a-z1-9.-_]+)/,type:"iframe",w:425,h:350,url:"http://www.youtube.com/embed/$1"},{regex:/youtube\.com(.+)v=([^&]+)/,type:"iframe",w:425,h:350,url:"http://www.youtube.com/embed/$2"},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"http://player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc"},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'http://maps.google.com/maps/ms?msid=$2&output=embed"'}];e.on("ResolveName",function(e){var t;1==e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)}),e.on("preInit",function(){var t=e.schema.getSpecialElements();tinymce.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("]*>","gi")}),e.schema.addValidElements("object[id|style|width|height|classid|codebase|*],embed[id|style|width|height|type|src|*],video[*],audio[*]");var n=e.schema.getBoolAttrs();tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){n[e]={}}),e.parser.addNodeFilter("iframe,video,audio,object,embed",function(t,n){for(var i,a,r,o,l,s,c,u=t.length;u--;){for(a=t[u],r=new tinymce.html.Node("img",1),r.shortEnded=!0,s=a.attributes,i=s.length;i--;)o=s[i].name,l=s[i].value,"width"!==o&&"height"!==o&&"style"!==o&&(("data"==o||"src"==o)&&(l=e.convertURL(l,o)),r.attr("data-mce-p-"+o,l));c=a.firstChild&&a.firstChild.value,c&&(r.attr("data-mce-html",escape(c)),r.firstChild=null),r.attr({width:a.attr("width")||"300",height:a.attr("height")||("audio"==n?"30":"150"),style:a.attr("style"),src:tinymce.Env.transparentSrc,"data-mce-object":n,"class":"mce-object mce-object-"+n}),a.replace(r)}}),e.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var n,i,a,r,o,l,s=e.length;s--;){for(n=e[s],i=new tinymce.html.Node(n.attr(t),1),"audio"!=n.attr(t)&&i.attr({width:n.attr("width"),height:n.attr("height")}),i.attr({style:n.attr("style")}),r=n.attributes,a=r.length;a--;){var c=r[a].name;0===c.indexOf("data-mce-p-")&&i.attr(c.substr(11),r[a].value)}o=n.attr("data-mce-html"),o&&(l=new tinymce.html.Node("#text",3),l.raw=!0,l.value=unescape(o),i.append(l)),n.replace(i)}})}),e.on("ObjectSelected",function(e){"audio"==e.target.getAttribute("data-mce-object")&&e.preventDefault()}),e.on("objectResized",function(e){var t,n=e.target;n.getAttribute("data-mce-object")&&(t=n.getAttribute("data-mce-html"),t&&(t=unescape(t),n.setAttribute("data-mce-html",escape(s(t,{width:e.width,height:e.height})))))}),e.addButton("media",{tooltip:"Insert/edit video",onclick:i,stateSelector:"img[data-mce-object=video]"}),e.addMenuItem("media",{icon:"media",text:"Insert video",onclick:i,context:"insert",prependToContext:!0})}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js new file mode 100644 index 00000000..866339c7 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("nonbreaking",function(e){var t=e.getParam("nonbreaking_force_tab");if(e.addCommand("mceNonBreaking",function(){e.insertContent(e.plugins.visualchars&&e.plugins.visualchars.state?' ':" ")}),e.addButton("nonbreaking",{title:"Insert nonbreaking space",cmd:"mceNonBreaking"}),e.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"}),t){var n=+t>1?+t:3;e.on("keydown",function(t){if(9==t.keyCode){if(t.shiftKey)return;t.preventDefault();for(var i=0;n>i;i++)e.execCommand("mceNonBreaking")}})}}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/noneditable/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/noneditable/plugin.min.js new file mode 100644 index 00000000..dd15d59e --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/noneditable/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("noneditable",function(e){function t(){function t(e){var t;if(1===e.nodeType){if(t=e.getAttribute(s),t&&"inherit"!==t)return t;if(t=e.contentEditable,"inherit"!==t)return t}return null}function n(e){for(var n;e;){if(n=t(e))return"false"===n?e:null;e=e.parentNode}}function i(e){for(;e;){if(e.id===g)return e;e=e.parentNode}}function o(e){var t;if(e)for(t=new r(e,e),e=t.current();e;e=t.next())if(3===e.nodeType)return e}function a(n,i){var o,a;return"false"===t(n)&&m.isBlock(n)?(f.select(n),void 0):(a=m.createRng(),"true"===t(n)&&(n.firstChild||n.appendChild(e.getDoc().createTextNode(" ")),n=n.firstChild,i=!0),o=m.create("span",{id:g,"data-mce-bogus":!0},p),i?n.parentNode.insertBefore(o,n):m.insertAfter(o,n),a.setStart(o.firstChild,1),a.collapse(!0),f.setRng(a),o)}function l(e){var t,n,a,r;if(e)t=f.getRng(!0),t.setStartBefore(e),t.setEndBefore(e),n=o(e),n&&n.nodeValue.charAt(0)==p&&(n=n.deleteData(0,1)),m.remove(e,!0),f.setRng(t);else for(a=i(f.getStart());(e=m.get(g))&&e!==r;)a!==e&&(n=o(e),n&&n.nodeValue.charAt(0)==p&&(n=n.deleteData(0,1)),m.remove(e,!0)),r=e}function d(){function e(e,n){var i,o,a,l,s;if(i=c.startContainer,o=c.startOffset,3==i.nodeType){if(s=i.nodeValue.length,o>0&&s>o||(n?o==s:0===o))return}else{if(!(o0?o-1:o;i=i.childNodes[d],i.hasChildNodes()&&(i=i.firstChild)}for(a=new r(i,e);l=a[n?"prev":"next"]();){if(3===l.nodeType&&l.nodeValue.length>0)return;if("true"===t(l))return l}return e}var i,o,s,c,d;l(),s=f.isCollapsed(),i=n(f.getStart()),o=n(f.getEnd()),(i||o)&&(c=f.getRng(!0),s?(i=i||o,(d=e(i,!0))?a(d,!0):(d=e(i,!1))?a(d,!1):f.select(i)):(c=f.getRng(!0),i&&c.setStartBefore(i),o&&c.setEndAfter(o),f.setRng(c)))}function u(o){function a(e,t){for(;e=e[t?"previousSibling":"nextSibling"];)if(3!==e.nodeType||e.nodeValue.length>0)return e}function s(e,t){f.select(e),f.collapse(t)}function u(o){function a(e){for(var t=s;t;){if(t===e)return;t=t.parentNode}m.remove(e),d()}function r(){var i,r,l=e.schema.getNonEmptyElements();for(r=new tinymce.dom.TreeWalker(s,e.getBody());(i=o?r.prev():r.next())&&!l[i.nodeName.toLowerCase()]&&!(3===i.nodeType&&tinymce.trim(i.nodeValue).length>0);)if("false"===t(i))return a(i),!0;return n(i)?!0:!1}var l,s,c,u;if(f.isCollapsed()){if(l=f.getRng(!0),s=l.startContainer,c=l.startOffset,s=i(s)||s,u=n(s))return a(u),!1;if(3==s.nodeType&&(o?c>0:cv||v>124)&&v!=c.DELETE&&v!=c.BACKSPACE){if((tinymce.isMac?o.metaKey:o.ctrlKey)&&(67==v||88==v||86==v))return;if(o.preventDefault(),v==c.LEFT||v==c.RIGHT){var b=v==c.LEFT;if(e.dom.isBlock(g)){var x=b?g.previousSibling:g.nextSibling,w=new r(x,x),C=b?w.prev():w.next();s(C,!b)}else s(g,b)}}else if(v==c.LEFT||v==c.RIGHT||v==c.BACKSPACE||v==c.DELETE){if(p=i(h)){if(v==c.LEFT||v==c.BACKSPACE)if(g=a(p,!0),g&&"false"===t(g)){if(o.preventDefault(),v!=c.LEFT)return m.remove(g),void 0;s(g,!0)}else l(p);if(v==c.RIGHT||v==c.DELETE)if(g=a(p),g&&"false"===t(g)){if(o.preventDefault(),v!=c.RIGHT)return m.remove(g),void 0;s(g,!1)}else l(p)}if((v==c.BACKSPACE||v==c.DELETE)&&!u(v==c.BACKSPACE))return o.preventDefault(),!1}}var m=e.dom,f=e.selection,g="mce_noneditablecaret",p="";e.on("mousedown",function(n){var i=e.selection.getNode();"false"===t(i)&&i==n.target&&d()}),e.on("mouseup keyup",d),e.on("keydown",u)}function n(t){var n=a.length,i=t.content,r=tinymce.trim(o);if("raw"!=t.format){for(;n--;)i=i.replace(a[n],function(t){var n=arguments,o=n[n.length-2];return o>0&&'"'==i.charAt(o-1)?t:''+e.dom.encode("string"==typeof n[1]?n[1]:n[0])+""});t.content=i}}var i,o,a,r=tinymce.dom.TreeWalker,l="contenteditable",s="data-mce-"+l,c=tinymce.util.VK;i=" "+tinymce.trim(e.getParam("noneditable_editable_class","mceEditable"))+" ",o=" "+tinymce.trim(e.getParam("noneditable_noneditable_class","mceNonEditable"))+" ",a=e.getParam("noneditable_regexp"),a&&!a.length&&(a=[a]),e.on("PreInit",function(){t(),a&&e.on("BeforeSetContent",n),e.parser.addAttributeFilter("class",function(e){for(var t,n,a=e.length;a--;)n=e[a],t=" "+n.attr("class")+" ",-1!==t.indexOf(i)?n.attr(s,"true"):-1!==t.indexOf(o)&&n.attr(s,"false")}),e.serializer.addAttributeFilter(s,function(e){for(var t,n=e.length;n--;)t=e[n],a&&t.attr("data-mce-content")?(t.name="#text",t.type=3,t.raw=!0,t.value=t.attr("data-mce-content")):(t.attr(l,null),t.attr(s,null))}),e.parser.addAttributeFilter(l,function(e){for(var t,n=e.length;n--;)t=e[n],t.attr(s,t.attr(l)),t.attr(l,null)})})}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js new file mode 100644 index 00000000..8f535fa1 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("pagebreak",function(e){var t,n="mce-pagebreak",i=e.getParam("pagebreak_separator",""),a='';t=new RegExp(i.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi"),e.addCommand("mcePageBreak",function(){e.execCommand("mceInsertContent",0,a)}),e.addButton("pagebreak",{title:"Page break",cmd:"mcePageBreak"}),e.addMenuItem("pagebreak",{text:"Page break",icon:"pagebreak",cmd:"mcePageBreak",context:"insert"}),e.on("ResolveName",function(t){"IMG"==t.target.nodeName&&e.dom.hasClass(t.target,n)&&(t.name="pagebreak")}),e.on("click",function(t){t=t.target,"IMG"===t.nodeName&&e.dom.hasClass(t,n)&&e.selection.select(t)}),e.on("BeforeSetContent",function(e){e.content=e.content.replace(t,a)}),e.on("PreInit",function(){e.serializer.addNodeFilter("img",function(e){for(var t,n,a=e.length;a--;)t=e[a],n=t.attr("class"),n&&-1!==n.indexOf("mce-pagebreak")&&(t.type=3,t.value=i,t.raw=!0)})})}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/paste/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/paste/plugin.min.js new file mode 100644 index 00000000..d1b15b7d --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/paste/plugin.min.js @@ -0,0 +1 @@ +!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i]+>/g,"")),(i.settings.paste_remove_styles||i.settings.paste_remove_styles_if_webkit!==!1&&e.webkit)&&(t=t.replace(/ style=\"[^\"]+\"/g,"")),n.isDefaultPrevented()||i.insertContent(t)}function u(e){e=i.dom.encode(e).replace(/\r\n/g,"\n");var t=i.dom.getParent(i.selection.getStart(),i.dom.isBlock);e=t&&/^(PRE|DIV)$/.test(t.nodeName)||!i.settings.forced_root_block?c(e,[[/\n/g,"
"]]):c(e,[[/\n\n/g,"

"],[/^(.*<\/p>)(

)$/,"

$1"],[/\n/g,"
"]]);var n=i.fire("PastePreProcess",{content:e});n.isDefaultPrevented()||i.insertContent(n.content)}function f(){var e=i.dom.getViewPort().y,t=i.dom.add(i.getBody(),"div",{contentEditable:!1,"data-mce-bogus":"1",style:"position: absolute; top: "+e+"px; left: 0; width: 1px; height: 1px; overflow: hidden"},'

X
');return i.dom.bind(t,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),t}function p(e){i.dom.unbind(e),i.dom.remove(e)}var m=this,h;if(i.on("keydown",function(e){n.metaKeyPressed(e)&&e.shiftKey&&86==e.keyCode&&(h=o())}),r())i.on("paste",function(e){function t(e,t){for(var r=0;r100){var n,r=f();t.preventDefault(),e.bind(r,"paste",function(e){e.stopPropagation(),n=!0});var a=i.selection.getRng(),c=e.doc.body.createTextRange();if(c.moveToElementText(r.firstChild),c.execCommand("Paste"),p(r),!n)return i.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents."),void 0;i.selection.setRng(a),l()?u(s(r.firstChild)):d(r.firstChild.innerHTML)}})})}else i.on("init",function(){i.dom.bind(i.getBody(),"paste",function(e){e.preventDefault(),i.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.")})}),i.on("keydown",function(e){if(a(e)&&!e.isDefaultPrevented()){e.stopImmediatePropagation();var t=f(),n=i.selection.getRng();i.selection.select(t,!0),i.dom.bind(t,"paste",function(e){e.stopPropagation(),setTimeout(function(){p(t),i.lastRng=n,i.selection.setRng(n);var e=t.firstChild;e.lastChild&&"BR"==e.lastChild.nodeName&&e.removeChild(e.lastChild),l()?u(s(e)):d(e.innerHTML)},0)})}});i.settings.paste_data_images||i.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&t.files.length>0&&e.preventDefault()})}i.paste_block_drop&&i.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),this.paste=d,this.pasteText=u}}),r(f,[d,p,m,h,g],function(e,t,n,r,i){return function(o){var a=e.each;o.on("PastePreProcess",function(s){function l(e){a(e,function(e){u=e.constructor==RegExp?u.replace(e,""):u.replace(e[0],e[1])})}function c(e){function t(e,t,a,s){var l=e._listLevel||o;l!=o&&(o>l?n&&(n=n.parent.parent):(r=n,n=null)),n&&n.name==a?n.append(e):(r=r||n,n=new i(a,1),s>1&&n.attr("start",""+s),e.wrap(n)),e.name="li",t.value="";var c=t.next;c&&3==c.type&&(c.value=c.value.replace(/^\u00a0+/,"")),l>o&&r.lastChild.append(n),o=l}for(var n,r,o=1,a=e.getAll("p"),s=0;s/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\xa0"],[/([\s\u00a0]*)<\/span>/gi,function(e,t){return t.length>0?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\xa0"):""}]]);var m=new n({valid_elements:"@[style],-strong/b,-em/i,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-table,-tr,-td[colspan|rowspan],-th,-thead,-tfoot,-tbody,-a[!href],sub,sup,strike"}),h=new t({},m);h.addAttributeFilter("style",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("style",d(n,n.attr("style"))),"span"!=n.name||n.attributes.length||n.unwrap()});var g=h.parse(u);c(g),s.content=new r({},m).serialize(g)}})}}),r(v,[c,d],function(e,t){return function(n){function r(e){n.on("PastePreProcess",function(t){t.content=e(t.content)})}function i(e,n){return t.each(n,function(t){e=t.constructor==RegExp?e.replace(t,""):e.replace(t[0],t[1])}),e}function o(e){return e=i(e,[/^[\s\S]*|[\s\S]*$/g,[/\u00a0<\/span>/g,"\xa0"],/
$/])}function a(e){if(!s){var r=[];t.each(n.schema.getBlockElements(),function(e,t){r.push(t)}),s=new RegExp("(?:
 [\\s\\r\\n]+|
)*(<\\/?("+r.join("|")+")[^>]*>)(?:
 [\\s\\r\\n]+|
)*","g")}return e=i(e,[[s,"$1"]]),e=i(e,[[/

/g,"

"],[/
/g," "],[/

/g,"
"]])}var s;e.webkit&&r(o),e.ie&&r(a)}}),r(y,[b,l,f,v],function(e,t,n,r){var i;e.add("paste",function(e){var o=this,a;o.clipboard=a=new t(e),o.quirks=new r(e),o.wordFilter=new n(e),e.settings.paste_as_text&&(o.clipboard.pasteFormat="text"),e.addCommand("mceInsertClipboardContent",function(e,t){t.content&&o.clipboard.paste(t.content),t.text&&o.clipboard.pasteText(t.text)}),e.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:a.pasteFormat,onclick:function(){"text"==a.pasteFormat?(this.active(!1),a.pasteFormat="html"):(a.pasteFormat="text",this.active(!0),i||(e.windowManager.alert("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off."),i=!0))}})})}),a([l,f,v,y])}(this); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/preview/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/preview/plugin.min.js new file mode 100644 index 00000000..b8430c64 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/preview/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("preview",function(e){var t=e.settings;e.addCommand("mcePreview",function(){e.windowManager.open({title:"Preview",width:parseInt(e.getParam("plugin_preview_width","650"),10),height:parseInt(e.getParam("plugin_preview_height","500"),10),html:'',buttons:{text:"Close",onclick:function(){this.parent().parent().close()}},onPostRender:function(){var n,i=this.getEl("body").firstChild.contentWindow.document,a="";tinymce.each(e.contentCSS,function(t){a+=''});var r=t.body_id||"tinymce";-1!=r.indexOf("=")&&(r=e.getParam("body_id","","hash"),r=r[e.id]||r);var o=t.body_class||"";-1!=o.indexOf("=")&&(o=e.getParam("body_class","","hash"),o=o[e.id]||""),n=""+a+""+''+e.getContent()+""+"",i.open(),i.write(n),i.close()}})}),e.addButton("preview",{title:"Preview",cmd:"mcePreview"}),e.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/print/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/print/plugin.min.js new file mode 100644 index 00000000..abc37b5f --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/print/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("print",function(t){t.addCommand("mcePrint",function(){t.getWin().print()}),t.addButton("print",{title:"Print",cmd:"mcePrint"}),t.addShortcut("Ctrl+P","","mcePrint"),t.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print",shortcut:"Ctrl+P",context:"file"})}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/save/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/save/plugin.min.js new file mode 100644 index 00000000..00cb68c6 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/save/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("save",function(e){function t(){var t,n;return t=tinymce.DOM.getParent(e.id,"form"),!e.getParam("save_enablewhendirty")||e.isDirty()?(tinymce.triggerSave(),(n=e.getParam("save_onsavecallback"))?(e.execCallback("save_onsavecallback",e)&&(e.startContent=tinymce.trim(e.getContent({format:"raw"})),e.nodeChanged()),void 0):(t?(e.isNotDirty=!0,(!t.onsubmit||t.onsubmit())&&("function"==typeof t.submit?t.submit():e.windowManager.alert("Error: Form submit field collision.")),e.nodeChanged()):e.windowManager.alert("Error: No form element found."),void 0)):void 0}function n(){var t,n=tinymce.trim(e.startContent);return(t=e.getParam("save_oncancelcallback"))?(e.execCallback("save_oncancelcallback",e),void 0):(e.setContent(n),e.undoManager.clear(),e.nodeChanged(),void 0)}function i(){var t=this;e.on("nodeChange",function(){t.disabled(!e.isDirty())})}e.addCommand("mceSave",t),e.addCommand("mceCancel",n),e.addButton("save",{icon:"save",text:"Save",cmd:"mceSave",disabled:!0,onPostRender:i}),e.addButton("cancel",{text:"Cancel",icon:!1,cmd:"mceCancel",disabled:!0,onPostRender:i}),e.addShortcut("ctrl+s","","mceSave")}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js new file mode 100644 index 00000000..56ffa92a --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js @@ -0,0 +1 @@ +!function(){function e(e,t,n,i,a){function r(e,t){if(t=t||0,!e[0])throw"findAndReplaceDOMText cannot handle zero-length matches";var n=e.index;if(t>0){var i=e[t];if(!i)throw"Invalid capture group";n+=e[0].indexOf(i),e[0]=i}return[n,n+e[0].length,[e[0]]]}function o(e){var t;if(3===e.nodeType)return e.data;if(f[e.nodeName])return"";if(t="",(m[e.nodeName]||g[e.nodeName])&&(t+="\n"),e=e.firstChild)do t+=o(e);while(e=e.nextSibling);return t}function l(e,t,n){var i,a,r,o,l=[],c=0,s=e,d=t.shift(),u=0;e:for(;;){if((m[s.nodeName]||g[s.nodeName])&&c++,3===s.nodeType&&(!a&&s.length+c>=d[1]?(a=s,o=d[1]-c):i&&l.push(s),!i&&s.length+c>d[0]&&(i=s,r=d[0]-c),c+=s.length),i&&a){if(s=n({startNode:i,startNodeIndex:r,endNode:a,endNodeIndex:o,innerNodes:l,match:d[2],matchIndex:u}),c-=a.length-o,i=null,a=null,l=[],d=t.shift(),u++,!d)break}else{if(!f[s.nodeName]&&s.firstChild){s=s.firstChild;continue}if(s.nextSibling){s=s.nextSibling;continue}}for(;;){if(s.nextSibling){s=s.nextSibling;break}if(s.parentNode===e)break e;s=s.parentNode}}}function c(e){var t;if("function"!=typeof e){var n=e.nodeType?e:u.createElement(e);t=function(e,t){var i=n.cloneNode(!1);return i.setAttribute("data-mce-index",t),e&&i.appendChild(u.createTextNode(e)),i}}else t=e;return function(e){var n,i,a,r=e.startNode,o=e.endNode,l=e.matchIndex;if(r===o){var c=r;a=c.parentNode,e.startNodeIndex>0&&(n=u.createTextNode(c.data.substring(0,e.startNodeIndex)),a.insertBefore(n,c));var s=t(e.match[0],l);return a.insertBefore(s,c),e.endNodeIndexf;++f){var h=e.innerNodes[f],p=t(h.data,l);h.parentNode.replaceChild(p,h),m.push(p)}var v=t(o.data.substring(0,e.endNodeIndex),l);return a=r.parentNode,a.insertBefore(n,r),a.insertBefore(d,r),a.removeChild(r),a=o.parentNode,a.insertBefore(v,o),a.insertBefore(i,o),a.removeChild(o),v}}var s,d,u,m,f,g,h=[],p=0;if(u=t.ownerDocument,m=a.getBlockElements(),f=a.getWhiteSpaceElements(),g=a.getShortEndedElements(),d=o(t)){if(e.global)for(;s=e.exec(d);)h.push(r(s,i));else s=d.match(e),h.push(r(s,i));return h.length&&(p=h.length,l(t,h,c(n))),p}}function t(t){function n(){var e=tinymce.ui.Factory.create({type:"window",layout:"flex",pack:"center",align:"center",onClose:function(){t.focus(),o=!1,l.unmarkAllMatches()},buttons:[{text:"Find",onclick:function(){e.find("form")[0].submit()}},{text:"Replace",disabled:!0,onclick:function(){l.replace(e.find("#replace").value())||e.statusbar.items().slice(1).disabled(!0)}},{text:"Replace all",disabled:!0,onclick:function(){l.replaceAll(e.find("#replace").value()),e.statusbar.items().slice(1).disabled(!0)}},{type:"spacer",flex:1},{text:"Prev",disabled:!0,onclick:function(){l.prev()}},{text:"Next",disabled:!0,onclick:function(){l.next()}}],title:"Find and replace",items:{type:"form",padding:20,labelGap:30,spacing:10,onsubmit:function(t){var n,i,a,r,o;return t.preventDefault(),a=e.find("#case").checked(),o=e.find("#words").checked(),r=e.find("#find").value(),r.length?(r=r.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),r=o?"\\b"+r+"\\b":r,i=new RegExp(r,a?"g":"gi"),n=l.markAllMatches(i),n?l.first():tinymce.ui.MessageBox.alert("Could not find the specified string."),e.statusbar.items().slice(1).disabled(0===n),void 0):(l.unmarkAllMatches(),e.statusbar.items().slice(1).disabled(!0),void 0)},items:[{type:"textbox",name:"find",size:40,label:"Find",value:t.selection.getNode().src},{type:"textbox",name:"replace",size:40,label:"Replace with"},{type:"checkbox",name:"case",text:"Match case",label:" "},{type:"checkbox",name:"words",text:"Whole words",label:" "}]}}).renderTo().reflow();o=!0}function i(e){var t=e.parentNode;t.insertBefore(e.firstChild,e),e.parentNode.removeChild(e)}function a(e,n){function i(){var i,o;for(i=n?t.getBody()[e?"firstChild":"lastChild"]:l[e?"endContainer":"startContainer"],o=new tinymce.dom.TreeWalker(i,t.getBody());i=o.current();){if(1==i.nodeType&&"SPAN"==i.nodeName&&null!==i.getAttribute("data-mce-index"))for(c=i.getAttribute("data-mce-index"),a=i.firstChild;i=o.current();){if(1==i.nodeType&&"SPAN"==i.nodeName&&null!==i.getAttribute("data-mce-index")){if(i.getAttribute("data-mce-index")!==c)return;r=i.firstChild}o[e?"next":"prev"]()}o[e?"next":"prev"]()}}var a,r,o=t.selection,l=o.getRng(!0),c=-1;return e=e!==!1,i(),a&&r&&(t.focus(),e?(l.setStart(a,0),l.setEnd(r,r.length)):(l.setStart(r,0),l.setEnd(a,a.length)),o.scrollIntoView(a.parentNode),o.setRng(l)),c}function r(e){e.parentNode.removeChild(e)}var o,l=this,c=-1;l.init=function(e){e.addMenuItem("searchreplace",{text:"Find and replace",shortcut:"Ctrl+F",onclick:n,separator:"before",context:"edit"}),e.addButton("searchreplace",{tooltip:"Find and replace",shortcut:"Ctrl+F",onclick:n}),e.shortcuts.add("Ctrl+F","",n)},l.markAllMatches=function(n){var i,a;return a=t.dom.create("span",{"class":"mce-match-marker","data-mce-bogus":1}),i=t.getBody(),l.unmarkAllMatches(i),e(n,i,a,!1,t.schema)},l.first=function(){return c=a(!0,!0),-1!==c},l.next=function(){return c=a(!0),-1!==c},l.prev=function(){return c=a(!1),-1!==c},l.replace=function(e,n,o){var l,s,d,u,m,f;if(-1===c&&(c=a(n)),f=a(n),d=t.getBody(),s=tinymce.toArray(d.getElementsByTagName("span")),s.length)for(l=0;l=d[1]?(o=c,a=d[1]-l):r&&s.push(c),!r&&c.length+l>d[0]&&(r=c,i=d[0]-l),l+=c.length),r&&o){if(c=n({startNode:r,startNodeIndex:i,endNode:o,endNodeIndex:a,innerNodes:s,match:d[2],matchIndex:u}),l-=o.length-a,r=null,o=null,s=[],d=t.shift(),u++,!d)break}else{if(!g[c.nodeName]&&c.firstChild){c=c.firstChild;continue}if(c.nextSibling){c=c.nextSibling;continue}}for(;;){if(c.nextSibling){c=c.nextSibling;break}if(c.parentNode===e)break e;c=c.parentNode}}}function a(e){var t;if("function"!=typeof e){var n=e.nodeType?e:m.createElement(e);t=function(e,t){var r=n.cloneNode(!1);return r.setAttribute("data-mce-index",t),e&&r.appendChild(m.createTextNode(e)),r}}else t=e;return function r(e){var n,r,o,i=e.startNode,a=e.endNode,s=e.matchIndex;if(i===a){var l=i;o=l.parentNode,e.startNodeIndex>0&&(n=m.createTextNode(l.data.substring(0,e.startNodeIndex)),o.insertBefore(n,l));var c=t(e.match[0],s);return o.insertBefore(c,l),e.endNodeIndexf;++f){var h=e.innerNodes[f],g=t(h.data,s);h.parentNode.replaceChild(g,h),u.push(g)}var v=t(a.data.substring(0,e.endNodeIndex),s);return o=i.parentNode,o.insertBefore(n,i),o.insertBefore(d,i),o.removeChild(i),o=a.parentNode,o.insertBefore(v,a),o.insertBefore(r,a),o.removeChild(a),v}}function s(e){var t=[];return l(function(n,r){e(n,r)&&t.push(n)}),u=t,this}function l(e){for(var t=0,n=u.length;n>t&&e(u[t],t)!==!1;t++);return this}function c(e){return u.length&&(p=u.length,i(t,u,a(e))),this}var d,u=[],f,p=0,m,h,g,v;if(m=t.ownerDocument,h=n.getBlockElements(),g=n.getWhiteSpaceElements(),v=n.getShortEndedElements(),f=o(t),f&&e.global)for(;d=e.exec(f);)u.push(r(d));return{text:f,count:p,matches:u,each:l,filter:s,mark:c}}}),r(c,[l,d,u,f,p,m,h],function(e,t,n,r,o,i,a){t.add("spellchecker",function(t,s){function l(e){for(var t in e)return!1;return!0}function c(e,i){var a=[],s=g[i];n.each(s,function(e){a.push({text:e,onclick:function(){t.insertContent(e),u()}})}),a.push.apply(a,[{text:"-"},{text:"Ignore",onclick:function(){p(e,i)}},{text:"Ignore all",onclick:function(){p(e,i,!0)}},{text:"Finish",onclick:m}]),y=new r({items:a,context:"contextmenu",onautohide:function(e){-1!=e.target.className.indexOf("spellchecker")&&e.preventDefault()},onhide:function(){y.remove(),y=null}}),y.renderTo(document.body);var l=o.DOM.getPos(t.getContentAreaContainer()),c=t.dom.getPos(e);l.x+=c.x,l.y+=c.y,y.moveTo(l.x,l.y+e.offsetHeight)}function d(){function n(e){return t.setProgressState(!1),l(e)?(t.windowManager.alert("No misspellings found"),v=!1,void 0):(g=e,o.filter(function(t){return!!e[t[2][0]]}).mark(t.dom.create("span",{"class":"mce-spellchecker-word","data-mce-bogus":1})),o=null,t.fire("SpellcheckStart"),void 0)}function r(e,n,r){i.sendRPC({url:new a(s).toAbsolute(b.spellchecker_rpc_url),method:e,params:{lang:b.spellchecker_language||"en",words:n},success:function(e){r(e)},error:function(e,n){e="JSON Parse error."==e?"Non JSON response:"+n.responseText:"Error: "+e,t.windowManager.alert(e),t.setProgressState(!1),o=null,v=!1}})}var o,c=[],d={};if(v)return m(),void 0;v=!0;var u=t.getParam("spellchecker_wordchar_pattern")||new RegExp('[^\\s!"#$%&()*+,-./:;<=>?@[\\]^_{|}`\xa7\xa9\xab\xae\xb1\xb6\xb7\xb8\xbb\xbc\xbd\xbe\xbf\xd7\xf7\xa4\u201d\u201c\u201e]+',"g");o=new e(u,t.getBody(),t.schema).each(function(e){var t=e[2][0];if(!d[t]){if(/^\d+$/.test(t)||1==t.length)return;c.push(t),d[t]=!0}}),t.setProgressState(!0);var f=b.spellchecker_callback||r;f("spellcheck",c,n)}function u(){t.dom.select("span.mce-spellchecker-word").length||m()}function f(e){var t=e.parentNode;t.insertBefore(e.firstChild,e),e.parentNode.removeChild(e)}function p(e,r,o){o?n.each(t.dom.select("span.mce-spellchecker-word"),function(e){var t=e.innerText||e.textContent;t==r&&f(e)}):f(e),u()}function m(){var e,n,r;for(v=!1,r=t.getBody(),n=r.getElementsByTagName("span"),e=n.length;e--;)r=n[e],r.getAttribute("data-mce-index")&&f(r);t.fire("SpellcheckEnd")}function h(e){var n,r,o,i=-1,a,s;for(e=""+e,n=t.getBody().getElementsByTagName("span"),r=0;r0){for(c=u+1;c=0;c--)if(a(d[c]))return d[c];return null}var u,d,a,c;if(9===n.keyCode&&(a=r(e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))),1==a.length&&(a[1]=a[0],a[0]=":prev"),d=n.shiftKey?":prev"==a[0]?t(-1):i.get(a[0]):":next"==a[1]?t(1):i.get(a[1]))){var f=tinymce.get(d.id||d.name);d.id&&f?f.focus():window.setTimeout(function(){tinymce.Env.webkit||window.focus(),d.focus()},10),n.preventDefault()}}var i=tinymce.DOM,o=tinymce.each,r=tinymce.explode;e.on("init",function(){e.inline&&tinymce.DOM.setAttrib(e.getBody(),"tabIndex",null)}),e.on("keyup",n),tinymce.Env.gecko?e.on("keypress keydown",t):e.on("keydown",t)}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/table/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/table/plugin.min.js new file mode 100644 index 00000000..c7c2e8ed --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/table/plugin.min.js @@ -0,0 +1 @@ +!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i "+t+" tr",o);r(i,function(i,o){o+=e,r(H.select("> td, > th",i),function(e,r){var i,a,s,l;if(R[o])for(;R[o][r];)r++;for(s=n(e,"rowspan"),l=n(e,"colspan"),a=o;o+s>a;a++)for(R[a]||(R[a]=[]),i=r;r+l>i;i++)R[a][i]={part:t,real:a==o&&i==r,elm:e,rowspan:s,colspan:l}})}),e+=i.length})}function s(e,t){return e=e.cloneNode(t),e.removeAttribute("id"),e}function l(e,t){var n;return n=R[t],n?n[e]:void 0}function c(e,t,n){e&&(n=parseInt(n,10),1===n?e.removeAttribute(t,1):e.setAttribute(t,n,1))}function d(e){return e&&(H.hasClass(e.elm,"mce-item-selected")||e==P)}function u(){var e=[];return r(o.rows,function(t){r(t.cells,function(n){return H.hasClass(n,"mce-item-selected")||n==P.elm?(e.push(t),!1):void 0})}),e}function f(){var e=H.createRng();e.setStartAfter(o),e.setEndAfter(o),M.setRng(e),H.remove(o)}function p(n){var o,a={};return i.settings.table_clone_elements!==!1&&(a=e.makeMap((i.settings.table_clone_elements||"strong em b i span font h1 h2 h3 h4 h5 h6 p div").toUpperCase(),/[ ,]/)),e.walk(n,function(e){var i;return 3==e.nodeType?(r(H.getParents(e.parentNode,null,n).reverse(),function(e){a[e.nodeName]&&(e=s(e,!1),o?i&&i.appendChild(e):o=i=e,i=e)}),i&&(i.innerHTML=t.ie?" ":'
'),!1):void 0},"childNodes"),n=s(n,!1),c(n,"rowSpan",1),c(n,"colSpan",1),o?n.appendChild(o):t.ie||(n.innerHTML='
'),n}function m(){var e=H.createRng(),t;return r(H.select("tr",o),function(e){0===e.cells.length&&H.remove(e)}),0===H.select("tr",o).length?(e.setStartBefore(o),e.setEndBefore(o),M.setRng(e),H.remove(o),void 0):(r(H.select("thead,tbody,tfoot",o),function(e){0===e.rows.length&&H.remove(e)}),a(),t=R[Math.min(R.length-1,A.y)],t&&(M.select(t[Math.min(t.length-1,A.x)].elm,!0),M.collapse(!0)),void 0)}function h(e,t,n,r){var i,o,a,s,l;for(i=R[t][e].elm.parentNode,a=1;n>=a;a++)if(i=H.getNext(i,"tr")){for(o=e;o>=0;o--)if(l=R[t+a][o].elm,l.parentNode==i){for(s=1;r>=s;s++)H.insertAfter(p(l),l);break}if(-1==o)for(s=1;r>=s;s++)i.insertBefore(p(i.cells[0]),i.cells[0])}}function g(){r(R,function(e,t){r(e,function(e,r){var i,o,a;if(d(e)&&(e=e.elm,i=n(e,"colspan"),o=n(e,"rowspan"),i>1||o>1)){for(c(e,"rowSpan",1),c(e,"colSpan",1),a=0;i-1>a;a++)H.insertAfter(p(e),e);h(r,t,o-1,i)}})})}function v(t,n,i){var o,s,u,f,p,h,v,y,b,C,x;if(t?(o=S(t),s=o.x,u=o.y,f=s+(n-1),p=u+(i-1)):(A=B=null,r(R,function(e,t){r(e,function(e,n){d(e)&&(A||(A={x:n,y:t}),B={x:n,y:t})})}),s=A.x,u=A.y,f=B.x,p=B.y),y=l(s,u),b=l(f,p),y&&b&&y.part==b.part){for(g(),a(),y=l(s,u).elm,c(y,"colSpan",f-s+1),c(y,"rowSpan",p-u+1),v=u;p>=v;v++)for(h=s;f>=h;h++)R[v]&&R[v][h]&&(t=R[v][h].elm,t!=y&&(C=e.grep(t.childNodes),r(C,function(e){y.appendChild(e)}),C.length&&(C=e.grep(y.childNodes),x=0,r(C,function(e){"BR"==e.nodeName&&H.getAttrib(e,"data-mce-bogus")&&x++0&&R[t-1][a]&&(m=R[t-1][a].elm,h=n(m,"rowSpan"),h>1)){c(m,"rowSpan",h+1);continue}}else if(h=n(i,"rowspan"),h>1){c(i,"rowSpan",h+1);continue}f=p(i),c(f,"colSpan",i.colSpan),u.appendChild(f),o=i}u.hasChildNodes()&&(e?l.parentNode.insertBefore(u,l):H.insertAfter(u,l))}function b(e){var t,i;r(R,function(n){return r(n,function(n,r){return d(n)&&(t=r,e)?!1:void 0}),e?!t:void 0}),r(R,function(r,o){var a,s,l;r[t]&&(a=r[t].elm,a!=i&&(l=n(a,"colspan"),s=n(a,"rowspan"),1==l?e?(a.parentNode.insertBefore(p(a),a),h(t,o,s-1,l)):(H.insertAfter(p(a),a),h(t,o,s-1,l)):c(a,"colSpan",a.colSpan+1),i=a))})}function C(){var t=[];r(R,function(i){r(i,function(i,o){d(i)&&-1===e.inArray(t,o)&&(r(R,function(e){var t=e[o].elm,r;r=n(t,"colSpan"),r>1?c(t,"colSpan",r-1):H.remove(t)}),t.push(o))})}),m()}function x(){function e(e){var t,i,o;t=H.getNext(e,"tr"),r(e.cells,function(e){var t=n(e,"rowSpan");t>1&&(c(e,"rowSpan",t-1),i=S(e),h(i.x,i.y,1,1))}),i=S(e.cells[0]),r(R[i.y],function(e){var t;e=e.elm,e!=o&&(t=n(e,"rowSpan"),1>=t?H.remove(e):c(e,"rowSpan",t-1),o=e)})}var t;t=u(),r(t.reverse(),function(t){e(t)}),m()}function w(){var e=u();return H.remove(e),m(),e}function _(){var e=u();return r(e,function(t,n){e[n]=s(t,!0)}),e}function N(e,t){var n=u(),i=n[t?0:n.length-1],o=i.cells.length;e&&(r(R,function(e){var t;return o=0,r(e,function(e){e.real&&(o+=e.colspan),e.elm.parentNode==i&&(t=1)}),t?!1:void 0}),t||e.reverse(),r(e,function(e){var n,r=e.cells.length,a;for(n=0;r>n;n++)a=e.cells[n],c(a,"colSpan",1),c(a,"rowSpan",1);for(n=r;o>n;n++)e.appendChild(p(e.cells[r-1]));for(n=o;r>n;n++)H.remove(e.cells[n]);t?i.parentNode.insertBefore(e,i):H.insertAfter(e,i)}),H.removeClass(H.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"))}function S(e){var t;return r(R,function(n,i){return r(n,function(n,r){return n.elm==e?(t={x:r,y:i},!1):void 0}),!t}),t}function E(e){A=S(e)}function k(){var e,t;return e=t=0,r(R,function(n,i){r(n,function(n,r){var o,a;d(n)&&(n=R[i][r],r>e&&(e=r),i>t&&(t=i),n.real&&(o=n.colspan-1,a=n.rowspan-1,o&&r+o>e&&(e=r+o),a&&i+a>t&&(t=i+a)))})}),{x:e,y:t}}function T(e){var t,n,r,i,o,a,s,l,c,d;if(B=S(e),A&&B){for(t=Math.min(A.x,B.x),n=Math.min(A.y,B.y),r=Math.max(A.x,B.x),i=Math.max(A.y,B.y),o=r,a=i,d=n;a>=d;d++)e=R[d][t],e.real||t-(e.colspan-1)=c;c++)e=R[n][c],e.real||n-(e.rowspan-1)=d;d++)for(c=t;r>=c;c++)e=R[d][c],e.real&&(s=e.colspan-1,l=e.rowspan-1,s&&c+s>o&&(o=c+s),l&&d+l>a&&(a=d+l));for(H.removeClass(H.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=n;a>=d;d++)for(c=t;o>=c;c++)R[d][c]&&H.addClass(R[d][c].elm,"mce-item-selected")}}var R,A,B,P,M=i.selection,H=M.dom;o=o||H.getParent(M.getStart(),"table"),a(),P=H.getParent(M.getStart(),"th,td"),P&&(A=S(P),B=k(),P=l(A.x,A.y)),e.extend(this,{deleteTable:f,split:g,merge:v,insertRow:y,insertCol:b,deleteCols:C,deleteRows:x,cutRows:w,copyRows:_,pasteRows:N,getPos:S,setStartCell:E,setEndCell:T})}}),r(u,[f,d,c],function(e,t,n){function r(e,t){return parseInt(e.getAttribute(t)||1,10)}var i=n.each;return function(n){function o(){function t(t){function o(e,r){var i=e?"previousSibling":"nextSibling",o=n.dom.getParent(r,"tr"),s=o[i];if(s)return g(n,r,s,e),t.preventDefault(),!0;var d=n.dom.getParent(o,"table"),u=o.parentNode,f=u.nodeName.toLowerCase();if("tbody"===f||f===(e?"tfoot":"thead")){var p=a(e,d,u,"tbody");if(null!==p)return l(e,p,r)}return c(e,o,i,d)}function a(e,t,r,i){var o=n.dom.select(">"+i,t),a=o.indexOf(r);if(e&&0===a||!e&&a===o.length-1)return s(e,t);if(-1===a){var l="thead"===r.tagName.toLowerCase()?0:o.length-1;return o[l]}return o[a+(e?-1:1)]}function s(e,t){var r=e?"thead":"tfoot",i=n.dom.select(">"+r,t);return 0!==i.length?i[0]:null}function l(e,r,i){var o=d(r,e);return o&&g(n,i,o,e),t.preventDefault(),!0}function c(e,r,i,a){var s=a[i];if(s)return u(s),!0;var l=n.dom.getParent(a,"td,th");if(l)return o(e,l,t);var c=d(r,!e);return u(c),t.preventDefault(),!1}function d(e,t){var r=e&&e[t?"lastChild":"firstChild"];return r&&"BR"===r.nodeName?n.dom.getParent(r,"td,th"):r}function u(e){n.selection.setCursorLocation(e,0)}function f(){return b==e.UP||b==e.DOWN}function p(e){var t=e.selection.getNode(),n=e.dom.getParent(t,"tr");return null!==n}function m(e){for(var t=0,n=e;n.previousSibling;)n=n.previousSibling,t+=r(n,"colspan");return t}function h(e,t){var n=0,o=0;return i(e.children,function(e,i){return n+=r(e,"colspan"),o=i,n>t?!1:void 0}),o}function g(e,t,r,i){var o=m(n.dom.getParent(t,"td,th")),a=h(r,o),s=r.childNodes[a],l=d(s,i);u(l||s)}function v(e){var t=n.selection.getNode(),r=n.dom.getParent(t,"td,th"),i=n.dom.getParent(e,"td,th");return r&&r!==i&&y(r,i)}function y(e,t){return n.dom.getParent(e,"TABLE")===n.dom.getParent(t,"TABLE")}var b=t.keyCode;if(f()&&p(n)){var C=n.selection.getNode();setTimeout(function(){v(C)&&o(!t.shiftKey&&b===e.UP,C,t)},0)}}n.on("KeyDown",function(e){t(e)})}function a(){function e(e,t){var n=t.ownerDocument,r=n.createRange(),i;return r.setStartBefore(t),r.setEnd(e.endContainer,e.endOffset),i=n.createElement("body"),i.appendChild(r.cloneContents()),0===i.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length}n.on("KeyDown",function(t){var r,i,o=n.dom;(37==t.keyCode||38==t.keyCode)&&(r=n.selection.getRng(),i=o.getParent(r.startContainer,"table"),i&&n.getBody().firstChild==i&&e(r,i)&&(r=o.createRng(),r.setStartBefore(i),r.setEndBefore(i),n.selection.setRng(r),t.preventDefault()))})}function s(){n.on("KeyDown SetContent VisualAid",function(){var e;for(e=n.getBody().lastChild;e;e=e.previousSibling)if(3==e.nodeType){if(e.nodeValue.length>0)break}else if(1==e.nodeType&&!e.getAttribute("data-mce-bogus"))break;e&&"TABLE"==e.nodeName&&(n.settings.forced_root_block?n.dom.add(n.getBody(),n.settings.forced_root_block,null,t.ie?" ":'
'):n.dom.add(n.getBody(),"br",{"data-mce-bogus":"1"}))}),n.on("PreProcess",function(e){var t=e.node.lastChild;t&&("BR"==t.nodeName||1==t.childNodes.length&&("BR"==t.firstChild.nodeName||"\xa0"==t.firstChild.nodeValue))&&t.previousSibling&&"TABLE"==t.previousSibling.nodeName&&n.dom.remove(t)})}function l(){function e(e,t,n,r){var i=3,o=e.dom.getParent(t.startContainer,"TABLE"),a,s,l;return o&&(a=o.parentNode),s=t.startContainer.nodeType==i&&0===t.startOffset&&0===t.endOffset&&r&&("TR"==n.nodeName||n==a),l=("TD"==n.nodeName||"TH"==n.nodeName)&&!r,s||l}function t(){var t=n.selection.getRng(),r=n.selection.getNode(),i=n.dom.getParent(t.startContainer,"TD,TH");if(e(n,t,r,i)){i||(i=r);for(var o=i.lastChild;o.lastChild;)o=o.lastChild;t.setEnd(o,o.nodeValue.length),n.selection.setRng(t)}}n.on("KeyDown",function(){t()}),n.on("MouseDown",function(e){2!=e.button&&t()})}t.webkit&&(o(),l()),t.gecko&&(a(),s())}}),r(p,[l,m,c],function(e,t,n){return function(r){function i(){r.getBody().style.webkitUserSelect="",c&&(r.dom.removeClass(r.dom.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),c=!1)}var o=r.dom,a,s,l,c=!0;return r.on("MouseDown",function(e){2!=e.button&&(i(),s=o.getParent(e.target,"td,th"),l=o.getParent(s,"table"))}),o.bind(r.getDoc(),"mouseover",function(t){var n,i,d=t.target;if(s&&(a||d!=s)&&("TD"==d.nodeName||"TH"==d.nodeName)){i=o.getParent(d,"table"),i==l&&(a||(a=new e(r,i),a.setStartCell(s),r.getBody().style.webkitUserSelect="none"),a.setEndCell(d),c=!0),n=r.selection.getSel();try{n.removeAllRanges?n.removeAllRanges():n.empty()}catch(u){}t.preventDefault()}}),r.on("MouseUp",function(){function e(e,r){var o=new t(e,e);do{if(3==e.nodeType&&0!==n.trim(e.nodeValue).length)return r?i.setStart(e,0):i.setEnd(e,e.nodeValue.length),void 0;if("BR"==e.nodeName)return r?i.setStartBefore(e):i.setEndBefore(e),void 0}while(e=r?o.next():o.prev())}var i,c=r.selection,d,u,f,p,m;if(s){if(a&&(r.getBody().style.webkitUserSelect=""),d=o.select("td.mce-item-selected,th.mce-item-selected"),d.length>0){i=o.createRng(),f=d[0],m=d[d.length-1],i.setStartBefore(f),i.setEndAfter(f),e(f,1),u=new t(f,o.getParent(d[0],"table"));do if("TD"==f.nodeName||"TH"==f.nodeName){if(!o.hasClass(f,"mce-item-selected"))break;p=f}while(f=u.next());e(p),c.setRng(i)}r.nodeChanged(),s=a=l=null}}),r.on("KeyUp",function(){i()}),{clear:i}}}),r(h,[l,u,p,c,m,d,g],function(e,t,n,r,i,o,a){function s(r){function i(e){return e?e.replace(/px$/,""):""}function a(e){return/^[0-9]+$/.test(e)&&(e+="px"),e}function s(e){l("left center right".split(" "),function(t){r.formatter.remove("align"+t,{},e)})}function c(){var e=r.dom,t,n,c;t=r.dom.getParent(r.selection.getStart(),"table"),c=!1,n={width:i(e.getStyle(t,"width")||e.getAttrib(t,"width")),height:i(e.getStyle(t,"height")||e.getAttrib(t,"height")),cellspacing:e.getAttrib(t,"cellspacing"),cellpadding:e.getAttrib(t,"cellpadding"),border:e.getAttrib(t,"border"),caption:!!e.select("caption",t)[0]},l("left center right".split(" "),function(e){r.formatter.matchNode(t,"align"+e)&&(n.align=e)}),r.windowManager.open({title:"Table properties",items:{type:"form",layout:"grid",columns:2,data:n,defaults:{type:"textbox",maxWidth:50},items:[c?{label:"Cols",name:"cols",disabled:!0}:null,c?{label:"Rows",name:"rows",disabled:!0}:null,{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell spacing",name:"cellspacing"},{label:"Cell padding",name:"cellpadding"},{label:"Border",name:"border"},{label:"Caption",name:"caption",type:"checkbox"},{label:"Alignment",minWidth:90,name:"align",type:"listbox",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]},onsubmit:function(){var n=this.toJSON(),i;r.undoManager.transact(function(){r.dom.setAttribs(t,{cellspacing:n.cellspacing,cellpadding:n.cellpadding,border:n.border}),r.dom.setStyles(t,{width:a(n.width),height:a(n.height)}),i=e.select("caption",t)[0],i&&!n.caption&&e.remove(i),!i&&n.caption&&(i=e.create("caption"),o.ie||(i.innerHTML='
'),t.insertBefore(i,t.firstChild)),s(t),n.align&&r.formatter.apply("align"+n.align,{},t),r.focus(),r.addVisual()})}})}function d(e,t){r.windowManager.open({title:"Merge cells",body:[{label:"Cols",name:"cols",type:"textbox",size:10},{label:"Rows",name:"rows",type:"textbox",size:10}],onsubmit:function(){var n=this.toJSON();r.undoManager.transact(function(){e.merge(t,n.cols,n.rows)})}})}function u(){var e=r.dom,t,n,o=[];o=r.dom.select("td.mce-item-selected,th.mce-item-selected"),t=r.dom.getParent(r.selection.getStart(),"td,th"),!o.length&&t&&o.push(t),t=t||o[0],n={width:i(e.getStyle(t,"width")||e.getAttrib(t,"width")),height:i(e.getStyle(t,"height")||e.getAttrib(t,"height")),scope:e.getAttrib(t,"scope")},n.type=t.nodeName.toLowerCase(),l("left center right".split(" "),function(e){r.formatter.matchNode(t,"align"+e)&&(n.align=e)}),r.windowManager.open({title:"Cell properties",items:{type:"form",data:n,layout:"grid",columns:2,defaults:{type:"textbox",maxWidth:50},items:[{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell type",name:"type",type:"listbox",text:"None",minWidth:90,maxWidth:null,menu:[{text:"Cell",value:"td"},{text:"Header cell",value:"th"}]},{label:"Scope",name:"scope",type:"listbox",text:"None",minWidth:90,maxWidth:null,menu:[{text:"None",value:""},{text:"Row",value:"row"},{text:"Column",value:"col"},{text:"Row group",value:"rowgroup"},{text:"Column group",value:"colgroup"}]},{label:"Alignment",name:"align",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]},onsubmit:function(){var t=this.toJSON();r.undoManager.transact(function(){l(o,function(n){r.dom.setAttrib(n,"scope",t.scope),r.dom.setStyles(n,{width:a(t.width),height:a(t.height)}),t.type&&n.nodeName.toLowerCase()!=t.type&&(n=e.rename(n,t.type)),s(n),t.align&&r.formatter.apply("align"+t.align,{},n)}),r.focus()})}})}function f(){var e=r.dom,t,n,o,c,d=[];t=r.dom.getParent(r.selection.getStart(),"table"),n=r.dom.getParent(r.selection.getStart(),"td,th"),l(t.rows,function(t){l(t.cells,function(r){return e.hasClass(r,"mce-item-selected")||r==n?(d.push(t),!1):void 0})}),o=d[0],c={height:i(e.getStyle(o,"height")||e.getAttrib(o,"height")),scope:e.getAttrib(o,"scope")},c.type=o.parentNode.nodeName.toLowerCase(),l("left center right".split(" "),function(e){r.formatter.matchNode(o,"align"+e)&&(c.align=e)}),r.windowManager.open({title:"Row properties",items:{type:"form",data:c,columns:2,defaults:{type:"textbox"},items:[{type:"listbox",name:"type",label:"Row type",text:"None",maxWidth:null,menu:[{text:"Header",value:"thead"},{text:"Body",value:"tbody"},{text:"Footer",value:"tfoot"}]},{type:"listbox",name:"align",label:"Alignment",text:"None",maxWidth:null,menu:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"Height",name:"height"}]},onsubmit:function(){var t=this.toJSON(),n,i,o;r.undoManager.transact(function(){var c=t.type;l(d,function(l){r.dom.setAttrib(l,"scope",t.scope),r.dom.setStyles(l,{height:a(t.height)}),c!=l.parentNode.nodeName.toLowerCase()&&(n=e.getParent(l,"table"),i=l.parentNode,o=e.select(c,n)[0],o||(o=e.create(c),n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o)),o.appendChild(l),i.hasChildNodes()||e.remove(i)),s(l),t.align&&r.formatter.apply("align"+t.align,{},l)}),r.focus()})}})}function p(e){return function(){r.execCommand(e)}}function m(e,t){var n,i,a;for(a="",n=0;t>n;n++){for(a+="",i=0;e>i;i++)a+="";a+=""}a+="
"+(o.ie?" ":"
")+"
",r.insertContent(a)}function h(e,t){function n(){e.disabled(!r.dom.getParent(r.selection.getStart(),t)),r.selection.selectorChanged(t,function(t){e.disabled(!t)})}r.initialized?n():r.on("init",n)}function g(){h(this,"table")}function v(){h(this,"td,th")}function y(){var e="";e='';for(var t=0;10>t;t++){e+="";for(var n=0;10>n;n++)e+='';e+=""}return e+="",e+='
0 x 0
'}var b,C,x=this;r.addMenuItem("inserttable",{text:"Insert table",icon:"table",context:"table",onhide:function(){r.dom.removeClass(this.menu.items()[0].getEl().getElementsByTagName("a"),"mce-active")},menu:[{type:"container",html:y(),onmousemove:function(e){var t=e.target;if("A"==t.nodeName){var n=r.dom.getParent(t,"table"),i=t.getAttribute("data-mce-index");if(i!=this.lastPos){i=i.split(","),i[0]=parseInt(i[0],10),i[1]=parseInt(i[1],10);for(var o=0;10>o;o++)for(var a=0;10>a;a++)r.dom.toggleClass(n.rows[o].childNodes[a].firstChild,"mce-active",a<=i[0]&&o<=i[1]);n.nextSibling.innerHTML=i[0]+1+" x "+(i[1]+1),this.lastPos=i}}},onclick:function(e){"A"==e.target.nodeName&&this.lastPos&&(e.preventDefault(),m(this.lastPos[0]+1,this.lastPos[1]+1),this.parent().cancel())}}]}),r.addMenuItem("tableprops",{text:"Table properties",context:"table",onPostRender:g,onclick:c}),r.addMenuItem("deletetable",{text:"Delete table",context:"table",onPostRender:g,cmd:"mceTableDelete"}),r.addMenuItem("cell",{separator:"before",text:"Cell",context:"table",menu:[{text:"Cell properties",onclick:p("mceTableCellProps"),onPostRender:v},{text:"Merge cells",onclick:p("mceTableMergeCells"),onPostRender:v},{text:"Split cell",onclick:p("mceTableSplitCells"),onPostRender:v}]}),r.addMenuItem("row",{text:"Row",context:"table",menu:[{text:"Insert row before",onclick:p("mceTableInsertRowBefore"),onPostRender:v},{text:"Insert row after",onclick:p("mceTableInsertRowAfter"),onPostRender:v},{text:"Delete row",onclick:p("mceTableDeleteRow"),onPostRender:v},{text:"Row properties",onclick:p("mceTableRowProps"),onPostRender:v},{text:"-"},{text:"Cut row",onclick:p("mceTableCutRow"),onPostRender:v},{text:"Copy row",onclick:p("mceTableCopyRow"),onPostRender:v},{text:"Paste row before",onclick:p("mceTablePasteRowBefore"),onPostRender:v},{text:"Paste row after",onclick:p("mceTablePasteRowAfter"),onPostRender:v}]}),r.addMenuItem("column",{text:"Column",context:"table",menu:[{text:"Insert column before",onclick:p("mceTableInsertColBefore"),onPostRender:v},{text:"Insert column after",onclick:p("mceTableInsertColAfter"),onPostRender:v},{text:"Delete column",onclick:p("mceTableDeleteCol"),onPostRender:v}]});var w=[];l("inserttable tableprops deletetable | cell row column".split(" "),function(e){"|"==e?w.push({text:"-"}):w.push(r.menuItems[e])}),r.addButton("table",{type:"menubutton",title:"Table",menu:w}),o.isIE||r.on("click",function(e){e=e.target,"TABLE"===e.nodeName&&(r.selection.select(e),r.nodeChanged())}),x.quirks=new t(r),r.on("Init",function(){b=r.windowManager,x.cellSelection=new n(r)}),l({mceTableSplitCells:function(e){e.split()},mceTableMergeCells:function(e){var t,n,i;i=r.dom.getParent(r.selection.getStart(),"th,td"),i&&(t=i.rowSpan,n=i.colSpan),r.dom.select("td.mce-item-selected,th.mce-item-selected").length?e.merge():d(e,i)},mceTableInsertRowBefore:function(e){e.insertRow(!0)},mceTableInsertRowAfter:function(e){e.insertRow()},mceTableInsertColBefore:function(e){e.insertCol(!0)},mceTableInsertColAfter:function(e){e.insertCol()},mceTableDeleteCol:function(e){e.deleteCols()},mceTableDeleteRow:function(e){e.deleteRows()},mceTableCutRow:function(e){C=e.cutRows()},mceTableCopyRow:function(e){C=e.copyRows()},mceTablePasteRowBefore:function(e){e.pasteRows(C,!0)},mceTablePasteRowAfter:function(e){e.pasteRows(C)},mceTableDelete:function(e){e.deleteTable()}},function(t,n){r.addCommand(n,function(){var n=new e(r);n&&(t(n),r.execCommand("mceRepaint"),x.cellSelection.clear())})}),l({mceInsertTable:function(){c()},mceTableRowProps:f,mceTableCellProps:u},function(e,t){r.addCommand(t,function(t,n){e(n)})})}var l=r.each;a.add("table",s)}),a([l,u,p,h])}(this); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/template/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/template/plugin.min.js new file mode 100644 index 00000000..d628daa1 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/template/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("template",function(e){function t(){function t(e){var t=e.control.value();t.url?tinymce.util.XHR.send({url:t.url,success:function(e){a=e,n.find("iframe")[0].html(e)}}):(a=t.content,n.find("iframe")[0].html(t.content)),n.find("#description")[0].text(e.control.value().description)}var n,a,r=[];return e.settings.templates?(tinymce.each(e.settings.templates,function(e){r.push({selected:!r.length,text:e.title,value:{url:e.url,content:e.content,description:e.description}})}),n=e.windowManager.open({title:"Insert template",body:[{type:"listbox",name:"template",flex:0,label:"Templates",values:r,onselect:t},{type:"label",name:"description",label:"Description",text:" "},{type:"iframe",minWidth:600,minHeight:400,border:1}],onsubmit:function(){i(!1,a)}}),n.find("listbox")[0].fire("select"),void 0):(e.windowManager.alert("No templates defined"),void 0)}function n(t,n){function a(e,t){if(e=""+e,e.length0&&(l=s.create("div",null),l.appendChild(c[0].cloneNode(!0))),r(s.select("*",l),function(t){o(t,e.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))&&(t.innerHTML=n(e.getParam("template_cdate_format",e.getLang("template.cdate_format")))),o(t,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(t.innerHTML=n(e.getParam("template_mdate_format",e.getLang("template.mdate_format")))),o(t,e.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))&&(t.innerHTML=d)}),a(l),e.execCommand("mceInsertContent",!1,l.innerHTML),e.addVisual()}var r=tinymce.each;e.addCommand("mceInsertTemplate",i),e.addButton("template",{title:"Insert template",onclick:t}),e.addMenuItem("template",{text:"Insert template",onclick:t,context:"insert"}),e.on("PreProcess",function(t){var i=e.dom;r(i.select("div",t.node),function(t){i.hasClass(t,"mceTmpl")&&(r(i.select("*",t),function(t){i.hasClass(t,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(t.innerHTML=n(e.getParam("template_mdate_format",e.getLang("template.mdate_format"))))}),a(t))})})}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/textcolor/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/textcolor/plugin.min.js new file mode 100644 index 00000000..201f4e54 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/textcolor/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("textcolor",function(e){function t(){var t,n,a=[];for(n=e.settings.textcolor_map||["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Brown","C0C0C0","Silver","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum","FFFFFF","White"],t=0;t',r=n.length-1,o=e.settings.textcolor_rows||5,l=e.settings.textcolor_cols||8,s=0;o>s;s++){for(i+="",c=0;l>c;c++)d=s*l+c,d>r?i+="":(a=n[d],i+='
'+"
"+"");i+=""}return i+=""}function a(t){var n,a=this.parent();(n=t.target.getAttribute("data-mce-color"))&&(a.hidePanel(),n="#"+n,a.color(n),e.execCommand(a.settings.selectcmd,!1,n))}function i(){var t=this;t._color&&e.execCommand(t.settings.selectcmd,!1,t._color)}e.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",popoverAlign:"bc-tl",selectcmd:"ForeColor",panel:{html:n,onclick:a},onclick:i}),e.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",popoverAlign:"bc-tl",selectcmd:"HiliteColor",panel:{html:n,onclick:a},onclick:i})}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/visualblocks/css/visualblocks.css b/mediagoblin/static/tinymce/js/tinymce/plugins/visualblocks/css/visualblocks.css new file mode 100644 index 00000000..7a3a47a3 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/visualblocks/css/visualblocks.css @@ -0,0 +1,114 @@ +.mce-visualblocks p { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); +} + +.mce-visualblocks h1 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); +} + +.mce-visualblocks h2 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); +} + +.mce-visualblocks h3 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); +} + +.mce-visualblocks h4 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); +} + +.mce-visualblocks h5 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); +} + +.mce-visualblocks h6 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); +} + +.mce-visualblocks div { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); +} + +.mce-visualblocks section { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); +} + +.mce-visualblocks article { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); +} + +.mce-visualblocks blockquote { + padding-top: 10px; + border: 1px dashed #BBB; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); +} + +.mce-visualblocks address { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); +} + +.mce-visualblocks pre { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); +} + +.mce-visualblocks figure { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); +} + +.mce-visualblocks hgroup { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); +} + +.mce-visualblocks aside { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); +} + +.mce-visualblocks figcaption { + border: 1px dashed #BBB; +} diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js new file mode 100644 index 00000000..1cb40081 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("visualblocks",function(e,t){function n(){var t=this;e.on("VisualBlocks",function(){t.active(e.dom.hasClass(e.getBody(),"mce-visualblocks"))})}var i,a,r;window.NodeList&&(e.addCommand("mceVisualBlocks",function(){var n,o=e.dom;i||(i=o.uniqueId(),n=o.create("link",{id:i,rel:"stylesheet",href:t+"/css/visualblocks.css"}),e.getDoc().getElementsByTagName("head")[0].appendChild(n)),e.on("PreviewFormats AfterPreviewFormats",function(t){r&&o.toggleClass(e.getBody(),"mce-visualblocks","afterpreviewformats"==t.type)}),o.toggleClass(e.getBody(),"mce-visualblocks"),r=e.dom.hasClass(e.getBody(),"mce-visualblocks"),a&&a.active(o.hasClass(e.getBody(),"mce-visualblocks")),e.fire("VisualBlocks")}),e.addButton("visualblocks",{title:"Show blocks",cmd:"mceVisualBlocks",onPostRender:n}),e.addMenuItem("visualblocks",{text:"Show blocks",cmd:"mceVisualBlocks",onPostRender:n,selectable:!0,context:"view",prependToContext:!0}),e.on("init",function(){e.settings.visualblocks_default_state&&e.execCommand("mceVisualBlocks",!1,null,{skip_focus:!0})}),e.on("remove",function(){e.dom.removeClass(e.getBody(),"mce-visualblocks")}))}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/visualchars/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/visualchars/plugin.min.js new file mode 100644 index 00000000..44742388 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/visualchars/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("visualchars",function(e){function t(t){var n,a,r,o,l,s,c=e.getBody(),d=e.selection;if(i=!i,e.fire("VisualChars",{state:i}),t&&(s=d.getBookmark()),i)for(a=[],tinymce.walk(c,function(e){3==e.nodeType&&e.nodeValue&&-1!=e.nodeValue.indexOf(" ")&&a.push(e)},"childNodes"),r=0;r$1
'),l=e.dom.create("div",null,o);n=l.lastChild;)e.dom.insertAfter(n,a[r]);e.dom.remove(a[r])}else for(a=e.dom.select("span.mce-nbsp",c),r=a.length-1;r>=0;r--)e.dom.remove(a[r],1);d.moveToBookmark(s)}function n(){var t=this;e.on("VisualChars",function(e){t.active(e.state)})}var i;e.addCommand("mceVisualChars",t),e.addButton("visualchars",{title:"Show invisible characters",cmd:"mceVisualChars",onPostRender:n}),e.addMenuItem("visualchars",{text:"Show invisible characters",cmd:"mceVisualChars",onPostRender:n,selectable:!0,context:"view",prependToContext:!0}),e.on("beforegetcontent",function(e){i&&"raw"!=e.format&&!e.draft&&(i=!0,t(!1))})}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/wordcount/plugin.min.js b/mediagoblin/static/tinymce/js/tinymce/plugins/wordcount/plugin.min.js new file mode 100644 index 00000000..8c419801 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/plugins/wordcount/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("wordcount",function(e){function t(){e.theme.panel.find("#wordcount").text(["Words: {0}",a.getCount()])}var n,i,a=this;n=e.getParam("wordcount_countregex",/[\w\u2019\x27\-]+/g),i=e.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\x27\x22_+=\\\/\-]*/g),e.on("init",function(){var n=e.theme.panel&&e.theme.panel.find("#statusbar")[0];n&&window.setTimeout(function(){n.insert({type:"label",name:"wordcount",text:["Words: {0}",a.getCount()],classes:"wordcount"},0),e.on("setcontent beforeaddundo",t),e.on("keyup",function(e){32==e.keyCode&&t()})},0)}),a.getCount=function(){var t=e.getContent({format:"raw"}),a=0;if(t){t=t.replace(/\.\.\./g," "),t=t.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," "),t=t.replace(/(\w+)(&.+?;)+(\w+)/,"$1$3").replace(/&.+?;/g," "),t=t.replace(i,"");var o=t.match(n);o&&(a=o.length)}return a}}); \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/content.inline.min.css b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/content.inline.min.css new file mode 100644 index 00000000..771b83e5 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/content.inline.min.css @@ -0,0 +1 @@ +.mce-object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px!important;height:9px!important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:green;color:#fff}.mce-spellchecker-word{background:url(img/wline.gif) repeat-x bottom left;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#39f!important}.mce-edit-focus{outline:1px dotted #333} \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/content.min.css b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/content.min.css new file mode 100644 index 00000000..b9bbab14 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/content.min.css @@ -0,0 +1 @@ +body{background-color:#fff;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;scrollbar-3dlight-color:#f0f0ee;scrollbar-arrow-color:#676662;scrollbar-base-color:#f0f0ee;scrollbar-darkshadow-color:#ddd;scrollbar-face-color:#e0e0dd;scrollbar-highlight-color:#f0f0ee;scrollbar-shadow-color:#f0f0ee;scrollbar-track-color:#f5f5f5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-object{border:1px dotted #3a3a3a;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px!important;height:9px!important;border:1px dotted #3a3a3a;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:green;color:#fff}.mce-spellchecker-word{background:url(img/wline.gif) repeat-x bottom left;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#39f!important}.mce-edit-focus{outline:1px dotted #333} \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.eot b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.eot new file mode 100644 index 0000000000000000000000000000000000000000..42a34a57e8aa92f9f307b62a735fc323d0720e08 GIT binary patch literal 7896 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 G(f + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.ttf b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8fad6572ef4f74b34786c35d23af01b163c5b0f0 GIT binary patch literal 7712 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 literal 0 HcmV?d00001 diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.woff b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.woff new file mode 100644 index 0000000000000000000000000000000000000000..e5f89435de970da81913c81ba566f43b3ec98f12 GIT binary patch literal 7964 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 L@*{>Dzc2p}lK$2K literal 0 HcmV?d00001 diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.svg b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.svg new file mode 100644 index 00000000..fa1d05f6 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.svg @@ -0,0 +1,150 @@ + + + + +This is a custom SVG font generated by IcoMoon. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.ttf b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4529badb8748c5a7310bf7e835e51fe8a0fe277a GIT binary patch literal 8032 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 literal 0 HcmV?d00001 diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/readme.md b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/readme.md new file mode 100644 index 00000000..fa5d6394 --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/readme.md @@ -0,0 +1 @@ +Icons are generated and provided by the http://icomoon.io service. diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/img/anchor.gif b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/img/anchor.gif new file mode 100644 index 0000000000000000000000000000000000000000..606348c7f53dba169a9aca7279a2a973f4b07bdb GIT binary patch literal 53 zcmZ?wbhEHbWM^P!XkcUjg8%>jEB<5wG8q|kKzxu40~1eAV&{y5e`l1KFoiKNSOWkz C+YCGa literal 0 HcmV?d00001 diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/img/loader.gif b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/img/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..c69e937232b24ea30f01c68bbd2ebc798dcecfcb GIT binary patch literal 2608 zcmdVcdr(tX9tZGC9yiG~=H_*Q-0%n(kWqP*D#hw{AQu8;1%gl-Hrf&{2?48KX;hHy z3Ze*zEz4t3XdUFyLbNPUYlA`|B}P=N1fqtL1*}S;87#|-W9v<#G;ul(e%d3)N(^9c$d2Dz{7}?ErjNd;{EMKkCsk21~b9Gvg zDo<7L=3Z5HNbVlZUcm1eg#o#CZCJU`3IYHwM->zCd?uYrF3vKFeM}v?f+%s?E>ly|3W25ry9#NNbTx-}0ON58dTrs^ix{_1O0Wh~SVSBlH)Ajn zPn^Gbjz}PCtN@#keR&hK&Dhl-b$kZ8^S)x#dh0{7X=X%CCJk7P1PSO>T&S8I4{#Lg zb5#)o=;!ZP*1nM{cI4@(x7o27*SA()NHmrn67aN@Pmi~(i_SnrjYnwh36aG%!@i0d zqbvfa44f|?OG4ntP|nbjhEl1)Yp6ZN@yjy zy4==QmLy%t;ps3R?~f2KfTTI|2?q8dFd6^z5GF+Xa&Y)sjG)hxit80pPcOP zJ z*LW{SyGHD%hUotV+W%I}fBLAIx!8|7#}$;clKQ+{&FjDqGQ2ZNx(lYM3*%~}ILnao zM`aui55~ZFJlu^!5rdA9Q_7H68H_;##u{x(Yn-vSfIRCb^Nqsg zGRS!Egm>h+o<}LeV4&CLReo9FrDjDvs}8?JwC)#Qs|ie=r?~xUh)&*d`Fx>FG}%X# zNdtDHBKhLPC0wpooFDAQKL%*6T|ULH$=wX!NhcasgD3d;-d$I6yRK3yN+E~C1335_iLOt+*9uvSZ`>*KA}vm}08wRq=>5l|t*Na&jR z-C1&C`nkEk#sB|@yyt-#fXngP04My zm7u$Q%EJbHp`>~`5W&L{W!6`y&}LMS;jfUpgO~7TLVMRZ9IC)IZp0A${`yp0{&wco z#1nx@XMkhqeK%7?RE7JdLr1^nwFfaJ0Q&Lv?WNJ%9}VSJsNY2+UYs2%EU0J~ayFXv zi*?7KCXQHkD)O6!0Q%4N+HTODHxJ{kQSuQX$l-rSwkwh(zMkdfzxyGwl@yHC)C4p< z&n2%8#M?)Q@mgHL1ot8`SFdSEj9ye|jHy+U8#@HoUExG=@AVkRAe_qYm4EpzK6L*& zh`)26?V#f4#_h^P9G^%>h2-H3)$QP zQovu6J9qDvsxqweDdNNa!Lb?L4_UF{tLX_nN7r0U_vF14YKcGR-*Gl} zx3oG)bzf|65dBxD-;2ZCp??K;+TuQ9onnK?==5hzbkb^r_g>z4#D8mcv8(+XdoszA zCx-qhdgxMNMotj}SiL_6V(tLcsK7(M(r(%u<}QrVfOvyK6_;~NOTlPGfX@M7S5YQF z&*$(ylJMHJt^_aQeu{C6NaTE$G3HNN@_SnN8YcaKn%`)F@~L1x+ah7-gEJPpc6w%3 zyX}r+Qk$4RHZzfH){e~F*qJ{d*L8a6n4;U?+{de0-t)mal#TVxe)3F}^UBh+zd T)6_**#cgp_+?JL9(ew3BlNF>u literal 0 HcmV?d00001 diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/img/object.gif b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/img/object.gif new file mode 100644 index 0000000000000000000000000000000000000000..cccd7f023fb80908cb33bb7d9604236cd21b7ae7 GIT binary patch literal 152 zcmV;J0B8S4Nk%w1VG#fg0J9GO<>lo+KR<78Z?v?uS65g4{r%Y3*xlXT%F4>`@9+2b z_ww@cot>Tk|Nk>HGXMYpA^8LW000jFEC2ui01*HU000C<(8)=wd#<&tyXIMjHBV`d zBSi|xsj3(;nD0kQ0aJq8eLH~x02P|t2!_J&Wqb%0io?#xD.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#FFF;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#FFF;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #EEE;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#CCC;text-shadow:0 1px 0 white;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#AAA}.mce-window-head .mce-title{display:inline-block;*display:inline;*zoom:1;line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:whiteSmoke;border-top:1px solid #DDD;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000;-moz-box-shadow:0 0 5px #000;box-shadow:0 0 5px #000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:0;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #c5c5c5;position:relative;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fff,#d9d9d9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#d9d9d9));background-image:-webkit-linear-gradient(top,#fff,#d9d9d9);background-image:-o-linear-gradient(top,#fff,#d9d9d9);background-image:linear-gradient(to bottom,#fff,#d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffd9d9d9',GradientType=0);zoom:1;border-color:#d9d9d9 #d9d9d9 #b3b3b3;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.mce-btn:hover,.mce-btn:focus{text-decoration:none;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#e3e3e3;background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#ccc));background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(to bottom,#f2f2f2,#ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffcccccc',GradientType=0);zoom:1;border-color:#ccc #ccc #a6a6a6;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-btn.mce-disabled,.mce-btn.mce-disabled:hover{cursor:default;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.65;filter:alpha(opacity=65);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#d6d6d6;background-image:-moz-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e6e6e6),to(#bfbfbf));background-image:-webkit-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:-o-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:linear-gradient(to bottom,#e6e6e6,#bfbfbf);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6',endColorstr='#ffbfbfbf',GradientType=0);zoom:1;border-color:#bfbfbf #bfbfbf #999;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);zoom:1;border-color:#04c #04c #002b80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-primary:hover,.mce-primary:focus{color:#fff;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#005fb3;background-image:-moz-linear-gradient(top,#0077b3,#003cb3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0077b3),to(#003cb3));background-image:-webkit-linear-gradient(top,#0077b3,#003cb3);background-image:-o-linear-gradient(top,#0077b3,#003cb3);background-image:linear-gradient(to bottom,#0077b3,#003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3',endColorstr='#ff003cb3',GradientType=0);zoom:1;border-color:#003cb3 #003cb3 #026;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-primary button{color:#fff}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:3px 5px;font-size:12px;line-height:15px}.mce-btn-small i{margin-top:0}.mce-btn .mce-caret{margin-top:8px;*margin-top:6px;margin-left:0}.mce-btn-small .mce-caret{margin-top:6px;*margin-top:4px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #444;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#999}.mce-caret.mce-up{border-bottom:4px solid #444;border-top:0}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-btn:hover,.mce-btn-group .mce-btn:focus{color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#e3e3e3;background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#ccc));background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(to bottom,#f2f2f2,#ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffcccccc',GradientType=0);zoom:1;border-color:#ccc #ccc #a6a6a6;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-btn-group .mce-btn.mce-disabled,.mce-btn-group .mce-btn.mce-disabled:hover{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fff,#d9d9d9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#d9d9d9));background-image:-webkit-linear-gradient(top,#fff,#d9d9d9);background-image:-o-linear-gradient(top,#fff,#d9d9d9);background-image:linear-gradient(to bottom,#fff,#d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffd9d9d9',GradientType=0);zoom:1;border-color:#d9d9d9 #d9d9d9 #b3b3b3;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-btn-group .mce-btn.mce-active,.mce-btn-group .mce-btn.mce-active:hover,.mce-btn-group .mce-btn:active{color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#d6d6d6;background-image:-moz-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e6e6e6),to(#bfbfbf));background-image:-webkit-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:-o-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:linear-gradient(to bottom,#e6e6e6,#bfbfbf);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6',endColorstr='#ffbfbfbf',GradientType=0);zoom:1;border-color:#bfbfbf #bfbfbf #999;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.mce-btn-group .mce-btn.mce-disabled button{opacity:.65;filter:alpha(opacity=65);zoom:1}.mce-btn-group .mce-first{border-left:1px solid #c5c5c5;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #c5c5c5;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fdfdfd,#ddd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdfdfd),to(#ddd));background-image:-webkit-linear-gradient(top,#fdfdfd,#ddd);background-image:-o-linear-gradient(top,#fdfdfd,#ddd);background-image:linear-gradient(to bottom,#fdfdfd,#ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd',endColorstr='#ffdddddd',GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0}.mce-checked i.mce-i-checkbox{color:#000;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox{border:1px solid #59a5e1;border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}.mce-colorbutton .mce-ico{position:relative}.mce-colorpicker{background:#FFF}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-17px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#c5c5c5;border-right-color:#c5c5c5}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;width:100px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.mce-combobox input{border-color:1px solid #c5c5c5;border-right-color:rgba(0,0,0,0.15);height:28px}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox *:focus{border-color:#59a5e1;border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#000}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:gray;color:white}.mce-path .mce-divider{display:inline}.mce-fieldset{border:0 solid #9e9e9e;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-iframe{border:0 solid #c5c5c5;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);border:0 solid #c5c5c5;overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label-disabled .mce-text{color:#999}.mce-label.mce-multiline{white-space:pre-wrap}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #ddd}.mce-menubar .mce-menubtn button{color:#000}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#ddd;filter:none}.mce-menubtn.mce-disabled span{color:#999}.mce-menubtn span{margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px;line-height:15px;*line-height:16px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item.mce-disabled .mce-text{color:#999}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0);zoom:1}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:white}.mce-menu-item.mce-disabled:hover{background:#CCC}.mce-menu-shortcut{display:inline-block;color:#999}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #666}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret{border-left-color:#FFF}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item-sep,.mce-menu-item-sep:hover{padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#e5e5e5;border-bottom:1px solid white;cursor:default;filter:none}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item.mce-active{background-color:#c8def4;outline:1px solid #c5c5c5}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa;background-color:transparent;outline:0}.mce-menu-item-checkbox.mce-active{background-color:#FFF;outline:0}.mce-menu{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#FFF;border:1px solid #CCC;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline;*zoom:1}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}i.mce-radio{padding:1px;margin:0 3px 0 0;background-color:#fafafa;border:1px solid #cacece;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fdfdfd,#ddd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdfdfd),to(#ddd));background-image:-webkit-linear-gradient(top,#fdfdfd,#ddd);background-image:-o-linear-gradient(top,#fdfdfd,#ddd);background-image:linear-gradient(to bottom,#fdfdfd,#ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd',endColorstr='#ffdddddd',GradientType=0);zoom:1}i.mce-radio:after{font-family:Arial;font-size:12px;color:#000;content:'\25cf'}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#000}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#c5c5c5;border-right-color:#c5c5c5}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #ccc}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #ccc;border-width:1px 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-textbox{background:#FFF;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);display:inline-block;-webkit-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#000}.mce-textbox:focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}@font-face{font-family:'icomoon';src:url('fonts/icomoon.eot');src:url('fonts/icomoon.eot?#iefix') format('embedded-opentype'),url('fonts/icomoon.svg#icomoon') format('svg'),url('fonts/icomoon.woff') format('woff'),url('fonts/icomoon.ttf') format('truetype');font-weight:normal;font-style:normal}@font-face{font-family:'icomoon-small';src:url('fonts/icomoon-small.eot');src:url('fonts/icomoon-small.eot?#iefix') format('embedded-opentype'),url('fonts/icomoon-small.svg#icomoon') format('svg'),url('fonts/icomoon-small.woff') format('woff'),url('fonts/icomoon-small.ttf') format('truetype');font-weight:normal;font-style:normal}.mce-ico{font-family:'icomoon';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'icomoon-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = this.currentStyle['-ie7-icon'].substr(1,1)+' ')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-inserttime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#BBB} \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/skin.min.css b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/skin.min.css new file mode 100644 index 00000000..74b56bed --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/skin.min.css @@ -0,0 +1 @@ +.mce-container,.mce-container *,.mce-widget,.mce-widget *{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#000;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-container ::-webkit-scrollbar{width:8px;height:8px;-webkit-border-radius:4px}.mce-container ::-webkit-scrollbar-track,.mce-container ::-webkit-scrollbar-track-piece{background-color:transparent}.mce-container ::-webkit-scrollbar-thumb{background-color:rgba(53,57,71,0.3);width:6px;height:6px;-webkit-border-radius:4px}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:visible!important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#FFF;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #c5c5c5;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td div{border:1px solid #808080;width:12px;height:12px;margin:2px;cursor:pointer}.mce-grid td div:hover{border-color:black}.mce-grid td div:focus{border-color:#59a5e1;outline:1px solid rgba(82,168,236,0.8);border-color:rgba(82,168,236,0.8)}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover{border-color:#c5c5c5}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#e8e8e8;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#c4daff;background:#deeafa}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fdfdfd,#ddd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdfdfd),to(#ddd));background-image:-webkit-linear-gradient(top,#fdfdfd,#ddd);background-image:-o-linear-gradient(top,#fdfdfd,#ddd);background-image:linear-gradient(to bottom,#fdfdfd,#ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd',endColorstr='#ffdddddd',GradientType=0);zoom:1}.mce-floatpanel{position:absolute;-webkit-box-shadow:#ccc 5px 5px 5px;-moz-box-shadow:#ccc 5px 5px 5px;box-shadow:#ccc 5px 5px 5px}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{top:0;left:0;background:#fff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#FFF;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#FFF;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #EEE;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#CCC;text-shadow:0 1px 0 white;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#AAA}.mce-window-head .mce-title{display:inline-block;*display:inline;*zoom:1;line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:whiteSmoke;border-top:1px solid #DDD;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000;-moz-box-shadow:0 0 5px #000;box-shadow:0 0 5px #000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:0;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:0;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #c5c5c5;position:relative;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fff,#d9d9d9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#d9d9d9));background-image:-webkit-linear-gradient(top,#fff,#d9d9d9);background-image:-o-linear-gradient(top,#fff,#d9d9d9);background-image:linear-gradient(to bottom,#fff,#d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffd9d9d9',GradientType=0);zoom:1;border-color:#d9d9d9 #d9d9d9 #b3b3b3;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.mce-btn:hover,.mce-btn:focus{text-decoration:none;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#e3e3e3;background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#ccc));background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(to bottom,#f2f2f2,#ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffcccccc',GradientType=0);zoom:1;border-color:#ccc #ccc #a6a6a6;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-btn.mce-disabled,.mce-btn.mce-disabled:hover{cursor:default;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.65;filter:alpha(opacity=65);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#d6d6d6;background-image:-moz-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e6e6e6),to(#bfbfbf));background-image:-webkit-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:-o-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:linear-gradient(to bottom,#e6e6e6,#bfbfbf);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6',endColorstr='#ffbfbfbf',GradientType=0);zoom:1;border-color:#bfbfbf #bfbfbf #999;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);zoom:1;border-color:#04c #04c #002b80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-primary:hover,.mce-primary:focus{color:#fff;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#005fb3;background-image:-moz-linear-gradient(top,#0077b3,#003cb3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0077b3),to(#003cb3));background-image:-webkit-linear-gradient(top,#0077b3,#003cb3);background-image:-o-linear-gradient(top,#0077b3,#003cb3);background-image:linear-gradient(to bottom,#0077b3,#003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3',endColorstr='#ff003cb3',GradientType=0);zoom:1;border-color:#003cb3 #003cb3 #026;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-primary button{color:#fff}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:3px 5px;font-size:12px;line-height:15px}.mce-btn-small i{margin-top:0}.mce-btn .mce-caret{margin-top:8px;*margin-top:6px;margin-left:0}.mce-btn-small .mce-caret{margin-top:6px;*margin-top:4px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #444;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#999}.mce-caret.mce-up{border-bottom:4px solid #444;border-top:0}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-btn:hover,.mce-btn-group .mce-btn:focus{color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#e3e3e3;background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#ccc));background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(to bottom,#f2f2f2,#ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffcccccc',GradientType=0);zoom:1;border-color:#ccc #ccc #a6a6a6;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-btn-group .mce-btn.mce-disabled,.mce-btn-group .mce-btn.mce-disabled:hover{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fff,#d9d9d9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#d9d9d9));background-image:-webkit-linear-gradient(top,#fff,#d9d9d9);background-image:-o-linear-gradient(top,#fff,#d9d9d9);background-image:linear-gradient(to bottom,#fff,#d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffd9d9d9',GradientType=0);zoom:1;border-color:#d9d9d9 #d9d9d9 #b3b3b3;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.mce-btn-group .mce-btn.mce-active,.mce-btn-group .mce-btn.mce-active:hover,.mce-btn-group .mce-btn:active{color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#d6d6d6;background-image:-moz-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e6e6e6),to(#bfbfbf));background-image:-webkit-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:-o-linear-gradient(top,#e6e6e6,#bfbfbf);background-image:linear-gradient(to bottom,#e6e6e6,#bfbfbf);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6',endColorstr='#ffbfbfbf',GradientType=0);zoom:1;border-color:#bfbfbf #bfbfbf #999;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.mce-btn-group .mce-btn.mce-disabled button{opacity:.65;filter:alpha(opacity=65);zoom:1}.mce-btn-group .mce-first{border-left:1px solid #c5c5c5;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #c5c5c5;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fdfdfd,#ddd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdfdfd),to(#ddd));background-image:-webkit-linear-gradient(top,#fdfdfd,#ddd);background-image:-o-linear-gradient(top,#fdfdfd,#ddd);background-image:linear-gradient(to bottom,#fdfdfd,#ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd',endColorstr='#ffdddddd',GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0}.mce-checked i.mce-i-checkbox{color:#000;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox{border:1px solid #59a5e1;border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}.mce-colorbutton .mce-ico{position:relative}.mce-colorpicker{background:#FFF}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-17px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#c5c5c5;border-right-color:#c5c5c5}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;width:100px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.mce-combobox input{border-color:1px solid #c5c5c5;border-right-color:rgba(0,0,0,0.15);height:28px}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox *:focus{border-color:#59a5e1;border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#000}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:gray;color:white}.mce-path .mce-divider{display:inline}.mce-fieldset{border:0 solid #9e9e9e;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-iframe{border:0 solid #c5c5c5;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);border:0 solid #c5c5c5;overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label-disabled .mce-text{color:#999}.mce-label.mce-multiline{white-space:pre-wrap}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #ddd}.mce-menubar .mce-menubtn button{color:#000}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#ddd;filter:none}.mce-menubtn.mce-disabled span{color:#999}.mce-menubtn span{margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px;line-height:15px;*line-height:16px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item.mce-disabled .mce-text{color:#999}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0);zoom:1}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:white}.mce-menu-item.mce-disabled:hover{background:#CCC}.mce-menu-shortcut{display:inline-block;color:#999}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #666}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret{border-left-color:#FFF}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item-sep,.mce-menu-item-sep:hover{padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#e5e5e5;border-bottom:1px solid white;cursor:default;filter:none}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item.mce-active{background-color:#c8def4;outline:1px solid #c5c5c5}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa;background-color:transparent;outline:0}.mce-menu-item-checkbox.mce-active{background-color:#FFF;outline:0}.mce-menu{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#FFF;border:1px solid #CCC;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline;*zoom:1}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}i.mce-radio{padding:1px;margin:0 3px 0 0;background-color:#fafafa;border:1px solid #cacece;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top,#fdfdfd,#ddd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdfdfd),to(#ddd));background-image:-webkit-linear-gradient(top,#fdfdfd,#ddd);background-image:-o-linear-gradient(top,#fdfdfd,#ddd);background-image:linear-gradient(to bottom,#fdfdfd,#ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd',endColorstr='#ffdddddd',GradientType=0);zoom:1}i.mce-radio:after{font-family:Arial;font-size:12px;color:#000;content:'\25cf'}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#000}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#c5c5c5;border-right-color:#c5c5c5}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #ccc}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #ccc;border-width:1px 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-textbox{background:#FFF;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);display:inline-block;-webkit-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#000}.mce-textbox:focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}@font-face{font-family:'tinymce';src:url('fonts/icomoon.eot');src:url('fonts/icomoon.eot?#iefix') format('embedded-opentype'),url('fonts/icomoon.svg#icomoon') format('svg'),url('fonts/icomoon.woff') format('woff'),url('fonts/icomoon.ttf') format('truetype');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/icomoon-small.eot');src:url('fonts/icomoon-small.eot?#iefix') format('embedded-opentype'),url('fonts/icomoon-small.svg#icomoon') format('svg'),url('fonts/icomoon-small.woff') format('woff'),url('fonts/icomoon-small.ttf') format('truetype');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-inserttime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#BBB} \ No newline at end of file diff --git a/mediagoblin/static/tinymce/js/tinymce/themes/modern/theme.min.js b/mediagoblin/static/tinymce/js/tinymce/themes/modern/theme.min.js new file mode 100644 index 00000000..55e8942e --- /dev/null +++ b/mediagoblin/static/tinymce/js/tinymce/themes/modern/theme.min.js @@ -0,0 +1 @@ +tinymce.ThemeManager.add("modern",function(e){function t(){function t(t){var i,r=[];if(t)return m(t.split(/[ ,]/),function(t){function n(){var n=e.selection;"bullist"==a&&n.selectorChanged("ul > li",function(e,n){for(var i,r=n.parents.length;r--&&(i=n.parents[r].nodeName,"OL"!=i&&"UL"!=i););t.active("UL"==i)}),"numlist"==a&&n.selectorChanged("ol > li",function(e,n){for(var i,r=n.parents.length;r--&&(i=n.parents[r].nodeName,"OL"!=i&&"UL"!=i););t.active("OL"==i)}),t.settings.stateSelector&&n.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&n.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var a;"|"==t?i=null:u.has(t)?(t={type:t},c.toolbar_items_size&&(t.size=c.toolbar_items_size),r.push(t),i=null):(i||(i={type:"buttongroup",items:[]},r.push(i)),e.buttons[t]&&(a=t,t=e.buttons[a],t.type=t.type||"button",c.toolbar_items_size&&(t.size=c.toolbar_items_size),t=u.create(t),i.items.push(t),e.initialized?n():e.on("init",n)))}),n.push({type:"toolbar",layout:"flow",items:r}),!0}for(var n=[],i=1;10>i&&t(c["toolbar"+i]);i++);return n.length||t(c.toolbar||h),n}function n(){function t(t){var n;return"|"==t?{text:"|"}:n=e.menuItems[t]}function n(n){var i,r,a,o,s;if(s=tinymce.makeMap((c.removed_menuitems||"").split(/[ ,]/)),c.menu?(r=c.menu[n],o=!0):r=f[n],r){i={text:r.title},a=[],m((r.items||"").split(/[ ,]/),function(e){var n=t(e);n&&!s[e]&&a.push(t(e))}),o||m(e.menuItems,function(e){e.context==n&&("before"==e.separator&&a.push({text:"|"}),e.prependToContext?a.unshift(e):a.push(e),"after"==e.separator&&a.push({text:"|"}))});for(var l=0;lr;r++)if(o=n[r],o&&o.func.call(o.scope,e)===!1&&e.preventDefault(),e.isImmediatePropagationStopped())return}var a=this,s={},l,c,u,d,f;c=o+(+new Date).toString(32),d="onmouseenter"in document.documentElement,u="onfocusin"in document.documentElement,f={mouseenter:"mouseover",mouseleave:"mouseout"},l=1,a.domLoaded=!1,a.events=s,a.bind=function(t,o,p,h){function m(e){i(n(e||_.event),g)}var g,v,y,b,C,x,w,_=window;if(t&&3!==t.nodeType&&8!==t.nodeType){for(t[c]?g=t[c]:(g=l++,t[c]=g,s[g]={}),h=h||t,o=o.split(" "),y=o.length;y--;)b=o[y],x=m,C=w=!1,"DOMContentLoaded"===b&&(b="ready"),a.domLoaded&&"ready"===b&&"complete"==t.readyState?p.call(h,n({type:b})):(d||(C=f[b],C&&(x=function(e){var t,r;if(t=e.currentTarget,r=e.relatedTarget,r&&t.contains)r=t.contains(r);else for(;r&&r!==t;)r=r.parentNode;r||(e=n(e||_.event),e.type="mouseout"===e.type?"mouseleave":"mouseenter",e.target=t,i(e,g))})),u||"focusin"!==b&&"focusout"!==b||(w=!0,C="focusin"===b?"focus":"blur",x=function(e){e=n(e||_.event),e.type="focus"===e.type?"focusin":"focusout",i(e,g)}),v=s[g][b],v?"ready"===b&&a.domLoaded?p({type:b}):v.push({func:p,scope:h}):(s[g][b]=v=[{func:p,scope:h}],v.fakeName=C,v.capture=w,v.nativeHandler=x,"ready"===b?r(t,x,a):e(t,C||b,x,w)));return t=v=0,p}},a.unbind=function(e,n,r){var i,o,l,u,d,f;if(!e||3===e.nodeType||8===e.nodeType)return a;if(i=e[c]){if(f=s[i],n){for(n=n.split(" "),l=n.length;l--;)if(d=n[l],o=f[d]){if(r)for(u=o.length;u--;)o[u].func===r&&o.splice(u,1);r&&0!==o.length||(delete f[d],t(e,o.fakeName||d,o.nativeHandler,o.capture))}}else{for(d in f)o=f[d],t(e,o.fakeName||d,o.nativeHandler,o.capture);f={}}for(d in f)return a;delete s[i];try{delete e[c]}catch(p){e[c]=null}}return a},a.fire=function(e,t,r){var o;if(!e||3===e.nodeType||8===e.nodeType)return a;r=n(null,r),r.type=t,r.target=e;do o=e[c],o&&i(r,o),e=e.parentNode||e.ownerDocument||e.defaultView||e.parentWindow;while(e&&!r.isPropagationStopped());return a},a.clean=function(e){var t,n,r=a.unbind;if(!e||3===e.nodeType||8===e.nodeType)return a;if(e[c]&&r(e),e.getElementsByTagName||(e=e.document),e&&e.getElementsByTagName)for(r(e),n=e.getElementsByTagName("*"),t=n.length;t--;)e=n[t],e[c]&&r(e);return a},a.destroy=function(){s={}},a.cancel=function(e){return e&&(e.preventDefault(),e.stopImmediatePropagation()),!1}}var o="mce-data-",a=/^(?:mouse|contextmenu)|click/;return i.Event=new i,i.Event.bind(window,"ready",function(){}),i}),r(c,[],function(){function e(e){return gt.test(e+"")}function n(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>N.cacheLength&&delete e[t.shift()],e[n]=r,r}}function i(e){return e[F]=!0,e}function o(e){var t=L.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t=null}}function a(e,t,n,r){var i,o,a,s,l,c,u,p,h,m;if((t?t.ownerDocument||t:W)!==L&&B(t),t=t||L,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(D&&!r){if(i=vt.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&I(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return et.apply(n,t.getElementsByTagName(e)),n;if((a=i[3])&&z.getElementsByClassName&&t.getElementsByClassName)return et.apply(n,t.getElementsByClassName(a)),n}if(z.qsa&&!H.test(e)){if(u=!0,p=F,h=t,m=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(c=d(e),(u=t.getAttribute("id"))?p=u.replace(Ct,"\\$&"):t.setAttribute("id",p),p="[id='"+p+"'] ",l=c.length;l--;)c[l]=p+f(c[l]);h=mt.test(e)&&t.parentNode||t,m=c.join(",")}if(m)try{return et.apply(n,h.querySelectorAll(m)),n}catch(g){}finally{u||t.removeAttribute("id")}}}return C(e.replace(ct,"$1"),t,n,r)}function s(e,t){var n=t&&e,r=n&&(~t.sourceIndex||X)-(~e.sourceIndex||X);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function l(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function c(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function u(e){return i(function(t){return t=+t,i(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function d(e,t){var n,r,i,o,s,l,c,u=$[e+" "];if(u)return t?0:u.slice(0);for(s=e,l=[],c=N.preFilter;s;){(!n||(r=ut.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=dt.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(ct," ")}),s=s.slice(n.length));for(o in N.filter)!(r=ht[o].exec(s))||c[o]&&!(r=c[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?a.error(e):$(e,l).slice(0)}function f(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function p(e,t,n){var r=t.dir,i=n&&"parentNode"===r,o=U++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,l,c,u=V+" "+o;if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i)if(c=t[F]||(t[F]={}),(l=c[r])&&l[0]===u){if((s=l[1])===!0||s===_)return s===!0}else if(l=c[r]=[u],l[1]=e(t,n,a)||_,l[1]===!0)return!0}}function h(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function m(e,t,n,r,i){for(var o,a=[],s=0,l=e.length,c=null!=t;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),c&&t.push(s));return a}function g(e,t,n,r,o,a){return r&&!r[F]&&(r=g(r)),o&&!o[F]&&(o=g(o,a)),i(function(i,a,s,l){var c,u,d,f=[],p=[],h=a.length,g=i||b(t||"*",s.nodeType?[s]:s,[]),v=!e||!i&&t?g:m(g,f,e,s,l),y=n?o||(i?e:h||r)?[]:a:v;if(n&&n(v,y,s,l),r)for(c=m(y,p),r(c,[],s,l),u=c.length;u--;)(d=c[u])&&(y[p[u]]=!(v[p[u]]=d));if(i){if(o||e){if(o){for(c=[],u=y.length;u--;)(d=y[u])&&c.push(v[u]=d);o(null,y=[],c,l)}for(u=y.length;u--;)(d=y[u])&&(c=o?nt.call(i,d):f[u])>-1&&(i[c]=!(a[c]=d))}}else y=m(y===a?y.splice(h,y.length):y),o?o(null,a,y,l):et.apply(a,y)})}function v(e){for(var t,n,r,i=e.length,o=N.relative[e[0].type],a=o||N.relative[" "],s=o?1:0,l=p(function(e){return e===t},a,!0),c=p(function(e){return nt.call(t,e)>-1},a,!0),u=[function(e,n,r){return!o&&(r||n!==T)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];i>s;s++)if(n=N.relative[e[s].type])u=[p(h(u),n)];else{if(n=N.filter[e[s].type].apply(null,e[s].matches),n[F]){for(r=++s;i>r&&!N.relative[e[r].type];r++);return g(s>1&&h(u),s>1&&f(e.slice(0,s-1)).replace(ct,"$1"),n,r>s&&v(e.slice(s,r)),i>r&&v(e=e.slice(r)),i>r&&f(e))}u.push(n)}return h(u)}function y(e,t){var n=0,r=t.length>0,o=e.length>0,s=function(i,s,l,c,u){var d,f,p,h=[],g=0,v="0",y=i&&[],b=null!=u,C=T,x=i||o&&N.find.TAG("*",u&&s.parentNode||s),w=V+=null==C?1:Math.random()||.1;for(b&&(T=s!==L&&s,_=n);null!=(d=x[v]);v++){if(o&&d){for(f=0;p=e[f++];)if(p(d,s,l)){c.push(d);break}b&&(V=w,_=++n)}r&&((d=!p&&d)&&g--,i&&y.push(d))}if(g+=v,r&&v!==g){for(f=0;p=t[f++];)p(y,h,s,l);if(i){if(g>0)for(;v--;)y[v]||h[v]||(h[v]=Q.call(c));h=m(h)}et.apply(c,h),b&&!i&&h.length>0&&g+t.length>1&&a.uniqueSort(c)}return b&&(V=w,T=C),y};return r?i(s):s}function b(e,t,n){for(var r=0,i=t.length;i>r;r++)a(e,t[r],n);return n}function C(e,t,n,r){var i,o,a,s,l,c=d(e);if(!r&&1===c.length){if(o=c[0]=c[0].slice(0),o.length>2&&"ID"===(a=o[0]).type&&9===t.nodeType&&D&&N.relative[o[1].type]){if(t=(N.find.ID(a.matches[0].replace(wt,_t),t)||[])[0],!t)return n;e=e.slice(o.shift().value.length)}for(i=ht.needsContext.test(e)?0:o.length;i--&&(a=o[i],!N.relative[s=a.type]);)if((l=N.find[s])&&(r=l(a.matches[0].replace(wt,_t),mt.test(o[0].type)&&t.parentNode||t))){if(o.splice(i,1),e=r.length&&f(o),!e)return et.apply(n,r),n;break}}return k(e,c)(r,t,!D,n,mt.test(e)),n}function x(){}var w,_,N,E,S,k,T,R,A,B,L,M,D,H,P,O,I,F="sizzle"+-new Date,W=window.document,z={},V=0,U=0,q=n(),$=n(),j=n(),K=!1,G=function(){return 0},Y=typeof t,X=1<<31,J=[],Q=J.pop,Z=J.push,et=J.push,tt=J.slice,nt=J.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},rt="[\\x20\\t\\r\\n\\f]",it="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ot=it.replace("w","w#"),at="([*^$|!~]?=)",st="\\["+rt+"*("+it+")"+rt+"*(?:"+at+rt+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+ot+")|)|)"+rt+"*\\]",lt=":("+it+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+st.replace(3,8)+")*)|.*)\\)|)",ct=new RegExp("^"+rt+"+|((?:^|[^\\\\])(?:\\\\.)*)"+rt+"+$","g"),ut=new RegExp("^"+rt+"*,"+rt+"*"),dt=new RegExp("^"+rt+"*([\\x20\\t\\r\\n\\f>+~])"+rt+"*"),ft=new RegExp(lt),pt=new RegExp("^"+ot+"$"),ht={ID:new RegExp("^#("+it+")"),CLASS:new RegExp("^\\.("+it+")"),NAME:new RegExp("^\\[name=['\"]?("+it+")['\"]?\\]"),TAG:new RegExp("^("+it.replace("w","w*")+")"),ATTR:new RegExp("^"+st),PSEUDO:new RegExp("^"+lt),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+rt+"*(even|odd|(([+-]|)(\\d*)n|)"+rt+"*(?:([+-]|)"+rt+"*(\\d+)|))"+rt+"*\\)|)","i"),needsContext:new RegExp("^"+rt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+rt+"*((?:-\\d)?\\d*)"+rt+"*\\)|)(?=[^-]|$)","i")},mt=/[\x20\t\r\n\f]*[+~]/,gt=/^[^{]+\{\s*\[native code/,vt=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,yt=/^(?:input|select|textarea|button)$/i,bt=/^h\d$/i,Ct=/'|\\/g,xt=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,wt=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,_t=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{et.apply(J=tt.call(W.childNodes),W.childNodes),J[W.childNodes.length].nodeType}catch(Nt){et={apply:J.length?function(e,t){Z.apply(e,tt.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}S=a.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},B=a.setDocument=function(n){var r=n?n.ownerDocument||n:W;return r!==L&&9===r.nodeType&&r.documentElement?(L=r,M=r.documentElement,D=!S(r),z.getElementsByTagName=o(function(e){return e.appendChild(r.createComment("")),!e.getElementsByTagName("*").length}),z.attributes=o(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),z.getElementsByClassName=o(function(e){return e.innerHTML="",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),z.getByName=o(function(e){e.id=F+0,e.appendChild(L.createElement("a")).setAttribute("name",F),e.appendChild(L.createElement("i")).setAttribute("name",F),M.appendChild(e);var t=r.getElementsByName&&r.getElementsByName(F).length===2+r.getElementsByName(F+0).length;return M.removeChild(e),t}),z.sortDetached=o(function(e){return e.compareDocumentPosition&&1&e.compareDocumentPosition(L.createElement("div"))}),N.attrHandle=o(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==Y&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},z.getByName?(N.find.ID=function(e,t){if(typeof t.getElementById!==Y&&D){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},N.filter.ID=function(e){var t=e.replace(wt,_t);return function(e){return e.getAttribute("id")===t}}):(N.find.ID=function(e,n){if(typeof n.getElementById!==Y&&D){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==Y&&r.getAttributeNode("id").value===e?[r]:t:[]}},N.filter.ID=function(e){var t=e.replace(wt,_t);return function(e){var n=typeof e.getAttributeNode!==Y&&e.getAttributeNode("id");return n&&n.value===t}}),N.find.TAG=z.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==Y?t.getElementsByTagName(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},N.find.NAME=z.getByName&&function(e,t){return typeof t.getElementsByName!==Y?t.getElementsByName(name):void 0},N.find.CLASS=z.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==Y&&D?t.getElementsByClassName(e):void 0},P=[],H=[":focus"],(z.qsa=e(r.querySelectorAll))&&(o(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||H.push("\\["+rt+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||H.push(":checked")}),o(function(e){e.innerHTML="",e.querySelectorAll("[i^='']").length&&H.push("[*^$]="+rt+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||H.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),H.push(",.*:")})),(z.matchesSelector=e(O=M.matchesSelector||M.mozMatchesSelector||M.webkitMatchesSelector||M.oMatchesSelector||M.msMatchesSelector))&&o(function(e){z.disconnectedMatch=O.call(e,"div"),O.call(e,"[s!='']:x"),P.push("!=",lt)}),H=new RegExp(H.join("|")),P=P.length&&new RegExp(P.join("|")),I=e(M.contains)||M.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},G=M.compareDocumentPosition?function(e,t){if(e===t)return K=!0,0;var n=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return n?1&n||R&&t.compareDocumentPosition(e)===n?e===r||I(W,e)?-1:t===r||I(W,t)?1:A?nt.call(A,e)-nt.call(A,t):0:4&n?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var n,i=0,o=e.parentNode,a=t.parentNode,l=[e],c=[t];if(e===t)return K=!0,0;if(!o||!a)return e===r?-1:t===r?1:o?-1:a?1:0;if(o===a)return s(e,t);for(n=e;n=n.parentNode;)l.unshift(n);for(n=t;n=n.parentNode;)c.unshift(n);for(;l[i]===c[i];)i++;return i?s(l[i],c[i]):l[i]===W?-1:c[i]===W?1:0},L):L},a.matches=function(e,t){return a(e,null,null,t)},a.matchesSelector=function(e,t){if((e.ownerDocument||e)!==L&&B(e),t=t.replace(xt,"='$1']"),z.matchesSelector&&D&&(!P||!P.test(t))&&!H.test(t))try{var n=O.call(e,t);if(n||z.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return a(t,L,null,[e]).length>0},a.contains=function(e,t){return(e.ownerDocument||e)!==L&&B(e),I(e,t)},a.attr=function(e,t){var n;return(e.ownerDocument||e)!==L&&B(e),D&&(t=t.toLowerCase()),(n=N.attrHandle[t])?n(e):!D||z.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},a.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},a.uniqueSort=function(e){var t,n=[],r=0,i=0;if(K=!z.detectDuplicates,R=!z.sortDetached,A=!z.sortStable&&e.slice(0),e.sort(G),K){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return e},E=a.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=E(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=E(t);return n},N=a.selectors={cacheLength:50,createPseudo:i,match:ht,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(wt,_t),e[3]=(e[4]||e[5]||"").replace(wt,_t),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||a.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&a.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return ht.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&ft.test(n)&&(t=d(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(wt,_t).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=q[e+" "];return t||(t=new RegExp("(^|"+rt+")"+e+"("+rt+"|$)"))&&q(e,function(e){return t.test(e.className||typeof e.getAttribute!==Y&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=a.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,p,h,m=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(g){if(o){for(;m;){for(d=t;d=d[m];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;h=m="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?g.firstChild:g.lastChild],a&&y){for(u=g[F]||(g[F]={}),c=u[e]||[],p=c[0]===V&&c[1],f=c[0]===V&&c[2],d=p&&g.childNodes[p];d=++p&&d&&d[m]||(f=p=0)||h.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[V,p,f];break}}else if(y&&(c=(t[F]||(t[F]={}))[e])&&c[0]===V)f=c[1];else for(;(d=++p&&d&&d[m]||(f=p=0)||h.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[F]||(d[F]={}))[e]=[V,f]),d!==t)););return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=N.pseudos[e]||N.setFilters[e.toLowerCase()]||a.error("unsupported pseudo: "+e);return r[F]?r(t):r.length>1?(n=[e,e,"",t],N.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,n){for(var i,o=r(e,t),a=o.length;a--;)i=nt.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:i(function(e){var t=[],n=[],r=k(e.replace(ct,"$1"));return r[F]?i(function(e,t,n,i){for(var o,a=r(e,null,i,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:i(function(e){return function(t){return a(e,t).length>0}}),contains:i(function(e){return function(t){return(t.textContent||t.innerText||E(t)).indexOf(e)>-1}}),lang:i(function(e){return pt.test(e||"")||a.error("unsupported lang: "+e),e=e.replace(wt,_t).toLowerCase(),function(t){var n;do if(n=D?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(e){var t=window.location&&window.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===M},focus:function(e){return e===L.activeElement&&(!L.hasFocus||L.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!N.pseudos.empty(e)},header:function(e){return bt.test(e.nodeName)},input:function(e){return yt.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:u(function(){return[0]}),last:u(function(e,t){return[t-1]}),eq:u(function(e,t,n){return[0>n?n+t:n]}),even:u(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:u(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:u(function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e}),gt:u(function(e,t,n){for(var r=0>n?n+t:n;++rn;n++)t[n]=e[n];return t}function f(e,t){var n;if(t.indexOf)return t.indexOf(e);for(n=t.length;n--;)if(t[n]===e)return n;return-1}function p(e,t){var n,r,i,o,a;if(e)if(n=e.length,n===o){for(r in e)if(e.hasOwnProperty(r)&&(a=e[r],t.call(a,a,r)===!1))break}else for(i=0;n>i&&(a=e[i],t.call(a,a,r)!==!1);i++);return e}function h(e,n,r){for(var i=[],o=e[n];o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!c(o).is(r));)1===o.nodeType&&i.push(o),o=o[n];return i}function m(e,t,n,r){for(var i=[];e;e=e[n])r&&e.nodeType!==r||e===t||i.push(e);return i}var g=document,v=Array.prototype.push,y=Array.prototype.slice,b=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,C=e.Event,x=l("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"),w=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},_=/^\s*|\s*$/g,N=function(e){return null===e||e===t?"":(""+e).replace(_,"")};return c.fn=c.prototype={constructor:c,selector:"",length:0,init:function(e,t){var n=this,r,a;if(!e)return n;if(e.nodeType)return n.context=n[0]=e,n.length=1,n;if(i(e)){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:b.exec(e),!r)return c(t||document).find(e);if(r[1])for(a=o(e).firstChild;a;)this.add(a),a=a.nextSibling;else{if(a=g.getElementById(r[2]),a.id!==r[2])return n.find(e);n.length=1,n[0]=a}}else this.add(e);return n},toArray:function(){return d(this)},add:function(e){var t=this;return w(e)?v.apply(t,e):e instanceof c?t.add(e.toArray()):v.call(t,e),t},attr:function(e,n){var i=this;if("object"==typeof e)p(e,function(e,t){i.attr(t,e)});else{if(!r(n))return i[0]&&1===i[0].nodeType?i[0].getAttribute(e):t;this.each(function(){1===this.nodeType&&this.setAttribute(e,n)})}return i},css:function(e,n){var i=this;if("object"==typeof e)p(e,function(e,t){i.css(t,e)});else{if(e=e.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),!r(n))return i[0]?i[0].style[e]:t;"number"!=typeof n||x[e]||(n+="px"),i.each(function(){var t=this.style;"opacity"===e&&this.runtimeStyle&&"undefined"==typeof this.runtimeStyle.opacity&&(t.filter=""===n?"":"alpha(opacity="+100*n+")");try{t[e]=n}catch(r){}})}return i},remove:function(){for(var e=this,t,n=this.length;n--;)t=e[n],C.clean(t),t.parentNode&&t.parentNode.removeChild(t);return this},empty:function(){for(var e=this,t,n=this.length;n--;)for(t=e[n];t.firstChild;)t.removeChild(t.firstChild);return this},html:function(e){var t=this,n;if(r(e)){for(n=t.length;n--;)t[n].innerHTML=e;return t}return t[0]?t[0].innerHTML:""},text:function(e){var t=this,n;if(r(e)){for(n=t.length;n--;)t[n].innerText=t[0].textContent=e;return t}return t[0]?t[0].innerText||t[0].textContent:""},append:function(){return a(this,arguments,function(e){1===this.nodeType&&this.appendChild(e)})},prepend:function(){return a(this,arguments,function(e){1===this.nodeType&&this.insertBefore(e,this.firstChild)})},before:function(){var e=this;return e[0]&&e[0].parentNode?a(e,arguments,function(e){this.parentNode.insertBefore(e,this.nextSibling)}):e},after:function(){var e=this;return e[0]&&e[0].parentNode?a(e,arguments,function(e){this.parentNode.insertBefore(e,this)}):e},appendTo:function(e){return c(e).append(this),this},addClass:function(e){return this.toggleClass(e,!0)},removeClass:function(e){return this.toggleClass(e,!1)},toggleClass:function(e,t){var n=this;return-1!==e.indexOf(" ")?p(e.split(" "),function(){n.toggleClass(this,t)}):n.each(function(){var n=this,r;s(n,e)!==t&&(r=n.className,t?n.className+=r?" "+e:e:n.className=N((" "+r+" ").replace(" "+e+" "," ")))}),n},hasClass:function(e){return s(this[0],e)},each:function(e){return p(this,e)},on:function(e,t){return this.each(function(){C.bind(this,e,t)})},off:function(e,t){return this.each(function(){C.unbind(this,e,t)})},show:function(){return this.css("display","")},hide:function(){return this.css("display","none")},slice:function(){return new c(y.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},replaceWith:function(e){var t=this;return t[0]&&t[0].parentNode.replaceChild(c(e)[0],t[0]),t},wrap:function(e){return e=c(e)[0],this.each(function(){var t=this,n=e.cloneNode(!1);t.parentNode.insertBefore(n,t),n.appendChild(t)})},unwrap:function(){return this.each(function(){for(var e=this,t=e.firstChild,n;t;)n=t,t=t.nextSibling,e.parentNode.insertBefore(n,e)})},clone:function(){var e=[];return this.each(function(){e.push(this.cloneNode(!0))}),c(e)},find:function(e){var t,n,r=[];for(t=0,n=this.length;n>t;t++)c.find(e,this[t],r);return c(r)},push:v,sort:[].sort,splice:[].splice},u(c,{extend:u,toArray:d,inArray:f,isArray:w,each:p,trim:N,makeMap:l,find:n,expr:n.selectors,unique:n.uniqueSort,text:n.getText,isXMLDoc:n.isXML,contains:n.contains,filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?c.find.matchesSelector(t[0],e)?[t[0]]:[]:c.find.matches(e,t)}}),p({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t){return h(e,"parentNode",t)},next:function(e){return m(e,"nextSibling",1)},prev:function(e){return m(e,"previousSibling",1)},nextNodes:function(e){return m(e,"nextSibling")},prevNodes:function(e){return m(e,"previousSibling")},children:function(e){return m(e.firstChild,"nextSibling",1)},contents:function(e){return d(("iframe"===e.nodeName?e.contentDocument||e.contentWindow.document:e).childNodes)}},function(e,t){c.fn[e]=function(n){var r=this,i;if(r.length>1)throw new Error("DomQuery only supports traverse functions on a single node.");return r[0]&&(i=t(r[0],n)),i=c(i),n&&"parentsUntil"!==e?i.filter(n):i}}),c.fn.filter=function(e){return c.filter(e)},c.fn.is=function(e){return!!e&&this.filter(e).length>0},c.fn.init.prototype=c.fn,c}),r(d,[],function(){return function(e,t){function n(e,t,n,r){function i(e){return e=parseInt(e,10).toString(16),e.length>1?e:"0"+e}return"#"+i(t)+i(n)+i(r)}var r=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,i=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,o=/\s*([^:]+):\s*([^;]+);?/g,a=/\s+$/,s,l,c={},u,d="\ufeff"; +for(e=e||{},u=("\\\" \\' \\; \\: ; : "+d).split(" "),l=0;l0&&("font-weight"===g&&"700"===v?v="bold":("color"===g||"background-color"===g)&&(v=v.toLowerCase()),v=v.replace(r,n),v=v.replace(i,p),h[g]=y?f(v,!0):v),o.lastIndex=m.index+m[0].length;s("border",""),s("border","-width"),s("border","-color"),s("border","-style"),s("padding",""),s("margin",""),u("border","border-width","border-style","border-color"),"medium none"===h.border&&delete h.border}return h},serialize:function(e,n){function r(n){var r,o,a,l;if(r=t.styles[n])for(o=0,a=r.length;a>o;o++)n=r[o],l=e[n],l!==s&&l.length>0&&(i+=(i.length>0?" ":"")+n+": "+l+";")}var i="",o,a;if(n&&t&&t.styles)r("*"),r(n);else for(o in e)a=e[o],a!==s&&a.length>0&&(i+=(i.length>0?" ":"")+o+": "+a+";");return i}}}}),r(f,[],function(){return function(e,t){function n(e,n,r,i){var o,a;if(e){if(!i&&e[n])return e[n];if(e!=t){if(o=e[r])return o;for(a=e.parentNode;a&&a!=t;a=a.parentNode)if(o=a[r])return o}}}var r=e;this.current=function(){return r},this.next=function(e){return r=n(r,"firstChild","nextSibling",e)},this.prev=function(e){return r=n(r,"lastChild","previousSibling",e)}}}),r(p,[],function(){function e(e,n){return n?"array"==n&&g(e)?!0:typeof e==n:e!==t}function n(e){var t=[],n,r;for(n=0,r=e.length;r>n;n++)t[n]=e[n];return t}function r(e,t,n){var r;for(e=e||[],t=t||",","string"==typeof e&&(e=e.split(t)),n=n||{},r=e.length;r--;)n[e[r]]={};return n}function i(e,n,r){var i,o;if(!e)return 0;if(r=r||e,e.length!==t){for(i=0,o=e.length;o>i;i++)if(n.call(r,e[i],i,e)===!1)return 0}else for(i in e)if(e.hasOwnProperty(i)&&n.call(r,e[i],i,e)===!1)return 0;return 1}function o(e,t){var n=[];return i(e,function(e){n.push(t(e))}),n}function a(e,t){var n=[];return i(e,function(e){(!t||t(e))&&n.push(e)}),n}function s(e,t,n){var r=this,i,o,a,s,l,c=0;if(e=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(e),a=e[3].match(/(^|\.)(\w+)$/i)[2],o=r.createNS(e[3].replace(/\.\w+$/,""),n),!o[a]){if("static"==e[2])return o[a]=t,this.onCreate&&this.onCreate(e[2],e[3],o[a]),void 0;t[a]||(t[a]=function(){},c=1),o[a]=t[a],r.extend(o[a].prototype,t),e[5]&&(i=r.resolve(e[5]).prototype,s=e[5].match(/\.(\w+)$/i)[1],l=o[a],o[a]=c?function(){return i[s].apply(this,arguments)}:function(){return this.parent=i[s],l.apply(this,arguments)},o[a].prototype[a]=o[a],r.each(i,function(e,t){o[a].prototype[t]=i[t]}),r.each(t,function(e,t){i[t]?o[a].prototype[t]=function(){return this.parent=i[t],e.apply(this,arguments)}:t!=a&&(o[a].prototype[t]=e)})),r.each(t["static"],function(e,t){o[a][t]=e})}}function l(e,t){var n,r;if(e)for(n=0,r=e.length;r>n;n++)if(e[n]===t)return n;return-1}function c(e,n){var r,i,o,a=arguments,s;for(r=1,i=a.length;i>r;r++){n=a[r];for(o in n)n.hasOwnProperty(o)&&(s=n[o],s!==t&&(e[o]=s))}return e}function u(e,t,n,r){r=r||this,e&&(n&&(e=e[n]),i(e,function(e,i){return t.call(r,e,i,n)===!1?!1:(u(e,t,n,r),void 0)}))}function d(e,t){var n,r;for(t=t||window,e=e.split("."),n=0;nn&&(t=t[e[n]],t);n++);return t}function p(t,n){return!t||e(t,"array")?t:o(t.split(n||","),m)}var h=/^\s*|\s*$/g,m=function(e){return null===e||e===t?"":(""+e).replace(h,"")},g=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};return{trim:m,isArray:g,is:e,toArray:n,makeMap:r,each:i,map:o,grep:a,inArray:l,extend:c,create:s,walk:u,createNS:d,resolve:f,explode:p}}),r(h,[p],function(e){function t(n){function r(){return H.createDocumentFragment()}function i(e,t){_(F,e,t)}function o(e,t){_(W,e,t)}function a(e){i(e.parentNode,j(e))}function s(e){i(e.parentNode,j(e)+1)}function l(e){o(e.parentNode,j(e))}function c(e){o(e.parentNode,j(e)+1)}function u(e){e?(D[U]=D[V],D[q]=D[z]):(D[V]=D[U],D[z]=D[q]),D.collapsed=F}function d(e){a(e),c(e)}function f(e){i(e,0),o(e,1===e.nodeType?e.childNodes.length:e.nodeValue.length)}function p(e,t){var n=D[V],r=D[z],i=D[U],o=D[q],a=t.startContainer,s=t.startOffset,l=t.endContainer,c=t.endOffset;return 0===e?w(n,r,a,s):1===e?w(i,o,a,s):2===e?w(i,o,l,c):3===e?w(n,r,l,c):void 0}function h(){N(I)}function m(){return N(P)}function g(){return N(O)}function v(e){var t=this[V],r=this[z],i,o;3!==t.nodeType&&4!==t.nodeType||!t.nodeValue?(t.childNodes.length>0&&(o=t.childNodes[r]),o?t.insertBefore(e,o):t.appendChild(e)):r?r>=t.nodeValue.length?n.insertAfter(e,t):(i=t.splitText(r),t.parentNode.insertBefore(e,i)):t.parentNode.insertBefore(e,t)}function y(e){var t=D.extractContents();D.insertNode(e),e.appendChild(t),D.selectNode(e)}function b(){return $(new t(n),{startContainer:D[V],startOffset:D[z],endContainer:D[U],endOffset:D[q],collapsed:D.collapsed,commonAncestorContainer:D.commonAncestorContainer})}function C(e,t){var n;if(3==e.nodeType)return e;if(0>t)return e;for(n=e.firstChild;n&&t>0;)--t,n=n.nextSibling;return n?n:e}function x(){return D[V]==D[U]&&D[z]==D[q]}function w(e,t,r,i){var o,a,s,l,c,u;if(e==r)return t==i?0:i>t?-1:1;for(o=r;o&&o.parentNode!=e;)o=o.parentNode;if(o){for(a=0,s=e.firstChild;s!=o&&t>a;)a++,s=s.nextSibling;return a>=t?-1:1}for(o=e;o&&o.parentNode!=r;)o=o.parentNode;if(o){for(a=0,s=r.firstChild;s!=o&&i>a;)a++,s=s.nextSibling;return i>a?-1:1}for(l=n.findCommonAncestor(e,r),c=e;c&&c.parentNode!=l;)c=c.parentNode;for(c||(c=l),u=r;u&&u.parentNode!=l;)u=u.parentNode;if(u||(u=l),c==u)return 0;for(s=l.firstChild;s;){if(s==c)return-1;if(s==u)return 1;s=s.nextSibling}}function _(e,t,r){var i,o;for(e?(D[V]=t,D[z]=r):(D[U]=t,D[q]=r),i=D[U];i.parentNode;)i=i.parentNode;for(o=D[V];o.parentNode;)o=o.parentNode;o==i?w(D[V],D[z],D[U],D[q])>0&&D.collapse(e):D.collapse(e),D.collapsed=x(),D.commonAncestorContainer=n.findCommonAncestor(D[V],D[U])}function N(e){var t,n=0,r=0,i,o,a,s,l,c;if(D[V]==D[U])return E(e);for(t=D[U],i=t.parentNode;i;t=i,i=i.parentNode){if(i==D[V])return S(t,e);++n}for(t=D[V],i=t.parentNode;i;t=i,i=i.parentNode){if(i==D[U])return k(t,e);++r}for(o=r-n,a=D[V];o>0;)a=a.parentNode,o--;for(s=D[U];0>o;)s=s.parentNode,o++;for(l=a.parentNode,c=s.parentNode;l!=c;l=l.parentNode,c=c.parentNode)a=l,s=c;return T(a,s,e)}function E(e){var t,n,i,o,a,s,l,c,u;if(e!=I&&(t=r()),D[z]==D[q])return t;if(3==D[V].nodeType){if(n=D[V].nodeValue,i=n.substring(D[z],D[q]),e!=O&&(o=D[V],c=D[z],u=D[q]-D[z],0===c&&u>=o.nodeValue.length-1?o.parentNode.removeChild(o):o.deleteData(c,u),D.collapse(F)),e==I)return;return i.length>0&&t.appendChild(H.createTextNode(i)),t}for(o=C(D[V],D[z]),a=D[q]-D[z];o&&a>0;)s=o.nextSibling,l=L(o,e),t&&t.appendChild(l),--a,o=s;return e!=O&&D.collapse(F),t}function S(e,t){var n,i,o,a,s,l;if(t!=I&&(n=r()),i=R(e,t),n&&n.appendChild(i),o=j(e),a=o-D[z],0>=a)return t!=O&&(D.setEndBefore(e),D.collapse(W)),n;for(i=e.previousSibling;a>0;)s=i.previousSibling,l=L(i,t),n&&n.insertBefore(l,n.firstChild),--a,i=s;return t!=O&&(D.setEndBefore(e),D.collapse(W)),n}function k(e,t){var n,i,o,a,s,l;for(t!=I&&(n=r()),o=A(e,t),n&&n.appendChild(o),i=j(e),++i,a=D[q]-i,o=e.nextSibling;o&&a>0;)s=o.nextSibling,l=L(o,t),n&&n.appendChild(l),--a,o=s;return t!=O&&(D.setStartAfter(e),D.collapse(F)),n}function T(e,t,n){var i,o,a,s,l,c,u,d;for(n!=I&&(o=r()),i=A(e,n),o&&o.appendChild(i),a=e.parentNode,s=j(e),l=j(t),++s,c=l-s,u=e.nextSibling;c>0;)d=u.nextSibling,i=L(u,n),o&&o.appendChild(i),u=d,--c;return i=R(t,n),o&&o.appendChild(i),n!=O&&(D.setStartAfter(e),D.collapse(F)),o}function R(e,t){var n=C(D[U],D[q]-1),r,i,o,a,s,l=n!=D[U];if(n==e)return B(n,l,W,t);for(r=n.parentNode,i=B(r,W,W,t);r;){for(;n;)o=n.previousSibling,a=B(n,l,W,t),t!=I&&i.insertBefore(a,i.firstChild),l=F,n=o;if(r==e)return i;n=r.previousSibling,r=r.parentNode,s=B(r,W,W,t),t!=I&&s.appendChild(i),i=s}}function A(e,t){var n=C(D[V],D[z]),r=n!=D[V],i,o,a,s,l;if(n==e)return B(n,r,F,t);for(i=n.parentNode,o=B(i,W,F,t);i;){for(;n;)a=n.nextSibling,s=B(n,r,F,t),t!=I&&o.appendChild(s),r=F,n=a;if(i==e)return o;n=i.nextSibling,i=i.parentNode,l=B(i,W,F,t),t!=I&&l.appendChild(o),o=l}}function B(e,t,r,i){var o,a,s,l,c;if(t)return L(e,i);if(3==e.nodeType){if(o=e.nodeValue,r?(l=D[z],a=o.substring(l),s=o.substring(0,l)):(l=D[q],a=o.substring(0,l),s=o.substring(l)),i!=O&&(e.nodeValue=s),i==I)return;return c=n.clone(e,W),c.nodeValue=a,c}if(i!=I)return n.clone(e,W)}function L(e,t){return t!=I?t==O?n.clone(e,F):e:(e.parentNode.removeChild(e),void 0)}function M(){return n.create("body",null,g()).outerText}var D=this,H=n.doc,P=0,O=1,I=2,F=!0,W=!1,z="startOffset",V="startContainer",U="endContainer",q="endOffset",$=e.extend,j=n.nodeIndex;return $(D,{startContainer:H,startOffset:0,endContainer:H,endOffset:0,collapsed:F,commonAncestorContainer:H,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:i,setEnd:o,setStartBefore:a,setStartAfter:s,setEndBefore:l,setEndAfter:c,collapse:u,selectNode:d,selectNodeContents:f,compareBoundaryPoints:p,deleteContents:h,extractContents:m,cloneContents:g,insertNode:v,surroundContents:y,cloneRange:b,toStringIE:M}),D}return t.prototype.toString=function(){return this.toStringIE()},t}),r(m,[p],function(e){function t(e){var t;return t=document.createElement("div"),t.innerHTML=e,t.textContent||t.innerText||e}function n(e,t){var n,r,i,a={};if(e){for(e=e.split(","),t=t||10,n=0;n\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,l=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=/[<>&\"\']/g,u=/&(#x|#)?([\w]+);/g,d={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};o={'"':""","'":"'","<":"<",">":">","&":"&"},a={"<":"<",">":">","&":"&",""":'"',"'":"'"},i=n("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var f={encodeRaw:function(e,t){return e.replace(t?s:l,function(e){return o[e]||e})},encodeAllRaw:function(e){return(""+e).replace(c,function(e){return o[e]||e})},encodeNumeric:function(e,t){return e.replace(t?s:l,function(e){return e.length>1?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":o[e]||"&#"+e.charCodeAt(0)+";"})},encodeNamed:function(e,t,n){return n=n||i,e.replace(t?s:l,function(e){return o[e]||n[e]||e})},getEncodeFunc:function(e,t){function a(e,n){return e.replace(n?s:l,function(e){return o[e]||t[e]||"&#"+e.charCodeAt(0)+";"||e})}function c(e,n){return f.encodeNamed(e,n,t)}return t=n(t)||i,e=r(e.replace(/\+/g,",")),e.named&&e.numeric?a:e.named?t?c:f.encodeNamed:e.numeric?f.encodeNumeric:f.encodeRaw},decode:function(e){return e.replace(u,function(e,n,r){return n?(r=parseInt(r,2===n.length?16:10),r>65535?(r-=65536,String.fromCharCode(55296+(r>>10),56320+(1023&r))):d[r]||String.fromCharCode(r)):a[e]||i[e]||t(e)})}};return f}),r(g,[],function(){var e=navigator,t=e.userAgent,n,r,i,o,a,s;n=window.opera&&window.opera.buildNumber,r=/WebKit/.test(t),i=!r&&!n&&/MSIE/gi.test(t)&&/Explorer/gi.test(e.appName),i=i&&/MSIE (\w+)\./.exec(t)[1],o=!r&&/Gecko/.test(t),a=-1!=t.indexOf("Mac"),s=/(iPad|iPhone)/.test(t);var l=!s||t.match(/AppleWebKit\/(\d*)/)[1]>=534;return{opera:n,webkit:r,ie:i,gecko:o,mac:a,iOS:s,contentEditable:l,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!=i,range:window.getSelection&&"Range"in window,documentMode:i?document.documentMode||7:10}}),r(v,[c,d,l,f,h,m,g,p],function(e,n,r,i,o,a,s,l){function c(e,t){var i=this,o;i.doc=e,i.win=window,i.files={},i.counter=0,i.stdMode=!g||e.documentMode>=8,i.boxModel=!g||"CSS1Compat"==e.compatMode||i.stdMode,i.hasOuterHTML="outerHTML"in e.createElement("a"),i.settings=t=h({keep_values:!1,hex_colors:1},t),i.schema=t.schema,i.styles=new n({url_converter:t.url_converter,url_converter_scope:t.url_converter_scope},t.schema),i.fixDoc(e),i.events=t.ownEvents?new r(t.proxy):r.Event,o=t.schema?t.schema.getBlockElements():{},i.isBlock=function(e){if(!e)return!1;var t=e.nodeType;return t?!(1!==t||!o[e.nodeName]):!!o[e]}}var u=l.each,d=l.is,f=l.grep,p=l.trim,h=l.extend,m=s.webkit,g=s.ie,v=/^([a-z0-9],?)+$/i,y=/^[ \t\r\n]*$/,b=l.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," ");return c.prototype={root:null,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},fixDoc:function(e){var t=this.settings,n;if(g&&t.schema){"abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video".replace(/\w+/g,function(t){e.createElement(t)});for(n in t.schema.getCustomElements())e.createElement(n)}},clone:function(e,t){var n=this,r,i;return!g||1!==e.nodeType||t?e.cloneNode(t):(i=n.doc,t?r.firstChild:(r=i.createElement(e.nodeName),u(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),r))},getRoot:function(){var e=this;return e.get(e.settings.root_element)||e.doc.body},getViewPort:function(e){var t,n;return e=e?e:this.win,t=e.document,n=this.boxModel?t.documentElement:t.body,{x:e.pageXOffset||n.scrollLeft,y:e.pageYOffset||n.scrollTop,w:e.innerWidth||n.clientWidth,h:e.innerHeight||n.clientHeight}},getRect:function(e){var t=this,n,r;return e=t.get(e),n=t.getPos(e),r=t.getSize(e),{x:n.x,y:n.y,w:r.w,h:r.h}},getSize:function(e){var t=this,n,r;return e=t.get(e),n=t.getStyle(e,"width"),r=t.getStyle(e,"height"),-1===n.indexOf("px")&&(n=0),-1===r.indexOf("px")&&(r=0),{w:parseInt(n,10)||e.offsetWidth||e.clientWidth,h:parseInt(r,10)||e.offsetHeight||e.clientHeight}},getParent:function(e,t,n){return this.getParents(e,t,n,!1)},getParents:function(e,n,r,i){var o=this,a,s=[];for(e=o.get(e),i=i===t,r=r||("BODY"!=o.getRoot().nodeName?o.getRoot().parentNode:null),d(n,"string")&&(a=n,n="*"===n?function(e){return 1==e.nodeType}:function(e){return o.is(e,a)});e&&e!=r&&e.nodeType&&9!==e.nodeType;){if(!n||n(e)){if(!i)return e;s.push(e)}e=e.parentNode}return i?s:null},get:function(e){var t;return e&&this.doc&&"string"==typeof e&&(t=e,e=this.doc.getElementById(e),e&&e.id!==t)?this.doc.getElementsByName(t)[1]:e},getNext:function(e,t){return this._findSib(e,t,"nextSibling")},getPrev:function(e,t){return this._findSib(e,t,"previousSibling")},select:function(t,n){var r=this;return e(t,r.get(n)||r.get(r.settings.root_element)||r.doc,[])},is:function(n,r){var i;if(n.length===t){if("*"===r)return 1==n.nodeType;if(v.test(r)){for(r=r.toLowerCase().split(/,/),n=n.nodeName.toLowerCase(),i=r.length-1;i>=0;i--)if(r[i]==n)return!0;return!1}}return n.nodeType&&1!=n.nodeType?!1:e.matches(r,n.nodeType?[n]:n).length>0},add:function(e,t,n,r,i){var o=this;return this.run(e,function(e){var a;return a=d(t,"string")?o.doc.createElement(t):t,o.setAttribs(a,n),r&&(r.nodeType?a.appendChild(r):o.setHTML(a,r)),i?a:e.appendChild(a)})},create:function(e,t,n){return this.add(this.doc.createElement(e),e,t,n,1)},createHTML:function(e,t,n){var r="",i;r+="<"+e;for(i in t)t.hasOwnProperty(i)&&null!==t[i]&&(r+=" "+i+'="'+this.encode(t[i])+'"');return"undefined"!=typeof n?r+">"+n+"":r+" />"},createFragment:function(e){var t,n,r=this.doc,i;for(i=r.createElement("div"),t=r.createDocumentFragment(),e&&(i.innerHTML=e);n=i.firstChild;)t.appendChild(n);return t},remove:function(e,t){return this.run(e,function(e){var n,r=e.parentNode;if(!r)return null;if(t)for(;n=e.firstChild;)!g||3!==n.nodeType||n.nodeValue?r.insertBefore(n,e):e.removeChild(n);return r.removeChild(e)})},setStyle:function(e,t,n){return this.run(e,function(e){var r=this,i,o;if(t)if("string"==typeof t){i=e.style,t=t.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"number"!=typeof n||b[t]||(n+="px"),"opacity"===t&&e.runtimeStyle&&"undefined"==typeof e.runtimeStyle.opacity&&(i.filter=""===n?"":"alpha(opacity="+100*n+")"),"float"==t&&(t="cssFloat"in e.style?"cssFloat":"styleFloat");try{i[t]=n}catch(a){}r.settings.update_styles&&e.removeAttribute("data-mce-style")}else for(o in t)r.setStyle(e,o,t[o])})},getStyle:function(e,n,r){if(e=this.get(e)){if(this.doc.defaultView&&r){n=n.replace(/[A-Z]/g,function(e){return"-"+e});try{return this.doc.defaultView.getComputedStyle(e,null).getPropertyValue(n)}catch(i){return null}}return n=n.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"float"==n&&(n=g?"styleFloat":"cssFloat"),n.currentStyle&&r?e.currentStyle[n]:e.style?e.style[n]:t}},setStyles:function(e,t){this.setStyle(e,t)},css:function(e,t,n){this.setStyle(e,t,n)},removeAllAttribs:function(e){return this.run(e,function(e){var t,n=e.attributes;for(t=n.length-1;t>=0;t--)e.removeAttributeNode(n.item(t))})},setAttrib:function(e,t,n){var r=this;if(e&&t)return this.run(e,function(e){var i=r.settings,o=e.getAttribute(t);if(null!==n)switch(t){case"style":if(!d(n,"string"))return u(n,function(t,n){r.setStyle(e,n,t)}),void 0;i.keep_values&&(n?e.setAttribute("data-mce-style",n,2):e.removeAttribute("data-mce-style",2)),e.style.cssText=n;break;case"class":e.className=n||"";break;case"src":case"href":i.keep_values&&(i.url_converter&&(n=i.url_converter.call(i.url_converter_scope||r,n,t,e)),r.setAttrib(e,"data-mce-"+t,n,2));break;case"shape":e.setAttribute("data-mce-style",n)}d(n)&&null!==n&&0!==n.length?e.setAttribute(t,""+n,2):e.removeAttribute(t,2),o!=n&&i.onSetAttrib&&i.onSetAttrib({attrElm:e,attrName:t,attrValue:n})})},setAttribs:function(e,t){var n=this;return this.run(e,function(e){u(t,function(t,r){n.setAttrib(e,r,t)})})},getAttrib:function(e,t,n){var r,i=this,o;if(e=i.get(e),!e||1!==e.nodeType)return n===o?!1:n;if(d(n)||(n=""),/^(src|href|style|coords|shape)$/.test(t)&&(r=e.getAttribute("data-mce-"+t)))return r;if(g&&i.props[t]&&(r=e[i.props[t]],r=r&&r.nodeValue?r.nodeValue:r),r||(r=e.getAttribute(t,2)),/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(t))return e[i.props[t]]===!0&&""===r?t:r?t:"";if("FORM"===e.nodeName&&e.getAttributeNode(t))return e.getAttributeNode(t).nodeValue;if("style"===t&&(r=r||e.style.cssText,r&&(r=i.serializeStyle(i.parseStyle(r),e.nodeName),i.settings.keep_values&&e.setAttribute("data-mce-style",r))),m&&"class"===t&&r&&(r=r.replace(/(apple|webkit)\-[a-z\-]+/gi,"")),g)switch(t){case"rowspan":case"colspan":1===r&&(r="");break;case"size":("+0"===r||20===r||0===r)&&(r="");break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":0===r&&(r="");break;case"hspace":-1===r&&(r="");break;case"maxlength":case"tabindex":(32768===r||2147483647===r||"32768"===r)&&(r="");break;case"multiple":case"compact":case"noshade":case"nowrap":return 65535===r?t:n;case"shape":r=r.toLowerCase();break;default:0===t.indexOf("on")&&r&&(r=(""+r).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1"))}return r!==o&&null!==r&&""!==r?""+r:n},getPos:function(e,t){var n=this,r=0,i=0,o,a=n.doc,s;if(e=n.get(e),t=t||a.body,e){if(t===a.body&&e.getBoundingClientRect)return s=e.getBoundingClientRect(),t=n.boxModel?a.documentElement:a.body,r=s.left+(a.documentElement.scrollLeft||a.body.scrollLeft)-t.clientTop,i=s.top+(a.documentElement.scrollTop||a.body.scrollTop)-t.clientLeft,{x:r,y:i};for(o=e;o&&o!=t&&o.nodeType;)r+=o.offsetLeft||0,i+=o.offsetTop||0,o=o.offsetParent;for(o=e.parentNode;o&&o!=t&&o.nodeType;)r-=o.scrollLeft||0,i-=o.scrollTop||0,o=o.parentNode}return{x:r,y:i}},parseStyle:function(e){return this.styles.parse(e)},serializeStyle:function(e,t){return this.styles.serialize(e,t)},addStyle:function(e){var t=this,n=t.doc,r,i;if(t!==c.DOM&&n===document){var o=c.DOM.addedStyles;if(o=o||[],o[e])return;o[e]=!0,c.DOM.addedStyles=o}i=n.getElementById("mceDefaultStyles"),i||(i=n.createElement("style"),i.id="mceDefaultStyles",i.type="text/css",r=n.getElementsByTagName("head")[0],r.firstChild?r.insertBefore(i,r.firstChild):r.appendChild(i)),i.styleSheet?i.styleSheet.cssText+=e:i.appendChild(n.createTextNode(e))},loadCSS:function(e){var t=this,n=t.doc,r;return t!==c.DOM&&n===document?(c.DOM.loadCSS(e),void 0):(e||(e=""),r=n.getElementsByTagName("head")[0],u(e.split(","),function(e){var i;t.files[e]||(t.files[e]=!0,i=t.create("link",{rel:"stylesheet",href:e}),g&&n.documentMode&&n.recalc&&(i.onload=function(){n.recalc&&n.recalc(),i.onload=null}),r.appendChild(i))}),void 0)},addClass:function(e,t){return this.run(e,function(e){var n;return t?this.hasClass(e,t)?e.className:(n=this.removeClass(e,t),e.className=n=(""!==n?n+" ":"")+t,n):0})},removeClass:function(e,t){var n=this,r;return n.run(e,function(e){var i;return n.hasClass(e,t)?(r||(r=new RegExp("(^|\\s+)"+t+"(\\s+|$)","g")),i=e.className.replace(r," "),i=p(" "!=i?i:""),e.className=i,i||(e.removeAttribute("class"),e.removeAttribute("className")),i):e.className})},hasClass:function(e,t){return e=this.get(e),e&&t?-1!==(" "+e.className+" ").indexOf(" "+t+" "):!1},toggleClass:function(e,n,r){r=r===t?!this.hasClass(e,n):r,this.hasClass(e,n)!==r&&(r?this.addClass(e,n):this.removeClass(e,n))},show:function(e){return this.setStyle(e,"display","block")},hide:function(e){return this.setStyle(e,"display","none")},isHidden:function(e){return e=this.get(e),!e||"none"==e.style.display||"none"==this.getStyle(e,"display")},uniqueId:function(e){return(e?e:"mce_")+this.counter++},setHTML:function(e,t){var n=this;return n.run(e,function(e){if(g){for(;e.firstChild;)e.removeChild(e.firstChild);try{e.innerHTML="
"+t,e.removeChild(e.firstChild)}catch(r){var i=n.create("div");i.innerHTML="
"+t,u(f(i.childNodes),function(t,n){n&&e.canHaveHTML&&e.appendChild(t)})}}else e.innerHTML=t;return t})},getOuterHTML:function(e){var t,n=this;return(e=n.get(e))?1===e.nodeType&&n.hasOuterHTML?e.outerHTML:(t=(e.ownerDocument||n.doc).createElement("body"),t.appendChild(e.cloneNode(!0)),t.innerHTML):null},setOuterHTML:function(e,t,n){var r=this;return r.run(e,function(e){function i(){var i,o;for(o=n.createElement("body"),o.innerHTML=t,i=o.lastChild;i;)r.insertAfter(i.cloneNode(!0),e),i=i.previousSibling;r.remove(e)}if(1==e.nodeType)if(n=n||e.ownerDocument||r.doc,g)try{1==e.nodeType&&r.hasOuterHTML?e.outerHTML=t:i()}catch(o){i()}else i()})},decode:a.decode,encode:a.encodeAllRaw,insertAfter:function(e,t){return t=this.get(t),this.run(e,function(e){var n,r;return n=t.parentNode,r=t.nextSibling,r?n.insertBefore(e,r):n.appendChild(e),e})},replace:function(e,t,n){var r=this;return r.run(t,function(t){return d(t,"array")&&(e=e.cloneNode(!0)),n&&u(f(t.childNodes),function(t){e.appendChild(t)}),t.parentNode.replaceChild(e,t)})},rename:function(e,t){var n=this,r;return e.nodeName!=t.toUpperCase()&&(r=n.create(t),u(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),n.replace(r,e,1)),r||e},findCommonAncestor:function(e,t){for(var n=e,r;n;){for(r=t;r&&n!=r;)r=r.parentNode;if(n==r)break;n=n.parentNode}return!n&&e.ownerDocument?e.ownerDocument.documentElement:n},toHex:function(e){return this.styles.toHex(l.trim(e))},getClasses:function(){function e(t){u(t.imports,function(t){e(t)}),u(t.cssRules||t.rules,function(t){switch(t.type||1){case 1:t.selectorText&&u(t.selectorText.split(","),function(e){e=e.replace(/^\s*|\s*$|^\s\./g,""),!/\.mce/.test(e)&&/\.[\w\-]+$/.test(e)&&(o=e,e=e.replace(/.*\.([a-z0-9_\-]+).*/i,"$1"),(!i||(e=i(e,o)))&&(r[e]||(n.push({"class":e}),r[e]=1)))});break;case 3:e(t.styleSheet)}})}var t=this,n=[],r={},i=t.settings.class_filter,o;if(t.classes)return t.classes;try{u(t.doc.styleSheets,e)}catch(a){}return n.length>0&&(t.classes=n),n},run:function(e,t,n){var r=this,i;return"string"==typeof e&&(e=r.get(e)),e?(n=n||this,e.nodeType||!e.length&&0!==e.length?t.call(n,e):(i=[],u(e,function(e,o){e&&("string"==typeof e&&(e=r.get(e)),i.push(t.call(n,e,o)))}),i)):!1},getAttribs:function(e){var t;if(e=this.get(e),!e)return[];if(g){if(t=[],"OBJECT"==e.nodeName)return e.attributes;"OPTION"===e.nodeName&&this.getAttrib(e,"selected")&&t.push({specified:1,nodeName:"selected"});var n=/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi;return e.cloneNode(!1).outerHTML.replace(n,"").replace(/[\w:\-]+/gi,function(e){t.push({specified:1,nodeName:e})}),t}return e.attributes},isEmpty:function(e,t){var n=this,r,o,a,s,l,c=0;if(e=e.firstChild){s=new i(e,e.parentNode),t=t||n.schema?n.schema.getNonEmptyElements():null;do{if(a=e.nodeType,1===a){if(e.getAttribute("data-mce-bogus"))continue;if(l=e.nodeName.toLowerCase(),t&&t[l]){if("br"===l){c++;continue}return!1}for(o=n.getAttribs(e),r=e.attributes.length;r--;)if(l=e.attributes[r].nodeName,"name"===l||"data-mce-bookmark"===l)return!1}if(8==a)return!1;if(3===a&&!y.test(e.nodeValue))return!1}while(e=s.next())}return 1>=c},createRng:function(){var e=this.doc;return e.createRange?e.createRange():new o(this)},nodeIndex:function(e,t){var n=0,r,i,o;if(e)for(r=e.nodeType,e=e.previousSibling,i=e;e;e=e.previousSibling)o=e.nodeType,(!t||3!=o||o!=r&&e.nodeValue.length)&&(n++,r=o);return n},split:function(e,t,n){function r(e){function t(e){var t=e.previousSibling&&"SPAN"==e.previousSibling.nodeName,n=e.nextSibling&&"SPAN"==e.nextSibling.nodeName;return t&&n}var n,o=e.childNodes,a=e.nodeType;if(1!=a||"bookmark"!=e.getAttribute("data-mce-type")){for(n=o.length-1;n>=0;n--)r(o[n]);if(9!=a){if(3==a&&e.nodeValue.length>0){var s=p(e.nodeValue).length;if(!i.isBlock(e.parentNode)||s>0||0===s&&t(e))return}else if(1==a&&(o=e.childNodes,1==o.length&&o[0]&&1==o[0].nodeType&&"bookmark"==o[0].getAttribute("data-mce-type")&&e.parentNode.insertBefore(o[0],e),o.length||/^(br|hr|input|img)$/i.test(e.nodeName)))return;i.remove(e)}return e}}var i=this,o=i.createRng(),a,s,l;return e&&t?(o.setStart(e.parentNode,i.nodeIndex(e)),o.setEnd(t.parentNode,i.nodeIndex(t)),a=o.extractContents(),o=i.createRng(),o.setStart(t.parentNode,i.nodeIndex(t)+1),o.setEnd(e.parentNode,i.nodeIndex(e)+1),s=o.extractContents(),l=e.parentNode,l.insertBefore(r(a),e),n?l.replaceChild(n,t):l.insertBefore(t,e),l.insertBefore(r(s),e),i.remove(e),n||t):void 0},bind:function(e,t,n,r){return this.events.bind(e,t,n,r||this)},unbind:function(e,t,n){return this.events.unbind(e,t,n)},fire:function(e,t,n){return this.events.fire(e,t,n)},getContentEditable:function(e){var t;return 1!=e.nodeType?null:(t=e.getAttribute("data-mce-contenteditable"),t&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null)},destroy:function(){var e=this;e.win=e.doc=e.root=e.events=e.frag=null},dumpRng:function(e){return"startContainer: "+e.startContainer.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset},_findSib:function(e,t,n){var r=this,i=t;if(e)for("string"==typeof i&&(i=function(e){return r.is(e,t)}),e=e[n];e;e=e[n])if(i(e))return e;return null}},c.DOM=new c(document),c}),r(y,[v,p],function(e,t){function n(){function e(e,t){function n(){o.remove(s),a&&(a.onreadystatechange=a.onload=a=null),t()}function i(){"undefined"!=typeof console&&console.log&&console.log("Failed to load: "+e)}var o=r,a,s;s=o.uniqueId(),a=document.createElement("script"),a.id=s,a.type="text/javascript",a.src=e,"onreadystatechange"in a?a.onreadystatechange=function(){/loaded|complete/.test(a.readyState)&&n()}:a.onload=n,a.onerror=i,(document.getElementsByTagName("head")[0]||document.body).appendChild(a)}var t=0,n=1,a=2,s={},l=[],c={},u=[],d=0,f;this.isDone=function(e){return s[e]==a},this.markDone=function(e){s[e]=a},this.add=this.load=function(e,n,r){var i=s[e];i==f&&(l.push(e),s[e]=t),n&&(c[e]||(c[e]=[]),c[e].push({func:n,scope:r||this}))},this.loadQueue=function(e,t){this.loadScripts(l,e,t)},this.loadScripts=function(t,r,l){function p(e){i(c[e],function(e){e.func.call(e.scope)}),c[e]=f}var h;u.push({func:r,scope:l||this}),h=function(){var r=o(t);t.length=0,i(r,function(t){return s[t]==a?(p(t),void 0):(s[t]!=n&&(s[t]=n,d++,e(t,function(){s[t]=a,d--,p(t),h()})),void 0)}),d||(i(u,function(e){e.func.call(e.scope)}),u.length=0)},h()}}var r=e.DOM,i=t.each,o=t.grep;return n.ScriptLoader=new n,n}),r(b,[y,p],function(e,n){function r(){var e=this;e.items=[],e.urls={},e.lookup={}}var i=n.each;return r.prototype={get:function(e){return this.lookup[e]?this.lookup[e].instance:t},dependencies:function(e){var t;return this.lookup[e]&&(t=this.lookup[e].dependencies),t||[]},requireLangPack:function(t){var n=r.settings;n&&n.language&&n.language_load!==!1&&e.ScriptLoader.add(this.urls[t]+"/langs/"+n.language+".js")},add:function(e,t,n){return this.items.push(t),this.lookup[e]={instance:t,dependencies:n},t},createUrl:function(e,t){return"object"==typeof t?t:{prefix:e.prefix,resource:t,suffix:e.suffix}},addComponents:function(t,n){var r=this.urls[t]; +i(n,function(t){e.ScriptLoader.add(r+"/"+t)})},load:function(n,o,a,s){function l(){var r=c.dependencies(n);i(r,function(e){var n=c.createUrl(o,e);c.load(n.resource,n,t,t)}),a&&(s?a.call(s):a.call(e))}var c=this,u=o;c.urls[n]||("object"==typeof o&&(u=o.prefix+o.resource+o.suffix),0!==u.indexOf("/")&&-1==u.indexOf("://")&&(u=r.baseURL+"/"+u),c.urls[n]=u.substring(0,u.lastIndexOf("/")),c.lookup[n]?l():e.ScriptLoader.add(u,l,s))}},r.PluginManager=new r,r.ThemeManager=new r,r}),r(C,[],function(){function e(e,t,n){var r,i,o=n?"lastChild":"firstChild",a=n?"prev":"next";if(e[o])return e[o];if(e!==t){if(r=e[a])return r;for(i=e.parent;i&&i!==t;i=i.parent)if(r=i[a])return r}}function t(e,t){this.name=e,this.type=t,1===t&&(this.attributes=[],this.attributes.map={})}var n=/^[ \t\r\n]*$/,r={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};return t.prototype={replace:function(e){var t=this;return e.parent&&e.remove(),t.insert(e,t),t.remove(),t},attr:function(e,t){var n=this,r,i,o;if("string"!=typeof e){for(i in e)n.attr(i,e[i]);return n}if(r=n.attributes){if(t!==o){if(null===t){if(e in r.map)for(delete r.map[e],i=r.length;i--;)if(r[i].name===e)return r=r.splice(i,1),n;return n}if(e in r.map){for(i=r.length;i--;)if(r[i].name===e){r[i].value=t;break}}else r.push({name:e,value:t});return r.map[e]=t,n}return r.map[e]}},clone:function(){var e=this,n=new t(e.name,e.type),r,i,o,a,s;if(o=e.attributes){for(s=[],s.map={},r=0,i=o.length;i>r;r++)a=o[r],"id"!==a.name&&(s[s.length]={name:a.name,value:a.value},s.map[a.name]=a.value);n.attributes=s}return n.value=e.value,n.shortEnded=e.shortEnded,n},wrap:function(e){var t=this;return t.parent.insert(e,t),e.append(t),t},unwrap:function(){var e=this,t,n;for(t=e.firstChild;t;)n=t.next,e.insert(t,e,!0),t=n;e.remove()},remove:function(){var e=this,t=e.parent,n=e.next,r=e.prev;return t&&(t.firstChild===e?(t.firstChild=n,n&&(n.prev=null)):r.next=n,t.lastChild===e?(t.lastChild=r,r&&(r.next=null)):n.prev=r,e.parent=e.next=e.prev=null),e},append:function(e){var t=this,n;return e.parent&&e.remove(),n=t.lastChild,n?(n.next=e,e.prev=n,t.lastChild=e):t.lastChild=t.firstChild=e,e.parent=t,e},insert:function(e,t,n){var r;return e.parent&&e.remove(),r=t.parent||this,n?(t===r.firstChild?r.firstChild=e:t.prev.next=e,e.prev=t.prev,e.next=t,t.prev=e):(t===r.lastChild?r.lastChild=e:t.next.prev=e,e.next=t.next,e.prev=t,t.next=e),e.parent=r,e},getAll:function(t){var n=this,r,i=[];for(r=n.firstChild;r;r=e(r,n))r.name===t&&i.push(r);return i},empty:function(){var t=this,n,r,i;if(t.firstChild){for(n=[],i=t.firstChild;i;i=e(i,t))n.push(i);for(r=n.length;r--;)i=n[r],i.parent=i.firstChild=i.lastChild=i.next=i.prev=null}return t.firstChild=t.lastChild=null,t},isEmpty:function(t){var r=this,i=r.firstChild,o,a;if(i)do{if(1===i.type){if(i.attributes.map["data-mce-bogus"])continue;if(t[i.name])return!1;for(o=i.attributes.length;o--;)if(a=i.attributes[o].name,"name"===a||0===a.indexOf("data-mce-"))return!1}if(8===i.type)return!1;if(3===i.type&&!n.test(i.value))return!1}while(i=e(i,r));return!0},walk:function(t){return e(this,null,t)}},t.create=function(e,n){var i,o;if(i=new t(e,r[e]||1),n)for(o in n)i.attr(o,n[o]);return i},t}),r(x,[p],function(e){function t(e,t){return e?e.split(t||" "):[]}function n(e){function n(e,n,r){function i(e){var t={},n,r;for(n=0,r=e.length;r>n;n++)t[e[n]]={};return t}var o,l,c,u=arguments;for(r=r||[],n=n||"","string"==typeof r&&(r=t(r)),l=3;lo;o++)i.attributes[n[o]]={},i.attributesOrder.push(n[o])}var a={},s,l,c,u,d,f,p;return r[e]?r[e]:(s=t("id accesskey class dir lang style tabindex title"),l=t("onabort onblur oncancel oncanplay oncanplaythrough onchange onclick onclose oncontextmenu oncuechange ondblclick ondrag ondragend ondragenter ondragleave ondragover ondragstart ondrop ondurationchange onemptied onended onerror onfocus oninput oninvalid onkeydown onkeypress onkeyup onload onloadeddata onloadedmetadata onloadstart onmousedown onmousemove onmouseout onmouseover onmouseup onmousewheel onpause onplay onplaying onprogress onratechange onreset onscroll onseeked onseeking onseeking onselect onshow onstalled onsubmit onsuspend ontimeupdate onvolumechange onwaiting"),c=t("address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul"),u=t("a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment"),"html4"!=e&&(s.push.apply(s,t("contenteditable contextmenu draggable dropzone hidden spellcheck translate")),c.push.apply(c,t("article aside details dialog figure header footer hgroup section nav")),u.push.apply(u,t("audio canvas command datalist mark meter output progress time wbr video ruby bdi keygen"))),"html5-strict"!=e&&(s.push("xml:lang"),p=t("acronym applet basefont big font strike tt"),u.push.apply(u,p),o(p,function(e){n(e,"",u)}),f=t("center dir isindex noframes"),c.push.apply(c,f),d=[].concat(c,u),o(f,function(e){n(e,"",d)})),d=d||[].concat(c,u),n("html","manifest","head body"),n("head","","base command link meta noscript script style title"),n("title hr noscript br"),n("base","href target"),n("link","href rel media hreflang type sizes hreflang"),n("meta","name http-equiv content charset"),n("style","media type scoped"),n("script","src async defer type charset"),n("body","onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",d),n("address dt dd div caption","",d),n("h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn","",u),n("blockquote","cite",d),n("ol","reversed start type","li"),n("ul","","li"),n("li","value",d),n("dl","","dt dd"),n("a","href target rel media hreflang type",u),n("q","cite",u),n("ins del","cite datetime",d),n("img","src alt usemap ismap width height"),n("iframe","src name width height",d),n("embed","src type width height"),n("object","data type typemustmatch name usemap form width height",d,"param"),n("param","name value"),n("map","name",d,"area"),n("area","alt coords shape href target rel media hreflang type"),n("table","border","caption colgroup thead tfoot tbody tr"+("html4"==e?" col":"")),n("colgroup","span","col"),n("col","span"),n("tbody thead tfoot","","tr"),n("tr","","td th"),n("td","colspan rowspan headers",d),n("th","colspan rowspan headers scope abbr",d),n("form","accept-charset action autocomplete enctype method name novalidate target",d),n("fieldset","disabled form name",d,"legend"),n("label","form for",u),n("input","accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width"),n("button","disabled form formaction formenctype formmethod formnovalidate formtarget name type value","html4"==e?d:u),n("select","disabled form multiple name required size","option optgroup"),n("optgroup","disabled label","option"),n("option","disabled label selected value"),n("textarea","cols dirname disabled form maxlength name readonly required rows wrap"),n("menu","type label",d,"li"),n("noscript","",d),"html4"!=e&&(n("wbr"),n("ruby","",u,"rt rp"),n("figcaption","",d),n("mark rt rp summary bdi","",u),n("canvas","width height",d),n("video","src crossorigin poster preload autoplay mediagroup loop muted controls width height",d,"track source"),n("audio","src crossorigin preload autoplay mediagroup loop muted controls",d,"track source"),n("source","src type media"),n("track","kind src srclang label default"),n("datalist","",u,"option"),n("article section nav aside header footer","",d),n("hgroup","","h1 h2 h3 h4 h5 h6"),n("figure","",d,"figcaption"),n("time","datetime",u),n("dialog","open",d),n("command","type label icon disabled checked radiogroup command"),n("output","for form name",u),n("progress","value max",u),n("meter","value min max low high optimum",u),n("details","open",d,"summary"),n("keygen","autofocus challenge disabled form keytype name")),"html5-strict"!=e&&(i("script","language xml:space"),i("style","xml:space"),i("object","declare classid codebase codetype archive standby align border hspace vspace"),i("param","valuetype type"),i("a","charset name rev shape coords"),i("br","clear"),i("applet","codebase archive code object alt name width height align hspace vspace"),i("img","name longdesc align border hspace vspace"),i("iframe","longdesc frameborder marginwidth marginheight scrolling align"),i("font basefont","size color face"),i("input","usemap align"),i("select","onchange"),i("textarea"),i("h1 h2 h3 h4 h5 h6 div p legend caption","align"),i("ul","type compact"),i("li","type"),i("ol dl menu dir","compact"),i("pre","width xml:space"),i("hr","align noshade size width"),i("isindex","prompt"),i("table","summary width frame rules cellspacing cellpadding align bgcolor"),i("col","width align char charoff valign"),i("colgroup","width align char charoff valign"),i("thead","align char charoff valign"),i("tr","align char charoff valign bgcolor"),i("th","axis align char charoff valign nowrap bgcolor width height"),i("form","accept"),i("td","abbr axis scope align char charoff valign nowrap bgcolor width height"),i("tfoot","align char charoff valign"),i("tbody","align char charoff valign"),i("area","nohref"),i("body","background bgcolor text link vlink alink")),"html4"!=e&&(i("input button select textarea","autofocus"),i("input textarea","placeholder"),i("a","download"),i("link script img","crossorigin"),i("iframe","srcdoc sandbox seamless allowfullscreen")),o(t("a form meter progress dfn"),function(e){a[e]&&delete a[e].children[e]}),delete a.caption.children.table,r[e]=a,a)}var r={},i=e.makeMap,o=e.each,a=e.extend,s=e.explode,l=e.inArray;return function(e){function c(t,n,o){var s=e[t];return s?s=i(s,",",i(s.toUpperCase()," ")):(s=r[t],s||(s=i(n," ",i(n.toUpperCase()," ")),s=a(s,o),r[t]=s)),s}function u(e){return new RegExp("^"+e.replace(/([?+*])/g,".$1")+"$")}function d(e){var n,r,o,a,s,c,d,f,p,h,m,g,y,C,x,w,_,N,E,S=/^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/,k=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,T=/[*?+]/;if(e)for(e=t(e,","),v["@"]&&(w=v["@"].attributes,_=v["@"].attributesOrder),n=0,r=e.length;r>n;n++)if(s=S.exec(e[n])){if(C=s[1],p=s[2],x=s[3],f=s[5],g={},y=[],c={attributes:g,attributesOrder:y},"#"===C&&(c.paddEmpty=!0),"-"===C&&(c.removeEmpty=!0),"!"===s[4]&&(c.removeEmptyAttrs=!0),w){for(N in w)g[N]=w[N];y.push.apply(y,_)}if(f)for(f=t(f,"|"),o=0,a=f.length;a>o;o++)if(s=k.exec(f[o])){if(d={},m=s[1],h=s[2].replace(/::/g,":"),C=s[3],E=s[4],"!"===m&&(c.attributesRequired=c.attributesRequired||[],c.attributesRequired.push(h),d.required=!0),"-"===m){delete g[h],y.splice(l(y,h),1);continue}C&&("="===C&&(c.attributesDefault=c.attributesDefault||[],c.attributesDefault.push({name:h,value:E}),d.defaultValue=E),":"===C&&(c.attributesForced=c.attributesForced||[],c.attributesForced.push({name:h,value:E}),d.forcedValue=E),"<"===C&&(d.validValues=i(E,"?"))),T.test(h)?(c.attributePatterns=c.attributePatterns||[],d.pattern=u(h),c.attributePatterns.push(d)):(g[h]||y.push(h),g[h]=d)}w||"@"!=p||(w=g,_=y),x&&(c.outputName=p,v[x]=c),T.test(p)?(c.pattern=u(p),b.push(c)):v[p]=c}}function f(e){v={},b=[],d(e),o(x,function(e,t){y[t]=e.children})}function p(e){var n=/^(~)?(.+)$/;e&&o(t(e,","),function(e){var t=n.exec(e),r="~"===t[1],i=r?"span":"div",a=t[2];y[a]=y[i],R[a]=i,r||(S[a.toUpperCase()]={},S[a]={}),v[a]||(v[a]=v[i]),o(y,function(e){e[i]&&(e[a]=e[i])})})}function h(e){var n=/^([+\-]?)(\w+)\[([^\]]+)\]$/;e&&o(t(e,","),function(e){var r=n.exec(e),i,a;r&&(a=r[1],i=a?y[r[2]]:y[r[2]]={"#comment":{}},i=y[r[2]],o(t(r[3],"|"),function(e){"-"===a?delete i[e]:i[e]={}}))})}function m(e){var t=v[e],n;if(t)return t;for(n=b.length;n--;)if(t=b[n],t.pattern.test(e))return t}var g=this,v={},y={},b=[],C,x,w,_,N,E,S,k,T,R={},A={};e=e||{},x=n(e.schema),e.verify_html===!1&&(e.valid_elements="*[*]"),e.valid_styles&&(C={},o(e.valid_styles,function(e,t){C[t]=s(e)})),w=c("whitespace_elements","pre script noscript style textarea video audio iframe object"),_=c("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr"),N=c("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr track"),E=c("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"),k=c("non_empty_elements","td th iframe video audio object",N),T=c("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure"),S=c("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup",T),o((e.special||"script noscript style textarea").split(" "),function(e){A[e]=new RegExp("]*>","gi")}),e.valid_elements?f(e.valid_elements):(o(x,function(e,t){v[t]={attributes:e.attributes,attributesOrder:e.attributesOrder},y[t]=e.children}),"html5"!=e.schema&&o(t("strong/b em/i"),function(e){e=t(e,"/"),v[e[1]].outputName=e[0]}),v.img.attributesDefault=[{name:"alt",value:""}],o(t("ol ul sub sup blockquote span font a table tbody tr strong em b i"),function(e){v[e]&&(v[e].removeEmpty=!0)}),o(t("p h1 h2 h3 h4 h5 h6 th td pre div address caption"),function(e){v[e].paddEmpty=!0}),o(t("span"),function(e){v[e].removeEmptyAttrs=!0})),p(e.custom_elements),h(e.valid_children),d(e.extended_valid_elements),h("+ol[ul|ol],+ul[ul|ol]"),e.invalid_elements&&o(s(e.invalid_elements),function(e){v[e]&&delete v[e]}),m("span")||d("span[!data-mce-type|*]"),g.children=y,g.styles=C,g.getBoolAttrs=function(){return E},g.getBlockElements=function(){return S},g.getTextBlockElements=function(){return T},g.getShortEndedElements=function(){return N},g.getSelfClosingElements=function(){return _},g.getNonEmptyElements=function(){return k},g.getWhiteSpaceElements=function(){return w},g.getSpecialElements=function(){return A},g.isValidChild=function(e,t){var n=y[e];return!(!n||!n[t])},g.isValid=function(e,t){var n,r,i=m(e);if(i){if(!t)return!0;if(i.attributes[t])return!0;if(n=i.attributePatterns)for(r=n.length;r--;)if(n[r].pattern.test(e))return!0}return!1},g.getElementRule=m,g.getCustomElements=function(){return R},g.addValidElements=d,g.setValidElements=f,g.addCustomElements=p,g.addValidChildren=h,g.elements=v}}),r(w,[x,m,p],function(e,t,n){var r=n.each;return function(n,i){var o=this,a=function(){};n=n||{},o.schema=i=i||new e,n.fix_self_closing!==!1&&(n.fix_self_closing=!0),r("comment cdata text start end pi doctype".split(" "),function(e){e&&(o[e]=n[e]||a)}),o.parse=function(e){function r(e){var t,n;for(t=d.length;t--&&d[t].name!==e;);if(t>=0){for(n=d.length-1;n>=t;n--)e=d[n],e.valid&&a.end(e.name);d.length=t}}function o(e,t,n,r,i){var o,a;if(t=t.toLowerCase(),n=t in b?t:I(n||r||i||""),x&&!g&&0!==t.indexOf("data-")){if(o=S[t],!o&&k){for(a=k.length;a--&&(o=k[a],!o.pattern.test(t)););-1===a&&(o=null)}if(!o)return;if(o.validValues&&!(n in o.validValues))return}f.map[t]=n,f.push({name:t,value:n})}var a=this,s,l=0,c,u,d=[],f,p,h,m,g,v,y,b,C,x,w,_,N,E,S,k,T,R,A,B,L,M,D,H,P,O=0,I=t.decode,F;for(M=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g"),D=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,y=i.getShortEndedElements(),L=n.self_closing_elements||i.getSelfClosingElements(),b=i.getBoolAttrs(),x=n.validate,v=n.remove_internals,F=n.fix_self_closing,H=i.getSpecialElements();s=M.exec(e);){if(l0&&d[d.length-1].name===c&&r(c),!x||(w=i.getElementRule(c))){if(_=!0,x&&(S=w.attributes,k=w.attributePatterns),(E=s[8])?(g=-1!==E.indexOf("data-mce-type"),g&&v&&(_=!1),f=[],f.map={},E.replace(D,o)):(f=[],f.map={}),x&&!g){if(T=w.attributesRequired,R=w.attributesDefault,A=w.attributesForced,B=w.removeEmptyAttrs,B&&!f.length&&(_=!1),A)for(p=A.length;p--;)N=A[p],m=N.name,P=N.value,"{$uid}"===P&&(P="mce_"+O++),f.map[m]=P,f.push({name:m,value:P});if(R)for(p=R.length;p--;)N=R[p],m=N.name,m in f.map||(P=N.value,"{$uid}"===P&&(P="mce_"+O++),f.map[m]=P,f.push({name:m,value:P}));if(T){for(p=T.length;p--&&!(T[p]in f.map););-1===p&&(_=!1)}f.map["data-mce-bogus"]&&(_=!1)}_&&a.start(c,f,C)}else _=!1;if(u=H[c]){u.lastIndex=l=s.index+s[0].length,(s=u.exec(e))?(_&&(h=e.substr(l,s.index-l)),l=s.index+s[0].length):(h=e.substr(l),l=e.length),_&&(h.length>0&&a.text(h,!0),a.end(c)),M.lastIndex=l;continue}C||(E&&E.indexOf("/")==E.length-1?_&&a.end(c):d.push({name:c,valid:_}))}else(c=s[1])?a.comment(c):(c=s[2])?a.cdata(c):(c=s[3])?a.doctype(c):(c=s[4])&&a.pi(c,s[5]);l=s.index+s[0].length}for(l=0;p--)c=d[p],c.valid&&a.end(c.name)}}}),r(_,[C,x,w,p],function(e,t,n,r){var i=r.makeMap,o=r.each,a=r.explode,s=r.extend;return function(r,l){function c(t){var n,r,o,a,s,c,d,f,p,h,m,g,v,y;for(m=i("tr,td,th,tbody,thead,tfoot,table"),h=l.getNonEmptyElements(),g=l.getTextBlockElements(),n=0;n1){for(a.reverse(),s=c=u.filterNode(a[0].clone()),p=0;p0?(t.value=n,t=t.prev):(r=t.prev,t.remove(),t=r)}function g(e){var t,n={};for(t in e)"li"!==t&&"p"!=t&&(n[t]=e[t]);return n}var v,y,b,C,x,w,_,N,E,S,k,T,R,A=[],B,L,M,D,H,P,O,I;if(o=o||{},p={},h={},T=s(i("script,style,head,html,body,title,meta,param"),l.getBlockElements()),O=l.getNonEmptyElements(),P=l.children,k=r.validate,I="forced_root_block"in o?o.forced_root_block:r.forced_root_block,H=l.getWhiteSpaceElements(),R=/^[ \t\r\n]+/,L=/[ \t\r\n]+$/,M=/[ \t\r\n]+/g,D=/^[ \t\r\n]+$/,v=new n({validate:k,self_closing_elements:g(l.getSelfClosingElements()),cdata:function(e){b.append(u("#cdata",4)).value=e},text:function(e,t){var n;B||(e=e.replace(M," "),b.lastChild&&T[b.lastChild.name]&&(e=e.replace(R,""))),0!==e.length&&(n=u("#text",3),n.raw=!!t,b.append(n).value=e)},comment:function(e){b.append(u("#comment",8)).value=e},pi:function(e,t){b.append(u(e,7)).value=t,m(b)},doctype:function(e){var t;t=b.append(u("#doctype",10)),t.value=e,m(b)},start:function(e,t,n){var r,i,o,a,s;if(o=k?l.getElementRule(e):{}){for(r=u(o.outputName||e,1),r.attributes=t,r.shortEnded=n,b.append(r),s=P[b.name],s&&P[r.name]&&!s[r.name]&&A.push(r),i=f.length;i--;)a=f[i].name,a in t.map&&(E=h[a],E?E.push(r):h[a]=[r]);T[e]&&m(r),n||(b=r),!B&&H[e]&&(B=!0)}},end:function(t){var n,r,i,o,a;if(r=k?l.getElementRule(t):{}){if(T[t]&&!B){if(n=b.firstChild,n&&3===n.type)if(i=n.value.replace(R,""),i.length>0)n.value=i,n=n.next;else for(o=n.next,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.next,(0===i.length||D.test(i))&&(n.remove(),n=o),n=o;if(n=b.lastChild,n&&3===n.type)if(i=n.value.replace(L,""),i.length>0)n.value=i,n=n.prev;else for(o=n.prev,n.remove(),n=o;n&&3===n.type;)i=n.value,o=n.prev,(0===i.length||D.test(i))&&(n.remove(),n=o),n=o}if(B&&H[t]&&(B=!1),(r.removeEmpty||r.paddEmpty)&&b.isEmpty(O))if(r.paddEmpty)b.empty().append(new e("#text","3")).value="\xa0";else if(!b.attributes.map.name&&!b.attributes.map.id)return a=b.parent,b.empty().remove(),b=a,void 0;b=b.parent}}},l),y=b=new e(o.context||r.root_name,11),v.parse(t),k&&A.length&&(o.context?o.invalid=!0:c(A)),I&&("body"==y.name||o.isRootContent)&&a(),!o.invalid){for(S in p){for(E=d[S],C=p[S],_=C.length;_--;)C[_].parent||C.splice(_,1);for(x=0,w=E.length;w>x;x++)E[x](C,S,o)}for(x=0,w=f.length;w>x;x++)if(E=f[x],E.name in h){for(C=h[E.name],_=C.length;_--;)C[_].parent||C.splice(_,1);for(_=0,N=E.callbacks.length;N>_;_++)E.callbacks[_](C,E.name,o)}}return y},r.remove_trailing_brs&&u.addNodeFilter("br",function(t){var n,r=t.length,i,o=s({},l.getBlockElements()),a=l.getNonEmptyElements(),c,u,d,f,p,h;for(o.body=1,n=0;r>n;n++)if(i=t[n],c=i.parent,o[i.parent.name]&&i===c.lastChild){for(d=i.prev;d;){if(f=d.name,"span"!==f||"bookmark"!==d.attr("data-mce-type")){if("br"!==f)break;if("br"===f){i=null;break}}d=d.prev}i&&(i.remove(),c.isEmpty(a)&&(p=l.getElementRule(c.name),p&&(p.removeEmpty?c.remove():p.paddEmpty&&(c.empty().append(new e("#text",3)).value="\xa0"))))}else{for(u=i;c&&c.firstChild===u&&c.lastChild===u&&(u=c,!o[c.name]);)c=c.parent;u===c&&(h=new e("#text",3),h.value="\xa0",i.replace(h))}}),r.allow_html_in_named_anchor||u.addAttributeFilter("id,name",function(e){for(var t=e.length,n,r,i,o;t--;)if(o=e[t],"a"===o.name&&o.firstChild&&!o.attr("href")){i=o.parent,n=o.lastChild;do r=n.prev,i.insert(n,o),n=r;while(n)}})}}),r(N,[m,p],function(e,t){var n=t.makeMap;return function(t){var r=[],i,o,a,s,l;return t=t||{},i=t.indent,o=n(t.indent_before||""),a=n(t.indent_after||""),s=e.getEncodeFunc(t.entity_encoding||"raw",t.entities),l="html"==t.element_format,{start:function(e,t,n){var c,u,d,f;if(i&&o[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n")),r.push("<",e),t)for(c=0,u=t.length;u>c;c++)d=t[c],r.push(" ",d.name,'="',s(d.value,!0),'"');r[r.length]=!n||l?">":" />",n&&i&&a[e]&&r.length>0&&(f=r[r.length-1],f.length>0&&"\n"!==f&&r.push("\n"))},end:function(e){var t;r.push(""),i&&a[e]&&r.length>0&&(t=r[r.length-1],t.length>0&&"\n"!==t&&r.push("\n"))},text:function(e,t){e.length>0&&(r[r.length]=t?e:s(e))},cdata:function(e){r.push("")},comment:function(e){r.push("")},pi:function(e,t){t?r.push(""):r.push(""),i&&r.push("\n")},doctype:function(e){r.push("",i?"\n":"")},reset:function(){r.length=0},getContent:function(){return r.join("").replace(/\n$/,"")}}}}),r(E,[N,x],function(e,t){return function(n,r){var i=this,o=new e(n);n=n||{},n.validate="validate"in n?n.validate:!0,i.schema=r=r||new t,i.writer=o,i.serialize=function(e){function t(e){var n=i[e.type],s,l,c,u,d,f,p,h,m;if(n)n(e);else{if(s=e.name,l=e.shortEnded,c=e.attributes,a&&c&&c.length>1){for(f=[],f.map={},m=r.getElementRule(e.name),p=0,h=m.attributesOrder.length;h>p;p++)u=m.attributesOrder[p],u in c.map&&(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));for(p=0,h=c.length;h>p;p++)u=c[p].name,u in f.map||(d=c.map[u],f.map[u]=d,f.push({name:u,value:d}));c=f}if(o.start(e.name,c,l),!l){if(e=e.firstChild)do t(e);while(e=e.next);o.end(s)}}}var i,a;return a=n.validate,i={3:function(e){o.text(e.value,e.raw)},8:function(e){o.comment(e.value)},7:function(e){o.pi(e.name,e.value)},10:function(e){o.doctype(e.value)},4:function(e){o.cdata(e.value)},11:function(e){if(e=e.firstChild)do t(e);while(e=e.next)}},o.reset(),1!=e.type||n.inner?i[11](e):t(e),o.getContent()}}}),r(S,[v,_,m,E,C,x,g,p],function(e,t,n,r,i,o,a,s){var l=s.each,c=s.trim,u=e.DOM;return function(e,i){var s,d,f;return i&&(s=i.dom,d=i.schema),s=s||u,d=d||new o(e),e.entity_encoding=e.entity_encoding||"named",e.remove_trailing_brs="remove_trailing_brs"in e?e.remove_trailing_brs:!0,f=new t(e,d),f.addAttributeFilter("src,href,style",function(t,n){for(var r=t.length,i,o,a="data-mce-"+n,l=e.url_converter,c=e.url_converter_scope,u;r--;)i=t[r],o=i.attributes.map[a],o!==u?(i.attr(n,o.length>0?o:null),i.attr(a,null)):(o=i.attributes.map[n],"style"===n?o=s.serializeStyle(s.parseStyle(o),i.name):l&&(o=l.call(c,o,n,i.name)),i.attr(n,o.length>0?o:null))}),f.addAttributeFilter("class",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),n.attr("class",r.length>0?r:null)}),f.addAttributeFilter("data-mce-type",function(e,t,n){for(var r=e.length,i;r--;)i=e[r],"bookmark"!==i.attributes.map["data-mce-type"]||n.cleanup||i.remove()}),f.addAttributeFilter("data-mce-expando",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),f.addNodeFilter("noscript",function(e){for(var t=e.length,r;t--;)r=e[t].firstChild,r&&(r.value=n.decode(r.value))}),f.addNodeFilter("script,style",function(e,t){function n(e){return e.replace(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}for(var r=e.length,i,o;r--;)i=e[r],o=i.firstChild?i.firstChild.value:"","script"===t?(i.attr("type",(i.attr("type")||"text/javascript").replace(/^mce\-/,"")),o.length>0&&(i.firstChild.value="// ")):o.length>0&&(i.firstChild.value="")}),f.addNodeFilter("#comment",function(e){for(var t=e.length,n;t--;)n=e[t],0===n.value.indexOf("[CDATA[")?(n.name="#cdata",n.type=4,n.value=n.value.replace(/^\[CDATA\[|\]\]$/g,"")):0===n.value.indexOf("mce:protected ")&&(n.name="#text",n.type=3,n.raw=!0,n.value=unescape(n.value).substr(14))}),f.addNodeFilter("xml:namespace,input",function(e,t){for(var n=e.length,r;n--;)r=e[n],7===r.type?r.remove():1===r.type&&("input"!==t||"type"in r.attributes.map||r.attr("type","text"))}),e.fix_list_elements&&f.addNodeFilter("ul,ol",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.parent,("ul"===r.name||"ol"===r.name)&&n.prev&&"li"===n.prev.name&&n.prev.append(n)}),f.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),{schema:d,addNodeFilter:f.addNodeFilter,addAttributeFilter:f.addAttributeFilter,serialize:function(t,n){var i=this,o,u,p,h,m;return a.ie&&s.select("script,style,select,map").length>0?(m=t.innerHTML,t=t.cloneNode(!1),s.setHTML(t,m)):t=t.cloneNode(!0),o=t.ownerDocument.implementation,o.createHTMLDocument&&(u=o.createHTMLDocument(""),l("BODY"==t.nodeName?t.childNodes:[t],function(e){u.body.appendChild(u.importNode(e,!0))}),t="BODY"!=t.nodeName?u.body.firstChild:u.body,p=s.doc,s.doc=u),n=n||{},n.format=n.format||"html",n.selection&&(n.forced_root_block=""),n.no_events||(n.node=t,i.onPreProcess(n)),h=new r(e,d),n.content=h.serialize(f.parse(c(n.getInner?t.innerHTML:s.getOuterHTML(t)),n)),n.cleanup||(n.content=n.content.replace(/\uFEFF/g,"")),n.no_events||i.onPostProcess(n),p&&(s.doc=p),n.node=null,n.content},addRules:function(e){d.addValidElements(e)},setRules:function(e){d.setValidElements(e)},onPreProcess:function(e){i&&i.fire("PreProcess",e)},onPostProcess:function(e){i&&i.fire("PostProcess",e)}}}}),r(k,[],function(){function e(e){function t(t,n){var r,i=0,o,a,s,l,c,u,d=-1,f;if(r=t.duplicate(),r.collapse(n),f=r.parentElement(),f.ownerDocument===e.dom.doc){for(;"false"===f.contentEditable;)f=f.parentNode;if(!f.hasChildNodes())return{node:f,inside:1};for(s=f.children,o=s.length-1;o>=i;)if(u=Math.floor((i+o)/2),l=s[u],r.moveToElementText(l),d=r.compareEndPoints(n?"StartToStart":"EndToEnd",t),d>0)o=u-1;else{if(!(0>d))return{node:l};i=u+1}if(0>d)for(l?r.collapse(!1):(r.moveToElementText(f),r.collapse(!0),l=f,a=!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",1)&&f==r.parentElement();)c++;else for(r.collapse(!0),c=0;0!==r.compareEndPoints(n?"StartToStart":"StartToEnd",t)&&0!==r.move("character",-1)&&f==r.parentElement();)c++;return{node:l,position:d,offset:c,inside:a}}}function n(){function n(e){var n=t(o,e),r,i,s=0,l,c,u;if(r=n.node,i=n.offset,n.inside&&!r.hasChildNodes())return a[e?"setStart":"setEnd"](r,0),void 0;if(i===c)return a[e?"setStartBefore":"setEndAfter"](r),void 0;if(n.position<0){if(l=n.inside?r.firstChild:r.nextSibling,!l)return a[e?"setStartAfter":"setEndAfter"](r),void 0;if(!i)return 3==l.nodeType?a[e?"setStart":"setEnd"](l,0):a[e?"setStartBefore":"setEndBefore"](l),void 0;for(;l;){if(u=l.nodeValue,s+=u.length,s>=i){r=l,s-=i,s=u.length-s;break}l=l.nextSibling}}else{if(l=r.previousSibling,!l)return a[e?"setStartBefore":"setEndBefore"](r);if(!i)return 3==r.nodeType?a[e?"setStart":"setEnd"](l,r.nodeValue.length):a[e?"setStartAfter":"setEndAfter"](l),void 0;for(;l;){if(s+=l.nodeValue.length,s>=i){r=l,s-=i;break}l=l.previousSibling}}a[e?"setStart":"setEnd"](r,s)}var o=e.getRng(),a=i.createRng(),s,l,c,u,d;if(s=o.item?o.item(0):o.parentElement(),s.ownerDocument!=i.doc)return a;if(l=e.isCollapsed(),o.item)return a.setStart(s.parentNode,i.nodeIndex(s)),a.setEnd(a.startContainer,a.startOffset+1),a;try{n(!0),l||n()}catch(f){if(-2147024809!=f.number)throw f;d=r.getBookmark(2),c=o.duplicate(),c.collapse(!0),s=c.parentElement(),l||(c=o.duplicate(),c.collapse(!1),u=c.parentElement(),u.innerHTML=u.innerHTML),s.innerHTML=s.innerHTML,r.moveToBookmark(d),o=e.getRng(),n(!0),l||n()}return a}var r=this,i=e.dom,o=!1;this.getBookmark=function(n){function r(e){var t,n,r,o,a=[];for(t=e.parentNode,n=i.getRoot().parentNode;t!=n&&9!==t.nodeType;){for(r=t.children,o=r.length;o--;)if(e===r[o]){a.push(o);break}e=t,t=t.parentNode}return a}function o(e){var n;return n=t(a,e),n?{position:n.position,offset:n.offset,indexes:r(n.node),inside:n.inside}:void 0}var a=e.getRng(),s={};return 2===n&&(a.item?s.start={ctrl:!0,indexes:r(a.item(0))}:(s.start=o(!0),e.isCollapsed()||(s.end=o()))),s},this.moveToBookmark=function(e){function t(e){var t,n,r,o;for(t=i.getRoot(),n=e.length-1;n>=0;n--)o=t.children,r=e[n],r<=o.length-1&&(t=o[r]);return t}function n(n){var i=e[n?"start":"end"],a,s,l,c;i&&(a=i.position>0,s=o.createTextRange(),s.moveToElementText(t(i.indexes)),c=i.offset,c!==l?(s.collapse(i.inside||a),s.moveStart("character",a?-c:c)):s.collapse(n),r.setEndPoint(n?"StartToStart":"EndToStart",s),n&&r.collapse(!0)) +}var r,o=i.doc.body;e.start&&(e.start.ctrl?(r=o.createControlRange(),r.addElement(t(e.start.indexes)),r.select()):(r=o.createTextRange(),n(!0),n(),r.select()))},this.addRange=function(t){function n(e){var t,n,a,d,h;a=i.create("a"),t=e?s:c,n=e?l:u,d=r.duplicate(),(t==f||t==f.documentElement)&&(t=p,n=0),3==t.nodeType?(t.parentNode.insertBefore(a,t),d.moveToElementText(a),d.moveStart("character",n),i.remove(a),r.setEndPoint(e?"StartToStart":"EndToEnd",d)):(h=t.childNodes,h.length?(n>=h.length?i.insertAfter(a,h[h.length-1]):t.insertBefore(a,h[n]),d.moveToElementText(a)):t.canHaveHTML&&(t.innerHTML="",a=t.firstChild,d.moveToElementText(a),d.collapse(o)),r.setEndPoint(e?"StartToStart":"EndToEnd",d),i.remove(a))}var r,a,s,l,c,u,d,f=e.dom.doc,p=f.body,h,m;if(s=t.startContainer,l=t.startOffset,c=t.endContainer,u=t.endOffset,r=p.createTextRange(),s==c&&1==s.nodeType){if(l==u&&!s.hasChildNodes()){if(s.canHaveHTML)return d=s.previousSibling,d&&!d.hasChildNodes()&&i.isBlock(d)?d.innerHTML="":d=null,s.innerHTML="",r.moveToElementText(s.lastChild),r.select(),i.doc.selection.clear(),s.innerHTML="",d&&(d.innerHTML=""),void 0;l=i.nodeIndex(s),s=s.parentNode}if(l==u-1)try{if(m=s.childNodes[l],a=p.createControlRange(),a.addElement(m),a.select(),h=e.getRng(),h.item&&m===h.item(0))return}catch(g){}}n(!0),n(),r.select()},this.getRangeAt=n}return e}),r(T,[g],function(e){return{BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(e){return e.shiftKey||e.ctrlKey||e.altKey},metaKeyPressed:function(t){return(e.mac?t.ctrlKey||t.metaKey:t.ctrlKey)&&!t.altKey}}}),r(R,[T,p,g],function(e,t,n){return function(r,i){function o(e){return i.settings.object_resizing===!1?!1:/TABLE|IMG|DIV/.test(e.nodeName)?"false"===e.getAttribute("data-mce-resize")?!1:!0:!1}function a(t){var n,r;n=t.screenX-E,r=t.screenY-S,M=n*N[2]+R,D=r*N[3]+A,M=5>M?5:M,D=5>D?5:D,(e.modifierPressed(t)||"IMG"==x.nodeName&&0!==N[2]*N[3])&&(M=Math.round(D/B),D=Math.round(M*B)),b.setStyles(w,{width:M,height:D}),N[2]<0&&w.clientWidth<=M&&b.setStyle(w,"left",k+(R-M)),N[3]<0&&w.clientHeight<=D&&b.setStyle(w,"top",T+(A-D)),L||(i.fire("ObjectResizeStart",{target:x,width:R,height:A}),L=!0)}function s(){function e(e,t){t&&(x.style[e]||!i.schema.isValid(x.nodeName.toLowerCase(),e)?b.setStyle(x,e,t):b.setAttrib(x,e,t))}L=!1,e("width",M),e("height",D),b.unbind(H,"mousemove",a),b.unbind(H,"mouseup",s),P!=H&&(b.unbind(P,"mousemove",a),b.unbind(P,"mouseup",s)),b.remove(w),O&&"TABLE"!=x.nodeName||l(x),i.fire("ObjectResized",{target:x,width:M,height:D}),i.nodeChanged()}function l(e,t,n){var r,l,u,d,f;r=b.getPos(e,i.getBody()),k=r.x,T=r.y,f=e.getBoundingClientRect(),l=f.width||f.right-f.left,u=f.height||f.bottom-f.top,x!=e&&(m(),x=e,M=D=0),d=i.fire("ObjectSelected",{target:e}),o(e)&&!d.isDefaultPrevented()?C(_,function(e,r){function o(t){L=!0,E=t.screenX,S=t.screenY,R=x.clientWidth,A=x.clientHeight,B=A/R,N=e,w=x.cloneNode(!0),b.addClass(w,"mce-clonedresizable"),w.contentEditable=!1,w.unSelectabe=!0,b.setStyles(w,{left:k,top:T,margin:0}),w.removeAttribute("data-mce-selected"),i.getBody().appendChild(w),b.bind(H,"mousemove",a),b.bind(H,"mouseup",s),P!=H&&(b.bind(P,"mousemove",a),b.bind(P,"mouseup",s))}var c,d;return t?(r==t&&o(n),void 0):(c=b.get("mceResizeHandle"+r),c?b.show(c):(d=i.getBody(),c=b.add(d,"div",{id:"mceResizeHandle"+r,"data-mce-bogus":!0,"class":"mce-resizehandle",contentEditable:!1,unSelectabe:!0,style:"cursor:"+r+"-resize; margin:0; padding:0"}),b.bind(c,"mousedown",function(e){e.preventDefault(),o(e)})),b.setStyles(c,{left:l*e[0]+k-c.offsetWidth/2,top:u*e[1]+T-c.offsetHeight/2}),void 0)}):c(),x.setAttribute("data-mce-selected","1")}function c(){var e,t;x&&x.removeAttribute("data-mce-selected");for(e in _)t=b.get("mceResizeHandle"+e),t&&(b.unbind(t),b.remove(t))}function u(e){function t(e,t){do if(e===t)return!0;while(e=e.parentNode)}var n;return C(b.select("img[data-mce-selected],hr[data-mce-selected]"),function(e){e.removeAttribute("data-mce-selected")}),n="mousedown"==e.type?e.target:r.getNode(),n=b.getParent(n,O?"table":"table,img,hr"),n&&(g(),t(r.getStart(),n)&&t(r.getEnd(),n)&&(!O||n!=r.getStart()&&"IMG"!==r.getStart().nodeName))?(l(n),void 0):(c(),void 0)}function d(e,t,n){e&&e.attachEvent&&e.attachEvent("on"+t,n)}function f(e,t,n){e&&e.detachEvent&&e.detachEvent("on"+t,n)}function p(e){var t=e.srcElement,n,r,o,a,s,c,u;n=t.getBoundingClientRect(),c=I.clientX-n.left,u=I.clientY-n.top;for(r in _)if(o=_[r],a=t.offsetWidth*o[0],s=t.offsetHeight*o[1],Math.abs(a-c)<8&&Math.abs(s-u)<8){N=o;break}L=!0,i.getDoc().selection.empty(),l(t,r,I)}function h(e){var t=e.srcElement;if(t!=x){if(m(),0===t.id.indexOf("mceResizeHandle"))return e.returnValue=!1,void 0;("IMG"==t.nodeName||"TABLE"==t.nodeName)&&(c(),x=t,d(t,"resizestart",p))}}function m(){f(x,"resizestart",p)}function g(){try{i.getDoc().execCommand("enableObjectResizing",!1,!1)}catch(e){}}function v(e){var t;if(O){t=H.body.createControlRange();try{return t.addElement(e),t.select(),!0}catch(n){}}}function y(){x=w=null,O&&(m(),f(i.getBody(),"controlselect",h))}var b=i.dom,C=t.each,x,w,_,N,E,S,k,T,R,A,B,L,M,D,H=i.getDoc(),P=document,O=n.ie,I;_={n:[.5,0,0,-1],e:[1,.5,1,0],s:[.5,1,0,1],w:[0,.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};var F=".mce-content-body";return i.contentStyles.push(F+" div.mce-resizehandle {"+"position: absolute;"+"border: 1px solid black;"+"background: #FFF;"+"width: 5px;"+"height: 5px;"+"z-index: 10000"+"}"+F+" .mce-resizehandle:hover {"+"background: #000"+"}"+F+" img[data-mce-selected], hr[data-mce-selected] {"+"outline: 1px solid black;"+"resize: none"+"}"+F+" .mce-clonedresizable {"+"position: absolute;"+(n.gecko?"":"outline: 1px dashed black;")+"opacity: .5;"+"filter: alpha(opacity=50);"+"z-index: 10000"+"}"),i.on("init",function(){O?(i.on("ObjectResized",function(e){"TABLE"!=e.target.nodeName&&(c(),v(e.target))}),d(i.getBody(),"controlselect",h),i.on("mousedown",function(e){I=e})):g(),i.on("nodechange mousedown ResizeEditor",u),i.on("keydown keyup",function(e){x&&"TABLE"==x.nodeName&&u(e)})}),{controlSelect:v,destroy:y}}}),r(A,[f,k,R,g,p],function(e,n,r,i,o){function a(e,t,i,o){var a=this;a.dom=e,a.win=t,a.serializer=i,a.editor=o,a.controlSelection=new r(a,o),a.win.getSelection||(a.tridentSel=new n(a))}var s=o.each,l=o.grep,c=o.trim,u=i.ie,d=i.opera;return a.prototype={setCursorLocation:function(e,t){var n=this,r=n.dom.createRng();r.setStart(e,t),r.setEnd(e,t),n.setRng(r),n.collapse(!1)},getContent:function(e){var n=this,r=n.getRng(),i=n.dom.create("body"),o=n.getSel(),a,s,l;return e=e||{},a=s="",e.get=!0,e.format=e.format||"html",e.selection=!0,n.editor.fire("BeforeGetContent",e),"text"==e.format?n.isCollapsed()?"":r.text||(o.toString?o.toString():""):(r.cloneContents?(l=r.cloneContents(),l&&i.appendChild(l)):r.item!==t||r.htmlText!==t?(i.innerHTML="
"+(r.item?r.item(0).outerHTML:r.htmlText),i.removeChild(i.firstChild)):i.innerHTML=r.toString(),/^\s/.test(i.innerHTML)&&(a=" "),/\s+$/.test(i.innerHTML)&&(s=" "),e.getInner=!0,e.content=n.isCollapsed()?"":a+n.serializer.serialize(i,e)+s,n.editor.fire("GetContent",e),e.content)},setContent:function(e,t){var n=this,r=n.getRng(),i,o=n.win.document,a,s;if(t=t||{format:"html"},t.set=!0,t.selection=!0,e=t.content=e,t.no_events||n.editor.fire("BeforeSetContent",t),e=t.content,r.insertNode){e+='_',r.startContainer==o&&r.endContainer==o?o.body.innerHTML=e:(r.deleteContents(),0===o.body.childNodes.length?o.body.innerHTML=e:r.createContextualFragment?r.insertNode(r.createContextualFragment(e)):(a=o.createDocumentFragment(),s=o.createElement("div"),a.appendChild(s),s.outerHTML=e,r.insertNode(a))),i=n.dom.get("__caret"),r=o.createRange(),r.setStartBefore(i),r.setEndBefore(i),n.setRng(r),n.dom.remove("__caret");try{n.setRng(r)}catch(l){}}else r.item&&(o.execCommand("Delete",!1,null),r=n.getRng()),/^\s+/.test(e)?(r.pasteHTML('_'+e),n.dom.remove("__mce_tmp")):r.pasteHTML(e);t.no_events||n.editor.fire("SetContent",t)},getStart:function(){var e=this,t=e.getRng(),n,r,i,o;if(t.duplicate||t.item){if(t.item)return t.item(0);for(i=t.duplicate(),i.collapse(1),n=i.parentElement(),n.ownerDocument!==e.dom.doc&&(n=e.dom.getRoot()),r=o=t.parentElement();o=o.parentNode;)if(o==n){n=r;break}return n}return n=t.startContainer,1==n.nodeType&&n.hasChildNodes()&&(n=n.childNodes[Math.min(n.childNodes.length-1,t.startOffset)]),n&&3==n.nodeType?n.parentNode:n},getEnd:function(){var e=this,t=e.getRng(),n,r;return t.duplicate||t.item?t.item?t.item(0):(t=t.duplicate(),t.collapse(0),n=t.parentElement(),n.ownerDocument!==e.dom.doc&&(n=e.dom.getRoot()),n&&"BODY"==n.nodeName?n.lastChild||n:n):(n=t.endContainer,r=t.endOffset,1==n.nodeType&&n.hasChildNodes()&&(n=n.childNodes[r>0?r-1:r]),n&&3==n.nodeType?n.parentNode:n)},getBookmark:function(e,t){function n(e,t){var n=0;return s(a.select(e),function(e,r){e==t&&(n=r)}),n}function r(e){function t(t){var n,r,i,o=t?"start":"end";n=e[o+"Container"],r=e[o+"Offset"],1==n.nodeType&&"TR"==n.nodeName&&(i=n.childNodes,n=i[Math.min(t?r:r-1,i.length-1)],n&&(r=t?0:n.childNodes.length,e["set"+(t?"Start":"End")](n,r)))}return t(!0),t(),e}function i(){function e(e,n){var i=e[n?"startContainer":"endContainer"],a=e[n?"startOffset":"endOffset"],s=[],l,c,u=0;if(3==i.nodeType){if(t)for(l=i.previousSibling;l&&3==l.nodeType;l=l.previousSibling)a+=l.nodeValue.length;s.push(a)}else c=i.childNodes,a>=c.length&&c.length&&(u=1,a=Math.max(0,c.length-1)),s.push(o.dom.nodeIndex(c[a],t)+u);for(;i&&i!=r;i=i.parentNode)s.push(o.dom.nodeIndex(i,t));return s}var n=o.getRng(!0),r=a.getRoot(),i={};return i.start=e(n,!0),o.isCollapsed()||(i.end=e(n)),i}var o=this,a=o.dom,l,c,u,d,f,p,h="",m;if(2==e)return p=o.getNode(),f=p.nodeName,"IMG"==f?{name:f,index:n(f,p)}:o.tridentSel?o.tridentSel.getBookmark(e):i();if(e)return{rng:o.getRng()};if(l=o.getRng(),u=a.uniqueId(),d=o.isCollapsed(),m="overflow:hidden;line-height:0px",l.duplicate||l.item){if(l.item)return p=l.item(0),f=p.nodeName,{name:f,index:n(f,p)};c=l.duplicate();try{l.collapse(),l.pasteHTML(''+h+""),d||(c.collapse(!1),l.moveToElementText(c.parentElement()),0===l.compareEndPoints("StartToEnd",c)&&c.move("character",-1),c.pasteHTML(''+h+""))}catch(g){return null}}else{if(p=o.getNode(),f=p.nodeName,"IMG"==f)return{name:f,index:n(f,p)};c=r(l.cloneRange()),d||(c.collapse(!1),c.insertNode(a.create("span",{"data-mce-type":"bookmark",id:u+"_end",style:m},h))),l=r(l),l.collapse(!0),l.insertNode(a.create("span",{"data-mce-type":"bookmark",id:u+"_start",style:m},h))}return o.moveToBookmark({id:u,keep:1}),{id:u}},moveToBookmark:function(e){function t(t){var n=e[t?"start":"end"],r,i,o,s;if(n){for(o=n[0],i=c,r=n.length-1;r>=1;r--){if(s=i.childNodes,n[r]>s.length-1)return;i=s[n[r]]}3===i.nodeType&&(o=Math.min(n[0],i.nodeValue.length)),1===i.nodeType&&(o=Math.min(n[0],i.childNodes.length)),t?a.setStart(i,o):a.setEnd(i,o)}return!0}function n(t){var n=o.get(e.id+"_"+t),r,i,a,c,u=e.keep;if(n&&(r=n.parentNode,"start"==t?(u?(r=n.firstChild,i=1):i=o.nodeIndex(n),f=p=r,h=m=i):(u?(r=n.firstChild,i=1):i=o.nodeIndex(n),p=r,m=i),!u)){for(c=n.previousSibling,a=n.nextSibling,s(l(n.childNodes),function(e){3==e.nodeType&&(e.nodeValue=e.nodeValue.replace(/\uFEFF/g,""))});n=o.get(e.id+"_"+t);)o.remove(n,1);c&&a&&c.nodeType==a.nodeType&&3==c.nodeType&&!d&&(i=c.nodeValue.length,c.appendData(a.nodeValue),o.remove(a),"start"==t?(f=p=c,h=m=i):(p=c,m=i))}}function r(e){return!o.isBlock(e)||e.innerHTML||u||(e.innerHTML='
'),e}var i=this,o=i.dom,a,c,f,p,h,m;if(e)if(e.start){if(a=o.createRng(),c=o.getRoot(),i.tridentSel)return i.tridentSel.moveToBookmark(e);t(!0)&&t()&&i.setRng(a)}else e.id?(n("start"),n("end"),f&&(a=o.createRng(),a.setStart(r(f),h),a.setEnd(r(p),m),i.setRng(a))):e.name?i.select(o.select(e.name)[e.index]):e.rng&&i.setRng(e.rng)},select:function(t,n){function r(t,n){var r=new e(t,t);do{if(3==t.nodeType&&0!==c(t.nodeValue).length)return n?a.setStart(t,0):a.setEnd(t,t.nodeValue.length),void 0;if("BR"==t.nodeName)return n?a.setStartBefore(t):a.setEndBefore(t),void 0}while(t=n?r.next():r.prev())}var i=this,o=i.dom,a=o.createRng(),s;if(t){if(!n&&i.controlSelection.controlSelect(t))return;s=o.nodeIndex(t),a.setStart(t.parentNode,s),a.setEnd(t.parentNode,s+1),n&&(r(t,1),r(t)),i.setRng(a)}return t},isCollapsed:function(){var e=this,t=e.getRng(),n=e.getSel();return!t||t.item?!1:t.compareEndPoints?0===t.compareEndPoints("StartToEnd",t):!n||t.collapsed},collapse:function(e){var t=this,n=t.getRng(),r;n.item&&(r=n.item(0),n=t.win.document.body.createTextRange(),n.moveToElementText(r)),n.collapse(!!e),t.setRng(n)},getSel:function(){var e=this.win;return e.getSelection?e.getSelection():e.document.selection},getRng:function(e){var t=this,n,r,i,o=t.win.document,a;if(!e&&t.restoreRng)return t.restoreRng;if(e&&t.tridentSel)return t.tridentSel.getRangeAt(0);try{(n=t.getSel())&&(r=n.rangeCount>0?n.getRangeAt(0):n.createRange?n.createRange():o.createRange())}catch(s){}if(u&&r&&r.setStart){try{a=o.selection.createRange()}catch(s){}a&&a.item&&(i=a.item(0),r=o.createRange(),r.setStartBefore(i),r.setEndAfter(i))}return r||(r=o.createRange?o.createRange():o.body.createTextRange()),r.setStart&&9===r.startContainer.nodeType&&r.collapsed&&(i=t.dom.getRoot(),r.setStart(i,0),r.setEnd(i,0)),t.selectedRange&&t.explicitRange&&(0===r.compareBoundaryPoints(r.START_TO_START,t.selectedRange)&&0===r.compareBoundaryPoints(r.END_TO_END,t.selectedRange)?r=t.explicitRange:(t.selectedRange=null,t.explicitRange=null)),r},setRng:function(e,t){var n=this,r;if(e.select)try{e.select()}catch(i){}else if(n.tridentSel){if(e.cloneRange)try{return n.tridentSel.addRange(e),void 0}catch(i){}}else if(r=n.getSel()){n.explicitRange=e;try{r.removeAllRanges()}catch(i){}r.addRange(e),t===!1&&r.extend&&(r.collapse(e.endContainer,e.endOffset),r.extend(e.startContainer,e.startOffset)),n.selectedRange=r.rangeCount>0?r.getRangeAt(0):null}},setNode:function(e){var t=this;return t.setContent(t.dom.getOuterHTML(e)),e},getNode:function(){function e(e,t){for(var n=e;e&&3===e.nodeType&&0===e.length;)e=t?e.nextSibling:e.previousSibling;return e||n}var t=this,n=t.getRng(),r,i=n.startContainer,o=n.endContainer,a=n.startOffset,s=n.endOffset;return n?n.setStart?(r=n.commonAncestorContainer,!n.collapsed&&(i==o&&2>s-a&&i.hasChildNodes()&&(r=i.childNodes[a]),3===i.nodeType&&3===o.nodeType&&(i=i.length===a?e(i.nextSibling,!0):i.parentNode,o=0===s?e(o.previousSibling,!1):o.parentNode,i&&i===o))?i:r&&3==r.nodeType?r.parentNode:r):n.item?n.item(0):n.parentElement():t.dom.getRoot()},getSelectedBlocks:function(t,n){var r=this,i=r.dom,o,a,s=[];if(a=i.getRoot(),t=i.getParent(t||r.getStart(),i.isBlock),n=i.getParent(n||r.getEnd(),i.isBlock),t&&t!=a&&s.push(t),t&&n&&t!=n){o=t;for(var l=new e(t,a);(o=l.next())&&o!=n;)i.isBlock(o)&&s.push(o)}return n&&t!=n&&n!=a&&s.push(n),s},isForward:function(){var e=this.dom,t=this.getSel(),n,r;return t&&t.anchorNode&&t.focusNode?(n=e.createRng(),n.setStart(t.anchorNode,t.anchorOffset),n.collapse(!0),r=e.createRng(),r.setStart(t.focusNode,t.focusOffset),r.collapse(!0),n.compareBoundaryPoints(n.START_TO_START,r)<=0):!0},normalize:function(){function t(t){function a(t,n){for(var r=new e(t,f.getParent(t.parentNode,f.isBlock)||p);t=r[n?"prev":"next"]();)if("BR"===t.nodeName)return!0}function s(e,t){return e.previousSibling&&e.previousSibling.nodeName==t}function l(t,n){var r,a;for(n=n||c,r=new e(n,f.getParent(n.parentNode,f.isBlock)||p);h=r[t?"prev":"next"]();){if(3===h.nodeType&&h.nodeValue.length>0)return c=h,u=t?h.nodeValue.length:0,i=!0,void 0;if(f.isBlock(h)||m[h.nodeName.toLowerCase()])return;a=h}o&&a&&(c=a,i=!0,u=0)}var c,u,d,f=n.dom,p=f.getRoot(),h,m,g;if(c=r[(t?"start":"end")+"Container"],u=r[(t?"start":"end")+"Offset"],m=f.schema.getNonEmptyElements(),9===c.nodeType&&(c=f.getRoot(),u=0),c===p){if(t&&(h=c.childNodes[u>0?u-1:0],h&&(g=h.nodeName.toLowerCase(),m[h.nodeName]||"TABLE"==h.nodeName)))return;if(c.hasChildNodes()&&(u=Math.min(!t&&u>0?u-1:u,c.childNodes.length-1),c=c.childNodes[u],u=0,c.hasChildNodes()&&!/TABLE/.test(c.nodeName))){h=c,d=new e(c,p);do{if(3===h.nodeType&&h.nodeValue.length>0){u=t?0:h.nodeValue.length,c=h,i=!0;break}if(m[h.nodeName.toLowerCase()]){u=f.nodeIndex(h),c=h.parentNode,"IMG"!=h.nodeName||t||u++,i=!0;break}}while(h=t?d.next():d.prev())}}o&&(3===c.nodeType&&0===u&&l(!0),1===c.nodeType&&(h=c.childNodes[u],!h||"BR"!==h.nodeName||s(h,"A")||a(h)||a(h,!0)||l(!0,c.childNodes[u]))),t&&!o&&3===c.nodeType&&u===c.nodeValue.length&&l(!1),i&&r["set"+(t?"Start":"End")](c,u)}var n=this,r,i,o;u||(r=n.getRng(),o=r.collapsed,t(!0),o||t(),i&&(o&&r.collapse(!0),n.setRng(r,n.isForward())))},selectorChanged:function(e,t){var n=this,r;return n.selectorChangedData||(n.selectorChangedData={},r={},n.editor.on("NodeChange",function(e){var t=e.element,i=n.dom,o=i.getParents(t,null,i.getRoot()),a={};s(n.selectorChangedData,function(e,t){s(o,function(n){return i.is(n,t)?(r[t]||(s(e,function(e){e(!0,{node:n,selector:t,parents:o})}),r[t]=e),a[t]=e,!1):void 0})}),s(r,function(e,n){a[n]||(delete r[n],s(e,function(e){e(!1,{node:t,selector:n,parents:o})}))})})),n.selectorChangedData[e]||(n.selectorChangedData[e]=[]),n.selectorChangedData[e].push(t),n},scrollIntoView:function(e){var t,n,r=this,i=r.dom;n=i.getViewPort(r.editor.getWin()),t=i.getPos(e).y,(tn.y+n.h)&&r.editor.getWin().scrollTo(0,t=t.nodeValue.length&&e.splice(0,1),t=e[e.length-1],0===d&&e.length>0&&t===u&&3===t.nodeType&&e.splice(e.length-1,1),e}function o(e,t,n){for(var r=[];e&&e!=n;e=e[t])r.push(e);return r}function a(e,t){do{if(e.parentNode==t)return e;e=e.parentNode}while(e)}function s(e,t,n){var a=n?"nextSibling":"previousSibling";for(m=e,g=m.parentNode;m&&m!=t;m=g)g=m.parentNode,v=o(m==e?m:m[a],a),v.length&&(n||v.reverse(),r(i(v)))}var l=t.startContainer,c=t.startOffset,u=t.endContainer,d=t.endOffset,f,p,h,m,g,v,y;if(y=e.select("td.mce-item-selected,th.mce-item-selected"),y.length>0)return n(y,function(e){r([e])}),void 0;if(1==l.nodeType&&l.hasChildNodes()&&(l=l.childNodes[c]),1==u.nodeType&&u.hasChildNodes()&&(u=u.childNodes[Math.min(d-1,u.childNodes.length-1)]),l==u)return r(i([l]));for(f=e.findCommonAncestor(l,u),m=l;m;m=m.parentNode){if(m===u)return s(l,f,!0);if(m===f)break}for(m=u;m;m=m.parentNode){if(m===l)return s(u,f);if(m===f)break}p=a(l,f)||l,h=a(u,f)||u,s(l,p,!0),v=o(p==l?p:p.nextSibling,"nextSibling",h==u?h.nextSibling:h),v.length&&r(i(v)),s(u,h)},this.split=function(e){function t(e,t){return e.splitText(t)}var n=e.startContainer,r=e.startOffset,i=e.endContainer,o=e.endOffset;return n==i&&3==n.nodeType?r>0&&rr?(o-=r,n=i=t(i,o).previousSibling,o=i.nodeValue.length,r=0):o=0):(3==n.nodeType&&r>0&&r0&&o=e;e++)r.addShortcut("ctrl+"+e,"",["FormatBlock",!1,"h"+e]);r.addShortcut("ctrl+7","",["FormatBlock",!1,"p"]),r.addShortcut("ctrl+8","",["FormatBlock",!1,"div"]),r.addShortcut("ctrl+9","",["FormatBlock",!1,"address"])}function c(e){return e?O[e]:O}function u(e,t){e&&("string"!=typeof e?et(e,function(e,t){u(t,e)}):(t=t.length?t:[t],et(t,function(e){e.deep===X&&(e.deep=!e.selector),e.split===X&&(e.split=!e.selector||e.inline),e.remove===X&&e.selector&&!e.inline&&(e.remove="none"),e.selector&&e.inline&&(e.mixed=!0,e.block_expand=!0),"string"==typeof e.classes&&(e.classes=e.classes.split(/\s+/))}),O[e]=t))}function d(e){var t;return r.dom.getParent(e,function(e){return t=r.dom.getStyle(e,"text-decoration"),t&&"none"!==t}),t}function f(e){var t;1===e.nodeType&&e.parentNode&&1===e.parentNode.nodeType&&(t=d(e.parentNode),r.dom.getStyle(e,"color")&&t?r.dom.setStyle(e,"text-decoration",t):r.dom.getStyle(e,"textdecoration")===t&&r.dom.setStyle(e,"text-decoration",null))}function p(t,n,o){function s(e,t){t=t||m,e&&(t.onformat&&t.onformat(e,t,n,o),et(t.styles,function(t,r){I.setStyle(e,r,E(t,n))}),et(t.attributes,function(t,r){I.setAttrib(e,r,E(t,n))}),et(t.classes,function(t){t=E(t,n),I.hasClass(e,t)||I.addClass(e,t)}))}function l(){function t(t,n){var r=new e(n);for(o=r.current();o;o=r.prev())if(o.childNodes.length>1||o==t||"BR"==o.tagName)return o}var n=r.selection.getRng(),i=n.startContainer,a=n.endContainer;if(i!=a&&0===n.endOffset){var s=t(i,a),l=3==s.nodeType?s.length:s.childNodes.length;n.setEnd(s,l)}return n}function u(e,t,n,r,i){var o=[],a=-1,s,l=-1,c=-1,u;return et(e.childNodes,function(e,t){return"UL"===e.nodeName||"OL"===e.nodeName?(a=t,s=e,!1):void 0}),et(e.childNodes,function(e,n){"SPAN"===e.nodeName&&"bookmark"==I.getAttrib(e,"data-mce-type")&&(e.id==t.id+"_start"?l=n:e.id==t.id+"_end"&&(c=n))}),0>=a||a>l&&c>a?(et(tt(e.childNodes),i),0):(u=I.clone(n,K),et(tt(e.childNodes),function(e,t){(a>l&&a>t||l>a&&t>a)&&(o.push(e),e.parentNode.removeChild(e))}),a>l?e.insertBefore(u,s):l>a&&e.insertBefore(u,s.nextSibling),r.push(u),et(o,function(e){u.appendChild(e)}),u)}function d(e,r,o){var l=[],c,d,f=!0;c=m.inline||m.block,d=I.create(c),s(d),W.walk(e,function(e){function p(e){var y,C,x,_,N;return N=f,y=e.nodeName.toLowerCase(),C=e.parentNode.nodeName.toLowerCase(),1===e.nodeType&&J(e)&&(N=f,f="true"===J(e),_=!0),w(y,"br")?(v=0,m.block&&I.remove(e),void 0):m.wrapper&&g(e,t,n)?(v=0,void 0):f&&!_&&m.block&&!m.wrapper&&i(y)&&z(C,c)?(e=I.rename(e,c),s(e),l.push(e),v=0,void 0):m.selector&&(et(h,function(t){"collapsed"in t&&t.collapsed!==b||I.is(e,t.selector)&&!a(e)&&(s(e,t),x=!0)}),!m.inline||x)?(v=0,void 0):(!f||_||!z(c,y)||!z(C,c)||!o&&3===e.nodeType&&1===e.nodeValue.length&&65279===e.nodeValue.charCodeAt(0)||a(e)||m.inline&&V(e)?"li"==y&&r?v=u(e,r,d,l,p):(v=0,et(tt(e.childNodes),p),_&&(f=N),v=0):(v||(v=I.clone(d,K),e.parentNode.insertBefore(v,e),l.push(v)),v.appendChild(e)),void 0)}var v;et(e,p)}),m.wrap_links===!1&&et(l,function(e){function t(e){var n,r,i;if("A"===e.nodeName){for(r=I.clone(d,K),l.push(r),i=tt(e.childNodes),n=0;n1||!V(e))&&0===o)return I.remove(e,1),void 0;if(m.inline||m.wrapper){if(m.exact||1!==o||(e=i(e)),et(h,function(t){et(I.select(t.inline,e),function(e){var r;if(t.wrap_links===!1){r=e.parentNode;do if("A"===r.nodeName)return;while(r=r.parentNode)}R(t,n,e,t.exact?e:null)})}),g(e.parentNode,t,n))return I.remove(e,1),e=0,G;m.merge_with_parents&&I.getParent(e.parentNode,function(r){return g(r,t,n)?(I.remove(e,1),e=0,G):void 0}),e&&m.merge_siblings!==!1&&(e=M(B(e),e),e=M(e,B(e,G)))}})}var h=c(t),m=h[0],v,y,b=!o&&F.isCollapsed();if(m)if(o)o.nodeType?(y=I.createRng(),y.setStartBefore(o),y.setEndAfter(o),d(T(y,h),null,!0)):d(o,null,!0);else if(b&&m.inline&&!I.select("td.mce-item-selected,th.mce-item-selected").length)H("apply",t,n);else{var C=r.selection.getNode();U||!h[0].defaultBlock||I.getParent(C,I.isBlock)||p(h[0].defaultBlock),r.selection.setRng(l()),v=F.getBookmark(),d(T(F.getRng(G),h),v),m.styles&&(m.styles.color||m.styles.textDecoration)&&(nt(C,f,"childNodes"),f(C)),F.moveToBookmark(v),P(F.getRng(G)),r.nodeChanged()}}function h(e,t,n){function i(e){var n,r,o,a,s;if(1===e.nodeType&&J(e)&&(a=b,b="true"===J(e),s=!0),n=tt(e.childNodes),b&&!s)for(r=0,o=p.length;o>r&&!R(p[r],t,e,e);r++);if(h.deep&&n.length){for(r=0,o=n.length;o>r;r++)i(n[r]);s&&(b=a)}}function a(n){var r;return et(o(n.parentNode).reverse(),function(n){var i;r||"_start"==n.id||"_end"==n.id||(i=g(n,e,t),i&&i.split!==!1&&(r=n))}),r}function s(e,n,r,i){var o,a,s,l,c,u;if(e){for(u=e.parentNode,o=n.parentNode;o&&o!=u;o=o.parentNode){for(a=I.clone(o,K),c=0;c=0;a--){if(s=t[a].selector,!s)return G;for(i=r.length-1;i>=0;i--)if(I.is(r[i],s))return G}return K}function C(e,t,n){var i;return Y||(Y={},i={},r.on("NodeChange",function(e){var t=o(e.element),n={};et(Y,function(e,r){et(t,function(o){return g(o,r,{},e.similar)?(i[r]||(et(e,function(e){e(!0,{node:o,format:r,parents:t})}),i[r]=e),n[r]=e,!1):void 0})}),et(i,function(r,o){n[o]||(delete i[o],et(r,function(n){n(!1,{node:e.element,format:o,parents:t})}))})})),et(e.split(","),function(e){Y[e]||(Y[e]=[],Y[e].similar=n),Y[e].push(t)}),this}function x(e,t){return w(e,t.inline)?G:w(e,t.block)?G:t.selector?1==e.nodeType&&I.is(e,t.selector):void 0}function w(e,t){return e=e||"",t=t||"",e=""+(e.nodeName||e),t=""+(t.nodeName||t),e.toLowerCase()==t.toLowerCase()}function _(e,t){return N(I.getStyle(e,t),t)}function N(e,t){return("color"==t||"backgroundColor"==t)&&(e=I.toHex(e)),"fontWeight"==t&&700==e&&(e="bold"),"fontFamily"==t&&(e=e.replace(/[\'\"]/g,"").replace(/,\s+/g,",")),""+e}function E(e,t){return"string"!=typeof e?e=e(t):t&&(e=e.replace(/%(\w+)/g,function(e,n){return t[n]||e})),e}function S(e){return e&&3===e.nodeType&&/^([\t \r\n]+|)$/.test(e.nodeValue)}function k(e,t,n){var r=I.create(t,n);return e.parentNode.insertBefore(r,e),r.appendChild(e),r}function T(t,n,a){function s(e){function t(e){return"BR"==e.nodeName&&e.getAttribute("data-mce-bogus")&&!e.nextSibling}var r,i,o,a,s;if(r=i=e?g:y,a=e?"previousSibling":"nextSibling",s=I.getRoot(),3==r.nodeType&&!S(r)&&(e?v>0:br?n:r,-1===n||a||n++):(n=o.indexOf(" ",t),r=o.indexOf("\xa0",t),n=-1!==n&&(-1===r||r>n)?n:r),n}var s,l,c,u;if(3===t.nodeType){if(c=o(t,n),-1!==c)return{container:t,offset:c};u=t}for(s=new e(t,I.getParent(t,V)||r.getBody());l=s[i?"prev":"next"]();)if(3===l.nodeType){if(u=l,c=o(l),-1!==c)return{container:l,offset:c} +}else if(V(l))break;return u?(n=i?0:u.length,{container:u,offset:n}):void 0}function d(e,r){var i,a,s,l;for(3==e.nodeType&&0===e.nodeValue.length&&e[r]&&(e=e[r]),i=o(e),a=0;ap?p:v],3==g.nodeType&&(v=0)),1==y.nodeType&&y.hasChildNodes()&&(p=y.childNodes.length-1,y=y.childNodes[b>p?p:b-1],3==y.nodeType&&(b=y.nodeValue.length)),g=c(g),y=c(y),(L(g.parentNode)||L(g))&&(g=L(g)?g:g.parentNode,g=g.nextSibling||g,3==g.nodeType&&(v=0)),(L(y.parentNode)||L(y))&&(y=L(y)?y:y.parentNode,y=y.previousSibling||y,3==y.nodeType&&(b=y.length)),n[0].inline&&(t.collapsed&&(m=u(g,v,!0),m&&(g=m.container,v=m.offset),m=u(y,b),m&&(y=m.container,b=m.offset)),h=l(y,b),h.node)){for(;h.node&&0===h.offset&&h.node.previousSibling;)h=l(h.node.previousSibling);h.node&&h.offset>0&&3===h.node.nodeType&&" "===h.node.nodeValue.charAt(h.offset-1)&&h.offset>1&&(y=h.node,y.splitText(h.offset-1))}return(n[0].inline||n[0].block_expand)&&(n[0].inline&&3==g.nodeType&&0!==v||(g=s(!0)),n[0].inline&&3==y.nodeType&&b!==y.nodeValue.length||(y=s())),n[0].selector&&n[0].expand!==K&&!n[0].inline&&(g=d(g,"previousSibling"),y=d(y,"nextSibling")),(n[0].block||n[0].selector)&&(g=f(g,"previousSibling"),y=f(y,"nextSibling"),n[0].block&&(V(g)||(g=s(!0)),V(y)||(y=s()))),1==g.nodeType&&(v=q(g),g=g.parentNode),1==y.nodeType&&(b=q(y)+1,y=y.parentNode),{startContainer:g,startOffset:v,endContainer:y,endOffset:b}}function R(e,t,n,r){var i,o,a;if(!x(n,e))return K;if("all"!=e.remove)for(et(e.styles,function(e,i){e=N(E(e,t),i),"number"==typeof i&&(i=e,r=0),(!r||w(_(r,i),e))&&I.setStyle(n,i,""),a=1}),a&&""===I.getAttrib(n,"style")&&(n.removeAttribute("style"),n.removeAttribute("data-mce-style")),et(e.attributes,function(e,i){var o;if(e=E(e,t),"number"==typeof i&&(i=e,r=0),!r||w(I.getAttrib(r,i),e)){if("class"==i&&(e=I.getAttrib(n,i),e&&(o="",et(e.split(/\s+/),function(e){/mce\w+/.test(e)&&(o+=(o?" ":"")+e)}),o)))return I.setAttrib(n,i,o),void 0;"class"==i&&n.removeAttribute("className"),j.test(i)&&n.removeAttribute("data-mce-"+i),n.removeAttribute(i)}}),et(e.classes,function(e){e=E(e,t),(!r||I.hasClass(r,e))&&I.removeClass(n,e)}),o=I.getAttribs(n),i=0;ia?a:o]),3===i.nodeType&&n&&o>=i.nodeValue.length&&(i=new e(i,r.getBody()).next()||i),3!==i.nodeType||n||0!==o||(i=new e(i,r.getBody()).prev()||i),i}function H(t,n,o){function a(e){var t=I.create("span",{id:y,"data-mce-bogus":!0,style:b?"color:red":""});return e&&t.appendChild(r.getDoc().createTextNode($)),t}function s(e,t){for(;e;){if(3===e.nodeType&&e.nodeValue!==$||e.childNodes.length>1)return!1;t&&1===e.nodeType&&t.push(e),e=e.firstChild}return!0}function l(e){for(;e;){if(e.id===y)return e;e=e.parentNode}}function u(t){var n;if(t)for(n=new e(t,t),t=n.current();t;t=n.next())if(3===t.nodeType)return t}function d(e,t){var n,r;if(e)r=F.getRng(!0),s(e)?(t!==!1&&(r.setStartBefore(e),r.setEndBefore(e)),I.remove(e)):(n=u(e),n.nodeValue.charAt(0)===$&&(n=n.deleteData(0,1)),I.remove(e,1)),F.setRng(r);else if(e=l(F.getStart()),!e)for(;e=I.get(y);)d(e,!1)}function f(){var e,t,r,i,s,d,f;e=F.getRng(!0),i=e.startOffset,d=e.startContainer,f=d.nodeValue,t=l(F.getStart()),t&&(r=u(t)),f&&i>0&&i=0;p--)u.appendChild(I.clone(f[p],!1)),u=u.firstChild;u.appendChild(I.doc.createTextNode($)),u=u.firstChild;var v=I.getParent(d,i);v&&I.isEmpty(v)?d.parentNode.replaceChild(m,d):I.insertAfter(m,d),F.setCursorLocation(u,1)}}function v(){var e;e=l(F.getStart()),e&&!I.isEmpty(e)&&nt(e,function(e){1!=e.nodeType||e.id===y||I.isEmpty(e)||I.setAttrib(e,"data-mce-bogus",null)},"childNodes")}var y="_mce_caret",b=r.settings.caret_debug;r._hasCaretEvents||(Z=function(){var e=[],t;if(s(l(F.getStart()),e))for(t=e.length;t--;)I.setAttrib(e[t],"data-mce-bogus","1")},Q=function(e){var t=e.keyCode;d(),(8==t||37==t||39==t)&&d(l(F.getStart())),v()},r.on("SetContent",function(e){e.selection&&v()}),r._hasCaretEvents=!0),"apply"==t?f():m()}function P(t){var n=t.startContainer,r=t.startOffset,i,o,a,s,l;if(3==n.nodeType&&r>=n.nodeValue.length&&(r=q(n),n=n.parentNode,i=!0),1==n.nodeType)for(s=n.childNodes,n=s[Math.min(r,s.length-1)],o=new e(n,I.getParent(n,I.isBlock)),(r>s.length-1||i)&&o.next(),a=o.current();a;a=o.next())if(3==a.nodeType&&!S(a))return l=I.create("a",null,$),a.parentNode.insertBefore(l,a),t.setStart(a,0),F.setRng(t),I.remove(l),void 0}var O={},I=r.dom,F=r.selection,W=new t(I),z=r.schema.isValidChild,V=I.isBlock,U=r.settings.forced_root_block,q=I.nodeIndex,$="\ufeff",j=/^(src|href|style)$/,K=!1,G=!0,Y,X,J=I.getContentEditable,Q,Z,et=n.each,tt=n.grep,nt=n.walk,rt=n.extend;rt(this,{get:c,register:u,apply:p,remove:h,toggle:m,match:v,matchAll:y,matchNode:g,canApply:b,formatChanged:C}),s(),l(),r.on("BeforeGetContent",function(){Z&&Z()}),r.on("mouseup keydown",function(e){Q&&Q(e)})}}),r(M,[g,p],function(e,t){var n=t.trim,r;return r=new RegExp(["]+data-mce-bogus[^>]+>[\u200b\ufeff]+<\\/span>","]+data-mce-bogus[^>]+><\\/div>",'\\s?data-mce-selected="[^"]+"'].join("|"),"gi"),function(t){function i(){return n(t.getContent({format:"raw",no_events:1}).replace(r,""))}function o(){a.typing=!1,a.add()}var a,s=0,l=[],c,u;return t.on("init",function(){a.add()}),t.on("BeforeExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&a.beforeChange()}),t.on("ExecCommand",function(e){var t=e.command;"Undo"!=t&&"Redo"!=t&&"mceRepaint"!=t&&a.add()}),t.on("ObjectResizeStart",function(){a.beforeChange()}),t.on("SaveContent ObjectResized",o),t.dom.bind(t.dom.getRoot(),"dragend",o),t.dom.bind(t.getBody(),"focusout",function(){!t.removed&&a.typing&&o()}),t.on("KeyUp",function(n){var r=n.keyCode;(r>=33&&36>=r||r>=37&&40>=r||45==r||13==r||n.ctrlKey)&&(o(),t.nodeChanged()),(46==r||8==r||e.mac&&(91==r||93==r))&&t.nodeChanged(),u&&a.typing&&(t.isDirty()||(t.isNotDirty=!l[0]||i()==l[0].content),t.fire("TypingUndo"),u=!1,t.nodeChanged())}),t.on("KeyDown",function(e){var t=e.keyCode;return t>=33&&36>=t||t>=37&&40>=t||45==t?(a.typing&&o(),void 0):((16>t||t>20)&&224!=t&&91!=t&&!a.typing&&(a.beforeChange(),a.typing=!0,a.add(),u=!0),void 0)}),t.on("MouseDown",function(){a.typing&&o()}),t.addShortcut("ctrl+z","","Undo"),t.addShortcut("ctrl+y,ctrl+shift+z","","Redo"),t.on("AddUndo Undo Redo ClearUndos MouseUp",function(e){e.isDefaultPrevented()||t.nodeChanged()}),a={data:l,typing:!1,beforeChange:function(){c=t.selection.getBookmark(2,!0)},add:function(e){var n,r=t.settings,o;if(e=e||{},e.content=i(),t.fire("BeforeAddUndo",{level:e}).isDefaultPrevented())return null;if(o=l[s],o&&o.content==e.content)return null;if(l[s]&&(l[s].beforeBookmark=c),r.custom_undo_redo_levels&&l.length>r.custom_undo_redo_levels){for(n=0;n0&&(t.fire("change",a),t.isNotDirty=!1),e},undo:function(){var e;return a.typing&&(a.add(),a.typing=!1),s>0&&(e=l[--s],t.setContent(e.content,{format:"raw"}),t.selection.moveToBookmark(e.beforeBookmark),t.fire("undo",{level:e})),e},redo:function(){var e;return s0||a.typing&&l[0]&&i()!=l[0].content},hasRedo:function(){return sR)&&(l=i.create("br"),t.parentNode.insertBefore(l,t)),a.setStartBefore(t),a.setEndBefore(t)):(a.setStartAfter(t),a.setEndAfter(t)):(a.setStart(t,0),a.setEnd(t,0));o.setRng(a),i.remove(l),o.scrollIntoView(t)}function h(e){var t=S,r,o,s;if(r=e||"TABLE"==D?i.create(e||P):T.cloneNode(!1),s=r,a.keep_styles!==!1)do if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(t.nodeName)){if("_mce_caret"==t.id)continue;o=t.cloneNode(!1),i.setAttrib(o,"id",""),r.hasChildNodes()?(o.appendChild(r.firstChild),r.appendChild(o)):(s=o,r.appendChild(o))}while(t=t.parentNode);return n||(s.innerHTML='
'),r}function m(t){var n,r,i;if(3==S.nodeType&&(t?k>0:k0)return!0}function b(){var e,t,r;S&&3==S.nodeType&&k>=S.nodeValue.length&&(n||y()||(e=i.create("br"),_.insertNode(e),_.setStartAfter(e),_.setEndAfter(e),t=!0)),e=i.create("br"),_.insertNode(e),n&&"PRE"==D&&(!R||8>R)&&e.parentNode.insertBefore(i.doc.createTextNode("\r"),e),r=i.create("span",{}," "),e.parentNode.insertBefore(r,e),o.scrollIntoView(r),i.remove(r),t?(_.setStartBefore(e),_.setEndBefore(e)):(_.setStartAfter(e),_.setEndAfter(e)),o.setRng(_),s.add()}function C(e){do 3===e.nodeType&&(e.nodeValue=e.nodeValue.replace(/^[\r\n]+/,"")),e=e.firstChild;while(e)}function x(e){var t=i.getRoot(),n,r;for(n=e;n!==t&&"false"!==i.getContentEditable(n);)"true"===i.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==t?r:t}function w(e){var t;n||(e.normalize(),t=e.lastChild,(!t||/^(left|right)$/gi.test(i.getStyle(t,"float",!0)))&&i.add(e,"br"))}var _=o.getRng(!0),N,E,S,k,T,R,A,B,L,M,D,H,P,O;if(!_.collapsed)return t.execCommand("Delete"),void 0;if(!r.isDefaultPrevented()&&(S=_.startContainer,k=_.startOffset,P=(a.force_p_newlines?"p":"")||a.forced_root_block,P=P?P.toUpperCase():"",R=i.doc.documentMode,A=r.shiftKey,1==S.nodeType&&S.hasChildNodes()&&(O=k>S.childNodes.length-1,S=S.childNodes[Math.min(k,S.childNodes.length-1)]||S,k=O&&3==S.nodeType?S.nodeValue.length:0),E=x(S))){if(s.beforeChange(),!i.isBlock(E)&&E!=i.getRoot())return(!P||A)&&b(),void 0;if((P&&!A||!P&&A)&&(S=g(S,k)),T=i.getParent(S,i.isBlock),M=T?i.getParent(T.parentNode,i.isBlock):null,D=T?T.nodeName.toUpperCase():"",H=M?M.nodeName.toUpperCase():"","LI"!=H||r.ctrlKey||(T=M,D=H),"LI"==D){if(!P&&A)return b(),void 0;if(i.isEmpty(T))return v(),void 0}if("PRE"==D&&a.br_in_pre!==!1){if(!A)return b(),void 0}else if(!P&&!A&&"LI"!=D||P&&A)return b(),void 0;P&&T===t.getBody()||(P=P||"P",m()?(B=/^(H[1-6]|PRE|FIGURE)$/.test(D)&&"HGROUP"!=H?h(P):h(),a.end_container_on_empty_block&&u(M)&&i.isEmpty(T)?B=i.split(M,T):i.insertAfter(B,T),p(B)):m(!0)?(B=T.parentNode.insertBefore(h(),T),d(B)):(N=_.cloneRange(),N.setEndAfter(T),L=N.extractContents(),C(L),B=L.firstChild,i.insertAfter(L,T),f(B),w(T),p(B)),i.setAttrib(B,"id",""),s.add())}}var i=t.dom,o=t.selection,a=t.settings,s=t.undoManager,l=t.schema,c=l.getNonEmptyElements();t.on("keydown",function(e){13==e.keyCode&&r(e)!==!1&&e.preventDefault()})}}),r(H,[],function(){return function(e){function t(){var t=i.getStart(),s=e.getBody(),l,c,u,d,f,p,h,m=-16777215,g,v,y,b,C;if(C=n.forced_root_block,t&&1===t.nodeType&&C){for(;t&&t!=s;){if(a[t.nodeName])return;t=t.parentNode}if(l=i.getRng(),l.setStart){c=l.startContainer,u=l.startOffset,d=l.endContainer,f=l.endOffset;try{v=e.getDoc().activeElement===s}catch(x){}}else l.item&&(t=l.item(0),l=e.getDoc().body.createTextRange(),l.moveToElementText(t)),v=l.parentElement().ownerDocument===e.getDoc(),y=l.duplicate(),y.collapse(!0),u=-1*y.move("character",m),y.collapsed||(y=l.duplicate(),y.collapse(!1),f=-1*y.move("character",m)-u);for(t=s.firstChild,b=s.nodeName.toLowerCase();t;)if((3===t.nodeType||1==t.nodeType&&!a[t.nodeName])&&o.isValidChild(b,C.toLowerCase())){if(3===t.nodeType&&0===t.nodeValue.length){h=t,t=t.nextSibling,r.remove(h);continue}p||(p=r.create(C),t.parentNode.insertBefore(p,t),g=!0),h=t,t=t.nextSibling,p.appendChild(h)}else p=null,t=t.nextSibling;if(g&&v){if(l.setStart)l.setStart(c,u),l.setEnd(d,f),i.setRng(l);else try{l=e.getDoc().body.createTextRange(),l.moveToElementText(s),l.collapse(!0),l.moveStart("character",u),f>0&&l.moveEnd("character",f),l.select()}catch(x){}e.nodeChanged()}}}var n=e.settings,r=e.dom,i=e.selection,o=e.schema,a=o.getBlockElements();n.forced_root_block&&e.on("KeyUp NodeChange",t)}}),r(P,[E,g,p],function(e,n,r){var i=r.each,o=r.extend,a=r.map,s=r.inArray,l=r.explode,c=n.gecko,u=n.ie,d=!0,f=!1;return function(n){function r(e,t,n){var r;return e=e.toLowerCase(),(r=_.exec[e])?(r(e,t,n),d):f}function p(e){var t;return e=e.toLowerCase(),(t=_.state[e])?t(e):-1}function h(e){var t;return e=e.toLowerCase(),(t=_.value[e])?t(e):f}function m(e,t){t=t||"exec",i(e,function(e,n){i(n.toLowerCase().split(","),function(n){_[t][n]=e})})}function g(e,r,i){return r===t&&(r=f),i===t&&(i=null),n.getDoc().execCommand(e,r,i)}function v(e){return E.match(e)}function y(e,r){E.toggle(e,r?{value:r}:t),n.nodeChanged()}function b(e){S=w.getBookmark(e)}function C(){w.moveToBookmark(S)}var x=n.dom,w=n.selection,_={state:{},exec:{},value:{}},N=n.settings,E=n.formatter,S;o(this,{execCommand:r,queryCommandState:p,queryCommandValue:h,addCommands:m}),m({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(e){var t=n.getDoc(),r;try{g(e)}catch(i){r=d}(r||!t.queryCommandSupported(e))&&n.windowManager.alert("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.")},unlink:function(e){w.isCollapsed()&&w.select(w.getNode()),g(e),w.collapse(f)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t=e.substring(7);"full"==t&&(t="justify"),i("left,center,right,justify".split(","),function(e){t!=e&&E.remove("align"+e)}),y("align"+t),r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(e){var t,n;g(e),t=x.getParent(w.getNode(),"ol,ul"),t&&(n=t.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName)&&(b(),x.split(n,t),C()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){y(e)},"ForeColor,HiliteColor,FontName":function(e,t,n){y(e,n)},FontSize:function(e,t,n){var r,i;n>=1&&7>=n&&(i=l(N.font_size_style_values),r=l(N.font_size_classes),n=r?r[n-1]||n:i[n-1]||n),y(e,n)},RemoveFormat:function(e){E.remove(e)},mceBlockQuote:function(){y("blockquote")},FormatBlock:function(e,t,n){return y(n||"p")},mceCleanup:function(){var e=w.getBookmark();n.setContent(n.getContent({cleanup:d}),{cleanup:d}),w.moveToBookmark(e)},mceRemoveNode:function(e,t,r){var i=r||w.getNode();i!=n.getBody()&&(b(),n.dom.remove(i,d),C())},mceSelectNodeDepth:function(e,t,r){var i=0;x.getParent(w.getNode(),function(e){return 1==e.nodeType&&i++==r?(w.select(e),f):void 0},n.getBody())},mceSelectNode:function(e,t,n){w.select(n)},mceInsertContent:function(t,r,i){function o(e){function t(e){return r[e]&&3==r[e].nodeType}var n,r,i;return n=w.getRng(!0),r=n.startContainer,i=n.startOffset,3==r.nodeType&&(i>0?e=e.replace(/^ /," "):t("previousSibling")||(e=e.replace(/^ /," ")),i|)$/," "):t("nextSibling")||(e=e.replace(/( | )(
|)$/," "))),e}var a,s,l,c,d,f,p,h,m,g,v,y,b,C;if(/^ | $/.test(i)&&(i=o(i)),a=n.parser,s=new e({},n.schema),b='',f={content:i,format:"html",selection:!0},n.fire("BeforeSetContent",f),i=f.content,-1==i.indexOf("{$caret}")&&(i+="{$caret}"),i=i.replace(/\{\$caret\}/,b),w.isCollapsed()||n.getDoc().execCommand("Delete",!1,null),l=w.getNode(),f={context:l.nodeName.toLowerCase()},d=a.parse(i,f),v=d.lastChild,"mce_marker"==v.attr("id"))for(p=v,v=v.prev;v;v=v.walk(!0))if(3==v.type||!x.isBlock(v.name)){v.parent.insert(p,v,"br"===v.name);break}if(f.invalid){for(w.setContent(b),l=w.getNode(),c=n.getBody(),9==l.nodeType?l=v=c:v=l;v!==c;)l=v,v=v.parentNode;i=l==c?c.innerHTML:x.getOuterHTML(l),i=s.serialize(a.parse(i.replace(//i,function(){return s.serialize(d)}))),l==c?x.setHTML(c,i):x.setOuterHTML(l,i)}else i=s.serialize(d),v=l.firstChild,y=l.lastChild,!v||v===y&&"BR"===v.nodeName?x.setHTML(l,i):w.setContent(i);p=x.get("mce_marker"),h=x.getRect(p),m=x.getViewPort(n.getWin()),(h.y+h.h>m.y+m.h||h.ym.x+m.w||h.x")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual,n.addVisual()},mceReplaceContent:function(e,t,r){n.execCommand("mceInsertContent",!1,r.replace(/\{\$selection\}/g,w.getContent({format:"text"})))},mceInsertLink:function(e,t,n){var r;"string"==typeof n&&(n={href:n}),r=x.getParent(w.getNode(),"a"),n.href=n.href.replace(" ","%20"),r&&n.href||E.remove("link"),n.href&&E.apply("link",n,r)},selectAll:function(){var e=x.getRoot(),t=x.createRng();w.getRng().setStart?(t.setStart(e,0),t.setEnd(e,e.childNodes.length),w.setRng(t)):g("SelectAll")},mceNewDocument:function(){n.setContent("")}}),m({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(e){var t="align"+e.substring(7),n=w.isCollapsed()?[x.getParent(w.getNode(),x.isBlock)]:w.getSelectedBlocks(),r=a(n,function(e){return!!E.matchNode(e,t)});return-1!==s(r,d)},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){return v(e)},mceBlockQuote:function(){return v("blockquote")},Outdent:function(){var e;if(N.inline_styles){if((e=x.getParent(w.getStart(),x.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return d;if((e=x.getParent(w.getEnd(),x.isBlock))&&parseInt(e.style.paddingLeft,10)>0)return d}return p("InsertUnorderedList")||p("InsertOrderedList")||!N.inline_styles&&!!x.getParent(w.getNode(),"BLOCKQUOTE")},"InsertUnorderedList,InsertOrderedList":function(e){var t=x.getParent(w.getNode(),"ul,ol");return t&&("insertunorderedlist"===e&&"UL"===t.tagName||"insertorderedlist"===e&&"OL"===t.tagName)}},"state"),m({"FontSize,FontName":function(e){var t=0,n;return(n=x.getParent(w.getNode(),"span"))&&(t="fontsize"==e?n.style.fontSize:n.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()),t}},"value"),m({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}}),r(O,[p],function(e){function t(e,i){var o=this,a,s;return e=r(e),i=o.settings=i||{},/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)?(o.source=e,void 0):(0===e.indexOf("/")&&0!==e.indexOf("//")&&(e=(i.base_uri?i.base_uri.protocol||"http":"http")+"://mce_host"+e),/^[\w\-]*:?\/\//.test(e)||(s=i.base_uri?i.base_uri.path:new t(location.href).directory,e=(i.base_uri&&i.base_uri.protocol||"http")+"://mce_host"+o.toAbsPath(s,e)),e=e.replace(/@@/g,"(mce_at)"),e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e),n(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(t,n){var r=e[n];r&&(r=r.replace(/\(mce_at\)/g,"@@")),o[t]=r}),a=i.base_uri,a&&(o.protocol||(o.protocol=a.protocol),o.userInfo||(o.userInfo=a.userInfo),o.port||"mce_host"!==o.host||(o.port=a.port),o.host&&"mce_host"!==o.host||(o.host=a.host),o.source=""),void 0)}var n=e.each,r=e.trim;return t.prototype={setPath:function(e){var t=this;e=/^(.*?)\/?(\w+)?$/.exec(e),t.path=e[0],t.directory=e[1],t.file=e[2],t.source="",t.getURI()},toRelative:function(e){var n=this,r;if("./"===e)return e;if(e=new t(e,{base_uri:n}),"mce_host"!=e.host&&n.host!=e.host&&e.host||n.port!=e.port||n.protocol!=e.protocol)return e.getURI();var i=n.getURI(),o=e.getURI();return i==o||"/"==i.charAt(i.length-1)&&i.substr(0,i.length-1)==o?i:(r=n.toRelPath(n.path,e.path),e.query&&(r+="?"+e.query),e.anchor&&(r+="#"+e.anchor),r)},toAbsolute:function(e,n){return e=new t(e,{base_uri:this}),e.getURI(this.host==e.host&&this.protocol==e.protocol?n:0)},toRelPath:function(e,t){var n,r=0,i="",o,a;if(e=e.substring(0,e.lastIndexOf("/")),e=e.split("/"),n=t.split("/"),e.length>=n.length)for(o=0,a=e.length;a>o;o++)if(o>=n.length||e[o]!=n[o]){r=o+1;break}if(e.lengtho;o++)if(o>=e.length||e[o]!=n[o]){r=o+1;break}if(1===r)return t;for(o=0,a=e.length-(r-1);a>o;o++)i+="../";for(o=r-1,a=n.length;a>o;o++)i+=o!=r-1?"/"+n[o]:n[o];return i},toAbsPath:function(e,t){var r,i=0,o=[],a,s;for(a=/\/$/.test(t)?"/":"",e=e.split("/"),t=t.split("/"),n(e,function(e){e&&o.push(e)}),e=o,r=t.length-1,o=[];r>=0;r--)0!==t[r].length&&"."!==t[r]&&(".."!==t[r]?i>0?i--:o.push(t[r]):i++);return r=e.length-i,s=0>=r?o.reverse().join("/"):e.slice(0,r).join("/")+"/"+o.reverse().join("/"),0!==s.indexOf("/")&&(s="/"+s),a&&s.lastIndexOf("/")!==s.length-1&&(s+=a),s},getURI:function(e){var t,n=this;return(!n.source||e)&&(t="",e||(n.protocol&&(t+=n.protocol+"://"),n.userInfo&&(t+=n.userInfo+"@"),n.host&&(t+=n.host),n.port&&(t+=":"+n.port)),n.path&&(t+=n.path),n.query&&(t+="?"+n.query),n.anchor&&(t+="#"+n.anchor),n.source=t),n.source}},t}),r(I,[p],function(e){function t(){}var n=e.each,r=e.extend,i,o;return t.extend=i=function(e){function t(){var e,t,n,r;if(!o&&(r=this,r.init&&r.init.apply(r,arguments),t=r.Mixins))for(e=t.length;e--;)n=t[e],n.init&&n.init.apply(r,arguments)}function a(){return this}function s(e,t){return function(){var n=this,r=n._super,i;return n._super=c[e],i=t.apply(n,arguments),n._super=r,i}}var l=this,c=l.prototype,u,d,f;o=!0,u=new l,o=!1,e.Mixins&&(n(e.Mixins,function(t){t=t;for(var n in t)"init"!==n&&(e[n]=t[n])}),c.Mixins&&(e.Mixins=c.Mixins.concat(e.Mixins))),e.Methods&&n(e.Methods.split(","),function(t){e[t]=a}),e.Properties&&n(e.Properties.split(","),function(t){var n="_"+t;e[t]=function(e){var t=this,r;return e!==r?(t[n]=e,t):t[n]}}),e.Statics&&n(e.Statics,function(e,n){t[n]=e}),e.Defaults&&c.Defaults&&(e.Defaults=r({},c.Defaults,e.Defaults));for(d in e)f=e[d],u[d]="function"==typeof f&&c[d]?s(d,f):f;return t.prototype=u,t.constructor=t,t.extend=i,t},t}),r(F,[I,p],function(e,t){function n(e){for(var t=[],n=e.length,r;n--;)r=e[n],r.__checked||(t.push(r),r.__checked=1);for(n=t.length;n--;)delete t[n].__checked;return t}var r=/^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i,i=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,o=/^\s*|\s*$/g,a,s=e.extend({init:function(e){function t(e){return e?(e=e.toLowerCase(),function(t){return"*"===e||t.type===e}):void 0}function n(e){return e?function(t){return t._name===e}:void 0}function a(e){return e?(e=e.split("."),function(t){for(var n=e.length;n--;)if(!t.hasClass(e[n]))return!1;return!0}):void 0}function s(e,t,n){return e?function(r){var i=r[e]?r[e]():"";return t?"="===t?i===n:"*="===t?i.indexOf(n)>=0:"~="===t?(" "+i+" ").indexOf(" "+n+" ")>=0:"!="===t?i!=n:"^="===t?0===i.indexOf(n):"$="===t?i.substr(i.length-n.length)===n:!1:!!n}:void 0}function l(e){var t;return e?(e=/(?:not\((.+)\))|(.+)/i.exec(e),e[1]?(t=u(e[1],[]),function(e){return!d(e,t)}):(e=e[2],function(t,n,r){return"first"===e?0===n:"last"===e?n===r-1:"even"===e?0===n%2:"odd"===e?1===n%2:t[e]?t[e]():!1})):void 0}function c(e,i,c){function u(e){e&&i.push(e)}var d;return d=r.exec(e.replace(o,"")),u(t(d[1])),u(n(d[2])),u(a(d[3])),u(s(d[4],d[5],d[6])),u(l(d[7])),i.psuedo=!!d[7],i.direct=c,i}function u(e,t){var n=[],r,o,a;do if(i.exec(""),o=i.exec(e),o&&(e=o[3],n.push(o[1]),o[2])){r=o[3];break}while(o);for(r&&u(r,t),e=[],a=0;a"!=n[a]&&e.push(c(n[a],[],">"===n[a-1]));return t.push(e),t}var d=this.match;this._selectors=u(e,[])},match:function(e,n){var r,i,o,a,s,l,c,u,d,f,p,h,m;for(n=n||this._selectors,r=0,i=n.length;i>r;r++){for(s=n[r],a=s.length,m=e,h=0,o=a-1;o>=0;o--)for(u=s[o];m;){for(u.psuedo&&(p=m.parent().items(),d=t.inArray(m,p),f=p.length),l=0,c=u.length;c>l;l++)if(!u[l](m,d,f)){l=c+1;break}if(l===c){h++;break}if(o===a-1)break;m=m.parent()}if(h===a)return!0}return!1},find:function(e){function t(e,n,i){var o,a,s,l,c,u=n[i];for(o=0,a=e.length;a>o;o++){for(c=e[o],s=0,l=u.length;l>s;s++)if(!u[s](c,o,a)){s=l+1;break}if(s===l)i==n.length-1?r.push(c):c.items&&t(c.items(),n,i+1);else if(u.direct)return;c.items&&t(c.items(),n,i)}}var r=[],i,o,l=this._selectors;if(e.items){for(i=0,o=l.length;o>i;i++)t(e.items(),l[i],0);o>1&&(r=n(r))}return a||(a=s.Collection),new a(r)}});return s}),r(W,[p,F,I],function(e,t,n){var r,i,o=Array.prototype.push,a=Array.prototype.slice;return i={length:0,init:function(e){e&&this.add(e)},add:function(t){var n=this;return e.isArray(t)?o.apply(n,t):t instanceof r?n.add(t.toArray()):o.call(n,t),n},set:function(e){var t=this,n=t.length,r;for(t.length=0,t.add(e),r=t.length;n>r;r++)delete t[r];return t},filter:function(e){var n=this,i,o,a=[],s,l;for("string"==typeof e?(e=new t(e),l=function(t){return e.match(t)}):l=e,i=0,o=n.length;o>i;i++)s=n[i],l(s)&&a.push(s);return new r(a)},slice:function(){return new r(a.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},each:function(t){return e.each(this,t),this},toArray:function(){return e.toArray(this)},indexOf:function(e){for(var t=this,n=t.length;n--&&t[n]!==e;);return n},reverse:function(){return new r(e.toArray(this).reverse())},hasClass:function(e){return this[0]?this[0].hasClass(e):!1},prop:function(e,t){var n=this,r,i;return t!==r?(n.each(function(n){n[e]&&n[e](t)}),n):(i=n[0],i&&i[e]?i[e]():void 0)},exec:function(t){var n=this,r=e.toArray(arguments).slice(1);return n.each(function(e){e[t]&&e[t].apply(e,r)}),n}},e.each("fire on off show hide addClass removeClass append prepend before after reflow".split(" "),function(t){i[t]=function(){var n=e.toArray(arguments);return this.each(function(e){t in e&&e[t].apply(e,n)}),this}}),e.each("text name disabled active selected checked visible parent value data".split(" "),function(e){i[e]=function(t){return this.prop(e,t) +}}),r=n.extend(i),t.Collection=r,r}),r(z,[p,v],function(e,t){return{id:function(){return t.DOM.uniqueId()},createFragment:function(e){return t.DOM.createFragment(e)},getWindowSize:function(){return t.DOM.getViewPort()},getSize:function(e){return t.DOM.getSize(e)},getPos:function(e,n){return t.DOM.getPos(e,n)},getViewPort:function(e){return t.DOM.getViewPort(e)},get:function(e){return document.getElementById(e)},addClass:function(e,n){return t.DOM.addClass(e,n)},removeClass:function(e,n){return t.DOM.removeClass(e,n)},hasClass:function(e,n){return t.DOM.hasClass(e,n)},toggleClass:function(e,n,r){return t.DOM.toggleClass(e,n,r)},css:function(e,n,r){return t.DOM.setStyle(e,n,r)},on:function(e,n,r,i){return t.DOM.bind(e,n,r,i)},off:function(e,n,r){return t.DOM.unbind(e,n,r)},fire:function(e,n,r){return t.DOM.fire(e,n,r)}}}),r(V,[I,p,W,z],function(e,t,n,r){var i=t.makeMap("focusin focusout scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave wheel keydown keypress keyup contextmenu"," "),o={},a="onmousewheel"in document,s=!1,l=e.extend({Statics:{controlIdLookup:{}},classPrefix:"mce-",init:function(e){var n=this,i,o;if(n.settings=e=t.extend({},n.Defaults,e),n._id=r.id(),n._text=n._name="",n._width=n._height=0,n._aria={role:e.role},i=e.classes)for(i=i.split(" "),i.map={},o=i.length;o--;)i.map[i[o]]=!0;n._classes=i||[],n.visible(!0),t.each("title text width height name classes visible disabled active value".split(" "),function(t){var r=e[t],i;r!==i?n[t](r):n["_"+t]===i&&(n["_"+t]=!1)}),n.on("click",function(){return n.disabled()?!1:void 0}),e.classes&&t.each(e.classes.split(" "),function(e){n.addClass(e)}),n.settings=e,n._borderBox=n.parseBox(e.border),n._paddingBox=n.parseBox(e.padding),n._marginBox=n.parseBox(e.margin),e.hidden&&n.hide()},Properties:"parent,title,text,width,height,disabled,active,name,value",Methods:"renderHtml",getContainerElm:function(){return document.body},getParentCtrl:function(e){for(var t;e&&!(t=l.controlIdLookup[e.id]);)e=e.parentNode;return t},parseBox:function(e){var t,n=10;if(e)return"number"==typeof e?(e=e||0,{top:e,left:e,bottom:e,right:e}):(e=e.split(" "),t=e.length,1===t?e[1]=e[2]=e[3]=e[0]:2===t?(e[2]=e[0],e[3]=e[1]):3===t&&(e[3]=e[1]),{top:parseInt(e[0],n)||0,right:parseInt(e[1],n)||0,bottom:parseInt(e[2],n)||0,left:parseInt(e[3],n)||0})},borderBox:function(){return this._borderBox},paddingBox:function(){return this._paddingBox},marginBox:function(){return this._marginBox},measureBox:function(e,t){function n(t){var n=document.defaultView;return n?(t=t.replace(/[A-Z]/g,function(e){return"-"+e}),n.getComputedStyle(e,null).getPropertyValue(t)):e.currentStyle[t]}function r(e){var t=parseInt(n(e),10);return isNaN(t)?0:t}return{top:r(t+"TopWidth"),right:r(t+"RightWidth"),bottom:r(t+"BottomWidth"),left:r(t+"LeftWidth")}},initLayoutRect:function(){var e=this,t=e.settings,n,r,i=e.getEl(),o,a,s,l,c,u,d;n=e._borderBox=e._borderBox||e.measureBox(i,"border"),e._paddingBox=e._paddingBox||e.measureBox(i,"padding"),e._marginBox=e._marginBox||e.measureBox(i,"margin"),u=t.minWidth,d=t.minHeight,s=u||i.offsetWidth,l=d||i.offsetHeight,o=t.width,a=t.height,c=t.autoResize,c="undefined"!=typeof c?c:!o&&!a,o=o||s,a=a||l;var f=n.left+n.right,p=n.top+n.bottom,h=t.maxWidth||65535,m=t.maxHeight||65535;return e._layoutRect=r={x:t.x||0,y:t.y||0,w:o,h:a,deltaW:f,deltaH:p,contentW:o-f,contentH:a-p,innerW:o-f,innerH:a-p,startMinWidth:u||0,startMinHeight:d||0,minW:Math.min(s,h),minH:Math.min(l,m),maxW:h,maxH:m,autoResize:c,scrollW:0},e._lastLayoutRect={},r},layoutRect:function(e){var t=this,n=t._layoutRect,r,i,o,a,s,c;return n||(n=t.initLayoutRect()),e?(o=n.deltaW,a=n.deltaH,e.x!==s&&(n.x=e.x),e.y!==s&&(n.y=e.y),e.minW!==s&&(n.minW=e.minW),e.minH!==s&&(n.minH=e.minH),i=e.w,i!==s&&(i=in.maxW?n.maxW:i,n.w=i,n.innerW=i-o),i=e.h,i!==s&&(i=in.maxH?n.maxH:i,n.h=i,n.innerH=i-a),i=e.innerW,i!==s&&(i=in.maxW-o?n.maxW-o:i,n.innerW=i,n.w=i+o),i=e.innerH,i!==s&&(i=in.maxH-a?n.maxH-a:i,n.innerH=i,n.h=i+a),e.contentW!==s&&(n.contentW=e.contentW),e.contentH!==s&&(n.contentH=e.contentH),r=t._lastLayoutRect,(r.x!==n.x||r.y!==n.y||r.w!==n.w||r.h!==n.h)&&(c=l.repaintControls,c&&c.map&&!c.map[t._id]&&(c.push(t),c.map[t._id]=!0),r.x=n.x,r.y=n.y,r.w=n.w,r.h=n.h),t):n},repaint:function(){var e=this,t,n,r,i,o=0,a=0,s;t=e.getEl().style,r=e._layoutRect,s=e._lastRepaintRect||{},i=e._borderBox,o=i.left+i.right,a=i.top+i.bottom,r.x!==s.x&&(t.left=r.x+"px",s.x=r.x),r.y!==s.y&&(t.top=r.y+"px",s.y=r.y),r.w!==s.w&&(t.width=r.w-o+"px",s.w=r.w),r.h!==s.h&&(t.height=r.h-a+"px",s.h=r.h),e._hasBody&&r.innerW!==s.innerW&&(n=e.getEl("body").style,n.width=r.innerW+"px",s.innerW=r.innerW),e._hasBody&&r.innerH!==s.innerH&&(n=n||e.getEl("body").style,n.height=r.innerH+"px",s.innerH=r.innerH),e._lastRepaintRect=s,e.fire("repaint",{},!1)},on:function(e,t){function n(e){var t,n;return function(i){return t||r.parents().each(function(r){var i=r.settings.callbacks;return i&&(t=i[e])?(n=r,!1):void 0}),t.call(n,i)}}var r=this,o,a,s,l;if(t)for("string"==typeof t&&(t=n(t)),s=e.toLowerCase().split(" "),l=s.length;l--;)e=s[l],o=r._bindings,o||(o=r._bindings={}),a=o[e],a||(a=o[e]=[]),a.push(t),i[e]&&(r._nativeEvents?r._nativeEvents[e]=!0:r._nativeEvents={name:!0},r._rendered&&r.bindPendingEvents());return r},off:function(e,t){var n=this,r,i=n._bindings,o,a,s,l;if(i)if(e)for(s=e.toLowerCase().split(" "),r=s.length;r--;){if(e=s[r],o=i[e],!e){for(a in i)i[a].length=0;return n}if(o)if(t)for(l=o.length;l--;)o[l]===t&&o.splice(l,1);else o.length=0}else n._bindings=[];return n},fire:function(e,t,n){function r(){return!1}function i(){return!0}var o=this,a,s,l,c;if(e=e.toLowerCase(),t=t||{},t.type||(t.type=e),t.control||(t.control=o),t.preventDefault||(t.preventDefault=function(){t.isDefaultPrevented=i},t.stopPropagation=function(){t.isPropagationStopped=i},t.stopImmediatePropagation=function(){t.isImmediatePropagationStopped=i},t.isDefaultPrevented=r,t.isPropagationStopped=r,t.isImmediatePropagationStopped=r),o._bindings&&(l=o._bindings[e]))for(a=0,s=l.length;s>a&&(t.isImmediatePropagationStopped()||l[a].call(o,t)!==!1);a++);if(n!==!1)for(c=o.parent();c&&!t.isPropagationStopped();)c.fire(e,t,!1),c=c.parent();return t},parents:function(e){var t=this,r=new n;for(t=t.parent();t;t=t.parent())r.add(t);return e&&(r=r.filter(e)),r},next:function(){var e=this.parent().items();return e[e.indexOf(this)+1]},prev:function(){var e=this.parent().items();return e[e.indexOf(this)-1]},findCommonAncestor:function(e,t){for(var n;e;){for(n=t;n&&e!=n;)n=n.parent();if(e==n)break;e=e.parent()}return e},hasClass:function(e,t){var n=this._classes[t||"control"];return e=this.classPrefix+e,n&&!!n.map[e]},addClass:function(e,t){var n=this,r,i;return e=this.classPrefix+e,r=n._classes[t||"control"],r||(r=[],r.map={},n._classes[t||"control"]=r),r.map[e]||(r.map[e]=e,r.push(e),n._rendered&&(i=n.getEl(t),i&&(i.className=r.join(" ")))),n},removeClass:function(e,t){var n=this,r,i,o;if(e=this.classPrefix+e,r=n._classes[t||"control"],r&&r.map[e])for(delete r.map[e],i=r.length;i--;)r[i]===e&&r.splice(i,1);return n._rendered&&(o=n.getEl(t),o&&(o.className=r.join(" "))),n},toggleClass:function(e,t,n){var r=this;return t?r.addClass(e,n):r.removeClass(e,n),r},classes:function(e){var t=this._classes[e||"control"];return t?t.join(" "):""},getEl:function(e,t){var n,i=e?this._id+"-"+e:this._id;return n=o[i]=(t===!0?null:o[i])||r.get(i)},visible:function(e){var t=this,n;return"undefined"!=typeof e?(t._visible!==e&&(t._rendered&&(t.getEl().style.display=e?"":"none"),t._visible=e,n=t.parent(),n&&(n._lastRect=null),t.fire(e?"show":"hide")),t):t._visible},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(e){}return this},blur:function(){return this.getEl().blur(),this},aria:function(e,t){var n=this,r=n.getEl();return"undefined"==typeof t?n._aria[e]:(n._aria[e]=t,n._rendered&&("label"==e&&r.setAttribute("aria-labeledby",n._id),r.setAttribute("role"==e?e:"aria-"+e,t)),n)},encode:function(e,t){return t!==!1&&l.translate&&(e=l.translate(e)),(e||"").replace(/[&<>"]/g,function(e){return"&#"+e.charCodeAt(0)+";"})},before:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t),!0),t},after:function(e){var t=this,n=t.parent();return n&&n.insert(e,n.items().indexOf(t)),t},remove:function(){var e=this,t=e.getEl(),n=e.parent(),i;if(e.items)for(var o=e.items().toArray(),a=o.length;a--;)o[a].remove();return n&&n.items&&(i=[],n.items().each(function(t){t!==e&&i.push(t)}),n.items().set(i),n._lastRect=null),e._eventsRoot&&e._eventsRoot==e&&r.off(t),delete l.controlIdLookup[e._id],t.parentNode&&t.parentNode.removeChild(t),e},renderBefore:function(e){var t=this;return e.parentNode.insertBefore(r.createFragment(t.renderHtml()),e),t.postRender(),t},renderTo:function(e){var t=this;return e=e||t.getContainerElm(),e.appendChild(r.createFragment(t.renderHtml())),t.postRender(),t},postRender:function(){var e=this,t=e.settings,n,i,o,a,s;for(a in t)0===a.indexOf("on")&&e.on(a.substr(2),t[a]);if(e._eventsRoot){for(o=e.parent();!s&&o;o=o.parent())s=o._eventsRoot;if(s)for(a in s._nativeEvents)e._nativeEvents[a]=!0}e.bindPendingEvents(),t.style&&(n=e.getEl(),n&&(n.setAttribute("style",t.style),n.style.cssText=t.style)),e._visible||r.css(e.getEl(),"display","none"),e.settings.border&&(i=e.borderBox(),r.css(e.getEl(),{"border-top-width":i.top,"border-right-width":i.right,"border-bottom-width":i.bottom,"border-left-width":i.left})),l.controlIdLookup[e._id]=e;for(var c in e._aria)e.aria(c,e._aria[c]);e.fire("postrender",{},!1)},scrollIntoView:function(e){function t(e,t){var n,r,i=e;for(n=r=0;i&&i!=t&&i.nodeType;)n+=i.offsetLeft||0,r+=i.offsetTop||0,i=i.offsetParent;return{x:n,y:r}}var n=this.getEl(),r=n.parentNode,i,o,a,s,l,c,u=t(n,r);return i=u.x,o=u.y,a=n.offsetWidth,s=n.offsetHeight,l=r.clientWidth,c=r.clientHeight,"end"==e?(i-=l-a,o-=c-s):"center"==e&&(i-=l/2-a/2,o-=c/2-s/2),r.scrollLeft=i,r.scrollTop=o,this},bindPendingEvents:function(){function e(e){var t=o.getParentCtrl(e.target);t&&t.fire(e.type,e)}function t(){var e=d._lastHoverCtrl;e&&(e.fire("mouseleave",{target:e.getEl()}),e.parents().each(function(e){e.fire("mouseleave",{target:e.getEl()})}),d._lastHoverCtrl=null)}function n(e){var t=o.getParentCtrl(e.target),n=d._lastHoverCtrl,r=0,i,a,s;if(t!==n){if(d._lastHoverCtrl=t,a=t.parents().toArray().reverse(),a.push(t),n){for(s=n.parents().toArray().reverse(),s.push(n),r=0;r=r;i--)n=s[i],n.fire("mouseleave",{target:n.getEl()})}for(i=r;il;l++)d=u[l]._eventsRoot;for(d||(d=u[u.length-1]||o),o._eventsRoot=d,c=l,l=0;c>l;l++)u[l]._eventsRoot=d;for(p in f){if(!f)return!1;"wheel"!==p||s?("mouseenter"===p||"mouseleave"===p?d._hasMouseEnter||(r.on(d.getEl(),"mouseleave",t),r.on(d.getEl(),"mouseover",n),d._hasMouseEnter=1):d[p]||(r.on(d.getEl(),p,e),d[p]=!0),f[p]=!1):a?r.on(o.getEl(),"mousewheel",i):r.on(o.getEl(),"DOMMouseScroll",i)}}},reflow:function(){return this.repaint(),this}});return l}),r(U,[],function(){var e={},t;return{add:function(t,n){e[t.toLowerCase()]=n},has:function(t){return!!e[t.toLowerCase()]},create:function(n,r){var i,o,a;if(!t){a=tinymce.ui;for(o in a)e[o.toLowerCase()]=a[o];t=!0}if("string"==typeof n?(r=r||{},r.type=n):(r=n,n=r.type),n=n.toLowerCase(),i=e[n],!i)throw new Error("Could not find control by type: "+n);return i=new i(r),i.type=n,i}}}),r(q,[V,W,F,U,p,z],function(e,t,n,r,i,o){var a={};return e.extend({layout:"",innerClass:"container-inner",init:function(e){var n=this;n._super(e),e=n.settings,n._fixed=e.fixed,n._items=new t,n.addClass("container"),n.addClass("container-body","body"),e.containerCls&&n.addClass(e.containerCls),n._layout=r.create((e.layout||n.layout)+"layout"),n.settings.items&&n.add(n.settings.items),n._hasBody=!0},items:function(){return this._items},find:function(e){return e=a[e]=a[e]||new n(e),e.find(this)},add:function(e){var t=this;return t.items().add(t.create(e)).parent(t),t},focus:function(){var e=this;return e.keyNav?e.keyNav.focusFirst():e._super(),e},replace:function(e,t){for(var n,r=this.items(),i=r.length;i--;)if(r[i]===e){r[i]=t;break}i>=0&&(n=t.getEl(),n&&n.parentNode.removeChild(n),n=e.getEl(),n&&n.parentNode.removeChild(n)),t.parent(this)},create:function(t){var n=this,o,a=[];return i.isArray(t)||(t=[t]),i.each(t,function(t){t&&(t instanceof e||("string"==typeof t&&(t={type:t}),o=i.extend({},n.settings.defaults,t),t.type=o.type=o.type||t.type||n.settings.defaultType||(o.defaults?o.defaults.type:null),t=r.create(o)),a.push(t))}),a},renderNew:function(){var e=this;return e.items().each(function(t,n){var r,i;t.parent(e),t._rendered||(r=e.getEl("body"),i=o.createFragment(t.renderHtml()),r.hasChildNodes()&&n<=r.childNodes.length-1?r.insertBefore(i,r.childNodes[n]):r.appendChild(i),t.postRender())}),e._layout.applyClasses(e),e._lastRect=null,e},append:function(e){return this.add(e).renderNew()},prepend:function(e){var t=this;return t.items().set(t.create(e).concat(t.items().toArray())),t.renderNew()},insert:function(e,t,n){var r=this,i,o,a;return e=r.create(e),i=r.items(),!n&&t=0&&t'+'
'+(e.settings.html||"")+t.renderHtml(e)+"
"+"
"},postRender:function(){var e=this,t;return e.items().exec("postRender"),e._super(),e._layout.postRender(e),e._rendered=!0,e.settings.style&&o.css(e.getEl(),e.settings.style),e.settings.border&&(t=e.borderBox(),o.css(e.getEl(),{"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left})),e},initLayoutRect:function(){var e=this,t=e._super();return e._layout.recalc(e),t},recalc:function(){var e=this,t=e._layoutRect,n=e._lastRect;return n&&n.w==t.w&&n.h==t.h?void 0:(e._layout.recalc(e),t=e.layoutRect(),e._lastRect={x:t.x,y:t.y,w:t.w,h:t.h},!0)},reflow:function(){var t,n;if(this.visible()){for(e.repaintControls=[],e.repaintControls.map={},n=this.recalc(),t=e.repaintControls.length;t--;)e.repaintControls[t].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),e.repaintControls=[]}return this}})}),r($,[z],function(e){function t(){var e=document,t,n,r,i,o,a,s,l,c=Math.max;return t=e.documentElement,n=e.body,r=c(t.scrollWidth,n.scrollWidth),i=c(t.clientWidth,n.clientWidth),o=c(t.offsetWidth,n.offsetWidth),a=c(t.scrollHeight,n.scrollHeight),s=c(t.clientHeight,n.clientHeight),l=c(t.offsetHeight,n.offsetHeight),{width:o>r?i:r,height:l>a?s:a}}return function(n,r){function i(){return a.getElementById(r.handle||n)}var o,a=document,s,l,c,u,d,f;r=r||{},l=function(n){var l=t(),p,h;n.preventDefault(),s=n.button,p=i(),d=n.screenX,f=n.screenY,h=window.getComputedStyle?window.getComputedStyle(p,null).getPropertyValue("cursor"):p.runtimeStyle.cursor,o=a.createElement("div"),e.css(o,{position:"absolute",top:0,left:0,width:l.width,height:l.height,zIndex:2147483647,opacity:1e-4,background:"red",cursor:h}),a.body.appendChild(o),e.on(a,"mousemove",u),e.on(a,"mouseup",c),r.start(n)},u=function(e){return e.button!==s?c(e):(e.deltaX=e.screenX-d,e.deltaY=e.screenY-f,e.preventDefault(),r.drag(e),void 0)},c=function(t){e.off(a,"mousemove",u),e.off(a,"mouseup",c),o.parentNode.removeChild(o),r.stop&&r.stop(t)},this.destroy=function(){e.off(i())},e.on(i(),"mousedown",l)}}),r(j,[z,$],function(e,t){return{init:function(){var e=this;e.on("repaint",e.renderScroll)},renderScroll:function(){function n(){function t(t,a,s,l,c,u){var d,f,p,h,m,g,v,y,b;if(f=i.getEl("scroll"+t)){if(y=a.toLowerCase(),b=s.toLowerCase(),i.getEl("absend")&&e.css(i.getEl("absend"),y,i.layoutRect()[l]-1),!c)return e.css(f,"display","none"),void 0;e.css(f,"display","block"),d=i.getEl("body"),p=i.getEl("scroll"+t+"t"),h=d["client"+s]-2*o,h-=n&&r?f["client"+u]:0,m=d["scroll"+s],g=h/m,v={},v[y]=d["offset"+a]+o,v[b]=h,e.css(f,v),v={},v[y]=d["scroll"+a]*g,v[b]=h*g,e.css(p,v)}}var n,r,a;a=i.getEl("body"),n=a.scrollWidth>a.clientWidth,r=a.scrollHeight>a.clientHeight,t("h","Left","Width","contentW",n,"Height"),t("v","Top","Height","contentH",r,"Width")}function r(){function n(n,r,a,s,l){var c,u=i._id+"-scroll"+n,d=i.classPrefix;i.getEl().appendChild(e.createFragment('
'+'
'+"
")),i.draghelper=new t(u+"t",{start:function(){c=i.getEl("body")["scroll"+r],e.addClass(e.get(u),d+"active")},drag:function(e){var t,u,d,f,p=i.layoutRect();u=p.contentW>p.innerW,d=p.contentH>p.innerH,f=i.getEl("body")["client"+a]-2*o,f-=u&&d?i.getEl("scroll"+n)["client"+l]:0,t=f/i.getEl("body")["scroll"+a],i.getEl("body")["scroll"+r]=c+e["delta"+s]/t},stop:function(){e.removeClass(e.get(u),d+"active")}})}i.addClass("scroll"),n("v","Top","Height","Y","Width"),n("h","Left","Width","X","Height")}var i=this,o=2;i.settings.autoScroll&&(i._hasScroll||(i._hasScroll=!0,r(),i.on("wheel",function(e){var t=i.getEl("body");t.scrollLeft+=10*(e.deltaX||0),t.scrollTop+=10*e.deltaY,n()}),e.on(i.getEl("body"),"scroll",n)),n())}}}),r(K,[q,j],function(e,t){return e.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[t],renderHtml:function(){var e=this,t=e._layout,n=e.settings.html;return e.preRender(),t.preRender(e),"undefined"==typeof n?n='
'+t.renderHtml(e)+"
":("function"==typeof n&&(n=n.call(e)),e._hasBody=!1),'
'+(e._preBodyHtml||"")+n+"
"}})}),r(G,[z],function(e){function t(t,n,r){var i,o,a,s,l,c,u,d,f;return f=e.getViewPort(),o=e.getPos(n),a=o.x,s=o.y,t._fixed&&(a-=f.x,s-=f.y),i=t.getEl(),l=i.offsetWidth,c=i.offsetHeight,u=n.offsetWidth,d=n.offsetHeight,r=(r||"").split(""),"b"===r[0]&&(s+=d),"r"===r[1]&&(a+=u),"c"===r[0]&&(s+=Math.round(d/2)),"c"===r[1]&&(a+=Math.round(u/2)),"b"===r[3]&&(s-=c),"r"===r[4]&&(a-=l),"c"===r[3]&&(s-=Math.round(c/2)),"c"===r[4]&&(a-=Math.round(l/2)),{x:a,y:s,w:l,h:c}}return{testMoveRel:function(n,r){for(var i=e.getViewPort(),o=0;o0&&a.x+a.w0&&a.y+a.hi.x&&a.x+a.wi.y&&a.y+a.he?0:e+n>t?(e=t-n,0>e?0:e):e}var i=this;if(i.settings.constrainToViewport){var o=e.getViewPort(window),a=i.layoutRect();t=r(t,o.w+o.x,a.w),n=r(n,o.h+o.y,a.h)}return i._rendered?i.layoutRect({x:t,y:n}).repaint():(i.settings.x=t,i.settings.y=n),i.fire("move",{x:t,y:n}),i}}}),r(Y,[z],function(e){return{resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(t,n){if(1>=t||1>=n){var r=e.getWindowSize();t=1>=t?t*r.w:t,n=1>=n?n*r.h:n}return this._layoutRect.autoResize=!1,this.layoutRect({minW:t,minH:n,w:t,h:n}).reflow()},resizeBy:function(e,t){var n=this,r=n.layoutRect();return n.resizeTo(r.w+e,r.h+t)}}}),r(X,[K,G,Y,z],function(e,t,n,r){function i(e){var t;for(t=s.length;t--;)s[t]===e&&s.splice(t,1)}var o,a,s=[],l=[],c,u=e.extend({Mixins:[t,n],init:function(e){function t(){var e,t=u.zIndex||65535,n;if(l.length)for(e=0;en&&(e.fixed(!1).layoutRect({y:e._autoFixY}).repaint(),t(!1,e._autoFixY-n)):(e._autoFixY=e.layoutRect().y,e._autoFixY
'),n=n.firstChild,d.getContainerElm().appendChild(n),setTimeout(function(){r.addClass(n,i+"in"),r.addClass(d.getEl(),i+"in")},0),c=!0),l.push(d),t()}}),d.on("close hide",function(e){if(e.control==d){for(var n=l.length;n--;)l[n]===d&&l.splice(n,1);t()}}),d.on("show",function(){d.parents().each(function(e){return e._fixed?(d.fixed(!0),!1):void 0})}),e.popover&&(d._preBodyHtml='
',d.addClass("popover").addClass("bottom").addClass("start"))},fixed:function(e){var t=this;if(t._fixed!=e){if(t._rendered){var n=r.getViewPort();e?t.layoutRect().y-=n.y:t.layoutRect().y+=n.y}t.toggleClass("fixed",e),t._fixed=e}return t},show:function(){var e=this,t,n=e._super();for(t=s.length;t--&&s[t]!==e;);return-1===t&&s.push(e),n},hide:function(){return i(this),this._super()},hideAll:function(){u.hideAll()},close:function(){var e=this;return e.fire("close"),e.remove()},remove:function(){i(this),this._super()}});return u.hideAll=function(){for(var e=s.length;e--;){var t=s[e];t.settings.autohide&&(t.fire("cancel",{},!1),t.hide(),s.splice(e,1))}},u}),r(J,[z],function(e){return function(t){function n(){if(!h)if(h=[],d.find)d.find("*").each(function(e){e.canFocus&&h.push(e.getEl())});else for(var e=d.getEl().getElementsByTagName("*"),t=0;ti?i=l.length-1:i>=l.length&&(i=0),o=l[i],o.focus(),m=o.id,t.actOnFocus&&s()}function u(){var e,r;for(r=i(t.root.getEl()),n(),e=h.length;e--;)if("toolbar"==r&&h[e].id===m)return h[e].focus(),void 0;h[0].focus()}var d=t.root,f=t.enableUpDown!==!1,p=t.enableLeftRight!==!1,h=t.items,m;return d.on("keydown",function(e){var n=37,r=39,u=38,d=40,h=27,m=14,g=13,v=32,y=9,b;switch(e.keyCode){case n:p&&(t.leftAction?t.leftAction():c(-1),b=!0);break;case r:p&&("menuitem"==i()&&"menu"==o()?a("haspopup")&&s():c(1),b=!0);break;case u:f&&(c(-1),b=!0);break;case d:f&&("menuitem"==i()&&"menubar"==o()?s():"button"==i()&&a("haspopup")?s():c(1),b=!0);break;case y:b=!0,e.shiftKey?c(-1):c(1);break;case h:b=!0,l();break;case m:case g:case v:b=s()}b&&(e.stopPropagation(),e.preventDefault())}),d.on("focusin",function(e){n(),m=e.target.id}),{moveFocus:c,focusFirst:u,cancel:l}}}),r(Q,[X,K,z,J,$],function(e,t,n,r,i){var o=e.extend({modal:!0,Defaults:{border:1,layout:"flex",containerCls:"panel",role:"dialog",callbacks:{submit:function(){this.fire("submit",{data:this.toJSON()})},close:function(){this.close()}}},init:function(e){var n=this;n._super(e),n.addClass("window"),n._fixed=!0,e.buttons&&(n.statusbar=new t({layout:"flex",border:"1 0 0 0",spacing:3,padding:10,align:"center",pack:"end",defaults:{type:"button"},items:e.buttons}),n.statusbar.addClass("foot"),n.statusbar.parent(n)),n.on("click",function(e){-1!=e.target.className.indexOf(n.classPrefix+"close")&&n.close()}),n.aria("label",e.title),n._fullscreen=!1},recalc:function(){var e=this,t=e.statusbar,r,i,o;e._fullscreen&&(e.layoutRect(n.getWindowSize()),e.layoutRect().contentH=e.layoutRect().innerH),e._super(),r=e.layoutRect(),e.settings.title&&!e._fullscreen&&(i=r.headerW,i>r.w&&(e.layoutRect({w:i}),o=!0)),t&&(t.layoutRect({w:e.layoutRect().innerW}).recalc(),i=t.layoutRect().minW+r.deltaW,i>r.w&&(e.layoutRect({w:i}),o=!0)),o&&e.recalc()},initLayoutRect:function(){var e=this,t=e._super(),r=0,i;e.settings.title&&!e._fullscreen&&(i=e.getEl("head"),t.headerW=i.offsetWidth,t.headerH=i.offsetHeight,r+=t.headerH),e.statusbar&&(r+=e.statusbar.layoutRect().h),t.deltaH+=r,t.minH+=r,t.h+=r;var o=n.getWindowSize();return t.x=Math.max(0,o.w/2-t.w/2),t.y=Math.max(0,o.h/2-t.h/2),t},renderHtml:function(){var e=this,t=e._layout,n=e._id,r=e.classPrefix,i=e.settings,o="",a="",s=i.html;return e.preRender(),t.preRender(e),i.title&&(o='
'+'
'+e.encode(i.title)+"
"+''+'
'+"
"),i.url&&(s=''),"undefined"==typeof s&&(s=t.renderHtml(e)),e.statusbar&&(a=e.statusbar.renderHtml()),'
'+o+'
'+s+"
"+a+"
"},fullscreen:function(e){var t=this,r=document.documentElement,i,o=t.classPrefix,a;if(e!=t._fullscreen)if(n.on(window,"resize",function(){var e;if(t._fullscreen)if(i)t._timer||(t._timer=setTimeout(function(){var e=n.getWindowSize();t.moveTo(0,0).resizeTo(e.w,e.h),t._timer=0},50));else{e=(new Date).getTime();var r=n.getWindowSize();t.moveTo(0,0).resizeTo(r.w,r.h),(new Date).getTime()-e>50&&(i=!0)}}),a=t.layoutRect(),t._fullscreen=e,e){t._initial={x:a.x,y:a.y,w:a.w,h:a.h},t._borderBox=t.parseBox("0"),t.getEl("head").style.display="none",a.deltaH-=a.headerH+2,n.addClass(r,o+"fullscreen"),n.addClass(document.body,o+"fullscreen"),t.addClass("fullscreen");var s=n.getWindowSize();t.moveTo(0,0).resizeTo(s.w,s.h)}else t._borderBox=t.parseBox(t.settings.border),t.getEl("head").style.display="",a.deltaH+=a.headerH,n.removeClass(r,o+"fullscreen"),n.removeClass(document.body,o+"fullscreen"),t.removeClass("fullscreen"),t.moveTo(t._initial.x,t._initial.y).resizeTo(t._initial.w,t._initial.h);return t.reflow()},postRender:function(){var e=this,t=[],n,o,a;setTimeout(function(){e.addClass("in")},0),e.keyboardNavigation=new r({root:e,enableLeftRight:!1,enableUpDown:!1,items:t,onCancel:function(){e.close()}}),e.find("*").each(function(e){e.canFocus&&(o=o||e.settings.autofocus,n=n||e,"filepicker"==e.type?(t.push(e.getEl("inp")),e.getEl("open")&&t.push(e.getEl("open").firstChild)):t.push(e.getEl()))}),e.statusbar&&e.statusbar.find("*").each(function(e){e.canFocus&&(o=o||e.settings.autofocus,n=n||e,t.push(e.getEl()))}),e._super(),e.statusbar&&e.statusbar.postRender(),!o&&n&&n.focus(),this.dragHelper=new i(e._id+"-dragh",{start:function(){a={x:e.layoutRect().x,y:e.layoutRect().y}},drag:function(t){e.moveTo(a.x+t.deltaX,a.y+t.deltaY)}}),e.on("submit",function(t){t.isDefaultPrevented()||e.close()})},submit:function(){var e=this.getParentCtrl(document.activeElement);return e&&e.blur(),this.fire("submit",{data:this.toJSON()})},remove:function(){var e=this;e._super(),e.dragHelper.destroy(),e.statusbar&&this.statusbar.remove()}});return o}),r(Z,[Q],function(e){var t=e.extend({init:function(e){e={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(e)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(n){var r,i=n.callback||function(){};switch(n.buttons){case t.OK_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}},{type:"button",text:"Cancel",onClick:function(e){e.control.parents()[1].close(),i(!1)}}];break;case t.YES_NO:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close(),i(!0)}}];break;case t.YES_NO_CANCEL:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close()}}];break;default:r=[{type:"button",text:"Ok",subtype:"primary",onClick:function(e){e.control.parents()[1].close()}}]}return new e({padding:20,x:n.x,y:n.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:r,title:n.title,items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:n.text},onClose:n.onClose}).renderTo(document.body).reflow()},alert:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,t.msgBox(e)},confirm:function(e,n){return"string"==typeof e&&(e={text:e}),e.callback=n,e.buttons=t.OK_CANCEL,t.msgBox(e)}}});return t}),r(et,[Q,Z],function(e,t){return function(n){var r=this,i=[];r.windows=i,r.open=function(t,r){var o;return t.url=t.url||t.file,t.url&&(t.width=parseInt(t.width||320,10),t.height=parseInt(t.height||240,10)),t.body&&(t.items={defaults:t.defaults,type:t.bodyType||"form",items:t.body}),t.url||t.buttons||(t.buttons=[{text:"Ok",subtype:"primary",onclick:function(){o.find("form")[0].submit(),o.close()}},{text:"Cancel",onclick:function(){o.close()}}]),o=new e(t),i.push(o),o.on("close",function(){for(var e=i.length;e--;)i[e]===o&&i.splice(e,1);n.focus()}),t.data&&o.on("postRender",function(){this.find("*").each(function(e){var n=e.name();n in t.data&&e.value(t.data[n])})}),o.params=r||{},n.nodeChanged(),o.renderTo(document.body).reflow()},r.alert=function(e,n,r){t.alert(e,function(){n.call(r||this)})},r.confirm=function(e,n,r){t.confirm(e,function(e){n.call(r||this,e)})},r.close=function(){i.length&&i[i.length-1].close()},r.getParams=function(){return i.length?i[i.length-1].params:null},r.setParams=function(e){i.length&&(i[i.length-1].params=e)}}}),r(tt,[T,B,C,m,g,p],function(e,t,n,r,i,o){return function(a){function s(e,t){try{a.getDoc().execCommand(e,!1,t)}catch(n){}}function l(){var e=a.getDoc().documentMode;return e?e:6}function c(e){return e.isDefaultPrevented()}function u(){function t(e){function t(){if(3==l.nodeType){if(e&&c==l.length)return!0;if(!e&&0===c)return!0}}var n,r,i,s,l,c,u;n=F.getRng();var d=[n.startContainer,n.startOffset,n.endContainer,n.endOffset];if(n.collapsed||(e=!0),l=n[(e?"start":"end")+"Container"],c=n[(e?"start":"end")+"Offset"],3==l.nodeType&&(r=I.getParent(n.startContainer,I.isBlock),e&&(r=I.getNext(r,I.isBlock)),!r||!t()&&n.collapsed||(i=I.create("em",{id:"__mceDel"}),H(o.grep(r.childNodes),function(e){i.appendChild(e)}),r.appendChild(i))),n=I.createRng(),n.setStart(d[0],d[1]),n.setEnd(d[2],d[3]),F.setRng(n),a.getDoc().execCommand(e?"ForwardDelete":"Delete",!1,null),i){for(s=F.getBookmark();u=I.get("__mceDel");)I.remove(u,!0); +F.moveToBookmark(s)}}a.on("keydown",function(n){var r;r=n.keyCode==O,c(n)||!r&&n.keyCode!=P||e.modifierPressed(n)||(n.preventDefault(),t(r))}),a.addCommand("Delete",function(){t()})}function d(){function e(e){var t=I.create("body"),n=e.cloneContents();return t.appendChild(n),F.serializer.serialize(t,{format:"html"})}function t(t){var n=e(t),r=I.createRng();r.selectNode(a.getBody());var i=e(r);return n===i}a.on("keydown",function(e){var n=e.keyCode,r;if(!c(e)&&(n==O||n==P)){if(r=a.selection.isCollapsed(),r&&!I.isEmpty(a.getBody()))return;if(q&&!r)return;if(!r&&!t(a.selection.getRng()))return;e.preventDefault(),a.setContent(""),a.selection.setCursorLocation(a.getBody(),0),a.nodeChanged()}})}function f(){a.on("keydown",function(t){!c(t)&&65==t.keyCode&&e.metaKeyPressed(t)&&(t.preventDefault(),a.execCommand("SelectAll"))})}function p(){a.settings.content_editable||(I.bind(a.getDoc(),"focusin",function(){F.setRng(F.getRng())}),I.bind(a.getDoc(),"mousedown",function(e){e.target==a.getDoc().documentElement&&(a.getWin().focus(),F.setRng(F.getRng()))}))}function h(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===P&&F.isCollapsed()&&0===F.getRng(!0).startOffset){var t=F.getNode(),n=t.previousSibling;n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(I.remove(n),e.preventDefault())}})}function m(){window.Range.prototype.getClientRects||a.on("mousedown",function(e){if(!c(e)&&"HTML"===e.target.nodeName){var t=a.getBody();t.blur(),setTimeout(function(){t.focus()},0)}})}function g(){a.on("click",function(e){e=e.target,/^(IMG|HR)$/.test(e.nodeName)&&F.getSel().setBaseAndExtent(e,0,e,1),"A"==e.nodeName&&I.hasClass(e,"mce-item-anchor")&&F.select(e),a.nodeChanged()})}function v(){function e(){var e=I.getAttribs(F.getStart().cloneNode(!1));return function(){var t=F.getStart();t!==a.getBody()&&(I.setAttrib(t,"style",null),H(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}}function t(){return!F.isCollapsed()&&I.getParent(F.getStart(),I.isBlock)!=I.getParent(F.getEnd(),I.isBlock)}a.on("keypress",function(n){var r;return c(n)||8!=n.keyCode&&46!=n.keyCode||!t()?void 0:(r=e(),a.getDoc().execCommand("delete",!1,null),r(),n.preventDefault(),!1)}),I.bind(a.getDoc(),"cut",function(n){var r;!c(n)&&t()&&(r=e(),setTimeout(function(){r()},0))})}function y(){var e,n;a.on("selectionchange",function(){n&&(clearTimeout(n),n=0),n=window.setTimeout(function(){var n=F.getRng();e&&t.compareRanges(n,e)||(a.nodeChanged(),e=n)},50)})}function b(){document.body.setAttribute("role","application")}function C(){a.on("keydown",function(e){if(!c(e)&&e.keyCode===P&&F.isCollapsed()&&0===F.getRng(!0).startOffset){var t=F.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})}function x(){l()>7||(s("RespectVisibilityInDesign",!0),a.contentStyles.push(".mceHideBrInPre pre br {display: none}"),I.addClass(a.getBody(),"mceHideBrInPre"),z.addNodeFilter("pre",function(e){for(var t=e.length,r,i,o,a;t--;)for(r=e[t].getAll("br"),i=r.length;i--;)o=r[i],a=o.prev,a&&3===a.type&&"\n"!=a.value.charAt(a.value-1)?a.value+="\n":o.parent.insert(new n("#text",3),o,!0).value="\n"}),V.addNodeFilter("pre",function(e){for(var t=e.length,n,r,i,o;t--;)for(n=e[t].getAll("br"),r=n.length;r--;)i=n[r],o=i.prev,o&&3==o.type&&(o.value=o.value.replace(/\r?\n$/,""))}))}function w(){I.bind(a.getBody(),"mouseup",function(){var e,t=F.getNode();"IMG"==t.nodeName&&((e=I.getStyle(t,"width"))&&(I.setAttrib(t,"width",e.replace(/[^0-9%]+/g,"")),I.setStyle(t,"width","")),(e=I.getStyle(t,"height"))&&(I.setAttrib(t,"height",e.replace(/[^0-9%]+/g,"")),I.setStyle(t,"height","")))})}function _(){a.on("keydown",function(t){var n,r,i,o,s,l,u,d;if(n=t.keyCode==O,!c(t)&&(n||t.keyCode==P)&&!e.modifierPressed(t)&&(r=F.getRng(),i=r.startContainer,o=r.startOffset,u=r.collapsed,3==i.nodeType&&i.nodeValue.length>0&&(0===o&&!u||u&&o===(n?0:1)))){if(l=i.previousSibling,l&&"IMG"==l.nodeName)return;d=a.schema.getNonEmptyElements(),t.preventDefault(),s=I.create("br",{id:"__tmp"}),i.parentNode.insertBefore(s,i),a.getDoc().execCommand(n?"ForwardDelete":"Delete",!1,null),i=F.getRng().startContainer,l=i.previousSibling,l&&1==l.nodeType&&!I.isBlock(l)&&I.isEmpty(l)&&!d[l.nodeName.toLowerCase()]&&I.remove(l),I.remove("__tmp")}})}function N(){a.on("keydown",function(t){var n,r,i,o,s;if(!c(t)&&t.keyCode==e.BACKSPACE&&(n=F.getRng(),r=n.startContainer,i=n.startOffset,o=I.getRoot(),s=r,n.collapsed&&0===i)){for(;s&&s.parentNode&&s.parentNode.firstChild==s&&s.parentNode!=o;)s=s.parentNode;"BLOCKQUOTE"===s.tagName&&(a.formatter.toggle("blockquote",null,s),n=I.createRng(),n.setStart(r,0),n.setEnd(r,0),F.setRng(n))}})}function E(){function e(){a._refreshContentEditable(),s("StyleWithCSS",!1),s("enableInlineTableEditing",!1),W.object_resizing||s("enableObjectResizing",!1)}W.readonly||a.on("BeforeExecCommand MouseDown",e)}function S(){function e(){H(I.select("a"),function(e){var t=e.parentNode,n=I.getRoot();if(t.lastChild===e){for(;t&&!I.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}I.add(t,"br",{"data-mce-bogus":1})}})}a.on("SetContent ExecCommand",function(t){("setcontent"==t.type||"mceInsertLink"===t.command)&&e()})}function k(){W.forced_root_block&&a.on("init",function(){s("DefaultParagraphSeparator",W.forced_root_block)})}function T(){a.on("Undo Redo SetContent",function(e){e.initial||a.execCommand("mceRepaint")})}function R(){a.on("keydown",function(e){var t;c(e)||e.keyCode!=P||(t=a.getDoc().selection.createRange(),t&&t.item&&(e.preventDefault(),a.undoManager.beforeChange(),I.remove(t.item(0)),a.undoManager.add()))})}function A(){var e;l()>=10&&(e="",H("p div h1 h2 h3 h4 h5 h6".split(" "),function(t,n){e+=(n>0?",":"")+t+":empty"}),a.contentStyles.push(e+"{padding-right: 1px !important}"))}function B(){l()<9&&(z.addNodeFilter("noscript",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.firstChild,r&&n.attr("data-mce-innertext",r.value)}),V.addNodeFilter("noscript",function(e){for(var t=e.length,i,o,a;t--;)i=e[t],o=e[t].firstChild,o?o.value=r.decode(o.value):(a=i.attributes.map["data-mce-innertext"],a&&(i.attr("data-mce-innertext",null),o=new n("#text",3),o.value=a,o.raw=!0,i.append(o)))}))}function L(){function e(e,t){var n=i.createTextRange();try{n.moveToPoint(e,t)}catch(r){n=null}return n}function t(t){var r;t.button?(r=e(t.x,t.y),r&&(r.compareEndPoints("StartToStart",a)>0?r.setEndPoint("StartToStart",a):r.setEndPoint("EndToEnd",a),r.select())):n()}function n(){var e=r.selection.createRange();a&&!e.item&&0===e.compareEndPoints("StartToEnd",e)&&a.select(),I.unbind(r,"mouseup",n),I.unbind(r,"mousemove",t),a=o=0}var r=I.doc,i=r.body,o,a,s;r.documentElement.unselectable=!0,I.bind(r,"mousedown contextmenu",function(i){if("HTML"===i.target.nodeName){if(o&&n(),s=r.documentElement,s.scrollHeight>s.clientHeight)return;o=1,a=e(i.x,i.y),a&&(I.bind(r,"mouseup",n),I.bind(r,"mousemove",t),I.win.focus(),a.select())}})}function M(){a.on("keyup focusin",function(t){65==t.keyCode&&e.metaKeyPressed(t)||F.normalize()})}function D(){a.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}var H=o.each,P=e.BACKSPACE,O=e.DELETE,I=a.dom,F=a.selection,W=a.settings,z=a.parser,V=a.serializer,U=i.gecko,q=i.ie,$=i.webkit;C(),N(),d(),M(),$&&(_(),u(),p(),g(),k(),i.iOS?y():f()),q&&(h(),b(),x(),w(),R(),A(),B(),L()),U&&(h(),m(),v(),E(),S(),T(),D())}}),r(nt,[p],function(e){function t(){return!1}function n(){return!0}var r="__bindings",i=e.makeMap("focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave keydown keypress keyup contextmenu dragend dragover draggesture dragdrop drop drag"," ");return{fire:function(e,i,o){var a=this,s,l,c,u,d;if(e=e.toLowerCase(),i=i||{},i.type=e,i.target||(i.target=a),i.preventDefault||(i.preventDefault=function(){i.isDefaultPrevented=n},i.stopPropagation=function(){i.isPropagationStopped=n},i.stopImmediatePropagation=function(){i.isImmediatePropagationStopped=n},i.isDefaultPrevented=t,i.isPropagationStopped=t,i.isImmediatePropagationStopped=t),a[r]&&(s=a[r][e]))for(l=0,c=s.length;c>l&&(s[l]=u=s[l],!i.isImmediatePropagationStopped());l++)if(u.call(a,i)===!1)return i.preventDefault(),i;if(o!==!1&&a.parent)for(d=a.parent();d&&!i.isPropagationStopped();)d.fire(e,i,!1),d=d.parent();return i},on:function(e,t){var n=this,o,a,s,l;if(t===!1&&(t=function(){return!1}),t)for(s=e.toLowerCase().split(" "),l=s.length;l--;)e=s[l],o=n[r],o||(o=n[r]={}),a=o[e],a||(a=o[e]=[],n.bindNative&&i[e]&&n.bindNative(e)),a.push(t);return n},off:function(e,t){var n=this,o,a=n[r],s,l,c,u;if(a)if(e)for(c=e.toLowerCase().split(" "),o=c.length;o--;){if(e=c[o],s=a[e],!e){for(l in a)a[e].length=0;return n}if(s){if(t)for(u=s.length;u--;)s[u]===t&&s.splice(u,1);else s.length=0;!s.length&&n.unbindNative&&i[e]&&(n.unbindNative(e),delete a[e])}}else{if(n.unbindNative)for(e in a)n.unbindNative(e);n[r]=[]}return n}}}),r(rt,[p,g],function(e,t){var n=e.each,r=e.explode,i={f9:120,f10:121,f11:122};return function(o){var a=this,s={};o.on("keyup keypress keydown",function(e){(e.altKey||e.ctrlKey||e.metaKey)&&n(s,function(n){var r=t.mac?e.ctrlKey||e.metaKey:e.ctrlKey;if(n.ctrl==r&&n.alt==e.altKey&&n.shift==e.shiftKey)return e.keyCode==n.keyCode||e.charCode&&e.charCode==n.charCode?(e.preventDefault(),"keydown"==e.type&&n.func.call(n.scope),!0):void 0})}),a.add=function(t,a,l,c){var u;return u=l,"string"==typeof l?l=function(){o.execCommand(u,!1,null)}:e.isArray(u)&&(l=function(){o.execCommand(u[0],u[1],u[2])}),n(r(t.toLowerCase()),function(e){var t={func:l,scope:c||o,desc:o.translate(a),alt:!1,ctrl:!1,shift:!1};n(r(e,"+"),function(e){switch(e){case"alt":case"ctrl":case"shift":t[e]=!0;break;default:t.charCode=e.charCodeAt(0),t.keyCode=i[e]||e.toUpperCase().charCodeAt(0)}}),s[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t}),!0}}}),r(it,[v,b,C,S,E,A,L,M,D,H,P,O,y,l,et,x,_,tt,g,p,nt,rt],function(e,n,r,i,o,a,s,l,c,u,d,f,p,h,m,g,v,y,b,C,x,w){function _(e,t){return"selectionchange"==t||"drop"==t?e.getDoc():!e.inline&&/^mouse|click|contextmenu/.test(t)?e.getDoc():e.getBody()}function N(e,t,r){var i=this,o,a;o=i.documentBaseUrl=r.documentBaseURL,a=r.baseURI,i.settings=t=T({id:e,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:o,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:!0,entity_encoding:"named",url_converter:i.convertURL,url_converter_scope:i,ie7_compat:!0},t),n.settings=t,n.baseURL=r.baseURL,i.id=t.id=e,i.isNotDirty=!0,i.plugins={},i.documentBaseURI=new f(t.document_base_url||o,{base_uri:a}),i.baseURI=a,i.contentCSS=[],i.contentStyles=[],i.shortcuts=new w(i),i.execCommands={},i.queryStateCommands={},i.queryValueCommands={},i.loadedCSS={},i.suffix=r.suffix,i.editorManager=r,i.inline=t.inline,i.execCallback("setup",i)}var E=e.DOM,S=n.ThemeManager,k=n.PluginManager,T=C.extend,R=C.each,A=C.explode,B=C.inArray,L=C.trim,M=C.resolve,D=h.Event,H=b.gecko,P=b.ie,O=b.opera;return N.prototype={render:function(){function e(){var e=p.ScriptLoader;n.language&&"en"!=n.language&&(n.language_url=t.editorManager.baseURL+"/langs/"+n.language+".js"),n.language_url&&e.add(n.language_url),n.theme&&"function"!=typeof n.theme&&"-"!=n.theme.charAt(0)&&!S.urls[n.theme]&&S.load(n.theme,"themes/"+n.theme+"/theme"+i+".js"),C.isArray(n.plugins)&&(n.plugins=n.plugins.join(" ")),R(n.external_plugins,function(e,t){k.load(t,e),n.plugins+=" "+t}),R(n.plugins.split(/[ ,]/),function(e){if(e=L(e),e&&!k.urls[e])if("-"==e.charAt(0)){e=e.substr(1,e.length);var t=k.dependencies(e);R(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+i+".js"};e=k.createUrl(t,e),k.load(e.resource,e)})}else k.load(e,{prefix:"plugins/",resource:e,suffix:"/plugin"+i+".js"})}),e.loadQueue(function(){t.removed||t.init()})}var t=this,n=t.settings,r=t.id,i=t.suffix;if(!D.domLoaded)return E.bind(window,"ready",function(){t.render()}),void 0;if(t.editorManager.settings=n,t.getElement()&&b.contentEditable){n.inline?t.inline=!0:(t.orgVisibility=t.getElement().style.visibility,t.getElement().style.visibility="hidden");var o=t.getElement().form||E.getParent(r,"form");o&&(t.formElement=o,n.hidden_input&&!/TEXTAREA|INPUT/i.test(t.getElement().nodeName)&&E.insertAfter(E.create("input",{type:"hidden",name:r}),r),t.formEventDelegate=function(e){t.fire(e.type,e)},E.bind(o,"submit reset",t.formEventDelegate),t.on("reset",function(){t.setContent(t.startContent,{format:"raw"})}),!n.submit_patch||o.submit.nodeType||o.submit.length||o._mceOldSubmit||(o._mceOldSubmit=o.submit,o.submit=function(){return t.editorManager.triggerSave(),t.isNotDirty=!0,o._mceOldSubmit(o)})),t.windowManager=new m(t),"xml"==n.encoding&&t.on("GetContent",function(e){e.save&&(e.content=E.encode(e.content))}),n.add_form_submit_trigger&&t.on("submit",function(){t.initialized&&(t.save(),t.isNotDirty=!0)}),n.add_unload_trigger&&(t._beforeUnload=function(){!t.initialized||t.destroyed||t.isHidden()||t.save({format:"raw",no_events:!0})},t.editorManager.on("BeforeUnload",t._beforeUnload)),e()}},init:function(){function e(n){var r=k.get(n),i,o;i=k.urls[n]||t.documentBaseUrl.replace(/\/$/,""),n=L(n),r&&-1===B(h,n)&&(R(k.dependencies(n),function(t){e(t)}),o=new r(t,i),t.plugins[n]=o,o.init&&(o.init(t,i),h.push(n)))}var t=this,n=t.settings,r=t.getElement(),i,o,a,s,l,c,u,d,f,p,h=[];if(t.editorManager.add(t),n.aria_label=n.aria_label||E.getAttrib(r,"aria-label",t.getLang("aria.rich_text_area")),n.theme&&("function"!=typeof n.theme?(n.theme=n.theme.replace(/-/,""),l=S.get(n.theme),t.theme=new l(t,S.urls[n.theme]),t.theme.init&&t.theme.init(t,S.urls[n.theme]||t.documentBaseUrl.replace(/\/$/,""))):t.theme=n.theme),R(n.plugins.replace(/\-/g,"").split(/[ ,]/),e),t.fire("BeforeRenderUI"),n.render_ui&&t.theme&&(t.orgDisplay=r.style.display,"function"!=typeof n.theme?(i=n.width||r.style.width||r.offsetWidth,o=n.height||r.style.height||r.offsetHeight,a=n.min_height||100,f=/^[0-9\.]+(|px)$/i,f.test(""+i)&&(i=Math.max(parseInt(i,10)+(l.deltaWidth||0),100)),f.test(""+o)&&(o=Math.max(parseInt(o,10)+(l.deltaHeight||0),a)),l=t.theme.renderUI({targetNode:r,width:i,height:o,deltaWidth:n.delta_width,deltaHeight:n.delta_height}),n.content_editable||(E.setStyles(l.sizeContainer||l.editorContainer,{wi2dth:i,h2eight:o}),o=(l.iframeHeight||o)+("number"==typeof o?l.deltaHeight||0:""),a>o&&(o=a))):(l=n.theme(t,r),l.editorContainer.nodeType&&(l.editorContainer=l.editorContainer.id=l.editorContainer.id||t.id+"_parent"),l.iframeContainer.nodeType&&(l.iframeContainer=l.iframeContainer.id=l.iframeContainer.id||t.id+"_iframecontainer"),o=l.iframeHeight||r.offsetHeight),t.editorContainer=l.editorContainer),n.content_css&&R(A(n.content_css),function(e){t.contentCSS.push(t.documentBaseURI.toAbsolute(e))}),n.content_style&&t.contentStyles.push(n.content_style),n.content_editable)return r=s=l=null,t.initContentBody();for(document.domain&&location.hostname!=document.domain&&(t.editorManager.relaxedDomain=document.domain),t.iframeHTML=n.doctype+"",n.document_base_url!=t.documentBaseUrl&&(t.iframeHTML+=''),!b.caretAfter&&n.ie7_compat&&(t.iframeHTML+=''),t.iframeHTML+='',p=0;p',t.loadedCSS[m]=!0}u=n.body_id||"tinymce",-1!=u.indexOf("=")&&(u=t.getParam("body_id","","hash"),u=u[t.id]||u),d=n.body_class||"",-1!=d.indexOf("=")&&(d=t.getParam("body_class","","hash"),d=d[t.id]||""),t.iframeHTML+='
",t.editorManager.relaxedDomain&&(P||O&&parseFloat(window.opera.version())<11)&&(c='javascript:(function(){document.open();document.domain="'+document.domain+'";'+'var ed = window.parent.tinymce.get("'+t.id+'");document.write(ed.iframeHTML);'+"document.close();ed.initContentBody();})()"),s=E.add(l.iframeContainer,"iframe",{id:t.id+"_ifr",src:c||'javascript:""',frameBorder:"0",allowTransparency:"true",title:t.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),style:{width:"100%",height:o,display:"block"}}),t.contentAreaContainer=l.iframeContainer,l.editorContainer&&(E.get(l.editorContainer).style.display=t.orgDisplay),E.get(t.id).style.display="none",E.setAttrib(t.id,"aria-hidden",!0),t.editorManager.relaxedDomain&&c||t.initContentBody(),r=s=l=null},initContentBody:function(){var t=this,n=t.settings,o=E.get(t.id),f=t.getDoc(),p,h;n.inline||(t.getElement().style.visibility=t.orgVisibility),P&&t.editorManager.relaxedDomain||n.content_editable||(f.open(),f.write(t.iframeHTML),f.close(),t.editorManager.relaxedDomain&&(f.domain=t.editorManager.relaxedDomain)),n.content_editable&&(t.on("remove",function(){var e=this.getBody();E.removeClass(e,"mce-content-body"),E.removeClass(e,"mce-edit-focus"),E.setAttrib(e,"tabIndex",null),E.setAttrib(e,"contentEditable",null)}),E.addClass(o,"mce-content-body"),o.tabIndex=-1,t.contentDocument=f=n.content_document||document,t.contentWindow=n.content_window||window,t.bodyElement=o,n.content_document=n.content_window=null,n.root_name=o.nodeName.toLowerCase()),p=t.getBody(),p.disabled=!0,n.readonly||(p.contentEditable=t.getParam("content_editable_state",!0)),p.disabled=!1,t.schema=new g(n),t.dom=new e(f,{keep_values:!0,url_converter:t.convertURL,url_converter_scope:t,hex_colors:n.force_hex_style_colors,class_filter:n.class_filter,update_styles:!0,root_element:n.content_editable?t.id:null,schema:t.schema,onSetAttrib:function(e){t.fire("SetAttrib",e)}}),t.parser=new v(n,t.schema),t.parser.addAttributeFilter("src,href,style",function(e,n){for(var r=e.length,i,o=t.dom,a,s;r--;)i=e[r],a=i.attr(n),s="data-mce-"+n,i.attributes.map[s]||("style"===n?i.attr(s,o.serializeStyle(o.parseStyle(a),i.name)):i.attr(s,t.convertURL(a,n,i.name)))}),t.parser.addNodeFilter("script",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("type","mce-"+(n.attr("type")||"text/javascript"))}),t.parser.addNodeFilter("#cdata",function(e){for(var t=e.length,n;t--;)n=e[t],n.type=8,n.name="#comment",n.value="[CDATA["+n.value+"]]"}),t.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var n=e.length,i,o=t.schema.getNonEmptyElements();n--;)i=e[n],i.isEmpty(o)&&(i.empty().append(new r("br",1)).shortEnded=!0)}),t.serializer=new i(n,t),t.selection=new a(t.dom,t.getWin(),t.serializer,t),t.formatter=new s(t),t.undoManager=new l(t),t.forceBlocks=new u(t),t.enterKey=new c(t),t.editorCommands=new d(t),t.fire("PreInit"),n.browser_spellcheck||n.gecko_spellcheck||(f.body.spellcheck=!1,E.setAttrib(p,"spellcheck","false")),t.fire("PostRender"),t.quirks=y(t),n.directionality&&(p.dir=n.directionality),n.nowrap&&(p.style.whiteSpace="nowrap"),n.protect&&t.on("BeforeSetContent",function(e){R(n.protect,function(t){e.content=e.content.replace(t,function(e){return""})})}),t.on("SetContent",function(){t.addVisual(t.getBody())}),n.padd_empty_editor&&t.on("PostProcess",function(e){e.content=e.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
[\r\n]*)$/,"")}),t.load({initial:!0,format:"html"}),t.startContent=t.getContent({format:"raw"}),t.initialized=!0,R(t._pendingNativeEvents,function(e){t.dom.bind(_(t,e),e,function(e){t.fire(e.type,e)})}),t.fire("init"),t.focus(!0),t.nodeChanged({initial:!0}),t.execCallback("init_instance_callback",t),t.contentStyles.length>0&&(h="",R(t.contentStyles,function(e){h+=e+"\r\n"}),t.dom.addStyle(h)),R(t.contentCSS,function(e){t.loadedCSS[e]||(t.dom.loadCSS(e),t.loadedCSS[e]=!0)}),n.auto_focus&&setTimeout(function(){var e=t.editorManager.get(n.auto_focus);e.selection.select(e.getBody(),1),e.selection.collapse(1),e.getBody().focus(),e.getWin().focus()},100),o=f=p=null},focus:function(e){var t,n=this,r=n.selection,i=n.settings.content_editable,o,a,s=n.getDoc(),l;e||(o=r.getRng(),o.item&&(a=o.item(0)),n._refreshContentEditable(),i||(b.opera||n.getBody().focus(),n.getWin().focus()),(H||i)&&(l=n.getBody(),l.setActive?l.setActive():l.focus(),i&&r.normalize()),a&&a.ownerDocument==s&&(o=s.body.createControlRange(),o.addElement(a),o.select())),n.editorManager.activeEditor!=n&&((t=n.editorManager.activeEditor)&&t.fire("deactivate",{relatedTarget:n}),n.fire("activate",{relatedTarget:t})),n.editorManager.activeEditor=n},execCallback:function(e){var t=this,n=t.settings[e],r;if(n)return t.callbackLookup&&(r=t.callbackLookup[e])&&(n=r.func,r=r.scope),"string"==typeof n&&(r=n.replace(/\.\w+$/,""),r=r?M(r):0,n=M(n),t.callbackLookup=t.callbackLookup||{},t.callbackLookup[e]={func:n,scope:r}),n.apply(r||t,Array.prototype.slice.call(arguments,1))},translate:function(e){var t=this.settings.language||"en",n=this.editorManager.i18n;return e?n[t+"."+e]||e.replace(/\{\#([^\}]+)\}/g,function(e,r){return n[t+"."+r]||"{#"+r+"}"}):""},getLang:function(e,n){return this.editorManager.i18n[(this.settings.language||"en")+"."+e]||(n!==t?n:"{#"+e+"}")},getParam:function(e,t,n){var r=e in this.settings?this.settings[e]:t,i;return"hash"===n?(i={},"string"==typeof r?R(r.indexOf("=")>0?r.split(/[;,](?![^=;,]*(?:[;,]|$))/):r.split(","),function(e){e=e.split("="),i[L(e[0])]=e.length>1?L(e[1]):L(e)}):i=r,i):r},nodeChanged:function(){var e=this,t=e.selection,n,r,i;e.initialized&&!e.settings.disable_nodechange&&(i=e.getBody(),n=t.getStart()||i,n=P&&n.ownerDocument!=e.getDoc()?e.getBody():n,"IMG"==n.nodeName&&t.isCollapsed()&&(n=n.parentNode),r=[],e.dom.getParent(n,function(e){return e===i?!0:(r.push(e),void 0)}),e.fire("NodeChange",{element:n,parents:r}))},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.text||t.icon||(t.icon=e),n.buttons=n.buttons||{},t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems||{},n.menuItems[e]=t},addCommand:function(e,t,n){this.execCommands[e]={func:t,scope:n||this}},addQueryStateHandler:function(e,t,n){this.queryStateCommands[e]={func:t,scope:n||this}},addQueryValueHandler:function(e,t,n){this.queryValueCommands[e]={func:t,scope:n||this}},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){var i=this,o=0,a;return/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(e)||r&&r.skip_focus||i.focus(),r=T({},r),r=i.fire("BeforeExecCommand",{command:e,ui:t,value:n}),r.isDefaultPrevented()?!1:(a=i.execCommands[e])&&a.func.call(a.scope,t,n)!==!0?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(R(i.plugins,function(r){return r.execCommand&&r.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),o=!0,!1):void 0}),o?o:i.theme&&i.theme.execCommand&&i.theme.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):i.editorCommands.execCommand(e,t,n)?(i.fire("ExecCommand",{command:e,ui:t,value:n}),!0):(i.getDoc().execCommand(e,t,n),i.fire("ExecCommand",{command:e,ui:t,value:n}),void 0))},queryCommandState:function(e){var t=this,n,r;if(!t._isHidden()){if((n=t.queryStateCommands[e])&&(r=n.func.call(n.scope),r!==!0))return r;if(r=t.editorCommands.queryCommandState(e),-1!==r)return r;try{return t.getDoc().queryCommandState(e)}catch(i){}}},queryCommandValue:function(e){var n=this,r,i;if(!n._isHidden()){if((r=n.queryValueCommands[e])&&(i=r.func.call(r.scope),i!==!0))return i;if(i=n.editorCommands.queryCommandValue(e),i!==t)return i;try{return n.getDoc().queryCommandValue(e)}catch(o){}}},show:function(){var e=this;E.show(e.getContainer()),E.hide(e.id),e.load(),e.fire("show")},hide:function(){var e=this,t=e.getDoc();P&&t&&t.execCommand("SelectAll"),e.save(),E.hide(e.getContainer()),E.setStyle(e.id,"display",e.orgDisplay),e.fire("hide")},isHidden:function(){return!E.isHidden(this.id)},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var n=this,r=n.getElement(),i;return r?(e=e||{},e.load=!0,i=n.setContent(r.value!==t?r.value:r.innerHTML,e),e.element=r,e.no_events||n.fire("LoadContent",e),e.element=r=null,i):void 0},save:function(e){var t=this,n=t.getElement(),r,i;if(n&&t.initialized)return e=e||{},e.save=!0,e.element=n,r=e.content=t.getContent(e),e.no_events||t.fire("SaveContent",e),r=e.content,/TEXTAREA|INPUT/i.test(n.nodeName)?n.value=r:(n.innerHTML=r,(i=E.getParent(t.id,"form"))&&R(i.elements,function(e){return e.name==t.id?(e.value=r,!1):void 0})),e.element=n=null,t.isNotDirty=!0,r},setContent:function(e,t){var n=this,r=n.getBody(),i;return t=t||{},t.format=t.format||"html",t.set=!0,t.content=e,t.no_events||n.fire("BeforeSetContent",t),e=t.content,P||0!==e.length&&!/^\s+$/.test(e)?("raw"!==t.format&&(e=new o({},n.schema).serialize(n.parser.parse(e,{isRootContent:!0}))),t.content=L(e),n.dom.setHTML(r,t.content),t.no_events||n.fire("SetContent",t),n.settings.content_editable&&document.activeElement!==n.getBody()||n.selection.normalize(),t.content):(i=n.settings.forced_root_block,e=i&&n.schema.isValidChild(r.nodeName.toLowerCase(),i.toLowerCase())?"<"+i+'>
":'
',r.innerHTML=e,n.selection.select(r,!0),n.selection.collapse(!0),n.fire("SetContent",t),void 0)},getContent:function(e){var t=this,n,r=t.getBody();return e=e||{},e.format=e.format||"html",e.get=!0,e.getInner=!0,e.no_events||t.fire("BeforeGetContent",e),n="raw"==e.format?r.innerHTML:"text"==e.format?r.innerText||r.textContent:t.serializer.serialize(r,e),e.content="text"!=e.format?L(n):n,e.no_events||t.fire("GetContent",e),e.content},insertContent:function(e){this.execCommand("mceInsertContent",!1,e)},isDirty:function(){return!this.isNotDirty},getContainer:function(){var e=this;return e.container||(e.container=E.get(e.editorContainer||e.id+"_parent")),e.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return E.get(this.settings.content_element||this.id)},getWin:function(){var e=this,t;return e.contentWindow||(t=E.get(e.id+"_ifr"),t&&(e.contentWindow=t.contentWindow)),e.contentWindow},getDoc:function(){var e=this,t;return e.contentDocument||(t=e.getWin(),t&&(e.contentDocument=t.document)),e.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(e,t,n){var r=this,i=r.settings;return i.urlconverter_callback?r.execCallback("urlconverter_callback",e,n,!0,t):!i.convert_urls||n&&"LINK"==n.nodeName||0===e.indexOf("file:")||0===e.length?e:i.relative_urls?r.documentBaseURI.toRelative(e):e=r.documentBaseURI.toAbsolute(e,i.remove_script_host)},addVisual:function(e){var n=this,r=n.settings,i=n.dom,o;e=e||n.getBody(),n.hasVisual===t&&(n.hasVisual=r.visual),R(i.select("table,a",e),function(e){var t;switch(e.nodeName){case"TABLE":return o=r.visual_table_class||"mce-item-table",t=i.getAttrib(e,"border"),t&&"0"!=t||(n.hasVisual?i.addClass(e,o):i.removeClass(e,o)),void 0;case"A":return i.getAttrib(e,"href",!1)||(t=i.getAttrib(e,"name")||e.id,o="mce-item-anchor",t&&(n.hasVisual?i.addClass(e,o):i.removeClass(e,o))),void 0}}),n.fire("VisualAid",{element:e,hasVisual:n.hasVisual})},remove:function(){var e=this,t=e.getContainer(),n=e.getDoc();e.removed||(e.removed=1,P&&n&&n.execCommand("SelectAll"),e.save(),E.setStyle(e.id,"display",e.orgDisplay),e.settings.content_editable||(D.unbind(e.getWin()),D.unbind(e.getDoc())),D.unbind(e.getBody()),D.unbind(t),e.fire("remove"),e.editorManager.remove(e),E.remove(t))},bindNative:function(e){var t=this;t.initialized?t.dom.bind(_(t,e),e,function(n){t.fire(e,n)}):t._pendingNativeEvents?t._pendingNativeEvents.push(e):t._pendingNativeEvents=[e]},unbindNative:function(e){var t=this;t.initialized&&t.dom.unbind(e)},destroy:function(e){var t=this,n;t.destroyed||(H&&(D.unbind(t.getDoc()),D.unbind(t.getWin()),D.unbind(t.getBody())),e||(t.editorManager.off("beforeunload",t._beforeUnload),t.theme&&t.theme.destroy&&t.theme.destroy(),t.selection.destroy(),t.dom.destroy()),n=t.formElement,n&&(n.submit=n._mceOldSubmit,n._mceOldSubmit=null,E.unbind(n,"submit reset",t.formEventDelegate)),t.contentAreaContainer=t.formElement=t.container=null,t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null,t.selection&&(t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null),t.destroyed=1)},_refreshContentEditable:function(){var e=this,t,n;e._isHidden()&&(t=e.getBody(),n=t.parentNode,n.removeChild(t),n.appendChild(t),t.focus())},_isHidden:function(){var e;return H?(e=this.selection.getSel(),!e||!e.rangeCount||0===e.rangeCount):0}},T(N.prototype,x),N}),r(ot,[],function(){var e={};return{add:function(t,n){for(var r in n)e[r]=n[r]},translate:function(t){if("undefined"==typeof t)return t;if("string"!=typeof t&&t.raw)return t.raw;if(t.push){var n=t.slice(1);t=(e[t[0]]||t[0]).replace(/\{([^\}]+)\}/g,function(e,t){return n[t]})}return e[t]||t},data:e}}),r(at,[v,g],function(e,t){function n(r){function i(){try{return document.activeElement}catch(e){return document.body}}function o(o){function a(t){return!!e.DOM.getParent(t,n.isEditorUIElement)}var s=o.editor,l,c;s.on("init",function(){"onbeforedeactivate"in document?s.dom.bind(s.getBody(),"beforedeactivate",function(){var e=s.getDoc().selection;l=e&&e.createRange?e.createRange():s.selection.getRng()}):s.inline&&(s.on("nodechange",function(){for(var e,t=document.activeElement;t;){if(t==s.getBody()){e=!0;break}t=t.parentNode}e&&(l=s.selection.getRng())}),t.webkit&&(c=function(){var e=s.selection.getRng();e.collapsed||(l=e)},e.DOM.bind(document,"selectionchange",c),s.on("remove",function(){e.DOM.unbind(document,"selectionchange",c)})))}),s.on("focusin",function(){var e=r.focusedEditor;s.selection.restoreRng&&(s.selection.setRng(s.selection.restoreRng),s.selection.restoreRng=null),e!=s&&(e&&e.fire("blur",{focusedEditor:s}),s.fire("focus",{blurredEditor:e}),s.focus(!1),r.focusedEditor=s)}),s.on("focusout",function(){s.selection.restoreRng=l,window.setTimeout(function(){var e=r.focusedEditor;e!=s&&(s.selection.restoreRng=null),a(i())||e!=s||(s.fire("blur",{focusedEditor:null}),r.focusedEditor=null,s.selection.restoreRng=null)},0)})}r.on("AddEditor",o)}return n.isEditorUIElement=function(e){return-1!==e.className.indexOf("mce-")},n}),r(st,[it,v,O,g,p,nt,ot,at],function(e,n,r,i,o,a,s,l){var c=n.DOM,u=o.explode,d=o.each,f=o.extend,p=0,h,m={majorVersion:"4",minorVersion:"0",releaseDate:"2013-07-18",editors:[],i18n:s,activeEditor:null,setup:function(){var e=this,t,n,i="",o;if(n=document.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(n)||(n+="/"),o=window.tinymce||window.tinyMCEPreInit)t=o.base||o.baseURL,i=o.suffix;else for(var a=document.getElementsByTagName("script"),s=0;s0&&d(u(l),function(n){c.get(n)?(s=new e(n,t,o),a.push(s),s.render(!0)):d(document.forms,function(r){d(r.elements,function(r){r.name===n&&(n="mce_editor_"+p++,c.setAttrib(r,"id",n),s=new e(n,t,o),a.push(s),s.render(1))})})});break;case"textareas":case"specific_textareas":d(c.select("textarea"),function(r){t.editor_deselector&&i(r,t.editor_deselector)||(!t.editor_selector||i(r,t.editor_selector))&&(s=new e(n(r),t,o),a.push(s),s.render(!0))})}t.oninit&&(l=h=0,d(a,function(e){h++,e.initialized?l++:e.on("init",function(){l++,l==h&&r(t,"oninit")}),l==h&&r(t,"oninit")}))})},get:function(e){return e===t?this.editors:this.editors[e]},add:function(e){var t=this,n=t.editors;return n[e.id]=e,n.push(e),t.activeEditor=e,t.fire("AddEditor",{editor:e}),h||(h=function(){t.fire("BeforeUnload")},c.bind(window,"beforeunload",h)),e},createEditor:function(t,n){return this.add(new e(t,n,this))},remove:function(e){var t=this,n,r=t.editors,i;if(e){if("string"==typeof e)return e=e.selector||e,d(c.select(e),function(e){t.remove(r[e.id])}),void 0;if(i=e,!r[i.id])return null;for(delete r[i.id],n=0;n=0;n--)t.remove(r[n])},execCommand:function(t,n,r){var i=this,o=i.get(r);switch(t){case"mceAddEditor":return i.get(r)||new e(r,i.settings,i).render(),!0;case"mceRemoveEditor":return o&&o.remove(),!0;case"mceToggleEditor":return o?(o.isHidden()?o.show():o.hide(),!0):(i.execCommand("mceAddEditor",0,r),!0)}return i.activeEditor?i.activeEditor.execCommand(t,n,r):!1},triggerSave:function(){d(this.editors,function(e){e.save()})},addI18n:function(e,t){s.add(e,t)},translate:function(e){return s.translate(e)}};return f(m,a),m.setup(),window.tinymce=window.tinyMCE=m,m}),r(lt,[st,p],function(e,t){var n=t.each,r=t.explode;e.on("AddEditor",function(e){var t=e.editor;t.on("preInit",function(){function e(e,t){n(t,function(t,n){t&&s.setStyle(e,n,t)}),s.rename(e,"span")}function i(e){s=t.dom,l.convert_fonts_to_spans&&n(s.select("font,u,strike",e.node),function(e){o[e.nodeName.toLowerCase()](s,e)})}var o,a,s,l=t.settings;l.inline_styles&&(a=r(l.font_size_legacy_values),o={font:function(t,n){e(n,{backgroundColor:n.style.backgroundColor,color:n.color,fontFamily:n.face,fontSize:a[parseInt(n.size,10)-1]})},u:function(t,n){e(n,{textDecoration:"underline"})},strike:function(t,n){e(n,{textDecoration:"line-through"})}},t.on("PreProcess SetContent",i))})})}),r(ct,[],function(){return{send:function(e){function t(){!e.async||4==n.readyState||r++>1e4?(e.success&&1e4>r&&200==n.status?e.success.call(e.success_scope,""+n.responseText,n,e):e.error&&e.error.call(e.error_scope,r>1e4?"TIMED_OUT":"GENERAL",n,e),n=null):setTimeout(t,10)}var n,r=0;if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=e.async===!1?!1:!0,e.data=e.data||"",n=new XMLHttpRequest){if(n.overrideMimeType&&n.overrideMimeType(e.content_type),n.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.content_type&&n.setRequestHeader("Content-Type",e.content_type),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.send(e.data),!e.async)return t();setTimeout(t,10)}}}}),r(ut,[],function(){function e(t,n){var r,i,o,a;if(n=n||'"',null===t)return"null";if(o=typeof t,"string"==o)return i="\bb t\nn\ff\rr\"\"''\\\\",n+t.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(e,t){return'"'===n&&"'"===e?e:(r=i.indexOf(t),r+1?"\\"+i.charAt(r+1):(e=t.charCodeAt().toString(16),"\\u"+"0000".substring(e.length)+e))})+n;if("object"==o){if(t.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(t)){for(r=0,i="[";r0?",":"")+e(t[r],n);return i+"]"}i="{";for(a in t)t.hasOwnProperty(a)&&(i+="function"!=typeof t[a]?(i.length>1?","+n:n)+a+n+":"+e(t[a],n):"");return i+"}"}return""+t}return{serialize:e,parse:function(e){try{return window[String.fromCharCode(101)+"val"]("("+e+")")}catch(t){}}}}),r(dt,[ut,ct,p],function(e,t,n){function r(e){this.settings=i({},e),this.count=0}var i=n.extend;return r.sendRPC=function(e){return(new r).send(e)},r.prototype={send:function(n){var r=n.error,o=n.success;n=i(this.settings,n),n.success=function(t,i){t=e.parse(t),"undefined"==typeof t&&(t={error:"JSON Parse error."}),t.error?r.call(n.error_scope||n.scope,t.error,i):o.call(n.success_scope||n.scope,t.result)},n.error=function(e,t){r&&r.call(n.error_scope||n.scope,e,t)},n.data=e.serialize({id:n.id||"c"+this.count++,method:n.method,params:n.params}),n.content_type="application/json",t.send(n)}},r}),r(ft,[v],function(e){return{callbacks:{},count:0,send:function(n){var r=this,i=e.DOM,o=n.count!==t?n.count:r.count,a="tinymce_jsonp_"+o;r.callbacks[o]=function(e){i.remove(a),delete r.callbacks[o],n.callback(e)},i.add(i.doc.body,"script",{id:a,src:n.url,type:"text/javascript"}),r.count++}}}),r(pt,[],function(){function e(){s=[];for(var e in a)s.push(e);i.length=s.length}function n(){function n(e){var n,r;return r=e!==t?c+e:i.indexOf(",",c),-1===r||r>i.length?null:(n=i.substring(c,r),c=r+1,n)}var r,i,s,c=0;a={},o.load(l),i=o.getAttribute(l)||"";do r=n(parseInt(n(),32)||0),null!==r&&(s=n(parseInt(n(),32)||0),a[r]=s);while(null!==r);e()}function r(){var t,n="";for(var r in a)t=a[r],n+=(n?",":"")+r.length.toString(32)+","+r+","+t.length.toString(32)+","+t;o.setAttribute(l,n),o.save(l),e()}var i,o,a,s,l;return window.localStorage?localStorage:(l="tinymce",o=document.documentElement,o.addBehavior("#default#userData"),i={key:function(e){return s[e]},getItem:function(e){return e in a?a[e]:null},setItem:function(e,t){a[e]=""+t,r()},removeItem:function(e){delete a[e],r()},clear:function(){a={},r()}},n(),i)}),r(ht,[v,l,y,b,p,g],function(e,t,n,r,i,o){var a=window.tinymce;return a.DOM=e.DOM,a.ScriptLoader=n.ScriptLoader,a.PluginManager=r.PluginManager,a.ThemeManager=r.ThemeManager,a.dom=a.dom||{},a.dom.Event=t.Event,i.each(i,function(e,t){a[t]=e}),i.each("isOpera isWebKit isIE isGecko isMac".split(" "),function(e){a[e]=o[e.substr(2).toLowerCase()]}),{}}),r(mt,[I,p],function(e,t){return e.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(e){this.settings=t.extend({},this.Defaults,e)},preRender:function(e){e.addClass(this.settings.containerClass,"body")},applyClasses:function(e){var t=this,n=t.settings,r,i,o;r=e.items().filter(":visible"),i=n.firstControlClass,o=n.lastControlClass,r.each(function(e){e.removeClass(i).removeClass(o),n.controlClass&&e.addClass(n.controlClass)}),r.eq(0).addClass(i),r.eq(-1).addClass(o)},renderHtml:function(e){var t=this,n=t.settings,r,i="";return r=e.items(),r.eq(0).addClass(n.firstControlClass),r.eq(-1).addClass(n.lastControlClass),r.each(function(e){n.controlClass&&e.addClass(n.controlClass),i+=e.renderHtml()}),i},recalc:function(){},postRender:function(){}})}),r(gt,[mt],function(e){return e.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(e){e.items().filter(":visible").each(function(e){var t=e.settings;e.layoutRect({x:t.x,y:t.y,w:t.w,h:t.h}),e.recalc&&e.recalc()})},renderHtml:function(e){return'
'+this._super(e)}})}),r(vt,[V,G],function(e,t){return e.extend({Mixins:[t],Defaults:{classes:"widget tooltip tooltip-n"},text:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().lastChild.innerHTML=t.encode(e)),t):t._value},renderHtml:function(){var e=this,t=e.classPrefix;return'"},repaint:function(){var e=this,t,n;t=e.getEl().style,n=e._layoutRect,t.left=n.x+"px",t.top=n.y+"px",t.zIndex=131070}})}),r(yt,[V,vt],function(e,t){var n,r=e.extend({init:function(e){var t=this;t._super(e),t.canFocus=!0,e.tooltip&&r.tooltips!==!1&&t.on("mouseenter mouseleave",function(n){var r=t.tooltip().moveTo(-65535);if(n.control==t&&"mouseenter"==n.type){var i=r.text(e.tooltip).show().testMoveRel(t.getEl(),["bc-tc","bc-tl","bc-tr"]);r.toggleClass("tooltip-n","bc-tc"==i),r.toggleClass("tooltip-nw","bc-tl"==i),r.toggleClass("tooltip-ne","bc-tr"==i),r.moveRel(t.getEl(),i)}else r.hide()}),t.aria("label",e.tooltip)},tooltip:function(){var e=this;return n||(n=new t({type:"tooltip"}),n.renderTo(e.getContainerElm())),n},active:function(e){var t=this,n;return e!==n&&(t.aria("pressed",e),t.toggleClass("active",e)),t._super(e)},disabled:function(e){var t=this,n;return e!==n&&(t.aria("disabled",e),t.toggleClass("disabled",e)),t._super(e)},postRender:function(){var e=this,t=e.settings;e._rendered=!0,e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&setTimeout(function(){e.focus()},0)},remove:function(){this._super(),n&&(n.remove(),n=null)}});return r}),r(bt,[yt],function(e){return e.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t=this,n;t.on("click mousedown",function(e){e.preventDefault()}),t._super(e),n=e.size,e.subtype&&t.addClass(e.subtype),n&&t.addClass("btn-"+n)},repaint:function(){var e=this.getEl().firstChild.style;e.width=e.height="100%",this._super()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon,i="";return e.settings.image&&(r="none",i=" style=\"background-image: url('"+e.settings.image+"')\""),r=e.settings.icon?n+"ico "+n+"i-"+r:"",'
'+'"+"
"}})}),r(Ct,[q],function(e){return e.extend({Defaults:{defaultType:"button",role:"toolbar"},renderHtml:function(){var e=this,t=e._layout;return e.addClass("btn-group"),e.preRender(),t.preRender(e),'
'+'
'+(e.settings.html||"")+t.renderHtml(e)+"
"+"
"}})}),r(xt,[yt],function(e){return e.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e.preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked)},checked:function(e){var t=this;return"undefined"!=typeof e?(e?t.addClass("checked"):t.removeClass("checked"),t._checked=e,t.aria("checked",e),t):t._checked},value:function(e){return this.checked(e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'
'+''+''+e.encode(e._text)+""+"
"}})}),r(wt,[bt,X],function(e,t){return e.extend({showPanel:function(){var e=this,n=e.settings;n.panel.popover=!0,n.panel.autohide=!0,e.active(!0),e.panel?e.panel.show():(e.panel=new t(n.panel).on("hide",function(){e.active(!1)}).parent(e).renderTo(e.getContainerElm()),e.panel.fire("show"),e.panel.reflow()),e.panel.moveRel(e.getEl(),n.popoverAlign||"bc-tc")},hidePanel:function(){var e=this;e.panel&&e.panel.hide()},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&(e.panel&&e.panel.visible()?e.hidePanel():e.showPanel())}),e._super()}})}),r(_t,[wt,v],function(e,t){var n=t.DOM;return e.extend({init:function(e){this._super(e),this.addClass("colorbutton")},color:function(e){return e?(this._color=e,this.getEl("preview").style.backgroundColor=e,this):this._color},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"",i=e.settings.image?" style=\"background-image: url('"+e.settings.image+"')\"":"";return'
'+'"+'"+"
"},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(r){r.control!=e||n.getParent(r.target,"."+e.classPrefix+"open")||(r.stopImmediatePropagation(),t.call(e,r))}),delete e.settings.onclick,e._super()}})}),r(Nt,[yt,z],function(e,t){return e.extend({init:function(e){var n=this;n._super(e),n.addClass("combobox"),n.on("click",function(e){for(var t=e.target;t;)t.id&&-1!=t.id.indexOf("-open")&&n.fire("action"),t=t.parentNode}),n.on("keydown",function(e){"INPUT"==e.target.nodeName&&13==e.keyCode&&n.parents().reverse().each(function(t){return e.preventDefault(),n.fire("change"),t.submit?(t.submit(),!1):void 0})}),e.placeholder&&(n.addClass("placeholder"),n.on("focusin",function(){n._hasOnChange||(t.on(n.getEl("inp"),"change",function(){n.fire("change")}),n._hasOnChange=!0),n.hasClass("placeholder")&&(n.getEl("inp").value="",n.removeClass("placeholder"))}),n.on("focusout",function(){0===n.value().length&&(n.getEl("inp").value=e.placeholder,n.addClass("placeholder"))}))},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t.removeClass("placeholder"),t._rendered&&(t.getEl("inp").value=e),t):t._rendered?(e=t.getEl("inp").value,e!=t.settings.placeholder?e:""):t._value},disabled:function(e){var t=this;t._super(e),t._rendered&&(t.getEl("inp").disabled=e)},focus:function(){this.getEl("inp").focus()},repaint:function(){var e=this,n=e.getEl(),r=e.getEl("open"),i=e.layoutRect(),o,a;o=r?i.w-r.offsetWidth-10:i.w-10;var s=document;return s.all&&(!s.documentMode||s.documentMode<=8)&&(a=e.layoutRect().h-2+"px"),t.css(n.firstChild,{width:o,lineHeight:a}),e._super(),e},postRender:function(){var e=this;return t.on(this.getEl("inp"),"change",function(){e.fire("change")}),e._super()},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.classPrefix,i=n.value||n.placeholder||"",o,a,s="";return o=n.icon?r+"ico "+r+"i-"+n.icon:"",a=e._text,(o||a)&&(s='
'+'"+"
",e.addClass("has-open")),'
'+''+s+"
"}})}),r(Et,[V,J],function(e,t){return e.extend({Defaults:{delimiter:"\xbb"},init:function(e){var t=this;t._super(e),t.addClass("path"),t.canFocus=!0,t.on("click",function(e){var n,r=e.target;(n=r.getAttribute("data-index"))&&t.fire("select",{value:t.data()[n],index:n})})},focus:function(){var e=this;return e.keyNav=new t({root:e,enableLeftRight:!0}),e.keyNav.focusFirst(),e},data:function(e){var t=this;return"undefined"!=typeof e?(t._data=e,t.update(),t):t._data},update:function(){this.getEl().innerHTML=this._getPathHtml()},postRender:function(){var e=this;e._super(),e.data(e.settings.data)},renderHtml:function(){var e=this;return'
'+e._getPathHtml()+"
"},_getPathHtml:function(){var e=this,t=e._data||[],n,r,i="",o=e.classPrefix;for(n=0,r=t.length;r>n;n++)i+=(n>0?'":"")+'
'+t[n].name+"
";return i||(i='
 
'),i}})}),r(St,[Et,st],function(e,t){return e.extend({postRender:function(){function e(e){return 1===e.nodeType&&("BR"==e.nodeName||!!e.getAttribute("data-mce-bogus"))}var n=this,r=t.activeEditor;return n.on("select",function(t){var n=[],i,o=r.getBody();for(r.focus(),i=r.selection.getStart();i&&i!=o;)e(i)||n.push(i),i=i.parentNode;r.selection.select(n[n.length-1-t.index]),r.nodeChanged()}),r.on("nodeChange",function(t){for(var i=[],o=t.parents,a=o.length;a--;)if(1==o[a].nodeType&&!e(o[a])){var s=r.fire("ResolveName",{name:o[a].nodeName.toLowerCase(),target:o[a]});i.push({name:s.name})}n.data(i)}),n._super()}})}),r(kt,[q],function(e){return e.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.addClass("formitem"),t.preRender(e),'
'+(e.settings.title?'
'+e.settings.title+"
":"")+'
'+(e.settings.html||"")+t.renderHtml(e)+"
"+"
"}})}),r(Tt,[q,kt],function(e,t){return e.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:20,labelGap:30,spacing:10},preRender:function(){var e=this,n=e.items();n.each(function(n){var r,i=n.settings.label;i&&(r=new t({layout:"flex",autoResize:"overflow",defaults:{flex:1},items:[{type:"label",text:i,flex:0,forId:n._id}]}),r.type="formitem","undefined"==typeof n.settings.flex&&(n.settings.flex=1),e.replace(n,r),r.add(n))})},recalcLabels:function(){var e=this,t=0,n=[],r,i;if(e.settings.labelGapCalc!==!1)for(e.items().filter("formitem").each(function(e){var r=e.items()[0],i=r.getEl().clientWidth;t=i>t?i:t,n.push(r)}),i=e.settings.labelGap||0,r=n.length;r--;)n[r].settings.minWidth=t+i},visible:function(e){var t=this._super(e);return e===!0&&this._rendered&&this.recalcLabels(),t},submit:function(){var e=this.getParentCtrl(document.activeElement);return e&&e.blur(),this.fire("submit",{data:this.toJSON()})},postRender:function(){var e=this;e._super(),e.recalcLabels(),e.fromJSON(e.settings.data)}})}),r(Rt,[Tt],function(e){return e.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.preRender(),t.preRender(e),'
'+(e.settings.title?''+e.settings.title+"":"")+'
'+(e.settings.html||"")+t.renderHtml(e)+"
"+"
"}})}),r(At,[Nt],function(e){return e.extend({init:function(e){var t=this,n=tinymce.activeEditor,r;e.spellcheck=!1,r=n.settings.file_browser_callback,r&&(e.icon="browse",e.onaction=function(){r(t.getEl("inp").id,t.getEl("inp").value,e.filetype,window)}),t._super(e)}})}),r(Bt,[gt],function(e){return e.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox();e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc()})}})}),r(Lt,[gt],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,u,d,f,p,h,m,g,v=[],y,b,C,x,w,_,N,E,S,k,T,R,A,B,L,M,D,H,P,O,I,F,W,z,V=Math.max,U=Math.min;for(r=e.items().filter(":visible"),i=e.layoutRect(),o=e._paddingBox,a=e.settings,f=a.direction,s=a.align,l=a.pack,c=a.spacing||0,("row-reversed"==f||"column-reverse"==f)&&(r=r.set(r.toArray().reverse()),f=f.split("-")[0]),"column"==f?(S="y",N="h",E="minH",k="maxH",R="innerH",T="top",A="bottom",B="deltaH",L="contentH",I="left",H="w",M="x",D="innerW",P="minW",O="maxW",F="right",W="deltaW",z="contentW"):(S="x",N="w",E="minW",k="maxW",R="innerW",T="left",A="right",B="deltaW",L="contentW",I="top",H="h",M="y",D="innerH",P="minH",O="maxH",F="bottom",W="deltaH",z="contentH"),d=i[R]-o[T]-o[T],_=u=0,t=0,n=r.length;n>t;t++)p=r[t],h=p.layoutRect(),m=p.settings,g=m.flex,d-=n-1>t?c:0,g>0&&(u+=g,h[k]&&v.push(p),h.flex=g),d-=h[E],y=o[I]+h[P]+o[F],y>_&&(_=y);if(x={},x[E]=0>d?i[E]-d+i[B]:i[R]-d+i[B],x[P]=_+i[W],x[L]=i[R]-d,x[z]=_,x.minW=U(x.minW,i.maxW),x.minH=U(x.minH,i.maxH),x.minW=V(x.minW,i.startMinWidth),x.minH=V(x.minH,i.startMinHeight),!i.autoResize||x.minW==i.minW&&x.minH==i.minH){for(C=d/u,t=0,n=v.length;n>t;t++)p=v[t],h=p.layoutRect(),b=h[k],y=h[E]+Math.ceil(h.flex*C),y>b?(d-=h[k]-h[E],u-=h.flex,h.flex=0,h.maxFlexSize=b):h.maxFlexSize=0;for(C=d/u,w=o[T],x={},0===u&&("end"==l?w=d+o[T]:"center"==l?(w=Math.round(i[R]/2-(i[R]-d)/2)+o[T],0>w&&(w=o[T])):"justify"==l&&(w=o[T],c=Math.floor(d/(r.length-1)))),x[M]=o[I],t=0,n=r.length;n>t;t++)p=r[t],h=p.layoutRect(),y=h.maxFlexSize||h[E],"center"===s?x[M]=Math.round(i[D]/2-h[H]/2):"stretch"===s?(x[H]=V(h[P]||0,i[D]-o[I]-o[F]),x[M]=o[I]):"end"===s&&(x[M]=i[D]-h[H]-o.top),h.flex>0&&(y+=Math.ceil(h.flex*C)),x[N]=y,x[S]=w,p.layoutRect(x),p.recalc&&p.recalc(),w+=y+c}else if(x.w=x.minW,x.h=x.minH,e.layoutRect(x),this.recalc(e),null===e._lastRect){var q=e.parent();q&&(q._lastRect=null,q.recalc())}}})}),r(Mt,[mt],function(e){return e.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(e){e.items().filter(":visible").each(function(e){e.recalc&&e.recalc()})}})}),r(Dt,[U,V,yt,X,p,st,g],function(e,t,n,r,i,o,a){function s(e){function t(e){return e.replace(/%(\w+)/g,"")}var n=o.activeEditor,r,i,a=n.dom,s="",l,c;return c=n.settings.preview_styles,c===!1?"":(c||(c="font-family font-size font-weight text-decoration text-transform color background-color border border-radius"),(e=n.formatter.get(e))?(e=e[0],r=e.block||e.inline||"span",i=a.create(r),u(e.styles,function(e,n){e=t(e),e&&a.setStyle(i,n,e)}),u(e.attributes,function(e,n){e=t(e),e&&a.setAttrib(i,n,e)}),u(e.classes,function(e){e=t(e),a.hasClass(i,e)||a.addClass(i,e)}),n.fire("PreviewFormats"),a.setStyles(i,{position:"absolute",left:-65535}),n.getBody().appendChild(i),l=a.getStyle(n.getBody(),"fontSize",!0),l=/px$/.test(l)?parseInt(l,10):0,u(c.split(" "),function(e){var t=a.getStyle(i,e,!0);if(!("background-color"==e&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(t)&&(t=a.getStyle(n.getBody(),e,!0),"#ffffff"==a.toHex(t).toLowerCase())||"color"==e&&"#000000"==a.toHex(t).toLowerCase())){if("font-size"==e&&/em|%$/.test(t)){if(0===l)return;t=parseFloat(t,10)/(/%$/.test(t)?100:1),t=t*l+"px"}"border"==e&&t&&(s+="padding:0 2px;"),s+=e+":"+t+";"}}),n.fire("AfterPreviewFormats"),a.remove(i),s):void 0)}function l(e,t){return function(){var n=this;o.activeEditor.on("nodeChange",function(r){var i=o.activeEditor.formatter,a=null;u(r.parents,function(n){return u(e,function(e){return t?i.matchNode(n,t,{value:e.value})&&(a=e.value):i.matchNode(n,e.value)&&(a=e.value),a?!1:void 0}),a?!1:void 0}),n.value(a)})}}function c(e){e=e.split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}var u=i.each;t.translate=function(e){return o.translate(e)},n.tooltips=!a.iOS,o.on("AddEditor",function(t){function n(){function e(r){var i=[];if(r)return u(r,function(r){var o={text:r.title,icon:r.icon,preview:!0};if(r.items)o.menu=e(r.items);else{var a=r.format||"custom"+t++;r.format||(r.name=a,n.push(r)),o.textStyle=function(){return s(a)},o.onclick=function(){m(a)},o.onPostRender=function(){var e=this;e.parent().on("show",function(){e.disabled(!g.formatter.canApply(a)),e.active(g.formatter.match(a))})}}i.push(o)}),i}var t=0,n=[],r=[{title:"Headers",items:[{title:"Header 1",format:"h1"},{title:"Header 2",format:"h2"},{title:"Header 3",format:"h3"},{title:"Header 4",format:"h4"},{title:"Header 5",format:"h5"},{title:"Header 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}];g.on("init",function(){u(n,function(e){g.formatter.register(e.name,e)})});var i=e(g.settings.style_formats||r);return i}function a(){return g.undoManager?g.undoManager.hasUndo():!1}function d(){return g.undoManager?g.undoManager.hasRedo():!1}function f(){var e=this;e.disabled(!a()),g.on("Undo Redo AddUndo TypingUndo",function(){e.disabled(!a())})}function p(){var e=this;e.disabled(!d()),g.on("Undo Redo AddUndo TypingUndo",function(){e.disabled(!d())})}function h(){var e=this;g.on("VisualAid",function(t){e.active(t.hasVisual)}),e.active(g.hasVisual)}function m(e){e.control&&(e=e.control.value()),e&&o.activeEditor.execCommand("mceToggleFormat",!1,e)}var g=t.editor,v;v=n(),u({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(e,t){g.addButton(t,{tooltip:e,onPostRender:function(){var e=this;g.formatter?g.formatter.formatChanged(t,function(t){e.active(t)}):g.on("init",function(){g.formatter.formatChanged(t,function(t){e.active(t)})})},onclick:function(){m(t)}})}),u({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],hr:["Insert horizontal rule","InsertHorizontalRule"],removeformat:["Clear formatting","RemoveFormat"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"]},function(e,t){g.addButton(t,{tooltip:e[0],cmd:e[1]})}),u({blockquote:["Toggle blockquote","mceBlockQuote"],numlist:["Numbered list","InsertOrderedList"],bullist:["Bulleted list","InsertUnorderedList"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"]},function(e,t){g.addButton(t,{tooltip:e[0],cmd:e[1],onPostRender:function(){var e=this;g.formatter?g.formatter.formatChanged(t,function(t){e.active(t)}):g.on("init",function(){g.formatter.formatChanged(t,function(t){e.active(t)})})}})}),g.addButton("undo",{tooltip:"Undo",onPostRender:f,cmd:"undo"}),g.addButton("redo",{tooltip:"Redo",onPostRender:p,cmd:"redo"}),g.addMenuItem("newdocument",{text:"New document",shortcut:"Ctrl+N",icon:"newdocument",cmd:"mceNewDocument"}),g.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Ctrl+Z",onPostRender:f,cmd:"undo"}),g.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Ctrl+Y",onPostRender:p,cmd:"redo"}),g.addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:h,cmd:"mceToggleVisualAid"}),u({cut:["Cut","Cut","Ctrl+X"],copy:["Copy","Copy","Ctrl+C"],paste:["Paste","Paste","Ctrl+V"],selectall:["Select all","SelectAll","Ctrl+A"],bold:["Bold","Bold","Ctrl+B"],italic:["Italic","Italic","Ctrl+I"],underline:["Underline","Underline"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"]},function(e,t){g.addMenuItem(t,{text:e[0],icon:t,shortcut:e[2],cmd:e[1]})}),g.on("mousedown",function(){r.hideAll()}),e.add("styleselect",function(t){var n=[].concat(v);return e.create("menubutton",i.extend({text:"Formats",menu:n},t))}),e.add("formatselect",function(t){var n=[],r=c(g.settings.block_formats||"Paragraph=p;Address=address;Pre=pre;Header 1=h1;Header 2=h2;Header 3=h3;Header 4=h4;Header 5=h5;Header 6=h6");return u(r,function(e){n.push({text:{raw:e[0]},value:e[1],textStyle:function(){return s(e[1])}})}),e.create("listbox",i.extend({text:{raw:r[0][0]},values:n,fixedWidth:!0,onselect:m,onPostRender:l(n)},t))}),e.add("fontselect",function(t){var n="Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",r=[],a=c(g.settings.font_formats||n);return u(a,function(e){r.push({text:{raw:e[0]},value:e[1],textStyle:-1==e[1].indexOf("dings")?"font-family:"+e[1]:""})}),e.create("listbox",i.extend({text:"Font Family",tooltip:"Font Family",values:r,fixedWidth:!0,onPostRender:l(r,"fontname"),onselect:function(e){e.control.settings.value&&o.activeEditor.execCommand("FontName",!1,e.control.settings.value)}},t))}),e.add("fontsizeselect",function(t){var n=[],r="8pt 10pt 12pt 14pt 18pt 24pt 36pt",a=g.settings.fontsize_formats||r;return u(a.split(" "),function(e){n.push({text:e,value:e})}),e.create("listbox",i.extend({text:"Font Sizes",tooltip:"Font Sizes",values:n,fixedWidth:!0,onPostRender:l(n,"fontsize"),onclick:function(e){e.control.settings.value&&o.activeEditor.execCommand("FontSize",!1,e.control.settings.value)}},t))}),g.addMenuItem("formats",{text:"Formats",menu:v})})}),r(Ht,[gt],function(e){return e.extend({recalc:function(e){var t=e.settings,n,r,i,o,a,s,l,c,u,d,f,p,h,m,g,v,y,b,C,x,w,_,N=[],E=[],S,k,T,R,A,B;for(t=e.settings,i=e.items().filter(":visible"),o=e.layoutRect(),r=t.columns||Math.ceil(Math.sqrt(i.length)),n=Math.ceil(i.length/r),y=t.spacingH||t.spacing||0,b=t.spacingV||t.spacing||0,C=t.alignH||t.align,x=t.alignV||t.align,g=e._paddingBox,C&&"string"==typeof C&&(C=[C]),x&&"string"==typeof x&&(x=[x]),d=0;r>d;d++)N.push(0);for(f=0;n>f;f++)E.push(0);for(f=0;n>f;f++)for(d=0;r>d&&(u=i[f*r+d],u);d++)c=u.layoutRect(),S=c.minW,k=c.minH,N[d]=S>N[d]?S:N[d],E[f]=k>E[f]?k:E[f];for(A=o.innerW-g.left-g.right,w=0,d=0;r>d;d++)w+=N[d]+(d>0?y:0),A-=(d>0?y:0)+N[d];for(B=o.innerH-g.top-g.bottom,_=0,f=0;n>f;f++)_+=E[f]+(f>0?b:0),B-=(f>0?b:0)+E[f];if(w+=g.left+g.right,_+=g.top+g.bottom,l={},l.minW=w+(o.w-o.innerW),l.minH=_+(o.h-o.innerH),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH,l.minW=Math.min(l.minW,o.maxW),l.minH=Math.min(l.minH,o.maxH),l.minW=Math.max(l.minW,o.startMinWidth),l.minH=Math.max(l.minH,o.startMinHeight),!o.autoResize||l.minW==o.minW&&l.minH==o.minH){o.autoResize&&(l=e.layoutRect(l),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH);var L;L="start"==t.packV?0:B>0?Math.floor(B/n):0;var M=0,D=t.flexWidths;if(D)for(d=0;dd;d++)N[d]+=D?Math.ceil(D[d]*H):H;for(h=g.top,f=0;n>f;f++){for(p=g.left,s=E[f]+L,d=0;r>d&&(u=i[f*r+d],u);d++)m=u.settings,c=u.layoutRect(),a=N[d],T=R=0,c.x=p,c.y=h,v=m.alignH||(C?C[d]||C[0]:null),"center"==v?c.x=p+a/2-c.w/2:"right"==v?c.x=p+a-c.w:"stretch"==v&&(c.w=a),v=m.alignV||(x?x[d]||x[0]:null),"center"==v?c.y=h+s/2-c.h/2:"bottom"==v?c.y=h+s-c.h:"stretch"==v&&(c.h=s),u.layoutRect(c),p+=a+y,u.recalc&&u.recalc();h+=s+b}}else if(l.w=l.minW,l.h=l.minH,e.layoutRect(l),this.recalc(e),null===e._lastRect){var P=e.parent();P&&(P._lastRect=null,P.recalc())}}})}),r(Pt,[yt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("iframe"),e.canFocus=!1,''},src:function(e){this.getEl().src=e +},html:function(e){return this.getEl().contentWindow.document.body.innerHTML=e,this}})}),r(Ot,[yt],function(e){return e.extend({init:function(e){var t=this;t._super(e),t.addClass("widget"),t.addClass("label"),t.canFocus=!1,e.multiline&&t.addClass("autoscroll"),e.strong&&t.addClass("strong")},initLayoutRect:function(){var e=this,t=e._super();return e.settings.multiline&&(e.getEl().offsetWidth>t.maxW&&(t.minW=t.maxW,e.addClass("multiline")),e.getEl().style.width=t.minW+"px",t.startMinH=t.h=t.minH=Math.min(t.maxH,e.getEl().offsetHeight)),t},disabled:function(e){var t=this,n;return e!==n&&(t.toggleClass("label-disabled",e),t._rendered&&(t.getEl()[0].className=t.classes())),t._super(e)},repaint:function(){var e=this;return e.settings.multiline||(e.getEl().style.lineHeight=e.layoutRect().h+"px"),e._super()},text:function(e){var t=this;return t._rendered&&e&&(t.getEl().innerHTML=t.encode(e)),t._super(e)},renderHtml:function(){var e=this,t=e.settings.forId;return'"}})}),r(It,[q,J],function(e,t){return e.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){var t=this;t._super(e),t.addClass("toolbar")},postRender:function(){var e=this;return e.items().addClass("toolbar-item"),e.keyNav=new t({root:e,enableLeftRight:!0}),e._super()}})}),r(Ft,[It],function(e){return e.extend({Defaults:{role:"menubar",containerCls:"menubar",defaults:{type:"menubutton"}}})}),r(Wt,[bt,U,Ft],function(e,t,n){function r(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}var i=e.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),t.addClass("menubtn"),e.fixedWidth&&t.addClass("fixed-width"),t.aria("haspopup",!0),t.hasPopup=!0},showMenu:function(){var e=this,n=e.settings,r;return e.menu&&e.menu.visible()?e.hideMenu():(e.menu||(r=n.menu||[],r.length?r={type:"menu",items:r}:r.type=r.type||"menu",e.menu=t.create(r).parent(e).renderTo(e.getContainerElm()),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control===e.menu&&e.focus()}),e.menu.on("show hide",function(t){t.control==e.menu&&e.activeMenu("show"==t.type)}).fire("show"),e.aria("expanded",!0)),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),e.menu.moveRel(e.getEl(),["bl-tl","tl-bl"]),void 0)},hideMenu:function(){var e=this;e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide(),e.aria("expanded",!1))},activeMenu:function(e){this.toggleClass("active",e)},renderHtml:function(){var e=this,t=e._id,r=e.classPrefix,i=e.settings.icon?r+"ico "+r+"i-"+e.settings.icon:"";return e.aria("role",e.parent()instanceof n?"menuitem":"button"),'
'+'"+"
"},postRender:function(){var e=this;return e.on("click",function(t){t.control===e&&r(t.target,e.getEl())&&(e.showMenu(),t.keyboard&&e.menu.items()[0].focus())}),e.on("mouseenter",function(t){var n=t.control,r=e.parent(),o;n&&r&&n instanceof i&&n.parent()==r&&(r.items().filter("MenuButton").each(function(e){e.hideMenu&&e!=n&&(e.menu&&e.menu.visible()&&(o=!0),e.hideMenu())}),o&&(n.focus(),n.showMenu()))}),e._super()},text:function(e){var t=this,n,r;if(t._rendered)for(r=t.getEl("open").getElementsByTagName("span"),n=0;n'+("-"!==i?' ':"")+("-"!==i?''+i+"":"")+(n.shortcut?'
'+n.shortcut+"
":"")+(n.menu?'
':"")+"
"},postRender:function(){var e=this,t=e.settings,n=t.textStyle;if("function"==typeof n&&(n=n()),n){var r=e.getEl("text");r&&r.setAttribute("style",n)}return e._super()},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),r(Ut,[X,J,Vt],function(e,t,n){var r=e.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"menu"},init:function(e){var r=this;e.autohide=!0,e.constrainToViewport=!0,r._super(e),r.addClass("menu"),r.keyNav=new t({root:r,enableUpDown:!0,enableLeftRight:!0,leftAction:function(){r.parent()instanceof n&&r.keyNav.cancel()},onCancel:function(){r.fire("cancel",{},!1),r.hide()}})},repaint:function(){return this.toggleClass("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){var e=this;e.hideAll(),e.fire("cancel"),e.fire("select")},hideAll:function(){var e=this;return this.find("menuitem").exec("hideMenu"),e._super()},preRender:function(){var e=this;return e.items().each(function(t){var n=t.settings;return n.icon||n.selectable?(e._hasIcons=!0,!1):void 0}),e._super()}});return r}),r(qt,[xt],function(e){return e.extend({Defaults:{classes:"radio",role:"radio"}})}),r($t,[yt,$],function(e,t){return e.extend({renderHtml:function(){var e=this,t=e.classPrefix;return e.addClass("resizehandle"),"both"==e.settings.direction&&e.addClass("resizehandle-both"),e.canFocus=!1,'
'+''+"
"},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new t(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!=e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},end:function(){e.fire("ResizeEnd")}})}})}),r(jt,[yt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("spacer"),e.canFocus=!1,'
'}})}),r(Kt,[Wt,v],function(e,t){var n=t.DOM;return e.extend({Defaults:{classes:"widget btn splitbtn",role:"splitbutton"},repaint:function(){var e=this,t=e.getEl(),r=e.layoutRect(),i,o,a;return e._super(),i=t.firstChild,o=t.lastChild,n.css(i,{width:r.w-o.offsetWidth,height:r.h-2}),n.css(o,{height:r.h-2}),a=i.firstChild.style,a.width=a.height="100%",a=o.firstChild.style,a.width=a.height="100%",e},activeMenu:function(e){var t=this;n.toggleClass(t.getEl().lastChild,t.classPrefix+"active",e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"";return'
'+'"+'"+"
"},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(e){e.control!=this||n.getParent(e.target,"."+this.classPrefix+"open")||(e.stopImmediatePropagation(),t.call(this,e))}),delete e.settings.onclick,e._super()}})}),r(Gt,[Mt],function(e){return e.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"}})}),r(Yt,[K,z],function(e,t){"use stict";return e.extend({lastIdx:0,Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(e){this.activeTabId&&t.removeClass(this.getEl(this.activeTabId),this.classPrefix+"active"),this.activeTabId="t"+e,t.addClass(this.getEl("t"+e),this.classPrefix+"active"),e!=this.lastIdx&&(this.items()[this.lastIdx].hide(),this.lastIdx=e),this.items()[e].show().fire("showtab"),this.reflow()},renderHtml:function(){var e=this,t=e._layout,n="",r=e.classPrefix;return e.preRender(),t.preRender(e),e.items().each(function(t,i){n+='
'+e.encode(t.settings.title)+"
"}),'
'+'
'+n+"
"+'
'+t.renderHtml(e)+"
"+"
"},postRender:function(){var e=this;e._super(),e.settings.activeTab=e.settings.activeTab||0,e.activateTab(e.settings.activeTab),this.on("click",function(t){var n=t.target.parentNode;if(t.target.parentNode.id==e._id+"-head")for(var r=n.childNodes.length;r--;)n.childNodes[r]==t.target&&e.activateTab(r)})},initLayoutRect:function(){var e=this,t,n,r;n=r=0,e.items().each(function(t,i){n=Math.max(n,t.layoutRect().minW),r=Math.max(r,t.layoutRect().minH),e.settings.activeTab!=i&&t.hide()}),e.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=n,e.settings.h=r,e.layoutRect({x:0,y:0,w:n,h:r})});var i=e.getEl("head").offsetHeight;return e.settings.minWidth=n,e.settings.minHeight=r+i,t=e._super(),t.deltaH+=e.getEl("head").offsetHeight,t.innerH=t.h-t.deltaH,t}})}),r(Xt,[yt,z],function(e,t){return e.extend({init:function(e){var t=this;t._super(e),t._value=e.value||"",t.addClass("textbox"),e.multiline?t.addClass("multiline"):t.on("keydown",function(e){13==e.keyCode&&t.parents().reverse().each(function(t){return e.preventDefault(),t.submit?(t.submit(),!1):void 0})})},value:function(e){var t=this;return"undefined"!=typeof e?(t._value=e,t._rendered&&(t.getEl().value=e),t):t._rendered?t.getEl().value:t._value},repaint:function(){var e=this,t,n,r,i=0,o=0,a;t=e.getEl().style,n=e._layoutRect,a=e._lastRepaintRect||{};var s=document;return!e.settings.multiline&&s.all&&(!s.documentMode||s.documentMode<=8)&&(t.lineHeight=n.h-o+"px"),r=e._borderBox,i=r.left+r.right+8,o=r.top+r.bottom+(e.settings.multiline?8:0),n.x!==a.x&&(t.left=n.x+"px",a.x=n.x),n.y!==a.y&&(t.top=n.y+"px",a.y=n.y),n.w!==a.w&&(t.width=n.w-i+"px",a.w=n.w),n.h!==a.h&&(t.height=n.h-o+"px",a.h=n.h),e._lastRepaintRect=a,e.fire("repaint",{},!1),e},renderHtml:function(){var e=this,t=e._id,n=e.settings,r=e.encode(e._value,!1),i="";return"spellcheck"in n&&(i+=' spellcheck="'+n.spellcheck+'"'),n.maxLength&&(i+=' maxlength="'+n.maxLength+'"'),n.size&&(i+=' size="'+n.size+'"'),n.subtype&&(i+=' type="'+n.subtype+'"'),n.multiline?'":'"},postRender:function(){var e=this;return t.on(e.getEl(),"change",function(t){e.fire("change",t)}),e._super()}})}),r(Jt,[z],function(e){return function(t){var n=this,r;n.show=function(i){return n.hide(),r=!0,window.setTimeout(function(){r&&t.appendChild(e.createFragment('
'))},i||0),n},n.hide=function(){var e=t.lastChild;return e&&-1!=e.className.indexOf("throbber")&&e.parentNode.removeChild(e),r=!1,n}}}),a([l,c,u,d,f,p,h,m,g,v,y,b,C,x,w,_,N,E,S,k,T,R,A,B,L,M,D,H,P,O,I,F,W,z,V,U,q,$,j,K,G,Y,X,J,Q,Z,et,tt,nt,rt,it,ot,at,st,lt,ct,ut,dt,ft,pt,ht,mt,gt,vt,yt,bt,Ct,xt,wt,_t,Nt,Et,St,kt,Tt,Rt,At,Bt,Lt,Mt,Dt,Ht,Pt,Ot,It,Ft,Wt,zt,Vt,Ut,qt,$t,jt,Kt,Gt,Yt,Xt,Jt])}(this); \ No newline at end of file From 63dee1b337ecee5599244705a5ce62fce02b3186 Mon Sep 17 00:00:00 2001 From: Aditi Date: Sun, 4 Aug 2013 21:37:13 +0530 Subject: [PATCH 066/140] Add icon for the blogpost. --- .../static/images/media_thumbs/blogpost.jpg | Bin 0 -> 3533 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 mediagoblin/static/images/media_thumbs/blogpost.jpg diff --git a/mediagoblin/static/images/media_thumbs/blogpost.jpg b/mediagoblin/static/images/media_thumbs/blogpost.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c3dbd984c53bf749e06c5bf578e4608ce35e09e2 GIT binary patch literal 3533 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 Oi*r%?T#OC}L;nF5Ond48 literal 0 HcmV?d00001 From ec85d24dfefd3544e23b88c3f1bcb32dfed09215 Mon Sep 17 00:00:00 2001 From: Aditi Date: Sun, 4 Aug 2013 21:53:48 +0530 Subject: [PATCH 067/140] Write temporary template for blog_post_listing view. --- .../mediagoblin/blog/blog_post_listing.html | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 mediagoblin/templates/mediagoblin/blog/blog_post_listing.html diff --git a/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html b/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html new file mode 100644 index 00000000..46922de3 --- /dev/null +++ b/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html @@ -0,0 +1,34 @@ +{# +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +#} +{% extends "mediagoblin/base.html" %} + +{% import "/mediagoblin/utils/wtforms.html" as wtforms_util %} + +{% block title -%} + {% trans %}{{ blog_owner }} 's Blog{% endtrans %} — {{ super() }} +{%- endblock %} + +{% block mediagoblin_content %} +

{{ blog_owner }} 's Blog

+
+ {% for post in blog_posts[0:9] %} +

{{ post.title }}

+

{{ post.description }}

+ {% endfor %} +
+{% endblock %} From 359cd2a29b8f55440646ac72059a3d0141297119 Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 5 Aug 2013 17:05:43 +0530 Subject: [PATCH 068/140] media template for blog to get blogpost.html template from it. --- .../mediagoblin/user_pages/blog_media.html | 176 ++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 mediagoblin/templates/mediagoblin/user_pages/blog_media.html diff --git a/mediagoblin/templates/mediagoblin/user_pages/blog_media.html b/mediagoblin/templates/mediagoblin/user_pages/blog_media.html new file mode 100644 index 00000000..f658c0f4 --- /dev/null +++ b/mediagoblin/templates/mediagoblin/user_pages/blog_media.html @@ -0,0 +1,176 @@ +{# +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +#} +{%- extends "mediagoblin/base.html" %} + +{% import "/mediagoblin/utils/wtforms.html" as wtforms_util %} +{% from "mediagoblin/utils/pagination.html" import render_pagination %} + +{% block title %}{{ media.title }} — {{ super() }}{% endblock %} + +{% block mediagoblin_head %} + + + + + {% template_hook("media_head") %} +{% endblock mediagoblin_head %} + +{% block mediagoblin_content %} +

+ {%- trans user_url=request.urlgen( + 'mediagoblin.user_pages.user_home', + user=media.get_uploader.username), + username=media.get_uploader.username -%} + ❖ Browsing media by {{username}} + {%- endtrans -%} +

+ {% include "mediagoblin/utils/prev_next.html" %} +
+
+ {% block mediagoblin_media %} + {% set display_media = request.app.public_store.file_url( + media.get_display_media()[1]) %} + {# if there's a medium file size, that means the medium size + # isn't the original... so link to the original! + #} + {% if media.media_files.has_key('medium') %} + + {% trans media_title=media.title -%}
+                        Image for {{ media_title }}{% endtrans %} + + {% else %} + {% trans media_title=media.title -%}
+                      Image for {{ media_title }}{% endtrans %} + {% endif %} + {% endblock %} +
+ {% if request.user and + (media.uploader == request.user.id or + request.user.is_admin) %} + {% set edit_url = request.urlgen('mediagoblin.edit.edit_media', + user= media.get_uploader.username, + media_id=media.id) %} + {% trans %}Edit{% endtrans %} + {% set delete_url = request.urlgen('mediagoblin.user_pages.media_confirm_delete', + user= media.get_uploader.username, + media_id=media.id) %} + {% trans %}Delete{% endtrans %} + + {% endif %} +
+
+ {% if comments %} + {% if app_config['allow_comments'] %} + + {% trans %}Add a comment{% endtrans %} + + {% include "mediagoblin/utils/comment-subscription.html" %} + + {% endif %} + {% if request.user %} +
+ {{ wtforms_util.render_divs(comment_form) }} +
+ + {{ csrf_token }} +
+
+ {% endif %} + + {{ render_pagination(request, pagination, + media.url_for_self(request.urlgen)) }} + {% endif %} +
+
+

{% trans %}Added{% endtrans %}

+

+ {%- trans formatted_time=timesince(media.created) -%} + {{ formatted_time }} ago + {%- endtrans -%} +

+ + {% block mediagoblin_after_added_sidebar %} + {% endblock %} + + {% if media.tags %} + {% include "mediagoblin/utils/tags.html" %} + {% endif %} + + {% include "mediagoblin/utils/collections.html" %} + + {% include "mediagoblin/utils/license.html" %} + + {% include "mediagoblin/utils/exif.html" %} + + {% template_hook("media_sideinfo") %} + + {% block mediagoblin_sidebar %} + {% endblock %} + +
+
+{% endblock %} From 43d143cd663453efd6f665e38c5c473a47ef7b8c Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 5 Aug 2013 17:26:55 +0530 Subject: [PATCH 069/140] Add safe pipe for proper rendering of cleaned html. --- .../templates/mediagoblin/media_displays/blogpost.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mediagoblin/templates/mediagoblin/media_displays/blogpost.html b/mediagoblin/templates/mediagoblin/media_displays/blogpost.html index b96ab34b..ca3441b9 100644 --- a/mediagoblin/templates/mediagoblin/media_displays/blogpost.html +++ b/mediagoblin/templates/mediagoblin/media_displays/blogpost.html @@ -16,7 +16,7 @@ # along with this program. If not, see . #} -{% extends 'mediagoblin/user_pages/media.html' %} +{% extends 'mediagoblin/user_pages/blog_media.html' %} {% block mediagoblin_head %} {{ super() }} @@ -24,7 +24,7 @@ {% block mediagoblin_media %}

{{media.title}}

-

{{media.description}}

+

{{media.description|safe}}

{% endblock %} From 46d9e44ace20763e3803136a4d3d25529eb4edc7 Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 5 Aug 2013 17:29:12 +0530 Subject: [PATCH 070/140] New elements added for the styling of blog post listing view. --- .../templates/mediagoblin/blog/blog_post_listing.html | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html b/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html index 46922de3..a1c35393 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html @@ -22,13 +22,12 @@ {% block title -%} {% trans %}{{ blog_owner }} 's Blog{% endtrans %} — {{ super() }} {%- endblock %} - {% block mediagoblin_content %} -

{{ blog_owner }} 's Blog

+

{{ blog_owner }} 's Blog

{% for post in blog_posts[0:9] %} -

{{ post.title }}

-

{{ post.description }}

+ +

{{ post.description|safe }}

{% endfor %}
{% endblock %} From 2a5f269032746dd392ad8943ae1fecaca8edb81b Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 5 Aug 2013 17:31:08 +0530 Subject: [PATCH 071/140] Add url for delete blogpost button. --- .../mediagoblin/blog/blog_admin_dashboard.html | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html index c45f0e30..eb32fd41 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html @@ -25,7 +25,7 @@ {% block mediagoblin_content %}

{{blog.title}}

- {{blog.description}} + {{blog.description|safe}}

{% set blogpost_create_url = request.urlgen('mediagoblin.media_types.blog.blogpost.create', @@ -58,10 +58,13 @@ {% set blogpost_edit_url = request.urlgen('mediagoblin.media_types.blog.blogpost.edit', blog_slug=blog.slug, user=request.user.username, blog_post_slug=blog_post.slug) %} - Edit - Delete + {% set blogpost_delete_url = request.urlgen('mediagoblin.user_pages.media_confirm_delete', + user= blog_post.get_uploader.username, + media_id=blog_post.id) %} + + {% trans %}Edit{% endtrans %} + {% trans %}Delete{% endtrans %} - {% endfor %} From 241950e98314a4088dc3b03e995e094d8d1a6606 Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 5 Aug 2013 17:33:16 +0530 Subject: [PATCH 072/140] safe pipelline for blog description. --- mediagoblin/templates/mediagoblin/blog/blog_edit_create.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html b/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html index fbed93db..f4bbcb8f 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html @@ -30,7 +30,7 @@

Description
-

{{form.description}}

+

{{form.description|safe}}

{{ csrf_token }} From 21ac4966d81efad29b538eb60da08bb671389d1d Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 5 Aug 2013 17:37:04 +0530 Subject: [PATCH 073/140] clean description of blog and blogposts. --- mediagoblin/media_types/blog/views.py | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index 44f61f0f..2bae52c5 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -73,7 +73,7 @@ def blog_edit(request): _log.info("Here") blog = Blog() blog.title = unicode(form.title.data) - blog.description = unicode(form.description.data) #remember clean html data. + blog.description = unicode(cleaned_markdown_conversion((form.description.data))) #remember clean html data. blog.author = request.user.id blog.generate_slug() @@ -96,7 +96,7 @@ def blog_edit(request): if request.method == 'GET': defaults = dict( title = blog.title, - description = blog.description, + description = cleaned_markdown_conversion(blog.description), author = request.user.id) form = blog_forms.BlogEditForm(**defaults) @@ -110,7 +110,7 @@ def blog_edit(request): else: if request.method == 'POST' and form.validate(): blog.title = unicode(form.title.data) - blog.description = unicode(form.description.data) + blog.description = unicode(cleaned_markdown_conversion((form.description.data))) blog.author = request.user.id blog.generate_slug() @@ -127,11 +127,7 @@ def blogpost_create(request): form = blog_forms.BlogPostEditForm(request.form, license=request.user.license_preference) if request.method == 'POST' and form.validate(): - - state_value = request.form['status'] - if state_value == u'Publish': - state_value = u'processed' - + blog_slug = request.matchdict.get('blog_slug') blog = request.db.Blog.query.filter_by(slug=blog_slug, author=request.user.id).first() @@ -140,11 +136,11 @@ def blogpost_create(request): blogpost = request.db.MediaEntry() blogpost.media_type = 'mediagoblin.media_types.blogpost' blogpost.title = unicode(form.title.data) - blogpost.description = unicode(form.description.data) + blogpost.description = unicode(cleaned_markdown_conversion((form.description.data))) blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data) blogpost.license = unicode(form.license.data) or None blogpost.uploader = request.user.id - blogpost.state = state_value + blogpost.state = u'processed' blogpost.generate_slug() @@ -183,23 +179,19 @@ def blogpost_edit(request): defaults = dict( title = blogpost.title, - description = blogpost.description, + description = cleaned_markdown_conversion(blogpost.description), tags=media_tags_as_string(blogpost.tags), license=blogpost.license) form = blog_forms.BlogPostEditForm(request.form, **defaults) if request.method == 'POST' and form.validate(): - state_value = request.form['status'] - if state_value == u'Publish': - state_value = u'processed' blogpost.title = unicode(form.title.data) - blogpost.description = unicode(form.description.data) + blogpost.description = unicode(cleaned_markdown_conversion((form.description.data))) blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data) blogpost.license = unicode(form.license.data) blogpost.generate_slug() - blogpost.state = state_value blogpost.save() add_message(request, SUCCESS, _('Woohoo! edited blogpost is submitted')) @@ -252,7 +244,6 @@ def blog_dashboard(request): def blog_post_listing(request): blog_owner = request.matchdict.get('user') - _log.info("Username is %s"%(blog_owner)) owner_user = User.query.filter_by(username=blog_owner).one() if not owner_user: From 09d39fc17a1b1eefe1c0f16567567676a6940bf1 Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 5 Aug 2013 17:40:12 +0530 Subject: [PATCH 074/140] Add new css elememts for blog post listing template. --- mediagoblin/static/css/base.css | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/mediagoblin/static/css/base.css b/mediagoblin/static/css/base.css index 85027d77..3a176408 100644 --- a/mediagoblin/static/css/base.css +++ b/mediagoblin/static/css/base.css @@ -301,6 +301,29 @@ text-align: center; margin-right: auto; } +.b_listing_title { + height: 30px; + width: 100%; + padding: 0px; + background-color: #86D4B1; + text-transform:capitalize; + border-radius: 4px; + } + +.b_list_owner { + height: 100px; + width: 100%; + padding: 0em; + margin-right: auto; + background-color: #DDA0DD; + border-radius: 4px; + + } + +.b_list_des { + text-align:justify; + } + .edit_box { border-top: 6px dashed #D49086 From 4af4aec1bfb9189f2294b8057c908532dff54e4e Mon Sep 17 00:00:00 2001 From: Aditi Date: Mon, 5 Aug 2013 19:20:47 +0530 Subject: [PATCH 075/140] Change font color. --- mediagoblin/static/css/base.css | 3 ++- .../templates/mediagoblin/blog/blog_post_listing.html | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/mediagoblin/static/css/base.css b/mediagoblin/static/css/base.css index 3a176408..8c73b7de 100644 --- a/mediagoblin/static/css/base.css +++ b/mediagoblin/static/css/base.css @@ -307,6 +307,7 @@ text-align: center; padding: 0px; background-color: #86D4B1; text-transform:capitalize; + text-decoration: none; border-radius: 4px; } @@ -317,7 +318,7 @@ text-align: center; margin-right: auto; background-color: #DDA0DD; border-radius: 4px; - + text-transform: capitalize; } .b_list_des { diff --git a/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html b/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html index a1c35393..b001395d 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html @@ -23,11 +23,11 @@ {% trans %}{{ blog_owner }} 's Blog{% endtrans %} — {{ super() }} {%- endblock %} {% block mediagoblin_content %} -

{{ blog_owner }} 's Blog

+

{{ blog_owner }} 's Blog

{% for post in blog_posts[0:9] %} - -

{{ post.description|safe }}

+ +

{{ post.description|safe }}

{% endfor %}
{% endblock %} From b4188c485a8d33b6f0e4ebef2190031bdb20892e Mon Sep 17 00:00:00 2001 From: Aditi Date: Tue, 6 Aug 2013 03:42:14 +0530 Subject: [PATCH 076/140] Configure tinymce with various plugins. --- mediagoblin/templates/mediagoblin/extra_head.html | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/mediagoblin/templates/mediagoblin/extra_head.html b/mediagoblin/templates/mediagoblin/extra_head.html index 176a77da..f350774e 100644 --- a/mediagoblin/templates/mediagoblin/extra_head.html +++ b/mediagoblin/templates/mediagoblin/extra_head.html @@ -20,11 +20,16 @@ + From e70fcc004092596506f4980abf8de38f3550b1ef Mon Sep 17 00:00:00 2001 From: Aditi Date: Tue, 6 Aug 2013 03:48:00 +0530 Subject: [PATCH 077/140] remove underline from the urls. --- mediagoblin/static/css/base.css | 16 ++++++++++------ .../mediagoblin/blog/blog_admin_dashboard.html | 7 +++++++ .../mediagoblin/blog/blog_post_edit_create.html | 2 +- .../mediagoblin/blog/blog_post_listing.html | 2 +- .../mediagoblin/user_pages/blog_media.html | 2 +- 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/mediagoblin/static/css/base.css b/mediagoblin/static/css/base.css index 8c73b7de..faff0b11 100644 --- a/mediagoblin/static/css/base.css +++ b/mediagoblin/static/css/base.css @@ -295,7 +295,7 @@ text-align: center; display: block; float: none; width: 90%; - max-width: 700px; + max-width: 800px; min-height: 500px; margin-left: auto; margin-right: auto; @@ -308,22 +308,26 @@ text-align: center; background-color: #86D4B1; text-transform:capitalize; text-decoration: none; - border-radius: 4px; - } + #border-radius: 4px; +} +.b_listing_title > a { + text-decoration: none; +} + .b_list_owner { height: 100px; width: 100%; padding: 0em; margin-right: auto; background-color: #DDA0DD; - border-radius: 4px; + #border-radius: 4px; text-transform: capitalize; - } +} .b_list_des { text-align:justify; - } +} .edit_box { diff --git a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html index eb32fd41..2028da00 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html @@ -22,6 +22,13 @@ {{blog.title}} Dashboard — {{ super() }} {%- endblock title %} +{% block mediagoblin_head%} + +{% endblock %} + + {% block mediagoblin_content %}

{{blog.title}}

diff --git a/mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html b/mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html index b380d44c..8a5fbcb8 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html @@ -26,7 +26,7 @@ {% block mediagoblin_content %}

-

{% trans %}Create a Blog Post.{% endtrans %}

+

{% trans %}Create/Edit a Blog Post.{% endtrans %}

Title

{{ form.title}}

diff --git a/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html b/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html index b001395d..3cf60029 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html @@ -27,7 +27,7 @@
{% for post in blog_posts[0:9] %} -

{{ post.description|safe }}

+

{{ post.description|safe }}

{% endfor %}
{% endblock %} diff --git a/mediagoblin/templates/mediagoblin/user_pages/blog_media.html b/mediagoblin/templates/mediagoblin/user_pages/blog_media.html index f658c0f4..978bf944 100644 --- a/mediagoblin/templates/mediagoblin/user_pages/blog_media.html +++ b/mediagoblin/templates/mediagoblin/user_pages/blog_media.html @@ -39,7 +39,7 @@ 'mediagoblin.user_pages.user_home', user=media.get_uploader.username), username=media.get_uploader.username -%} - ❖ Browsing media by {{username}} + ❖ Blog post by {{username}} {%- endtrans -%}

{% include "mediagoblin/utils/prev_next.html" %} From 13af16070ac857a064dc3b9db7668231c9502365 Mon Sep 17 00:00:00 2001 From: Aditi Date: Tue, 6 Aug 2013 20:20:23 +0530 Subject: [PATCH 078/140] button to start with blogging. --- mediagoblin/templates/mediagoblin/base.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mediagoblin/templates/mediagoblin/base.html b/mediagoblin/templates/mediagoblin/base.html index 1fc4467c..5ff72243 100644 --- a/mediagoblin/templates/mediagoblin/base.html +++ b/mediagoblin/templates/mediagoblin/base.html @@ -109,6 +109,10 @@ {%- trans %}Create new collection{% endtrans -%} + + {%- trans %}Start Blogging{% endtrans -%} + {% if request.user.is_admin %}

Admin powers: From 842b1bf6cb3b068c22d943817dce4bb6f438ae97 Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 7 Aug 2013 14:10:36 +0530 Subject: [PATCH 079/140] Display date of creation of the blog post. --- .../mediagoblin/blog/blog_post_listing.html | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html b/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html index 3cf60029..a3094b31 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html @@ -22,12 +22,28 @@ {% block title -%} {% trans %}{{ blog_owner }} 's Blog{% endtrans %} — {{ super() }} {%- endblock %} + +{% block mediagoblin_head -%} + +{%- endblock %} + + + {% block mediagoblin_content %}

{{ blog_owner }} 's Blog

{% for post in blog_posts[0:9] %} - + +

{{ post.created.strftime("%d %b, %Y") }}

+

{{ post.description|safe }}

+ {% endfor %}
{% endblock %} From bd71103e92ed986e03c34730c2e2f4cb880c60f9 Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 7 Aug 2013 14:13:42 +0530 Subject: [PATCH 080/140] Change message when user tries to create multiple blogs. --- mediagoblin/media_types/blog/views.py | 2 +- .../static/images/media_thumbs/blogpost.jpg | Bin 3533 -> 4171 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index 2bae52c5..55fe78c0 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -84,7 +84,7 @@ def blog_edit(request): else: #the case when max blog count is one. blog = request.db.Blog.query.filter_by(author=request.user.id).first() - add_message(request, ERROR, "You can not create any more blogs") + add_message(request, ERROR, "Welcome! You already have created a blog.") return redirect(request, "mediagoblin.media_types.blog.blog-dashboard", user=request.user.username, blog_slug=blog.slug) diff --git a/mediagoblin/static/images/media_thumbs/blogpost.jpg b/mediagoblin/static/images/media_thumbs/blogpost.jpg index c3dbd984c53bf749e06c5bf578e4608ce35e09e2..60b8c2bb0dd20efe83a78848dba1db3324e7abc7 100644 GIT binary patch literal 4171 zcmbVO2UJsAmp&mt5S55X5s}b)QHlfvLXoO~(yOQuX-_)RiHd?gDIx-b^dd+R5CRq? zN>vo;9gNh_dr!!n_@3*{|F4-fYi7<}_pWu$-uvABowN7;HZ%bJ1V;>Y4Riqv1^|rq z0B9K81B~RA0%*M>jCdSRdE%tvN&_}?^1pWX%a2P9~V}-$4 zVNfG1hvp*#?5_cS4;USs<|~5f0Q12kfDQ(S)6v5j80hI~nqf2bwT&(Iy3-A37gsl5KmS_+fkD9$_wGkVJ$U%%lZ2;gzYzWJ0Nwq6A^HcSN$0nKZZ&Q^*Wn^cDb)Xo zOQ>hiA!Ux&!;QA;gDsb4jb7aj;;6}fQS7<)xUz767y=8Wi`4K!q*7gVYS)~;hoH-( z_T2)?Mi!Hbe-?cf-EE9X9t5n3W=1}Qi*HlPi0bM2UsN>%CdH&XoO=SwFmjFU2O|?* zma657)%8cFabuEB6K(Mo&F92m`|i^asBu%XMb}j|P>=ReDTM7sG3w~c0d+hd1n%Jp z1lfJEA*ROd7P3?yGbZi1{1pP>U2%&;=@Ij$$er_c_Xn8ieu4Ef&~R*8tg703)$WO z_gT0W3Z|`gV;f$R^)tWMru~qyHV9B&J+tMU64cUHCqMXQDNbgLgt86)vUM;jEzD)h zq}*P0VqWic*xg^tY6%ORNc3LkLgtk>G=tc^YA;cJ z3<6AN5+R`GiCM-&VBCe;P!9ol+h5$Cc>wBXP_~$*3-Nj!pH6UV0t&E{p<7U7XOtY@~=AkLz`1NLpOmsIxNYQ7GOj%3(>MO;j|fbXz-9GS*A2zd5mu7ts764o{?CZoM+#_6ki4OZ_4yG`e;V;76P`RGJ2 z_N$wM>~|ZRjay3XgqrG~6usM+3nDG@<4_M(Px2<*nBOW6yI@o!c!*Wl9yc)_<)Aa* z=M&tUo4pp+D5ou{C-q0{2a8Ci(p;IaI61!pLt{2em;3L!0Ht(>Kq_NevPQG3hVIr{=3@aij7!Kd0v!GMo|e-rlDK~wTh`b$1+ zTzx`B(gWp$fr@vJ5<8|SIH!=(87te%>Hb>=PM4jAAL9nmB-iEG@Lawzajjy%32Eb6 zVUyxE%QTPpweR@6Ic~k1am z00~^ZpwrMa2?8e}z#QIj`J3a;xe@|tdgAXDwXBd+v?^ful^X7WStYLI4k0S9($YC5 zlR_E6O%TRRG7EhW6oE6i^>tqe#6sY{jCY9KQbM-fY_jh7@fQISW{0D%Oi;uPoeJ0H zTt@7futJ+sq#D^JXJ4Olw2u zwWJM+I;-K&{D?<}Lt8|Y&Bq=?APBiqGoxp}QI`9)a>%-Op@O+Pu_|J0;IaTR5TB$Rc z&m*FFoV&7hyA4~yf@^Zc9ksvZPqhV;rq@O@^JIv%zYbHi197$_@UHub?Yn3F{Ov;< zGkjoFysJp`lt_yH&TA4iOpwy1ZZ2~RwUT5{ORhXzN^TJ>tNMaRUQ&`s)vEMpTm8ADc)C&RijV9`A|+lO zzL^wdKdegkYbiIS7{Qx72`%iqOBj?ycYu1*eRc!uuW!%lj!Zpl3bH6$Y4Ck<(409# z%c*YnczeEBw_k2uPDYtgRLiX{O(9N%pIpqnQ-}@44du%Lrbo6E(1dQ@z4-S>1Z2Xl1sG<%WRmRvBe1^?I7 zUfz%z?Twqmzj&xoWDa17LVE7@MXVH&3)q!{!m2qXvLR}BKaL6k9}GEEY?eK2TUWNcDVn1; zB68Bqe$*zT5UVXj2#bP~b7}*dnpL}O)8nkJ>m0IC_lt=A^Dvg#K*>_)a%-n>6<#SB zt-SX1E@{syJ87!@ROvD?-os~HvgklioC#xKg(%6F5@ojZA-y|Vk{Bm_!c2n7<7g@;80M8$oo(_0`uf}oP z$SBV+zy724hOr;LikN<4_bkK*t&>m8S<-UrMmIH_)@c#0Wma+W;p*jGA%OA45$WPw zWHkO$T*tuMp_U?C6IFWU&7T%;Q&N=!*Q`RMsTUv-T1IBS7%-d-x1BEp=(ky>Cf-JVfq z)0g0hZNa(qwKqIRk`L-YAm_%bT)`=3AO_#iA#TTPDuB@*SbU+~+}fzTO=~f%xsxQY zMS8heY-DGqEE>iP0c<~kR0x5O&mhp8J}#-R-cp8ZxA?vAs8O1a%=>}XJ6J)04hsQp z*&|gE3&GozO-IUsIEssXi6yOF()(~;&5Vq(>A7i1^|z|24!I{QaM#Bip0E>a_57KZ z*;K`7gsbQ`{|cS`v9#cRgg~&`_t=n9=68`vp%KEbU_4J%ooC!1u_e`+&q@bBH*HeP z8%%WPd|G0xR57_1V)Zi7iD*?oZhyE*t&P2KnZGYtVlZ4d=100@AO8Efl0f3(#lao_ z0tgIP%I>o%(&@E6Jw!VJej=>`1Ad$vC|1wENq=8Bfkh?e-o#qbxwm#&@+H66*OB5~ zSnivRsg{BOsf>#5u~zQD{qZjnT=gG>zXU#;EZ0NHt8a|PF%MYnX5)?gg*ZAJxV56~ zlw}_yFpZdYMHwaTqyl^>|GU*2>0{pR6AH2CAABau*Je*2hw-Yeg^Xn&7SAF_GHQjDL=ecdf+hW7>q^$_~W8uqfw}Jc3P8nu1y0a zm7&r>cM;KXldN~N5d!rRwD>EGf`D5VJp>|SAn?*0_p^a!cai=mwS&V~IjHtzopvt) z&*i)p`_i!S&4@EawiH9XN1zlDAaJ7Ko6I@XN?jEM_Kreetq1}XkJu}dnh-cRZvugA zS~Dt9MvID>X_o)0=QVlqCRxLF$Ut%^@Qj$Py{8jlHxrJM4+`>Z&dMvX{&$be-ZW6T zm8kibAP|A1_Ugl_+zJrrD8a1I*lef}{L;p3NFpg*xUC{E87@k(rR5%}p~Dq7@Zw{W gU$VN(`*nG|!>x&Hw4PKg}F)h9w|&z5@XBuwTp~3St}$Hp(bRDQnu_{mSoK~WXX(WkgZIX zG!xl(i6mnw`;XuE>73{J^LgEK?!E8j^?JY0`<`8`9RLIZ0eXiEI2Zx` z0l*ALINHI7fWRO}V1&V-FeXN3W+p}^CT3O+R%RA<7A7V(BpW*i0)a#@vvMBeL>xQ3 zBaTEsM@%q;@sNmMVPZM-{y%Zh0w5UyPrwrl5(OBLATSbi&<+R!00?^6EeQAvCIAY9 zGlC%uM`1$*0AheJfSH-0%rNj#3Wxy=K%ht%oKpnLbc{zv!#qBz|1%>Ox2Way8wrUy z7fdazs!%7jyzYlo*HEX$F{I#L!dAaobfO!hdk1Tf?2@O z|7iwv6h=ZtWU$v^oEpbaJfbHrn3{#ePjP8h!nt#D``;Z51FYb~G$a@ar~xPw10Qai zJJYrUc%ys*=fx)lS~#Fi){~>W?UnjKs0FFUJ^bEHs|EAmX(RO~W>3Qha_=tA#*XBT zZ0TaS`P~h<*ED4QxqQpQ?!~jXnO+iM^~MKDO$0+Y6JLZ<-Hp((VMU{CR$29pB?IOu zBRtmSwFt#5X}aP_K(qc*bJDG!0_cp>s%YgmB+rsNX@81-cKYOJoD|;)D9T(tSMmv? zOQeV0_Yaon8&$B7zZ_uhbKP^wd`M;$JNEeByu6pEHm<=IHutgFDwxwQ3tJaT_E?Kc z66LJ5;L-%6(#w)?*OLjVf8{%TvUx+4W6pz`Bl=+8-aL<*Y=%33#cL9AuwA@R)Kf)BU4gcNskvJ10=Pp@ZwVYFY6F z-D~PbpJNfa=K-2miqRIM$L{fmkG)lqGMV3|NacJ)O5IASiT2U4Ll+Hf($5wO>#Ysh z_tywvKk_>}RjNn?b&}8xkCtLSEmd`}T*;&s4~#6+rQt~d?@02Z#~n3I3@|)wl`!1W z9&`Mzei7d#UNqlQK($3LMN3f zyxs;oQ9N0uMpg?qGfI^;unc|aEJo6<=&Fdm-|2As0q!^ADfqYHnbx-iIbQULj#e+M zpO*W+_>4jVNA=F2Rx~MMt!ampi5sV_gz+$w|7gLoK#&mx2$pR zd6w^Mu6FF$A&UbVC?5Vgf0%x@(pMzwmiZ^e8{j$~Yt0oD#kj4!kvZoI0f)E!Lf0a- zb+D%8DBz9;5s56_{XeXYBNm6@ewI#hF z(%rDBeAK}9+AIU5E+Q(o=Wa_XiYFsop*B2BEX*~<&gA5EZe-~xry|@xW(oJd^GiT$ zr+M{g_)tdV&%@DlZfZh)AXdsEg?zCMHTy;uvoIZ3m1-hcBCP3quN9WQcG}Y`rI12Y zYBZQ(zg+tz^7E-oF$VlX0_g1)gsn(gxeDE6&(c|#7 zShzhsgbeZVs=Ow*OWTWy|11x)-N-DkP~$M)~VJFopk&aWV@jF8>x9Ys68@%2FQ)AX@m&6H_E z6`pzk(6s-+?^1bR682UlTYNzZB3neN?F0YLPf4x>GLXe-v>!hraQ0Q*M}oW24~Irp z=ZPWqjrR?oNXI``RE{mh`s7}3+A$$cxFMTx ze&Wgi;$7sKpHtfcW5$+PvudM@1%{LYjZ?n?lDc^0w-jiQMBnawYLDNKo2CR>vE0z@ zJU@#u2D=lBIQ7N;+EOo@F9`8lT3JkxFK(MS7g2ZKaFGri2F~9l&Js51;_GBF)WCM0 z)@$teh|>D;YEDZ7u3r^BIk+=v+_}-6`MKnlQzBsoQmuG)y{-BRWnqYo;51r*p+Pqg z_=kBCED$z8_{6)Yv@?<=MWBD9FYJUR9~Y{5C7g9W;;Nr{R#tdxuXnGcJQ z0ekDWks=nc*Nu6I#LT;a5OJM3i2Z?{s7=Q3V%lh30RKOHJ6Pt?07ziIaKmOkHV_7cEFL$=uFrL5Z&oD-|!;<5Ln+1;w)DKm;qL>9VQ9e+zL0S@+T;iZe3f zInn;Th7YYQV?~rjQzmLfu6lcmqM(f;aePn;%4I%5;5 zO!myFs*2XrDb9;I_1w}a8d?SVHEg1=H_5@X9tXg(64l!bm(gJEVr%2#JbgcPozoBY zb(LcH!etk~^bAGd*R9xi-{)DoO--$_;~n!gCU+~C$xJDl8HAEApi;UX$kBVxPh;w* zV#{xyH`(nGD1JZ0A87>U`9OH=T_?H8bYabX@4;Yu;BBS%64PXhj6?$;xG_9|-x^L9wYUcgcFsYQnE8@%QK3v5BMctK<7}DLW0s*zaPG|5T?N$5+wO@& zE;{iwyn5xgT~F38j$xC}n4)AL=e$u5QKNl(G0BJD#6u0pXsmtMJz2R`ifOYzw};j9 zT<2zg>{Q8(5_>_m^4Dgo>RTdw$@pu7+b0ud3e_+NfUTTWfhTR7_jp7hH$QsZXYitw zQ3Ve9M%Tt*oU|C?z1*6@y`HvHzNtB7$nx-V;Gn zm=DSF-PfP-w2!*M$oUD(KY^dq?rx6lF8-}uFs!;dBvg-=#4pCImlj%N@R-Yci#_c2 z2~1cVdEHewNV{aCA0e$|9eJn3Ic=Jc=4W1Rh8hvB64=5}x??(?maAesT|aqIO*3l= z!8u`d98Eti@*V)$EGK@ZOb>V3I+0bcu&9Xb7L}C0ke>;1qe_#d-8A*4Ki5WV*h3*) zYy+5!^i*in>J7OAKx&rd&+oc3N|wFsoNwBEo*O~Yo>z}kkuHofwnpa-F!Qq`>8NhX z2F3IM5NLN)7#~Rr{^l3Ib4qr#TZ={!gDH-+GWH)^j|)9ybwe z$}xKq9;*Vq-%Q8XF2yzK%GS|{jeSnagR7ADX02wi@Z-vhU+QOqKgZlt3=W-h9(&#dl? z!t*l>cT4RFCiq4@{%6Z*p2;s$GbxIdc8MQLmU({&+xkX4baQbr-7Q;wDWcm`4LOlU5;fZ7jlyerNm|@^)xu?J#3DXa%A1-d}3|gdWHFAHuY8WFU=?4RU^-B zIk$9$I@IUvCp(S>)1ik?OX5SGx)|{s-g4#LV!{*V=j^36CK?9O%UBxpnEL}qBF;OA z>=X4&l1@EaWigbOnr3Vt7qKosI^;fRXVayD)icdBO>!?J_{>EJNFZMK+;Ee99`>Ro zRJY#*gZw=wcr2Uv$zQZ7i~$ughx)G};-{_kZFybjL&cPOnB!l=9*b4n34~Xj`C}q- zRTbOsx2?qCbWUQSaZm8jx$wW70d*0sMH*ML48jHUVe=;tuQYKz(So7((la|agr;iU zXy2`pc3A6){L*Fluk|F~o>KoBU(_LK{fp-pz9hfUkd3x5`&!pPr-UAkAs+y$wmh># Oi*r%?T#OC}L;nF5Ond48 From 3922463dd1cf99e8c4eb3fef6402aa8aa202b6df Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 7 Aug 2013 17:55:29 +0530 Subject: [PATCH 081/140] Write template for draft view of a blog post. --- .../mediagoblin/blog/blogpost_draft_view.html | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 mediagoblin/templates/mediagoblin/blog/blogpost_draft_view.html diff --git a/mediagoblin/templates/mediagoblin/blog/blogpost_draft_view.html b/mediagoblin/templates/mediagoblin/blog/blogpost_draft_view.html new file mode 100644 index 00000000..7c634877 --- /dev/null +++ b/mediagoblin/templates/mediagoblin/blog/blogpost_draft_view.html @@ -0,0 +1,42 @@ +{# +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +#} + +{% extends 'mediagoblin/base.html' %} + +{% block mediagoblin_head %} + {{ super() }} +{% endblock %} + +{% block mediagoblin_content %} +

{{ blogpost.title}}

+

{{ blogpost.description|safe}}

+ +{% set blogpost_edit_url = request.urlgen('mediagoblin.media_types.blog.blogpost.edit', + blog_slug=blog.slug, user=request.user.username, + blog_post_slug=blogpost.slug) %} +{% set blogpost_delete_url = request.urlgen('mediagoblin.user_pages.media_confirm_delete', + user= blogpost.get_uploader.username, + media_id=blogpost.id) %} + {% trans %}Edit{% endtrans %} + {% trans %}Delete{% endtrans %} + +{% endblock %} + + + + From 4cf5b010a5cc17d85c157709f01283f253aacc9b Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 7 Aug 2013 17:56:39 +0530 Subject: [PATCH 082/140] Code for blog post view when it is in draft state. --- mediagoblin/media_types/blog/views.py | 32 ++++++++++++++++++++------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/mediagoblin/media_types/blog/views.py b/mediagoblin/media_types/blog/views.py index 55fe78c0..f22d6ac1 100644 --- a/mediagoblin/media_types/blog/views.py +++ b/mediagoblin/media_types/blog/views.py @@ -26,7 +26,7 @@ from mediagoblin import mg_globals from mediagoblin.media_types.blog import forms as blog_forms from mediagoblin.media_types.blog.models import Blog, BlogPostData -from mediagoblin.media_types.blog.lib import may_edit_blogpost +from mediagoblin.media_types.blog.lib import may_edit_blogpost, set_blogpost_state from mediagoblin.messages import add_message, SUCCESS, ERROR from mediagoblin.decorators import (require_active_login, active_user_from_url, @@ -123,16 +123,15 @@ def blog_edit(request): @require_active_login def blogpost_create(request): - form = blog_forms.BlogPostEditForm(request.form, license=request.user.license_preference) if request.method == 'POST' and form.validate(): - blog_slug = request.matchdict.get('blog_slug') blog = request.db.Blog.query.filter_by(slug=blog_slug, author=request.user.id).first() + if not blog: + return render_404(request) - blogpost = request.db.MediaEntry() blogpost.media_type = 'mediagoblin.media_types.blogpost' blogpost.title = unicode(form.title.data) @@ -140,10 +139,9 @@ def blogpost_create(request): blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data) blogpost.license = unicode(form.license.data) or None blogpost.uploader = request.user.id - blogpost.state = u'processed' - blogpost.generate_slug() + set_blogpost_state(request, blogpost) blogpost.save() # connect this blogpost to its blog @@ -185,12 +183,11 @@ def blogpost_edit(request): form = blog_forms.BlogPostEditForm(request.form, **defaults) if request.method == 'POST' and form.validate(): - blogpost.title = unicode(form.title.data) blogpost.description = unicode(cleaned_markdown_conversion((form.description.data))) blogpost.tags = convert_to_tag_list_of_dicts(form.tags.data) blogpost.license = unicode(form.license.data) - + set_blogpost_state(request, blogpost) blogpost.generate_slug() blogpost.save() @@ -263,6 +260,25 @@ def blog_post_listing(request): }) +def draft_view(request): + blog_slug = request.matchdict.get('blog_slug') + blog_post_slug = request.matchdict.get('blog_post_slug') + user = request.matchdict.get('user') + + blog = request.db.Blog.query.filter_by(author=request.user.id, slug=blog_slug).first() + blogpost = request.db.MediaEntry.query.filter_by(state = u'failed', uploader=request.user.id, slug=blog_post_slug).first() + if not blog or not blogpost: + return render_404(request) + + return render_to_response( + request, + 'mediagoblin/blog/blogpost_draft_view.html', + {'blogpost':blogpost, + 'blog': blog + }) + + + From 8c040f77802ac0b02a4f5c21cecd0a5bca3e1c3b Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 7 Aug 2013 17:58:01 +0530 Subject: [PATCH 083/140] write a function to extract blog post state from create/edit form. --- mediagoblin/media_types/blog/lib.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mediagoblin/media_types/blog/lib.py b/mediagoblin/media_types/blog/lib.py index f95ecca5..0725b5b6 100644 --- a/mediagoblin/media_types/blog/lib.py +++ b/mediagoblin/media_types/blog/lib.py @@ -27,4 +27,10 @@ def may_edit_blogpost(request, blog): if request.user.is_admin or request.user.id == blog.author: return True return False + +def set_blogpost_state(request, blogpost): + if request.form['status'] == 'Publish': + blogpost.state = u'processed' + else: + blogpost.state = u'failed' From 7ffe783d0e2d3deb1bccfd4da687f02db724e3b3 Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 7 Aug 2013 17:58:57 +0530 Subject: [PATCH 084/140] URL mapping blog post draft view. --- mediagoblin/media_types/blog/routing.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/mediagoblin/media_types/blog/routing.py b/mediagoblin/media_types/blog/routing.py index b34c8280..3c8738ba 100644 --- a/mediagoblin/media_types/blog/routing.py +++ b/mediagoblin/media_types/blog/routing.py @@ -34,14 +34,14 @@ add_route('mediagoblin.media_types.blog.blogpost.edit', #URL mapping for blog-collection-admin, where all the blogs of the user #are listed. providing the facility of edit, delete and view a blog. #view facility redirects to blog-admin page of that particular blog. -add_route('mediagoblin.media_types.blog.blog-collection-admin', \ - '/u//blog-collection-admin/', 'mediagoblin.media_types.blog.views:blog-collection-admin') +add_route('mediagoblin.media_types.blog.blog-collection-admin', + '/u//blog-collection-admin/', + 'mediagoblin.media_types.blog.views:blog-collection-admin') #URL mapping for creating a new blog. add_route('mediagoblin.media_types.blog.create', '/u//b/create/', 'mediagoblin.media_types.blog.views:blog_edit') - #URL mapping for editing an existing blog. add_route('mediagoblin.media_types.blog.edit', '/u//b//edit/', 'mediagoblin.media_types.blog.views:blog_edit') @@ -49,6 +49,11 @@ add_route('mediagoblin.media_types.blog.edit', '/u//b//b/', 'mediagoblin.media_types.blog.views:blog_post_listing') + +#URL mapping for blog post draft display. +add_route('mediagoblin.media_types.blog.blogpost_draft_view', + '/u//b//p//draft/', + 'mediagoblin.media_types.blog.views:draft_view') From d6a456b5b43292190f7a2117f61164eb00d1aa2d Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 7 Aug 2013 18:00:55 +0530 Subject: [PATCH 085/140] Specify the status of blog post. --- .../static/images/media_thumbs/blogpost.jpg | Bin 4171 -> 3940 bytes .../blog/blog_admin_dashboard.html | 16 ++++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/mediagoblin/static/images/media_thumbs/blogpost.jpg b/mediagoblin/static/images/media_thumbs/blogpost.jpg index 60b8c2bb0dd20efe83a78848dba1db3324e7abc7..c6c686785f220b81b09a49920fc3743ea65d4408 100644 GIT binary patch delta 2664 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 Gjr|j<3hYY& diff --git a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html index 2028da00..e670281d 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html @@ -59,9 +59,21 @@ {% for blog_post in blog_posts_list %} - {{ blog_post.title }} + {% if blog_post.state == 'processed' %} + {{ blog_post.title }} + {% else %} + {% set draft_url = request.urlgen('mediagoblin.media_types.blog.blogpost_draft_view', + blog_slug=blog.slug, user=request.user.username, + blog_post_slug=blog_post.slug) %} + {{ blog_post.title }} + {% endif %} {{ blog_post.created.strftime("%F %R") }} -
{{ blog_post.state }}
+ + {% if blog_post.state == 'processed' %} +
Published
+ {% else %} +
Draft
+ {% endif %} {% set blogpost_edit_url = request.urlgen('mediagoblin.media_types.blog.blogpost.edit', blog_slug=blog.slug, user=request.user.username, blog_post_slug=blog_post.slug) %} From 2e9f60d264e4076bb63b7bb3d738f7707a681866 Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 7 Aug 2013 19:44:36 +0530 Subject: [PATCH 086/140] show all blogposts. --- .../templates/mediagoblin/blog/blog_admin_dashboard.html | 4 ++-- .../templates/mediagoblin/blog/blog_post_listing.html | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html index e670281d..5ce838bf 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html @@ -75,8 +75,8 @@
Draft
{% endif %} {% set blogpost_edit_url = request.urlgen('mediagoblin.media_types.blog.blogpost.edit', - blog_slug=blog.slug, user=request.user.username, - blog_post_slug=blog_post.slug) %} + blog_slug=blog.slug, user=request.user.username, + blog_post_slug=blog_post.slug) %} {% set blogpost_delete_url = request.urlgen('mediagoblin.user_pages.media_confirm_delete', user= blog_post.get_uploader.username, media_id=blog_post.id) %} diff --git a/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html b/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html index a3094b31..ea712bb0 100644 --- a/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html +++ b/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html @@ -31,19 +31,18 @@ {%- endblock %} - - {% block mediagoblin_content %}

{{ blog_owner }} 's Blog

- {% for post in blog_posts[0:9] %} + {% for post in blog_posts %}

{{ post.created.strftime("%d %b, %Y") }}

{{ post.description|safe }}

- +
+
{% endfor %}
{% endblock %} From 45384c6dce364bf7f6dd09bec2ea69fb09856247 Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 7 Aug 2013 20:31:34 +0530 Subject: [PATCH 087/140] Add url mapping to it, to have a complete media_type plugin. --- mediagoblin/media_types/blog/__init__.py | 53 ++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/mediagoblin/media_types/blog/__init__.py b/mediagoblin/media_types/blog/__init__.py index a579a179..cb113ec0 100644 --- a/mediagoblin/media_types/blog/__init__.py +++ b/mediagoblin/media_types/blog/__init__.py @@ -14,24 +14,71 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import os +import logging +_log = logging.getLogger(__name__) + from mediagoblin.media_types import MediaManagerBase from mediagoblin.tools import pluginapi +PLUGIN_DIR = os.path.dirname(__file__) MEDIA_TYPE = 'mediagoblin.media_types.blogpost' def setup_plugin(): config = pluginapi.get_config(MEDIA_TYPE) - + _log.info("setting up blog media type plugin.") + + routes = [ + #blog_create + ('mediagoblin.media_types.blog.create', + '/u//b/create/', + 'mediagoblin.media_types.blog.views:blog_edit' + ), + #blog_edit + ('mediagoblin.media_types.blog.edit', + '/u//b//edit/', + 'mediagoblin.media_types.blog.views:blog_edit' + ), + #blog post create + ('mediagoblin.media_types.blog.blogpost.create', + '/u//b//p/create/', + 'mediagoblin.media_types.blog.views:blogpost_create' + ), + #blog post edit + ('mediagoblin.media_types.blog.blogpost.edit', + '/u//b//p//edit/', + 'mediagoblin.media_types.blog.views:blogpost_edit' + ), + #blog admin dashboard + ('mediagoblin.media_types.blog.blog-dashboard', + '/u//b//blog_dashboard/', + 'mediagoblin.media_types.blog.views:blog_dashboard' + ), + #blog post listing view + ('mediagoblin.media_types.blog.blog_post_listing', + '/u//b/', + 'mediagoblin.media_types.blog.views:blog_post_listing' + ), + #blog post draft view + ('mediagoblin.media_types.blog.blogpost_draft_view', + '/u//b//p//draft/', + 'mediagoblin.media_types.blog.views:draft_view') + ] + + + pluginapi.register_routes(routes) + pluginapi.register_template_path(os.path.join(PLUGIN_DIR, 'templates')) + + class BlogPostMediaManager(MediaManagerBase): human_readable = "Blog Post" display_template = "mediagoblin/media_displays/blogpost.html" default_thumb = "images/media_thumbs/blogpost.jpg" -def get_media_type_and_manager(ext): +def get_media_type_and_manager(): return MEDIA_TYPE, BlogPostMediaManager - hooks = { 'setup': setup_plugin, 'get_media_type_and_manager': get_media_type_and_manager, From 549bc3449e75291f7b379fe936ccb4762c262b68 Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 7 Aug 2013 20:35:11 +0530 Subject: [PATCH 088/140] Eliminate url mapping using mediagoblin/routing.py and have plugin type url mapping. --- mediagoblin/routing.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mediagoblin/routing.py b/mediagoblin/routing.py index 4228d29b..ad4aa18b 100644 --- a/mediagoblin/routing.py +++ b/mediagoblin/routing.py @@ -36,8 +36,7 @@ def get_url_map(): import mediagoblin.webfinger.routing import mediagoblin.listings.routing import mediagoblin.notifications.routing - import mediagoblin.media_types.blog.routing - + for route in PluginManager().get_routes(): add_route(*route) From 64a6e7fc4965e3a5cd81d26e29ef3a3051648482 Mon Sep 17 00:00:00 2001 From: Aditi Date: Wed, 7 Aug 2013 20:47:42 +0530 Subject: [PATCH 089/140] Move templates to blog plugin from all mediagoblin/templates. --- mediagoblin/media_types/blog/routing.py | 62 ------------------- .../blog/blog_admin_dashboard.html | 0 .../mediagoblin/blog/blog_edit_create.html | 0 .../blog/blog_post_edit_create.html | 0 .../mediagoblin/blog/blog_post_listing.html | 0 .../mediagoblin/blog/blogpost_draft_view.html | 0 6 files changed, 62 deletions(-) delete mode 100644 mediagoblin/media_types/blog/routing.py rename mediagoblin/{ => media_types/blog}/templates/mediagoblin/blog/blog_admin_dashboard.html (100%) rename mediagoblin/{ => media_types/blog}/templates/mediagoblin/blog/blog_edit_create.html (100%) rename mediagoblin/{ => media_types/blog}/templates/mediagoblin/blog/blog_post_edit_create.html (100%) rename mediagoblin/{ => media_types/blog}/templates/mediagoblin/blog/blog_post_listing.html (100%) rename mediagoblin/{ => media_types/blog}/templates/mediagoblin/blog/blogpost_draft_view.html (100%) diff --git a/mediagoblin/media_types/blog/routing.py b/mediagoblin/media_types/blog/routing.py deleted file mode 100644 index 3c8738ba..00000000 --- a/mediagoblin/media_types/blog/routing.py +++ /dev/null @@ -1,62 +0,0 @@ -# GNU MediaGoblin -- federated, autonomous media hosting -# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . - -from mediagoblin.tools.routing import add_route - -#URL mapping for blog-admin, where all the blog posts of a particular blog -#are listed. providing the facility of edit, delete and view a particular blog post." -add_route('mediagoblin.media_types.blog.blog-dashboard', \ - '/u//b//blog_dashboard/', 'mediagoblin.media_types.blog.views:blog_dashboard') - -#URL mapping for creating a new blog post. (add blo_slug in the url at "blogpost" place later" -add_route('mediagoblin.media_types.blog.blogpost.create', - '/u//b//p/create/', - 'mediagoblin.media_types.blog.views:blogpost_create') - -#URL mapping for editing an existing blog post. -add_route('mediagoblin.media_types.blog.blogpost.edit', - '/u//b//p//edit/', - 'mediagoblin.media_types.blog.views:blogpost_edit') - -#URL mapping for blog-collection-admin, where all the blogs of the user -#are listed. providing the facility of edit, delete and view a blog. -#view facility redirects to blog-admin page of that particular blog. -add_route('mediagoblin.media_types.blog.blog-collection-admin', - '/u//blog-collection-admin/', - 'mediagoblin.media_types.blog.views:blog-collection-admin') - -#URL mapping for creating a new blog. -add_route('mediagoblin.media_types.blog.create', '/u//b/create/', - 'mediagoblin.media_types.blog.views:blog_edit') - -#URL mapping for editing an existing blog. -add_route('mediagoblin.media_types.blog.edit', '/u//b//edit/', - 'mediagoblin.media_types.blog.views:blog_edit') - -#URL mapping for blog_post_listing view. -add_route('mediagoblin.media_types.blog.blog_post_listing', '/u//b/', - 'mediagoblin.media_types.blog.views:blog_post_listing') - -#URL mapping for blog post draft display. -add_route('mediagoblin.media_types.blog.blogpost_draft_view', - '/u//b//p//draft/', - 'mediagoblin.media_types.blog.views:draft_view') - - - - - - diff --git a/mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html b/mediagoblin/media_types/blog/templates/mediagoblin/blog/blog_admin_dashboard.html similarity index 100% rename from mediagoblin/templates/mediagoblin/blog/blog_admin_dashboard.html rename to mediagoblin/media_types/blog/templates/mediagoblin/blog/blog_admin_dashboard.html diff --git a/mediagoblin/templates/mediagoblin/blog/blog_edit_create.html b/mediagoblin/media_types/blog/templates/mediagoblin/blog/blog_edit_create.html similarity index 100% rename from mediagoblin/templates/mediagoblin/blog/blog_edit_create.html rename to mediagoblin/media_types/blog/templates/mediagoblin/blog/blog_edit_create.html diff --git a/mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html b/mediagoblin/media_types/blog/templates/mediagoblin/blog/blog_post_edit_create.html similarity index 100% rename from mediagoblin/templates/mediagoblin/blog/blog_post_edit_create.html rename to mediagoblin/media_types/blog/templates/mediagoblin/blog/blog_post_edit_create.html diff --git a/mediagoblin/templates/mediagoblin/blog/blog_post_listing.html b/mediagoblin/media_types/blog/templates/mediagoblin/blog/blog_post_listing.html similarity index 100% rename from mediagoblin/templates/mediagoblin/blog/blog_post_listing.html rename to mediagoblin/media_types/blog/templates/mediagoblin/blog/blog_post_listing.html diff --git a/mediagoblin/templates/mediagoblin/blog/blogpost_draft_view.html b/mediagoblin/media_types/blog/templates/mediagoblin/blog/blogpost_draft_view.html similarity index 100% rename from mediagoblin/templates/mediagoblin/blog/blogpost_draft_view.html rename to mediagoblin/media_types/blog/templates/mediagoblin/blog/blogpost_draft_view.html From d0ba136f5552808270e11c7a02029e28fb3ebfcc Mon Sep 17 00:00:00 2001 From: Aditi Date: Thu, 8 Aug 2013 20:47:43 +0530 Subject: [PATCH 090/140] Make media_confirm_delete to work for failed media entries too. --- mediagoblin/user_pages/views.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index 596d4c20..e5930826 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -271,11 +271,25 @@ def media_collect(request, media): #TODO: Why does @user_may_delete_media not implicate @require_active_login? -@get_media_entry_by_id -@require_active_login -@user_may_delete_media -def media_confirm_delete(request, media): +@require_active_login +def media_confirm_delete(request): + + allowed_state = [u'processed', u'failed'] + for media_state in allowed_state: + media = request.db.MediaEntry.query.filter_by(id=request.matchdict['media_id'], state=media_state).first() + if not media: + return render_404(request) + + given_username = request.matchdict.get('user') + if given_username and (given_username != media.get_uploader.username): + return render_404(request) + + uploader_id = media.uploader + if not (request.user.is_admin or + request.user.id == uploader_id): + raise Forbidden() + form = user_forms.ConfirmDeleteForm(request.form) if request.method == 'POST' and form.validate(): From 382d2b4bd8c8e50f1014bbee2e5366a40521cc89 Mon Sep 17 00:00:00 2001 From: Aditi Date: Fri, 9 Aug 2013 11:07:09 +0530 Subject: [PATCH 091/140] Delete initial blog folder from plugin directory. --- mediagoblin/plugins/blog/LICENCE | 0 mediagoblin/plugins/blog/README.srt | 0 mediagoblin/plugins/blog/__init__.py | 0 mediagoblin/plugins/blog/forms.py | 17 ----------------- mediagoblin/plugins/blog/setup.py | 10 ---------- .../plugins/blog/templates/blogpost_edit.html | 19 ------------------- mediagoblin/plugins/blog/views.py | 16 ---------------- 7 files changed, 62 deletions(-) delete mode 100644 mediagoblin/plugins/blog/LICENCE delete mode 100644 mediagoblin/plugins/blog/README.srt delete mode 100644 mediagoblin/plugins/blog/__init__.py delete mode 100644 mediagoblin/plugins/blog/forms.py delete mode 100644 mediagoblin/plugins/blog/setup.py delete mode 100644 mediagoblin/plugins/blog/templates/blogpost_edit.html delete mode 100644 mediagoblin/plugins/blog/views.py diff --git a/mediagoblin/plugins/blog/LICENCE b/mediagoblin/plugins/blog/LICENCE deleted file mode 100644 index e69de29b..00000000 diff --git a/mediagoblin/plugins/blog/README.srt b/mediagoblin/plugins/blog/README.srt deleted file mode 100644 index e69de29b..00000000 diff --git a/mediagoblin/plugins/blog/__init__.py b/mediagoblin/plugins/blog/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/mediagoblin/plugins/blog/forms.py b/mediagoblin/plugins/blog/forms.py deleted file mode 100644 index 52af1cf1..00000000 --- a/mediagoblin/plugins/blog/forms.py +++ /dev/null @@ -1,17 +0,0 @@ -# GNU MediaGoblin -- federated, autonomous media hosting -# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . - -import wtforms diff --git a/mediagoblin/plugins/blog/setup.py b/mediagoblin/plugins/blog/setup.py deleted file mode 100644 index c4e0ee97..00000000 --- a/mediagoblin/plugins/blog/setup.py +++ /dev/null @@ -1,10 +0,0 @@ -from setuptools import setup, find_packages - -setup( - name = 'blog', - version = '1.0', - packages = find_packages(); - include_package_data = True, - install_requires = [], - license = 'AGPLv3', - ) diff --git a/mediagoblin/plugins/blog/templates/blogpost_edit.html b/mediagoblin/plugins/blog/templates/blogpost_edit.html deleted file mode 100644 index fec7a9c2..00000000 --- a/mediagoblin/plugins/blog/templates/blogpost_edit.html +++ /dev/null @@ -1,19 +0,0 @@ -{# -# GNU MediaGoblin -- federated, autonomous media hosting -# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . --#} -{% extends "mediagoblin/base.html" %} - diff --git a/mediagoblin/plugins/blog/views.py b/mediagoblin/plugins/blog/views.py deleted file mode 100644 index c4e8601d..00000000 --- a/mediagoblin/plugins/blog/views.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -# GNU MediaGoblin -- federated, autonomous media hosting -# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . From a590e0ba1780b7b5f0425c6d151e301f83e42600 Mon Sep 17 00:00:00 2001 From: Aditi Date: Fri, 9 Aug 2013 14:43:05 +0530 Subject: [PATCH 092/140] Write function get_blog_by_blogpost --- mediagoblin/media_types/blog/__init__.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mediagoblin/media_types/blog/__init__.py b/mediagoblin/media_types/blog/__init__.py index cb113ec0..ec6f68ec 100644 --- a/mediagoblin/media_types/blog/__init__.py +++ b/mediagoblin/media_types/blog/__init__.py @@ -19,6 +19,7 @@ import logging _log = logging.getLogger(__name__) from mediagoblin.media_types import MediaManagerBase +from mediagoblin.media_types.blog.models import Blog, BlogPostData from mediagoblin.tools import pluginapi @@ -76,6 +77,11 @@ class BlogPostMediaManager(MediaManagerBase): display_template = "mediagoblin/media_displays/blogpost.html" default_thumb = "images/media_thumbs/blogpost.jpg" + def get_blog_by_blogpost(self): + blog_post_data = BlogPostData.query.filter_by(media_entry=self.entry.id).first() + blog = Blog.query.filter_by(id=blog_post_data.blog).first() + return blog + def get_media_type_and_manager(): return MEDIA_TYPE, BlogPostMediaManager From dee425d26c103b6fa0fbec827b5e40c53559753d Mon Sep 17 00:00:00 2001 From: Aditi Date: Fri, 9 Aug 2013 14:45:06 +0530 Subject: [PATCH 093/140] Replace edit blogpost url from default media_edit url to blogpost edit url. --- .../templates/mediagoblin/user_pages/blog_media.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mediagoblin/templates/mediagoblin/user_pages/blog_media.html b/mediagoblin/templates/mediagoblin/user_pages/blog_media.html index 978bf944..25dd4783 100644 --- a/mediagoblin/templates/mediagoblin/user_pages/blog_media.html +++ b/mediagoblin/templates/mediagoblin/user_pages/blog_media.html @@ -70,9 +70,9 @@ {% if request.user and (media.uploader == request.user.id or request.user.is_admin) %} - {% set edit_url = request.urlgen('mediagoblin.edit.edit_media', - user= media.get_uploader.username, - media_id=media.id) %} + {% set edit_url = request.urlgen('mediagoblin.media_types.blog.blogpost.edit', + blog_slug=media.media_manager.get_blog_by_blogpost().slug, + user=request.user.username, blog_post_slug=media.slug) %} {% trans %}Edit{% endtrans %} {% set delete_url = request.urlgen('mediagoblin.user_pages.media_confirm_delete', user= media.get_uploader.username, From 97ce2563ed4fd4fa68a5d1e3db802e0d41d48a29 Mon Sep 17 00:00:00 2001 From: Aditi Date: Fri, 9 Aug 2013 15:05:20 +0530 Subject: [PATCH 094/140] Add delete error for failed type. --- mediagoblin/user_pages/views.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index e5930826..bac433ea 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -275,12 +275,16 @@ def media_collect(request, media): @require_active_login def media_confirm_delete(request): - allowed_state = [u'processed', u'failed'] + allowed_state = [u'failed', u'processed'] + media = None for media_state in allowed_state: media = request.db.MediaEntry.query.filter_by(id=request.matchdict['media_id'], state=media_state).first() + if media: + break + if not media: return render_404(request) - + given_username = request.matchdict.get('user') if given_username and (given_username != media.get_uploader.username): return render_404(request) From fca66242034598bcace21c8772035a16b723a43a Mon Sep 17 00:00:00 2001 From: Aditi Date: Sat, 10 Aug 2013 07:50:21 +0530 Subject: [PATCH 095/140] Remove extlib/tinymce submodule. --- .gitmodules | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitmodules b/.gitmodules index e6a7464c..95a76e1f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,4 @@ [submodule "extlib/pdf.js"] path = extlib/pdf.js url = git://github.com/mozilla/pdf.js.git + From e5c7e10f023e55d13d5b2c034882b453116d564d Mon Sep 17 00:00:00 2001 From: Aditi Date: Sat, 10 Aug 2013 16:14:04 +0530 Subject: [PATCH 096/140] Create symbolic link for tinymce. --- {mediagoblin/static => extlib}/tinymce/LICENSE.TXT | 0 .../static => extlib}/tinymce/changelog.txt | 0 .../tinymce/js/tinymce/langs/readme.md | 0 .../tinymce/js/tinymce/license.txt | 0 .../js/tinymce/plugins/advlist/plugin.min.js | 0 .../tinymce/js/tinymce/plugins/anchor/plugin.min.js | 0 .../js/tinymce/plugins/autolink/plugin.min.js | 0 .../js/tinymce/plugins/autoresize/plugin.min.js | 0 .../js/tinymce/plugins/autosave/plugin.min.js | 0 .../tinymce/js/tinymce/plugins/bbcode/plugin.min.js | 0 .../js/tinymce/plugins/charmap/plugin.min.js | 0 .../tinymce/js/tinymce/plugins/code/plugin.min.js | 0 .../js/tinymce/plugins/compat3x/editable_selects.js | 0 .../js/tinymce/plugins/compat3x/form_utils.js | 0 .../tinymce/js/tinymce/plugins/compat3x/mctabs.js | 0 .../js/tinymce/plugins/compat3x/tiny_mce_popup.js | 0 .../tinymce/js/tinymce/plugins/compat3x/validate.js | 0 .../js/tinymce/plugins/contextmenu/plugin.min.js | 0 .../js/tinymce/plugins/directionality/plugin.min.js | 0 .../tinymce/plugins/emoticons/img/smiley-cool.gif | Bin .../js/tinymce/plugins/emoticons/img/smiley-cry.gif | Bin .../plugins/emoticons/img/smiley-embarassed.gif | Bin .../plugins/emoticons/img/smiley-foot-in-mouth.gif | Bin .../tinymce/plugins/emoticons/img/smiley-frown.gif | Bin .../plugins/emoticons/img/smiley-innocent.gif | Bin .../tinymce/plugins/emoticons/img/smiley-kiss.gif | Bin .../plugins/emoticons/img/smiley-laughing.gif | Bin .../plugins/emoticons/img/smiley-money-mouth.gif | Bin .../tinymce/plugins/emoticons/img/smiley-sealed.gif | Bin .../tinymce/plugins/emoticons/img/smiley-smile.gif | Bin .../plugins/emoticons/img/smiley-surprised.gif | Bin .../plugins/emoticons/img/smiley-tongue-out.gif | Bin .../plugins/emoticons/img/smiley-undecided.gif | Bin .../tinymce/plugins/emoticons/img/smiley-wink.gif | Bin .../tinymce/plugins/emoticons/img/smiley-yell.gif | Bin .../js/tinymce/plugins/emoticons/plugin.min.js | 0 .../js/tinymce/plugins/example/plugin.min.js | 0 .../plugins/example_dependency/plugin.min.js | 0 .../js/tinymce/plugins/fullpage/plugin.min.js | 0 .../js/tinymce/plugins/fullscreen/plugin.min.js | 0 .../tinymce/js/tinymce/plugins/hr/plugin.min.js | 0 .../tinymce/js/tinymce/plugins/image/plugin.min.js | 0 .../js/tinymce/plugins/insertdatetime/plugin.min.js | 0 .../tinymce/js/tinymce/plugins/layer/plugin.min.js | 0 .../js/tinymce/plugins/legacyoutput/plugin.min.js | 0 .../tinymce/js/tinymce/plugins/link/plugin.min.js | 0 .../tinymce/js/tinymce/plugins/lists/plugin.min.js | 0 .../js/tinymce/plugins/media/moxieplayer.swf | Bin .../tinymce/js/tinymce/plugins/media/plugin.min.js | 0 .../js/tinymce/plugins/nonbreaking/plugin.min.js | 0 .../js/tinymce/plugins/noneditable/plugin.min.js | 0 .../js/tinymce/plugins/pagebreak/plugin.min.js | 0 .../tinymce/js/tinymce/plugins/paste/plugin.min.js | 0 .../js/tinymce/plugins/preview/plugin.min.js | 0 .../tinymce/js/tinymce/plugins/print/plugin.min.js | 0 .../tinymce/js/tinymce/plugins/save/plugin.min.js | 0 .../js/tinymce/plugins/searchreplace/plugin.min.js | 0 .../js/tinymce/plugins/spellchecker/plugin.min.js | 0 .../js/tinymce/plugins/tabfocus/plugin.min.js | 0 .../tinymce/js/tinymce/plugins/table/plugin.min.js | 0 .../js/tinymce/plugins/template/plugin.min.js | 0 .../js/tinymce/plugins/textcolor/plugin.min.js | 0 .../plugins/visualblocks/css/visualblocks.css | 0 .../js/tinymce/plugins/visualblocks/plugin.min.js | 0 .../js/tinymce/plugins/visualchars/plugin.min.js | 0 .../js/tinymce/plugins/wordcount/plugin.min.js | 0 .../tinymce/skins/lightgray/content.inline.min.css | 0 .../js/tinymce/skins/lightgray/content.min.css | 0 .../tinymce/skins/lightgray/fonts/icomoon-small.eot | Bin .../tinymce/skins/lightgray/fonts/icomoon-small.svg | 0 .../tinymce/skins/lightgray/fonts/icomoon-small.ttf | Bin .../skins/lightgray/fonts/icomoon-small.woff | Bin .../js/tinymce/skins/lightgray/fonts/icomoon.eot | Bin .../js/tinymce/skins/lightgray/fonts/icomoon.svg | 0 .../js/tinymce/skins/lightgray/fonts/icomoon.ttf | Bin .../js/tinymce/skins/lightgray/fonts/icomoon.woff | Bin .../js/tinymce/skins/lightgray/fonts/readme.md | 0 .../js/tinymce/skins/lightgray/img/anchor.gif | Bin .../js/tinymce/skins/lightgray/img/loader.gif | Bin .../js/tinymce/skins/lightgray/img/object.gif | Bin .../js/tinymce/skins/lightgray/img/trans.gif | Bin .../js/tinymce/skins/lightgray/img/wline.gif | Bin .../js/tinymce/skins/lightgray/skin.ie7.min.css | 0 .../tinymce/js/tinymce/skins/lightgray/skin.min.css | 0 .../tinymce/js/tinymce/themes/modern/theme.min.js | 0 .../tinymce/js/tinymce/tinymce.min.js | 0 mediagoblin/static/extlib/tinymce | 1 + 87 files changed, 1 insertion(+) rename {mediagoblin/static => extlib}/tinymce/LICENSE.TXT (100%) rename {mediagoblin/static => extlib}/tinymce/changelog.txt (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/langs/readme.md (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/license.txt (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/advlist/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/anchor/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/autolink/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/autoresize/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/autosave/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/bbcode/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/charmap/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/code/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/compat3x/editable_selects.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/compat3x/form_utils.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/compat3x/mctabs.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/compat3x/tiny_mce_popup.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/compat3x/validate.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/directionality/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/img/smiley-cool.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/img/smiley-cry.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/img/smiley-embarassed.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/img/smiley-frown.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/img/smiley-innocent.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/img/smiley-kiss.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/img/smiley-laughing.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/img/smiley-money-mouth.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/img/smiley-sealed.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/img/smiley-smile.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/img/smiley-surprised.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/img/smiley-tongue-out.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/img/smiley-undecided.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/img/smiley-wink.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/img/smiley-yell.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/emoticons/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/example/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/example_dependency/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/fullpage/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/hr/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/image/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/layer/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/link/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/lists/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/media/moxieplayer.swf (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/media/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/noneditable/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/paste/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/preview/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/print/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/save/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/table/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/template/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/textcolor/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/visualblocks/css/visualblocks.css (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/visualchars/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/plugins/wordcount/plugin.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/content.inline.min.css (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/content.min.css (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.eot (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.svg (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.ttf (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.woff (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.eot (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.svg (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.ttf (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.woff (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/fonts/readme.md (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/img/anchor.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/img/loader.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/img/object.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/img/trans.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/img/wline.gif (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/skin.ie7.min.css (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/skins/lightgray/skin.min.css (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/themes/modern/theme.min.js (100%) rename {mediagoblin/static => extlib}/tinymce/js/tinymce/tinymce.min.js (100%) create mode 120000 mediagoblin/static/extlib/tinymce diff --git a/mediagoblin/static/tinymce/LICENSE.TXT b/extlib/tinymce/LICENSE.TXT similarity index 100% rename from mediagoblin/static/tinymce/LICENSE.TXT rename to extlib/tinymce/LICENSE.TXT diff --git a/mediagoblin/static/tinymce/changelog.txt b/extlib/tinymce/changelog.txt similarity index 100% rename from mediagoblin/static/tinymce/changelog.txt rename to extlib/tinymce/changelog.txt diff --git a/mediagoblin/static/tinymce/js/tinymce/langs/readme.md b/extlib/tinymce/js/tinymce/langs/readme.md similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/langs/readme.md rename to extlib/tinymce/js/tinymce/langs/readme.md diff --git a/mediagoblin/static/tinymce/js/tinymce/license.txt b/extlib/tinymce/js/tinymce/license.txt similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/license.txt rename to extlib/tinymce/js/tinymce/license.txt diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/advlist/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/advlist/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/advlist/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/advlist/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/anchor/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/anchor/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/anchor/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/anchor/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/autolink/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/autolink/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/autolink/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/autolink/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/autoresize/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/autoresize/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/autoresize/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/autoresize/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/autosave/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/autosave/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/autosave/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/autosave/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/bbcode/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/bbcode/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/bbcode/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/bbcode/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/charmap/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/charmap/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/charmap/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/charmap/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/code/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/code/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/code/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/code/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/compat3x/editable_selects.js b/extlib/tinymce/js/tinymce/plugins/compat3x/editable_selects.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/compat3x/editable_selects.js rename to extlib/tinymce/js/tinymce/plugins/compat3x/editable_selects.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/compat3x/form_utils.js b/extlib/tinymce/js/tinymce/plugins/compat3x/form_utils.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/compat3x/form_utils.js rename to extlib/tinymce/js/tinymce/plugins/compat3x/form_utils.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/compat3x/mctabs.js b/extlib/tinymce/js/tinymce/plugins/compat3x/mctabs.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/compat3x/mctabs.js rename to extlib/tinymce/js/tinymce/plugins/compat3x/mctabs.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/compat3x/tiny_mce_popup.js b/extlib/tinymce/js/tinymce/plugins/compat3x/tiny_mce_popup.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/compat3x/tiny_mce_popup.js rename to extlib/tinymce/js/tinymce/plugins/compat3x/tiny_mce_popup.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/compat3x/validate.js b/extlib/tinymce/js/tinymce/plugins/compat3x/validate.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/compat3x/validate.js rename to extlib/tinymce/js/tinymce/plugins/compat3x/validate.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/directionality/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/directionality/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/directionality/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/directionality/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-cool.gif b/extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-cool.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-cool.gif rename to extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-cool.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-cry.gif b/extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-cry.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-cry.gif rename to extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-cry.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-embarassed.gif b/extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-embarassed.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-embarassed.gif rename to extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-embarassed.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif b/extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif rename to extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-frown.gif b/extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-frown.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-frown.gif rename to extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-frown.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-innocent.gif b/extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-innocent.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-innocent.gif rename to extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-innocent.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-kiss.gif b/extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-kiss.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-kiss.gif rename to extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-kiss.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-laughing.gif b/extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-laughing.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-laughing.gif rename to extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-laughing.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-money-mouth.gif b/extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-money-mouth.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-money-mouth.gif rename to extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-money-mouth.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-sealed.gif b/extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-sealed.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-sealed.gif rename to extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-sealed.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-smile.gif b/extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-smile.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-smile.gif rename to extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-smile.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-surprised.gif b/extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-surprised.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-surprised.gif rename to extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-surprised.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-tongue-out.gif b/extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-tongue-out.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-tongue-out.gif rename to extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-tongue-out.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-undecided.gif b/extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-undecided.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-undecided.gif rename to extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-undecided.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-wink.gif b/extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-wink.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-wink.gif rename to extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-wink.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-yell.gif b/extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-yell.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/img/smiley-yell.gif rename to extlib/tinymce/js/tinymce/plugins/emoticons/img/smiley-yell.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/emoticons/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/emoticons/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/emoticons/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/example/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/example/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/example/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/example/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/example_dependency/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/example_dependency/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/example_dependency/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/example_dependency/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/fullpage/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/fullpage/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/fullpage/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/fullpage/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/hr/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/hr/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/hr/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/hr/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/image/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/image/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/image/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/image/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/insertdatetime/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/layer/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/layer/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/layer/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/layer/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/legacyoutput/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/link/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/link/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/link/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/link/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/lists/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/lists/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/lists/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/lists/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/media/moxieplayer.swf b/extlib/tinymce/js/tinymce/plugins/media/moxieplayer.swf similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/media/moxieplayer.swf rename to extlib/tinymce/js/tinymce/plugins/media/moxieplayer.swf diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/media/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/media/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/media/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/media/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/noneditable/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/noneditable/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/noneditable/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/noneditable/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/paste/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/paste/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/paste/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/paste/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/preview/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/preview/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/preview/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/preview/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/print/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/print/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/print/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/print/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/save/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/save/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/save/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/save/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/searchreplace/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/spellchecker/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/table/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/table/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/table/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/table/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/template/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/template/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/template/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/template/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/textcolor/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/textcolor/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/textcolor/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/textcolor/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/visualblocks/css/visualblocks.css b/extlib/tinymce/js/tinymce/plugins/visualblocks/css/visualblocks.css similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/visualblocks/css/visualblocks.css rename to extlib/tinymce/js/tinymce/plugins/visualblocks/css/visualblocks.css diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/visualchars/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/visualchars/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/visualchars/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/visualchars/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/plugins/wordcount/plugin.min.js b/extlib/tinymce/js/tinymce/plugins/wordcount/plugin.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/plugins/wordcount/plugin.min.js rename to extlib/tinymce/js/tinymce/plugins/wordcount/plugin.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/content.inline.min.css b/extlib/tinymce/js/tinymce/skins/lightgray/content.inline.min.css similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/content.inline.min.css rename to extlib/tinymce/js/tinymce/skins/lightgray/content.inline.min.css diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/content.min.css b/extlib/tinymce/js/tinymce/skins/lightgray/content.min.css similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/content.min.css rename to extlib/tinymce/js/tinymce/skins/lightgray/content.min.css diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.eot b/extlib/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.eot similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.eot rename to extlib/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.eot diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.svg b/extlib/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.svg similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.svg rename to extlib/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.svg diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.ttf b/extlib/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.ttf similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.ttf rename to extlib/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.ttf diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.woff b/extlib/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.woff similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.woff rename to extlib/tinymce/js/tinymce/skins/lightgray/fonts/icomoon-small.woff diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.eot b/extlib/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.eot similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.eot rename to extlib/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.eot diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.svg b/extlib/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.svg similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.svg rename to extlib/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.svg diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.ttf b/extlib/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.ttf similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.ttf rename to extlib/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.ttf diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.woff b/extlib/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.woff similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.woff rename to extlib/tinymce/js/tinymce/skins/lightgray/fonts/icomoon.woff diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/readme.md b/extlib/tinymce/js/tinymce/skins/lightgray/fonts/readme.md similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/fonts/readme.md rename to extlib/tinymce/js/tinymce/skins/lightgray/fonts/readme.md diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/img/anchor.gif b/extlib/tinymce/js/tinymce/skins/lightgray/img/anchor.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/img/anchor.gif rename to extlib/tinymce/js/tinymce/skins/lightgray/img/anchor.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/img/loader.gif b/extlib/tinymce/js/tinymce/skins/lightgray/img/loader.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/img/loader.gif rename to extlib/tinymce/js/tinymce/skins/lightgray/img/loader.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/img/object.gif b/extlib/tinymce/js/tinymce/skins/lightgray/img/object.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/img/object.gif rename to extlib/tinymce/js/tinymce/skins/lightgray/img/object.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/img/trans.gif b/extlib/tinymce/js/tinymce/skins/lightgray/img/trans.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/img/trans.gif rename to extlib/tinymce/js/tinymce/skins/lightgray/img/trans.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/img/wline.gif b/extlib/tinymce/js/tinymce/skins/lightgray/img/wline.gif similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/img/wline.gif rename to extlib/tinymce/js/tinymce/skins/lightgray/img/wline.gif diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/skin.ie7.min.css b/extlib/tinymce/js/tinymce/skins/lightgray/skin.ie7.min.css similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/skin.ie7.min.css rename to extlib/tinymce/js/tinymce/skins/lightgray/skin.ie7.min.css diff --git a/mediagoblin/static/tinymce/js/tinymce/skins/lightgray/skin.min.css b/extlib/tinymce/js/tinymce/skins/lightgray/skin.min.css similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/skins/lightgray/skin.min.css rename to extlib/tinymce/js/tinymce/skins/lightgray/skin.min.css diff --git a/mediagoblin/static/tinymce/js/tinymce/themes/modern/theme.min.js b/extlib/tinymce/js/tinymce/themes/modern/theme.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/themes/modern/theme.min.js rename to extlib/tinymce/js/tinymce/themes/modern/theme.min.js diff --git a/mediagoblin/static/tinymce/js/tinymce/tinymce.min.js b/extlib/tinymce/js/tinymce/tinymce.min.js similarity index 100% rename from mediagoblin/static/tinymce/js/tinymce/tinymce.min.js rename to extlib/tinymce/js/tinymce/tinymce.min.js diff --git a/mediagoblin/static/extlib/tinymce b/mediagoblin/static/extlib/tinymce new file mode 120000 index 00000000..debf6e2e --- /dev/null +++ b/mediagoblin/static/extlib/tinymce @@ -0,0 +1 @@ +../../../extlib/tinymce \ No newline at end of file From db600404a4c37ffd909ba6513847cd612de55f3e Mon Sep 17 00:00:00 2001 From: Aditi Date: Sat, 10 Aug 2013 16:17:09 +0530 Subject: [PATCH 097/140] Change button names to Save and Blog. --- .../blog/templates/mediagoblin/blog/blog_post_edit_create.html | 2 +- mediagoblin/templates/mediagoblin/base.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mediagoblin/media_types/blog/templates/mediagoblin/blog/blog_post_edit_create.html b/mediagoblin/media_types/blog/templates/mediagoblin/blog/blog_post_edit_create.html index 8a5fbcb8..c5620c56 100644 --- a/mediagoblin/media_types/blog/templates/mediagoblin/blog/blog_post_edit_create.html +++ b/mediagoblin/media_types/blog/templates/mediagoblin/blog/blog_post_edit_create.html @@ -46,7 +46,7 @@
{{ csrf_token }} - +
diff --git a/mediagoblin/templates/mediagoblin/base.html b/mediagoblin/templates/mediagoblin/base.html index 5ff72243..13566583 100644 --- a/mediagoblin/templates/mediagoblin/base.html +++ b/mediagoblin/templates/mediagoblin/base.html @@ -111,7 +111,7 @@ - {%- trans %}Start Blogging{% endtrans -%} + {%- trans %} Blog {% endtrans -%} {% if request.user.is_admin %}

From e018b2120ac4131afab6611c84f8cfbe0926e640 Mon Sep 17 00:00:00 2001 From: Aditi Date: Sat, 10 Aug 2013 16:18:30 +0530 Subject: [PATCH 098/140] Change path for tinymce. --- mediagoblin/templates/mediagoblin/extra_head.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediagoblin/templates/mediagoblin/extra_head.html b/mediagoblin/templates/mediagoblin/extra_head.html index f350774e..847cfcc7 100644 --- a/mediagoblin/templates/mediagoblin/extra_head.html +++ b/mediagoblin/templates/mediagoblin/extra_head.html @@ -19,7 +19,7 @@ {# Add extra head declarations here for your theme, if appropriate #} + src="{{request.staticdirect('extlib/tinymce/js/tinymce/tinymce.min.js')}}">