From edffa735123a967ba9dde17e0be7e71c59572143 Mon Sep 17 00:00:00 2001
From: Don Mitchell
Date: Mon, 29 Sep 2014 11:47:58 -0400
Subject: [PATCH 1/7] Convert acceptance to opaque keys
---
.../courseware/features/certificates.py | 31 +++++++++----------
lms/djangoapps/courseware/features/common.py | 1 -
.../courseware/features/conditional.py | 1 +
.../courseware/features/lti.feature | 8 ++---
lms/djangoapps/courseware/features/lti.py | 29 ++++++-----------
.../courseware/features/navigation.py | 7 ++---
.../courseware/features/problems.py | 2 --
.../courseware/features/problems_setup.py | 20 ++++++------
.../instructor/features/bulk_email.py | 7 +++--
lms/djangoapps/instructor/features/common.py | 5 ++-
.../instructor/features/data_download.py | 9 +++---
11 files changed, 53 insertions(+), 67 deletions(-)
diff --git a/lms/djangoapps/courseware/features/certificates.py b/lms/djangoapps/courseware/features/certificates.py
index fe995c9a3a..6890270a23 100644
--- a/lms/djangoapps/courseware/features/certificates.py
+++ b/lms/djangoapps/courseware/features/certificates.py
@@ -3,22 +3,20 @@
from lettuce import world, step
from lettuce.django import django_url
-from course_modes.models import CourseMode
from nose.tools import assert_equal
-UPSELL_LINK_CSS = '.message-upsell a.action-upgrade[href*="edx/999/Certificates"]'
-
def create_cert_course():
world.clear_courses()
org = 'edx'
number = '999'
name = 'Certificates'
- course_id = '{org}/{number}/{name}'.format(
- org=org, number=number, name=name)
- world.scenario_dict['course_id'] = course_id
world.scenario_dict['COURSE'] = world.CourseFactory.create(
org=org, number=number, display_name=name)
+ world.scenario_dict['course_id'] = world.scenario_dict['COURSE'].id
+ world.UPSELL_LINK_CSS = u'.message-upsell a.action-upgrade[href*="{}"]'.format(
+ world.scenario_dict['course_id']
+ )
honor_mode = world.CourseModeFactory.create(
course_id=world.scenario_dict['course_id'],
@@ -28,7 +26,7 @@ def create_cert_course():
)
verfied_mode = world.CourseModeFactory.create(
- course_id=course_id,
+ course_id=world.scenario_dict['course_id'],
mode_slug='verified',
mode_display_name='verified cert course',
min_price=16,
@@ -38,8 +36,7 @@ def create_cert_course():
def register():
- url = 'courses/{org}/{number}/{name}/about'.format(
- org='edx', number='999', name='Certificates')
+ url = u'courses/{}/about'.format(world.scenario_dict['course_id'])
world.browser.visit(django_url(url))
world.css_click('section.intro a.register')
@@ -147,7 +144,7 @@ def approve_my_photo(step, name):
# HACK: for now don't bother clicking the approve button for
# id_photo, because it is sending you back to Step 1.
# Come back and figure it out later. JZ Aug 29 2013
- if name=='face':
+ if name == 'face':
world.css_click(button_css[name])
# Make sure you didn't advance the carousel
@@ -234,27 +231,27 @@ def navigate_to_my_dashboard(step):
@step(u'I see the course on my dashboard')
def see_the_course_on_my_dashboard(step):
- course_link_css = 'section.my-courses a[href*="edx/999/Certificates"]'
+ course_link_css = u'section.my-courses a[href*="{}"]'.format(world.scenario_dict['course_id'])
assert world.is_css_present(course_link_css)
@step(u'I see the upsell link on my dashboard')
def see_upsell_link_on_my_dashboard(step):
- course_link_css = UPSELL_LINK_CSS
+ course_link_css = world.UPSELL_LINK_CSS
assert world.is_css_present(course_link_css)
@step(u'I do not see the upsell link on my dashboard')
-def see_upsell_link_on_my_dashboard(step):
- course_link_css = UPSELL_LINK_CSS
+def see_no_upsell_link(step):
+ course_link_css = world.UPSELL_LINK_CSS
assert world.is_css_not_present(course_link_css)
@step(u'I select the upsell link on my dashboard')
-def see_upsell_link_on_my_dashboard(step):
+def select_upsell_link_on_my_dashboard(step):
# expand the upsell section
world.css_click('.message-upsell')
- course_link_css = UPSELL_LINK_CSS
+ course_link_css = world.UPSELL_LINK_CSS
# click the actual link
world.css_click(course_link_css)
@@ -267,7 +264,7 @@ def see_that_i_am_on_the_verified_track(step):
@step(u'I leave the flow and return$')
def leave_the_flow_and_return(step):
- world.visit('verify_student/verified/edx/999/Certificates/')
+ world.visit(u'verify_student/verified/{}/'.format(world.scenario_dict['course_id']))
@step(u'I am at the verified page$')
diff --git a/lms/djangoapps/courseware/features/common.py b/lms/djangoapps/courseware/features/common.py
index 130f1e80e2..dde91c69b5 100644
--- a/lms/djangoapps/courseware/features/common.py
+++ b/lms/djangoapps/courseware/features/common.py
@@ -11,7 +11,6 @@ from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from student.models import CourseEnrollment
from xmodule.modulestore.django import modulestore
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
from xmodule.course_module import CourseDescriptor
from courseware.courses import get_course_by_id
from xmodule import seq_module, vertical_module
diff --git a/lms/djangoapps/courseware/features/conditional.py b/lms/djangoapps/courseware/features/conditional.py
index 74ada169f3..de7d5fb7a5 100644
--- a/lms/djangoapps/courseware/features/conditional.py
+++ b/lms/djangoapps/courseware/features/conditional.py
@@ -7,6 +7,7 @@ from nose.tools import assert_in, assert_true # pylint: disable=no-name-in-modu
from common import i_am_registered_for_the_course, visit_scenario_item
from problems_setup import add_problem_to_course, answer_problem
+
@steps
class ConditionalSteps(object):
COURSE_NUM = 'test_course'
diff --git a/lms/djangoapps/courseware/features/lti.feature b/lms/djangoapps/courseware/features/lti.feature
index 6beac25ac3..ea34a7bb56 100644
--- a/lms/djangoapps/courseware/features/lti.feature
+++ b/lms/djangoapps/courseware/features/lti.feature
@@ -44,7 +44,7 @@ Feature: LMS.LTI component
Scenario: Graded LTI component in LMS is correctly works
Given the course has correct LTI credentials with registered Instructor
And the course has an LTI component with correct fields:
- | open_in_a_new_page | weight | is_graded | has_score |
+ | open_in_a_new_page | weight | graded | has_score |
| False | 10 | True | True |
And I submit answer to LTI 1 question
And I click on the "Progress" tab
@@ -71,7 +71,7 @@ Feature: LMS.LTI component
Scenario: Graded LTI component in LMS is correctly works with beta testers
Given the course has correct LTI credentials with registered BetaTester
And the course has an LTI component with correct fields:
- | open_in_a_new_page | weight | is_graded | has_score |
+ | open_in_a_new_page | weight | graded | has_score |
| False | 10 | True | True |
And I submit answer to LTI 1 question
And I click on the "Progress" tab
@@ -82,7 +82,7 @@ Feature: LMS.LTI component
Scenario: Graded LTI component in LMS is correctly works with LTI2v0 PUT callback
Given the course has correct LTI credentials with registered Instructor
And the course has an LTI component with correct fields:
- | open_in_a_new_page | weight | is_graded | has_score |
+ | open_in_a_new_page | weight | graded | has_score |
| False | 10 | True | True |
And I submit answer to LTI 2 question
And I click on the "Progress" tab
@@ -101,7 +101,7 @@ Feature: LMS.LTI component
Scenario: Graded LTI component in LMS is correctly works with LTI2v0 PUT delete callback
Given the course has correct LTI credentials with registered Instructor
And the course has an LTI component with correct fields:
- | open_in_a_new_page | weight | is_graded | has_score |
+ | open_in_a_new_page | weight | graded | has_score |
| False | 10 | True | True |
And I submit answer to LTI 2 question
And I visit the LTI component
diff --git a/lms/djangoapps/courseware/features/lti.py b/lms/djangoapps/courseware/features/lti.py
index a365749a61..e6b5c745b0 100644
--- a/lms/djangoapps/courseware/features/lti.py
+++ b/lms/djangoapps/courseware/features/lti.py
@@ -13,7 +13,7 @@ from courseware.tests.factories import InstructorFactory, BetaTesterFactory
from courseware.access import has_access
from student.tests.factories import UserFactory
-from common import course_id, visit_scenario_item
+from common import visit_scenario_item
@step('I view the LTI and error is shown$')
@@ -29,7 +29,7 @@ def lti_is_not_rendered(_step):
def check_lti_iframe_content(text):
- #inside iframe test content is presented
+ # inside iframe test content is presented
location = world.scenario_dict['LTI'].location.html_id()
iframe_name = 'ltiFrame-' + location
with world.browser.get_iframe(iframe_name) as iframe:
@@ -95,7 +95,7 @@ def incorrect_lti_is_rendered(_step):
assert not world.is_css_present('.link_lti_new_window', wait_time=0)
assert not world.is_css_present('.error_message', wait_time=0)
- #inside iframe test content is presented
+ # inside iframe test content is presented
check_lti_iframe_content("Wrong LTI signature")
@@ -119,7 +119,7 @@ def set_incorrect_lti_passport(_step):
i_am_registered_for_the_course(coursenum, metadata)
-@step('the course has an LTI component with (.*) fields(?:\:)?$') #, new_page is(.*), is_graded is(.*)
+@step('the course has an LTI component with (.*) fields(?:\:)?$') # , new_page is(.*), graded is(.*)
def add_correct_lti_to_course(_step, fields):
category = 'lti'
metadata = {
@@ -176,7 +176,6 @@ def create_course_for_lti(course, metadata):
},
]
}
- metadata.update(grading_policy)
# Create the course
# We always use the same org and display name,
@@ -186,17 +185,7 @@ def create_course_for_lti(course, metadata):
number=course,
display_name='Test Course',
metadata=metadata,
- grading_policy={
- "GRADER": [
- {
- "type": "Homework",
- "min_count": 1,
- "drop_count": 0,
- "short_label": "HW",
- "weight": weight
- },
- ]
- },
+ grading_policy=grading_policy,
)
# Add a section to the course to contain problems
@@ -248,7 +237,7 @@ def check_lti_popup(parent_window):
assert len(world.browser.windows) != 1
for window in world.browser.windows:
- world.browser.switch_to_window(window) # Switch to a different window (the pop-up)
+ world.browser.switch_to_window(window) # Switch to a different window (the pop-up)
# Check if this is the one we want by comparing the url
url = world.browser.url
basename = os.path.basename(url)
@@ -260,8 +249,8 @@ def check_lti_popup(parent_window):
assert result == u'This is LTI tool. Success.'
- world.browser.driver.close() # Close the pop-up window
- world.browser.switch_to_window(parent_window) # Switch to the main window again
+ world.browser.driver.close() # Close the pop-up window
+ world.browser.switch_to_window(parent_window) # Switch to the main window again
def click_and_check_lti_popup():
@@ -314,7 +303,7 @@ def see_value_in_the_gradebook(_step, label, text):
for i, element in enumerate(table_headers):
if element.text.strip() == label:
index = i
- break;
+ break
assert_true(world.css_has_text('{0} tbody td'.format(table_selector), text, index=index))
diff --git a/lms/djangoapps/courseware/features/navigation.py b/lms/djangoapps/courseware/features/navigation.py
index 7d05461fbc..5c7f18c412 100644
--- a/lms/djangoapps/courseware/features/navigation.py
+++ b/lms/djangoapps/courseware/features/navigation.py
@@ -2,10 +2,9 @@
# pylint: disable=W0621
from lettuce import world, step
-from common import course_id, course_location
+from common import course_location
from problems_setup import PROBLEM_DICT
from nose.tools import assert_in
-from opaque_keys.edx.locations import SlashSeparatedCourseKey
@step(u'I am viewing a course with multiple sections')
@@ -149,9 +148,9 @@ def create_course():
def create_user_and_visit_course():
- world.register_by_course_key(SlashSeparatedCourseKey('edx', '999', 'Test_Course'))
+ world.register_by_course_key(world.scenario_dict['COURSE'].id)
world.log_in()
- world.visit('/courses/edx/999/Test_Course/courseware/')
+ world.visit(u'/courses/{}/courseware/'.format(world.scenario_dict['COURSE'].id))
def add_problem_to_course_section(parent_location, display_name):
diff --git a/lms/djangoapps/courseware/features/problems.py b/lms/djangoapps/courseware/features/problems.py
index 165c115da7..6e31af897c 100644
--- a/lms/djangoapps/courseware/features/problems.py
+++ b/lms/djangoapps/courseware/features/problems.py
@@ -6,10 +6,8 @@ Steps for problem.feature lettuce tests
# pylint: disable=W0621
from lettuce import world, step
-from lettuce.django import django_url
from common import i_am_registered_for_the_course, visit_scenario_item
from problems_setup import PROBLEM_DICT, answer_problem, problem_has_answer, add_problem_to_course
-from nose.tools import assert_equal
def _view_problem(step, problem_type, problem_settings=None):
diff --git a/lms/djangoapps/courseware/features/problems_setup.py b/lms/djangoapps/courseware/features/problems_setup.py
index 1ab31f981c..15dfbb29f7 100644
--- a/lms/djangoapps/courseware/features/problems_setup.py
+++ b/lms/djangoapps/courseware/features/problems_setup.py
@@ -1,7 +1,7 @@
# pylint: disable=C0111
# pylint: disable=W0621
-#EVERY PROBLEM TYPE MUST HAVE THE FOLLOWING:
+# EVERY PROBLEM TYPE MUST HAVE THE FOLLOWING:
# -Section in Dictionary containing:
# -factory
# -kwargs
@@ -187,7 +187,9 @@ def answer_problem(course, problem_type, correctness):
section_loc = section_location(course)
if problem_type == "drop down":
- select_name = "input_i4x-{0.org}-{0.course}-problem-drop_down_2_1".format(section_loc)
+ select_name = "input_{}_2_1".format(
+ section_loc.course_key.make_usage_key('problem', 'drop_down').html_id()
+ )
option_text = 'Option 2' if correctness == 'correct' else 'Option 3'
world.select_option(select_name, option_text)
@@ -263,8 +265,9 @@ def answer_problem(course, problem_type, correctness):
offset = 25 if correctness == "correct" else -25
def try_click():
- image_selector = "#imageinput_i4x-{0.org}-{0.course}-problem-image_2_1".format(section_loc)
- input_selector = "#input_i4x-{0.org}-{0.course}-problem-image_2_1".format(section_loc)
+ problem_html_loc = section_loc.course_key.make_usage_key('problem', 'image').html_id()
+ image_selector = "#imageinput_{}_2_1".format(problem_html_loc)
+ input_selector = "#input_{}_2_1".format(problem_html_loc)
world.browser.execute_script('$("body").on("click", function(event) {console.log(event);})')
@@ -385,16 +388,15 @@ def inputfield(course, problem_type, choice=None, input_num=1):
section_loc = section_location(course)
+ ptype = problem_type.replace(" ", "_")
# this is necessary due to naming requirement for this problem type
if problem_type in ("radio_text", "checkbox_text"):
- selector_template = "input#i4x-{org}-{course}-problem-{ptype}_2_{input}"
+ selector_template = "input#{}_2_{input}"
else:
- selector_template = "input#input_i4x-{org}-{course}-problem-{ptype}_2_{input}"
+ selector_template = "input#input_{}_2_{input}"
sel = selector_template.format(
- org=section_loc.org,
- course=section_loc.course,
- ptype=problem_type.replace(" ", "_"),
+ section_loc.course_key.make_usage_key('problem', ptype).html_id(),
input=input_num,
)
diff --git a/lms/djangoapps/instructor/features/bulk_email.py b/lms/djangoapps/instructor/features/bulk_email.py
index 00cdef6f58..473851022f 100644
--- a/lms/djangoapps/instructor/features/bulk_email.py
+++ b/lms/djangoapps/instructor/features/bulk_email.py
@@ -7,7 +7,7 @@ Define steps for bulk email acceptance test.
from lettuce import world, step
from lettuce.django import mail
-from nose.tools import assert_in, assert_true, assert_equal # pylint: disable=E0611
+from nose.tools import assert_in, assert_equal # pylint: disable=E0611
from django.core.management import call_command
from django.conf import settings
@@ -115,8 +115,9 @@ def when_i_send_an_email(step, recipient): # pylint: disable=unused-argument
call_command('loaddata', 'course_email_template.json')
# Go to the email section of the instructor dash
- world.visit('/courses/edx/888/Bulk_Email_Test_Course')
- world.css_click('a[href="/courses/edx/888/Bulk_Email_Test_Course/instructor"]')
+ url = '/courses/{}'.format(world.bulk_email_course_key)
+ world.visit(url)
+ world.css_click('a[href="{}/instructor"]'.format(url))
world.css_click('a[data-section="send_email"]')
# Select the recipient
diff --git a/lms/djangoapps/instructor/features/common.py b/lms/djangoapps/instructor/features/common.py
index c6bf6f45c7..386305b1fb 100644
--- a/lms/djangoapps/instructor/features/common.py
+++ b/lms/djangoapps/instructor/features/common.py
@@ -7,7 +7,6 @@ Define common steps for instructor dashboard acceptance tests.
from __future__ import absolute_import
-from django.conf import settings
from lettuce import world, step
from mock import patch
from nose.tools import assert_in # pylint: disable=E0611
@@ -75,8 +74,8 @@ def i_am_staff_or_instructor(step, role): # pylint: disable=unused-argument
def go_to_section(section_name):
# section name should be one of
# course_info, membership, student_admin, data_download, analytics, send_email
- world.visit('/courses/edx/999/Test_Course')
- world.css_click('a[href="/courses/edx/999/Test_Course/instructor"]')
+ world.visit(u'/courses/{}'.format(world.course_key))
+ world.css_click(u'a[href="/courses/{}/instructor"]'.format(world.course_key))
world.css_click('a[data-section="{0}"]'.format(section_name))
diff --git a/lms/djangoapps/instructor/features/data_download.py b/lms/djangoapps/instructor/features/data_download.py
index 6d08551781..6df3403e7e 100644
--- a/lms/djangoapps/instructor/features/data_download.py
+++ b/lms/djangoapps/instructor/features/data_download.py
@@ -9,7 +9,7 @@ acceptance tests.
from lettuce import world, step
from nose.tools import assert_in, assert_regexp_matches # pylint: disable=E0611
from terrain.steps import reload_the_page
-from splinter.request_handler.request_handler import RequestHandler
+from django.utils import http
@step(u'I see a table of student profiles')
@@ -60,11 +60,11 @@ Graded sections:
subgrader=, type=Midterm Exam, category=Midterm Exam, weight=0.3
subgrader=, type=Final Exam, category=Final Exam, weight=0.4
-----------------------------------------------------------------------------
-Listing grading context for course edx/999/Test_Course
+Listing grading context for course {}
graded sections:
[]
all descriptors:
-length=0"""
+length=0""".format(world.course_key)
assert_in(expected_config, world.css_text('#data-grade-config-text'))
@@ -74,7 +74,8 @@ def find_grade_report_csv_link(step): # pylint: disable=unused-argument
reload_the_page(step)
world.wait_for_visible('#report-downloads-table')
# Find table and assert a .csv file is present
- expected_file_regexp = 'edx_999_Test_Course_grade_report_\d{4}-\d{2}-\d{2}-\d{4}\.csv'
+ quoted_id = http.urlquote(world.course_key).replace('/', '_')
+ expected_file_regexp = quoted_id + '_grade_report_\d{4}-\d{2}-\d{2}-\d{4}\.csv'
assert_regexp_matches(
world.css_html('#report-downloads-table'), expected_file_regexp,
msg="Expected grade report filename was not found."
From fd6c9bed287b7cc8cac55b2f28f8821dc931ae65 Mon Sep 17 00:00:00 2001
From: John Eskew
Date: Mon, 29 Sep 2014 17:23:57 -0400
Subject: [PATCH 2/7] Fix course export/updates and upload CMS acceptance
tests.
---
.../contentstore/features/course-export.py | 4 ++--
.../features/course-updates.feature | 12 ++++++------
.../contentstore/features/course-updates.py | 17 +++++++++++++++++
cms/djangoapps/contentstore/features/upload.py | 8 +++++++-
4 files changed, 32 insertions(+), 9 deletions(-)
diff --git a/cms/djangoapps/contentstore/features/course-export.py b/cms/djangoapps/contentstore/features/course-export.py
index 2232f9801e..9ae6eead3e 100644
--- a/cms/djangoapps/contentstore/features/course-export.py
+++ b/cms/djangoapps/contentstore/features/course-export.py
@@ -60,10 +60,10 @@ def i_click_on_error_dialog(step):
))
# we don't know the actual ID of the vertical. So just check that we did go to a
# vertical page in the course (there should only be one).
- vertical_usage_key = world.scenario_dict['COURSE'].id.make_usage_key("vertical", None)
+ vertical_usage_key = world.scenario_dict['COURSE'].id.make_usage_key("vertical", "test")
vertical_url = reverse_usage_url('container_handler', vertical_usage_key)
# Remove the trailing "/None" from the URL - we don't know the course ID, so we just want to
# check that we visited a vertical URL.
- if vertical_url.endswith("/None"):
+ if vertical_url.endswith("/test") or vertical_url.endswith("@test"):
vertical_url = vertical_url[:-5]
assert_equal(1, world.browser.url.count(vertical_url))
diff --git a/cms/djangoapps/contentstore/features/course-updates.feature b/cms/djangoapps/contentstore/features/course-updates.feature
index 152da9c349..e15376ca29 100644
--- a/cms/djangoapps/contentstore/features/course-updates.feature
+++ b/cms/djangoapps/contentstore/features/course-updates.feature
@@ -60,22 +60,22 @@ Feature: CMS.Course updates
And I go to the course updates page
When I add a new update with the text "
"
# Can only do partial text matches because of the quotes with in quotes (and regexp step matching).
- Then I should see the update "/c4x/MITx/999/asset/my_img.jpg"
+ Then I should see the asset update to "my_img.jpg"
And I change the update from "/static/my_img.jpg" to "
"
- Then I should see the update "/c4x/MITx/999/asset/modified.jpg"
+ Then I should see the asset update to "modified.jpg"
And when I reload the page
- Then I should see the update "/c4x/MITx/999/asset/modified.jpg"
+ Then I should see the asset update to "modified.jpg"
Scenario: Static links are rewritten when previewing handouts
Given I have opened a new course in Studio
And I go to the course updates page
When I modify the handout to "
"
# Can only do partial text matches because of the quotes with in quotes (and regexp step matching).
- Then I see the handout "/c4x/MITx/999/asset/my_img.jpg"
+ Then I see the handout image link "my_img.jpg"
And I change the handout from "/static/my_img.jpg" to "
"
- Then I see the handout "/c4x/MITx/999/asset/modified.jpg"
+ Then I see the handout image link "modified.jpg"
And when I reload the page
- Then I see the handout "/c4x/MITx/999/asset/modified.jpg"
+ Then I see the handout image link "modified.jpg"
Scenario: Users cannot save handouts with bad html until edit or update it properly
Given I have opened a new course in Studio
diff --git a/cms/djangoapps/contentstore/features/course-updates.py b/cms/djangoapps/contentstore/features/course-updates.py
index 69670013cb..217874f911 100644
--- a/cms/djangoapps/contentstore/features/course-updates.py
+++ b/cms/djangoapps/contentstore/features/course-updates.py
@@ -4,6 +4,7 @@
from lettuce import world, step
from selenium.webdriver.common.keys import Keys
from common import type_in_codemirror, get_codemirror_value
+from opaque_keys.edx.locations import CourseLocator
from nose.tools import assert_in # pylint: disable=E0611
@@ -29,6 +30,14 @@ def check_update(_step, text):
assert_in(text, update_html)
+@step(u'I should see the asset update to "([^"]*)"$')
+def check_asset_update(_step, asset_file):
+ update_css = 'div.update-contents'
+ update_html = world.css_find(update_css).html
+ asset_key = world.scenario_dict['COURSE'].id.make_asset_key(asset_type='asset', path=asset_file)
+ assert_in(unicode(asset_key), update_html)
+
+
@step(u'I should not see the update "([^"]*)"$')
def check_no_update(_step, text):
update_css = 'div.update-contents'
@@ -90,6 +99,14 @@ def check_handout(_step, handout):
assert_in(handout, world.css_html(handout_css))
+@step(u'I see the handout image link "([^"]*)"$')
+def check_handout_image_link(_step, image_file):
+ handout_css = 'div.handouts-content'
+ handout_html = world.css_html(handout_css)
+ asset_key = world.scenario_dict['COURSE'].id.make_asset_key(asset_type='asset', path=image_file)
+ assert_in(unicode(asset_key), handout_html)
+
+
@step(u'I see the handout error text')
def check_handout_error(_step):
handout_error_css = 'div#handout_error'
diff --git a/cms/djangoapps/contentstore/features/upload.py b/cms/djangoapps/contentstore/features/upload.py
index b905c935b5..e99296da49 100644
--- a/cms/djangoapps/contentstore/features/upload.py
+++ b/cms/djangoapps/contentstore/features/upload.py
@@ -185,7 +185,13 @@ def open_course_with_locked(step, lock_state):
@step(u'Then the asset is (viewable|protected)$')
def view_asset(_step, status):
- url = django_url('/c4x/MITx/999/asset/asset.html')
+ asset_loc = world.scenario_dict['COURSE'].id.make_asset_key(asset_type='asset', path='asset.html')
+ svr_loc = django_url()
+ asset_url = unicode(asset_loc)
+ divider = '/'
+ if asset_url[0] == '/':
+ divider = ''
+ url = '{}{}{}'.format(svr_loc, divider, asset_url)
if status == 'viewable':
expected_text = 'test file'
else:
From 8e675494840dbdced6c3b0f8308e27e593806000 Mon Sep 17 00:00:00 2001
From: Don Mitchell
Date: Tue, 30 Sep 2014 11:08:31 -0400
Subject: [PATCH 3/7] Fix cms hardcoded keys
---
cms/djangoapps/contentstore/features/course-settings.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/cms/djangoapps/contentstore/features/course-settings.py b/cms/djangoapps/contentstore/features/course-settings.py
index 07335460c1..4896ffddb1 100644
--- a/cms/djangoapps/contentstore/features/course-settings.py
+++ b/cms/djangoapps/contentstore/features/course-settings.py
@@ -150,7 +150,7 @@ def i_see_new_course_image(_step):
images = world.css_find(img_css)
assert len(images) == 1
img = images[0]
- expected_src = '/c4x/MITx/999/asset/image.jpg'
+ expected_src = 'image.jpg'
# Don't worry about the domain in the URL
success_func = lambda _: img['src'].endswith(expected_src)
@@ -160,8 +160,8 @@ def i_see_new_course_image(_step):
@step('the image URL should be present in the field')
def image_url_present(_step):
field_css = '#course-image-url'
- expected_value = '/c4x/MITx/999/asset/image.jpg'
- assert world.css_value(field_css) == expected_value
+ expected_value = 'image.jpg'
+ assert world.css_value(field_css).endswith(expected_value)
############### HELPER METHODS ####################
From d4927de0f70bde07ecf9d8973e837fffa9a58044 Mon Sep 17 00:00:00 2001
From: John Eskew
Date: Tue, 30 Sep 2014 11:36:24 -0400
Subject: [PATCH 4/7] Remove unneeded import
---
cms/djangoapps/contentstore/features/course-updates.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/cms/djangoapps/contentstore/features/course-updates.py b/cms/djangoapps/contentstore/features/course-updates.py
index 217874f911..ca4d884590 100644
--- a/cms/djangoapps/contentstore/features/course-updates.py
+++ b/cms/djangoapps/contentstore/features/course-updates.py
@@ -4,7 +4,6 @@
from lettuce import world, step
from selenium.webdriver.common.keys import Keys
from common import type_in_codemirror, get_codemirror_value
-from opaque_keys.edx.locations import CourseLocator
from nose.tools import assert_in # pylint: disable=E0611
From 139e10d9b8546bc11fb5403c28d7ea542d35da27 Mon Sep 17 00:00:00 2001
From: Calen Pennington
Date: Fri, 12 Sep 2014 14:02:46 -0400
Subject: [PATCH 5/7] Teach mongo_connection to retry read operations in the
face of AutoReconnect errors
---
.../xmodule/xmodule/modulestore/split_mongo/mongo_connection.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py b/common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py
index 06ecb878b0..c21bc0f422 100644
--- a/common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py
+++ b/common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py
@@ -13,7 +13,6 @@ from functools import wraps
from pymongo.errors import AutoReconnect
from xmodule.exceptions import HeartbeatFailure
from xmodule.modulestore.split_mongo import BlockKey
-from datetime import tzinfo
import datetime
import pytz
From 2a8529d37a9530c4764d4c661eb49b10017214aa Mon Sep 17 00:00:00 2001
From: John Eskew
Date: Wed, 1 Oct 2014 08:04:03 -0400
Subject: [PATCH 6/7] Change email address detection in TinyMCE link plugin.
- If link has a "@" and a ":", do not consider it an email address. Add
un-minified version of plugin.js file for link plugin. Update build
instructions to include media plugin. Commit re-built minified JS. Add all
plugins to Jakefile.js in zip file. Reason for this commit: Split acceptance
test was failing when TinyMCE detected a Split asset key as an email address.
Fix was to modify email address detection.
---
.../static/js/vendor/tinymce/BUILD_README.txt | 4 +-
.../tinymce/js/tinymce/plugins/link/plugin.js | 207 ++++++++++++++++++
.../js/tinymce/plugins/link/plugin.min.js | 2 +-
.../tinymce/js/tinymce/tinymce.full.min.js | 2 +-
vendor_extra/tinymce/JakePackage.zip | Bin 6409572 -> 6373421 bytes
5 files changed, 211 insertions(+), 4 deletions(-)
create mode 100644 common/static/js/vendor/tinymce/js/tinymce/plugins/link/plugin.js
diff --git a/common/static/js/vendor/tinymce/BUILD_README.txt b/common/static/js/vendor/tinymce/BUILD_README.txt
index 8b18fb0345..ec4533a3b4 100644
--- a/common/static/js/vendor/tinymce/BUILD_README.txt
+++ b/common/static/js/vendor/tinymce/BUILD_README.txt
@@ -2,9 +2,9 @@ Instructions for creating js/tinymce.full.min.js
1. Ensure that the dependencies (NodeJS, Jake, and other dependencies) are installed. If necessary,
install them per the directions on https://github.com/tinymce/tinymce/tree/4.0.20.
-2. Unzip edx-platform/vendor_extra/tinymce/jake_package.zip into this directory (so that Jakefile.js resides in this directory).
+2. Unzip edx-platform/vendor_extra/tinymce/JakePackage.zip into this directory (so that Jakefile.js resides in this directory).
3. Run the following command in the tinymce directory:
- jake minify bundle[themes:modern,plugins:image,link,codemirror,paste,table,textcolor]
+ jake minify bundle[themes:modern,plugins:image,link,codemirror,paste,table,textcolor,media]
4. Cleanup by deleting the Unversioned files that were created from unzipping jake_package.zip.
Instructions for updating tinymce to a newer version:
diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/link/plugin.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/link/plugin.js
new file mode 100644
index 0000000000..bf9bb13379
--- /dev/null
+++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/link/plugin.js
@@ -0,0 +1,207 @@
+tinymce.PluginManager.add("link", function(e) {
+ function t(t) {
+ return function() {
+ var n = e.settings.link_list;
+ "string" == typeof n ? tinymce.util.XHR.send({
+ url: n,
+ success: function(e) {
+ t(tinymce.util.JSON.parse(e))
+ }
+ }) : t(n)
+ }
+ }
+
+ function n(t) {
+ function n(e) {
+ var t = f.find("#text");
+ (!t.value() || e.lastControl && t.value() == e.lastControl.text()) && t.value(e.control.text()), f.find("#href").value(e.control.value())
+ }
+
+ function l() {
+ var n = [{
+ text: "None",
+ value: ""
+ }];
+ return tinymce.each(t, function(t) {
+ n.push({
+ text: t.text || t.title,
+ value: e.convertURL(t.value || t.url, "href"),
+ menu: t.menu
+ })
+ }), n
+ }
+
+ function i(t) {
+ var n = [{
+ text: "None",
+ value: ""
+ }];
+ return tinymce.each(e.settings.rel_list, function(e) {
+ n.push({
+ text: e.text || e.title,
+ value: e.value,
+ selected: t === e.value
+ })
+ }), n
+ }
+
+ function r(t) {
+ var n = [];
+ return e.settings.target_list || (n.push({
+ text: "None",
+ value: ""
+ }), n.push({
+ text: "New window",
+ value: "_blank"
+ })), tinymce.each(e.settings.target_list, function(e) {
+ n.push({
+ text: e.text || e.title,
+ value: e.value,
+ selected: t === e.value
+ })
+ }), n
+ }
+
+ function a(t) {
+ var l = [];
+ return tinymce.each(e.dom.select("a:not([href])"), function(e) {
+ var n = e.name || e.id;
+ n && l.push({
+ text: n,
+ value: "#" + n,
+ selected: -1 != t.indexOf("#" + n)
+ })
+ }), l.length ? (l.unshift({
+ text: "None",
+ value: ""
+ }), {
+ name: "anchor",
+ type: "listbox",
+ label: "Anchors",
+ values: l,
+ onselect: n
+ }) : void 0
+ }
+
+ function o() {
+ h && h.value(e.convertURL(this.value(), "href")), !c && 0 === x.text.length && k && this.parent().parent().find("#text")[0].value(this.value())
+ }
+ var u, s, c, f, d, h, v, g, x = {},
+ m = e.selection,
+ p = e.dom;
+ u = m.getNode(), s = p.getParent(u, "a[href]");
+ var k = !0;
+ if (/= 0; y--)
+ if (3 != b[y].nodeType) {
+ k = !1;
+ break
+ }
+ }
+ x.text = c = s ? s.innerText || s.textContent : m.getContent({
+ format: "text"
+ }), x.href = s ? p.getAttrib(s, "href") : "", x.target = s ? p.getAttrib(s, "target") : e.settings.default_link_target || "", x.rel = s ? p.getAttrib(s, "rel") : "", e.fire('EditLink', x), k && (d = {
+ name: "text",
+ type: "textbox",
+ size: 40,
+ label: "Text to display",
+ onchange: function() {
+ x.text = this.value()
+ }
+ }), t && (h = {
+ type: "listbox",
+ label: "Link list",
+ values: l(),
+ onselect: n,
+ value: e.convertURL(x.href, "href"),
+ onPostRender: function() {
+ h = this
+ }
+ }), e.settings.target_list !== !1 && (g = {
+ name: "target",
+ type: "listbox",
+ label: "Target",
+ values: r(x.target)
+ }), e.settings.rel_list && (v = {
+ name: "rel",
+ type: "listbox",
+ label: "Rel",
+ values: i(x.rel)
+ }), f = e.windowManager.open({
+ title: "Insert link",
+ data: x,
+ body: [{
+ name: "href",
+ type: "filepicker",
+ filetype: "file",
+ size: 40,
+ autofocus: !0,
+ label: "Url",
+ onchange: o,
+ onkeyup: o
+ },
+ d, a(x.href), h, v, g
+ ],
+ onSubmit: function(t) {
+ function n(t, n) {
+ var l = e.selection.getRng();
+ window.setTimeout(function() {
+ e.windowManager.confirm(t, function(t) {
+ e.selection.setRng(l), n(t)
+ })
+ }, 0)
+ }
+
+ function l() {
+ s ? (e.focus(), k && i.text != c && (s.innerText = i.text), p.setAttribs(s, {
+ href: r,
+ target: i.target ? i.target : null,
+ rel: i.rel ? i.rel : null
+ }), m.select(s), e.undoManager.add()) : k ? e.insertContent(p.createHTML("a", {
+ href: r,
+ target: i.target ? i.target : null,
+ rel: i.rel ? i.rel : null
+ }, p.encode(i.text))) : e.execCommand("mceInsertLink", !1, {
+ href: r,
+ target: i.target,
+ rel: i.rel ? i.rel : null
+ })
+ }
+ var i = t.data;
+ e.fire('SaveLink', i);
+ var r = i.href;
+ /* EDX - Change the email address detection, which mistakenly detected Split asset keys as email addresses.
+ Instead, if the link has a "@" sign *and* a colon, do not consider it an email address. */
+ return r ? r.indexOf("@") > 0 && -1 == r.indexOf("//") && -1 == r.indexOf(":") ? void n("The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?", function(e) {
+ e && (r = "mailto:" + r), l()
+ }) : /^\s*www\./i.test(r) ? void n("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?", function(e) {
+ e && (r = "http://" + r), l()
+ }) : void l() : void e.execCommand("unlink")
+ }
+ })
+ }
+ e.addButton("link", {
+ icon: "link",
+ tooltip: "Insert/edit link",
+ shortcut: "Ctrl+K",
+ onclick: t(n),
+ stateSelector: "a[href]"
+ }), e.addButton("unlink", {
+ icon: "unlink",
+ tooltip: "Remove link",
+ cmd: "unlink",
+ stateSelector: "a[href]"
+ }), e.addShortcut("Ctrl+K", "", t(n)), this.showDialog = n, e.addMenuItem("link", {
+ icon: "link",
+ text: "Insert link",
+ shortcut: "Ctrl+K",
+ onclick: t(n),
+ stateSelector: "a[href]",
+ context: "insert",
+ prependToContext: !0
+ })
+});
diff --git a/common/static/js/vendor/tinymce/js/tinymce/plugins/link/plugin.min.js b/common/static/js/vendor/tinymce/js/tinymce/plugins/link/plugin.min.js
index f4c44d8766..413eac55ae 100644
--- a/common/static/js/vendor/tinymce/js/tinymce/plugins/link/plugin.min.js
+++ b/common/static/js/vendor/tinymce/js/tinymce/plugins/link/plugin.min.js
@@ -1 +1 @@
-tinymce.PluginManager.add("link",function(e){function t(t){return function(){var n=e.settings.link_list;"string"==typeof n?tinymce.util.XHR.send({url:n,success:function(e){t(tinymce.util.JSON.parse(e))}}):t(n)}}function n(t){function n(e){var t=f.find("#text");(!t.value()||e.lastControl&&t.value()==e.lastControl.text())&&t.value(e.control.text()),f.find("#href").value(e.control.value())}function l(){var n=[{text:"None",value:""}];return tinymce.each(t,function(t){n.push({text:t.text||t.title,value:e.convertURL(t.value||t.url,"href"),menu:t.menu})}),n}function i(t){var n=[{text:"None",value:""}];return tinymce.each(e.settings.rel_list,function(e){n.push({text:e.text||e.title,value:e.value,selected:t===e.value})}),n}function r(t){var n=[];return e.settings.target_list||(n.push({text:"None",value:""}),n.push({text:"New window",value:"_blank"})),tinymce.each(e.settings.target_list,function(e){n.push({text:e.text||e.title,value:e.value,selected:t===e.value})}),n}function a(t){var l=[];return tinymce.each(e.dom.select("a:not([href])"),function(e){var n=e.name||e.id;n&&l.push({text:n,value:"#"+n,selected:-1!=t.indexOf("#"+n)})}),l.length?(l.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:l,onselect:n}):void 0}function o(){h&&h.value(e.convertURL(this.value(),"href")),!c&&0===x.text.length&&k&&this.parent().parent().find("#text")[0].value(this.value())}var u,s,c,f,d,h,v,g,x={},m=e.selection,p=e.dom;u=m.getNode(),s=p.getParent(u,"a[href]");var k=!0;if(/=0;y--)if(3!=b[y].nodeType){k=!1;break}}x.text=c=s?s.innerText||s.textContent:m.getContent({format:"text"}),x.href=s?p.getAttrib(s,"href"):"",x.target=s?p.getAttrib(s,"target"):e.settings.default_link_target||"",x.rel=s?p.getAttrib(s,"rel"):"",e.fire('EditLink', x),k&&(d={name:"text",type:"textbox",size:40,label:"Text to display",onchange:function(){x.text=this.value()}}),t&&(h={type:"listbox",label:"Link list",values:l(),onselect:n,value:e.convertURL(x.href,"href"),onPostRender:function(){h=this}}),e.settings.target_list!==!1&&(g={name:"target",type:"listbox",label:"Target",values:r(x.target)}),e.settings.rel_list&&(v={name:"rel",type:"listbox",label:"Rel",values:i(x.rel)}),f=e.windowManager.open({title:"Insert link",data:x,body:[{name:"href",type:"filepicker",filetype:"file",size:40,autofocus:!0,label:"Url",onchange:o,onkeyup:o},d,a(x.href),h,v,g],onSubmit:function(t){function n(t,n){var l=e.selection.getRng();window.setTimeout(function(){e.windowManager.confirm(t,function(t){e.selection.setRng(l),n(t)})},0)}function l(){s?(e.focus(),k&&i.text!=c&&(s.innerText=i.text),p.setAttribs(s,{href:r,target:i.target?i.target:null,rel:i.rel?i.rel:null}),m.select(s),e.undoManager.add()):k?e.insertContent(p.createHTML("a",{href:r,target:i.target?i.target:null,rel:i.rel?i.rel:null},p.encode(i.text))):e.execCommand("mceInsertLink",!1,{href:r,target:i.target,rel:i.rel?i.rel:null})}var i=t.data;e.fire('SaveLink', i);var r=i.href;return r?r.indexOf("@")>0&&-1==r.indexOf("//")&&-1==r.indexOf("mailto:")?void n("The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",function(e){e&&(r="mailto:"+r),l()}):/^\s*www\./i.test(r)?void n("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(e){e&&(r="http://"+r),l()}):void l():void e.execCommand("unlink")}})}e.addButton("link",{icon:"link",tooltip:"Insert/edit link",shortcut:"Ctrl+K",onclick:t(n),stateSelector:"a[href]"}),e.addButton("unlink",{icon:"unlink",tooltip:"Remove link",cmd:"unlink",stateSelector:"a[href]"}),e.addShortcut("Ctrl+K","",t(n)),this.showDialog=n,e.addMenuItem("link",{icon:"link",text:"Insert link",shortcut:"Ctrl+K",onclick:t(n),stateSelector:"a[href]",context:"insert",prependToContext:!0})});
\ No newline at end of file
+tinymce.PluginManager.add("link",function(e){function t(t){return function(){var n=e.settings.link_list;"string"==typeof n?tinymce.util.XHR.send({url:n,success:function(e){t(tinymce.util.JSON.parse(e))}}):t(n)}}function n(t){function n(e){var t=f.find("#text");(!t.value()||e.lastControl&&t.value()==e.lastControl.text())&&t.value(e.control.text()),f.find("#href").value(e.control.value())}function l(){var n=[{text:"None",value:""}];return tinymce.each(t,function(t){n.push({text:t.text||t.title,value:e.convertURL(t.value||t.url,"href"),menu:t.menu})}),n}function i(t){var n=[{text:"None",value:""}];return tinymce.each(e.settings.rel_list,function(e){n.push({text:e.text||e.title,value:e.value,selected:t===e.value})}),n}function r(t){var n=[];return e.settings.target_list||(n.push({text:"None",value:""}),n.push({text:"New window",value:"_blank"})),tinymce.each(e.settings.target_list,function(e){n.push({text:e.text||e.title,value:e.value,selected:t===e.value})}),n}function a(t){var l=[];return tinymce.each(e.dom.select("a:not([href])"),function(e){var n=e.name||e.id;n&&l.push({text:n,value:"#"+n,selected:-1!=t.indexOf("#"+n)})}),l.length?(l.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:l,onselect:n}):void 0}function o(){h&&h.value(e.convertURL(this.value(),"href")),!c&&0===x.text.length&&k&&this.parent().parent().find("#text")[0].value(this.value())}var u,s,c,f,d,h,v,g,x={},m=e.selection,p=e.dom;u=m.getNode(),s=p.getParent(u,"a[href]");var k=!0;if(/=0;y--)if(3!=b[y].nodeType){k=!1;break}}x.text=c=s?s.innerText||s.textContent:m.getContent({format:"text"}),x.href=s?p.getAttrib(s,"href"):"",x.target=s?p.getAttrib(s,"target"):e.settings.default_link_target||"",x.rel=s?p.getAttrib(s,"rel"):"",e.fire("EditLink",x),k&&(d={name:"text",type:"textbox",size:40,label:"Text to display",onchange:function(){x.text=this.value()}}),t&&(h={type:"listbox",label:"Link list",values:l(),onselect:n,value:e.convertURL(x.href,"href"),onPostRender:function(){h=this}}),e.settings.target_list!==!1&&(g={name:"target",type:"listbox",label:"Target",values:r(x.target)}),e.settings.rel_list&&(v={name:"rel",type:"listbox",label:"Rel",values:i(x.rel)}),f=e.windowManager.open({title:"Insert link",data:x,body:[{name:"href",type:"filepicker",filetype:"file",size:40,autofocus:!0,label:"Url",onchange:o,onkeyup:o},d,a(x.href),h,v,g],onSubmit:function(t){function n(t,n){var l=e.selection.getRng();window.setTimeout(function(){e.windowManager.confirm(t,function(t){e.selection.setRng(l),n(t)})},0)}function l(){s?(e.focus(),k&&i.text!=c&&(s.innerText=i.text),p.setAttribs(s,{href:r,target:i.target?i.target:null,rel:i.rel?i.rel:null}),m.select(s),e.undoManager.add()):k?e.insertContent(p.createHTML("a",{href:r,target:i.target?i.target:null,rel:i.rel?i.rel:null},p.encode(i.text))):e.execCommand("mceInsertLink",!1,{href:r,target:i.target,rel:i.rel?i.rel:null})}var i=t.data;e.fire("SaveLink",i);var r=i.href;return r?r.indexOf("@")>0&&-1==r.indexOf("//")&&-1==r.indexOf(":")?void n("The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",function(e){e&&(r="mailto:"+r),l()}):/^\s*www\./i.test(r)?void n("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(e){e&&(r="http://"+r),l()}):void l():void e.execCommand("unlink")}})}e.addButton("link",{icon:"link",tooltip:"Insert/edit link",shortcut:"Ctrl+K",onclick:t(n),stateSelector:"a[href]"}),e.addButton("unlink",{icon:"unlink",tooltip:"Remove link",cmd:"unlink",stateSelector:"a[href]"}),e.addShortcut("Ctrl+K","",t(n)),this.showDialog=n,e.addMenuItem("link",{icon:"link",text:"Insert link",shortcut:"Ctrl+K",onclick:t(n),stateSelector:"a[href]",context:"insert",prependToContext:!0})});
\ No newline at end of file
diff --git a/common/static/js/vendor/tinymce/js/tinymce/tinymce.full.min.js b/common/static/js/vendor/tinymce/js/tinymce/tinymce.full.min.js
index 9c75779571..07f4b0883c 100644
--- a/common/static/js/vendor/tinymce/js/tinymce/tinymce.full.min.js
+++ b/common/static/js/vendor/tinymce/js/tinymce/tinymce.full.min.js
@@ -10,7 +10,7 @@ return i},toAbsPath:function(e,t){var r,i=0,o=[],a,s;for(a=/\/$/.test(t)?"/":"",
})}})}),r(Dt,[vt],function(e){return e.extend({recalc:function(e){var t,n,r,i,o,a,s,l,c,u,d,f,p,m,h,g,v=[],y,b,C,x,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O,I,F,z=Math.max,W=Math.min;for(r=e.items().filter(":visible"),i=e.layoutRect(),o=e._paddingBox,a=e.settings,f=e.isRtl()?a.direction||"row-reversed":a.direction,s=a.align,l=e.isRtl()?a.pack||"end":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="deltaH",B="contentH",P="left",M="w",L="x",D="innerW",H="minW",O="right",I="deltaW",F="contentW"):(S="x",N="w",E="minW",k="maxW",R="innerW",T="left",A="deltaW",B="contentW",P="top",M="h",L="y",D="innerH",H="minH",O="bottom",I="deltaH",F="contentH"),d=i[R]-o[T]-o[T],_=u=0,t=0,n=r.length;n>t;t++)p=r[t],m=p.layoutRect(),h=p.settings,g=h.flex,d-=n-1>t?c:0,g>0&&(u+=g,m[k]&&v.push(p),m.flex=g),d-=m[E],y=o[P]+m[H]+o[O],y>_&&(_=y);if(x={},x[E]=0>d?i[E]-d+i[A]:i[R]-d+i[A],x[H]=_+i[I],x[B]=i[R]-d,x[F]=_,x.minW=W(x.minW,i.maxW),x.minH=W(x.minH,i.maxH),x.minW=z(x.minW,i.startMinWidth),x.minH=z(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],m=p.layoutRect(),b=m[k],y=m[E]+m.flex*C,y>b?(d-=m[k]-m[E],u-=m.flex,m.flex=0,m.maxFlexSize=b):m.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[L]=o[P],t=0,n=r.length;n>t;t++)p=r[t],m=p.layoutRect(),y=m.maxFlexSize||m[E],"center"===s?x[L]=Math.round(i[D]/2-m[M]/2):"stretch"===s?(x[M]=z(m[H]||0,i[D]-o[P]-o[O]),x[L]=o[P]):"end"===s&&(x[L]=i[D]-m[M]-o.top),m.flex>0&&(y+=m.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 V=e.parent();V&&(V._lastRect=null,V.recalc())}}})}),r(Mt,[gt],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(Ht,[U,bt,Q,p,lt,g],function(e,t,n,r,i,o){function a(e){function t(t){function n(e){return e.replace(/%(\w+)/g,"")}var r,i,o=e.dom,a="",l,c;return c=e.settings.preview_styles,c===!1?"":(c||(c="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow"),(t=e.formatter.get(t))?(t=t[0],r=t.block||t.inline||"span",i=o.create(r),s(t.styles,function(e,t){e=n(e),e&&o.setStyle(i,t,e)}),s(t.attributes,function(e,t){e=n(e),e&&o.setAttrib(i,t,e)}),s(t.classes,function(e){e=n(e),o.hasClass(i,e)||o.addClass(i,e)}),e.fire("PreviewFormats"),o.setStyles(i,{position:"absolute",left:-65535}),e.getBody().appendChild(i),l=o.getStyle(e.getBody(),"fontSize",!0),l=/px$/.test(l)?parseInt(l,10):0,s(c.split(" "),function(t){var n=o.getStyle(i,t,!0);if(!("background-color"==t&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(n)&&(n=o.getStyle(e.getBody(),t,!0),"#ffffff"==o.toHex(n).toLowerCase())||"color"==t&&"#000000"==o.toHex(n).toLowerCase())){if("font-size"==t&&/em|%$/.test(n)){if(0===l)return;n=parseFloat(n,10)/(/%$/.test(n)?100:1),n=n*l+"px"}"border"==t&&n&&(a+="padding:0 2px;"),a+=t+":"+n+";"}}),e.fire("AfterPreviewFormats"),o.remove(i),a):void 0)}function r(t,n){return function(){var r=this;e.on("nodeChange",function(i){var o=e.formatter,a=null;s(i.parents,function(e){return s(t,function(t){return n?o.matchNode(e,n,{value:t.value})&&(a=t.value):o.matchNode(e,t.value)&&(a=t.value),a?!1:void 0}),a?!1:void 0}),r.value(a)})}}function i(e){e=e.split(";");for(var t=e.length;t--;)e[t]=e[t].split("=");return e}function o(){function n(e){var t=[];if(e)return s(e,function(e){var r={text:e.title,icon:e.icon};if(e.items)r.menu=n(e.items);else{var a=e.format||"custom"+i++;e.format||(e.name=a,o.push(e)),r.format=a}t.push(r)}),t}function r(){var t;return t=n(e.settings.style_formats_merge?e.settings.style_formats?a.concat(e.settings.style_formats):a:e.settings.style_formats||a)}var i=0,o=[],a=[{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"}]}];return e.on("init",function(){s(o,function(t){e.formatter.register(t.name,t)})}),{type:"menu",items:r(),onPostRender:function(t){e.fire("renderFormatsMenu",{control:t.control})},itemDefaults:{preview:!0,textStyle:function(){return this.settings.format?t(this.settings.format):void 0},onPostRender:function(){var t=this,n=this.settings.format;n&&t.parent().on("show",function(){t.disabled(!e.formatter.canApply(n)),t.active(e.formatter.match(n))})},onclick:function(){this.settings.format&&f(this.settings.format)}}}}function a(){return e.undoManager?e.undoManager.hasUndo():!1}function l(){return e.undoManager?e.undoManager.hasRedo():!1}function c(){var t=this;t.disabled(!a()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!a())})}function u(){var t=this;t.disabled(!l()),e.on("Undo Redo AddUndo TypingUndo",function(){t.disabled(!l())})}function d(){var t=this;e.on("VisualAid",function(e){t.active(e.hasVisual)}),t.active(e.hasVisual)}function f(t){t.control&&(t=t.control.value()),t&&e.execCommand("mceToggleFormat",!1,t)}var p;p=o(),s({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(t,n){e.addButton(n,{tooltip:t,onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})},onclick:function(){f(n)}})}),s({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(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1]})}),s({blockquote:["Blockquote","mceBlockQuote"],numlist:["Numbered list","InsertOrderedList"],bullist:["Bullet list","InsertUnorderedList"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"]},function(t,n){e.addButton(n,{tooltip:t[0],cmd:t[1],onPostRender:function(){var t=this;e.formatter?e.formatter.formatChanged(n,function(e){t.active(e)}):e.on("init",function(){e.formatter.formatChanged(n,function(e){t.active(e)})})}})}),e.addButton("undo",{tooltip:"Undo",onPostRender:c,cmd:"undo"}),e.addButton("redo",{tooltip:"Redo",onPostRender:u,cmd:"redo"}),e.addMenuItem("newdocument",{text:"New document",shortcut:"Ctrl+N",icon:"newdocument",cmd:"mceNewDocument"}),e.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Ctrl+Z",onPostRender:c,cmd:"undo"}),e.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Ctrl+Y",onPostRender:u,cmd:"redo"}),e.addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:d,cmd:"mceToggleVisualAid"}),s({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(t,n){e.addMenuItem(n,{text:t[0],icon:n,shortcut:t[2],cmd:t[1]})}),e.on("mousedown",function(){n.hideAll()}),e.addButton("styleselect",{type:"menubutton",text:"Formats",menu:p}),e.addButton("formatselect",function(){var n=[],o=i(e.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 s(o,function(e){n.push({text:e[0],value:e[1],textStyle:function(){return t(e[1])}})}),{type:"listbox",text:o[0][0],values:n,fixedWidth:!0,onselect:f,onPostRender:r(n)}}),e.addButton("fontselect",function(){var t="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",n=[],o=i(e.settings.font_formats||t);return s(o,function(e){n.push({text:{raw:e[0]},value:e[1],textStyle:-1==e[1].indexOf("dings")?"font-family:"+e[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:n,fixedWidth:!0,onPostRender:r(n,"fontname"),onselect:function(t){t.control.settings.value&&e.execCommand("FontName",!1,t.control.settings.value)}}}),e.addButton("fontsizeselect",function(){var t=[],n="8pt 10pt 12pt 14pt 18pt 24pt 36pt",i=e.settings.fontsize_formats||n;return s(i.split(" "),function(e){t.push({text:e,value:e})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:t,fixedWidth:!0,onPostRender:r(t,"fontsize"),onclick:function(t){t.control.settings.value&&e.execCommand("FontSize",!1,t.control.settings.value)}}}),e.addMenuItem("formats",{text:"Formats",menu:p})}var s=r.each;i.on("AddEditor",function(t){t.editor.rtl&&(e.rtl=!0),a(t.editor)}),e.translate=function(e){return i.translate(e)},t.tooltips=!o.iOS}),r(Pt,[vt],function(e){return e.extend({recalc:function(e){var t=e.settings,n,r,i,o,a,s,l,c,u,d,f,p,m,h,g,v,y,b,C,x,w,_,N=[],E=[],S,k,T,R;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(T=o.innerW-g.left-g.right,w=0,d=0;r>d;d++)w+=N[d]+(d>0?y:0),T-=(d>0?y:0)+N[d];for(R=o.innerH-g.top-g.bottom,_=0,f=0;n>f;f++)_+=E[f]+(f>0?b:0),R-=(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 A;A="start"==t.packV?0:R>0?Math.floor(R/n):0;var B=0,L=t.flexWidths;if(L)for(d=0;dd;d++)N[d]+=L?L[d]*D:D;for(m=g.top,f=0;n>f;f++){for(p=g.left,s=E[f]+A,d=0;r>d&&(u=i[f*r+d],u);d++)h=u.settings,c=u.layoutRect(),a=Math.max(N[d],c.startMinWidth),c.x=p,c.y=m,v=h.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=h.alignV||(x?x[d]||x[0]:null),"center"==v?c.y=m+s/2-c.h/2:"bottom"==v?c.y=m+s-c.h:"stretch"==v&&(c.h=s),u.layoutRect(c),p+=a+y,u.recalc&&u.recalc();m+=s+b}}else if(l.w=l.minW,l.h=l.minH,e.layoutRect(l),this.recalc(e),null===e._lastRect){var M=e.parent();M&&(M._lastRect=null,M.recalc())}}})}),r(Ot,[bt],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,t){var n=this,r=this.getEl().contentWindow.document.body;return r?(r.innerHTML=e,t&&t()):setTimeout(function(){n.html(e)},0),this}})}),r(It,[bt,V],function(e,t){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,n=e._super();if(e.settings.multiline){var r=t.getSize(e.getEl());r.width>n.maxW&&(n.minW=n.maxW,e.addClass("multiline")),e.getEl().style.width=n.minW+"px",n.startMinH=n.h=n.minH=Math.min(n.maxH,t.getSize(e.getEl()).height)}return n},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&&this.innerHtml(t.encode(e)),t._super(e)},renderHtml:function(){var e=this,t=e.settings.forId;return'"}})}),r(Ft,[j],function(e){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._super()}})}),r(zt,[Ft],function(e){return e.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}})}),r(Wt,[Ct,q,zt],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.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control.parent()===e.menu&&(t.stopPropagation(),e.focus(),e.hideMenu())}),e.menu.on("select",function(){e.focus()}),e.menu.on("show hide",function(t){t.control==e.menu&&e.activeMenu("show"==t.type),e.aria("expanded","show"==t.type)}).fire("show")),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),void e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]))},hideMenu:function(){var e=this;e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide())},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.aria&&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;n0&&(o=n[0].text,t._value=n[0].value),e.menu=n}e.text=e.text||o||n[0].text,t._super(e),t.addClass("listbox"),t.on("select",function(n){var r=n.control;a&&(n.lastControl=a),e.multiple?r.active(!r.active()):t.value(n.control.settings.value),a=r})},value:function(e){function t(e,n){e.items().each(function(e){r=e.value()===n,r&&(i=i||e.text()),e.active(r),e.menu&&t(e.menu,n)})}var n=this,r,i,o,a;if("undefined"!=typeof e){if(n.menu)t(n.menu,e);else for(o=n.settings.menu,a=0;a'+("-"!==o?' ":"")+("-"!==o?''+o+"":"")+(l?'":"")+(r.menu?'':"")+""},postRender:function(){var e=this,t=e.settings,n=t.textStyle;if("function"==typeof n&&(n=n.call(this)),n){var r=e.getEl("text");r&&r.setAttribute("style",n)}return e.on("mouseenter click",function(n){n.control===e&&(t.menu||"click"!==n.type?(e.showMenu(),n.aria&&e.menu.focus(!0)):(e.fire("select"),e.parent().hideAll()))}),e._super(),e},active:function(e){return"undefined"!=typeof e&&this.aria("checked",e),this._super(e)},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),r(qt,[Q,Ut,p],function(e,t,n){var r=e.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(e){var t=this;if(e.autohide=!0,e.constrainToViewport=!0,e.itemDefaults)for(var r=e.items,i=r.length;i--;)r[i]=n.extend({},e.itemDefaults,r[i]);t._super(e),t.addClass("menu")},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("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($t,[wt],function(e){return e.extend({Defaults:{classes:"radio",role:"radio"}})}),r(jt,[bt,K],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)},stop:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),r(Kt,[bt],function(e){return e.extend({renderHtml:function(){var e=this;return e.addClass("spacer"),e.canFocus=!1,''}})}),r(Yt,[Wt,V],function(e,t){return e.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var e=this,n=e.getEl(),r=e.layoutRect(),i,o;return e._super(),i=n.firstChild,o=n.lastChild,t.css(i,{width:r.w-t.getSize(o).width,height:r.h-2}),t.css(o,{height:r.h-2}),e},activeMenu:function(e){var n=this;t.toggleClass(n.getEl().lastChild,n.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){var n=e.target;if(e.control==this)for(;n;){if(e.aria&&"down"!=e.aria.key||"BUTTON"==n.nodeName&&-1==n.className.indexOf("open"))return e.stopImmediatePropagation(),void t.call(this,e);n=n.parentNode}}),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(Xt,[G,V],function(e,t){return e.extend({lastIdx:0,Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(e){var n;this.activeTabId&&(n=this.getEl(this.activeTabId),t.removeClass(n,this.classPrefix+"active"),n.setAttribute("aria-selected","false")),this.activeTabId="t"+e,n=this.getEl("t"+e),n.setAttribute("aria-selected","true"),t.addClass(n,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){var o=e._id+"-t"+i;t.aria("role","tabpanel"),t.aria("labelledby",o),n+=''+e.encode(t.settings.title)+"
"}),'"},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,n,r,i;r=t.getSize(e.getEl("head")).width,r=0>r?0:r,i=0,e.items().each(function(t,n){r=Math.max(r,t.layoutRect().minW),i=Math.max(i,t.layoutRect().minH),e.settings.activeTab!=n&&t.hide()}),e.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=r,e.settings.h=i,e.layoutRect({x:0,y:0,w:r,h:i})});var o=t.getSize(e.getEl("head")).height;return e.settings.minWidth=r,e.settings.minHeight=i+o,n=e._super(),n.deltaH+=o,n.innerH=n.h-n.deltaH,n}})}),r(Jt,[bt,V],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.hasEventListeners("submit")&&t.toJSON?(t.fire("submit",{data:t.toJSON()}),!1):void 0})})},disabled:function(e){var t=this;return t._rendered&&"undefined"!=typeof e&&(t.getEl().disabled=e),t._super(e)},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+'"'),e.disabled()&&(i+=' disabled="disabled"'),n.multiline?'":'"},postRender:function(){var e=this;return t.on(e.getEl(),"change",function(t){e.fire("change",t)}),e._super()},remove:function(){t.off(this.getEl()),this._super()}})}),r(Qt,[V],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,m,h,g,v,y,b,C,x,w,_,N,E,S,k,T,R,A,B,L,D,M,H,P,O,I,F,z,W,V,U,q,$,j,K,Y,G,X,J,Q,Z,et,tt,nt,rt,it,ot,at,st,lt,ct,ut,dt,ft,pt,mt,ht,gt,vt,yt,bt,Ct,xt,wt,_t,Nt,Et,St,kt,Tt,Rt,At,Bt,Lt,Dt,Mt,Ht,Pt,Ot,It,Ft,zt,Wt,Vt,Ut,qt,$t,jt,Kt,Yt,Gt,Xt,Jt,Qt])}(this);
;tinymce.ThemeManager.add("modern",function(e){function t(){function t(t){var n,o=[];if(t)return d(t.split(/[ ,]/),function(t){function i(){var i=e.selection;"bullist"==r&&i.selectorChanged("ul > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"UL"==n)}),"numlist"==r&&i.selectorChanged("ol > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"OL"==n)}),t.settings.stateSelector&&i.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&i.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var r;"|"==t?n=null:c.has(t)?(t={type:t},u.toolbar_items_size&&(t.size=u.toolbar_items_size),o.push(t),n=null):(n||(n={type:"buttongroup",items:[]},o.push(n)),e.buttons[t]&&(r=t,t=e.buttons[r],"function"==typeof t&&(t=t()),t.type=t.type||"button",u.toolbar_items_size&&(t.size=u.toolbar_items_size),t=c.create(t),n.items.push(t),e.initialized?i():e.on("init",i)))}),i.push({type:"toolbar",layout:"flow",items:o}),!0}for(var i=[],n=1;10>n&&t(u["toolbar"+n]);n++);return i.length||t(u.toolbar||f),i}function i(){function t(t){var i;return"|"==t?{text:"|"}:i=e.menuItems[t]}function i(i){var n,o,r,a,s;if(s=tinymce.makeMap((u.removed_menuitems||"").split(/[ ,]/)),u.menu?(o=u.menu[i],a=!0):o=h[i],o){n={text:o.title},r=[],d((o.items||"").split(/[ ,]/),function(e){var i=t(e);i&&!s[e]&&r.push(t(e))}),a||d(e.menuItems,function(e){e.context==i&&("before"==e.separator&&r.push({text:"|"}),e.prependToContext?r.unshift(e):r.push(e),"after"==e.separator&&r.push({text:"|"}))});for(var l=0;l0&&/^[0-9]+$/.test(e)&&(e+="px"),e}if(e.settings.image_advtab){var n=s.toJSON(),i=m.parseStyle(n.style);delete i.margin,i["margin-top"]=i["margin-bottom"]=t(n.vspace),i["margin-left"]=i["margin-right"]=t(n.hspace),i["border-width"]=t(n.border),s.find("#style").value(m.serializeStyle(m.parseStyle(m.serializeStyle(i))))}}var s,d,u,h,g={},m=e.dom,p=e.selection.getNode();d=m.getAttrib(p,"width"),u=m.getAttrib(p,"height"),"IMG"!=p.nodeName||p.getAttribute("data-mce-object")||p.getAttribute("data-mce-placeholder")?p=null:g={src:m.getAttrib(p,"src"),alt:m.getAttrib(p,"alt"),width:d,height:u},n&&(h={type:"listbox",label:"Image list",values:i(),value:g.src&&e.convertURL(g.src,"src"),onselect:function(e){var t=s.find("#alt");(!t.value()||e.lastControl&&t.value()==e.lastControl.text())&&t.value(e.control.text()),s.find("#src").value(e.control.value())},onPostRender:function(){h=this}});var y=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:r},h,{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:5,size:3,onchange:a},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:3,onchange:a},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}];e.fire('EditImage', g),e.settings.image_advtab?(p&&(g.hspace=l(p.style.marginLeft||p.style.marginRight),g.vspace=l(p.style.marginTop||p.style.marginBottom),g.border=l(p.style.borderWidth),g.style=e.dom.serializeStyle(e.dom.parseStyle(e.dom.getAttrib(p,"style")))),s=e.windowManager.open({title:"Insert/edit image",data:g,bodyType:"tabpanel",body:[{title:"General",type:"form",items:y},{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:c},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]}],onSubmit:o})):s=e.windowManager.open({title:"Insert/edit image",data:g,body:y,onSubmit:o})}e.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:n(i),stateSelector:"img:not([data-mce-object],[data-mce-placeholder])"}),e.addMenuItem("image",{icon:"image",text:"Insert image",onclick:n(i),context:"insert",prependToContext:!0})});
-;tinymce.PluginManager.add("link",function(e){function t(t){return function(){var n=e.settings.link_list;"string"==typeof n?tinymce.util.XHR.send({url:n,success:function(e){t(tinymce.util.JSON.parse(e))}}):t(n)}}function n(t){function n(e){var t=f.find("#text");(!t.value()||e.lastControl&&t.value()==e.lastControl.text())&&t.value(e.control.text()),f.find("#href").value(e.control.value())}function l(){var n=[{text:"None",value:""}];return tinymce.each(t,function(t){n.push({text:t.text||t.title,value:e.convertURL(t.value||t.url,"href"),menu:t.menu})}),n}function i(t){var n=[{text:"None",value:""}];return tinymce.each(e.settings.rel_list,function(e){n.push({text:e.text||e.title,value:e.value,selected:t===e.value})}),n}function r(t){var n=[];return e.settings.target_list||(n.push({text:"None",value:""}),n.push({text:"New window",value:"_blank"})),tinymce.each(e.settings.target_list,function(e){n.push({text:e.text||e.title,value:e.value,selected:t===e.value})}),n}function a(t){var l=[];return tinymce.each(e.dom.select("a:not([href])"),function(e){var n=e.name||e.id;n&&l.push({text:n,value:"#"+n,selected:-1!=t.indexOf("#"+n)})}),l.length?(l.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:l,onselect:n}):void 0}function o(){h&&h.value(e.convertURL(this.value(),"href")),!c&&0===x.text.length&&k&&this.parent().parent().find("#text")[0].value(this.value())}var u,s,c,f,d,h,v,g,x={},m=e.selection,p=e.dom;u=m.getNode(),s=p.getParent(u,"a[href]");var k=!0;if(/=0;y--)if(3!=b[y].nodeType){k=!1;break}}x.text=c=s?s.innerText||s.textContent:m.getContent({format:"text"}),x.href=s?p.getAttrib(s,"href"):"",x.target=s?p.getAttrib(s,"target"):e.settings.default_link_target||"",x.rel=s?p.getAttrib(s,"rel"):"",e.fire('EditLink', x),k&&(d={name:"text",type:"textbox",size:40,label:"Text to display",onchange:function(){x.text=this.value()}}),t&&(h={type:"listbox",label:"Link list",values:l(),onselect:n,value:e.convertURL(x.href,"href"),onPostRender:function(){h=this}}),e.settings.target_list!==!1&&(g={name:"target",type:"listbox",label:"Target",values:r(x.target)}),e.settings.rel_list&&(v={name:"rel",type:"listbox",label:"Rel",values:i(x.rel)}),f=e.windowManager.open({title:"Insert link",data:x,body:[{name:"href",type:"filepicker",filetype:"file",size:40,autofocus:!0,label:"Url",onchange:o,onkeyup:o},d,a(x.href),h,v,g],onSubmit:function(t){function n(t,n){var l=e.selection.getRng();window.setTimeout(function(){e.windowManager.confirm(t,function(t){e.selection.setRng(l),n(t)})},0)}function l(){s?(e.focus(),k&&i.text!=c&&(s.innerText=i.text),p.setAttribs(s,{href:r,target:i.target?i.target:null,rel:i.rel?i.rel:null}),m.select(s),e.undoManager.add()):k?e.insertContent(p.createHTML("a",{href:r,target:i.target?i.target:null,rel:i.rel?i.rel:null},p.encode(i.text))):e.execCommand("mceInsertLink",!1,{href:r,target:i.target,rel:i.rel?i.rel:null})}var i=t.data;e.fire('SaveLink', i);var r=i.href;return r?r.indexOf("@")>0&&-1==r.indexOf("//")&&-1==r.indexOf("mailto:")?void n("The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",function(e){e&&(r="mailto:"+r),l()}):/^\s*www\./i.test(r)?void n("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(e){e&&(r="http://"+r),l()}):void l():void e.execCommand("unlink")}})}e.addButton("link",{icon:"link",tooltip:"Insert/edit link",shortcut:"Ctrl+K",onclick:t(n),stateSelector:"a[href]"}),e.addButton("unlink",{icon:"unlink",tooltip:"Remove link",cmd:"unlink",stateSelector:"a[href]"}),e.addShortcut("Ctrl+K","",t(n)),this.showDialog=n,e.addMenuItem("link",{icon:"link",text:"Insert link",shortcut:"Ctrl+K",onclick:t(n),stateSelector:"a[href]",context:"insert",prependToContext:!0})});
+;tinymce.PluginManager.add("link",function(e){function t(t){return function(){var n=e.settings.link_list;"string"==typeof n?tinymce.util.XHR.send({url:n,success:function(e){t(tinymce.util.JSON.parse(e))}}):t(n)}}function n(t){function n(e){var t=f.find("#text");(!t.value()||e.lastControl&&t.value()==e.lastControl.text())&&t.value(e.control.text()),f.find("#href").value(e.control.value())}function l(){var n=[{text:"None",value:""}];return tinymce.each(t,function(t){n.push({text:t.text||t.title,value:e.convertURL(t.value||t.url,"href"),menu:t.menu})}),n}function i(t){var n=[{text:"None",value:""}];return tinymce.each(e.settings.rel_list,function(e){n.push({text:e.text||e.title,value:e.value,selected:t===e.value})}),n}function r(t){var n=[];return e.settings.target_list||(n.push({text:"None",value:""}),n.push({text:"New window",value:"_blank"})),tinymce.each(e.settings.target_list,function(e){n.push({text:e.text||e.title,value:e.value,selected:t===e.value})}),n}function a(t){var l=[];return tinymce.each(e.dom.select("a:not([href])"),function(e){var n=e.name||e.id;n&&l.push({text:n,value:"#"+n,selected:-1!=t.indexOf("#"+n)})}),l.length?(l.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:l,onselect:n}):void 0}function o(){h&&h.value(e.convertURL(this.value(),"href")),!c&&0===x.text.length&&k&&this.parent().parent().find("#text")[0].value(this.value())}var u,s,c,f,d,h,v,g,x={},m=e.selection,p=e.dom;u=m.getNode(),s=p.getParent(u,"a[href]");var k=!0;if(/=0;y--)if(3!=b[y].nodeType){k=!1;break}}x.text=c=s?s.innerText||s.textContent:m.getContent({format:"text"}),x.href=s?p.getAttrib(s,"href"):"",x.target=s?p.getAttrib(s,"target"):e.settings.default_link_target||"",x.rel=s?p.getAttrib(s,"rel"):"",e.fire("EditLink",x),k&&(d={name:"text",type:"textbox",size:40,label:"Text to display",onchange:function(){x.text=this.value()}}),t&&(h={type:"listbox",label:"Link list",values:l(),onselect:n,value:e.convertURL(x.href,"href"),onPostRender:function(){h=this}}),e.settings.target_list!==!1&&(g={name:"target",type:"listbox",label:"Target",values:r(x.target)}),e.settings.rel_list&&(v={name:"rel",type:"listbox",label:"Rel",values:i(x.rel)}),f=e.windowManager.open({title:"Insert link",data:x,body:[{name:"href",type:"filepicker",filetype:"file",size:40,autofocus:!0,label:"Url",onchange:o,onkeyup:o},d,a(x.href),h,v,g],onSubmit:function(t){function n(t,n){var l=e.selection.getRng();window.setTimeout(function(){e.windowManager.confirm(t,function(t){e.selection.setRng(l),n(t)})},0)}function l(){s?(e.focus(),k&&i.text!=c&&(s.innerText=i.text),p.setAttribs(s,{href:r,target:i.target?i.target:null,rel:i.rel?i.rel:null}),m.select(s),e.undoManager.add()):k?e.insertContent(p.createHTML("a",{href:r,target:i.target?i.target:null,rel:i.rel?i.rel:null},p.encode(i.text))):e.execCommand("mceInsertLink",!1,{href:r,target:i.target,rel:i.rel?i.rel:null})}var i=t.data;e.fire("SaveLink",i);var r=i.href;return r?r.indexOf("@")>0&&-1==r.indexOf("//")&&-1==r.indexOf(":")?void n("The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",function(e){e&&(r="mailto:"+r),l()}):/^\s*www\./i.test(r)?void n("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(e){e&&(r="http://"+r),l()}):void l():void e.execCommand("unlink")}})}e.addButton("link",{icon:"link",tooltip:"Insert/edit link",shortcut:"Ctrl+K",onclick:t(n),stateSelector:"a[href]"}),e.addButton("unlink",{icon:"unlink",tooltip:"Remove link",cmd:"unlink",stateSelector:"a[href]"}),e.addShortcut("Ctrl+K","",t(n)),this.showDialog=n,e.addMenuItem("link",{icon:"link",text:"Insert link",shortcut:"Ctrl+K",onclick:t(n),stateSelector:"a[href]",context:"insert",prependToContext:!0})});
;tinymce.PluginManager.requireLangPack("codemirror"),tinymce.PluginManager.add("codemirror",function(e,t){function n(){e.focus(),e.selection.collapse(!0),e.selection.setContent('');var n,o=tinyMCE.baseURL.indexOf("/static/");n=o>0?tinyMCE.baseURL.substring(0,o):window.location.origin;var i="?CodeMirrorPath="+e.settings.codemirror.path+"&ParentOrigin="+window.location.origin,a=e.windowManager.open({title:"HTML source code",url:t+"/source.html"+i,width:800,height:550,resizable:!0,maximizable:!0,buttons:[{text:"OK",subtype:"primary",onclick:function(){s({type:"save"})}},{text:"Cancel",onclick:function(){s({type:"cancel"})}}]}),c=a.getEl().getElementsByTagName("iframe")[0].contentWindow,s=function(e){c.postMessage(e,n)},r=function(t){if(n===t.origin){var o;if("init"===t.data.type)o={content:e.getContent({source_view:!0})},e.fire("ShowCodeEditor",o),s({type:"init",content:o.content}),e.dom.remove(e.dom.select(".CmCaReT"));else if("setText"===t.data.type){o={content:t.data.text};var i=t.data.isDirty;e.fire("SaveCodeEditor",o),e.setContent(o.content);var c=e.dom.select("span#CmCaReT")[0];if(c)e.selection.scrollIntoView(c),e.selection.setCursorLocation(c,0),e.dom.remove(c);else{var r=e.getContent(),d=r.replace('',"");r!==d&&e.setContent(d)}e.isNotDirty=!i,i&&e.nodeChanged()}else"closeWindow"===t.data.type&&a.close()}};a.on("close",function(){window.removeEventListener("message",r)}),window.addEventListener("message",r,!1)}e.addButton("code",{title:"Edit HTML",text:"HTML",icon:!1,onclick:n}),e.addMenuItem("code",{icon:"code",text:"Edit HTML",context:"tools",onclick:n})});
;!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i"),t&&/^(PRE|DIV)$/.test(t.nodeName)||!o?e=n.filter(e,[[/\n/g,"
"]]):(e=n.filter(e,[[/\n\n/g,"
"+a],[/^(.*<\/p>)()$/,a+"$1"],[/\n/g,"
"]]),-1!=e.indexOf("
")&&(e=a+e)),i(e)}function a(){var t=r.dom,n=r.getBody(),i=r.dom.getViewPort(r.getWin()),o=i.y,a=20,s;if(v=r.selection.getRng(),r.inline&&(s=r.selection.getScrollContainer(),s&&(o=s.scrollTop)),v.getClientRects){var l=v.getClientRects();if(l.length)a=o+(l[0].top-t.getPos(n).y);else{a=o;var c=v.startContainer;c&&(3==c.nodeType&&c.parentNode!=n&&(c=c.parentNode),1==c.nodeType&&(a=t.getPos(c,s||n).y))}}g=t.add(r.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"1",style:"position: absolute; top: "+a+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},b),(e.ie||e.gecko)&&t.setStyle(g,"left","rtl"==t.getStyle(n,"direction",!0)?65535:-65535),t.bind(g,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),g.focus(),r.selection.select(g,!0)}function s(){if(g){for(var e;e=r.dom.get("mcepastebin");)r.dom.remove(e),r.dom.unbind(e);v&&r.selection.setRng(v)}C=!1,g=v=null}function l(){var e=b,t,n;for(t=r.dom.select("div[id=mcepastebin]"),n=t.length;n--;){var i=t[n].innerHTML;e==b&&(e=""),i.length>e.length&&(e=i)}return e}function c(e){var t={};if(e&&e.types){var n=e.getData("Text");n&&n.length>0&&(t["text/plain"]=n);for(var r=0;r')},t.readAsDataURL(e.getAsFile()),!0}}if(!(!r.settings.paste_data_images||"text/html"in t||"text/plain"in t)&&e.clipboardData){var o=e.clipboardData.items;if(o)for(var a=0;a0}function m(){r.on("keydown",function(n){if(!n.isDefaultPrevented()&&(t.metaKeyPressed(n)&&86==n.keyCode||n.shiftKey&&45==n.keyCode)){if(C=n.shiftKey&&86==n.keyCode,n.stopImmediatePropagation(),y=(new Date).getTime(),e.ie&&C)return n.preventDefault(),void r.fire("paste",{ieFake:!0});s(),a()}}),r.on("paste",function(t){var c=d(t),f=(new Date).getTime()-y<1e3,m="text"==h.pasteFormat||C;return t.isDefaultPrevented()?void s():u(t,c)?void s():(f||t.preventDefault(),!e.ie||f&&!t.ieFake||(a(),r.dom.bind(g,"paste",function(e){e.stopPropagation()}),r.getDoc().execCommand("Paste",!1,null),c["text/html"]=l()),void setTimeout(function(){var e=l();return g&&g.firstChild&&"mcepastebin"===g.firstChild.id&&(m=!0),s(),e!=b&&f||(e=c["text/html"]||c["text/plain"]||b,e!=b)?(!p(c,"text/html")&&p(c,"text/plain")&&(m=!0),void(m?o(c["text/plain"]||n.innerText(e)):i(e))):void(f||r.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents."))},0))}),r.on("dragstart",function(e){if(e.dataTransfer.types)try{e.dataTransfer.setData("mce-internal",r.selection.getContent())}catch(t){}}),r.on("drop",function(e){var t=f(e);if(t&&!e.isDefaultPrevented()){var n=c(e.dataTransfer),a=n["mce-internal"]||n["text/html"]||n["text/plain"];a&&(e.preventDefault(),r.undoManager.transact(function(){n["mce-internal"]&&r.execCommand("Delete"),r.selection.setRng(t),n["text/html"]?i(a):o(a)}))}})}var h=this,g,v,y=0,b="%MCEPASTEBIN%",C;h.pasteHtml=i,h.pasteText=o,r.on("preInit",function(){m(),r.parser.addNodeFilter("img",function(t){if(!r.settings.paste_data_images)for(var n=t.length;n--;){var i=t[n].attributes.map.src;i&&0===i.indexOf("data:image")&&(t[n].attr("data-mce-object")||i===e.transparentSrc||t[n].remove())}})}),r.on("PreProcess",function(){r.dom.remove(r.dom.get("mcepastebin"))})}}),r(h,[c,d,u,g,v,l],function(e,t,n,r,i,o){function a(e){return/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&&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 h=l.paste_word_valid_elements;h||(h="@[style],-strong/b,-em/i,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-table[width],-tr,-td[colspan|rowspan|width],-th,-thead,-tfoot,-tbody,-a[href|name],sub,sup,strike,br");var g=new n({valid_elements:h}),v=new t({},g);v.addAttributeFilter("style",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("style",u(n,n.attr("style"))),"span"!=n.name||n.attributes.length||n.unwrap()}),v.addNodeFilter("a",function(e){for(var t=e.length,n,r,i;t--;)n=e[t],r=n.attr("href"),i=n.attr("name"),r&&0===r.indexOf("file://")&&(r=r.split("#")[1],r&&(r="#"+r)),r||i?n.attr({href:r,name:i}):n.unwrap()});var y=v.parse(f);d(y),c.content=new r({},g).serialize(y)}})}return s.isWordContent=a,s}),r(y,[p,c,h,l],function(e,t,n,r){return function(i){function o(e){i.on("BeforePastePreProcess",function(t){t.content=e(t.content)})}function a(e){return e=r.filter(e,[/^[\s\S]*|[\s\S]*$/g,[/\u00a0<\/span>/g,"\xa0"],/
$/i])}function s(e){if(!n.isWordContent(e))return e;var o=[];t.each(i.schema.getBlockElements(),function(e,t){o.push(t)});var a=new RegExp("(?:
[\\s\\r\\n]+|
)*(<\\/?("+o.join("|")+")[^>]*>)(?:
[\\s\\r\\n]+|
)*","g");return e=r.filter(e,[[a,"$1"]]),e=r.filter(e,[[/
/g,"
"],[/
/g," "],[/
/g,"
"]])}function l(e){return(i.settings.paste_remove_styles||i.settings.paste_remove_styles_if_webkit!==!1)&&(e=e.replace(/ style=\"[^\"]+\"/g,"")),e}e.webkit&&(o(l),o(a)),e.ie&&o(s)}}),r(b,[C,f,h,y],function(e,t,n,r){var i;e.add("paste",function(e){function o(){"text"==s.pasteFormat?(this.active(!1),s.pasteFormat="html"):(s.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))}var a=this,s,l=e.settings;a.clipboard=s=new t(e),a.quirks=new r(e),a.wordFilter=new n(e),e.settings.paste_as_text&&(a.clipboard.pasteFormat="text"),l.paste_preprocess&&e.on("PastePreProcess",function(e){l.paste_preprocess.call(a,a,e)}),l.paste_postprocess&&e.on("PastePostProcess",function(e){l.paste_postprocess.call(a,a,e)}),e.addCommand("mceInsertClipboardContent",function(e,t){t.content&&a.clipboard.pasteHtml(t.content),t.text&&a.clipboard.pasteText(t.text)}),e.paste_block_drop&&e.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),e.settings.paste_data_images||e.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&t.files.length>0&&e.preventDefault()}),e.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:o,active:"text"==a.clipboard.pasteFormat}),e.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:s.pasteFormat,onclick:o})})}),a([l,f,h,y,b])}(this);
;!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i "+t+" tr",a);i(n,function(n,o){o+=e,i(M.select("> td, > th",n),function(e,n){var i,a,s,l;if(A[o])for(;A[o][n];)n++;for(s=r(e,"rowspan"),l=r(e,"colspan"),a=o;o+s>a;a++)for(A[a]||(A[a]=[]),i=n;n+l>i;i++)A[a][i]={part:t,real:a==o&&i==n,elm:e,rowspan:s,colspan:l}})}),e+=n.length})}function l(e,t){return e=e.cloneNode(t),e.removeAttribute("id"),e}function c(e,t){var n;return n=A[t],n?n[e]:void 0}function d(e,t,n){e&&(n=parseInt(n,10),1===n?e.removeAttribute(t,1):e.setAttribute(t,n,1))}function u(e){return e&&(M.hasClass(e.elm,"mce-item-selected")||e==D)}function f(){var e=[];return i(a.rows,function(t){i(t.cells,function(n){return M.hasClass(n,"mce-item-selected")||D&&n==D.elm?(e.push(t),!1):void 0})}),e}function p(){var e=M.createRng();e.setStartAfter(a),e.setEndAfter(a),L.setRng(e),M.remove(a)}function m(t){var r,a={};return o.settings.table_clone_elements!==!1&&(a=e.makeMap((o.settings.table_clone_elements||"strong em b i span font h1 h2 h3 h4 h5 h6 p div").toUpperCase(),/[ ,]/)),e.walk(t,function(e){var o;return 3==e.nodeType?(i(M.getParents(e.parentNode,null,t).reverse(),function(e){a[e.nodeName]&&(e=l(e,!1),r?o&&o.appendChild(e):r=o=e,o=e)}),o&&(o.innerHTML=n.ie?" ":'
'),!1):void 0},"childNodes"),t=l(t,!1),d(t,"rowSpan",1),d(t,"colSpan",1),r?t.appendChild(r):n.ie||(t.innerHTML='
'),t}function h(){var e=M.createRng(),t;return i(M.select("tr",a),function(e){0===e.cells.length&&M.remove(e)}),0===M.select("tr",a).length?(e.setStartBefore(a),e.setEndBefore(a),L.setRng(e),void M.remove(a)):(i(M.select("thead,tbody,tfoot",a),function(e){0===e.rows.length&&M.remove(e)}),s(),void(B&&(t=A[Math.min(A.length-1,B.y)],t&&(L.select(t[Math.min(t.length-1,B.x)].elm,!0),L.collapse(!0)))))}function g(e,t,n,r){var i,o,a,s,l;for(i=A[t][e].elm.parentNode,a=1;n>=a;a++)if(i=M.getNext(i,"tr")){for(o=e;o>=0;o--)if(l=A[t+a][o].elm,l.parentNode==i){for(s=1;r>=s;s++)M.insertAfter(m(l),l);break}if(-1==o)for(s=1;r>=s;s++)i.insertBefore(m(i.cells[0]),i.cells[0])}}function v(){i(A,function(e,t){i(e,function(e,n){var i,o,a;if(u(e)&&(e=e.elm,i=r(e,"colspan"),o=r(e,"rowspan"),i>1||o>1)){for(d(e,"rowSpan",1),d(e,"colSpan",1),a=0;i-1>a;a++)M.insertAfter(m(e),e);g(n,t,o-1,i)}})})}function y(t,n,r){var o,a,l,f,p,m,g,y,b,C,x;if(t?(o=k(t),a=o.x,l=o.y,f=a+(n-1),p=l+(r-1)):(B=P=null,i(A,function(e,t){i(e,function(e,n){u(e)&&(B||(B={x:n,y:t}),P={x:n,y:t})})}),B&&(a=B.x,l=B.y,f=P.x,p=P.y)),y=c(a,l),b=c(f,p),y&&b&&y.part==b.part){for(v(),s(),y=c(a,l).elm,d(y,"colSpan",f-a+1),d(y,"rowSpan",p-l+1),g=l;p>=g;g++)for(m=a;f>=m;m++)A[g]&&A[g][m]&&(t=A[g][m].elm,t!=y&&(C=e.grep(t.childNodes),i(C,function(e){y.appendChild(e)}),C.length&&(C=e.grep(y.childNodes),x=0,i(C,function(e){"BR"==e.nodeName&&M.getAttrib(e,"data-mce-bogus")&&x++0&&A[n-1][s]&&(h=A[n-1][s].elm,g=r(h,"rowSpan"),g>1)){d(h,"rowSpan",g+1);continue}}else if(g=r(o,"rowspan"),g>1){d(o,"rowSpan",g+1);continue}p=m(o),d(p,"colSpan",o.colSpan),f.appendChild(p),a=o}f.hasChildNodes()&&(e?c.parentNode.insertBefore(f,c):M.insertAfter(f,c))}}function C(e){var t,n;i(A,function(n){return i(n,function(n,r){return u(n)&&(t=r,e)?!1:void 0}),e?!t:void 0}),i(A,function(i,o){var a,s,l;i[t]&&(a=i[t].elm,a!=n&&(l=r(a,"colspan"),s=r(a,"rowspan"),1==l?e?(a.parentNode.insertBefore(m(a),a),g(t,o,s-1,l)):(M.insertAfter(m(a),a),g(t,o,s-1,l)):d(a,"colSpan",a.colSpan+1),n=a))})}function x(){var t=[];i(A,function(n){i(n,function(n,o){u(n)&&-1===e.inArray(t,o)&&(i(A,function(e){var t=e[o].elm,n;n=r(t,"colSpan"),n>1?d(t,"colSpan",n-1):M.remove(t)}),t.push(o))})}),h()}function w(){function e(e){var t,n,o;t=M.getNext(e,"tr"),i(e.cells,function(e){var t=r(e,"rowSpan");t>1&&(d(e,"rowSpan",t-1),n=k(e),g(n.x,n.y,1,1))}),n=k(e.cells[0]),i(A[n.y],function(e){var t;e=e.elm,e!=o&&(t=r(e,"rowSpan"),1>=t?M.remove(e):d(e,"rowSpan",t-1),o=e)})}var t;t=f(),i(t.reverse(),function(t){e(t)}),h()}function _(){var e=f();return M.remove(e),h(),e}function N(){var e=f();return i(e,function(t,n){e[n]=l(t,!0)}),e}function E(e,t){var n=f(),r=n[t?0:n.length-1],o=r.cells.length;e&&(i(A,function(e){var t;return o=0,i(e,function(e){e.real&&(o+=e.colspan),e.elm.parentNode==r&&(t=1)}),t?!1:void 0}),t||e.reverse(),i(e,function(e){var n,i=e.cells.length,a;for(n=0;i>n;n++)a=e.cells[n],d(a,"colSpan",1),d(a,"rowSpan",1);for(n=i;o>n;n++)e.appendChild(m(e.cells[i-1]));for(n=o;i>n;n++)M.remove(e.cells[n]);t?r.parentNode.insertBefore(e,r):M.insertAfter(e,r)}),M.removeClass(M.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"))}function k(e){var t;return i(A,function(n,r){return i(n,function(n,i){return n.elm==e?(t={x:i,y:r},!1):void 0}),!t}),t}function S(e){B=k(e)}function T(){var e,t;return e=t=0,i(A,function(n,r){i(n,function(n,i){var o,a;u(n)&&(n=A[r][i],i>e&&(e=i),r>t&&(t=r),n.real&&(o=n.colspan-1,a=n.rowspan-1,o&&i+o>e&&(e=i+o),a&&r+a>t&&(t=r+a)))})}),{x:e,y:t}}function R(e){var t,n,r,i,o,a,s,l,c,d;if(P=k(e),B&&P){for(t=Math.min(B.x,P.x),n=Math.min(B.y,P.y),r=Math.max(B.x,P.x),i=Math.max(B.y,P.y),o=r,a=i,d=n;a>=d;d++)e=A[d][t],e.real||t-(e.colspan-1)=c;c++)e=A[n][c],e.real||n-(e.rowspan-1)=d;d++)for(c=t;r>=c;c++)e=A[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(M.removeClass(M.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=n;a>=d;d++)for(c=t;o>=c;c++)A[d][c]&&M.addClass(A[d][c].elm,"mce-item-selected")}}var A,B,P,D,L=o.selection,M=L.dom;a=a||M.getParent(L.getStart(),"table"),s(),D=M.getParent(L.getStart(),"th,td"),D&&(B=k(D),P=T(),D=c(B.x,B.y)),e.extend(this,{deleteTable:p,split:v,merge:y,insertRow:b,insertCol:C,deleteCols:x,deleteRows:w,cutRows:_,copyRows:N,pasteRows:E,getPos:k,setStartCell:S,setEndCell:R})}}),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,n.settings.forced_root_block_attrs,t.ie&&t.ie<11?" ":'
'):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()})}function c(){n.on("keydown",function(t){if((t.keyCode==e.DELETE||t.keyCode==e.BACKSPACE)&&!t.isDefaultPrevented()){var r=n.dom.getParent(n.selection.getStart(),"table");if(r){for(var i=n.dom.select("td,th",r),o=i.length;o--;)if(!n.dom.hasClass(i[o],"mce-item-selected"))return;t.preventDefault(),n.execCommand("mceTableDelete")}}})}c(),t.webkit&&(o(),l()),t.gecko&&(a(),s()),t.ie>10&&(a(),s())}}),r(p,[l,m,c],function(e,t,n){return function(r){function i(){r.getBody().style.webkitUserSelect="",d&&(r.dom.removeClass(r.dom.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=!1)}function o(t){var n,i,o=t.target;if(l&&(s||o!=l)&&("TD"==o.nodeName||"TH"==o.nodeName)){i=a.getParent(o,"table"),i==c&&(s||(s=new e(r,i),s.setStartCell(l),r.getBody().style.webkitUserSelect="none"),s.setEndCell(o),d=!0),n=r.selection.getSel();try{n.removeAllRanges?n.removeAllRanges():n.empty()}catch(u){}t.preventDefault()}}var a=r.dom,s,l,c,d=!0;return r.on("MouseDown",function(e){2!=e.button&&(i(),l=a.getParent(e.target,"td,th"),c=a.getParent(l,"table"))}),r.on("mouseover",o),r.on("remove",function(){a.unbind(r.getDoc(),"mouseover",o)}),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 void(r?i.setStart(e,0):i.setEnd(e,e.nodeValue.length));if("BR"==e.nodeName)return void(r?i.setStartBefore(e):i.setEndBefore(e))}while(e=r?o.next():o.prev())}var i,o=r.selection,d,u,f,p,m;if(l){if(s&&(r.getBody().style.webkitUserSelect=""),d=a.select("td.mce-item-selected,th.mce-item-selected"),d.length>0){i=a.createRng(),f=d[0],m=d[d.length-1],i.setStartBefore(f),i.setEndAfter(f),e(f,1),u=new t(f,a.getParent(d[0],"table"));do if("TD"==f.nodeName||"TH"==f.nodeName){if(!a.hasClass(f,"mce-item-selected"))break;p=f}while(f=u.next());e(p),o.setRng(i)}r.nodeChanged(),l=s=c=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;t=e.getParent(r.selection.getStart(),"table"),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:[{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"),i.innerHTML=o.ie?"\xa0":'
',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],t&&(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,values:[{text:"Cell",value:"td"},{text:"Header cell",value:"th"}]},{label:"Scope",name:"scope",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{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],o&&(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,values:[{text:"Header",value:"thead"},{text:"Body",value:"tbody"},{text:"Footer",value:"tfoot"}]},{type:"listbox",name:"align",label:"Alignment",text:"None",maxWidth:null,values:[{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+=""+(o.ie?" ":" ")+" | ";a+="
"}a+="
",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+='1 x 1
'}function b(e,t,n){var i=n.getEl().getElementsByTagName("table")[0],o=n.parent().rel,a,s,l,c;if(n.isRtl()||"tl-tr"==o){for(s=9;s>=0;s--)for(a=0;10>a;a++)c=i.rows[s].childNodes[a].firstChild,r.dom.toggleClass(c,"mce-active",a>=e&&t>=s),a>=e&&t>=s&&(l=c);e=9-e,i.nextSibling.innerHTML=e+" x "+(t+1)}else{for(s=0;10>s;s++)for(a=0;10>a;a++)c=i.rows[s].childNodes[a].firstChild,r.dom.toggleClass(c,"mce-active",e>=a&&t>=s),e>=a&&t>=s&&(l=c);i.nextSibling.innerHTML=e+1+" x "+(t+1)}return l.parentNode}var C,x,w=this;r.addMenuItem("inserttable",{text:"Insert table",icon:"table",context:"table",onhide:function(){var e=this.menu.items()[0].getEl().getElementsByTagName("a");r.dom.removeClass(e,"mce-active"),r.dom.addClass(e[0],"mce-active")},menu:[{type:"container",html:y(),onPostRender:function(){this.lastX=this.lastY=0},onmousemove:function(e){var t=e.target,n,r;"A"==t.nodeName&&(n=parseInt(t.getAttribute("data-mce-x"),10),r=parseInt(t.getAttribute("data-mce-y"),10),(n!==this.lastX||r!==this.lastY)&&(b(n,r,e.control),this.lastX=n,this.lastY=r))},onkeydown:function(e){var t=this.lastX,n=this.lastY,r;switch(e.keyCode){case 37:t>0&&(t--,r=!0);break;case 39:r=!0,9>t&&t++;break;case 38:r=!0,n>0&&n--;break;case 40:r=!0,9>n&&n++}r&&(e.preventDefault(),e.stopPropagation(),b(t,n,e.control).focus(),this.lastX=t,this.lastY=n)},onclick:function(e){"A"==e.target.nodeName&&(e.preventDefault(),e.stopPropagation(),this.parent().cancel(),m(this.lastX+1,this.lastY+1))}}]}),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 _=[];l("inserttable tableprops deletetable | cell row column".split(" "),function(e){_.push("|"==e?{text:"-"}:r.menuItems[e])}),r.addButton("table",{type:"menubutton",title:"Table",menu:_}),o.isIE||r.on("click",function(e){e=e.target,"TABLE"===e.nodeName&&(r.selection.select(e),r.nodeChanged())}),w.quirks=new t(r),r.on("Init",function(){C=r.windowManager,w.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){x=e.cutRows()},mceTableCopyRow:function(e){x=e.copyRows()},mceTablePasteRowBefore:function(e){e.pasteRows(x,!0)},mceTablePasteRowAfter:function(e){e.pasteRows(x)},mceTableDelete:function(e){e.deleteTable()}},function(t,n){r.addCommand(n,function(){var n=new e(r);n&&(t(n),r.execCommand("mceRepaint"),w.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);
diff --git a/vendor_extra/tinymce/JakePackage.zip b/vendor_extra/tinymce/JakePackage.zip
index f22e4276c215a06f77daf5044bf09372c5d4b122..af9cd3b4e769a9e9314a4b653b3ce271b8fb7a46 100644
GIT binary patch
delta 159639
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
z
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