diff --git a/sites/all/libraries/chosen/chosen-sprite.png b/sites/all/libraries/chosen/chosen-sprite.png new file mode 100755 index 0000000000..c57da70b4b Binary files /dev/null and b/sites/all/libraries/chosen/chosen-sprite.png differ diff --git a/sites/all/libraries/chosen/chosen-sprite@2x.png b/sites/all/libraries/chosen/chosen-sprite@2x.png new file mode 100755 index 0000000000..6b50545202 Binary files /dev/null and b/sites/all/libraries/chosen/chosen-sprite@2x.png differ diff --git a/sites/all/libraries/chosen/chosen.css b/sites/all/libraries/chosen/chosen.css new file mode 100755 index 0000000000..5ab2603d5b --- /dev/null +++ b/sites/all/libraries/chosen/chosen.css @@ -0,0 +1,450 @@ +/*! +Chosen, a Select Box Enhancer for jQuery and Prototype +by Patrick Filler for Harvest, http://getharvest.com + +Version 1.4.0 +Full source at https://github.com/harvesthq/chosen +Copyright (c) 2011-2015 Harvest http://getharvest.com + +MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md +This file is generated by `grunt build`, do not edit it by hand. +*/ + +/* @group Base */ +.chosen-container { + position: relative; + display: inline-block; + vertical-align: middle; + font-size: 13px; + zoom: 1; + *display: inline; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +.chosen-container * { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.chosen-container .chosen-drop { + position: absolute; + top: 100%; + left: -9999px; + z-index: 1010; + width: 100%; + border: 1px solid #aaa; + border-top: 0; + background: #fff; + box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15); +} +.chosen-container.chosen-with-drop .chosen-drop { + left: 0; +} +.chosen-container a { + cursor: pointer; +} +.chosen-container .search-choice .group-name, .chosen-container .chosen-single .group-name { + margin-right: 4px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + font-weight: normal; + color: #999999; +} +.chosen-container .search-choice .group-name:after, .chosen-container .chosen-single .group-name:after { + content: ":"; + padding-left: 2px; + vertical-align: top; +} + +/* @end */ +/* @group Single Chosen */ +.chosen-container-single .chosen-single { + position: relative; + display: block; + overflow: hidden; + padding: 0 0 0 8px; + height: 25px; + border: 1px solid #aaa; + border-radius: 5px; + background-color: #fff; + background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4)); + background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); + background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); + background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); + background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); + background-clip: padding-box; + box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1); + color: #444; + text-decoration: none; + white-space: nowrap; + line-height: 24px; +} +.chosen-container-single .chosen-default { + color: #999; +} +.chosen-container-single .chosen-single span { + display: block; + overflow: hidden; + margin-right: 26px; + text-overflow: ellipsis; + white-space: nowrap; +} +.chosen-container-single .chosen-single-with-deselect span { + margin-right: 38px; +} +.chosen-container-single .chosen-single abbr { + position: absolute; + top: 6px; + right: 26px; + display: block; + width: 12px; + height: 12px; + background: url('chosen-sprite.png') -42px 1px no-repeat; + font-size: 1px; +} +.chosen-container-single .chosen-single abbr:hover { + background-position: -42px -10px; +} +.chosen-container-single.chosen-disabled .chosen-single abbr:hover { + background-position: -42px -10px; +} +.chosen-container-single .chosen-single div { + position: absolute; + top: 0; + right: 0; + display: block; + width: 18px; + height: 100%; +} +.chosen-container-single .chosen-single div b { + display: block; + width: 100%; + height: 100%; + background: url('chosen-sprite.png') no-repeat 0px 2px; +} +.chosen-container-single .chosen-search { + position: relative; + z-index: 1010; + margin: 0; + padding: 3px 4px; + white-space: nowrap; +} +.chosen-container-single .chosen-search input[type="text"] { + margin: 1px 0; + padding: 4px 20px 4px 5px; + width: 100%; + height: auto; + outline: 0; + border: 1px solid #aaa; + background: white url('chosen-sprite.png') no-repeat 100% -20px; + background: url('chosen-sprite.png') no-repeat 100% -20px; + font-size: 1em; + font-family: sans-serif; + line-height: normal; + border-radius: 0; +} +.chosen-container-single .chosen-drop { + margin-top: -1px; + border-radius: 0 0 4px 4px; + background-clip: padding-box; +} +.chosen-container-single.chosen-container-single-nosearch .chosen-search { + position: absolute; + left: -9999px; +} + +/* @end */ +/* @group Results */ +.chosen-container .chosen-results { + color: #444; + position: relative; + overflow-x: hidden; + overflow-y: auto; + margin: 0 4px 4px 0; + padding: 0 0 0 4px; + max-height: 240px; + -webkit-overflow-scrolling: touch; +} +.chosen-container .chosen-results li { + display: none; + margin: 0; + padding: 5px 6px; + list-style: none; + line-height: 15px; + word-wrap: break-word; + -webkit-touch-callout: none; +} +.chosen-container .chosen-results li.active-result { + display: list-item; + cursor: pointer; +} +.chosen-container .chosen-results li.disabled-result { + display: list-item; + color: #ccc; + cursor: default; +} +.chosen-container .chosen-results li.highlighted { + background-color: #3875d7; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); + background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%); + background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%); + background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%); + background-image: linear-gradient(#3875d7 20%, #2a62bc 90%); + color: #fff; +} +.chosen-container .chosen-results li.no-results { + color: #777; + display: list-item; + background: #f4f4f4; +} +.chosen-container .chosen-results li.group-result { + display: list-item; + font-weight: bold; + cursor: default; +} +.chosen-container .chosen-results li.group-option { + padding-left: 15px; +} +.chosen-container .chosen-results li em { + font-style: normal; + text-decoration: underline; +} + +/* @end */ +/* @group Multi Chosen */ +.chosen-container-multi .chosen-choices { + position: relative; + overflow: hidden; + margin: 0; + padding: 0 5px; + width: 100%; + height: auto !important; + height: 1%; + border: 1px solid #aaa; + background-color: #fff; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff)); + background-image: -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%); + background-image: -moz-linear-gradient(#eeeeee 1%, #ffffff 15%); + background-image: -o-linear-gradient(#eeeeee 1%, #ffffff 15%); + background-image: linear-gradient(#eeeeee 1%, #ffffff 15%); + cursor: text; +} +.chosen-container-multi .chosen-choices li { + float: left; + list-style: none; +} +.chosen-container-multi .chosen-choices li.search-field { + margin: 0; + padding: 0; + white-space: nowrap; +} +.chosen-container-multi .chosen-choices li.search-field input[type="text"] { + margin: 1px 0; + padding: 0; + height: 25px; + outline: 0; + border: 0 !important; + background: transparent !important; + box-shadow: none; + color: #999; + font-size: 100%; + font-family: sans-serif; + line-height: normal; + border-radius: 0; +} +.chosen-container-multi .chosen-choices li.search-choice { + position: relative; + margin: 3px 5px 3px 0; + padding: 3px 20px 3px 5px; + border: 1px solid #aaa; + max-width: 100%; + border-radius: 3px; + background-color: #eeeeee; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee)); + background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + background-size: 100% 19px; + background-repeat: repeat-x; + background-clip: padding-box; + box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05); + color: #333; + line-height: 13px; + cursor: default; +} +.chosen-container-multi .chosen-choices li.search-choice span { + word-wrap: break-word; +} +.chosen-container-multi .chosen-choices li.search-choice .search-choice-close { + position: absolute; + top: 4px; + right: 3px; + display: block; + width: 12px; + height: 12px; + background: url('chosen-sprite.png') -42px 1px no-repeat; + font-size: 1px; +} +.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover { + background-position: -42px -10px; +} +.chosen-container-multi .chosen-choices li.search-choice-disabled { + padding-right: 5px; + border: 1px solid #ccc; + background-color: #e4e4e4; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee)); + background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); + color: #666; +} +.chosen-container-multi .chosen-choices li.search-choice-focus { + background: #d4d4d4; +} +.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close { + background-position: -42px -10px; +} +.chosen-container-multi .chosen-results { + margin: 0; + padding: 0; +} +.chosen-container-multi .chosen-drop .result-selected { + display: list-item; + color: #ccc; + cursor: default; +} + +/* @end */ +/* @group Active */ +.chosen-container-active .chosen-single { + border: 1px solid #5897fb; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); +} +.chosen-container-active.chosen-with-drop .chosen-single { + border: 1px solid #aaa; + -moz-border-radius-bottomright: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomleft: 0; + border-bottom-left-radius: 0; + background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff)); + background-image: -webkit-linear-gradient(#eeeeee 20%, #ffffff 80%); + background-image: -moz-linear-gradient(#eeeeee 20%, #ffffff 80%); + background-image: -o-linear-gradient(#eeeeee 20%, #ffffff 80%); + background-image: linear-gradient(#eeeeee 20%, #ffffff 80%); + box-shadow: 0 1px 0 #fff inset; +} +.chosen-container-active.chosen-with-drop .chosen-single div { + border-left: none; + background: transparent; +} +.chosen-container-active.chosen-with-drop .chosen-single div b { + background-position: -18px 2px; +} +.chosen-container-active .chosen-choices { + border: 1px solid #5897fb; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); +} +.chosen-container-active .chosen-choices li.search-field input[type="text"] { + color: #222 !important; +} + +/* @end */ +/* @group Disabled Support */ +.chosen-disabled { + opacity: 0.5 !important; + cursor: default; +} +.chosen-disabled .chosen-single { + cursor: default; +} +.chosen-disabled .chosen-choices .search-choice .search-choice-close { + cursor: default; +} + +/* @end */ +/* @group Right to Left */ +.chosen-rtl { + text-align: right; +} +.chosen-rtl .chosen-single { + overflow: visible; + padding: 0 8px 0 0; +} +.chosen-rtl .chosen-single span { + margin-right: 0; + margin-left: 26px; + direction: rtl; +} +.chosen-rtl .chosen-single-with-deselect span { + margin-left: 38px; +} +.chosen-rtl .chosen-single div { + right: auto; + left: 3px; +} +.chosen-rtl .chosen-single abbr { + right: auto; + left: 26px; +} +.chosen-rtl .chosen-choices li { + float: right; +} +.chosen-rtl .chosen-choices li.search-field input[type="text"] { + direction: rtl; +} +.chosen-rtl .chosen-choices li.search-choice { + margin: 3px 5px 3px 0; + padding: 3px 5px 3px 19px; +} +.chosen-rtl .chosen-choices li.search-choice .search-choice-close { + right: auto; + left: 4px; +} +.chosen-rtl.chosen-container-single-nosearch .chosen-search, +.chosen-rtl .chosen-drop { + left: 9999px; +} +.chosen-rtl.chosen-container-single .chosen-results { + margin: 0 0 4px 4px; + padding: 0 4px 0 0; +} +.chosen-rtl .chosen-results li.group-option { + padding-right: 15px; + padding-left: 0; +} +.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div { + border-right: none; +} +.chosen-rtl .chosen-search input[type="text"] { + padding: 4px 5px 4px 20px; + background: white url('chosen-sprite.png') no-repeat -30px -20px; + background: url('chosen-sprite.png') no-repeat -30px -20px; + direction: rtl; +} +.chosen-rtl.chosen-container-single .chosen-single div b { + background-position: 6px 2px; +} +.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b { + background-position: -12px 2px; +} + +/* @end */ +/* @group Retina compatibility */ +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi), only screen and (min-resolution: 1.5dppx) { + .chosen-rtl .chosen-search input[type="text"], + .chosen-container-single .chosen-single abbr, + .chosen-container-single .chosen-single div b, + .chosen-container-single .chosen-search input[type="text"], + .chosen-container-multi .chosen-choices .search-choice .search-choice-close, + .chosen-container .chosen-results-scroll-down span, + .chosen-container .chosen-results-scroll-up span { + background-image: url('chosen-sprite@2x.png') !important; + background-size: 52px 37px !important; + background-repeat: no-repeat !important; + } +} +/* @end */ diff --git a/sites/all/libraries/chosen/chosen.jquery.js b/sites/all/libraries/chosen/chosen.jquery.js new file mode 100755 index 0000000000..450ec2f6e4 --- /dev/null +++ b/sites/all/libraries/chosen/chosen.jquery.js @@ -0,0 +1,1258 @@ +/*! +Chosen, a Select Box Enhancer for jQuery and Prototype +by Patrick Filler for Harvest, http://getharvest.com + +Version 1.4.0 +Full source at https://github.com/harvesthq/chosen +Copyright (c) 2011-2015 Harvest http://getharvest.com + +MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md +This file is generated by `grunt build`, do not edit it by hand. +*/ + +(function() { + var $, AbstractChosen, Chosen, SelectParser, _ref, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + SelectParser = (function() { + function SelectParser() { + this.options_index = 0; + this.parsed = []; + } + + SelectParser.prototype.add_node = function(child) { + if (child.nodeName.toUpperCase() === "OPTGROUP") { + return this.add_group(child); + } else { + return this.add_option(child); + } + }; + + SelectParser.prototype.add_group = function(group) { + var group_position, option, _i, _len, _ref, _results; + group_position = this.parsed.length; + this.parsed.push({ + array_index: group_position, + group: true, + label: this.escapeExpression(group.label), + title: group.title ? group.title : void 0, + children: 0, + disabled: group.disabled, + classes: group.className + }); + _ref = group.childNodes; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + _results.push(this.add_option(option, group_position, group.disabled)); + } + return _results; + }; + + SelectParser.prototype.add_option = function(option, group_position, group_disabled) { + if (option.nodeName.toUpperCase() === "OPTION") { + if (option.text !== "") { + if (group_position != null) { + this.parsed[group_position].children += 1; + } + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + value: option.value, + text: option.text, + html: option.innerHTML, + title: option.title ? option.title : void 0, + selected: option.selected, + disabled: group_disabled === true ? group_disabled : option.disabled, + group_array_index: group_position, + group_label: group_position != null ? this.parsed[group_position].label : null, + classes: option.className, + style: option.style.cssText + }); + } else { + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + empty: true + }); + } + return this.options_index += 1; + } + }; + + SelectParser.prototype.escapeExpression = function(text) { + var map, unsafe_chars; + if ((text == null) || text === false) { + return ""; + } + if (!/[\&\<\>\"\'\`]/.test(text)) { + return text; + } + map = { + "<": "<", + ">": ">", + '"': """, + "'": "'", + "`": "`" + }; + unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g; + return text.replace(unsafe_chars, function(chr) { + return map[chr] || "&"; + }); + }; + + return SelectParser; + + })(); + + SelectParser.select_to_array = function(select) { + var child, parser, _i, _len, _ref; + parser = new SelectParser(); + _ref = select.childNodes; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + child = _ref[_i]; + parser.add_node(child); + } + return parser.parsed; + }; + + AbstractChosen = (function() { + function AbstractChosen(form_field, options) { + this.form_field = form_field; + this.options = options != null ? options : {}; + if (!AbstractChosen.browser_is_supported()) { + return; + } + this.is_multiple = this.form_field.multiple; + this.set_default_text(); + this.set_default_values(); + this.setup(); + this.set_up_html(); + this.register_observers(); + this.on_ready(); + } + + AbstractChosen.prototype.set_default_values = function() { + var _this = this; + this.click_test_action = function(evt) { + return _this.test_active_click(evt); + }; + this.activate_action = function(evt) { + return _this.activate_field(evt); + }; + this.active_field = false; + this.mouse_on_container = false; + this.results_showing = false; + this.result_highlighted = null; + this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false; + this.disable_search_threshold = this.options.disable_search_threshold || 0; + this.disable_search = this.options.disable_search || false; + this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true; + this.group_search = this.options.group_search != null ? this.options.group_search : true; + this.search_contains = this.options.search_contains || false; + this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true; + this.max_selected_options = this.options.max_selected_options || Infinity; + this.inherit_select_classes = this.options.inherit_select_classes || false; + this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true; + this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true; + return this.include_group_label_in_selected = this.options.include_group_label_in_selected || false; + }; + + AbstractChosen.prototype.set_default_text = function() { + if (this.form_field.getAttribute("data-placeholder")) { + this.default_text = this.form_field.getAttribute("data-placeholder"); + } else if (this.is_multiple) { + this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text; + } else { + this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text; + } + return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text; + }; + + AbstractChosen.prototype.choice_label = function(item) { + if (this.include_group_label_in_selected && (item.group_label != null)) { + return "" + item.group_label + "" + item.html; + } else { + return item.html; + } + }; + + AbstractChosen.prototype.mouse_enter = function() { + return this.mouse_on_container = true; + }; + + AbstractChosen.prototype.mouse_leave = function() { + return this.mouse_on_container = false; + }; + + AbstractChosen.prototype.input_focus = function(evt) { + var _this = this; + if (this.is_multiple) { + if (!this.active_field) { + return setTimeout((function() { + return _this.container_mousedown(); + }), 50); + } + } else { + if (!this.active_field) { + return this.activate_field(); + } + } + }; + + AbstractChosen.prototype.input_blur = function(evt) { + var _this = this; + if (!this.mouse_on_container) { + this.active_field = false; + return setTimeout((function() { + return _this.blur_test(); + }), 100); + } + }; + + AbstractChosen.prototype.results_option_build = function(options) { + var content, data, _i, _len, _ref; + content = ''; + _ref = this.results_data; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + data = _ref[_i]; + if (data.group) { + content += this.result_add_group(data); + } else { + content += this.result_add_option(data); + } + if (options != null ? options.first : void 0) { + if (data.selected && this.is_multiple) { + this.choice_build(data); + } else if (data.selected && !this.is_multiple) { + this.single_set_selected_text(data.html); + } + } + } + return content; + }; + + AbstractChosen.prototype.result_add_option = function(option) { + var classes, option_el; + if (!option.search_match) { + return ''; + } + if (!this.include_option_in_results(option)) { + return ''; + } + classes = []; + if (!option.disabled && !(option.selected && this.is_multiple)) { + classes.push("active-result"); + } + if (option.disabled && !(option.selected && this.is_multiple)) { + classes.push("disabled-result"); + } + if (option.selected) { + classes.push("result-selected"); + } + if (option.group_array_index != null) { + classes.push("group-option"); + } + if (option.classes !== "") { + classes.push(option.classes); + } + option_el = document.createElement("li"); + option_el.className = classes.join(" "); + option_el.style.cssText = option.style; + option_el.setAttribute("data-option-array-index", option.array_index); + option_el.innerHTML = option.search_text; + if (option.title) { + option_el.title = option.title; + } + return this.outerHTML(option_el); + }; + + AbstractChosen.prototype.result_add_group = function(group) { + var classes, group_el; + if (!(group.search_match || group.group_match)) { + return ''; + } + if (!(group.active_options > 0)) { + return ''; + } + classes = []; + classes.push("group-result"); + if (group.classes) { + classes.push(group.classes); + } + group_el = document.createElement("li"); + group_el.className = classes.join(" "); + group_el.innerHTML = group.search_text; + if (group.title) { + group_el.title = group.title; + } + return this.outerHTML(group_el); + }; + + AbstractChosen.prototype.results_update_field = function() { + this.set_default_text(); + if (!this.is_multiple) { + this.results_reset_cleanup(); + } + this.result_clear_highlight(); + this.results_build(); + if (this.results_showing) { + return this.winnow_results(); + } + }; + + AbstractChosen.prototype.reset_single_select_options = function() { + var result, _i, _len, _ref, _results; + _ref = this.results_data; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + result = _ref[_i]; + if (result.selected) { + _results.push(result.selected = false); + } else { + _results.push(void 0); + } + } + return _results; + }; + + AbstractChosen.prototype.results_toggle = function() { + if (this.results_showing) { + return this.results_hide(); + } else { + return this.results_show(); + } + }; + + AbstractChosen.prototype.results_search = function(evt) { + if (this.results_showing) { + return this.winnow_results(); + } else { + return this.results_show(); + } + }; + + AbstractChosen.prototype.winnow_results = function() { + var escapedSearchText, option, regex, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref; + this.no_results_clear(); + results = 0; + searchText = this.get_search_text(); + escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + zregex = new RegExp(escapedSearchText, 'i'); + regex = this.get_search_regex(escapedSearchText); + _ref = this.results_data; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + option.search_match = false; + results_group = null; + if (this.include_option_in_results(option)) { + if (option.group) { + option.group_match = false; + option.active_options = 0; + } + if ((option.group_array_index != null) && this.results_data[option.group_array_index]) { + results_group = this.results_data[option.group_array_index]; + if (results_group.active_options === 0 && results_group.search_match) { + results += 1; + } + results_group.active_options += 1; + } + if (!(option.group && !this.group_search)) { + option.search_text = option.group ? option.label : option.html; + option.search_match = this.search_string_match(option.search_text, regex); + if (option.search_match && !option.group) { + results += 1; + } + if (option.search_match) { + if (searchText.length) { + startpos = option.search_text.search(zregex); + text = option.search_text.substr(0, startpos + searchText.length) + '' + option.search_text.substr(startpos + searchText.length); + option.search_text = text.substr(0, startpos) + '' + text.substr(startpos); + } + if (results_group != null) { + results_group.group_match = true; + } + } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) { + option.search_match = true; + } + } + } + } + this.result_clear_highlight(); + if (results < 1 && searchText.length) { + this.update_results_content(""); + return this.no_results(searchText); + } else { + this.update_results_content(this.results_option_build()); + return this.winnow_results_set_highlight(); + } + }; + + AbstractChosen.prototype.get_search_regex = function(escaped_search_string) { + var regex_anchor; + regex_anchor = this.search_contains ? "" : "^"; + return new RegExp(regex_anchor + escaped_search_string, 'i'); + }; + + AbstractChosen.prototype.search_string_match = function(search_string, regex) { + var part, parts, _i, _len; + if (regex.test(search_string)) { + return true; + } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) { + parts = search_string.replace(/\[|\]/g, "").split(" "); + if (parts.length) { + for (_i = 0, _len = parts.length; _i < _len; _i++) { + part = parts[_i]; + if (regex.test(part)) { + return true; + } + } + } + } + }; + + AbstractChosen.prototype.choices_count = function() { + var option, _i, _len, _ref; + if (this.selected_option_count != null) { + return this.selected_option_count; + } + this.selected_option_count = 0; + _ref = this.form_field.options; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + if (option.selected) { + this.selected_option_count += 1; + } + } + return this.selected_option_count; + }; + + AbstractChosen.prototype.choices_click = function(evt) { + evt.preventDefault(); + if (!(this.results_showing || this.is_disabled)) { + return this.results_show(); + } + }; + + AbstractChosen.prototype.keyup_checker = function(evt) { + var stroke, _ref; + stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; + this.search_field_scale(); + switch (stroke) { + case 8: + if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) { + return this.keydown_backstroke(); + } else if (!this.pending_backstroke) { + this.result_clear_highlight(); + return this.results_search(); + } + break; + case 13: + evt.preventDefault(); + if (this.results_showing) { + return this.result_select(evt); + } + break; + case 27: + if (this.results_showing) { + this.results_hide(); + } + return true; + case 9: + case 38: + case 40: + case 16: + case 91: + case 17: + break; + default: + return this.results_search(); + } + }; + + AbstractChosen.prototype.clipboard_event_checker = function(evt) { + var _this = this; + return setTimeout((function() { + return _this.results_search(); + }), 50); + }; + + AbstractChosen.prototype.container_width = function() { + if (this.options.width != null) { + return this.options.width; + } else { + return "" + this.form_field.offsetWidth + "px"; + } + }; + + AbstractChosen.prototype.include_option_in_results = function(option) { + if (this.is_multiple && (!this.display_selected_options && option.selected)) { + return false; + } + if (!this.display_disabled_options && option.disabled) { + return false; + } + if (option.empty) { + return false; + } + return true; + }; + + AbstractChosen.prototype.search_results_touchstart = function(evt) { + this.touch_started = true; + return this.search_results_mouseover(evt); + }; + + AbstractChosen.prototype.search_results_touchmove = function(evt) { + this.touch_started = false; + return this.search_results_mouseout(evt); + }; + + AbstractChosen.prototype.search_results_touchend = function(evt) { + if (this.touch_started) { + return this.search_results_mouseup(evt); + } + }; + + AbstractChosen.prototype.outerHTML = function(element) { + var tmp; + if (element.outerHTML) { + return element.outerHTML; + } + tmp = document.createElement("div"); + tmp.appendChild(element); + return tmp.innerHTML; + }; + + AbstractChosen.browser_is_supported = function() { + if (window.navigator.appName === "Microsoft Internet Explorer") { + return document.documentMode >= 8; + } + if (/iP(od|hone)/i.test(window.navigator.userAgent)) { + return false; + } + if (/Android/i.test(window.navigator.userAgent)) { + if (/Mobile/i.test(window.navigator.userAgent)) { + return false; + } + } + return true; + }; + + AbstractChosen.default_multiple_text = "Select Some Options"; + + AbstractChosen.default_single_text = "Select an Option"; + + AbstractChosen.default_no_result_text = "No results match"; + + return AbstractChosen; + + })(); + + $ = jQuery; + + $.fn.extend({ + chosen: function(options) { + if (!AbstractChosen.browser_is_supported()) { + return this; + } + return this.each(function(input_field) { + var $this, chosen; + $this = $(this); + chosen = $this.data('chosen'); + if (options === 'destroy' && chosen instanceof Chosen) { + chosen.destroy(); + } else if (!(chosen instanceof Chosen)) { + $this.data('chosen', new Chosen(this, options)); + } + }); + } + }); + + Chosen = (function(_super) { + __extends(Chosen, _super); + + function Chosen() { + _ref = Chosen.__super__.constructor.apply(this, arguments); + return _ref; + } + + Chosen.prototype.setup = function() { + this.form_field_jq = $(this.form_field); + this.current_selectedIndex = this.form_field.selectedIndex; + return this.is_rtl = this.form_field_jq.hasClass("chosen-rtl"); + }; + + Chosen.prototype.set_up_html = function() { + var container_classes, container_props; + container_classes = ["chosen-container"]; + container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single")); + if (this.inherit_select_classes && this.form_field.className) { + container_classes.push(this.form_field.className); + } + if (this.is_rtl) { + container_classes.push("chosen-rtl"); + } + container_props = { + 'class': container_classes.join(' '), + 'style': "width: " + (this.container_width()) + ";", + 'title': this.form_field.title + }; + if (this.form_field.id.length) { + container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen"; + } + this.container = $("
", container_props); + if (this.is_multiple) { + this.container.html('
    '); + } else { + this.container.html('' + this.default_text + '
      '); + } + this.form_field_jq.hide().after(this.container); + this.dropdown = this.container.find('div.chosen-drop').first(); + this.search_field = this.container.find('input').first(); + this.search_results = this.container.find('ul.chosen-results').first(); + this.search_field_scale(); + this.search_no_results = this.container.find('li.no-results').first(); + if (this.is_multiple) { + this.search_choices = this.container.find('ul.chosen-choices').first(); + this.search_container = this.container.find('li.search-field').first(); + } else { + this.search_container = this.container.find('div.chosen-search').first(); + this.selected_item = this.container.find('.chosen-single').first(); + } + this.results_build(); + this.set_tab_index(); + return this.set_label_behavior(); + }; + + Chosen.prototype.on_ready = function() { + return this.form_field_jq.trigger("chosen:ready", { + chosen: this + }); + }; + + Chosen.prototype.register_observers = function() { + var _this = this; + this.container.bind('touchstart.chosen', function(evt) { + _this.container_mousedown(evt); + }); + this.container.bind('touchend.chosen', function(evt) { + _this.container_mouseup(evt); + }); + this.container.bind('mousedown.chosen', function(evt) { + _this.container_mousedown(evt); + }); + this.container.bind('mouseup.chosen', function(evt) { + _this.container_mouseup(evt); + }); + this.container.bind('mouseenter.chosen', function(evt) { + _this.mouse_enter(evt); + }); + this.container.bind('mouseleave.chosen', function(evt) { + _this.mouse_leave(evt); + }); + this.search_results.bind('mouseup.chosen', function(evt) { + _this.search_results_mouseup(evt); + }); + this.search_results.bind('mouseover.chosen', function(evt) { + _this.search_results_mouseover(evt); + }); + this.search_results.bind('mouseout.chosen', function(evt) { + _this.search_results_mouseout(evt); + }); + this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) { + _this.search_results_mousewheel(evt); + }); + this.search_results.bind('touchstart.chosen', function(evt) { + _this.search_results_touchstart(evt); + }); + this.search_results.bind('touchmove.chosen', function(evt) { + _this.search_results_touchmove(evt); + }); + this.search_results.bind('touchend.chosen', function(evt) { + _this.search_results_touchend(evt); + }); + this.form_field_jq.bind("chosen:updated.chosen", function(evt) { + _this.results_update_field(evt); + }); + this.form_field_jq.bind("chosen:activate.chosen", function(evt) { + _this.activate_field(evt); + }); + this.form_field_jq.bind("chosen:open.chosen", function(evt) { + _this.container_mousedown(evt); + }); + this.form_field_jq.bind("chosen:close.chosen", function(evt) { + _this.input_blur(evt); + }); + this.search_field.bind('blur.chosen', function(evt) { + _this.input_blur(evt); + }); + this.search_field.bind('keyup.chosen', function(evt) { + _this.keyup_checker(evt); + }); + this.search_field.bind('keydown.chosen', function(evt) { + _this.keydown_checker(evt); + }); + this.search_field.bind('focus.chosen', function(evt) { + _this.input_focus(evt); + }); + this.search_field.bind('cut.chosen', function(evt) { + _this.clipboard_event_checker(evt); + }); + this.search_field.bind('paste.chosen', function(evt) { + _this.clipboard_event_checker(evt); + }); + if (this.is_multiple) { + return this.search_choices.bind('click.chosen', function(evt) { + _this.choices_click(evt); + }); + } else { + return this.container.bind('click.chosen', function(evt) { + evt.preventDefault(); + }); + } + }; + + Chosen.prototype.destroy = function() { + $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action); + if (this.search_field[0].tabIndex) { + this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex; + } + this.container.remove(); + this.form_field_jq.removeData('chosen'); + return this.form_field_jq.show(); + }; + + Chosen.prototype.search_field_disabled = function() { + this.is_disabled = this.form_field_jq[0].disabled; + if (this.is_disabled) { + this.container.addClass('chosen-disabled'); + this.search_field[0].disabled = true; + if (!this.is_multiple) { + this.selected_item.unbind("focus.chosen", this.activate_action); + } + return this.close_field(); + } else { + this.container.removeClass('chosen-disabled'); + this.search_field[0].disabled = false; + if (!this.is_multiple) { + return this.selected_item.bind("focus.chosen", this.activate_action); + } + } + }; + + Chosen.prototype.container_mousedown = function(evt) { + if (!this.is_disabled) { + if (evt && evt.type === "mousedown" && !this.results_showing) { + evt.preventDefault(); + } + if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) { + if (!this.active_field) { + if (this.is_multiple) { + this.search_field.val(""); + } + $(this.container[0].ownerDocument).bind('click.chosen', this.click_test_action); + this.results_show(); + } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) { + evt.preventDefault(); + this.results_toggle(); + } + return this.activate_field(); + } + } + }; + + Chosen.prototype.container_mouseup = function(evt) { + if (evt.target.nodeName === "ABBR" && !this.is_disabled) { + return this.results_reset(evt); + } + }; + + Chosen.prototype.search_results_mousewheel = function(evt) { + var delta; + if (evt.originalEvent) { + delta = evt.originalEvent.deltaY || -evt.originalEvent.wheelDelta || evt.originalEvent.detail; + } + if (delta != null) { + evt.preventDefault(); + if (evt.type === 'DOMMouseScroll') { + delta = delta * 40; + } + return this.search_results.scrollTop(delta + this.search_results.scrollTop()); + } + }; + + Chosen.prototype.blur_test = function(evt) { + if (!this.active_field && this.container.hasClass("chosen-container-active")) { + return this.close_field(); + } + }; + + Chosen.prototype.close_field = function() { + $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action); + this.active_field = false; + this.results_hide(); + this.container.removeClass("chosen-container-active"); + this.clear_backstroke(); + this.show_search_field_default(); + return this.search_field_scale(); + }; + + Chosen.prototype.activate_field = function() { + this.container.addClass("chosen-container-active"); + this.active_field = true; + this.search_field.val(this.search_field.val()); + return this.search_field.focus(); + }; + + Chosen.prototype.test_active_click = function(evt) { + var active_container; + active_container = $(evt.target).closest('.chosen-container'); + if (active_container.length && this.container[0] === active_container[0]) { + return this.active_field = true; + } else { + return this.close_field(); + } + }; + + Chosen.prototype.results_build = function() { + this.parsing = true; + this.selected_option_count = null; + this.results_data = SelectParser.select_to_array(this.form_field); + if (this.is_multiple) { + this.search_choices.find("li.search-choice").remove(); + } else if (!this.is_multiple) { + this.single_set_selected_text(); + if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) { + this.search_field[0].readOnly = true; + this.container.addClass("chosen-container-single-nosearch"); + } else { + this.search_field[0].readOnly = false; + this.container.removeClass("chosen-container-single-nosearch"); + } + } + this.update_results_content(this.results_option_build({ + first: true + })); + this.search_field_disabled(); + this.show_search_field_default(); + this.search_field_scale(); + return this.parsing = false; + }; + + Chosen.prototype.result_do_highlight = function(el) { + var high_bottom, high_top, maxHeight, visible_bottom, visible_top; + if (el.length) { + this.result_clear_highlight(); + this.result_highlight = el; + this.result_highlight.addClass("highlighted"); + maxHeight = parseInt(this.search_results.css("maxHeight"), 10); + visible_top = this.search_results.scrollTop(); + visible_bottom = maxHeight + visible_top; + high_top = this.result_highlight.position().top + this.search_results.scrollTop(); + high_bottom = high_top + this.result_highlight.outerHeight(); + if (high_bottom >= visible_bottom) { + return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0); + } else if (high_top < visible_top) { + return this.search_results.scrollTop(high_top); + } + } + }; + + Chosen.prototype.result_clear_highlight = function() { + if (this.result_highlight) { + this.result_highlight.removeClass("highlighted"); + } + return this.result_highlight = null; + }; + + Chosen.prototype.results_show = function() { + if (this.is_multiple && this.max_selected_options <= this.choices_count()) { + this.form_field_jq.trigger("chosen:maxselected", { + chosen: this + }); + return false; + } + this.container.addClass("chosen-with-drop"); + this.results_showing = true; + this.search_field.focus(); + this.search_field.val(this.search_field.val()); + this.winnow_results(); + return this.form_field_jq.trigger("chosen:showing_dropdown", { + chosen: this + }); + }; + + Chosen.prototype.update_results_content = function(content) { + return this.search_results.html(content); + }; + + Chosen.prototype.results_hide = function() { + if (this.results_showing) { + this.result_clear_highlight(); + this.container.removeClass("chosen-with-drop"); + this.form_field_jq.trigger("chosen:hiding_dropdown", { + chosen: this + }); + } + return this.results_showing = false; + }; + + Chosen.prototype.set_tab_index = function(el) { + var ti; + if (this.form_field.tabIndex) { + ti = this.form_field.tabIndex; + this.form_field.tabIndex = -1; + return this.search_field[0].tabIndex = ti; + } + }; + + Chosen.prototype.set_label_behavior = function() { + var _this = this; + this.form_field_label = this.form_field_jq.parents("label"); + if (!this.form_field_label.length && this.form_field.id.length) { + this.form_field_label = $("label[for='" + this.form_field.id + "']"); + } + if (this.form_field_label.length > 0) { + return this.form_field_label.bind('click.chosen', function(evt) { + if (_this.is_multiple) { + return _this.container_mousedown(evt); + } else { + return _this.activate_field(); + } + }); + } + }; + + Chosen.prototype.show_search_field_default = function() { + if (this.is_multiple && this.choices_count() < 1 && !this.active_field) { + this.search_field.val(this.default_text); + return this.search_field.addClass("default"); + } else { + this.search_field.val(""); + return this.search_field.removeClass("default"); + } + }; + + Chosen.prototype.search_results_mouseup = function(evt) { + var target; + target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); + if (target.length) { + this.result_highlight = target; + this.result_select(evt); + return this.search_field.focus(); + } + }; + + Chosen.prototype.search_results_mouseover = function(evt) { + var target; + target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); + if (target) { + return this.result_do_highlight(target); + } + }; + + Chosen.prototype.search_results_mouseout = function(evt) { + if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) { + return this.result_clear_highlight(); + } + }; + + Chosen.prototype.choice_build = function(item) { + var choice, close_link, + _this = this; + choice = $('
    • ', { + "class": "search-choice" + }).html("" + (this.choice_label(item)) + ""); + if (item.disabled) { + choice.addClass('search-choice-disabled'); + } else { + close_link = $('', { + "class": 'search-choice-close', + 'data-option-array-index': item.array_index + }); + close_link.bind('click.chosen', function(evt) { + return _this.choice_destroy_link_click(evt); + }); + choice.append(close_link); + } + return this.search_container.before(choice); + }; + + Chosen.prototype.choice_destroy_link_click = function(evt) { + evt.preventDefault(); + evt.stopPropagation(); + if (!this.is_disabled) { + return this.choice_destroy($(evt.target)); + } + }; + + Chosen.prototype.choice_destroy = function(link) { + if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) { + this.show_search_field_default(); + if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) { + this.results_hide(); + } + link.parents('li').first().remove(); + return this.search_field_scale(); + } + }; + + Chosen.prototype.results_reset = function() { + this.reset_single_select_options(); + this.form_field.options[0].selected = true; + this.single_set_selected_text(); + this.show_search_field_default(); + this.results_reset_cleanup(); + this.form_field_jq.trigger("change"); + if (this.active_field) { + return this.results_hide(); + } + }; + + Chosen.prototype.results_reset_cleanup = function() { + this.current_selectedIndex = this.form_field.selectedIndex; + return this.selected_item.find("abbr").remove(); + }; + + Chosen.prototype.result_select = function(evt) { + var high, item; + if (this.result_highlight) { + high = this.result_highlight; + this.result_clear_highlight(); + if (this.is_multiple && this.max_selected_options <= this.choices_count()) { + this.form_field_jq.trigger("chosen:maxselected", { + chosen: this + }); + return false; + } + if (this.is_multiple) { + high.removeClass("active-result"); + } else { + this.reset_single_select_options(); + } + item = this.results_data[high[0].getAttribute("data-option-array-index")]; + item.selected = true; + this.form_field.options[item.options_index].selected = true; + this.selected_option_count = null; + if (this.is_multiple) { + this.choice_build(item); + } else { + this.single_set_selected_text(this.choice_label(item)); + } + if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) { + this.results_hide(); + } + this.search_field.val(""); + if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) { + this.form_field_jq.trigger("change", { + 'selected': this.form_field.options[item.options_index].value + }); + } + this.current_selectedIndex = this.form_field.selectedIndex; + evt.preventDefault(); + return this.search_field_scale(); + } + }; + + Chosen.prototype.single_set_selected_text = function(text) { + if (text == null) { + text = this.default_text; + } + if (text === this.default_text) { + this.selected_item.addClass("chosen-default"); + } else { + this.single_deselect_control_build(); + this.selected_item.removeClass("chosen-default"); + } + return this.selected_item.find("span").html(text); + }; + + Chosen.prototype.result_deselect = function(pos) { + var result_data; + result_data = this.results_data[pos]; + if (!this.form_field.options[result_data.options_index].disabled) { + result_data.selected = false; + this.form_field.options[result_data.options_index].selected = false; + this.selected_option_count = null; + this.result_clear_highlight(); + if (this.results_showing) { + this.winnow_results(); + } + this.form_field_jq.trigger("change", { + deselected: this.form_field.options[result_data.options_index].value + }); + this.search_field_scale(); + return true; + } else { + return false; + } + }; + + Chosen.prototype.single_deselect_control_build = function() { + if (!this.allow_single_deselect) { + return; + } + if (!this.selected_item.find("abbr").length) { + this.selected_item.find("span").first().after(""); + } + return this.selected_item.addClass("chosen-single-with-deselect"); + }; + + Chosen.prototype.get_search_text = function() { + if (this.search_field.val() === this.default_text) { + return ""; + } else { + return $('
      ').text($.trim(this.search_field.val())).html(); + } + }; + + Chosen.prototype.winnow_results_set_highlight = function() { + var do_high, selected_results; + selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : []; + do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first(); + if (do_high != null) { + return this.result_do_highlight(do_high); + } + }; + + Chosen.prototype.no_results = function(terms) { + var no_results_html; + no_results_html = $('
    • ' + this.results_none_found + ' ""
    • '); + no_results_html.find("span").first().html(terms); + this.search_results.append(no_results_html); + return this.form_field_jq.trigger("chosen:no_results", { + chosen: this + }); + }; + + Chosen.prototype.no_results_clear = function() { + return this.search_results.find(".no-results").remove(); + }; + + Chosen.prototype.keydown_arrow = function() { + var next_sib; + if (this.results_showing && this.result_highlight) { + next_sib = this.result_highlight.nextAll("li.active-result").first(); + if (next_sib) { + return this.result_do_highlight(next_sib); + } + } else { + return this.results_show(); + } + }; + + Chosen.prototype.keyup_arrow = function() { + var prev_sibs; + if (!this.results_showing && !this.is_multiple) { + return this.results_show(); + } else if (this.result_highlight) { + prev_sibs = this.result_highlight.prevAll("li.active-result"); + if (prev_sibs.length) { + return this.result_do_highlight(prev_sibs.first()); + } else { + if (this.choices_count() > 0) { + this.results_hide(); + } + return this.result_clear_highlight(); + } + } + }; + + Chosen.prototype.keydown_backstroke = function() { + var next_available_destroy; + if (this.pending_backstroke) { + this.choice_destroy(this.pending_backstroke.find("a").first()); + return this.clear_backstroke(); + } else { + next_available_destroy = this.search_container.siblings("li.search-choice").last(); + if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) { + this.pending_backstroke = next_available_destroy; + if (this.single_backstroke_delete) { + return this.keydown_backstroke(); + } else { + return this.pending_backstroke.addClass("search-choice-focus"); + } + } + } + }; + + Chosen.prototype.clear_backstroke = function() { + if (this.pending_backstroke) { + this.pending_backstroke.removeClass("search-choice-focus"); + } + return this.pending_backstroke = null; + }; + + Chosen.prototype.keydown_checker = function(evt) { + var stroke, _ref1; + stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode; + this.search_field_scale(); + if (stroke !== 8 && this.pending_backstroke) { + this.clear_backstroke(); + } + switch (stroke) { + case 8: + this.backstroke_length = this.search_field.val().length; + break; + case 9: + if (this.results_showing && !this.is_multiple) { + this.result_select(evt); + } + this.mouse_on_container = false; + break; + case 13: + if (this.results_showing) { + evt.preventDefault(); + } + break; + case 32: + if (this.disable_search) { + evt.preventDefault(); + } + break; + case 38: + evt.preventDefault(); + this.keyup_arrow(); + break; + case 40: + evt.preventDefault(); + this.keydown_arrow(); + break; + } + }; + + Chosen.prototype.search_field_scale = function() { + var div, f_width, h, style, style_block, styles, w, _i, _len; + if (this.is_multiple) { + h = 0; + w = 0; + style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"; + styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing']; + for (_i = 0, _len = styles.length; _i < _len; _i++) { + style = styles[_i]; + style_block += style + ":" + this.search_field.css(style) + ";"; + } + div = $('
      ', { + 'style': style_block + }); + div.text(this.search_field.val()); + $('body').append(div); + w = div.width() + 25; + div.remove(); + f_width = this.container.outerWidth(); + if (w > f_width - 10) { + w = f_width - 10; + } + return this.search_field.css({ + 'width': w + 'px' + }); + } + }; + + return Chosen; + + })(AbstractChosen); + +}).call(this); diff --git a/sites/all/libraries/chosen/chosen.jquery.min.js b/sites/all/libraries/chosen/chosen.jquery.min.js new file mode 100755 index 0000000000..0b9a19359f --- /dev/null +++ b/sites/all/libraries/chosen/chosen.jquery.min.js @@ -0,0 +1,2 @@ +/* Chosen v1.4.0 | (c) 2011-2015 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ +(function(){var a,AbstractChosen,Chosen,SelectParser,b,c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};SelectParser=function(){function SelectParser(){this.options_index=0,this.parsed=[]}return SelectParser.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},SelectParser.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),title:a.title?a.title:void 0,children:0,disabled:a.disabled,classes:a.className}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},SelectParser.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,title:a.title?a.title:void 0,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,group_label:null!=b?this.parsed[b].label:null,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},SelectParser.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"<",">":">",'"':""","'":"'","`":"`"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&"})):a},SelectParser}(),SelectParser.select_to_array=function(a){var b,c,d,e,f;for(c=new SelectParser,f=a.childNodes,d=0,e=f.length;e>d;d++)b=f[d],c.add_node(b);return c.parsed},AbstractChosen=function(){function AbstractChosen(a,b){this.form_field=a,this.options=null!=b?b:{},AbstractChosen.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers(),this.on_ready())}return AbstractChosen.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0,this.include_group_label_in_selected=this.options.include_group_label_in_selected||!1},AbstractChosen.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||AbstractChosen.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||AbstractChosen.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||AbstractChosen.default_no_result_text},AbstractChosen.prototype.choice_label=function(a){return this.include_group_label_in_selected&&null!=a.group_label?""+a.group_label+""+a.html:a.html},AbstractChosen.prototype.mouse_enter=function(){return this.mouse_on_container=!0},AbstractChosen.prototype.mouse_leave=function(){return this.mouse_on_container=!1},AbstractChosen.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},AbstractChosen.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},AbstractChosen.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(c.html));return b},AbstractChosen.prototype.result_add_option=function(a){var b,c;return a.search_match?this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.style.cssText=a.style,c.setAttribute("data-option-array-index",a.array_index),c.innerHTML=a.search_text,a.title&&(c.title=a.title),this.outerHTML(c)):"":""},AbstractChosen.prototype.result_add_group=function(a){var b,c;return a.search_match||a.group_match?a.active_options>0?(b=[],b.push("group-result"),a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.innerHTML=a.search_text,a.title&&(c.title=a.title),this.outerHTML(c)):"":""},AbstractChosen.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing?this.winnow_results():void 0},AbstractChosen.prototype.reset_single_select_options=function(){var a,b,c,d,e;for(d=this.results_data,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.selected?e.push(a.selected=!1):e.push(void 0);return e},AbstractChosen.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},AbstractChosen.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},AbstractChosen.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l;for(this.no_results_clear(),d=0,f=this.get_search_text(),a=f.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),i=new RegExp(a,"i"),c=this.get_search_regex(a),l=this.results_data,j=0,k=l.length;k>j;j++)b=l[j],b.search_match=!1,e=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(e=this.results_data[b.group_array_index],0===e.active_options&&e.search_match&&(d+=1),e.active_options+=1),(!b.group||this.group_search)&&(b.search_text=b.group?b.label:b.html,b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(d+=1),b.search_match?(f.length&&(g=b.search_text.search(i),h=b.search_text.substr(0,g+f.length)+""+b.search_text.substr(g+f.length),b.search_text=h.substr(0,g)+""+h.substr(g)),null!=e&&(e.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>d&&f.length?(this.update_results_content(""),this.no_results(f)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},AbstractChosen.prototype.get_search_regex=function(a){var b;return b=this.search_contains?"":"^",new RegExp(b+a,"i")},AbstractChosen.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},AbstractChosen.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},AbstractChosen.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},AbstractChosen.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},AbstractChosen.prototype.clipboard_event_checker=function(){var a=this;return setTimeout(function(){return a.results_search()},50)},AbstractChosen.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},AbstractChosen.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},AbstractChosen.prototype.search_results_touchstart=function(a){return this.touch_started=!0,this.search_results_mouseover(a)},AbstractChosen.prototype.search_results_touchmove=function(a){return this.touch_started=!1,this.search_results_mouseout(a)},AbstractChosen.prototype.search_results_touchend=function(a){return this.touch_started?this.search_results_mouseup(a):void 0},AbstractChosen.prototype.outerHTML=function(a){var b;return a.outerHTML?a.outerHTML:(b=document.createElement("div"),b.appendChild(a),b.innerHTML)},AbstractChosen.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},AbstractChosen.default_multiple_text="Select Some Options",AbstractChosen.default_single_text="Select an Option",AbstractChosen.default_no_result_text="No results match",AbstractChosen}(),a=jQuery,a.fn.extend({chosen:function(b){return AbstractChosen.browser_is_supported()?this.each(function(){var c,d;c=a(this),d=c.data("chosen"),"destroy"===b&&d instanceof Chosen?d.destroy():d instanceof Chosen||c.data("chosen",new Chosen(this,b))}):this}}),Chosen=function(c){function Chosen(){return b=Chosen.__super__.constructor.apply(this,arguments)}return d(Chosen,c),Chosen.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field_jq.hasClass("chosen-rtl")},Chosen.prototype.set_up_html=function(){var b,c;return b=["chosen-container"],b.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&b.push(this.form_field.className),this.is_rtl&&b.push("chosen-rtl"),c={"class":b.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(c.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("
      ",c),this.is_multiple?this.container.html('
        '):this.container.html('
        '+this.default_text+'
          '),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior()},Chosen.prototype.on_ready=function(){return this.form_field_jq.trigger("chosen:ready",{chosen:this})},Chosen.prototype.register_observers=function(){var a=this;return this.container.bind("touchstart.chosen",function(b){a.container_mousedown(b)}),this.container.bind("touchend.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mousedown.chosen",function(b){a.container_mousedown(b)}),this.container.bind("mouseup.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mouseenter.chosen",function(b){a.mouse_enter(b)}),this.container.bind("mouseleave.chosen",function(b){a.mouse_leave(b)}),this.search_results.bind("mouseup.chosen",function(b){a.search_results_mouseup(b)}),this.search_results.bind("mouseover.chosen",function(b){a.search_results_mouseover(b)}),this.search_results.bind("mouseout.chosen",function(b){a.search_results_mouseout(b)}),this.search_results.bind("mousewheel.chosen DOMMouseScroll.chosen",function(b){a.search_results_mousewheel(b)}),this.search_results.bind("touchstart.chosen",function(b){a.search_results_touchstart(b)}),this.search_results.bind("touchmove.chosen",function(b){a.search_results_touchmove(b)}),this.search_results.bind("touchend.chosen",function(b){a.search_results_touchend(b)}),this.form_field_jq.bind("chosen:updated.chosen",function(b){a.results_update_field(b)}),this.form_field_jq.bind("chosen:activate.chosen",function(b){a.activate_field(b)}),this.form_field_jq.bind("chosen:open.chosen",function(b){a.container_mousedown(b)}),this.form_field_jq.bind("chosen:close.chosen",function(b){a.input_blur(b)}),this.search_field.bind("blur.chosen",function(b){a.input_blur(b)}),this.search_field.bind("keyup.chosen",function(b){a.keyup_checker(b)}),this.search_field.bind("keydown.chosen",function(b){a.keydown_checker(b)}),this.search_field.bind("focus.chosen",function(b){a.input_focus(b)}),this.search_field.bind("cut.chosen",function(b){a.clipboard_event_checker(b)}),this.search_field.bind("paste.chosen",function(b){a.clipboard_event_checker(b)}),this.is_multiple?this.search_choices.bind("click.chosen",function(b){a.choices_click(b)}):this.container.bind("click.chosen",function(a){a.preventDefault()})},Chosen.prototype.destroy=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},Chosen.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field_jq[0].disabled,this.is_disabled?(this.container.addClass("chosen-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus.chosen",this.activate_action),this.close_field()):(this.container.removeClass("chosen-disabled"),this.search_field[0].disabled=!1,this.is_multiple?void 0:this.selected_item.bind("focus.chosen",this.activate_action))},Chosen.prototype.container_mousedown=function(b){return this.is_disabled||(b&&"mousedown"===b.type&&!this.results_showing&&b.preventDefault(),null!=b&&a(b.target).hasClass("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!b||a(b.target)[0]!==this.selected_item[0]&&!a(b.target).parents("a.chosen-single").length||(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(this.container[0].ownerDocument).bind("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},Chosen.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},Chosen.prototype.search_results_mousewheel=function(a){var b;return a.originalEvent&&(b=a.originalEvent.deltaY||-a.originalEvent.wheelDelta||a.originalEvent.detail),null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop(b+this.search_results.scrollTop())):void 0},Chosen.prototype.blur_test=function(){return!this.active_field&&this.container.hasClass("chosen-container-active")?this.close_field():void 0},Chosen.prototype.close_field=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},Chosen.prototype.activate_field=function(){return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},Chosen.prototype.test_active_click=function(b){var c;return c=a(b.target).closest(".chosen-container"),c.length&&this.container[0]===c[0]?this.active_field=!0:this.close_field()},Chosen.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=SelectParser.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},Chosen.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){if(this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight(),b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(f>c)return this.search_results.scrollTop(c)}},Chosen.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},Chosen.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.container.addClass("chosen-with-drop"),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results(),this.form_field_jq.trigger("chosen:showing_dropdown",{chosen:this}))},Chosen.prototype.update_results_content=function(a){return this.search_results.html(a)},Chosen.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},Chosen.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=a):void 0},Chosen.prototype.set_label_behavior=function(){var b=this;return this.form_field_label=this.form_field_jq.parents("label"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=a("label[for='"+this.form_field.id+"']")),this.form_field_label.length>0?this.form_field_label.bind("click.chosen",function(a){return b.is_multiple?b.container_mousedown(a):b.activate_field()}):void 0},Chosen.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},Chosen.prototype.search_results_mouseup=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c.length?(this.result_highlight=c,this.result_select(b),this.search_field.focus()):void 0},Chosen.prototype.search_results_mouseover=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c?this.result_do_highlight(c):void 0},Chosen.prototype.search_results_mouseout=function(b){return a(b.target).hasClass("active-result")?this.result_clear_highlight():void 0},Chosen.prototype.choice_build=function(b){var c,d,e=this;return c=a("
        • ",{"class":"search-choice"}).html(""+this.choice_label(b)+""),b.disabled?c.addClass("search-choice-disabled"):(d=a("",{"class":"search-choice-close","data-option-array-index":b.array_index}),d.bind("click.chosen",function(a){return e.choice_destroy_link_click(a)}),c.append(d)),this.search_container.before(c)},Chosen.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),b.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a(b.target))},Chosen.prototype.choice_destroy=function(a){return this.result_deselect(a[0].getAttribute("data-option-array-index"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.val().length<1&&this.results_hide(),a.parents("li").first().remove(),this.search_field_scale()):void 0},Chosen.prototype.results_reset=function(){return this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change"),this.active_field?this.results_hide():void 0},Chosen.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},Chosen.prototype.result_select=function(a){var b,c;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClass("active-result"):this.reset_single_select_options(),c=this.results_data[b[0].getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(this.choice_label(c)),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[c.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,a.preventDefault(),this.search_field_scale())):void 0},Chosen.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").html(a)},Chosen.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[b.options_index].value}),this.search_field_scale(),!0)},Chosen.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.find("abbr").length||this.selected_item.find("span").first().after(''),this.selected_item.addClass("chosen-single-with-deselect")):void 0},Chosen.prototype.get_search_text=function(){return this.search_field.val()===this.default_text?"":a("
          ").text(a.trim(this.search_field.val())).html()},Chosen.prototype.winnow_results_set_highlight=function(){var a,b;return b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first(),null!=a?this.result_do_highlight(a):void 0},Chosen.prototype.no_results=function(b){var c;return c=a('
        • '+this.results_none_found+' ""
        • '),c.find("span").first().html(b),this.search_results.append(c),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},Chosen.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},Chosen.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(a):void 0:this.results_show()},Chosen.prototype.keyup_arrow=function(){var a;return this.results_showing||this.is_multiple?this.result_highlight?(a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},Chosen.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(a=this.search_container.siblings("li.search-choice").last(),a.length&&!a.hasClass("search-choice-disabled")?(this.pending_backstroke=a,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0)},Chosen.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},Chosen.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:this.results_showing&&a.preventDefault();break;case 32:this.disable_search&&a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},Chosen.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){for(d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],i=0,j=g.length;j>i;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return b=a("
          ",{style:f}),b.text(this.search_field.val()),a("body").append(b),h=b.width()+25,b.remove(),c=this.container.outerWidth(),h>c-10&&(h=c-10),this.search_field.css({width:h+"px"})}},Chosen}(AbstractChosen)}).call(this); \ No newline at end of file diff --git a/sites/all/libraries/chosen/chosen.min.css b/sites/all/libraries/chosen/chosen.min.css new file mode 100755 index 0000000000..75973432ea --- /dev/null +++ b/sites/all/libraries/chosen/chosen.min.css @@ -0,0 +1,3 @@ +/* Chosen v1.4.0 | (c) 2011-2015 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ + +.chosen-container{position:relative;display:inline-block;vertical-align:middle;font-size:13px;zoom:1;*display:inline;-webkit-user-select:none;-moz-user-select:none;user-select:none}.chosen-container *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.chosen-container .chosen-drop{position:absolute;top:100%;left:-9999px;z-index:1010;width:100%;border:1px solid #aaa;border-top:0;background:#fff;box-shadow:0 4px 5px rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{left:0}.chosen-container a{cursor:pointer}.chosen-container .search-choice .group-name,.chosen-container .chosen-single .group-name{margin-right:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:400;color:#999}.chosen-container .search-choice .group-name:after,.chosen-container .chosen-single .group-name:after{content:":";padding-left:2px;vertical-align:top}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;height:25px;border:1px solid #aaa;border-radius:5px;background-color:#fff;background:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#fff),color-stop(50%,#f6f6f6),color-stop(52%,#eee),color-stop(100%,#f4f4f4));background:-webkit-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-moz-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-o-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background-clip:padding-box;box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-single .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single.chosen-disabled .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%;background:url(chosen-sprite.png) no-repeat 0 2px}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;background:#fff url(chosen-sprite.png) no-repeat 100% -20px;background:url(chosen-sprite.png) no-repeat 100% -20px;font-size:1em;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-single .chosen-drop{margin-top:-1px;border-radius:0 0 4px 4px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{color:#444;position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px;word-wrap:break-word;-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{background-color:#3875d7;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#3875d7),color-stop(90%,#2a62bc));background-image:-webkit-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-moz-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-o-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:linear-gradient(#3875d7 20%,#2a62bc 90%);color:#fff}.chosen-container .chosen-results li.no-results{color:#777;display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;margin:0;padding:0 5px;width:100%;height:auto!important;height:1%;border:1px solid #aaa;background-color:#fff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(1%,#eee),color-stop(15%,#fff));background-image:-webkit-linear-gradient(#eee 1%,#fff 15%);background-image:-moz-linear-gradient(#eee 1%,#fff 15%);background-image:-o-linear-gradient(#eee 1%,#fff 15%);background-image:linear-gradient(#eee 1%,#fff 15%);cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;padding:0;height:25px;outline:0;border:0!important;background:transparent!important;box-shadow:none;color:#999;font-size:100%;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-multi .chosen-choices li.search-choice{position:relative;margin:3px 5px 3px 0;padding:3px 20px 3px 5px;border:1px solid #aaa;max-width:100%;border-radius:3px;background-color:#eee;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-size:100% 19px;background-repeat:repeat-x;background-clip:padding-box;box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);color:#333;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice span{word-wrap:break-word}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:4px;right:3px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{background-position:-42px -10px}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #aaa;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#eee),color-stop(80%,#fff));background-image:-webkit-linear-gradient(#eee 20%,#fff 80%);background-image:-moz-linear-gradient(#eee 20%,#fff 80%);background-image:-o-linear-gradient(#eee 20%,#fff 80%);background-image:linear-gradient(#eee 20%,#fff 80%);box-shadow:0 1px 0 #fff inset}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:0;background:transparent}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:-18px 2px}.chosen-container-active .chosen-choices{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#222!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl.chosen-container-single-nosearch .chosen-search,.chosen-rtl .chosen-drop{left:9999px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:0}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;background:#fff url(chosen-sprite.png) no-repeat -30px -20px;background:url(chosen-sprite.png) no-repeat -30px -20px;direction:rtl}.chosen-rtl.chosen-container-single .chosen-single div b{background-position:6px 2px}.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b{background-position:-12px 2px}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:144dpi),only screen and (min-resolution:1.5dppx){.chosen-rtl .chosen-search input[type=text],.chosen-container-single .chosen-single abbr,.chosen-container-single .chosen-single div b,.chosen-container-single .chosen-search input[type=text],.chosen-container-multi .chosen-choices .search-choice .search-choice-close,.chosen-container .chosen-results-scroll-down span,.chosen-container .chosen-results-scroll-up span{background-image:url(chosen-sprite@2x.png)!important;background-size:52px 37px!important;background-repeat:no-repeat!important}} \ No newline at end of file diff --git a/sites/all/libraries/chosen/chosen.proto.js b/sites/all/libraries/chosen/chosen.proto.js new file mode 100755 index 0000000000..a3b7bea1d0 --- /dev/null +++ b/sites/all/libraries/chosen/chosen.proto.js @@ -0,0 +1,1278 @@ +/*! +Chosen, a Select Box Enhancer for jQuery and Prototype +by Patrick Filler for Harvest, http://getharvest.com + +Version 1.4.0 +Full source at https://github.com/harvesthq/chosen +Copyright (c) 2011-2015 Harvest http://getharvest.com + +MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md +This file is generated by `grunt build`, do not edit it by hand. +*/ + +(function() { + var AbstractChosen, SelectParser, _ref, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + SelectParser = (function() { + function SelectParser() { + this.options_index = 0; + this.parsed = []; + } + + SelectParser.prototype.add_node = function(child) { + if (child.nodeName.toUpperCase() === "OPTGROUP") { + return this.add_group(child); + } else { + return this.add_option(child); + } + }; + + SelectParser.prototype.add_group = function(group) { + var group_position, option, _i, _len, _ref, _results; + group_position = this.parsed.length; + this.parsed.push({ + array_index: group_position, + group: true, + label: this.escapeExpression(group.label), + title: group.title ? group.title : void 0, + children: 0, + disabled: group.disabled, + classes: group.className + }); + _ref = group.childNodes; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + _results.push(this.add_option(option, group_position, group.disabled)); + } + return _results; + }; + + SelectParser.prototype.add_option = function(option, group_position, group_disabled) { + if (option.nodeName.toUpperCase() === "OPTION") { + if (option.text !== "") { + if (group_position != null) { + this.parsed[group_position].children += 1; + } + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + value: option.value, + text: option.text, + html: option.innerHTML, + title: option.title ? option.title : void 0, + selected: option.selected, + disabled: group_disabled === true ? group_disabled : option.disabled, + group_array_index: group_position, + group_label: group_position != null ? this.parsed[group_position].label : null, + classes: option.className, + style: option.style.cssText + }); + } else { + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + empty: true + }); + } + return this.options_index += 1; + } + }; + + SelectParser.prototype.escapeExpression = function(text) { + var map, unsafe_chars; + if ((text == null) || text === false) { + return ""; + } + if (!/[\&\<\>\"\'\`]/.test(text)) { + return text; + } + map = { + "<": "<", + ">": ">", + '"': """, + "'": "'", + "`": "`" + }; + unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g; + return text.replace(unsafe_chars, function(chr) { + return map[chr] || "&"; + }); + }; + + return SelectParser; + + })(); + + SelectParser.select_to_array = function(select) { + var child, parser, _i, _len, _ref; + parser = new SelectParser(); + _ref = select.childNodes; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + child = _ref[_i]; + parser.add_node(child); + } + return parser.parsed; + }; + + AbstractChosen = (function() { + function AbstractChosen(form_field, options) { + this.form_field = form_field; + this.options = options != null ? options : {}; + if (!AbstractChosen.browser_is_supported()) { + return; + } + this.is_multiple = this.form_field.multiple; + this.set_default_text(); + this.set_default_values(); + this.setup(); + this.set_up_html(); + this.register_observers(); + this.on_ready(); + } + + AbstractChosen.prototype.set_default_values = function() { + var _this = this; + this.click_test_action = function(evt) { + return _this.test_active_click(evt); + }; + this.activate_action = function(evt) { + return _this.activate_field(evt); + }; + this.active_field = false; + this.mouse_on_container = false; + this.results_showing = false; + this.result_highlighted = null; + this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false; + this.disable_search_threshold = this.options.disable_search_threshold || 0; + this.disable_search = this.options.disable_search || false; + this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true; + this.group_search = this.options.group_search != null ? this.options.group_search : true; + this.search_contains = this.options.search_contains || false; + this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true; + this.max_selected_options = this.options.max_selected_options || Infinity; + this.inherit_select_classes = this.options.inherit_select_classes || false; + this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true; + this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true; + return this.include_group_label_in_selected = this.options.include_group_label_in_selected || false; + }; + + AbstractChosen.prototype.set_default_text = function() { + if (this.form_field.getAttribute("data-placeholder")) { + this.default_text = this.form_field.getAttribute("data-placeholder"); + } else if (this.is_multiple) { + this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text; + } else { + this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text; + } + return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text; + }; + + AbstractChosen.prototype.choice_label = function(item) { + if (this.include_group_label_in_selected && (item.group_label != null)) { + return "" + item.group_label + "" + item.html; + } else { + return item.html; + } + }; + + AbstractChosen.prototype.mouse_enter = function() { + return this.mouse_on_container = true; + }; + + AbstractChosen.prototype.mouse_leave = function() { + return this.mouse_on_container = false; + }; + + AbstractChosen.prototype.input_focus = function(evt) { + var _this = this; + if (this.is_multiple) { + if (!this.active_field) { + return setTimeout((function() { + return _this.container_mousedown(); + }), 50); + } + } else { + if (!this.active_field) { + return this.activate_field(); + } + } + }; + + AbstractChosen.prototype.input_blur = function(evt) { + var _this = this; + if (!this.mouse_on_container) { + this.active_field = false; + return setTimeout((function() { + return _this.blur_test(); + }), 100); + } + }; + + AbstractChosen.prototype.results_option_build = function(options) { + var content, data, _i, _len, _ref; + content = ''; + _ref = this.results_data; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + data = _ref[_i]; + if (data.group) { + content += this.result_add_group(data); + } else { + content += this.result_add_option(data); + } + if (options != null ? options.first : void 0) { + if (data.selected && this.is_multiple) { + this.choice_build(data); + } else if (data.selected && !this.is_multiple) { + this.single_set_selected_text(data.html); + } + } + } + return content; + }; + + AbstractChosen.prototype.result_add_option = function(option) { + var classes, option_el; + if (!option.search_match) { + return ''; + } + if (!this.include_option_in_results(option)) { + return ''; + } + classes = []; + if (!option.disabled && !(option.selected && this.is_multiple)) { + classes.push("active-result"); + } + if (option.disabled && !(option.selected && this.is_multiple)) { + classes.push("disabled-result"); + } + if (option.selected) { + classes.push("result-selected"); + } + if (option.group_array_index != null) { + classes.push("group-option"); + } + if (option.classes !== "") { + classes.push(option.classes); + } + option_el = document.createElement("li"); + option_el.className = classes.join(" "); + option_el.style.cssText = option.style; + option_el.setAttribute("data-option-array-index", option.array_index); + option_el.innerHTML = option.search_text; + if (option.title) { + option_el.title = option.title; + } + return this.outerHTML(option_el); + }; + + AbstractChosen.prototype.result_add_group = function(group) { + var classes, group_el; + if (!(group.search_match || group.group_match)) { + return ''; + } + if (!(group.active_options > 0)) { + return ''; + } + classes = []; + classes.push("group-result"); + if (group.classes) { + classes.push(group.classes); + } + group_el = document.createElement("li"); + group_el.className = classes.join(" "); + group_el.innerHTML = group.search_text; + if (group.title) { + group_el.title = group.title; + } + return this.outerHTML(group_el); + }; + + AbstractChosen.prototype.results_update_field = function() { + this.set_default_text(); + if (!this.is_multiple) { + this.results_reset_cleanup(); + } + this.result_clear_highlight(); + this.results_build(); + if (this.results_showing) { + return this.winnow_results(); + } + }; + + AbstractChosen.prototype.reset_single_select_options = function() { + var result, _i, _len, _ref, _results; + _ref = this.results_data; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + result = _ref[_i]; + if (result.selected) { + _results.push(result.selected = false); + } else { + _results.push(void 0); + } + } + return _results; + }; + + AbstractChosen.prototype.results_toggle = function() { + if (this.results_showing) { + return this.results_hide(); + } else { + return this.results_show(); + } + }; + + AbstractChosen.prototype.results_search = function(evt) { + if (this.results_showing) { + return this.winnow_results(); + } else { + return this.results_show(); + } + }; + + AbstractChosen.prototype.winnow_results = function() { + var escapedSearchText, option, regex, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref; + this.no_results_clear(); + results = 0; + searchText = this.get_search_text(); + escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + zregex = new RegExp(escapedSearchText, 'i'); + regex = this.get_search_regex(escapedSearchText); + _ref = this.results_data; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + option.search_match = false; + results_group = null; + if (this.include_option_in_results(option)) { + if (option.group) { + option.group_match = false; + option.active_options = 0; + } + if ((option.group_array_index != null) && this.results_data[option.group_array_index]) { + results_group = this.results_data[option.group_array_index]; + if (results_group.active_options === 0 && results_group.search_match) { + results += 1; + } + results_group.active_options += 1; + } + if (!(option.group && !this.group_search)) { + option.search_text = option.group ? option.label : option.html; + option.search_match = this.search_string_match(option.search_text, regex); + if (option.search_match && !option.group) { + results += 1; + } + if (option.search_match) { + if (searchText.length) { + startpos = option.search_text.search(zregex); + text = option.search_text.substr(0, startpos + searchText.length) + '' + option.search_text.substr(startpos + searchText.length); + option.search_text = text.substr(0, startpos) + '' + text.substr(startpos); + } + if (results_group != null) { + results_group.group_match = true; + } + } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) { + option.search_match = true; + } + } + } + } + this.result_clear_highlight(); + if (results < 1 && searchText.length) { + this.update_results_content(""); + return this.no_results(searchText); + } else { + this.update_results_content(this.results_option_build()); + return this.winnow_results_set_highlight(); + } + }; + + AbstractChosen.prototype.get_search_regex = function(escaped_search_string) { + var regex_anchor; + regex_anchor = this.search_contains ? "" : "^"; + return new RegExp(regex_anchor + escaped_search_string, 'i'); + }; + + AbstractChosen.prototype.search_string_match = function(search_string, regex) { + var part, parts, _i, _len; + if (regex.test(search_string)) { + return true; + } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) { + parts = search_string.replace(/\[|\]/g, "").split(" "); + if (parts.length) { + for (_i = 0, _len = parts.length; _i < _len; _i++) { + part = parts[_i]; + if (regex.test(part)) { + return true; + } + } + } + } + }; + + AbstractChosen.prototype.choices_count = function() { + var option, _i, _len, _ref; + if (this.selected_option_count != null) { + return this.selected_option_count; + } + this.selected_option_count = 0; + _ref = this.form_field.options; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + if (option.selected) { + this.selected_option_count += 1; + } + } + return this.selected_option_count; + }; + + AbstractChosen.prototype.choices_click = function(evt) { + evt.preventDefault(); + if (!(this.results_showing || this.is_disabled)) { + return this.results_show(); + } + }; + + AbstractChosen.prototype.keyup_checker = function(evt) { + var stroke, _ref; + stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; + this.search_field_scale(); + switch (stroke) { + case 8: + if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) { + return this.keydown_backstroke(); + } else if (!this.pending_backstroke) { + this.result_clear_highlight(); + return this.results_search(); + } + break; + case 13: + evt.preventDefault(); + if (this.results_showing) { + return this.result_select(evt); + } + break; + case 27: + if (this.results_showing) { + this.results_hide(); + } + return true; + case 9: + case 38: + case 40: + case 16: + case 91: + case 17: + break; + default: + return this.results_search(); + } + }; + + AbstractChosen.prototype.clipboard_event_checker = function(evt) { + var _this = this; + return setTimeout((function() { + return _this.results_search(); + }), 50); + }; + + AbstractChosen.prototype.container_width = function() { + if (this.options.width != null) { + return this.options.width; + } else { + return "" + this.form_field.offsetWidth + "px"; + } + }; + + AbstractChosen.prototype.include_option_in_results = function(option) { + if (this.is_multiple && (!this.display_selected_options && option.selected)) { + return false; + } + if (!this.display_disabled_options && option.disabled) { + return false; + } + if (option.empty) { + return false; + } + return true; + }; + + AbstractChosen.prototype.search_results_touchstart = function(evt) { + this.touch_started = true; + return this.search_results_mouseover(evt); + }; + + AbstractChosen.prototype.search_results_touchmove = function(evt) { + this.touch_started = false; + return this.search_results_mouseout(evt); + }; + + AbstractChosen.prototype.search_results_touchend = function(evt) { + if (this.touch_started) { + return this.search_results_mouseup(evt); + } + }; + + AbstractChosen.prototype.outerHTML = function(element) { + var tmp; + if (element.outerHTML) { + return element.outerHTML; + } + tmp = document.createElement("div"); + tmp.appendChild(element); + return tmp.innerHTML; + }; + + AbstractChosen.browser_is_supported = function() { + if (window.navigator.appName === "Microsoft Internet Explorer") { + return document.documentMode >= 8; + } + if (/iP(od|hone)/i.test(window.navigator.userAgent)) { + return false; + } + if (/Android/i.test(window.navigator.userAgent)) { + if (/Mobile/i.test(window.navigator.userAgent)) { + return false; + } + } + return true; + }; + + AbstractChosen.default_multiple_text = "Select Some Options"; + + AbstractChosen.default_single_text = "Select an Option"; + + AbstractChosen.default_no_result_text = "No results match"; + + return AbstractChosen; + + })(); + + this.Chosen = (function(_super) { + __extends(Chosen, _super); + + function Chosen() { + _ref = Chosen.__super__.constructor.apply(this, arguments); + return _ref; + } + + Chosen.prototype.setup = function() { + this.current_selectedIndex = this.form_field.selectedIndex; + return this.is_rtl = this.form_field.hasClassName("chosen-rtl"); + }; + + Chosen.prototype.set_default_values = function() { + Chosen.__super__.set_default_values.call(this); + this.single_temp = new Template('#{default}
            '); + this.multi_temp = new Template('
              '); + return this.no_results_temp = new Template('
            • ' + this.results_none_found + ' "#{terms}"
            • '); + }; + + Chosen.prototype.set_up_html = function() { + var container_classes, container_props; + container_classes = ["chosen-container"]; + container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single")); + if (this.inherit_select_classes && this.form_field.className) { + container_classes.push(this.form_field.className); + } + if (this.is_rtl) { + container_classes.push("chosen-rtl"); + } + container_props = { + 'class': container_classes.join(' '), + 'style': "width: " + (this.container_width()) + ";", + 'title': this.form_field.title + }; + if (this.form_field.id.length) { + container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen"; + } + this.container = this.is_multiple ? new Element('div', container_props).update(this.multi_temp.evaluate({ + "default": this.default_text + })) : new Element('div', container_props).update(this.single_temp.evaluate({ + "default": this.default_text + })); + this.form_field.hide().insert({ + after: this.container + }); + this.dropdown = this.container.down('div.chosen-drop'); + this.search_field = this.container.down('input'); + this.search_results = this.container.down('ul.chosen-results'); + this.search_field_scale(); + this.search_no_results = this.container.down('li.no-results'); + if (this.is_multiple) { + this.search_choices = this.container.down('ul.chosen-choices'); + this.search_container = this.container.down('li.search-field'); + } else { + this.search_container = this.container.down('div.chosen-search'); + this.selected_item = this.container.down('.chosen-single'); + } + this.results_build(); + this.set_tab_index(); + return this.set_label_behavior(); + }; + + Chosen.prototype.on_ready = function() { + return this.form_field.fire("chosen:ready", { + chosen: this + }); + }; + + Chosen.prototype.register_observers = function() { + var _this = this; + this.container.observe("touchstart", function(evt) { + return _this.container_mousedown(evt); + }); + this.container.observe("touchend", function(evt) { + return _this.container_mouseup(evt); + }); + this.container.observe("mousedown", function(evt) { + return _this.container_mousedown(evt); + }); + this.container.observe("mouseup", function(evt) { + return _this.container_mouseup(evt); + }); + this.container.observe("mouseenter", function(evt) { + return _this.mouse_enter(evt); + }); + this.container.observe("mouseleave", function(evt) { + return _this.mouse_leave(evt); + }); + this.search_results.observe("mouseup", function(evt) { + return _this.search_results_mouseup(evt); + }); + this.search_results.observe("mouseover", function(evt) { + return _this.search_results_mouseover(evt); + }); + this.search_results.observe("mouseout", function(evt) { + return _this.search_results_mouseout(evt); + }); + this.search_results.observe("mousewheel", function(evt) { + return _this.search_results_mousewheel(evt); + }); + this.search_results.observe("DOMMouseScroll", function(evt) { + return _this.search_results_mousewheel(evt); + }); + this.search_results.observe("touchstart", function(evt) { + return _this.search_results_touchstart(evt); + }); + this.search_results.observe("touchmove", function(evt) { + return _this.search_results_touchmove(evt); + }); + this.search_results.observe("touchend", function(evt) { + return _this.search_results_touchend(evt); + }); + this.form_field.observe("chosen:updated", function(evt) { + return _this.results_update_field(evt); + }); + this.form_field.observe("chosen:activate", function(evt) { + return _this.activate_field(evt); + }); + this.form_field.observe("chosen:open", function(evt) { + return _this.container_mousedown(evt); + }); + this.form_field.observe("chosen:close", function(evt) { + return _this.input_blur(evt); + }); + this.search_field.observe("blur", function(evt) { + return _this.input_blur(evt); + }); + this.search_field.observe("keyup", function(evt) { + return _this.keyup_checker(evt); + }); + this.search_field.observe("keydown", function(evt) { + return _this.keydown_checker(evt); + }); + this.search_field.observe("focus", function(evt) { + return _this.input_focus(evt); + }); + this.search_field.observe("cut", function(evt) { + return _this.clipboard_event_checker(evt); + }); + this.search_field.observe("paste", function(evt) { + return _this.clipboard_event_checker(evt); + }); + if (this.is_multiple) { + return this.search_choices.observe("click", function(evt) { + return _this.choices_click(evt); + }); + } else { + return this.container.observe("click", function(evt) { + return evt.preventDefault(); + }); + } + }; + + Chosen.prototype.destroy = function() { + this.container.ownerDocument.stopObserving("click", this.click_test_action); + this.form_field.stopObserving(); + this.container.stopObserving(); + this.search_results.stopObserving(); + this.search_field.stopObserving(); + if (this.form_field_label != null) { + this.form_field_label.stopObserving(); + } + if (this.is_multiple) { + this.search_choices.stopObserving(); + this.container.select(".search-choice-close").each(function(choice) { + return choice.stopObserving(); + }); + } else { + this.selected_item.stopObserving(); + } + if (this.search_field.tabIndex) { + this.form_field.tabIndex = this.search_field.tabIndex; + } + this.container.remove(); + return this.form_field.show(); + }; + + Chosen.prototype.search_field_disabled = function() { + this.is_disabled = this.form_field.disabled; + if (this.is_disabled) { + this.container.addClassName('chosen-disabled'); + this.search_field.disabled = true; + if (!this.is_multiple) { + this.selected_item.stopObserving("focus", this.activate_action); + } + return this.close_field(); + } else { + this.container.removeClassName('chosen-disabled'); + this.search_field.disabled = false; + if (!this.is_multiple) { + return this.selected_item.observe("focus", this.activate_action); + } + } + }; + + Chosen.prototype.container_mousedown = function(evt) { + if (!this.is_disabled) { + if (evt && evt.type === "mousedown" && !this.results_showing) { + evt.stop(); + } + if (!((evt != null) && evt.target.hasClassName("search-choice-close"))) { + if (!this.active_field) { + if (this.is_multiple) { + this.search_field.clear(); + } + this.container.ownerDocument.observe("click", this.click_test_action); + this.results_show(); + } else if (!this.is_multiple && evt && (evt.target === this.selected_item || evt.target.up("a.chosen-single"))) { + this.results_toggle(); + } + return this.activate_field(); + } + } + }; + + Chosen.prototype.container_mouseup = function(evt) { + if (evt.target.nodeName === "ABBR" && !this.is_disabled) { + return this.results_reset(evt); + } + }; + + Chosen.prototype.search_results_mousewheel = function(evt) { + var delta; + delta = evt.deltaY || -evt.wheelDelta || evt.detail; + if (delta != null) { + evt.preventDefault(); + if (evt.type === 'DOMMouseScroll') { + delta = delta * 40; + } + return this.search_results.scrollTop = delta + this.search_results.scrollTop; + } + }; + + Chosen.prototype.blur_test = function(evt) { + if (!this.active_field && this.container.hasClassName("chosen-container-active")) { + return this.close_field(); + } + }; + + Chosen.prototype.close_field = function() { + this.container.ownerDocument.stopObserving("click", this.click_test_action); + this.active_field = false; + this.results_hide(); + this.container.removeClassName("chosen-container-active"); + this.clear_backstroke(); + this.show_search_field_default(); + return this.search_field_scale(); + }; + + Chosen.prototype.activate_field = function() { + this.container.addClassName("chosen-container-active"); + this.active_field = true; + this.search_field.value = this.search_field.value; + return this.search_field.focus(); + }; + + Chosen.prototype.test_active_click = function(evt) { + if (evt.target.up('.chosen-container') === this.container) { + return this.active_field = true; + } else { + return this.close_field(); + } + }; + + Chosen.prototype.results_build = function() { + this.parsing = true; + this.selected_option_count = null; + this.results_data = SelectParser.select_to_array(this.form_field); + if (this.is_multiple) { + this.search_choices.select("li.search-choice").invoke("remove"); + } else if (!this.is_multiple) { + this.single_set_selected_text(); + if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) { + this.search_field.readOnly = true; + this.container.addClassName("chosen-container-single-nosearch"); + } else { + this.search_field.readOnly = false; + this.container.removeClassName("chosen-container-single-nosearch"); + } + } + this.update_results_content(this.results_option_build({ + first: true + })); + this.search_field_disabled(); + this.show_search_field_default(); + this.search_field_scale(); + return this.parsing = false; + }; + + Chosen.prototype.result_do_highlight = function(el) { + var high_bottom, high_top, maxHeight, visible_bottom, visible_top; + this.result_clear_highlight(); + this.result_highlight = el; + this.result_highlight.addClassName("highlighted"); + maxHeight = parseInt(this.search_results.getStyle('maxHeight'), 10); + visible_top = this.search_results.scrollTop; + visible_bottom = maxHeight + visible_top; + high_top = this.result_highlight.positionedOffset().top; + high_bottom = high_top + this.result_highlight.getHeight(); + if (high_bottom >= visible_bottom) { + return this.search_results.scrollTop = (high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0; + } else if (high_top < visible_top) { + return this.search_results.scrollTop = high_top; + } + }; + + Chosen.prototype.result_clear_highlight = function() { + if (this.result_highlight) { + this.result_highlight.removeClassName('highlighted'); + } + return this.result_highlight = null; + }; + + Chosen.prototype.results_show = function() { + if (this.is_multiple && this.max_selected_options <= this.choices_count()) { + this.form_field.fire("chosen:maxselected", { + chosen: this + }); + return false; + } + this.container.addClassName("chosen-with-drop"); + this.results_showing = true; + this.search_field.focus(); + this.search_field.value = this.search_field.value; + this.winnow_results(); + return this.form_field.fire("chosen:showing_dropdown", { + chosen: this + }); + }; + + Chosen.prototype.update_results_content = function(content) { + return this.search_results.update(content); + }; + + Chosen.prototype.results_hide = function() { + if (this.results_showing) { + this.result_clear_highlight(); + this.container.removeClassName("chosen-with-drop"); + this.form_field.fire("chosen:hiding_dropdown", { + chosen: this + }); + } + return this.results_showing = false; + }; + + Chosen.prototype.set_tab_index = function(el) { + var ti; + if (this.form_field.tabIndex) { + ti = this.form_field.tabIndex; + this.form_field.tabIndex = -1; + return this.search_field.tabIndex = ti; + } + }; + + Chosen.prototype.set_label_behavior = function() { + var _this = this; + this.form_field_label = this.form_field.up("label"); + if (this.form_field_label == null) { + this.form_field_label = $$("label[for='" + this.form_field.id + "']").first(); + } + if (this.form_field_label != null) { + return this.form_field_label.observe("click", function(evt) { + if (_this.is_multiple) { + return _this.container_mousedown(evt); + } else { + return _this.activate_field(); + } + }); + } + }; + + Chosen.prototype.show_search_field_default = function() { + if (this.is_multiple && this.choices_count() < 1 && !this.active_field) { + this.search_field.value = this.default_text; + return this.search_field.addClassName("default"); + } else { + this.search_field.value = ""; + return this.search_field.removeClassName("default"); + } + }; + + Chosen.prototype.search_results_mouseup = function(evt) { + var target; + target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result"); + if (target) { + this.result_highlight = target; + this.result_select(evt); + return this.search_field.focus(); + } + }; + + Chosen.prototype.search_results_mouseover = function(evt) { + var target; + target = evt.target.hasClassName("active-result") ? evt.target : evt.target.up(".active-result"); + if (target) { + return this.result_do_highlight(target); + } + }; + + Chosen.prototype.search_results_mouseout = function(evt) { + if (evt.target.hasClassName('active-result') || evt.target.up('.active-result')) { + return this.result_clear_highlight(); + } + }; + + Chosen.prototype.choice_build = function(item) { + var choice, close_link, + _this = this; + choice = new Element('li', { + "class": "search-choice" + }).update("" + (this.choice_label(item)) + ""); + if (item.disabled) { + choice.addClassName('search-choice-disabled'); + } else { + close_link = new Element('a', { + href: '#', + "class": 'search-choice-close', + rel: item.array_index + }); + close_link.observe("click", function(evt) { + return _this.choice_destroy_link_click(evt); + }); + choice.insert(close_link); + } + return this.search_container.insert({ + before: choice + }); + }; + + Chosen.prototype.choice_destroy_link_click = function(evt) { + evt.preventDefault(); + evt.stopPropagation(); + if (!this.is_disabled) { + return this.choice_destroy(evt.target); + } + }; + + Chosen.prototype.choice_destroy = function(link) { + if (this.result_deselect(link.readAttribute("rel"))) { + this.show_search_field_default(); + if (this.is_multiple && this.choices_count() > 0 && this.search_field.value.length < 1) { + this.results_hide(); + } + link.up('li').remove(); + return this.search_field_scale(); + } + }; + + Chosen.prototype.results_reset = function() { + this.reset_single_select_options(); + this.form_field.options[0].selected = true; + this.single_set_selected_text(); + this.show_search_field_default(); + this.results_reset_cleanup(); + if (typeof Event.simulate === 'function') { + this.form_field.simulate("change"); + } + if (this.active_field) { + return this.results_hide(); + } + }; + + Chosen.prototype.results_reset_cleanup = function() { + var deselect_trigger; + this.current_selectedIndex = this.form_field.selectedIndex; + deselect_trigger = this.selected_item.down("abbr"); + if (deselect_trigger) { + return deselect_trigger.remove(); + } + }; + + Chosen.prototype.result_select = function(evt) { + var high, item; + if (this.result_highlight) { + high = this.result_highlight; + this.result_clear_highlight(); + if (this.is_multiple && this.max_selected_options <= this.choices_count()) { + this.form_field.fire("chosen:maxselected", { + chosen: this + }); + return false; + } + if (this.is_multiple) { + high.removeClassName("active-result"); + } else { + this.reset_single_select_options(); + } + high.addClassName("result-selected"); + item = this.results_data[high.getAttribute("data-option-array-index")]; + item.selected = true; + this.form_field.options[item.options_index].selected = true; + this.selected_option_count = null; + if (this.is_multiple) { + this.choice_build(item); + } else { + this.single_set_selected_text(this.choice_label(item)); + } + if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) { + this.results_hide(); + } + this.search_field.value = ""; + if (typeof Event.simulate === 'function' && (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex)) { + this.form_field.simulate("change"); + } + this.current_selectedIndex = this.form_field.selectedIndex; + evt.preventDefault(); + return this.search_field_scale(); + } + }; + + Chosen.prototype.single_set_selected_text = function(text) { + if (text == null) { + text = this.default_text; + } + if (text === this.default_text) { + this.selected_item.addClassName("chosen-default"); + } else { + this.single_deselect_control_build(); + this.selected_item.removeClassName("chosen-default"); + } + return this.selected_item.down("span").update(text); + }; + + Chosen.prototype.result_deselect = function(pos) { + var result_data; + result_data = this.results_data[pos]; + if (!this.form_field.options[result_data.options_index].disabled) { + result_data.selected = false; + this.form_field.options[result_data.options_index].selected = false; + this.selected_option_count = null; + this.result_clear_highlight(); + if (this.results_showing) { + this.winnow_results(); + } + if (typeof Event.simulate === 'function') { + this.form_field.simulate("change"); + } + this.search_field_scale(); + return true; + } else { + return false; + } + }; + + Chosen.prototype.single_deselect_control_build = function() { + if (!this.allow_single_deselect) { + return; + } + if (!this.selected_item.down("abbr")) { + this.selected_item.down("span").insert({ + after: "" + }); + } + return this.selected_item.addClassName("chosen-single-with-deselect"); + }; + + Chosen.prototype.get_search_text = function() { + if (this.search_field.value === this.default_text) { + return ""; + } else { + return this.search_field.value.strip().escapeHTML(); + } + }; + + Chosen.prototype.winnow_results_set_highlight = function() { + var do_high; + if (!this.is_multiple) { + do_high = this.search_results.down(".result-selected.active-result"); + } + if (do_high == null) { + do_high = this.search_results.down(".active-result"); + } + if (do_high != null) { + return this.result_do_highlight(do_high); + } + }; + + Chosen.prototype.no_results = function(terms) { + this.search_results.insert(this.no_results_temp.evaluate({ + terms: terms + })); + return this.form_field.fire("chosen:no_results", { + chosen: this + }); + }; + + Chosen.prototype.no_results_clear = function() { + var nr, _results; + nr = null; + _results = []; + while (nr = this.search_results.down(".no-results")) { + _results.push(nr.remove()); + } + return _results; + }; + + Chosen.prototype.keydown_arrow = function() { + var next_sib; + if (this.results_showing && this.result_highlight) { + next_sib = this.result_highlight.next('.active-result'); + if (next_sib) { + return this.result_do_highlight(next_sib); + } + } else { + return this.results_show(); + } + }; + + Chosen.prototype.keyup_arrow = function() { + var actives, prevs, sibs; + if (!this.results_showing && !this.is_multiple) { + return this.results_show(); + } else if (this.result_highlight) { + sibs = this.result_highlight.previousSiblings(); + actives = this.search_results.select("li.active-result"); + prevs = sibs.intersect(actives); + if (prevs.length) { + return this.result_do_highlight(prevs.first()); + } else { + if (this.choices_count() > 0) { + this.results_hide(); + } + return this.result_clear_highlight(); + } + } + }; + + Chosen.prototype.keydown_backstroke = function() { + var next_available_destroy; + if (this.pending_backstroke) { + this.choice_destroy(this.pending_backstroke.down("a")); + return this.clear_backstroke(); + } else { + next_available_destroy = this.search_container.siblings().last(); + if (next_available_destroy && next_available_destroy.hasClassName("search-choice") && !next_available_destroy.hasClassName("search-choice-disabled")) { + this.pending_backstroke = next_available_destroy; + if (this.pending_backstroke) { + this.pending_backstroke.addClassName("search-choice-focus"); + } + if (this.single_backstroke_delete) { + return this.keydown_backstroke(); + } else { + return this.pending_backstroke.addClassName("search-choice-focus"); + } + } + } + }; + + Chosen.prototype.clear_backstroke = function() { + if (this.pending_backstroke) { + this.pending_backstroke.removeClassName("search-choice-focus"); + } + return this.pending_backstroke = null; + }; + + Chosen.prototype.keydown_checker = function(evt) { + var stroke, _ref1; + stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode; + this.search_field_scale(); + if (stroke !== 8 && this.pending_backstroke) { + this.clear_backstroke(); + } + switch (stroke) { + case 8: + this.backstroke_length = this.search_field.value.length; + break; + case 9: + if (this.results_showing && !this.is_multiple) { + this.result_select(evt); + } + this.mouse_on_container = false; + break; + case 13: + if (this.results_showing) { + evt.preventDefault(); + } + break; + case 32: + if (this.disable_search) { + evt.preventDefault(); + } + break; + case 38: + evt.preventDefault(); + this.keyup_arrow(); + break; + case 40: + evt.preventDefault(); + this.keydown_arrow(); + break; + } + }; + + Chosen.prototype.search_field_scale = function() { + var div, f_width, h, style, style_block, styles, w, _i, _len; + if (this.is_multiple) { + h = 0; + w = 0; + style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"; + styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing']; + for (_i = 0, _len = styles.length; _i < _len; _i++) { + style = styles[_i]; + style_block += style + ":" + this.search_field.getStyle(style) + ";"; + } + div = new Element('div', { + 'style': style_block + }).update(this.search_field.value.escapeHTML()); + document.body.appendChild(div); + w = Element.measure(div, 'width') + 25; + div.remove(); + f_width = this.container.getWidth(); + if (w > f_width - 10) { + w = f_width - 10; + } + return this.search_field.setStyle({ + 'width': w + 'px' + }); + } + }; + + return Chosen; + + })(AbstractChosen); + +}).call(this); diff --git a/sites/all/libraries/chosen/chosen.proto.min.js b/sites/all/libraries/chosen/chosen.proto.min.js new file mode 100755 index 0000000000..f4342f04c3 --- /dev/null +++ b/sites/all/libraries/chosen/chosen.proto.min.js @@ -0,0 +1,2 @@ +/* Chosen v1.4.0 | (c) 2011-2015 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ +(function(){var AbstractChosen,SelectParser,a,b={}.hasOwnProperty,c=function(a,c){function d(){this.constructor=a}for(var e in c)b.call(c,e)&&(a[e]=c[e]);return d.prototype=c.prototype,a.prototype=new d,a.__super__=c.prototype,a};SelectParser=function(){function SelectParser(){this.options_index=0,this.parsed=[]}return SelectParser.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},SelectParser.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),title:a.title?a.title:void 0,children:0,disabled:a.disabled,classes:a.className}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},SelectParser.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,title:a.title?a.title:void 0,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,group_label:null!=b?this.parsed[b].label:null,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},SelectParser.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"<",">":">",'"':""","'":"'","`":"`"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&"})):a},SelectParser}(),SelectParser.select_to_array=function(a){var b,c,d,e,f;for(c=new SelectParser,f=a.childNodes,d=0,e=f.length;e>d;d++)b=f[d],c.add_node(b);return c.parsed},AbstractChosen=function(){function AbstractChosen(a,b){this.form_field=a,this.options=null!=b?b:{},AbstractChosen.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers(),this.on_ready())}return AbstractChosen.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0,this.include_group_label_in_selected=this.options.include_group_label_in_selected||!1},AbstractChosen.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||AbstractChosen.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||AbstractChosen.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||AbstractChosen.default_no_result_text},AbstractChosen.prototype.choice_label=function(a){return this.include_group_label_in_selected&&null!=a.group_label?""+a.group_label+""+a.html:a.html},AbstractChosen.prototype.mouse_enter=function(){return this.mouse_on_container=!0},AbstractChosen.prototype.mouse_leave=function(){return this.mouse_on_container=!1},AbstractChosen.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},AbstractChosen.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},AbstractChosen.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(c.html));return b},AbstractChosen.prototype.result_add_option=function(a){var b,c;return a.search_match?this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.style.cssText=a.style,c.setAttribute("data-option-array-index",a.array_index),c.innerHTML=a.search_text,a.title&&(c.title=a.title),this.outerHTML(c)):"":""},AbstractChosen.prototype.result_add_group=function(a){var b,c;return a.search_match||a.group_match?a.active_options>0?(b=[],b.push("group-result"),a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.innerHTML=a.search_text,a.title&&(c.title=a.title),this.outerHTML(c)):"":""},AbstractChosen.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing?this.winnow_results():void 0},AbstractChosen.prototype.reset_single_select_options=function(){var a,b,c,d,e;for(d=this.results_data,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.selected?e.push(a.selected=!1):e.push(void 0);return e},AbstractChosen.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},AbstractChosen.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},AbstractChosen.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l;for(this.no_results_clear(),d=0,f=this.get_search_text(),a=f.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),i=new RegExp(a,"i"),c=this.get_search_regex(a),l=this.results_data,j=0,k=l.length;k>j;j++)b=l[j],b.search_match=!1,e=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(e=this.results_data[b.group_array_index],0===e.active_options&&e.search_match&&(d+=1),e.active_options+=1),(!b.group||this.group_search)&&(b.search_text=b.group?b.label:b.html,b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(d+=1),b.search_match?(f.length&&(g=b.search_text.search(i),h=b.search_text.substr(0,g+f.length)+"
              "+b.search_text.substr(g+f.length),b.search_text=h.substr(0,g)+""+h.substr(g)),null!=e&&(e.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>d&&f.length?(this.update_results_content(""),this.no_results(f)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},AbstractChosen.prototype.get_search_regex=function(a){var b;return b=this.search_contains?"":"^",new RegExp(b+a,"i")},AbstractChosen.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},AbstractChosen.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},AbstractChosen.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},AbstractChosen.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},AbstractChosen.prototype.clipboard_event_checker=function(){var a=this;return setTimeout(function(){return a.results_search()},50)},AbstractChosen.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},AbstractChosen.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},AbstractChosen.prototype.search_results_touchstart=function(a){return this.touch_started=!0,this.search_results_mouseover(a)},AbstractChosen.prototype.search_results_touchmove=function(a){return this.touch_started=!1,this.search_results_mouseout(a)},AbstractChosen.prototype.search_results_touchend=function(a){return this.touch_started?this.search_results_mouseup(a):void 0},AbstractChosen.prototype.outerHTML=function(a){var b;return a.outerHTML?a.outerHTML:(b=document.createElement("div"),b.appendChild(a),b.innerHTML)},AbstractChosen.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},AbstractChosen.default_multiple_text="Select Some Options",AbstractChosen.default_single_text="Select an Option",AbstractChosen.default_no_result_text="No results match",AbstractChosen}(),this.Chosen=function(b){function Chosen(){return a=Chosen.__super__.constructor.apply(this,arguments)}return c(Chosen,b),Chosen.prototype.setup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field.hasClassName("chosen-rtl")},Chosen.prototype.set_default_values=function(){return Chosen.__super__.set_default_values.call(this),this.single_temp=new Template('#{default}
                '),this.multi_temp=new Template('
                  '),this.no_results_temp=new Template('
                • '+this.results_none_found+' "#{terms}"
                • ')},Chosen.prototype.set_up_html=function(){var a,b;return a=["chosen-container"],a.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&a.push(this.form_field.className),this.is_rtl&&a.push("chosen-rtl"),b={"class":a.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(b.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=this.is_multiple?new Element("div",b).update(this.multi_temp.evaluate({"default":this.default_text})):new Element("div",b).update(this.single_temp.evaluate({"default":this.default_text})),this.form_field.hide().insert({after:this.container}),this.dropdown=this.container.down("div.chosen-drop"),this.search_field=this.container.down("input"),this.search_results=this.container.down("ul.chosen-results"),this.search_field_scale(),this.search_no_results=this.container.down("li.no-results"),this.is_multiple?(this.search_choices=this.container.down("ul.chosen-choices"),this.search_container=this.container.down("li.search-field")):(this.search_container=this.container.down("div.chosen-search"),this.selected_item=this.container.down(".chosen-single")),this.results_build(),this.set_tab_index(),this.set_label_behavior()},Chosen.prototype.on_ready=function(){return this.form_field.fire("chosen:ready",{chosen:this})},Chosen.prototype.register_observers=function(){var a=this;return this.container.observe("touchstart",function(b){return a.container_mousedown(b)}),this.container.observe("touchend",function(b){return a.container_mouseup(b)}),this.container.observe("mousedown",function(b){return a.container_mousedown(b)}),this.container.observe("mouseup",function(b){return a.container_mouseup(b)}),this.container.observe("mouseenter",function(b){return a.mouse_enter(b)}),this.container.observe("mouseleave",function(b){return a.mouse_leave(b)}),this.search_results.observe("mouseup",function(b){return a.search_results_mouseup(b)}),this.search_results.observe("mouseover",function(b){return a.search_results_mouseover(b)}),this.search_results.observe("mouseout",function(b){return a.search_results_mouseout(b)}),this.search_results.observe("mousewheel",function(b){return a.search_results_mousewheel(b)}),this.search_results.observe("DOMMouseScroll",function(b){return a.search_results_mousewheel(b)}),this.search_results.observe("touchstart",function(b){return a.search_results_touchstart(b)}),this.search_results.observe("touchmove",function(b){return a.search_results_touchmove(b)}),this.search_results.observe("touchend",function(b){return a.search_results_touchend(b)}),this.form_field.observe("chosen:updated",function(b){return a.results_update_field(b)}),this.form_field.observe("chosen:activate",function(b){return a.activate_field(b)}),this.form_field.observe("chosen:open",function(b){return a.container_mousedown(b)}),this.form_field.observe("chosen:close",function(b){return a.input_blur(b)}),this.search_field.observe("blur",function(b){return a.input_blur(b)}),this.search_field.observe("keyup",function(b){return a.keyup_checker(b)}),this.search_field.observe("keydown",function(b){return a.keydown_checker(b)}),this.search_field.observe("focus",function(b){return a.input_focus(b)}),this.search_field.observe("cut",function(b){return a.clipboard_event_checker(b)}),this.search_field.observe("paste",function(b){return a.clipboard_event_checker(b)}),this.is_multiple?this.search_choices.observe("click",function(b){return a.choices_click(b)}):this.container.observe("click",function(a){return a.preventDefault()})},Chosen.prototype.destroy=function(){return this.container.ownerDocument.stopObserving("click",this.click_test_action),this.form_field.stopObserving(),this.container.stopObserving(),this.search_results.stopObserving(),this.search_field.stopObserving(),null!=this.form_field_label&&this.form_field_label.stopObserving(),this.is_multiple?(this.search_choices.stopObserving(),this.container.select(".search-choice-close").each(function(a){return a.stopObserving()})):this.selected_item.stopObserving(),this.search_field.tabIndex&&(this.form_field.tabIndex=this.search_field.tabIndex),this.container.remove(),this.form_field.show()},Chosen.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field.disabled,this.is_disabled?(this.container.addClassName("chosen-disabled"),this.search_field.disabled=!0,this.is_multiple||this.selected_item.stopObserving("focus",this.activate_action),this.close_field()):(this.container.removeClassName("chosen-disabled"),this.search_field.disabled=!1,this.is_multiple?void 0:this.selected_item.observe("focus",this.activate_action))},Chosen.prototype.container_mousedown=function(a){return this.is_disabled||(a&&"mousedown"===a.type&&!this.results_showing&&a.stop(),null!=a&&a.target.hasClassName("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!a||a.target!==this.selected_item&&!a.target.up("a.chosen-single")||this.results_toggle():(this.is_multiple&&this.search_field.clear(),this.container.ownerDocument.observe("click",this.click_test_action),this.results_show()),this.activate_field())},Chosen.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},Chosen.prototype.search_results_mousewheel=function(a){var b;return b=a.deltaY||-a.wheelDelta||a.detail,null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop=b+this.search_results.scrollTop):void 0},Chosen.prototype.blur_test=function(){return!this.active_field&&this.container.hasClassName("chosen-container-active")?this.close_field():void 0},Chosen.prototype.close_field=function(){return this.container.ownerDocument.stopObserving("click",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClassName("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},Chosen.prototype.activate_field=function(){return this.container.addClassName("chosen-container-active"),this.active_field=!0,this.search_field.value=this.search_field.value,this.search_field.focus()},Chosen.prototype.test_active_click=function(a){return a.target.up(".chosen-container")===this.container?this.active_field=!0:this.close_field()},Chosen.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=SelectParser.select_to_array(this.form_field),this.is_multiple?this.search_choices.select("li.search-choice").invoke("remove"):this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field.readOnly=!0,this.container.addClassName("chosen-container-single-nosearch")):(this.search_field.readOnly=!1,this.container.removeClassName("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},Chosen.prototype.result_do_highlight=function(a){var b,c,d,e,f;return this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClassName("highlighted"),d=parseInt(this.search_results.getStyle("maxHeight"),10),f=this.search_results.scrollTop,e=d+f,c=this.result_highlight.positionedOffset().top,b=c+this.result_highlight.getHeight(),b>=e?this.search_results.scrollTop=b-d>0?b-d:0:f>c?this.search_results.scrollTop=c:void 0},Chosen.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClassName("highlighted"),this.result_highlight=null},Chosen.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field.fire("chosen:maxselected",{chosen:this}),!1):(this.container.addClassName("chosen-with-drop"),this.results_showing=!0,this.search_field.focus(),this.search_field.value=this.search_field.value,this.winnow_results(),this.form_field.fire("chosen:showing_dropdown",{chosen:this}))},Chosen.prototype.update_results_content=function(a){return this.search_results.update(a)},Chosen.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClassName("chosen-with-drop"),this.form_field.fire("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},Chosen.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field.tabIndex=a):void 0},Chosen.prototype.set_label_behavior=function(){var a=this;return this.form_field_label=this.form_field.up("label"),null==this.form_field_label&&(this.form_field_label=$$("label[for='"+this.form_field.id+"']").first()),null!=this.form_field_label?this.form_field_label.observe("click",function(b){return a.is_multiple?a.container_mousedown(b):a.activate_field()}):void 0},Chosen.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.value=this.default_text,this.search_field.addClassName("default")):(this.search_field.value="",this.search_field.removeClassName("default"))},Chosen.prototype.search_results_mouseup=function(a){var b;return b=a.target.hasClassName("active-result")?a.target:a.target.up(".active-result"),b?(this.result_highlight=b,this.result_select(a),this.search_field.focus()):void 0},Chosen.prototype.search_results_mouseover=function(a){var b;return b=a.target.hasClassName("active-result")?a.target:a.target.up(".active-result"),b?this.result_do_highlight(b):void 0},Chosen.prototype.search_results_mouseout=function(a){return a.target.hasClassName("active-result")||a.target.up(".active-result")?this.result_clear_highlight():void 0},Chosen.prototype.choice_build=function(a){var b,c,d=this;return b=new Element("li",{"class":"search-choice"}).update(""+this.choice_label(a)+""),a.disabled?b.addClassName("search-choice-disabled"):(c=new Element("a",{href:"#","class":"search-choice-close",rel:a.array_index}),c.observe("click",function(a){return d.choice_destroy_link_click(a)}),b.insert(c)),this.search_container.insert({before:b})},Chosen.prototype.choice_destroy_link_click=function(a){return a.preventDefault(),a.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a.target)},Chosen.prototype.choice_destroy=function(a){return this.result_deselect(a.readAttribute("rel"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.value.length<1&&this.results_hide(),a.up("li").remove(),this.search_field_scale()):void 0},Chosen.prototype.results_reset=function(){return this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),"function"==typeof Event.simulate&&this.form_field.simulate("change"),this.active_field?this.results_hide():void 0},Chosen.prototype.results_reset_cleanup=function(){var a;return this.current_selectedIndex=this.form_field.selectedIndex,a=this.selected_item.down("abbr"),a?a.remove():void 0},Chosen.prototype.result_select=function(a){var b,c;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field.fire("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClassName("active-result"):this.reset_single_select_options(),b.addClassName("result-selected"),c=this.results_data[b.getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(this.choice_label(c)),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.value="","function"!=typeof Event.simulate||!this.is_multiple&&this.form_field.selectedIndex===this.current_selectedIndex||this.form_field.simulate("change"),this.current_selectedIndex=this.form_field.selectedIndex,a.preventDefault(),this.search_field_scale())):void 0},Chosen.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClassName("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClassName("chosen-default")),this.selected_item.down("span").update(a)},Chosen.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),"function"==typeof Event.simulate&&this.form_field.simulate("change"),this.search_field_scale(),!0)},Chosen.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.down("abbr")||this.selected_item.down("span").insert({after:''}),this.selected_item.addClassName("chosen-single-with-deselect")):void 0},Chosen.prototype.get_search_text=function(){return this.search_field.value===this.default_text?"":this.search_field.value.strip().escapeHTML()},Chosen.prototype.winnow_results_set_highlight=function(){var a;return this.is_multiple||(a=this.search_results.down(".result-selected.active-result")),null==a&&(a=this.search_results.down(".active-result")),null!=a?this.result_do_highlight(a):void 0},Chosen.prototype.no_results=function(a){return this.search_results.insert(this.no_results_temp.evaluate({terms:a})),this.form_field.fire("chosen:no_results",{chosen:this})},Chosen.prototype.no_results_clear=function(){var a,b;for(a=null,b=[];a=this.search_results.down(".no-results");)b.push(a.remove());return b},Chosen.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.next(".active-result"))?this.result_do_highlight(a):void 0:this.results_show()},Chosen.prototype.keyup_arrow=function(){var a,b,c;return this.results_showing||this.is_multiple?this.result_highlight?(c=this.result_highlight.previousSiblings(),a=this.search_results.select("li.active-result"),b=c.intersect(a),b.length?this.result_do_highlight(b.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},Chosen.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.down("a")),this.clear_backstroke()):(a=this.search_container.siblings().last(),a&&a.hasClassName("search-choice")&&!a.hasClassName("search-choice-disabled")?(this.pending_backstroke=a,this.pending_backstroke&&this.pending_backstroke.addClassName("search-choice-focus"),this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClassName("search-choice-focus")):void 0)},Chosen.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClassName("search-choice-focus"),this.pending_backstroke=null},Chosen.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.value.length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:this.results_showing&&a.preventDefault();break;case 32:this.disable_search&&a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},Chosen.prototype.search_field_scale=function(){var a,b,c,d,e,f,g,h,i;if(this.is_multiple){for(c=0,g=0,e="position:absolute; left: -1000px; top: -1000px; display:none;",f=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],h=0,i=f.length;i>h;h++)d=f[h],e+=d+":"+this.search_field.getStyle(d)+";";return a=new Element("div",{style:e}).update(this.search_field.value.escapeHTML()),document.body.appendChild(a),g=Element.measure(a,"width")+25,a.remove(),b=this.container.getWidth(),g>b-10&&(g=b-10),this.search_field.setStyle({width:g+"px"})}},Chosen}(AbstractChosen)}).call(this); \ No newline at end of file diff --git a/sites/all/libraries/chosen/docsupport/chosen.png b/sites/all/libraries/chosen/docsupport/chosen.png new file mode 100755 index 0000000000..22d70eeae2 Binary files /dev/null and b/sites/all/libraries/chosen/docsupport/chosen.png differ diff --git a/sites/all/libraries/chosen/docsupport/oss-credit.png b/sites/all/libraries/chosen/docsupport/oss-credit.png new file mode 100755 index 0000000000..aa515c3e65 Binary files /dev/null and b/sites/all/libraries/chosen/docsupport/oss-credit.png differ diff --git a/sites/all/libraries/chosen/docsupport/prism.css b/sites/all/libraries/chosen/docsupport/prism.css new file mode 100755 index 0000000000..b5ba1797ba --- /dev/null +++ b/sites/all/libraries/chosen/docsupport/prism.css @@ -0,0 +1,108 @@ +/** + * okaidia theme for JavaScript, CSS and HTML + * Loosely based on Monokai textmate theme by http://www.monokai.nl/ + * @author ocodia + */ + +code[class*="language-"], +pre[class*="language-"] { + color: #f8f8f2; + text-shadow: 0 1px rgba(0,0,0,0.3); + font-family: Consolas, Monaco, 'Andale Mono', monospace; + direction: ltr; + text-align: left; + white-space: pre; + word-spacing: normal; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border-radius: 0.3em; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #272822; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #f8f8f2; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag { + color: #f92672; +} + +.token.boolean, +.token.number{ + color: #ae81ff; +} + +.token.selector, +.token.attr-name, +.token.string { + color: #a6e22e; +} + + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #f8f8f2; +} + +.token.atrule, +.token.attr-value +{ + color: #e6db74; +} + + +.token.keyword{ +color: #66d9ef; +} + +.token.regex, +.token.important { + color: #fd971f; +} + +.token.important { + font-weight: bold; +} + +.token.entity { + cursor: help; +} diff --git a/sites/all/libraries/chosen/docsupport/prism.js b/sites/all/libraries/chosen/docsupport/prism.js new file mode 100755 index 0000000000..7ed4fa7375 --- /dev/null +++ b/sites/all/libraries/chosen/docsupport/prism.js @@ -0,0 +1,9 @@ +/** + * Prism: Lightweight, robust, elegant syntax highlighting + * MIT license http://www.opensource.org/licenses/mit-license.php/ + * @author Lea Verou http://lea.verou.me + */(function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var n=t.util.type(e);switch(n){case"Object":var r={};for(var i in e)e.hasOwnProperty(i)&&(r[i]=t.util.clone(e[i]));return r;case"Array":return e.slice()}return e}},languages:{extend:function(e,n){var r=t.util.clone(t.languages[e]);for(var i in n)r[i]=n[i];return r},insertBefore:function(e,n,r,i){i=i||t.languages;var s=i[e],o={};for(var u in s)if(s.hasOwnProperty(u)){if(u==n)for(var a in r)r.hasOwnProperty(a)&&(o[a]=r[a]);o[u]=s[u]}return i[e]=o},DFS:function(e,n){for(var r in e){n.call(e,r,e[r]);t.util.type(e)==="Object"&&t.languages.DFS(e[r],n)}}},highlightAll:function(e,n){var r=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');for(var i=0,s;s=r[i++];)t.highlightElement(s,e===!0,n)},highlightElement:function(r,i,s){var o,u,a=r;while(a&&!e.test(a.className))a=a.parentNode;if(a){o=(a.className.match(e)||[,""])[1];u=t.languages[o]}if(!u)return;r.className=r.className.replace(e,"").replace(/\s+/g," ")+" language-"+o;a=r.parentNode;/pre/i.test(a.nodeName)&&(a.className=a.className.replace(e,"").replace(/\s+/g," ")+" language-"+o);var f=r.textContent;if(!f)return;f=f.replace(/&/g,"&").replace(/e.length)break e;if(p instanceof i)continue;a.lastIndex=0;var d=a.exec(p);if(d){l&&(c=d[1].length);var v=d.index-1+c,d=d[0].slice(c),m=d.length,g=v+m,y=p.slice(0,v+1),b=p.slice(g+1),w=[h,1];y&&w.push(y);var E=new i(u,f?t.tokenize(d,f):d);w.push(E);b&&w.push(b);Array.prototype.splice.apply(s,w)}}}return s},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n)},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length)return;for(var i=0,s;s=r[i++];)s(n)}}},n=t.Token=function(e,t){this.type=e;this.content=t};n.stringify=function(e,r,i){if(typeof e=="string")return e;if(Object.prototype.toString.call(e)=="[object Array]")return e.map(function(t){return n.stringify(t,r,e)}).join("");var s={type:e.type,content:n.stringify(e.content,r,i),tag:"span",classes:["token",e.type],attributes:{},language:r,parent:i};s.type=="comment"&&(s.attributes.spellcheck="true");t.hooks.run("wrap",s);var o="";for(var u in s.attributes)o+=u+'="'+(s.attributes[u]||"")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'" '+o+">"+s.content+""};if(!self.document){self.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,i=n.code;self.postMessage(JSON.stringify(t.tokenize(i,t.languages[r])));self.close()},!1);return}var r=document.getElementsByTagName("script");r=r[r.length-1];if(r){t.filename=r.src;document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)}})();; +Prism.languages.markup={comment:/<!--[\w\W]*?-->/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|\w+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});; +Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/ig,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,ignore:/&(lt|gt|amp);/gi,punctuation:/[\{\};:]/g};Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<|<)style[\w\W]*?(>|>)[\w\W]*?(<|<)\/style(>|>)/ig,inside:{tag:{pattern:/(<|<)style[\w\W]*?(>|>)|(<|<)\/style(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css}}});; +Prism.languages.clike={comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|(^|[^:])\/\/.*?(\r?\n|$))/g,lookbehind:!0},string:/("|')(\\?.)*?\1/g,"class-name":{pattern:/((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/ig,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|catch|finally|null|break|continue)\b/g,"boolean":/\b(true|false)\b/g,"function":{pattern:/[a-z0-9_]+\(/ig,inside:{punctuation:/\(/}}, number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,operator:/[-+]{1,2}|!|<=?|>=?|={1,3}|(&){1,2}|\|?\||\?|\*|\/|\~|\^|\%/g,ignore:/&(lt|gt|amp);/gi,punctuation:/[{}[\];(),.:]/g};; +Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(var|let|if|else|while|do|for|return|in|instanceof|function|new|with|typeof|try|catch|finally|null|break|continue)\b/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?|NaN|-?Infinity)\b/g});Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/g,lookbehind:!0}});Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<|<)script[\w\W]*?(>|>)[\w\W]*?(<|<)\/script(>|>)/ig,inside:{tag:{pattern:/(<|<)script[\w\W]*?(>|>)|(<|<)\/script(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.javascript}}});; diff --git a/sites/all/libraries/chosen/docsupport/style.css b/sites/all/libraries/chosen/docsupport/style.css new file mode 100755 index 0000000000..7f09d091f3 --- /dev/null +++ b/sites/all/libraries/chosen/docsupport/style.css @@ -0,0 +1,204 @@ +/* Reset */ +html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } + +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } + +blockquote, q { quotes: none; } +blockquote:before, blockquote:after, q:before, q:after { content: ""; content: none; } +ins { background-color: #ff9; color: #000; text-decoration: none; } +mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; } +del { text-decoration: line-through; } +abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; } +table { border-collapse: collapse; border-spacing: 0; } +hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; } +input, select { vertical-align: middle; } + +body { font:13px/1.231 sans-serif; *font-size:small; } /* Hack retained to preserve specificity */ +select, input, textarea, button { font:99% sans-serif; } +pre, code, kbd, samp { font-family: monospace, sans-serif; } + + +body { background: #EEE; color: #444; line-height: 1.4em; } + +header h1 { color: black; font-size: 2em; line-height: 1.1em; display: inline-block; height: 27px; margin: 20px 0 25px; } +header h1 small { font-size: 0.6em; } + +div#content { background: white; border: 1px solid #ccc; border-width: 0 1px 1px; margin: 0 auto; padding: 40px 50px 40px; width: 738px; } + +footer { color: #999; padding-top: 40px; font-size: 0.8em; text-align: center; } + +body { font-family: sans-serif; font-size: 1em; } + +p { margin: 0 0 .7em; max-width: 700px; } +table+p { margin-top: 1em; } + +h2 { border-bottom: 1px solid #ccc; font-size: 1.2em; margin: 3em 0 1em 0; font-weight: bold;} +h3 { font-weight: bold; } + +h2.intro { border-bottom: none; font-size: 1em; font-weight: normal; margin-top:0; } + +ul li { list-style: disc; margin-left: 1em; margin-bottom: 1.25em; } +ol li { margin-left: 1.25em; } +ol ul, ul ul { margin: .25em 0 0; } +ol ul li, ul ul li { list-style-type: circle; margin: 0 0 .25em 1em; } + +li > p { margin-top: .25em; } + +div.side-by-side { width: 100%; margin-bottom: 1em; } +div.side-by-side > div { float: left; width: 49%; } +div.side-by-side > div > em { margin-bottom: 10px; display: block; } + +.faqs em { display: block; } + +.clearfix:after { + content: "\0020"; + display: block; + height: 0; + clear: both; + overflow: hidden; + visibility: hidden; +} + +a { color: #F36C00; outline: none; text-decoration: none; } +a:hover { text-decoration: underline; } + +ul.credits li { margin-bottom: .25em; } + +strong { font-weight: bold; } +i { font-style: italic; } + +.button { + background: #fafafa; + background: -webkit-linear-gradient(top, #ffffff, #eeeeee); + background: -moz-linear-gradient(top, #ffffff, #eeeeee); + background: -o-linear-gradient(top, #ffffff, #eeeeee); + background: linear-gradient(to bottom, #ffffff, #eeeeee); + border: 1px solid #bbbbbb; + border-radius: 4px; + box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.2); + color: #555555; + cursor: pointer; + display: inline-block; + font-family: "Helvetica Neue", Arial, Verdana, "Nimbus Sans L", sans-serif; + font-size: 13px; + font-weight: 500; + height: 31px; + line-height: 28px; + outline: none; + padding: 0 13px; + text-shadow: 0 1px 0 white; + text-decoration: none; + vertical-align: middle; + white-space: nowrap; + -webkit-font-smoothing: antialiased; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.button-blue { + background: #1385e5; + background: -webkit-linear-gradient(top, #53b2fc, #1385e5); + background: -moz-linear-gradient(top, #53b2fc, #1385e5); + background: -o-linear-gradient(top, #53b2fc, #1385e5); + background: linear-gradient(to bottom, #53b2fc, #1385e5); + border-color: #075fa9; + color: white; + font-weight: bold; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.4); +} + + +/* Tweak navbar brand link to be super sleek +-------------------------------------------------- */ +.oss-bar { + top: 0; + right: 20px; + position: fixed; + z-index: 1030; +} +.oss-bar ul { + float: right; + margin: 0; + list-style: none; +} +.oss-bar ul li { + list-style: none; + float: left; + line-height: 0; + margin: 0; +} +.oss-bar ul li a { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + border: 0; + margin-top: -10px; + display: block; + height: 58px; + background: #F36C00 url(oss-credit.png) no-repeat 20px 22px; + padding: 22px 20px 12px 20px; + text-indent: 120%; /* stupid padding */ + white-space: nowrap; + overflow: hidden; + -webkit-transition: all 0.10s ease-in-out; + -moz-transition: all 0.10s ease-in-out; + transition: all 0.15s ease-in-out; +} +.oss-bar ul li a:hover { + margin-top: 0px; +} +.oss-bar a.harvest { + width: 196px; + background-color: #F36C00; + background-position: -142px 22px; + padding-right: 22px; /* optical illusion */ +} +.oss-bar a.fork { + width: 162px; + background-color: #333333; +} + +.docs-table th, .docs-table td { + border: 1px solid #000; + padding: 4px 6px; + white-space: nowrap; +} + +.docs-table td:last-child { + white-space: normal; +} + +.docs-table th { + font-weight: bold; + text-align: left; +} + +#content pre[class*=language-] { + font-size: 14px; + margin-bottom: 20px; +} + +#content pre[class*=language-] code { + font-size: 14px; + padding: 0; +} + +#content code[class*=language-] { + font-size: 12px; + padding: 2px 4px; +} + +.anchor { + color: inherit; + position: relative; +} + +.anchor:hover { + background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSI3Ij48ZyBmaWxsPSIjNDE0MDQyIj48cGF0aCBkPSJNOS44IDdoLS45bC0uOS0uMWMtLjctLjMtMS40LS43LTEuOC0xLjMtLjItLjEtLjMtLjMtLjMtLjVsLS4zLS40Yy0uMS0uNC0uMi0uOC0uMi0xLjIgMC0uNC4xLS44LjItMS4yaDEuN2MtLjMuNC0uNC44LS40IDEuMiAwIC40LjEuOC4zIDEuMS4xLjIuMi4zLjQuNC4xLjEuMi4yLjQuMy4zLjIuNy4zIDEgLjNoMy40YzEuMiAwIDIuMi0uOSAyLjItMi4xcy0xLTIuMS0yLjItMi4xaC0xLjRjLS4zLS42LS43LTEtMS4yLTEuNGgyLjZjMiAwIDMuNiAxLjYgMy42IDMuNXMtMS42IDMuNS0zLjYgMy41aC0yLjZ6TTguNCAyYy0uMS0uMS0uMi0uMy0uNC0uMy0uMy0uMi0uNy0uMy0xLS4zaC0zLjRjLTEuMiAwLTIuMi45LTIuMiAyLjEgMCAxLjIgMSAyLjEgMi4yIDIuMWgxLjRjLjMuNS43IDEgMS4yIDEuNGgtMi42Yy0yIDAtMy42LTEuNi0zLjYtMy41czEuNi0zLjUgMy42LTMuNWgzLjUwMDAwMDAwMDAwMDAwMDRsLjkuMWMuNy4yIDEuNC43IDEuOCAxLjMuMS4xLjIuMy4zLjUuMS4xLjIuMy4yLjUuMS40LjIuOC4yIDEuMiAwIC40LS4xLjgtLjIgMS4yaC0xLjZjLjMtLjUuNC0uOS40LTEuM3MtLjEtLjgtLjMtMS4xYy0uMS0uMi0uMi0uMy0uNC0uNHoiLz48L2c+PC9zdmc+) 0 50% no-repeat; + background-size: 21px 9px; + margin-left: -27px; + padding-left: 27px; + text-decoration: none; +} diff --git a/sites/all/libraries/chosen/index.html b/sites/all/libraries/chosen/index.html new file mode 100755 index 0000000000..cdf85ca2be --- /dev/null +++ b/sites/all/libraries/chosen/index.html @@ -0,0 +1,1479 @@ + + + + + Chosen: A jQuery Plugin by Harvest to Tame Unwieldy Select Boxes + + + + + + +
                  +
                  +
                  +
                  +

                  Chosen (v1.4.0)

                  +
                  +

                  Chosen is a jQuery plugin that makes long, unwieldy select boxes much more user-friendly.

                  + +

                  + Downloads + Project Source + Contribute +

                  + +

                  Standard Select

                  +
                  +
                  + Turns This + +
                  +
                  + Into This + +
                  +
                  + +

                  Multiple Select

                  +
                  +
                  + Turns This + +
                  +
                  + Into This + +
                  +
                  + +

                  <optgroup> Support

                  +
                  +
                  + Single Select with Groups + +
                  +
                  + Multiple Select with Groups + +
                  +
                  + +

                  Selected and Disabled Support

                  +
                  +

                  Chosen automatically highlights selected options and removes disabled options.

                  +
                  + Single Select + +
                  +
                  + Multiple Select + +
                  +
                  + +

                  Hide Search on Single Select

                  +
                  +

                  The disable_search_threshold option can be specified to hide the search input on single selects if there are fewer than (n) options.

                  +
                  $(".chosen-select").chosen({disable_search_threshold: 10});
                  +

                  +
                  + +
                  +
                  + +

                  Default Text Support

                  +
                  +

                  Chosen automatically sets the default field text ("Choose a country...") by reading the select element's data-placeholder value. If no data-placeholder value is present, it will default to "Select an Option" or "Select Some Options" depending on whether the select is single or multiple. You can change these elements in the plugin js file as you see fit.

                  +
                  <select data-placeholder="Choose a country..." style="width:350px;" multiple class="chosen-select">
                  +

                  Note: on single selects, the first element is assumed to be selected by the browser. To take advantage of the default text support, you will need to include a blank option as the first element of your select list.

                  +
                  + +

                  No Results Text Support

                  +
                  +

                  Setting the "No results" search text is as easy as passing an option when you create Chosen:

                  +
                   $(".chosen-select").chosen({no_results_text: "Oops, nothing found!"}); 
                  +

                  +
                  + Single Select + +
                  +
                  + Multiple Select + +
                  +
                  + +

                  Limit Selected Options in Multiselect

                  +
                  +

                  You can easily limit how many options the user can select:

                  +
                  $(".chosen-select").chosen({max_selected_options: 5});
                  +

                  If you try to select another option with limit reached chosen:maxselected event is triggered:

                  +
                   $(".chosen-select").bind("chosen:maxselected", function () { ... }); 
                  +
                  + +

                  Allow Deselect on Single Selects

                  +
                  +

                  When a single select box isn't a required field, you can set allow_single_deselect: true and Chosen will add a UI element for option deselection. This will only work if the first option has blank text.

                  +
                  + +
                  +
                  + +

                  Right to Left Support

                  +
                  +

                  Chosen supports right to left select boxes too. just add "chosen-rtl" in addition to "chosen-select" to your select tags and you are good to go.

                  +
                  <select class="chosen-select chosen-rtl">
                  +
                  + Single right to left select + +
                  +
                  + Multiple right to left select + +
                  +
                  + +

                  Change / Update Events

                  +
                  +
                    +
                  • +

                    Form Field Change

                    +

                    When working with form fields, you often want to perform some behavior after a value has been selected or deselected. Whenever a user selects a field in Chosen, it triggers a "change" event* on the original form field. That let's you do something like this:

                    +
                    $("#form_field").chosen().change( … );
                    +
                  • +
                  • +

                    Updating Chosen Dynamically

                    +

                    If you need to update the options in your select field and want Chosen to pick up the changes, you'll need to trigger the "chosen:updated" event on the field. Chosen will re-build itself based on the updated content.

                    +
                    $("#form_field").trigger("chosen:updated");
                    +
                  • +
                  +
                  + +

                  Custom Width Support

                  +
                  +

                  Using a custom width with Chosen is as easy as passing an option when you create Chosen:

                  +
                   $(".chosen-select").chosen({width: "95%"}); 
                  +
                  + Single Select + +
                  +
                  + Multiple Select + +
                  +
                  + +

                  Labels work, too

                  +
                  +

                  Use labels just like you would a standard select

                  +

                  +
                  + + +
                  +
                  + + +
                  +
                  + +

                  Setup

                  +

                  Using Chosen is easy as can be.

                  +
                    +
                  1. Download the plugin and copy the chosen files to your app.
                  2. +
                  3. Activate the plugin on the select boxes of your choice: $(".chosen-select").chosen()
                  4. +
                  5. Disco.
                  6. +
                  + +

                  FAQs

                  +
                    +
                  • +

                    Do you have all the available options documented somewhere?

                    +

                    Yes! You can find them on the options page.

                    +
                  • +
                  • +

                    Something doesn't work. Can you fix it?

                    +

                    Yes! Please report all issues using the GitHub issue tracking tool. Please include the plugin version (jQuery or Prototype), browser and OS. The more information provided, the easier it is to fix a problem.

                    +
                  • +
                  • +

                    What browsers are supported?

                    +

                    All modern desktop browsers are supported (Firefox, Chrome, Safari and IE9). Legacy support for IE8 is also enabled. Chosen is disabled on iPhone, iPod Touch, and Android mobile devices (more information).

                    +
                  • +
                  • +

                    Didn't there used to be a Prototype version of Chosen?

                    +

                    There still is!

                    +
                  • +
                  + +

                  Credits

                  + + + + + +
                  +
                  + + + + +
                  + + + diff --git a/sites/all/libraries/chosen/index.proto.html b/sites/all/libraries/chosen/index.proto.html new file mode 100755 index 0000000000..d0245ef59b --- /dev/null +++ b/sites/all/libraries/chosen/index.proto.html @@ -0,0 +1,1483 @@ + + + + + Chosen: A Prototype Plugin by Harvest to Tame Unwieldy Select Boxes + + + + + + +
                  +
                  +
                  +

                  Chosen - Prototype Version (v1.4.0)

                  +
                  +

                  Chosen is a Prototype plugin that makes long, unwieldy select boxes much more user-friendly.

                  + +

                  + Downloads + Project Source + Contribute +

                  + +

                  Looking for the jQuery version?

                  + +

                  Standard Select

                  +
                  +
                  + Turns This + +
                  +
                  + Into This + +
                  +
                  + +

                  Multiple Select

                  +
                  +
                  + Turns This + +
                  +
                  + Into This + +
                  +
                  + +

                  <optgroup> Support

                  +
                  +
                  + Single Select with Groups + +
                  +
                  + Multiple Select with Groups + +
                  +
                  + +

                  Selected and Disabled Support

                  +
                  +

                  Chosen automatically highlights selected options and removes disabled options.

                  +
                  + Single Select + +
                  +
                  + Multiple Select + +
                  +
                  + +

                  Hide Search on Single Select

                  +
                  +

                  The disable_search_threshold option can be specified to hide the search input on single selects if there are fewer than (n) options.

                  +
                   new Chosen($("chosen_select_field"),{disable_search_threshold: 10}); 
                  +

                  +
                  + +
                  +
                  + +

                  Default Text Support

                  +
                  +

                  Chosen automatically sets the default field text ("Choose a country...") by reading the select element's data-placeholder value. If no data-placeholder value is present, it will default to "Select an Option" or "Select Some Options" depending on whether the select is single or multiple. You can change these elements in the plugin js file as you see fit.

                  +
                  <select data-placeholder="Choose a country..." style="width:350px;" multiple class="chosen-select">
                  +

                  Note: on single selects, the first element is assumed to be selected by the browser. To take advantage of the default text support, you will need to include a blank option as the first element of your select list.

                  +
                  + +

                  No Results Text Support

                  +
                  +

                  Setting the "No results" search text is as easy as passing an option when you create Chosen:

                  +
                  new Chosen($("chosen_select_field"),{no_results_text: "Oops, nothing found!"}); 
                  + +
                  + Single Select + +
                  +
                  + Multiple Select + +
                  +
                  + +

                  Limit Selected Options in Multiselect

                  +
                  +

                  You can easily limit how many options the user can select:

                  +
                  new Chosen($("chosen_select_field"),{max_selected_options: 5}); 
                  +

                  If you try to select another option with limit reached chosen:maxselected event is triggered:

                  +
                  $("chosen_select_field").observe("chosen:maxselected", function(evt) { ... }); 
                  +
                  + +

                  Allow Deselect on Single Selects

                  +
                  +

                  When a single select box isn't a required field, you can set allow_single_deselect: true and Chosen will add a UI element for option deselection. This will only work if the first option has blank text.

                  +
                  + +
                  +
                  + +

                  Right to Left Support

                  +
                  +

                  Chosen supports right to left select boxes too. just add "chosen-rtl" in addition to "chosen-select" to your select tags and you are good to go.

                  +
                  <select class="chosen-select chosen-rtl">
                  +
                  + Single right to left select + +
                  +
                  + Multiple right to left select + +
                  +
                  + +

                  Change / Update Events

                  +
                  +
                    +
                  • +

                    Form Field Change

                    +

                    When working with form fields, you often want to perform some behavior after a value has been selected or deselected. Whenever a user selects a field in Chosen, it triggers a "change" event* on the original form field. That let's you do something like this:

                    +
                    $("#form_field").chosen().change( … );
                    +

                    Note: Prototype doesn't offer support for triggering standard browser events. Event.simulate is required to trigger the change event when using the Prototype version.

                    +
                  • +
                  • +

                    Updating Chosen Dynamically

                    +

                    If you need to update the options in your select field and want Chosen to pick up the changes, you'll need to trigger the "chosen:updated" event on the field. Chosen will re-build itself based on the updated content.

                    +
                    Event.fire($("form_field"), "chosen:updated");
                    +
                  • +
                  +
                  + +

                  Custom Width Support

                  +
                  +

                  Using a custom width with Chosen is as easy as passing an option when you create Chosen:

                  +
                  new Chosen($("chosen_select_field"),{width: "95%"}); 
                  +
                  + Single Select + +
                  +
                  + Multiple Select + +
                  +
                  + +

                  Labels work, too

                  +
                  +

                  Use labels just like you would a standard select

                  +

                  +
                  + + +
                  +
                  + + +
                  +
                  + +

                  Setup

                  +

                  Using Chosen is easy as can be.

                  +
                    +
                  1. Download the plugin and copy the chosen files to your app.
                  2. +
                  3. Activate the plugin by creating a new instance of Chosen: New Chosen(some_form_field,some_options);
                  4. +
                  5. Disco.
                  6. +
                  + +

                  FAQs

                  +
                    +
                  • +

                    Do you have all the available options documented somewhere?

                    +

                    Yes! You can find them on the options page.

                    +
                  • +
                  • +

                    Something doesn't work. Can you fix it?

                    +

                    Yes! Please report all issues using the GitHub issue tracking tool. Please include the plugin version (jQuery or Prototype), browser and OS. The more information provided, the easier it is to fix a problem.

                    +
                  • +
                  • +

                    What browsers are supported?

                    +

                    All modern desktop browsers are supported (Firefox, Chrome, Safari and IE9). Legacy support for IE8 is also enabled. Chosen is disabled on iPhone, iPod Touch, and Android mobile devices (more information).

                    +
                  • +
                  + +

                  Credits

                  + + + + + +
                  +
                  + + + + + + + diff --git a/sites/all/libraries/chosen/options.html b/sites/all/libraries/chosen/options.html new file mode 100755 index 0000000000..0372925bc2 --- /dev/null +++ b/sites/all/libraries/chosen/options.html @@ -0,0 +1,276 @@ + + + + + Chosen: A jQuery Plugin by Harvest to Tame Unwieldy Select Boxes + + + + + + +
                  +
                  +
                  +

                  Chosen (v1.4.0)

                  +
                  +

                  Chosen has a number of options and attributes that allow you to have full control of your select boxes.

                  + +

                  Options

                  +

                  The following options are available to pass into Chosen on instantiation.

                  + +

                  Example:

                  +
                  +  $(".my_select_box").chosen({
                  +    disable_search_threshold: 10,
                  +    no_results_text: "Oops, nothing found!",
                  +    width: "95%"
                  +  });
                  +
                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  OptionDefaultDescription
                  allow_single_deselectfalseWhen set to true on a single select, Chosen adds a UI element which selects the first element (if it is blank).
                  disable_searchfalseWhen set to true, Chosen will not display the search field (single selects only).
                  disable_search_threshold0Hide the search input on single selects if there are fewer than (n) options.
                  enable_split_word_searchtrueBy default, searching will match on any word within an option tag. Set this option to false if you want to only match on the entire text of an option tag.
                  inherit_select_classesfalseWhen set to true, Chosen will grab any classes on the original select field and add them to Chosen’s container div.
                  max_selected_optionsInfinityLimits how many options the user can select. When the limit is reached, the chosen:maxselected event is triggered.
                  no_results_text"No results match"The text to be displayed when no matching results are found. The current search is shown at the end of the text (e.g., + No results match "Bad Search").
                  placeholder_text_multiple"Select Some Options"The text to be displayed as a placeholder when no options are selected for a multiple select.
                  placeholder_text_single"Select an Option"The text to be displayed as a placeholder when no options are selected for a single select.
                  search_containsfalseBy default, Chosen’s search matches starting at the beginning of a word. Setting this option to true allows matches starting from anywhere within a word. This is especially useful for options that include a lot of special characters or phrases in ()s and []s.
                  single_backstroke_deletetrueBy default, pressing delete/backspace on multiple selects will remove a selected choice. When false, pressing delete/backspace will highlight the last choice, and a second press deselects it.
                  widthOriginal select width.The width of the Chosen select box. By default, Chosen attempts to match the width of the select box you are replacing. If your select is hidden when Chosen is instantiated, you must specify a width or the select will show up with a width of 0.
                  display_disabled_optionstrueBy default, Chosen includes disabled options in search results with a special styling. Setting this option to false will hide disabled results and exclude them from searches.
                  display_selected_optionstrue +

                  By default, Chosen includes selected options in search results with a special styling. Setting this option to false will hide selected results and exclude them from searches.

                  +

                  Note: this is for multiple selects only. In single selects, the selected result will always be displayed.

                  +
                  include_group_label_in_selectedfalse +

                  By default, Chosen only shows the text of a selected option. Setting this option to true will show the text and group (if any) of the selected option.

                  +
                  + +

                  Attributes

                  +

                  Certain attributes placed on the select tag or its options can be used to configure Chosen.

                  + +

                  Example:

                  + +
                  +  <select class="my_select_box" data-placeholder="Select Your Options">
                  +    <option value="1">Option 1</option>
                  +    <option value="2" selected>Option 2</option>
                  +    <option value="3" disabled>Option 3</option>
                  +  </select>
                  +
                  + + + + + + + + + + + + + + + + + +
                  AttributeDescription
                  data-placeholder +

                  The text to be displayed as a placeholder when no options are selected for a select. Defaults to "Select an Option" for single selects or "Select Some Options" for multiple selects.

                  +

                  Note:This attribute overrides anything set in the placeholder_text_multiple or placeholder_text_single options.

                  +
                  multipleThe attribute multiple on your select box dictates whether Chosen will render a multiple or single select.
                  selected, disabledChosen automatically highlights selected options and disables disabled options.
                  + +

                  Classes

                  +

                  Classes placed on the select tag can be used to configure Chosen.

                  + +

                  Example:

                  + +
                  +  <select class="my_select_box chosen-rtl">
                  +    <option value="1">Option 1</option>
                  +    <option value="2">Option 2</option>
                  +    <option value="3">Option 3</option>
                  +  </select>
                  +
                  + + + + + + + + + + +
                  ClassnameDescription
                  chosen-rtl +

                  Chosen supports right-to-left text in select boxes. Add the class chosen-rtl to your select tag to support right-to-left text options.

                  +

                  Note: The chosen-rtl class will pass through to the Chosen select even when the inherit_select_classes option is set to false.

                  +
                  + +

                  Triggered Events

                  +

                  Chosen triggers a number of standard and custom events on the original select field.

                  + +

                  Example:

                  + +
                  +  $('.my_select_box').on('change', function(evt, params) {
                  +    do_something(evt, params);
                  +  });
                  +
                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  EventDescription
                  change +

                  Chosen triggers the standard DOM event whenever a selection is made (it also sends a selected or deselected parameter that tells you which option was changed).

                  +

                  Note: in order to use change in the Prototype version, you have to include the Event.simulate class. The selected and deselected parameters are not available for Prototype.

                  +
                  chosen:readyTriggered after Chosen has been fully instantiated.
                  chosen:maxselectedTriggered if max_selected_options is set and that total is broken.
                  chosen:showing_dropdownTriggered when Chosen’s dropdown is opened.
                  chosen:hiding_dropdownTriggered when Chosen’s dropdown is closed.
                  chosen:no_resultsTriggered when a search returns no matching results.
                  + +

                  + Note: all custom Chosen events (those that being with chosen:) also include the chosen object as a parameter. +

                  + +

                  Triggerable Events

                  +

                  You can trigger several events on the original select field to invoke a behavior in Chosen.

                  + +

                  Example:

                  + +
                  +  // tell Chosen that a select has changed
                  +  $('.my_select_box').trigger('chosen:updated');
                  +
                  + + + + + + + + + + + + + + + + + + + + + +
                  EventDescription
                  chosen:updatedThis event should be triggered whenever Chosen’s underlying select element changes (such as a change in selected options).
                  chosen:activateThis is the equivalant of focusing a standard HTML select field. When activated, Chosen will capure keypress events as if you had clicked the field directly.
                  chosen:openThis event activates Chosen and also displays the search results.
                  chosen:closeThis event deactivates Chosen and hides the search results.
                  + + + +
                  +
                  + + + + diff --git a/sites/all/libraries/ckeditor/CHANGES.md b/sites/all/libraries/ckeditor/CHANGES.md new file mode 100644 index 0000000000..d927d93e7f --- /dev/null +++ b/sites/all/libraries/ckeditor/CHANGES.md @@ -0,0 +1,720 @@ +CKEditor 4 Changelog +==================== + +## CKEditor 4.4.7 + +Fixed Issues: + +* [#12825](http://dev.ckeditor.com/ticket/12825): Fixed: Preventing the [Table Resize](http://ckeditor.com/addon/tableresize) plugin from operating on elements outside the editor. Thanks to [Paul Martin](https://github.com/Paul-Martin)! +* [#12157](http://dev.ckeditor.com/ticket/12157): Fixed: Lost text formatting on pressing *Tab* when the [`config.tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces) configuration option value was greater than zero. +* [#12777](http://dev.ckeditor.com/ticket/12777): Fixed: The `table-layout` CSS property should be reset by skins. Thanks to [vita10gy](https://github.com/vita10gy)! +* [#12812](http://dev.ckeditor.com/ticket/12812): Fixed: An uncaught security exception is thrown when [Line Utilities](http://ckeditor.com/addon/lineutils) are used in an inline editor loaded in a cross-domain `iframe`. Thanks to [Vitaliy Zurian](https://github.com/thecatontheflat)! +* [#12735](http://dev.ckeditor.com/ticket/12735): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) should only apply when outputting data. +* [#10032](http://dev.ckeditor.com/ticket/10032): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) filter is executed for every paste after using the button. +* [#12597](http://dev.ckeditor.com/ticket/12597): [Blink/Webkit] Fixed: Multi-byte Japanese characters entry not working properly after *Shift+Enter*. +* [#12387](http://dev.ckeditor.com/ticket/12387): Fixed: An error is thrown if a skin does not have the [`chameleon`](http://docs.ckeditor.com/#!/api/CKEDITOR.skin-method-chameleon) property defined and [`config.uiColor`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-uiColor) is defined. +* [#12747](http://dev.ckeditor.com/ticket/12747): [IE8-10] Fixed: Opening a drop-down for a specific selection when the editor is maximized results in incorrect drop-down panel position. +* [#12850](http://dev.ckeditor.com/ticket/12850): [IEQM] Fixed: An error is thrown after focusing the editor. + +## CKEditor 4.4.6 + +**Security Updates:** + +* Fixed XSS vulnerability in the HTML parser reported by [Maco Cortes](https://www.facebook.com/Maaacoooo). + + Issue summary: It was possible to execute XSS inside CKEditor after persuading the victim to: (i) switch CKEditor to source mode, then (ii) paste a specially crafted HTML code, prepared by the attacker, into the opened CKEditor source area, and (iii) switch back to WYSIWYG mode. + +**An upgrade is highly recommended!** + +New Features: + +* [#12501](http://dev.ckeditor.com/ticket/12501): Allowed dashes in element names in the [string format of allowed content rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules-section-string-format). +* [#12550](http://dev.ckeditor.com/ticket/12550): Added the `
                  ` element to the [`CKEDITOR.dtd`](http://docs.ckeditor.com/#!/api/CKEDITOR.dtd). + +Fixed Issues: + +* [#12506](http://dev.ckeditor.com/ticket/12506): [Safari] Fixed: Cannot paste into inline editor if the page has `user-select: none` style. Thanks to [shaohua](https://github.com/shaohua)! +* [#12683](http://dev.ckeditor.com/ticket/12683): Fixed: [Filter](http://docs.ckeditor.com/#!/guide/dev_acf) fails to remove custom tags. Thanks to [timselier](https://github.com/timselier)! +* [#12489](http://dev.ckeditor.com/ticket/12489) and [#12491](http://dev.ckeditor.com/ticket/12491): Fixed: Various issues related to restoring the selection after performing operations on filler character. See the [fixed cases](http://dev.ckeditor.com/ticket/12491#comment:4). +* [#12621](http://dev.ckeditor.com/ticket/12621): Fixed: Cannot remove inline styles (bold, italic, etc.) in empty lines. +* [#12630](http://dev.ckeditor.com/ticket/12630): [Chrome] Fixed: Selection is placed outside the paragraph when the [New Page](http://ckeditor.com/addon/newpage) button is clicked. This patch significantly simplified the way how the initial selection (a selection after the content of the editable is overwritten) is being fixed. That might have fixed many related scenarios in all browsers. +* [#11647](http://dev.ckeditor.com/ticket/11647): Fixed: The [`editor.blur`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-blur) event is not fired on first blur after initializing the inline editor on an already focused element. +* [#12601](http://dev.ckeditor.com/ticket/12601): Fixed: [Strikethrough](http://ckeditor.com/addon/basicstyles) button tooltip spelling. +* [#12546](http://dev.ckeditor.com/ticket/12546): Fixed: The Preview tab in the [Document Properties](http://ckeditor.com/addon/docprops) dialog window is always disabled. +* [#12300](http://dev.ckeditor.com/ticket/12300): Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event fired on first navigation key press after typing. +* [#12141](http://dev.ckeditor.com/ticket/12141): Fixed: List items are lost when indenting a list item with content wrapped with a block element. +* [#12515](http://dev.ckeditor.com/ticket/12515): Fixed: Cursor is in the wrong position when undoing after adding an image and typing some text. +* [#12484](http://dev.ckeditor.com/ticket/12484): [Blink/Webkit] Fixed: DOM is changed outside the editor area in a certain case. +* [#12688](http://dev.ckeditor.com/ticket/12688): Improved the tests of the [styles system](http://docs.ckeditor.com/#!/api/CKEDITOR.style) and fixed two minor issues. +* [#12403](http://dev.ckeditor.com/ticket/12403): Fixed: Changing the [font](http://ckeditor.com/addon/font) style should not lead to nesting it in the previous style element. +* [#12609](http://dev.ckeditor.com/ticket/12609): Fixed: Incorrect `config.magicline_putEverywhere` name used for a [Magic Line](http://ckeditor.com/addon/magicline) all-encompassing [`config.magicline_everywhere`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-magicline_everywhere) configuration option. + + +## CKEditor 4.4.5 + +New Features: + +* [#12279](http://dev.ckeditor.com/ticket/12279): Added a possibility to pass a custom evaluator to [`node.getAscendant()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.node-method-getAscendant). + +Fixed Issues: + +* [#12423](http://dev.ckeditor.com/ticket/12423): [Safari7.1+] Fixed: *Enter* key moved cursor to a strange position. +* [#12381](http://dev.ckeditor.com/ticket/12381): [iOS] Fixed: Selection issue. Thanks to [Remiremi](https://github.com/Remiremi)! +* [#10804](http://dev.ckeditor.com/ticket/10804): Fixed: `CKEDITOR_GETURL` is not used with some plugins where it should be used. Thanks to [Thomas Andraschko](https://github.com/tandraschko)! +* [#9137](http://dev.ckeditor.com/ticket/9137): Fixed: The `` tag is not created when `` has an attribute. Thanks to [naoki.fujikawa](https://github.com/naoki-fujikawa)! +* [#12377](http://dev.ckeditor.com/ticket/12377): Fixed: Errors thrown in the [Image](http://ckeditor.com/addon/image) plugin when removing preview from the dialog window definition. Thanks to [Axinet](https://github.com/Axinet)! +* [#12162](http://dev.ckeditor.com/ticket/12162): Fixed: Auto paragraphing and *Enter* key in nested editables. +* [#12315](http://dev.ckeditor.com/ticket/12315): Fixed: Marked [`config.autoParagraph`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoParagraph) as deprecated. +* [#12113](http://dev.ckeditor.com/ticket/12113): Fixed: A [code snippet](http://ckeditor.com/addon/codesnippet) should be presented in the [elements path](http://ckeditor.com/addon/elementspath) as "code snippet" (translatable). +* [#12311](http://dev.ckeditor.com/ticket/12311): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) should also remove `` elements. +* [#12261](http://dev.ckeditor.com/ticket/12261): Fixed: Filter has to be destroyed and removed from [`CKEDITOR.filter.instances`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-static-property-instances) on editor destroy. +* [#12398](http://dev.ckeditor.com/ticket/12398): Fixed: [Maximize](http://ckeditor.com/addon/maximize) does not work on an instance without a [title](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title). +* [#12097](http://dev.ckeditor.com/ticket/12097): Fixed: JAWS not reading the number of options correctly in the [Text Color and Background Color](http://ckeditor.com/addon/colorbutton) button menu. +* [#12411](http://dev.ckeditor.com/ticket/12411): Fixed: [Page Break](http://ckeditor.com/addon/pagebreak) used directly in the editable breaks the editor. +* [#12354](http://dev.ckeditor.com/ticket/12354): Fixed: Various issues in undo manager when holding keys. +* [#12324](http://dev.ckeditor.com/ticket/12324): [IE8] Fixed: Undo steps are not recorded when changing the caret position by clicking below the body. +* [#12332](http://dev.ckeditor.com/ticket/12332): Fixed: Lowered DOM events listeners' priorities in undo manager in order to avoid ambiguity. +* [#12402](http://dev.ckeditor.com/ticket/12402): [Blink] Fixed: Workaround for Blink bug with `document.title` which breaks updating title in the full HTML mode. +* [#12338](http://dev.ckeditor.com/ticket/12338): Fixed: The CKEditor package contains unoptimized images. + + +## CKEditor 4.4.4 + +Fixed Issues: + +* [#12268](http://dev.ckeditor.com/ticket/12268): Cleanup of [UI Color](http://ckeditor.com/addon/uicolor) YUI styles. Thanks to [CasherWest](https://github.com/CasherWest)! +* [#12263](http://dev.ckeditor.com/ticket/12263): Fixed: [Paste from Word](http://ckeditor.com/addon/pastefromword) filter does not properly normalize semicolons style text. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! +* [#12243](http://dev.ckeditor.com/ticket/12243): Fixed: Text formatting lost when pasting from Word. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! +* [#111739](http://dev.ckeditor.com/ticket/11739): Fixed: `keypress` listeners should not be used in the undo manager. A complete rewrite of keyboard handling in the undo manager was made. Numerous smaller issues were fixed, among others: + * [#10926](http://dev.ckeditor.com/ticket/10926): [Chrome@Android] Fixed: Typing does not record snapshots and does not fire the [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. + * [#11611](http://dev.ckeditor.com/ticket/11611): [Firefox] Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event is fired when pressing Arrow keys. + * [#12219](http://dev.ckeditor.com/ticket/12219): [Safari] Fixed: Some modifications of the [`UndoManager.locked`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-property-locked) property violate strict mode in the [Undo](http://ckeditor.com/addon/undo) plugin. +* [#10916](http://dev.ckeditor.com/ticket/10916): Fixed: [Magic Line](http://ckeditor.com/addon/magicline) icon in Right-To-Left environments. +* [#11970](http://dev.ckeditor.com/ticket/11970): [IE] Fixed: CKEditor `paste` event is not fired when pasting with *Shift+Ins*. +* [#12111](http://dev.ckeditor.com/ticket/12111): Fixed: Linked image attributes are not read when opening the image dialog window by doubleclicking. +* [#10030](http://dev.ckeditor.com/ticket/10030): [IE] Fixed: Prevented "Unspecified Error" thrown in various cases when IE8-9 does not allow access to `document.activeElement`. +* [#12273](http://dev.ckeditor.com/ticket/12273): Fixed: Applying block style in a description list breaks it. +* [#12218](http://dev.ckeditor.com/ticket/12218): Fixed: Minor syntax issue in CSS files. +* [#12178](http://dev.ckeditor.com/ticket/12178): [Blink/WebKit] Fixed: Iterator does not return the block if the selection is located at the end of it. +* [#12185](http://dev.ckeditor.com/ticket/12185): [IE9QM] Fixed: Error thrown when moving the mouse over focused editor's scrollbar. +* [#12215](http://dev.ckeditor.com/ticket/12215): Fixed: Basepath resolution does not recognize semicolon as a query separator. +* [#12135](http://dev.ckeditor.com/ticket/12135): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) does not work on widgets. +* [#12298](http://dev.ckeditor.com/ticket/12298): [IE11] Fixed: Clicking below `` in Compatibility Mode will no longer reset selection to the first line. +* [#12204](http://dev.ckeditor.com/ticket/12204): Fixed: Editor's voice label is not affected by [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title). +* [#11915](http://dev.ckeditor.com/ticket/11915): Fixed: With [SCAYT](http://ckeditor.com/addon/scayt) enabled, cursor moves to the beginning of the first highlighted, misspelled word after typing or pasting into the editor. +* [SCAYT](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/69): Fixed: Error thrown in the console after enabling [SCAYT](http://ckeditor.com/addon/scayt) and trying to add a new image. + + +Other Changes: + +* [#12296](http://dev.ckeditor.com/ticket/12296): Merged `benderjs-ckeditor` into the main CKEditor repository. + +## CKEditor 4.4.3 + +**Security Updates:** + +* Fixed XSS vulnerability in the Preview plugin reported by Mario Heiderich of [Cure53](https://cure53.de/). + +**An upgrade is highly recommended!** + +New Features: + +* [#12164](http://dev.ckeditor.com/ticket/12164): Added the "Justify" option to the "Horizontal Alignment" drop-down in the Table Cell Properties dialog window. + +Fixed Issues: + +* [#12110](http://dev.ckeditor.com/ticket/12110): Fixed: Editor crash after deleting a table. Thanks to [Alin Purcaru](https://github.com/mesmerizero)! +* [#11897](http://dev.ckeditor.com/ticket/11897): Fixed: *Enter* key used in an empty list item creates a new line instead of breaking the list. Thanks to [noam-si](https://github.com/noam-si)! +* [#12140](http://dev.ckeditor.com/ticket/12140): Fixed: Double-clicking linked widgets opens two dialog windows. +* [#12132](http://dev.ckeditor.com/ticket/12132): Fixed: Image is inserted with `width` and `height` styles even when they are not allowed. +* [#9317](http://dev.ckeditor.com/ticket/9317): [IE] Fixed: [`config.disableObjectResizing`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-disableObjectResizing) does not work on IE. **Note**: We were not able to fix this issue on IE11+ because necessary events stopped working. See a [last resort workaround](http://dev.ckeditor.com/ticket/9317#comment:16) and make sure to [support our complaint to Microsoft](https://connect.microsoft.com/IE/feedback/details/742593/please-respect-execcommand-enableobjectresizing-in-contenteditable-elements). +* [#9638](http://dev.ckeditor.com/ticket/9638): Fixed: There should be no information about accessibility help available under the *Alt+0* keyboard shortcut if the [Accessibility Help](http://ckeditor.com/addon/a11yhelp) plugin is not available. +* [#8117](http://dev.ckeditor.com/ticket/8117) and [#9186](http://dev.ckeditor.com/ticket/9186): Fixed: In HTML5 `` tags should be allowed everywhere, including inside the `` element. +* [#10422](http://dev.ckeditor.com/ticket/10422): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) not working properly if a function is specified. + +## CKEditor 4.4.2 + +Important Notes: + +* The CKEditor testing environment is now publicly available. Read more about how to set up the environment and execute tests in the [CKEditor Testing Environment](http://docs.ckeditor.com/#!/guide/dev_tests) guide. + Please note that the [`tests/`](https://github.com/ckeditor/ckeditor-dev/tree/master/tests) directory which contains editor tests is not available in release packages. It can only be found in the development version of CKEditor on [GitHub](https://github.com/ckeditor/ckeditor-dev/). + +New Features: + +* [#11909](http://dev.ckeditor.com/ticket/11909): Introduced a parameter to prevent the [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) method from recording undo snapshots. + +Fixed Issues: + +* [#11757](http://dev.ckeditor.com/ticket/11757): Fixed: Imperfections in the [Moono](http://ckeditor.com/addon/moono) skin. Thanks to [danyaPostfactum](https://github.com/danyaPostfactum)! +* [#10091](http://dev.ckeditor.com/ticket/10091): Blockquote should be treated like an object by the styles system. Thanks to [dan-james-deeson](https://github.com/dan-james-deeson)! +* [#11478](http://dev.ckeditor.com/ticket/11478): Fixed: Issue with passing jQuery objects to [adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) configuration. +* [#10867](http://dev.ckeditor.com/ticket/10867): Fixed: Issue with setting encoded URI as image link. +* [#11983](http://dev.ckeditor.com/ticket/11983): Fixed: Clicking a nested widget does not focus it. Additionally, performance of the [`widget.repository.getByElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-getByElement) method was improved. +* [#12000](http://dev.ckeditor.com/ticket/12000): Fixed: Nested widgets should be initialized on [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) and [`nestedEditable.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.nestedEditable-method-setData). +* [#12022](http://dev.ckeditor.com/ticket/12022): Fixed: Outer widget's drag handler is not created at all if it has any nested widgets inside. +* [#11960](http://dev.ckeditor.com/ticket/11960): [Blink/WebKit] Fixed: The caret should be scrolled into view on *Backspace* and *Delete* (covers only the merging blocks case). +* [#11306](http://dev.ckeditor.com/ticket/11306): [OSX][Blink/WebKit] Fixed: No widget entries in the context menu on widget right-click. +* [#11957](http://dev.ckeditor.com/ticket/11957): Fixed: Alignment labels in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window are not translated. +* [#11980](http://dev.ckeditor.com/ticket/11980): [Blink/WebKit] Fixed: `` elements created when joining adjacent elements (non-collapsed selection). +* [#12009](http://dev.ckeditor.com/ticket/12009): [Nested widgets] Integration with the [Magic Line](http://ckeditor.com/addon/magicline) plugin. +* [#11387](http://dev.ckeditor.com/ticket/11387): Fixed: `role="radiogroup"` should be applied only to radio inputs' container. +* [#7975](http://dev.ckeditor.com/ticket/7975): [IE8] Fixed: Errors when trying to select an empty table cell. +* [#11947](http://dev.ckeditor.com/ticket/11947): [Firefox+IE11] Fixed: *Shift+Enter* in lists produces two line breaks. +* [#11972](http://dev.ckeditor.com/ticket/11972): Fixed: Feature detection in the [`element.setText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-setText) method should not trigger the layout engine. +* [#7634](http://dev.ckeditor.com/ticket/7634): Fixed: The [Flash Dialog](http://ckeditor.com/addon/flash) plugin omits the `allowFullScreen` parameter in the editor data if set to `true`. +* [#11910](http://dev.ckeditor.com/ticket/11910): Fixed: [Enhanced Image](http://ckeditor.com/addon/image2) does not take [`config.baseHref`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-baseHref) into account when updating image dimensions. +* [#11753](http://dev.ckeditor.com/ticket/11753): Fixed: Wrong [`checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method value after focusing or blurring a widget. +* [#11830](http://dev.ckeditor.com/ticket/11830): Fixed: Impossible to pass some arguments to [CKBuilder](https://github.com/ckeditor/ckbuilder) when using the `/dev/builder/build.sh` script. +* [#11945](http://dev.ckeditor.com/ticket/11945): Fixed: [Form Elements](http://ckeditor.com/addon/forms) plugin should not change a core method. +* [#11384](http://dev.ckeditor.com/ticket/11384): [IE9+] Fixed: `IndexSizeError` thrown when pasting into a non-empty selection anchored in one text node. + +## CKEditor 4.4.1 + +New Features: + +* [#9661](http://dev.ckeditor.com/ticket/9661): Added the option to [configure](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-linkJavaScriptLinksAllowed) anchor tags with JavaScript code in the `href` attribute. + +Fixed Issues: + +* [#11861](http://dev.ckeditor.com/ticket/11861): [Webkit/Blink] Fixed: Span elements created while joining adjacent elements. **Note:** This patch only covers cases when *Backspace* or *Delete* is pressed on a collapsed (empty) selection. The remaining case, with a non-empty selection, will be fixed in the next release. +* [#10714](http://dev.ckeditor.com/ticket/10714): [iOS] Fixed: Selection and drop-downs are broken if a touch event listener is used due to a [Webkit bug](https://bugs.webkit.org/show_bug.cgi?id=128924). Thanks to [Arty Gus](https://github.com/artygus)! +* [#11911](http://dev.ckeditor.com/ticket/11911): Fixed setting the `dir` attribute for a preloaded language in [CKEDITOR.lang](http://docs.ckeditor.com/#!/api/CKEDITOR.lang). Thanks to [Akash Mohapatra](https://github.com/akashmohapatra)! +* [#11926](http://dev.ckeditor.com/ticket/11926): Fixed: [Code Snippet](http://ckeditor.com/addon/codesnippet) does not decode HTML entities when loading code from the `` element. +* [#11223](http://dev.ckeditor.com/ticket/11223): Fixed: Issue when [Protected Source](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-protectedSource) was not working in the `` element. +* [#11859](http://dev.ckeditor.com/ticket/11859): Fixed: Removed the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin dependency from the [Code Snippet](http://ckeditor.com/addon/codesnippet) sample. +* [#11754](http://dev.ckeditor.com/ticket/11754): [Chrome] Fixed: Infinite loop when content includes not closed attributes. +* [#11848](http://dev.ckeditor.com/ticket/11848): [IE] Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) throwing an exception when there was no selection in the editor. +* [#11801](http://dev.ckeditor.com/ticket/11801): Fixed: Editor anchors unavailable when linking the [Enhanced Image](http://ckeditor.com/addon/image2) widget. +* [#11626](http://dev.ckeditor.com/ticket/11626): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) sets invalid column width. +* [#11872](http://dev.ckeditor.com/ticket/11872): Made [`element.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-addClass) chainable symmetrically to [`element.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-removeClass). +* [#11813](http://dev.ckeditor.com/ticket/11813): Fixed: Link lost while pasting a captioned image and restoring an undo snapshot ([Enhanced Image](http://ckeditor.com/addon/image2)). +* [#11814](http://dev.ckeditor.com/ticket/11814): Fixed: _Link_ and _Unlink_ entries persistently displayed in the [Enhanced Image](http://ckeditor.com/addon/image2) context menu. +* [#11839](http://dev.ckeditor.com/ticket/11839): [IE9] Fixed: The caret jumps out of the editable area when resizing the editor in the source mode. +* [#11822](http://dev.ckeditor.com/ticket/11822): [Webkit] Fixed: Editing anchors by double-click is broken in some cases. +* [#11823](http://dev.ckeditor.com/ticket/11823): [IE8] Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) throws an error over scrollbar. +* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: It is not possible to change the language back to _Not set_ in the [Code Snippet](http://ckeditor.com/addon/codesnippet) dialog window. +* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: [Filter](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied inside elements with the `contenteditable` attribute set to `true`. +* [#11798](http://dev.ckeditor.com/ticket/11798): Fixed: Inserting a non-editable element inside a table cell breaks the table. +* [#11793](http://dev.ckeditor.com/ticket/11793): Fixed: Drop-down is not "on" when clicking it while the editor is blurred. +* [#11850](http://dev.ckeditor.com/ticket/11850): Fixed: Fake objects with the `contenteditable` attribute set to `false` are not downcasted properly. +* [#11811](http://dev.ckeditor.com/ticket/11811): Fixed: Widget's data is not encoded correctly when passed to an attribute. +* [#11777](http://dev.ckeditor.com/ticket/11777): Fixed encoding ampersand in the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin. +* [#11880](http://dev.ckeditor.com/ticket/11880): [IE8-9] Fixed: Linked image has a default thick border. + +Other Changes: + +* [#11807](http://dev.ckeditor.com/ticket/11807): Updated jQuery version used in the sample to 1.11.0 and tested CKEditor jQuery Adapter with version 1.11.0 and 2.1.0. +* [#9504](http://dev.ckeditor.com/ticket/9504): Stopped using deprecated `attribute.specified` in all browsers except Internet Explorer. +* [#11809](http://dev.ckeditor.com/ticket/11809): Changed tab size in `<pre>` to 4 spaces. + +## CKEditor 4.4 + +**Important Notes:** + +* Marked the [`editor.beforePaste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-beforePaste) event as deprecated. +* The default class of captioned images has changed to `image` (was: `caption`). Please note that once edited in CKEditor 4.4+, all existing images of the `caption` class (`<figure class="caption">`) will be [filtered out](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) unless the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option is set to `caption`. For backward compatibility (i.e. when upgrading), it is highly recommended to use this setting, which also helps prevent CSS conflicts, etc. This does not apply to new CKEditor integrations. +* Widgets without defined buttons are no longer registered automatically to the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). Before CKEditor 4.4 widgets were registered to the ACF which was an incorrect behavior ([#11567](http://dev.ckeditor.com/ticket/11567)). This change should not have any impact on standard scenarios, but if your button does not execute the widget command, you need to set [`allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-allowedContent) and [`requiredContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-requiredContent) properties for it manually, because the editor will not be able to find them. +* The [Show Borders](http://ckeditor.com/addon/showborders) plugin was added to the Standard installation package in order to ensure that unstyled tables are still visible for the user ([#11665](http://dev.ckeditor.com/ticket/11665)). +* Since CKEditor 4.4 the editor instance should be passed to [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) methods to ensure full compatibility with other features (e.g. applying styles to widgets requires that). We ensured backward compatibility though, so the [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) will work even when the editor instance is not provided. + +New Features: + +* [#11297](http://dev.ckeditor.com/ticket/11297): Styles can now be applied to widgets. The definition of a style which can be applied to a specific widget must contain two additional properties — `type` and `widget`. Read more in the [Widget Styles](http://docs.ckeditor.com/#!/guide/dev_styles-section-widget-styles) section of the "Syles Drop-down" guide. Note that by default, widgets support only classes and no other attributes or styles. Related changes and features: + * Introduced the [`CKEDITOR.style.addCustomHandler()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-static-method-addCustomHandler) method for registering custom style handlers. + * The [`CKEDITOR.style.apply()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-apply) and [`CKEDITOR.style.remove()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-remove) methods are now called with an editor instance instead of the document so they can be reused by the [`CKEDITOR.editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) and [`CKEDITOR.editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) methods. Backward compatibility was preserved, but from CKEditor 4.4 it is highly recommended to pass an editor instead of a document to these methods. + * Many new methods and properties were introduced in the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) to make the handling of styles by widgets fully customizable. See: [`widget.definition.styleableElements`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleableElements), [`widget.definition.styleToAllowedContentRule`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleToAllowedContentRules), [`widget.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-addClass), [`widget.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeClass), [`widget.getClasses()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-getClasses), [`widget.hasClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-hasClass), [`widget.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-applyStyle), [`widget.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeStyle), [`widget.checkStyleActive()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-checkStyleActive). + * Integration with the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) required an introduction of the [`CKEDITOR.style.toAllowedContent()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-toAllowedContentRules) method which can be implemented by the custom style handler and if exists, it is used by the [`CKEDITOR.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter) to translate a style to [allowed content rules](http://docs.ckeditor.com/#!/api/CKEDITOR.filter.allowedContentRules). +* [#11300](http://dev.ckeditor.com/ticket/11300): Various changes in the [Enhanced Image](http://ckeditor.com/addon/image2) plugin: + * Introduced the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option to configure the class of captioned images. + * Introduced the [`config.image2_alignClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_alignClasses) option to configure the way images are aligned with CSS classes. + If this setting is defined, the editor produces classes instead of inline styles for aligned images. + * Default image caption can be translated (customized) with the `editor.lang.image2.captionPlaceholder` string. +* [#11341](http://dev.ckeditor.com/ticket/11341): [Enhanced Image](http://ckeditor.com/addon/image2) plugin: It is now possible to add a link to any image type. +* [#10202](http://dev.ckeditor.com/ticket/10202): Introduced wildcard support in the [Allowed Content Rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) format. +* [#10276](http://dev.ckeditor.com/ticket/10276): Introduced blacklisting in the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). +* [#10480](http://dev.ckeditor.com/ticket/10480): Introduced code snippets with code highlighting. There are two versions available so far — the default [Code Snippet](http://ckeditor.com/addon/codesnippet) which uses the [highlight.js](http://highlightjs.org) library and the [Code Snippet GeSHi](http://ckeditor.com/addon/codesnippetgeshi) which uses the [GeSHi](http://qbnz.com/highlighter/) library. +* [#11737](http://dev.ckeditor.com/ticket/11737): Introduced an option to prevent [filtering](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) of an element that matches custom criteria (see [`filter.addElementCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-method-addElementCallback)). +* [#11532](http://dev.ckeditor.com/ticket/11532): Introduced the [`editor.addContentsCss()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addContentsCss) method that can be used for [adding custom CSS files](http://docs.ckeditor.com/#!/guide/plugin_sdk_styles). +* [#11536](http://dev.ckeditor.com/ticket/11536): Added the [`CKEDITOR.tools.htmlDecode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlDecode) method for decoding HTML entities. +* [#11225](http://dev.ckeditor.com/ticket/11225): Introduced the [`CKEDITOR.tools.transparentImageData`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-property-transparentImageData) property which contains transparent image data to be used in CSS or as image source. + +Other Changes: + +* [#11377](http://dev.ckeditor.com/ticket/11377): Unified internal representation of empty anchors using the [fake objects](http://ckeditor.com/addon/fakeobjects). +* [#11422](http://dev.ckeditor.com/ticket/11422): Removed Firefox 3.x, Internet Explorer 6 and Opera 12.x leftovers in code. +* [#5217](http://dev.ckeditor.com/ticket/5217): Setting data (including switching between modes) creates a new undo snapshot. Besides that: + * Introduced the [`editable.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-property-status) property. + * Introduced a new `forceUpdate` option for the [`editor.lockSnapshot`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-lockSnapshot) event. + * Fixed: Selection not being unlocked in inline editor after setting data ([#11500](http://dev.ckeditor.com/ticket/11500)). +* The [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin was updated to the latest version. + +Fixed Issues: + +* [#10190](http://dev.ckeditor.com/ticket/10190): Fixed: Removing block style with [`editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) should result in a paragraph and not a div. +* [#11727](http://dev.ckeditor.com/ticket/11727): Fixed: The editor tries to select a non-editable image which was clicked. + +## CKEditor 4.3.5 + +New Features: + +* Added new translation: Tatar. + +Fixed Issues: + +* [#11677](http://dev.ckeditor.com/ticket/11677): Fixed: Undo/Redo keystrokes are blocked in the source mode. +* [#11717](http://dev.ckeditor.com/ticket/11717): [Document Properties](http://ckeditor.com/addon/docprops) plugin requires the [Color Dialog](http://ckeditor.com/addon/colordialog) plugin to work. + +## CKEditor 4.3.4 + +Fixed Issues: + +* [#11597](http://dev.ckeditor.com/ticket/11597): [IE11] Fixed: Error thrown when trying to open the [preview](http://ckeditor.com/addon/preview) using the keyboard. +* [#11544](http://dev.ckeditor.com/ticket/11544): [Placeholders](http://ckeditor.com/addon/placeholder) will no longer be upcasted in parents not accepting `<span>` elements. +* [#8663](http://dev.ckeditor.com/ticket/8663): Fixed [`element.renameNode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-renameNode) not clearing the [`element.getName()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-getName) cache. +* [#11574](http://dev.ckeditor.com/ticket/11574): Fixed: *Backspace* destroying the DOM structure if an inline editable is placed in a list item. +* [#11603](http://dev.ckeditor.com/ticket/11603): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) attaches to tables outside the editable. +* [#9205](http://dev.ckeditor.com/ticket/9205), [#7805](http://dev.ckeditor.com/ticket/7805), [#8216](http://dev.ckeditor.com/ticket/8216): Fixed: `{cke_protected_1}` appearing in data in various cases where HTML comments are placed next to `"` or `'`. +* [#11635](http://dev.ckeditor.com/ticket/11635): Fixed: Some attributes are not protected before the content is passed through the fix bin. +* [#11660](http://dev.ckeditor.com/ticket/11660): [IE] Fixed: Table content is lost when some extra markup is inside the table. +* [#11641](http://dev.ckeditor.com/ticket/11641): Fixed: Switching between modes in the classic editor removes content styles for the inline editor. +* [#11568](http://dev.ckeditor.com/ticket/11568): Fixed: [Styles](http://ckeditor.com/addon/stylescombo) drop-down list is not enabled on selection change. + +## CKEditor 4.3.3 + +Fixed Issues: + +* [#11500](http://dev.ckeditor.com/ticket/11500): [Webkit/Blink] Fixed: Selection lost when setting data in another inline editor. Additionally, [`selection.removeAllRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-removeAllRanges) is now scoped to selection's [root](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-property-root). +* [#11104](http://dev.ckeditor.com/ticket/11104): [IE] Fixed: Various issues with scrolling and selection when focusing widgets. +* [#11487](http://dev.ckeditor.com/ticket/11487): Moving mouse over the [Enhanced Image](http://ckeditor.com/addon/image2) widget will no longer change the value returned by the [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method. +* [#8673](http://dev.ckeditor.com/ticket/8673): [WebKit] Fixed: Cannot select and remove the [Page Break](http://ckeditor.com/addon/pagebreak). +* [#11413](http://dev.ckeditor.com/ticket/11413): Fixed: Incorrect [`editor.execCommand()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand) behavior. +* [#11438](http://dev.ckeditor.com/ticket/11438): Splitting table cells vertically is no longer changing table structure. +* [#8899](http://dev.ckeditor.com/ticket/8899): Fixed: Links in the [About CKEditor](http://ckeditor.com/addon/about) dialog window now open in a new browser window or tab. +* [#11490](http://dev.ckeditor.com/ticket/11490): Fixed: [Menu button](http://ckeditor.com/addon/menubutton) panel not showing in the source mode. +* [#11417](http://dev.ckeditor.com/ticket/11417): The [`widget.doubleclick`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-event-doubleclick) event is not canceled anymore after editing was triggered. +* [#11253](http://dev.ckeditor.com/ticket/11253): [IE] Fixed: Clipped upload button in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. +* [#11359](http://dev.ckeditor.com/ticket/11359): Standardized the way anchors are discovered by the [Link](http://ckeditor.com/addon/link) plugin. +* [#11058](http://dev.ckeditor.com/ticket/11058): [IE8] Fixed: Error when deleting a table row. +* [#11508](http://dev.ckeditor.com/ticket/11508): Fixed: [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor) discovering protected attributes within other attributes' values. +* [#11533](http://dev.ckeditor.com/ticket/11533): Widgets: Avoid recurring upcasts if the DOM structure was modified during an upcast. +* [#11400](http://dev.ckeditor.com/ticket/11400): Fixed: The [`domObject.removeAllListeners()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.domObject-method-removeAllListeners) method does not remove custom listeners completely. +* [#11493](http://dev.ckeditor.com/ticket/11493): Fixed: The [`selection.getRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-getRanges) method does not override cached ranges when used with the `onlyEditables` argument. +* [#11390](http://dev.ckeditor.com/ticket/11390): [IE] All [XML](http://ckeditor.com/addon/xml) plugin [methods](http://docs.ckeditor.com/#!/api/CKEDITOR.xml) now work in IE10+. +* [#11542](http://dev.ckeditor.com/ticket/11542): [IE11] Fixed: Blurry toolbar icons when Right-to-Left UI language is set. +* [#11504](http://dev.ckeditor.com/ticket/11504): Fixed: When [`config.fullPage`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fullPage) is set to `true`, entities are not encoded in editor output. +* [#11004](http://dev.ckeditor.com/ticket/11004): Integrated [Enhanced Image](http://ckeditor.com/addon/image2) dialog window with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). +* [#11439](http://dev.ckeditor.com/ticket/11439): Fixed: Properties get cloned in the Cell Properties dialog window if multiple cells are selected. + +## CKEditor 4.3.2 + +Fixed Issues: + +* [#11331](http://dev.ckeditor.com/ticket/11331): A menu button will have a changed label when selected instead of using the `aria-pressed` attribute. +* [#11177](http://dev.ckeditor.com/ticket/11177): Widget drag handler improvements: + * [#11176](http://dev.ckeditor.com/ticket/11176): Fixed: Initial position is not updated when the widget data object is empty. + * [#11001](http://dev.ckeditor.com/ticket/11001): Fixed: Multiple synchronous layout recalculations are caused by initial drag handler positioning causing performance issues. + * [#11161](http://dev.ckeditor.com/ticket/11161): Fixed: Drag handler is not repositioned in various situations. + * [#11281](http://dev.ckeditor.com/ticket/11281): Fixed: Drag handler and mask are duplicated after widget reinitialization. +* [#11207](http://dev.ckeditor.com/ticket/11207): [Firefox] Fixed: Misplaced [Enhanced Image](http://ckeditor.com/addon/image2) resizer in the inline editor. +* [#11102](http://dev.ckeditor.com/ticket/11102): `CKEDITOR.template` improvements: + * [#11102](http://dev.ckeditor.com/ticket/11102): Added newline character support. + * [#11216](http://dev.ckeditor.com/ticket/11216): Added "\\'" substring support. +* [#11121](http://dev.ckeditor.com/ticket/11121): [Firefox] Fixed: High Contrast mode is enabled when the editor is loaded in a hidden iframe. +* [#11350](http://dev.ckeditor.com/ticket/11350): The default value of [`config.contentsCss`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-contentsCss) is affected by [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl). +* [#11097](http://dev.ckeditor.com/ticket/11097): Improved the [Autogrow](http://ckeditor.com/addon/autogrow) plugin performance when dealing with very big tables. +* [#11290](http://dev.ckeditor.com/ticket/11290): Removed redundant code in the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin. +* [#11133](http://dev.ckeditor.com/ticket/11133): [Page Break](http://ckeditor.com/addon/pagebreak) becomes editable if pasted. +* [#11126](http://dev.ckeditor.com/ticket/11126): Fixed: Native Undo executed once the bottom of the snapshot stack is reached. +* [#11131](http://dev.ckeditor.com/ticket/11131): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Error thrown when switching to source mode if the selection was in widget's nested editable. +* [#11139](http://dev.ckeditor.com/ticket/11139): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Elements Path is not cleared after switching to source mode. +* [#10778](http://dev.ckeditor.com/ticket/10778): Fixed a bug with range enlargement. The range no longer expands to visible whitespace. +* [#11146](http://dev.ckeditor.com/ticket/11146): [IE] Fixed: Preview window switches Internet Explorer to Quirks Mode. +* [#10762](http://dev.ckeditor.com/ticket/10762): [IE] Fixed: JavaScript code displayed in preview window's URL bar. +* [#11186](http://dev.ckeditor.com/ticket/11186): Introduced the [`widgets.repository.addUpcastCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-addUpcastCallback) method that allows to block upcasting given element to a widget. +* [#11307](http://dev.ckeditor.com/ticket/11307): Fixed: Paste as Plain Text conflict with the [MooTools](http://mootools.net) library. +* [#11140](http://dev.ckeditor.com/ticket/11140): [IE11] Fixed: Anchors are not draggable. +* [#11379](http://dev.ckeditor.com/ticket/11379): Changed default contents `line-height` to unitless values to avoid huge text overlapping (like in [#9696](http://dev.ckeditor.com/ticket/9696)). +* [#10787](http://dev.ckeditor.com/ticket/10787): [Firefox] Fixed: Broken replacement of text while pasting into `div`-based editor. +* [#10884](http://dev.ckeditor.com/ticket/10884): Widgets integration with the [Show Blocks](http://ckeditor.com/addon/showblocks) plugin. +* [#11021](http://dev.ckeditor.com/ticket/11021): Fixed: An error thrown when selecting entire editable contents while fake selection is on. +* [#11086](http://dev.ckeditor.com/ticket/11086): [IE8] Re-enable inline widgets drag&drop in Internet Explorer 8. +* [#11372](http://dev.ckeditor.com/ticket/11372): Widgets: Special characters encoded twice in nested editables. +* [#10068](http://dev.ckeditor.com/ticket/10068): Fixed: Support for protocol-relative URLs. +* [#11283](http://dev.ckeditor.com/ticket/11283): [Enhanced Image](http://ckeditor.com/addon/image2): A `<div>` element with `text-align: center` and an image inside is not recognised correctly. +* [#11196](http://dev.ckeditor.com/ticket/11196): [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp): Allowed additional keyboard button labels to be translated in the dialog window. + +## CKEditor 4.3.1 + +**Important Notes:** + +* To match the naming convention, the `language` button is now `Language` ([#11201](http://dev.ckeditor.com/ticket/11201)). +* [Enhanced Image](http://ckeditor.com/addon/image2) button, context menu, command, and icon names match those of the [Image](http://ckeditor.com/addon/image) plugin ([#11222](http://dev.ckeditor.com/ticket/11222)). + +Fixed Issues: + +* [#11244](http://dev.ckeditor.com/ticket/11244): Changed: The [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method now fires the [`widget.repository.checkWidgets`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-event-checkWidgets) event, so from CKEditor 4.3.1 it is preferred to use the method rather than fire the event. +* [#11171](http://dev.ckeditor.com/ticket/11171): Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) and [`editor.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText) methods do not call the [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method. +* [#11085](http://dev.ckeditor.com/ticket/11085): [IE8] Replaced preview generated by the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget with a placeholder. +* [#11044](http://dev.ckeditor.com/ticket/11044): Enhanced WAI-ARIA support for the [Language](http://ckeditor.com/addon/language) plugin drop-down menu. +* [#11075](http://dev.ckeditor.com/ticket/11075): With drop-down menu button focused, pressing the *Down Arrow* key will now open the menu and focus its first option. +* [#11165](http://dev.ckeditor.com/ticket/11165): Fixed: The [File Browser](http://ckeditor.com/addon/filebrowser) plugin cannot be removed from the editor. +* [#11159](http://dev.ckeditor.com/ticket/11159): [IE9-10] [Enhanced Image](http://ckeditor.com/addon/image2): Fixed buggy discovery of image dimensions. +* [#11101](http://dev.ckeditor.com/ticket/11101): Drop-down lists no longer break when given double quotes. +* [#11077](http://dev.ckeditor.com/ticket/11077): [Enhanced Image](http://ckeditor.com/addon/image2): Empty undo step recorded when resizing the image. +* [#10853](http://dev.ckeditor.com/ticket/10853): [Enhanced Image](http://ckeditor.com/addon/image2): Widget has paragraph wrapper when de-captioning unaligned image. +* [#11198](http://dev.ckeditor.com/ticket/11198): Widgets: Drag handler is not fully visible when an inline widget is in a heading. +* [#11132](http://dev.ckeditor.com/ticket/11132): [Firefox] Fixed: Caret is lost after drag and drop of an inline widget. +* [#11182](http://dev.ckeditor.com/ticket/11182): [IE10-11] Fixed: Editor crashes (IE11) or works with minor issues (IE10) if a page is loaded in Quirks Mode. See [`env.quirks`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-quirks) for more details. +* [#11204](http://dev.ckeditor.com/ticket/11204): Added `figure` and `figcaption` styles to the `contents.css` file so [Enhanced Image](http://ckeditor.com/addon/image2) looks nicer. +* [#11202](http://dev.ckeditor.com/ticket/11202): Fixed: No newline in [BBCode](http://ckeditor.com/addon/bbcode) mode. +* [#10890](http://dev.ckeditor.com/ticket/10890): Fixed: Error thrown when pressing the *Delete* key in a list item. +* [#10055](http://dev.ckeditor.com/ticket/10055): [IE8-10] Fixed: *Delete* pressed on a selected image causes the browser to go back. +* [#11183](http://dev.ckeditor.com/ticket/11183): Fixed: Inserting a horizontal rule or a table in multiple row selection causes a browser crash. Additionally, the [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) method does not insert the element into every range of a selection any more. +* [#11042](http://dev.ckeditor.com/ticket/11042): Fixed: Selection made on an element containing a non-editable element was not auto faked. +* [#11125](http://dev.ckeditor.com/ticket/11125): Fixed: Keyboard navigation through menu and drop-down items will now cycle. +* [#11011](http://dev.ckeditor.com/ticket/11011): Fixed: The [`editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) method removes attributes from nested elements. +* [#11179](http://dev.ckeditor.com/ticket/11179): Fixed: [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy) does not cleanup content generated by the [Table Resize](http://ckeditor.com/addon/tableresize) plugin for inline editors. +* [#11237](http://dev.ckeditor.com/ticket/11237): Fixed: Table border attribute value is deleted when pasting content from Microsoft Word. +* [#11250](http://dev.ckeditor.com/ticket/11250): Fixed: HTML entities inside the `<textarea>` element are not encoded. +* [#11260](http://dev.ckeditor.com/ticket/11260): Fixed: Initially disabled buttons are not read by JAWS as disabled. +* [#11200](http://dev.ckeditor.com/ticket/11200): Added [Clipboard](http://ckeditor.com/addon/clipboard) plugin as a dependency for [Widget](http://ckeditor.com/addon/widget) to fix drag and drop. + +## CKEditor 4.3 + +New Features: + +* [#10612](http://dev.ckeditor.com/ticket/10612): Internet Explorer 11 support. +* [#10869](http://dev.ckeditor.com/ticket/10869): Widgets: Added better integration with the [Elements Path](http://ckeditor.com/addon/elementspath) plugin. +* [#10886](http://dev.ckeditor.com/ticket/10886): Widgets: Added tooltip to the drag handle. +* [#10933](http://dev.ckeditor.com/ticket/10933): Widgets: Introduced drag and drop of block widgets with the [Line Utilities](http://ckeditor.com/addon/lineutils) plugin. +* [#10936](http://dev.ckeditor.com/ticket/10936): Widget System changes for easier integration with other dialog systems. +* [#10895](http://dev.ckeditor.com/ticket/10895): [Enhanced Image](http://ckeditor.com/addon/image2): Added file browser integration. +* [#11002](http://dev.ckeditor.com/ticket/11002): Added the [`draggable`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-draggable) option to disable drag and drop support for widgets. +* [#10937](http://dev.ckeditor.com/ticket/10937): [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget improvements: + * loading indicator ([#10948](http://dev.ckeditor.com/ticket/10948)), + * applying paragraph changes (like font color change) to iframe ([#10841](http://dev.ckeditor.com/ticket/10841)), + * Firefox and IE9 clipboard fixes ([#10857](http://dev.ckeditor.com/ticket/10857)), + * fixing same origin policy issue ([#10840](http://dev.ckeditor.com/ticket/10840)), + * fixing undo bugs ([#10842](http://dev.ckeditor.com/ticket/10842), [#10930](http://dev.ckeditor.com/ticket/10930)), + * fixing other minor bugs. +* [#10862](http://dev.ckeditor.com/ticket/10862): [Placeholder](http://ckeditor.com/addon/placeholder) plugin was rewritten as a widget. +* [#10822](http://dev.ckeditor.com/ticket/10822): Added styles system integration with non-editable elements (for example widgets) and their nested editables. Styles cannot change non-editable content and are applied in nested editable only if allowed by its type and content filter. +* [#10856](http://dev.ckeditor.com/ticket/10856): Menu buttons will now toggle the visibility of their panels when clicked multiple times. [Language](http://ckeditor.com/addon/language) plugin fixes: Added active language highlighting, added an option to remove the language. +* [#10028](http://dev.ckeditor.com/ticket/10028): New [`config.dialog_noConfirmCancel`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-dialog_noConfirmCancel) configuration option that eliminates the need to confirm closing of a dialog window when the user changed any of its fields. +* [#10848](http://dev.ckeditor.com/ticket/10848): Integrate remaining plugins ([Styles](http://ckeditor.com/addon/stylescombo), [Format](http://ckeditor.com/addon/format), [Font](http://ckeditor.com/addon/font), [Color Button](http://ckeditor.com/addon/colorbutton), [Language](http://ckeditor.com/addon/language) and [Indent](http://ckeditor.com/addon/indent)) with [active filter](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter). +* [#10855](http://dev.ckeditor.com/ticket/10855): Change the extension of emoticons in the [BBCode](http://ckeditor.com/addon/bbcode) sample from GIF to PNG. + +Fixed Issues: + +* [#10831](http://dev.ckeditor.com/ticket/10831): [Enhanced Image](http://ckeditor.com/addon/image2): Merged `image2inline` and `image2block` into one `image2` widget. +* [#10835](http://dev.ckeditor.com/ticket/10835): [Enhanced Image](http://ckeditor.com/addon/image2): Improved visibility of the resize handle. +* [#10836](http://dev.ckeditor.com/ticket/10836): [Enhanced Image](http://ckeditor.com/addon/image2): Preserve custom mouse cursor while resizing the image. +* [#10939](http://dev.ckeditor.com/ticket/10939): [Firefox] [Enhanced Image](http://ckeditor.com/addon/image2): hovering the image causes it to change. +* [#10866](http://dev.ckeditor.com/ticket/10866): Fixed: Broken *Tab* key navigation in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. +* [#10833](http://dev.ckeditor.com/ticket/10833): Fixed: *Lock ratio* option should be on by default in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window. +* [#10881](http://dev.ckeditor.com/ticket/10881): Various improvements to *Enter* key behavior in nested editables. +* [#10879](http://dev.ckeditor.com/ticket/10879): [Remove Format](http://ckeditor.com/addon/removeformat) should not leak from a nested editable. +* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [WebSpellChecker](http://ckeditor.com/addon/wsc) fails to apply changes if a nested editable was focused. +* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [SCAYT](http://ckeditor.com/addon/wsc) blocks typing in nested editables. +* [#11079](http://dev.ckeditor.com/ticket/11079): Add button icons to the [Placeholder](http://ckeditor.com/addon/placeholder) sample. +* [#10870](http://dev.ckeditor.com/ticket/10870): The `paste` command is no longer being disabled when the clipboard is empty. +* [#10854](http://dev.ckeditor.com/ticket/10854): Fixed: Firefox prepends `<br>` to `<body>`, so it is stripped by the HTML data processor. +* [#10823](http://dev.ckeditor.com/ticket/10823): Fixed: [Link](http://ckeditor.com/addon/link) plugin does not work with non-editable content. +* [#10828](http://dev.ckeditor.com/ticket/10828): [Magic Line](http://ckeditor.com/addon/magicline) integration with the Widget System. +* [#10865](http://dev.ckeditor.com/ticket/10865): Improved hiding copybin, so copying widgets works smoothly. +* [#11066](http://dev.ckeditor.com/ticket/11066): Widget's private parts use CSS reset. +* [#11027](http://dev.ckeditor.com/ticket/11027): Fixed: Block commands break on widgets; added the [`contentDomInvalidated`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDomInvalidated) event. +* [#10430](http://dev.ckeditor.com/ticket/10430): Resolve dependence of the [Image](http://ckeditor.com/addon/image) plugin on the [Form Elements](http://ckeditor.com/addon/forms) plugin. +* [#10911](http://dev.ckeditor.com/ticket/10911): Fixed: Browser *Alt* hotkeys will no longer be blocked while a widget is focused. +* [#11082](http://dev.ckeditor.com/ticket/11082): Fixed: Selected widget is not copied or cut when using toolbar buttons or context menu. +* [#11083](http://dev.ckeditor.com/ticket/11083): Fixed list and div element application to block widgets. +* [#10887](http://dev.ckeditor.com/ticket/10887): Internet Explorer 8 compatibility issues related to the Widget System. +* [#11074](http://dev.ckeditor.com/ticket/11074): Temporarily disabled inline widget drag and drop, because of seriously buggy native `range#moveToPoint` method. +* [#11098](http://dev.ckeditor.com/ticket/11098): Fixed: Wrong selection position after undoing widget drag and drop. +* [#11110](http://dev.ckeditor.com/ticket/11110): Fixed: IFrame and Flash objects are being incorrectly pasted in certain conditions. +* [#11129](http://dev.ckeditor.com/ticket/11129): Page break is lost when loading data. +* [#11123](http://dev.ckeditor.com/ticket/11123): [Firefox] Widget is destroyed after being dragged outside of `<body>`. +* [#11124](http://dev.ckeditor.com/ticket/11124): Fixed the [Elements Path](http://ckeditor.com/addon/elementspath) in an editor using the [Div Editing Area](http://ckeditor.com/addon/divarea). + +## CKEditor 4.3 Beta + +New Features: + +* [#9764](http://dev.ckeditor.com/ticket/9764): Widget System. + * [Widget plugin](http://ckeditor.com/addon/widget) introducing the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget). + * New [`editor.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) and [`editor.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-shiftEnterMode) properties – normalized versions of [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) and [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). + * Dynamic editor settings. Starting from CKEditor 4.3 Beta, *Enter* mode values and [content filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) instances may be changed dynamically (for example when the caret was placed in an element in which editor features should be adjusted). When you are implementing a new editor feature, you should base its behavior on [dynamic](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) or [static](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) *Enter* mode values depending on whether this feature works in selection context or globally on editor content. + * Dynamic *Enter* mode values – [`editor.setActiveEnterMode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveEnterMode) method, [`editor.activeEnterModeChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeEnterModeChange) event, and two properties: [`editor.activeEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) and [`editor.activeShiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeShiftEnterMode). + * Dynamic content filter instances – [`editor.setActiveFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveFilter) method, [`editor.activeFilterChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeFilterChange) event, and [`editor.activeFilter`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter) property. + * "Fake" selection was introduced. It makes it possible to virtually select any element when the real selection remains hidden. See the [`selection.fake()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-fake) method. + * Default [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied to non-editable elements (elements with `contenteditable` attribute set to `false` and their descendants) anymore. To add a rule which will be applied to all elements you need to pass an additional argument to the [`filter.addRules()`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter-method-addRules) method. + * Dozens of new methods were introduced – most interesting ones: + * [`document.find()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-find), + * [`document.findOne()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-findOne), + * [`editable.insertElementIntoRange()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElementIntoRange), + * [`range.moveToClosestEditablePosition()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-moveToClosestEditablePosition), + * New methods for [`htmlParser.node`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.node) and [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element). +* [#10659](http://dev.ckeditor.com/ticket/10659): New [Enhanced Image](http://ckeditor.com/addon/image2) plugin that introduces a widget with integrated image captions, an option to center images, and dynamic "click and drag" resizing. +* [#10664](http://dev.ckeditor.com/ticket/10664): New [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin that introduces the MathJax widget. +* [#7987](https://dev.ckeditor.com/ticket/7987): New [Language](http://ckeditor.com/addon/language) plugin that implements Language toolbar button to support [WCAG 3.1.2 Language of Parts](http://www.w3.org/TR/UNDERSTANDING-WCAG20/meaning-other-lang-id.html). +* [#10708](http://dev.ckeditor.com/ticket/10708): New [smileys](http://ckeditor.com/addon/smiley). + +## CKEditor 4.2.3 + +Fixed Issues: + +* [#10994](http://dev.ckeditor.com/ticket/10994): Fixed: Loading external jQuery library when opening the [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) sample directly from file. +* [#10975](http://dev.ckeditor.com/ticket/10975): [IE] Fixed: Error thrown while opening the color palette. +* [#9929](http://dev.ckeditor.com/ticket/9929): [Blink/WebKit] Fixed: A non-breaking space is created once a character is deleted and a regular space is typed. +* [#10963](http://dev.ckeditor.com/ticket/10963): Fixed: JAWS issue with the keyboard shortcut for [Magic Line](http://ckeditor.com/addon/magicline). +* [#11096](http://dev.ckeditor.com/ticket/11096): Fixed: TypeError: Object has no method 'is'. + +## CKEditor 4.2.2 + +Fixed Issues: + +* [#9314](http://dev.ckeditor.com/ticket/9314): Fixed: Incorrect error message on closing a dialog window without saving changs. +* [#10308](http://dev.ckeditor.com/ticket/10308): [IE10] Fixed: Unspecified error when deleting a row. +* [#10945](http://dev.ckeditor.com/ticket/10945): [Chrome] Fixed: Clicking with a mouse inside the editor does not show the caret. +* [#10912](http://dev.ckeditor.com/ticket/10912): Prevent default action when content of a non-editable link is clicked. +* [#10913](http://dev.ckeditor.com/ticket/10913): Fixed [`CKEDITOR.plugins.addExternal()`](http://docs.ckeditor.com/#!/api/CKEDITOR.resourceManager-method-addExternal) not handling paths including file name specified. +* [#10666](http://dev.ckeditor.com/ticket/10666): Fixed [`CKEDITOR.tools.isArray()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-isArray) not working cross frame. +* [#10910](http://dev.ckeditor.com/ticket/10910): [IE9] Fixed JavaScript error thrown in Compatibility Mode when clicking and/or typing in the editing area. +* [#10868](http://dev.ckeditor.com/ticket/10868): [IE8] Prevent the browser from crashing when applying the Inline Quotation style. +* [#10915](http://dev.ckeditor.com/ticket/10915): Fixed: Invalid CSS filter in the Kama skin. +* [#10914](http://dev.ckeditor.com/ticket/10914): Plugins [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock) are now included in the build configuration. +* [#10812](http://dev.ckeditor.com/ticket/10812): Fixed [`range.createBookmark2()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-createBookmark2) incorrectly normalizing offsets. This bug was causing many issues: [#10850](http://dev.ckeditor.com/ticket/10850), [#10842](http://dev.ckeditor.com/ticket/10842). +* [#10951](http://dev.ckeditor.com/ticket/10951): Reviewed and optimized focus handling on panels (combo, menu buttons, color buttons, and context menu) to enhance accessibility. Fixed [#10705](http://dev.ckeditor.com/ticket/10705), [#10706](http://dev.ckeditor.com/ticket/10706) and [#10707](http://dev.ckeditor.com/ticket/10707). +* [#10704](http://dev.ckeditor.com/ticket/10704): Fixed a JAWS issue with the Select Color dialog window title not being announced. +* [#10753](http://dev.ckeditor.com/ticket/10753): The floating toolbar in inline instances now has a dedicated accessibility label. + +## CKEditor 4.2.1 + +Fixed Issues: + +* [#10301](http://dev.ckeditor.com/ticket/10301): [IE9-10] Undo fails after 3+ consecutive paste actions with a JavaScript error. +* [#10689](http://dev.ckeditor.com/ticket/10689): Save toolbar button saves only the first editor instance. +* [#10368](http://dev.ckeditor.com/ticket/10368): Move language reading direction definition (`dir`) from main language file to core. +* [#9330](http://dev.ckeditor.com/ticket/9330): Fixed pasting anchors from MS Word. +* [#8103](http://dev.ckeditor.com/ticket/8103): Fixed pasting nested lists from MS Word. +* [#9958](http://dev.ckeditor.com/ticket/9958): [IE9] Pressing the "OK" button will trigger the `onbeforeunload` event in the popup dialog. +* [#10662](http://dev.ckeditor.com/ticket/10662): Fixed styles from the Styles drop-down list not registering to the ACF in case when the [Shared Spaces plugin](http://ckeditor.com/addon/sharedspace) is used. +* [#9654](http://dev.ckeditor.com/ticket/9654): Problems with Internet Explorer 10 Quirks Mode. +* [#9816](http://dev.ckeditor.com/ticket/9816): Floating toolbar does not reposition vertically in several cases. +* [#10646](http://dev.ckeditor.com/ticket/10646): Removing a selected sublist or nested table with *Backspace/Delete* removes the parent element. +* [#10623](http://dev.ckeditor.com/ticket/10623): [WebKit] Page is scrolled when opening a drop-down list. +* [#10004](http://dev.ckeditor.com/ticket/10004): [ChromeVox] Button names are not announced. +* [#10731](http://dev.ckeditor.com/ticket/10731): [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin breaks cloning of editor configuration. +* It is now possible to set per instance [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin configuration instead of setting the configuration globally. + +## CKEditor 4.2 + +**Important Notes:** + +* Dropped compatibility support for Internet Explorer 7 and Firefox 3.6. + +* Both the Basic and the Standard distribution packages will not contain the new [Indent Block](http://ckeditor.com/addon/indentblock) plugin. Because of this the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) might remove block indentations from existing contents. If you want to prevent this, either [add an appropriate ACF rule to your filter](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) or create a custom build based on the Basic/Standard package and add the Indent Block plugin in [CKBuilder](http://ckeditor.com/builder). + +New Features: + +* [#10027](http://dev.ckeditor.com/ticket/10027): Separated list and block indentation into two plugins: [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock). +* [#8244](http://dev.ckeditor.com/ticket/8244): Use *(Shift+)Tab* to indent and outdent lists. +* [#10281](http://dev.ckeditor.com/ticket/10281): The [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) is now available. Several jQuery-related issues fixed: [#8261](http://dev.ckeditor.com/ticket/8261), [#9077](http://dev.ckeditor.com/ticket/9077), [#8710](http://dev.ckeditor.com/ticket/8710), [#8530](http://dev.ckeditor.com/ticket/8530), [#9019](http://dev.ckeditor.com/ticket/9019), [#6181](http://dev.ckeditor.com/ticket/6181), [#7876](http://dev.ckeditor.com/ticket/7876), [#6906](http://dev.ckeditor.com/ticket/6906). +* [#10042](http://dev.ckeditor.com/ticket/10042): Introduced [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title) setting to change the human-readable title of the editor. +* [#9794](http://dev.ckeditor.com/ticket/9794): Added [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event. +* [#9923](http://dev.ckeditor.com/ticket/9923): HiDPI support in the editor UI. HiDPI icons for [Moono skin](http://ckeditor.com/addon/moono) added. +* [#8031](http://dev.ckeditor.com/ticket/8031): Handle `required` attributes on `<textarea>` elements — introduced [`editor.required`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-required) event. +* [#10280](http://dev.ckeditor.com/ticket/10280): Ability to replace `<textarea>` elements with the inline editor. + +Fixed Issues: + +* [#10599](http://dev.ckeditor.com/ticket/10599): [Indent](http://ckeditor.com/addon/indent) plugin is no longer required by the [List](http://ckeditor.com/addon/list) plugin. +* [#10370](http://dev.ckeditor.com/ticket/10370): Inconsistency in data events between framed and inline editors. +* [#10438](http://dev.ckeditor.com/ticket/10438): [FF, IE] No selection is done on an editable element on executing [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData). + +## CKEditor 4.1.3 + +New Features: + +* Added new translation: Indonesian. + +Fixed Issues: + +* [#10644](http://dev.ckeditor.com/ticket/10644): Fixed a critical bug when pasting plain text in Blink-based browsers. +* [#5189](http://dev.ckeditor.com/ticket/5189): [Find/Replace](http://ckeditor.com/addon/find) dialog window: rename "Cancel" button to "Close". +* [#10562](http://dev.ckeditor.com/ticket/10562): [Housekeeping] Unified CSS gradient filter formats in the [Moono](http://ckeditor.com/addon/moono) skin. +* [#10537](http://dev.ckeditor.com/ticket/10537): Advanced Content Filter should register a default rule for [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode). +* [#10610](http://dev.ckeditor.com/ticket/10610): [`CKEDITOR.dialog.addIframe()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog-static-method-addIframe) incorrectly sets the iframe size in dialog windows. + +## CKEditor 4.1.2 + +New Features: + +* Added new translation: Sinhala. + +Fixed Issues: + +* [#10339](http://dev.ckeditor.com/ticket/10339): Fixed: Error thrown when inserted data was totally stripped out after filtering and processing. +* [#10298](http://dev.ckeditor.com/ticket/10298): Fixed: Data processor breaks attributes containing protected parts. +* [#10367](http://dev.ckeditor.com/ticket/10367): Fixed: [`editable.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertText) loses characters when `RegExp` replace controls are being inserted. +* [#10165](http://dev.ckeditor.com/ticket/10165): [IE] Access denied error when `document.domain` has been altered. +* [#9761](http://dev.ckeditor.com/ticket/9761): Update the *Backspace* key state in [`keystrokeHandler.blockedKeystrokes`](http://docs.ckeditor.com/#!/api/CKEDITOR.keystrokeHandler-property-blockedKeystrokes) when calling [`editor.setReadOnly()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly). +* [#6504](http://dev.ckeditor.com/ticket/6504): Fixed: Race condition while loading several [`config.customConfig`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-customConfig) files. +* [#10146](http://dev.ckeditor.com/ticket/10146): [Firefox] Empty lines are being removed while [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) is [`CKEDITOR.ENTER_BR`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-ENTER_BR). +* [#10360](http://dev.ckeditor.com/ticket/10360): Fixed: ARIA `role="application"` should not be used for dialog windows. +* [#10361](http://dev.ckeditor.com/ticket/10361): Fixed: ARIA `role="application"` should not be used for floating panels. +* [#10510](http://dev.ckeditor.com/ticket/10510): Introduced unique voice labels to differentiate between different editor instances. +* [#9945](http://dev.ckeditor.com/ticket/9945): [iOS] Scrolling not possible on iPad. +* [#10389](http://dev.ckeditor.com/ticket/10389): Fixed: Invalid HTML in the "Text and Table" template. +* [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin user interface was changed to match CKEditor 4 style. + +## CKEditor 4.1.1 + +New Features: + +* Added new translation: Albanian. + +Fixed Issues: + +* [#10172](http://dev.ckeditor.com/ticket/10172): Pressing *Delete* or *Backspace* in an empty table cell moves the cursor to the next/previous cell. +* [#10219](http://dev.ckeditor.com/ticket/10219): Error thrown when destroying an editor instance in parallel with a `mouseup` event. +* [#10265](http://dev.ckeditor.com/ticket/10265): Wrong loop type in the [File Browser](http://ckeditor.com/addon/filebrowser) plugin. +* [#10249](http://dev.ckeditor.com/ticket/10249): Wrong undo/redo states at start. +* [#10268](http://dev.ckeditor.com/ticket/10268): [Show Blocks](http://ckeditor.com/addon/showblocks) does not recover after switching to Source view. +* [#9995](http://dev.ckeditor.com/ticket/9995): HTML code in the `<textarea>` should not be modified by the [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor). +* [#10320](http://dev.ckeditor.com/ticket/10320): [Justify](http://ckeditor.com/addon/justify) plugin should add elements to Advanced Content Filter based on current [Enter mode](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode). +* [#10260](http://dev.ckeditor.com/ticket/10260): Fixed: Advanced Content Filter blocks [`tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces). Unified `data-cke-*` attributes filtering. +* [#10315](http://dev.ckeditor.com/ticket/10315): [WebKit] [Undo manager](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager) should not record snapshots after a filling character was added/removed. +* [#10291](http://dev.ckeditor.com/ticket/10291): [WebKit] Space after a filling character should be secured. +* [#10330](http://dev.ckeditor.com/ticket/10330): [WebKit] The filling character is not removed on `keydown` in specific cases. +* [#10285](http://dev.ckeditor.com/ticket/10285): Fixed: Styled text pasted from MS Word causes an infinite loop. +* [#10131](http://dev.ckeditor.com/ticket/10131): Fixed: [`undoManager.update()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-method-update) does not refresh the command state. +* [#10337](http://dev.ckeditor.com/ticket/10337): Fixed: Unable to remove `<s>` using [Remove Format](http://ckeditor.com/addon/removeformat). + +## CKEditor 4.1 + +Fixed Issues: + +* [#10192](http://dev.ckeditor.com/ticket/10192): Closing lists with the *Enter* key does not work with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) in several cases. +* [#10191](http://dev.ckeditor.com/ticket/10191): Fixed allowed content rules unification, so the [`filter.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-property-allowedContent) property always contains rules in the same format. +* [#10224](http://dev.ckeditor.com/ticket/10224): Advanced Content Filter does not remove non-empty `<a>` elements anymore. +* Minor issues in plugin integration with Advanced Content Filter: + * [#10166](http://dev.ckeditor.com/ticket/10166): Added transformation from the `align` attribute to `float` style to preserve backward compatibility after the introduction of Advanced Content Filter. + * [#10195](http://dev.ckeditor.com/ticket/10195): [Image](http://ckeditor.com/addon/image) plugin no longer registers rules for links to Advanced Content Filter. + * [#10213](http://dev.ckeditor.com/ticket/10213): [Justify](http://ckeditor.com/addon/justify) plugin is now correctly registering rules to Advanced Content Filter when [`config.justifyClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-justifyClasses) is defined. + +## CKEditor 4.1 RC + +New Features: + +* [#9829](http://dev.ckeditor.com/ticket/9829): Advanced Content Filter - data and features activation based on editor configuration. + + Brand new data filtering system that works in 2 modes: + + * Based on loaded features (toolbar items, plugins) - the data will be filtered according to what the editor in its + current configuration can handle. + * Based on [`config.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent) rules - the data + will be filtered and the editor features (toolbar items, commands, keystrokes) will be enabled if they are allowed. + + See the `datafiltering.html` sample, [guides](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) and [`CKEDITOR.filter` API documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.filter). +* [#9387](http://dev.ckeditor.com/ticket/9387): Reintroduced [Shared Spaces](http://ckeditor.com/addon/sharedspace) - the ability to display toolbar and bottom editor space in selected locations and to share them by different editor instances. +* [#9907](http://dev.ckeditor.com/ticket/9907): Added the [`contentPreview`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-contentPreview) event for preview data manipulation. +* [#9713](http://dev.ckeditor.com/ticket/9713): Introduced the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin that brings raw HTML editing for inline editor instances. +* Included in [#9829](http://dev.ckeditor.com/ticket/9829): Introduced new events, [`toHtml`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toHtml) and [`toDataFormat`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toDataFormat), allowing for better integration with data processing. +* [#9981](http://dev.ckeditor.com/ticket/9981): Added ability to filter [`htmlParser.fragment`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.fragment), [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element) etc. by many [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter)s before writing structure to an HTML string. +* Included in [#10103](http://dev.ckeditor.com/ticket/10103): + * Introduced the [`editor.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-status) property to make it easier to check the current status of the editor. + * Default [`command`](http://docs.ckeditor.com/#!/api/CKEDITOR.command) state is now [`CKEDITOR.TRISTATE_DISABLE`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-TRISTATE_DISABLED). It will be activated on [`editor.instanceReady`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-instanceReady) or immediately after being added if the editor is already initialized. +* [#9796](http://dev.ckeditor.com/ticket/9796): Introduced `<s>` as a default tag for strikethrough, which replaces obsolete `<strike>` in HTML5. + +## CKEditor 4.0.3 + +Fixed Issues: + +* [#10196](http://dev.ckeditor.com/ticket/10196): Fixed context menus not opening with keyboard shortcuts when [Autogrow](http://ckeditor.com/addon/autogrow) is enabled. +* [#10212](http://dev.ckeditor.com/ticket/10212): [IE7-10] Undo command throws errors after multiple switches between Source and WYSIWYG view. +* [#10219](http://dev.ckeditor.com/ticket/10219): [Inline editor] Error thrown after calling [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy). + +## CKEditor 4.0.2 + +Fixed Issues: + +* [#9779](http://dev.ckeditor.com/ticket/9779): Fixed overriding [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl) with `CKEDITOR_GETURL`. +* [#9772](http://dev.ckeditor.com/ticket/9772): Custom buttons in the dialog window footer have different look and size ([Moono](http://ckeditor.com/addon/moono), [Kama](http://ckeditor.com/addon/kama) skins). +* [#9029](http://dev.ckeditor.com/ticket/9029): Custom styles added with the [`stylesSet.add()`](http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet-method-add) are displayed in the wrong order. +* [#9887](http://dev.ckeditor.com/ticket/9887): Disable [Magic Line](http://ckeditor.com/addon/magicline) when [`editor.readOnly`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) is set. +* [#9882](http://dev.ckeditor.com/ticket/9882): Fixed empty document title on [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) if set via the Document Properties dialog window. +* [#9773](http://dev.ckeditor.com/ticket/9773): Fixed rendering problems with selection fields in the Kama skin. +* [#9851](http://dev.ckeditor.com/ticket/9851): The [`selectionChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-selectionChange) event is not fired when mouse selection ended outside editable. +* [#9903](http://dev.ckeditor.com/ticket/9903): [Inline editor] Bad positioning of floating space with page horizontal scroll. +* [#9872](http://dev.ckeditor.com/ticket/9872): [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) returns `true` when called onload. Removed the obsolete `editor.mayBeDirty` flag. +* [#9893](http://dev.ckeditor.com/ticket/9893): [IE] Fixed broken toolbar when editing mixed direction content in Quirks mode. +* [#9845](http://dev.ckeditor.com/ticket/9845): Fixed TAB navigation in the [Link](http://ckeditor.com/addon/link) dialog window when the Anchor option is used and no anchors are available. +* [#9883](http://dev.ckeditor.com/ticket/9883): Maximizing was making the entire page editable with [divarea](http://ckeditor.com/addon/divarea)-based editors. +* [#9940](http://dev.ckeditor.com/ticket/9940): [Firefox] Navigating back to a page with the editor was making the entire page editable. +* [#9966](http://dev.ckeditor.com/ticket/9966): Fixed: Unable to type square brackets with French keyboard layout. Changed [Magic Line](http://ckeditor.com/addon/magicline) keystrokes. +* [#9507](http://dev.ckeditor.com/ticket/9507): [Firefox] Selection is moved before editable position when the editor is focused for the first time. +* [#9947](http://dev.ckeditor.com/ticket/9947): [WebKit] Editor overflows parent container in some edge cases. +* [#10105](http://dev.ckeditor.com/ticket/10105): Fixed: Broken [sourcearea](http://ckeditor.com/addon/sourcearea) view when an RTL language is set. +* [#10123](http://dev.ckeditor.com/ticket/10123): [WebKit] Fixed: Several dialog windows have broken layout since the latest WebKit release. +* [#10152](http://dev.ckeditor.com/ticket/10152): Fixed: Invalid ARIA property used on menu items. + +## CKEditor 4.0.1.1 + +Fixed Issues: + +* Security update: Added protection against XSS attack and possible path disclosure in the PHP sample. + +## CKEditor 4.0.1 + +Fixed Issues: + +* [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in the new [Moono skin](http://ckeditor.com/addon/moono). +* Accessibility issues (mainly in inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844). +* [Magic Line](http://ckeditor.com/addon/magicline) plugin: + * [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic Line. + * [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic Line support for forms. + * [#9573](http://dev.ckeditor.com/ticket/9573): Magic Line does not disappear on `mouseout` in a specific case. +* [#9754](http://dev.ckeditor.com/ticket/9754): [WebKit] Cutting & pasting simple unformatted text generates an inline wrapper in WebKit browsers. +* [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS Word. +* [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging. +* Context menu: + * [#9712](http://dev.ckeditor.com/ticket/9712): Opening the context menu destroys editor focus. + * [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over the floating toolbar. + * [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates a JavaScript error in inline mode when the editor is attached to a header element. +* [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing the window. +* [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div-based editor puts the editing area under the bottom UI space. +* [#9528](http://dev.ckeditor.com/ticket/9528): Host page `box-sizing` style should not influence the editor UI elements. +* [#9503](http://dev.ckeditor.com/ticket/9503): [Form Elements](http://ckeditor.com/addon/forms) plugin adds context menu listeners only on supported input types. Added support for `tel`, `email`, `search` and `url` input types. +* [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in a narrow window. +* [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog window does not populate width correctly. +* [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in a nested table removes the outer table cell. +* [#9815](http://dev.ckeditor.com/ticket/9815): Cannot edit dialog window fields in an editor initialized in the jQuery UI modal dialog. +* [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialog windows do not show completely in a small window. +* [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a `<div>` element stay permanently even after the user exits editing the `<div>`. +* [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing the Format drop-down list by clicking its button. +* [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when the `border-width` style is specified. +* [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read-only mode. +* [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected images. +* [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `<pre>` elements. +* [#9709](http://dev.ckeditor.com/ticket/9709): [Paste from Word](http://ckeditor.com/addon/pastefromword) should not depend on configuration from other styles. +* [#9726](http://dev.ckeditor.com/ticket/9726): Removed [Color Dialog](http://ckeditor.com/addon/colordialog) plugin dependency from [Table Tools](http://ckeditor.com/addon/tabletools). +* [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly in the [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp) dialog window. +* [#9771](http://dev.ckeditor.com/ticket/9771): [WebKit & Opera] Fixed scrolling issues when pasting. +* [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] `onChange` is not fired for checkboxes in dialogs. +* [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When opening a toolbar menu for the first time and pressing the *Down Arrow* key, focus goes to the next toolbar button instead of the menu options. +* [#9847](http://dev.ckeditor.com/ticket/9847): [Elements Path](http://ckeditor.com/addon/elementspath) should not be initialized in the inline editor. +* [#9853](http://dev.ckeditor.com/ticket/9853): [`editor.addRemoveFormatFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addRemoveFormatFilter) is exposed before it really works. +* [#8893](http://dev.ckeditor.com/ticket/8893): Value of the [`pasteFromWordCleanupFile`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordCleanupFile) configuration option is now taken from the instance configuration. +* [#9693](http://dev.ckeditor.com/ticket/9693): Removed "Live Preview" checkbox from UI color picker. + + +## CKEditor 4.0 + +The first stable release of the new CKEditor 4 code line. + +The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever +possible. The list of relevant changes can be found in the [API Changes page of +the CKEditor 4 documentation][1]. + +[1]: http://docs.ckeditor.com/#!/guide/dev_api_changes "API Changes" diff --git a/sites/all/libraries/ckeditor/LICENSE.md b/sites/all/libraries/ckeditor/LICENSE.md new file mode 100644 index 0000000000..aad56b7e1e --- /dev/null +++ b/sites/all/libraries/ckeditor/LICENSE.md @@ -0,0 +1,1264 @@ +Software License Agreement +========================== + +CKEditor - The text editor for Internet - http://ckeditor.com +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your +choice: + + - GNU General Public License Version 2 or later (the "GPL") + http://www.gnu.org/licenses/gpl.html + (See Appendix A) + + - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + http://www.gnu.org/licenses/lgpl.html + (See Appendix B) + + - Mozilla Public License Version 1.1 or later (the "MPL") + http://www.mozilla.org/MPL/MPL-1.1.html + (See Appendix C) + +You are not required to, but if you want to explicitly declare the +license you have chosen to be bound to when using, reproducing, +modifying and distributing this software, just include a text file +titled "legal.txt" in your version of this software, indicating your +license choice. In any case, your choice will not restrict any +recipient of your version of this software to use, reproduce, modify +and distribute this software under any of the above licenses. + +Sources of Intellectual Property Included in CKEditor +----------------------------------------------------- + +Where not otherwise indicated, all CKEditor content is authored by +CKSource engineers and consists of CKSource-owned intellectual +property. In some specific instances, CKEditor will incorporate work +done by developers outside of CKSource with their express permission. + +Trademarks +---------- + +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand +and product names are trademarks, registered trademarks or service +marks of their respective holders. + +--- + +Appendix A: The GPL License +--------------------------- + +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software-to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + +GNU GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + + +Appendix B: The LGPL License +---------------------------- + +GNU LESSER GENERAL PUBLIC LICENSE +Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + +Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software-to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages-typically libraries-of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + +GNU LESSER GENERAL PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + +NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + +END OF TERMS AND CONDITIONS + + +Appendix C: The MPL License +--------------------------- + +MOZILLA PUBLIC LICENSE +Version 1.1 + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] diff --git a/sites/all/libraries/ckeditor/README.md b/sites/all/libraries/ckeditor/README.md new file mode 100644 index 0000000000..c5a55cd88f --- /dev/null +++ b/sites/all/libraries/ckeditor/README.md @@ -0,0 +1,39 @@ +CKEditor 4 +========== + +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +http://ckeditor.com - See LICENSE.md for license information. + +CKEditor is a text editor to be used inside web pages. It's not a replacement +for desktop text editors like Word or OpenOffice, but a component to be used as +part of web applications and websites. + +## Documentation + +The full editor documentation is available online at the following address: +http://docs.ckeditor.com + +## Installation + +Installing CKEditor is an easy task. Just follow these simple steps: + + 1. **Download** the latest version from the CKEditor website: + http://ckeditor.com. You should have already completed this step, but be + sure you have the very latest version. + 2. **Extract** (decompress) the downloaded file into the root of your website. + +**Note:** CKEditor is by default installed in the `ckeditor` folder. You can +place the files in whichever you want though. + +## Checking Your Installation + +The editor comes with a few sample pages that can be used to verify that +installation proceeded properly. Take a look at the `samples` directory. + +To test your installation, just call the following page at your website: + + http://<your site>/<CKEditor installation path>/samples/index.html + +For example: + + http://www.example.com/ckeditor/samples/index.html diff --git a/sites/all/libraries/ckeditor/adapters/jquery.js b/sites/all/libraries/ckeditor/adapters/jquery.js new file mode 100644 index 0000000000..704635fb43 --- /dev/null +++ b/sites/all/libraries/ckeditor/adapters/jquery.js @@ -0,0 +1,10 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(a){CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;"undefined"!=typeof a&&(a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data("ckeditorInstance");if(!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";return a},ckeditor:function(g,d){if(!CKEDITOR.env.isCompatible)throw Error("The environment is incompatible.");if(!a.isFunction(g))var k=d,d=g,g=k;var i=[],d=d||{};this.each(function(){var b= +a(this),c=b.data("ckeditorInstance"),f=b.data("_ckeditorInstanceLock"),h=this,j=new a.Deferred;i.push(j.promise());if(c&&!f)g&&g.apply(c,[this]),j.resolve();else if(f)c.once("instanceReady",function(){setTimeout(function(){c.element?(c.element.$==h&&g&&g.apply(c,[h]),j.resolve()):setTimeout(arguments.callee,100)},0)},null,null,9999);else{if(d.autoUpdateElement||"undefined"==typeof d.autoUpdateElement&&CKEDITOR.config.autoUpdateElement)d.autoUpdateElementJquery=!0;d.autoUpdateElement=!1;b.data("_ckeditorInstanceLock", +!0);c=a(this).is("textarea")?CKEDITOR.replace(h,d):CKEDITOR.inline(h,d);b.data("ckeditorInstance",c);c.on("instanceReady",function(d){var e=d.editor;setTimeout(function(){if(e.element){d.removeListener();e.on("dataReady",function(){b.trigger("dataReady.ckeditor",[e])});e.on("setData",function(a){b.trigger("setData.ckeditor",[e,a.data])});e.on("getData",function(a){b.trigger("getData.ckeditor",[e,a.data])},999);e.on("destroy",function(){b.trigger("destroy.ckeditor",[e])});e.on("save",function(){a(h.form).submit(); +return!1},null,null,20);if(e.config.autoUpdateElementJquery&&b.is("textarea")&&a(h.form).length){var c=function(){b.ckeditor(function(){e.updateElement()})};a(h.form).submit(c);a(h.form).bind("form-pre-serialize",c);b.bind("destroy.ckeditor",function(){a(h.form).unbind("submit",c);a(h.form).unbind("form-pre-serialize",c)})}e.on("destroy",function(){b.removeData("ckeditorInstance")});b.removeData("_ckeditorInstanceLock");b.trigger("instanceReady.ckeditor",[e]);g&&g.apply(e,[h]);j.resolve()}else setTimeout(arguments.callee, +100)},0)},null,null,9999)}});var f=new a.Deferred;this.promise=f.promise();a.when.apply(this,i).then(function(){f.resolve()});this.editor=this.eq(0).data("ckeditorInstance");return this}}),CKEDITOR.config.jqueryOverrideVal&&(a.fn.val=CKEDITOR.tools.override(a.fn.val,function(g){return function(d){if(arguments.length){var k=this,i=[],f=this.each(function(){var b=a(this),c=b.data("ckeditorInstance");if(b.is("textarea")&&c){var f=new a.Deferred;c.setData(d,function(){f.resolve()});i.push(f.promise()); +return!0}return g.call(b,d)});if(i.length){var b=new a.Deferred;a.when.apply(this,i).done(function(){b.resolveWith(k)});return b.promise()}return f}var f=a(this).eq(0),c=f.data("ckeditorInstance");return f.is("textarea")&&c?c.getData():g.call(f)}})))})(window.jQuery); \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/build-config.js b/sites/all/libraries/ckeditor/build-config.js new file mode 100644 index 0000000000..105dfec1c4 --- /dev/null +++ b/sites/all/libraries/ckeditor/build-config.js @@ -0,0 +1,157 @@ +/** + * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +/** + * This file was added automatically by CKEditor builder. + * You may re-use it at any time to build CKEditor again. + * + * If you would like to build CKEditor online again + * (for example to upgrade), visit one the following links: + * + * (1) http://ckeditor.com/builder + * Visit online builder to build CKEditor from scratch. + * + * (2) http://ckeditor.com/builder/e41bccb8290b6d530f8478ddafe95c48 + * Visit online builder to build CKEditor, starting with the same setup as before. + * + * (3) http://ckeditor.com/builder/download/e41bccb8290b6d530f8478ddafe95c48 + * Straight download link to the latest version of CKEditor (Optimized) with the same setup as before. + * + * NOTE: + * This file is not used by CKEditor, you may remove it. + * Changing this file will not change your CKEditor configuration. + */ + +var CKBUILDER_CONFIG = { + skin: 'moono', + preset: 'standard', + ignore: [ + '.bender', + 'bender.js', + 'bender-err.log', + 'bender-out.log', + 'dev', + '.DS_Store', + '.editorconfig', + '.gitattributes', + '.gitignore', + 'gruntfile.js', + '.idea', + '.jscsrc', + '.jshintignore', + '.jshintrc', + '.mailmap', + 'node_modules', + 'package.json', + 'README.md', + 'tests' + ], + plugins : { + 'a11yhelp' : 1, + 'about' : 1, + 'basicstyles' : 1, + 'blockquote' : 1, + 'clipboard' : 1, + 'contextmenu' : 1, + 'elementspath' : 1, + 'enterkey' : 1, + 'entities' : 1, + 'filebrowser' : 1, + 'floatingspace' : 1, + 'format' : 1, + 'horizontalrule' : 1, + 'htmlwriter' : 1, + 'image' : 1, + 'indentlist' : 1, + 'link' : 1, + 'list' : 1, + 'magicline' : 1, + 'maximize' : 1, + 'pastefromword' : 1, + 'pastetext' : 1, + 'removeformat' : 1, + 'resize' : 1, + 'scayt' : 1, + 'showborders' : 1, + 'sourcearea' : 1, + 'specialchar' : 1, + 'stylescombo' : 1, + 'tab' : 1, + 'table' : 1, + 'tabletools' : 1, + 'toolbar' : 1, + 'undo' : 1, + 'wsc' : 1, + 'wysiwygarea' : 1 + }, + languages : { + 'af' : 1, + 'ar' : 1, + 'bg' : 1, + 'bn' : 1, + 'bs' : 1, + 'ca' : 1, + 'cs' : 1, + 'cy' : 1, + 'da' : 1, + 'de' : 1, + 'el' : 1, + 'en' : 1, + 'en-au' : 1, + 'en-ca' : 1, + 'en-gb' : 1, + 'eo' : 1, + 'es' : 1, + 'et' : 1, + 'eu' : 1, + 'fa' : 1, + 'fi' : 1, + 'fo' : 1, + 'fr' : 1, + 'fr-ca' : 1, + 'gl' : 1, + 'gu' : 1, + 'he' : 1, + 'hi' : 1, + 'hr' : 1, + 'hu' : 1, + 'id' : 1, + 'is' : 1, + 'it' : 1, + 'ja' : 1, + 'ka' : 1, + 'km' : 1, + 'ko' : 1, + 'ku' : 1, + 'lt' : 1, + 'lv' : 1, + 'mk' : 1, + 'mn' : 1, + 'ms' : 1, + 'nb' : 1, + 'nl' : 1, + 'no' : 1, + 'pl' : 1, + 'pt' : 1, + 'pt-br' : 1, + 'ro' : 1, + 'ru' : 1, + 'si' : 1, + 'sk' : 1, + 'sl' : 1, + 'sq' : 1, + 'sr' : 1, + 'sr-latn' : 1, + 'sv' : 1, + 'th' : 1, + 'tr' : 1, + 'tt' : 1, + 'ug' : 1, + 'uk' : 1, + 'vi' : 1, + 'zh' : 1, + 'zh-cn' : 1 + } +}; \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/ckeditor.js b/sites/all/libraries/ckeditor/ckeditor.js new file mode 100644 index 0000000000..9ab3617ece --- /dev/null +++ b/sites/all/libraries/ckeditor/ckeditor.js @@ -0,0 +1,946 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,f={timestamp:"F0RD",version:"4.4.7",revision:"3a35b3d",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var e=window.CKEDITOR_BASEPATH||"";if(!e)for(var d=document.getElementsByTagName("script"),c=0;c<d.length;c++){var b=d[c].src.match(a);if(b){e=b[1];break}}-1==e.indexOf(":/")&&"//"!=e.slice(0,2)&&(e=0===e.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+ +e:location.href.match(/^[^\?]*\/(?:)/)[0]+e);if(!e)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return e}(),getUrl:function(a){-1==a.indexOf(":/")&&0!==a.indexOf("/")&&(a=this.basePath+a);this.timestamp&&("/"!=a.charAt(a.length-1)&&!/[&?]t=/.test(a))&&(a+=(0<=a.indexOf("?")?"&":"?")+"t="+this.timestamp);return a},domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded", +a,!1),d()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),d())}catch(c){}}function d(){for(var a;a=c.shift();)a()}var c=[];return function(d){function b(){try{document.documentElement.doScroll("left")}catch(m){setTimeout(b,1);return}a()}c.push(d);"complete"===document.readyState&&setTimeout(a,1);if(1==c.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange", +a);window.attachEvent("onload",a);d=!1;try{d=!window.frameElement}catch(f){}document.documentElement.doScroll&&d&&b()}}}()},b=window.CKEDITOR_GETURL;if(b){var c=f.getUrl;f.getUrl=function(a){return b.call(f,a)||c.call(f,a)}}return f}()); +CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(a){var f=CKEDITOR.event.prototype,b;for(b in f)a[b]==null&&(a[b]=f[b])},CKEDITOR.event.prototype=function(){function a(a){var e=f(this);return e[a]||(e[a]=new b(a))}var f=function(a){a=a.getPrivate&&a.getPrivate()||a._||(a._={});return a.events||(a.events={})},b=function(a){this.name=a;this.listeners=[]};b.prototype={getListenerIndex:function(a){for(var e=0,d=this.listeners;e<d.length;e++)if(d[e].fn==a)return e;return-1}}; +return{define:function(b,e){var d=a.call(this,b);CKEDITOR.tools.extend(d,e,true)},on:function(b,e,d,f,k){function j(a,m,y,s){a={name:b,sender:this,editor:a,data:m,listenerData:f,stop:y,cancel:s,removeListener:g};return e.call(d,a)===false?false:a.data}function g(){y.removeListener(b,e)}var m=a.call(this,b);if(m.getListenerIndex(e)<0){m=m.listeners;d||(d=this);isNaN(k)&&(k=10);var y=this;j.fn=e;j.priority=k;for(var s=m.length-1;s>=0;s--)if(m[s].priority<=k){m.splice(s+1,0,j);return{removeListener:g}}m.unshift(j)}return{removeListener:g}}, +once:function(){var a=Array.prototype.slice.call(arguments),e=a[1];a[1]=function(a){a.removeListener();return e.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,e=function(){a=1},d=0,b=function(){d=1};return function(k,j,g){var m=f(this)[k],k=a,y=d;a=d=0;if(m){var s=m.listeners;if(s.length)for(var s=s.slice(0),w,q=0;q<s.length;q++){if(m.errorProof)try{w= +s[q].call(this,g,j,e,b)}catch(t){}else w=s[q].call(this,g,j,e,b);w===false?d=1:typeof w!="undefined"&&(j=w);if(a||d)break}}j=d?false:typeof j=="undefined"?true:j;a=k;d=y;return j}}(),fireOnce:function(a,e,d){e=this.fire(a,e,d);delete f(this)[a];return e},removeListener:function(a,e){var d=f(this)[a];if(d){var b=d.getListenerIndex(e);b>=0&&d.listeners.splice(b,1)}},removeAllListeners:function(){var a=f(this),e;for(e in a)delete a[e]},hasListeners:function(a){return(a=f(this)[a])&&a.listeners.length> +0}}}());CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(a,f){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fire.call(this,a,f,this)},CKEDITOR.editor.prototype.fireOnce=function(a,f){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fireOnce.call(this,a,f,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)); +CKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),f={ie:a.indexOf("trident/")>-1,webkit:a.indexOf(" applewebkit/")>-1,air:a.indexOf(" adobeair/")>-1,mac:a.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat"&&(!document.documentMode||document.documentMode<10),mobile:a.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return false;var a=document.domain,d=window.location.hostname;return a!=d&&a!="["+d+"]"},secure:location.protocol== +"https:"};f.gecko=navigator.product=="Gecko"&&!f.webkit&&!f.ie;if(f.webkit)a.indexOf("chrome")>-1?f.chrome=true:f.safari=true;var b=0;if(f.ie){b=f.quirks||!document.documentMode?parseFloat(a.match(/msie (\d+)/)[1]):document.documentMode;f.ie9Compat=b==9;f.ie8Compat=b==8;f.ie7Compat=b==7;f.ie6Compat=b<7||f.quirks}if(f.gecko){var c=a.match(/rv:([\d\.]+)/);if(c){c=c[1].split(".");b=c[0]*1E4+(c[1]||0)*100+(c[2]||0)*1}}f.air&&(b=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));f.webkit&&(b=parseFloat(a.match(/ applewebkit\/(\d+)/)[1])); +f.version=b;f.isCompatible=f.iOS&&b>=534||!f.mobile&&(f.ie&&b>6||f.gecko&&b>=2E4||f.air&&b>=1||f.webkit&&b>=522||false);f.hidpi=window.devicePixelRatio>=2;f.needsBrFiller=f.gecko||f.webkit||f.ie&&b>10;f.needsNbspFiller=f.ie&&b<11;f.cssClass="cke_browser_"+(f.ie?"ie":f.gecko?"gecko":f.webkit?"webkit":"unknown");if(f.quirks)f.cssClass=f.cssClass+" cke_browser_quirks";if(f.ie)f.cssClass=f.cssClass+(" cke_browser_ie"+(f.quirks?"6 cke_browser_iequirks":f.version));if(f.air)f.cssClass=f.cssClass+" cke_browser_air"; +if(f.iOS)f.cssClass=f.cssClass+" cke_browser_ios";if(f.hidpi)f.cssClass=f.cssClass+" cke_hidpi";return f}()); +"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if(CKEDITOR.status!="basic_ready")CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var a=document.createElement("script");a.type="text/javascript";a.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(a)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(a){(this._.pending||(this._.pending=[])).push(a)};(function(){CKEDITOR.domReady(function(){var a= +CKEDITOR.loadFullCore,f=CKEDITOR.loadFullCoreTimeout;if(a){CKEDITOR.status="basic_ready";a&&a._load?a():f&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},f*1E3)}})})();CKEDITOR.status="basic_loaded"}();CKEDITOR.dom={}; +(function(){var a=[],f=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",b=/&/g,c=/>/g,e=/</g,d=/"/g,h=/&/g,k=/>/g,j=/</g,g=/"/g;CKEDITOR.on("reset",function(){a=[]});CKEDITOR.tools={arrayCompare:function(a,e){if(!a&&!e)return true;if(!a||!e||a.length!=e.length)return false;for(var d=0;d<a.length;d++)if(a[d]!=e[d])return false;return true},clone:function(a){var e;if(a&&a instanceof Array){e=[];for(var d=0;d<a.length;d++)e[d]=CKEDITOR.tools.clone(a[d]); +return e}if(a===null||typeof a!="object"||a instanceof String||a instanceof Number||a instanceof Boolean||a instanceof Date||a instanceof RegExp||a.nodeType||a.window===a)return a;e=new a.constructor;for(d in a)e[d]=CKEDITOR.tools.clone(a[d]);return e},capitalize:function(a,e){return a.charAt(0).toUpperCase()+(e?a.slice(1):a.slice(1).toLowerCase())},extend:function(a){var e=arguments.length,d,b;if(typeof(d=arguments[e-1])=="boolean")e--;else if(typeof(d=arguments[e-2])=="boolean"){b=arguments[e-1]; +e=e-2}for(var c=1;c<e;c++){var f=arguments[c],i;for(i in f)if(d===true||a[i]==null)if(!b||i in b)a[i]=f[i]}return a},prototypedCopy:function(a){var e=function(){};e.prototype=a;return new e},copy:function(a){var e={},d;for(d in a)e[d]=a[d];return e},isArray:function(a){return Object.prototype.toString.call(a)=="[object Array]"},isEmpty:function(a){for(var e in a)if(a.hasOwnProperty(e))return false;return true},cssVendorPrefix:function(a,e,d){if(d)return f+a+":"+e+";"+a+":"+e;d={};d[a]=e;d[f+a]=e; +return d},cssStyleToDomStyle:function(){var a=document.createElement("div").style,e=typeof a.cssFloat!="undefined"?"cssFloat":typeof a.styleFloat!="undefined"?"styleFloat":"float";return function(a){return a=="float"?e:a.replace(/-./g,function(a){return a.substr(1).toUpperCase()})}}(),buildStyleHtml:function(a){for(var a=[].concat(a),e,d=[],b=0;b<a.length;b++)if(e=a[b])/@import|[{}]/.test(e)?d.push("<style>"+e+"</style>"):d.push('<link type="text/css" rel=stylesheet href="'+e+'">');return d.join("")}, +htmlEncode:function(a){return(""+a).replace(b,"&").replace(c,">").replace(e,"<")},htmlDecode:function(a){return a.replace(h,"&").replace(k,">").replace(j,"<")},htmlEncodeAttr:function(a){return a.replace(d,""").replace(e,"<").replace(c,">")},htmlDecodeAttr:function(a){return a.replace(g,'"').replace(j,"<").replace(k,">")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},override:function(a,e){var d=e(a);d.prototype= +a.prototype;return d},setTimeout:function(a,e,d,b,c){c||(c=window);d||(d=c);return c.setTimeout(function(){b?a.apply(d,[].concat(b)):a.apply(d)},e||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(e){return e.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(e){return e.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(e){return e.replace(a,"")}}(),indexOf:function(a,e){if(typeof e=="function")for(var d=0,b=a.length;d<b;d++){if(e(a[d]))return d}else{if(a.indexOf)return a.indexOf(e); +d=0;for(b=a.length;d<b;d++)if(a[d]===e)return d}return-1},search:function(a,e){var d=CKEDITOR.tools.indexOf(a,e);return d>=0?a[d]:null},bind:function(a,e){return function(){return a.apply(e,arguments)}},createClass:function(a){var e=a.$,d=a.base,b=a.privates||a._,c=a.proto,a=a.statics;!e&&(e=function(){d&&this.base.apply(this,arguments)});if(b)var f=e,e=function(){var a=this._||(this._={}),e;for(e in b){var d=b[e];a[e]=typeof d=="function"?CKEDITOR.tools.bind(d,this):d}f.apply(this,arguments)};if(d){e.prototype= +this.prototypedCopy(d.prototype);e.prototype.constructor=e;e.base=d;e.baseProto=d.prototype;e.prototype.base=function(){this.base=d.prototype.base;d.apply(this,arguments);this.base=arguments.callee}}c&&this.extend(e.prototype,c,true);a&&this.extend(e,a,true);return e},addFunction:function(e,d){return a.push(function(){return e.apply(d||this,arguments)})-1},removeFunction:function(e){a[e]=null},callFunction:function(e){var d=a[e];return d&&d.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a= +/^-?\d+\.?\d*px$/,e;return function(d){e=CKEDITOR.tools.trim(d+"")+"px";return a.test(e)?e:d||""}}(),convertToPx:function(){var a;return function(e){if(!a){a=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(a)}if(!/%$/.test(e)){a.setStyle("width",e);return a.$.clientWidth}return e}}(),repeat:function(a,e){return Array(e+1).join(a)},tryThese:function(){for(var a, +e=0,d=arguments.length;e<d;e++){var b=arguments[e];try{a=b();break}catch(c){}}return a},genKey:function(){return Array.prototype.slice.call(arguments).join("-")},defer:function(a){return function(){var e=arguments,d=this;window.setTimeout(function(){a.apply(d,e)},0)}},normalizeCssText:function(a,e){var d=[],b,c=CKEDITOR.tools.parseCssText(a,true,e);for(b in c)d.push(b+":"+c[b]);d.sort();return d.length?d.join(";")+";":""},convertRgbToHex:function(a){return a.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi, +function(a,e,d,b){a=[e,d,b];for(e=0;e<3;e++)a[e]=("0"+parseInt(a[e],10).toString(16)).slice(-2);return"#"+a.join("")})},parseCssText:function(a,e,d){var b={};if(d){d=new CKEDITOR.dom.element("span");d.setAttribute("style",a);a=CKEDITOR.tools.convertRgbToHex(d.getAttribute("style")||"")}if(!a||a==";")return b;a.replace(/"/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,d,m){if(e){d=d.toLowerCase();d=="font-family"&&(m=m.toLowerCase().replace(/["']/g,"").replace(/\s*,\s*/g,",")); +m=CKEDITOR.tools.trim(m)}b[d]=m});return b},writeCssText:function(a,e){var d,b=[];for(d in a)b.push(d+":"+a[d]);e&&b.sort();return b.join("; ")},objectCompare:function(a,e,d){var b;if(!a&&!e)return true;if(!a||!e)return false;for(b in a)if(a[b]!=e[b])return false;if(!d)for(b in e)if(a[b]!=e[b])return false;return true},objectKeys:function(a){var e=[],d;for(d in a)e.push(d);return e},convertArrayToObject:function(a,e){var d={};arguments.length==1&&(e=true);for(var b=0,c=a.length;b<c;++b)d[a[b]]=e; +return d},fixDomain:function(){for(var a;;)try{a=window.parent.document.domain;break}catch(e){a=a?a.replace(/.+?(?:\.|$)/,""):document.domain;if(!a)break;document.domain=a}return!!a},eventsBuffer:function(a,e){function d(){c=(new Date).getTime();b=false;e()}var b,c=0;return{input:function(){if(!b){var e=(new Date).getTime()-c;e<a?b=setTimeout(d,a-e):d()}},reset:function(){b&&clearTimeout(b);b=c=0}}},enableHtml5Elements:function(a,e){for(var d=["abbr","article","aside","audio","bdi","canvas","data", +"datalist","details","figcaption","figure","footer","header","hgroup","mark","meter","nav","output","progress","section","summary","time","video"],b=d.length,c;b--;){c=a.createElement(d[b]);e&&a.appendChild(c)}},checkIfAnyArrayItemMatches:function(a,e){for(var d=0,b=a.length;d<b;++d)if(a[d].match(e))return true;return false},checkIfAnyObjectPropertyMatches:function(a,e){for(var d in a)if(d.match(e))return true;return false},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="}})(); +CKEDITOR.dtd=function(){var a=CKEDITOR.tools.extend,f=function(a,e){for(var d=CKEDITOR.tools.clone(a),b=1;b<arguments.length;b++){var e=arguments[b],c;for(c in e)delete d[c]}return d},b={},c={},e={address:1,article:1,aside:1,blockquote:1,details:1,div:1,dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,main:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1},d={command:1,link:1,meta:1,noscript:1,script:1,style:1},h={},k={"#":1},j={center:1,dir:1,noframes:1}; +a(b,{a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1,q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,"var":1,video:1,wbr:1},k,{acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});a(c,e,b,j);f={a:f(b,{a:1,button:1}),abbr:b,address:c, +area:h,article:c,aside:c,audio:a({source:1,track:1},c),b:b,base:h,bdi:b,bdo:b,blockquote:c,body:c,br:h,button:f(b,{a:1,button:1}),canvas:b,caption:c,cite:b,code:b,col:h,colgroup:{col:1},command:h,datalist:a({option:1},b),dd:c,del:b,details:a({summary:1},c),dfn:b,div:c,dl:{dt:1,dd:1},dt:c,em:b,embed:h,fieldset:a({legend:1},c),figcaption:c,figure:a({figcaption:1},c),footer:c,form:c,h1:b,h2:b,h3:b,h4:b,h5:b,h6:b,head:a({title:1,base:1},d),header:c,hgroup:{h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},hr:h,html:a({head:1, +body:1},c,d),i:b,iframe:k,img:h,input:h,ins:b,kbd:b,keygen:h,label:b,legend:b,li:c,link:h,main:c,map:c,mark:b,menu:a({li:1},c),meta:h,meter:f(b,{meter:1}),nav:c,noscript:a({link:1,meta:1,style:1},b),object:a({param:1},b),ol:{li:1},optgroup:{option:1},option:k,output:b,p:b,param:h,pre:b,progress:f(b,{progress:1}),q:b,rp:b,rt:b,ruby:a({rp:1,rt:1},b),s:b,samp:b,script:k,section:c,select:{optgroup:1,option:1},small:b,source:h,span:b,strong:b,style:k,sub:b,summary:b,sup:b,table:{caption:1,colgroup:1,thead:1, +tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:c,textarea:k,tfoot:{tr:1},th:c,thead:{tr:1},time:f(b,{time:1}),title:k,tr:{th:1,td:1},track:h,u:b,ul:{li:1},"var":b,video:a({source:1,track:1},c),wbr:h,acronym:b,applet:a({param:1},c),basefont:h,big:b,center:c,dialog:h,dir:{li:1},font:b,isindex:h,noframes:c,strike:b,tt:b};a(f,{$block:a({audio:1,dd:1,dt:1,figcaption:1,li:1,video:1},e,j),$blockLimit:{article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1,div:1,dl:1,fieldset:1,figcaption:1,figure:1,footer:1, +form:1,header:1,hgroup:1,main:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1},$cdata:{script:1,style:1},$editable:{address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,figcaption:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,main:1,nav:1,p:1,pre:1,section:1},$empty:{area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1},$inline:b,$list:{dl:1,ol:1, +ul:1},$listItem:{dd:1,dt:1,li:1},$nonBodyContent:a({body:1,head:1,html:1},f.head),$nonEditable:{applet:1,audio:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,param:1,script:1,textarea:1,video:1},$object:{applet:1,audio:1,button:1,hr:1,iframe:1,img:1,input:1,object:1,select:1,table:1,textarea:1,video:1},$removeEmpty:{abbr:1,acronym:1,b:1,bdi:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,mark:1,meter:1,output:1,q:1,ruby:1,s:1,samp:1,small:1,span:1,strike:1,strong:1, +sub:1,sup:1,time:1,tt:1,u:1,"var":1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},$transparent:{a:1,audio:1,canvas:1,del:1,ins:1,map:1,noscript:1,object:1,video:1},$intermediate:{caption:1,colgroup:1,dd:1,dt:1,figcaption:1,legend:1,li:1,optgroup:1,option:1,rp:1,rt:1,summary:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}});return f}();CKEDITOR.dom.event=function(a){this.$=a}; +CKEDITOR.dom.event.prototype={getKey:function(){return this.$.keyCode||this.$.which},getKeystroke:function(){var a=this.getKey();if(this.$.ctrlKey||this.$.metaKey)a=a+CKEDITOR.CTRL;this.$.shiftKey&&(a=a+CKEDITOR.SHIFT);this.$.altKey&&(a=a+CKEDITOR.ALT);return a},preventDefault:function(a){var f=this.$;f.preventDefault?f.preventDefault():f.returnValue=false;a&&this.stopPropagation()},stopPropagation:function(){var a=this.$;a.stopPropagation?a.stopPropagation():a.cancelBubble=true},getTarget:function(){var a= +this.$.target||this.$.srcElement;return a?new CKEDITOR.dom.node(a):null},getPhase:function(){return this.$.eventPhase||2},getPageOffset:function(){var a=this.getTarget().getDocument().$;return{x:this.$.pageX||this.$.clientX+(a.documentElement.scrollLeft||a.body.scrollLeft),y:this.$.pageY||this.$.clientY+(a.documentElement.scrollTop||a.body.scrollTop)}}};CKEDITOR.CTRL=1114112;CKEDITOR.SHIFT=2228224;CKEDITOR.ALT=4456448;CKEDITOR.EVENT_PHASE_CAPTURING=1;CKEDITOR.EVENT_PHASE_AT_TARGET=2; +CKEDITOR.EVENT_PHASE_BUBBLING=3;CKEDITOR.dom.domObject=function(a){if(a)this.$=a}; +CKEDITOR.dom.domObject.prototype=function(){var a=function(a,b){return function(c){typeof CKEDITOR!="undefined"&&a.fire(b,new CKEDITOR.dom.event(c))}};return{getPrivate:function(){var a;if(!(a=this.getCustomData("_")))this.setCustomData("_",a={});return a},on:function(f){var b=this.getCustomData("_cke_nativeListeners");if(!b){b={};this.setCustomData("_cke_nativeListeners",b)}if(!b[f]){b=b[f]=a(this,f);this.$.addEventListener?this.$.addEventListener(f,b,!!CKEDITOR.event.useCapture):this.$.attachEvent&& +this.$.attachEvent("on"+f,b)}return CKEDITOR.event.prototype.on.apply(this,arguments)},removeListener:function(a){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(a)){var b=this.getCustomData("_cke_nativeListeners"),c=b&&b[a];if(c){this.$.removeEventListener?this.$.removeEventListener(a,c,false):this.$.detachEvent&&this.$.detachEvent("on"+a,c);delete b[a]}}},removeAllListeners:function(){var a=this.getCustomData("_cke_nativeListeners"),b;for(b in a){var c=a[b];this.$.detachEvent? +this.$.detachEvent("on"+b,c):this.$.removeEventListener&&this.$.removeEventListener(b,c,false);delete a[b]}CKEDITOR.event.prototype.removeAllListeners.call(this)}}}(); +(function(a){var f={};CKEDITOR.on("reset",function(){f={}});a.equals=function(a){try{return a&&a.$===this.$}catch(c){return false}};a.setCustomData=function(a,c){var e=this.getUniqueId();(f[e]||(f[e]={}))[a]=c;return this};a.getCustomData=function(a){var c=this.$["data-cke-expando"];return(c=c&&f[c])&&a in c?c[a]:null};a.removeCustomData=function(a){var c=this.$["data-cke-expando"],c=c&&f[c],e,d;if(c){e=c[a];d=a in c;delete c[a]}return d?e:null};a.clearCustomData=function(){this.removeAllListeners(); +var a=this.$["data-cke-expando"];a&&delete f[a]};a.getUniqueId=function(){return this.$["data-cke-expando"]||(this.$["data-cke-expando"]=CKEDITOR.tools.getNextNumber())};CKEDITOR.event.implementOn(a)})(CKEDITOR.dom.domObject.prototype); +CKEDITOR.dom.node=function(a){return a?new CKEDITOR.dom[a.nodeType==CKEDITOR.NODE_DOCUMENT?"document":a.nodeType==CKEDITOR.NODE_ELEMENT?"element":a.nodeType==CKEDITOR.NODE_TEXT?"text":a.nodeType==CKEDITOR.NODE_COMMENT?"comment":a.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT?"documentFragment":"domObject"](a):this};CKEDITOR.dom.node.prototype=new CKEDITOR.dom.domObject;CKEDITOR.NODE_ELEMENT=1;CKEDITOR.NODE_DOCUMENT=9;CKEDITOR.NODE_TEXT=3;CKEDITOR.NODE_COMMENT=8;CKEDITOR.NODE_DOCUMENT_FRAGMENT=11; +CKEDITOR.POSITION_IDENTICAL=0;CKEDITOR.POSITION_DISCONNECTED=1;CKEDITOR.POSITION_FOLLOWING=2;CKEDITOR.POSITION_PRECEDING=4;CKEDITOR.POSITION_IS_CONTAINED=8;CKEDITOR.POSITION_CONTAINS=16; +CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype,{appendTo:function(a,f){a.append(this,f);return a},clone:function(a,f){var b=this.$.cloneNode(a),c=function(e){e["data-cke-expando"]&&(e["data-cke-expando"]=false);if(e.nodeType==CKEDITOR.NODE_ELEMENT){f||e.removeAttribute("id",false);if(a)for(var e=e.childNodes,d=0;d<e.length;d++)c(e[d])}};c(b);return new CKEDITOR.dom.node(b)},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(a){a.$.parentNode.insertBefore(this.$, +a.$.nextSibling);return a},insertBefore:function(a){a.$.parentNode.insertBefore(this.$,a.$);return a},insertBeforeMe:function(a){this.$.parentNode.insertBefore(a.$,this.$);return a},getAddress:function(a){for(var f=[],b=this.getDocument().$.documentElement,c=this.$;c&&c!=b;){var e=c.parentNode;e&&f.unshift(this.getIndex.call({$:c},a));c=e}return f},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(a){function f(a,e){var b= +e?a.nextSibling:a.previousSibling;return!b||b.nodeType!=CKEDITOR.NODE_TEXT?null:b.nodeValue?b:f(b,e)}var b=this.$,c=-1,e;if(!this.$.parentNode||a&&b.nodeType==CKEDITOR.NODE_TEXT&&!b.nodeValue&&!f(b)&&!f(b,true))return-1;do if(!a||!(b!=this.$&&b.nodeType==CKEDITOR.NODE_TEXT&&(e||!b.nodeValue))){c++;e=b.nodeType==CKEDITOR.NODE_TEXT}while(b=b.previousSibling);return c},getNextSourceNode:function(a,f,b){if(b&&!b.call)var c=b,b=function(a){return!a.equals(c)};var a=!a&&this.getFirst&&this.getFirst(),e; +if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getNext()}for(;!a&&(e=(e||this).getParent());){if(b&&b(e,true)===false)return null;a=e.getNext()}return!a||b&&b(a)===false?null:f&&f!=a.type?a.getNextSourceNode(false,f,b):a},getPreviousSourceNode:function(a,f,b){if(b&&!b.call)var c=b,b=function(a){return!a.equals(c)};var a=!a&&this.getLast&&this.getLast(),e;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getPrevious()}for(;!a&& +(e=(e||this).getParent());){if(b&&b(e,true)===false)return null;a=e.getPrevious()}return!a||b&&b(a)===false?null:f&&a.type!=f?a.getPreviousSourceNode(false,f,b):a},getPrevious:function(a){var f=this.$,b;do b=(f=f.previousSibling)&&f.nodeType!=10&&new CKEDITOR.dom.node(f);while(b&&a&&!a(b));return b},getNext:function(a){var f=this.$,b;do b=(f=f.nextSibling)&&new CKEDITOR.dom.node(f);while(b&&a&&!a(b));return b},getParent:function(a){var f=this.$.parentNode;return f&&(f.nodeType==CKEDITOR.NODE_ELEMENT|| +a&&f.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)?new CKEDITOR.dom.node(f):null},getParents:function(a){var f=this,b=[];do b[a?"push":"unshift"](f);while(f=f.getParent());return b},getCommonAncestor:function(a){if(a.equals(this))return this;if(a.contains&&a.contains(this))return a;var f=this.contains?this:this.getParent();do if(f.contains(a))return f;while(f=f.getParent());return null},getPosition:function(a){var f=this.$,b=a.$;if(f.compareDocumentPosition)return f.compareDocumentPosition(b);if(f== +b)return CKEDITOR.POSITION_IDENTICAL;if(this.type==CKEDITOR.NODE_ELEMENT&&a.type==CKEDITOR.NODE_ELEMENT){if(f.contains){if(f.contains(b))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(b.contains(f))return CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in f)return f.sourceIndex<0||b.sourceIndex<0?CKEDITOR.POSITION_DISCONNECTED:f.sourceIndex<b.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}for(var f=this.getAddress(),a=a.getAddress(), +b=Math.min(f.length,a.length),c=0;c<=b-1;c++)if(f[c]!=a[c]){if(c<b)return f[c]<a[c]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;break}return f.length<a.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING},getAscendant:function(a,f){var b=this.$,c,e;if(!f)b=b.parentNode;if(typeof a=="function"){e=true;c=a}else{e=false;c=function(e){e=typeof e.nodeName=="string"?e.nodeName.toLowerCase():"";return typeof a=="string"?e== +a:e in a}}for(;b;){if(c(e?new CKEDITOR.dom.node(b):b))return new CKEDITOR.dom.node(b);try{b=b.parentNode}catch(d){b=null}}return null},hasAscendant:function(a,f){var b=this.$;if(!f)b=b.parentNode;for(;b;){if(b.nodeName&&b.nodeName.toLowerCase()==a)return true;b=b.parentNode}return false},move:function(a,f){a.append(this.remove(),f)},remove:function(a){var f=this.$,b=f.parentNode;if(b){if(a)for(;a=f.firstChild;)b.insertBefore(f.removeChild(a),f);b.removeChild(f)}return this},replace:function(a){this.insertBefore(a); +a.remove()},trim:function(){this.ltrim();this.rtrim()},ltrim:function(){for(var a;this.getFirst&&(a=this.getFirst());){if(a.type==CKEDITOR.NODE_TEXT){var f=CKEDITOR.tools.ltrim(a.getText()),b=a.getLength();if(f){if(f.length<b){a.split(b-f.length);this.$.removeChild(this.$.firstChild)}}else{a.remove();continue}}break}},rtrim:function(){for(var a;this.getLast&&(a=this.getLast());){if(a.type==CKEDITOR.NODE_TEXT){var f=CKEDITOR.tools.rtrim(a.getText()),b=a.getLength();if(f){if(f.length<b){a.split(f.length); +this.$.lastChild.parentNode.removeChild(this.$.lastChild)}}else{a.remove();continue}}break}if(CKEDITOR.env.needsBrFiller)(a=this.$.lastChild)&&(a.type==1&&a.nodeName.toLowerCase()=="br")&&a.parentNode.removeChild(a)},isReadOnly:function(){var a=this;this.type!=CKEDITOR.NODE_ELEMENT&&(a=this.getParent());if(a&&typeof a.$.isContentEditable!="undefined")return!(a.$.isContentEditable||a.data("cke-editable"));for(;a;){if(a.data("cke-editable"))break;if(a.getAttribute("contentEditable")=="false")return true; +if(a.getAttribute("contentEditable")=="true")break;a=a.getParent()}return!a}});CKEDITOR.dom.window=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.window.prototype=new CKEDITOR.dom.domObject; +CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.focus()},getViewPaneSize:function(){var a=this.$.document,f=a.compatMode=="CSS1Compat";return{width:(f?a.documentElement.clientWidth:a.body.clientWidth)||0,height:(f?a.documentElement.clientHeight:a.body.clientHeight)||0}},getScrollPosition:function(){var a=this.$;if("pageXOffset"in a)return{x:a.pageXOffset||0,y:a.pageYOffset||0};a=a.document;return{x:a.documentElement.scrollLeft||a.body.scrollLeft||0,y:a.documentElement.scrollTop|| +a.body.scrollTop||0}},getFrame:function(){var a=this.$.frameElement;return a?new CKEDITOR.dom.element.get(a):null}});CKEDITOR.dom.document=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.document.prototype=new CKEDITOR.dom.domObject; +CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype,{type:CKEDITOR.NODE_DOCUMENT,appendStyleSheet:function(a){if(this.$.createStyleSheet)this.$.createStyleSheet(a);else{var f=new CKEDITOR.dom.element("link");f.setAttributes({rel:"stylesheet",type:"text/css",href:a});this.getHead().append(f)}},appendStyleText:function(a){if(this.$.createStyleSheet){var f=this.$.createStyleSheet("");f.cssText=a}else{var b=new CKEDITOR.dom.element("style",this);b.append(new CKEDITOR.dom.text(a,this));this.getHead().append(b)}return f|| +b.$.sheet},createElement:function(a,f){var b=new CKEDITOR.dom.element(a,this);if(f){f.attributes&&b.setAttributes(f.attributes);f.styles&&b.setStyles(f.styles)}return b},createText:function(a){return new CKEDITOR.dom.text(a,this)},focus:function(){this.getWindow().focus()},getActive:function(){var a;try{a=this.$.activeElement}catch(f){return null}return new CKEDITOR.dom.element(a)},getById:function(a){return(a=this.$.getElementById(a))?new CKEDITOR.dom.element(a):null},getByAddress:function(a,f){for(var b= +this.$.documentElement,c=0;b&&c<a.length;c++){var e=a[c];if(f)for(var d=-1,h=0;h<b.childNodes.length;h++){var k=b.childNodes[h];if(!(f===true&&k.nodeType==3&&k.previousSibling&&k.previousSibling.nodeType==3)){d++;if(d==e){b=k;break}}}else b=b.childNodes[e]}return b?new CKEDITOR.dom.node(b):null},getElementsByTag:function(a,f){!(CKEDITOR.env.ie&&document.documentMode<=8)&&f&&(a=f+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0]; +return a=a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),true)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*<!DOCTYPE[^>]*?>)|^/i,'$&\n<script data-cke-temp="1">('+ +CKEDITOR.tools.fixDomain+")();<\/script>"));this.$.write(a);this.$.close()},find:function(a){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a))},findOne:function(a){return(a=this.$.querySelector(a))?new CKEDITOR.dom.element(a):null},_getHtml5ShivFrag:function(){var a=this.getCustomData("html5ShivFrag");if(!a){a=this.$.createDocumentFragment();CKEDITOR.tools.enableHtml5Elements(a,true);this.setCustomData("html5ShivFrag",a)}return a}});CKEDITOR.dom.nodeList=function(a){this.$=a}; +CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){if(a<0||a>=this.$.length)return null;return(a=this.$[a])?new CKEDITOR.dom.node(a):null}};CKEDITOR.dom.element=function(a,f){typeof a=="string"&&(a=(f?f.$:document).createElement(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.element.get=function(a){return(a=typeof a=="string"?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))}; +CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;CKEDITOR.dom.element.createFromHtml=function(a,f){var b=new CKEDITOR.dom.element("div",f);b.setHtml(a);return b.getFirst().remove()}; +CKEDITOR.dom.element.setMarker=function(a,f,b,c){var e=f.getCustomData("list_marker_id")||f.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),d=f.getCustomData("list_marker_names")||f.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[e]=f;d[b]=1;return f.setCustomData(b,c)};CKEDITOR.dom.element.clearAllMarkers=function(a){for(var f in a)CKEDITOR.dom.element.clearMarkers(a,a[f],1)}; +CKEDITOR.dom.element.clearMarkers=function(a,f,b){var c=f.getCustomData("list_marker_names"),e=f.getCustomData("list_marker_id"),d;for(d in c)f.removeCustomData(d);f.removeCustomData("list_marker_names");if(b){f.removeCustomData("list_marker_id");delete a[e]}}; +(function(){function a(a){var d=true;if(!a.$.id){a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber();d=false}return function(){d||a.removeAttribute("id")}}function f(a,d){return"#"+a.$.id+" "+d.split(/,\s*/).join(", #"+a.$.id+" ")}function b(a){for(var d=0,b=0,f=c[a].length;b<f;b++)d=d+(parseInt(this.getComputedStyle(c[a][b])||0,10)||0);return d}CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:function(a){var d=this.$.className;d&&(RegExp("(?:^|\\s)"+a+"(?:\\s|$)", +"").test(d)||(d=d+(" "+a)));this.$.className=d||a;return this},removeClass:function(a){var d=this.getAttribute("class");if(d){a=RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","i");if(a.test(d))(d=d.replace(a,"").replace(/^\s+/,""))?this.setAttribute("class",d):this.removeAttribute("class")}return this},hasClass:function(a){return RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","").test(this.getAttribute("class"))},append:function(a,d){typeof a=="string"&&(a=this.getDocument().createElement(a));d?this.$.insertBefore(a.$,this.$.firstChild): +this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var d=new CKEDITOR.dom.element("div",this.getDocument());d.setHtml(a);d.moveChildren(this)}else this.setHtml(a)},appendText:function(a){this.$.text!=null?this.$.text=this.$.text+a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();if(!a||!a.is||!a.is("br")){a=this.getDocument().createElement("br"); +CKEDITOR.env.gecko&&a.setAttribute("type","_moz");this.append(a)}}},breakParent:function(a){var d=new CKEDITOR.dom.range(this.getDocument());d.setStartAfter(this);d.setEndAfter(a);a=d.extractContents();d.insertNode(this.remove());a.insertAfterNode(this)},contains:CKEDITOR.env.ie||CKEDITOR.env.webkit?function(a){var d=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?d.contains(a.getParent().$):d!=a.$&&d.contains(a.$)}:function(a){return!!(this.$.compareDocumentPosition(a.$)&16)},focus:function(){function a(){try{this.$.focus()}catch(e){}} +return function(d){d?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(true));return a.innerHTML},getClientRect:function(){var a=CKEDITOR.tools.extend({},this.$.getBoundingClientRect());!a.width&&(a.width=a.right-a.left);!a.height&& +(a.height=a.bottom-a.top);return a},setHtml:CKEDITOR.env.ie&&CKEDITOR.env.version<9?function(a){try{var d=this.$;if(this.getParent())return d.innerHTML=a;var b=this.getDocument()._getHtml5ShivFrag();b.appendChild(d);d.innerHTML=a;b.removeChild(d);return a}catch(c){this.$.innerHTML="";d=new CKEDITOR.dom.element("body",this.getDocument());d.$.innerHTML=a;for(d=d.getChildren();d.count();)this.append(d.getItem(0));return a}}:function(a){return this.$.innerHTML=a},setText:function(){var a=document.createElement("p"); +a.innerHTML="x";a=a.textContent;return function(d){this.$[a?"textContent":"innerText"]=d}}(),getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){switch(a){case "class":a="className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;case "tabindex":a=this.$.getAttribute(a,2);a!==0&&this.$.tabIndex===0&&(a=null);return a;case "checked":a=this.$.attributes.getNamedItem(a); +return(a.specified?a.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[a];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(a,2)}:a}(),getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getComputedStyle:CKEDITOR.env.ie?function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]}: +function(a){var d=this.getWindow().$.getComputedStyle(this.$,null);return d?d.getPropertyValue(a):""},getDtd:function(){var a=CKEDITOR.dtd[this.getName()];this.getDtd=function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag,getTabIndex:CKEDITOR.env.ie?function(){var a=this.$.tabIndex;a===0&&(!CKEDITOR.dtd.$tabIndex[this.getName()]&&parseInt(this.getAttribute("tabindex"),10)!==0)&&(a=-1);return a}:CKEDITOR.env.webkit?function(){var a=this.$.tabIndex;if(a===void 0){a= +parseInt(this.getAttribute("tabindex"),10);isNaN(a)&&(a=-1)}return a}:function(){return this.$.tabIndex},getText:function(){return this.$.textContent||this.$.innerText||""},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id||null},getNameAtt:function(){return this.$.name||null},getName:function(){var a=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&document.documentMode<=8){var d=this.$.scopeName;d!="HTML"&&(a=d.toLowerCase()+":"+a)}this.getName=function(){return a}; +return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var d=this.$.firstChild;(d=d&&new CKEDITOR.dom.node(d))&&(a&&!a(d))&&(d=d.getNext(a));return d},getLast:function(a){var d=this.$.lastChild;(d=d&&new CKEDITOR.dom.node(d))&&(a&&!a(d))&&(d=d.getPrevious(a));return d},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},is:function(){var a=this.getName();if(typeof arguments[0]=="object")return!!arguments[0][a];for(var d=0;d<arguments.length;d++)if(arguments[d]== +a)return true;return false},isEditable:function(a){var d=this.getName();if(this.isReadOnly()||this.getComputedStyle("display")=="none"||this.getComputedStyle("visibility")=="hidden"||CKEDITOR.dtd.$nonEditable[d]||CKEDITOR.dtd.$empty[d]||this.is("a")&&(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount())return false;if(a!==false){a=CKEDITOR.dtd[d]||CKEDITOR.dtd.span;return!(!a||!a["#"])}return true},isIdentical:function(a){var d=this.clone(0,1),a=a.clone(0,1);d.removeAttributes(["_moz_dirty", +"data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);a.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(d.$.isEqualNode){d.$.style.cssText=CKEDITOR.tools.normalizeCssText(d.$.style.cssText);a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText);return d.$.isEqualNode(a.$)}d=d.getOuterHtml();a=a.getOuterHtml();if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&this.is("a")){var b=this.getParent();if(b.type==CKEDITOR.NODE_ELEMENT){b= +b.clone();b.setHtml(d);d=b.getHtml();b.setHtml(a);a=b.getHtml()}}return d==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&this.getComputedStyle("visibility")!="hidden",d,b;if(a&&CKEDITOR.env.webkit){d=this.getWindow();if(!d.equals(CKEDITOR.document.getWindow())&&(b=d.$.frameElement))a=(new CKEDITOR.dom.element(b)).isVisible()}return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return false;for(var a=this.getChildren(),d=0,b=a.count();d< +b;d++){var c=a.getItem(d);if(!(c.type==CKEDITOR.NODE_ELEMENT&&c.data("cke-bookmark"))&&(c.type==CKEDITOR.NODE_ELEMENT&&!c.isEmptyInlineRemoveable()||c.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(c.getText())))return false}return true},hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(){for(var a=this.$.attributes,d=0;d<a.length;d++){var b=a[d];switch(b.nodeName){case "class":if(this.getAttribute("class"))return true;case "data-cke-expando":continue;default:if(b.specified)return true}}return false}: +function(){var a=this.$.attributes,d=a.length,b={"data-cke-expando":1,_moz_dirty:1};return d>0&&(d>2||!b[a[0].nodeName]||d==2&&!b[a[1].nodeName])},hasAttribute:function(){function a(d){var e=this.$.attributes.getNamedItem(d);if(this.getName()=="input")switch(d){case "class":return this.$.className.length>0;case "checked":return!!this.$.checked;case "value":d=this.getAttribute("type");return d=="checkbox"||d=="radio"?this.$.value!="on":!!this.$.value}return!e?false:e.specified}return CKEDITOR.env.ie? +CKEDITOR.env.version<8?function(d){return d=="name"?!!this.$.name:a.call(this,d)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,d){var b=this.$,a=a.$;if(b!=a){var c;if(d)for(;c=b.lastChild;)a.insertBefore(b.removeChild(c),a.firstChild);else for(;c=b.firstChild;)a.appendChild(b.removeChild(c))}},mergeSiblings:function(){function a(d,b,e){if(b&&b.type==CKEDITOR.NODE_ELEMENT){for(var c=[];b.data("cke-bookmark")||b.isEmptyInlineRemoveable();){c.push(b); +b=e?b.getNext():b.getPrevious();if(!b||b.type!=CKEDITOR.NODE_ELEMENT)return}if(d.isIdentical(b)){for(var f=e?d.getLast():d.getFirst();c.length;)c.shift().move(d,!e);b.moveChildren(d,!e);b.remove();f&&f.type==CKEDITOR.NODE_ELEMENT&&f.mergeSiblings()}}}return function(d){if(d===false||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a")){a(this,this.getNext(),true);a(this,this.getPrevious())}}}(),show:function(){this.setStyles({display:"",visibility:""})},setAttribute:function(){var a=function(a, +b){this.$.setAttribute(a,b);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(d,b){d=="class"?this.$.className=b:d=="style"?this.$.style.cssText=b:d=="tabindex"?this.$.tabIndex=b:d=="checked"?this.$.checked=b:d=="contenteditable"?a.call(this,"contentEditable",b):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(d,b){if(d=="src"&&b.match(/^http:\/\//))try{a.apply(this,arguments)}catch(c){}else a.apply(this,arguments); +return this}:a}(),setAttributes:function(a){for(var d in a)this.setAttribute(d,a[d]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){a=="class"?a="className":a=="tabindex"?a="tabIndex":a=="contenteditable"&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var b=0;b< +a.length;b++)this.removeAttribute(a[b]);else for(b in a)a.hasOwnProperty(b)&&this.removeAttribute(b)},removeStyle:function(a){var b=this.$.style;if(!b.removeProperty&&(a=="border"||a=="margin"||a=="padding")){var c=["top","left","right","bottom"],f;a=="border"&&(f=["color","style","width"]);for(var b=[],j=0;j<c.length;j++)if(f)for(var g=0;g<f.length;g++)b.push([a,c[j],f[g]].join("-"));else b.push([a,c[j]].join("-"));for(a=0;a<b.length;a++)this.removeStyle(b[a])}else{b.removeProperty?b.removeProperty(a): +b.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a));this.$.style.cssText||this.removeAttribute("style")}},setStyle:function(a,b){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=b;return this},setStyles:function(a){for(var b in a)this.setStyle(b,a[b]);return this},setOpacity:function(a){if(CKEDITOR.env.ie&&CKEDITOR.env.version<9){a=Math.round(a*100);this.setStyle("filter",a>=100?"":"progid:DXImageTransform.Microsoft.Alpha(opacity="+a+")")}else this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", +"none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,b=this.getElementsByTag("*"),c=0,f=b.count();c<f;c++){a=b.getItem(c);a.setAttribute("unselectable","on")}}},getPositionedAncestor:function(){for(var a=this;a.getName()!="html";){if(a.getComputedStyle("position")!="static")return a;a=a.getParent()}return null},getDocumentPosition:function(a){var b=0,c=0,f=this.getDocument(),j=f.getBody(),g=CKEDITOR.env.quirks;if(document.documentElement.getBoundingClientRect){var m=this.$.getBoundingClientRect(), +y=f.$.documentElement,s=y.clientTop||j.$.clientTop||0,w=y.clientLeft||j.$.clientLeft||0,q=true;if(CKEDITOR.env.ie){q=f.getDocumentElement().contains(this);f=f.getBody().contains(this);q=g&&f||!g&&q}if(q){if(CKEDITOR.env.webkit){b=j.$.scrollLeft||y.scrollLeft;c=j.$.scrollTop||y.scrollTop}else{c=g?j.$:y;b=c.scrollLeft;c=c.scrollTop}b=m.left+b-w;c=m.top+c-s}}else{s=this;for(w=null;s&&!(s.getName()=="body"||s.getName()=="html");){b=b+(s.$.offsetLeft-s.$.scrollLeft);c=c+(s.$.offsetTop-s.$.scrollTop);if(!s.equals(this)){b= +b+(s.$.clientLeft||0);c=c+(s.$.clientTop||0)}for(;w&&!w.equals(s);){b=b-w.$.scrollLeft;c=c-w.$.scrollTop;w=w.getParent()}w=s;s=(m=s.$.offsetParent)?new CKEDITOR.dom.element(m):null}}if(a){m=this.getWindow();s=a.getWindow();if(!m.equals(s)&&m.$.frameElement){a=(new CKEDITOR.dom.element(m.$.frameElement)).getDocumentPosition(a);b=b+a.x;c=c+a.y}}if(!document.documentElement.getBoundingClientRect&&CKEDITOR.env.gecko&&!g){b=b+(this.$.clientLeft?1:0);c=c+(this.$.clientTop?1:0)}return{x:b,y:c}},scrollIntoView:function(a){var b= +this.getParent();if(b){do{(b.$.clientWidth&&b.$.clientWidth<b.$.scrollWidth||b.$.clientHeight&&b.$.clientHeight<b.$.scrollHeight)&&!b.is("body")&&this.scrollIntoParent(b,a,1);if(b.is("html")){var c=b.getWindow();try{var f=c.$.frameElement;f&&(b=new CKEDITOR.dom.element(f))}catch(j){}}}while(b=b.getParent())}},scrollIntoParent:function(a,b,c){var f,j,g,m;function y(b,d){if(/body|html/.test(a.getName()))a.getWindow().$.scrollBy(b,d);else{a.$.scrollLeft=a.$.scrollLeft+b;a.$.scrollTop=a.$.scrollTop+d}} +function s(a,b){var d={x:0,y:0};if(!a.is(q?"body":"html")){var c=a.$.getBoundingClientRect();d.x=c.left;d.y=c.top}c=a.getWindow();if(!c.equals(b)){c=s(CKEDITOR.dom.element.get(c.$.frameElement),b);d.x=d.x+c.x;d.y=d.y+c.y}return d}function w(a,b){return parseInt(a.getComputedStyle("margin-"+b)||0,10)||0}!a&&(a=this.getWindow());g=a.getDocument();var q=g.$.compatMode=="BackCompat";a instanceof CKEDITOR.dom.window&&(a=q?g.getBody():g.getDocumentElement());g=a.getWindow();j=s(this,g);var t=s(a,g),i=this.$.offsetHeight; +f=this.$.offsetWidth;var A=a.$.clientHeight,u=a.$.clientWidth;g=j.x-w(this,"left")-t.x||0;m=j.y-w(this,"top")-t.y||0;f=j.x+f+w(this,"right")-(t.x+u)||0;j=j.y+i+w(this,"bottom")-(t.y+A)||0;if(m<0||j>0)y(0,b===true?m:b===false?j:m<0?m:j);if(c&&(g<0||f>0))y(g<0?g:f,0)},setState:function(a,b,c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+"_off");this.removeClass(b+"_disabled");c&&this.setAttribute("aria-pressed",true);c&&this.removeAttribute("aria-disabled"); +break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");c&&this.setAttribute("aria-disabled",true);c&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+"_off");this.removeClass(b+"_on");this.removeClass(b+"_disabled");c&&this.removeAttribute("aria-pressed");c&&this.removeAttribute("aria-disabled")}},getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)}, +copyAttributes:function(a,b){for(var c=this.$.attributes,b=b||{},f=0;f<c.length;f++){var j=c[f],g=j.nodeName.toLowerCase(),m;if(!(g in b))if(g=="checked"&&(m=this.getAttribute(g)))a.setAttribute(g,m);else if(!CKEDITOR.env.ie||this.hasAttribute(g)){m=this.getAttribute(g);if(m===null)m=j.nodeValue;a.setAttribute(g,m)}}if(this.$.style.cssText!=="")a.$.style.cssText=this.$.style.cssText},renameNode:function(a){if(this.getName()!=a){var b=this.getDocument(),a=new CKEDITOR.dom.element(a,b);this.copyAttributes(a); +this.moveChildren(a);this.getParent()&&this.$.parentNode.replaceChild(a.$,this.$);a.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=a.$;delete this.getName}},getChild:function(){function a(b,c){var e=b.childNodes;if(c>=0&&c<e.length)return e[c]}return function(b){var c=this.$;if(b.slice)for(;b.length>0&&c;)c=a(c,b.shift());else c=a(c,b);return c?new CKEDITOR.dom.node(c):null}}(),getChildCount:function(){return this.$.childNodes.length},disableContextMenu:function(){this.on("contextmenu",function(a){a.data.getTarget().hasClass("cke_enable_context_menu")|| +a.data.preventDefault()})},getDirection:function(a){return a?this.getComputedStyle("direction")||this.getDirection()||this.getParent()&&this.getParent().getDirection(1)||this.getDocument().$.dir||"ltr":this.getStyle("direction")||this.getAttribute("dir")},data:function(a,b){a="data-"+a;if(b===void 0)return this.getAttribute(a);b===false?this.removeAttribute(a):this.setAttribute(a,b);return null},getEditor:function(){var a=CKEDITOR.instances,b,c;for(b in a){c=a[b];if(c.element.equals(this)&&c.elementMode!= +CKEDITOR.ELEMENT_MODE_APPENDTO)return c}return null},find:function(b){var c=a(this),b=new CKEDITOR.dom.nodeList(this.$.querySelectorAll(f(this,b)));c();return b},findOne:function(b){var c=a(this),b=this.$.querySelector(f(this,b));c();return b?new CKEDITOR.dom.element(b):null},forEach:function(a,b,c){if(!c&&(!b||this.type==b))var f=a(this);if(f!==false)for(var c=this.getChildren(),j=0;j<c.count();j++){f=c.getItem(j);f.type==CKEDITOR.NODE_ELEMENT?f.forEach(a,b):(!b||f.type==b)&&a(f)}}});var c={width:["border-left-width", +"border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]};CKEDITOR.dom.element.prototype.setSize=function(a,c,f){if(typeof c=="number"){if(f&&(!CKEDITOR.env.ie||!CKEDITOR.env.quirks))c=c-b.call(this,a);this.setStyle(a,c+"px")}};CKEDITOR.dom.element.prototype.getSize=function(a,c){var f=Math.max(this.$["offset"+CKEDITOR.tools.capitalize(a)],this.$["client"+CKEDITOR.tools.capitalize(a)])||0;c&&(f=f-b.call(this,a));return f}})(); +CKEDITOR.dom.documentFragment=function(a){a=a||CKEDITOR.document;this.$=a.type==CKEDITOR.NODE_DOCUMENT?a.$.createDocumentFragment():a}; +CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,insertAfterNode:function(a){a=a.$;a.parentNode.insertBefore(this.$,a.nextSibling)}},!0,{append:1,appendBogus:1,getFirst:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1}); +(function(){function a(a,b){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed){this.end();return null}c.optimize()}var d,e=c.startContainer;d=c.endContainer;var m=c.startOffset,f=c.endOffset,h,o=this.guard,l=this.type,p=a?"getPreviousSourceNode":"getNextSourceNode";if(!a&&!this._.guardLTR){var r=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),n=d.type==CKEDITOR.NODE_ELEMENT?d.getChild(f):d.getNext();this._.guardLTR=function(a,b){return(!b||!r.equals(a))&&(!n|| +!a.equals(n))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}if(a&&!this._.guardRTL){var g=e.type==CKEDITOR.NODE_ELEMENT?e:e.getParent(),C=e.type==CKEDITOR.NODE_ELEMENT?m?e.getChild(m-1):null:e.getPrevious();this._.guardRTL=function(a,b){return(!b||!g.equals(a))&&(!C||!a.equals(C))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}var j=a?this._.guardRTL:this._.guardLTR;h=o?function(a,b){return j(a,b)===false?false:o(a,b)}:j;if(this.current)d=this.current[p](false,l,h);else{if(a)d.type== +CKEDITOR.NODE_ELEMENT&&(d=f>0?d.getChild(f-1):h(d,true)===false?null:d.getPreviousSourceNode(true,l,h));else{d=e;if(d.type==CKEDITOR.NODE_ELEMENT&&!(d=d.getChild(m)))d=h(e,true)===false?null:e.getNextSourceNode(true,l,h)}d&&h(d)===false&&(d=null)}for(;d&&!this._.end;){this.current=d;if(!this.evaluator||this.evaluator(d)!==false){if(!b)return d}else if(b&&this.evaluator)return false;d=d[p](false,l,h)}this.end();return this.current=null}function f(b){for(var c,d=null;c=a.call(this,b);)d=c;return d} +function b(a){if(g(a))return false;if(a.type==CKEDITOR.NODE_TEXT)return true;if(a.type==CKEDITOR.NODE_ELEMENT){if(a.is(CKEDITOR.dtd.$inline)||a.is("hr")||a.getAttribute("contenteditable")=="false")return true;var b;if(b=!CKEDITOR.env.needsBrFiller)if(b=a.is(m))a:{b=0;for(var c=a.getChildCount();b<c;++b)if(!g(a.getChild(b))){b=false;break a}b=true}if(b)return true}return false}CKEDITOR.dom.walker=CKEDITOR.tools.createClass({$:function(a){this.range=a;this._={}},proto:{end:function(){this._.end=1}, +next:function(){return a.call(this)},previous:function(){return a.call(this,1)},checkForward:function(){return a.call(this,0,1)!==false},checkBackward:function(){return a.call(this,1,1)!==false},lastForward:function(){return f.call(this)},lastBackward:function(){return f.call(this,1)},reset:function(){delete this.current;this._={}}}});var c={block:1,"list-item":1,table:1,"table-row-group":1,"table-header-group":1,"table-footer-group":1,"table-row":1,"table-column-group":1,"table-column":1,"table-cell":1, +"table-caption":1},e={absolute:1,fixed:1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(a){return this.getComputedStyle("float")=="none"&&!(this.getComputedStyle("position")in e)&&c[this.getComputedStyle("display")]?true:!!(this.is(CKEDITOR.dtd.$block)||a&&this.is(a))};CKEDITOR.dom.walker.blockBoundary=function(a){return function(b){return!(b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary(a))}};CKEDITOR.dom.walker.listItemBoundary=function(){return this.blockBoundary({br:1})};CKEDITOR.dom.walker.bookmark= +function(a,b){function c(a){return a&&a.getName&&a.getName()=="span"&&a.data("cke-bookmark")}return function(d){var e,m;e=d&&d.type!=CKEDITOR.NODE_ELEMENT&&(m=d.getParent())&&c(m);e=a?e:e||c(d);return!!(b^e)}};CKEDITOR.dom.walker.whitespaces=function(a){return function(b){var c;b&&b.type==CKEDITOR.NODE_TEXT&&(c=!CKEDITOR.tools.trim(b.getText())||CKEDITOR.env.webkit&&b.getText()=="​");return!!(a^c)}};CKEDITOR.dom.walker.invisible=function(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.env.webkit? +1:0;return function(d){if(b(d))d=1;else{d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent());d=d.$.offsetWidth<=c}return!!(a^d)}};CKEDITOR.dom.walker.nodeType=function(a,b){return function(c){return!!(b^c.type==a)}};CKEDITOR.dom.walker.bogus=function(a){function b(a){return!h(a)&&!k(a)}return function(c){var e=CKEDITOR.env.needsBrFiller?c.is&&c.is("br"):c.getText&&d.test(c.getText());if(e){e=c.getParent();c=c.getNext(b);e=e.isBlockBoundary()&&(!c||c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary())}return!!(a^ +e)}};CKEDITOR.dom.walker.temp=function(a){return function(b){b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b=b&&b.hasAttribute("data-cke-temp");return!!(a^b)}};var d=/^[\t\r\n ]*(?: |\xa0)$/,h=CKEDITOR.dom.walker.whitespaces(),k=CKEDITOR.dom.walker.bookmark(),j=CKEDITOR.dom.walker.temp();CKEDITOR.dom.walker.ignored=function(a){return function(b){b=h(b)||k(b)||j(b);return!!(a^b)}};var g=CKEDITOR.dom.walker.ignored(),m=function(a){var b={},c;for(c in a)CKEDITOR.dtd[c]["#"]&&(b[c]=1);return b}(CKEDITOR.dtd.$block); +CKEDITOR.dom.walker.editable=function(a){return function(c){return!!(a^b(c))}};CKEDITOR.dom.element.prototype.getBogus=function(){var a=this;do a=a.getPreviousSourceNode();while(k(a)||h(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$inline)&&!a.is(CKEDITOR.dtd.$empty));return a&&(CKEDITOR.env.needsBrFiller?a.is&&a.is("br"):a.getText&&d.test(a.getText()))?a:false}})(); +CKEDITOR.dom.range=function(a){this.endOffset=this.endContainer=this.startOffset=this.startContainer=null;this.collapsed=true;var f=a instanceof CKEDITOR.dom.document;this.document=f?a:a.getDocument();this.root=f?a.getBody():a}; +(function(){function a(){var a=false,b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(true),e=CKEDITOR.dom.walker.bogus();return function(f){if(c(f)||b(f))return true;if(e(f)&&!a)return a=true;return f.type==CKEDITOR.NODE_TEXT&&(f.hasAscendant("pre")||CKEDITOR.tools.trim(f.getText()).length)||f.type==CKEDITOR.NODE_ELEMENT&&!f.is(d)?false:true}}function f(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?true:!a&&h(d)|| +d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}}function b(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&g(a)&&(b=a);return j(a)&&!(h(a)&&a.equals(b))})}}var c=function(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset},e=function(a,b,c,d){a.optimizeBookmark();var e=a.startContainer,f=a.endContainer,i=a.startOffset,A=a.endOffset,h,o;if(f.type==CKEDITOR.NODE_TEXT)f=f.split(A); +else if(f.getChildCount()>0)if(A>=f.getChildCount()){f=f.append(a.document.createText(""));o=true}else f=f.getChild(A);if(e.type==CKEDITOR.NODE_TEXT){e.split(i);e.equals(f)&&(f=e.getNext())}else if(i)if(i>=e.getChildCount()){e=e.append(a.document.createText(""));h=true}else e=e.getChild(i).getPrevious();else{e=e.append(a.document.createText(""),1);h=true}var i=e.getParents(),A=f.getParents(),l,p,r;for(l=0;l<i.length;l++){p=i[l];r=A[l];if(!p.equals(r))break}for(var n=c,g,C,j,F=l;F<i.length;F++){g= +i[F];n&&!g.equals(e)&&(C=n.append(g.clone()));for(g=g.getNext();g;){if(g.equals(A[F])||g.equals(f))break;j=g.getNext();if(b==2)n.append(g.clone(true));else{g.remove();b==1&&n.append(g)}g=j}n&&(n=C)}n=c;for(c=l;c<A.length;c++){g=A[c];b>0&&!g.equals(f)&&(C=n.append(g.clone()));if(!i[c]||g.$.parentNode!=i[c].$.parentNode)for(g=g.getPrevious();g;){if(g.equals(i[c])||g.equals(e))break;j=g.getPrevious();if(b==2)n.$.insertBefore(g.$.cloneNode(true),n.$.firstChild);else{g.remove();b==1&&n.$.insertBefore(g.$, +n.$.firstChild)}g=j}n&&(n=C)}if(b==2){p=a.startContainer;if(p.type==CKEDITOR.NODE_TEXT){p.$.data=p.$.data+p.$.nextSibling.data;p.$.parentNode.removeChild(p.$.nextSibling)}a=a.endContainer;if(a.type==CKEDITOR.NODE_TEXT&&a.$.nextSibling){a.$.data=a.$.data+a.$.nextSibling.data;a.$.parentNode.removeChild(a.$.nextSibling)}}else{if(p&&r&&(e.$.parentNode!=p.$.parentNode||f.$.parentNode!=r.$.parentNode)){b=r.getIndex();h&&r.$.parentNode==e.$.parentNode&&b--;if(d&&p.type==CKEDITOR.NODE_ELEMENT){d=CKEDITOR.dom.element.createFromHtml('<span data-cke-bookmark="1" style="display:none"> </span>', +a.document);d.insertAfter(p);p.mergeSiblings(false);a.moveToBookmark({startNode:d})}else a.setStart(r.getParent(),b)}a.collapse(true)}h&&e.remove();o&&f.$.parentNode&&f.remove()},d={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},h=CKEDITOR.dom.walker.bogus(),k=/^[\t\r\n ]*(?: |\xa0)$/,j=CKEDITOR.dom.walker.editable(),g=CKEDITOR.dom.walker.ignored(true);CKEDITOR.dom.range.prototype= +{clone:function(){var a=new CKEDITOR.dom.range(this.root);a._setStartContainer(this.startContainer);a.startOffset=this.startOffset;a._setEndContainer(this.endContainer);a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){if(a){this._setEndContainer(this.startContainer);this.endOffset=this.startOffset}else{this._setStartContainer(this.endContainer);this.startOffset=this.endOffset}this.collapsed=true},cloneContents:function(){var a=new CKEDITOR.dom.documentFragment(this.document); +this.collapsed||e(this,2,a);return a},deleteContents:function(a){this.collapsed||e(this,0,null,a)},extractContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||e(this,1,b,a);return b},createBookmark:function(a){var b,c,d,e,f=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml(" ");if(a){d="cke_bm_"+CKEDITOR.tools.getNextNumber();b.setAttribute("id",d+(f?"C":"S"))}if(!f){c=b.clone();c.setHtml(" "); +a&&c.setAttribute("id",d+"E");e=this.clone();e.collapse();e.insertNode(c)}e=this.clone();e.collapse(true);e.insertNode(b);if(c){this.setStartAfter(b);this.setEndBefore(c)}else this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?d+(f?"C":"S"):b,endNode:a?d+"E":c,serializable:a,collapsed:f}},createBookmark2:function(){function a(c){var d=c.container,e=c.offset,f;f=d;var m=e;f=f.type!=CKEDITOR.NODE_ELEMENT||m===0||m==f.getChildCount()?0:f.getChild(m-1).type==CKEDITOR.NODE_TEXT&&f.getChild(m).type== +CKEDITOR.NODE_TEXT;if(f){d=d.getChild(e-1);e=d.getLength()}d.type==CKEDITOR.NODE_ELEMENT&&e>1&&(e=d.getChild(e-1).getIndex(true)+1);if(d.type==CKEDITOR.NODE_TEXT){f=d;for(m=0;(f=f.getPrevious())&&f.type==CKEDITOR.NODE_TEXT;)m=m+f.getLength();f=m;if(d.getText())e=e+f;else{m=d.getPrevious(b);if(f){e=f;d=m?m.getNext():d.getParent().getFirst()}else{d=d.getParent();e=m?m.getIndex(true)+1:0}}}c.container=d;c.offset=e}var b=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT,true);return function(b){var c=this.collapsed, +d={container:this.startContainer,offset:this.startOffset},e={container:this.endContainer,offset:this.endOffset};if(b){a(d);c||a(e)}return{start:d.container.getAddress(b),end:c?null:e.container.getAddress(b),startOffset:d.offset,endOffset:e.offset,normalized:b,collapsed:c,is2:true}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset,d=a.end&&this.document.getByAddress(a.end,a.normalized),a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a): +this.collapse(true)}else{b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode;a=c?this.document.getById(a.endNode):a.endNode;this.setStartBefore(b);b.remove();if(a){this.setEndBefore(a);a.remove()}else this.collapse(true)}},getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,d=this.endOffset,e;if(a.type==CKEDITOR.NODE_ELEMENT){e=a.getChildCount();if(e>c)a=a.getChild(c);else if(e<1)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild; +a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}}if(b.type==CKEDITOR.NODE_ELEMENT){e=b.getChildCount();if(e>d)b=b.getChild(d).getPreviousSourceNode(true);else if(e<1)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b=b.lastChild;b=new CKEDITOR.dom.node(b)}}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer,d=this.endContainer,c=c.equals(d)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset- +1?c.getChild(this.startOffset):c:c.getCommonAncestor(d);return b&&!c.is?c.getParent():c},optimize:function(){var a=this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setStartAfter(a):this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,b=this.endContainer;a.is&&(a.is("span")&&a.data("cke-bookmark"))&& +this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&(b.is&&b.is("span")&&b.data("cke-bookmark"))&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,b){var c=this.startContainer,d=this.startOffset,e=this.collapsed;if((!a||e)&&c&&c.type==CKEDITOR.NODE_TEXT){if(d)if(d>=c.getLength()){d=c.getIndex()+1;c=c.getParent()}else{var f=c.split(d),d=c.getIndex()+1,c=c.getParent();if(this.startContainer.equals(this.endContainer))this.setEnd(f,this.endOffset-this.startOffset);else if(c.equals(this.endContainer))this.endOffset= +this.endOffset+1}else{d=c.getIndex();c=c.getParent()}this.setStart(c,d);if(e){this.collapse(true);return}}c=this.endContainer;d=this.endOffset;if(!b&&!e&&c&&c.type==CKEDITOR.NODE_TEXT){if(d){d>=c.getLength()||c.split(d);d=c.getIndex()+1}else d=c.getIndex();c=c.getParent();this.setEnd(c,d)}},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=RegExp(/[^\s\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var e=1;case CKEDITOR.ENLARGE_ELEMENT:if(this.collapsed)break; +var f=this.getCommonAncestor(),i=this.root,h,g,o,l,p,r=false,n,j;n=this.startContainer;var C=this.startOffset;if(n.type==CKEDITOR.NODE_TEXT){if(C){n=!CKEDITOR.tools.trim(n.substring(0,C)).length&&n;r=!!n}if(n&&!(l=n.getPrevious()))o=n.getParent()}else{C&&(l=n.getChild(C-1)||n.getLast());l||(o=n)}for(o=c(o);o||l;){if(o&&!l){!p&&o.equals(f)&&(p=true);if(e?o.isBlockBoundary():!i.contains(o))break;if(!r||o.getComputedStyle("display")!="inline"){r=false;p?h=o:this.setStartBefore(o)}l=o.getPrevious()}for(;l;){n= +false;if(l.type==CKEDITOR.NODE_COMMENT)l=l.getPrevious();else{if(l.type==CKEDITOR.NODE_TEXT){j=l.getText();d.test(j)&&(l=null);n=/[\s\ufeff]$/.test(j)}else if((l.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||b&&l.is("br"))&&!l.data("cke-bookmark"))if(r&&CKEDITOR.dtd.$removeEmpty[l.getName()]){j=l.getText();if(d.test(j))l=null;else for(var C=l.$.getElementsByTagName("*"),k=0,F;F=C[k++];)if(!CKEDITOR.dtd.$removeEmpty[F.nodeName.toLowerCase()]){l=null;break}l&&(n=!!j.length)}else l=null;n&&(r?p?h=o:o&&this.setStartBefore(o): +r=true);if(l){n=l.getPrevious();if(!o&&!n){o=l;l=null;break}l=n}else o=null}}o&&(o=c(o.getParent()))}n=this.endContainer;C=this.endOffset;o=l=null;p=r=false;var K=function(a,b){var c=new CKEDITOR.dom.range(i);c.setStart(a,b);c.setEndAt(i,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),e;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};e=c.next();){if(e.type!=CKEDITOR.NODE_TEXT)return false;j=e!=a?e.getText():e.substring(b);if(d.test(j))return false}return true}; +if(n.type==CKEDITOR.NODE_TEXT)if(CKEDITOR.tools.trim(n.substring(C)).length)r=true;else{r=!n.getLength();if(C==n.getLength()){if(!(l=n.getNext()))o=n.getParent()}else K(n,C)&&(o=n.getParent())}else(l=n.getChild(C))||(o=n);for(;o||l;){if(o&&!l){!p&&o.equals(f)&&(p=true);if(e?o.isBlockBoundary():!i.contains(o))break;if(!r||o.getComputedStyle("display")!="inline"){r=false;p?g=o:o&&this.setEndAfter(o)}l=o.getNext()}for(;l;){n=false;if(l.type==CKEDITOR.NODE_TEXT){j=l.getText();K(l,0)||(l=null);n=/^[\s\ufeff]/.test(j)}else if(l.type== +CKEDITOR.NODE_ELEMENT){if((l.$.offsetWidth>0||b&&l.is("br"))&&!l.data("cke-bookmark"))if(r&&CKEDITOR.dtd.$removeEmpty[l.getName()]){j=l.getText();if(d.test(j))l=null;else{C=l.$.getElementsByTagName("*");for(k=0;F=C[k++];)if(!CKEDITOR.dtd.$removeEmpty[F.nodeName.toLowerCase()]){l=null;break}}l&&(n=!!j.length)}else l=null}else n=1;n&&r&&(p?g=o:this.setEndAfter(o));if(l){n=l.getNext();if(!o&&!n){o=l;l=null;break}l=n}else o=null}o&&(o=c(o.getParent()))}if(h&&g){f=h.contains(g)?g:h;this.setStartBefore(f); +this.setEndAfter(f)}break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:o=new CKEDITOR.dom.range(this.root);i=this.root;o.setStartAt(i,CKEDITOR.POSITION_AFTER_START);o.setEnd(this.startContainer,this.startOffset);o=new CKEDITOR.dom.walker(o);var I,v,G=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),z=null,B=function(a){if(a.type==CKEDITOR.NODE_ELEMENT&&a.getAttribute("contenteditable")=="false")if(z){if(z.equals(a)){z=null;return}}else z= +a;else if(z)return;var b=G(a);b||(I=a);return b},e=function(a){var b=B(a);!b&&(a.is&&a.is("br"))&&(v=a);return b};o.guard=B;o=o.lastBackward();I=I||i;this.setStartAt(I,!I.is("br")&&(!o&&this.checkStartOfBlock()||o&&I.contains(o))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){o=this.clone();o=new CKEDITOR.dom.walker(o);var x=CKEDITOR.dom.walker.whitespaces(),E=CKEDITOR.dom.walker.bookmark();o.evaluator=function(a){return!x(a)&&!E(a)};if((o=o.previous())&& +o.type==CKEDITOR.NODE_ELEMENT&&o.is("br"))break}o=this.clone();o.collapse();o.setEndAt(i,CKEDITOR.POSITION_BEFORE_END);o=new CKEDITOR.dom.walker(o);o.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?e:B;I=z=v=null;o=o.lastForward();I=I||i;this.setEndAt(I,!o&&this.checkEndOfBlock()||o&&I.contains(o)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);v&&this.setEndAfter(v)}},shrink:function(a,b,c){if(!this.collapsed){var a=a||CKEDITOR.SHRINK_TEXT,d=this.clone(),e=this.startContainer,f=this.endContainer, +i=this.startOffset,h=this.endOffset,g=1,o=1;if(e&&e.type==CKEDITOR.NODE_TEXT)if(i)if(i>=e.getLength())d.setStartAfter(e);else{d.setStartBefore(e);g=0}else d.setStartBefore(e);if(f&&f.type==CKEDITOR.NODE_TEXT)if(h)if(h>=f.getLength())d.setEndAfter(f);else{d.setEndAfter(f);o=0}else d.setEndBefore(f);var d=new CKEDITOR.dom.walker(d),l=CKEDITOR.dom.walker.bookmark();d.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var p;d.guard=function(b,d){if(l(b))return true; +if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||d&&b.equals(p)||c===false&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return false;!d&&b.type==CKEDITOR.NODE_ELEMENT&&(p=b);return true};if(g)(e=d[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(e,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);if(o){d.reset();(d=d[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(d, +b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END)}return!(!g&&!o)}},insertNode:function(a){this.optimizeBookmark();this.trim(false,true);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(true)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer, +a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex();a=a.getParent()}this._setStartContainer(a);this.startOffset=b;if(!this.endContainer){this._setEndContainer(a);this.endOffset=b}c(this)},setEnd:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex()+1;a=a.getParent()}this._setEndContainer(a); +this.endOffset=b;if(!this.startContainer){this._setStartContainer(a);this.startOffset=b}c(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setStart(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type== +CKEDITOR.NODE_TEXT?this.setStart(a,a.getLength()):this.setStart(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(a)}c(this)},setEndAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setEnd(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setEnd(a,a.getLength()):this.setEnd(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(a);break; +case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(a)}c(this)},fixBlock:function(a,b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d);d.trim();d.appendBogus();this.insertNode(d);this.moveToBookmark(c);return d},splitBlock:function(a){var b=new CKEDITOR.dom.elementPath(this.startContainer,this.root),c=new CKEDITOR.dom.elementPath(this.endContainer,this.root),d=b.block,e=c.block,f=null;if(!b.blockLimit.equals(c.blockLimit))return null; +if(a!="br"){if(!d){d=this.fixBlock(true,a);e=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block}e||(e=this.fixBlock(false,a))}a=d&&this.checkStartOfBlock();b=e&&this.checkEndOfBlock();this.deleteContents();if(d&&d.equals(e))if(b){f=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(e,CKEDITOR.POSITION_AFTER_END);e=null}else if(a){f=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START);d=null}else{e= +this.splitElement(d);d.is("ul","ol")||d.appendBogus()}return{previousBlock:d,nextBlock:e,wasStartOfBlock:a,wasEndOfBlock:b,elementPath:f}},splitElement:function(a){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var b=this.extractContents(),c=a.clone(false);b.appendTo(c);c.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return c},removeEmptyBlocksAtEnd:function(){function a(d){return function(a){return b(a)||(c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable())|| +d.is("table")&&a.is("caption")?false:true}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(false);return function(b){for(var c=this.createBookmark(),d=this[b?"endPath":"startPath"](),e=d.block||d.blockLimit,f;e&&!e.equals(d.root)&&!e.getFirst(a(e));){f=e.getParent();this[b?"setEndAt":"setStartAt"](e,CKEDITOR.POSITION_AFTER_END);e.remove(1);e=f}this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer, +this.root)},checkBoundaryOfElement:function(a,b){var c=b==CKEDITOR.START,d=this.clone();d.collapse(c);d[c?"setStartAt":"setEndAt"](a,c?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);d=new CKEDITOR.dom.walker(d);d.evaluator=f(c);return d[c?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var b=this.startContainer,c=this.startOffset;if(CKEDITOR.env.ie&&c&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.ltrim(b.substring(0,c));k.test(b)&&this.trim(0,1)}this.trim();b=new CKEDITOR.dom.elementPath(this.startContainer, +this.root);c=this.clone();c.collapse(true);c.setStartAt(b.block||b.blockLimit,CKEDITOR.POSITION_AFTER_START);b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkBackward()},checkEndOfBlock:function(){var b=this.endContainer,c=this.endOffset;if(CKEDITOR.env.ie&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.rtrim(b.substring(c));k.test(b)&&this.trim(1,0)}this.trim();b=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(false);c.setEndAt(b.block||b.blockLimit,CKEDITOR.POSITION_BEFORE_END); +b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkForward()},getPreviousNode:function(a,b,c){var d=this.clone();d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type== +CKEDITOR.NODE_ELEMENT){if(b.getAttribute("contentEditable")=="false"&&!b.data("cke-editable"))return 0;if(b.is("html")||b.getAttribute("contentEditable")=="true"&&(b.contains(c)||b.equals(c)))break}b=b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(false)){this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);return true}for(var c= +0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&&this.checkEndOfBlock()&&k.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable()){this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START);c=1}else if(b&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START); +else if(a.getAttribute("contenteditable")=="false"&&a.is(CKEDITOR.dtd.$block)){this.setStartBefore(a);this.setEndAfter(a);return true}var d=a,e=c,f=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(false)&&(f=d[b?"getLast":"getFirst"](g));!e&&!f&&(f=d[b?"getPrevious":"getNext"](g));a=f}return!!c},moveToClosestEditablePosition:function(a,b){var c=new CKEDITOR.dom.range(this.root),d=0,e,f=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];c.moveToPosition(a,f[b?0:1]);if(a.is(CKEDITOR.dtd.$block)){if(e= +c[b?"getNextEditableNode":"getPreviousEditableNode"]()){d=1;if(e.type==CKEDITOR.NODE_ELEMENT&&e.is(CKEDITOR.dtd.$block)&&e.getAttribute("contenteditable")=="false"){c.setStartAt(e,CKEDITOR.POSITION_BEFORE_START);c.setEndAt(e,CKEDITOR.POSITION_AFTER_END)}else c.moveToPosition(e,f[b?1:0])}}else d=1;d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,true)},getEnclosedNode:function(){var a= +this.clone();a.optimize();if(a.startContainer.type!=CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(false,true),c=CKEDITOR.dom.walker.whitespaces(true);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a= +this.endContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:b(),getPreviousEditableNode:b(1),scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("<span> </span>",this.document),b,c,d,e=this.clone();e.optimize();if(d=e.startContainer.type==CKEDITOR.NODE_TEXT){c=e.startContainer.getText();b=e.startContainer.split(e.startOffset);a.insertAfter(e.startContainer)}else e.insertNode(a);a.scrollIntoView();if(d){e.startContainer.setText(c); +b.remove()}a.remove()},_setStartContainer:function(a){this.startContainer=a},_setEndContainer:function(a){this.endContainer=a}}})();CKEDITOR.POSITION_AFTER_START=1;CKEDITOR.POSITION_BEFORE_END=2;CKEDITOR.POSITION_BEFORE_START=3;CKEDITOR.POSITION_AFTER_END=4;CKEDITOR.ENLARGE_ELEMENT=1;CKEDITOR.ENLARGE_BLOCK_CONTENTS=2;CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3;CKEDITOR.ENLARGE_INLINE=4;CKEDITOR.START=1;CKEDITOR.END=2;CKEDITOR.SHRINK_ELEMENT=1;CKEDITOR.SHRINK_TEXT=2;"use strict"; +(function(){function a(a){if(!(arguments.length<1)){this.range=a;this.forceBrBreak=0;this.enlargeBr=1;this.enforceRealBlocks=0;this._||(this._={})}}function f(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")=="true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function b(a,c,d,e){a:{e==null&&(e=f(d));for(var h;h=e.shift();)if(h.getDtd().p){e={element:h,remaining:e};break a}e=null}if(!e)return 0;if((h=CKEDITOR.filter.instances[e.element.data("cke-filter")])&& +!h.check(c))return b(a,c,d,e.remaining);c=new CKEDITOR.dom.range(e.element);c.selectNodeContents(e.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=h;a._.nestedEditable={element:e.element,container:d,remaining:e.remaining,iterator:c};return 1}function c(a,b,c){if(!b)return false;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b,c?CKEDITOR.START:CKEDITOR.END)}var e=/^[\r\n\t ]+$/,d=CKEDITOR.dom.walker.bookmark(false,true), +h=CKEDITOR.dom.walker.whitespaces(true),k=function(a){return d(a)&&h(a)},j={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var f,h,s,w,q,a=a||"p";if(this._.nestedEditable){if(f=this._.nestedEditable.iterator.getNextParagraph(a)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return f}this.activeFilter=this.filter;if(b(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return this._.nestedEditable.iterator.getNextParagraph(a)}this._.nestedEditable= +null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var t=this.range.clone();h=t.startPath();var i=t.endPath(),A=!t.collapsed&&c(t,h.block),u=!t.collapsed&&c(t,i.block,1);t.shrink(CKEDITOR.SHRINK_ELEMENT,true);A&&t.setStartAt(h.block,CKEDITOR.POSITION_BEFORE_END);u&&t.setEndAt(i.block,CKEDITOR.POSITION_AFTER_START);h=t.endContainer.hasAscendant("pre",true)||t.startContainer.hasAscendant("pre",true);t.enlarge(this.forceBrBreak&&!h||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS: +CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(!t.collapsed){h=new CKEDITOR.dom.walker(t.clone());i=CKEDITOR.dom.walker.bookmark(true,true);h.evaluator=i;this._.nextNode=h.next();h=new CKEDITOR.dom.walker(t.clone());h.evaluator=i;h=h.previous();this._.lastNode=h.getNextSourceNode(true,null,t.root);if(this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()){i=this.range.clone();i.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END); +if(i.checkEndOfBlock()){i=new CKEDITOR.dom.elementPath(i.endContainer,i.root);this._.lastNode=(i.block||i.blockLimit).getNextSourceNode(true)}}if(!this._.lastNode||!t.root.contains(this._.lastNode)){this._.lastNode=this._.docEndMarker=t.document.createText("");this._.lastNode.insertAfter(h)}t=null}this._.started=1;h=t}i=this._.nextNode;t=this._.lastNode;for(this._.nextNode=null;i;){var A=0,u=i.hasAscendant("pre"),o=i.type!=CKEDITOR.NODE_ELEMENT,l=0;if(o)i.type==CKEDITOR.NODE_TEXT&&e.test(i.getText())&& +(o=0);else{var p=i.getName();if(CKEDITOR.dtd.$block[p]&&i.getAttribute("contenteditable")=="false"){f=i;b(this,a,f);break}else if(i.isBlockBoundary(this.forceBrBreak&&!u&&{br:1})){if(p=="br")o=1;else if(!h&&!i.getChildCount()&&p!="hr"){f=i;s=i.equals(t);break}if(h){h.setEndAt(i,CKEDITOR.POSITION_BEFORE_START);if(p!="br")this._.nextNode=i}A=1}else{if(i.getFirst()){if(!h){h=this.range.clone();h.setStartAt(i,CKEDITOR.POSITION_BEFORE_START)}i=i.getFirst();continue}o=1}}if(o&&!h){h=this.range.clone(); +h.setStartAt(i,CKEDITOR.POSITION_BEFORE_START)}s=(!A||o)&&i.equals(t);if(h&&!A)for(;!i.getNext(k)&&!s;){p=i.getParent();if(p.isBlockBoundary(this.forceBrBreak&&!u&&{br:1})){A=1;o=0;s||p.equals(t);h.setEndAt(p,CKEDITOR.POSITION_BEFORE_END);break}i=p;o=1;s=i.equals(t);l=1}o&&h.setEndAt(i,CKEDITOR.POSITION_AFTER_END);i=this._getNextSourceNode(i,l,t);if((s=!i)||A&&h)break}if(!f){if(!h){this._.docEndMarker&&this._.docEndMarker.remove();return this._.nextNode=null}f=new CKEDITOR.dom.elementPath(h.startContainer, +h.root);i=f.blockLimit;A={div:1,th:1,td:1};f=f.block;if(!f&&i&&!this.enforceRealBlocks&&A[i.getName()]&&h.checkStartOfBlock()&&h.checkEndOfBlock()&&!i.equals(h.root))f=i;else if(!f||this.enforceRealBlocks&&f.is(j)){f=this.range.document.createElement(a);h.extractContents().appendTo(f);f.trim();h.insertNode(f);w=q=true}else if(f.getName()!="li"){if(!h.checkStartOfBlock()||!h.checkEndOfBlock()){f=f.clone(false);h.extractContents().appendTo(f);f.trim();q=h.splitBlock();w=!q.wasStartOfBlock;q=!q.wasEndOfBlock; +h.insertNode(f)}}else if(!s)this._.nextNode=f.equals(t)?null:this._getNextSourceNode(h.getBoundaryNodes().endNode,1,t)}if(w)(w=f.getPrevious())&&w.type==CKEDITOR.NODE_ELEMENT&&(w.getName()=="br"?w.remove():w.getLast()&&w.getLast().$.nodeName.toLowerCase()=="br"&&w.getLast().remove());if(q)(w=f.getLast())&&w.type==CKEDITOR.NODE_ELEMENT&&w.getName()=="br"&&(!CKEDITOR.env.needsBrFiller||w.getPrevious(d)||w.getNext(d))&&w.remove();if(!this._.nextNode)this._.nextNode=s||f.equals(t)||!t?null:this._getNextSourceNode(f, +1,t);return f},_getNextSourceNode:function(a,b,c){function e(a){return!(a.equals(c)||a.equals(f))}for(var f=this.range.root,a=a.getNextSourceNode(b,null,e);!d(a);)a=a.getNextSourceNode(b,null,e);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}})(); +CKEDITOR.command=function(a,f){this.uiItems=[];this.exec=function(b){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return false;this.editorFocus&&a.focus();return this.fire("exec")===false?true:f.exec.call(this,a,b)!==false};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return true;if(this.context&&!b.isContextFor(this.context)){this.disable();return true}if(!this.checkAllowed(true)){this.disable();return true}this.startDisabled||this.enable();this.modes&&!this.modes[a.mode]&& +this.disable();return this.fire("refresh",{editor:a,path:b})===false?true:f.refresh&&f.refresh.apply(this,arguments)!==false};var b;this.checkAllowed=function(c){return!c&&typeof b=="boolean"?b:b=a.activeFilter.checkFeature(this)};CKEDITOR.tools.extend(this,f,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!f.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)}; +CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(!this.preserveState||typeof this.previousState=="undefined"?CKEDITOR.TRISTATE_OFF:this.previousState)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||a!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return false;this.previousState=this.state;this.state=a;this.fire("state");return true},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF? +this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3; +CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"<!DOCTYPE html>",bodyId:"",bodyClass:"",fullPage:!1,height:200,extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]}; +(function(){function a(a,b,c,d,e){var f,p,a=[];for(f in b){p=b[f];p=typeof p=="boolean"?{}:typeof p=="function"?{match:p}:K(p);if(f.charAt(0)!="$")p.elements=f;if(c)p.featureName=c.toLowerCase();var i=p;i.elements=h(i.elements,/\s+/)||null;i.propertiesOnly=i.propertiesOnly||i.elements===true;var l=/\s*,\s*/,r=void 0;for(r in z){i[r]=h(i[r],l)||null;var x=i,n=B[r],v=h(i[B[r]],l),q=i[r],E=[],g=true,o=void 0;v?g=false:v={};for(o in q)if(o.charAt(0)=="!"){o=o.slice(1);E.push(o);v[o]=true;g=false}for(;o= +E.pop();){q[o]=q["!"+o];delete q["!"+o]}x[n]=(g?false:v)||null}i.match=i.match||null;d.push(p);a.push(p)}for(var b=e.elements,e=e.generic,C,c=0,d=a.length;c<d;++c){f=K(a[c]);p=f.classes===true||f.styles===true||f.attributes===true;i=f;r=n=l=void 0;for(l in z)i[l]=A(i[l]);x=true;for(r in B){l=B[r];n=i[l];v=[];q=void 0;for(q in n)q.indexOf("*")>-1?v.push(RegExp("^"+q.replace(/\*/g,".*")+"$")):v.push(q);n=v;if(n.length){i[l]=n;x=false}}i.nothingRequired=x;i.noProperties=!(i.attributes||i.classes||i.styles); +if(f.elements===true||f.elements===null)e[p?"unshift":"push"](f);else{i=f.elements;delete f.elements;for(C in i)if(b[C])b[C][p?"unshift":"push"](f);else b[C]=[f]}}}function f(a,c,d,e){if(!a.match||a.match(c))if(e||k(a,c)){if(!a.propertiesOnly)d.valid=true;if(!d.allAttributes)d.allAttributes=b(a.attributes,c.attributes,d.validAttributes);if(!d.allStyles)d.allStyles=b(a.styles,c.styles,d.validStyles);if(!d.allClasses){a=a.classes;c=c.classes;e=d.validClasses;if(a)if(a===true)a=true;else{for(var f=0, +p=c.length,i;f<p;++f){i=c[f];e[i]||(e[i]=a(i))}a=false}else a=false;d.allClasses=a}}}function b(a,b,c){if(!a)return false;if(a===true)return true;for(var d in b)c[d]||(c[d]=a(d));return false}function c(a,b,c){if(!a.match||a.match(b)){if(a.noProperties)return false;c.hadInvalidAttribute=e(a.attributes,b.attributes)||c.hadInvalidAttribute;c.hadInvalidStyle=e(a.styles,b.styles)||c.hadInvalidStyle;a=a.classes;b=b.classes;if(a){for(var d=false,f=a===true,p=b.length;p--;)if(f||a(b[p])){b.splice(p,1);d= +true}a=d}else a=false;c.hadInvalidClass=a||c.hadInvalidClass}}function e(a,b){if(!a)return false;var c=false,d=a===true,e;for(e in b)if(d||a(e)){delete b[e];c=true}return c}function d(a,b,c){if(a.disabled||a.customConfig&&!c||!b)return false;a._.cachedChecks={};return true}function h(a,b){if(!a)return false;if(a===true)return a;if(typeof a=="string"){a=I(a);return a=="*"?true:CKEDITOR.tools.convertArrayToObject(a.split(b))}if(CKEDITOR.tools.isArray(a))return a.length?CKEDITOR.tools.convertArrayToObject(a): +false;var c={},d=0,e;for(e in a){c[e]=a[e];d++}return d?c:false}function k(a,b){if(a.nothingRequired)return true;var c,d,e,f;if(e=a.requiredClasses){f=b.classes;for(c=0;c<e.length;++c){d=e[c];if(typeof d=="string"){if(CKEDITOR.tools.indexOf(f,d)==-1)return false}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(f,d))return false}}return j(b.styles,a.requiredStyles)&&j(b.attributes,a.requiredAttributes)}function j(a,b){if(!b)return true;for(var c=0,d;c<b.length;++c){d=b[c];if(typeof d=="string"){if(!(d in +a))return false}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,d))return false}return true}function g(a){if(!a)return{};for(var a=a.split(/\s*,\s*/).sort(),b={};a.length;)b[a.shift()]=v;return b}function m(a){for(var b,c,d,e,f={},p=1,a=I(a);b=a.match(x);){if(c=b[2]){d=y(c,"styles");e=y(c,"attrs");c=y(c,"classes")}else d=e=c=null;f["$"+p++]={elements:b[1],classes:c,styles:d,attributes:e};a=a.slice(b[0].length)}return f}function y(a,b){var c=a.match(E[b]);return c?I(c[1]):null}function s(a){var b= +a.styleBackup=a.attributes.style,c=a.classBackup=a.attributes["class"];if(!a.styles)a.styles=CKEDITOR.tools.parseCssText(b||"",1);if(!a.classes)a.classes=c?c.split(/\s+/):[]}function w(a,b,d,e){var l=0,r;if(e.toHtml)b.name=b.name.replace($,"$1");if(e.doCallbacks&&a.elementCallbacks){a:for(var x=a.elementCallbacks,h=0,n=x.length,v;h<n;++h)if(v=x[h](b)){r=v;break a}if(r)return r}if(e.doTransform)if(r=a._.transformations[b.name]){s(b);for(x=0;x<r.length;++x)p(a,b,r[x]);t(b)}if(e.doFilter){a:{x=b.name; +h=a._;a=h.allowedRules.elements[x];r=h.allowedRules.generic;x=h.disallowedRules.elements[x];h=h.disallowedRules.generic;n=e.skipRequired;v={valid:false,validAttributes:{},validClasses:{},validStyles:{},allAttributes:false,allClasses:false,allStyles:false,hadInvalidAttribute:false,hadInvalidClass:false,hadInvalidStyle:false};var q,z;if(!a&&!r)a=null;else{s(b);if(x){q=0;for(z=x.length;q<z;++q)if(c(x[q],b,v)===false){a=null;break a}}if(h){q=0;for(z=h.length;q<z;++q)c(h[q],b,v)}if(a){q=0;for(z=a.length;q< +z;++q)f(a[q],b,v,n)}if(r){q=0;for(z=r.length;q<z;++q)f(r[q],b,v,n)}a=v}}if(!a){d.push(b);return F}if(!a.valid){d.push(b);return F}z=a.validAttributes;var E=a.validStyles;r=a.validClasses;var x=b.attributes,A=b.styles,h=b.classes,n=b.classBackup,o=b.styleBackup,g,B,C=[];v=[];var j=/^data-cke-/;q=false;delete x.style;delete x["class"];delete b.classBackup;delete b.styleBackup;if(!a.allAttributes)for(g in x)if(!z[g])if(j.test(g)){if(g!=(B=g.replace(/^data-cke-saved-/,""))&&!z[B]){delete x[g];q=true}}else{delete x[g]; +q=true}if(!a.allStyles||a.hadInvalidStyle){for(g in A)a.allStyles||E[g]?C.push(g+":"+A[g]):q=true;if(C.length)x.style=C.sort().join("; ")}else if(o)x.style=o;if(!a.allClasses||a.hadInvalidClass){for(g=0;g<h.length;++g)(a.allClasses||r[h[g]])&&v.push(h[g]);v.length&&(x["class"]=v.sort().join(" "));n&&v.length<n.split(/\s+/).length&&(q=true)}else n&&(x["class"]=n);q&&(l=F);if(!e.skipFinalValidation&&!i(b)){d.push(b);return F}}if(e.toHtml)b.name=b.name.replace(aa,"cke:$1");return l}function q(a){var b= +[],c;for(c in a)c.indexOf("*")>-1&&b.push(c.replace(/\*/g,".*"));return b.length?RegExp("^(?:"+b.join("|")+")$"):null}function t(a){var b=a.attributes,c;delete b.style;delete b["class"];if(c=CKEDITOR.tools.writeCssText(a.styles,true))b.style=c;a.classes.length&&(b["class"]=a.classes.sort().join(" "))}function i(a){switch(a.name){case "a":if(!a.children.length&&!a.attributes.name)return false;break;case "img":if(!a.attributes.src)return false}return true}function A(a){if(!a)return false;if(a===true)return true; +var b=q(a);return function(c){return c in a||b&&c.match(b)}}function u(){return new CKEDITOR.htmlParser.element("br")}function o(a){return a.type==CKEDITOR.NODE_ELEMENT&&(a.name=="br"||L.$block[a.name])}function l(a,b,c){var d=a.name;if(L.$empty[d]||!a.children.length)if(d=="hr"&&b=="br")a.replaceWith(u());else{a.parent&&c.push({check:"it",el:a.parent});a.remove()}else if(L.$block[d]||d=="tr")if(b=="br"){if(a.previous&&!o(a.previous)){b=u();b.insertBefore(a)}if(a.next&&!o(a.next)){b=u();b.insertAfter(a)}a.replaceWithChildren()}else{var d= +a.children,e;b:{e=L[b];for(var f=0,p=d.length,i;f<p;++f){i=d[f];if(i.type==CKEDITOR.NODE_ELEMENT&&!e[i.name]){e=false;break b}}e=true}if(e){a.name=b;a.attributes={};c.push({check:"parent-down",el:a})}else{e=a.parent;for(var f=e.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||e.name=="body",l,r,p=d.length;p>0;){i=d[--p];if(f&&(i.type==CKEDITOR.NODE_TEXT||i.type==CKEDITOR.NODE_ELEMENT&&L.$inline[i.name])){if(!l){l=new CKEDITOR.htmlParser.element(b);l.insertAfter(a);c.push({check:"parent-down",el:l})}l.add(i, +0)}else{l=null;r=L[e.name]||L.span;i.insertAfter(a);e.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(i.type==CKEDITOR.NODE_ELEMENT&&!r[i.name])&&c.push({check:"el-up",el:i})}}a.remove()}}else if(d=="style")a.remove();else{a.parent&&c.push({check:"it",el:a.parent});a.replaceWithChildren()}}function p(a,b,c){var d,e;for(d=0;d<c.length;++d){e=c[d];if((!e.check||a.check(e.check,false))&&(!e.left||e.left(b))){e.right(b,ba);break}}}function r(a,b){var c=b.getDefinition(),d=c.attributes,e=c.styles,f,p,i,l;if(a.name!= +c.element)return false;for(f in d)if(f=="class"){c=d[f].split(/\s+/);for(i=a.classes.join("|");l=c.pop();)if(i.indexOf(l)==-1)return false}else if(a.attributes[f]!=d[f])return false;for(p in e)if(a.styles[p]!=e[p])return false;return true}function n(a,b){var c,d;if(typeof a=="string")c=a;else if(a instanceof CKEDITOR.style)d=a;else{c=a[0];d=a[1]}return[{element:c,left:d,right:function(a,c){c.transform(a,b)}}]}function P(a){return function(b){return r(b,a)}}function C(a){return function(b,c){c[a](b)}} +var L=CKEDITOR.dtd,F=1,K=CKEDITOR.tools.copy,I=CKEDITOR.tools.trim,v="cke-test",G=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a){this.allowedContent=[];this.disallowedContent=[];this.elementCallbacks=null;this.disabled=false;this.editor=null;this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{},generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{}};CKEDITOR.filter.instances[this.id]=this;if(a instanceof CKEDITOR.editor){a= +this.editor=a;this.customConfig=true;var b=a.config.allowedContent;if(b===true)this.disabled=true;else{if(!b)this.customConfig=false;this.allow(b,"config",1);this.allow(a.config.extraAllowedContent,"extra",1);this.allow(G[a.enterMode]+" "+G[a.shiftEnterMode],"default",1);this.disallow(a.config.disallowedContent)}}else{this.customConfig=false;this.allow(a,"default",1)}};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(b,c,e){if(!d(this,b,e))return false;var f,p;if(typeof b=="string")b= +m(b);else if(b instanceof CKEDITOR.style){if(b.toAllowedContentRules)return this.allow(b.toAllowedContentRules(this.editor),c,e);f=b.getDefinition();b={};e=f.attributes;b[f.element]=f={styles:f.styles,requiredStyles:f.styles&&CKEDITOR.tools.objectKeys(f.styles)};if(e){e=K(e);f.classes=e["class"]?e["class"].split(/\s+/):null;f.requiredClasses=f.classes;delete e["class"];f.attributes=e;f.requiredAttributes=e&&CKEDITOR.tools.objectKeys(e)}}else if(CKEDITOR.tools.isArray(b)){for(f=0;f<b.length;++f)p= +this.allow(b[f],c,e);return p}a(this,b,c,this.allowedContent,this._.allowedRules);return true},applyTo:function(a,b,c,d){if(this.disabled)return false;var e=this,f=[],p=this.editor&&this.editor.config.protectedSource,r,x=false,h={doFilter:!c,doTransform:true,doCallbacks:true,toHtml:b};a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if(a.attributes["data-cke-filter"]=="off")return false;if(!b||!(a.name=="span"&&~CKEDITOR.tools.objectKeys(a.attributes).join("|").indexOf("data-cke-"))){r=w(e, +a,f,h);if(r&F)x=true;else if(r&2)return false}}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var c;a:{var d=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));c=[];var i,l,n;if(p)for(l=0;l<p.length;++l)if((n=d.match(p[l]))&&n[0].length==d.length){c=true;break a}d=CKEDITOR.htmlParser.fragment.fromHtml(d);d.children.length==1&&(i=d.children[0]).type==CKEDITOR.NODE_ELEMENT&&w(e,i,c,h);c=!c.length}c||f.push(a)}},null,true);f.length&&(x=true);for(var n, +a=[],d=G[d||(this.editor?this.editor.enterMode:CKEDITOR.ENTER_P)],q;c=f.pop();)c.type==CKEDITOR.NODE_ELEMENT?l(c,d,a):c.remove();for(;n=a.pop();){c=n.el;if(c.parent){q=L[c.parent.name]||L.span;switch(n.check){case "it":L.$removeEmpty[c.name]&&!c.children.length?l(c,d,a):i(c)||l(c,d,a);break;case "el-up":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!q[c.name]&&l(c,d,a);break;case "parent-down":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!q[c.name]&&l(c.parent,d,a)}}}return x},checkFeature:function(a){if(this.disabled|| +!a)return true;a.toFeature&&(a=a.toFeature(this.editor));return!a.requiredContent||this.check(a.requiredContent)},disable:function(){this.disabled=true},disallow:function(b){if(!d(this,b,true))return false;typeof b=="string"&&(b=m(b));a(this,b,null,this.disallowedContent,this._.disallowedRules);return true},addContentForms:function(a){if(!this.disabled&&a){var b,c,d=[],e;for(b=0;b<a.length&&!e;++b){c=a[b];if((typeof c=="string"||c instanceof CKEDITOR.style)&&this.check(c))e=c}if(e){for(b=0;b<a.length;++b)d.push(n(a[b], +e));this.addTransformations(d)}}},addElementCallback:function(a){if(!this.elementCallbacks)this.elementCallbacks=[];this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return true;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);this.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)?this.check(a.requiredContent):true},addTransformations:function(a){var b, +c;if(!this.disabled&&a){var d=this._.transformations,e;for(e=0;e<a.length;++e){b=a[e];var f=void 0,p=void 0,i=void 0,l=void 0,r=void 0,x=void 0;c=[];for(p=0;p<b.length;++p){i=b[p];if(typeof i=="string"){i=i.split(/\s*:\s*/);l=i[0];r=null;x=i[1]}else{l=i.check;r=i.left;x=i.right}if(!f){f=i;f=f.element?f.element:l?l.match(/^([a-z0-9]+)/i)[0]:f.left.getDefinition().element}r instanceof CKEDITOR.style&&(r=P(r));c.push({check:l==f?null:l,left:r,right:typeof x=="string"?C(x):x})}b=f;d[b]||(d[b]=[]);d[b].push(c)}}}, +check:function(a,b,c){if(this.disabled)return true;if(CKEDITOR.tools.isArray(a)){for(var d=a.length;d--;)if(this.check(a[d],b,c))return true;return false}var e,f;if(typeof a=="string"){f=a+"<"+(b===false?"0":"1")+(c?"1":"0")+">";if(f in this._.cachedChecks)return this._.cachedChecks[f];d=m(a).$1;e=d.styles;var i=d.classes;d.name=d.elements;d.classes=i=i?i.split(/\s*,\s*/):[];d.styles=g(e);d.attributes=g(d.attributes);d.children=[];i.length&&(d.attributes["class"]=i.join(" "));if(e)d.attributes.style= +CKEDITOR.tools.writeCssText(d.styles);e=d}else{d=a.getDefinition();e=d.styles;i=d.attributes||{};if(e){e=K(e);i.style=CKEDITOR.tools.writeCssText(e,true)}else e={};e={name:d.element,attributes:i,classes:i["class"]?i["class"].split(/\s+/):[],styles:e,children:[]}}var i=CKEDITOR.tools.clone(e),l=[],r;if(b!==false&&(r=this._.transformations[e.name])){for(d=0;d<r.length;++d)p(this,e,r[d]);t(e)}w(this,i,l,{doFilter:true,doTransform:b!==false,skipRequired:!c,skipFinalValidation:!c});b=l.length>0?false: +CKEDITOR.tools.objectCompare(e.attributes,i.attributes,true)?true:false;typeof a=="string"&&(this._.cachedChecks[f]=b);return b},getAllowedEnterMode:function(){var a=["p","div","br"],b={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(c,d){var e=a.slice(),f;if(this.check(G[c]))return c;for(d||(e=e.reverse());f=e.pop();)if(this.check(f))return b[f];return CKEDITOR.ENTER_BR}}(),destroy:function(){delete CKEDITOR.filter.instances[this.id];delete this._;delete this.allowedContent; +delete this.disallowedContent}};var z={styles:1,attributes:1,classes:1},B={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},x=/^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,E={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},$=/^cke:(object|embed|param)$/,aa=/^(object|embed|param)$/,ba=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,"width");this.lengthToStyle(a, +"height")},sizeToAttribute:function(a){this.lengthToAttribute(a,"width");this.lengthToAttribute(a,"height")},lengthToStyle:function(a,b,c){c=c||b;if(!(c in a.styles)){var d=a.attributes[b];if(d){/^\d+$/.test(d)&&(d=d+"px");a.styles[c]=d}}delete a.attributes[b]},lengthToAttribute:function(a,b,c){c=c||b;if(!(c in a.attributes)){var d=a.styles[b],e=d&&d.match(/^(\d+)(?:\.\d*)?px$/);e?a.attributes[c]=e[1]:d==v&&(a.attributes[c]=v)}delete a.styles[b]},alignmentToStyle:function(a){if(!("float"in a.styles)){var b= +a.attributes.align;if(b=="left"||b=="right")a.styles["float"]=b}delete a.attributes.align},alignmentToAttribute:function(a){if(!("align"in a.attributes)){var b=a.styles["float"];if(b=="left"||b=="right")a.attributes.align=b}delete a.styles["float"]},matchesStyle:r,transform:function(a,b){if(typeof b=="string")a.name=b;else{var c=b.getDefinition(),d=c.styles,e=c.attributes,f,i,p,l;a.name=c.element;for(f in e)if(f=="class"){c=a.classes.join("|");for(p=e[f].split(/\s+/);l=p.pop();)c.indexOf(l)==-1&& +a.classes.push(l)}else a.attributes[f]=e[f];for(i in d)a.styles[i]=d[i]}}}})(); +(function(){CKEDITOR.focusManager=function(a){if(a.focusManager)return a.focusManager;this.hasFocus=false;this.currentActive=null;this._={editor:a};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(a){this._.timer&&clearTimeout(this._.timer);if(a)this.currentActive=a;if(!this.hasFocus&&!this._.locked){(a=CKEDITOR.currentInstance)&&a.focusManager.blur(1);this.hasFocus=true;(a=this._.editor.container)&&a.addClass("cke_focus");this._.editor.fire("focus")}}, +lock:function(){this._.locked=1},unlock:function(){delete this._.locked},blur:function(a){function f(){if(this.hasFocus){this.hasFocus=false;var a=this._.editor.container;a&&a.removeClass("cke_focus");this._.editor.fire("blur")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var b=CKEDITOR.focusManager._.blurDelay;a||!b?f.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer;f.call(this)},b,this)}},add:function(a,f){var b=a.getCustomData("focusmanager");if(!b|| +b!=this){b&&b.remove(a);var b="focus",c="blur";if(f)if(CKEDITOR.env.ie){b="focusin";c="focusout"}else CKEDITOR.event.useCapture=1;var e={blur:function(){a.equals(this.currentActive)&&this.blur()},focus:function(){this.focus(a)}};a.on(b,e.focus,this);a.on(c,e.blur,this);if(f)CKEDITOR.event.useCapture=0;a.setCustomData("focusmanager",this);a.setCustomData("focusmanager_handlers",e)}},remove:function(a){a.removeCustomData("focusmanager");var f=a.removeCustomData("focusmanager_handlers");a.removeListener("blur", +f.blur);a.removeListener("focus",f.focus)}}})();CKEDITOR.keystrokeHandler=function(a){if(a.keystrokeHandler)return a.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:a};return this}; +(function(){var a,f=function(b){var b=b.data,e=b.getKeystroke(),d=this.keystrokes[e],f=this._.editor;a=f.fire("key",{keyCode:e,domEvent:b})===false;if(!a){d&&(a=f.execCommand(d,{from:"keystrokeHandler"})!==false);a||(a=!!this.blockedKeystrokes[e])}a&&b.preventDefault(true);return!a},b=function(b){if(a){a=false;b.data.preventDefault(true)}};CKEDITOR.keystrokeHandler.prototype={attach:function(a){a.on("keydown",f,this);if(CKEDITOR.env.gecko&&CKEDITOR.env.mac)a.on("keypress",b,this)}}})(); +(function(){CKEDITOR.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,is:1,it:1,ja:1,ka:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,"zh-cn":1,zh:1},rtl:{ar:1,fa:1,he:1,ku:1,ug:1},load:function(a,f,b){if(!a||!CKEDITOR.lang.languages[a])a=this.detect(f, +a);var c=this,f=function(){c[a].dir=c.rtl[a]?"rtl":"ltr";b(a,c[a])};this[a]?f():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+a+".js"),f,this)},detect:function(a,f){var b=this.languages,f=f||navigator.userLanguage||navigator.language||a,c=f.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),e=c[1],c=c[2];b[e+"-"+c]?e=e+"-"+c:b[e]||(e=null);CKEDITOR.lang.detect=e?function(){return e}:function(a){return a};return e||a}}})(); +CKEDITOR.scriptLoader=function(){var a={},f={};return{load:function(b,c,e,d){var h=typeof b=="string";h&&(b=[b]);e||(e=CKEDITOR);var k=b.length,j=[],g=[],m=function(a){c&&(h?c.call(e,a):c.call(e,j,g))};if(k===0)m(true);else{var y=function(a,b){(b?j:g).push(a);if(--k<=0){d&&CKEDITOR.document.getDocumentElement().removeStyle("cursor");m(b)}},s=function(b,c){a[b]=1;var d=f[b];delete f[b];for(var e=0;e<d.length;e++)d[e](b,c)},w=function(b){if(a[b])y(b,true);else{var d=f[b]||(f[b]=[]);d.push(y);if(!(d.length> +1)){var e=new CKEDITOR.dom.element("script");e.setAttributes({type:"text/javascript",src:b});if(c)if(CKEDITOR.env.ie&&CKEDITOR.env.version<11)e.$.onreadystatechange=function(){if(e.$.readyState=="loaded"||e.$.readyState=="complete"){e.$.onreadystatechange=null;s(b,true)}};else{e.$.onload=function(){setTimeout(function(){s(b,true)},0)};e.$.onerror=function(){s(b,false)}}e.appendTo(CKEDITOR.document.getHead())}}};d&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var q=0;q<k;q++)w(b[q])}}, +queue:function(){function a(){var b;(b=c[0])&&this.load(b.scriptUrl,b.callback,CKEDITOR,0)}var c=[];return function(e,d){var f=this;c.push({scriptUrl:e,callback:function(){d&&d.apply(this,arguments);c.shift();a.call(f)}});c.length==1&&a.call(this)}}()}}();CKEDITOR.resourceManager=function(a,f){this.basePath=a;this.fileName=f;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}}; +CKEDITOR.resourceManager.prototype={add:function(a,f){if(this.registered[a])throw'[CKEDITOR.resourceManager.add] The resource name "'+a+'" is already registered.';var b=this.registered[a]=f||{};b.name=a;b.path=this.getPath(a);CKEDITOR.fire(a+CKEDITOR.tools.capitalize(this.fileName)+"Ready",b);return this.get(a)},get:function(a){return this.registered[a]||null},getPath:function(a){var f=this.externals[a];return CKEDITOR.getUrl(f&&f.dir||this.basePath+a+"/")},getFilePath:function(a){var f=this.externals[a]; +return CKEDITOR.getUrl(this.getPath(a)+(f?f.file:this.fileName+".js"))},addExternal:function(a,f,b){for(var a=a.split(","),c=0;c<a.length;c++){var e=a[c];b||(f=f.replace(/[^\/]+$/,function(a){b=a;return""}));this.externals[e]={dir:f,file:b||this.fileName+".js"}}},load:function(a,f,b){CKEDITOR.tools.isArray(a)||(a=a?[a]:[]);for(var c=this.loaded,e=this.registered,d=[],h={},k={},j=0;j<a.length;j++){var g=a[j];if(g)if(!c[g]&&!e[g]){var m=this.getFilePath(g);d.push(m);m in h||(h[m]=[]);h[m].push(g)}else k[g]= +this.get(g)}CKEDITOR.scriptLoader.load(d,function(a,d){if(d.length)throw'[CKEDITOR.resourceManager.load] Resource name "'+h[d[0]].join(",")+'" was not found at "'+d[0]+'".';for(var e=0;e<a.length;e++)for(var q=h[a[e]],g=0;g<q.length;g++){var i=q[g];k[i]=this.get(i);c[i]=1}f.call(b,k)},this)}};CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin"); +CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,function(a){var f={};return function(b,c,e){var d={},h=function(b){a.call(this,b,function(a){CKEDITOR.tools.extend(d,a);var b=[],m;for(m in a){var k=a[m],s=k&&k.requires;if(!f[m]){if(k.icons)for(var w=k.icons.split(","),q=w.length;q--;)CKEDITOR.skin.addIcon(w[q],k.path+"icons/"+(CKEDITOR.env.hidpi&&k.hidpi?"hidpi/":"")+w[q]+".png");f[m]=1}if(s){s.split&&(s=s.split(","));for(k=0;k<s.length;k++)d[s[k]]||b.push(s[k])}}if(b.length)h.call(this, +b);else{for(m in d){k=d[m];if(k.onLoad&&!k.onLoad._called){k.onLoad()===false&&delete d[m];k.onLoad._called=1}}c&&c.call(e||window,d)}},this)};h.call(this,b)}});CKEDITOR.plugins.setLang=function(a,f,b){var c=this.get(a),a=c.langEntries||(c.langEntries={}),c=c.lang||(c.lang=[]);c.split&&(c=c.split(","));CKEDITOR.tools.indexOf(c,f)==-1&&c.push(f);a[f]=b};CKEDITOR.ui=function(a){if(a.ui)return a.ui;this.items={};this.instances={};this.editor=a;this._={handlers:{}};return this}; +CKEDITOR.ui.prototype={add:function(a,f,b){b.name=a.toLowerCase();var c=this.items[a]={type:f,command:b.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(c,b)},get:function(a){return this.instances[a]},create:function(a){var f=this.items[a],b=f&&this._.handlers[f.type],c=f&&f.command&&this.editor.getCommand(f.command),b=b&&b.create.apply(this,f.args);this.instances[a]=b;c&&c.uiItems.push(b);if(b&&!b.type)b.type=f.type;return b},addHandler:function(a,f){this._.handlers[a]= +f},space:function(a){return CKEDITOR.document.getById(this.spaceId(a))},spaceId:function(a){return this.editor.id+"_"+a}};CKEDITOR.event.implementOn(CKEDITOR.ui); +(function(){function a(a,c,d){CKEDITOR.event.call(this);a=a&&CKEDITOR.tools.clone(a);if(c!==void 0){if(c instanceof CKEDITOR.dom.element){if(!d)throw Error("One of the element modes must be specified.");}else throw Error("Expect element of type CKEDITOR.dom.element.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&d==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");if(!(d==CKEDITOR.ELEMENT_MODE_INLINE?c.is(CKEDITOR.dtd.$editable)||c.is("textarea"):d==CKEDITOR.ELEMENT_MODE_REPLACE? +!c.is(CKEDITOR.dtd.$nonBodyContent):1))throw Error('The specified element mode is not supported on element: "'+c.getName()+'".');this.element=c;this.elementMode=d;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(c.getId()||c.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};this.templates={};this.name=this.name||f();this.id=CKEDITOR.tools.getNextId();this.status="unloaded";this.config=CKEDITOR.tools.prototypedCopy(CKEDITOR.config);this.ui=new CKEDITOR.ui(this); +this.focusManager=new CKEDITOR.focusManager(this);this.keystrokeHandler=new CKEDITOR.keystrokeHandler(this);this.on("readOnly",b);this.on("selectionChange",function(a){e(this,a.data.path)});this.on("activeFilterChange",function(){e(this,this.elementPath(),true)});this.on("mode",b);this.on("instanceReady",function(){this.config.startupFocus&&this.focus()});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){h(this,a)},0,this)}function f(){do var a="editor"+ +++s;while(CKEDITOR.instances[a]);return a}function b(){var a=this.commands,b;for(b in a)c(this,a[b])}function c(a,b){b[b.startDisabled?"disable":a.readOnly&&!b.readOnly?"disable":b.modes[a.mode]?"enable":"disable"]()}function e(a,b,c){if(b){var d,e,f=a.commands;for(e in f){d=f[e];(c||d.contextSensitive)&&d.refresh(a,b)}}}function d(a){var b=a.config.customConfig;if(!b)return false;var b=CKEDITOR.getUrl(b),c=w[b]||(w[b]={});if(c.fn){c.fn.call(a,a.config);(CKEDITOR.getUrl(a.config.customConfig)==b|| +!d(a))&&a.fireOnce("customConfigLoaded")}else CKEDITOR.scriptLoader.queue(b,function(){c.fn=CKEDITOR.editorConfig?CKEDITOR.editorConfig:function(){};d(a)});return true}function h(a,b){a.on("customConfigLoaded",function(){if(b){if(b.on)for(var c in b.on)a.on(c,b.on[c]);CKEDITOR.tools.extend(a.config,b,true);delete a.config.on}c=a.config;a.readOnly=!(!c.readOnly&&!(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.is("textarea")?a.element.hasAttribute("disabled"):a.element.isReadOnly():a.elementMode== +CKEDITOR.ELEMENT_MODE_REPLACE&&a.element.hasAttribute("disabled")));a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?!(a.element.is("textarea")||CKEDITOR.dtd[a.element.getName()].p):false;a.tabIndex=c.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:c.enterMode;a.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:c.shiftEnterMode;if(c.skin)CKEDITOR.skinName=c.skin;a.fireOnce("configLoaded");a.dataProcessor= +new CKEDITOR.htmlDataProcessor(a);a.filter=a.activeFilter=new CKEDITOR.filter(a);k(a)});if(b&&b.customConfig!=null)a.config.customConfig=b.customConfig;d(a)||a.fireOnce("customConfigLoaded")}function k(a){CKEDITOR.skin.loadPart("editor",function(){j(a)})}function j(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(b,c){var d=a.config.title;a.langCode=b;a.lang=CKEDITOR.tools.prototypedCopy(c);a.title=typeof d=="string"||d===false?d:[a.lang.editor,a.name].join(", ");if(!a.config.contentsLangDirection)a.config.contentsLangDirection= +a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir;a.fire("langLoaded");g(a)})}function g(a){a.getStylesSet(function(b){a.once("loaded",function(){a.fire("stylesSet",{styles:b})},null,null,1);m(a)})}function m(a){var b=a.config,c=b.plugins,d=b.extraPlugins,e=b.removePlugins;if(d)var f=RegExp("(?:^|,)(?:"+d.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(f,""),c=c+(","+d);if(e)var l=RegExp("(?:^|,)(?:"+e.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(l,"");CKEDITOR.env.air&& +(c=c+",adobeair");CKEDITOR.plugins.load(c.split(","),function(c){var d=[],e=[],f=[];a.plugins=c;for(var i in c){var h=c[i],g=h.lang,o=null,A=h.requires,v;CKEDITOR.tools.isArray(A)&&(A=A.join(","));if(A&&(v=A.match(l)))for(;A=v.pop();)CKEDITOR.tools.setTimeout(function(a,b){throw Error('Plugin "'+a.replace(",","")+'" cannot be removed from the plugins list, because it\'s required by "'+b+'" plugin.');},0,null,[A,i]);if(g&&!a.lang[i]){g.split&&(g=g.split(","));if(CKEDITOR.tools.indexOf(g,a.langCode)>= +0)o=a.langCode;else{o=a.langCode.replace(/-.*/,"");o=o!=a.langCode&&CKEDITOR.tools.indexOf(g,o)>=0?o:CKEDITOR.tools.indexOf(g,"en")>=0?"en":g[0]}if(!h.langEntries||!h.langEntries[o])f.push(CKEDITOR.getUrl(h.path+"lang/"+o+".js"));else{a.lang[i]=h.langEntries[o];o=null}}e.push(o);d.push(h)}CKEDITOR.scriptLoader.load(f,function(){for(var c=["beforeInit","init","afterInit"],f=0;f<c.length;f++)for(var p=0;p<d.length;p++){var i=d[p];f===0&&(e[p]&&i.lang&&i.langEntries)&&(a.lang[i.name]=i.langEntries[e[p]]); +if(i[c[f]])i[c[f]](a)}a.fireOnce("pluginsLoaded");b.keystrokes&&a.setKeystroke(a.config.keystrokes);for(p=0;p<a.config.blockedKeystrokes.length;p++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[p]]=1;a.status="loaded";a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)})})}function y(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData();this.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is("textarea")?a.setValue(b): +a.setHtml(b);return true}return false}a.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=a;var s=0,w={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{addCommand:function(a,b){b.name=a.toLowerCase();var d=new CKEDITOR.command(this,b);this.mode&&c(this,d);return this.commands[a]=d},_attachToForm:function(){function a(d){b.updateElement();b._.required&&(!c.getValue()&&b.fire("required")===false)&&d.data.preventDefault()}var b=this,c=b.element,d=new CKEDITOR.dom.element(c.$.form);if(c.is("textarea")&& +d){d.on("submit",a);if(d.$.submit&&d.$.submit.call&&d.$.submit.apply)d.$.submit=CKEDITOR.tools.override(d.$.submit,function(b){return function(){a();b.apply?b.apply(this):b()}});b.on("destroy",function(){d.removeListener("submit",a)})}},destroy:function(a){this.fire("beforeDestroy");!a&&y.call(this);this.editable(null);this.filter.destroy();delete this.filter;delete this.activeFilter;this.status="destroyed";this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire("instanceDestroyed", +null,this)},elementPath:function(a){if(!a){a=this.getSelection();if(!a)return null;a=a.getStartElement()}return a?new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,b){var c=this.getCommand(a),d={name:a,commandData:b,command:c};if(c&&c.state!=CKEDITOR.TRISTATE_DISABLED&&this.fire("beforeCommandExec",d)!==false){d.returnValue=c.exec(d.commandData);if(!c.async&&this.fire("afterCommandExec", +d)!==false)return d.returnValue}return false},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire("beforeGetData");var b=this._.data;if(typeof b!="string")b=(b=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?b.is("textarea")?b.getValue():b.getHtml():"";b={dataValue:b};!a&&this.fire("getData",b);return b.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");if(typeof a!="string"){var b=this.element;b&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&& +(a=b.is("textarea")?b.getValue():b.getHtml())}return a},loadSnapshot:function(a){this.fire("loadSnapshot",a)},setData:function(a,b,c){var d=true,e=b;if(b&&typeof b=="object"){c=b.internal;e=b.callback;d=!b.noSnapshot}!c&&d&&this.fire("saveSnapshot");if(e||!c)this.once("dataReady",function(a){!c&&d&&this.fire("saveSnapshot");e&&e.call(a.editor)});a={dataValue:a};!c&&this.fire("setData",a);this._.data=a.dataValue;!c&&this.fire("afterSetData",a)},setReadOnly:function(a){a=a==null||a;if(this.readOnly!= +a){this.readOnly=a;this.keystrokeHandler.blockedKeystrokes[8]=+a;this.editable().setReadOnly(a);this.fire("readOnly")}},insertHtml:function(a,b){this.fire("insertHtml",{dataValue:a,mode:b})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement",a)},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return this.status=="ready"&&this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return y.call(this)}, +setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],c,d,e=b.length;e--;){c=b[e];d=0;if(CKEDITOR.tools.isArray(c)){d=c[1];c=c[0]}d?a[c]=d:delete a[c]}},addFeature:function(a){return this.filter.addFeature(a)},setActiveFilter:function(a){if(!a)a=this.filter;if(this.activeFilter!==a){this.activeFilter=a;this.fire("activeFilterChange");a===this.filter?this.setActiveEnterMode(null,null):this.setActiveEnterMode(a.getAllowedEnterMode(this.enterMode), +a.getAllowedEnterMode(this.shiftEnterMode,true))}},setActiveEnterMode:function(a,b){a=a?this.blockless?CKEDITOR.ENTER_BR:a:this.enterMode;b=b?this.blockless?CKEDITOR.ENTER_BR:b:this.shiftEnterMode;if(this.activeEnterMode!=a||this.activeShiftEnterMode!=b){this.activeEnterMode=a;this.activeShiftEnterMode=b;this.fire("activeEnterModeChange")}}})})();CKEDITOR.ELEMENT_MODE_NONE=0;CKEDITOR.ELEMENT_MODE_REPLACE=1;CKEDITOR.ELEMENT_MODE_APPENDTO=2;CKEDITOR.ELEMENT_MODE_INLINE=3; +CKEDITOR.htmlParser=function(){this._={htmlPartsRegex:/<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--\>)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}}; +(function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,f={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var c,e,d=0,h;c=this._.htmlPartsRegex.exec(b);){e=c.index;if(e>d){d=b.substring(d,e);if(h)h.push(d);else this.onText(d)}d= +this._.htmlPartsRegex.lastIndex;if(e=c[1]){e=e.toLowerCase();if(h&&CKEDITOR.dtd.$cdata[e]){this.onCDATA(h.join(""));h=null}if(!h){this.onTagClose(e);continue}}if(h)h.push(c[0]);else if(e=c[3]){e=e.toLowerCase();if(!/="/.test(e)){var k={},j,g=c[4];c=!!c[5];if(g)for(;j=a.exec(g);){var m=j[1].toLowerCase();j=j[2]||j[3]||j[4]||"";k[m]=!j&&f[m]?m:CKEDITOR.tools.htmlDecodeAttr(j)}this.onTagOpen(e,k,c);!h&&CKEDITOR.dtd.$cdata[e]&&(h=[])}}else if(e=c[2])this.onComment(e)}if(b.length>d)this.onText(b.substring(d, +b.length))}}})(); +CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(a){this._.output.push("<",a)},openTagClose:function(a,f){f?this._.output.push(" />"):this._.output.push(">")},attribute:function(a,f){typeof f=="string"&&(f=CKEDITOR.tools.htmlEncodeAttr(f));this._.output.push(" ",a,'="',f,'"')},closeTag:function(a){this._.output.push("</",a,">")},text:function(a){this._.output.push(a)},comment:function(a){this._.output.push("<\!--",a,"--\>")},write:function(a){this._.output.push(a)}, +reset:function(){this._.output=[];this._.indent=false},getHtml:function(a){var f=this._.output.join("");a&&this.reset();return f}}});"use strict"; +(function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var a=this.parent.children,f=CKEDITOR.tools.indexOf(a,this),b=this.previous,c=this.next;b&&(b.next=c);c&&(c.previous=b);a.splice(f,1);this.parent=null},replaceWith:function(a){var f=this.parent.children,b=CKEDITOR.tools.indexOf(f,this),c=a.previous=this.previous,e=a.next=this.next;c&&(c.next=a);e&&(e.previous=a);f[b]=a;a.parent=this.parent;this.parent=null},insertAfter:function(a){var f=a.parent.children, +b=CKEDITOR.tools.indexOf(f,a),c=a.next;f.splice(b+1,0,this);this.next=a.next;this.previous=a;a.next=this;c&&(c.previous=this);this.parent=a.parent},insertBefore:function(a){var f=a.parent.children,b=CKEDITOR.tools.indexOf(f,a);f.splice(b,0,this);this.next=a;(this.previous=a.previous)&&(a.previous.next=this);a.previous=this;this.parent=a.parent},getAscendant:function(a){var f=typeof a=="function"?a:typeof a=="string"?function(b){return b.name==a}:function(b){return b.name in a},b=this.parent;for(;b&& +b.type==CKEDITOR.NODE_ELEMENT;){if(f(b))return b;b=b.parent}return null},wrapWith:function(a){this.replaceWith(a);a.add(this);return a},getIndex:function(){return CKEDITOR.tools.indexOf(this.parent.children,this)},getFilterContext:function(a){return a||{}}}})();"use strict";CKEDITOR.htmlParser.comment=function(a){this.value=a;this._={isBlockLike:false}}; +CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(a,f){var b=this.value;if(!(b=a.onComment(f,b,this))){this.remove();return false}if(typeof b!="string"){this.replaceWith(b);return false}this.value=b;return true},writeHtml:function(a,f){f&&this.filter(f);a.comment(this.value)}});"use strict"; +(function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:false}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a,f){if(!(this.value=a.onText(f,this.value,this))){this.remove();return false}},writeHtml:function(a,f){f&&this.filter(f);a.text(this.value)}})})();"use strict"; +(function(){CKEDITOR.htmlParser.cdata=function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})})();"use strict";CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false}}; +(function(){function a(a){return a.attributes["data-cke-survive"]?false:a.name=="a"&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var f=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),b={ol:1,ul:1},c=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),e={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml= +function(d,h,k){function j(a){var b;if(i.length>0)for(var c=0;c<i.length;c++){var d=i[c],e=d.name,f=CKEDITOR.dtd[e],l=u.name&&CKEDITOR.dtd[u.name];if((!l||l[e])&&(!a||!f||f[a]||!CKEDITOR.dtd[a])){if(!b){g();b=1}d=d.clone();d.parent=u;u=d;i.splice(c,1);c--}else if(e==u.name){y(u,u.parent,1);c--}}}function g(){for(;A.length;)y(A.shift(),u)}function m(a){if(a._.isBlockLike&&a.name!="pre"&&a.name!="textarea"){var b=a.children.length,c=a.children[b-1],d;if(c&&c.type==CKEDITOR.NODE_TEXT)(d=CKEDITOR.tools.rtrim(c.value))? +c.value=d:a.children.length=b-1}}function y(b,c,d){var c=c||u||t,e=u;if(b.previous===void 0){if(s(c,b)){u=c;q.onTagOpen(k,{});b.returnPoint=c=u}m(b);(!a(b)||b.children.length)&&c.add(b);b.name=="pre"&&(l=false);b.name=="textarea"&&(o=false)}if(b.returnPoint){u=b.returnPoint;delete b.returnPoint}else u=d?c:e}function s(a,b){if((a==t||a.name=="body")&&k&&(!a.name||CKEDITOR.dtd[a.name][k])){var c,d;return(c=b.attributes&&(d=b.attributes["data-cke-real-element-type"])?d:b.name)&&c in CKEDITOR.dtd.$inline&& +!(c in CKEDITOR.dtd.head)&&!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function w(a,b){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==b||a=="dt"&&b=="dd"||a=="dd"&&b=="dt":false}var q=new CKEDITOR.htmlParser,t=h instanceof CKEDITOR.htmlParser.element?h:typeof h=="string"?new CKEDITOR.htmlParser.element(h):new CKEDITOR.htmlParser.fragment,i=[],A=[],u=t,o=t.name=="textarea",l=t.name=="pre";q.onTagOpen=function(d,e,h,m){e=new CKEDITOR.htmlParser.element(d,e);if(e.isUnknown&&h)e.isEmpty= +true;e.isOptionalClose=m;if(a(e))i.push(e);else{if(d=="pre")l=true;else{if(d=="br"&&l){u.add(new CKEDITOR.htmlParser.text("\n"));return}d=="textarea"&&(o=true)}if(d=="br")A.push(e);else{for(;;){m=(h=u.name)?CKEDITOR.dtd[h]||(u._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c;if(!e.isUnknown&&!u.isUnknown&&!m[d])if(u.isOptionalClose)q.onTagClose(h);else if(d in b&&h in b){h=u.children;(h=h[h.length-1])&&h.name=="li"||y(h=new CKEDITOR.htmlParser.element("li"),u);!e.returnPoint&&(e.returnPoint=u); +u=h}else if(d in CKEDITOR.dtd.$listItem&&!w(d,h))q.onTagOpen(d=="li"?"ul":"dl",{},0,1);else if(h in f&&!w(d,h)){!e.returnPoint&&(e.returnPoint=u);u=u.parent}else{h in CKEDITOR.dtd.$inline&&i.unshift(u);if(u.parent)y(u,u.parent,1);else{e.isOrphan=1;break}}else break}j(d);g();e.parent=u;e.isEmpty?y(e):u=e}}};q.onTagClose=function(a){for(var b=i.length-1;b>=0;b--)if(a==i[b].name){i.splice(b,1);return}for(var c=[],d=[],e=u;e!=t&&e.name!=a;){e._.isBlockLike||d.unshift(e);c.push(e);e=e.returnPoint||e.parent}if(e!= +t){for(b=0;b<c.length;b++){var f=c[b];y(f,f.parent)}u=e;e._.isBlockLike&&g();y(e,e.parent);if(e==u)u=u.parent;i=i.concat(d)}a=="body"&&(k=false)};q.onText=function(a){if((!u._.hasInlineStarted||A.length)&&!l&&!o){a=CKEDITOR.tools.ltrim(a);if(a.length===0)return}var b=u.name,d=b?CKEDITOR.dtd[b]||(u._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c;if(!o&&!d["#"]&&b in f){q.onTagOpen(e[b]||"");q.onText(a)}else{g();j();!l&&!o&&(a=a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));a=new CKEDITOR.htmlParser.text(a); +if(s(u,a))this.onTagOpen(k,{},0,1);u.add(a)}};q.onCDATA=function(a){u.add(new CKEDITOR.htmlParser.cdata(a))};q.onComment=function(a){g();j();u.add(new CKEDITOR.htmlParser.comment(a))};q.parse(d);for(g();u!=t;)y(u,u.parent,1);m(t);return t};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,b){isNaN(b)&&(b=this.children.length);var c=b>0?this.children[b-1]:null;if(c){if(a._.isBlockLike&&c.type==CKEDITOR.NODE_TEXT){c.value=CKEDITOR.tools.rtrim(c.value);if(c.value.length=== +0){this.children.pop();this.add(a);return}}c.next=a}a.previous=c;a.parent=this;this.children.splice(b,0,a);if(!this._.hasInlineStarted)this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT||a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike},filter:function(a,b){b=this.getFilterContext(b);a.onRoot(b,this);this.filterChildren(a,false,b)},filterChildren:function(a,b,c){if(this.childrenFilteredBy!=a.id){c=this.getFilterContext(c);if(b&&!this.parent)a.onRoot(c,this);this.childrenFilteredBy=a.id;for(b=0;b<this.children.length;b++)this.children[b].filter(a, +c)===false&&b--}},writeHtml:function(a,b){b&&this.filter(b);this.writeChildrenHtml(a)},writeChildrenHtml:function(a,b,c){var e=this.getFilterContext();if(c&&!this.parent&&b)b.onRoot(e,this);b&&this.filterChildren(b,false,e);b=0;c=this.children;for(e=c.length;b<e;b++)c[b].writeHtml(a)},forEach:function(a,b,c){if(!c&&(!b||this.type==b))var e=a(this);if(e!==false)for(var c=this.children,f=0;f<c.length;f++){e=c[f];e.type==CKEDITOR.NODE_ELEMENT?e.forEach(a,b):(!b||e.type==b)&&a(e)}},getFilterContext:function(a){return a|| +{}}}})();"use strict"; +(function(){function a(){this.rules=[]}function f(b,c,e,d){var f,k;for(f in c){(k=b[f])||(k=b[f]=new a);k.add(c[f],e,d)}}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(b){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new a;this.attributeNameRules=new a;this.elementsRules={};this.attributesRules={};this.textRules=new a;this.commentRules=new a;this.rootRules=new a;b&&this.addRules(b,10)},proto:{addRules:function(a,c){var e;if(typeof c=="number")e=c;else if(c&&"priority"in +c)e=c.priority;typeof e!="number"&&(e=10);typeof c!="object"&&(c={});a.elementNames&&this.elementNameRules.addMany(a.elementNames,e,c);a.attributeNames&&this.attributeNameRules.addMany(a.attributeNames,e,c);a.elements&&f(this.elementsRules,a.elements,e,c);a.attributes&&f(this.attributesRules,a.attributes,e,c);a.text&&this.textRules.add(a.text,e,c);a.comment&&this.commentRules.add(a.comment,e,c);a.root&&this.rootRules.add(a.root,e,c)},applyTo:function(a){a.filter(this)},onElementName:function(a,c){return this.elementNameRules.execOnName(a, +c)},onAttributeName:function(a,c){return this.attributeNameRules.execOnName(a,c)},onText:function(a,c,e){return this.textRules.exec(a,c,e)},onComment:function(a,c,e){return this.commentRules.exec(a,c,e)},onRoot:function(a,c){return this.rootRules.exec(a,c)},onElement:function(a,c){for(var e=[this.elementsRules["^"],this.elementsRules[c.name],this.elementsRules.$],d,f=0;f<3;f++)if(d=e[f]){d=d.exec(a,c,this);if(d===false)return null;if(d&&d!=c)return this.onNode(a,d);if(c.parent&&!c.name)break}return c}, +onNode:function(a,c){var e=c.type;return e==CKEDITOR.NODE_ELEMENT?this.onElement(a,c):e==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a,c.value)):e==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,c.value)):null},onAttribute:function(a,c,e,d){return(e=this.attributesRules[e])?e.exec(a,d,c,this):d}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,c,e){this.rules.splice(this.findIndex(c),0,{value:a,priority:c,options:e})},addMany:function(a, +c,e){for(var d=[this.findIndex(c),0],f=0,k=a.length;f<k;f++)d.push({value:a[f],priority:c,options:e});this.rules.splice.apply(this.rules,d)},findIndex:function(a){for(var c=this.rules,e=c.length-1;e>=0&&a<c[e].priority;)e--;return e+1},exec:function(a,c){var e=c instanceof CKEDITOR.htmlParser.node||c instanceof CKEDITOR.htmlParser.fragment,d=Array.prototype.slice.call(arguments,1),f=this.rules,k=f.length,j,g,m,y;for(y=0;y<k;y++){if(e){j=c.type;g=c.name}m=f[y];if(!(a.nonEditable&&!m.options.applyToAll|| +a.nestedEditable&&m.options.excludeNestedEditable)){m=m.value.apply(null,d);if(m===false||e&&m&&(m.name!=g||m.type!=j))return m;m!=null&&(d[0]=c=m)}}return c},execOnName:function(a,c){for(var e=0,d=this.rules,f=d.length,k;c&&e<f;e++){k=d[e];!(a.nonEditable&&!k.options.applyToAll||a.nestedEditable&&k.options.excludeNestedEditable)&&(c=c.replace(k.value[0],k.value[1]))}return c}}})(); +(function(){function a(a,f){function p(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function r(a,e){return function(f){if(f.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var i=[],l=b(f),x,r;if(l)for(v(l,1)&&i.push(l);l;){if(d(l)&&(x=c(l))&&v(x))if((r=c(x))&&!d(r))i.push(x);else{p(g).insertAfter(x);x.remove()}l=l.previous}for(l=0;l<i.length;l++)i[l].remove();if(i=!a||(typeof e=="function"?e(f):e)!==false)if(!g&&!CKEDITOR.env.needsBrFiller&& +f.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)i=false;else if(!g&&!CKEDITOR.env.needsBrFiller&&(document.documentMode>7||f.name in CKEDITOR.dtd.tr||f.name in CKEDITOR.dtd.$listItem))i=false;else{i=b(f);i=!i||f.name=="form"&&i.name=="input"}i&&f.add(p(a))}}}function v(a,b){if((!g||CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&a.name=="br"&&!a.attributes["data-cke-eol"])return true;var c;if(a.type==CKEDITOR.NODE_TEXT&&(c=a.value.match(i))){if(c.index){(new CKEDITOR.htmlParser.text(a.value.substring(0, +c.index))).insertBefore(a);a.value=c[0]}if(!CKEDITOR.env.needsBrFiller&&g&&(!b||a.parent.name in z))return true;if(!g)if((c=a.previous)&&c.name=="br"||!c||d(c))return true}return false}var n={elements:{}},g=f=="html",z=CKEDITOR.tools.extend({},l),o;for(o in z)"#"in u[o]||delete z[o];for(o in z)n.elements[o]=r(g,a.config.fillEmptyBlocks);n.root=r(g,false);n.elements.br=function(a){return function(b){if(b.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var f=b.attributes;if("data-cke-bogus"in f||"data-cke-eol"in +f)delete f["data-cke-bogus"];else{for(f=b.next;f&&e(f);)f=f.next;var i=c(b);!f&&d(b.parent)?h(b.parent,p(a)):d(f)&&(i&&!d(i))&&p(a).insertBefore(f)}}}}(g);return n}function f(a,b){return a!=CKEDITOR.ENTER_BR&&b!==false?a==CKEDITOR.ENTER_DIV?"div":"p":false}function b(a){for(a=a.children[a.children.length-1];a&&e(a);)a=a.previous;return a}function c(a){for(a=a.previous;a&&e(a);)a=a.previous;return a}function e(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&& +a.attributes["data-cke-bookmark"]}function d(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in l||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function h(a,b){var c=a.children[a.children.length-1];a.children.push(b);b.parent=a;if(c){c.next=b;b.previous=c}}function k(a){a=a.attributes;a.contenteditable!="false"&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function j(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}} +function g(a){return a.replace(C,function(a,b,c){return"<"+b+c.replace(L,function(a,b){return F.test(b)&&c.indexOf("data-cke-saved-"+b)==-1?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+">"})}function m(a,b){return a.replace(b,function(a,b,c){a.indexOf("<textarea")===0&&(a=b+w(c).replace(/</g,"<").replace(/>/g,">")+"</textarea>");return"<cke:encoded>"+encodeURIComponent(a)+"</cke:encoded>"})}function y(a){return a.replace(v,function(a,b){return decodeURIComponent(b)})}function s(a){return a.replace(/<\!--(?!{cke_protected})[\s\S]+?--\>/g, +function(a){return"<\!--"+A+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\>"})}function w(a){return a.replace(/<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)})}function q(a,b){var c=b._.dataStore;return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function t(a,b){for(var c=[],d=b.config.protectedSource,e=b._.dataStore||(b._.dataStore= +{id:1}),f=/<\!--\{cke_temp(comment)?\}(\d*?)--\>/g,d=[/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<meta[\s\S]*?\/?>/gi].concat(d),a=a.replace(/<\!--[\s\S]*?--\>/g,function(a){return"<\!--{cke_tempcomment}"+(c.push(a)-1)+"--\>"}),i=0;i<d.length;i++)a=a.replace(d[i],function(a){a=a.replace(f,function(a,b,d){return c[d]});return/cke_temp(comment)?/.test(a)?a:"<\!--{cke_temp}"+(c.push(a)-1)+"--\>"});a=a.replace(f,function(a,b,d){return"<\!--"+A+(b?"{C}":"")+encodeURIComponent(c[d]).replace(/--/g, +"%2D%2D")+"--\>"});a=a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=>]+))+\s*>/g,function(a){return a.replace(/<\!--\{cke_protected\}([^>]*)--\>/g,function(a,b){e[e.id]=decodeURIComponent(b);return"{cke_protected_"+e.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,c,d,e){return"<"+c+d+">"+q(w(e),b)+"</"+c+">"})}CKEDITOR.htmlDataProcessor=function(b){var c,d,e=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter; +this.htmlFilter=d=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(p);c.addRules(r,{applyToAll:true});c.addRules(a(b,"data"),{applyToAll:true});d.addRules(n);d.addRules(P,{applyToAll:true});d.addRules(a(b,"html"),{applyToAll:true});b.on("toHtml",function(a){var a=a.data,c=a.dataValue,d,c=t(c,b),c=m(c,I),c=g(c),c=m(c,K),c=c.replace(G,"$1cke:$2"),c=c.replace(B,"<cke:$1$2></cke:$1>"),c=c.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi, +"$1data-cke-"+CKEDITOR.rnd+"-$2");d=a.context||b.editable().getName();var e;if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&d=="pre"){d="div";c="<pre>"+c+"</pre>";e=1}d=b.document.createElement(d);d.setHtml("a"+c);c=d.getHtml().substr(1);c=c.replace(RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");e&&(c=c.replace(/^<pre>|<\/pre>$/gi,""));c=c.replace(z,"$1$2");c=y(c);c=w(c);d=a.fixForBody===false?false:f(a.enterMode,b.config.autoParagraph);c=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,d);if(d){e=c; +if(!e.children.length&&CKEDITOR.dtd[e.name][d]){d=new CKEDITOR.htmlParser.element(d);e.add(d)}}a.dataValue=c},null,null,5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,true,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(e.dataFilter,true)},null,null,10);b.on("toHtml",function(a){var a=a.data,b=a.dataValue,c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(true);a.dataValue= +s(b)},null,null,15);b.on("toDataFormat",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^<br *\/?>/i,""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,f(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(e.htmlFilter,true)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,false,true)},null,null,11);b.on("toDataFormat",function(a){var c= +a.data.dataValue,d=e.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(true);c=w(c);c=q(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,c,d){var e=this.editor,f,i,l;if(b&&typeof b=="object"){f=b.context;c=b.fixForBody;d=b.dontFilter;i=b.filter;l=b.enterMode}else f=b;!f&&f!==null&&(f=e.editable().getName());return e.fire("toHtml",{dataValue:a,context:f,fixForBody:c,dontFilter:d,filter:i||e.filter,enterMode:l||e.enterMode}).dataValue},toDataFormat:function(a, +b){var c,d,e;if(b){c=b.context;d=b.filter;e=b.enterMode}!c&&c!==null&&(c=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,filter:d||this.editor.filter,context:c,enterMode:e||this.editor.enterMode}).dataValue}};var i=/(?: |\xa0)$/,A="{cke_protected}",u=CKEDITOR.dtd,o=["caption","colgroup","col","thead","tfoot","tbody"],l=CKEDITOR.tools.extend({},u.$blockLimit,u.$block),p={elements:{input:k,textarea:k}},r={attributeNames:[[/^on/,"data-cke-pa-on"],[/^data-cke-expando$/, +""]]},n={elements:{embed:function(a){var b=a.parent;if(b&&b.name=="object"){var c=b.attributes.width,b=b.attributes.height;if(c)a.attributes.width=c;if(b)a.attributes.height=b}},a:function(a){if(!a.children.length&&!a.attributes.name&&!a.attributes["data-cke-saved-name"])return false}}},P={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return false; +for(var c=["name","href","src"],d,e=0;e<c.length;e++){d="data-cke-saved-"+c[e];d in b&&delete b[c[e]]}}return a},table:function(a){a.children.slice(0).sort(function(a,b){var c,d;if(a.type==CKEDITOR.NODE_ELEMENT&&b.type==a.type){c=CKEDITOR.tools.indexOf(o,a.name);d=CKEDITOR.tools.indexOf(o,b.name)}if(!(c>-1&&d>-1&&c!=d)){c=a.parent?a.getIndex():-1;d=b.parent?b.getIndex():-1}return c>d?1:-1})},param:function(a){a.children=[];a.isEmpty=true;return a},span:function(a){a.attributes["class"]=="Apple-style-span"&& +delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},style:function(a){var b=a.children[0];if(b&&b.value)b.value=CKEDITOR.tools.trim(b.value);if(!a.attributes.type)a.attributes.type="text/css"},title:function(a){var b=a.children[0];!b&&h(a,b=new CKEDITOR.htmlParser.text);b.value=a.attributes["data-cke-title"]||""},input:j,textarea:j},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g, +""))||false}}};if(CKEDITOR.env.ie)P.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})};var C=/<(a|area|img|input|source)\b([^>]*)>/gi,L=/([\w-]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,F=/^(href|src|name)$/i,K=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,I=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,v=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,G=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi, +z=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,B=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi})();"use strict"; +CKEDITOR.htmlParser.element=function(a,f){this.name=a;this.attributes=f||{};this.children=[];var b=a||"",c=b.match(/^cke:(.*)/);c&&(b=c[1]);b=!(!CKEDITOR.dtd.$nonBodyContent[b]&&!CKEDITOR.dtd.$block[b]&&!CKEDITOR.dtd.$listItem[b]&&!CKEDITOR.dtd.$tableContent[b]&&!(CKEDITOR.dtd.$nonEditable[b]||b=="br"));this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}}; +CKEDITOR.htmlParser.cssStyle=function(a){var f={};((a instanceof CKEDITOR.htmlParser.element?a.attributes.style:a)||"").replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,c,e){c=="font-family"&&(e=e.replace(/["']/g,""));f[c.toLowerCase()]=e});return{rules:f,populate:function(a){var c=this.toString();if(c)a instanceof CKEDITOR.dom.element?a.setAttribute("style",c):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=c:a.style=c},toString:function(){var a=[],c; +for(c in f)f[c]&&a.push(c,":",f[c],";");return a.join("")}}}; +(function(){function a(a){return function(b){return b.type==CKEDITOR.NODE_ELEMENT&&(typeof a=="string"?b.name==a:b.name in a)}}var f=function(a,b){a=a[0];b=b[0];return a<b?-1:a>b?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var d=this,f,k,b=d.getFilterContext(b);if(b.off)return true; +if(!d.parent)a.onRoot(b,d);for(;;){f=d.name;if(!(k=a.onElementName(b,f))){this.remove();return false}d.name=k;if(!(d=a.onElement(b,d))){this.remove();return false}if(d!==this){this.replaceWith(d);return false}if(d.name==f)break;if(d.type!=CKEDITOR.NODE_ELEMENT){this.replaceWith(d);return false}if(!d.name){this.replaceWithChildren();return false}}f=d.attributes;var j,g;for(j in f){g=j;for(k=f[j];;)if(g=a.onAttributeName(b,j))if(g!=j){delete f[j];j=g}else break;else{delete f[j];break}g&&((k=a.onAttribute(b, +d,g,k))===false?delete f[g]:f[g]=k)}d.isEmpty||this.filterChildren(a,false,b);return true},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var d=this.name,h=[],k=this.attributes,j,g;a.openTag(d,k);for(j in k)h.push([j,k[j]]);a.sortAttributes&&h.sort(f);j=0;for(g=h.length;j<g;j++){k=h[j];a.attribute(k[0],k[1])}a.openTagClose(d,this.isEmpty);this.writeChildrenHtml(a);this.isEmpty||a.closeTag(d)},writeChildrenHtml:b.writeChildrenHtml,replaceWithChildren:function(){for(var a= +this.children,b=a.length;b;)a[--b].insertAfter(this);this.remove()},forEach:b.forEach,getFirst:function(b){if(!b)return this.children.length?this.children[0]:null;typeof b!="function"&&(b=a(b));for(var e=0,d=this.children.length;e<d;++e)if(b(this.children[e]))return this.children[e];return null},getHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml(a);return a.getHtml()},setHtml:function(a){for(var a=this.children=CKEDITOR.htmlParser.fragment.fromHtml(a).children,b=0, +d=a.length;b<d;++b)a[b].parent=this},getOuterHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeHtml(a);return a.getHtml()},split:function(a){for(var b=this.children.splice(a,this.children.length-a),d=this.clone(),f=0;f<b.length;++f)b[f].parent=d;d.children=b;if(b[0])b[0].previous=null;if(a>0)this.children[a-1].next=null;this.parent.add(d,this.getIndex()+1);return d},addClass:function(a){if(!this.hasClass(a)){var b=this.attributes["class"]||"";this.attributes["class"]=b+(b?" ":"")+ +a}},removeClass:function(a){var b=this.attributes["class"];if(b)(b=CKEDITOR.tools.trim(b.replace(RegExp("(?:\\s+|^)"+a+"(?:\\s+|$)")," ")))?this.attributes["class"]=b:delete this.attributes["class"]},hasClass:function(a){var b=this.attributes["class"];return!b?false:RegExp("(?:^|\\s)"+a+"(?=\\s|$)").test(b)},getFilterContext:function(a){var b=[];a||(a={off:false,nonEditable:false,nestedEditable:false});!a.off&&this.attributes["data-cke-processor"]=="off"&&b.push("off",true);!a.nonEditable&&this.attributes.contenteditable== +"false"?b.push("nonEditable",true):a.nonEditable&&(!a.nestedEditable&&this.attributes.contenteditable=="true")&&b.push("nestedEditable",true);if(b.length)for(var a=CKEDITOR.tools.copy(a),d=0;d<b.length;d=d+2)a[b[d]]=b[d+1];return a}},true)})(); +(function(){var a={},f=/{([^}]+)}/g,b=/([\\'])/g,c=/\n/g,e=/\r/g;CKEDITOR.template=function(d){if(a[d])this.output=a[d];else{var h=d.replace(b,"\\$1").replace(c,"\\n").replace(e,"\\r").replace(f,function(a,b){return"',data['"+b+"']==undefined?'{"+b+"}':data['"+b+"'],'"});this.output=a[d]=Function("data","buffer","return buffer?buffer.push('"+h+"'):['"+h+"'].join('');")}}})();delete CKEDITOR.loadFullCore;CKEDITOR.instances={};CKEDITOR.document=new CKEDITOR.dom.document(document); +CKEDITOR.add=function(a){CKEDITOR.instances[a.name]=a;a.on("focus",function(){if(CKEDITOR.currentInstance!=a){CKEDITOR.currentInstance=a;CKEDITOR.fire("currentInstance")}});a.on("blur",function(){if(CKEDITOR.currentInstance==a){CKEDITOR.currentInstance=null;CKEDITOR.fire("currentInstance")}});CKEDITOR.fire("instance",null,a)};CKEDITOR.remove=function(a){delete CKEDITOR.instances[a.name]}; +(function(){var a={};CKEDITOR.addTemplate=function(f,b){var c=a[f];if(c)return c;c={name:f,source:b};CKEDITOR.fire("template",c);return a[f]=new CKEDITOR.template(c.source)};CKEDITOR.getTemplate=function(f){return a[f]}})();(function(){var a=[];CKEDITOR.addCss=function(f){a.push(f)};CKEDITOR.getCss=function(){return a.join("\n")}})();CKEDITOR.on("instanceDestroyed",function(){CKEDITOR.tools.isEmpty(this.instances)&&CKEDITOR.fire("reset")});CKEDITOR.TRISTATE_ON=1;CKEDITOR.TRISTATE_OFF=2; +CKEDITOR.TRISTATE_DISABLED=0; +(function(){CKEDITOR.inline=function(a,f){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var b=new CKEDITOR.editor(f,a,CKEDITOR.ELEMENT_MODE_INLINE),c=a.is("textarea")?a:null;if(c){b.setData(c.getValue(),null,true);a=CKEDITOR.dom.element.createFromHtml('<div contenteditable="'+!!b.readOnly+'" class="cke_textarea_inline">'+c.getValue()+"</div>",CKEDITOR.document); +a.insertAfter(c);c.hide();c.$.form&&b._attachToForm()}else b.setData(a.getHtml(),null,true);b.on("loaded",function(){b.fire("uiReady");b.editable(a);b.container=a;b.setData(b.getData(1));b.resetDirty();b.fire("contentDom");b.mode="wysiwyg";b.fire("mode");b.status="ready";b.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,b)},null,null,1E4);b.on("destroy",function(){if(c){b.container.clearCustomData();b.container.remove();c.show()}b.element.clearCustomData();delete b.element});return b}; +CKEDITOR.inlineAll=function(){var a,f,b;for(b in CKEDITOR.dtd.$editable)for(var c=CKEDITOR.document.getElementsByTag(b),e=0,d=c.count();e<d;e++){a=c.getItem(e);if(a.getAttribute("contenteditable")=="true"){f={element:a,config:{}};CKEDITOR.fire("inline",f)!==false&&CKEDITOR.inline(a,f.config)}}};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})})();CKEDITOR.replaceClass="ckeditor"; +(function(){function a(a,e,d,h){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var k=new CKEDITOR.editor(e,a,h);if(h==CKEDITOR.ELEMENT_MODE_REPLACE){a.setStyle("visibility","hidden");k._.required=a.hasAttribute("required");a.removeAttribute("required")}d&&k.setData(d,null,true);k.on("loaded",function(){b(k);h==CKEDITOR.ELEMENT_MODE_REPLACE&&(k.config.autoUpdateElement&& +a.$.form)&&k._attachToForm();k.setMode(k.config.startupMode,function(){k.resetDirty();k.status="ready";k.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,k)})});k.on("destroy",f);return k}function f(){var a=this.container,b=this.element;if(a){a.clearCustomData();a.remove()}if(b){b.clearCustomData();if(this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE){b.show();this._.required&&b.setAttribute("required","required")}delete this.element}}function b(a){var b=a.name,d=a.element,f=a.elementMode, +k=a.fire("uiSpace",{space:"top",html:""}).html,j=a.fire("uiSpace",{space:"bottom",html:""}).html,g=new CKEDITOR.template('<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" lang="{langCode}" role="application"'+(a.title?' aria-labelledby="cke_{name}_arialbl"':"")+">"+(a.title?'<span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span>':"")+'<{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>'), +b=CKEDITOR.dom.element.createFromHtml(g.output({id:a.id,name:b,langDir:a.lang.dir,langCode:a.langCode,voiceLabel:a.title,topHtml:k?'<span id="'+a.ui.spaceId("top")+'" class="cke_top cke_reset_all" role="presentation" style="height:auto">'+k+"</span>":"",contentId:a.ui.spaceId("contents"),bottomHtml:j?'<span id="'+a.ui.spaceId("bottom")+'" class="cke_bottom cke_reset_all" role="presentation">'+j+"</span>":"",outerEl:CKEDITOR.env.ie?"span":"div"}));if(f==CKEDITOR.ELEMENT_MODE_REPLACE){d.hide();b.insertAfter(d)}else d.append(b); +a.container=b;k&&a.ui.space("top").unselectable();j&&a.ui.space("bottom").unselectable();d=a.config.width;f=a.config.height;d&&b.setStyle("width",CKEDITOR.tools.cssLength(d));f&&a.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(f));b.disableContextMenu();CKEDITOR.env.webkit&&b.on("focus",function(){a.focus()});a.fireOnce("uiReady")}CKEDITOR.replace=function(b,e){return a(b,e,null,CKEDITOR.ELEMENT_MODE_REPLACE)};CKEDITOR.appendTo=function(b,e,d){return a(b,e,d,CKEDITOR.ELEMENT_MODE_APPENDTO)}; +CKEDITOR.replaceAll=function(){for(var a=document.getElementsByTagName("textarea"),b=0;b<a.length;b++){var d=null,f=a[b];if(f.name||f.id){if(typeof arguments[0]=="string"){if(!RegExp("(?:^|\\s)"+arguments[0]+"(?:$|\\s)").test(f.className))continue}else if(typeof arguments[0]=="function"){d={};if(arguments[0](f,d)===false)continue}this.replace(f,d)}}};CKEDITOR.editor.prototype.addMode=function(a,b){(this._.modes||(this._.modes={}))[a]=b};CKEDITOR.editor.prototype.setMode=function(a,b){var d=this,f= +this._.modes;if(!(a==d.mode||!f||!f[a])){d.fire("beforeSetMode",a);if(d.mode){var k=d.checkDirty(),f=d._.previousModeData,j,g=0;d.fire("beforeModeUnload");d.editable(0);d._.previousMode=d.mode;d._.previousModeData=j=d.getData(1);if(d.mode=="source"&&f==j){d.fire("lockSnapshot",{forceUpdate:true});g=1}d.ui.space("contents").setHtml("");d.mode=""}else d._.previousModeData=d.getData(1);this._.modes[a](function(){d.mode=a;k!==void 0&&!k&&d.resetDirty();g?d.fire("unlockSnapshot"):a=="wysiwyg"&&d.fire("saveSnapshot"); +setTimeout(function(){d.fire("mode");b&&b.call(d)},0)})}};CKEDITOR.editor.prototype.resize=function(a,b,d,f){var k=this.container,j=this.ui.space("contents"),g=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement,f=f?this.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}):k;f.setSize("width",a,true);g&&(g.style.width="1%");j.setStyle("height",Math.max(b-(d?0:(f.$.offsetHeight||0)-(j.$.clientHeight||0)),0)+"px");g&&(g.style.width= +"100%");this.fire("resize")};CKEDITOR.editor.prototype.getResizable=function(a){return a?this.ui.space("contents"):this.container};CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})})();CKEDITOR.config.startupMode="wysiwyg"; +(function(){function a(a){var b=a.editor,d=a.data.path,e=d.blockLimit,l=a.data.selection,p=l.getRanges()[0],r;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)if(l=f(l,d)){l.appendBogus();r=CKEDITOR.env.ie}if(h(b,d.block,e)&&p.collapsed&&!p.getCommonAncestor().isReadOnly()){d=p.clone();d.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);e=new CKEDITOR.dom.walker(d);e.guard=function(a){return!c(a)||a.type==CKEDITOR.NODE_COMMENT||a.isReadOnly()};if(!e.checkForward()||d.checkStartOfBlock()&& +d.checkEndOfBlock()){b=p.fixBlock(true,b.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p");if(!CKEDITOR.env.needsBrFiller)(b=b.getFirst(c))&&(b.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(b.getText()).match(/^(?: |\xa0)$/))&&b.remove();r=1;a.cancel()}}r&&p.select()}function f(a,b){if(a.isFake)return 0;var d=b.block||b.blockLimit,e=d&&d.getLast(c);if(d&&d.isBlockBoundary()&&(!e||!(e.type==CKEDITOR.NODE_ELEMENT&&e.isBlockBoundary()))&&!d.is("pre")&&!d.getBogus())return d}function b(a){var b=a.data.getTarget(); +if(b.is("input")){b=b.getAttribute("type");(b=="submit"||b=="reset")&&a.data.preventDefault()}}function c(a){return s(a)&&w(a)}function e(a,b){return function(c){var d=CKEDITOR.dom.element.get(c.data.$.toElement||c.data.$.fromElement||c.data.$.relatedTarget);(!d||!b.equals(d)&&!b.contains(d))&&a.call(this,c)}}function d(a){function b(a){return function(b,e){e&&(b.type==CKEDITOR.NODE_ELEMENT&&b.is(f))&&(d=b);if(!e&&c(b)&&(!a||!m(b)))return false}}var d,e=a.getRanges()[0],a=a.root,f={table:1,ul:1,ol:1, +dl:1};if(e.startPath().contains(f)){var p=e.clone();p.collapse(1);p.setStartAt(a,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(p);a.guard=b();a.checkBackward();if(d){p=e.clone();p.collapse();p.setEndAt(d,CKEDITOR.POSITION_AFTER_END);a=new CKEDITOR.dom.walker(p);a.guard=b(true);d=false;a.checkForward();return d}}return null}function h(a,b,c){return a.config.autoParagraph!==false&&a.activeEnterMode!=CKEDITOR.ENTER_BR&&a.editable().equals(c)&&!b||b&&b.getAttribute("contenteditable")=="true"} +function k(a){a.editor.focus();a.editor.fire("saveSnapshot")}function j(a){var b=a.editor;b.getSelection().scrollIntoView();setTimeout(function(){b.fire("saveSnapshot")},0)}function g(a,b,c){for(var d=a.getCommonAncestor(b),b=a=c?b:a;(a=a.getParent())&&!d.equals(a)&&a.getChildCount()==1;)b=a;b.remove()}CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(a,b){this.base(b.$||b);this.editor=a;this.status="unloaded";this.hasFocus=false;this.setup()},proto:{focus:function(){var a; +if(CKEDITOR.env.webkit&&!this.hasFocus){a=this.editor._.previousActive||this.getDocument().getActive();if(this.contains(a)){a.focus();return}}try{this.$[CKEDITOR.env.ie&&this.getDocument().equals(CKEDITOR.document)?"setActive":"focus"]()}catch(b){if(!CKEDITOR.env.ie)throw b;}if(CKEDITOR.env.safari&&!this.isInline()){a=CKEDITOR.document.getActive();a.equals(this.getWindow().getFrame())||this.getWindow().focus()}},on:function(a,b){var c=Array.prototype.slice.call(arguments,0);if(CKEDITOR.env.ie&&/^focus|blur$/.exec(a)){a= +a=="focus"?"focusin":"focusout";b=e(b,this);c[0]=a;c[1]=b}return CKEDITOR.dom.element.prototype.on.apply(this,c)},attachListener:function(a){!this._.listeners&&(this._.listeners=[]);var b=Array.prototype.slice.call(arguments,1),b=a.on.apply(a,b);this._.listeners.push(b);return b},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(b){}},restoreAttrs:function(){var a=this._.attrChanges,b,c;for(c in a)if(a.hasOwnProperty(c)){b=a[c];b!==null?this.setAttribute(c, +b):this.removeAttribute(c)}},attachClass:function(a){var b=this.getCustomData("classes");if(!this.hasClass(a)){!b&&(b=[]);b.push(a);this.setCustomData("classes",b);this.addClass(a)}},changeAttr:function(a,b){var c=this.getAttribute(a);if(b!==c){!this._.attrChanges&&(this._.attrChanges={});a in this._.attrChanges||(this._.attrChanges[a]=c);this.setAttribute(a,b)}},insertHtml:function(a,b){k(this);q(this,b||"html",a)},insertText:function(a){k(this);var b=this.editor,c=b.getSelection().getStartElement().hasAscendant("pre", +true)?CKEDITOR.ENTER_BR:b.activeEnterMode,b=c==CKEDITOR.ENTER_BR,d=CKEDITOR.tools,a=d.htmlEncode(a.replace(/\r\n/g,"\n")),a=a.replace(/\t/g,"    "),c=c==CKEDITOR.ENTER_P?"p":"div";if(!b){var e=/\n{2}/g;if(e.test(a))var f="<"+c+">",r="</"+c+">",a=f+a.replace(e,function(){return r+f})+r}a=a.replace(/\n/g,"<br>");b||(a=a.replace(RegExp("<br>(?=</"+c+">)"),function(a){return d.repeat(a,2)}));a=a.replace(/^ | $/g," ");a=a.replace(/(>|\s) /g,function(a,b){return b+" "}).replace(/ (?=<)/g, +" ");q(this,"text",a)},insertElement:function(a,b){b?this.insertElementIntoRange(a,b):this.insertElementIntoSelection(a)},insertElementIntoRange:function(a,b){var c=this.editor,d=c.config.enterMode,e=a.getName(),f=CKEDITOR.dtd.$block[e];if(b.checkReadOnly())return false;b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})&&t(b);var r,n;if(f)for(;(r=b.getCommonAncestor(0,1))&&(n=CKEDITOR.dtd[r.getName()])&&(!n||!n[e]);)if(r.getName()in +CKEDITOR.dtd.span)b.splitElement(r);else if(b.checkStartOfBlock()&&b.checkEndOfBlock()){b.setStartBefore(r);b.collapse(true);r.remove()}else b.splitBlock(d==CKEDITOR.ENTER_DIV?"div":"p",c.editable());b.insertNode(a);return true},insertElementIntoSelection:function(a){k(this);var b=this.editor,d=b.activeEnterMode,b=b.getSelection(),e=b.getRanges()[0],f=a.getName(),f=CKEDITOR.dtd.$block[f];if(this.insertElementIntoRange(a,e)){e.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);if(f)if((f=a.getNext(function(a){return c(a)&& +!m(a)}))&&f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$block))f.getDtd()["#"]?e.moveToElementEditStart(f):e.moveToElementEditEnd(a);else if(!f&&d!=CKEDITOR.ENTER_BR){f=e.fixBlock(true,d==CKEDITOR.ENTER_DIV?"div":"p");e.moveToElementEditStart(f)}}b.selectRanges([e]);j(this)},setData:function(a,b){b||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);this.fixInitialSelection();if(this.status=="unloaded")this.status="ready";this.editor.fire("dataReady")},getData:function(a){var b=this.getHtml(); +a||(b=this.editor.dataProcessor.toDataFormat(b));return b},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.removeClass("cke_editable");this.status="detached";var a=this.editor;this._.detach();delete a.document;delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},fixInitialSelection:function(){function a(){var b=c.getDocument().$,d=b.getSelection(),e;if(d.anchorNode&&d.anchorNode==c.$)e=true;else if(CKEDITOR.env.webkit){var f= +c.getDocument().getActive();f&&(f.equals(c)&&!d.anchorNode)&&(e=true)}if(e){e=new CKEDITOR.dom.range(c);e.moveToElementEditStart(c);b=b.createRange();b.setStart(e.startContainer.$,e.startOffset);b.collapse(true);d.removeAllRanges();d.addRange(b)}}function b(){var a=c.getDocument().$,d=a.selection,e=c.getDocument().getActive();if(d.type=="None"&&e.equals(c)){d=new CKEDITOR.dom.range(c);a=a.body.createTextRange();d.moveToElementEditStart(c);d=d.startContainer;d.type!=CKEDITOR.NODE_ELEMENT&&(d=d.getParent()); +a.moveToElementText(d.$);a.collapse(true);a.select()}}var c=this;if(CKEDITOR.env.ie&&(CKEDITOR.env.version<9||CKEDITOR.env.quirks)){if(this.hasFocus){this.focus();b()}}else if(this.hasFocus){this.focus();a()}else this.once("focus",function(){a()},null,null,-999)},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")||a.config.ignoreEmptyParagraph!==false&&(b=b.replace(y,function(a,b){return b}));a.setData(b,null,1)},this);this.attachListener(a, +"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a,"beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&b.type=="Control"||this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode)},this);this.attachListener(a,"insertElement",function(a){this.insertElement(a.data)}, +this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");this.attachClass(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"cke_editable_inline":a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE||a.elementMode==CKEDITOR.ELEMENT_MODE_APPENDTO?"cke_editable_themed":"");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur", +function(){this.hasFocus=false},null,null,-1);this.on("focus",function(){this.hasFocus=true},null,null,-1);a.focusManager.add(this);if(this.equals(CKEDITOR.document.getActive())){this.hasFocus=true;a.once("contentDom",function(){a.focusManager.focus(this)},this)}this.isInline()&&this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=this.getDocument();a.window=this.getWindow();var e=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker);var f=a.config.contentsLangDirection; +this.getDirection(1)!=f&&this.changeAttr("dir",f);var h=CKEDITOR.getCss();if(h){f=e.getHead();if(!f.getCustomData("stylesheet")){h=e.appendStyleText(h);h=new CKEDITOR.dom.element(h.ownerNode||h.owningElement);f.setCustomData("stylesheet",h);h.data("cke-temp",1)}}f=e.getCustomData("stylesheet_ref")||0;e.setCustomData("stylesheet_ref",f+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){var a=a.data,b=(new CKEDITOR.dom.elementPath(a.getTarget(), +this)).contains("a");b&&(a.$.button!=2&&b.isReadOnly())&&a.preventDefault()});var l={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return true;var c=b.data.domEvent.getKey(),e;if(c in l){var b=a.getSelection(),f,h=b.getRanges()[0],g=h.startPath(),o,m,j,c=c==8;if(CKEDITOR.env.ie&&CKEDITOR.env.version<11&&(f=b.getSelectedElement())||(f=d(b))){a.fire("saveSnapshot");h.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START);f.remove();h.select();a.fire("saveSnapshot");e=1}else if(h.collapsed)if((o= +g.block)&&(j=o[c?"getPrevious":"getNext"](s))&&j.type==CKEDITOR.NODE_ELEMENT&&j.is("table")&&h[c?"checkStartOfBlock":"checkEndOfBlock"]()){a.fire("saveSnapshot");h[c?"checkEndOfBlock":"checkStartOfBlock"]()&&o.remove();h["moveToElementEdit"+(c?"End":"Start")](j);h.select();a.fire("saveSnapshot");e=1}else if(g.blockLimit&&g.blockLimit.is("td")&&(m=g.blockLimit.getAscendant("table"))&&h.checkBoundaryOfElement(m,c?CKEDITOR.START:CKEDITOR.END)&&(j=m[c?"getPrevious":"getNext"](s))){a.fire("saveSnapshot"); +h["moveToElementEdit"+(c?"End":"Start")](j);h.checkStartOfBlock()&&h.checkEndOfBlock()?j.remove():h.select();a.fire("saveSnapshot");e=1}else if((m=g.contains(["td","th","caption"]))&&h.checkBoundaryOfElement(m,c?CKEDITOR.START:CKEDITOR.END))e=1}return!e});a.blockless&&(CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)&&this.attachListener(this,"keyup",function(b){if(b.data.getKeystroke()in l&&!this.getFirst(c)){this.appendBogus();b=a.createRange();b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START);b.select()}}); +this.attachListener(this,"dblclick",function(b){if(a.readOnly)return false;b={element:b.data.getTarget()};a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",b);CKEDITOR.env.ie||this.attachListener(this,"mousedown",function(b){var c=b.data.getTarget();if(c.is("img","hr","input","textarea","select")&&!c.isReadOnly()){a.getSelection().selectElement(c);c.is("input","textarea","select")&&b.data.preventDefault()}});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(b.data.$.button== +2){b=b.data.getTarget();if(!b.getOuterHtml().replace(y,"")){var c=a.createRange();c.moveToElementEditStart(b);c.select(true)}}});if(CKEDITOR.env.webkit){this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()});this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()})}CKEDITOR.env.webkit&&this.attachListener(a,"key",function(b){b=b.data.domEvent.getKey();if(b in l){var c=b==8,d=a.getSelection().getRanges()[0], +b=d.startPath();if(d.collapsed){var e;a:{var f=b.block;if(f)if(d[c?"checkStartOfBlock":"checkEndOfBlock"]())if(!d.moveToClosestEditablePosition(f,!c)||!d.collapsed)e=false;else{if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var h=d.startContainer.getChild(d.startOffset-(c?1:0));if(h&&h.type==CKEDITOR.NODE_ELEMENT&&h.is("hr")){a.fire("saveSnapshot");h.remove();e=true;break a}}if((d=d.startPath().block)&&(!d||!d.contains(f))){a.fire("saveSnapshot");var j;(j=(c?d:f).getBogus())&&j.remove();e=a.getSelection(); +j=e.createBookmarks();(c?f:d).moveChildren(c?d:f,false);b.lastElement.mergeSiblings();g(f,d,!c);e.selectBookmarks(j);e=true}}else e=false;else e=false}if(!e)return}else{c=d;e=b.block;j=c.endPath().block;if(!e||!j||e.equals(j))b=false;else{a.fire("saveSnapshot");(f=e.getBogus())&&f.remove();c.deleteContents();if(j.getParent()){j.moveChildren(e,false);b.lastElement.mergeSiblings();g(e,j,true)}c=a.getSelection().getRanges()[0];c.collapse(1);c.select();b=true}if(!b)return}a.getSelection().scrollIntoView(); +a.fire("saveSnapshot");return false}},this,null,100)}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());if(!this.is("textarea")){a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var c=a.getCustomData("stylesheet_ref");if(--c)a.setCustomData("stylesheet_ref",c);else{a.removeCustomData("stylesheet_ref");b.removeCustomData("stylesheet").remove()}}}this.editor.fire("contentDomUnload"); +delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;if(arguments.length)b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null);return b};var m=CKEDITOR.dom.walker.bogus(),y=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi,s=CKEDITOR.dom.walker.whitespaces(true),w=CKEDITOR.dom.walker.bookmark(false,true);CKEDITOR.on("instanceLoaded", +function(b){var c=b.editor;c.on("insertElement",function(a){a=a.data;if(a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))){a.getAttribute("contentEditable")!="false"&&a.data("cke-editable",a.hasAttribute("contenteditable")?"true":"1");a.setAttribute("contentEditable",false)}});c.on("selectionChange",function(b){if(!c.readOnly){var d=c.getSelection();if(d&&!d.isLocked){d=c.checkDirty();c.fire("lockSnapshot");a(b);c.fire("unlockSnapshot");!d&&c.resetDirty()}}})});CKEDITOR.on("instanceCreated", +function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var c=b.title;a.changeAttr("role","textbox");a.changeAttr("aria-label",c);c&&a.changeAttr("title",c);var d=b.fire("ariaEditorHelpLabel",{}).label;if(d)if(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents")){var e=CKEDITOR.tools.getNextId(),d=CKEDITOR.dom.element.createFromHtml('<span id="'+e+'" class="cke_voice_label">'+d+"</span>");c.append(d);a.changeAttr("aria-describedby",e)}}})}); +CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");var q=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var e,f,l,p,h=[],g=d.range.startContainer;e=d.range.startPath();for(var g=r[g.getName()],n=0,j=c.getChildren(),m=j.count(),o=-1,C=-1,k=0,q=e.contains(r.$list);n<m;++n){e=j.getItem(n);if(a(e)){l=e.getName();if(q&&l in CKEDITOR.dtd.$list)h=h.concat(b(e,d));else{p=!!g[l];if(l=="br"&&e.data("cke-eol")&& +(!n||n==m-1)){k=(f=n?h[n-1].node:j.getItem(n+1))&&(!a(f)||!f.is("br"));f=f&&a(f)&&r.$block[f.getName()]}o==-1&&!p&&(o=n);p||(C=n);h.push({isElement:1,isLineBreak:k,isBlock:e.isBlockBoundary(),hasBlockSibling:f,node:e,name:l,allowed:p});f=k=0}}else h.push({isElement:0,node:e,allowed:1})}if(o>-1)h[o].firstNotAllowed=1;if(C>-1)h[C].lastNotAllowed=1;return h}function d(b,c){var e=[],f=b.getChildren(),l=f.count(),p,h=0,g=r[c],n=!b.is(r.$inline)||b.is("br");for(n&&e.push(" ");h<l;h++){p=f.getItem(h);a(p)&& +!p.is(g)?e=e.concat(d(p,c)):e.push(p)}n&&e.push(" ");return e}function e(b){return b&&a(b)&&(b.is(r.$removeEmpty)||b.is("a")&&!b.isBlockBoundary())}function f(b,c,d,e){var p=b.clone(),h,r;p.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);if((h=(new CKEDITOR.dom.walker(p)).next())&&a(h)&&g[h.getName()]&&(r=h.getPrevious())&&a(r)&&!r.getParent().equals(b.startContainer)&&d.contains(r)&&e.contains(h)&&h.isIdentical(r)){h.moveChildren(r);h.remove();f(b,c,d,e)}}function p(b,c){function d(b,c){if(c.isBlock&&c.isElement&& +!c.node.is("br")&&a(b)&&b.is("br")){b.remove();return 1}}var e=c.endContainer.getChild(c.endOffset),f=c.endContainer.getChild(c.endOffset-1);e&&d(e,b[b.length-1]);if(f&&d(f,b[0])){c.setEnd(c.endContainer,c.endOffset-1);c.collapse()}}var r=CKEDITOR.dtd,g={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},m={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},C=CKEDITOR.tools.extend({},r.$inline);delete C.br;return function(g,n,k){var q=g.editor,v=q.getSelection().getRanges()[0], +G=false;if(n=="unfiltered_html"){n="html";G=true}if(!v.checkReadOnly()){var z=(new CKEDITOR.dom.elementPath(v.startContainer,v.root)).blockLimit||v.root,n={type:n,dontFilter:G,editable:g,editor:q,range:v,blockLimit:z,mergeCandidates:[],zombies:[]},q=n.range,G=n.mergeCandidates,B,x,E,s;if(n.type=="text"&&q.shrink(CKEDITOR.SHRINK_ELEMENT,true,false)){B=CKEDITOR.dom.element.createFromHtml("<span> </span>",q.document);q.insertNode(B);q.setStartAfter(B)}x=new CKEDITOR.dom.elementPath(q.startContainer); +n.endPath=E=new CKEDITOR.dom.elementPath(q.endContainer);if(!q.collapsed){var z=E.block||E.blockLimit,w=q.getCommonAncestor();z&&(!z.equals(w)&&!z.contains(w)&&q.checkEndOfBlock())&&n.zombies.push(z);q.deleteContents()}for(;(s=a(q.startContainer)&&q.startContainer.getChild(q.startOffset-1))&&a(s)&&s.isBlockBoundary()&&x.contains(s);)q.moveToPosition(s,CKEDITOR.POSITION_BEFORE_END);f(q,n.blockLimit,x,E);if(B){q.setEndBefore(B);q.collapse();B.remove()}B=q.startPath();if(z=B.contains(e,false,1)){q.splitElement(z); +n.inlineStylesRoot=z;n.inlineStylesPeak=B.lastElement}B=q.createBookmark();(z=B.startNode.getPrevious(c))&&a(z)&&e(z)&&G.push(z);(z=B.startNode.getNext(c))&&a(z)&&e(z)&&G.push(z);for(z=B.startNode;(z=z.getParent())&&e(z);)G.push(z);q.moveToBookmark(B);if(B=k){B=n.range;if(n.type=="text"&&n.inlineStylesRoot){s=n.inlineStylesPeak;q=s.getDocument().createText("{cke-peak}");for(G=n.inlineStylesRoot.getParent();!s.equals(G);){q=q.appendTo(s.clone());s=s.getParent()}k=q.getOuterHtml().split("{cke-peak}").join(k)}s= +n.blockLimit.getName();if(/^\s+|\s+$/.test(k)&&"span"in CKEDITOR.dtd[s])var y='<span data-cke-marker="1"> </span>',k=y+k+y;k=n.editor.dataProcessor.toHtml(k,{context:null,fixForBody:false,dontFilter:n.dontFilter,filter:n.editor.activeFilter,enterMode:n.editor.activeEnterMode});s=B.document.createElement("body");s.setHtml(k);if(y){s.getFirst().remove();s.getLast().remove()}if((y=B.startPath().block)&&!(y.getChildCount()==1&&y.getBogus()))a:{var t;if(s.getChildCount()==1&&a(t=s.getFirst())&&t.is(m)){y= +t.getElementsByTag("*");B=0;for(G=y.count();B<G;B++){q=y.getItem(B);if(!q.is(C))break a}t.moveChildren(t.getParent(1));t.remove()}}n.dataWrapper=s;B=k}if(B){t=n.range;var y=t.document,D,k=n.blockLimit;B=0;var J;s=[];var H,Q,G=q=0,M,S;x=t.startContainer;var z=n.endPath.elements[0],T;E=z.getPosition(x);w=!!z.getCommonAncestor(x)&&E!=CKEDITOR.POSITION_IDENTICAL&&!(E&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);x=b(n.dataWrapper,n);for(p(x,t);B<x.length;B++){E=x[B];if(D=E.isLineBreak){D= +t;M=k;var O=void 0,V=void 0;if(E.hasBlockSibling)D=1;else{O=D.startContainer.getAscendant(r.$block,1);if(!O||!O.is({div:1,p:1}))D=0;else{V=O.getPosition(M);if(V==CKEDITOR.POSITION_IDENTICAL||V==CKEDITOR.POSITION_CONTAINS)D=0;else{M=D.splitElement(O);D.moveToPosition(M,CKEDITOR.POSITION_AFTER_START);D=1}}}}if(D)G=B>0;else{D=t.startPath();if(!E.isBlock&&h(n.editor,D.block,D.blockLimit)&&(Q=n.editor.activeEnterMode!=CKEDITOR.ENTER_BR&&n.editor.config.autoParagraph!==false?n.editor.activeEnterMode==CKEDITOR.ENTER_DIV? +"div":"p":false)){Q=y.createElement(Q);Q.appendBogus();t.insertNode(Q);CKEDITOR.env.needsBrFiller&&(J=Q.getBogus())&&J.remove();t.moveToPosition(Q,CKEDITOR.POSITION_BEFORE_END)}if((D=t.startPath().block)&&!D.equals(H)){if(J=D.getBogus()){J.remove();s.push(D)}H=D}E.firstNotAllowed&&(q=1);if(q&&E.isElement){D=t.startContainer;for(M=null;D&&!r[D.getName()][E.name];){if(D.equals(k)){D=null;break}M=D;D=D.getParent()}if(D){if(M){S=t.splitElement(M);n.zombies.push(S);n.zombies.push(M)}}else{M=k.getName(); +T=!B;D=B==x.length-1;M=d(E.node,M);for(var O=[],V=M.length,W=0,Y=void 0,Z=0,U=-1;W<V;W++){Y=M[W];if(Y==" "){if(!Z&&(!T||W)){O.push(new CKEDITOR.dom.text(" "));U=O.length}Z=1}else{O.push(Y);Z=0}}D&&U==O.length&&O.pop();T=O}}if(T){for(;D=T.pop();)t.insertNode(D);T=0}else t.insertNode(E.node);if(E.lastNotAllowed&&B<x.length-1){(S=w?z:S)&&t.setEndAt(S,CKEDITOR.POSITION_AFTER_START);q=0}t.collapse()}}n.dontMoveCaret=G;n.bogusNeededBlocks=s}J=n.range;var N;S=n.bogusNeededBlocks;for(T=J.createBookmark();H= +n.zombies.pop();)if(H.getParent()){Q=J.clone();Q.moveToElementEditStart(H);Q.removeEmptyBlocksAtEnd()}if(S)for(;H=S.pop();)CKEDITOR.env.needsBrFiller?H.appendBogus():H.append(J.document.createText(" "));for(;H=n.mergeCandidates.pop();)H.mergeSiblings();J.moveToBookmark(T);if(!n.dontMoveCaret){for(H=a(J.startContainer)&&J.startContainer.getChild(J.startOffset-1);H&&a(H)&&!H.is(r.$empty);){if(H.isBlockBoundary())J.moveToPosition(H,CKEDITOR.POSITION_BEFORE_END);else{if(e(H)&&H.getHtml().match(/(\s| )$/g)){N= +null;break}N=J.clone();N.moveToPosition(H,CKEDITOR.POSITION_BEFORE_END)}H=H.getLast(c)}N&&J.moveToRange(N)}v.select();j(g)}}}(),t=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return false;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};return b}function b(a,c,d){c=a.getDocument().createElement(c);a.append(c,d);return c}function c(a){var b=a.count(),d;for(b;b-- >0;){d=a.getItem(b); +if(!CKEDITOR.tools.trim(d.getHtml())){d.appendBogus();CKEDITOR.env.ie&&(CKEDITOR.env.version<9&&d.getChildCount())&&d.getFirst().remove()}}}return function(d){var e=d.startContainer,f=e.getAscendant("table",1),h=false;c(f.getElementsByTag("td"));c(f.getElementsByTag("th"));f=d.clone();f.setStart(e,0);f=a(f).lastBackward();if(!f){f=d.clone();f.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);f=a(f).lastForward();h=true}f||(f=e);if(f.is("table")){d.setStartAt(f,CKEDITOR.POSITION_BEFORE_START);d.collapse(true); +f.remove()}else{f.is({tbody:1,thead:1,tfoot:1})&&(f=b(f,"tr",h));f.is("tr")&&(f=b(f,f.getParent().is("thead")?"th":"td",h));(e=f.getBogus())&&e.remove();d.moveToPosition(f,h?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END)}}}()})(); +(function(){function a(){var a=this._.fakeSelection,b;if(a){b=this.getSelection(1);if(!b||!b.isHidden()){a.reset();a=0}}if(!a){a=b||this.getSelection(1);if(!a||a.getType()==CKEDITOR.SELECTION_NONE)return}this.fire("selectionCheck",a);b=this.elementPath();if(!b.compare(this._.selectionPreviousPath)){if(CKEDITOR.env.webkit)this._.previousActive=this.document.getActive();this._.selectionPreviousPath=b;this.fire("selectionChange",{selection:a,path:b})}}function f(){q=true;if(!w){b.call(this);w=CKEDITOR.tools.setTimeout(b, +200,this)}}function b(){w=null;if(q){CKEDITOR.tools.setTimeout(a,0,this);q=false}}function c(a){return t(a)||a.type==CKEDITOR.NODE_ELEMENT&&!a.is(CKEDITOR.dtd.$empty)?true:false}function e(a){function b(c,d){return!c||c.type==CKEDITOR.NODE_TEXT?false:a.clone()["moveToElementEdit"+(d?"End":"Start")](c)}if(!(a.root instanceof CKEDITOR.editable))return false;var d=a.startContainer,e=a.getPreviousNode(c,null,d),f=a.getNextNode(c,null,d);return b(e)||b(f,1)||!e&&!f&&!(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()&& +d.getBogus())?true:false}function d(a){return a.getCustomData("cke-fillingChar")}function h(a,b){var c=a&&a.removeCustomData("cke-fillingChar");if(c){if(b!==false){var d,e=a.getDocument().getSelection().getNative(),f=e&&e.type!="None"&&e.getRangeAt(0);if(c.getLength()>1&&f&&f.intersectsNode(c.$)){d=j(e);f=e.focusNode==c.$&&e.focusOffset>0;e.anchorNode==c.$&&e.anchorOffset>0&&d[0].offset--;f&&d[1].offset--}}c.setText(k(c.getText()));d&&g(a.getDocument().$,d)}}function k(a){return a.replace(/\u200B( )?/g, +function(a){return a[1]?" ":""})}function j(a){return[{node:a.anchorNode,offset:a.anchorOffset},{node:a.focusNode,offset:a.focusOffset}]}function g(a,b){var c=a.getSelection(),d=a.createRange();d.setStart(b[0].node,b[0].offset);d.collapse(true);c.removeAllRanges();c.addRange(d);c.extend(b[1].node,b[1].offset)}function m(a){var b=CKEDITOR.dom.element.createFromHtml('<div data-cke-hidden-sel="1" data-cke-temp="1" style="'+(CKEDITOR.env.ie?"display:none":"position:fixed;top:0;left:-1000px")+'"> </div>', +a.document);a.fire("lockSnapshot");a.editable().append(b);var c=a.getSelection(1),d=a.createRange(),e=c.root.on("selectionchange",function(a){a.cancel()},null,null,0);d.setStartAt(b,CKEDITOR.POSITION_AFTER_START);d.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);c.selectRanges([d]);e.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=b}function y(a){var b={37:1,39:1,8:1,46:1};return function(c){var d=c.data.getKeystroke();if(b[d]){var e=a.getSelection().getRanges(),f=e[0];if(e.length== +1&&f.collapsed)if((d=f[d<38?"getPreviousEditableNode":"getNextEditableNode"]())&&d.type==CKEDITOR.NODE_ELEMENT&&d.getAttribute("contenteditable")=="false"){a.getSelection().fake(d);c.data.preventDefault();c.cancel()}}}}function s(a){for(var b=0;b<a.length;b++){var c=a[b];c.getCommonAncestor().isReadOnly()&&a.splice(b,1);if(!c.collapsed){if(c.startContainer.isReadOnly())for(var d=c.startContainer,e;d;){if((e=d.type==CKEDITOR.NODE_ELEMENT)&&d.is("body")||!d.isReadOnly())break;e&&d.getAttribute("contentEditable")== +"false"&&c.setStartAfter(d);d=d.getParent()}d=c.startContainer;e=c.endContainer;var f=c.startOffset,h=c.endOffset,g=c.clone();d&&d.type==CKEDITOR.NODE_TEXT&&(f>=d.getLength()?g.setStartAfter(d):g.setStartBefore(d));e&&e.type==CKEDITOR.NODE_TEXT&&(h?g.setEndAfter(e):g.setEndBefore(e));d=new CKEDITOR.dom.walker(g);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&d.isReadOnly()){var e=c.clone();c.setEndBefore(d);c.collapsed&&a.splice(b--,1);if(!(d.getPosition(g.endContainer)&CKEDITOR.POSITION_CONTAINS)){e.setStartAfter(d); +e.collapsed||a.splice(b+1,0,e)}return true}return false};d.next()}}return a}var w,q,t=CKEDITOR.dom.walker.invisible(1),i=function(){function a(b){return function(a){var c=a.editor.createRange();c.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([c]);return false}}function b(a){return function(b){var c=b.editor,d=c.createRange(),e;if(!(e=d.moveToClosestEditablePosition(b.selected,a)))e=d.moveToClosestEditablePosition(b.selected,!a);e&&c.getSelection().selectRanges([d]); +c.fire("saveSnapshot");b.selected.remove();if(!e){d.moveToElementEditablePosition(c.editable());c.getSelection().selectRanges([d])}c.fire("saveSnapshot");return false}}var c=a(),d=a(1);return{37:c,38:c,39:d,40:d,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(b){function c(){var a=d.getSelection();a&&a.removeAllRanges()}var d=b.editor;d.on("contentDom",function(){function b(){z=new CKEDITOR.dom.selection(d.getSelection());z.lock()}function c(){l.removeListener("mouseup",c);i.removeListener("mouseup", +c);var a=CKEDITOR.document.$.selection,b=a.createRange();a.type!="None"&&b.parentElement().ownerDocument==e.$&&b.select()}var e=d.document,l=CKEDITOR.document,g=d.editable(),p=e.getBody(),i=e.getDocumentElement(),v=g.isInline(),j,z;CKEDITOR.env.gecko&&g.attachListener(g,"focus",function(a){a.removeListener();if(j!==0)if((a=d.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==g.$){a=d.createRange();a.moveToElementEditStart(g);a.select()}},null,null,-2);g.attachListener(g,CKEDITOR.env.webkit? +"DOMFocusIn":"focus",function(){j&&CKEDITOR.env.webkit&&(j=d._.previousActive&&d._.previousActive.equals(e.getActive()));d.unlockSelection(j);j=0},null,null,-1);g.attachListener(g,"mousedown",function(){j=0});if(CKEDITOR.env.ie||v){A?g.attachListener(g,"beforedeactivate",b,null,null,-1):g.attachListener(d,"selectionCheck",b,null,null,-1);g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusOut":"blur",function(){d.lockSelection(z);j=1},null,null,-1);g.attachListener(g,"mousedown",function(){j=0})}if(CKEDITOR.env.ie&& +!v){var B;g.attachListener(g,"mousedown",function(a){if(a.data.$.button==2){a=d.document.getSelection();if(!a||a.getType()==CKEDITOR.SELECTION_NONE)B=d.window.getScrollPosition()}});g.attachListener(g,"mouseup",function(a){if(a.data.$.button==2&&B){d.document.$.documentElement.scrollLeft=B.x;d.document.$.documentElement.scrollTop=B.y}B=null});if(e.$.compatMode!="BackCompat"){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)i.on("mousedown",function(a){function b(a){a=a.data.$;if(d){var c=p.$.createTextRange(); +try{c.moveToPoint(a.clientX,a.clientY)}catch(e){}d.setEndPoint(f.compareEndPoints("StartToStart",c)<0?"EndToEnd":"StartToStart",c);d.select()}}function c(){i.removeListener("mousemove",b);l.removeListener("mouseup",c);i.removeListener("mouseup",c);d.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<i.$.clientHeight&&a.$.x<i.$.clientWidth){var d=p.$.createTextRange();try{d.moveToPoint(a.$.clientX,a.$.clientY)}catch(e){}var f=d.duplicate();i.on("mousemove",b);l.on("mouseup",c);i.on("mouseup",c)}}); +if(CKEDITOR.env.version>7&&CKEDITOR.env.version<11)i.on("mousedown",function(a){if(a.data.getTarget().is("html")){l.on("mouseup",c);i.on("mouseup",c)}})}}g.attachListener(g,"selectionchange",a,d);g.attachListener(g,"keyup",f,d);g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){d.forceNextSelectionCheck();d.selectionChange(1)});if(v&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var x;g.attachListener(g,"mousedown",function(){x=1});g.attachListener(e.getDocumentElement(),"mouseup", +function(){x&&f.call(d);x=0})}else g.attachListener(CKEDITOR.env.ie?g:e.getDocumentElement(),"mouseup",f,d);CKEDITOR.env.webkit&&g.attachListener(e,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:h(g)}},null,null,-1);g.attachListener(g,"keydown",y(d),null,null,-1)});d.on("setData",function(){d.unlockSelection();CKEDITOR.env.webkit&&c()});d.on("contentDomUnload",function(){d.unlockSelection()});if(CKEDITOR.env.ie9Compat)d.on("beforeDestroy", +c,null,null,9);d.on("dataReady",function(){delete d._.fakeSelection;delete d._.hiddenSelectionContainer;d.selectionChange(1)});d.on("loadSnapshot",function(){var a=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT),b=d.editable().getLast(a);if(b&&b.hasAttribute("data-cke-hidden-sel")){b.remove();if(CKEDITOR.env.gecko)(a=d.editable().getFirst(a))&&(a.is("br")&&a.getAttribute("_moz_editor_bogus_node"))&&a.remove()}},null,null,100);d.on("key",function(a){if(d.mode=="wysiwyg"){var b=d.getSelection(); +if(b.isFake){var c=i[a.data.keyCode];if(c)return c({editor:d,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});CKEDITOR.on("instanceReady",function(a){function b(){var a=e.editable();if(a)if(a=d(a)){var c=e.document.$.getSelection();if(c.type!="None"&&(c.anchorNode==a.$||c.focusNode==a.$))i=j(c);f=a.getText();a.setText(k(f))}}function c(){var a=e.editable();if(a)if(a=d(a)){a.setText(f);if(i){g(e.document.$,i);i=null}}}var e=a.editor,f,i;if(CKEDITOR.env.webkit){e.on("selectionChange", +function(){var a=e.editable(),b=d(a);b&&(b.getCustomData("ready")?h(a):b.setCustomData("ready",1))},null,null,-1);e.on("beforeSetMode",function(){h(e.editable())},null,null,-1);e.on("beforeUndoImage",b);e.on("afterUndoImage",c);e.on("beforeGetData",b,null,null,0);e.on("getData",c)}});CKEDITOR.editor.prototype.selectionChange=function(b){(b?a:f).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){if((this._.savedSelection||this._.fakeSelection)&&!a)return this._.savedSelection||this._.fakeSelection; +return(a=this.editable())&&this.mode=="wysiwyg"?new CKEDITOR.dom.selection(a):null};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);if(a.getType()!=CKEDITOR.SELECTION_NONE){!a.isLocked&&a.lock();this._.savedSelection=a;return true}return false};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;if(b){b.unlock(a);delete this._.savedSelection;return true}return false};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath}; +CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;var A=typeof window.getSelection!="function",u=1;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection)var b= +a,a=a.root;var c=a instanceof CKEDITOR.dom.element;this.rev=b?b.rev:u++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=c?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b){CKEDITOR.tools.extend(this._.cache,b._.cache);this.isFake=b.isFake;this.isLocked=b.isLocked;return this}var a=this.getNative(),d,e;if(a)if(a.getRangeAt)d=(e=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(e.commonAncestorContainer);else{try{e=a.createRange()}catch(f){}d=e&&CKEDITOR.dom.element.get(e.item&& +e.item(0)||e.parentElement())}if(!d||!(d.type==CKEDITOR.NODE_ELEMENT||d.type==CKEDITOR.NODE_TEXT)||!this.root.equals(d)&&!this.root.contains(d)){this._.cache.type=CKEDITOR.SELECTION_NONE;this._.cache.startElement=null;this._.cache.selectedElement=null;this._.cache.selectedText="";this._.cache.ranges=new CKEDITOR.dom.rangeList}return this};var o={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.dom.selection.prototype= +{getNative:function(){return this._.cache.nativeSel!==void 0?this._.cache.nativeSel:this._.cache.nativeSel=A?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:A?function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE;try{var c=this.getNative(),d=c.type;if(d=="Text")b=CKEDITOR.SELECTION_TEXT;if(d=="Control")b=CKEDITOR.SELECTION_ELEMENT;if(c.createRange().parentElement())b=CKEDITOR.SELECTION_TEXT}catch(e){}return a.type=b}:function(){var a=this._.cache; +if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(c.rangeCount==1){var c=c.getRangeAt(0),d=c.startContainer;if(d==c.endContainer&&d.nodeType==1&&c.endOffset-c.startOffset==1&&o[d.childNodes[c.startOffset].nodeName.toLowerCase()])b=CKEDITOR.SELECTION_ELEMENT}return a.type=b},getRanges:function(){var a=A?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c); +var d=b.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var e=d.children,f,g,h=b.duplicate(),v=0,l=e.length-1,i=-1,j,x;v<=l;){i=Math.floor((v+l)/2);f=e[i];h.moveToElementText(f);j=h.compareEndPoints("StartToStart",b);if(j>0)l=i-1;else if(j<0)v=i+1;else return{container:d,offset:a(f)}}if(i==-1||i==e.length-1&&j<0){h.moveToElementText(d);h.setEndPoint("StartToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;e=d.childNodes;if(!h){f=e[e.length-1];return f.nodeType!=CKEDITOR.NODE_TEXT? +{container:d,offset:e.length}:{container:f,offset:f.nodeValue.length}}for(d=e.length;h>0&&d>0;){g=e[--d];if(g.nodeType==CKEDITOR.NODE_TEXT){x=g;h=h-g.nodeValue.length}}return{container:x,offset:-h}}h.collapse(j>0?true:false);h.setEndPoint(j>0?"StartToStart":"EndToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;if(!h)return{container:d,offset:a(f)+(j>0?0:1)};for(;h>0;)try{g=f[j>0?"previousSibling":"nextSibling"];if(g.nodeType==CKEDITOR.NODE_TEXT){h=h-g.nodeValue.length;x=g}f=g}catch(m){return{container:d, +offset:a(f)}}return{container:x,offset:j>0?-h:x.nodeValue.length+h}};return function(){var a=this.getNative(),c=a&&a.createRange(),d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT){a=new CKEDITOR.dom.range(this.root);d=b(c,true);a.setStart(new CKEDITOR.dom.node(d.container),d.offset);d=b(c);a.setEnd(new CKEDITOR.dom.node(d.container),d.offset);a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse();return[a]}if(d== +CKEDITOR.SELECTION_ELEMENT){for(var d=[],e=0;e<c.length;e++){for(var f=c.item(e),h=f.parentNode,g=0,a=new CKEDITOR.dom.range(this.root);g<h.childNodes.length&&h.childNodes[g]!=f;g++);a.setStart(new CKEDITOR.dom.node(h),g);a.setEnd(new CKEDITOR.dom.node(h),g+1);d.push(a)}return d}return[]}}():function(){var a=[],b,c=this.getNative();if(!c)return a;for(var d=0;d<c.rangeCount;d++){var e=c.getRangeAt(d);b=new CKEDITOR.dom.range(this.root);b.setStart(new CKEDITOR.dom.node(e.startContainer),e.startOffset); +b.setEnd(new CKEDITOR.dom.node(e.endContainer),e.endOffset);a.push(b)}return a};return function(b){var c=this._.cache,d=c.ranges;if(!d)c.ranges=d=new CKEDITOR.dom.rangeList(a.call(this));return!b?d:s(new CKEDITOR.dom.rangeList(d.slice()))}}(),getStartElement:function(){var a=this._.cache;if(a.startElement!==void 0)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var c=this.getRanges()[0];if(c){if(c.collapsed){b= +c.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent())}else{for(c.optimize();;){b=c.startContainer;if(c.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary())c.setStartAfter(b);else break}b=c.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent();b=b.getChild(c.startOffset);if(!b||b.type!=CKEDITOR.NODE_ELEMENT)b=c.startContainer;else for(c=b.getFirst();c&&c.type==CKEDITOR.NODE_ELEMENT;){b=c;c=c.getFirst()}}b=b.$}}return a.startElement=b?new CKEDITOR.dom.element(b): +null},getSelectedElement:function(){var a=this._.cache;if(a.selectedElement!==void 0)return a.selectedElement;var b=this,c=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)},function(){for(var a=b.getRanges()[0].clone(),c,d,e=2;e&&(!(c=a.getEnclosedNode())||!(c.type==CKEDITOR.NODE_ELEMENT&&o[c.getName()]&&(d=c)));e--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d&&d.$});return a.selectedElement=c?new CKEDITOR.dom.element(c):null},getSelectedText:function(){var a=this._.cache; +if(a.selectedText!==void 0)return a.selectedText;var b=this.getNative(),b=A?b.type=="Control"?"":b.createRange().text:b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;this.isLocked=1},unlock:function(a){if(this.isLocked){if(a)var b=this.getSelectedElement(),c=!b&&this.getRanges(),d=this.isFake;this.isLocked=0;this.reset();if(a)(a=b||c[0]&&c[0].getCommonAncestor())&&a.getAscendant("body", +1)&&(d?this.fake(b):b?this.selectElement(b):this.selectRanges(c))}},reset:function(){this._.cache={};this.isFake=0;var a=this.root.editor;if(a&&a._.fakeSelection&&this.rev==a._.fakeSelection.rev){delete a._.fakeSelection;var b=a._.hiddenSelectionContainer;if(b){var c=a.checkDirty();a.fire("lockSnapshot");b.remove();a.fire("unlockSnapshot");!c&&a.resetDirty()}delete a._.hiddenSelectionContainer}this.rev=u++},selectElement:function(a){var b=new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a); +this.selectRanges([b])},selectRanges:function(a){var b=this.root.editor,b=b&&b._.hiddenSelectionContainer;this.reset();if(b)for(var b=this.root,c,d=0;d<a.length;++d){c=a[d];if(c.endContainer.equals(b))c.endOffset=Math.min(c.endOffset,b.getChildCount())}if(a.length)if(this.isLocked){var f=CKEDITOR.document.getActive();this.unlock();this.selectRanges(a);this.lock();f&&!f.equals(this.root)&&f.focus()}else{var g;a:{var i,j;if(a.length==1&&!(j=a[0]).collapsed&&(g=j.getEnclosedNode())&&g.type==CKEDITOR.NODE_ELEMENT){j= +j.clone();j.shrink(CKEDITOR.SHRINK_ELEMENT,true);if((i=j.getEnclosedNode())&&i.type==CKEDITOR.NODE_ELEMENT)g=i;if(g.getAttribute("contenteditable")=="false")break a}g=void 0}if(g)this.fake(g);else{if(A){j=CKEDITOR.dom.walker.whitespaces(true);i=/\ufeff|\u00a0/;b={table:1,tbody:1,tr:1};if(a.length>1){g=a[a.length-1];a[0].setEnd(g.endContainer,g.endOffset)}g=a[0];var a=g.collapsed,m,k,v;if((c=g.getEnclosedNode())&&c.type==CKEDITOR.NODE_ELEMENT&&c.getName()in o&&(!c.is("a")||!c.getText()))try{v=c.$.createControlRange(); +v.addElement(c.$);v.select();return}catch(q){}if(g.startContainer.type==CKEDITOR.NODE_ELEMENT&&g.startContainer.getName()in b||g.endContainer.type==CKEDITOR.NODE_ELEMENT&&g.endContainer.getName()in b){g.shrink(CKEDITOR.NODE_ELEMENT,true);a=g.collapsed}v=g.createBookmark();b=v.startNode;if(!a)f=v.endNode;v=g.document.$.body.createTextRange();v.moveToElementText(b.$);v.moveStart("character",1);if(f){i=g.document.$.body.createTextRange();i.moveToElementText(f.$);v.setEndPoint("EndToEnd",i);v.moveEnd("character", +-1)}else{m=b.getNext(j);k=b.hasAscendant("pre");m=!(m&&m.getText&&m.getText().match(i))&&(k||!b.hasPrevious()||b.getPrevious().is&&b.getPrevious().is("br"));k=g.document.createElement("span");k.setHtml("");k.insertBefore(b);m&&g.document.createText("").insertBefore(b)}g.setStartBefore(b);b.remove();if(a){if(m){v.moveStart("character",-1);v.select();g.document.$.selection.clear()}else v.select();g.moveToPosition(k,CKEDITOR.POSITION_BEFORE_START);k.remove()}else{g.setEndBefore(f);f.remove(); +v.select()}}else{f=this.getNative();if(!f)return;this.removeAllRanges();for(v=0;v<a.length;v++){if(v<a.length-1){m=a[v];k=a[v+1];i=m.clone();i.setStart(m.endContainer,m.endOffset);i.setEnd(k.startContainer,k.startOffset);if(!i.collapsed){i.shrink(CKEDITOR.NODE_ELEMENT,true);g=i.getCommonAncestor();i=i.getEnclosedNode();if(g.isReadOnly()||i&&i.isReadOnly()){k.setStart(m.startContainer,m.startOffset);a.splice(v--,1);continue}}}g=a[v];k=this.document.$.createRange();if(g.collapsed&&CKEDITOR.env.webkit&& +e(g)){m=this.root;h(m,false);i=m.getDocument().createText("​");m.setCustomData("cke-fillingChar",i);g.insertNode(i);if((m=i.getNext())&&!i.getPrevious()&&m.type==CKEDITOR.NODE_ELEMENT&&m.getName()=="br"){h(this.root);g.moveToPosition(m,CKEDITOR.POSITION_BEFORE_START)}else g.moveToPosition(i,CKEDITOR.POSITION_AFTER_END)}k.setStart(g.startContainer.$,g.startOffset);try{k.setEnd(g.endContainer.$,g.endOffset)}catch(z){if(z.toString().indexOf("NS_ERROR_ILLEGAL_VALUE")>=0){g.collapse(1);k.setEnd(g.endContainer.$, +g.endOffset)}else throw z;}f.addRange(k)}}this.reset();this.root.fire("selectionchange")}}},fake:function(a){var b=this.root.editor;this.reset();m(b);var c=this._.cache,d=new CKEDITOR.dom.range(this.root);d.setStartBefore(a);d.setEndAfter(a);c.ranges=new CKEDITOR.dom.rangeList(d);c.selectedElement=c.startElement=a;c.type=CKEDITOR.SELECTION_ELEMENT;c.selectedText=c.nativeSel=null;this.isFake=1;this.rev=u++;b._.fakeSelection=this;this.root.fire("selectionchange")},isHidden:function(){var a=this.getCommonAncestor(); +a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=1);return a},selectBookmarks:function(a){for(var b=[],c=0;c<a.length;c++){var d=new CKEDITOR.dom.range(this.root);d.moveToBookmark(a[c]);b.push(d)}a.isFake?this.fake(b[0].getEnclosedNode()):this.selectRanges(b);return this}, +getCommonAncestor:function(){var a=this.getRanges();return!a.length?null:a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer)},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=this.getNative();try{a&&a[A?"empty":"removeAllRanges"]()}catch(b){}this.reset()}}}})();"use strict";CKEDITOR.STYLE_BLOCK=1;CKEDITOR.STYLE_INLINE=2;CKEDITOR.STYLE_OBJECT=3; +(function(){function a(a,b){for(var c,d;a=a.getParent();){if(a.equals(b))break;if(a.getAttribute("data-nostyle"))c=a;else if(!d){var e=a.getAttribute("contentEditable");e=="false"?c=a:e=="true"&&(d=1)}}return c}function f(b){var d=b.document;if(b.collapsed){d=i(this,d);b.insertNode(d);b.moveToPosition(d,CKEDITOR.POSITION_BEFORE_END)}else{var e=this.element,g=this._.definition,h,j=g.ignoreReadonly,m=j||g.includeReadonly;m==null&&(m=b.root.getCustomData("cke_includeReadonly"));var k=CKEDITOR.dtd[e]; +if(!k){h=true;k=CKEDITOR.dtd.span}b.enlarge(CKEDITOR.ENLARGE_INLINE,1);b.trim();var l=b.createBookmark(),q=l.startNode,o=l.endNode,n=q,p;if(!j){var s=b.getCommonAncestor(),j=a(q,s),s=a(o,s);j&&(n=j.getNextSourceNode(true));s&&(o=s)}for(n.getPosition(o)==CKEDITOR.POSITION_FOLLOWING&&(n=0);n;){j=false;if(n.equals(o)){n=null;j=true}else{var r=n.type==CKEDITOR.NODE_ELEMENT?n.getName():null,s=r&&n.getAttribute("contentEditable")=="false",t=r&&n.getAttribute("data-nostyle");if(r&&n.data("cke-bookmark")){n= +n.getNextSourceNode(true);continue}if(s&&m&&CKEDITOR.dtd.$block[r])for(var y=n,u=c(y),A=void 0,C=u.length,F=0,y=C&&new CKEDITOR.dom.range(y.getDocument());F<C;++F){var A=u[F],P=CKEDITOR.filter.instances[A.data("cke-filter")];if(P?P.check(this):1){y.selectNodeContents(A);f.call(this,y)}}u=r?!k[r]||t?0:s&&!m?0:(n.getPosition(o)|K)==K&&(!g.childRule||g.childRule(n)):1;if(u)if((u=n.getParent())&&((u.getDtd()||CKEDITOR.dtd.span)[e]||h)&&(!g.parentRule||g.parentRule(u))){if(!p&&(!r||!CKEDITOR.dtd.$removeEmpty[r]|| +(n.getPosition(o)|K)==K)){p=b.clone();p.setStartBefore(n)}r=n.type;if(r==CKEDITOR.NODE_TEXT||s||r==CKEDITOR.NODE_ELEMENT&&!n.getChildCount()){for(var r=n,U;(j=!r.getNext(L))&&(U=r.getParent(),k[U.getName()])&&(U.getPosition(q)|I)==I&&(!g.childRule||g.childRule(U));)r=U;p.setEndAfter(r)}}else j=true;else j=true;n=n.getNextSourceNode(t||s)}if(j&&p&&!p.collapsed){for(var j=i(this,d),s=j.hasAttributes(),t=p.getCommonAncestor(),r={},u={},A={},C={},N,R,X;j&&t;){if(t.getName()==e){for(N in g.attributes)if(!C[N]&& +(X=t.getAttribute(R)))j.getAttribute(N)==X?u[N]=1:C[N]=1;for(R in g.styles)if(!A[R]&&(X=t.getStyle(R)))j.getStyle(R)==X?r[R]=1:A[R]=1}t=t.getParent()}for(N in u)j.removeAttribute(N);for(R in r)j.removeStyle(R);s&&!j.hasAttributes()&&(j=null);if(j){p.extractContents().appendTo(j);p.insertNode(j);w.call(this,j);j.mergeSiblings();CKEDITOR.env.ie||j.$.normalize()}else{j=new CKEDITOR.dom.element("span");p.extractContents().appendTo(j);p.insertNode(j);w.call(this,j);j.remove(true)}p=null}}b.moveToBookmark(l); +b.shrink(CKEDITOR.SHRINK_TEXT);b.shrink(CKEDITOR.NODE_ELEMENT,true)}}function b(a){function b(){for(var a=new CKEDITOR.dom.elementPath(d.getParent()),c=new CKEDITOR.dom.elementPath(j.getParent()),e=null,f=null,g=0;g<a.elements.length;g++){var h=a.elements[g];if(h==a.block||h==a.blockLimit)break;m.checkElementRemovable(h,true)&&(e=h)}for(g=0;g<c.elements.length;g++){h=c.elements[g];if(h==c.block||h==c.blockLimit)break;m.checkElementRemovable(h,true)&&(f=h)}f&&j.breakParent(f);e&&d.breakParent(e)}a.enlarge(CKEDITOR.ENLARGE_INLINE, +1);var c=a.createBookmark(),d=c.startNode;if(a.collapsed){for(var e=new CKEDITOR.dom.elementPath(d.getParent(),a.root),f,g=0,h;g<e.elements.length&&(h=e.elements[g]);g++){if(h==e.block||h==e.blockLimit)break;if(this.checkElementRemovable(h)){var i;if(a.collapsed&&(a.checkBoundaryOfElement(h,CKEDITOR.END)||(i=a.checkBoundaryOfElement(h,CKEDITOR.START)))){f=h;f.match=i?"start":"end"}else{h.mergeSiblings();h.is(this.element)?s.call(this,h):q(h,o(this)[h.getName()])}}}if(f){h=d;for(g=0;;g++){i=e.elements[g]; +if(i.equals(f))break;else if(i.match)continue;else i=i.clone();i.append(h);h=i}h[f.match=="start"?"insertBefore":"insertAfter"](f)}}else{var j=c.endNode,m=this;b();for(e=d;!e.equals(j);){f=e.getNextSourceNode();if(e.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(e)){e.getName()==this.element?s.call(this,e):q(e,o(this)[e.getName()]);if(f.type==CKEDITOR.NODE_ELEMENT&&f.contains(d)){b();f=d.getNext()}}e=f}}a.moveToBookmark(c);a.shrink(CKEDITOR.NODE_ELEMENT,true)}function c(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")== +"true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function e(a){var b=a.getEnclosedNode()||a.getCommonAncestor(false,true);(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1))&&!a.isReadOnly()&&A(a,this)}function d(a){var b=a.getCommonAncestor(true,true);if(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1)){var b=this._.definition,c=b.attributes;if(c)for(var d in c)a.removeAttribute(d,c[d]);if(b.styles)for(var e in b.styles)b.styles.hasOwnProperty(e)&& +a.removeStyle(e)}}function h(a){var b=a.createBookmark(true),c=a.createIterator();c.enforceRealBlocks=true;if(this._.enterMode)c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e=a.document,f;d=c.getNextParagraph();)if(!d.isReadOnly()&&(c.activeFilter?c.activeFilter.check(this):1)){f=i(this,e,d);j(d,f)}a.moveToBookmark(b)}function k(a){var b=a.createBookmark(1),c=a.createIterator();c.enforceRealBlocks=true;c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e;d=c.getNextParagraph();)if(this.checkElementRemovable(d))if(d.is("pre")){(e= +this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))&&d.copyAttributes(e);j(d,e)}else s.call(this,d);a.moveToBookmark(b)}function j(a,b){var c=!b;if(c){b=a.getDocument().createElement("div");a.copyAttributes(b)}var d=b&&b.is("pre"),e=a.is("pre"),f=!d&&e;if(d&&!e){e=b;(f=a.getBogus())&&f.remove();f=a.getHtml();f=m(f,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");f=f.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");f=f.replace(/([ \t\n\r]+| )/g, +" ");f=f.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var h=a.getDocument().createElement("div");h.append(e);e.$.outerHTML="<pre>"+f+"</pre>";e.copyAttributes(h.getFirst());e=h.getFirst().remove()}else e.setHtml(f);b=e}else f?b=y(c?[a.getHtml()]:g(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,i;if((i=c.getPrevious(F))&&i.type==CKEDITOR.NODE_ELEMENT&&i.is("pre")){d=m(i.getHtml(),/\n$/,"")+"\n\n"+m(c.getHtml(),/^\n/,"");CKEDITOR.env.ie?c.$.outerHTML="<pre>"+d+"</pre>":c.setHtml(d);i.remove()}}else c&& +t(b)}function g(a){var b=[];m(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"</pre>"+c+"<pre>"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function m(a,b,c){var d="",e="",a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(e=c);return""});return d+a.replace(b,c)+e}function y(a,b){var c;a.length>1&&(c=new CKEDITOR.dom.documentFragment(b.getDocument())); +for(var d=0;d<a.length;d++){var e=a[d],e=e.replace(/(\r\n|\r)/g,"\n"),e=m(e,/^[ \t]*\n/,""),e=m(e,/\n$/,""),e=m(e,/^[ \t]+|[ \t]+$/g,function(a,b){return a.length==1?" ":b?" "+CKEDITOR.tools.repeat(" ",a.length-1):CKEDITOR.tools.repeat(" ",a.length-1)+" "}),e=e.replace(/\n/g,"<br>"),e=e.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat(" ",a.length-1)+" "});if(c){var f=b.clone();f.setHtml(e);c.append(f)}else b.setHtml(e)}return c||b}function s(a,b){var c=this._.definition, +d=c.attributes,c=c.styles,e=o(this)[a.getName()],f=CKEDITOR.tools.isEmpty(d)&&CKEDITOR.tools.isEmpty(c),g;for(g in d)if(!((g=="class"||this._.definition.fullMatch)&&a.getAttribute(g)!=l(g,d[g]))&&!(b&&g.slice(0,5)=="data-")){f=a.hasAttribute(g);a.removeAttribute(g)}for(var h in c)if(!(this._.definition.fullMatch&&a.getStyle(h)!=l(h,c[h],true))){f=f||!!a.getStyle(h);a.removeStyle(h)}q(a,e,r[a.getName()]);f&&(this._.definition.alwaysRemoveElement?t(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode== +CKEDITOR.ENTER_BR&&!a.hasAttributes()?t(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function w(a){for(var b=o(this),c=a.getElementsByTag(this.element),d,e=c.count();--e>=0;){d=c.getItem(e);d.isReadOnly()||s.call(this,d,true)}for(var f in b)if(f!=this.element){c=a.getElementsByTag(f);for(e=c.count()-1;e>=0;e--){d=c.getItem(e);d.isReadOnly()||q(d,b[f])}}}function q(a,b,c){if(b=b&&b.attributes)for(var d=0;d<b.length;d++){var e=b[d][0],f;if(f=a.getAttribute(e)){var g=b[d][1];(g===null|| +g.test&&g.test(f)||typeof g=="string"&&f==g)&&a.removeAttribute(e)}}c||t(a)}function t(a,b){if(!a.hasAttributes()||b)if(CKEDITOR.dtd.$block[a.getName()]){var c=a.getPrevious(F),d=a.getNext(F);c&&(c.type==CKEDITOR.NODE_TEXT||!c.isBlockBoundary({br:1}))&&a.append("br",1);d&&(d.type==CKEDITOR.NODE_TEXT||!d.isBlockBoundary({br:1}))&&a.append("br");a.remove(true)}else{c=a.getFirst();d=a.getLast();a.remove(true);if(c){c.type==CKEDITOR.NODE_ELEMENT&&c.mergeSiblings();d&&(!c.equals(d)&&d.type==CKEDITOR.NODE_ELEMENT)&& +d.mergeSiblings()}}}function i(a,b,c){var d;d=a.element;d=="*"&&(d="span");d=new CKEDITOR.dom.element(d,b);c&&c.copyAttributes(d);d=A(d,a);b.getCustomData("doc_processing_style")&&d.hasAttribute("id")?d.removeAttribute("id"):b.setCustomData("doc_processing_style",1);return d}function A(a,b){var c=b._.definition,d=c.attributes,c=CKEDITOR.style.getStyleText(c);if(d)for(var e in d)a.setAttribute(e,d[e]);c&&a.setAttribute("style",c);return a}function u(a,b){for(var c in a)a[c]=a[c].replace(C,function(a, +c){return b[c]})}function o(a){if(a._.overrides)return a._.overrides;var b=a._.overrides={},c=a._.definition.overrides;if(c){CKEDITOR.tools.isArray(c)||(c=[c]);for(var d=0;d<c.length;d++){var e=c[d],f,g;if(typeof e=="string")f=e.toLowerCase();else{f=e.element?e.element.toLowerCase():a.element;g=e.attributes}e=b[f]||(b[f]={});if(g){var e=e.attributes=e.attributes||[],h;for(h in g)e.push([h.toLowerCase(),g[h]])}}}return b}function l(a,b,c){var d=new CKEDITOR.dom.element("span");d[c?"setStyle":"setAttribute"](a, +b);return d[c?"getStyle":"getAttribute"](a)}function p(a,b,c){for(var d=a.document,e=a.getRanges(),b=b?this.removeFromRange:this.applyToRange,f,g=e.createIterator();f=g.getNextRange();)b.call(this,f,c);a.selectRanges(e);d.removeCustomData("doc_processing_style")}var r={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},n= +{a:1,blockquote:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},P=/\s*(?:;\s*|$)/,C=/#\((.+?)\)/g,L=CKEDITOR.dom.walker.bookmark(0,1),F=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,b){if(typeof a.type=="string")return new CKEDITOR.style.customHandlers[a.type](a);var c=a.attributes;if(c&&c.style){a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(c.style));delete c.style}if(b){a=CKEDITOR.tools.clone(a);u(a.attributes, +b);u(a.styles,b)}c=this.element=a.element?typeof a.element=="string"?a.element.toLowerCase():a.element:"*";this.type=a.type||(r[c]?CKEDITOR.STYLE_BLOCK:n[c]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);if(typeof this.element=="object")this.type=CKEDITOR.STYLE_OBJECT;this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof CKEDITOR.dom.document)return p.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode; +p.call(this,a.getSelection(),0,a);this._.enterMode=b}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return p.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode;p.call(this,a.getSelection(),1,a);this._.enterMode=b}},applyToRange:function(a){this.applyToRange=this.type==CKEDITOR.STYLE_INLINE?f:this.type==CKEDITOR.STYLE_BLOCK?h:this.type==CKEDITOR.STYLE_OBJECT?e:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange= +this.type==CKEDITOR.STYLE_INLINE?b:this.type==CKEDITOR.STYLE_BLOCK?k:this.type==CKEDITOR.STYLE_OBJECT?d:null;return this.removeFromRange(a)},applyToObject:function(a){A(a,this)},checkActive:function(a,b){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||a.blockLimit,true,b);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var c=a.elements,d=0,e;d<c.length;d++){e=c[d];if(!(this.type==CKEDITOR.STYLE_INLINE&&(e==a.block||e==a.blockLimit))){if(this.type== +CKEDITOR.STYLE_OBJECT){var f=e.getName();if(!(typeof this.element=="string"?f==this.element:f in this.element))continue}if(this.checkElementRemovable(e,true,b))return true}}}return false},checkApplicable:function(a,b,c){b&&b instanceof CKEDITOR.filter&&(c=b);if(c&&!c.check(this))return false;switch(this.type){case CKEDITOR.STYLE_OBJECT:return!!a.contains(this.element);case CKEDITOR.STYLE_BLOCK:return!!a.blockLimit.getDtd()[this.element]}return true},checkElementMatch:function(a,b){var c=this._.definition; +if(!a||!c.ignoreReadonly&&a.isReadOnly())return false;var d=a.getName();if(typeof this.element=="string"?d==this.element:d in this.element){if(!b&&!a.hasAttributes())return true;if(d=c._AC)c=d;else{var d={},e=0,f=c.attributes;if(f)for(var g in f){e++;d[g]=f[g]}if(g=CKEDITOR.style.getStyleText(c)){d.style||e++;d.style=g}d._length=e;c=c._AC=d}if(c._length){for(var h in c)if(h!="_length"){e=a.getAttribute(h)||"";if(h=="style")a:{d=c[h];typeof d=="string"&&(d=CKEDITOR.tools.parseCssText(d));typeof e== +"string"&&(e=CKEDITOR.tools.parseCssText(e,true));g=void 0;for(g in d)if(!(g in e&&(e[g]==d[g]||d[g]=="inherit"||e[g]=="inherit"))){d=false;break a}d=true}else d=c[h]==e;if(d){if(!b)return true}else if(b)return false}if(b)return true}else return true}return false},checkElementRemovable:function(a,b,c){if(this.checkElementMatch(a,b,c))return true;if(b=o(this)[a.getName()]){var d;if(!(b=b.attributes))return true;for(c=0;c<b.length;c++){d=b[c][0];if(d=a.getAttribute(d)){var e=b[c][1];if(e===null)return true; +if(typeof e=="string"){if(d==e)return true}else if(e.test(d))return true}}}return false},buildPreview:function(a){var b=this._.definition,c=[],d=b.element;d=="bdo"&&(d="span");var c=["<",d],e=b.attributes;if(e)for(var f in e)c.push(" ",f,'="',e[f],'"');(e=CKEDITOR.style.getStyleText(b))&&c.push(' style="',e,'"');c.push(">",a||b.name,"</",d,">");return c.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b;var b=a.styles,c= +a.attributes&&a.attributes.style||"",d="";c.length&&(c=c.replace(P,";"));for(var e in b){var f=b[e],g=(e+":"+f).replace(P,";");f=="inherit"?d=d+g:c=c+g}c.length&&(c=CKEDITOR.tools.normalizeCssText(c,true));return a._ST=c+d};CKEDITOR.style.customHandlers={};CKEDITOR.style.addCustomHandler=function(a){var b=function(a){this._={definition:a};this.setup&&this.setup(a)};b.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),{assignedTo:CKEDITOR.STYLE_OBJECT},a,true); +return this.customHandlers[a.type]=b};var K=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,I=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED})();CKEDITOR.styleCommand=function(a,f){this.requiredContent=this.allowedContent=this.style=a;CKEDITOR.tools.extend(this,f,true)}; +CKEDITOR.styleCommand.prototype.exec=function(a){a.focus();this.state==CKEDITOR.TRISTATE_OFF?a.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&a.removeStyle(this.style)};CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet");CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet);CKEDITOR.loadStylesSet=function(a,f,b){CKEDITOR.stylesSet.addExternal(a,f,"");CKEDITOR.stylesSet.load(a,b)}; +CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(a,f){var b=this._.styleStateChangeCallbacks;if(!b){b=this._.styleStateChangeCallbacks=[];this.on("selectionChange",function(a){for(var e=0;e<b.length;e++){var d=b[e],f=d.style.checkActive(a.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;d.fn.call(this,f)}})}b.push({style:a,fn:f})},applyStyle:function(a){a.apply(this)},removeStyle:function(a){a.remove(this)},getStylesSet:function(a){if(this._.stylesDefinitions)a(this._.stylesDefinitions); +else{var f=this,b=f.config.stylesCombo_stylesSet||f.config.stylesSet;if(b===false)a(null);else if(b instanceof Array){f._.stylesDefinitions=b;a(b)}else{b||(b="default");var b=b.split(":"),c=b[0];CKEDITOR.stylesSet.addExternal(c,b[1]?b.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(c,function(b){f._.stylesDefinitions=b[c];a(f._.stylesDefinitions)})}}}}); +CKEDITOR.dom.comment=function(a,f){typeof a=="string"&&(a=(f?f.$:document).createComment(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node;CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"<\!--"+this.$.nodeValue+"--\>"}});"use strict"; +(function(){var a={},f={},b;for(b in CKEDITOR.dtd.$blockLimit)b in CKEDITOR.dtd.$list||(a[b]=1);for(b in CKEDITOR.dtd.$block)b in CKEDITOR.dtd.$blockLimit||b in CKEDITOR.dtd.$empty||(f[b]=1);CKEDITOR.dom.elementPath=function(b,e){var d=null,h=null,k=[],j=b,g,e=e||b.getDocument().getBody();do if(j.type==CKEDITOR.NODE_ELEMENT){k.push(j);if(!this.lastElement){this.lastElement=j;if(j.is(CKEDITOR.dtd.$object)||j.getAttribute("contenteditable")=="false")continue}if(j.equals(e))break;if(!h){g=j.getName(); +j.getAttribute("contenteditable")=="true"?h=j:!d&&f[g]&&(d=j);if(a[g]){var m;if(m=!d){if(g=g=="div"){a:{g=j.getChildren();m=0;for(var y=g.count();m<y;m++){var s=g.getItem(m);if(s.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[s.getName()]){g=true;break a}}g=false}g=!g}m=g}m?d=j:h=j}}}while(j=j.getParent());h||(h=e);this.block=d;this.blockLimit=h;this.root=e;this.elements=k}})(); +CKEDITOR.dom.elementPath.prototype={compare:function(a){var f=this.elements,a=a&&a.elements;if(!a||f.length!=a.length)return false;for(var b=0;b<f.length;b++)if(!f[b].equals(a[b]))return false;return true},contains:function(a,f,b){var c;typeof a=="string"&&(c=function(b){return b.getName()==a});a instanceof CKEDITOR.dom.element?c=function(b){return b.equals(a)}:CKEDITOR.tools.isArray(a)?c=function(b){return CKEDITOR.tools.indexOf(a,b.getName())>-1}:typeof a=="function"?c=a:typeof a=="object"&&(c= +function(b){return b.getName()in a});var e=this.elements,d=e.length;f&&d--;if(b){e=Array.prototype.slice.call(e,0);e.reverse()}for(f=0;f<d;f++)if(c(e[f]))return e[f];return null},isContextFor:function(a){var f;if(a in CKEDITOR.dtd.$block){f=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit;return!!f.getDtd()[a]}return true},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}}; +CKEDITOR.dom.text=function(a,f){typeof a=="string"&&(a=(f?f.$:document).createTextNode(a));this.$=a};CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node; +CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(a){this.$.nodeValue=a},split:function(a){var f=this.$.parentNode,b=f.childNodes.length,c=this.getLength(),e=this.getDocument(),d=new CKEDITOR.dom.text(this.$.splitText(a),e);if(f.childNodes.length==b)if(a>=c){d=e.createText("");d.insertAfter(this)}else{a=e.createText("");a.insertAfter(d);a.remove()}return d},substring:function(a, +f){return typeof f!="number"?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,f)}}); +(function(){function a(a,c,e){var d=a.serializable,f=c[e?"endContainer":"startContainer"],k=e?"endOffset":"startOffset",j=d?c.document.getById(a.startNode):a.startNode,a=d?c.document.getById(a.endNode):a.endNode;if(f.equals(j.getPrevious())){c.startOffset=c.startOffset-f.getLength()-a.getPrevious().getLength();f=a.getNext()}else if(f.equals(a.getPrevious())){c.startOffset=c.startOffset-f.getLength();f=a.getNext()}f.equals(j.getParent())&&c[k]++;f.equals(a.getParent())&&c[k]++;c[e?"endContainer":"startContainer"]= +f;return c}CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,f)};var f={createIterator:function(){var a=this,c=CKEDITOR.dom.walker.bookmark(),e=[],d;return{getNextRange:function(f){d=d===void 0?0:d+1;var k=a[d];if(k&&a.length>1){if(!d)for(var j=a.length-1;j>=0;j--)e.unshift(a[j].createBookmark(true));if(f)for(var g=0;a[d+g+1];){for(var m=k.document,f=0,j=m.getById(e[g].endNode),m=m.getById(e[g+ +1].startNode);;){j=j.getNextSourceNode(false);if(m.equals(j))f=1;else if(c(j)||j.type==CKEDITOR.NODE_ELEMENT&&j.isBlockBoundary())continue;break}if(!f)break;g++}for(k.moveToBookmark(e.shift());g--;){j=a[++d];j.moveToBookmark(e.shift());k.setEnd(j.endContainer,j.endOffset)}}return k}}},createBookmarks:function(b){for(var c=[],e,d=0;d<this.length;d++){c.push(e=this[d].createBookmark(b,true));for(var f=d+1;f<this.length;f++){this[f]=a(e,this[f]);this[f]=a(e,this[f],true)}}return c},createBookmarks2:function(a){for(var c= +[],e=0;e<this.length;e++)c.push(this[e].createBookmark2(a));return c},moveToBookmarks:function(a){for(var c=0;c<this.length;c++)this[c].moveToBookmark(a[c])}}})(); +(function(){function a(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function f(b){var c=CKEDITOR.skin["ua_"+b],d=CKEDITOR.env;if(c)for(var c=c.split(",").sort(function(a,b){return a>b?-1:1}),e=0,f;e<c.length;e++){f=c[e];if(d.ie&&(f.replace(/^ie/,"")==d.version||d.quirks&&f=="iequirks"))f="ie";if(d[f]){b=b+("_"+c[e]);break}}return CKEDITOR.getUrl(a()+b+".css")}function b(a,b){if(!d[a]){CKEDITOR.document.appendStyleSheet(f(a));d[a]=1}b&&b()} +function c(a){var b=a.getById(h);if(!b){b=a.getHead().append("style");b.setAttribute("id",h);b.setAttribute("type","text/css")}return b}function e(a,b,c){var d,e,f;if(CKEDITOR.env.webkit){b=b.split("}").slice(0,-1);for(e=0;e<b.length;e++)b[e]=b[e].split("{")}for(var h=0;h<a.length;h++)if(CKEDITOR.env.webkit)for(e=0;e<b.length;e++){f=b[e][1];for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);a[h].$.sheet.addRule(b[e][0],f)}else{f=b;for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);CKEDITOR.env.ie&& +CKEDITOR.env.version<11?a[h].$.styleSheet.cssText=a[h].$.styleSheet.cssText+f:a[h].$.innerHTML=a[h].$.innerHTML+f}}var d={};CKEDITOR.skin={path:a,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+"skin.js"),function(){b(c,d)}):b(c,d)},getPath:function(a){return CKEDITOR.getUrl(f(a))},icons:{},addIcon:function(a,b,c,d){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0,bgsize:d||"16px"})},getIconStyle:function(a, +b,c,d,e){var f;if(a){a=a.toLowerCase();b&&(f=this.icons[a+"-rtl"]);f||(f=this.icons[a])}a=c||f&&f.path||"";d=d||f&&f.offset;e=e||f&&f.bgsize||"16px";return a&&"background-image:url("+CKEDITOR.getUrl(a)+");background-position:0 "+d+"px;background-size:"+e+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=c(CKEDITOR.document);return(this.setUiColor=function(a){this.uiColor=a;var c=CKEDITOR.skin.chameleon,d="",f="";if(typeof c== +"function"){d=c(this,"editor");f=c(this,"panel")}a=[[j,a]];e([b],d,a);e(k,f,a)}).call(this,a)}});var h="cke_ui_color",k=[],j=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor,a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a=c(a);k.push(a);var d=b.getUiColor();d&&e([a],CKEDITOR.skin.chameleon(b,"panel"),[[j,d]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&& +b.setUiColor(b.config.uiColor)}})})(); +(function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=false;else{var a=CKEDITOR.dom.element.createFromHtml('<div style="width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"></div>',CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{var f=a.getComputedStyle("border-top-color"),b=a.getComputedStyle("border-right-color");CKEDITOR.env.hc=!!(f&&f==b)}catch(c){CKEDITOR.env.hc=false}a.remove()}if(CKEDITOR.env.hc)CKEDITOR.env.cssClass=CKEDITOR.env.cssClass+" cke_hc"; +CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(a=CKEDITOR._.pending){delete CKEDITOR._.pending;for(f=0;f<a.length;f++){CKEDITOR.editor.prototype.constructor.apply(a[f][0],a[f][1]);CKEDITOR.add(a[f][0])}}})();/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.skin.name="moono";CKEDITOR.skin.ua_editor="ie,iequirks,ie7,ie8,gecko";CKEDITOR.skin.ua_dialog="ie,iequirks,ie7,ie8"; +CKEDITOR.skin.chameleon=function(){var b=function(){return function(b,e){for(var a=b.match(/[^#]./g),c=0;3>c;c++){var f=a,h=c,d;d=parseInt(a[c],16);d=("0"+(0>e?0|d*(1+e):0|d+(255-d)*e).toString(16)).slice(-2);f[h]=d}return"#"+a.join("")}}(),c=function(){var b=new CKEDITOR.template("background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');");return function(c, +a){return b.output({from:c,to:a})}}(),f={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "), +panel:new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")}; +return function(g,e){var a=g.uiColor,a={id:"."+g.id,defaultBorder:b(a,-0.1),defaultGradient:c(b(a,0.9),a),lightGradient:c(b(a,1),b(a,0.7)),mediumGradient:c(b(a,0.8),b(a,0.5)),ckeButtonOn:c(b(a,0.6),b(a,0.7)),ckeResizer:b(a,-0.4),ckeToolbarSeparator:b(a,0.5),ckeColorauto:b(a,0.8),dialogBody:b(a,0.7),dialogTabSelected:c("#FFFFFF","#FFFFFF"),dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-0.6),elementsPathBg:a,menubuttonIcon:b(a,0.5),menubuttonIconHover:b(a,0.3)};return f[e].output(a).replace(/\[/g, +"{").replace(/\]/g,"}")}}();CKEDITOR.plugins.add("dialogui",{onLoad:function(){var h=function(b){this._||(this._={});this._["default"]=this._.initValue=b["default"]||"";this._.required=b.required||!1;for(var a=[this._],d=1;d<arguments.length;d++)a.push(arguments[d]);a.push(!0);CKEDITOR.tools.extend.apply(CKEDITOR.tools,a);return this._},r={build:function(b,a,d){return new CKEDITOR.ui.dialog.textInput(b,a,d)}},l={build:function(b,a,d){return new CKEDITOR.ui.dialog[a.type](b,a,d)}},n={isChanged:function(){return this.getValue()!= +this.getInitValue()},reset:function(b){this.setValue(this.getInitValue(),b)},setInitValue:function(){this._.initValue=this.getValue()},resetInitValue:function(){this._.initValue=this._["default"]},getInitValue:function(){return this._.initValue}},o=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(b,a){this._.domOnChangeRegistered||(b.on("load",function(){this.getInputElement().on("change",function(){b.parts.dialog.isVisible()&&this.fire("change",{value:this.getValue()})}, +this)},this),this._.domOnChangeRegistered=!0);this.on("change",a)}},!0),s=/^on([A-Z]\w+)/,p=function(b){for(var a in b)(s.test(a)||"title"==a||"type"==a)&&delete b[a];return b};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(b,a,d,f){if(!(4>arguments.length)){var c=h.call(this,a);c.labelId=CKEDITOR.tools.getNextId()+"_label";this._.children=[];var e={role:a.role||"presentation"};a.includeLabel&&(e["aria-labelledby"]=c.labelId);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"div",null, +e,function(){var e=[],g=a.required?" cke_required":"";if(a.labelLayout!="horizontal")e.push('<label class="cke_dialog_ui_labeled_label'+g+'" ',' id="'+c.labelId+'"',c.inputId?' for="'+c.inputId+'"':"",(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",a.label,"</label>",'<div class="cke_dialog_ui_labeled_content"',a.controlStyle?' style="'+a.controlStyle+'"':"",' role="presentation">',f.call(this,b,a),"</div>");else{g={type:"hbox",widths:a.widths,padding:0,children:[{type:"html",html:'<label class="cke_dialog_ui_labeled_label'+ +g+'" id="'+c.labelId+'" for="'+c.inputId+'"'+(a.labelStyle?' style="'+a.labelStyle+'"':"")+">"+CKEDITOR.tools.htmlEncode(a.label)+"</span>"},{type:"html",html:'<span class="cke_dialog_ui_labeled_content"'+(a.controlStyle?' style="'+a.controlStyle+'"':"")+">"+f.call(this,b,a)+"</span>"}]};CKEDITOR.dialog._.uiElementBuilders.hbox.build(b,g,e)}return e.join("")})}},textInput:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",c={"class":"cke_dialog_ui_input_"+ +a.type,id:f,type:a.type};a.validate&&(this.validate=a.validate);a.maxLength&&(c.maxlength=a.maxLength);a.size&&(c.size=a.size);a.inputStyle&&(c.style=a.inputStyle);var e=this,k=!1;b.on("load",function(){e.getInputElement().on("keydown",function(a){a.data.getKeystroke()==13&&(k=true)});e.getInputElement().on("keyup",function(a){if(a.data.getKeystroke()==13&&k){b.getButton("ok")&&setTimeout(function(){b.getButton("ok").click()},0);k=false}},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this, +b,a,d,function(){var b=['<div class="cke_dialog_ui_input_',a.type,'" role="presentation"'];a.width&&b.push('style="width:'+a.width+'" ');b.push("><input ");c["aria-labelledby"]=this._.labelId;this._.required&&(c["aria-required"]=this._.required);for(var e in c)b.push(e+'="'+c[e]+'" ');b.push(" /></div>");return b.join("")})}},textarea:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this,c=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",e={};a.validate&&(this.validate=a.validate); +e.rows=a.rows||5;e.cols=a.cols||20;e["class"]="cke_dialog_ui_input_textarea "+(a["class"]||"");"undefined"!=typeof a.inputStyle&&(e.style=a.inputStyle);a.dir&&(e.dir=a.dir);CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){e["aria-labelledby"]=this._.labelId;this._.required&&(e["aria-required"]=this._.required);var a=['<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea id="',c,'" '],b;for(b in e)a.push(b+'="'+CKEDITOR.tools.htmlEncode(e[b])+'" ');a.push(">",CKEDITOR.tools.htmlEncode(f._["default"]), +"</textarea></div>");return a.join("")})}},checkbox:function(b,a,d){if(!(3>arguments.length)){var f=h.call(this,a,{"default":!!a["default"]});a.validate&&(this.validate=a.validate);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"span",null,null,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},true),e=[],d=CKEDITOR.tools.getNextId()+"_label",g={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":d};p(c);if(a["default"])g.checked= +"checked";if(typeof c.inputStyle!="undefined")c.style=c.inputStyle;f.checkbox=new CKEDITOR.ui.dialog.uiElement(b,c,e,"input",null,g);e.push(' <label id="',d,'" for="',g.id,'"'+(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",CKEDITOR.tools.htmlEncode(a.label),"</label>");return e.join("")})}},radio:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);this._["default"]||(this._["default"]=this._.initValue=a.items[0][1]);a.validate&&(this.validate=a.valdiate);var f=[],c=this;a.role="radiogroup"; +a.includeLabel=!0;CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){for(var e=[],d=[],g=(a.id?a.id:CKEDITOR.tools.getNextId())+"_radio",i=0;i<a.items.length;i++){var j=a.items[i],h=j[2]!==void 0?j[2]:j[0],l=j[1]!==void 0?j[1]:j[0],m=CKEDITOR.tools.getNextId()+"_radio_input",n=m+"_label",m=CKEDITOR.tools.extend({},a,{id:m,title:null,type:null},true),h=CKEDITOR.tools.extend({},m,{title:h},true),o={type:"radio","class":"cke_dialog_ui_radio_input",name:g,value:l,"aria-labelledby":n},q=[];if(c._["default"]== +l)o.checked="checked";p(m);p(h);if(typeof m.inputStyle!="undefined")m.style=m.inputStyle;m.keyboardFocusable=true;f.push(new CKEDITOR.ui.dialog.uiElement(b,m,q,"input",null,o));q.push(" ");new CKEDITOR.ui.dialog.uiElement(b,h,q,"label",null,{id:n,"for":o.id},j[0]);e.push(q.join(""))}new CKEDITOR.ui.dialog.hbox(b,f,e,d);return d.join("")});this._.children=f}},button:function(b,a,d){if(arguments.length){"function"==typeof a&&(a=a(b.getParentEditor()));h.call(this,a,{disabled:a.disabled||!1});CKEDITOR.event.implementOn(this); +var f=this;b.on("load",function(){var a=this.getElement();(function(){a.on("click",function(a){f.click();a.data.preventDefault()});a.on("keydown",function(a){a.data.getKeystroke()in{32:1}&&(f.click(),a.data.preventDefault())})})();a.unselectable()},this);var c=CKEDITOR.tools.extend({},a);delete c.style;var e=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,b,c,d,"a",null,{style:a.style,href:"javascript:void(0)",title:a.label,hidefocus:"true","class":a["class"],role:"button", +"aria-labelledby":e},'<span id="'+e+'" class="cke_dialog_ui_button">'+CKEDITOR.tools.htmlEncode(a.label)+"</span>")}},select:function(b,a,d){if(!(3>arguments.length)){var f=h.call(this,a);a.validate&&(this.validate=a.validate);f.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_select":CKEDITOR.tools.getNextId()+"_select"},true),e=[],d=[],g={id:f.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId}; +e.push('<div class="cke_dialog_ui_input_',a.type,'" role="presentation"');a.width&&e.push('style="width:'+a.width+'" ');e.push(">");if(a.size!==void 0)g.size=a.size;if(a.multiple!==void 0)g.multiple=a.multiple;p(c);for(var i=0,j;i<a.items.length&&(j=a.items[i]);i++)d.push('<option value="',CKEDITOR.tools.htmlEncode(j[1]!==void 0?j[1]:j[0]).replace(/"/g,"""),'" /> ',CKEDITOR.tools.htmlEncode(j[0]));if(typeof c.inputStyle!="undefined")c.style=c.inputStyle;f.select=new CKEDITOR.ui.dialog.uiElement(b, +c,e,"select",null,g,d.join(""));e.push("</div>");return e.join("")})}},file:function(b,a,d){if(!(3>arguments.length)){void 0===a["default"]&&(a["default"]="");var f=CKEDITOR.tools.extend(h.call(this,a),{definition:a,buttons:[]});a.validate&&(this.validate=a.validate);b.on("load",function(){CKEDITOR.document.getById(f.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){f.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var b=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" role="presentation" id="', +f.frameId,'" title="',a.label,'" src="javascript:void('];b.push(CKEDITOR.env.ie?"(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"})()":"0");b.push(')"></iframe>');return b.join("")})}},fileButton:function(b,a,d){var f=this;if(!(3>arguments.length)){h.call(this,a);a.validate&&(this.validate=a.validate);var c=CKEDITOR.tools.extend({},a),e=c.onClick;c.className=(c.className?c.className+" ":"")+"cke_dialog_ui_button";c.onClick=function(c){var d= +a["for"];if(!e||e.call(this,c)!==false){b.getContentElement(d[0],d[1]).submit();this.disable()}};b.on("load",function(){b.getContentElement(a["for"][0],a["for"][1])._.buttons.push(f)});CKEDITOR.ui.dialog.button.call(this,b,c,d)}},html:function(){var b=/^\s*<[\w:]+\s+([^>]*)?>/,a=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,d=/\/$/;return function(f,c,e){if(!(3>arguments.length)){var k=[],g=c.html;"<"!=g.charAt(0)&&(g="<span>"+g+"</span>");var i=c.focus;if(i){var j=this.focus;this.focus=function(){("function"== +typeof i?i:j).call(this);this.fire("focus")};c.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0}CKEDITOR.ui.dialog.uiElement.call(this,f,c,k,"span",null,null,"");k=k.join("").match(b);g=g.match(a)||["","",""];d.test(g[1])&&(g[1]=g[1].slice(0,-1),g[2]="/"+g[2]);e.push([g[1]," ",k[1]||"",g[2]].join(""))}}}(),fieldset:function(b,a,d,f,c){var e=c.label;this._={children:a};CKEDITOR.ui.dialog.uiElement.call(this,b,c,f,"fieldset",null,null,function(){var a=[];e&&a.push("<legend"+ +(c.labelStyle?' style="'+c.labelStyle+'"':"")+">"+e+"</legend>");for(var b=0;b<d.length;b++)a.push(d[b]);return a.join("")})}},!0);CKEDITOR.ui.dialog.html.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setLabel:function(b){var a=CKEDITOR.document.getById(this._.labelId);1>a.getChildCount()?(new CKEDITOR.dom.text(b,CKEDITOR.document)).appendTo(a):a.getChild(0).$.nodeValue=b;return this},getLabel:function(){var b= +CKEDITOR.document.getById(this._.labelId);return!b||1>b.getChildCount()?"":b.getChild(0).getText()},eventProcessors:o},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return!this._.disabled?this.fire("click",{dialog:this._.dialog}):!1},enable:function(){this._.disabled=!1;var b=this.getElement();b&&b.removeClass("cke_disabled")},disable:function(){this._.disabled=!0;this.getElement().addClass("cke_disabled")},isVisible:function(){return this.getElement().getFirst().isVisible()}, +isEnabled:function(){return!this._.disabled},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(b,a){this.on("click",function(){a.apply(this,arguments)})}},!0),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)}, +focus:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&a.$.focus()},0)},select:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&(a.$.focus(),a.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(b){!b&&(b="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.textarea.prototype=new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype= +CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement()},add:function(b,a,d){var f=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),c=this.getInputElement().$;f.$.text=b;f.$.value=void 0===a||null===a?b:a;void 0===d||null===d?CKEDITOR.env.ie?c.add(f.$):c.add(f.$,null):c.add(f.$,d);return this},remove:function(b){this.getInputElement().$.remove(b);return this},clear:function(){for(var b=this.getInputElement().$;0< +b.length;)b.remove(0);return this},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(b,a){this.getInputElement().$.checked=b;!a&&this.fire("change",{value:b})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(b,a){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return o.onChange.apply(this, +arguments);b.on("load",function(){var a=this._.checkbox.getElement();a.on("propertychange",function(b){b=b.data.$;"checked"==b.propertyName&&this.fire("change",{value:a.$.checked})},this)},this);this.on("change",a);return null}},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setValue:function(b,a){for(var d=this._.children,f,c=0;c<d.length&&(f=d[c]);c++)f.getElement().$.checked=f.getValue()==b;!a&&this.fire("change",{value:b})}, +getValue:function(){for(var b=this._.children,a=0;a<b.length;a++)if(b[a].getElement().$.checked)return b[a].getValue();return null},accessKeyUp:function(){var b=this._.children,a;for(a=0;a<b.length;a++)if(b[a].getElement().$.checked){b[a].getElement().focus();return}b[0].getElement().focus()},eventProcessors:{onChange:function(b,a){if(CKEDITOR.env.ie)b.on("load",function(){for(var a=this._.children,b=this,c=0;c<a.length;c++)a[c].getElement().on("propertychange",function(a){a=a.data.$;"checked"==a.propertyName&& +this.$.checked&&b.fire("change",{value:this.getAttribute("value")})})},this),this.on("change",a);else return o.onChange.apply(this,arguments);return null}}},n,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,n,{getInputElement:function(){var b=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<b.$.forms.length?new CKEDITOR.dom.element(b.$.forms[0].elements[0]):this.getElement()},submit:function(){this.getInputElement().getParent().$.submit(); +return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(b){var a=/^on([A-Z]\w+)/,d,f=function(a,b,c,d){a.on("formLoaded",function(){a.getInputElement().on(c,d,a)})},c;for(c in b)if(d=c.match(a))this.eventProcessors[c]?this.eventProcessors[c].call(this,this._.dialog,b[c]):f(this,this._.dialog,d[1].toLowerCase(),b[c]);return this},reset:function(){function b(){d.$.open();var b="";f.size&&(b=f.size-(CKEDITOR.env.ie?7:0));var h=a.frameId+"_input"; +d.$.write(['<html dir="'+g+'" lang="'+i+'"><head><title>','
                  + +

                  + diff --git a/sites/all/libraries/ckeditor/plugins/wsc/dialogs/tmpFrameset.html b/sites/all/libraries/ckeditor/plugins/wsc/dialogs/tmpFrameset.html new file mode 100644 index 0000000000..61203e0373 --- /dev/null +++ b/sites/all/libraries/ckeditor/plugins/wsc/dialogs/tmpFrameset.html @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + diff --git a/sites/all/libraries/ckeditor/plugins/wsc/dialogs/wsc.css b/sites/all/libraries/ckeditor/plugins/wsc/dialogs/wsc.css new file mode 100644 index 0000000000..da2f17438f --- /dev/null +++ b/sites/all/libraries/ckeditor/plugins/wsc/dialogs/wsc.css @@ -0,0 +1,82 @@ +/* +Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +html, body +{ + background-color: transparent; + margin: 0px; + padding: 0px; +} + +body +{ + padding: 10px; +} + +body, td, input, select, textarea +{ + font-size: 11px; + font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; +} + +.midtext +{ + padding:0px; + margin:10px; +} + +.midtext p +{ + padding:0px; + margin:10px; +} + +.Button +{ + border: #737357 1px solid; + color: #3b3b1f; + background-color: #c7c78f; +} + +.PopupTabArea +{ + color: #737357; + background-color: #e3e3c7; +} + +.PopupTitleBorder +{ + border-bottom: #d5d59d 1px solid; +} +.PopupTabEmptyArea +{ + padding-left: 10px; + border-bottom: #d5d59d 1px solid; +} + +.PopupTab, .PopupTabSelected +{ + border-right: #d5d59d 1px solid; + border-top: #d5d59d 1px solid; + border-left: #d5d59d 1px solid; + padding: 3px 5px 3px 5px; + color: #737357; +} + +.PopupTab +{ + margin-top: 1px; + border-bottom: #d5d59d 1px solid; + cursor: pointer; +} + +.PopupTabSelected +{ + font-weight: bold; + cursor: default; + padding-top: 4px; + border-bottom: #f1f1e3 1px solid; + background-color: #f1f1e3; +} diff --git a/sites/all/libraries/ckeditor/plugins/wsc/dialogs/wsc.js b/sites/all/libraries/ckeditor/plugins/wsc/dialogs/wsc.js new file mode 100644 index 0000000000..b53a48cf47 --- /dev/null +++ b/sites/all/libraries/ckeditor/plugins/wsc/dialogs/wsc.js @@ -0,0 +1,74 @@ +/* + Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +(function(){function q(a){return a&&a.domId&&a.getInputElement().$?a.getInputElement():a&&a.$?a:!1}function z(a){if(!a)throw"Languages-by-groups list are required for construct selectbox";var c=[],d="",f;for(f in a)for(var g in a[f]){var h=a[f][g];"en_US"==h?d=h:c.push(h)}c.sort();d&&c.unshift(d);return{getCurrentLangGroup:function(c){a:{for(var d in a)for(var f in a[d])if(f.toUpperCase()===c.toUpperCase()){c=d;break a}c=""}return c},setLangList:function(){var c={},d;for(d in a)for(var f in a[d])c[a[d][f]]= +f;return c}()}}var e=function(){var a=function(a,b,f){var f=f||{},g=f.expires;if("number"==typeof g&&g){var h=new Date;h.setTime(h.getTime()+1E3*g);g=f.expires=h}g&&g.toUTCString&&(f.expires=g.toUTCString());var b=encodeURIComponent(b),a=a+"="+b,e;for(e in f)b=f[e],a+="; "+e,!0!==b&&(a+="="+b);document.cookie=a};return{postMessage:{init:function(a){window.addEventListener?window.addEventListener("message",a,!1):window.attachEvent("onmessage",a)},send:function(a){var b=Object.prototype.toString,f= +a.fn||null,g=a.id||"",e=a.target||window,i=a.message||{id:g};a.message&&"[object Object]"==b.call(a.message)&&(a.message.id||(a.message.id=g),i=a.message);a=window.JSON.stringify(i,f);e.postMessage(a,"*")},unbindHandler:function(a){window.removeEventListener?window.removeEventListener("message",a,!1):window.detachEvent("onmessage",a)}},hash:{create:function(){},parse:function(){}},cookie:{set:a,get:function(a){return(a=document.cookie.match(RegExp("(?:^|; )"+a.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, +"\\$1")+"=([^;]*)")))?decodeURIComponent(a[1]):void 0},remove:function(c){a(c,"",{expires:-1})}},misc:{findFocusable:function(a){var b=null;a&&(b=a.find("a[href], area[href], input, select, textarea, button, *[tabindex], *[contenteditable]"));return b},isVisible:function(a){return!(0===a.offsetWidth||0==a.offsetHeight||"none"===(document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(a,null).display:a.currentStyle?a.currentStyle.display:a.style.display))}, +hasClass:function(a,b){return!(!a.className||!a.className.match(RegExp("(\\s|^)"+b+"(\\s|$)")))}}}}(),a=a||{};a.TextAreaNumber=null;a.load=!0;a.cmd={SpellTab:"spell",Thesaurus:"thes",GrammTab:"grammar"};a.dialog=null;a.optionNode=null;a.selectNode=null;a.grammerSuggest=null;a.textNode={};a.iframeMain=null;a.dataTemp="";a.div_overlay=null;a.textNodeInfo={};a.selectNode={};a.selectNodeResponce={};a.langList=null;a.langSelectbox=null;a.banner="";a.show_grammar=null;a.div_overlay_no_check=null;a.targetFromFrame= +{};a.onLoadOverlay=null;a.LocalizationComing={};a.OverlayPlace=null;a.LocalizationButton={ChangeTo:{instance:null,text:"Change to"},ChangeAll:{instance:null,text:"Change All"},IgnoreWord:{instance:null,text:"Ignore word"},IgnoreAllWords:{instance:null,text:"Ignore all words"},Options:{instance:null,text:"Options",optionsDialog:{instance:null}},AddWord:{instance:null,text:"Add word"},FinishChecking:{instance:null,text:"Finish Checking"}};a.LocalizationLabel={ChangeTo:{instance:null,text:"Change to"}, +Suggestions:{instance:null,text:"Suggestions"}};var A=function(b){var c,d;for(d in b)c=b[d].instance.getElement().getFirst()||b[d].instance.getElement(),c.setText(a.LocalizationComing[d])},B=function(b){for(var c in b){if(!b[c].instance.setLabel)break;b[c].instance.setLabel(a.LocalizationComing[c])}},j,r;a.framesetHtml=function(b){return"'}; +a.setIframe=function(b,c){var d;d=a.framesetHtml(c);var f=a.iframeNumber+"_"+c;b.getElement().setHtml(d);d=document.getElementById(f);d=d.contentWindow?d.contentWindow:d.contentDocument.document?d.contentDocument.document:d.contentDocument;d.document.open();d.document.write('iframe
                  + + + + +

                  + CKEditor Samples » Create and Destroy Editor Instances for Ajax Applications +

                  +
                  +

                  + This sample shows how to create and destroy CKEditor instances on the fly. After the removal of CKEditor the content created inside the editing + area will be displayed in a <div> element. +

                  +

                  + For details of how to create this setup check the source code of this sample page + for JavaScript code responsible for the creation and destruction of a CKEditor instance. +

                  +
                  +

                  Click the buttons to create and remove a CKEditor instance.

                  +

                  + + +

                  + +
                  +
                  + + + + diff --git a/sites/all/libraries/ckeditor/samples/api.html b/sites/all/libraries/ckeditor/samples/api.html new file mode 100644 index 0000000000..619867d566 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/api.html @@ -0,0 +1,207 @@ + + + + + + API Usage — CKEditor Sample + + + + + + +

                  + CKEditor Samples » Using CKEditor JavaScript API +

                  +
                  +

                  + This sample shows how to use the + CKEditor JavaScript API + to interact with the editor at runtime. +

                  +

                  + For details on how to create this setup check the source code of this sample page. +

                  +
                  + + +
                  + +
                  +
                  + + + + +

                  +

                  + + +
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/appendto.html b/sites/all/libraries/ckeditor/samples/appendto.html new file mode 100644 index 0000000000..59b0f81d6b --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/appendto.html @@ -0,0 +1,56 @@ + + + + + + Append To Page Element Using JavaScript Code — CKEditor Sample + + + + +

                  + CKEditor Samples » Append To Page Element Using JavaScript Code +

                  +
                  +
                  +

                  + The CKEDITOR.appendTo() method serves to to place editors inside existing DOM elements. Unlike CKEDITOR.replace(), + a target container to be replaced is no longer necessary. A new editor + instance is inserted directly wherever it is desired. +

                  +
                  CKEDITOR.appendTo( 'container_id',
                  +	{ /* Configuration options to be used. */ }
                  +	'Editor content to be used.'
                  +);
                  +
                  + +
                  +
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/assets/inlineall/logo.png b/sites/all/libraries/ckeditor/samples/assets/inlineall/logo.png new file mode 100644 index 0000000000..b4d5979e34 Binary files /dev/null and b/sites/all/libraries/ckeditor/samples/assets/inlineall/logo.png differ diff --git a/sites/all/libraries/ckeditor/samples/assets/outputxhtml/outputxhtml.css b/sites/all/libraries/ckeditor/samples/assets/outputxhtml/outputxhtml.css new file mode 100644 index 0000000000..b60718a512 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/assets/outputxhtml/outputxhtml.css @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + * + * Styles used by the XHTML 1.1 sample page (xhtml.html). + */ + +/** + * Basic definitions for the editing area. + */ +body +{ + font-family: Arial, Verdana, sans-serif; + font-size: 80%; + color: #000000; + background-color: #ffffff; + padding: 5px; + margin: 0px; +} + +/** + * Core styles. + */ + +.Bold +{ + font-weight: bold; +} + +.Italic +{ + font-style: italic; +} + +.Underline +{ + text-decoration: underline; +} + +.StrikeThrough +{ + text-decoration: line-through; +} + +.Subscript +{ + vertical-align: sub; + font-size: smaller; +} + +.Superscript +{ + vertical-align: super; + font-size: smaller; +} + +/** + * Font faces. + */ + +.FontComic +{ + font-family: 'Comic Sans MS'; +} + +.FontCourier +{ + font-family: 'Courier New'; +} + +.FontTimes +{ + font-family: 'Times New Roman'; +} + +/** + * Font sizes. + */ + +.FontSmaller +{ + font-size: smaller; +} + +.FontLarger +{ + font-size: larger; +} + +.FontSmall +{ + font-size: 8pt; +} + +.FontBig +{ + font-size: 14pt; +} + +.FontDouble +{ + font-size: 200%; +} + +/** + * Font colors. + */ +.FontColor1 +{ + color: #ff9900; +} + +.FontColor2 +{ + color: #0066cc; +} + +.FontColor3 +{ + color: #ff0000; +} + +.FontColor1BG +{ + background-color: #ff9900; +} + +.FontColor2BG +{ + background-color: #0066cc; +} + +.FontColor3BG +{ + background-color: #ff0000; +} + +/** + * Indentation. + */ + +.Indent1 +{ + margin-left: 40px; +} + +.Indent2 +{ + margin-left: 80px; +} + +.Indent3 +{ + margin-left: 120px; +} + +/** + * Alignment. + */ + +.JustifyLeft +{ + text-align: left; +} + +.JustifyRight +{ + text-align: right; +} + +.JustifyCenter +{ + text-align: center; +} + +.JustifyFull +{ + text-align: justify; +} + +/** + * Other. + */ + +code +{ + font-family: courier, monospace; + background-color: #eeeeee; + padding-left: 1px; + padding-right: 1px; + border: #c0c0c0 1px solid; +} + +kbd +{ + padding: 0px 1px 0px 1px; + border-width: 1px 2px 2px 1px; + border-style: solid; +} + +blockquote +{ + color: #808080; +} diff --git a/sites/all/libraries/ckeditor/samples/assets/posteddata.php b/sites/all/libraries/ckeditor/samples/assets/posteddata.php new file mode 100644 index 0000000000..c277550e6b --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/assets/posteddata.php @@ -0,0 +1,59 @@ + + + + + + Sample — CKEditor + + + +

                  + CKEditor — Posted Data +

                  + + + + + + + + + $value ) + { + if ( ( !is_string($value) && !is_numeric($value) ) || !is_string($key) ) + continue; + + if ( get_magic_quotes_gpc() ) + $value = htmlspecialchars( stripslashes((string)$value) ); + else + $value = htmlspecialchars( (string)$value ); +?> + + + + + +
                  Field NameValue
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/assets/sample.jpg b/sites/all/libraries/ckeditor/samples/assets/sample.jpg new file mode 100644 index 0000000000..9498271c60 Binary files /dev/null and b/sites/all/libraries/ckeditor/samples/assets/sample.jpg differ diff --git a/sites/all/libraries/ckeditor/samples/assets/uilanguages/languages.js b/sites/all/libraries/ckeditor/samples/assets/uilanguages/languages.js new file mode 100644 index 0000000000..df9c682dd7 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/assets/uilanguages/languages.js @@ -0,0 +1,7 @@ +/* + Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +var CKEDITOR_LANGS=function(){var c={af:"Afrikaans",ar:"Arabic",bg:"Bulgarian",bn:"Bengali/Bangla",bs:"Bosnian",ca:"Catalan",cs:"Czech",cy:"Welsh",da:"Danish",de:"German",el:"Greek",en:"English","en-au":"English (Australia)","en-ca":"English (Canadian)","en-gb":"English (United Kingdom)",eo:"Esperanto",es:"Spanish",et:"Estonian",eu:"Basque",fa:"Persian",fi:"Finnish",fo:"Faroese",fr:"French","fr-ca":"French (Canada)",gl:"Galician",gu:"Gujarati",he:"Hebrew",hi:"Hindi",hr:"Croatian",hu:"Hungarian",id:"Indonesian", +is:"Icelandic",it:"Italian",ja:"Japanese",ka:"Georgian",km:"Khmer",ko:"Korean",ku:"Kurdish",lt:"Lithuanian",lv:"Latvian",mk:"Macedonian",mn:"Mongolian",ms:"Malay",nb:"Norwegian Bokmal",nl:"Dutch",no:"Norwegian",pl:"Polish",pt:"Portuguese (Portugal)","pt-br":"Portuguese (Brazil)",ro:"Romanian",ru:"Russian",si:"Sinhala",sk:"Slovak",sq:"Albanian",sl:"Slovenian",sr:"Serbian (Cyrillic)","sr-latn":"Serbian (Latin)",sv:"Swedish",th:"Thai",tr:"Turkish",tt:"Tatar",ug:"Uighur",uk:"Ukrainian",vi:"Vietnamese", +zh:"Chinese Traditional","zh-cn":"Chinese Simplified"},b=[],a;for(a in CKEDITOR.lang.languages)b.push({code:a,name:c[a]||a});b.sort(function(a,b){return a.name + + + + + Data Filtering — CKEditor Sample + + + + + +

                  + CKEditor Samples » Data Filtering and Features Activation +

                  +
                  +

                  + This sample page demonstrates the idea of Advanced Content Filter + (ACF), a sophisticated + tool that takes control over what kind of data is accepted by the editor and what + kind of output is produced. +

                  +

                  When and what is being filtered?

                  +

                  + ACF controls + every single source of data that comes to the editor. + It process both HTML that is inserted manually (i.e. pasted by the user) + and programmatically like: +

                  +
                  +editor.setData( '<p>Hello world!</p>' );
                  +
                  +

                  + ACF discards invalid, + useless HTML tags and attributes so the editor remains "clean" during + runtime. ACF behaviour + can be configured and adjusted for a particular case to prevent the + output HTML (i.e. in CMS systems) from being polluted. + + This kind of filtering is a first, client-side line of defense + against "tag soups", + the tool that precisely restricts which tags, attributes and styles + are allowed (desired). When properly configured, ACF + is an easy and fast way to produce a high-quality, intentionally filtered HTML. +

                  + +

                  How to configure or disable ACF?

                  +

                  + Advanced Content Filter is enabled by default, working in "automatic mode", yet + it provides a set of easy rules that allow adjusting filtering rules + and disabling the entire feature when necessary. The config property + responsible for this feature is config.allowedContent. +

                  +

                  + By "automatic mode" is meant that loaded plugins decide which kind + of content is enabled and which is not. For example, if the link + plugin is loaded it implies that <a> tag is + automatically allowed. Each plugin is given a set + of predefined ACF rules + that control the editor until + config.allowedContent + is defined manually. +

                  +

                  + Let's assume our intention is to restrict the editor to accept (produce) paragraphs + only: no attributes, no styles, no other tags. + With ACF + this is very simple. Basically set + config.allowedContent to 'p': +

                  +
                  +var editor = CKEDITOR.replace( textarea_id, {
                  +	allowedContent: 'p'
                  +} );
                  +
                  +

                  + Now try to play with allowed content: +

                  +
                  +// Trying to insert disallowed tag and attribute.
                  +editor.setData( '<p style="color: red">Hello <em>world</em>!</p>' );
                  +alert( editor.getData() );
                  +
                  +// Filtered data is returned.
                  +"<p>Hello world!</p>"
                  +
                  +

                  + What happened? Since config.allowedContent: 'p' is set the editor assumes + that only plain <p> are accepted. Nothing more. This is why + style attribute and <em> tag are gone. The same + filtering would happen if we pasted disallowed HTML into this editor. +

                  +

                  + This is just a small sample of what ACF + can do. To know more, please refer to the sample section below and + the official Advanced Content Filter guide. +

                  +

                  + You may, of course, want CKEditor to avoid filtering of any kind. + To get rid of ACF, + basically set + config.allowedContent to true like this: +

                  +
                  +CKEDITOR.replace( textarea_id, {
                  +	allowedContent: true
                  +} );
                  +
                  + +

                  Beyond data flow: Features activation

                  +

                  + ACF is far more than + I/O control: the entire + UI of the editor is adjusted to what + filters restrict. For example: if <a> tag is + disallowed + by ACF, + then accordingly link command, toolbar button and link dialog + are also disabled. Editor is smart: it knows which features must be + removed from the interface to match filtering rules. +

                  +

                  + CKEditor can be far more specific. If <a> tag is + allowed by filtering rules to be used but it is restricted + to have only one attribute (href) + config.allowedContent = 'a[!href]', then + "Target" tab of the link dialog is automatically disabled as target + attribute isn't included in ACF rules + for <a>. This behaviour applies to dialog fields, context + menus and toolbar buttons. +

                  + +

                  Sample configurations

                  +

                  + There are several editor instances below that present different + ACF setups. All of them, + except the last inline instance, share the same HTML content to visualize + how different filtering rules affect the same input data. +

                  +
                  + +
                  + +
                  +

                  + This editor is using default configuration ("automatic mode"). It means that + + config.allowedContent is defined by loaded plugins. + Each plugin extends filtering rules to make it's own associated content + available for the user. +

                  +
                  + + + +
                  + +
                  + +
                  + +
                  +

                  + This editor is using a custom configuration for + ACF: +

                  +
                  +CKEDITOR.replace( 'editor2', {
                  +	allowedContent:
                  +		'h1 h2 h3 p blockquote strong em;' +
                  +		'a[!href];' +
                  +		'img(left,right)[!src,alt,width,height];' +
                  +		'table tr th td caption;' +
                  +		'span{!font-family};' +'
                  +		'span{!color};' +
                  +		'span(!marker);' +
                  +		'del ins'
                  +} );
                  +
                  +

                  + The following rules may require additional explanation: +

                  +
                    +
                  • + h1 h2 h3 p blockquote strong em - These tags + are accepted by the editor. Any tag attributes will be discarded. +
                  • +
                  • + a[!href] - href attribute is obligatory + for <a> tag. Tags without this attribute + are disarded. No other attribute will be accepted. +
                  • +
                  • + img(left,right)[!src,alt,width,height] - src + attribute is obligatory for <img> tag. + alt, width, height + and class attributes are accepted but + class must be either class="left" + or class="right" +
                  • +
                  • + table tr th td caption - These tags + are accepted by the editor. Any tag attributes will be discarded. +
                  • +
                  • + span{!font-family}, span{!color}, + span(!marker) - <span> tags + will be accepted if either font-family or + color style is set or class="marker" + is present. +
                  • +
                  • + del ins - These tags + are accepted by the editor. Any tag attributes will be discarded. +
                  • +
                  +

                  + Please note that UI of the + editor is different. It's a response to what happened to the filters. + Since text-align isn't allowed, the align toolbar is gone. + The same thing happened to subscript/superscript, strike, underline + (<u>, <sub>, <sup> + are disallowed by + config.allowedContent) and many other buttons. +

                  +
                  + + +
                  + +
                  + +
                  + +
                  +

                  + This editor is using a custom configuration for + ACF. + Note that filters can be configured as an object literal + as an alternative to a string-based definition. +

                  +
                  +CKEDITOR.replace( 'editor3', {
                  +	allowedContent: {
                  +		'b i ul ol big small': true,
                  +		'h1 h2 h3 p blockquote li': {
                  +			styles: 'text-align'
                  +		},
                  +		a: { attributes: '!href,target' },
                  +		img: {
                  +			attributes: '!src,alt',
                  +			styles: 'width,height',
                  +			classes: 'left,right'
                  +		}
                  +	}
                  +} );
                  +
                  +
                  + + +
                  + +
                  + +
                  + +
                  +

                  + This editor is using a custom set of plugins and buttons. +

                  +
                  +CKEDITOR.replace( 'editor4', {
                  +	removePlugins: 'bidi,font,forms,flash,horizontalrule,iframe,justify,table,tabletools,smiley',
                  +	removeButtons: 'Anchor,Underline,Strike,Subscript,Superscript,Image',
                  +	format_tags: 'p;h1;h2;h3;pre;address'
                  +} );
                  +
                  +

                  + As you can see, removing plugins and buttons implies filtering. + Several tags are not allowed in the editor because there's no + plugin/button that is responsible for creating and editing this + kind of content (for example: the image is missing because + of removeButtons: 'Image'). The conclusion is that + ACF works "backwards" + as well: modifying UI + elements is changing allowed content rules. +

                  +
                  + + +
                  + +
                  + +
                  + +
                  +

                  + This editor is built on editable <h1> element. + ACF takes care of + what can be included in <h1>. Note that there + are no block styles in Styles combo. Also why lists, indentation, + blockquote, div, form and other buttons are missing. +

                  +

                  + ACF makes sure that + no disallowed tags will come to <h1> so the final + markup is valid. If the user tried to paste some invalid HTML + into this editor (let's say a list), it would be automatically + converted into plain text. +

                  +
                  +

                  + Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. +

                  +
                  + + + + diff --git a/sites/all/libraries/ckeditor/samples/divreplace.html b/sites/all/libraries/ckeditor/samples/divreplace.html new file mode 100644 index 0000000000..388f5a94de --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/divreplace.html @@ -0,0 +1,141 @@ + + + + + + Replace DIV — CKEditor Sample + + + + + + +

                  + CKEditor Samples » Replace DIV with CKEditor on the Fly +

                  +
                  +

                  + This sample shows how to automatically replace <div> elements + with a CKEditor instance on the fly, following user's doubleclick. The content + that was previously placed inside the <div> element will now + be moved into CKEditor editing area. +

                  +

                  + For details on how to create this setup check the source code of this sample page. +

                  +
                  +

                  + Double-click any of the following <div> elements to transform them into + editor instances. +

                  +
                  +

                  + Part 1 +

                  +

                  + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. +

                  +
                  +
                  +

                  + Part 2 +

                  +

                  + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. +

                  +

                  + Donec velit. Mauris massa. Vestibulum non nulla. Nam suscipit arcu nec elit. Phasellus + sollicitudin iaculis ante. Ut non mauris et sapien tincidunt adipiscing. Vestibulum + vitae leo. Suspendisse nec mi tristique nulla laoreet vulputate. +

                  +
                  +
                  +

                  + Part 3 +

                  +

                  + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. +

                  +
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/index.html b/sites/all/libraries/ckeditor/samples/index.html new file mode 100644 index 0000000000..f5a2e988dd --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/index.html @@ -0,0 +1,128 @@ + + + + + + CKEditor Samples + + + +

                  + CKEditor Samples +

                  +
                  +
                  +

                  + Basic Samples +

                  +
                  +
                  Replace textarea elements by class name
                  +
                  Automatic replacement of all textarea elements of a given class with a CKEditor instance.
                  + +
                  Replace textarea elements by code
                  +
                  Replacement of textarea elements with CKEditor instances by using a JavaScript call.
                  + +
                  Create editors with jQuery
                  +
                  Creating standard and inline CKEditor instances with jQuery adapter.
                  +
                  + +

                  + Basic Customization +

                  +
                  +
                  User Interface color
                  +
                  Changing CKEditor User Interface color and adding a toolbar button that lets the user set the UI color.
                  + +
                  User Interface languages
                  +
                  Changing CKEditor User Interface language and adding a drop-down list that lets the user choose the UI language.
                  +
                  + + +

                  Plugins

                  +
                  +
                  Magicline plugin
                  +
                  Using the Magicline plugin to access difficult focus spaces.
                  + +
                  Full page support
                  +
                  CKEditor inserted with a JavaScript call and used to edit the whole page from <html> to </html>.
                  +
                  +
                  +
                  +

                  + Inline Editing +

                  +
                  +
                  Massive inline editor creation
                  +
                  Turn all elements with contentEditable = true attribute into inline editors.
                  + +
                  Convert element into an inline editor by code
                  +
                  Conversion of DOM elements into inline CKEditor instances by using a JavaScript call.
                  + +
                  Replace textarea with inline editor New!
                  +
                  A form with a textarea that is replaced by an inline editor at runtime.
                  + + +
                  + +

                  + Advanced Samples +

                  +
                  +
                  Data filtering and features activation New!
                  +
                  Data filtering and automatic features activation basing on configuration.
                  + +
                  Replace DIV elements on the fly
                  +
                  Transforming a div element into an instance of CKEditor with a mouse click.
                  + +
                  Append editor instances
                  +
                  Appending editor instances to existing DOM elements.
                  + +
                  Create and destroy editor instances for Ajax applications
                  +
                  Creating and destroying CKEditor instances on the fly and saving the contents entered into the editor window.
                  + +
                  Basic usage of the API
                  +
                  Using the CKEditor JavaScript API to interact with the editor at runtime.
                  + +
                  XHTML-compliant style
                  +
                  Configuring CKEditor to produce XHTML 1.1 compliant attributes and styles.
                  + +
                  Read-only mode
                  +
                  Using the readOnly API to block introducing changes to the editor contents.
                  + +
                  "Tab" key-based navigation
                  +
                  Navigating among editor instances with tab key.
                  + + + +
                  Using the JavaScript API to customize dialog windows
                  +
                  Using the dialog windows API to customize dialog windows without changing the original editor code.
                  + +
                  Using the "Enter" key in CKEditor
                  +
                  Configuring the behavior of Enter and Shift+Enter keys.
                  + +
                  Output for Flash
                  +
                  Configuring CKEditor to produce HTML code that can be used with Adobe Flash.
                  + +
                  Output HTML
                  +
                  Configuring CKEditor to produce legacy HTML 4 code.
                  + +
                  Toolbar Configurations
                  +
                  Configuring CKEditor to display full or custom toolbar layout.
                  + +
                  +
                  +
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/inlineall.html b/sites/all/libraries/ckeditor/samples/inlineall.html new file mode 100644 index 0000000000..9f767edd43 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/inlineall.html @@ -0,0 +1,311 @@ + + + + + + Massive inline editing — CKEditor Sample + + + + + + +
                  +

                  CKEditor Samples » Massive inline editing

                  +
                  +

                  This sample page demonstrates the inline editing feature - CKEditor instances will be created automatically from page elements with contentEditable attribute set to value true:

                  +
                  <div contenteditable="true" > ... </div>
                  +

                  Click inside of any element below to start editing.

                  +
                  +
                  +
                  + +
                  +
                  +
                  +

                  + Fusce vitae porttitor +

                  +

                  + + Lorem ipsum dolor sit amet dolor. Duis blandit vestibulum faucibus a, tortor. + +

                  +

                  + Proin nunc justo felis mollis tincidunt, risus risus pede, posuere cubilia Curae, Nullam euismod, enim. Etiam nibh ultricies dolor ac dignissim erat volutpat. Vivamus fermentum nisl nulla sem in metus. Maecenas wisi. Donec nec erat volutpat. +

                  +
                  +

                  + Fusce vitae porttitor a, euismod convallis nisl, blandit risus tortor, pretium. + Vehicula vitae, imperdiet vel, ornare enim vel sodales rutrum +

                  +
                  +
                  +

                  + Libero nunc, rhoncus ante ipsum non ipsum. Nunc eleifend pede turpis id sollicitudin fringilla. Phasellus ultrices, velit ac arcu. +

                  +
                  +

                  Pellentesque nunc. Donec suscipit erat. Pellentesque habitant morbi tristique ullamcorper.

                  +

                  Mauris mattis feugiat lectus nec mauris. Nullam vitae ante.

                  +
                  +
                  +
                  +
                  +

                  + Integer condimentum sit amet +

                  +

                  + Aenean nonummy a, mattis varius. Cras aliquet. + Praesent magna non mattis ac, rhoncus nunc, rhoncus eget, cursus pulvinar mollis.

                  +

                  Proin id nibh. Sed eu libero posuere sed, lectus. Phasellus dui gravida gravida feugiat mattis ac, felis.

                  +

                  Integer condimentum sit amet, tempor elit odio, a dolor non ante at sapien. Sed ac lectus. Nulla ligula quis eleifend mi, id leo velit pede cursus arcu id nulla ac lectus. Phasellus vestibulum. Nunc viverra enim quis diam.

                  +
                  +
                  +

                  + Praesent wisi accumsan sit amet nibh +

                  +

                  Donec ullamcorper, risus tortor, pretium porttitor. Morbi quam quis lectus non leo.

                  +

                  Integer faucibus scelerisque. Proin faucibus at, aliquet vulputate, odio at eros. Fusce gravida, erat vitae augue. Fusce urna fringilla gravida.

                  +

                  In hac habitasse platea dictumst. Praesent wisi accumsan sit amet nibh. Maecenas orci luctus a, lacinia quam sem, posuere commodo, odio condimentum tempor, pede semper risus. Suspendisse pede. In hac habitasse platea dictumst. Nam sed laoreet sit amet erat. Integer.

                  +
                  +
                  +
                  +
                  +

                  + CKEditor logo +

                  +

                  Quisque justo neque, mattis sed, fermentum ultrices posuere cubilia Curae, Vestibulum elit metus, quis placerat ut, lectus. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi.

                  +

                  + Nullam laoreet vel consectetuer tellus suscipit +

                  +
                    +
                  • Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis.
                  • +
                  • Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi.
                  • +
                  • Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.
                  • +
                  +

                  Quisque justo neque, mattis sed, fermentum ultrices posuere cubilia Curae, Vestibulum elit metus, quis placerat ut, lectus.

                  +

                  Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis.

                  +

                  Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi. Sed in nonummy faucibus turpis. Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.

                  +
                  +
                  +
                  +
                  + Tags of this article: +

                  + inline, editing, floating, CKEditor +

                  +
                  +
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/inlinebycode.html b/sites/all/libraries/ckeditor/samples/inlinebycode.html new file mode 100644 index 0000000000..d40edac5fb --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/inlinebycode.html @@ -0,0 +1,121 @@ + + + + + + Inline Editing by Code — CKEditor Sample + + + + + +

                  + CKEditor Samples » Inline Editing by Code +

                  +
                  +

                  + This sample shows how to create an inline editor instance of CKEditor. It is created + with a JavaScript call using the following code: +

                  +
                  +// This property tells CKEditor to not activate every element with contenteditable=true element.
                  +CKEDITOR.disableAutoInline = true;
                  +
                  +var editor = CKEDITOR.inline( document.getElementById( 'editable' ) );
                  +
                  +

                  + Note that editable in the code above is the id + attribute of the <div> element to be converted into an inline instance. +

                  +
                  +
                  +

                  Saturn V carrying Apollo 11 Apollo 11

                  + +

                  Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

                  + +

                  Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.

                  + +

                  Broadcasting and quotes

                  + +

                  Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

                  + +
                  +

                  One small step for [a] man, one giant leap for mankind.

                  +
                  + +

                  Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

                  + +
                  +

                  [...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

                  +
                  + +

                  Technical details

                  + + + + + + + + + + + + + + + + + + + + + + + +
                  Mission crew
                  PositionAstronaut
                  CommanderNeil A. Armstrong
                  Command Module PilotMichael Collins
                  Lunar Module PilotEdwin "Buzz" E. Aldrin, Jr.
                  + +

                  Launched by a Saturn V rocket from Kennedy Space Center in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of NASA's Apollo program. The Apollo spacecraft had three parts:

                  + +
                    +
                  1. Command Module with a cabin for the three astronauts which was the only part which landed back on Earth
                  2. +
                  3. Service Module which supported the Command Module with propulsion, electrical power, oxygen and water
                  4. +
                  5. Lunar Module for landing on the Moon.
                  6. +
                  + +

                  After being sent to the Moon by the Saturn V's upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the Sea of Tranquility. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the Pacific Ocean on July 24.

                  + +
                  +

                  Source: Wikipedia.org

                  +
                  + + + + + diff --git a/sites/all/libraries/ckeditor/samples/inlinetextarea.html b/sites/all/libraries/ckeditor/samples/inlinetextarea.html new file mode 100644 index 0000000000..7fba43eaf4 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/inlinetextarea.html @@ -0,0 +1,110 @@ + + + + + + Replace Textarea with Inline Editor — CKEditor Sample + + + + + +

                  + CKEditor Samples » Replace Textarea with Inline Editor +

                  +
                  +

                  + You can also create an inline editor from a textarea + element. In this case the textarea will be replaced + by a div element with inline editing enabled. +

                  +
                  +// "article-body" is the name of a textarea element.
                  +var editor = CKEDITOR.inline( 'article-body' );
                  +
                  +
                  +
                  +

                  This is a sample form with some fields

                  +

                  + Title:
                  +

                  +

                  + Article Body (Textarea converted to CKEditor):
                  + +

                  +

                  + +

                  +
                  + + + + + diff --git a/sites/all/libraries/ckeditor/samples/jquery.html b/sites/all/libraries/ckeditor/samples/jquery.html new file mode 100644 index 0000000000..c34a64222b --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/jquery.html @@ -0,0 +1,100 @@ + + + + + + jQuery Adapter — CKEditor Sample + + + + + + + + +

                  + CKEditor Samples » Create Editors with jQuery +

                  +
                  +
                  +

                  + This sample shows how to use the jQuery adapter. + Note that you have to include both CKEditor and jQuery scripts before including the adapter. +

                  + +
                  +<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
                  +<script src="/ckeditor/ckeditor.js"></script>
                  +<script src="/ckeditor/adapters/jquery.js"></script>
                  +
                  + +

                  Then you can replace HTML elements with a CKEditor instance using the ckeditor() method.

                  + +
                  +$( document ).ready( function() {
                  +	$( 'textarea#editor1' ).ckeditor();
                  +} );
                  +
                  +
                  + +

                  Inline Example

                  + +
                  +

                  Saturn V carrying Apollo 11Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

                  +

                  Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth. +

                  Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

                  +

                  One small step for [a] man, one giant leap for mankind.

                  Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

                  [...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

                  +
                  + +
                  + +

                  Classic (iframe-based) Example

                  + + + +

                  + + + + + +

                  +
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/plugins/dialog/assets/my_dialog.js b/sites/all/libraries/ckeditor/samples/plugins/dialog/assets/my_dialog.js new file mode 100644 index 0000000000..54f747c21b --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/plugins/dialog/assets/my_dialog.js @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +CKEDITOR.dialog.add( 'myDialog', function() { + return { + title: 'My Dialog', + minWidth: 400, + minHeight: 200, + contents: [ + { + id: 'tab1', + label: 'First Tab', + title: 'First Tab', + elements: [ + { + id: 'input1', + type: 'text', + label: 'Text Field' + }, + { + id: 'select1', + type: 'select', + label: 'Select Field', + items: [ + [ 'option1', 'value1' ], + [ 'option2', 'value2' ] + ] + } + ] + }, + { + id: 'tab2', + label: 'Second Tab', + title: 'Second Tab', + elements: [ + { + id: 'button1', + type: 'button', + label: 'Button Field' + } + ] + } + ] + }; +} ); + diff --git a/sites/all/libraries/ckeditor/samples/plugins/dialog/dialog.html b/sites/all/libraries/ckeditor/samples/plugins/dialog/dialog.html new file mode 100644 index 0000000000..a88cbe276d --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/plugins/dialog/dialog.html @@ -0,0 +1,187 @@ + + + + + + Using API to Customize Dialog Windows — CKEditor Sample + + + + + + + + + +

                  + CKEditor Samples » Using CKEditor Dialog API +

                  +
                  +

                  + This sample shows how to use the + CKEditor Dialog API + to customize CKEditor dialog windows without changing the original editor code. + The following customizations are being done in the example below: +

                  +

                  + For details on how to create this setup check the source code of this sample page. +

                  +
                  +

                  A custom dialog is added to the editors using the pluginsLoaded event, from an external dialog definition file:

                  +
                    +
                  1. Creating a custom dialog window – "My Dialog" dialog window opened with the "My Dialog" toolbar button.
                  2. +
                  3. Creating a custom button – Add button to open the dialog with "My Dialog" toolbar button.
                  4. +
                  + + +

                  The below editor modify the dialog definition of the above added dialog using the dialogDefinition event:

                  +
                    +
                  1. Adding dialog tab – Add new tab "My Tab" to dialog window.
                  2. +
                  3. Removing a dialog window tab – Remove "Second Tab" page from the dialog window.
                  4. +
                  5. Adding dialog window fields – Add "My Custom Field" to the dialog window.
                  6. +
                  7. Removing dialog window field – Remove "Select Field" selection field from the dialog window.
                  8. +
                  9. Setting default values for dialog window fields – Set default value of "Text Field" text field.
                  10. +
                  11. Setup initial focus for dialog window – Put initial focus on "My Custom Field" text field.
                  12. +
                  + + + + + diff --git a/sites/all/libraries/ckeditor/samples/plugins/enterkey/enterkey.html b/sites/all/libraries/ckeditor/samples/plugins/enterkey/enterkey.html new file mode 100644 index 0000000000..595a1ad29f --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/plugins/enterkey/enterkey.html @@ -0,0 +1,103 @@ + + + + + + ENTER Key Configuration — CKEditor Sample + + + + + + + + +

                  + CKEditor Samples » ENTER Key Configuration +

                  +
                  +

                  + This sample shows how to configure the Enter and Shift+Enter keys + to perform actions specified in the + enterMode + and shiftEnterMode + parameters, respectively. + You can choose from the following options: +

                  +
                    +
                  • ENTER_P – new <p> paragraphs are created;
                  • +
                  • ENTER_BR – lines are broken with <br> elements;
                  • +
                  • ENTER_DIV – new <div> blocks are created.
                  • +
                  +

                  + The sample code below shows how to configure CKEditor to create a <div> block when Enter key is pressed. +

                  +
                  +CKEDITOR.replace( 'textarea_id', {
                  +	enterMode: CKEDITOR.ENTER_DIV
                  +});
                  +

                  + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

                  +
                  +
                  + When Enter is pressed:
                  + +
                  +
                  + When Shift+Enter is pressed:
                  + +
                  +
                  +
                  +

                  +
                  + +

                  +

                  + +

                  +
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla b/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla new file mode 100644 index 0000000000..27e68ccd1c Binary files /dev/null and b/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla differ diff --git a/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf b/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf new file mode 100644 index 0000000000..dbe17b6bce Binary files /dev/null and b/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf differ diff --git a/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js b/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js new file mode 100644 index 0000000000..95fdf0a7a6 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js @@ -0,0 +1,18 @@ +var swfobject=function(){function u(){if(!s){try{var a=d.getElementsByTagName("body")[0].appendChild(d.createElement("span"));a.parentNode.removeChild(a)}catch(b){return}s=!0;for(var a=x.length,c=0;cf){f++;setTimeout(arguments.callee,10);return}a.removeChild(b);c=null;D()})()}else D()}function D(){var a=p.length;if(0e.wk))t(c,!0),f&&(g.success=!0,g.ref=E(c),f(g));else if(p[b].expressInstall&&F()){g={};g.data=p[b].expressInstall;g.width=d.getAttribute("width")||"0";g.height=d.getAttribute("height")||"0";d.getAttribute("class")&&(g.styleclass=d.getAttribute("class"));d.getAttribute("align")&&(g.align=d.getAttribute("align"));for(var h={},d=d.getElementsByTagName("param"),j=d.length,k=0;ke.wk)}function G(a,b,c,f){A=!0;H=f||null;N={success:!1,id:c};var g=n(c);if(g){"OBJECT"==g.nodeName?(w=I(g),B=null):(w=g,B=c);a.id= +O;if(typeof a.width==i||!/%$/.test(a.width)&&310>parseInt(a.width,10))a.width="310";if(typeof a.height==i||!/%$/.test(a.height)&&137>parseInt(a.height,10))a.height="137";d.title=d.title.slice(0,47)+" - Flash Player Installation";f=e.ie&&e.win?"ActiveX":"PlugIn";f="MMredirectURL="+m.location.toString().replace(/&/g,"%26")+"&MMplayerType="+f+"&MMdoctitle="+d.title;b.flashvars=typeof b.flashvars!=i?b.flashvars+("&"+f):f;e.ie&&(e.win&&4!=g.readyState)&&(f=d.createElement("div"),c+="SWFObjectNew",f.setAttribute("id", +c),g.parentNode.insertBefore(f,g),g.style.display="none",function(){g.readyState==4?g.parentNode.removeChild(g):setTimeout(arguments.callee,10)}());J(a,b,c)}}function W(a){if(e.ie&&e.win&&4!=a.readyState){var b=d.createElement("div");a.parentNode.insertBefore(b,a);b.parentNode.replaceChild(I(a),b);a.style.display="none";(function(){4==a.readyState?a.parentNode.removeChild(a):setTimeout(arguments.callee,10)})()}else a.parentNode.replaceChild(I(a),a)}function I(a){var b=d.createElement("div");if(e.win&& +e.ie)b.innerHTML=a.innerHTML;else if(a=a.getElementsByTagName(r)[0])if(a=a.childNodes)for(var c=a.length,f=0;fe.wk)return f;if(g)if(typeof a.id==i&&(a.id=c),e.ie&&e.win){var o="",h;for(h in a)a[h]!=Object.prototype[h]&&("data"==h.toLowerCase()?b.movie=a[h]:"styleclass"==h.toLowerCase()?o+=' class="'+a[h]+'"':"classid"!=h.toLowerCase()&&(o+=" "+ +h+'="'+a[h]+'"'));h="";for(var j in b)b[j]!=Object.prototype[j]&&(h+='');g.outerHTML='"+h+"";C[C.length]=a.id;f=n(a.id)}else{j=d.createElement(r);j.setAttribute("type",y);for(var k in a)a[k]!=Object.prototype[k]&&("styleclass"==k.toLowerCase()?j.setAttribute("class",a[k]):"classid"!=k.toLowerCase()&&j.setAttribute(k,a[k]));for(o in b)b[o]!=Object.prototype[o]&&"movie"!=o.toLowerCase()&& +(a=j,h=o,k=b[o],c=d.createElement("param"),c.setAttribute("name",h),c.setAttribute("value",k),a.appendChild(c));g.parentNode.replaceChild(j,g);f=j}return f}function P(a){var b=n(a);b&&"OBJECT"==b.nodeName&&(e.ie&&e.win?(b.style.display="none",function(){if(4==b.readyState){var c=n(a);if(c){for(var f in c)"function"==typeof c[f]&&(c[f]=null);c.parentNode.removeChild(c)}}else setTimeout(arguments.callee,10)}()):b.parentNode.removeChild(b))}function n(a){var b=null;try{b=d.getElementById(a)}catch(c){}return b} +function U(a,b,c){a.attachEvent(b,c);v[v.length]=[a,b,c]}function z(a){var b=e.pv,a=a.split(".");a[0]=parseInt(a[0],10);a[1]=parseInt(a[1],10)||0;a[2]=parseInt(a[2],10)||0;return b[0]>a[0]||b[0]==a[0]&&b[1]>a[1]||b[0]==a[0]&&b[1]==a[1]&&b[2]>=a[2]?!0:!1}function Q(a,b,c,f){if(!e.ie||!e.mac){var g=d.getElementsByTagName("head")[0];if(g){c=c&&"string"==typeof c?c:"screen";f&&(K=l=null);if(!l||K!=c)f=d.createElement("style"),f.setAttribute("type","text/css"),f.setAttribute("media",c),l=g.appendChild(f), +e.ie&&(e.win&&typeof d.styleSheets!=i&&0\.;]/.exec(a)&&typeof encodeURIComponent!=i?encodeURIComponent(a):a}var i="undefined",r="object",y="application/x-shockwave-flash", +O="SWFObjectExprInst",m=window,d=document,q=navigator,T=!1,x=[function(){T?V():D()}],p=[],C=[],v=[],w,B,H,N,s=!1,A=!1,l,K,R=!0,e=function(){var a=typeof d.getElementById!=i&&typeof d.getElementsByTagName!=i&&typeof d.createElement!=i,b=q.userAgent.toLowerCase(),c=q.platform.toLowerCase(),f=c?/win/.test(c):/win/.test(b),c=c?/mac/.test(c):/mac/.test(b),b=/webkit/.test(b)?parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,g=!+"\v1",e=[0,0,0],h=null;if(typeof q.plugins!=i&&typeof q.plugins["Shockwave Flash"]== +r){if((h=q.plugins["Shockwave Flash"].description)&&!(typeof q.mimeTypes!=i&&q.mimeTypes[y]&&!q.mimeTypes[y].enabledPlugin))T=!0,g=!1,h=h.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),e[0]=parseInt(h.replace(/^(.*)\..*$/,"$1"),10),e[1]=parseInt(h.replace(/^.*\.(.*)\s.*$/,"$1"),10),e[2]=/[a-zA-Z]/.test(h)?parseInt(h.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}else if(typeof m.ActiveXObject!=i)try{var j=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");if(j&&(h=j.GetVariable("$version")))g=!0,h=h.split(" ")[1].split(","), +e=[parseInt(h[0],10),parseInt(h[1],10),parseInt(h[2],10)]}catch(k){}return{w3:a,pv:e,wk:b,ie:g,win:f,mac:c}}();(function(){e.w3&&((typeof d.readyState!=i&&"complete"==d.readyState||typeof d.readyState==i&&(d.getElementsByTagName("body")[0]||d.body))&&u(),s||(typeof d.addEventListener!=i&&d.addEventListener("DOMContentLoaded",u,!1),e.ie&&e.win&&(d.attachEvent("onreadystatechange",function(){"complete"==d.readyState&&(d.detachEvent("onreadystatechange",arguments.callee),u())}),m==top&&function(){if(!s){try{d.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee, +0);return}u()}}()),e.wk&&function(){s||(/loaded|complete/.test(d.readyState)?u():setTimeout(arguments.callee,0))}(),M(u)))})();(function(){e.ie&&e.win&&window.attachEvent("onunload",function(){for(var a=v.length,b=0;be.wk)&&a&&b&&c&&d&&g?(t(b,!1),L(function(){c+="";d+="";var e={};if(k&&typeof k===r)for(var l in k)e[l]=k[l];e.data=a;e.width=c;e.height=d;l={};if(j&&typeof j===r)for(var p in j)l[p]=j[p];if(h&&typeof h===r)for(var q in h)l.flashvars=typeof l.flashvars!=i?l.flashvars+("&"+q+"="+h[q]):q+"="+h[q];if(z(g))p=J(e,l,b),e.id== +b&&t(b,!0),n.success=!0,n.ref=p;else{if(o&&F()){e.data=o;G(e,l,b,m);return}t(b,!0)}m&&m(n)})):m&&m(n)},switchOffAutoHideShow:function(){R=!1},ua:e,getFlashPlayerVersion:function(){return{major:e.pv[0],minor:e.pv[1],release:e.pv[2]}},hasFlashPlayerVersion:z,createSWF:function(a,b,c){if(e.w3)return J(a,b,c)},showExpressInstall:function(a,b,c,d){e.w3&&F()&&G(a,b,c,d)},removeSWF:function(a){e.w3&&P(a)},createCSS:function(a,b,c,d){e.w3&&Q(a,b,c,d)},addDomLoadEvent:L,addLoadEvent:M,getQueryParamValue:function(a){var b= +d.location.search||d.location.hash;if(b){/\?/.test(b)&&(b=b.split("?")[1]);if(null==a)return S(b);for(var b=b.split("&"),c=0;c + + + + + Output for Flash — CKEditor Sample + + + + + + + + + + + +

                  + CKEditor Samples » Producing Flash Compliant HTML Output +

                  +
                  +

                  + This sample shows how to configure CKEditor to output + HTML code that can be used with + + Adobe Flash. + The code will contain a subset of standard HTML elements like <b>, + <i>, and <p> as well as HTML attributes. +

                  +

                  + To add a CKEditor instance outputting Flash compliant HTML code, load the editor using a standard + JavaScript call, and define CKEditor features to use HTML elements and attributes. +

                  +

                  + For details on how to create this setup check the source code of this sample page. +

                  +
                  +

                  + To see how it works, create some content in the editing area of CKEditor on the left + and send it to the Flash object on the right side of the page by using the + Send to Flash button. +

                  + + + + + +
                  + + +

                  + +

                  +
                  +
                  +
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/outputhtml.html b/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/outputhtml.html new file mode 100644 index 0000000000..3cc66e330a --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/plugins/htmlwriter/outputhtml.html @@ -0,0 +1,221 @@ + + + + + + HTML Compliant Output — CKEditor Sample + + + + + + + + + +

                  + CKEditor Samples » Producing HTML Compliant Output +

                  +
                  +

                  + This sample shows how to configure CKEditor to output valid + HTML 4.01 code. + Traditional HTML elements like <b>, + <i>, and <font> are used in place of + <strong>, <em>, and CSS styles. +

                  +

                  + To add a CKEditor instance outputting legacy HTML 4.01 code, load the editor using a standard + JavaScript call, and define CKEditor features to use the HTML compliant elements and attributes. +

                  +

                  + A snippet of the configuration code can be seen below; check the source of this page for + full definition: +

                  +
                  +CKEDITOR.replace( 'textarea_id', {
                  +	coreStyles_bold: { element: 'b' },
                  +	coreStyles_italic: { element: 'i' },
                  +
                  +	fontSize_style: {
                  +		element: 'font',
                  +		attributes: { 'size': '#(size)' }
                  +	}
                  +
                  +	...
                  +});
                  +
                  +
                  +

                  + + + +

                  +

                  + +

                  +
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/plugins/magicline/magicline.html b/sites/all/libraries/ckeditor/samples/plugins/magicline/magicline.html new file mode 100644 index 0000000000..b09fcf7e7d --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/plugins/magicline/magicline.html @@ -0,0 +1,206 @@ + + + + + + Using Magicline plugin — CKEditor Sample + + + + + + + +

                  + CKEditor Samples » Using Magicline plugin +

                  +
                  +

                  + This sample shows the advantages of Magicline plugin + which is to enhance the editing process. Thanks to this plugin, + a number of difficult focus spaces which are inaccessible due to + browser issues can now be focused. +

                  +

                  + Magicline plugin shows a red line with a handler + which, when clicked, inserts a paragraph and allows typing. To see this, + focus an editor and move your mouse above the focus space you want + to access. The plugin is enabled by default so no additional + configuration is necessary. +

                  +
                  +
                  + +
                  +

                  + This editor uses a default Magicline setup. +

                  +
                  + + +
                  +
                  +
                  + +
                  +

                  + This editor is using a blue line. +

                  +
                  +CKEDITOR.replace( 'editor2', {
                  +	magicline_color: 'blue'
                  +});
                  +
                  + + +
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/plugins/toolbar/toolbar.html b/sites/all/libraries/ckeditor/samples/plugins/toolbar/toolbar.html new file mode 100644 index 0000000000..c78b433c08 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/plugins/toolbar/toolbar.html @@ -0,0 +1,232 @@ + + + + + + Toolbar Configuration — CKEditor Sample + + + + + + + +

                  + CKEditor Samples » Toolbar Configuration +

                  +
                  +

                  + This sample page demonstrates editor with loaded full toolbar (all registered buttons) and, if + current editor's configuration modifies default settings, also editor with modified toolbar. +

                  + +

                  Since CKEditor 4 there are two ways to configure toolbar buttons.

                  + +

                  By config.toolbar

                  + +

                  + You can explicitly define which buttons are displayed in which groups and in which order. + This is the more precise setting, but less flexible. If newly added plugin adds its + own button you'll have to add it manually to your config.toolbar setting as well. +

                  + +

                  To add a CKEditor instance with custom toolbar setting, insert the following JavaScript call to your code:

                  + +
                  +CKEDITOR.replace( 'textarea_id', {
                  +	toolbar: [
                  +		{ name: 'document', items: [ 'Source', '-', 'NewPage', 'Preview', '-', 'Templates' ] },	// Defines toolbar group with name (used to create voice label) and items in 3 subgroups.
                  +		[ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ],			// Defines toolbar group without name.
                  +		'/',																					// Line break - next group will be placed in new line.
                  +		{ name: 'basicstyles', items: [ 'Bold', 'Italic' ] }
                  +	]
                  +});
                  + +

                  By config.toolbarGroups

                  + +

                  + You can define which groups of buttons (like e.g. basicstyles, clipboard + and forms) are displayed and in which order. Registered buttons are associated + with toolbar groups by toolbar property in their definition. + This setting's advantage is that you don't have to modify toolbar configuration + when adding/removing plugins which register their own buttons. +

                  + +

                  To add a CKEditor instance with custom toolbar groups setting, insert the following JavaScript call to your code:

                  + +
                  +CKEDITOR.replace( 'textarea_id', {
                  +	toolbarGroups: [
                  +		{ name: 'document',	   groups: [ 'mode', 'document' ] },			// Displays document group with its two subgroups.
                  + 		{ name: 'clipboard',   groups: [ 'clipboard', 'undo' ] },			// Group's name will be used to create voice label.
                  + 		'/',																// Line break - next group will be placed in new line.
                  + 		{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
                  + 		{ name: 'links' }
                  +	]
                  +
                  +	// NOTE: Remember to leave 'toolbar' property with the default value (null).
                  +});
                  +
                  + + + +
                  +

                  Full toolbar configuration

                  +

                  Below you can see editor with full toolbar, generated automatically by the editor.

                  +

                  + Note: To create editor instance with full toolbar you don't have to set anything. + Just leave toolbar and toolbarGroups with the default, null values. +

                  + +
                  
                  +	
                  + + + + + + diff --git a/sites/all/libraries/ckeditor/samples/plugins/wysiwygarea/fullpage.html b/sites/all/libraries/ckeditor/samples/plugins/wysiwygarea/fullpage.html new file mode 100644 index 0000000000..6b31f57366 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/plugins/wysiwygarea/fullpage.html @@ -0,0 +1,77 @@ + + + + + + Full Page Editing — CKEditor Sample + + + + + + + + + +

                  + CKEditor Samples » Full Page Editing +

                  +
                  +

                  + This sample shows how to configure CKEditor to edit entire HTML pages, from the + <html> tag to the </html> tag. +

                  +

                  + The CKEditor instance below is inserted with a JavaScript call using the following code: +

                  +
                  +CKEDITOR.replace( 'textarea_id', {
                  +	fullPage: true,
                  +	allowedContent: true
                  +});
                  +
                  +

                  + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

                  +

                  + The allowedContent in the code above is set to true to disable content filtering. + Setting this option is not obligatory, but in full page mode there is a strong chance that one may want be able to freely enter any HTML content in source mode without any limitations. +

                  +
                  +
                  + + + +

                  + +

                  +
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/readonly.html b/sites/all/libraries/ckeditor/samples/readonly.html new file mode 100644 index 0000000000..c1cbacd192 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/readonly.html @@ -0,0 +1,73 @@ + + + + + + Using the CKEditor Read-Only API — CKEditor Sample + + + + + +

                  + CKEditor Samples » Using the CKEditor Read-Only API +

                  +
                  +

                  + This sample shows how to use the + setReadOnly + API to put editor into the read-only state that makes it impossible for users to change the editor contents. +

                  +

                  + For details on how to create this setup check the source code of this sample page. +

                  +
                  +
                  +

                  + +

                  +

                  + + +

                  +
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/replacebyclass.html b/sites/all/libraries/ckeditor/samples/replacebyclass.html new file mode 100644 index 0000000000..850df3969f --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/replacebyclass.html @@ -0,0 +1,57 @@ + + + + + + Replace Textareas by Class Name — CKEditor Sample + + + + +

                  + CKEditor Samples » Replace Textarea Elements by Class Name +

                  +
                  +

                  + This sample shows how to automatically replace all <textarea> elements + of a given class with a CKEditor instance. +

                  +

                  + To replace a <textarea> element, simply assign it the ckeditor + class, as in the code below: +

                  +
                  +<textarea class="ckeditor" name="editor1"></textarea>
                  +
                  +

                  + Note that other <textarea> attributes (like id or name) need to be adjusted to your document. +

                  +
                  +
                  +

                  + + +

                  +

                  + +

                  +
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/replacebycode.html b/sites/all/libraries/ckeditor/samples/replacebycode.html new file mode 100644 index 0000000000..ad9753477e --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/replacebycode.html @@ -0,0 +1,56 @@ + + + + + + Replace Textarea by Code — CKEditor Sample + + + + +

                  + CKEditor Samples » Replace Textarea Elements Using JavaScript Code +

                  +
                  +
                  +

                  + This editor is using an <iframe> element-based editing area, provided by the Wysiwygarea plugin. +

                  +
                  +CKEDITOR.replace( 'textarea_id' )
                  +
                  +
                  + + +

                  + +

                  +
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/sample.css b/sites/all/libraries/ckeditor/samples/sample.css new file mode 100644 index 0000000000..13bd4cdd5f --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/sample.css @@ -0,0 +1,365 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ + +html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre +{ + line-height: 1.5; +} + +body +{ + padding: 10px 30px; +} + +input, textarea, select, option, optgroup, button, td, th +{ + font-size: 100%; +} + +pre +{ + -moz-tab-size: 4; + -o-tab-size: 4; + -webkit-tab-size: 4; + tab-size: 4; +} + +pre, code, kbd, samp, tt +{ + font-family: monospace,monospace; + font-size: 1em; +} + +body { + width: 960px; + margin: 0 auto; +} + +code +{ + background: #f3f3f3; + border: 1px solid #ddd; + padding: 1px 4px; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +abbr +{ + border-bottom: 1px dotted #555; + cursor: pointer; +} + +.new, .beta +{ + text-transform: uppercase; + font-size: 10px; + font-weight: bold; + padding: 1px 4px; + margin: 0 0 0 5px; + color: #fff; + float: right; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +.new +{ + background: #FF7E00; + border: 1px solid #DA8028; + text-shadow: 0 1px 0 #C97626; + + -moz-box-shadow: 0 2px 3px 0 #FFA54E inset; + -webkit-box-shadow: 0 2px 3px 0 #FFA54E inset; + box-shadow: 0 2px 3px 0 #FFA54E inset; +} + +.beta +{ + background: #18C0DF; + border: 1px solid #19AAD8; + text-shadow: 0 1px 0 #048CAD; + font-style: italic; + + -moz-box-shadow: 0 2px 3px 0 #50D4FD inset; + -webkit-box-shadow: 0 2px 3px 0 #50D4FD inset; + box-shadow: 0 2px 3px 0 #50D4FD inset; +} + +h1.samples +{ + color: #0782C1; + font-size: 200%; + font-weight: normal; + margin: 0; + padding: 0; +} + +h1.samples a +{ + color: #0782C1; + text-decoration: none; + border-bottom: 1px dotted #0782C1; +} + +.samples a:hover +{ + border-bottom: 1px dotted #0782C1; +} + +h2.samples +{ + color: #000000; + font-size: 130%; + margin: 15px 0 0 0; + padding: 0; +} + +p, blockquote, address, form, pre, dl, h1.samples, h2.samples +{ + margin-bottom: 15px; +} + +ul.samples +{ + margin-bottom: 15px; +} + +.clear +{ + clear: both; +} + +fieldset +{ + margin: 0; + padding: 10px; +} + +body, input, textarea +{ + color: #333333; + font-family: Arial, Helvetica, sans-serif; +} + +body +{ + font-size: 75%; +} + +a.samples +{ + color: #189DE1; + text-decoration: none; +} + +form +{ + margin: 0; + padding: 0; +} + +pre.samples +{ + background-color: #F7F7F7; + border: 1px solid #D7D7D7; + overflow: auto; + padding: 0.25em; + white-space: pre-wrap; /* CSS 2.1 */ + word-wrap: break-word; /* IE7 */ +} + +#footer +{ + clear: both; + padding-top: 10px; +} + +#footer hr +{ + margin: 10px 0 15px 0; + height: 1px; + border: solid 1px gray; + border-bottom: none; +} + +#footer p +{ + margin: 0 10px 10px 10px; + float: left; +} + +#footer #copy +{ + float: right; +} + +#outputSample +{ + width: 100%; + table-layout: fixed; +} + +#outputSample thead th +{ + color: #dddddd; + background-color: #999999; + padding: 4px; + white-space: nowrap; +} + +#outputSample tbody th +{ + vertical-align: top; + text-align: left; +} + +#outputSample pre +{ + margin: 0; + padding: 0; +} + +.description +{ + border: 1px dotted #B7B7B7; + margin-bottom: 10px; + padding: 10px 10px 0; + overflow: hidden; +} + +label +{ + display: block; + margin-bottom: 6px; +} + +/** + * CKEditor editables are automatically set with the "cke_editable" class + * plus cke_editable_(inline|themed) depending on the editor type. + */ + +/* Style a bit the inline editables. */ +.cke_editable.cke_editable_inline +{ + cursor: pointer; +} + +/* Once an editable element gets focused, the "cke_focus" class is + added to it, so we can style it differently. */ +.cke_editable.cke_editable_inline.cke_focus +{ + box-shadow: inset 0px 0px 20px 3px #ddd, inset 0 0 1px #000; + outline: none; + background: #eee; + cursor: text; +} + +/* Avoid pre-formatted overflows inline editable. */ +.cke_editable_inline pre +{ + white-space: pre-wrap; + word-wrap: break-word; +} + +/** + * Samples index styles. + */ + +.twoColumns, +.twoColumnsLeft, +.twoColumnsRight +{ + overflow: hidden; +} + +.twoColumnsLeft, +.twoColumnsRight +{ + width: 45%; +} + +.twoColumnsLeft +{ + float: left; +} + +.twoColumnsRight +{ + float: right; +} + +dl.samples +{ + padding: 0 0 0 40px; +} +dl.samples > dt +{ + display: list-item; + list-style-type: disc; + list-style-position: outside; + margin: 0 0 3px; +} +dl.samples > dd +{ + margin: 0 0 3px; +} +.warning +{ + color: #ff0000; + background-color: #FFCCBA; + border: 2px dotted #ff0000; + padding: 15px 10px; + margin: 10px 0; +} + +/* Used on inline samples */ + +blockquote +{ + font-style: italic; + font-family: Georgia, Times, "Times New Roman", serif; + padding: 2px 0; + border-style: solid; + border-color: #ccc; + border-width: 0; +} + +.cke_contents_ltr blockquote +{ + padding-left: 20px; + padding-right: 8px; + border-left-width: 5px; +} + +.cke_contents_rtl blockquote +{ + padding-left: 8px; + padding-right: 20px; + border-right-width: 5px; +} + +img.right { + border: 1px solid #ccc; + float: right; + margin-left: 15px; + padding: 5px; +} + +img.left { + border: 1px solid #ccc; + float: left; + margin-right: 15px; + padding: 5px; +} + +.marker +{ + background-color: Yellow; +} diff --git a/sites/all/libraries/ckeditor/samples/sample.js b/sites/all/libraries/ckeditor/samples/sample.js new file mode 100644 index 0000000000..439a521217 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/sample.js @@ -0,0 +1,50 @@ +/** + * Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +// Tool scripts for the sample pages. +// This file can be ignored and is not required to make use of CKEditor. + +( function() { + CKEDITOR.on( 'instanceReady', function( ev ) { + // Check for sample compliance. + var editor = ev.editor, + meta = CKEDITOR.document.$.getElementsByName( 'ckeditor-sample-required-plugins' ), + requires = meta.length ? CKEDITOR.dom.element.get( meta[ 0 ] ).getAttribute( 'content' ).split( ',' ) : [], + missing = [], + i; + + if ( requires.length ) { + for ( i = 0; i < requires.length; i++ ) { + if ( !editor.plugins[ requires[ i ] ] ) + missing.push( '' + requires[ i ] + '' ); + } + + if ( missing.length ) { + var warn = CKEDITOR.dom.element.createFromHtml( + '
                  ' + + 'To fully experience this demo, the ' + missing.join( ', ' ) + ' plugin' + ( missing.length > 1 ? 's are' : ' is' ) + ' required.' + + '
                  ' + ); + warn.insertBefore( editor.container ); + } + } + + // Set icons. + var doc = new CKEDITOR.dom.document( document ), + icons = doc.find( '.button_icon' ); + + for ( i = 0; i < icons.count(); i++ ) { + var icon = icons.getItem( i ), + name = icon.getAttribute( 'data-icon' ), + style = CKEDITOR.skin.getIconStyle( name, ( CKEDITOR.lang.dir == 'rtl' ) ); + + icon.addClass( 'cke_button_icon' ); + icon.addClass( 'cke_button__' + name + '_icon' ); + icon.setAttribute( 'style', style ); + icon.setStyle( 'float', 'none' ); + + } + } ); +} )(); diff --git a/sites/all/libraries/ckeditor/samples/sample_posteddata.php b/sites/all/libraries/ckeditor/samples/sample_posteddata.php new file mode 100644 index 0000000000..c5c3308523 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/sample_posteddata.php @@ -0,0 +1,16 @@ +
                  +
                  +-------------------------------------------------------------------------------------------
                  +  CKEditor - Posted Data
                  +
                  +  We are sorry, but your Web server does not support the PHP language used in this script.
                  +
                  +  Please note that CKEditor can be used with any other server-side language than just PHP.
                  +  To save the content created with CKEditor you need to read the POST data on the server
                  +  side and write it to a file or the database.
                  +
                  +  Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
                  +  For licensing, see LICENSE.md or http://ckeditor.com/license
                  +-------------------------------------------------------------------------------------------
                  +
                  +
                  */ include "assets/posteddata.php"; ?> diff --git a/sites/all/libraries/ckeditor/samples/tabindex.html b/sites/all/libraries/ckeditor/samples/tabindex.html new file mode 100644 index 0000000000..68a95bf5da --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/tabindex.html @@ -0,0 +1,75 @@ + + + + + + TAB Key-Based Navigation — CKEditor Sample + + + + + + +

                  + CKEditor Samples » TAB Key-Based Navigation +

                  +
                  +

                  + This sample shows how tab key navigation among editor instances is + affected by the tabIndex attribute from + the original page element. Use TAB key to move between the editors. +

                  +
                  +

                  + +

                  +
                  +

                  + +

                  +

                  + +

                  + + + diff --git a/sites/all/libraries/ckeditor/samples/uicolor.html b/sites/all/libraries/ckeditor/samples/uicolor.html new file mode 100644 index 0000000000..3e57a46c3b --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/uicolor.html @@ -0,0 +1,69 @@ + + + + + + UI Color Picker — CKEditor Sample + + + + +

                  + CKEditor Samples » UI Color +

                  +
                  +

                  + This sample shows how to automatically replace <textarea> elements + with a CKEditor instance with an option to change the color of its user interface.
                  + Note:The UI skin color feature depends on the CKEditor skin + compatibility. The Moono and Kama skins are examples of skins that work with it. +

                  +
                  +
                  +

                  + This editor instance has a UI color value defined in configuration to change the skin color, + To specify the color of the user interface, set the uiColor property: +

                  +
                  +CKEDITOR.replace( 'textarea_id', {
                  +	uiColor: '#14B8C4'
                  +});
                  +

                  + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

                  +

                  + + +

                  +

                  + +

                  +
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/uilanguages.html b/sites/all/libraries/ckeditor/samples/uilanguages.html new file mode 100644 index 0000000000..596e0d7a83 --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/uilanguages.html @@ -0,0 +1,119 @@ + + + + + + User Interface Globalization — CKEditor Sample + + + + + +

                  + CKEditor Samples » User Interface Languages +

                  +
                  +

                  + This sample shows how to automatically replace <textarea> elements + with a CKEditor instance with an option to change the language of its user interface. +

                  +

                  + It pulls the language list from CKEditor _languages.js file that contains the list of supported languages and creates + a drop-down list that lets the user change the UI language. +

                  +

                  + By default, CKEditor automatically localizes the editor to the language of the user. + The UI language can be controlled with two configuration options: + language and + + defaultLanguage. The defaultLanguage setting specifies the + default CKEditor language to be used when a localization suitable for user's settings is not available. +

                  +

                  + To specify the user interface language that will be used no matter what language is + specified in user's browser or operating system, set the language property: +

                  +
                  +CKEDITOR.replace( 'textarea_id', {
                  +	// Load the German interface.
                  +	language: 'de'
                  +});
                  +

                  + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

                  +
                  +
                  +

                  + Available languages ( languages!):
                  + +
                  + + (You may see strange characters if your system does not support the selected language) + +

                  +

                  + + +

                  +
                  + + + diff --git a/sites/all/libraries/ckeditor/samples/xhtmlstyle.html b/sites/all/libraries/ckeditor/samples/xhtmlstyle.html new file mode 100644 index 0000000000..b9d9a2594c --- /dev/null +++ b/sites/all/libraries/ckeditor/samples/xhtmlstyle.html @@ -0,0 +1,231 @@ + + + + + + XHTML Compliant Output — CKEditor Sample + + + + + + +

                  + CKEditor Samples » Producing XHTML Compliant Output +

                  +
                  +

                  + This sample shows how to configure CKEditor to output valid + XHTML 1.1 code. + Deprecated elements (<font>, <u>) or attributes + (size, face) will be replaced with XHTML compliant code. +

                  +

                  + To add a CKEditor instance outputting valid XHTML code, load the editor using a standard + JavaScript call and define CKEditor features to use the XHTML compliant elements and styles. +

                  +

                  + A snippet of the configuration code can be seen below; check the source of this page for + full definition: +

                  +
                  +CKEDITOR.replace( 'textarea_id', {
                  +	contentsCss: 'assets/outputxhtml.css',
                  +
                  +	coreStyles_bold: {
                  +		element: 'span',
                  +		attributes: { 'class': 'Bold' }
                  +	},
                  +	coreStyles_italic: {
                  +		element: 'span',
                  +		attributes: { 'class': 'Italic' }
                  +	},
                  +
                  +	...
                  +});
                  +
                  +
                  +

                  + + + +

                  +

                  + +

                  +
                  + + + diff --git a/sites/all/libraries/ckeditor/skins/moono/dialog.css b/sites/all/libraries/ckeditor/skins/moono/dialog.css new file mode 100644 index 0000000000..86986f17a4 --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/dialog.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/dialog_ie.css b/sites/all/libraries/ckeditor/skins/moono/dialog_ie.css new file mode 100644 index 0000000000..02b96e526a --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/dialog_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/dialog_ie7.css b/sites/all/libraries/ckeditor/skins/moono/dialog_ie7.css new file mode 100644 index 0000000000..8948f32088 --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/dialog_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/dialog_ie8.css b/sites/all/libraries/ckeditor/skins/moono/dialog_ie8.css new file mode 100644 index 0000000000..4f39b924fc --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/dialog_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/dialog_iequirks.css b/sites/all/libraries/ckeditor/skins/moono/dialog_iequirks.css new file mode 100644 index 0000000000..180b5b5bc1 --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/dialog_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:""} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/editor.css b/sites/all/libraries/ckeditor/skins/moono/editor.css new file mode 100644 index 0000000000..1fdcb43ca8 --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/editor.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/editor_gecko.css b/sites/all/libraries/ckeditor/skins/moono/editor_gecko.css new file mode 100644 index 0000000000..e1210656a1 --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/editor_gecko.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/editor_ie.css b/sites/all/libraries/ckeditor/skins/moono/editor_ie.css new file mode 100644 index 0000000000..4878a90b4a --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/editor_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/editor_ie7.css b/sites/all/libraries/ckeditor/skins/moono/editor_ie7.css new file mode 100644 index 0000000000..8ecfc0ae0d --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/editor_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/editor_ie8.css b/sites/all/libraries/ckeditor/skins/moono/editor_ie8.css new file mode 100644 index 0000000000..6971f74f7b --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/editor_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/editor_iequirks.css b/sites/all/libraries/ckeditor/skins/moono/editor_iequirks.css new file mode 100644 index 0000000000..1cbf808719 --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/editor_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_reset_all table{table-layout:auto}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;} \ No newline at end of file diff --git a/sites/all/libraries/ckeditor/skins/moono/icons.png b/sites/all/libraries/ckeditor/skins/moono/icons.png new file mode 100644 index 0000000000..ee029707f7 Binary files /dev/null and b/sites/all/libraries/ckeditor/skins/moono/icons.png differ diff --git a/sites/all/libraries/ckeditor/skins/moono/icons_hidpi.png b/sites/all/libraries/ckeditor/skins/moono/icons_hidpi.png new file mode 100644 index 0000000000..0466c2bcc5 Binary files /dev/null and b/sites/all/libraries/ckeditor/skins/moono/icons_hidpi.png differ diff --git a/sites/all/libraries/ckeditor/skins/moono/images/arrow.png b/sites/all/libraries/ckeditor/skins/moono/images/arrow.png new file mode 100644 index 0000000000..d72b5f3b88 Binary files /dev/null and b/sites/all/libraries/ckeditor/skins/moono/images/arrow.png differ diff --git a/sites/all/libraries/ckeditor/skins/moono/images/close.png b/sites/all/libraries/ckeditor/skins/moono/images/close.png new file mode 100644 index 0000000000..6a04ab5275 Binary files /dev/null and b/sites/all/libraries/ckeditor/skins/moono/images/close.png differ diff --git a/sites/all/libraries/ckeditor/skins/moono/images/hidpi/close.png b/sites/all/libraries/ckeditor/skins/moono/images/hidpi/close.png new file mode 100644 index 0000000000..e406c2c35b Binary files /dev/null and b/sites/all/libraries/ckeditor/skins/moono/images/hidpi/close.png differ diff --git a/sites/all/libraries/ckeditor/skins/moono/images/hidpi/lock-open.png b/sites/all/libraries/ckeditor/skins/moono/images/hidpi/lock-open.png new file mode 100644 index 0000000000..edbd12f3bd Binary files /dev/null and b/sites/all/libraries/ckeditor/skins/moono/images/hidpi/lock-open.png differ diff --git a/sites/all/libraries/ckeditor/skins/moono/images/hidpi/lock.png b/sites/all/libraries/ckeditor/skins/moono/images/hidpi/lock.png new file mode 100644 index 0000000000..1b87bbb7a1 Binary files /dev/null and b/sites/all/libraries/ckeditor/skins/moono/images/hidpi/lock.png differ diff --git a/sites/all/libraries/ckeditor/skins/moono/images/hidpi/refresh.png b/sites/all/libraries/ckeditor/skins/moono/images/hidpi/refresh.png new file mode 100644 index 0000000000..c6c2b86e6d Binary files /dev/null and b/sites/all/libraries/ckeditor/skins/moono/images/hidpi/refresh.png differ diff --git a/sites/all/libraries/ckeditor/skins/moono/images/lock-open.png b/sites/all/libraries/ckeditor/skins/moono/images/lock-open.png new file mode 100644 index 0000000000..04769877aa Binary files /dev/null and b/sites/all/libraries/ckeditor/skins/moono/images/lock-open.png differ diff --git a/sites/all/libraries/ckeditor/skins/moono/images/lock.png b/sites/all/libraries/ckeditor/skins/moono/images/lock.png new file mode 100644 index 0000000000..c5a14400d5 Binary files /dev/null and b/sites/all/libraries/ckeditor/skins/moono/images/lock.png differ diff --git a/sites/all/libraries/ckeditor/skins/moono/images/refresh.png b/sites/all/libraries/ckeditor/skins/moono/images/refresh.png new file mode 100644 index 0000000000..1ff63c3090 Binary files /dev/null and b/sites/all/libraries/ckeditor/skins/moono/images/refresh.png differ diff --git a/sites/all/libraries/ckeditor/skins/moono/readme.md b/sites/all/libraries/ckeditor/skins/moono/readme.md new file mode 100644 index 0000000000..58290a03a0 --- /dev/null +++ b/sites/all/libraries/ckeditor/skins/moono/readme.md @@ -0,0 +1,51 @@ +"Moono" Skin +==================== + +This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor +[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by +the CKEditor team. "Moono" is maintained by the core developers. + +For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) +documentation. + +Features +------------------- +"Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency. +It comes with the following features: + +- Chameleon feature with brightness, +- high-contrast compatibility, +- graphics source provided in SVG. + +Directory Structure +------------------- + +CSS parts: +- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance, +- **mainui.css**: the file contains styles of entire editor outline structures, +- **toolbar.css**: the file contains styles of the editor toolbar space (top), +- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar, +- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded +until the first panel open up, +- **elementspath.css**: the file contains styles of the editor elements path bar (bottom), +- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down, +it's not loaded until the first menu open up, +- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open, +- **reset.css**: the file defines the basis of style resets among all editor UI spaces, +- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference, +- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks. + +Other parts: +- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature, +- **icons/**: contains all skin defined icons, +- **images/**: contains a fill general used images, +- **dev/**: contains SVG source of the skin icons. + +License +------- + +Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). + +See LICENSE.md for more information. diff --git a/sites/all/libraries/ckeditor/styles.js b/sites/all/libraries/ckeditor/styles.js new file mode 100644 index 0000000000..432f956806 --- /dev/null +++ b/sites/all/libraries/ckeditor/styles.js @@ -0,0 +1,111 @@ +/** + * Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.md or http://ckeditor.com/license + */ + +// This file contains style definitions that can be used by CKEditor plugins. +// +// The most common use for it is the "stylescombo" plugin, which shows a combo +// in the editor toolbar, containing all styles. Other plugins instead, like +// the div plugin, use a subset of the styles on their feature. +// +// If you don't have plugins that depend on this file, you can simply ignore it. +// Otherwise it is strongly recommended to customize this file to match your +// website requirements and design properly. + +CKEDITOR.stylesSet.add( 'default', [ + /* Block Styles */ + + // These styles are already available in the "Format" combo ("format" plugin), + // so they are not needed here by default. You may enable them to avoid + // placing the "Format" combo in the toolbar, maintaining the same features. + /* + { name: 'Paragraph', element: 'p' }, + { name: 'Heading 1', element: 'h1' }, + { name: 'Heading 2', element: 'h2' }, + { name: 'Heading 3', element: 'h3' }, + { name: 'Heading 4', element: 'h4' }, + { name: 'Heading 5', element: 'h5' }, + { name: 'Heading 6', element: 'h6' }, + { name: 'Preformatted Text',element: 'pre' }, + { name: 'Address', element: 'address' }, + */ + + { name: 'Italic Title', element: 'h2', styles: { 'font-style': 'italic' } }, + { name: 'Subtitle', element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } }, + { + name: 'Special Container', + element: 'div', + styles: { + padding: '5px 10px', + background: '#eee', + border: '1px solid #ccc' + } + }, + + /* Inline Styles */ + + // These are core styles available as toolbar buttons. You may opt enabling + // some of them in the Styles combo, removing them from the toolbar. + // (This requires the "stylescombo" plugin) + /* + { name: 'Strong', element: 'strong', overrides: 'b' }, + { name: 'Emphasis', element: 'em' , overrides: 'i' }, + { name: 'Underline', element: 'u' }, + { name: 'Strikethrough', element: 'strike' }, + { name: 'Subscript', element: 'sub' }, + { name: 'Superscript', element: 'sup' }, + */ + + { name: 'Marker', element: 'span', attributes: { 'class': 'marker' } }, + + { name: 'Big', element: 'big' }, + { name: 'Small', element: 'small' }, + { name: 'Typewriter', element: 'tt' }, + + { name: 'Computer Code', element: 'code' }, + { name: 'Keyboard Phrase', element: 'kbd' }, + { name: 'Sample Text', element: 'samp' }, + { name: 'Variable', element: 'var' }, + + { name: 'Deleted Text', element: 'del' }, + { name: 'Inserted Text', element: 'ins' }, + + { name: 'Cited Work', element: 'cite' }, + { name: 'Inline Quotation', element: 'q' }, + + { name: 'Language: RTL', element: 'span', attributes: { 'dir': 'rtl' } }, + { name: 'Language: LTR', element: 'span', attributes: { 'dir': 'ltr' } }, + + /* Object Styles */ + + { + name: 'Styled image (left)', + element: 'img', + attributes: { 'class': 'left' } + }, + + { + name: 'Styled image (right)', + element: 'img', + attributes: { 'class': 'right' } + }, + + { + name: 'Compact table', + element: 'table', + attributes: { + cellpadding: '5', + cellspacing: '0', + border: '1', + bordercolor: '#ccc' + }, + styles: { + 'border-collapse': 'collapse' + } + }, + + { name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } }, + { name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } } +] ); + diff --git a/sites/all/libraries/jplayer/jquery.jplayer.js b/sites/all/libraries/jplayer/jquery.jplayer.js new file mode 100755 index 0000000000..842f31b63d --- /dev/null +++ b/sites/all/libraries/jplayer/jquery.jplayer.js @@ -0,0 +1,3506 @@ +/* + * jPlayer Plugin for jQuery JavaScript Library + * http://www.jplayer.org + * + * Copyright (c) 2009 - 2014 Happyworm Ltd + * Licensed under the MIT license. + * http://opensource.org/licenses/MIT + * + * Author: Mark J Panaghiston + * Version: 2.9.2 + * Date: 14th December 2014 + */ + +/* Support for Zepto 1.0 compiled with optional data module. + * For AMD or NODE/CommonJS support, you will need to manually switch the related 2 lines in the code below. + * Search terms: "jQuery Switch" and "Zepto Switch" + */ + +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); // jQuery Switch + // define(['zepto'], factory); // Zepto Switch + } else if (typeof exports === 'object') { + // Node/CommonJS + factory(require('jquery')); // jQuery Switch + //factory(require('zepto')); // Zepto Switch + } else { + // Browser globals + if(root.jQuery) { // Use jQuery if available + factory(root.jQuery); + } else { // Otherwise, use Zepto + factory(root.Zepto); + } + } +}(this, function ($, undefined) { + + // Adapted from jquery.ui.widget.js (1.8.7): $.widget.bridge - Tweaked $.data(this,XYZ) to $(this).data(XYZ) for Zepto + $.fn.jPlayer = function( options ) { + var name = "jPlayer"; + var isMethodCall = typeof options === "string", + args = Array.prototype.slice.call( arguments, 1 ), + returnValue = this; + + // allow multiple hashes to be passed on init + options = !isMethodCall && args.length ? + $.extend.apply( null, [ true, options ].concat(args) ) : + options; + + // prevent calls to internal methods + if ( isMethodCall && options.charAt( 0 ) === "_" ) { + return returnValue; + } + + if ( isMethodCall ) { + this.each(function() { + var instance = $(this).data( name ), + methodValue = instance && $.isFunction( instance[options] ) ? + instance[ options ].apply( instance, args ) : + instance; + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue; + return false; + } + }); + } else { + this.each(function() { + var instance = $(this).data( name ); + if ( instance ) { + // instance.option( options || {} )._init(); // Orig jquery.ui.widget.js code: Not recommend for jPlayer. ie., Applying new options to an existing instance (via the jPlayer constructor) and performing the _init(). The _init() is what concerns me. It would leave a lot of event handlers acting on jPlayer instance and the interface. + instance.option( options || {} ); // The new constructor only changes the options. Changing options only has basic support atm. + } else { + $(this).data( name, new $.jPlayer( options, this ) ); + } + }); + } + + return returnValue; + }; + + $.jPlayer = function( options, element ) { + // allow instantiation without initializing for simple inheritance + if ( arguments.length ) { + this.element = $(element); + this.options = $.extend(true, {}, + this.options, + options + ); + var self = this; + this.element.bind( "remove.jPlayer", function() { + self.destroy(); + }); + this._init(); + } + }; + // End of: (Adapted from jquery.ui.widget.js (1.8.7)) + + // Zepto is missing one of the animation methods. + if(typeof $.fn.stop !== 'function') { + $.fn.stop = function() {}; + } + + // Emulated HTML5 methods and properties + $.jPlayer.emulateMethods = "load play pause"; + $.jPlayer.emulateStatus = "src readyState networkState currentTime duration paused ended playbackRate"; + $.jPlayer.emulateOptions = "muted volume"; + + // Reserved event names generated by jPlayer that are not part of the HTML5 Media element spec + $.jPlayer.reservedEvent = "ready flashreset resize repeat error warning"; + + // Events generated by jPlayer + $.jPlayer.event = {}; + $.each( + [ + 'ready', + 'setmedia', // Fires when the media is set + 'flashreset', // Similar to the ready event if the Flash solution is set to display:none and then shown again or if it's reloaded for another reason by the browser. For example, using CSS position:fixed on Firefox for the full screen feature. + 'resize', // Occurs when the size changes through a full/restore screen operation or if the size/sizeFull options are changed. + 'repeat', // Occurs when the repeat status changes. Usually through clicks on the repeat button of the interface. + 'click', // Occurs when the user clicks on one of the following: poster image, html video, flash video. + 'error', // Event error code in event.jPlayer.error.type. See $.jPlayer.error + 'warning', // Event warning code in event.jPlayer.warning.type. See $.jPlayer.warning + + // Other events match HTML5 spec. + 'loadstart', + 'progress', + 'suspend', + 'abort', + 'emptied', + 'stalled', + 'play', + 'pause', + 'loadedmetadata', + 'loadeddata', + 'waiting', + 'playing', + 'canplay', + 'canplaythrough', + 'seeking', + 'seeked', + 'timeupdate', + 'ended', + 'ratechange', + 'durationchange', + 'volumechange' + ], + function() { + $.jPlayer.event[ this ] = 'jPlayer_' + this; + } + ); + + $.jPlayer.htmlEvent = [ // These HTML events are bubbled through to the jPlayer event, without any internal action. + "loadstart", + // "progress", // jPlayer uses internally before bubbling. + // "suspend", // jPlayer uses internally before bubbling. + "abort", + // "error", // jPlayer uses internally before bubbling. + "emptied", + "stalled", + // "play", // jPlayer uses internally before bubbling. + // "pause", // jPlayer uses internally before bubbling. + "loadedmetadata", + // "loadeddata", // jPlayer uses internally before bubbling. + // "waiting", // jPlayer uses internally before bubbling. + // "playing", // jPlayer uses internally before bubbling. + "canplay", + "canplaythrough" + // "seeking", // jPlayer uses internally before bubbling. + // "seeked", // jPlayer uses internally before bubbling. + // "timeupdate", // jPlayer uses internally before bubbling. + // "ended", // jPlayer uses internally before bubbling. + // "ratechange" // jPlayer uses internally before bubbling. + // "durationchange" // jPlayer uses internally before bubbling. + // "volumechange" // jPlayer uses internally before bubbling. + ]; + + $.jPlayer.pause = function() { + $.jPlayer.prototype.destroyRemoved(); + $.each($.jPlayer.prototype.instances, function(i, element) { + if(element.data("jPlayer").status.srcSet) { // Check that media is set otherwise would cause error event. + element.jPlayer("pause"); + } + }); + }; + + // Default for jPlayer option.timeFormat + $.jPlayer.timeFormat = { + showHour: false, + showMin: true, + showSec: true, + padHour: false, + padMin: true, + padSec: true, + sepHour: ":", + sepMin: ":", + sepSec: "" + }; + var ConvertTime = function() { + this.init(); + }; + ConvertTime.prototype = { + init: function() { + this.options = { + timeFormat: $.jPlayer.timeFormat + }; + }, + time: function(s) { // function used on jPlayer.prototype._convertTime to enable per instance options. + s = (s && typeof s === 'number') ? s : 0; + + var myTime = new Date(s * 1000), + hour = myTime.getUTCHours(), + min = this.options.timeFormat.showHour ? myTime.getUTCMinutes() : myTime.getUTCMinutes() + hour * 60, + sec = this.options.timeFormat.showMin ? myTime.getUTCSeconds() : myTime.getUTCSeconds() + min * 60, + strHour = (this.options.timeFormat.padHour && hour < 10) ? "0" + hour : hour, + strMin = (this.options.timeFormat.padMin && min < 10) ? "0" + min : min, + strSec = (this.options.timeFormat.padSec && sec < 10) ? "0" + sec : sec, + strTime = ""; + + strTime += this.options.timeFormat.showHour ? strHour + this.options.timeFormat.sepHour : ""; + strTime += this.options.timeFormat.showMin ? strMin + this.options.timeFormat.sepMin : ""; + strTime += this.options.timeFormat.showSec ? strSec + this.options.timeFormat.sepSec : ""; + + return strTime; + } + }; + var myConvertTime = new ConvertTime(); + $.jPlayer.convertTime = function(s) { + return myConvertTime.time(s); + }; + + // Adapting jQuery 1.4.4 code for jQuery.browser. Required since jQuery 1.3.2 does not detect Chrome as webkit. + $.jPlayer.uaBrowser = function( userAgent ) { + var ua = userAgent.toLowerCase(); + + // Useragent RegExp + var rwebkit = /(webkit)[ \/]([\w.]+)/; + var ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/; + var rmsie = /(msie) ([\w.]+)/; + var rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/; + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }; + + // Platform sniffer for detecting mobile devices + $.jPlayer.uaPlatform = function( userAgent ) { + var ua = userAgent.toLowerCase(); + + // Useragent RegExp + var rplatform = /(ipad|iphone|ipod|android|blackberry|playbook|windows ce|webos)/; + var rtablet = /(ipad|playbook)/; + var randroid = /(android)/; + var rmobile = /(mobile)/; + + var platform = rplatform.exec( ua ) || []; + var tablet = rtablet.exec( ua ) || + !rmobile.exec( ua ) && randroid.exec( ua ) || + []; + + if(platform[1]) { + platform[1] = platform[1].replace(/\s/g, "_"); // Change whitespace to underscore. Enables dot notation. + } + + return { platform: platform[1] || "", tablet: tablet[1] || "" }; + }; + + $.jPlayer.browser = { + }; + $.jPlayer.platform = { + }; + + var browserMatch = $.jPlayer.uaBrowser(navigator.userAgent); + if ( browserMatch.browser ) { + $.jPlayer.browser[ browserMatch.browser ] = true; + $.jPlayer.browser.version = browserMatch.version; + } + var platformMatch = $.jPlayer.uaPlatform(navigator.userAgent); + if ( platformMatch.platform ) { + $.jPlayer.platform[ platformMatch.platform ] = true; + $.jPlayer.platform.mobile = !platformMatch.tablet; + $.jPlayer.platform.tablet = !!platformMatch.tablet; + } + + // Internet Explorer (IE) Browser Document Mode Sniffer. Based on code at: + // http://msdn.microsoft.com/en-us/library/cc288325%28v=vs.85%29.aspx#GetMode + $.jPlayer.getDocMode = function() { + var docMode; + if ($.jPlayer.browser.msie) { + if (document.documentMode) { // IE8 or later + docMode = document.documentMode; + } else { // IE 5-7 + docMode = 5; // Assume quirks mode unless proven otherwise + if (document.compatMode) { + if (document.compatMode === "CSS1Compat") { + docMode = 7; // standards mode + } + } + } + } + return docMode; + }; + $.jPlayer.browser.documentMode = $.jPlayer.getDocMode(); + + $.jPlayer.nativeFeatures = { + init: function() { + + /* Fullscreen function naming influenced by W3C naming. + * No support for: Mozilla Proposal: https://wiki.mozilla.org/Gecko:FullScreenAPI + */ + + var d = document, + v = d.createElement('video'), + spec = { + // http://www.w3.org/TR/fullscreen/ + w3c: [ + 'fullscreenEnabled', + 'fullscreenElement', + 'requestFullscreen', + 'exitFullscreen', + 'fullscreenchange', + 'fullscreenerror' + ], + // https://developer.mozilla.org/en-US/docs/DOM/Using_fullscreen_mode + moz: [ + 'mozFullScreenEnabled', + 'mozFullScreenElement', + 'mozRequestFullScreen', + 'mozCancelFullScreen', + 'mozfullscreenchange', + 'mozfullscreenerror' + ], + // http://developer.apple.com/library/safari/#documentation/WebKit/Reference/ElementClassRef/Element/Element.html + // http://developer.apple.com/library/safari/#documentation/UserExperience/Reference/DocumentAdditionsReference/DocumentAdditions/DocumentAdditions.html + webkit: [ + '', + 'webkitCurrentFullScreenElement', + 'webkitRequestFullScreen', + 'webkitCancelFullScreen', + 'webkitfullscreenchange', + '' + ], + // http://developer.apple.com/library/safari/#documentation/AudioVideo/Reference/HTMLVideoElementClassReference/HTMLVideoElement/HTMLVideoElement.html + // https://developer.apple.com/library/safari/samplecode/HTML5VideoEventFlow/Listings/events_js.html#//apple_ref/doc/uid/DTS40010085-events_js-DontLinkElementID_5 + // Events: 'webkitbeginfullscreen' and 'webkitendfullscreen' + webkitVideo: [ + 'webkitSupportsFullscreen', + 'webkitDisplayingFullscreen', + 'webkitEnterFullscreen', + 'webkitExitFullscreen', + '', + '' + ], + ms: [ + '', + 'msFullscreenElement', + 'msRequestFullscreen', + 'msExitFullscreen', + 'MSFullscreenChange', + 'MSFullscreenError' + ] + }, + specOrder = [ + 'w3c', + 'moz', + 'webkit', + 'webkitVideo', + 'ms' + ], + fs, i, il; + + this.fullscreen = fs = { + support: { + w3c: !!d[spec.w3c[0]], + moz: !!d[spec.moz[0]], + webkit: typeof d[spec.webkit[3]] === 'function', + webkitVideo: typeof v[spec.webkitVideo[2]] === 'function', + ms: typeof v[spec.ms[2]] === 'function' + }, + used: {} + }; + + // Store the name of the spec being used and as a handy boolean. + for(i = 0, il = specOrder.length; i < il; i++) { + var n = specOrder[i]; + if(fs.support[n]) { + fs.spec = n; + fs.used[n] = true; + break; + } + } + + if(fs.spec) { + var s = spec[fs.spec]; + fs.api = { + fullscreenEnabled: true, + fullscreenElement: function(elem) { + elem = elem ? elem : d; // Video element required for webkitVideo + return elem[s[1]]; + }, + requestFullscreen: function(elem) { + return elem[s[2]](); // Chrome and Opera want parameter (Element.ALLOW_KEYBOARD_INPUT) but Safari fails if flag used. + }, + exitFullscreen: function(elem) { + elem = elem ? elem : d; // Video element required for webkitVideo + return elem[s[3]](); + } + }; + fs.event = { + fullscreenchange: s[4], + fullscreenerror: s[5] + }; + } else { + fs.api = { + fullscreenEnabled: false, + fullscreenElement: function() { + return null; + }, + requestFullscreen: function() {}, + exitFullscreen: function() {} + }; + fs.event = {}; + } + } + }; + $.jPlayer.nativeFeatures.init(); + + // The keyboard control system. + + // The current jPlayer instance in focus. + $.jPlayer.focus = null; + + // The list of element node names to ignore with key controls. + $.jPlayer.keyIgnoreElementNames = "A INPUT TEXTAREA SELECT BUTTON"; + + // The function that deals with key presses. + var keyBindings = function(event) { + var f = $.jPlayer.focus, + ignoreKey; + + // A jPlayer instance must be in focus. ie., keyEnabled and the last one played. + if(f) { + // What generated the key press? + $.each( $.jPlayer.keyIgnoreElementNames.split(/\s+/g), function(i, name) { + // The strings should already be uppercase. + if(event.target.nodeName.toUpperCase() === name.toUpperCase()) { + ignoreKey = true; + return false; // exit each. + } + }); + if(!ignoreKey) { + // See if the key pressed matches any of the bindings. + $.each(f.options.keyBindings, function(action, binding) { + // The binding could be a null when the default has been disabled. ie., 1st clause in if() + if( + (binding && $.isFunction(binding.fn)) && + ((typeof binding.key === 'number' && event.which === binding.key) || + (typeof binding.key === 'string' && event.key === binding.key)) + ) { + event.preventDefault(); // Key being used by jPlayer, so prevent default operation. + binding.fn(f); + return false; // exit each. + } + }); + } + } + }; + + $.jPlayer.keys = function(en) { + var event = "keydown.jPlayer"; + // Remove any binding, just in case enabled more than once. + $(document.documentElement).unbind(event); + if(en) { + $(document.documentElement).bind(event, keyBindings); + } + }; + + // Enable the global key control handler ready for any jPlayer instance with the keyEnabled option enabled. + $.jPlayer.keys(true); + + $.jPlayer.prototype = { + count: 0, // Static Variable: Change it via prototype. + version: { // Static Object + script: "2.9.2", + needFlash: "2.9.0", + flash: "unknown" + }, + options: { // Instanced in $.jPlayer() constructor + swfPath: "js", // Path to jquery.jplayer.swf. Can be relative, absolute or server root relative. + solution: "html, flash", // Valid solutions: html, flash, aurora. Order defines priority. 1st is highest, + supplied: "mp3", // Defines which formats jPlayer will try and support and the priority by the order. 1st is highest, + auroraFormats: "wav", // List the aurora.js codecs being loaded externally. Its core supports "wav". Specify format in jPlayer context. EG., The aac.js codec gives the "m4a" format. + preload: 'metadata', // HTML5 Spec values: none, metadata, auto. + volume: 0.8, // The volume. Number 0 to 1. + muted: false, + remainingDuration: false, // When true, the remaining time is shown in the duration GUI element. + toggleDuration: false, // When true, clicks on the duration toggle between the duration and remaining display. + captureDuration: true, // When true, clicks on the duration are captured and no longer propagate up the DOM. + playbackRate: 1, + defaultPlaybackRate: 1, + minPlaybackRate: 0.5, + maxPlaybackRate: 4, + wmode: "opaque", // Valid wmode: window, transparent, opaque, direct, gpu. + backgroundColor: "#000000", // To define the jPlayer div and Flash background color. + cssSelectorAncestor: "#jp_container_1", + cssSelector: { // * denotes properties that should only be required when video media type required. _cssSelector() would require changes to enable splitting these into Audio and Video defaults. + videoPlay: ".jp-video-play", // * + play: ".jp-play", + pause: ".jp-pause", + stop: ".jp-stop", + seekBar: ".jp-seek-bar", + playBar: ".jp-play-bar", + mute: ".jp-mute", + unmute: ".jp-unmute", + volumeBar: ".jp-volume-bar", + volumeBarValue: ".jp-volume-bar-value", + volumeMax: ".jp-volume-max", + playbackRateBar: ".jp-playback-rate-bar", + playbackRateBarValue: ".jp-playback-rate-bar-value", + currentTime: ".jp-current-time", + duration: ".jp-duration", + title: ".jp-title", + fullScreen: ".jp-full-screen", // * + restoreScreen: ".jp-restore-screen", // * + repeat: ".jp-repeat", + repeatOff: ".jp-repeat-off", + gui: ".jp-gui", // The interface used with autohide feature. + noSolution: ".jp-no-solution" // For error feedback when jPlayer cannot find a solution. + }, + stateClass: { // Classes added to the cssSelectorAncestor to indicate the state. + playing: "jp-state-playing", + seeking: "jp-state-seeking", + muted: "jp-state-muted", + looped: "jp-state-looped", + fullScreen: "jp-state-full-screen", + noVolume: "jp-state-no-volume" + }, + useStateClassSkin: false, // A state class skin relies on the state classes to change the visual appearance. The single control toggles the effect, for example: play then pause, mute then unmute. + autoBlur: true, // GUI control handlers will drop focus after clicks. + smoothPlayBar: false, // Smooths the play bar transitions, which affects clicks and short media with big changes per second. + fullScreen: false, // Native Full Screen + fullWindow: false, + autohide: { + restored: false, // Controls the interface autohide feature. + full: true, // Controls the interface autohide feature. + fadeIn: 200, // Milliseconds. The period of the fadeIn anim. + fadeOut: 600, // Milliseconds. The period of the fadeOut anim. + hold: 1000 // Milliseconds. The period of the pause before autohide beings. + }, + loop: false, + repeat: function(event) { // The default jPlayer repeat event handler + if(event.jPlayer.options.loop) { + $(this).unbind(".jPlayerRepeat").bind($.jPlayer.event.ended + ".jPlayer.jPlayerRepeat", function() { + $(this).jPlayer("play"); + }); + } else { + $(this).unbind(".jPlayerRepeat"); + } + }, + nativeVideoControls: { + // Works well on standard browsers. + // Phone and tablet browsers can have problems with the controls disappearing. + }, + noFullWindow: { + msie: /msie [0-6]\./, + ipad: /ipad.*?os [0-4]\./, + iphone: /iphone/, + ipod: /ipod/, + android_pad: /android [0-3]\.(?!.*?mobile)/, + android_phone: /(?=.*android)(?!.*chrome)(?=.*mobile)/, + blackberry: /blackberry/, + windows_ce: /windows ce/, + iemobile: /iemobile/, + webos: /webos/ + }, + noVolume: { + ipad: /ipad/, + iphone: /iphone/, + ipod: /ipod/, + android_pad: /android(?!.*?mobile)/, + android_phone: /android.*?mobile/, + blackberry: /blackberry/, + windows_ce: /windows ce/, + iemobile: /iemobile/, + webos: /webos/, + playbook: /playbook/ + }, + timeFormat: { + // Specific time format for this instance. The supported options are defined in $.jPlayer.timeFormat + // For the undefined options we use the default from $.jPlayer.timeFormat + }, + keyEnabled: false, // Enables keyboard controls. + audioFullScreen: false, // Enables keyboard controls to enter full screen with audio media. + keyBindings: { // The key control object, defining the key codes and the functions to execute. + // The parameter, f = $.jPlayer.focus, will be checked truethy before attempting to call any of these functions. + // Properties may be added to this object, in key/fn pairs, to enable other key controls. EG, for the playlist add-on. + play: { + key: 80, // p + fn: function(f) { + if(f.status.paused) { + f.play(); + } else { + f.pause(); + } + } + }, + fullScreen: { + key: 70, // f + fn: function(f) { + if(f.status.video || f.options.audioFullScreen) { + f._setOption("fullScreen", !f.options.fullScreen); + } + } + }, + muted: { + key: 77, // m + fn: function(f) { + f._muted(!f.options.muted); + } + }, + volumeUp: { + key: 190, // . + fn: function(f) { + f.volume(f.options.volume + 0.1); + } + }, + volumeDown: { + key: 188, // , + fn: function(f) { + f.volume(f.options.volume - 0.1); + } + }, + loop: { + key: 76, // l + fn: function(f) { + f._loop(!f.options.loop); + } + } + }, + verticalVolume: false, // Calculate volume from the bottom of the volume bar. Default is from the left. Also volume affects either width or height. + verticalPlaybackRate: false, + globalVolume: false, // Set to make volume and muted changes affect all jPlayer instances with this option enabled + idPrefix: "jp", // Prefix for the ids of html elements created by jPlayer. For flash, this must not include characters: . - + * / \ + noConflict: "jQuery", + emulateHtml: false, // Emulates the HTML5 Media element on the jPlayer element. + consoleAlerts: true, // Alerts are sent to the console.log() instead of alert(). + errorAlerts: false, + warningAlerts: false + }, + optionsAudio: { + size: { + width: "0px", + height: "0px", + cssClass: "" + }, + sizeFull: { + width: "0px", + height: "0px", + cssClass: "" + } + }, + optionsVideo: { + size: { + width: "480px", + height: "270px", + cssClass: "jp-video-270p" + }, + sizeFull: { + width: "100%", + height: "100%", + cssClass: "jp-video-full" + } + }, + instances: {}, // Static Object + status: { // Instanced in _init() + src: "", + media: {}, + paused: true, + format: {}, + formatType: "", + waitForPlay: true, // Same as waitForLoad except in case where preloading. + waitForLoad: true, + srcSet: false, + video: false, // True if playing a video + seekPercent: 0, + currentPercentRelative: 0, + currentPercentAbsolute: 0, + currentTime: 0, + duration: 0, + remaining: 0, + videoWidth: 0, // Intrinsic width of the video in pixels. + videoHeight: 0, // Intrinsic height of the video in pixels. + readyState: 0, + networkState: 0, + playbackRate: 1, // Warning - Now both an option and a status property + ended: 0 + +/* Persistant status properties created dynamically at _init(): + width + height + cssClass + nativeVideoControls + noFullWindow + noVolume + playbackRateEnabled // Warning - Technically, we can have both Flash and HTML, so this might not be correct if the Flash is active. That is a niche case. +*/ + }, + + internal: { // Instanced in _init() + ready: false + // instance: undefined + // domNode: undefined + // htmlDlyCmdId: undefined + // autohideId: undefined + // mouse: undefined + // cmdsIgnored + }, + solution: { // Static Object: Defines the solutions built in jPlayer. + html: true, + aurora: true, + flash: true + }, + // 'MPEG-4 support' : canPlayType('video/mp4; codecs="mp4v.20.8"') + format: { // Static Object + mp3: { + codec: 'audio/mpeg', + flashCanPlay: true, + media: 'audio' + }, + m4a: { // AAC / MP4 + codec: 'audio/mp4; codecs="mp4a.40.2"', + flashCanPlay: true, + media: 'audio' + }, + m3u8a: { // AAC / MP4 / Apple HLS + codec: 'application/vnd.apple.mpegurl; codecs="mp4a.40.2"', + flashCanPlay: false, + media: 'audio' + }, + m3ua: { // M3U + codec: 'audio/mpegurl', + flashCanPlay: false, + media: 'audio' + }, + oga: { // OGG + codec: 'audio/ogg; codecs="vorbis, opus"', + flashCanPlay: false, + media: 'audio' + }, + flac: { // FLAC + codec: 'audio/x-flac', + flashCanPlay: false, + media: 'audio' + }, + wav: { // PCM + codec: 'audio/wav; codecs="1"', + flashCanPlay: false, + media: 'audio' + }, + webma: { // WEBM + codec: 'audio/webm; codecs="vorbis"', + flashCanPlay: false, + media: 'audio' + }, + fla: { // FLV / F4A + codec: 'audio/x-flv', + flashCanPlay: true, + media: 'audio' + }, + rtmpa: { // RTMP AUDIO + codec: 'audio/rtmp; codecs="rtmp"', + flashCanPlay: true, + media: 'audio' + }, + m4v: { // H.264 / MP4 + codec: 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"', + flashCanPlay: true, + media: 'video' + }, + m3u8v: { // H.264 / AAC / MP4 / Apple HLS + codec: 'application/vnd.apple.mpegurl; codecs="avc1.42E01E, mp4a.40.2"', + flashCanPlay: false, + media: 'video' + }, + m3uv: { // M3U + codec: 'audio/mpegurl', + flashCanPlay: false, + media: 'video' + }, + ogv: { // OGG + codec: 'video/ogg; codecs="theora, vorbis"', + flashCanPlay: false, + media: 'video' + }, + webmv: { // WEBM + codec: 'video/webm; codecs="vorbis, vp8"', + flashCanPlay: false, + media: 'video' + }, + flv: { // FLV / F4V + codec: 'video/x-flv', + flashCanPlay: true, + media: 'video' + }, + rtmpv: { // RTMP VIDEO + codec: 'video/rtmp; codecs="rtmp"', + flashCanPlay: true, + media: 'video' + } + }, + _init: function() { + var self = this; + + this.element.empty(); + + this.status = $.extend({}, this.status); // Copy static to unique instance. + this.internal = $.extend({}, this.internal); // Copy static to unique instance. + + // Initialize the time format + this.options.timeFormat = $.extend({}, $.jPlayer.timeFormat, this.options.timeFormat); + + // On iOS, assume commands will be ignored before user initiates them. + this.internal.cmdsIgnored = $.jPlayer.platform.ipad || $.jPlayer.platform.iphone || $.jPlayer.platform.ipod; + + this.internal.domNode = this.element.get(0); + + // Add key bindings focus to 1st jPlayer instanced with key control enabled. + if(this.options.keyEnabled && !$.jPlayer.focus) { + $.jPlayer.focus = this; + } + + // A fix for Android where older (2.3) and even some 4.x devices fail to work when changing the *audio* SRC and then playing immediately. + this.androidFix = { + setMedia: false, // True when media set + play: false, // True when a progress event will instruct the media to play + pause: false, // True when a progress event will instruct the media to pause at a time. + time: NaN // The play(time) parameter + }; + if($.jPlayer.platform.android) { + this.options.preload = this.options.preload !== 'auto' ? 'metadata' : 'auto'; // Default to metadata, but allow auto. + } + + this.formats = []; // Array based on supplied string option. Order defines priority. + this.solutions = []; // Array based on solution string option. Order defines priority. + this.require = {}; // Which media types are required: video, audio. + + this.htmlElement = {}; // DOM elements created by jPlayer + this.html = {}; // In _init()'s this.desired code and setmedia(): Accessed via this[solution], where solution from this.solutions array. + this.html.audio = {}; + this.html.video = {}; + this.aurora = {}; // In _init()'s this.desired code and setmedia(): Accessed via this[solution], where solution from this.solutions array. + this.aurora.formats = []; + this.aurora.properties = []; + this.flash = {}; // In _init()'s this.desired code and setmedia(): Accessed via this[solution], where solution from this.solutions array. + + this.css = {}; + this.css.cs = {}; // Holds the css selector strings + this.css.jq = {}; // Holds jQuery selectors. ie., $(css.cs.method) + + this.ancestorJq = []; // Holds jQuery selector of cssSelectorAncestor. Init would use $() instead of [], but it is only 1.4+ + + this.options.volume = this._limitValue(this.options.volume, 0, 1); // Limit volume value's bounds. + + // Create the formats array, with prority based on the order of the supplied formats string + $.each(this.options.supplied.toLowerCase().split(","), function(index1, value1) { + var format = value1.replace(/^\s+|\s+$/g, ""); //trim + if(self.format[format]) { // Check format is valid. + var dupFound = false; + $.each(self.formats, function(index2, value2) { // Check for duplicates + if(format === value2) { + dupFound = true; + return false; + } + }); + if(!dupFound) { + self.formats.push(format); + } + } + }); + + // Create the solutions array, with prority based on the order of the solution string + $.each(this.options.solution.toLowerCase().split(","), function(index1, value1) { + var solution = value1.replace(/^\s+|\s+$/g, ""); //trim + if(self.solution[solution]) { // Check solution is valid. + var dupFound = false; + $.each(self.solutions, function(index2, value2) { // Check for duplicates + if(solution === value2) { + dupFound = true; + return false; + } + }); + if(!dupFound) { + self.solutions.push(solution); + } + } + }); + + // Create Aurora.js formats array + $.each(this.options.auroraFormats.toLowerCase().split(","), function(index1, value1) { + var format = value1.replace(/^\s+|\s+$/g, ""); //trim + if(self.format[format]) { // Check format is valid. + var dupFound = false; + $.each(self.aurora.formats, function(index2, value2) { // Check for duplicates + if(format === value2) { + dupFound = true; + return false; + } + }); + if(!dupFound) { + self.aurora.formats.push(format); + } + } + }); + + this.internal.instance = "jp_" + this.count; + this.instances[this.internal.instance] = this.element; + + // Check the jPlayer div has an id and create one if required. Important for Flash to know the unique id for comms. + if(!this.element.attr("id")) { + this.element.attr("id", this.options.idPrefix + "_jplayer_" + this.count); + } + + this.internal.self = $.extend({}, { + id: this.element.attr("id"), + jq: this.element + }); + this.internal.audio = $.extend({}, { + id: this.options.idPrefix + "_audio_" + this.count, + jq: undefined + }); + this.internal.video = $.extend({}, { + id: this.options.idPrefix + "_video_" + this.count, + jq: undefined + }); + this.internal.flash = $.extend({}, { + id: this.options.idPrefix + "_flash_" + this.count, + jq: undefined, + swf: this.options.swfPath + (this.options.swfPath.toLowerCase().slice(-4) !== ".swf" ? (this.options.swfPath && this.options.swfPath.slice(-1) !== "/" ? "/" : "") + "jquery.jplayer.swf" : "") + }); + this.internal.poster = $.extend({}, { + id: this.options.idPrefix + "_poster_" + this.count, + jq: undefined + }); + + // Register listeners defined in the constructor + $.each($.jPlayer.event, function(eventName,eventType) { + if(self.options[eventName] !== undefined) { + self.element.bind(eventType + ".jPlayer", self.options[eventName]); // With .jPlayer namespace. + self.options[eventName] = undefined; // Destroy the handler pointer copy on the options. Reason, events can be added/removed in other ways so this could be obsolete and misleading. + } + }); + + // Determine if we require solutions for audio, video or both media types. + this.require.audio = false; + this.require.video = false; + $.each(this.formats, function(priority, format) { + self.require[self.format[format].media] = true; + }); + + // Now required types are known, finish the options default settings. + if(this.require.video) { + this.options = $.extend(true, {}, + this.optionsVideo, + this.options + ); + } else { + this.options = $.extend(true, {}, + this.optionsAudio, + this.options + ); + } + this._setSize(); // update status and jPlayer element size + + // Determine the status for Blocklisted options. + this.status.nativeVideoControls = this._uaBlocklist(this.options.nativeVideoControls); + this.status.noFullWindow = this._uaBlocklist(this.options.noFullWindow); + this.status.noVolume = this._uaBlocklist(this.options.noVolume); + + // Create event handlers if native fullscreen is supported + if($.jPlayer.nativeFeatures.fullscreen.api.fullscreenEnabled) { + this._fullscreenAddEventListeners(); + } + + // The native controls are only for video and are disabled when audio is also used. + this._restrictNativeVideoControls(); + + // Create the poster image. + this.htmlElement.poster = document.createElement('img'); + this.htmlElement.poster.id = this.internal.poster.id; + this.htmlElement.poster.onload = function() { // Note that this did not work on Firefox 3.6: poster.addEventListener("onload", function() {}, false); Did not investigate x-browser. + if(!self.status.video || self.status.waitForPlay) { + self.internal.poster.jq.show(); + } + }; + this.element.append(this.htmlElement.poster); + this.internal.poster.jq = $("#" + this.internal.poster.id); + this.internal.poster.jq.css({'width': this.status.width, 'height': this.status.height}); + this.internal.poster.jq.hide(); + this.internal.poster.jq.bind("click.jPlayer", function() { + self._trigger($.jPlayer.event.click); + }); + + // Generate the required media elements + this.html.audio.available = false; + if(this.require.audio) { // If a supplied format is audio + this.htmlElement.audio = document.createElement('audio'); + this.htmlElement.audio.id = this.internal.audio.id; + this.html.audio.available = !!this.htmlElement.audio.canPlayType && this._testCanPlayType(this.htmlElement.audio); // Test is for IE9 on Win Server 2008. + } + this.html.video.available = false; + if(this.require.video) { // If a supplied format is video + this.htmlElement.video = document.createElement('video'); + this.htmlElement.video.id = this.internal.video.id; + this.html.video.available = !!this.htmlElement.video.canPlayType && this._testCanPlayType(this.htmlElement.video); // Test is for IE9 on Win Server 2008. + } + + this.flash.available = this._checkForFlash(10.1); + + this.html.canPlay = {}; + this.aurora.canPlay = {}; + this.flash.canPlay = {}; + $.each(this.formats, function(priority, format) { + self.html.canPlay[format] = self.html[self.format[format].media].available && "" !== self.htmlElement[self.format[format].media].canPlayType(self.format[format].codec); + self.aurora.canPlay[format] = ($.inArray(format, self.aurora.formats) > -1); + self.flash.canPlay[format] = self.format[format].flashCanPlay && self.flash.available; + }); + this.html.desired = false; + this.aurora.desired = false; + this.flash.desired = false; + $.each(this.solutions, function(solutionPriority, solution) { + if(solutionPriority === 0) { + self[solution].desired = true; + } else { + var audioCanPlay = false; + var videoCanPlay = false; + $.each(self.formats, function(formatPriority, format) { + if(self[self.solutions[0]].canPlay[format]) { // The other solution can play + if(self.format[format].media === 'video') { + videoCanPlay = true; + } else { + audioCanPlay = true; + } + } + }); + self[solution].desired = (self.require.audio && !audioCanPlay) || (self.require.video && !videoCanPlay); + } + }); + // This is what jPlayer will support, based on solution and supplied. + this.html.support = {}; + this.aurora.support = {}; + this.flash.support = {}; + $.each(this.formats, function(priority, format) { + self.html.support[format] = self.html.canPlay[format] && self.html.desired; + self.aurora.support[format] = self.aurora.canPlay[format] && self.aurora.desired; + self.flash.support[format] = self.flash.canPlay[format] && self.flash.desired; + }); + // If jPlayer is supporting any format in a solution, then the solution is used. + this.html.used = false; + this.aurora.used = false; + this.flash.used = false; + $.each(this.solutions, function(solutionPriority, solution) { + $.each(self.formats, function(formatPriority, format) { + if(self[solution].support[format]) { + self[solution].used = true; + return false; + } + }); + }); + + // Init solution active state and the event gates to false. + this._resetActive(); + this._resetGate(); + + // Set up the css selectors for the control and feedback entities. + this._cssSelectorAncestor(this.options.cssSelectorAncestor); + + // If neither html nor aurora nor flash are being used by this browser, then media playback is not possible. Trigger an error event. + if(!(this.html.used || this.aurora.used || this.flash.used)) { + this._error( { + type: $.jPlayer.error.NO_SOLUTION, + context: "{solution:'" + this.options.solution + "', supplied:'" + this.options.supplied + "'}", + message: $.jPlayer.errorMsg.NO_SOLUTION, + hint: $.jPlayer.errorHint.NO_SOLUTION + }); + if(this.css.jq.noSolution.length) { + this.css.jq.noSolution.show(); + } + } else { + if(this.css.jq.noSolution.length) { + this.css.jq.noSolution.hide(); + } + } + + // Add the flash solution if it is being used. + if(this.flash.used) { + var htmlObj, + flashVars = 'jQuery=' + encodeURI(this.options.noConflict) + '&id=' + encodeURI(this.internal.self.id) + '&vol=' + this.options.volume + '&muted=' + this.options.muted; + + // Code influenced by SWFObject 2.2: http://code.google.com/p/swfobject/ + // Non IE browsers have an initial Flash size of 1 by 1 otherwise the wmode affected the Flash ready event. + + if($.jPlayer.browser.msie && (Number($.jPlayer.browser.version) < 9 || $.jPlayer.browser.documentMode < 9)) { + var objStr = ''; + + var paramStr = [ + '', + '', + '', + '', + '' + ]; + + htmlObj = document.createElement(objStr); + for(var i=0; i < paramStr.length; i++) { + htmlObj.appendChild(document.createElement(paramStr[i])); + } + } else { + var createParam = function(el, n, v) { + var p = document.createElement("param"); + p.setAttribute("name", n); + p.setAttribute("value", v); + el.appendChild(p); + }; + + htmlObj = document.createElement("object"); + htmlObj.setAttribute("id", this.internal.flash.id); + htmlObj.setAttribute("name", this.internal.flash.id); + htmlObj.setAttribute("data", this.internal.flash.swf); + htmlObj.setAttribute("type", "application/x-shockwave-flash"); + htmlObj.setAttribute("width", "1"); // Non-zero + htmlObj.setAttribute("height", "1"); // Non-zero + htmlObj.setAttribute("tabindex", "-1"); + createParam(htmlObj, "flashvars", flashVars); + createParam(htmlObj, "allowscriptaccess", "always"); + createParam(htmlObj, "bgcolor", this.options.backgroundColor); + createParam(htmlObj, "wmode", this.options.wmode); + } + + this.element.append(htmlObj); + this.internal.flash.jq = $(htmlObj); + } + + // Setup playbackRate ability before using _addHtmlEventListeners() + if(this.html.used && !this.flash.used) { // If only HTML + // Using the audio element capabilities for playbackRate. ie., Assuming video element is the same. + this.status.playbackRateEnabled = this._testPlaybackRate('audio'); + } else { + this.status.playbackRateEnabled = false; + } + + this._updatePlaybackRate(); + + // Add the HTML solution if being used. + if(this.html.used) { + + // The HTML Audio handlers + if(this.html.audio.available) { + this._addHtmlEventListeners(this.htmlElement.audio, this.html.audio); + this.element.append(this.htmlElement.audio); + this.internal.audio.jq = $("#" + this.internal.audio.id); + } + + // The HTML Video handlers + if(this.html.video.available) { + this._addHtmlEventListeners(this.htmlElement.video, this.html.video); + this.element.append(this.htmlElement.video); + this.internal.video.jq = $("#" + this.internal.video.id); + if(this.status.nativeVideoControls) { + this.internal.video.jq.css({'width': this.status.width, 'height': this.status.height}); + } else { + this.internal.video.jq.css({'width':'0px', 'height':'0px'}); // Using size 0x0 since a .hide() causes issues in iOS + } + this.internal.video.jq.bind("click.jPlayer", function() { + self._trigger($.jPlayer.event.click); + }); + } + } + + // Add the Aurora.js solution if being used. + if(this.aurora.used) { + // Aurora.js player need to be created for each media, see setMedia function. + } + + // Create the bridge that emulates the HTML Media element on the jPlayer DIV + if( this.options.emulateHtml ) { + this._emulateHtmlBridge(); + } + + if((this.html.used || this.aurora.used) && !this.flash.used) { // If only HTML, then emulate flash ready() call after 100ms. + setTimeout( function() { + self.internal.ready = true; + self.version.flash = "n/a"; + self._trigger($.jPlayer.event.repeat); // Trigger the repeat event so its handler can initialize itself with the loop option. + self._trigger($.jPlayer.event.ready); + }, 100); + } + + // Initialize the interface components with the options. + this._updateNativeVideoControls(); + // The other controls are now setup in _cssSelectorAncestor() + if(this.css.jq.videoPlay.length) { + this.css.jq.videoPlay.hide(); + } + + $.jPlayer.prototype.count++; // Change static variable via prototype. + }, + destroy: function() { + // MJP: The background change remains. Would need to store the original to restore it correctly. + // MJP: The jPlayer element's size change remains. + + // Clear the media to reset the GUI and stop any downloads. Streams on some browsers had persited. (Chrome) + this.clearMedia(); + // Remove the size/sizeFull cssClass from the cssSelectorAncestor + this._removeUiClass(); + // Remove the times from the GUI + if(this.css.jq.currentTime.length) { + this.css.jq.currentTime.text(""); + } + if(this.css.jq.duration.length) { + this.css.jq.duration.text(""); + } + // Remove any bindings from the interface controls. + $.each(this.css.jq, function(fn, jq) { + // Check selector is valid before trying to execute method. + if(jq.length) { + jq.unbind(".jPlayer"); + } + }); + // Remove the click handlers for $.jPlayer.event.click + this.internal.poster.jq.unbind(".jPlayer"); + if(this.internal.video.jq) { + this.internal.video.jq.unbind(".jPlayer"); + } + // Remove the fullscreen event handlers + this._fullscreenRemoveEventListeners(); + // Remove key bindings + if(this === $.jPlayer.focus) { + $.jPlayer.focus = null; + } + // Destroy the HTML bridge. + if(this.options.emulateHtml) { + this._destroyHtmlBridge(); + } + this.element.removeData("jPlayer"); // Remove jPlayer data + this.element.unbind(".jPlayer"); // Remove all event handlers created by the jPlayer constructor + this.element.empty(); // Remove the inserted child elements + + delete this.instances[this.internal.instance]; // Clear the instance on the static instance object + }, + destroyRemoved: function() { // Destroy any instances that have gone away. + var self = this; + $.each(this.instances, function(i, element) { + if(self.element !== element) { // Do not destroy this instance. + if(!element.data("jPlayer")) { // Check that element is a real jPlayer. + element.jPlayer("destroy"); + delete self.instances[i]; + } + } + }); + }, + enable: function() { // Plan to implement + // options.disabled = false + }, + disable: function () { // Plan to implement + // options.disabled = true + }, + _testCanPlayType: function(elem) { + // IE9 on Win Server 2008 did not implement canPlayType(), but it has the property. + try { + elem.canPlayType(this.format.mp3.codec); // The type is irrelevant. + return true; + } catch(err) { + return false; + } + }, + _testPlaybackRate: function(type) { + // type: String 'audio' or 'video' + var el, rate = 0.5; + type = typeof type === 'string' ? type : 'audio'; + el = document.createElement(type); + // Wrapping in a try/catch, just in case older HTML5 browsers throw and error. + try { + if('playbackRate' in el) { + el.playbackRate = rate; + return el.playbackRate === rate; + } else { + return false; + } + } catch(err) { + return false; + } + }, + _uaBlocklist: function(list) { + // list : object with properties that are all regular expressions. Property names are irrelevant. + // Returns true if the user agent is matched in list. + var ua = navigator.userAgent.toLowerCase(), + block = false; + + $.each(list, function(p, re) { + if(re && re.test(ua)) { + block = true; + return false; // exit $.each. + } + }); + return block; + }, + _restrictNativeVideoControls: function() { + // Fallback to noFullWindow when nativeVideoControls is true and audio media is being used. Affects when both media types are used. + if(this.require.audio) { + if(this.status.nativeVideoControls) { + this.status.nativeVideoControls = false; + this.status.noFullWindow = true; + } + } + }, + _updateNativeVideoControls: function() { + if(this.html.video.available && this.html.used) { + // Turn the HTML Video controls on/off + this.htmlElement.video.controls = this.status.nativeVideoControls; + // Show/hide the jPlayer GUI. + this._updateAutohide(); + // For when option changed. The poster image is not updated, as it is dealt with in setMedia(). Acceptable degradation since seriously doubt these options will change on the fly. Can again review later. + if(this.status.nativeVideoControls && this.require.video) { + this.internal.poster.jq.hide(); + this.internal.video.jq.css({'width': this.status.width, 'height': this.status.height}); + } else if(this.status.waitForPlay && this.status.video) { + this.internal.poster.jq.show(); + this.internal.video.jq.css({'width': '0px', 'height': '0px'}); + } + } + }, + _addHtmlEventListeners: function(mediaElement, entity) { + var self = this; + mediaElement.preload = this.options.preload; + mediaElement.muted = this.options.muted; + mediaElement.volume = this.options.volume; + + if(this.status.playbackRateEnabled) { + mediaElement.defaultPlaybackRate = this.options.defaultPlaybackRate; + mediaElement.playbackRate = this.options.playbackRate; + } + + // Create the event listeners + // Only want the active entity to affect jPlayer and bubble events. + // Using entity.gate so that object is referenced and gate property always current + + mediaElement.addEventListener("progress", function() { + if(entity.gate) { + if(self.internal.cmdsIgnored && this.readyState > 0) { // Detect iOS executed the command + self.internal.cmdsIgnored = false; + } + self._getHtmlStatus(mediaElement); + self._updateInterface(); + self._trigger($.jPlayer.event.progress); + } + }, false); + mediaElement.addEventListener("loadeddata", function() { + if(entity.gate) { + self.androidFix.setMedia = false; // Disable the fix after the first progress event. + if(self.androidFix.play) { // Play Android audio - performing the fix. + self.androidFix.play = false; + self.play(self.androidFix.time); + } + if(self.androidFix.pause) { // Pause Android audio at time - performing the fix. + self.androidFix.pause = false; + self.pause(self.androidFix.time); + } + self._trigger($.jPlayer.event.loadeddata); + } + }, false); + mediaElement.addEventListener("timeupdate", function() { + if(entity.gate) { + self._getHtmlStatus(mediaElement); + self._updateInterface(); + self._trigger($.jPlayer.event.timeupdate); + } + }, false); + mediaElement.addEventListener("durationchange", function() { + if(entity.gate) { + self._getHtmlStatus(mediaElement); + self._updateInterface(); + self._trigger($.jPlayer.event.durationchange); + } + }, false); + mediaElement.addEventListener("play", function() { + if(entity.gate) { + self._updateButtons(true); + self._html_checkWaitForPlay(); // So the native controls update this variable and puts the hidden interface in the correct state. Affects toggling native controls. + self._trigger($.jPlayer.event.play); + } + }, false); + mediaElement.addEventListener("playing", function() { + if(entity.gate) { + self._updateButtons(true); + self._seeked(); + self._trigger($.jPlayer.event.playing); + } + }, false); + mediaElement.addEventListener("pause", function() { + if(entity.gate) { + self._updateButtons(false); + self._trigger($.jPlayer.event.pause); + } + }, false); + mediaElement.addEventListener("waiting", function() { + if(entity.gate) { + self._seeking(); + self._trigger($.jPlayer.event.waiting); + } + }, false); + mediaElement.addEventListener("seeking", function() { + if(entity.gate) { + self._seeking(); + self._trigger($.jPlayer.event.seeking); + } + }, false); + mediaElement.addEventListener("seeked", function() { + if(entity.gate) { + self._seeked(); + self._trigger($.jPlayer.event.seeked); + } + }, false); + mediaElement.addEventListener("volumechange", function() { + if(entity.gate) { + // Read the values back from the element as the Blackberry PlayBook shares the volume with the physical buttons master volume control. + // However, when tested 6th July 2011, those buttons do not generate an event. The physical play/pause button does though. + self.options.volume = mediaElement.volume; + self.options.muted = mediaElement.muted; + self._updateMute(); + self._updateVolume(); + self._trigger($.jPlayer.event.volumechange); + } + }, false); + mediaElement.addEventListener("ratechange", function() { + if(entity.gate) { + self.options.defaultPlaybackRate = mediaElement.defaultPlaybackRate; + self.options.playbackRate = mediaElement.playbackRate; + self._updatePlaybackRate(); + self._trigger($.jPlayer.event.ratechange); + } + }, false); + mediaElement.addEventListener("suspend", function() { // Seems to be the only way of capturing that the iOS4 browser did not actually play the media from the page code. ie., It needs a user gesture. + if(entity.gate) { + self._seeked(); + self._trigger($.jPlayer.event.suspend); + } + }, false); + mediaElement.addEventListener("ended", function() { + if(entity.gate) { + // Order of the next few commands are important. Change the time and then pause. + // Solves a bug in Firefox, where issuing pause 1st causes the media to play from the start. ie., The pause is ignored. + if(!$.jPlayer.browser.webkit) { // Chrome crashes if you do this in conjunction with a setMedia command in an ended event handler. ie., The playlist demo. + self.htmlElement.media.currentTime = 0; // Safari does not care about this command. ie., It works with or without this line. (Both Safari and Chrome are Webkit.) + } + self.htmlElement.media.pause(); // Pause otherwise a click on the progress bar will play from that point, when it shouldn't, since it stopped playback. + self._updateButtons(false); + self._getHtmlStatus(mediaElement, true); // With override true. Otherwise Chrome leaves progress at full. + self._updateInterface(); + self._trigger($.jPlayer.event.ended); + } + }, false); + mediaElement.addEventListener("error", function() { + if(entity.gate) { + self._updateButtons(false); + self._seeked(); + if(self.status.srcSet) { // Deals with case of clearMedia() causing an error event. + clearTimeout(self.internal.htmlDlyCmdId); // Clears any delayed commands used in the HTML solution. + self.status.waitForLoad = true; // Allows the load operation to try again. + self.status.waitForPlay = true; // Reset since a play was captured. + if(self.status.video && !self.status.nativeVideoControls) { + self.internal.video.jq.css({'width':'0px', 'height':'0px'}); + } + if(self._validString(self.status.media.poster) && !self.status.nativeVideoControls) { + self.internal.poster.jq.show(); + } + if(self.css.jq.videoPlay.length) { + self.css.jq.videoPlay.show(); + } + self._error( { + type: $.jPlayer.error.URL, + context: self.status.src, // this.src shows absolute urls. Want context to show the url given. + message: $.jPlayer.errorMsg.URL, + hint: $.jPlayer.errorHint.URL + }); + } + } + }, false); + // Create all the other event listeners that bubble up to a jPlayer event from html, without being used by jPlayer. + $.each($.jPlayer.htmlEvent, function(i, eventType) { + mediaElement.addEventListener(this, function() { + if(entity.gate) { + self._trigger($.jPlayer.event[eventType]); + } + }, false); + }); + }, + _addAuroraEventListeners : function(player, entity) { + var self = this; + //player.preload = this.options.preload; + //player.muted = this.options.muted; + player.volume = this.options.volume * 100; + + // Create the event listeners + // Only want the active entity to affect jPlayer and bubble events. + // Using entity.gate so that object is referenced and gate property always current + + player.on("progress", function() { + if(entity.gate) { + if(self.internal.cmdsIgnored && this.readyState > 0) { // Detect iOS executed the command + self.internal.cmdsIgnored = false; + } + self._getAuroraStatus(player); + self._updateInterface(); + self._trigger($.jPlayer.event.progress); + // Progress with song duration, we estimate timeupdate need to be triggered too. + if (player.duration > 0) { + self._trigger($.jPlayer.event.timeupdate); + } + } + }, false); + player.on("ready", function() { + if(entity.gate) { + self._trigger($.jPlayer.event.loadeddata); + } + }, false); + player.on("duration", function() { + if(entity.gate) { + self._getAuroraStatus(player); + self._updateInterface(); + self._trigger($.jPlayer.event.durationchange); + } + }, false); + player.on("end", function() { + if(entity.gate) { + // Order of the next few commands are important. Change the time and then pause. + self._updateButtons(false); + self._getAuroraStatus(player, true); + self._updateInterface(); + self._trigger($.jPlayer.event.ended); + } + }, false); + player.on("error", function() { + if(entity.gate) { + self._updateButtons(false); + self._seeked(); + if(self.status.srcSet) { // Deals with case of clearMedia() causing an error event. + self.status.waitForLoad = true; // Allows the load operation to try again. + self.status.waitForPlay = true; // Reset since a play was captured. + if(self.status.video && !self.status.nativeVideoControls) { + self.internal.video.jq.css({'width':'0px', 'height':'0px'}); + } + if(self._validString(self.status.media.poster) && !self.status.nativeVideoControls) { + self.internal.poster.jq.show(); + } + if(self.css.jq.videoPlay.length) { + self.css.jq.videoPlay.show(); + } + self._error( { + type: $.jPlayer.error.URL, + context: self.status.src, // this.src shows absolute urls. Want context to show the url given. + message: $.jPlayer.errorMsg.URL, + hint: $.jPlayer.errorHint.URL + }); + } + } + }, false); + }, + _getHtmlStatus: function(media, override) { + var ct = 0, cpa = 0, sp = 0, cpr = 0; + + // Fixes the duration bug in iOS, where the durationchange event occurs when media.duration is not always correct. + // Fixes the initial duration bug in BB OS7, where the media.duration is infinity and displays as NaN:NaN due to Date() using inifity. + if(isFinite(media.duration)) { + this.status.duration = media.duration; + } + + ct = media.currentTime; + cpa = (this.status.duration > 0) ? 100 * ct / this.status.duration : 0; + if((typeof media.seekable === "object") && (media.seekable.length > 0)) { + sp = (this.status.duration > 0) ? 100 * media.seekable.end(media.seekable.length-1) / this.status.duration : 100; + cpr = (this.status.duration > 0) ? 100 * media.currentTime / media.seekable.end(media.seekable.length-1) : 0; // Duration conditional for iOS duration bug. ie., seekable.end is a NaN in that case. + } else { + sp = 100; + cpr = cpa; + } + + if(override) { + ct = 0; + cpr = 0; + cpa = 0; + } + + this.status.seekPercent = sp; + this.status.currentPercentRelative = cpr; + this.status.currentPercentAbsolute = cpa; + this.status.currentTime = ct; + + this.status.remaining = this.status.duration - this.status.currentTime; + + this.status.videoWidth = media.videoWidth; + this.status.videoHeight = media.videoHeight; + + this.status.readyState = media.readyState; + this.status.networkState = media.networkState; + this.status.playbackRate = media.playbackRate; + this.status.ended = media.ended; + }, + _getAuroraStatus: function(player, override) { + var ct = 0, cpa = 0, sp = 0, cpr = 0; + + this.status.duration = player.duration / 1000; + + ct = player.currentTime / 1000; + cpa = (this.status.duration > 0) ? 100 * ct / this.status.duration : 0; + if(player.buffered > 0) { + sp = (this.status.duration > 0) ? (player.buffered * this.status.duration) / this.status.duration : 100; + cpr = (this.status.duration > 0) ? ct / (player.buffered * this.status.duration) : 0; + } else { + sp = 100; + cpr = cpa; + } + + if(override) { + ct = 0; + cpr = 0; + cpa = 0; + } + + this.status.seekPercent = sp; + this.status.currentPercentRelative = cpr; + this.status.currentPercentAbsolute = cpa; + this.status.currentTime = ct; + + this.status.remaining = this.status.duration - this.status.currentTime; + + this.status.readyState = 4; // status.readyState; + this.status.networkState = 0; // status.networkState; + this.status.playbackRate = 1; // status.playbackRate; + this.status.ended = false; // status.ended; + }, + _resetStatus: function() { + this.status = $.extend({}, this.status, $.jPlayer.prototype.status); // Maintains the status properties that persist through a reset. + }, + _trigger: function(eventType, error, warning) { // eventType always valid as called using $.jPlayer.event.eventType + var event = $.Event(eventType); + event.jPlayer = {}; + event.jPlayer.version = $.extend({}, this.version); + event.jPlayer.options = $.extend(true, {}, this.options); // Deep copy + event.jPlayer.status = $.extend(true, {}, this.status); // Deep copy + event.jPlayer.html = $.extend(true, {}, this.html); // Deep copy + event.jPlayer.aurora = $.extend(true, {}, this.aurora); // Deep copy + event.jPlayer.flash = $.extend(true, {}, this.flash); // Deep copy + if(error) { + event.jPlayer.error = $.extend({}, error); + } + if(warning) { + event.jPlayer.warning = $.extend({}, warning); + } + this.element.trigger(event); + }, + jPlayerFlashEvent: function(eventType, status) { // Called from Flash + if(eventType === $.jPlayer.event.ready) { + if(!this.internal.ready) { + this.internal.ready = true; + this.internal.flash.jq.css({'width':'0px', 'height':'0px'}); // Once Flash generates the ready event, minimise to zero as it is not affected by wmode anymore. + + this.version.flash = status.version; + if(this.version.needFlash !== this.version.flash) { + this._error( { + type: $.jPlayer.error.VERSION, + context: this.version.flash, + message: $.jPlayer.errorMsg.VERSION + this.version.flash, + hint: $.jPlayer.errorHint.VERSION + }); + } + this._trigger($.jPlayer.event.repeat); // Trigger the repeat event so its handler can initialize itself with the loop option. + this._trigger(eventType); + } else { + // This condition occurs if the Flash is hidden and then shown again. + // Firefox also reloads the Flash if the CSS position changes. position:fixed is used for full screen. + + // Only do this if the Flash is the solution being used at the moment. Affects Media players where both solution may be being used. + if(this.flash.gate) { + + // Send the current status to the Flash now that it is ready (available) again. + if(this.status.srcSet) { + + // Need to read original status before issuing the setMedia command. + var currentTime = this.status.currentTime, + paused = this.status.paused; + + this.setMedia(this.status.media); + this.volumeWorker(this.options.volume); + if(currentTime > 0) { + if(paused) { + this.pause(currentTime); + } else { + this.play(currentTime); + } + } + } + this._trigger($.jPlayer.event.flashreset); + } + } + } + if(this.flash.gate) { + switch(eventType) { + case $.jPlayer.event.progress: + this._getFlashStatus(status); + this._updateInterface(); + this._trigger(eventType); + break; + case $.jPlayer.event.timeupdate: + this._getFlashStatus(status); + this._updateInterface(); + this._trigger(eventType); + break; + case $.jPlayer.event.play: + this._seeked(); + this._updateButtons(true); + this._trigger(eventType); + break; + case $.jPlayer.event.pause: + this._updateButtons(false); + this._trigger(eventType); + break; + case $.jPlayer.event.ended: + this._updateButtons(false); + this._trigger(eventType); + break; + case $.jPlayer.event.click: + this._trigger(eventType); // This could be dealt with by the default + break; + case $.jPlayer.event.error: + this.status.waitForLoad = true; // Allows the load operation to try again. + this.status.waitForPlay = true; // Reset since a play was captured. + if(this.status.video) { + this.internal.flash.jq.css({'width':'0px', 'height':'0px'}); + } + if(this._validString(this.status.media.poster)) { + this.internal.poster.jq.show(); + } + if(this.css.jq.videoPlay.length && this.status.video) { + this.css.jq.videoPlay.show(); + } + if(this.status.video) { // Set up for another try. Execute before error event. + this._flash_setVideo(this.status.media); + } else { + this._flash_setAudio(this.status.media); + } + this._updateButtons(false); + this._error( { + type: $.jPlayer.error.URL, + context:status.src, + message: $.jPlayer.errorMsg.URL, + hint: $.jPlayer.errorHint.URL + }); + break; + case $.jPlayer.event.seeking: + this._seeking(); + this._trigger(eventType); + break; + case $.jPlayer.event.seeked: + this._seeked(); + this._trigger(eventType); + break; + case $.jPlayer.event.ready: + // The ready event is handled outside the switch statement. + // Captured here otherwise 2 ready events would be generated if the ready event handler used setMedia. + break; + default: + this._trigger(eventType); + } + } + return false; + }, + _getFlashStatus: function(status) { + this.status.seekPercent = status.seekPercent; + this.status.currentPercentRelative = status.currentPercentRelative; + this.status.currentPercentAbsolute = status.currentPercentAbsolute; + this.status.currentTime = status.currentTime; + this.status.duration = status.duration; + this.status.remaining = status.duration - status.currentTime; + + this.status.videoWidth = status.videoWidth; + this.status.videoHeight = status.videoHeight; + + // The Flash does not generate this information in this release + this.status.readyState = 4; // status.readyState; + this.status.networkState = 0; // status.networkState; + this.status.playbackRate = 1; // status.playbackRate; + this.status.ended = false; // status.ended; + }, + _updateButtons: function(playing) { + if(playing === undefined) { + playing = !this.status.paused; + } else { + this.status.paused = !playing; + } + // Apply the state classes. (For the useStateClassSkin:true option) + if(playing) { + this.addStateClass('playing'); + } else { + this.removeStateClass('playing'); + } + if(!this.status.noFullWindow && this.options.fullWindow) { + this.addStateClass('fullScreen'); + } else { + this.removeStateClass('fullScreen'); + } + if(this.options.loop) { + this.addStateClass('looped'); + } else { + this.removeStateClass('looped'); + } + // Toggle the GUI element pairs. (For the useStateClassSkin:false option) + if(this.css.jq.play.length && this.css.jq.pause.length) { + if(playing) { + this.css.jq.play.hide(); + this.css.jq.pause.show(); + } else { + this.css.jq.play.show(); + this.css.jq.pause.hide(); + } + } + if(this.css.jq.restoreScreen.length && this.css.jq.fullScreen.length) { + if(this.status.noFullWindow) { + this.css.jq.fullScreen.hide(); + this.css.jq.restoreScreen.hide(); + } else if(this.options.fullWindow) { + this.css.jq.fullScreen.hide(); + this.css.jq.restoreScreen.show(); + } else { + this.css.jq.fullScreen.show(); + this.css.jq.restoreScreen.hide(); + } + } + if(this.css.jq.repeat.length && this.css.jq.repeatOff.length) { + if(this.options.loop) { + this.css.jq.repeat.hide(); + this.css.jq.repeatOff.show(); + } else { + this.css.jq.repeat.show(); + this.css.jq.repeatOff.hide(); + } + } + }, + _updateInterface: function() { + if(this.css.jq.seekBar.length) { + this.css.jq.seekBar.width(this.status.seekPercent+"%"); + } + if(this.css.jq.playBar.length) { + if(this.options.smoothPlayBar) { + this.css.jq.playBar.stop().animate({ + width: this.status.currentPercentAbsolute+"%" + }, 250, "linear"); + } else { + this.css.jq.playBar.width(this.status.currentPercentRelative+"%"); + } + } + var currentTimeText = ''; + if(this.css.jq.currentTime.length) { + currentTimeText = this._convertTime(this.status.currentTime); + if(currentTimeText !== this.css.jq.currentTime.text()) { + this.css.jq.currentTime.text(this._convertTime(this.status.currentTime)); + } + } + var durationText = '', + duration = this.status.duration, + remaining = this.status.remaining; + if(this.css.jq.duration.length) { + if(typeof this.status.media.duration === 'string') { + durationText = this.status.media.duration; + } else { + if(typeof this.status.media.duration === 'number') { + duration = this.status.media.duration; + remaining = duration - this.status.currentTime; + } + if(this.options.remainingDuration) { + durationText = (remaining > 0 ? '-' : '') + this._convertTime(remaining); + } else { + durationText = this._convertTime(duration); + } + } + if(durationText !== this.css.jq.duration.text()) { + this.css.jq.duration.text(durationText); + } + } + }, + _convertTime: ConvertTime.prototype.time, + _seeking: function() { + if(this.css.jq.seekBar.length) { + this.css.jq.seekBar.addClass("jp-seeking-bg"); + } + this.addStateClass('seeking'); + }, + _seeked: function() { + if(this.css.jq.seekBar.length) { + this.css.jq.seekBar.removeClass("jp-seeking-bg"); + } + this.removeStateClass('seeking'); + }, + _resetGate: function() { + this.html.audio.gate = false; + this.html.video.gate = false; + this.aurora.gate = false; + this.flash.gate = false; + }, + _resetActive: function() { + this.html.active = false; + this.aurora.active = false; + this.flash.active = false; + }, + _escapeHtml: function(s) { + return s.split('&').join('&').split('<').join('<').split('>').join('>').split('"').join('"'); + }, + _qualifyURL: function(url) { + var el = document.createElement('div'); + el.innerHTML= 'x'; + return el.firstChild.href; + }, + _absoluteMediaUrls: function(media) { + var self = this; + $.each(media, function(type, url) { + if(url && self.format[type] && url.substr(0, 5) !== "data:") { + media[type] = self._qualifyURL(url); + } + }); + return media; + }, + addStateClass: function(state) { + if(this.ancestorJq.length) { + this.ancestorJq.addClass(this.options.stateClass[state]); + } + }, + removeStateClass: function(state) { + if(this.ancestorJq.length) { + this.ancestorJq.removeClass(this.options.stateClass[state]); + } + }, + setMedia: function(media) { + + /* media[format] = String: URL of format. Must contain all of the supplied option's video or audio formats. + * media.poster = String: Video poster URL. + * media.track = Array: Of objects defining the track element: kind, src, srclang, label, def. + * media.stream = Boolean: * NOT IMPLEMENTED * Designating actual media streams. ie., "false/undefined" for files. Plan to refresh the flash every so often. + */ + + var self = this, + supported = false, + posterChanged = this.status.media.poster !== media.poster; // Compare before reset. Important for OSX Safari as this.htmlElement.poster.src is absolute, even if original poster URL was relative. + + this._resetMedia(); + this._resetGate(); + this._resetActive(); + + // Clear the Android Fix. + this.androidFix.setMedia = false; + this.androidFix.play = false; + this.androidFix.pause = false; + + // Convert all media URLs to absolute URLs. + media = this._absoluteMediaUrls(media); + + $.each(this.formats, function(formatPriority, format) { + var isVideo = self.format[format].media === 'video'; + $.each(self.solutions, function(solutionPriority, solution) { + if(self[solution].support[format] && self._validString(media[format])) { // Format supported in solution and url given for format. + var isHtml = solution === 'html'; + var isAurora = solution === 'aurora'; + + if(isVideo) { + if(isHtml) { + self.html.video.gate = true; + self._html_setVideo(media); + self.html.active = true; + } else { + self.flash.gate = true; + self._flash_setVideo(media); + self.flash.active = true; + } + if(self.css.jq.videoPlay.length) { + self.css.jq.videoPlay.show(); + } + self.status.video = true; + } else { + if(isHtml) { + self.html.audio.gate = true; + self._html_setAudio(media); + self.html.active = true; + + // Setup the Android Fix - Only for HTML audio. + if($.jPlayer.platform.android) { + self.androidFix.setMedia = true; + } + } else if(isAurora) { + self.aurora.gate = true; + self._aurora_setAudio(media); + self.aurora.active = true; + } else { + self.flash.gate = true; + self._flash_setAudio(media); + self.flash.active = true; + } + if(self.css.jq.videoPlay.length) { + self.css.jq.videoPlay.hide(); + } + self.status.video = false; + } + + supported = true; + return false; // Exit $.each + } + }); + if(supported) { + return false; // Exit $.each + } + }); + + if(supported) { + if(!(this.status.nativeVideoControls && this.html.video.gate)) { + // Set poster IMG if native video controls are not being used + // Note: With IE the IMG onload event occurs immediately when cached. + // Note: Poster hidden by default in _resetMedia() + if(this._validString(media.poster)) { + if(posterChanged) { // Since some browsers do not generate img onload event. + this.htmlElement.poster.src = media.poster; + } else { + this.internal.poster.jq.show(); + } + } + } + if(typeof media.title === 'string') { + if(this.css.jq.title.length) { + this.css.jq.title.html(media.title); + } + if(this.htmlElement.audio) { + this.htmlElement.audio.setAttribute('title', media.title); + } + if(this.htmlElement.video) { + this.htmlElement.video.setAttribute('title', media.title); + } + } + this.status.srcSet = true; + this.status.media = $.extend({}, media); + this._updateButtons(false); + this._updateInterface(); + this._trigger($.jPlayer.event.setmedia); + } else { // jPlayer cannot support any formats provided in this browser + // Send an error event + this._error( { + type: $.jPlayer.error.NO_SUPPORT, + context: "{supplied:'" + this.options.supplied + "'}", + message: $.jPlayer.errorMsg.NO_SUPPORT, + hint: $.jPlayer.errorHint.NO_SUPPORT + }); + } + }, + _resetMedia: function() { + this._resetStatus(); + this._updateButtons(false); + this._updateInterface(); + this._seeked(); + this.internal.poster.jq.hide(); + + clearTimeout(this.internal.htmlDlyCmdId); + + if(this.html.active) { + this._html_resetMedia(); + } else if(this.aurora.active) { + this._aurora_resetMedia(); + } else if(this.flash.active) { + this._flash_resetMedia(); + } + }, + clearMedia: function() { + this._resetMedia(); + + if(this.html.active) { + this._html_clearMedia(); + } else if(this.aurora.active) { + this._aurora_clearMedia(); + } else if(this.flash.active) { + this._flash_clearMedia(); + } + + this._resetGate(); + this._resetActive(); + }, + load: function() { + if(this.status.srcSet) { + if(this.html.active) { + this._html_load(); + } else if(this.aurora.active) { + this._aurora_load(); + } else if(this.flash.active) { + this._flash_load(); + } + } else { + this._urlNotSetError("load"); + } + }, + focus: function() { + if(this.options.keyEnabled) { + $.jPlayer.focus = this; + } + }, + play: function(time) { + var guiAction = typeof time === "object"; // Flags GUI click events so we know this was not a direct command, but an action taken by the user on the GUI. + if(guiAction && this.options.useStateClassSkin && !this.status.paused) { + this.pause(time); // The time would be the click event, but passing it over so info is not lost. + } else { + time = (typeof time === "number") ? time : NaN; // Remove jQuery event from click handler + if(this.status.srcSet) { + this.focus(); + if(this.html.active) { + this._html_play(time); + } else if(this.aurora.active) { + this._aurora_play(time); + } else if(this.flash.active) { + this._flash_play(time); + } + } else { + this._urlNotSetError("play"); + } + } + }, + videoPlay: function() { // Handles clicks on the play button over the video poster + this.play(); + }, + pause: function(time) { + time = (typeof time === "number") ? time : NaN; // Remove jQuery event from click handler + if(this.status.srcSet) { + if(this.html.active) { + this._html_pause(time); + } else if(this.aurora.active) { + this._aurora_pause(time); + } else if(this.flash.active) { + this._flash_pause(time); + } + } else { + this._urlNotSetError("pause"); + } + }, + tellOthers: function(command, conditions) { + var self = this, + hasConditions = typeof conditions === 'function', + args = Array.prototype.slice.call(arguments); // Convert arguments to an Array. + + if(typeof command !== 'string') { // Ignore, since no command. + return; // Return undefined to maintain chaining. + } + if(hasConditions) { + args.splice(1, 1); // Remove the conditions from the arguments + } + + $.jPlayer.prototype.destroyRemoved(); + $.each(this.instances, function() { + // Remember that "this" is the instance's "element" in the $.each() loop. + if(self.element !== this) { // Do not tell my instance. + if(!hasConditions || conditions.call(this.data("jPlayer"), self)) { + this.jPlayer.apply(this, args); + } + } + }); + }, + pauseOthers: function(time) { + this.tellOthers("pause", function() { + // In the conditions function, the "this" context is the other instance's jPlayer object. + return this.status.srcSet; + }, time); + }, + stop: function() { + if(this.status.srcSet) { + if(this.html.active) { + this._html_pause(0); + } else if(this.aurora.active) { + this._aurora_pause(0); + } else if(this.flash.active) { + this._flash_pause(0); + } + } else { + this._urlNotSetError("stop"); + } + }, + playHead: function(p) { + p = this._limitValue(p, 0, 100); + if(this.status.srcSet) { + if(this.html.active) { + this._html_playHead(p); + } else if(this.aurora.active) { + this._aurora_playHead(p); + } else if(this.flash.active) { + this._flash_playHead(p); + } + } else { + this._urlNotSetError("playHead"); + } + }, + _muted: function(muted) { + this.mutedWorker(muted); + if(this.options.globalVolume) { + this.tellOthers("mutedWorker", function() { + // Check the other instance has global volume enabled. + return this.options.globalVolume; + }, muted); + } + }, + mutedWorker: function(muted) { + this.options.muted = muted; + if(this.html.used) { + this._html_setProperty('muted', muted); + } + if(this.aurora.used) { + this._aurora_mute(muted); + } + if(this.flash.used) { + this._flash_mute(muted); + } + + // The HTML solution generates this event from the media element itself. + if(!this.html.video.gate && !this.html.audio.gate) { + this._updateMute(muted); + this._updateVolume(this.options.volume); + this._trigger($.jPlayer.event.volumechange); + } + }, + mute: function(mute) { // mute is either: undefined (true), an event object (true) or a boolean (muted). + var guiAction = typeof mute === "object"; // Flags GUI click events so we know this was not a direct command, but an action taken by the user on the GUI. + if(guiAction && this.options.useStateClassSkin && this.options.muted) { + this._muted(false); + } else { + mute = mute === undefined ? true : !!mute; + this._muted(mute); + } + }, + unmute: function(unmute) { // unmute is either: undefined (true), an event object (true) or a boolean (!muted). + unmute = unmute === undefined ? true : !!unmute; + this._muted(!unmute); + }, + _updateMute: function(mute) { + if(mute === undefined) { + mute = this.options.muted; + } + if(mute) { + this.addStateClass('muted'); + } else { + this.removeStateClass('muted'); + } + if(this.css.jq.mute.length && this.css.jq.unmute.length) { + if(this.status.noVolume) { + this.css.jq.mute.hide(); + this.css.jq.unmute.hide(); + } else if(mute) { + this.css.jq.mute.hide(); + this.css.jq.unmute.show(); + } else { + this.css.jq.mute.show(); + this.css.jq.unmute.hide(); + } + } + }, + volume: function(v) { + this.volumeWorker(v); + if(this.options.globalVolume) { + this.tellOthers("volumeWorker", function() { + // Check the other instance has global volume enabled. + return this.options.globalVolume; + }, v); + } + }, + volumeWorker: function(v) { + v = this._limitValue(v, 0, 1); + this.options.volume = v; + + if(this.html.used) { + this._html_setProperty('volume', v); + } + if(this.aurora.used) { + this._aurora_volume(v); + } + if(this.flash.used) { + this._flash_volume(v); + } + + // The HTML solution generates this event from the media element itself. + if(!this.html.video.gate && !this.html.audio.gate) { + this._updateVolume(v); + this._trigger($.jPlayer.event.volumechange); + } + }, + volumeBar: function(e) { // Handles clicks on the volumeBar + if(this.css.jq.volumeBar.length) { + // Using $(e.currentTarget) to enable multiple volume bars + var $bar = $(e.currentTarget), + offset = $bar.offset(), + x = e.pageX - offset.left, + w = $bar.width(), + y = $bar.height() - e.pageY + offset.top, + h = $bar.height(); + if(this.options.verticalVolume) { + this.volume(y/h); + } else { + this.volume(x/w); + } + } + if(this.options.muted) { + this._muted(false); + } + }, + _updateVolume: function(v) { + if(v === undefined) { + v = this.options.volume; + } + v = this.options.muted ? 0 : v; + + if(this.status.noVolume) { + this.addStateClass('noVolume'); + if(this.css.jq.volumeBar.length) { + this.css.jq.volumeBar.hide(); + } + if(this.css.jq.volumeBarValue.length) { + this.css.jq.volumeBarValue.hide(); + } + if(this.css.jq.volumeMax.length) { + this.css.jq.volumeMax.hide(); + } + } else { + this.removeStateClass('noVolume'); + if(this.css.jq.volumeBar.length) { + this.css.jq.volumeBar.show(); + } + if(this.css.jq.volumeBarValue.length) { + this.css.jq.volumeBarValue.show(); + this.css.jq.volumeBarValue[this.options.verticalVolume ? "height" : "width"]((v*100)+"%"); + } + if(this.css.jq.volumeMax.length) { + this.css.jq.volumeMax.show(); + } + } + }, + volumeMax: function() { // Handles clicks on the volume max + this.volume(1); + if(this.options.muted) { + this._muted(false); + } + }, + _cssSelectorAncestor: function(ancestor) { + var self = this; + this.options.cssSelectorAncestor = ancestor; + this._removeUiClass(); + this.ancestorJq = ancestor ? $(ancestor) : []; // Would use $() instead of [], but it is only 1.4+ + if(ancestor && this.ancestorJq.length !== 1) { // So empty strings do not generate the warning. + this._warning( { + type: $.jPlayer.warning.CSS_SELECTOR_COUNT, + context: ancestor, + message: $.jPlayer.warningMsg.CSS_SELECTOR_COUNT + this.ancestorJq.length + " found for cssSelectorAncestor.", + hint: $.jPlayer.warningHint.CSS_SELECTOR_COUNT + }); + } + this._addUiClass(); + $.each(this.options.cssSelector, function(fn, cssSel) { + self._cssSelector(fn, cssSel); + }); + + // Set the GUI to the current state. + this._updateInterface(); + this._updateButtons(); + this._updateAutohide(); + this._updateVolume(); + this._updateMute(); + }, + _cssSelector: function(fn, cssSel) { + var self = this; + if(typeof cssSel === 'string') { + if($.jPlayer.prototype.options.cssSelector[fn]) { + if(this.css.jq[fn] && this.css.jq[fn].length) { + this.css.jq[fn].unbind(".jPlayer"); + } + this.options.cssSelector[fn] = cssSel; + this.css.cs[fn] = this.options.cssSelectorAncestor + " " + cssSel; + + if(cssSel) { // Checks for empty string + this.css.jq[fn] = $(this.css.cs[fn]); + } else { + this.css.jq[fn] = []; // To comply with the css.jq[fn].length check before its use. As of jQuery 1.4 could have used $() for an empty set. + } + + if(this.css.jq[fn].length && this[fn]) { + var handler = function(e) { + e.preventDefault(); + self[fn](e); + if(self.options.autoBlur) { + $(this).blur(); + } else { + $(this).focus(); // Force focus for ARIA. + } + }; + this.css.jq[fn].bind("click.jPlayer", handler); // Using jPlayer namespace + } + + if(cssSel && this.css.jq[fn].length !== 1) { // So empty strings do not generate the warning. ie., they just remove the old one. + this._warning( { + type: $.jPlayer.warning.CSS_SELECTOR_COUNT, + context: this.css.cs[fn], + message: $.jPlayer.warningMsg.CSS_SELECTOR_COUNT + this.css.jq[fn].length + " found for " + fn + " method.", + hint: $.jPlayer.warningHint.CSS_SELECTOR_COUNT + }); + } + } else { + this._warning( { + type: $.jPlayer.warning.CSS_SELECTOR_METHOD, + context: fn, + message: $.jPlayer.warningMsg.CSS_SELECTOR_METHOD, + hint: $.jPlayer.warningHint.CSS_SELECTOR_METHOD + }); + } + } else { + this._warning( { + type: $.jPlayer.warning.CSS_SELECTOR_STRING, + context: cssSel, + message: $.jPlayer.warningMsg.CSS_SELECTOR_STRING, + hint: $.jPlayer.warningHint.CSS_SELECTOR_STRING + }); + } + }, + duration: function(e) { + if(this.options.toggleDuration) { + if(this.options.captureDuration) { + e.stopPropagation(); + } + this._setOption("remainingDuration", !this.options.remainingDuration); + } + }, + seekBar: function(e) { // Handles clicks on the seekBar + if(this.css.jq.seekBar.length) { + // Using $(e.currentTarget) to enable multiple seek bars + var $bar = $(e.currentTarget), + offset = $bar.offset(), + x = e.pageX - offset.left, + w = $bar.width(), + p = 100 * x / w; + this.playHead(p); + } + }, + playbackRate: function(pbr) { + this._setOption("playbackRate", pbr); + }, + playbackRateBar: function(e) { // Handles clicks on the playbackRateBar + if(this.css.jq.playbackRateBar.length) { + // Using $(e.currentTarget) to enable multiple playbackRate bars + var $bar = $(e.currentTarget), + offset = $bar.offset(), + x = e.pageX - offset.left, + w = $bar.width(), + y = $bar.height() - e.pageY + offset.top, + h = $bar.height(), + ratio, pbr; + if(this.options.verticalPlaybackRate) { + ratio = y/h; + } else { + ratio = x/w; + } + pbr = ratio * (this.options.maxPlaybackRate - this.options.minPlaybackRate) + this.options.minPlaybackRate; + this.playbackRate(pbr); + } + }, + _updatePlaybackRate: function() { + var pbr = this.options.playbackRate, + ratio = (pbr - this.options.minPlaybackRate) / (this.options.maxPlaybackRate - this.options.minPlaybackRate); + if(this.status.playbackRateEnabled) { + if(this.css.jq.playbackRateBar.length) { + this.css.jq.playbackRateBar.show(); + } + if(this.css.jq.playbackRateBarValue.length) { + this.css.jq.playbackRateBarValue.show(); + this.css.jq.playbackRateBarValue[this.options.verticalPlaybackRate ? "height" : "width"]((ratio*100)+"%"); + } + } else { + if(this.css.jq.playbackRateBar.length) { + this.css.jq.playbackRateBar.hide(); + } + if(this.css.jq.playbackRateBarValue.length) { + this.css.jq.playbackRateBarValue.hide(); + } + } + }, + repeat: function(event) { // Handle clicks on the repeat button + var guiAction = typeof event === "object"; // Flags GUI click events so we know this was not a direct command, but an action taken by the user on the GUI. + if(guiAction && this.options.useStateClassSkin && this.options.loop) { + this._loop(false); + } else { + this._loop(true); + } + }, + repeatOff: function() { // Handle clicks on the repeatOff button + this._loop(false); + }, + _loop: function(loop) { + if(this.options.loop !== loop) { + this.options.loop = loop; + this._updateButtons(); + this._trigger($.jPlayer.event.repeat); + } + }, + + // Options code adapted from ui.widget.js (1.8.7). Made changes so the key can use dot notation. To match previous getData solution in jPlayer 1. + option: function(key, value) { + var options = key; + + // Enables use: options(). Returns a copy of options object + if ( arguments.length === 0 ) { + return $.extend( true, {}, this.options ); + } + + if(typeof key === "string") { + var keys = key.split("."); + + // Enables use: options("someOption") Returns a copy of the option. Supports dot notation. + if(value === undefined) { + + var opt = $.extend(true, {}, this.options); + for(var i = 0; i < keys.length; i++) { + if(opt[keys[i]] !== undefined) { + opt = opt[keys[i]]; + } else { + this._warning( { + type: $.jPlayer.warning.OPTION_KEY, + context: key, + message: $.jPlayer.warningMsg.OPTION_KEY, + hint: $.jPlayer.warningHint.OPTION_KEY + }); + return undefined; + } + } + return opt; + } + + // Enables use: options("someOptionObject", someObject}). Creates: {someOptionObject:someObject} + // Enables use: options("someOption", someValue). Creates: {someOption:someValue} + // Enables use: options("someOptionObject.someOption", someValue). Creates: {someOptionObject:{someOption:someValue}} + + options = {}; + var opts = options; + + for(var j = 0; j < keys.length; j++) { + if(j < keys.length - 1) { + opts[keys[j]] = {}; + opts = opts[keys[j]]; + } else { + opts[keys[j]] = value; + } + } + } + + // Otherwise enables use: options(optionObject). Uses original object (the key) + + this._setOptions(options); + + return this; + }, + _setOptions: function(options) { + var self = this; + $.each(options, function(key, value) { // This supports the 2 level depth that the options of jPlayer has. Would review if we ever need more depth. + self._setOption(key, value); + }); + + return this; + }, + _setOption: function(key, value) { + var self = this; + + // The ability to set options is limited at this time. + + switch(key) { + case "volume" : + this.volume(value); + break; + case "muted" : + this._muted(value); + break; + case "globalVolume" : + this.options[key] = value; + break; + case "cssSelectorAncestor" : + this._cssSelectorAncestor(value); // Set and refresh all associations for the new ancestor. + break; + case "cssSelector" : + $.each(value, function(fn, cssSel) { + self._cssSelector(fn, cssSel); // NB: The option is set inside this function, after further validity checks. + }); + break; + case "playbackRate" : + this.options[key] = value = this._limitValue(value, this.options.minPlaybackRate, this.options.maxPlaybackRate); + if(this.html.used) { + this._html_setProperty('playbackRate', value); + } + this._updatePlaybackRate(); + break; + case "defaultPlaybackRate" : + this.options[key] = value = this._limitValue(value, this.options.minPlaybackRate, this.options.maxPlaybackRate); + if(this.html.used) { + this._html_setProperty('defaultPlaybackRate', value); + } + this._updatePlaybackRate(); + break; + case "minPlaybackRate" : + this.options[key] = value = this._limitValue(value, 0.1, this.options.maxPlaybackRate - 0.1); + this._updatePlaybackRate(); + break; + case "maxPlaybackRate" : + this.options[key] = value = this._limitValue(value, this.options.minPlaybackRate + 0.1, 16); + this._updatePlaybackRate(); + break; + case "fullScreen" : + if(this.options[key] !== value) { // if changed + var wkv = $.jPlayer.nativeFeatures.fullscreen.used.webkitVideo; + if(!wkv || wkv && !this.status.waitForPlay) { + if(!wkv) { // No sensible way to unset option on these devices. + this.options[key] = value; + } + if(value) { + this._requestFullscreen(); + } else { + this._exitFullscreen(); + } + if(!wkv) { + this._setOption("fullWindow", value); + } + } + } + break; + case "fullWindow" : + if(this.options[key] !== value) { // if changed + this._removeUiClass(); + this.options[key] = value; + this._refreshSize(); + } + break; + case "size" : + if(!this.options.fullWindow && this.options[key].cssClass !== value.cssClass) { + this._removeUiClass(); + } + this.options[key] = $.extend({}, this.options[key], value); // store a merged copy of it, incase not all properties changed. + this._refreshSize(); + break; + case "sizeFull" : + if(this.options.fullWindow && this.options[key].cssClass !== value.cssClass) { + this._removeUiClass(); + } + this.options[key] = $.extend({}, this.options[key], value); // store a merged copy of it, incase not all properties changed. + this._refreshSize(); + break; + case "autohide" : + this.options[key] = $.extend({}, this.options[key], value); // store a merged copy of it, incase not all properties changed. + this._updateAutohide(); + break; + case "loop" : + this._loop(value); + break; + case "remainingDuration" : + this.options[key] = value; + this._updateInterface(); + break; + case "toggleDuration" : + this.options[key] = value; + break; + case "nativeVideoControls" : + this.options[key] = $.extend({}, this.options[key], value); // store a merged copy of it, incase not all properties changed. + this.status.nativeVideoControls = this._uaBlocklist(this.options.nativeVideoControls); + this._restrictNativeVideoControls(); + this._updateNativeVideoControls(); + break; + case "noFullWindow" : + this.options[key] = $.extend({}, this.options[key], value); // store a merged copy of it, incase not all properties changed. + this.status.nativeVideoControls = this._uaBlocklist(this.options.nativeVideoControls); // Need to check again as noFullWindow can depend on this flag and the restrict() can override it. + this.status.noFullWindow = this._uaBlocklist(this.options.noFullWindow); + this._restrictNativeVideoControls(); + this._updateButtons(); + break; + case "noVolume" : + this.options[key] = $.extend({}, this.options[key], value); // store a merged copy of it, incase not all properties changed. + this.status.noVolume = this._uaBlocklist(this.options.noVolume); + this._updateVolume(); + this._updateMute(); + break; + case "emulateHtml" : + if(this.options[key] !== value) { // To avoid multiple event handlers being created, if true already. + this.options[key] = value; + if(value) { + this._emulateHtmlBridge(); + } else { + this._destroyHtmlBridge(); + } + } + break; + case "timeFormat" : + this.options[key] = $.extend({}, this.options[key], value); // store a merged copy of it, incase not all properties changed. + break; + case "keyEnabled" : + this.options[key] = value; + if(!value && this === $.jPlayer.focus) { + $.jPlayer.focus = null; + } + break; + case "keyBindings" : + this.options[key] = $.extend(true, {}, this.options[key], value); // store a merged DEEP copy of it, incase not all properties changed. + break; + case "audioFullScreen" : + this.options[key] = value; + break; + case "autoBlur" : + this.options[key] = value; + break; + } + + return this; + }, + // End of: (Options code adapted from ui.widget.js) + + _refreshSize: function() { + this._setSize(); // update status and jPlayer element size + this._addUiClass(); // update the ui class + this._updateSize(); // update internal sizes + this._updateButtons(); + this._updateAutohide(); + this._trigger($.jPlayer.event.resize); + }, + _setSize: function() { + // Determine the current size from the options + if(this.options.fullWindow) { + this.status.width = this.options.sizeFull.width; + this.status.height = this.options.sizeFull.height; + this.status.cssClass = this.options.sizeFull.cssClass; + } else { + this.status.width = this.options.size.width; + this.status.height = this.options.size.height; + this.status.cssClass = this.options.size.cssClass; + } + + // Set the size of the jPlayer area. + this.element.css({'width': this.status.width, 'height': this.status.height}); + }, + _addUiClass: function() { + if(this.ancestorJq.length) { + this.ancestorJq.addClass(this.status.cssClass); + } + }, + _removeUiClass: function() { + if(this.ancestorJq.length) { + this.ancestorJq.removeClass(this.status.cssClass); + } + }, + _updateSize: function() { + // The poster uses show/hide so can simply resize it. + this.internal.poster.jq.css({'width': this.status.width, 'height': this.status.height}); + + // Video html or flash resized if necessary at this time, or if native video controls being used. + if(!this.status.waitForPlay && this.html.active && this.status.video || this.html.video.available && this.html.used && this.status.nativeVideoControls) { + this.internal.video.jq.css({'width': this.status.width, 'height': this.status.height}); + } + else if(!this.status.waitForPlay && this.flash.active && this.status.video) { + this.internal.flash.jq.css({'width': this.status.width, 'height': this.status.height}); + } + }, + _updateAutohide: function() { + var self = this, + event = "mousemove.jPlayer", + namespace = ".jPlayerAutohide", + eventType = event + namespace, + handler = function(event) { + var moved = false, + deltaX, deltaY; + if(typeof self.internal.mouse !== "undefined") { + //get the change from last position to this position + deltaX = self.internal.mouse.x - event.pageX; + deltaY = self.internal.mouse.y - event.pageY; + moved = (Math.floor(deltaX) > 0) || (Math.floor(deltaY)>0); + } else { + moved = true; + } + // store current position for next method execution + self.internal.mouse = { + x : event.pageX, + y : event.pageY + }; + // if mouse has been actually moved, do the gui fadeIn/fadeOut + if (moved) { + self.css.jq.gui.fadeIn(self.options.autohide.fadeIn, function() { + clearTimeout(self.internal.autohideId); + self.internal.autohideId = setTimeout( function() { + self.css.jq.gui.fadeOut(self.options.autohide.fadeOut); + }, self.options.autohide.hold); + }); + } + }; + + if(this.css.jq.gui.length) { + + // End animations first so that its callback is executed now. + // Otherwise an in progress fadeIn animation still has the callback to fadeOut again. + this.css.jq.gui.stop(true, true); + + // Removes the fadeOut operation from the fadeIn callback. + clearTimeout(this.internal.autohideId); + // undefine mouse + delete this.internal.mouse; + + this.element.unbind(namespace); + this.css.jq.gui.unbind(namespace); + + if(!this.status.nativeVideoControls) { + if(this.options.fullWindow && this.options.autohide.full || !this.options.fullWindow && this.options.autohide.restored) { + this.element.bind(eventType, handler); + this.css.jq.gui.bind(eventType, handler); + this.css.jq.gui.hide(); + } else { + this.css.jq.gui.show(); + } + } else { + this.css.jq.gui.hide(); + } + } + }, + fullScreen: function(event) { + var guiAction = typeof event === "object"; // Flags GUI click events so we know this was not a direct command, but an action taken by the user on the GUI. + if(guiAction && this.options.useStateClassSkin && this.options.fullScreen) { + this._setOption("fullScreen", false); + } else { + this._setOption("fullScreen", true); + } + }, + restoreScreen: function() { + this._setOption("fullScreen", false); + }, + _fullscreenAddEventListeners: function() { + var self = this, + fs = $.jPlayer.nativeFeatures.fullscreen; + + if(fs.api.fullscreenEnabled) { + if(fs.event.fullscreenchange) { + // Create the event handler function and store it for removal. + if(typeof this.internal.fullscreenchangeHandler !== 'function') { + this.internal.fullscreenchangeHandler = function() { + self._fullscreenchange(); + }; + } + document.addEventListener(fs.event.fullscreenchange, this.internal.fullscreenchangeHandler, false); + } + // No point creating handler for fullscreenerror. + // Either logic avoids fullscreen occurring (w3c/moz), or their is no event on the browser (webkit). + } + }, + _fullscreenRemoveEventListeners: function() { + var fs = $.jPlayer.nativeFeatures.fullscreen; + if(this.internal.fullscreenchangeHandler) { + document.removeEventListener(fs.event.fullscreenchange, this.internal.fullscreenchangeHandler, false); + } + }, + _fullscreenchange: function() { + // If nothing is fullscreen, then we cannot be in fullscreen mode. + if(this.options.fullScreen && !$.jPlayer.nativeFeatures.fullscreen.api.fullscreenElement()) { + this._setOption("fullScreen", false); + } + }, + _requestFullscreen: function() { + // Either the container or the jPlayer div + var e = this.ancestorJq.length ? this.ancestorJq[0] : this.element[0], + fs = $.jPlayer.nativeFeatures.fullscreen; + + // This method needs the video element. For iOS and Android. + if(fs.used.webkitVideo) { + e = this.htmlElement.video; + } + + if(fs.api.fullscreenEnabled) { + fs.api.requestFullscreen(e); + } + }, + _exitFullscreen: function() { + + var fs = $.jPlayer.nativeFeatures.fullscreen, + e; + + // This method needs the video element. For iOS and Android. + if(fs.used.webkitVideo) { + e = this.htmlElement.video; + } + + if(fs.api.fullscreenEnabled) { + fs.api.exitFullscreen(e); + } + }, + _html_initMedia: function(media) { + // Remove any existing track elements + var $media = $(this.htmlElement.media).empty(); + + // Create any track elements given with the media, as an Array of track Objects. + $.each(media.track || [], function(i,v) { + var track = document.createElement('track'); + track.setAttribute("kind", v.kind ? v.kind : ""); + track.setAttribute("src", v.src ? v.src : ""); + track.setAttribute("srclang", v.srclang ? v.srclang : ""); + track.setAttribute("label", v.label ? v.label : ""); + if(v.def) { + track.setAttribute("default", v.def); + } + $media.append(track); + }); + + this.htmlElement.media.src = this.status.src; + + if(this.options.preload !== 'none') { + this._html_load(); // See function for comments + } + this._trigger($.jPlayer.event.timeupdate); // The flash generates this event for its solution. + }, + _html_setFormat: function(media) { + var self = this; + // Always finds a format due to checks in setMedia() + $.each(this.formats, function(priority, format) { + if(self.html.support[format] && media[format]) { + self.status.src = media[format]; + self.status.format[format] = true; + self.status.formatType = format; + return false; + } + }); + }, + _html_setAudio: function(media) { + this._html_setFormat(media); + this.htmlElement.media = this.htmlElement.audio; + this._html_initMedia(media); + }, + _html_setVideo: function(media) { + this._html_setFormat(media); + if(this.status.nativeVideoControls) { + this.htmlElement.video.poster = this._validString(media.poster) ? media.poster : ""; + } + this.htmlElement.media = this.htmlElement.video; + this._html_initMedia(media); + }, + _html_resetMedia: function() { + if(this.htmlElement.media) { + if(this.htmlElement.media.id === this.internal.video.id && !this.status.nativeVideoControls) { + this.internal.video.jq.css({'width':'0px', 'height':'0px'}); + } + this.htmlElement.media.pause(); + } + }, + _html_clearMedia: function() { + if(this.htmlElement.media) { + this.htmlElement.media.src = "about:blank"; + // The following load() is only required for Firefox 3.6 (PowerMacs). + // Recent HTMl5 browsers only require the src change. Due to changes in W3C spec and load() effect. + this.htmlElement.media.load(); // Stops an old, "in progress" download from continuing the download. Triggers the loadstart, error and emptied events, due to the empty src. Also an abort event if a download was in progress. + } + }, + _html_load: function() { + // This function remains to allow the early HTML5 browsers to work, such as Firefox 3.6 + // A change in the W3C spec for the media.load() command means that this is no longer necessary. + // This command should be removed and actually causes minor undesirable effects on some browsers. Such as loading the whole file and not only the metadata. + if(this.status.waitForLoad) { + this.status.waitForLoad = false; + this.htmlElement.media.load(); + } + clearTimeout(this.internal.htmlDlyCmdId); + }, + _html_play: function(time) { + var self = this, + media = this.htmlElement.media; + + this.androidFix.pause = false; // Cancel the pause fix. + + this._html_load(); // Loads if required and clears any delayed commands. + + // Setup the Android Fix. + if(this.androidFix.setMedia) { + this.androidFix.play = true; + this.androidFix.time = time; + + } else if(!isNaN(time)) { + + // Attempt to play it, since iOS has been ignoring commands + if(this.internal.cmdsIgnored) { + media.play(); + } + + try { + // !media.seekable is for old HTML5 browsers, like Firefox 3.6. + // Checking seekable.length is important for iOS6 to work with setMedia().play(time) + if(!media.seekable || typeof media.seekable === "object" && media.seekable.length > 0) { + media.currentTime = time; + media.play(); + } else { + throw 1; + } + } catch(err) { + this.internal.htmlDlyCmdId = setTimeout(function() { + self.play(time); + }, 250); + return; // Cancel execution and wait for the delayed command. + } + } else { + media.play(); + } + this._html_checkWaitForPlay(); + }, + _html_pause: function(time) { + var self = this, + media = this.htmlElement.media; + + this.androidFix.play = false; // Cancel the play fix. + + if(time > 0) { // We do not want the stop() command, which does pause(0), causing a load operation. + this._html_load(); // Loads if required and clears any delayed commands. + } else { + clearTimeout(this.internal.htmlDlyCmdId); + } + + // Order of these commands is important for Safari (Win) and IE9. Pause then change currentTime. + media.pause(); + + // Setup the Android Fix. + if(this.androidFix.setMedia) { + this.androidFix.pause = true; + this.androidFix.time = time; + + } else if(!isNaN(time)) { + try { + if(!media.seekable || typeof media.seekable === "object" && media.seekable.length > 0) { + media.currentTime = time; + } else { + throw 1; + } + } catch(err) { + this.internal.htmlDlyCmdId = setTimeout(function() { + self.pause(time); + }, 250); + return; // Cancel execution and wait for the delayed command. + } + } + if(time > 0) { // Avoids a setMedia() followed by stop() or pause(0) hiding the video play button. + this._html_checkWaitForPlay(); + } + }, + _html_playHead: function(percent) { + var self = this, + media = this.htmlElement.media; + + this._html_load(); // Loads if required and clears any delayed commands. + + // This playHead() method needs a refactor to apply the android fix. + + try { + if(typeof media.seekable === "object" && media.seekable.length > 0) { + media.currentTime = percent * media.seekable.end(media.seekable.length-1) / 100; + } else if(media.duration > 0 && !isNaN(media.duration)) { + media.currentTime = percent * media.duration / 100; + } else { + throw "e"; + } + } catch(err) { + this.internal.htmlDlyCmdId = setTimeout(function() { + self.playHead(percent); + }, 250); + return; // Cancel execution and wait for the delayed command. + } + if(!this.status.waitForLoad) { + this._html_checkWaitForPlay(); + } + }, + _html_checkWaitForPlay: function() { + if(this.status.waitForPlay) { + this.status.waitForPlay = false; + if(this.css.jq.videoPlay.length) { + this.css.jq.videoPlay.hide(); + } + if(this.status.video) { + this.internal.poster.jq.hide(); + this.internal.video.jq.css({'width': this.status.width, 'height': this.status.height}); + } + } + }, + _html_setProperty: function(property, value) { + if(this.html.audio.available) { + this.htmlElement.audio[property] = value; + } + if(this.html.video.available) { + this.htmlElement.video[property] = value; + } + }, + _aurora_setAudio: function(media) { + var self = this; + + // Always finds a format due to checks in setMedia() + $.each(this.formats, function(priority, format) { + if(self.aurora.support[format] && media[format]) { + self.status.src = media[format]; + self.status.format[format] = true; + self.status.formatType = format; + + return false; + } + }); + + this.aurora.player = new AV.Player.fromURL(this.status.src); + this._addAuroraEventListeners(this.aurora.player, this.aurora); + + if(this.options.preload === 'auto') { + this._aurora_load(); + this.status.waitForLoad = false; + } + }, + _aurora_resetMedia: function() { + if (this.aurora.player) { + this.aurora.player.stop(); + } + }, + _aurora_clearMedia: function() { + // Nothing to clear. + }, + _aurora_load: function() { + if(this.status.waitForLoad) { + this.status.waitForLoad = false; + this.aurora.player.preload(); + } + }, + _aurora_play: function(time) { + if (!this.status.waitForLoad) { + if (!isNaN(time)) { + this.aurora.player.seek(time); + } + } + if (!this.aurora.player.playing) { + this.aurora.player.play(); + } + this.status.waitForLoad = false; + this._aurora_checkWaitForPlay(); + + // No event from the player, update UI now. + this._updateButtons(true); + this._trigger($.jPlayer.event.play); + }, + _aurora_pause: function(time) { + if (!isNaN(time)) { + this.aurora.player.seek(time * 1000); + } + this.aurora.player.pause(); + + if(time > 0) { // Avoids a setMedia() followed by stop() or pause(0) hiding the video play button. + this._aurora_checkWaitForPlay(); + } + + // No event from the player, update UI now. + this._updateButtons(false); + this._trigger($.jPlayer.event.pause); + }, + _aurora_playHead: function(percent) { + if(this.aurora.player.duration > 0) { + // The seek() sould be in milliseconds, but the only codec that works with seek (aac.js) uses seconds. + this.aurora.player.seek(percent * this.aurora.player.duration / 100); // Using seconds + } + + if(!this.status.waitForLoad) { + this._aurora_checkWaitForPlay(); + } + }, + _aurora_checkWaitForPlay: function() { + if(this.status.waitForPlay) { + this.status.waitForPlay = false; + } + }, + _aurora_volume: function(v) { + this.aurora.player.volume = v * 100; + }, + _aurora_mute: function(m) { + if (m) { + this.aurora.properties.lastvolume = this.aurora.player.volume; + this.aurora.player.volume = 0; + } else { + this.aurora.player.volume = this.aurora.properties.lastvolume; + } + this.aurora.properties.muted = m; + }, + _flash_setAudio: function(media) { + var self = this; + try { + // Always finds a format due to checks in setMedia() + $.each(this.formats, function(priority, format) { + if(self.flash.support[format] && media[format]) { + switch (format) { + case "m4a" : + case "fla" : + self._getMovie().fl_setAudio_m4a(media[format]); + break; + case "mp3" : + self._getMovie().fl_setAudio_mp3(media[format]); + break; + case "rtmpa": + self._getMovie().fl_setAudio_rtmp(media[format]); + break; + } + self.status.src = media[format]; + self.status.format[format] = true; + self.status.formatType = format; + return false; + } + }); + + if(this.options.preload === 'auto') { + this._flash_load(); + this.status.waitForLoad = false; + } + } catch(err) { this._flashError(err); } + }, + _flash_setVideo: function(media) { + var self = this; + try { + // Always finds a format due to checks in setMedia() + $.each(this.formats, function(priority, format) { + if(self.flash.support[format] && media[format]) { + switch (format) { + case "m4v" : + case "flv" : + self._getMovie().fl_setVideo_m4v(media[format]); + break; + case "rtmpv": + self._getMovie().fl_setVideo_rtmp(media[format]); + break; + } + self.status.src = media[format]; + self.status.format[format] = true; + self.status.formatType = format; + return false; + } + }); + + if(this.options.preload === 'auto') { + this._flash_load(); + this.status.waitForLoad = false; + } + } catch(err) { this._flashError(err); } + }, + _flash_resetMedia: function() { + this.internal.flash.jq.css({'width':'0px', 'height':'0px'}); // Must do via CSS as setting attr() to zero causes a jQuery error in IE. + this._flash_pause(NaN); + }, + _flash_clearMedia: function() { + try { + this._getMovie().fl_clearMedia(); + } catch(err) { this._flashError(err); } + }, + _flash_load: function() { + try { + this._getMovie().fl_load(); + } catch(err) { this._flashError(err); } + this.status.waitForLoad = false; + }, + _flash_play: function(time) { + try { + this._getMovie().fl_play(time); + } catch(err) { this._flashError(err); } + this.status.waitForLoad = false; + this._flash_checkWaitForPlay(); + }, + _flash_pause: function(time) { + try { + this._getMovie().fl_pause(time); + } catch(err) { this._flashError(err); } + if(time > 0) { // Avoids a setMedia() followed by stop() or pause(0) hiding the video play button. + this.status.waitForLoad = false; + this._flash_checkWaitForPlay(); + } + }, + _flash_playHead: function(p) { + try { + this._getMovie().fl_play_head(p); + } catch(err) { this._flashError(err); } + if(!this.status.waitForLoad) { + this._flash_checkWaitForPlay(); + } + }, + _flash_checkWaitForPlay: function() { + if(this.status.waitForPlay) { + this.status.waitForPlay = false; + if(this.css.jq.videoPlay.length) { + this.css.jq.videoPlay.hide(); + } + if(this.status.video) { + this.internal.poster.jq.hide(); + this.internal.flash.jq.css({'width': this.status.width, 'height': this.status.height}); + } + } + }, + _flash_volume: function(v) { + try { + this._getMovie().fl_volume(v); + } catch(err) { this._flashError(err); } + }, + _flash_mute: function(m) { + try { + this._getMovie().fl_mute(m); + } catch(err) { this._flashError(err); } + }, + _getMovie: function() { + return document[this.internal.flash.id]; + }, + _getFlashPluginVersion: function() { + + // _getFlashPluginVersion() code influenced by: + // - FlashReplace 1.01: http://code.google.com/p/flashreplace/ + // - SWFObject 2.2: http://code.google.com/p/swfobject/ + + var version = 0, + flash; + if(window.ActiveXObject) { + try { + flash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); + if (flash) { // flash will return null when ActiveX is disabled + var v = flash.GetVariable("$version"); + if(v) { + v = v.split(" ")[1].split(","); + version = parseInt(v[0], 10) + "." + parseInt(v[1], 10); + } + } + } catch(e) {} + } + else if(navigator.plugins && navigator.mimeTypes.length > 0) { + flash = navigator.plugins["Shockwave Flash"]; + if(flash) { + version = navigator.plugins["Shockwave Flash"].description.replace(/.*\s(\d+\.\d+).*/, "$1"); + } + } + return version * 1; // Converts to a number + }, + _checkForFlash: function (version) { + var flashOk = false; + if(this._getFlashPluginVersion() >= version) { + flashOk = true; + } + return flashOk; + }, + _validString: function(url) { + return (url && typeof url === "string"); // Empty strings return false + }, + _limitValue: function(value, min, max) { + return (value < min) ? min : ((value > max) ? max : value); + }, + _urlNotSetError: function(context) { + this._error( { + type: $.jPlayer.error.URL_NOT_SET, + context: context, + message: $.jPlayer.errorMsg.URL_NOT_SET, + hint: $.jPlayer.errorHint.URL_NOT_SET + }); + }, + _flashError: function(error) { + var errorType; + if(!this.internal.ready) { + errorType = "FLASH"; + } else { + errorType = "FLASH_DISABLED"; + } + this._error( { + type: $.jPlayer.error[errorType], + context: this.internal.flash.swf, + message: $.jPlayer.errorMsg[errorType] + error.message, + hint: $.jPlayer.errorHint[errorType] + }); + // Allow the audio player to recover if display:none and then shown again, or with position:fixed on Firefox. + // This really only affects audio in a media player, as an audio player could easily move the jPlayer element away from such issues. + this.internal.flash.jq.css({'width':'1px', 'height':'1px'}); + }, + _error: function(error) { + this._trigger($.jPlayer.event.error, error); + if(this.options.errorAlerts) { + this._alert("Error!" + (error.message ? "\n" + error.message : "") + (error.hint ? "\n" + error.hint : "") + "\nContext: " + error.context); + } + }, + _warning: function(warning) { + this._trigger($.jPlayer.event.warning, undefined, warning); + if(this.options.warningAlerts) { + this._alert("Warning!" + (warning.message ? "\n" + warning.message : "") + (warning.hint ? "\n" + warning.hint : "") + "\nContext: " + warning.context); + } + }, + _alert: function(message) { + var msg = "jPlayer " + this.version.script + " : id='" + this.internal.self.id +"' : " + message; + if(!this.options.consoleAlerts) { + alert(msg); + } else if(window.console && window.console.log) { + window.console.log(msg); + } + }, + _emulateHtmlBridge: function() { + var self = this; + + // Emulate methods on jPlayer's DOM element. + $.each( $.jPlayer.emulateMethods.split(/\s+/g), function(i, name) { + self.internal.domNode[name] = function(arg) { + self[name](arg); + }; + + }); + + // Bubble jPlayer events to its DOM element. + $.each($.jPlayer.event, function(eventName,eventType) { + var nativeEvent = true; + $.each( $.jPlayer.reservedEvent.split(/\s+/g), function(i, name) { + if(name === eventName) { + nativeEvent = false; + return false; + } + }); + if(nativeEvent) { + self.element.bind(eventType + ".jPlayer.jPlayerHtml", function() { // With .jPlayer & .jPlayerHtml namespaces. + self._emulateHtmlUpdate(); + var domEvent = document.createEvent("Event"); + domEvent.initEvent(eventName, false, true); + self.internal.domNode.dispatchEvent(domEvent); + }); + } + // The error event would require a special case + }); + + // IE9 has a readyState property on all elements. The document should have it, but all (except media) elements inherit it in IE9. This conflicts with Popcorn, which polls the readyState. + }, + _emulateHtmlUpdate: function() { + var self = this; + + $.each( $.jPlayer.emulateStatus.split(/\s+/g), function(i, name) { + self.internal.domNode[name] = self.status[name]; + }); + $.each( $.jPlayer.emulateOptions.split(/\s+/g), function(i, name) { + self.internal.domNode[name] = self.options[name]; + }); + }, + _destroyHtmlBridge: function() { + var self = this; + + // Bridge event handlers are also removed by destroy() through .jPlayer namespace. + this.element.unbind(".jPlayerHtml"); // Remove all event handlers created by the jPlayer bridge. So you can change the emulateHtml option. + + // Remove the methods and properties + var emulated = $.jPlayer.emulateMethods + " " + $.jPlayer.emulateStatus + " " + $.jPlayer.emulateOptions; + $.each( emulated.split(/\s+/g), function(i, name) { + delete self.internal.domNode[name]; + }); + } + }; + + $.jPlayer.error = { + FLASH: "e_flash", + FLASH_DISABLED: "e_flash_disabled", + NO_SOLUTION: "e_no_solution", + NO_SUPPORT: "e_no_support", + URL: "e_url", + URL_NOT_SET: "e_url_not_set", + VERSION: "e_version" + }; + + $.jPlayer.errorMsg = { + FLASH: "jPlayer's Flash fallback is not configured correctly, or a command was issued before the jPlayer Ready event. Details: ", // Used in: _flashError() + FLASH_DISABLED: "jPlayer's Flash fallback has been disabled by the browser due to the CSS rules you have used. Details: ", // Used in: _flashError() + NO_SOLUTION: "No solution can be found by jPlayer in this browser. Neither HTML nor Flash can be used.", // Used in: _init() + NO_SUPPORT: "It is not possible to play any media format provided in setMedia() on this browser using your current options.", // Used in: setMedia() + URL: "Media URL could not be loaded.", // Used in: jPlayerFlashEvent() and _addHtmlEventListeners() + URL_NOT_SET: "Attempt to issue media playback commands, while no media url is set.", // Used in: load(), play(), pause(), stop() and playHead() + VERSION: "jPlayer " + $.jPlayer.prototype.version.script + " needs Jplayer.swf version " + $.jPlayer.prototype.version.needFlash + " but found " // Used in: jPlayerReady() + }; + + $.jPlayer.errorHint = { + FLASH: "Check your swfPath option and that Jplayer.swf is there.", + FLASH_DISABLED: "Check that you have not display:none; the jPlayer entity or any ancestor.", + NO_SOLUTION: "Review the jPlayer options: support and supplied.", + NO_SUPPORT: "Video or audio formats defined in the supplied option are missing.", + URL: "Check media URL is valid.", + URL_NOT_SET: "Use setMedia() to set the media URL.", + VERSION: "Update jPlayer files." + }; + + $.jPlayer.warning = { + CSS_SELECTOR_COUNT: "e_css_selector_count", + CSS_SELECTOR_METHOD: "e_css_selector_method", + CSS_SELECTOR_STRING: "e_css_selector_string", + OPTION_KEY: "e_option_key" + }; + + $.jPlayer.warningMsg = { + CSS_SELECTOR_COUNT: "The number of css selectors found did not equal one: ", + CSS_SELECTOR_METHOD: "The methodName given in jPlayer('cssSelector') is not a valid jPlayer method.", + CSS_SELECTOR_STRING: "The methodCssSelector given in jPlayer('cssSelector') is not a String or is empty.", + OPTION_KEY: "The option requested in jPlayer('option') is undefined." + }; + + $.jPlayer.warningHint = { + CSS_SELECTOR_COUNT: "Check your css selector and the ancestor.", + CSS_SELECTOR_METHOD: "Check your method name.", + CSS_SELECTOR_STRING: "Check your css selector is a string.", + OPTION_KEY: "Check your option name." + }; +})); diff --git a/sites/all/libraries/jplayer/jquery.jplayer.min.js b/sites/all/libraries/jplayer/jquery.jplayer.min.js new file mode 100755 index 0000000000..99f64d71c5 --- /dev/null +++ b/sites/all/libraries/jplayer/jquery.jplayer.min.js @@ -0,0 +1,3 @@ +/*! jPlayer 2.9.2 for jQuery ~ (c) 2009-2014 Happyworm Ltd ~ MIT License */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):b("object"==typeof exports?require("jquery"):a.jQuery?a.jQuery:a.Zepto)}(this,function(a,b){a.fn.jPlayer=function(c){var d="jPlayer",e="string"==typeof c,f=Array.prototype.slice.call(arguments,1),g=this;return c=!e&&f.length?a.extend.apply(null,[!0,c].concat(f)):c,e&&"_"===c.charAt(0)?g:(this.each(e?function(){var e=a(this).data(d),h=e&&a.isFunction(e[c])?e[c].apply(e,f):e;return h!==e&&h!==b?(g=h,!1):void 0}:function(){var b=a(this).data(d);b?b.option(c||{}):a(this).data(d,new a.jPlayer(c,this))}),g)},a.jPlayer=function(b,c){if(arguments.length){this.element=a(c),this.options=a.extend(!0,{},this.options,b);var d=this;this.element.bind("remove.jPlayer",function(){d.destroy()}),this._init()}},"function"!=typeof a.fn.stop&&(a.fn.stop=function(){}),a.jPlayer.emulateMethods="load play pause",a.jPlayer.emulateStatus="src readyState networkState currentTime duration paused ended playbackRate",a.jPlayer.emulateOptions="muted volume",a.jPlayer.reservedEvent="ready flashreset resize repeat error warning",a.jPlayer.event={},a.each(["ready","setmedia","flashreset","resize","repeat","click","error","warning","loadstart","progress","suspend","abort","emptied","stalled","play","pause","loadedmetadata","loadeddata","waiting","playing","canplay","canplaythrough","seeking","seeked","timeupdate","ended","ratechange","durationchange","volumechange"],function(){a.jPlayer.event[this]="jPlayer_"+this}),a.jPlayer.htmlEvent=["loadstart","abort","emptied","stalled","loadedmetadata","canplay","canplaythrough"],a.jPlayer.pause=function(){a.jPlayer.prototype.destroyRemoved(),a.each(a.jPlayer.prototype.instances,function(a,b){b.data("jPlayer").status.srcSet&&b.jPlayer("pause")})},a.jPlayer.timeFormat={showHour:!1,showMin:!0,showSec:!0,padHour:!1,padMin:!0,padSec:!0,sepHour:":",sepMin:":",sepSec:""};var c=function(){this.init()};c.prototype={init:function(){this.options={timeFormat:a.jPlayer.timeFormat}},time:function(a){a=a&&"number"==typeof a?a:0;var b=new Date(1e3*a),c=b.getUTCHours(),d=this.options.timeFormat.showHour?b.getUTCMinutes():b.getUTCMinutes()+60*c,e=this.options.timeFormat.showMin?b.getUTCSeconds():b.getUTCSeconds()+60*d,f=this.options.timeFormat.padHour&&10>c?"0"+c:c,g=this.options.timeFormat.padMin&&10>d?"0"+d:d,h=this.options.timeFormat.padSec&&10>e?"0"+e:e,i="";return i+=this.options.timeFormat.showHour?f+this.options.timeFormat.sepHour:"",i+=this.options.timeFormat.showMin?g+this.options.timeFormat.sepMin:"",i+=this.options.timeFormat.showSec?h+this.options.timeFormat.sepSec:""}};var d=new c;a.jPlayer.convertTime=function(a){return d.time(a)},a.jPlayer.uaBrowser=function(a){var b=a.toLowerCase(),c=/(webkit)[ \/]([\w.]+)/,d=/(opera)(?:.*version)?[ \/]([\w.]+)/,e=/(msie) ([\w.]+)/,f=/(mozilla)(?:.*? rv:([\w.]+))?/,g=c.exec(b)||d.exec(b)||e.exec(b)||b.indexOf("compatible")<0&&f.exec(b)||[];return{browser:g[1]||"",version:g[2]||"0"}},a.jPlayer.uaPlatform=function(a){var b=a.toLowerCase(),c=/(ipad|iphone|ipod|android|blackberry|playbook|windows ce|webos)/,d=/(ipad|playbook)/,e=/(android)/,f=/(mobile)/,g=c.exec(b)||[],h=d.exec(b)||!f.exec(b)&&e.exec(b)||[];return g[1]&&(g[1]=g[1].replace(/\s/g,"_")),{platform:g[1]||"",tablet:h[1]||""}},a.jPlayer.browser={},a.jPlayer.platform={};var e=a.jPlayer.uaBrowser(navigator.userAgent);e.browser&&(a.jPlayer.browser[e.browser]=!0,a.jPlayer.browser.version=e.version);var f=a.jPlayer.uaPlatform(navigator.userAgent);f.platform&&(a.jPlayer.platform[f.platform]=!0,a.jPlayer.platform.mobile=!f.tablet,a.jPlayer.platform.tablet=!!f.tablet),a.jPlayer.getDocMode=function(){var b;return a.jPlayer.browser.msie&&(document.documentMode?b=document.documentMode:(b=5,document.compatMode&&"CSS1Compat"===document.compatMode&&(b=7))),b},a.jPlayer.browser.documentMode=a.jPlayer.getDocMode(),a.jPlayer.nativeFeatures={init:function(){var a,b,c,d=document,e=d.createElement("video"),f={w3c:["fullscreenEnabled","fullscreenElement","requestFullscreen","exitFullscreen","fullscreenchange","fullscreenerror"],moz:["mozFullScreenEnabled","mozFullScreenElement","mozRequestFullScreen","mozCancelFullScreen","mozfullscreenchange","mozfullscreenerror"],webkit:["","webkitCurrentFullScreenElement","webkitRequestFullScreen","webkitCancelFullScreen","webkitfullscreenchange",""],webkitVideo:["webkitSupportsFullscreen","webkitDisplayingFullscreen","webkitEnterFullscreen","webkitExitFullscreen","",""],ms:["","msFullscreenElement","msRequestFullscreen","msExitFullscreen","MSFullscreenChange","MSFullscreenError"]},g=["w3c","moz","webkit","webkitVideo","ms"];for(this.fullscreen=a={support:{w3c:!!d[f.w3c[0]],moz:!!d[f.moz[0]],webkit:"function"==typeof d[f.webkit[3]],webkitVideo:"function"==typeof e[f.webkitVideo[2]],ms:"function"==typeof e[f.ms[2]]},used:{}},b=0,c=g.length;c>b;b++){var h=g[b];if(a.support[h]){a.spec=h,a.used[h]=!0;break}}if(a.spec){var i=f[a.spec];a.api={fullscreenEnabled:!0,fullscreenElement:function(a){return a=a?a:d,a[i[1]]},requestFullscreen:function(a){return a[i[2]]()},exitFullscreen:function(a){return a=a?a:d,a[i[3]]()}},a.event={fullscreenchange:i[4],fullscreenerror:i[5]}}else a.api={fullscreenEnabled:!1,fullscreenElement:function(){return null},requestFullscreen:function(){},exitFullscreen:function(){}},a.event={}}},a.jPlayer.nativeFeatures.init(),a.jPlayer.focus=null,a.jPlayer.keyIgnoreElementNames="A INPUT TEXTAREA SELECT BUTTON";var g=function(b){var c,d=a.jPlayer.focus;d&&(a.each(a.jPlayer.keyIgnoreElementNames.split(/\s+/g),function(a,d){return b.target.nodeName.toUpperCase()===d.toUpperCase()?(c=!0,!1):void 0}),c||a.each(d.options.keyBindings,function(c,e){return e&&a.isFunction(e.fn)&&("number"==typeof e.key&&b.which===e.key||"string"==typeof e.key&&b.key===e.key)?(b.preventDefault(),e.fn(d),!1):void 0}))};a.jPlayer.keys=function(b){var c="keydown.jPlayer";a(document.documentElement).unbind(c),b&&a(document.documentElement).bind(c,g)},a.jPlayer.keys(!0),a.jPlayer.prototype={count:0,version:{script:"2.9.2",needFlash:"2.9.0",flash:"unknown"},options:{swfPath:"js",solution:"html, flash",supplied:"mp3",auroraFormats:"wav",preload:"metadata",volume:.8,muted:!1,remainingDuration:!1,toggleDuration:!1,captureDuration:!0,playbackRate:1,defaultPlaybackRate:1,minPlaybackRate:.5,maxPlaybackRate:4,wmode:"opaque",backgroundColor:"#000000",cssSelectorAncestor:"#jp_container_1",cssSelector:{videoPlay:".jp-video-play",play:".jp-play",pause:".jp-pause",stop:".jp-stop",seekBar:".jp-seek-bar",playBar:".jp-play-bar",mute:".jp-mute",unmute:".jp-unmute",volumeBar:".jp-volume-bar",volumeBarValue:".jp-volume-bar-value",volumeMax:".jp-volume-max",playbackRateBar:".jp-playback-rate-bar",playbackRateBarValue:".jp-playback-rate-bar-value",currentTime:".jp-current-time",duration:".jp-duration",title:".jp-title",fullScreen:".jp-full-screen",restoreScreen:".jp-restore-screen",repeat:".jp-repeat",repeatOff:".jp-repeat-off",gui:".jp-gui",noSolution:".jp-no-solution"},stateClass:{playing:"jp-state-playing",seeking:"jp-state-seeking",muted:"jp-state-muted",looped:"jp-state-looped",fullScreen:"jp-state-full-screen",noVolume:"jp-state-no-volume"},useStateClassSkin:!1,autoBlur:!0,smoothPlayBar:!1,fullScreen:!1,fullWindow:!1,autohide:{restored:!1,full:!0,fadeIn:200,fadeOut:600,hold:1e3},loop:!1,repeat:function(b){b.jPlayer.options.loop?a(this).unbind(".jPlayerRepeat").bind(a.jPlayer.event.ended+".jPlayer.jPlayerRepeat",function(){a(this).jPlayer("play")}):a(this).unbind(".jPlayerRepeat")},nativeVideoControls:{},noFullWindow:{msie:/msie [0-6]\./,ipad:/ipad.*?os [0-4]\./,iphone:/iphone/,ipod:/ipod/,android_pad:/android [0-3]\.(?!.*?mobile)/,android_phone:/(?=.*android)(?!.*chrome)(?=.*mobile)/,blackberry:/blackberry/,windows_ce:/windows ce/,iemobile:/iemobile/,webos:/webos/},noVolume:{ipad:/ipad/,iphone:/iphone/,ipod:/ipod/,android_pad:/android(?!.*?mobile)/,android_phone:/android.*?mobile/,blackberry:/blackberry/,windows_ce:/windows ce/,iemobile:/iemobile/,webos:/webos/,playbook:/playbook/},timeFormat:{},keyEnabled:!1,audioFullScreen:!1,keyBindings:{play:{key:80,fn:function(a){a.status.paused?a.play():a.pause()}},fullScreen:{key:70,fn:function(a){(a.status.video||a.options.audioFullScreen)&&a._setOption("fullScreen",!a.options.fullScreen)}},muted:{key:77,fn:function(a){a._muted(!a.options.muted)}},volumeUp:{key:190,fn:function(a){a.volume(a.options.volume+.1)}},volumeDown:{key:188,fn:function(a){a.volume(a.options.volume-.1)}},loop:{key:76,fn:function(a){a._loop(!a.options.loop)}}},verticalVolume:!1,verticalPlaybackRate:!1,globalVolume:!1,idPrefix:"jp",noConflict:"jQuery",emulateHtml:!1,consoleAlerts:!0,errorAlerts:!1,warningAlerts:!1},optionsAudio:{size:{width:"0px",height:"0px",cssClass:""},sizeFull:{width:"0px",height:"0px",cssClass:""}},optionsVideo:{size:{width:"480px",height:"270px",cssClass:"jp-video-270p"},sizeFull:{width:"100%",height:"100%",cssClass:"jp-video-full"}},instances:{},status:{src:"",media:{},paused:!0,format:{},formatType:"",waitForPlay:!0,waitForLoad:!0,srcSet:!1,video:!1,seekPercent:0,currentPercentRelative:0,currentPercentAbsolute:0,currentTime:0,duration:0,remaining:0,videoWidth:0,videoHeight:0,readyState:0,networkState:0,playbackRate:1,ended:0},internal:{ready:!1},solution:{html:!0,aurora:!0,flash:!0},format:{mp3:{codec:"audio/mpeg",flashCanPlay:!0,media:"audio"},m4a:{codec:'audio/mp4; codecs="mp4a.40.2"',flashCanPlay:!0,media:"audio"},m3u8a:{codec:'application/vnd.apple.mpegurl; codecs="mp4a.40.2"',flashCanPlay:!1,media:"audio"},m3ua:{codec:"audio/mpegurl",flashCanPlay:!1,media:"audio"},oga:{codec:'audio/ogg; codecs="vorbis, opus"',flashCanPlay:!1,media:"audio"},flac:{codec:"audio/x-flac",flashCanPlay:!1,media:"audio"},wav:{codec:'audio/wav; codecs="1"',flashCanPlay:!1,media:"audio"},webma:{codec:'audio/webm; codecs="vorbis"',flashCanPlay:!1,media:"audio"},fla:{codec:"audio/x-flv",flashCanPlay:!0,media:"audio"},rtmpa:{codec:'audio/rtmp; codecs="rtmp"',flashCanPlay:!0,media:"audio"},m4v:{codec:'video/mp4; codecs="avc1.42E01E, mp4a.40.2"',flashCanPlay:!0,media:"video"},m3u8v:{codec:'application/vnd.apple.mpegurl; codecs="avc1.42E01E, mp4a.40.2"',flashCanPlay:!1,media:"video"},m3uv:{codec:"audio/mpegurl",flashCanPlay:!1,media:"video"},ogv:{codec:'video/ogg; codecs="theora, vorbis"',flashCanPlay:!1,media:"video"},webmv:{codec:'video/webm; codecs="vorbis, vp8"',flashCanPlay:!1,media:"video"},flv:{codec:"video/x-flv",flashCanPlay:!0,media:"video"},rtmpv:{codec:'video/rtmp; codecs="rtmp"',flashCanPlay:!0,media:"video"}},_init:function(){var c=this;if(this.element.empty(),this.status=a.extend({},this.status),this.internal=a.extend({},this.internal),this.options.timeFormat=a.extend({},a.jPlayer.timeFormat,this.options.timeFormat),this.internal.cmdsIgnored=a.jPlayer.platform.ipad||a.jPlayer.platform.iphone||a.jPlayer.platform.ipod,this.internal.domNode=this.element.get(0),this.options.keyEnabled&&!a.jPlayer.focus&&(a.jPlayer.focus=this),this.androidFix={setMedia:!1,play:!1,pause:!1,time:0/0},a.jPlayer.platform.android&&(this.options.preload="auto"!==this.options.preload?"metadata":"auto"),this.formats=[],this.solutions=[],this.require={},this.htmlElement={},this.html={},this.html.audio={},this.html.video={},this.aurora={},this.aurora.formats=[],this.aurora.properties=[],this.flash={},this.css={},this.css.cs={},this.css.jq={},this.ancestorJq=[],this.options.volume=this._limitValue(this.options.volume,0,1),a.each(this.options.supplied.toLowerCase().split(","),function(b,d){var e=d.replace(/^\s+|\s+$/g,"");if(c.format[e]){var f=!1;a.each(c.formats,function(a,b){return e===b?(f=!0,!1):void 0}),f||c.formats.push(e)}}),a.each(this.options.solution.toLowerCase().split(","),function(b,d){var e=d.replace(/^\s+|\s+$/g,"");if(c.solution[e]){var f=!1;a.each(c.solutions,function(a,b){return e===b?(f=!0,!1):void 0}),f||c.solutions.push(e)}}),a.each(this.options.auroraFormats.toLowerCase().split(","),function(b,d){var e=d.replace(/^\s+|\s+$/g,"");if(c.format[e]){var f=!1;a.each(c.aurora.formats,function(a,b){return e===b?(f=!0,!1):void 0}),f||c.aurora.formats.push(e)}}),this.internal.instance="jp_"+this.count,this.instances[this.internal.instance]=this.element,this.element.attr("id")||this.element.attr("id",this.options.idPrefix+"_jplayer_"+this.count),this.internal.self=a.extend({},{id:this.element.attr("id"),jq:this.element}),this.internal.audio=a.extend({},{id:this.options.idPrefix+"_audio_"+this.count,jq:b}),this.internal.video=a.extend({},{id:this.options.idPrefix+"_video_"+this.count,jq:b}),this.internal.flash=a.extend({},{id:this.options.idPrefix+"_flash_"+this.count,jq:b,swf:this.options.swfPath+(".swf"!==this.options.swfPath.toLowerCase().slice(-4)?(this.options.swfPath&&"/"!==this.options.swfPath.slice(-1)?"/":"")+"jquery.jplayer.swf":"")}),this.internal.poster=a.extend({},{id:this.options.idPrefix+"_poster_"+this.count,jq:b}),a.each(a.jPlayer.event,function(a,d){c.options[a]!==b&&(c.element.bind(d+".jPlayer",c.options[a]),c.options[a]=b)}),this.require.audio=!1,this.require.video=!1,a.each(this.formats,function(a,b){c.require[c.format[b].media]=!0}),this.options=this.require.video?a.extend(!0,{},this.optionsVideo,this.options):a.extend(!0,{},this.optionsAudio,this.options),this._setSize(),this.status.nativeVideoControls=this._uaBlocklist(this.options.nativeVideoControls),this.status.noFullWindow=this._uaBlocklist(this.options.noFullWindow),this.status.noVolume=this._uaBlocklist(this.options.noVolume),a.jPlayer.nativeFeatures.fullscreen.api.fullscreenEnabled&&this._fullscreenAddEventListeners(),this._restrictNativeVideoControls(),this.htmlElement.poster=document.createElement("img"),this.htmlElement.poster.id=this.internal.poster.id,this.htmlElement.poster.onload=function(){(!c.status.video||c.status.waitForPlay)&&c.internal.poster.jq.show()},this.element.append(this.htmlElement.poster),this.internal.poster.jq=a("#"+this.internal.poster.id),this.internal.poster.jq.css({width:this.status.width,height:this.status.height}),this.internal.poster.jq.hide(),this.internal.poster.jq.bind("click.jPlayer",function(){c._trigger(a.jPlayer.event.click)}),this.html.audio.available=!1,this.require.audio&&(this.htmlElement.audio=document.createElement("audio"),this.htmlElement.audio.id=this.internal.audio.id,this.html.audio.available=!!this.htmlElement.audio.canPlayType&&this._testCanPlayType(this.htmlElement.audio)),this.html.video.available=!1,this.require.video&&(this.htmlElement.video=document.createElement("video"),this.htmlElement.video.id=this.internal.video.id,this.html.video.available=!!this.htmlElement.video.canPlayType&&this._testCanPlayType(this.htmlElement.video)),this.flash.available=this._checkForFlash(10.1),this.html.canPlay={},this.aurora.canPlay={},this.flash.canPlay={},a.each(this.formats,function(b,d){c.html.canPlay[d]=c.html[c.format[d].media].available&&""!==c.htmlElement[c.format[d].media].canPlayType(c.format[d].codec),c.aurora.canPlay[d]=a.inArray(d,c.aurora.formats)>-1,c.flash.canPlay[d]=c.format[d].flashCanPlay&&c.flash.available}),this.html.desired=!1,this.aurora.desired=!1,this.flash.desired=!1,a.each(this.solutions,function(b,d){if(0===b)c[d].desired=!0;else{var e=!1,f=!1;a.each(c.formats,function(a,b){c[c.solutions[0]].canPlay[b]&&("video"===c.format[b].media?f=!0:e=!0)}),c[d].desired=c.require.audio&&!e||c.require.video&&!f}}),this.html.support={},this.aurora.support={},this.flash.support={},a.each(this.formats,function(a,b){c.html.support[b]=c.html.canPlay[b]&&c.html.desired,c.aurora.support[b]=c.aurora.canPlay[b]&&c.aurora.desired,c.flash.support[b]=c.flash.canPlay[b]&&c.flash.desired}),this.html.used=!1,this.aurora.used=!1,this.flash.used=!1,a.each(this.solutions,function(b,d){a.each(c.formats,function(a,b){return c[d].support[b]?(c[d].used=!0,!1):void 0})}),this._resetActive(),this._resetGate(),this._cssSelectorAncestor(this.options.cssSelectorAncestor),this.html.used||this.aurora.used||this.flash.used?this.css.jq.noSolution.length&&this.css.jq.noSolution.hide():(this._error({type:a.jPlayer.error.NO_SOLUTION,context:"{solution:'"+this.options.solution+"', supplied:'"+this.options.supplied+"'}",message:a.jPlayer.errorMsg.NO_SOLUTION,hint:a.jPlayer.errorHint.NO_SOLUTION}),this.css.jq.noSolution.length&&this.css.jq.noSolution.show()),this.flash.used){var d,e="jQuery="+encodeURI(this.options.noConflict)+"&id="+encodeURI(this.internal.self.id)+"&vol="+this.options.volume+"&muted="+this.options.muted;if(a.jPlayer.browser.msie&&(Number(a.jPlayer.browser.version)<9||a.jPlayer.browser.documentMode<9)){var f='',g=['','','','',''];d=document.createElement(f);for(var h=0;h0&&(d.internal.cmdsIgnored=!1),d._getHtmlStatus(b),d._updateInterface(),d._trigger(a.jPlayer.event.progress))},!1),b.addEventListener("loadeddata",function(){c.gate&&(d.androidFix.setMedia=!1,d.androidFix.play&&(d.androidFix.play=!1,d.play(d.androidFix.time)),d.androidFix.pause&&(d.androidFix.pause=!1,d.pause(d.androidFix.time)),d._trigger(a.jPlayer.event.loadeddata))},!1),b.addEventListener("timeupdate",function(){c.gate&&(d._getHtmlStatus(b),d._updateInterface(),d._trigger(a.jPlayer.event.timeupdate))},!1),b.addEventListener("durationchange",function(){c.gate&&(d._getHtmlStatus(b),d._updateInterface(),d._trigger(a.jPlayer.event.durationchange))},!1),b.addEventListener("play",function(){c.gate&&(d._updateButtons(!0),d._html_checkWaitForPlay(),d._trigger(a.jPlayer.event.play))},!1),b.addEventListener("playing",function(){c.gate&&(d._updateButtons(!0),d._seeked(),d._trigger(a.jPlayer.event.playing))},!1),b.addEventListener("pause",function(){c.gate&&(d._updateButtons(!1),d._trigger(a.jPlayer.event.pause))},!1),b.addEventListener("waiting",function(){c.gate&&(d._seeking(),d._trigger(a.jPlayer.event.waiting))},!1),b.addEventListener("seeking",function(){c.gate&&(d._seeking(),d._trigger(a.jPlayer.event.seeking))},!1),b.addEventListener("seeked",function(){c.gate&&(d._seeked(),d._trigger(a.jPlayer.event.seeked))},!1),b.addEventListener("volumechange",function(){c.gate&&(d.options.volume=b.volume,d.options.muted=b.muted,d._updateMute(),d._updateVolume(),d._trigger(a.jPlayer.event.volumechange))},!1),b.addEventListener("ratechange",function(){c.gate&&(d.options.defaultPlaybackRate=b.defaultPlaybackRate,d.options.playbackRate=b.playbackRate,d._updatePlaybackRate(),d._trigger(a.jPlayer.event.ratechange))},!1),b.addEventListener("suspend",function(){c.gate&&(d._seeked(),d._trigger(a.jPlayer.event.suspend))},!1),b.addEventListener("ended",function(){c.gate&&(a.jPlayer.browser.webkit||(d.htmlElement.media.currentTime=0),d.htmlElement.media.pause(),d._updateButtons(!1),d._getHtmlStatus(b,!0),d._updateInterface(),d._trigger(a.jPlayer.event.ended))},!1),b.addEventListener("error",function(){c.gate&&(d._updateButtons(!1),d._seeked(),d.status.srcSet&&(clearTimeout(d.internal.htmlDlyCmdId),d.status.waitForLoad=!0,d.status.waitForPlay=!0,d.status.video&&!d.status.nativeVideoControls&&d.internal.video.jq.css({width:"0px",height:"0px"}),d._validString(d.status.media.poster)&&!d.status.nativeVideoControls&&d.internal.poster.jq.show(),d.css.jq.videoPlay.length&&d.css.jq.videoPlay.show(),d._error({type:a.jPlayer.error.URL,context:d.status.src,message:a.jPlayer.errorMsg.URL,hint:a.jPlayer.errorHint.URL})))},!1),a.each(a.jPlayer.htmlEvent,function(e,f){b.addEventListener(this,function(){c.gate&&d._trigger(a.jPlayer.event[f])},!1)})},_addAuroraEventListeners:function(b,c){var d=this;b.volume=100*this.options.volume,b.on("progress",function(){c.gate&&(d.internal.cmdsIgnored&&this.readyState>0&&(d.internal.cmdsIgnored=!1),d._getAuroraStatus(b),d._updateInterface(),d._trigger(a.jPlayer.event.progress),b.duration>0&&d._trigger(a.jPlayer.event.timeupdate))},!1),b.on("ready",function(){c.gate&&d._trigger(a.jPlayer.event.loadeddata)},!1),b.on("duration",function(){c.gate&&(d._getAuroraStatus(b),d._updateInterface(),d._trigger(a.jPlayer.event.durationchange))},!1),b.on("end",function(){c.gate&&(d._updateButtons(!1),d._getAuroraStatus(b,!0),d._updateInterface(),d._trigger(a.jPlayer.event.ended))},!1),b.on("error",function(){c.gate&&(d._updateButtons(!1),d._seeked(),d.status.srcSet&&(d.status.waitForLoad=!0,d.status.waitForPlay=!0,d.status.video&&!d.status.nativeVideoControls&&d.internal.video.jq.css({width:"0px",height:"0px"}),d._validString(d.status.media.poster)&&!d.status.nativeVideoControls&&d.internal.poster.jq.show(),d.css.jq.videoPlay.length&&d.css.jq.videoPlay.show(),d._error({type:a.jPlayer.error.URL,context:d.status.src,message:a.jPlayer.errorMsg.URL,hint:a.jPlayer.errorHint.URL})))},!1)},_getHtmlStatus:function(a,b){var c=0,d=0,e=0,f=0;isFinite(a.duration)&&(this.status.duration=a.duration),c=a.currentTime,d=this.status.duration>0?100*c/this.status.duration:0,"object"==typeof a.seekable&&a.seekable.length>0?(e=this.status.duration>0?100*a.seekable.end(a.seekable.length-1)/this.status.duration:100,f=this.status.duration>0?100*a.currentTime/a.seekable.end(a.seekable.length-1):0):(e=100,f=d),b&&(c=0,f=0,d=0),this.status.seekPercent=e,this.status.currentPercentRelative=f,this.status.currentPercentAbsolute=d,this.status.currentTime=c,this.status.remaining=this.status.duration-this.status.currentTime,this.status.videoWidth=a.videoWidth,this.status.videoHeight=a.videoHeight,this.status.readyState=a.readyState,this.status.networkState=a.networkState,this.status.playbackRate=a.playbackRate,this.status.ended=a.ended},_getAuroraStatus:function(a,b){var c=0,d=0,e=0,f=0;this.status.duration=a.duration/1e3,c=a.currentTime/1e3,d=this.status.duration>0?100*c/this.status.duration:0,a.buffered>0?(e=this.status.duration>0?a.buffered*this.status.duration/this.status.duration:100,f=this.status.duration>0?c/(a.buffered*this.status.duration):0):(e=100,f=d),b&&(c=0,f=0,d=0),this.status.seekPercent=e,this.status.currentPercentRelative=f,this.status.currentPercentAbsolute=d,this.status.currentTime=c,this.status.remaining=this.status.duration-this.status.currentTime,this.status.readyState=4,this.status.networkState=0,this.status.playbackRate=1,this.status.ended=!1},_resetStatus:function(){this.status=a.extend({},this.status,a.jPlayer.prototype.status)},_trigger:function(b,c,d){var e=a.Event(b);e.jPlayer={},e.jPlayer.version=a.extend({},this.version),e.jPlayer.options=a.extend(!0,{},this.options),e.jPlayer.status=a.extend(!0,{},this.status),e.jPlayer.html=a.extend(!0,{},this.html),e.jPlayer.aurora=a.extend(!0,{},this.aurora),e.jPlayer.flash=a.extend(!0,{},this.flash),c&&(e.jPlayer.error=a.extend({},c)),d&&(e.jPlayer.warning=a.extend({},d)),this.element.trigger(e)},jPlayerFlashEvent:function(b,c){if(b===a.jPlayer.event.ready)if(this.internal.ready){if(this.flash.gate){if(this.status.srcSet){var d=this.status.currentTime,e=this.status.paused;this.setMedia(this.status.media),this.volumeWorker(this.options.volume),d>0&&(e?this.pause(d):this.play(d))}this._trigger(a.jPlayer.event.flashreset)}}else this.internal.ready=!0,this.internal.flash.jq.css({width:"0px",height:"0px"}),this.version.flash=c.version,this.version.needFlash!==this.version.flash&&this._error({type:a.jPlayer.error.VERSION,context:this.version.flash,message:a.jPlayer.errorMsg.VERSION+this.version.flash,hint:a.jPlayer.errorHint.VERSION}),this._trigger(a.jPlayer.event.repeat),this._trigger(b);if(this.flash.gate)switch(b){case a.jPlayer.event.progress:this._getFlashStatus(c),this._updateInterface(),this._trigger(b);break;case a.jPlayer.event.timeupdate:this._getFlashStatus(c),this._updateInterface(),this._trigger(b);break;case a.jPlayer.event.play:this._seeked(),this._updateButtons(!0),this._trigger(b);break;case a.jPlayer.event.pause:this._updateButtons(!1),this._trigger(b);break;case a.jPlayer.event.ended:this._updateButtons(!1),this._trigger(b);break;case a.jPlayer.event.click:this._trigger(b);break;case a.jPlayer.event.error:this.status.waitForLoad=!0,this.status.waitForPlay=!0,this.status.video&&this.internal.flash.jq.css({width:"0px",height:"0px"}),this._validString(this.status.media.poster)&&this.internal.poster.jq.show(),this.css.jq.videoPlay.length&&this.status.video&&this.css.jq.videoPlay.show(),this.status.video?this._flash_setVideo(this.status.media):this._flash_setAudio(this.status.media),this._updateButtons(!1),this._error({type:a.jPlayer.error.URL,context:c.src,message:a.jPlayer.errorMsg.URL,hint:a.jPlayer.errorHint.URL});break;case a.jPlayer.event.seeking:this._seeking(),this._trigger(b);break;case a.jPlayer.event.seeked:this._seeked(),this._trigger(b);break;case a.jPlayer.event.ready:break;default:this._trigger(b)}return!1},_getFlashStatus:function(a){this.status.seekPercent=a.seekPercent,this.status.currentPercentRelative=a.currentPercentRelative,this.status.currentPercentAbsolute=a.currentPercentAbsolute,this.status.currentTime=a.currentTime,this.status.duration=a.duration,this.status.remaining=a.duration-a.currentTime,this.status.videoWidth=a.videoWidth,this.status.videoHeight=a.videoHeight,this.status.readyState=4,this.status.networkState=0,this.status.playbackRate=1,this.status.ended=!1},_updateButtons:function(a){a===b?a=!this.status.paused:this.status.paused=!a,a?this.addStateClass("playing"):this.removeStateClass("playing"),!this.status.noFullWindow&&this.options.fullWindow?this.addStateClass("fullScreen"):this.removeStateClass("fullScreen"),this.options.loop?this.addStateClass("looped"):this.removeStateClass("looped"),this.css.jq.play.length&&this.css.jq.pause.length&&(a?(this.css.jq.play.hide(),this.css.jq.pause.show()):(this.css.jq.play.show(),this.css.jq.pause.hide())),this.css.jq.restoreScreen.length&&this.css.jq.fullScreen.length&&(this.status.noFullWindow?(this.css.jq.fullScreen.hide(),this.css.jq.restoreScreen.hide()):this.options.fullWindow?(this.css.jq.fullScreen.hide(),this.css.jq.restoreScreen.show()):(this.css.jq.fullScreen.show(),this.css.jq.restoreScreen.hide())),this.css.jq.repeat.length&&this.css.jq.repeatOff.length&&(this.options.loop?(this.css.jq.repeat.hide(),this.css.jq.repeatOff.show()):(this.css.jq.repeat.show(),this.css.jq.repeatOff.hide()))},_updateInterface:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.width(this.status.seekPercent+"%"),this.css.jq.playBar.length&&(this.options.smoothPlayBar?this.css.jq.playBar.stop().animate({width:this.status.currentPercentAbsolute+"%"},250,"linear"):this.css.jq.playBar.width(this.status.currentPercentRelative+"%"));var a="";this.css.jq.currentTime.length&&(a=this._convertTime(this.status.currentTime),a!==this.css.jq.currentTime.text()&&this.css.jq.currentTime.text(this._convertTime(this.status.currentTime)));var b="",c=this.status.duration,d=this.status.remaining;this.css.jq.duration.length&&("string"==typeof this.status.media.duration?b=this.status.media.duration:("number"==typeof this.status.media.duration&&(c=this.status.media.duration,d=c-this.status.currentTime),b=this.options.remainingDuration?(d>0?"-":"")+this._convertTime(d):this._convertTime(c)),b!==this.css.jq.duration.text()&&this.css.jq.duration.text(b))},_convertTime:c.prototype.time,_seeking:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.addClass("jp-seeking-bg"),this.addStateClass("seeking")},_seeked:function(){this.css.jq.seekBar.length&&this.css.jq.seekBar.removeClass("jp-seeking-bg"),this.removeStateClass("seeking")},_resetGate:function(){this.html.audio.gate=!1,this.html.video.gate=!1,this.aurora.gate=!1,this.flash.gate=!1},_resetActive:function(){this.html.active=!1,this.aurora.active=!1,this.flash.active=!1},_escapeHtml:function(a){return a.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""")},_qualifyURL:function(a){var b=document.createElement("div"); +return b.innerHTML='x',b.firstChild.href},_absoluteMediaUrls:function(b){var c=this;return a.each(b,function(a,d){d&&c.format[a]&&"data:"!==d.substr(0,5)&&(b[a]=c._qualifyURL(d))}),b},addStateClass:function(a){this.ancestorJq.length&&this.ancestorJq.addClass(this.options.stateClass[a])},removeStateClass:function(a){this.ancestorJq.length&&this.ancestorJq.removeClass(this.options.stateClass[a])},setMedia:function(b){var c=this,d=!1,e=this.status.media.poster!==b.poster;this._resetMedia(),this._resetGate(),this._resetActive(),this.androidFix.setMedia=!1,this.androidFix.play=!1,this.androidFix.pause=!1,b=this._absoluteMediaUrls(b),a.each(this.formats,function(e,f){var g="video"===c.format[f].media;return a.each(c.solutions,function(e,h){if(c[h].support[f]&&c._validString(b[f])){var i="html"===h,j="aurora"===h;return g?(i?(c.html.video.gate=!0,c._html_setVideo(b),c.html.active=!0):(c.flash.gate=!0,c._flash_setVideo(b),c.flash.active=!0),c.css.jq.videoPlay.length&&c.css.jq.videoPlay.show(),c.status.video=!0):(i?(c.html.audio.gate=!0,c._html_setAudio(b),c.html.active=!0,a.jPlayer.platform.android&&(c.androidFix.setMedia=!0)):j?(c.aurora.gate=!0,c._aurora_setAudio(b),c.aurora.active=!0):(c.flash.gate=!0,c._flash_setAudio(b),c.flash.active=!0),c.css.jq.videoPlay.length&&c.css.jq.videoPlay.hide(),c.status.video=!1),d=!0,!1}}),d?!1:void 0}),d?(this.status.nativeVideoControls&&this.html.video.gate||this._validString(b.poster)&&(e?this.htmlElement.poster.src=b.poster:this.internal.poster.jq.show()),"string"==typeof b.title&&(this.css.jq.title.length&&this.css.jq.title.html(b.title),this.htmlElement.audio&&this.htmlElement.audio.setAttribute("title",b.title),this.htmlElement.video&&this.htmlElement.video.setAttribute("title",b.title)),this.status.srcSet=!0,this.status.media=a.extend({},b),this._updateButtons(!1),this._updateInterface(),this._trigger(a.jPlayer.event.setmedia)):this._error({type:a.jPlayer.error.NO_SUPPORT,context:"{supplied:'"+this.options.supplied+"'}",message:a.jPlayer.errorMsg.NO_SUPPORT,hint:a.jPlayer.errorHint.NO_SUPPORT})},_resetMedia:function(){this._resetStatus(),this._updateButtons(!1),this._updateInterface(),this._seeked(),this.internal.poster.jq.hide(),clearTimeout(this.internal.htmlDlyCmdId),this.html.active?this._html_resetMedia():this.aurora.active?this._aurora_resetMedia():this.flash.active&&this._flash_resetMedia()},clearMedia:function(){this._resetMedia(),this.html.active?this._html_clearMedia():this.aurora.active?this._aurora_clearMedia():this.flash.active&&this._flash_clearMedia(),this._resetGate(),this._resetActive()},load:function(){this.status.srcSet?this.html.active?this._html_load():this.aurora.active?this._aurora_load():this.flash.active&&this._flash_load():this._urlNotSetError("load")},focus:function(){this.options.keyEnabled&&(a.jPlayer.focus=this)},play:function(a){var b="object"==typeof a;b&&this.options.useStateClassSkin&&!this.status.paused?this.pause(a):(a="number"==typeof a?a:0/0,this.status.srcSet?(this.focus(),this.html.active?this._html_play(a):this.aurora.active?this._aurora_play(a):this.flash.active&&this._flash_play(a)):this._urlNotSetError("play"))},videoPlay:function(){this.play()},pause:function(a){a="number"==typeof a?a:0/0,this.status.srcSet?this.html.active?this._html_pause(a):this.aurora.active?this._aurora_pause(a):this.flash.active&&this._flash_pause(a):this._urlNotSetError("pause")},tellOthers:function(b,c){var d=this,e="function"==typeof c,f=Array.prototype.slice.call(arguments);"string"==typeof b&&(e&&f.splice(1,1),a.jPlayer.prototype.destroyRemoved(),a.each(this.instances,function(){d.element!==this&&(!e||c.call(this.data("jPlayer"),d))&&this.jPlayer.apply(this,f)}))},pauseOthers:function(a){this.tellOthers("pause",function(){return this.status.srcSet},a)},stop:function(){this.status.srcSet?this.html.active?this._html_pause(0):this.aurora.active?this._aurora_pause(0):this.flash.active&&this._flash_pause(0):this._urlNotSetError("stop")},playHead:function(a){a=this._limitValue(a,0,100),this.status.srcSet?this.html.active?this._html_playHead(a):this.aurora.active?this._aurora_playHead(a):this.flash.active&&this._flash_playHead(a):this._urlNotSetError("playHead")},_muted:function(a){this.mutedWorker(a),this.options.globalVolume&&this.tellOthers("mutedWorker",function(){return this.options.globalVolume},a)},mutedWorker:function(b){this.options.muted=b,this.html.used&&this._html_setProperty("muted",b),this.aurora.used&&this._aurora_mute(b),this.flash.used&&this._flash_mute(b),this.html.video.gate||this.html.audio.gate||(this._updateMute(b),this._updateVolume(this.options.volume),this._trigger(a.jPlayer.event.volumechange))},mute:function(a){var c="object"==typeof a;c&&this.options.useStateClassSkin&&this.options.muted?this._muted(!1):(a=a===b?!0:!!a,this._muted(a))},unmute:function(a){a=a===b?!0:!!a,this._muted(!a)},_updateMute:function(a){a===b&&(a=this.options.muted),a?this.addStateClass("muted"):this.removeStateClass("muted"),this.css.jq.mute.length&&this.css.jq.unmute.length&&(this.status.noVolume?(this.css.jq.mute.hide(),this.css.jq.unmute.hide()):a?(this.css.jq.mute.hide(),this.css.jq.unmute.show()):(this.css.jq.mute.show(),this.css.jq.unmute.hide()))},volume:function(a){this.volumeWorker(a),this.options.globalVolume&&this.tellOthers("volumeWorker",function(){return this.options.globalVolume},a)},volumeWorker:function(b){b=this._limitValue(b,0,1),this.options.volume=b,this.html.used&&this._html_setProperty("volume",b),this.aurora.used&&this._aurora_volume(b),this.flash.used&&this._flash_volume(b),this.html.video.gate||this.html.audio.gate||(this._updateVolume(b),this._trigger(a.jPlayer.event.volumechange))},volumeBar:function(b){if(this.css.jq.volumeBar.length){var c=a(b.currentTarget),d=c.offset(),e=b.pageX-d.left,f=c.width(),g=c.height()-b.pageY+d.top,h=c.height();this.volume(this.options.verticalVolume?g/h:e/f)}this.options.muted&&this._muted(!1)},_updateVolume:function(a){a===b&&(a=this.options.volume),a=this.options.muted?0:a,this.status.noVolume?(this.addStateClass("noVolume"),this.css.jq.volumeBar.length&&this.css.jq.volumeBar.hide(),this.css.jq.volumeBarValue.length&&this.css.jq.volumeBarValue.hide(),this.css.jq.volumeMax.length&&this.css.jq.volumeMax.hide()):(this.removeStateClass("noVolume"),this.css.jq.volumeBar.length&&this.css.jq.volumeBar.show(),this.css.jq.volumeBarValue.length&&(this.css.jq.volumeBarValue.show(),this.css.jq.volumeBarValue[this.options.verticalVolume?"height":"width"](100*a+"%")),this.css.jq.volumeMax.length&&this.css.jq.volumeMax.show())},volumeMax:function(){this.volume(1),this.options.muted&&this._muted(!1)},_cssSelectorAncestor:function(b){var c=this;this.options.cssSelectorAncestor=b,this._removeUiClass(),this.ancestorJq=b?a(b):[],b&&1!==this.ancestorJq.length&&this._warning({type:a.jPlayer.warning.CSS_SELECTOR_COUNT,context:b,message:a.jPlayer.warningMsg.CSS_SELECTOR_COUNT+this.ancestorJq.length+" found for cssSelectorAncestor.",hint:a.jPlayer.warningHint.CSS_SELECTOR_COUNT}),this._addUiClass(),a.each(this.options.cssSelector,function(a,b){c._cssSelector(a,b)}),this._updateInterface(),this._updateButtons(),this._updateAutohide(),this._updateVolume(),this._updateMute()},_cssSelector:function(b,c){var d=this;if("string"==typeof c)if(a.jPlayer.prototype.options.cssSelector[b]){if(this.css.jq[b]&&this.css.jq[b].length&&this.css.jq[b].unbind(".jPlayer"),this.options.cssSelector[b]=c,this.css.cs[b]=this.options.cssSelectorAncestor+" "+c,this.css.jq[b]=c?a(this.css.cs[b]):[],this.css.jq[b].length&&this[b]){var e=function(c){c.preventDefault(),d[b](c),d.options.autoBlur?a(this).blur():a(this).focus()};this.css.jq[b].bind("click.jPlayer",e)}c&&1!==this.css.jq[b].length&&this._warning({type:a.jPlayer.warning.CSS_SELECTOR_COUNT,context:this.css.cs[b],message:a.jPlayer.warningMsg.CSS_SELECTOR_COUNT+this.css.jq[b].length+" found for "+b+" method.",hint:a.jPlayer.warningHint.CSS_SELECTOR_COUNT})}else this._warning({type:a.jPlayer.warning.CSS_SELECTOR_METHOD,context:b,message:a.jPlayer.warningMsg.CSS_SELECTOR_METHOD,hint:a.jPlayer.warningHint.CSS_SELECTOR_METHOD});else this._warning({type:a.jPlayer.warning.CSS_SELECTOR_STRING,context:c,message:a.jPlayer.warningMsg.CSS_SELECTOR_STRING,hint:a.jPlayer.warningHint.CSS_SELECTOR_STRING})},duration:function(a){this.options.toggleDuration&&(this.options.captureDuration&&a.stopPropagation(),this._setOption("remainingDuration",!this.options.remainingDuration))},seekBar:function(b){if(this.css.jq.seekBar.length){var c=a(b.currentTarget),d=c.offset(),e=b.pageX-d.left,f=c.width(),g=100*e/f;this.playHead(g)}},playbackRate:function(a){this._setOption("playbackRate",a)},playbackRateBar:function(b){if(this.css.jq.playbackRateBar.length){var c,d,e=a(b.currentTarget),f=e.offset(),g=b.pageX-f.left,h=e.width(),i=e.height()-b.pageY+f.top,j=e.height();c=this.options.verticalPlaybackRate?i/j:g/h,d=c*(this.options.maxPlaybackRate-this.options.minPlaybackRate)+this.options.minPlaybackRate,this.playbackRate(d)}},_updatePlaybackRate:function(){var a=this.options.playbackRate,b=(a-this.options.minPlaybackRate)/(this.options.maxPlaybackRate-this.options.minPlaybackRate);this.status.playbackRateEnabled?(this.css.jq.playbackRateBar.length&&this.css.jq.playbackRateBar.show(),this.css.jq.playbackRateBarValue.length&&(this.css.jq.playbackRateBarValue.show(),this.css.jq.playbackRateBarValue[this.options.verticalPlaybackRate?"height":"width"](100*b+"%"))):(this.css.jq.playbackRateBar.length&&this.css.jq.playbackRateBar.hide(),this.css.jq.playbackRateBarValue.length&&this.css.jq.playbackRateBarValue.hide())},repeat:function(a){var b="object"==typeof a;this._loop(b&&this.options.useStateClassSkin&&this.options.loop?!1:!0)},repeatOff:function(){this._loop(!1)},_loop:function(b){this.options.loop!==b&&(this.options.loop=b,this._updateButtons(),this._trigger(a.jPlayer.event.repeat))},option:function(c,d){var e=c;if(0===arguments.length)return a.extend(!0,{},this.options);if("string"==typeof c){var f=c.split(".");if(d===b){for(var g=a.extend(!0,{},this.options),h=0;h0||Math.floor(d)>0):e=!0,a.internal.mouse={x:b.pageX,y:b.pageY},e&&a.css.jq.gui.fadeIn(a.options.autohide.fadeIn,function(){clearTimeout(a.internal.autohideId),a.internal.autohideId=setTimeout(function(){a.css.jq.gui.fadeOut(a.options.autohide.fadeOut)},a.options.autohide.hold)})};this.css.jq.gui.length&&(this.css.jq.gui.stop(!0,!0),clearTimeout(this.internal.autohideId),delete this.internal.mouse,this.element.unbind(c),this.css.jq.gui.unbind(c),this.status.nativeVideoControls?this.css.jq.gui.hide():this.options.fullWindow&&this.options.autohide.full||!this.options.fullWindow&&this.options.autohide.restored?(this.element.bind(d,e),this.css.jq.gui.bind(d,e),this.css.jq.gui.hide()):this.css.jq.gui.show())},fullScreen:function(a){var b="object"==typeof a;b&&this.options.useStateClassSkin&&this.options.fullScreen?this._setOption("fullScreen",!1):this._setOption("fullScreen",!0)},restoreScreen:function(){this._setOption("fullScreen",!1)},_fullscreenAddEventListeners:function(){var b=this,c=a.jPlayer.nativeFeatures.fullscreen;c.api.fullscreenEnabled&&c.event.fullscreenchange&&("function"!=typeof this.internal.fullscreenchangeHandler&&(this.internal.fullscreenchangeHandler=function(){b._fullscreenchange()}),document.addEventListener(c.event.fullscreenchange,this.internal.fullscreenchangeHandler,!1))},_fullscreenRemoveEventListeners:function(){var b=a.jPlayer.nativeFeatures.fullscreen;this.internal.fullscreenchangeHandler&&document.removeEventListener(b.event.fullscreenchange,this.internal.fullscreenchangeHandler,!1)},_fullscreenchange:function(){this.options.fullScreen&&!a.jPlayer.nativeFeatures.fullscreen.api.fullscreenElement()&&this._setOption("fullScreen",!1)},_requestFullscreen:function(){var b=this.ancestorJq.length?this.ancestorJq[0]:this.element[0],c=a.jPlayer.nativeFeatures.fullscreen;c.used.webkitVideo&&(b=this.htmlElement.video),c.api.fullscreenEnabled&&c.api.requestFullscreen(b)},_exitFullscreen:function(){var b,c=a.jPlayer.nativeFeatures.fullscreen;c.used.webkitVideo&&(b=this.htmlElement.video),c.api.fullscreenEnabled&&c.api.exitFullscreen(b)},_html_initMedia:function(b){var c=a(this.htmlElement.media).empty();a.each(b.track||[],function(a,b){var d=document.createElement("track");d.setAttribute("kind",b.kind?b.kind:""),d.setAttribute("src",b.src?b.src:""),d.setAttribute("srclang",b.srclang?b.srclang:""),d.setAttribute("label",b.label?b.label:""),b.def&&d.setAttribute("default",b.def),c.append(d)}),this.htmlElement.media.src=this.status.src,"none"!==this.options.preload&&this._html_load(),this._trigger(a.jPlayer.event.timeupdate)},_html_setFormat:function(b){var c=this;a.each(this.formats,function(a,d){return c.html.support[d]&&b[d]?(c.status.src=b[d],c.status.format[d]=!0,c.status.formatType=d,!1):void 0})},_html_setAudio:function(a){this._html_setFormat(a),this.htmlElement.media=this.htmlElement.audio,this._html_initMedia(a)},_html_setVideo:function(a){this._html_setFormat(a),this.status.nativeVideoControls&&(this.htmlElement.video.poster=this._validString(a.poster)?a.poster:""),this.htmlElement.media=this.htmlElement.video,this._html_initMedia(a)},_html_resetMedia:function(){this.htmlElement.media&&(this.htmlElement.media.id!==this.internal.video.id||this.status.nativeVideoControls||this.internal.video.jq.css({width:"0px",height:"0px"}),this.htmlElement.media.pause())},_html_clearMedia:function(){this.htmlElement.media&&(this.htmlElement.media.src="about:blank",this.htmlElement.media.load())},_html_load:function(){this.status.waitForLoad&&(this.status.waitForLoad=!1,this.htmlElement.media.load()),clearTimeout(this.internal.htmlDlyCmdId)},_html_play:function(a){var b=this,c=this.htmlElement.media;if(this.androidFix.pause=!1,this._html_load(),this.androidFix.setMedia)this.androidFix.play=!0,this.androidFix.time=a;else if(isNaN(a))c.play();else{this.internal.cmdsIgnored&&c.play();try{if(c.seekable&&!("object"==typeof c.seekable&&c.seekable.length>0))throw 1;c.currentTime=a,c.play()}catch(d){return void(this.internal.htmlDlyCmdId=setTimeout(function(){b.play(a)},250))}}this._html_checkWaitForPlay()},_html_pause:function(a){var b=this,c=this.htmlElement.media;if(this.androidFix.play=!1,a>0?this._html_load():clearTimeout(this.internal.htmlDlyCmdId),c.pause(),this.androidFix.setMedia)this.androidFix.pause=!0,this.androidFix.time=a;else if(!isNaN(a))try{if(c.seekable&&!("object"==typeof c.seekable&&c.seekable.length>0))throw 1;c.currentTime=a}catch(d){return void(this.internal.htmlDlyCmdId=setTimeout(function(){b.pause(a)},250))}a>0&&this._html_checkWaitForPlay()},_html_playHead:function(a){var b=this,c=this.htmlElement.media;this._html_load();try{if("object"==typeof c.seekable&&c.seekable.length>0)c.currentTime=a*c.seekable.end(c.seekable.length-1)/100;else{if(!(c.duration>0)||isNaN(c.duration))throw"e";c.currentTime=a*c.duration/100}}catch(d){return void(this.internal.htmlDlyCmdId=setTimeout(function(){b.playHead(a)},250))}this.status.waitForLoad||this._html_checkWaitForPlay()},_html_checkWaitForPlay:function(){this.status.waitForPlay&&(this.status.waitForPlay=!1,this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide(),this.status.video&&(this.internal.poster.jq.hide(),this.internal.video.jq.css({width:this.status.width,height:this.status.height})))},_html_setProperty:function(a,b){this.html.audio.available&&(this.htmlElement.audio[a]=b),this.html.video.available&&(this.htmlElement.video[a]=b)},_aurora_setAudio:function(b){var c=this;a.each(this.formats,function(a,d){return c.aurora.support[d]&&b[d]?(c.status.src=b[d],c.status.format[d]=!0,c.status.formatType=d,!1):void 0}),this.aurora.player=new AV.Player.fromURL(this.status.src),this._addAuroraEventListeners(this.aurora.player,this.aurora),"auto"===this.options.preload&&(this._aurora_load(),this.status.waitForLoad=!1)},_aurora_resetMedia:function(){this.aurora.player&&this.aurora.player.stop()},_aurora_clearMedia:function(){},_aurora_load:function(){this.status.waitForLoad&&(this.status.waitForLoad=!1,this.aurora.player.preload())},_aurora_play:function(b){this.status.waitForLoad||isNaN(b)||this.aurora.player.seek(b),this.aurora.player.playing||this.aurora.player.play(),this.status.waitForLoad=!1,this._aurora_checkWaitForPlay(),this._updateButtons(!0),this._trigger(a.jPlayer.event.play)},_aurora_pause:function(b){isNaN(b)||this.aurora.player.seek(1e3*b),this.aurora.player.pause(),b>0&&this._aurora_checkWaitForPlay(),this._updateButtons(!1),this._trigger(a.jPlayer.event.pause)},_aurora_playHead:function(a){this.aurora.player.duration>0&&this.aurora.player.seek(a*this.aurora.player.duration/100),this.status.waitForLoad||this._aurora_checkWaitForPlay()},_aurora_checkWaitForPlay:function(){this.status.waitForPlay&&(this.status.waitForPlay=!1)},_aurora_volume:function(a){this.aurora.player.volume=100*a},_aurora_mute:function(a){a?(this.aurora.properties.lastvolume=this.aurora.player.volume,this.aurora.player.volume=0):this.aurora.player.volume=this.aurora.properties.lastvolume,this.aurora.properties.muted=a},_flash_setAudio:function(b){var c=this;try{a.each(this.formats,function(a,d){if(c.flash.support[d]&&b[d]){switch(d){case"m4a":case"fla":c._getMovie().fl_setAudio_m4a(b[d]);break;case"mp3":c._getMovie().fl_setAudio_mp3(b[d]);break;case"rtmpa":c._getMovie().fl_setAudio_rtmp(b[d])}return c.status.src=b[d],c.status.format[d]=!0,c.status.formatType=d,!1}}),"auto"===this.options.preload&&(this._flash_load(),this.status.waitForLoad=!1)}catch(d){this._flashError(d)}},_flash_setVideo:function(b){var c=this;try{a.each(this.formats,function(a,d){if(c.flash.support[d]&&b[d]){switch(d){case"m4v":case"flv":c._getMovie().fl_setVideo_m4v(b[d]);break;case"rtmpv":c._getMovie().fl_setVideo_rtmp(b[d])}return c.status.src=b[d],c.status.format[d]=!0,c.status.formatType=d,!1}}),"auto"===this.options.preload&&(this._flash_load(),this.status.waitForLoad=!1)}catch(d){this._flashError(d)}},_flash_resetMedia:function(){this.internal.flash.jq.css({width:"0px",height:"0px"}),this._flash_pause(0/0)},_flash_clearMedia:function(){try{this._getMovie().fl_clearMedia()}catch(a){this._flashError(a)}},_flash_load:function(){try{this._getMovie().fl_load()}catch(a){this._flashError(a)}this.status.waitForLoad=!1},_flash_play:function(a){try{this._getMovie().fl_play(a)}catch(b){this._flashError(b)}this.status.waitForLoad=!1,this._flash_checkWaitForPlay()},_flash_pause:function(a){try{this._getMovie().fl_pause(a)}catch(b){this._flashError(b)}a>0&&(this.status.waitForLoad=!1,this._flash_checkWaitForPlay())},_flash_playHead:function(a){try{this._getMovie().fl_play_head(a)}catch(b){this._flashError(b)}this.status.waitForLoad||this._flash_checkWaitForPlay()},_flash_checkWaitForPlay:function(){this.status.waitForPlay&&(this.status.waitForPlay=!1,this.css.jq.videoPlay.length&&this.css.jq.videoPlay.hide(),this.status.video&&(this.internal.poster.jq.hide(),this.internal.flash.jq.css({width:this.status.width,height:this.status.height})))},_flash_volume:function(a){try{this._getMovie().fl_volume(a)}catch(b){this._flashError(b)}},_flash_mute:function(a){try{this._getMovie().fl_mute(a)}catch(b){this._flashError(b)}},_getMovie:function(){return document[this.internal.flash.id]},_getFlashPluginVersion:function(){var a,b=0;if(window.ActiveXObject)try{if(a=new ActiveXObject("ShockwaveFlash.ShockwaveFlash")){var c=a.GetVariable("$version");c&&(c=c.split(" ")[1].split(","),b=parseInt(c[0],10)+"."+parseInt(c[1],10))}}catch(d){}else navigator.plugins&&navigator.mimeTypes.length>0&&(a=navigator.plugins["Shockwave Flash"],a&&(b=navigator.plugins["Shockwave Flash"].description.replace(/.*\s(\d+\.\d+).*/,"$1")));return 1*b},_checkForFlash:function(a){var b=!1;return this._getFlashPluginVersion()>=a&&(b=!0),b},_validString:function(a){return a&&"string"==typeof a},_limitValue:function(a,b,c){return b>a?b:a>c?c:a},_urlNotSetError:function(b){this._error({type:a.jPlayer.error.URL_NOT_SET,context:b,message:a.jPlayer.errorMsg.URL_NOT_SET,hint:a.jPlayer.errorHint.URL_NOT_SET})},_flashError:function(b){var c;c=this.internal.ready?"FLASH_DISABLED":"FLASH",this._error({type:a.jPlayer.error[c],context:this.internal.flash.swf,message:a.jPlayer.errorMsg[c]+b.message,hint:a.jPlayer.errorHint[c]}),this.internal.flash.jq.css({width:"1px",height:"1px"})},_error:function(b){this._trigger(a.jPlayer.event.error,b),this.options.errorAlerts&&this._alert("Error!"+(b.message?"\n"+b.message:"")+(b.hint?"\n"+b.hint:"")+"\nContext: "+b.context)},_warning:function(c){this._trigger(a.jPlayer.event.warning,b,c),this.options.warningAlerts&&this._alert("Warning!"+(c.message?"\n"+c.message:"")+(c.hint?"\n"+c.hint:"")+"\nContext: "+c.context)},_alert:function(a){var b="jPlayer "+this.version.script+" : id='"+this.internal.self.id+"' : "+a;this.options.consoleAlerts?window.console&&window.console.log&&window.console.log(b):alert(b)},_emulateHtmlBridge:function(){var b=this;a.each(a.jPlayer.emulateMethods.split(/\s+/g),function(a,c){b.internal.domNode[c]=function(a){b[c](a)}}),a.each(a.jPlayer.event,function(c,d){var e=!0;a.each(a.jPlayer.reservedEvent.split(/\s+/g),function(a,b){return b===c?(e=!1,!1):void 0}),e&&b.element.bind(d+".jPlayer.jPlayerHtml",function(){b._emulateHtmlUpdate();var a=document.createEvent("Event");a.initEvent(c,!1,!0),b.internal.domNode.dispatchEvent(a)})})},_emulateHtmlUpdate:function(){var b=this;a.each(a.jPlayer.emulateStatus.split(/\s+/g),function(a,c){b.internal.domNode[c]=b.status[c]}),a.each(a.jPlayer.emulateOptions.split(/\s+/g),function(a,c){b.internal.domNode[c]=b.options[c]})},_destroyHtmlBridge:function(){var b=this;this.element.unbind(".jPlayerHtml");var c=a.jPlayer.emulateMethods+" "+a.jPlayer.emulateStatus+" "+a.jPlayer.emulateOptions;a.each(c.split(/\s+/g),function(a,c){delete b.internal.domNode[c]})}},a.jPlayer.error={FLASH:"e_flash",FLASH_DISABLED:"e_flash_disabled",NO_SOLUTION:"e_no_solution",NO_SUPPORT:"e_no_support",URL:"e_url",URL_NOT_SET:"e_url_not_set",VERSION:"e_version"},a.jPlayer.errorMsg={FLASH:"jPlayer's Flash fallback is not configured correctly, or a command was issued before the jPlayer Ready event. Details: ",FLASH_DISABLED:"jPlayer's Flash fallback has been disabled by the browser due to the CSS rules you have used. Details: ",NO_SOLUTION:"No solution can be found by jPlayer in this browser. Neither HTML nor Flash can be used.",NO_SUPPORT:"It is not possible to play any media format provided in setMedia() on this browser using your current options.",URL:"Media URL could not be loaded.",URL_NOT_SET:"Attempt to issue media playback commands, while no media url is set.",VERSION:"jPlayer "+a.jPlayer.prototype.version.script+" needs Jplayer.swf version "+a.jPlayer.prototype.version.needFlash+" but found "},a.jPlayer.errorHint={FLASH:"Check your swfPath option and that Jplayer.swf is there.",FLASH_DISABLED:"Check that you have not display:none; the jPlayer entity or any ancestor.",NO_SOLUTION:"Review the jPlayer options: support and supplied.",NO_SUPPORT:"Video or audio formats defined in the supplied option are missing.",URL:"Check media URL is valid.",URL_NOT_SET:"Use setMedia() to set the media URL.",VERSION:"Update jPlayer files."},a.jPlayer.warning={CSS_SELECTOR_COUNT:"e_css_selector_count",CSS_SELECTOR_METHOD:"e_css_selector_method",CSS_SELECTOR_STRING:"e_css_selector_string",OPTION_KEY:"e_option_key"},a.jPlayer.warningMsg={CSS_SELECTOR_COUNT:"The number of css selectors found did not equal one: ",CSS_SELECTOR_METHOD:"The methodName given in jPlayer('cssSelector') is not a valid jPlayer method.",CSS_SELECTOR_STRING:"The methodCssSelector given in jPlayer('cssSelector') is not a String or is empty.",OPTION_KEY:"The option requested in jPlayer('option') is undefined."},a.jPlayer.warningHint={CSS_SELECTOR_COUNT:"Check your css selector and the ancestor.",CSS_SELECTOR_METHOD:"Check your method name.",CSS_SELECTOR_STRING:"Check your css selector is a string.",OPTION_KEY:"Check your option name."}}); \ No newline at end of file diff --git a/sites/all/libraries/jplayer/jquery.jplayer.swf b/sites/all/libraries/jplayer/jquery.jplayer.swf new file mode 100755 index 0000000000..340f7f98d0 Binary files /dev/null and b/sites/all/libraries/jplayer/jquery.jplayer.swf differ diff --git a/sites/all/libraries/sidr/README.md b/sites/all/libraries/sidr/README.md new file mode 100755 index 0000000000..978b9ab7bc --- /dev/null +++ b/sites/all/libraries/sidr/README.md @@ -0,0 +1,4 @@ +Sidr +============ + +This is the Bower package for the Sidr jQuery Plugin. For a further description, documentation and others visit: [http://www.berriart.com/sidr](http://www.berriart.com/sidr) diff --git a/sites/all/libraries/sidr/component.json b/sites/all/libraries/sidr/component.json new file mode 100755 index 0000000000..e8936a4224 --- /dev/null +++ b/sites/all/libraries/sidr/component.json @@ -0,0 +1,19 @@ +{ + "name": "sidr", + "description": "jQuery plugin for creating side menus and the easiest way for doing your menu responsive", + "version": "1.2.1", + "homepage": "http://www.berriart.com/sidr/", + "author": { + "name": "Alberto Varela", + "site": "http://albertovarelasanchez.com/" + }, + "main": ["./jquery.sidr.min.js", "./stylesheets/jquery.sidr.dark.css"], + "keywords": [ "jquery", "plugin", "responsive" ], + "dependencies": { + "jquery": ">=1.4.3" + }, + "licenses": [ { + "type": "MIT", + "url": "https://github.com/artberri/sidr/blob/master/LICENSE-MIT" + } ] +} \ No newline at end of file diff --git a/sites/all/libraries/sidr/jquery.sidr.min.js b/sites/all/libraries/sidr/jquery.sidr.min.js new file mode 100755 index 0000000000..c0e3deb49d --- /dev/null +++ b/sites/all/libraries/sidr/jquery.sidr.min.js @@ -0,0 +1,4 @@ +/*! Sidr - v1.2.1 - 2013-11-06 + * https://github.com/artberri/sidr + * Copyright (c) 2013 Alberto Varela; Licensed MIT */ +(function(e){var t=!1,i=!1,n={isUrl:function(e){var t=RegExp("^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$","i");return t.test(e)?!0:!1},loadContent:function(e,t){e.html(t)},addPrefix:function(e){var t=e.attr("id"),i=e.attr("class");"string"==typeof t&&""!==t&&e.attr("id",t.replace(/([A-Za-z0-9_.\-]+)/g,"sidr-id-$1")),"string"==typeof i&&""!==i&&"sidr-inner"!==i&&e.attr("class",i.replace(/([A-Za-z0-9_.\-]+)/g,"sidr-class-$1")),e.removeAttr("style")},execute:function(n,s,a){"function"==typeof s?(a=s,s="sidr"):s||(s="sidr");var r,d,l,c=e("#"+s),u=e(c.data("body")),f=e("html"),p=c.outerWidth(!0),g=c.data("speed"),h=c.data("side"),m=c.data("displace"),v=c.data("onOpen"),y=c.data("onClose"),x="sidr"===s?"sidr-open":"sidr-open "+s+"-open";if("open"===n||"toggle"===n&&!c.is(":visible")){if(c.is(":visible")||t)return;if(i!==!1)return o.close(i,function(){o.open(s)}),void 0;t=!0,"left"===h?(r={left:p+"px"},d={left:"0px"}):(r={right:p+"px"},d={right:"0px"}),u.is("body")&&(l=f.scrollTop(),f.css("overflow-x","hidden").scrollTop(l)),m?u.addClass("sidr-animating").css({width:u.width(),position:"absolute"}).animate(r,g,function(){e(this).addClass(x)}):setTimeout(function(){e(this).addClass(x)},g),c.css("display","block").animate(d,g,function(){t=!1,i=s,"function"==typeof a&&a(s),u.removeClass("sidr-animating")}),v()}else{if(!c.is(":visible")||t)return;t=!0,"left"===h?(r={left:0},d={left:"-"+p+"px"}):(r={right:0},d={right:"-"+p+"px"}),u.is("body")&&(l=f.scrollTop(),f.removeAttr("style").scrollTop(l)),u.addClass("sidr-animating").animate(r,g).removeClass(x),c.animate(d,g,function(){c.removeAttr("style").hide(),u.removeAttr("style"),e("html").removeAttr("style"),t=!1,i=!1,"function"==typeof a&&a(s),u.removeClass("sidr-animating")}),y()}}},o={open:function(e,t){n.execute("open",e,t)},close:function(e,t){n.execute("close",e,t)},toggle:function(e,t){n.execute("toggle",e,t)},toogle:function(e,t){n.execute("toggle",e,t)}};e.sidr=function(t){return o[t]?o[t].apply(this,Array.prototype.slice.call(arguments,1)):"function"!=typeof t&&"string"!=typeof t&&t?(e.error("Method "+t+" does not exist on jQuery.sidr"),void 0):o.toggle.apply(this,arguments)},e.fn.sidr=function(t){var i=e.extend({name:"sidr",speed:200,side:"left",source:null,renaming:!0,body:"body",displace:!0,onOpen:function(){},onClose:function(){}},t),s=i.name,a=e("#"+s);if(0===a.length&&(a=e("
                  ").attr("id",s).appendTo(e("body"))),a.addClass("sidr").addClass(i.side).data({speed:i.speed,side:i.side,body:i.body,displace:i.displace,onOpen:i.onOpen,onClose:i.onClose}),"function"==typeof i.source){var r=i.source(s);n.loadContent(a,r)}else if("string"==typeof i.source&&n.isUrl(i.source))e.get(i.source,function(e){n.loadContent(a,e)});else if("string"==typeof i.source){var d="",l=i.source.split(",");if(e.each(l,function(t,i){d+='
                  '+e(i).html()+"
                  "}),i.renaming){var c=e("
                  ").html(d);c.find("*").each(function(t,i){var o=e(i);n.addPrefix(o)}),d=c.html()}n.loadContent(a,d)}else null!==i.source&&e.error("Invalid Sidr Source");return this.each(function(){var t=e(this),i=t.data("sidr");i||(t.data("sidr",s),"ontouchstart"in document.documentElement?(t.bind("touchstart",function(e){e.originalEvent.touches[0],this.touched=e.timeStamp}),t.bind("touchend",function(e){var t=Math.abs(e.timeStamp-this.touched);200>t&&(e.preventDefault(),o.toggle(s))})):t.click(function(e){e.preventDefault(),o.toggle(s)}))})}})(jQuery); \ No newline at end of file diff --git a/sites/all/libraries/sidr/stylesheets/jquery.sidr.dark.css b/sites/all/libraries/sidr/stylesheets/jquery.sidr.dark.css new file mode 100755 index 0000000000..cb3f183459 --- /dev/null +++ b/sites/all/libraries/sidr/stylesheets/jquery.sidr.dark.css @@ -0,0 +1 @@ +.sidr{display:none;position:absolute;position:fixed;top:0;height:100%;z-index:999999;width:260px;overflow-x:none;overflow-y:auto;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;font-size:15px;background:#333;color:#fff;-webkit-box-shadow:inset 0 0 5px 5px #222;-moz-box-shadow:inset 0 0 5px 5px #222;box-shadow:inset 0 0 5px 5px #222}.sidr .sidr-inner{padding:0 0 15px}.sidr .sidr-inner>p{margin-left:15px;margin-right:15px}.sidr.right{left:auto;right:-260px}.sidr.left{left:-260px;right:auto}.sidr h1,.sidr h2,.sidr h3,.sidr h4,.sidr h5,.sidr h6{font-size:11px;font-weight:normal;padding:0 15px;margin:0 0 5px;color:#fff;line-height:24px;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #4d4d4d), color-stop(100%, #1a1a1a));background-image:-webkit-linear-gradient(#4d4d4d,#1a1a1a);background-image:-moz-linear-gradient(#4d4d4d,#1a1a1a);background-image:-o-linear-gradient(#4d4d4d,#1a1a1a);background-image:linear-gradient(#4d4d4d,#1a1a1a);-webkit-box-shadow:0 5px 5px 3px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 5px 3px rgba(0,0,0,0.2);box-shadow:0 5px 5px 3px rgba(0,0,0,0.2)}.sidr p{font-size:13px;margin:0 0 12px}.sidr p a{color:rgba(255,255,255,0.9)}.sidr>p{margin-left:15px;margin-right:15px}.sidr ul{display:block;margin:0 0 15px;padding:0;border-top:1px solid #1a1a1a;border-bottom:1px solid #4d4d4d}.sidr ul li{display:block;margin:0;line-height:48px;border-top:1px solid #4d4d4d;border-bottom:1px solid #1a1a1a}.sidr ul li:hover,.sidr ul li.active,.sidr ul li.sidr-class-active{border-top:none;line-height:49px}.sidr ul li:hover>a,.sidr ul li:hover>span,.sidr ul li.active>a,.sidr ul li.active>span,.sidr ul li.sidr-class-active>a,.sidr ul li.sidr-class-active>span{-webkit-box-shadow:inset 0 0 15px 3px #222;-moz-box-shadow:inset 0 0 15px 3px #222;box-shadow:inset 0 0 15px 3px #222}.sidr ul li a,.sidr ul li span{padding:0 15px;display:block;text-decoration:none;color:#fff}.sidr ul li ul{border-bottom:none;margin:0}.sidr ul li ul li{line-height:40px;font-size:13px}.sidr ul li ul li:last-child{border-bottom:none}.sidr ul li ul li:hover,.sidr ul li ul li.active,.sidr ul li ul li.sidr-class-active{border-top:none;line-height:41px}.sidr ul li ul li:hover>a,.sidr ul li ul li:hover>span,.sidr ul li ul li.active>a,.sidr ul li ul li.active>span,.sidr ul li ul li.sidr-class-active>a,.sidr ul li ul li.sidr-class-active>span{-webkit-box-shadow:inset 0 0 15px 3px #222;-moz-box-shadow:inset 0 0 15px 3px #222;box-shadow:inset 0 0 15px 3px #222}.sidr ul li ul li a,.sidr ul li ul li span{color:rgba(255,255,255,0.8);padding-left:30px}.sidr form{margin:0 15px}.sidr label{font-size:13px}.sidr input[type="text"],.sidr input[type="password"],.sidr input[type="date"],.sidr input[type="datetime"],.sidr input[type="email"],.sidr input[type="number"],.sidr input[type="search"],.sidr input[type="tel"],.sidr input[type="time"],.sidr input[type="url"],.sidr textarea,.sidr select{width:100%;font-size:13px;padding:5px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 0 10px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;border:none;background:rgba(0,0,0,0.1);color:rgba(255,255,255,0.6);display:block;clear:both}.sidr input[type=checkbox]{width:auto;display:inline;clear:none}.sidr input[type=button],.sidr input[type=submit]{color:#333;background:#fff}.sidr input[type=button]:hover,.sidr input[type=submit]:hover{background:rgba(255,255,255,0.9)} diff --git a/sites/all/libraries/sidr/stylesheets/jquery.sidr.light.css b/sites/all/libraries/sidr/stylesheets/jquery.sidr.light.css new file mode 100755 index 0000000000..50d0685c7a --- /dev/null +++ b/sites/all/libraries/sidr/stylesheets/jquery.sidr.light.css @@ -0,0 +1 @@ +.sidr{display:none;position:absolute;position:fixed;top:0;height:100%;z-index:999999;width:260px;overflow-x:none;overflow-y:auto;font-family:"lucida grande",tahoma,verdana,arial,sans-serif;font-size:15px;background:#f8f8f8;color:#333;-webkit-box-shadow:inset 0 0 5px 5px #ebebeb;-moz-box-shadow:inset 0 0 5px 5px #ebebeb;box-shadow:inset 0 0 5px 5px #ebebeb}.sidr .sidr-inner{padding:0 0 15px}.sidr .sidr-inner>p{margin-left:15px;margin-right:15px}.sidr.right{left:auto;right:-260px}.sidr.left{left:-260px;right:auto}.sidr h1,.sidr h2,.sidr h3,.sidr h4,.sidr h5,.sidr h6{font-size:11px;font-weight:normal;padding:0 15px;margin:0 0 5px;color:#333;line-height:24px;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #dfdfdf));background-image:-webkit-linear-gradient(#ffffff,#dfdfdf);background-image:-moz-linear-gradient(#ffffff,#dfdfdf);background-image:-o-linear-gradient(#ffffff,#dfdfdf);background-image:linear-gradient(#ffffff,#dfdfdf);-webkit-box-shadow:0 5px 5px 3px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 5px 3px rgba(0,0,0,0.2);box-shadow:0 5px 5px 3px rgba(0,0,0,0.2)}.sidr p{font-size:13px;margin:0 0 12px}.sidr p a{color:rgba(51,51,51,0.9)}.sidr>p{margin-left:15px;margin-right:15px}.sidr ul{display:block;margin:0 0 15px;padding:0;border-top:1px solid #dfdfdf;border-bottom:1px solid #fff}.sidr ul li{display:block;margin:0;line-height:48px;border-top:1px solid #fff;border-bottom:1px solid #dfdfdf}.sidr ul li:hover,.sidr ul li.active,.sidr ul li.sidr-class-active{border-top:none;line-height:49px}.sidr ul li:hover>a,.sidr ul li:hover>span,.sidr ul li.active>a,.sidr ul li.active>span,.sidr ul li.sidr-class-active>a,.sidr ul li.sidr-class-active>span{-webkit-box-shadow:inset 0 0 15px 3px #ebebeb;-moz-box-shadow:inset 0 0 15px 3px #ebebeb;box-shadow:inset 0 0 15px 3px #ebebeb}.sidr ul li a,.sidr ul li span{padding:0 15px;display:block;text-decoration:none;color:#333}.sidr ul li ul{border-bottom:none;margin:0}.sidr ul li ul li{line-height:40px;font-size:13px}.sidr ul li ul li:last-child{border-bottom:none}.sidr ul li ul li:hover,.sidr ul li ul li.active,.sidr ul li ul li.sidr-class-active{border-top:none;line-height:41px}.sidr ul li ul li:hover>a,.sidr ul li ul li:hover>span,.sidr ul li ul li.active>a,.sidr ul li ul li.active>span,.sidr ul li ul li.sidr-class-active>a,.sidr ul li ul li.sidr-class-active>span{-webkit-box-shadow:inset 0 0 15px 3px #ebebeb;-moz-box-shadow:inset 0 0 15px 3px #ebebeb;box-shadow:inset 0 0 15px 3px #ebebeb}.sidr ul li ul li a,.sidr ul li ul li span{color:rgba(51,51,51,0.8);padding-left:30px}.sidr form{margin:0 15px}.sidr label{font-size:13px}.sidr input[type="text"],.sidr input[type="password"],.sidr input[type="date"],.sidr input[type="datetime"],.sidr input[type="email"],.sidr input[type="number"],.sidr input[type="search"],.sidr input[type="tel"],.sidr input[type="time"],.sidr input[type="url"],.sidr textarea,.sidr select{width:100%;font-size:13px;padding:5px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0 0 10px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;border:none;background:rgba(0,0,0,0.1);color:rgba(51,51,51,0.6);display:block;clear:both}.sidr input[type=checkbox]{width:auto;display:inline;clear:none}.sidr input[type=button],.sidr input[type=submit]{color:#f8f8f8;background:#333}.sidr input[type=button]:hover,.sidr input[type=submit]:hover{background:rgba(51,51,51,0.9)} diff --git a/sites/all/libraries/spyc/COPYING b/sites/all/libraries/spyc/COPYING new file mode 100755 index 0000000000..8e7ddbcf6b --- /dev/null +++ b/sites/all/libraries/spyc/COPYING @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2011 Vladimir Andersen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/sites/all/libraries/spyc/README.md b/sites/all/libraries/spyc/README.md new file mode 100755 index 0000000000..f8fa848739 --- /dev/null +++ b/sites/all/libraries/spyc/README.md @@ -0,0 +1,30 @@ +**Spyc** is a YAML loader/dumper written in pure PHP. Given a YAML document, Spyc will return an array that +you can use however you see fit. Given an array, Spyc will return a string which contains a YAML document +built from your data. + +**YAML** is an amazingly human friendly and strikingly versatile data serialization language which can be used +for log files, config files, custom protocols, the works. For more information, see http://www.yaml.org. + +Spyc supports YAML 1.0 specification. + +## Using Spyc + +Using Spyc is trivial: + +``` + + * @author Chris Wanstrath + * @link https://github.com/mustangostang/spyc/ + * @copyright Copyright 2005-2006 Chris Wanstrath, 2006-2011 Vlad Andersen + * @license http://www.opensource.org/licenses/mit-license.php MIT License + * @package Spyc + */ + +if (!function_exists('spyc_load')) { + /** + * Parses YAML to array. + * @param string $string YAML string. + * @return array + */ + function spyc_load ($string) { + return Spyc::YAMLLoadString($string); + } +} + +if (!function_exists('spyc_load_file')) { + /** + * Parses YAML to array. + * @param string $file Path to YAML file. + * @return array + */ + function spyc_load_file ($file) { + return Spyc::YAMLLoad($file); + } +} + +if (!function_exists('spyc_dump')) { + /** + * Dumps array to YAML. + * @param array $data Array. + * @return string + */ + function spyc_dump ($data) { + return Spyc::YAMLDump($data, false, false, true); + } +} + +/** + * The Simple PHP YAML Class. + * + * This class can be used to read a YAML file and convert its contents + * into a PHP array. It currently supports a very limited subsection of + * the YAML spec. + * + * Usage: + * + * $Spyc = new Spyc; + * $array = $Spyc->load($file); + * + * or: + * + * $array = Spyc::YAMLLoad($file); + * + * or: + * + * $array = spyc_load_file($file); + * + * @package Spyc + */ +class Spyc { + + // SETTINGS + + const REMPTY = "\0\0\0\0\0"; + + /** + * Setting this to true will force YAMLDump to enclose any string value in + * quotes. False by default. + * + * @var bool + */ + public $setting_dump_force_quotes = false; + + /** + * Setting this to true will forse YAMLLoad to use syck_load function when + * possible. False by default. + * @var bool + */ + public $setting_use_syck_is_possible = false; + + + + /**#@+ + * @access private + * @var mixed + */ + private $_dumpIndent; + private $_dumpWordWrap; + private $_containsGroupAnchor = false; + private $_containsGroupAlias = false; + private $path; + private $result; + private $LiteralPlaceHolder = '___YAML_Literal_Block___'; + private $SavedGroups = array(); + private $indent; + /** + * Path modifier that should be applied after adding current element. + * @var array + */ + private $delayedPath = array(); + + /**#@+ + * @access public + * @var mixed + */ + public $_nodeId; + +/** + * Load a valid YAML string to Spyc. + * @param string $input + * @return array + */ + public function load ($input) { + return $this->__loadString($input); + } + + /** + * Load a valid YAML file to Spyc. + * @param string $file + * @return array + */ + public function loadFile ($file) { + return $this->__load($file); + } + + /** + * Load YAML into a PHP array statically + * + * The load method, when supplied with a YAML stream (string or file), + * will do its best to convert YAML in a file into a PHP array. Pretty + * simple. + * Usage: + * + * $array = Spyc::YAMLLoad('lucky.yaml'); + * print_r($array); + * + * @access public + * @return array + * @param string $input Path of YAML file or string containing YAML + */ + public static function YAMLLoad($input) { + $Spyc = new Spyc; + return $Spyc->__load($input); + } + + /** + * Load a string of YAML into a PHP array statically + * + * The load method, when supplied with a YAML string, will do its best + * to convert YAML in a string into a PHP array. Pretty simple. + * + * Note: use this function if you don't want files from the file system + * loaded and processed as YAML. This is of interest to people concerned + * about security whose input is from a string. + * + * Usage: + * + * $array = Spyc::YAMLLoadString("---\n0: hello world\n"); + * print_r($array); + * + * @access public + * @return array + * @param string $input String containing YAML + */ + public static function YAMLLoadString($input) { + $Spyc = new Spyc; + return $Spyc->__loadString($input); + } + + /** + * Dump YAML from PHP array statically + * + * The dump method, when supplied with an array, will do its best + * to convert the array into friendly YAML. Pretty simple. Feel free to + * save the returned string as nothing.yaml and pass it around. + * + * Oh, and you can decide how big the indent is and what the wordwrap + * for folding is. Pretty cool -- just pass in 'false' for either if + * you want to use the default. + * + * Indent's default is 2 spaces, wordwrap's default is 40 characters. And + * you can turn off wordwrap by passing in 0. + * + * @access public + * @return string + * @param array $array PHP array + * @param int $indent Pass in false to use the default, which is 2 + * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40) + * @param int $no_opening_dashes Do not start YAML file with "---\n" + */ + public static function YAMLDump($array, $indent = false, $wordwrap = false, $no_opening_dashes = false) { + $spyc = new Spyc; + return $spyc->dump($array, $indent, $wordwrap, $no_opening_dashes); + } + + + /** + * Dump PHP array to YAML + * + * The dump method, when supplied with an array, will do its best + * to convert the array into friendly YAML. Pretty simple. Feel free to + * save the returned string as tasteful.yaml and pass it around. + * + * Oh, and you can decide how big the indent is and what the wordwrap + * for folding is. Pretty cool -- just pass in 'false' for either if + * you want to use the default. + * + * Indent's default is 2 spaces, wordwrap's default is 40 characters. And + * you can turn off wordwrap by passing in 0. + * + * @access public + * @return string + * @param array $array PHP array + * @param int $indent Pass in false to use the default, which is 2 + * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40) + */ + public function dump($array,$indent = false,$wordwrap = false, $no_opening_dashes = false) { + // Dumps to some very clean YAML. We'll have to add some more features + // and options soon. And better support for folding. + + // New features and options. + if ($indent === false or !is_numeric($indent)) { + $this->_dumpIndent = 2; + } else { + $this->_dumpIndent = $indent; + } + + if ($wordwrap === false or !is_numeric($wordwrap)) { + $this->_dumpWordWrap = 40; + } else { + $this->_dumpWordWrap = $wordwrap; + } + + // New YAML document + $string = ""; + if (!$no_opening_dashes) $string = "---\n"; + + // Start at the base of the array and move through it. + if ($array) { + $array = (array)$array; + $previous_key = -1; + foreach ($array as $key => $value) { + if (!isset($first_key)) $first_key = $key; + $string .= $this->_yamlize($key,$value,0,$previous_key, $first_key, $array); + $previous_key = $key; + } + } + return $string; + } + + /** + * Attempts to convert a key / value array item to YAML + * @access private + * @return string + * @param $key The name of the key + * @param $value The value of the item + * @param $indent The indent of the current node + */ + private function _yamlize($key,$value,$indent, $previous_key = -1, $first_key = 0, $source_array = null) { + if (is_array($value)) { + if (empty ($value)) + return $this->_dumpNode($key, array(), $indent, $previous_key, $first_key, $source_array); + // It has children. What to do? + // Make it the right kind of item + $string = $this->_dumpNode($key, self::REMPTY, $indent, $previous_key, $first_key, $source_array); + // Add the indent + $indent += $this->_dumpIndent; + // Yamlize the array + $string .= $this->_yamlizeArray($value,$indent); + } elseif (!is_array($value)) { + // It doesn't have children. Yip. + $string = $this->_dumpNode($key, $value, $indent, $previous_key, $first_key, $source_array); + } + return $string; + } + + /** + * Attempts to convert an array to YAML + * @access private + * @return string + * @param $array The array you want to convert + * @param $indent The indent of the current level + */ + private function _yamlizeArray($array,$indent) { + if (is_array($array)) { + $string = ''; + $previous_key = -1; + foreach ($array as $key => $value) { + if (!isset($first_key)) $first_key = $key; + $string .= $this->_yamlize($key, $value, $indent, $previous_key, $first_key, $array); + $previous_key = $key; + } + return $string; + } else { + return false; + } + } + + /** + * Returns YAML from a key and a value + * @access private + * @return string + * @param $key The name of the key + * @param $value The value of the item + * @param $indent The indent of the current node + */ + private function _dumpNode($key, $value, $indent, $previous_key = -1, $first_key = 0, $source_array = null) { + // do some folding here, for blocks + if (is_string ($value) && ((strpos($value,"\n") !== false || strpos($value,": ") !== false || strpos($value,"- ") !== false || + strpos($value,"*") !== false || strpos($value,"#") !== false || strpos($value,"<") !== false || strpos($value,">") !== false || strpos ($value, ' ') !== false || + strpos($value,"[") !== false || strpos($value,"]") !== false || strpos($value,"{") !== false || strpos($value,"}") !== false) || strpos($value,"&") !== false || strpos($value, "'") !== false || strpos($value, "!") === 0 || + substr ($value, -1, 1) == ':') + ) { + $value = $this->_doLiteralBlock($value,$indent); + } else { + $value = $this->_doFolding($value,$indent); + } + + if ($value === array()) $value = '[ ]'; + if ($value === "") $value = '""'; + if (self::isTranslationWord($value)) { + $value = $this->_doLiteralBlock($value, $indent); + } + if (trim ($value) != $value) + $value = $this->_doLiteralBlock($value,$indent); + + if (is_bool($value)) { + $value = $value ? "true" : "false"; + } + + if ($value === null) $value = 'null'; + if ($value === "'" . self::REMPTY . "'") $value = null; + + $spaces = str_repeat(' ',$indent); + + //if (is_int($key) && $key - 1 == $previous_key && $first_key===0) { + if (is_array ($source_array) && array_keys($source_array) === range(0, count($source_array) - 1)) { + // It's a sequence + $string = $spaces.'- '.$value."\n"; + } else { + // if ($first_key===0) throw new Exception('Keys are all screwy. The first one was zero, now it\'s "'. $key .'"'); + // It's mapped + if (strpos($key, ":") !== false || strpos($key, "#") !== false) { $key = '"' . $key . '"'; } + $string = rtrim ($spaces.$key.': '.$value)."\n"; + } + return $string; + } + + /** + * Creates a literal block for dumping + * @access private + * @return string + * @param $value + * @param $indent int The value of the indent + */ + private function _doLiteralBlock($value,$indent) { + if ($value === "\n") return '\n'; + if (strpos($value, "\n") === false && strpos($value, "'") === false) { + return sprintf ("'%s'", $value); + } + if (strpos($value, "\n") === false && strpos($value, '"') === false) { + return sprintf ('"%s"', $value); + } + $exploded = explode("\n",$value); + $newValue = '|'; + $indent += $this->_dumpIndent; + $spaces = str_repeat(' ',$indent); + foreach ($exploded as $line) { + $newValue .= "\n" . $spaces . ($line); + } + return $newValue; + } + + /** + * Folds a string of text, if necessary + * @access private + * @return string + * @param $value The string you wish to fold + */ + private function _doFolding($value,$indent) { + // Don't do anything if wordwrap is set to 0 + + if ($this->_dumpWordWrap !== 0 && is_string ($value) && strlen($value) > $this->_dumpWordWrap) { + $indent += $this->_dumpIndent; + $indent = str_repeat(' ',$indent); + $wrapped = wordwrap($value,$this->_dumpWordWrap,"\n$indent"); + $value = ">\n".$indent.$wrapped; + } else { + if ($this->setting_dump_force_quotes && is_string ($value) && $value !== self::REMPTY) + $value = '"' . $value . '"'; + if (is_numeric($value) && is_string($value)) + $value = '"' . $value . '"'; + } + + + return $value; + } + + private function isTrueWord($value) { + $words = self::getTranslations(array('true', 'on', 'yes', 'y')); + return in_array($value, $words, true); + } + + private function isFalseWord($value) { + $words = self::getTranslations(array('false', 'off', 'no', 'n')); + return in_array($value, $words, true); + } + + private function isNullWord($value) { + $words = self::getTranslations(array('null', '~')); + return in_array($value, $words, true); + } + + private function isTranslationWord($value) { + return ( + self::isTrueWord($value) || + self::isFalseWord($value) || + self::isNullWord($value) + ); + } + + /** + * Coerce a string into a native type + * Reference: http://yaml.org/type/bool.html + * TODO: Use only words from the YAML spec. + * @access private + * @param $value The value to coerce + */ + private function coerceValue(&$value) { + if (self::isTrueWord($value)) { + $value = true; + } else if (self::isFalseWord($value)) { + $value = false; + } else if (self::isNullWord($value)) { + $value = null; + } + } + + /** + * Given a set of words, perform the appropriate translations on them to + * match the YAML 1.1 specification for type coercing. + * @param $words The words to translate + * @access private + */ + private static function getTranslations(array $words) { + $result = array(); + foreach ($words as $i) { + $result = array_merge($result, array(ucfirst($i), strtoupper($i), strtolower($i))); + } + return $result; + } + +// LOADING FUNCTIONS + + private function __load($input) { + $Source = $this->loadFromSource($input); + return $this->loadWithSource($Source); + } + + private function __loadString($input) { + $Source = $this->loadFromString($input); + return $this->loadWithSource($Source); + } + + private function loadWithSource($Source) { + if (empty ($Source)) return array(); + if ($this->setting_use_syck_is_possible && function_exists ('syck_load')) { + $array = syck_load (implode ("\n", $Source)); + return is_array($array) ? $array : array(); + } + + $this->path = array(); + $this->result = array(); + + $cnt = count($Source); + for ($i = 0; $i < $cnt; $i++) { + $line = $Source[$i]; + + $this->indent = strlen($line) - strlen(ltrim($line)); + $tempPath = $this->getParentPathByIndent($this->indent); + $line = self::stripIndent($line, $this->indent); + if (self::isComment($line)) continue; + if (self::isEmpty($line)) continue; + $this->path = $tempPath; + + $literalBlockStyle = self::startsLiteralBlock($line); + if ($literalBlockStyle) { + $line = rtrim ($line, $literalBlockStyle . " \n"); + $literalBlock = ''; + $line .= ' '.$this->LiteralPlaceHolder; + $literal_block_indent = strlen($Source[$i+1]) - strlen(ltrim($Source[$i+1])); + while (++$i < $cnt && $this->literalBlockContinues($Source[$i], $this->indent)) { + $literalBlock = $this->addLiteralLine($literalBlock, $Source[$i], $literalBlockStyle, $literal_block_indent); + } + $i--; + } + + // Strip out comments + if (strpos ($line, '#')) { + $line = preg_replace('/\s*#([^"\']+)$/','',$line); + } + + while (++$i < $cnt && self::greedilyNeedNextLine($line)) { + $line = rtrim ($line, " \n\t\r") . ' ' . ltrim ($Source[$i], " \t"); + } + $i--; + + $lineArray = $this->_parseLine($line); + + if ($literalBlockStyle) + $lineArray = $this->revertLiteralPlaceHolder ($lineArray, $literalBlock); + + $this->addArray($lineArray, $this->indent); + + foreach ($this->delayedPath as $indent => $delayedPath) + $this->path[$indent] = $delayedPath; + + $this->delayedPath = array(); + + } + return $this->result; + } + + private function loadFromSource ($input) { + if (!empty($input) && strpos($input, "\n") === false && file_exists($input)) + $input = file_get_contents($input); + + return $this->loadFromString($input); + } + + private function loadFromString ($input) { + $lines = explode("\n",$input); + foreach ($lines as $k => $_) { + $lines[$k] = rtrim ($_, "\r"); + } + return $lines; + } + + /** + * Parses YAML code and returns an array for a node + * @access private + * @return array + * @param string $line A line from the YAML file + */ + private function _parseLine($line) { + if (!$line) return array(); + $line = trim($line); + if (!$line) return array(); + + $array = array(); + + $group = $this->nodeContainsGroup($line); + if ($group) { + $this->addGroup($line, $group); + $line = $this->stripGroup ($line, $group); + } + + if ($this->startsMappedSequence($line)) + return $this->returnMappedSequence($line); + + if ($this->startsMappedValue($line)) + return $this->returnMappedValue($line); + + if ($this->isArrayElement($line)) + return $this->returnArrayElement($line); + + if ($this->isPlainArray($line)) + return $this->returnPlainArray($line); + + + return $this->returnKeyValuePair($line); + + } + + /** + * Finds the type of the passed value, returns the value as the new type. + * @access private + * @param string $value + * @return mixed + */ + private function _toType($value) { + if ($value === '') return ""; + $first_character = $value[0]; + $last_character = substr($value, -1, 1); + + $is_quoted = false; + do { + if (!$value) break; + if ($first_character != '"' && $first_character != "'") break; + if ($last_character != '"' && $last_character != "'") break; + $is_quoted = true; + } while (0); + + if ($is_quoted) { + $value = str_replace('\n', "\n", $value); + return strtr(substr ($value, 1, -1), array ('\\"' => '"', '\'\'' => '\'', '\\\'' => '\'')); + } + + if (strpos($value, ' #') !== false && !$is_quoted) + $value = preg_replace('/\s+#(.+)$/','',$value); + + if ($first_character == '[' && $last_character == ']') { + // Take out strings sequences and mappings + $innerValue = trim(substr ($value, 1, -1)); + if ($innerValue === '') return array(); + $explode = $this->_inlineEscape($innerValue); + // Propagate value array + $value = array(); + foreach ($explode as $v) { + $value[] = $this->_toType($v); + } + return $value; + } + + if (strpos($value,': ')!==false && $first_character != '{') { + $array = explode(': ',$value); + $key = trim($array[0]); + array_shift($array); + $value = trim(implode(': ',$array)); + $value = $this->_toType($value); + return array($key => $value); + } + + if ($first_character == '{' && $last_character == '}') { + $innerValue = trim(substr ($value, 1, -1)); + if ($innerValue === '') return array(); + // Inline Mapping + // Take out strings sequences and mappings + $explode = $this->_inlineEscape($innerValue); + // Propagate value array + $array = array(); + foreach ($explode as $v) { + $SubArr = $this->_toType($v); + if (empty($SubArr)) continue; + if (is_array ($SubArr)) { + $array[key($SubArr)] = $SubArr[key($SubArr)]; continue; + } + $array[] = $SubArr; + } + return $array; + } + + if ($value == 'null' || $value == 'NULL' || $value == 'Null' || $value == '' || $value == '~') { + return null; + } + + if ( is_numeric($value) && preg_match ('/^(-|)[1-9]+[0-9]*$/', $value) ){ + $intvalue = (int)$value; + if ($intvalue != PHP_INT_MAX) + $value = $intvalue; + return $value; + } + + if (is_numeric($value) && preg_match('/^0[xX][0-9a-fA-F]+$/', $value)) { + // Hexadecimal value. + return hexdec($value); + } + + $this->coerceValue($value); + + if (is_numeric($value)) { + if ($value === '0') return 0; + if (rtrim ($value, 0) === $value) + $value = (float)$value; + return $value; + } + + return $value; + } + + /** + * Used in inlines to check for more inlines or quoted strings + * @access private + * @return array + */ + private function _inlineEscape($inline) { + // There's gotta be a cleaner way to do this... + // While pure sequences seem to be nesting just fine, + // pure mappings and mappings with sequences inside can't go very + // deep. This needs to be fixed. + + $seqs = array(); + $maps = array(); + $saved_strings = array(); + $saved_empties = array(); + + // Check for empty strings + $regex = '/("")|(\'\')/'; + if (preg_match_all($regex,$inline,$strings)) { + $saved_empties = $strings[0]; + $inline = preg_replace($regex,'YAMLEmpty',$inline); + } + unset($regex); + + // Check for strings + $regex = '/(?:(")|(?:\'))((?(1)[^"]+|[^\']+))(?(1)"|\')/'; + if (preg_match_all($regex,$inline,$strings)) { + $saved_strings = $strings[0]; + $inline = preg_replace($regex,'YAMLString',$inline); + } + unset($regex); + + // echo $inline; + + $i = 0; + do { + + // Check for sequences + while (preg_match('/\[([^{}\[\]]+)\]/U',$inline,$matchseqs)) { + $seqs[] = $matchseqs[0]; + $inline = preg_replace('/\[([^{}\[\]]+)\]/U', ('YAMLSeq' . (count($seqs) - 1) . 's'), $inline, 1); + } + + // Check for mappings + while (preg_match('/{([^\[\]{}]+)}/U',$inline,$matchmaps)) { + $maps[] = $matchmaps[0]; + $inline = preg_replace('/{([^\[\]{}]+)}/U', ('YAMLMap' . (count($maps) - 1) . 's'), $inline, 1); + } + + if ($i++ >= 10) break; + + } while (strpos ($inline, '[') !== false || strpos ($inline, '{') !== false); + + $explode = explode(',',$inline); + $explode = array_map('trim', $explode); + $stringi = 0; $i = 0; + + while (1) { + + // Re-add the sequences + if (!empty($seqs)) { + foreach ($explode as $key => $value) { + if (strpos($value,'YAMLSeq') !== false) { + foreach ($seqs as $seqk => $seq) { + $explode[$key] = str_replace(('YAMLSeq'.$seqk.'s'),$seq,$value); + $value = $explode[$key]; + } + } + } + } + + // Re-add the mappings + if (!empty($maps)) { + foreach ($explode as $key => $value) { + if (strpos($value,'YAMLMap') !== false) { + foreach ($maps as $mapk => $map) { + $explode[$key] = str_replace(('YAMLMap'.$mapk.'s'), $map, $value); + $value = $explode[$key]; + } + } + } + } + + + // Re-add the strings + if (!empty($saved_strings)) { + foreach ($explode as $key => $value) { + while (strpos($value,'YAMLString') !== false) { + $explode[$key] = preg_replace('/YAMLString/',$saved_strings[$stringi],$value, 1); + unset($saved_strings[$stringi]); + ++$stringi; + $value = $explode[$key]; + } + } + } + + + // Re-add the empties + if (!empty($saved_empties)) { + foreach ($explode as $key => $value) { + while (strpos($value,'YAMLEmpty') !== false) { + $explode[$key] = preg_replace('/YAMLEmpty/', '', $value, 1); + $value = $explode[$key]; + } + } + } + + $finished = true; + foreach ($explode as $key => $value) { + if (strpos($value,'YAMLSeq') !== false) { + $finished = false; break; + } + if (strpos($value,'YAMLMap') !== false) { + $finished = false; break; + } + if (strpos($value,'YAMLString') !== false) { + $finished = false; break; + } + if (strpos($value,'YAMLEmpty') !== false) { + $finished = false; break; + } + } + if ($finished) break; + + $i++; + if ($i > 10) + break; // Prevent infinite loops. + } + + + return $explode; + } + + private function literalBlockContinues ($line, $lineIndent) { + if (!trim($line)) return true; + if (strlen($line) - strlen(ltrim($line)) > $lineIndent) return true; + return false; + } + + private function referenceContentsByAlias ($alias) { + do { + if (!isset($this->SavedGroups[$alias])) { echo "Bad group name: $alias."; break; } + $groupPath = $this->SavedGroups[$alias]; + $value = $this->result; + foreach ($groupPath as $k) { + $value = $value[$k]; + } + } while (false); + return $value; + } + + private function addArrayInline ($array, $indent) { + $CommonGroupPath = $this->path; + if (empty ($array)) return false; + + foreach ($array as $k => $_) { + $this->addArray(array($k => $_), $indent); + $this->path = $CommonGroupPath; + } + return true; + } + + private function addArray ($incoming_data, $incoming_indent) { + + // print_r ($incoming_data); + + if (count ($incoming_data) > 1) + return $this->addArrayInline ($incoming_data, $incoming_indent); + + $key = key ($incoming_data); + $value = isset($incoming_data[$key]) ? $incoming_data[$key] : null; + if ($key === '__!YAMLZero') $key = '0'; + + if ($incoming_indent == 0 && !$this->_containsGroupAlias && !$this->_containsGroupAnchor) { // Shortcut for root-level values. + if ($key || $key === '' || $key === '0') { + $this->result[$key] = $value; + } else { + $this->result[] = $value; end ($this->result); $key = key ($this->result); + } + $this->path[$incoming_indent] = $key; + return; + } + + + + $history = array(); + // Unfolding inner array tree. + $history[] = $_arr = $this->result; + foreach ($this->path as $k) { + $history[] = $_arr = $_arr[$k]; + } + + if ($this->_containsGroupAlias) { + $value = $this->referenceContentsByAlias($this->_containsGroupAlias); + $this->_containsGroupAlias = false; + } + + + // Adding string or numeric key to the innermost level or $this->arr. + if (is_string($key) && $key == '<<') { + if (!is_array ($_arr)) { $_arr = array (); } + + $_arr = array_merge ($_arr, $value); + } else if ($key || $key === '' || $key === '0') { + if (!is_array ($_arr)) + $_arr = array ($key=>$value); + else + $_arr[$key] = $value; + } else { + if (!is_array ($_arr)) { $_arr = array ($value); $key = 0; } + else { $_arr[] = $value; end ($_arr); $key = key ($_arr); } + } + + $reverse_path = array_reverse($this->path); + $reverse_history = array_reverse ($history); + $reverse_history[0] = $_arr; + $cnt = count($reverse_history) - 1; + for ($i = 0; $i < $cnt; $i++) { + $reverse_history[$i+1][$reverse_path[$i]] = $reverse_history[$i]; + } + $this->result = $reverse_history[$cnt]; + + $this->path[$incoming_indent] = $key; + + if ($this->_containsGroupAnchor) { + $this->SavedGroups[$this->_containsGroupAnchor] = $this->path; + if (is_array ($value)) { + $k = key ($value); + if (!is_int ($k)) { + $this->SavedGroups[$this->_containsGroupAnchor][$incoming_indent + 2] = $k; + } + } + $this->_containsGroupAnchor = false; + } + + } + + private static function startsLiteralBlock ($line) { + $lastChar = substr (trim($line), -1); + if ($lastChar != '>' && $lastChar != '|') return false; + if ($lastChar == '|') return $lastChar; + // HTML tags should not be counted as literal blocks. + if (preg_match ('#<.*?>$#', $line)) return false; + return $lastChar; + } + + private static function greedilyNeedNextLine($line) { + $line = trim ($line); + if (!strlen($line)) return false; + if (substr ($line, -1, 1) == ']') return false; + if ($line[0] == '[') return true; + if (preg_match ('#^[^:]+?:\s*\[#', $line)) return true; + return false; + } + + private function addLiteralLine ($literalBlock, $line, $literalBlockStyle, $indent = -1) { + $line = self::stripIndent($line, $indent); + if ($literalBlockStyle !== '|') { + $line = self::stripIndent($line); + } + $line = rtrim ($line, "\r\n\t ") . "\n"; + if ($literalBlockStyle == '|') { + return $literalBlock . $line; + } + if (strlen($line) == 0) + return rtrim($literalBlock, ' ') . "\n"; + if ($line == "\n" && $literalBlockStyle == '>') { + return rtrim ($literalBlock, " \t") . "\n"; + } + if ($line != "\n") + $line = trim ($line, "\r\n ") . " "; + return $literalBlock . $line; + } + + function revertLiteralPlaceHolder ($lineArray, $literalBlock) { + foreach ($lineArray as $k => $_) { + if (is_array($_)) + $lineArray[$k] = $this->revertLiteralPlaceHolder ($_, $literalBlock); + else if (substr($_, -1 * strlen ($this->LiteralPlaceHolder)) == $this->LiteralPlaceHolder) + $lineArray[$k] = rtrim ($literalBlock, " \r\n"); + } + return $lineArray; + } + + private static function stripIndent ($line, $indent = -1) { + if ($indent == -1) $indent = strlen($line) - strlen(ltrim($line)); + return substr ($line, $indent); + } + + private function getParentPathByIndent ($indent) { + if ($indent == 0) return array(); + $linePath = $this->path; + do { + end($linePath); $lastIndentInParentPath = key($linePath); + if ($indent <= $lastIndentInParentPath) array_pop ($linePath); + } while ($indent <= $lastIndentInParentPath); + return $linePath; + } + + + private function clearBiggerPathValues ($indent) { + + + if ($indent == 0) $this->path = array(); + if (empty ($this->path)) return true; + + foreach ($this->path as $k => $_) { + if ($k > $indent) unset ($this->path[$k]); + } + + return true; + } + + + private static function isComment ($line) { + if (!$line) return false; + if ($line[0] == '#') return true; + if (trim($line, " \r\n\t") == '---') return true; + return false; + } + + private static function isEmpty ($line) { + return (trim ($line) === ''); + } + + + private function isArrayElement ($line) { + if (!$line || !is_scalar($line)) return false; + if (substr($line, 0, 2) != '- ') return false; + if (strlen ($line) > 3) + if (substr($line,0,3) == '---') return false; + + return true; + } + + private function isHashElement ($line) { + return strpos($line, ':'); + } + + private function isLiteral ($line) { + if ($this->isArrayElement($line)) return false; + if ($this->isHashElement($line)) return false; + return true; + } + + + private static function unquote ($value) { + if (!$value) return $value; + if (!is_string($value)) return $value; + if ($value[0] == '\'') return trim ($value, '\''); + if ($value[0] == '"') return trim ($value, '"'); + return $value; + } + + private function startsMappedSequence ($line) { + return (substr($line, 0, 2) == '- ' && substr ($line, -1, 1) == ':'); + } + + private function returnMappedSequence ($line) { + $array = array(); + $key = self::unquote(trim(substr($line,1,-1))); + $array[$key] = array(); + $this->delayedPath = array(strpos ($line, $key) + $this->indent => $key); + return array($array); + } + + private function checkKeysInValue($value) { + if (strchr('[{"\'', $value[0]) === false) { + if (strchr($value, ': ') !== false) { + throw new Exception('Too many keys: '.$value); + } + } + } + + private function returnMappedValue ($line) { + $this->checkKeysInValue($line); + $array = array(); + $key = self::unquote (trim(substr($line,0,-1))); + $array[$key] = ''; + return $array; + } + + private function startsMappedValue ($line) { + return (substr ($line, -1, 1) == ':'); + } + + private function isPlainArray ($line) { + return ($line[0] == '[' && substr ($line, -1, 1) == ']'); + } + + private function returnPlainArray ($line) { + return $this->_toType($line); + } + + private function returnKeyValuePair ($line) { + $array = array(); + $key = ''; + if (strpos ($line, ': ')) { + // It's a key/value pair most likely + // If the key is in double quotes pull it out + if (($line[0] == '"' || $line[0] == "'") && preg_match('/^(["\'](.*)["\'](\s)*:)/',$line,$matches)) { + $value = trim(str_replace($matches[1],'',$line)); + $key = $matches[2]; + } else { + // Do some guesswork as to the key and the value + $explode = explode(': ', $line); + $key = trim(array_shift($explode)); + $value = trim(implode(': ', $explode)); + $this->checkKeysInValue($value); + } + // Set the type of the value. Int, string, etc + $value = $this->_toType($value); + if ($key === '0') $key = '__!YAMLZero'; + $array[$key] = $value; + } else { + $array = array ($line); + } + return $array; + + } + + + private function returnArrayElement ($line) { + if (strlen($line) <= 1) return array(array()); // Weird %) + $array = array(); + $value = trim(substr($line,1)); + $value = $this->_toType($value); + if ($this->isArrayElement($value)) { + $value = $this->returnArrayElement($value); + } + $array[] = $value; + return $array; + } + + + private function nodeContainsGroup ($line) { + $symbolsForReference = 'A-z0-9_\-'; + if (strpos($line, '&') === false && strpos($line, '*') === false) return false; // Please die fast ;-) + if ($line[0] == '&' && preg_match('/^(&['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1]; + if ($line[0] == '*' && preg_match('/^(\*['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1]; + if (preg_match('/(&['.$symbolsForReference.']+)$/', $line, $matches)) return $matches[1]; + if (preg_match('/(\*['.$symbolsForReference.']+$)/', $line, $matches)) return $matches[1]; + if (preg_match ('#^\s*<<\s*:\s*(\*[^\s]+).*$#', $line, $matches)) return $matches[1]; + return false; + + } + + private function addGroup ($line, $group) { + if ($group[0] == '&') $this->_containsGroupAnchor = substr ($group, 1); + if ($group[0] == '*') $this->_containsGroupAlias = substr ($group, 1); + //print_r ($this->path); + } + + private function stripGroup ($line, $group) { + $line = trim(str_replace($group, '', $line)); + return $line; + } +} + +// Enable use of Spyc from command line +// The syntax is the following: php Spyc.php spyc.yaml + +do { + if (PHP_SAPI != 'cli') break; + if (empty ($_SERVER['argc']) || $_SERVER['argc'] < 2) break; + if (empty ($_SERVER['PHP_SELF']) || FALSE === strpos ($_SERVER['PHP_SELF'], 'Spyc.php') ) break; + $file = $argv[1]; + echo json_encode (spyc_load_file ($file)); +} while (0); diff --git a/sites/all/libraries/spyc/composer.json b/sites/all/libraries/spyc/composer.json new file mode 100755 index 0000000000..9105de589a --- /dev/null +++ b/sites/all/libraries/spyc/composer.json @@ -0,0 +1,27 @@ +{ + "name": "mustangostang/spyc", + "description": "A simple YAML loader/dumper class for PHP", + "type": "library", + "keywords": [ + "spyc", + "yaml", + "yml" + ], + "homepage": "https://github.com/mustangostang/spyc/", + "authors" : [{ + "name": "mustangostang", + "email": "vlad.andersen@gmail.com" + }], + "license": "MIT", + "require": { + "php": ">=5.3.1" + }, + "autoload": { + "files": [ "Spyc.php" ] + }, + "extra": { + "branch-alias": { + "dev-master": "0.5.x-dev" + } + } +} diff --git a/sites/all/libraries/spyc/examples/yaml-dump.php b/sites/all/libraries/spyc/examples/yaml-dump.php new file mode 100755 index 0000000000..9d2160aaf8 --- /dev/null +++ b/sites/all/libraries/spyc/examples/yaml-dump.php @@ -0,0 +1,25 @@ + 'A sequence','second' => 'of mapped values'); +$array['Mapped'] = array('A sequence','which is mapped'); +$array['A Note'] = 'What if your text is too long?'; +$array['Another Note'] = 'If that is the case, the dumper will probably fold your text by using a block. Kinda like this.'; +$array['The trick?'] = 'The trick is that we overrode the default indent, 2, to 4 and the default wordwrap, 40, to 60.'; +$array['Old Dog'] = "And if you want\n to preserve line breaks, \ngo ahead!"; +$array['key:withcolon'] = "Should support this to"; + +$yaml = Spyc::YAMLDump($array,4,60); diff --git a/sites/all/libraries/spyc/examples/yaml-load.php b/sites/all/libraries/spyc/examples/yaml-load.php new file mode 100755 index 0000000000..9e457e1e15 --- /dev/null +++ b/sites/all/libraries/spyc/examples/yaml-load.php @@ -0,0 +1,21 @@ +spyc.yaml loaded into PHP:
                  '; +print_r($array); +echo ''; + + +echo '
                  YAML Data dumped back:
                  '; +echo Spyc::YAMLDump($array); +echo '
                  '; diff --git a/sites/all/libraries/spyc/php4/5to4.php b/sites/all/libraries/spyc/php4/5to4.php new file mode 100755 index 0000000000..5a48694f01 --- /dev/null +++ b/sites/all/libraries/spyc/php4/5to4.php @@ -0,0 +1,17 @@ +', $code); + $f = fopen ($dest, 'w'); + fwrite($f, $code); + fclose ($f); + print "Written to $dest.\n"; +} \ No newline at end of file diff --git a/sites/all/libraries/spyc/php4/spyc.php4 b/sites/all/libraries/spyc/php4/spyc.php4 new file mode 100755 index 0000000000..73f08cc079 --- /dev/null +++ b/sites/all/libraries/spyc/php4/spyc.php4 @@ -0,0 +1,1023 @@ + + * @author Chris Wanstrath + * @link http://code.google.com/p/spyc/ + * @copyright Copyright 2005-2006 Chris Wanstrath, 2006-2009 Vlad Andersen + * @license http://www.opensource.org/licenses/mit-license.php MIT License + * @package Spyc + */ + +if (!function_exists('spyc_load')) { + /** + * Parses YAML to array. + * @param string $string YAML string. + * @return array + */ + function spyc_load ($string) { + return Spyc::YAMLLoadString($string); + } +} + +if (!function_exists('spyc_load_file')) { + /** + * Parses YAML to array. + * @param string $file Path to YAML file. + * @return array + */ + function spyc_load_file ($file) { + return Spyc::YAMLLoad($file); + } +} + +/** + * The Simple PHP YAML Class. + * + * This class can be used to read a YAML file and convert its contents + * into a PHP array. It currently supports a very limited subsection of + * the YAML spec. + * + * Usage: + * + * $Spyc = new Spyc; + * $array = $Spyc->load($file); + * + * or: + * + * $array = Spyc::YAMLLoad($file); + * + * or: + * + * $array = spyc_load_file($file); + * + * @package Spyc + */ +class Spyc { + + // SETTINGS + + /** + * Setting this to true will force YAMLDump to enclose any string value in + * quotes. False by default. + * + * @var bool + */ + var $setting_dump_force_quotes = false; + + /** + * Setting this to true will forse YAMLLoad to use syck_load function when + * possible. False by default. + * @var bool + */ + var $setting_use_syck_is_possible = false; + + + + /**#@+ + * @access private + * @var mixed + */ + var $_dumpIndent; + var $_dumpWordWrap; + var $_containsGroupAnchor = false; + var $_containsGroupAlias = false; + var $path; + var $result; + var $LiteralPlaceHolder = '___YAML_Literal_Block___'; + var $SavedGroups = array(); + var $indent; + /** + * Path modifier that should be applied after adding current element. + * @var array + */ + var $delayedPath = array(); + + /**#@+ + * @access public + * @var mixed + */ + var $_nodeId; + +/** + * Load a valid YAML string to Spyc. + * @param string $input + * @return array + */ + function load ($input) { + return $this->__loadString($input); + } + + /** + * Load a valid YAML file to Spyc. + * @param string $file + * @return array + */ + function loadFile ($file) { + return $this->__load($file); + } + + /** + * Load YAML into a PHP array statically + * + * The load method, when supplied with a YAML stream (string or file), + * will do its best to convert YAML in a file into a PHP array. Pretty + * simple. + * Usage: + * + * $array = Spyc::YAMLLoad('lucky.yaml'); + * print_r($array); + * + * @access public + * @return array + * @param string $input Path of YAML file or string containing YAML + */ + function YAMLLoad($input) { + $Spyc = new Spyc; + return $Spyc->__load($input); + } + + /** + * Load a string of YAML into a PHP array statically + * + * The load method, when supplied with a YAML string, will do its best + * to convert YAML in a string into a PHP array. Pretty simple. + * + * Note: use this function if you don't want files from the file system + * loaded and processed as YAML. This is of interest to people concerned + * about security whose input is from a string. + * + * Usage: + * + * $array = Spyc::YAMLLoadString("---\n0: hello world\n"); + * print_r($array); + * + * @access public + * @return array + * @param string $input String containing YAML + */ + function YAMLLoadString($input) { + $Spyc = new Spyc; + return $Spyc->__loadString($input); + } + + /** + * Dump YAML from PHP array statically + * + * The dump method, when supplied with an array, will do its best + * to convert the array into friendly YAML. Pretty simple. Feel free to + * save the returned string as nothing.yaml and pass it around. + * + * Oh, and you can decide how big the indent is and what the wordwrap + * for folding is. Pretty cool -- just pass in 'false' for either if + * you want to use the default. + * + * Indent's default is 2 spaces, wordwrap's default is 40 characters. And + * you can turn off wordwrap by passing in 0. + * + * @access public + * @return string + * @param array $array PHP array + * @param int $indent Pass in false to use the default, which is 2 + * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40) + */ + function YAMLDump($array,$indent = false,$wordwrap = false) { + $spyc = new Spyc; + return $spyc->dump($array,$indent,$wordwrap); + } + + + /** + * Dump PHP array to YAML + * + * The dump method, when supplied with an array, will do its best + * to convert the array into friendly YAML. Pretty simple. Feel free to + * save the returned string as tasteful.yaml and pass it around. + * + * Oh, and you can decide how big the indent is and what the wordwrap + * for folding is. Pretty cool -- just pass in 'false' for either if + * you want to use the default. + * + * Indent's default is 2 spaces, wordwrap's default is 40 characters. And + * you can turn off wordwrap by passing in 0. + * + * @access public + * @return string + * @param array $array PHP array + * @param int $indent Pass in false to use the default, which is 2 + * @param int $wordwrap Pass in 0 for no wordwrap, false for default (40) + */ + function dump($array,$indent = false,$wordwrap = false) { + // Dumps to some very clean YAML. We'll have to add some more features + // and options soon. And better support for folding. + + // New features and options. + if ($indent === false or !is_numeric($indent)) { + $this->_dumpIndent = 2; + } else { + $this->_dumpIndent = $indent; + } + + if ($wordwrap === false or !is_numeric($wordwrap)) { + $this->_dumpWordWrap = 40; + } else { + $this->_dumpWordWrap = $wordwrap; + } + + // New YAML document + $string = "---\n"; + + // Start at the base of the array and move through it. + if ($array) { + $array = (array)$array; + $first_key = key($array); + + $previous_key = -1; + foreach ($array as $key => $value) { + $string .= $this->_yamlize($key,$value,0,$previous_key, $first_key); + $previous_key = $key; + } + } + return $string; + } + + /** + * Attempts to convert a key / value array item to YAML + * @access private + * @return string + * @param $key The name of the key + * @param $value The value of the item + * @param $indent The indent of the current node + */ + function _yamlize($key,$value,$indent, $previous_key = -1, $first_key = 0) { + if (is_array($value)) { + if (empty ($value)) + return $this->_dumpNode($key, array(), $indent, $previous_key, $first_key); + // It has children. What to do? + // Make it the right kind of item + $string = $this->_dumpNode($key, NULL, $indent, $previous_key, $first_key); + // Add the indent + $indent += $this->_dumpIndent; + // Yamlize the array + $string .= $this->_yamlizeArray($value,$indent); + } elseif (!is_array($value)) { + // It doesn't have children. Yip. + $string = $this->_dumpNode($key, $value, $indent, $previous_key, $first_key); + } + return $string; + } + + /** + * Attempts to convert an array to YAML + * @access private + * @return string + * @param $array The array you want to convert + * @param $indent The indent of the current level + */ + function _yamlizeArray($array,$indent) { + if (is_array($array)) { + $string = ''; + $previous_key = -1; + $first_key = key($array); + foreach ($array as $key => $value) { + $string .= $this->_yamlize($key, $value, $indent, $previous_key, $first_key); + $previous_key = $key; + } + return $string; + } else { + return false; + } + } + + /** + * Returns YAML from a key and a value + * @access private + * @return string + * @param $key The name of the key + * @param $value The value of the item + * @param $indent The indent of the current node + */ + function _dumpNode($key, $value, $indent, $previous_key = -1, $first_key = 0) { + // do some folding here, for blocks + if (is_string ($value) && ((strpos($value,"\n") !== false || strpos($value,": ") !== false || strpos($value,"- ") !== false || + strpos($value,"*") !== false || strpos($value,"#") !== false || strpos($value,"<") !== false || strpos($value,">") !== false || + strpos($value,"[") !== false || strpos($value,"]") !== false || strpos($value,"{") !== false || strpos($value,"}") !== false) || substr ($value, -1, 1) == ':')) { + $value = $this->_doLiteralBlock($value,$indent); + } else { + $value = $this->_doFolding($value,$indent); + if (is_bool($value)) { + $value = ($value) ? "true" : "false"; + } + } + + if ($value === array()) $value = '[ ]'; + + $spaces = str_repeat(' ',$indent); + + if (is_int($key) && $key - 1 == $previous_key && $first_key===0) { + // It's a sequence + $string = $spaces.'- '.$value."\n"; + } else { + if ($first_key===0) throw new Exception('Keys are all screwy. The first one was zero, now it\'s "'. $key .'"'); + // It's mapped + if (strpos($key, ":") !== false) { $key = '"' . $key . '"'; } + $string = $spaces.$key.': '.$value."\n"; + } + return $string; + } + + /** + * Creates a literal block for dumping + * @access private + * @return string + * @param $value + * @param $indent int The value of the indent + */ + function _doLiteralBlock($value,$indent) { + if (strpos($value, "\n") === false && strpos($value, "'") === false) { + return sprintf ("'%s'", $value); + } + if (strpos($value, "\n") === false && strpos($value, '"') === false) { + return sprintf ('"%s"', $value); + } + $exploded = explode("\n",$value); + $newValue = '|'; + $indent += $this->_dumpIndent; + $spaces = str_repeat(' ',$indent); + foreach ($exploded as $line) { + $newValue .= "\n" . $spaces . trim($line); + } + return $newValue; + } + + /** + * Folds a string of text, if necessary + * @access private + * @return string + * @param $value The string you wish to fold + */ + function _doFolding($value,$indent) { + // Don't do anything if wordwrap is set to 0 + + if ($this->_dumpWordWrap !== 0 && is_string ($value) && strlen($value) > $this->_dumpWordWrap) { + $indent += $this->_dumpIndent; + $indent = str_repeat(' ',$indent); + $wrapped = wordwrap($value,$this->_dumpWordWrap,"\n$indent"); + $value = ">\n".$indent.$wrapped; + } else { + if ($this->setting_dump_force_quotes && is_string ($value)) + $value = '"' . $value . '"'; + } + + + return $value; + } + +// LOADING FUNCTIONS + + function __load($input) { + $Source = $this->loadFromSource($input); + return $this->loadWithSource($Source); + } + + function __loadString($input) { + $Source = $this->loadFromString($input); + return $this->loadWithSource($Source); + } + + function loadWithSource($Source) { + if (empty ($Source)) return array(); + if ($this->setting_use_syck_is_possible && function_exists ('syck_load')) { + $array = syck_load (implode ('', $Source)); + return is_array($array) ? $array : array(); + } + + $this->path = array(); + $this->result = array(); + + $cnt = count($Source); + for ($i = 0; $i < $cnt; $i++) { + $line = $Source[$i]; + + $this->indent = strlen($line) - strlen(ltrim($line)); + $tempPath = $this->getParentPathByIndent($this->indent); + $line = $this->stripIndent($line, $this->indent); + if ($this->isComment($line)) continue; + if ($this->isEmpty($line)) continue; + $this->path = $tempPath; + + $literalBlockStyle = $this->startsLiteralBlock($line); + if ($literalBlockStyle) { + $line = rtrim ($line, $literalBlockStyle . " \n"); + $literalBlock = ''; + $line .= $this->LiteralPlaceHolder; + + while (++$i < $cnt && $this->literalBlockContinues($Source[$i], $this->indent)) { + $literalBlock = $this->addLiteralLine($literalBlock, $Source[$i], $literalBlockStyle); + } + $i--; + } + + while (++$i < $cnt && $this->greedilyNeedNextLine($line)) { + $line = rtrim ($line, " \n\t\r") . ' ' . ltrim ($Source[$i], " \t"); + } + $i--; + + + + if (strpos ($line, '#')) { + if (strpos ($line, '"') === false && strpos ($line, "'") === false) + $line = preg_replace('/\s+#(.+)$/','',$line); + } + + $lineArray = $this->_parseLine($line); + + if ($literalBlockStyle) + $lineArray = $this->revertLiteralPlaceHolder ($lineArray, $literalBlock); + + $this->addArray($lineArray, $this->indent); + + foreach ($this->delayedPath as $indent => $delayedPath) + $this->path[$indent] = $delayedPath; + + $this->delayedPath = array(); + + } + return $this->result; + } + + function loadFromSource ($input) { + if (!empty($input) && strpos($input, "\n") === false && file_exists($input)) + return file($input); + + return $this->loadFromString($input); + } + + function loadFromString ($input) { + $lines = explode("\n",$input); + foreach ($lines as $k => $_) { + $lines[$k] = rtrim ($_, "\r"); + } + return $lines; + } + + /** + * Parses YAML code and returns an array for a node + * @access private + * @return array + * @param string $line A line from the YAML file + */ + function _parseLine($line) { + if (!$line) return array(); + $line = trim($line); + + if (!$line) return array(); + $array = array(); + + $group = $this->nodeContainsGroup($line); + if ($group) { + $this->addGroup($line, $group); + $line = $this->stripGroup ($line, $group); + } + + if ($this->startsMappedSequence($line)) + return $this->returnMappedSequence($line); + + if ($this->startsMappedValue($line)) + return $this->returnMappedValue($line); + + if ($this->isArrayElement($line)) + return $this->returnArrayElement($line); + + if ($this->isPlainArray($line)) + return $this->returnPlainArray($line); + + + return $this->returnKeyValuePair($line); + + } + + /** + * Finds the type of the passed value, returns the value as the new type. + * @access private + * @param string $value + * @return mixed + */ + function _toType($value) { + if ($value === '') return null; + $first_character = $value[0]; + $last_character = substr($value, -1, 1); + + $is_quoted = false; + do { + if (!$value) break; + if ($first_character != '"' && $first_character != "'") break; + if ($last_character != '"' && $last_character != "'") break; + $is_quoted = true; + } while (0); + + if ($is_quoted) + return strtr(substr ($value, 1, -1), array ('\\"' => '"', '\'\'' => '\'', '\\\'' => '\'')); + + if (strpos($value, ' #') !== false) + $value = preg_replace('/\s+#(.+)$/','',$value); + + if ($first_character == '[' && $last_character == ']') { + // Take out strings sequences and mappings + $innerValue = trim(substr ($value, 1, -1)); + if ($innerValue === '') return array(); + $explode = $this->_inlineEscape($innerValue); + // Propagate value array + $value = array(); + foreach ($explode as $v) { + $value[] = $this->_toType($v); + } + return $value; + } + + if (strpos($value,': ')!==false && $first_character != '{') { + $array = explode(': ',$value); + $key = trim($array[0]); + array_shift($array); + $value = trim(implode(': ',$array)); + $value = $this->_toType($value); + return array($key => $value); + } + + if ($first_character == '{' && $last_character == '}') { + $innerValue = trim(substr ($value, 1, -1)); + if ($innerValue === '') return array(); + // Inline Mapping + // Take out strings sequences and mappings + $explode = $this->_inlineEscape($innerValue); + // Propagate value array + $array = array(); + foreach ($explode as $v) { + $SubArr = $this->_toType($v); + if (empty($SubArr)) continue; + if (is_array ($SubArr)) { + $array[key($SubArr)] = $SubArr[key($SubArr)]; continue; + } + $array[] = $SubArr; + } + return $array; + } + + if ($value == 'null' || $value == 'NULL' || $value == 'Null' || $value == '' || $value == '~') { + return null; + } + + if (intval($first_character) > 0 && preg_match ('/^[1-9]+[0-9]*$/', $value)) { + $intvalue = (int)$value; + if ($intvalue != PHP_INT_MAX) + $value = $intvalue; + return $value; + } + + if (in_array($value, + array('true', 'on', '+', 'yes', 'y', 'True', 'TRUE', 'On', 'ON', 'YES', 'Yes', 'Y'))) { + return true; + } + + if (in_array(strtolower($value), + array('false', 'off', '-', 'no', 'n'))) { + return false; + } + + if (is_numeric($value)) { + if ($value === '0') return 0; + if (trim ($value, 0) === $value) + $value = (float)$value; + return $value; + } + + return $value; + } + + /** + * Used in inlines to check for more inlines or quoted strings + * @access private + * @return array + */ + function _inlineEscape($inline) { + // There's gotta be a cleaner way to do this... + // While pure sequences seem to be nesting just fine, + // pure mappings and mappings with sequences inside can't go very + // deep. This needs to be fixed. + + $seqs = array(); + $maps = array(); + $saved_strings = array(); + + // Check for strings + $regex = '/(?:(")|(?:\'))((?(1)[^"]+|[^\']+))(?(1)"|\')/'; + if (preg_match_all($regex,$inline,$strings)) { + $saved_strings = $strings[0]; + $inline = preg_replace($regex,'YAMLString',$inline); + } + unset($regex); + + $i = 0; + do { + + // Check for sequences + while (preg_match('/\[([^{}\[\]]+)\]/U',$inline,$matchseqs)) { + $seqs[] = $matchseqs[0]; + $inline = preg_replace('/\[([^{}\[\]]+)\]/U', ('YAMLSeq' . (count($seqs) - 1) . 's'), $inline, 1); + } + + // Check for mappings + while (preg_match('/{([^\[\]{}]+)}/U',$inline,$matchmaps)) { + $maps[] = $matchmaps[0]; + $inline = preg_replace('/{([^\[\]{}]+)}/U', ('YAMLMap' . (count($maps) - 1) . 's'), $inline, 1); + } + + if ($i++ >= 10) break; + + } while (strpos ($inline, '[') !== false || strpos ($inline, '{') !== false); + + $explode = explode(', ',$inline); + $stringi = 0; $i = 0; + + while (1) { + + // Re-add the sequences + if (!empty($seqs)) { + foreach ($explode as $key => $value) { + if (strpos($value,'YAMLSeq') !== false) { + foreach ($seqs as $seqk => $seq) { + $explode[$key] = str_replace(('YAMLSeq'.$seqk.'s'),$seq,$value); + $value = $explode[$key]; + } + } + } + } + + // Re-add the mappings + if (!empty($maps)) { + foreach ($explode as $key => $value) { + if (strpos($value,'YAMLMap') !== false) { + foreach ($maps as $mapk => $map) { + $explode[$key] = str_replace(('YAMLMap'.$mapk.'s'), $map, $value); + $value = $explode[$key]; + } + } + } + } + + + // Re-add the strings + if (!empty($saved_strings)) { + foreach ($explode as $key => $value) { + while (strpos($value,'YAMLString') !== false) { + $explode[$key] = preg_replace('/YAMLString/',$saved_strings[$stringi],$value, 1); + unset($saved_strings[$stringi]); + ++$stringi; + $value = $explode[$key]; + } + } + } + + $finished = true; + foreach ($explode as $key => $value) { + if (strpos($value,'YAMLSeq') !== false) { + $finished = false; break; + } + if (strpos($value,'YAMLMap') !== false) { + $finished = false; break; + } + if (strpos($value,'YAMLString') !== false) { + $finished = false; break; + } + } + if ($finished) break; + + $i++; + if ($i > 10) + break; // Prevent infinite loops. + } + + return $explode; + } + + function literalBlockContinues ($line, $lineIndent) { + if (!trim($line)) return true; + if (strlen($line) - strlen(ltrim($line)) > $lineIndent) return true; + return false; + } + + function referenceContentsByAlias ($alias) { + do { + if (!isset($this->SavedGroups[$alias])) { echo "Bad group name: $alias."; break; } + $groupPath = $this->SavedGroups[$alias]; + $value = $this->result; + foreach ($groupPath as $k) { + $value = $value[$k]; + } + } while (false); + return $value; + } + + function addArrayInline ($array, $indent) { + $CommonGroupPath = $this->path; + if (empty ($array)) return false; + + foreach ($array as $k => $_) { + $this->addArray(array($k => $_), $indent); + $this->path = $CommonGroupPath; + } + return true; + } + + function addArray ($incoming_data, $incoming_indent) { + + // print_r ($incoming_data); + + if (count ($incoming_data) > 1) + return $this->addArrayInline ($incoming_data, $incoming_indent); + + $key = key ($incoming_data); + $value = isset($incoming_data[$key]) ? $incoming_data[$key] : null; + if ($key === '__!YAMLZero') $key = '0'; + + if ($incoming_indent == 0 && !$this->_containsGroupAlias && !$this->_containsGroupAnchor) { // Shortcut for root-level values. + if ($key || $key === '' || $key === '0') { + $this->result[$key] = $value; + } else { + $this->result[] = $value; end ($this->result); $key = key ($this->result); + } + $this->path[$incoming_indent] = $key; + return; + } + + + + $history = array(); + // Unfolding inner array tree. + $history[] = $_arr = $this->result; + foreach ($this->path as $k) { + $history[] = $_arr = $_arr[$k]; + } + + if ($this->_containsGroupAlias) { + $value = $this->referenceContentsByAlias($this->_containsGroupAlias); + $this->_containsGroupAlias = false; + } + + + // Adding string or numeric key to the innermost level or $this->arr. + if (is_string($key) && $key == '<<') { + if (!is_array ($_arr)) { $_arr = array (); } + $_arr = array_merge ($_arr, $value); + } else if ($key || $key === '' || $key === '0') { + $_arr[$key] = $value; + } else { + if (!is_array ($_arr)) { $_arr = array ($value); $key = 0; } + else { $_arr[] = $value; end ($_arr); $key = key ($_arr); } + } + + $reverse_path = array_reverse($this->path); + $reverse_history = array_reverse ($history); + $reverse_history[0] = $_arr; + $cnt = count($reverse_history) - 1; + for ($i = 0; $i < $cnt; $i++) { + $reverse_history[$i+1][$reverse_path[$i]] = $reverse_history[$i]; + } + $this->result = $reverse_history[$cnt]; + + $this->path[$incoming_indent] = $key; + + if ($this->_containsGroupAnchor) { + $this->SavedGroups[$this->_containsGroupAnchor] = $this->path; + if (is_array ($value)) { + $k = key ($value); + if (!is_int ($k)) { + $this->SavedGroups[$this->_containsGroupAnchor][$incoming_indent + 2] = $k; + } + } + $this->_containsGroupAnchor = false; + } + + } + + function startsLiteralBlock ($line) { + $lastChar = substr (trim($line), -1); + if ($lastChar != '>' && $lastChar != '|') return false; + if ($lastChar == '|') return $lastChar; + // HTML tags should not be counted as literal blocks. + if (preg_match ('#<.*?>$#', $line)) return false; + return $lastChar; + } + + function greedilyNeedNextLine($line) { + $line = trim ($line); + if (!strlen($line)) return false; + if (substr ($line, -1, 1) == ']') return false; + if ($line[0] == '[') return true; + if (preg_match ('#^[^:]+?:\s*\[#', $line)) return true; + return false; + } + + function addLiteralLine ($literalBlock, $line, $literalBlockStyle) { + $line = $this->stripIndent($line); + $line = rtrim ($line, "\r\n\t ") . "\n"; + if ($literalBlockStyle == '|') { + return $literalBlock . $line; + } + if (strlen($line) == 0) + return rtrim($literalBlock, ' ') . "\n"; + if ($line == "\n" && $literalBlockStyle == '>') { + return rtrim ($literalBlock, " \t") . "\n"; + } + if ($line != "\n") + $line = trim ($line, "\r\n ") . " "; + return $literalBlock . $line; + } + + function revertLiteralPlaceHolder ($lineArray, $literalBlock) { + foreach ($lineArray as $k => $_) { + if (is_array($_)) + $lineArray[$k] = $this->revertLiteralPlaceHolder ($_, $literalBlock); + else if (substr($_, -1 * strlen ($this->LiteralPlaceHolder)) == $this->LiteralPlaceHolder) + $lineArray[$k] = rtrim ($literalBlock, " \r\n"); + } + return $lineArray; + } + + function stripIndent ($line, $indent = -1) { + if ($indent == -1) $indent = strlen($line) - strlen(ltrim($line)); + return substr ($line, $indent); + } + + function getParentPathByIndent ($indent) { + if ($indent == 0) return array(); + $linePath = $this->path; + do { + end($linePath); $lastIndentInParentPath = key($linePath); + if ($indent <= $lastIndentInParentPath) array_pop ($linePath); + } while ($indent <= $lastIndentInParentPath); + return $linePath; + } + + + function clearBiggerPathValues ($indent) { + + + if ($indent == 0) $this->path = array(); + if (empty ($this->path)) return true; + + foreach ($this->path as $k => $_) { + if ($k > $indent) unset ($this->path[$k]); + } + + return true; + } + + + function isComment ($line) { + if (!$line) return false; + if ($line[0] == '#') return true; + if (trim($line, " \r\n\t") == '---') return true; + return false; + } + + function isEmpty ($line) { + return (trim ($line) === ''); + } + + + function isArrayElement ($line) { + if (!$line) return false; + if ($line[0] != '-') return false; + if (strlen ($line) > 3) + if (substr($line,0,3) == '---') return false; + + return true; + } + + function isHashElement ($line) { + return strpos($line, ':'); + } + + function isLiteral ($line) { + if ($this->isArrayElement($line)) return false; + if ($this->isHashElement($line)) return false; + return true; + } + + + function unquote ($value) { + if (!$value) return $value; + if (!is_string($value)) return $value; + if ($value[0] == '\'') return trim ($value, '\''); + if ($value[0] == '"') return trim ($value, '"'); + return $value; + } + + function startsMappedSequence ($line) { + return ($line[0] == '-' && substr ($line, -1, 1) == ':'); + } + + function returnMappedSequence ($line) { + $array = array(); + $key = $this->unquote(trim(substr($line,1,-1))); + $array[$key] = array(); + $this->delayedPath = array(strpos ($line, $key) + $this->indent => $key); + return array($array); + } + + function returnMappedValue ($line) { + $array = array(); + $key = $this->unquote (trim(substr($line,0,-1))); + $array[$key] = ''; + return $array; + } + + function startsMappedValue ($line) { + return (substr ($line, -1, 1) == ':'); + } + + function isPlainArray ($line) { + return ($line[0] == '[' && substr ($line, -1, 1) == ']'); + } + + function returnPlainArray ($line) { + return $this->_toType($line); + } + + function returnKeyValuePair ($line) { + $array = array(); + $key = ''; + if (strpos ($line, ':')) { + // It's a key/value pair most likely + // If the key is in double quotes pull it out + if (($line[0] == '"' || $line[0] == "'") && preg_match('/^(["\'](.*)["\'](\s)*:)/',$line,$matches)) { + $value = trim(str_replace($matches[1],'',$line)); + $key = $matches[2]; + } else { + // Do some guesswork as to the key and the value + $explode = explode(':',$line); + $key = trim($explode[0]); + array_shift($explode); + $value = trim(implode(':',$explode)); + } + // Set the type of the value. Int, string, etc + $value = $this->_toType($value); + if ($key === '0') $key = '__!YAMLZero'; + $array[$key] = $value; + } else { + $array = array ($line); + } + return $array; + + } + + + function returnArrayElement ($line) { + if (strlen($line) <= 1) return array(array()); // Weird %) + $array = array(); + $value = trim(substr($line,1)); + $value = $this->_toType($value); + $array[] = $value; + return $array; + } + + + function nodeContainsGroup ($line) { + $symbolsForReference = 'A-z0-9_\-'; + if (strpos($line, '&') === false && strpos($line, '*') === false) return false; // Please die fast ;-) + if ($line[0] == '&' && preg_match('/^(&['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1]; + if ($line[0] == '*' && preg_match('/^(\*['.$symbolsForReference.']+)/', $line, $matches)) return $matches[1]; + if (preg_match('/(&['.$symbolsForReference.']+)$/', $line, $matches)) return $matches[1]; + if (preg_match('/(\*['.$symbolsForReference.']+$)/', $line, $matches)) return $matches[1]; + if (preg_match ('#^\s*<<\s*:\s*(\*[^\s]+).*$#', $line, $matches)) return $matches[1]; + return false; + + } + + function addGroup ($line, $group) { + if ($group[0] == '&') $this->_containsGroupAnchor = substr ($group, 1); + if ($group[0] == '*') $this->_containsGroupAlias = substr ($group, 1); + //print_r ($this->path); + } + + function stripGroup ($line, $group) { + $line = trim(str_replace($group, '', $line)); + return $line; + } +} + +// Enable use of Spyc from command line +// The syntax is the following: php spyc.php spyc.yaml + +define ('SPYC_FROM_COMMAND_LINE', false); + +do { + if (!SPYC_FROM_COMMAND_LINE) break; + if (empty ($_SERVER['argc']) || $_SERVER['argc'] < 2) break; + if (empty ($_SERVER['PHP_SELF']) || $_SERVER['PHP_SELF'] != 'spyc.php') break; + $file = $argv[1]; + printf ("Spyc loading file: %s\n", $file); + print_r (spyc_load_file ($file)); +} while (0); \ No newline at end of file diff --git a/sites/all/libraries/spyc/php4/test.php4 b/sites/all/libraries/spyc/php4/test.php4 new file mode 100755 index 0000000000..315f5019d8 --- /dev/null +++ b/sites/all/libraries/spyc/php4/test.php4 @@ -0,0 +1,162 @@ + "1.5ghz", "ram" => "1 gig", + "os" => "os x 10.4.1")) + die('Sequence 4 failed'); + +# Mapped sequence +if ($yaml['domains'] != array("yaml.org", "php.net")) + die("Key: 'domains' failed"); + +# A sequence like this. +if ($yaml[5] != array("program" => "Adium", "platform" => "OS X", + "type" => "Chat Client")) + die('Sequence 5 failed'); + +# A folded block as a mapped value +if ($yaml['no time'] != "There isn't any time for your tricks!\nDo you understand?") + die("Key: 'no time' failed"); + +# A literal block as a mapped value +if ($yaml['some time'] != "There is nothing but time\nfor your tricks.") + die("Key: 'some time' failed"); + +# Crazy combinations +if ($yaml['databases'] != array( array("name" => "spartan", "notes" => + array( "Needs to be backed up", + "Needs to be normalized" ), + "type" => "mysql" ))) + die("Key: 'databases' failed"); + +# You can be a bit tricky +if ($yaml["if: you'd"] != "like") + die("Key: 'if: you\'d' failed"); + +# Inline sequences +if ($yaml[6] != array("One", "Two", "Three", "Four")) + die("Sequence 6 failed"); + +# Nested Inline Sequences +if ($yaml[7] != array("One", array("Two", "And", "Three"), "Four", "Five")) + die("Sequence 7 failed"); + +# Nested Nested Inline Sequences +if ($yaml[8] != array( "This", array("Is", "Getting", array("Ridiculous", "Guys")), + "Seriously", array("Show", "Mercy"))) + die("Sequence 8 failed"); + +# Inline mappings +if ($yaml[9] != array("name" => "chris", "age" => "young", "brand" => "lucky strike")) + die("Sequence 9 failed"); + +# Nested inline mappings +if ($yaml[10] != array("name" => "mark", "age" => "older than chris", + "brand" => array("marlboro", "lucky strike"))) + die("Sequence 10 failed"); + +# References -- they're shaky, but functional +if ($yaml['dynamic languages'] != array('Perl', 'Python', 'PHP', 'Ruby')) + die("Key: 'dynamic languages' failed"); + +if ($yaml['compiled languages'] != array('C/C++', 'Java')) + die("Key: 'compiled languages' failed"); + +if ($yaml['all languages'] != array( + array('Perl', 'Python', 'PHP', 'Ruby'), + array('C/C++', 'Java') + )) + die("Key: 'all languages' failed"); + +# Added in .2.2: Escaped quotes +if ($yaml[11] != "you know, this shouldn't work. but it does.") + die("Sequence 11 failed."); + +if ($yaml[12] != "that's my value.") + die("Sequence 12 failed."); + +if ($yaml[13] != "again, that's my value.") + die("Sequence 13 failed."); + +if ($yaml[14] != "here's to \"quotes\", boss.") + die("Sequence 14 failed."); + +if ($yaml[15] != array( 'name' => "Foo, Bar's", 'age' => 20)) + die("Sequence 15 failed."); + +if ($yaml[16] != array( 0 => "a", 1 => array (0 => 1, 1 => 2), 2 => "b")) + die("Sequence 16 failed."); + +if ($yaml['endloop'] != "Does this line in the end indeed make Spyc go to an infinite loop?") + die("[endloop] failed."); + + +print "spyc.yaml parsed correctly\n"; + +?> \ No newline at end of file diff --git a/sites/all/libraries/spyc/spyc.yaml b/sites/all/libraries/spyc/spyc.yaml new file mode 100755 index 0000000000..489f28c9fb --- /dev/null +++ b/sites/all/libraries/spyc/spyc.yaml @@ -0,0 +1,219 @@ +# +# S P Y C +# a simple php yaml class +# +# authors: [vlad andersen (vlad.andersen@gmail.com), chris wanstrath (chris@ozmm.org)] +# websites: [http://www.yaml.org, http://spyc.sourceforge.net/] +# license: [MIT License, http://www.opensource.org/licenses/mit-license.php] +# copyright: (c) 2005-2006 Chris Wanstrath, 2006-2014 Vlad Andersen +# +# spyc.yaml - A file containing the YAML that Spyc understands. + +--- + +# Mappings - with proper types +String: Anyone's name, really. +Int: 13 +BadHex: f0xf3 +Hex: 0xf3 +True: true +False: false +Zero: 0 +Null: NULL +NotNull: 'null' +NotTrue: 'y' +NotBoolTrue: 'true' +NotInt: '5' +Float: 5.34 +Negative: -90 +SmallFloat: 0.7 +NewLine: \n +QuotedNewLine: "\n" + +# A sequence +- PHP Class +- Basic YAML Loader +- Very Basic YAML Dumper + +# A sequence of a sequence +- + - YAML is so easy to learn. + - Your config files will never be the same. + +# Sequence of mappings +- + cpu: 1.5ghz + ram: 1 gig + os : os x 10.4.1 + +# Mapped sequence +domains: + - yaml.org + - php.net + +# A sequence like this. +- program: Adium + platform: OS X + type: Chat Client + +# A folded block as a mapped value +no time: > + There isn't any time + for your tricks! + + Do you understand? + +# A literal block as a mapped value +some time: | + There is nothing but time + for your tricks. + +# Crazy combinations +databases: + - name: spartan + notes: + - Needs to be backed up + - Needs to be normalized + type: mysql + +# You can be a bit tricky +"if: you'd": like + +# Inline sequences +- [One, Two, Three, Four] + +# Nested Inline Sequences +- [One, [Two, And, Three], Four, Five] + +# Nested Nested Inline Sequences +- [This, [Is, Getting, [Ridiculous, Guys]], Seriously, [Show, Mercy]] + +# Inline mappings +- {name: chris, age: young, brand: lucky strike} + +# Nested inline mappings +- {name: mark, age: older than chris, brand: [marlboro, lucky strike]} + +# References -- they're shaky, but functional +dynamic languages: &DLANGS + - Perl + - Python + - PHP + - Ruby +compiled languages: &CLANGS + - C/C++ + - Java +all languages: + - *DLANGS + - *CLANGS + +# Added in .2.2: Escaped quotes +- you know, this shouldn't work. but it does. +- 'that''s my value.' +- 'again, that\'s my value.' +- "here's to \"quotes\", boss." + +# added in .2.3 +- {name: "Foo, Bar's", age: 20} + +# Added in .2.4: bug [ 1418193 ] Quote Values in Nested Arrays +- [a, ['1', "2"], b] + +# Add in .5.2: Quoted new line values. +- "First line\nSecond line\nThird line" + +# Added in .2.4: malformed YAML +all + javascripts: [dom1.js, dom.js] + +# Added in .2 +1040: Ooo, a numeric key! # And working comments? Wow! Colons in comments: a menace (0.3). + +hash_1: Hash #and a comment +hash_2: "Hash #and a comment" +"hash#3": "Hash (#) can appear in key too" + +float_test: 1.0 +float_test_with_quotes: '1.0' +float_inverse_test: 001 + +a_really_large_number: 115792089237316195423570985008687907853269984665640564039457584007913129639936 # 2^256 + +int array: [ 1, 2, 3 ] + +array on several lines: + [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ] + +morelesskey: "" + +array_of_zero: [0] +sophisticated_array_of_zero: {rx: {tx: [0]} } + +switches: + - { row: 0, col: 0, func: {tx: [0, 1]} } + +empty_sequence: [ ] +empty_hash: { } + +special_characters: "[{]]{{]]" + +asterisks: "*" + +empty_key: + : + key: value + +trailing_colon: "foo:" + +multiline_items: + - type: SomeItem + values: [blah, blah, blah, + blah] + ints: [2, 54, 12, + 2143] + +many_lines: | + A quick + fox + + + jumped + over + + + + + + a lazy + + + + dog + + +werte: + 1: nummer 1 + 0: Stunde 0 + +noindent_records: +- record1: value1 +- record2: value2 + +"a:1": [1000] +"a:2": + - 2000 +a:3: [3000] + +complex_unquoted_key: + a:b:''test': value + +array with commas: + ["0","1"] + +invoice: ["Something", "", '', "Something else"] +quotes: ['Something', "Nothing", 'Anything', "Thing"] + +# [Endloop] +endloop: | + Does this line in the end indeed make Spyc go to an infinite loop? diff --git a/sites/all/libraries/spyc/tests/DumpTest.php b/sites/all/libraries/spyc/tests/DumpTest.php new file mode 100755 index 0000000000..9c31e92a66 --- /dev/null +++ b/sites/all/libraries/spyc/tests/DumpTest.php @@ -0,0 +1,136 @@ +files_to_test = array ('../spyc.yaml', 'failing1.yaml', 'indent_1.yaml', 'quotes.yaml'); + } + + public function testShortSyntax() { + $dump = spyc_dump(array ('item1', 'item2', 'item3')); + $awaiting = "- item1\n- item2\n- item3\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDump() { + foreach ($this->files_to_test as $file) { + $yaml = spyc_load(file_get_contents($file)); + $dump = Spyc::YAMLDump ($yaml); + $yaml_after_dump = Spyc::YAMLLoad ($dump); + $this->assertEquals ($yaml, $yaml_after_dump); + } + } + + public function testDumpWithQuotes() { + $Spyc = new Spyc(); + $Spyc->setting_dump_force_quotes = true; + foreach ($this->files_to_test as $file) { + $yaml = $Spyc->load(file_get_contents($file)); + $dump = $Spyc->dump ($yaml); + $yaml_after_dump = Spyc::YAMLLoad ($dump); + $this->assertEquals ($yaml, $yaml_after_dump); + } + } + + public function testDumpArrays() { + $dump = Spyc::YAMLDump(array ('item1', 'item2', 'item3')); + $awaiting = "---\n- item1\n- item2\n- item3\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testNull() { + $dump = Spyc::YAMLDump(array('a' => 1, 'b' => null, 'c' => 3)); + $awaiting = "---\na: 1\nb: null\nc: 3\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testNext() { + $array = array("aaa", "bbb", "ccc"); + #set arrays internal pointer to next element + next($array); + $dump = Spyc::YAMLDump($array); + $awaiting = "---\n- aaa\n- bbb\n- ccc\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDumpingMixedArrays() { + $array = array(); + $array[] = 'Sequence item'; + $array['The Key'] = 'Mapped value'; + $array[] = array('A sequence','of a sequence'); + $array[] = array('first' => 'A sequence','second' => 'of mapped values'); + $array['Mapped'] = array('A sequence','which is mapped'); + $array['A Note'] = 'What if your text is too long?'; + $array['Another Note'] = 'If that is the case, the dumper will probably fold your text by using a block. Kinda like this.'; + $array['The trick?'] = 'The trick is that we overrode the default indent, 2, to 4 and the default wordwrap, 40, to 60.'; + $array['Old Dog'] = "And if you want\n to preserve line breaks, \ngo ahead!"; + $array['key:withcolon'] = "Should support this to"; + + $yaml = Spyc::YAMLDump($array,4,60); + } + + public function testMixed() { + $dump = Spyc::YAMLDump(array(0 => 1, 'b' => 2, 1 => 3)); + $awaiting = "---\n0: 1\nb: 2\n1: 3\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDumpNumerics() { + $dump = Spyc::YAMLDump(array ('404', '405', '500')); + $awaiting = "---\n- \"404\"\n- \"405\"\n- \"500\"\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDumpAsterisks() { + $dump = Spyc::YAMLDump(array ('*')); + $awaiting = "---\n- '*'\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDumpAmpersands() { + $dump = Spyc::YAMLDump(array ('some' => '&foo')); + $awaiting = "---\nsome: '&foo'\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDumpExclamations() { + $dump = Spyc::YAMLDump(array ('some' => '!foo')); + $awaiting = "---\nsome: '!foo'\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDumpExclamations2() { + $dump = Spyc::YAMLDump(array ('some' => 'foo!')); + $awaiting = "---\nsome: foo!\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDumpApostrophes() { + $dump = Spyc::YAMLDump(array ('some' => "'Biz' pimpt bedrijventerreinen")); + $awaiting = "---\nsome: \"'Biz' pimpt bedrijventerreinen\"\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testDumpNumericHashes() { + $dump = Spyc::YAMLDump(array ("titel"=> array("0" => "", 1 => "Dr.", 5 => "Prof.", 6 => "Prof. Dr."))); + $awaiting = "---\ntitel:\n 0: \"\"\n 1: Dr.\n 5: Prof.\n 6: Prof. Dr.\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testEmpty() { + $dump = Spyc::YAMLDump(array("foo" => array())); + $awaiting = "---\nfoo: [ ]\n"; + $this->assertEquals ($awaiting, $dump); + } + + public function testHashesInKeys() { + $dump = Spyc::YAMLDump(array ('#color' => '#ffffff')); + $awaiting = "---\n\"#color\": '#ffffff'\n"; + $this->assertEquals ($awaiting, $dump); + } + +} diff --git a/sites/all/libraries/spyc/tests/IndentTest.php b/sites/all/libraries/spyc/tests/IndentTest.php new file mode 100755 index 0000000000..ee2322f672 --- /dev/null +++ b/sites/all/libraries/spyc/tests/IndentTest.php @@ -0,0 +1,65 @@ +Y = Spyc::YAMLLoad("indent_1.yaml"); + } + + public function testIndent_1() { + $this->assertEquals (array ('child_1' => 2, 'child_2' => 0, 'child_3' => 1), $this->Y['root']); + } + + public function testIndent_2() { + $this->assertEquals (array ('child_1' => 1, 'child_2' => 2), $this->Y['root2']); + } + + public function testIndent_3() { + $this->assertEquals (array (array ('resolutions' => array (1024 => 768, 1920 => 1200), 'producer' => 'Nec')), $this->Y['display']); + } + + public function testIndent_4() { + $this->assertEquals (array ( + array ('resolutions' => array (1024 => 768)), + array ('resolutions' => array (1920 => 1200)), + ), $this->Y['displays']); + } + + public function testIndent_5() { + $this->assertEquals (array (array ( + 'row' => 0, + 'col' => 0, + 'headsets_affected' => array ( + array ( + 'ports' => array (0), + 'side' => 'left', + ) + ), + 'switch_function' => array ( + 'ics_ptt' => true + ) + )), $this->Y['nested_hashes_and_seqs']); + } + + public function testIndent_6() { + $this->assertEquals (array ( + 'h' => array ( + array ('a' => 'b', 'a1' => 'b1'), + array ('c' => 'd') + ) + ), $this->Y['easier_nest']); + } + + public function testIndent_space() { + $this->assertEquals ("By four\n spaces", $this->Y['one_space']); + } + + public function testListAndComment() { + $this->assertEquals (array ('one', 'two', 'three'), $this->Y['list_and_comment']); + } + +} diff --git a/sites/all/libraries/spyc/tests/ParseTest.php b/sites/all/libraries/spyc/tests/ParseTest.php new file mode 100755 index 0000000000..71196af4e9 --- /dev/null +++ b/sites/all/libraries/spyc/tests/ParseTest.php @@ -0,0 +1,401 @@ +yaml = spyc_load_file('../spyc.yaml'); + } + + public function testMergeHashKeys() { + $Expected = array ( + array ('step' => array('instrument' => 'Lasik 2000', 'pulseEnergy' => 5.4, 'pulseDuration' => 12, 'repetition' => 1000, 'spotSize' => '1mm')), + array ('step' => array('instrument' => 'Lasik 2000', 'pulseEnergy' => 5.4, 'pulseDuration' => 12, 'repetition' => 1000, 'spotSize' => '2mm')), + ); + $Actual = spyc_load_file ('indent_1.yaml'); + $this->assertEquals ($Expected, $Actual['steps']); + } + + public function testDeathMasks() { + $Expected = array ('sad' => 2, 'magnificent' => 4); + $Actual = spyc_load_file ('indent_1.yaml'); + $this->assertEquals ($Expected, $Actual['death masks are']); + } + + public function testDevDb() { + $Expected = array ('adapter' => 'mysql', 'host' => 'localhost', 'database' => 'rails_dev'); + $Actual = spyc_load_file ('indent_1.yaml'); + $this->assertEquals ($Expected, $Actual['development']); + } + + public function testNumericKey() { + $this->assertEquals ("Ooo, a numeric key!", $this->yaml[1040]); + } + + public function testMappingsString() { + $this->assertEquals ("Anyone's name, really.", $this->yaml['String']); + } + + public function testMappingsInt() { + $this->assertSame (13, $this->yaml['Int']); + } + + public function testMappingsHex() { + $this->assertSame (243, $this->yaml['Hex']); + $this->assertSame ('f0xf3', $this->yaml['BadHex']); + } + + public function testMappingsBooleanTrue() { + $this->assertSame (true, $this->yaml['True']); + } + + public function testMappingsBooleanFalse() { + $this->assertSame (false, $this->yaml['False']); + } + + public function testMappingsZero() { + $this->assertSame (0, $this->yaml['Zero']); + } + + public function testMappingsNull() { + $this->assertSame (null, $this->yaml['Null']); + } + + public function testMappingsNotNull() { + $this->assertSame ('null', $this->yaml['NotNull']); + } + + public function testMappingsFloat() { + $this->assertSame (5.34, $this->yaml['Float']); + } + + public function testMappingsNegative() { + $this->assertSame (-90, $this->yaml['Negative']); + } + + public function testMappingsSmallFloat() { + $this->assertSame (0.7, $this->yaml['SmallFloat']); + } + + public function testNewline() { + $this->assertSame ('\n', $this->yaml['NewLine']); + } + + public function testQuotedNewline() { + $this->assertSame ("\n", $this->yaml['QuotedNewLine']); + } + + public function testSeq0() { + $this->assertEquals ("PHP Class", $this->yaml[0]); + } + + public function testSeq1() { + $this->assertEquals ("Basic YAML Loader", $this->yaml[1]); + } + + public function testSeq2() { + $this->assertEquals ("Very Basic YAML Dumper", $this->yaml[2]); + } + + public function testSeq3() { + $this->assertEquals (array("YAML is so easy to learn.", + "Your config files will never be the same."), $this->yaml[3]); + } + + public function testSeqMap() { + $this->assertEquals (array("cpu" => "1.5ghz", "ram" => "1 gig", + "os" => "os x 10.4.1"), $this->yaml[4]); + } + + public function testMappedSequence() { + $this->assertEquals (array("yaml.org", "php.net"), $this->yaml['domains']); + } + + public function testAnotherSequence() { + $this->assertEquals (array("program" => "Adium", "platform" => "OS X", + "type" => "Chat Client"), $this->yaml[5]); + } + + public function testFoldedBlock() { + $this->assertEquals ("There isn't any time for your tricks!\nDo you understand?", $this->yaml['no time']); + } + + public function testLiteralAsMapped() { + $this->assertEquals ("There is nothing but time\nfor your tricks.", $this->yaml['some time']); + } + + public function testCrazy() { + $this->assertEquals (array( array("name" => "spartan", "notes" => + array( "Needs to be backed up", + "Needs to be normalized" ), + "type" => "mysql" )), $this->yaml['databases']); + } + + public function testColons() { + $this->assertEquals ("like", $this->yaml["if: you'd"]); + } + + public function testInline() { + $this->assertEquals (array("One", "Two", "Three", "Four"), $this->yaml[6]); + } + + public function testNestedInline() { + $this->assertEquals (array("One", array("Two", "And", "Three"), "Four", "Five"), $this->yaml[7]); + } + + public function testNestedNestedInline() { + $this->assertEquals (array( "This", array("Is", "Getting", array("Ridiculous", "Guys")), + "Seriously", array("Show", "Mercy")), $this->yaml[8]); + } + + public function testInlineMappings() { + $this->assertEquals (array("name" => "chris", "age" => "young", "brand" => "lucky strike"), $this->yaml[9]); + } + + public function testNestedInlineMappings() { + $this->assertEquals (array("name" => "mark", "age" => "older than chris", + "brand" => array("marlboro", "lucky strike")), $this->yaml[10]); + } + + public function testReferences() { + $this->assertEquals (array('Perl', 'Python', 'PHP', 'Ruby'), $this->yaml['dynamic languages']); + } + + public function testReferences2() { + $this->assertEquals (array('C/C++', 'Java'), $this->yaml['compiled languages']); + } + + public function testReferences3() { + $this->assertEquals (array( + array('Perl', 'Python', 'PHP', 'Ruby'), + array('C/C++', 'Java') + ), $this->yaml['all languages']); + } + + public function testEscapedQuotes() { + $this->assertEquals ("you know, this shouldn't work. but it does.", $this->yaml[11]); + } + + public function testEscapedQuotes_2() { + $this->assertEquals ( "that's my value.", $this->yaml[12]); + } + + public function testEscapedQuotes_3() { + $this->assertEquals ("again, that's my value.", $this->yaml[13]); + } + + public function testQuotes() { + $this->assertEquals ("here's to \"quotes\", boss.", $this->yaml[14]); + } + + public function testQuoteSequence() { + $this->assertEquals ( array( 'name' => "Foo, Bar's", 'age' => 20), $this->yaml[15]); + } + + public function testShortSequence() { + $this->assertEquals (array( 0 => "a", 1 => array (0 => 1, 1 => 2), 2 => "b"), $this->yaml[16]); + } + + public function testQuotedNewlines() { + $this->assertEquals ("First line\nSecond line\nThird line", $this->yaml[17]); + } + + public function testHash_1() { + $this->assertEquals ("Hash", $this->yaml['hash_1']); + } + + public function testHash_2() { + $this->assertEquals ('Hash #and a comment', $this->yaml['hash_2']); + } + + public function testHash_3() { + $this->assertEquals ('Hash (#) can appear in key too', $this->yaml['hash#3']); + } + + public function testEndloop() { + $this->assertEquals ("Does this line in the end indeed make Spyc go to an infinite loop?", $this->yaml['endloop']); + } + + public function testReallyLargeNumber() { + $this->assertEquals ('115792089237316195423570985008687907853269984665640564039457584007913129639936', $this->yaml['a_really_large_number']); + } + + public function testFloatWithZeros() { + $this->assertSame ('1.0', $this->yaml['float_test']); + } + + public function testFloatWithQuotes() { + $this->assertSame ('1.0', $this->yaml['float_test_with_quotes']); + } + + public function testFloatInverse() { + $this->assertEquals ('001', $this->yaml['float_inverse_test']); + } + + public function testIntArray() { + $this->assertEquals (array (1, 2, 3), $this->yaml['int array']); + } + + public function testArrayOnSeveralLines() { + $this->assertEquals (array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19), $this->yaml['array on several lines']); + } + + public function testArrayWithCommas() { + $this->assertEquals(array (0, 1), $this->yaml['array with commas']); + } + + public function testmoreLessKey() { + $this->assertEquals ('', $this->yaml['morelesskey']); + } + + public function testArrayOfZero() { + $this->assertSame (array(0), $this->yaml['array_of_zero']); + } + + public function testSophisticatedArrayOfZero() { + $this->assertSame (array('rx' => array ('tx' => array (0))), $this->yaml['sophisticated_array_of_zero']); + } + + public function testSwitches() { + $this->assertEquals (array (array ('row' => 0, 'col' => 0, 'func' => array ('tx' => array(0, 1)))), $this->yaml['switches']); + } + + public function testEmptySequence() { + $this->assertSame (array(), $this->yaml['empty_sequence']); + } + + public function testEmptyHash() { + $this->assertSame (array(), $this->yaml['empty_hash']); + } + + public function testEmptykey() { + $this->assertSame (array('' => array ('key' => 'value')), $this->yaml['empty_key']); + } + + public function testMultilines() { + $this->assertSame (array(array('type' => 'SomeItem', 'values' => array ('blah', 'blah', 'blah', 'blah'), 'ints' => array(2, 54, 12, 2143))), $this->yaml['multiline_items']); + } + + public function testManyNewlines() { + $this->assertSame ('A quick +fox + + +jumped +over + + + + + +a lazy + + + +dog', $this->yaml['many_lines']); + } + + public function testWerte() { + $this->assertSame (array ('1' => 'nummer 1', '0' => 'Stunde 0'), $this->yaml['werte']); + } + + /* public function testNoIndent() { + $this->assertSame (array( + array ('record1'=>'value1'), + array ('record2'=>'value2') + ) + , $this->yaml['noindent_records']); + } */ + + public function testColonsInKeys() { + $this->assertSame (array (1000), $this->yaml['a:1']); + } + + public function testColonsInKeys2() { + $this->assertSame (array (2000), $this->yaml['a:2']); + } + + public function testUnquotedColonsInKeys() { + $this->assertSame (array (3000), $this->yaml['a:3']); + } + + public function testComplicatedKeyWithColon() { + $this->assertSame(array("a:b:''test'" => 'value'), $this->yaml['complex_unquoted_key']); + } + + public function testKeysInMappedValueException() { + $this->setExpectedException('Exception'); + Spyc::YAMLLoad('x: y: z:'); + } + + public function testKeysInValueException() { + $this->setExpectedException('Exception'); + Spyc::YAMLLoad('x: y: z'); + } + + public function testSpecialCharacters() { + $this->assertSame ('[{]]{{]]', $this->yaml['special_characters']); + } + + public function testAngleQuotes() { + $Quotes = Spyc::YAMLLoad('quotes.yaml'); + $this->assertEquals (array ('html_tags' => array ('
                  ', '

                  '), 'html_content' => array ('

                  hello world

                  ', 'hello
                  world'), 'text_content' => array ('hello world')), + $Quotes); + } + + public function testFailingColons() { + $Failing = Spyc::YAMLLoad('failing1.yaml'); + $this->assertSame (array ('MyObject' => array ('Prop1' => array ('key1:val1'))), + $Failing); + } + + public function testQuotesWithComments() { + $Expected = 'bar'; + $Actual = spyc_load_file ('comments.yaml'); + $this->assertEquals ($Expected, $Actual['foo']); + } + + public function testArrayWithComments() { + $Expected = array ('x', 'y', 'z'); + $Actual = spyc_load_file ('comments.yaml'); + $this->assertEquals ($Expected, $Actual['arr']); + } + + public function testAfterArrayWithKittens() { + $Expected = 'kittens'; + $Actual = spyc_load_file ('comments.yaml'); + $this->assertEquals ($Expected, $Actual['bar']); + } + + // Plain characters http://www.yaml.org/spec/1.2/spec.html#id2789510 + public function testKai() { + $Expected = array('-example' => 'value'); + $Actual = spyc_load_file ('indent_1.yaml'); + $this->assertEquals ($Expected, $Actual['kai']); + } + + public function testKaiList() { + $Expected = array ('-item', '-item', '-item'); + $Actual = spyc_load_file ('indent_1.yaml'); + $this->assertEquals ($Expected, $Actual['kai_list_of_items']); + } + + public function testDifferentQuoteTypes() { + $expected = array ('Something', "", "", "Something else"); + $this->assertSame ($expected, $this->yaml['invoice']); + } + + public function testDifferentQuoteTypes2() { + $expected = array ('Something', "Nothing", "Anything", "Thing"); + $this->assertSame ($expected, $this->yaml['quotes']); + } + + // Separation spaces http://www.yaml.org/spec/1.2/spec.html#id2778394 + public function testMultipleArrays() { + $expected = array(array(array('x'))); + $this->assertSame($expected, Spyc::YAMLLoad("- - - x")); + } +} diff --git a/sites/all/libraries/spyc/tests/RoundTripTest.php b/sites/all/libraries/spyc/tests/RoundTripTest.php new file mode 100755 index 0000000000..448fd48d6e --- /dev/null +++ b/sites/all/libraries/spyc/tests/RoundTripTest.php @@ -0,0 +1,78 @@ + $a))); } + + +class RoundTripTest extends PHPUnit_Framework_TestCase { + + protected function setUp() { + } + + public function testNull() { + $this->assertEquals (array ('x' => null), roundTrip (null)); + } + + public function testY() { + $this->assertEquals (array ('x' => 'y'), roundTrip ('y')); + } + + public function testExclam() { + $this->assertEquals (array ('x' => '!yeah'), roundTrip ('!yeah')); + } + + public function test5() { + $this->assertEquals (array ('x' => '5'), roundTrip ('5')); + } + + public function testSpaces() { + $this->assertEquals (array ('x' => 'x '), roundTrip ('x ')); + } + + public function testApostrophes() { + $this->assertEquals (array ('x' => "'biz'"), roundTrip ("'biz'")); + } + + public function testNewLines() { + $this->assertEquals (array ('x' => "\n"), roundTrip ("\n")); + } + + public function testHashes() { + $this->assertEquals (array ('x' => array ("#color" => '#fff')), roundTrip (array ("#color" => '#fff'))); + } + + public function testPreserveString() { + $result1 = roundTrip ('0'); + $result2 = roundTrip ('true'); + $this->assertTrue (is_string ($result1['x'])); + $this->assertTrue (is_string ($result2['x'])); + } + + public function testPreserveBool() { + $result = roundTrip (true); + $this->assertTrue (is_bool ($result['x'])); + } + + public function testPreserveInteger() { + $result = roundTrip (0); + $this->assertTrue (is_int ($result['x'])); + } + + public function testWordWrap() { + $this->assertEquals (array ('x' => "aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), roundTrip ("aaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb")); + } + + public function testABCD() { + $this->assertEquals (array ('a', 'b', 'c', 'd'), Spyc::YAMLLoad(Spyc::YAMLDump(array('a', 'b', 'c', 'd')))); + } + + public function testABCD2() { + $a = array('a', 'b', 'c', 'd'); // Create a simple list + $b = Spyc::YAMLDump($a); // Dump the list as YAML + $c = Spyc::YAMLLoad($b); // Load the dumped YAML + $d = Spyc::YAMLDump($c); // Re-dump the data + $this->assertSame($b, $d); + } + +} diff --git a/sites/all/libraries/spyc/tests/comments.yaml b/sites/all/libraries/spyc/tests/comments.yaml new file mode 100755 index 0000000000..c05012f3d1 --- /dev/null +++ b/sites/all/libraries/spyc/tests/comments.yaml @@ -0,0 +1,3 @@ +foo: 'bar' #Comment +arr: ['x', 'y', 'z'] # Comment here +bar: kittens \ No newline at end of file diff --git a/sites/all/libraries/spyc/tests/failing1.yaml b/sites/all/libraries/spyc/tests/failing1.yaml new file mode 100755 index 0000000000..6906a51c16 --- /dev/null +++ b/sites/all/libraries/spyc/tests/failing1.yaml @@ -0,0 +1,2 @@ +MyObject: + Prop1: {key1:val1} \ No newline at end of file diff --git a/sites/all/libraries/spyc/tests/indent_1.yaml b/sites/all/libraries/spyc/tests/indent_1.yaml new file mode 100755 index 0000000000..26dbf34268 --- /dev/null +++ b/sites/all/libraries/spyc/tests/indent_1.yaml @@ -0,0 +1,65 @@ +root: + child_1: 2 + + child_2: 0 + child_3: 1 + +root2: + child_1: 1 +# A comment + child_2: 2 + +displays: + - resolutions: + 1024: 768 + - resolutions: + 1920: 1200 + +display: + - resolutions: + 1024: 768 + 1920: 1200 + producer: "Nec" + +nested_hashes_and_seqs: + - { row: 0, col: 0, headsets_affected: [{ports: [0], side: left}], switch_function: {ics_ptt: true} } + +easier_nest: { h: [{a: b, a1: b1}, {c: d}] } + +one_space: | + By four + spaces + +steps: + - step: &id001 + instrument: Lasik 2000 + pulseEnergy: 5.4 + pulseDuration: 12 + repetition: 1000 + spotSize: 1mm + - step: + <<: *id001 + spotSize: 2mm + +death masks are: + sad: 2 + <<: {magnificent: 4} + +login: &login + adapter: mysql + host: localhost + +development: + database: rails_dev + <<: *login + +"key": "value:" +colon_only: ":" + +list_and_comment: [one, two, three] # comment +kai: + -example: value +kai_list_of_items: + - -item + - '-item' + -item \ No newline at end of file diff --git a/sites/all/libraries/spyc/tests/quotes.yaml b/sites/all/libraries/spyc/tests/quotes.yaml new file mode 100755 index 0000000000..2ceea86aae --- /dev/null +++ b/sites/all/libraries/spyc/tests/quotes.yaml @@ -0,0 +1,8 @@ +html_tags: + -
                  + -

                  +html_content: + -

                  hello world

                  + - hello
                  world +text_content: + - hello world \ No newline at end of file diff --git a/sites/all/modules/contrib/addressfield/LICENSE.txt b/sites/all/modules/contrib/addressfield/LICENSE.txt new file mode 100644 index 0000000000..d159169d10 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/sites/all/modules/contrib/addressfield/addresses.txt b/sites/all/modules/contrib/addressfield/addresses.txt new file mode 100644 index 0000000000..e64b82023e --- /dev/null +++ b/sites/all/modules/contrib/addressfield/addresses.txt @@ -0,0 +1,298 @@ +AT NULL Feldkirch NULL 6800 Pater Grimm Weg 20 +AU NULL Melbourne NULL +AU NULL Sydney NULL +AU 04 NULL NORMANBY NULL 4059 30 Normanby Terrace +BD NULL Dhaka NULL 1205 23, Subal Das Road, Chowdhury Bazar, Lalbagh +BD NULL Dhaka NULL 1207 R-1,H-19,Kallaynpur,Mirpur,Dhaka +BD NULL Dhaka NULL 1207 World Bank Office Dhaka, Plot E 32, Agargaon, Sher-E-Bangla Nagar +BD NULL Dhaka NULL 1209 House# 66B, Flat# B2 Zigatola +BD NULL Dhaka NULL 1219 390 West Rampura Dhaka +BD NULL Dhaka NULL 1230 Uttara +BD 81 NULL Dhaka NULL 1000 Institute of Water and Flood Management +BD 81 NULL Dhaka NULL 1203 84/a maniknagar +BD 81 NULL Dhaka NULL 1205 Dhaka Bangladesh +BD 81 NULL Dhaka NULL 1207 BetterStories Limited 17 West Panthopath +BD 81 NULL Dhaka NULL 1216 Mirpur, Dhaka +BD 81 NULL Dhaka NULL 1230 830, Prembagan, Dhakshin Khan +BD 82 NULL khulna NULL 9203 +BD NULL NULL Dhaka NULL 1000 Institute of Water and Flood Management +BD NULL NULL Dhaka NULL 1207 World Bank Office Dhaka, Plot E 32, Agargaon, Sher-E-Bangla Nagar +BE NULL Brussels NULL +BE NULL Watermael-Boitsfort NULL 1170 Avenue des Staphylins +BH NULL Manama NULL 00973 Manama Bahrain Manama Bahrain +BR NULL Porto Alegre NULL +BR NULL Recife NULL +BR RJ NULL Rio de Janeiro NULL +BW NULL Francistown NULL NULL +BW NULL NULL Francistown NULL NULL +CA NULL Montreal NULL +CA NULL Toronto NULL +CA BC NULL Vancouver NULL +CA ON NULL Kitchener NULL +CA ON NULL wterloo NULL n2l3g1 200 University Avenue West +CH NULL Geneva NULL 1202 15, chemin Louis-Dunant +CH 25 NULL Zurich NULL 8098 UBS Optimus Foundation Augustinerhof 1 +DE NULL Berlin NULL +DE 05 NULL Frankfurt am Main NULL 60386 Johanna-Tesch-Platz 7 +DK NULL Aarhus NULL +ES NULL Bilbao NULL +ET 44 NULL ADDIS ABABA NULL 11945 ADDIS ABABA,P.O.BOX 11945 +FI NULL Espoo NULL 02130 Mahlarinne 3B +FI NULL Helsinki NULL 00580 Hermannin rantatie 2 A Hermannin rantatie 2 A +FI NULL Tampere NULL 33101 Tampere Univerity of Technology +FI 13 NULL Espoo NULL 02150 Aalto Venture Garage Betonimiehenkuja 3 +GB NULL Exeter NULL +GB NULL London NULL +GB NULL London NULL N4 2DP 2 Myddleton Ave +GB NULL London NULL N7 0AH 104 St George’s Avenue +GB NULL London NULL SE16 3UL 25 Blue Anchor Lane +GB NULL London NULL SW18 5SP Flat 1 150 Merton road +GB NULL London NULL W1T 4BQ 13 Fitzroy Street +GB NULL Oxford NULL +GB NULL Southampton NULL +GB C3 NULL NULL cb244qg 32 market street swavesey +GB E7 NULL London NULL SE3 7TP +GB F3 NULL Wood Green NULL N22 5RU 6 Cedar House +GB H1 NULL London NULL SE11 5JD 47-49 Durham Street +GB H6 NULL London NULL SE8 4DD 8 Harton St Deptford +GB K2 NULL Oxford NULL OX2 6QY 3 The Villas, Rutherway +GH 05 NULL NSAWAM NULL NULL P.O.BOX 455 +GH NULL NULL Accra NULL NULL +ID NULL Bandung NULL 40134 Jalan Sadang Hegar 1 No. 12 RT04 RW13 Sadang Serang +ID NULL Bekasi NULL 17411 Jl.Binadharma 1 No.62. Jatiwaringin +ID NULL Jakarta NULL +ID NULL Jakarta NULL 12440 Jl. H. Niin 7 Lebak Bulus, Cilandak +ID NULL Jakarta NULL 13330 Otista +ID NULL Jakarta selatan NULL 12000 jl. rawa jati timur 6 no. 10 +ID NULL Jakarta Timur NULL Jl.Mulia No.15B Kel.Bidara Cina, Kec.Jatinegara, Jakarta Timur +ID NULL Pematang Siantar NULL 51511 Jl. Durian I 30 +ID 04 NULL Bogor NULL 16165 +ID 04 NULL jakarta NULL otista +ID 04 NULL Jakarta NULL 12520 Jl. Pertanian Raya III No.42 Jakarta Selatan Pasar Minggu +ID 04 NULL Jakarta NULL 13330 Jakarta +ID 04 NULL Jakarta NULL 13330 Jl Sensus IIC Bidaracina Jaktim +ID 04 NULL Jakarta NULL 13330 Jl. Bonasut 2 no.22 +ID 04 NULL Jakarta NULL 13330 Otista 64c +ID 04 NULL jakarta NULL 13330 Otista jaktim +ID 04 NULL Jakarta Timur NULL 13330 Kebon Sayur I no. 1 RT 10/15 +ID 04 NULL Jakarta Timur NULL 13460 Jl. Pondok Kopi Blok G4/5 RT. 005/08 Jakarta Timur +ID 04 NULL Jakarta Timur NULL 13810 Jl. Raya Pondok Gede Rt03 Rw08 no.35 , Lubang Buaya, Jakarta Timur Jl. Raya Pondok Gede Rt03 Rw08 no.35 , Lubang Buaya, Jakarta Timur +ID 07 NULL Brebes NULL 54321 Jl Kersem Blok D14 Perum Taman Indo Kaligangsa Wetan Brebes +ID 07 NULL Semarang NULL 50143 Puspowarno Tengah 2/2 +ID 08 NULL Lumajang NULL 67373 Desa Tumpeng Kecamatan Candipuro Lumajang +ID 30 NULL Bandung NULL 55241 Jl Pelesiran No 55A/56 +ID 30 NULL Bekasi NULL 17510 bekasi West Java Indonesia +ID 30 NULL Depok NULL 16245 Jalan juragan sinda 2 no 10 +ID 30 NULL Depok NULL 16424 Jalan Margonda RayaJalan Kober Gang Mawar +ID 30 NULL Depok NULL 16424 Jl. Haji Yahya Nuih no.24, Pondok Cina +ID 30 NULL Depok NULL 16425 Kukusan Kelurahan +ID 30 NULL Depok NULL 16518 Jl. Salak No.1/C.88 Durenseribu Bojongsari +ID 30 NULL Depok NULL 16952 Jl. Merak No.34 -36 Rt.004/014 Jl. Merak No. 34 -36 Rt. 004/014 +ID 36 NULL biak numfor NULL 98111 jl. s. mamberamo no 6782 biak numfor +IL NULL Tel Aviv NULL +IN NULL Bangalore NULL +IN NULL India NULL +IN NULL new delhi NULL 110003 55 lodi estate +IN 07 NULL NEW DELHI NULL 110018 15/11 A 1ST FLOOR TILAK NAGAR +IN 07 NULL New Delhu NULL 110075 B 54 Hilansh Apartments Plot No 1, Sector 10, Dwarka +IN 10 NULL Gurgaon NULL D- 201 Ivy Apartments Sushant Lok 1 Gurgaon Haryana +IN 13 NULL Trivandrum NULL 695010 TC 9/1615, SRMH Road, Sasthamangalam, Trivandrum +IN 16 NULL Mumbai NULL 400020 Bharat Mahal, Flat#55 Marine Drive +IN 16 NULL Mumbai NULL 400028 303,Shree Parvati Co-Op Housing Society, D.L.Vaidya Road,Dadar +IN 16 NULL Pune NULL +IN 16 NULL Pune NULL Infosys Campus Hinjewadi Phase 2 +IN 16 NULL Pune NULL 400705 #22 Iris Garden Gokhale Road +IN 16 NULL PUNE NULL 411043 +IN 16 NULL Pune NULL 411051 +IN 16 NULL Pune NULL 411057 Infosys Ltd. Rajiv gandhi infostech park Hinjewadi phase 2 +IN 16 NULL Pune NULL 412108 Pune Maharatshtra +IN 16 NULL Pune NULL 433011 502 utkarsh vihar golande state pune +IN 19 NULL Bangalore NULL 560080 Indian Institute for Human Settlements IIHS Bangalore City Campus, Sadashivanagar, +IN 19 NULL Bangalore NULL 560100 electronic city +IN 19 NULL Bhalki NULL 585411 bhalki,bidar ,karnataka karnataka +IN 24 NULL Jaipur NULL 302011 Institute of Health Management Research 1, Prabhu Dayal Marg +IR 26 NULL Tehran NULL 1118844454 Baharestan sq. mostafa khomeini str., javahery Ave., no. 11, +IT NULL Trento NULL +JM 08 NULL Kingston NULL Kgn 7 MOna Campus UWI +KE NULL Nairobi NULL +KE 05 NULL Nairobi NULL 30300 212,kapsabet +KH NULL NULL Phnom Penh NULL +LR NULL Monrovia NULL 00000 +NG 11 NULL Abuja NULL 930001 17 Bechar street Wuse zone 2 +PE 15 NULL Lima NULL 18 Lima Lima +PE 15 NULL Lima NULL Lima 18 123 Miraflores +PE NULL NULL Lima NULL 03 Calle Granada 104 +PE NULL NULL Lima NULL 18 Lima Lima +PH NULL Manila NULL Globe Telepark 111 Valero Street +PH NULL Quezon Coty NULL 1109 86 Harvard Street, Cubao, Quezon City, Philippines 84 Harvard Street, Cubao, Quezon City,hilippines +PH 20 NULL Silang NULL 4118 370 Bayungan Kaong Silang Cavite +PH 57 NULL Kidapawan NULL 9400 Kidapawan City Kidapawan City +PH 66 NULL zamboanga NULL 7000 29-tripplet rd san jose 29-tripplet rd san jose +PH D9 NULL Pasig City NULL World Bank Office Manila, 20/F Taipan Place F. Ortigas Jr. Road, Ortigas Center +PK NULL Lahore NULL 54000 17-R Model Town Lahore +PK NULL Lahore NULL 54000 53- chamber lane road Lahore +PK NULL Lahore NULL 54000 85 E block Model Town +PK NULL Lahore NULL 54000 House no 227, street no 5, Imamia Colony Shahadra Lahore +PK NULL LAHORE NULL 54000 room no.6 khalid bim waleed hall, near New Anarkali, LAHORE room no.6 khalid bim waleed hall, near New Anarkali, LAHORE +PK NULL Lahore NULL pk097 LUMS, Lahore, +PK NULL Sheikhupura NULL 03935 D.H.Q.Hospital Sheikhupura House number 08. Room no 109 Khalid bin waleed haal, punjab University lahore old campus. +PK 02 NULL Quetta NULL 87000 Postal Address 87000, Kuchlak, Quetta, Balochistan. H#24 Peer Abul Khair road Quetta, Balochistan. +PK 02 NULL Quetta NULL 87300 block no-1 falt no. 7 New Crime Branch Abbas Ali Road Cantt +PK 02 NULL Quetta NULL 87300 Flat no. 3 Shafeen Centre Jinnah Town ,Near I.T university , Quetta +PK 02 NULL Quetta NULL 87300 H-no. C-220 Zarghoonabad Phase-2 , Nawa Killi ,Quetta +PK 04 NULL burewala NULL 60101 Fatima Fayyaz Hazrat Sakina hall girls hostel number 9 Punjab university Lahore Pakistan Sardar Wajid Azim Azeem abad Burewala dist Vehari Pakistan +PK 04 NULL Faisalabad NULL 38000 P 101/1, Green Town, Millat Road, Faisalabad +PK 04 NULL Islamabad NULL 44000 P.O Tarlai kalan chappar Islamabad +PK 04 NULL lahore NULL +PK 04 NULL Lahore NULL 54000 +PK 04 NULL lahore NULL 54000 Street No.63 House 36/A Al-madad Pak Colony Ravi Road, Lahore. Street No.63 House 36/A Al-madad Pak Colony Ravi Road, Lahore. +PK 04 NULL Lahore NULL 54000 1149-1-D2 Green Town Lahore +PK 04 NULL Lahore NULL 54000 124, street# 2, karim block Allama Iqbal Town lahore. 124, street# 2, karim block Allama Iqbal Town lahore. +PK 04 NULL Lahore NULL 54000 150 A Qila Lachman Singh Ravi Road lahore +PK 04 NULL Lahore NULL 54000 166/1L DHA Lahore +PK 04 NULL Lahore NULL 54000 172 A2 Township Lahore +PK 04 NULL Lahore NULL 54000 183,S/Block, Model Town, Lhr +PK 04 NULL lahore NULL 54000 19- A block ,Eden Lane Villas Raiwind Road ,Lahore +PK 04 NULL lahore NULL 54000 3-c kaliyar road opposite kids lyceum, rustam park near mor samnabad +PK 04 NULL Lahore NULL 54000 31 Saeed Block, Canal Bank Scheme +PK 04 NULL Lahore NULL 54000 31c DHA Lahore +PK 04 NULL Lahore NULL 54000 387 E1 wapda town, Lahore +PK 04 NULL Lahore NULL 54000 45-D dha eme sector multan road,lahore +PK 04 NULL Lahore NULL 54000 5 Zafar Ali Road +PK 04 NULL Lahore NULL 54000 54-R PGECHS +PK 04 NULL lahore NULL 54000 566 E-1 johar town lahore 566 E-1 johar town lahore +PK 04 NULL Lahore NULL 54000 82/1 Z Block, Phase 3 DHA +PK 04 NULL Lahore NULL 54000 A-1 VRI Zarrar shaheed road lahore cantt A-1 VRI Zarrar shaheed road lahore cantt +PK 04 NULL lahore NULL 54000 e5/39D street 6 zaman colony cavalry ground ext +PK 04 NULL Lahore NULL 54000 Ho # 61, Block G3, Johar Town Lahore +PK 04 NULL LAhore NULL 54000 House #19-A street #5 Usman nagr Ghaziabad Lahore +PK 04 NULL lahore NULL 54000 House no 692 street no 67 sadar bazar +PK 04 NULL Lahore NULL 54000 Khosa Law Chamber 1 Turner Road +PK 04 NULL Lahore NULL 54000 Lahore,Pakistan Lahore,Pakistan +PK 04 NULL Lahore NULL 54000 room no 69, khalid bin waleed hall, anarkali +PK 04 NULL Lahore NULL 54000 Suite # 8, Al-Hafeez Suites, Gulberg II +PK 04 NULL Lahore NULL 54085 199 Shadman 2 +PK 04 NULL Lahore NULL 54300 Mughalpura Lahore Pakistan +PK 04 NULL Lahore NULL 54660 SD 69 falcon complex gulberg III lahore +PK 04 NULL lahore NULL 54800 764-G4 johar town ,lahore +PK 04 NULL Rawalpindi NULL 44000 House 522, F-Block Sattellite Town, Rawalpindi +PK 04 NULL Rawalpindi NULL 46000 1950/c, Indusroad 2, Tariqabad, Rawalpindi Cantt +PK 04 NULL Rawalpindi NULL 46000 House 54-E Lane 9 Sector 4, AECHS Chaklala Rawalpindi +PK 04 NULL Rawalpindi NULL 46000 House B-1343, Sattellite town Rawalpindi +PK 04 NULL Rawalpindi NULL 46000 House CB-299F, Street 1, Lane 4 Peshawar Road Rawalpindi +PK 04 NULL Rawalpindi NULL 46300 House No 1518 Umer Block phase 8 BehriaTown +PK 04 NULL sialkot NULL 51310 The National Model School, Ismaiealabad, Pacca Garah Sialkot +PK 08 NULL Islamabad NULL CIomsats Institute of Information Technology Islamabad +PK 08 NULL Islamabad NULL 38700 COMSATS tarlai boys hostel Islamabad. COMSATS tarlai boys hostel Islamabad (Room 30) +PK 08 NULL Islamabad NULL 44000 +PK 08 NULL Islamabad NULL 44000 House # 256, Street # 9, Shahzad Town, Islamabad. +PK 08 NULL Islamabad NULL 44000 Islamabad , Comsats University Islamabd ,Pakistan +PK 08 NULL Islamabad NULL 44000 World Bank Building Sector G 5 +PK 08 NULL lahore NULL 54000 3c zafar ali road gulburg 5 3c zafar ali road gulburg 5 +PK 08 NULL lahore NULL 54000 49-a bilal park, chaburgy 49-a bilal park, chaburgy +PK NULL NULL Lahore NULL 54000 +PK NULL NULL Lahore NULL 54000 85 E block Model Town +SN 01 NULL NULL ouakam cité comico en face 217 +SN 01 NULL Dakar NULL +SN 01 NULL Dakar NULL IDEV-ic Patte d'oie Builder's Villa B11 +SN 01 NULL Dakar NULL liberte 6/ dakar +SN 01 NULL Dakar NULL ngor +SN 01 NULL Dakar NULL 4027 ZAC Mbao Cité Fadia +SN NULL NULL Dakar NULL IDEV-ic Patte d'oie Builder's Villa B11 +TZ NULL Dar es Salaam NULL NULL +TZ NULL Dar es salaam NULL NULL 76021 Dar es salaam 1507 Morogoro +TZ NULL Dar es salaam NULL NULL dar es salaam nassoro.ahmedy@yahoo.com +TZ NULL DAR ES SALAAM NULL NULL dar es salaam UDSM +TZ NULL Dar es salaam NULL NULL NA +TZ NULL DAR ES SALAAM NULL NULL P O BOX 23409 +TZ NULL dar es salaam NULL NULL p. o. box 104994 +TZ NULL Dar es Salaam NULL NULL P.o. BOX 71415 Dar es Salaam +TZ NULL Dar es Salaam NULL NULL P.O.BOx 66675 DSM +TZ NULL Dar es salaam NULL NULL Tz Tz +TZ NULL dsm NULL NULL +TZ 02 NULL Bagamoyo NULL NULL PO.Box 393 +TZ 02 NULL Dar es salaam NULL NULL 22548 +TZ 03 NULL Dar-es-salaam NULL NULL Dodoma Municipal Kimara, Dar-es-salaa, +TZ 23 NULL Dar es Salaam NULL NULL +TZ 23 NULL dar es salaam NULL NULL 35074 +TZ 23 NULL dar es salaam NULL NULL 67389 +TZ 23 NULL Dar es Salaam NULL NULL COSTECH, Dar es Salaam, Tanzania +TZ 23 NULL Dar es salaam NULL NULL na +TZ 23 NULL dar es salaam NULL NULL p o box 60164 +TZ 23 NULL dar es salaam NULL NULL P. O. Box 77588 +TZ 23 NULL dar es salaam NULL NULL P.O BOX 78144 +TZ 23 NULL Dar es Salaam NULL NULL P.O.BOX 78373 +TZ 23 NULL Dar es salaam NULL NULL UDSM Dar es Salaam +TZ 23 NULL Dar es salaam NULL NULL udsm udsm +TZ 23 NULL Temeke NULL NULL P.O. Box 50127 +TZ NULL NULL Dar es Salaam NULL NULL +TZ NULL NULL Dar es Salaam NULL NULL Kigoma +TZ NULL NULL Dar es Salaam NULL NULL Mwanza +UG NULL Kampala NULL NULL +UG NULL Kampala NULL NULL Kampala Uganda East Africa +US NULL London NULL SE1 8RT Capital Tower 91 Waterloo Road +US CA NULL Los Angeles NULL +US CA NULL Pleasanton NULL 94588 3412 Pickens Lane +US CA NULL Sacramento NULL +US CA NULL San Francisco NULL +US CA NULL seattle NULL 98113 1234 1st st +US CO NULL Denver NULL 80235 6666 West Quincy Ave +US CT NULL Greenwich NULL 06830 140 Milbank +US CT NULL Hartford NULL 06106 Center for Urban and Global Studies at Trinity College, 70 Vernon Street +US DC NULL Washington NULL +US DC NULL Washington NULL 20007 World Bank Headquarters 1818 H Street NW +US DC NULL Washington NULL 20010 +US DC NULL Washington NULL 20036 +US DC NULL Washington NULL 20405 1889 F St NW +US DC NULL Washington NULL 20433 +US DC NULL Washington NULL 20433 1818 H Street NW +US DC NULL Washington NULL 20433 1818H St +US DC NULL Washington NULL 20433 1818 H Street NW +US DC NULL Washington DC NULL 20005 1424, K Street, NW Suite 600 +US DC NULL Washington DC NULL 20010 1818 H Street, NW +US DC NULL Washington, DC NULL 20003 1818 H Street NW +US DE NULL Virgin Islands|Charlotte Amalie,Cruz Bay,Christiansted NULL Morocco|Tafraout,Rabat,Tangier,Tetouan,Casablanca,Marrakesh,Fez,Oujda,Meknes,Agadir United Arab Emirates|Garhoud,Dubai,Bur Dubai,Ras al Khaymah,Abu Dhabi,Ajman,Al Fujayrah,Sharjah +US FL NULL Falmouth NULL Falmouth Falmouth +US FL NULL Lilongwe NULL Lilongwe Lilongwe +US GA NULL Atlanta NULL +US GU NULL Herndon NULL 15642 Ht USA +US GU NULL Miami NULL Miami Miami +US MD NULL Gaithersburg NULL 20877 554 N Frederick Avenue Suite 216 +US MD NULL Potomac NULL 20854 14 Sandalfoot Court +US MD NULL Silver Spring NULL 20901 9202 Whitney St. +US MI NULL Traverse City NULL 49685 PO Box 792 +US ND NULL Pirassununga NULL Pirassununga Pirassununga +US NJ NULL Princeton NULL +US NY NULL Brooklyn NULL 11206-1980 25 Montrose Ave. Apt 304 +US NY NULL Brooklyn NULL 11225 975 washington ave 2d +US NY NULL Brooklyn NULL 11217 150 4TH AVE APT 9E +US NY NULL New York NULL +US NY NULL New York NULL 10013 148 Lafayette St. PH +US NY NULL New York NULL 10017 UNICEF 3 UN Plaza +US NY NULL New York NULL 10019 25 Columbus Circle Suite 52E +US NY NULL New York NULL 10024 65 West 85th Street 3A +US NY NULL New York NULL 10027 606 W. 116th Street #22 +US NY NULL New York NULL 10037 +US NY NULL Rochester NULL +US NY NULL Scarsdale NULL 10583-1423 54 Walworth Avenue +US OR NULL Portland NULL +US PA NULL Philadelphia NULL +US PA NULL Philadelphia NULL +US PR NULL Colonel Hill NULL Colonel Hill Colonel Hill +US SD NULL Banjul NULL Banjul Banjul +US SD NULL London NULL London London +US TX NULL Aledo NULL 76008 1588 Hunterglenn Dr +US TX NULL Keller NULL 76248 810 Placid View Ct. +US WA NULL Seattle NULL +ZA NULL Cape Town NULL +ZA NULL Cape Town NULL 7945 Alexander Road Muizenberg +ZA NULL Pretoria NULL +ZA 11 NULL Cape Town NULL +ZA 11 NULL Cape Town NULL 7435 PostNet Suite #57, Private Bag X18 Milnerton +ZA 11 NULL Cape town NULL 7508 24 Solyet Court, Lansdowne Road Claremont +ZA 11 NULL Cape Town NULL 7701 +ZA 11 NULL Cape Town NULL 7785 10 Nyamakazi Road Luzuko Park Phillipi East +ZA 11 NULL Cape Town NULL 7915 66 Albert Rd +ZA 11 NULL Cape Town NULL 8001 210 Long Street +ZM NULL Lusaka NULL +ZM 09 NULL LUSAKA NULL 10101 P.O. BOX FW 174 diff --git a/sites/all/modules/contrib/addressfield/addressfield-rtl.css b/sites/all/modules/contrib/addressfield/addressfield-rtl.css new file mode 100644 index 0000000000..d979946d38 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/addressfield-rtl.css @@ -0,0 +1,10 @@ +div.addressfield-container-inline > div.form-item { + float: right; + margin-right: 0; + margin-left: 1em; +} + +div.addressfield-container-inline.country-GB > div.form-item { + margin-left: auto; + margin-right: 0; +} diff --git a/sites/all/modules/contrib/addressfield/addressfield.address_formats.inc b/sites/all/modules/contrib/addressfield/addressfield.address_formats.inc new file mode 100644 index 0000000000..5ab599544e --- /dev/null +++ b/sites/all/modules/contrib/addressfield/addressfield.address_formats.inc @@ -0,0 +1,442 @@ + array('locality'), + 'required_fields' => array('locality'), + 'dependent_locality_label' => t('Suburb'), + 'locality_label' => t('City'), + 'administrative_area_label' => t('Province'), + 'postal_code_label' => t('Postal code'), + 'render_administrative_area_value' => FALSE, + ); + + $address_formats = array(); + // These formats differ from the default only by the presence of the + // postal code in 'used_fields'. + $countries_with_optional_postal_code = array( + 'AC', 'AD', 'AL', 'AZ', 'BA', 'BB', 'BD', 'BG', 'BH', 'BM', 'BN', 'BT', + 'CR', 'CY', 'CZ', 'DO', 'DZ', 'EC', 'EH', 'ET', 'FO', 'GE', 'GN', 'GT', + 'GW', 'HR', 'HT', 'HU', 'IL', 'IS', 'JO', 'KE', 'KG', 'KH', 'KW', 'LA', + 'LA', 'LB', 'LK', 'LR', 'LS', 'MA', 'MC', 'MD', 'ME', 'MG', 'MK', 'MM', + 'MT', 'MU', 'MV', 'NE', 'NP', 'OM', 'PK', 'PY', 'RO', 'RS', 'SA', 'SI', + 'SK', 'SN', 'SZ', 'TA', 'TJ', 'TM', 'TN', 'VA', 'VC', 'VG', 'XK', 'ZM', + ); + foreach ($countries_with_optional_postal_code as $code) { + $address_formats[$code] = array( + 'used_fields' => array('locality', 'postal_code'), + ); + } + + // These formats differ from the default only by the presence of the + // postal code in 'used_fields' and 'required_fields'. + $countries_with_required_postal_code = array( + 'AT', 'AX', 'BE', 'BL', 'CH', 'DE', 'DK', 'FI', 'FK', 'FR', 'GF', 'GG', + 'GL', 'GP', 'GR', 'GS', 'IM', 'IO', 'JE', 'LI', 'LU', 'MF', 'MQ', 'NC', + 'NL', 'NO', 'PL', 'PM', 'PN', 'PT', 'RE', 'SE', 'SH', 'SJ', 'TC', 'WF', + 'YT', + ); + foreach ($countries_with_required_postal_code as $code) { + $address_formats[$code] = array( + 'used_fields' => array('locality', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + ); + } + + $address_formats['AE'] = array( + 'used_fields' => array('administrative_area'), + 'administrative_area_label' => t('Emirate'), + ); + $address_formats['AM'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['AR'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['AS'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['AU'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'locality_label' => t('City/Suburb'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('Postcode'), + ); + $address_formats['BR'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'dependent_locality_label' => t('Neighborhood'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + ); + $address_formats['BS'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'administrative_area_label' => t('Island'), + ); + $address_formats['BY'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['CA'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['CC'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['CL'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['CN'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area'), + 'dependent_locality_label' => t('District'), + ); + $address_formats['CO'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'administrative_area_label' => t('Department', array(), array('context' => 'Territory of a country')), + ); + $address_formats['CV'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('Island'), + ); + $address_formats['CX'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['EG'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('Governorate'), + ); + $address_formats['EE'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'administrative_area_label' => t('County'), + ); + $address_formats['ES'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['FM'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['GB'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'locality_label' => t('Town/City'), + 'administrative_area_label' => t('County'), + 'postal_code_label' => t('Postcode'), + ); + $address_formats['GI'] = array( + 'used_fields' => array('postal_code'), + ); + $address_formats['GU'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['HK'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'required_fields' => array('administrative_area'), + 'locality_label' => t('District'), + 'administrative_area_label' => t('Area', array(), array('context' => 'Territory of a country')), + ); + $address_formats['HN'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area'), + ); + $address_formats['ID'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'locality_label' => t('City/Regency'), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['IE'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'locality_label' => t('Town/City'), + 'administrative_area_label' => t('County'), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['IN'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('PIN code'), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['IQ'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area'), + ); + $address_formats['IR'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'administrative_area', 'postal_code'), + 'dependent_locality_label' => t('Neighborhood'), + ); + $address_formats['IT'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['JM'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'required_fields' => array('locality', 'administrative_area'), + 'administrative_area_label' => t('Parish', array(), array('context' => 'Territory of a country')), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['JP'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('Prefecture'), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['KI'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'administrative_area_label' => t('Island'), + ); + $address_formats['KN'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'required_fields' => array('locality', 'administrative_area'), + 'administrative_area_label' => t('Island'), + ); + $address_formats['KR'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'dependent_locality_label' => t('District'), + ); + $address_formats['KY'] = array( + 'used_fields' => array('administrative_area', 'postal_code'), + 'required_fields' => array('administrative_area'), + 'administrative_area_label' => t('Island'), + ); + $address_formats['KZ'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('Region', array(), array('context' => 'Territory of a country')), + ); + $address_formats['LT'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'administrative_area_label' => t('County'), + ); + $address_formats['LV'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'administrative_area_label' => t('Municipality'), + ); + $address_formats['MH'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['MN'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['MP'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['MX'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'dependent_locality_label' => t('Neighborhood'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + ); + $address_formats['MY'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'dependent_locality_label' => t('Village / Township'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['MZ'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['NF'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['NG'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + ); + $address_formats['NI'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('Department', array(), array('context' => 'Territory of a country')), + ); + $address_formats['NR'] = array( + 'used_fields' => array('administrative_area'), + 'required_fields' => array('administrative_area'), + 'administrative_area_label' => t('District'), + ); + $address_formats['NZ'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'locality_label' => t('Town/City'), + 'postal_code_label' => t('Postcode'), + ); + $address_formats['PA'] = array( + 'used_fields' => array('locality', 'administrative_area'), + ); + $address_formats['PE'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'locality_label' => t('District'), + 'administrative_area_label' => t('Department', array(), array('context' => 'Territory of a country')), + ); + $address_formats['PF'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('Island'), + ); + $address_formats['PG'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area'), + ); + $address_formats['PH'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'administrative_area', 'postal_code'), + ); + $address_formats['PR'] = array( + 'used_fields' => array('locality', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['PW'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['RU'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + ); + $address_formats['SC'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'administrative_area_label' => t('Island'), + ); + $address_formats['SG'] = array( + 'used_fields' => array('postal_code'), + 'required_fields' => array('postal_code'), + ); + $address_formats['SM'] = array( + 'used_fields' => array('locality', 'postal_code'), + 'required_fields' => array('postal_code'), + ); + $address_formats['SO'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area'), + ); + $address_formats['SR'] = array( + 'used_fields' => array('locality', 'administrative_area'), + ); + $address_formats['SV'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area'), + ); + $address_formats['TH'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'administrative_area', 'postal_code'), + ); + $address_formats['TR'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'locality_label' => t('District'), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['TV'] = array( + 'used_fields' => array('locality', 'administrative_area'), + 'administrative_area_label' => t('Island'), + ); + $address_formats['TW'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['UA'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + 'administrative_area_label' => t('Region', array(), array('context' => 'Territory of a country')), + ); + $address_formats['UM'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['US'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['UY'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['UZ'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['VE'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area'), + 'render_administrative_area_value' => TRUE, + ); + $address_formats['VI'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + 'required_fields' => array('locality', 'administrative_area', 'postal_code'), + 'administrative_area_label' => t('State', array(), array('context' => 'Territory of a country')), + 'postal_code_label' => t('ZIP code'), + ); + $address_formats['VN'] = array( + 'used_fields' => array('locality', 'administrative_area', 'postal_code'), + ); + $address_formats['ZA'] = array( + 'used_fields' => array('dependent_locality', 'locality', 'postal_code'), + 'required_fields' => array('locality', 'postal_code'), + ); + + // Allow other modules to alter the formats. + drupal_alter('addressfield_address_formats', $address_formats); + + if (isset($address_formats[$country_code])) { + $format = $address_formats[$country_code] + $default_values; + } + else { + // There is no predefined address format for the requested country, + // but the defaults should work fine. + $format = $default_values; + } + + return $format; +} diff --git a/sites/all/modules/contrib/addressfield/addressfield.administrative_areas.inc b/sites/all/modules/contrib/addressfield/addressfield.administrative_areas.inc new file mode 100644 index 0000000000..88343de9da --- /dev/null +++ b/sites/all/modules/contrib/addressfield/addressfield.administrative_areas.inc @@ -0,0 +1,1037 @@ + t('Abu Dhabi'), + 'FU' => t('Fujairah'), + 'UQ' => t('Umm al-Quwain'), + 'SH' => t('Sharjah'), + 'DU' => t('Dubai'), + 'RK' => t('Ras al-Khaimah'), + 'AJ' => t('Ajmān'), + ); + $administrative_areas['AR'] = array( + 'B' => t('Buenos Aires'), + 'K' => t('Catamarca'), + 'H' => t('Chaco'), + 'U' => t('Chubut'), + 'C' => t('Ciudad de Buenos Aires'), + 'X' => t('Córdoba'), + 'W' => t('Corrientes'), + 'E' => t('Entre Ríos'), + 'P' => t('Formosa'), + 'Y' => t('Jujuy'), + 'L' => t('La Pampa'), + 'F' => t('La Rioja'), + 'M' => t('Mendoza'), + 'N' => t('Misiones'), + 'Q' => t('Neuquén'), + 'R' => t('Río Negro'), + 'A' => t('Salta'), + 'J' => t('San Juan'), + 'D' => t('San Luis'), + 'Z' => t('Santa Cruz'), + 'S' => t('Santa Fe'), + 'G' => t('Santiago del Estero'), + 'V' => t('Tierra del Fuego'), + 'T' => t('Tucumán'), + ); + $administrative_areas['AU'] = array( + 'ACT' => t('Australian Capital Territory'), + 'NSW' => t('New South Wales'), + 'NT' => t('Northern Territory'), + 'QLD' => t('Queensland'), + 'SA' => t('South Australia'), + 'TAS' => t('Tasmania'), + 'VIC' => t('Victoria'), + 'WA' => t('Western Australia'), + ); + $administrative_areas['BR'] = array( + 'AC' => t('Acre'), + 'AL' => t('Alagoas'), + 'AM' => t('Amazonas'), + 'AP' => t('Amapá'), + 'BA' => t('Bahia'), + 'CE' => t('Ceará'), + 'DF' => t('Distrito Federal'), + 'ES' => t('Espírito Santo'), + 'GO' => t('Goiás'), + 'MA' => t('Maranhão'), + 'MG' => t('Minas Gerais'), + 'MS' => t('Mato Grosso do Sul'), + 'MT' => t('Mato Grosso'), + 'PA' => t('Pará'), + 'PB' => t('Paraíba'), + 'PE' => t('Pernambuco'), + 'PI' => t('Piauí'), + 'PR' => t('Paraná'), + 'RJ' => t('Rio de Janeiro'), + 'RN' => t('Rio Grande do Norte'), + 'RO' => t('Rondônia'), + 'RR' => t('Roraima'), + 'RS' => t('Rio Grande do Sul'), + 'SC' => t('Santa Catarina'), + 'SE' => t('Sergipe'), + 'SP' => t('São Paulo'), + 'TO' => t('Tocantins'), + ); + $administrative_areas['CA'] = array( + 'AB' => t('Alberta'), + 'BC' => t('British Columbia'), + 'MB' => t('Manitoba'), + 'NB' => t('New Brunswick'), + 'NL' => t('Newfoundland and Labrador'), + 'NT' => t('Northwest Territories'), + 'NS' => t('Nova Scotia'), + 'NU' => t('Nunavut'), + 'ON' => t('Ontario'), + 'PE' => t('Prince Edward Island'), + 'QC' => t('Quebec'), + 'SK' => t('Saskatchewan'), + 'YT' => t('Yukon Territory'), + ); + $administrative_areas['CL'] = array( + 'AI' => t('Aysén del General Carlos Ibáñez del Campo'), + 'AN' => t('Antofagasta'), + 'AR' => t('Araucanía'), + 'AP' => t('Arica y Parinacota'), + 'AT' => t('Atacama'), + 'BI' => t('Biobío'), + 'CO' => t('Coquimbo'), + 'LI' => t('Libertador General Bernardo O\'Higgins'), + 'LL' => t('Los Lagos'), + 'LR' => t('Los Ríos'), + 'MA' => t('Magallanes y de la Antártica Chilena'), + 'ML' => t('Maule'), + 'RM' => t('Metropolitana de Santiago'), + 'TA' => t('Tarapacá'), + 'VS' => t('Valparaíso'), + ); + $administrative_areas['CN'] = array( + '34' => t('Anhui Sheng'), + '92' => t('Macau'), + '11' => t('Beijing Shi'), + '50' => t('Chongqing Shi'), + '35' => t('Fujian Sheng'), + '62' => t('Gansu Sheng'), + '44' => t('Guangdong Sheng'), + '45' => t('Guangxi Zhuangzuzizhiqu'), + '52' => t('Guizhou Sheng'), + '46' => t('Hainan Sheng'), + '13' => t('Hebei Sheng'), + '41' => t('Henan Sheng'), + '23' => t('Heilongjiang Sheng'), + '42' => t('Hubei Sheng'), + '43' => t('Hunan Sheng'), + '22' => t('Jilin Sheng'), + '32' => t('Jiangsu Sheng'), + '36' => t('Jiangxi Sheng'), + '21' => t('Liaoning Sheng'), + '15' => t('Neimenggu Zizhiqu'), + '64' => t('Ningxia Huizuzizhiqu'), + '63' => t('Qinghai Sheng'), + '37' => t('Shandong Sheng'), + '14' => t('Shanxi Sheng'), + '61' => t('Shaanxi Sheng'), + '31' => t('Shanghai Shi'), + '51' => t('Sichuan Sheng'), + '71' => t('Taiwan'), + '12' => t('Tianjin Shi'), + '54' => t('Xizang Zizhiqu'), + '91' => t('Hong Kong'), + '65' => t('Xinjiang Weiwuerzizhiqu'), + '53' => t('Yunnan Sheng'), + '33' => t('Zhejiang Sheng'), + ); + $administrative_areas['CO'] = array( + 'AMA' => t('Amazonas'), + 'ANT' => t('Antioquia'), + 'ARA' => t('Arauca'), + 'ATL' => t('Atlántico'), + 'BOL' => t('Bolívar'), + 'BOY' => t('Boyacá'), + 'CAL' => t('Caldas'), + 'CAQ' => t('Caquetá'), + 'CAS' => t('Casanare'), + 'CAU' => t('Cauca'), + 'CES' => t('Cesar'), + 'COR' => t('Córdoba'), + 'CUN' => t('Cundinamarca'), + 'CHO' => t('Chocó'), + 'GUA' => t('Guainía'), + 'GUV' => t('Guaviare'), + 'HUI' => t('Huila'), + 'LAG' => t('La Guajira'), + 'MAG' => t('Magdalena'), + 'MET' => t('Meta'), + 'NAR' => t('Nariño'), + 'NSA' => t('Norte de Santander'), + 'PUT' => t('Putumayo'), + 'QUI' => t('Quindío'), + 'RIS' => t('Risaralda'), + 'SAP' => t('San Andrés, Providencia y Santa Catalina'), + 'SAN' => t('Santander'), + 'SUC' => t('Sucre'), + 'TOL' => t('Tolima'), + 'VAC' => t('Valle del Cauca'), + 'VAU' => t('Vaupés'), + 'VID' => t('Vichada'), + ); + $administrative_areas['EE'] = array( + '37' => t('Harjumaa'), + '39' => t('Hiiumaa'), + '44' => t('Ida-Virumaa'), + '49' => t('Jõgevamaa'), + '51' => t('Järvamaa'), + '57' => t('Läänemaa'), + '59' => t('Lääne-Virumaa'), + '65' => t('Põlvamaa'), + '67' => t('Pärnumaa'), + '70' => t('Raplamaa'), + '74' => t('Saaremaa'), + '78' => t('Tartumaa'), + '82' => t('Valgamaa'), + '84' => t('Viljandimaa'), + '86' => t('Võrumaa'), + ); + $administrative_areas['EG'] = array( + 'ALX' => t('Alexandria'), + 'ASN' => t('Aswan'), + 'AST' => t('Asyut'), + 'BH' => t('Beheira'), + 'BNS' => t('Beni Suef'), + 'C' => t('Cairo'), + 'DK' => t('Dakahlia'), + 'DT' => t('Damietta'), + 'FYM' => t('Faiyum'), + 'GH' => t('Gharbia'), + 'GZ' => t('Giza'), + 'IS' => t('Ismailia'), + 'KFS' => t('Kafr el-Sheikh'), + 'MT' => t('Matruh'), + 'MN' => t('Minya'), + 'MNF' => t('Monufia'), + 'WAD' => t('New Valley'), + 'SIN' => t('North Sinai'), + 'PTS' => t('Port Said'), + 'KB' => t('Qalyubia'), + 'KN' => t('Qena'), + 'BA' => t('Red Sea'), + 'SHR' => t('Sharqia'), + 'SHG' => t('Sohag'), + 'JS' => t('South Sinai'), + 'SUZ' => t('Suez'), + 'LX' => t('Luxor'), + ); + $administrative_areas['ES'] = array( + 'C' => t("A Coruña"), + 'VI' => t('Alava'), + 'AB' => t('Albacete'), + 'A' => t('Alicante'), + 'AL' => t("Almería"), + 'O' => t('Asturias'), + 'AV' => t("Ávila"), + 'BA' => t('Badajoz'), + 'PM' => t('Baleares'), + 'B' => t('Barcelona'), + 'BU' => t('Burgos'), + 'CC' => t("Cáceres"), + 'CA' => t("Cádiz"), + 'S' => t('Cantabria'), + 'CS' => t("Castellón"), + 'CE' => t('Ceuta'), + 'CR' => t('Ciudad Real'), + 'CO' => t("Córdoba"), + 'CU' => t('Cuenca'), + 'GI' => t('Gerona'), + 'GR' => t('Granada'), + 'GU' => t('Guadalajara'), + 'SS' => t("Guipúzcoa"), + 'H' => t('Huelva'), + 'HU' => t('Huesca'), + 'J' => t("Jaén"), + 'LO' => t('La Rioja'), + 'GC' => t('Las Palmas'), + 'LE' => t("León"), + 'L' => t("Lérida"), + 'LU' => t('Lugo'), + 'M' => t('Madrid'), + 'MA' => t("Málaga"), + 'ML' => t('Melilla'), + 'MU' => t('Murcia'), + 'NA' => t('Navarra'), + 'OR' => t('Ourense'), + 'P' => t('Palencia'), + 'PO' => t('Pontevedra'), + 'SA' => t('Salamanca'), + 'TF' => t('Santa Cruz de Tenerife'), + 'SG' => t('Segovia'), + 'SE' => t('Sevilla'), + 'SO' => t('Soria'), + 'T' => t('Tarragona'), + 'TE' => t('Teruel'), + 'TO' => t('Toledo'), + 'V' => t('Valencia'), + 'VA' => t('Valladolid'), + 'BI' => t('Vizcaya'), + 'ZA' => t('Zamora'), + 'Z' => t('Zaragoza'), + ); + $administrative_areas['HK'] = array( + // HK subdivisions have no ISO codes assigned. + 'Kowloon' => t('Kowloon'), + 'Hong Kong Island' => t('Hong Kong Island'), + 'New Territories' => t('New Territories'), + ); + $administrative_areas['ID'] = array( + 'AC' => t('Aceh'), + 'BA' => t('Bali'), + 'BB' => t('Bangka Belitung'), + 'BT' => t('Banten'), + 'BE' => t('Bengkulu'), + 'JK' => t('DKI Jakarta'), + 'YO' => t('D.I. Yogyakarta'), + 'GO' => t('Gorontalo'), + 'JA' => t('Jambi'), + 'JB' => t('Jawa Barat'), + 'JT' => t('Jawa Tengah'), + 'JI' => t('Jawa Timur'), + 'KB' => t('Kalimantan Barat'), + 'KS' => t('Kalimantan Selatan'), + 'KT' => t('Kalimantan Tengah'), + 'KI' => t('Kalimantan Timur'), + 'KR' => t('Kepulauan Riau'), + 'LA' => t('Lampung'), + 'MA' => t('Maluku'), + 'MU' => t('Maluku Utara'), + 'NB' => t('Nusa Tenggara Barat'), + 'NT' => t('Nusa Tenggara Timur'), + 'PA' => t('Papua'), + 'PB' => t('Papua Barat'), + 'RI' => t('Riau'), + 'SR' => t('Sulawesi Barat'), + 'SN' => t('Sulawesi Selatan'), + 'ST' => t('Sulawesi Tengah'), + 'SG' => t('Sulawesi Tenggara'), + 'SA' => t('Sulawesi Utara'), + 'SB' => t('Sumatera Barat'), + 'SS' => t('Sumatera Selatan'), + 'SU' => t('Sumatera Utara'), + ); + $administrative_areas['IE'] = array( + 'CW' => t('Co Carlow'), + 'CN' => t('Co Cavan'), + 'CE' => t('Co Clare'), + 'CO' => t('Co Cork'), + 'DL' => t('Co Donegal'), + 'D' => t('Co Dublin'), + 'D1' => t('Dublin 1'), + 'D2' => t('Dublin 2'), + 'D3' => t('Dublin 3'), + 'D4' => t('Dublin 4'), + 'D5' => t('Dublin 5'), + 'D6' => t('Dublin 6'), + 'D6W' => t('Dublin 6w'), + 'D7' => t('Dublin 7'), + 'D8' => t('Dublin 8'), + 'D9' => t('Dublin 9'), + 'D10' => t('Dublin 10'), + 'D11' => t('Dublin 11'), + 'D12' => t('Dublin 12'), + 'D13' => t('Dublin 13'), + 'D14' => t('Dublin 14'), + 'D15' => t('Dublin 15'), + 'D16' => t('Dublin 16'), + 'D17' => t('Dublin 17'), + 'D18' => t('Dublin 18'), + 'D19' => t('Dublin 19'), + 'D20' => t('Dublin 20'), + 'D21' => t('Dublin 21'), + 'D22' => t('Dublin 22'), + 'D23' => t('Dublin 23'), + 'D24' => t('Dublin 24'), + 'G' => t('Co Galway'), + 'KY' => t('Co Kerry'), + 'KE' => t('Co Kildare'), + 'KK' => t('Co Kilkenny'), + 'LS' => t('Co Laois'), + 'LM' => t('Co Leitrim'), + 'LK' => t('Co Limerick'), + 'LD' => t('Co Longford'), + 'LH' => t('Co Louth'), + 'MO' => t('Co Mayo'), + 'MH' => t('Co Meath'), + 'MN' => t('Co Monaghan'), + 'OY' => t('Co Offaly'), + 'RN' => t('Co Roscommon'), + 'SO' => t('Co Sligo'), + 'TA' => t('Co Tipperary'), + 'WD' => t('Co Waterford'), + 'WH' => t('Co Westmeath'), + 'WX' => t('Co Wexford'), + 'WW' => t('Co Wicklow'), + ); + $administrative_areas['IN'] = array( + 'AP' => t('Andhra Pradesh'), + 'AR' => t('Arunachal Pradesh'), + 'AS' => t('Assam'), + 'BR' => t('Bihar'), + 'CT' => t('Chhattisgarh'), + 'DD' => t('Daman & Diu'), + 'DN' => t('Dadra & Nagar Haveli'), + 'GA' => t('Goa'), + 'GJ' => t('Gujarat'), + 'HP' => t('Himachal Pradesh'), + 'HR' => t('Haryana'), + 'JH' => t('Jharkhand'), + 'JK' => t('Jammu & Kashmir'), + 'KA' => t('Karnataka'), + 'KL' => t('Kerala'), + 'MH' => t('Maharashtra'), + 'MN' => t('Manipur'), + 'ML' => t('Meghalaya'), + 'MP' => t('Madhya Pradesh'), + 'MZ' => t('Mizoram'), + 'NL' => t('Nagaland'), + 'OR' => t('Odisha'), + 'PB' => t('Punjab'), + 'RJ' => t('Rajasthan'), + 'SK' => t('Sikkim'), + 'TN' => t('Tamil Nadu'), + 'TG' => t('Telangana'), + 'TR' => t('Tripura'), + 'UP' => t('Uttar Pradesh'), + 'UT' => t('Uttarakhand'), + 'WB' => t('West Bengal'), + ' ' => t('--'), + 'AN' => t('Andaman & Nicobar'), + 'CH' => t('Chandigarh'), + 'DN' => t('Dadra & Nagar Haveli'), + 'DD' => t('Daman & Diu'), + 'DL' => t('Delhi'), + 'LD' => t('Lakshadweep'), + 'PY' => t('Puducherry'), + ); + $administrative_areas['IT'] = array( + 'AG' => t('Agrigento'), + 'AL' => t('Alessandria'), + 'AN' => t('Ancona'), + 'AO' => t('Aosta'), + 'AP' => t('Ascoli Piceno'), + 'AQ' => t("L'Aquila"), + 'AR' => t('Arezzo'), + 'AT' => t('Asti'), + 'AV' => t('Avellino'), + 'BA' => t('Bari'), + 'BG' => t('Bergamo'), + 'BI' => t('Biella'), + 'BL' => t('Belluno'), + 'BN' => t('Benevento'), + 'BO' => t('Bologna'), + 'BR' => t('Brindisi'), + 'BS' => t('Brescia'), + 'BT' => t('Barletta-Andria-Trani'), + 'BZ' => t('Bolzano/Bozen'), + 'CA' => t('Cagliari'), + 'CB' => t('Campobasso'), + 'CE' => t('Caserta'), + 'CH' => t('Chieti'), + 'CI' => t('Carbonia-Iglesias'), + 'CL' => t('Caltanissetta'), + 'CN' => t('Cuneo'), + 'CO' => t('Como'), + 'CR' => t('Cremona'), + 'CS' => t('Cosenza'), + 'CT' => t('Catania'), + 'CZ' => t('Catanzaro'), + 'EN' => t('Enna'), + 'FC' => t('Forlì-Cesena'), + 'FE' => t('Ferrara'), + 'FG' => t('Foggia'), + 'FI' => t('Firenze'), + 'FM' => t('Fermo'), + 'FR' => t('Frosinone'), + 'GE' => t('Genova'), + 'GO' => t('Gorizia'), + 'GR' => t('Grosseto'), + 'IM' => t('Imperia'), + 'IS' => t('Isernia'), + 'KR' => t('Crotone'), + 'LC' => t('Lecco'), + 'LE' => t('Lecce'), + 'LI' => t('Livorno'), + 'LO' => t('Lodi'), + 'LT' => t('Latina'), + 'LU' => t('Lucca'), + 'MB' => t('Monza e Brianza'), + 'MC' => t('Macerata'), + 'ME' => t('Messina'), + 'MI' => t('Milano'), + 'MN' => t('Mantova'), + 'MO' => t('Modena'), + 'MS' => t('Massa-Carrara'), + 'MT' => t('Matera'), + 'NA' => t('Napoli'), + 'NO' => t('Novara'), + 'NU' => t('Nuoro'), + 'OG' => t('Ogliastra'), + 'OR' => t('Oristano'), + 'OT' => t('Olbia-Tempio'), + 'PA' => t('Palermo'), + 'PC' => t('Piacenza'), + 'PD' => t('Padova'), + 'PE' => t('Pescara'), + 'PG' => t('Perugia'), + 'PI' => t('Pisa'), + 'PN' => t('Pordenone'), + 'PO' => t('Prato'), + 'PR' => t('Parma'), + 'PT' => t('Pistoia'), + 'PU' => t('Pesaro e Urbino'), + 'PV' => t('Pavia'), + 'PZ' => t('Potenza'), + 'RA' => t('Ravenna'), + 'RC' => t('Reggio Calabria'), + 'RE' => t('Reggio Emilia'), + 'RG' => t('Ragusa'), + 'RI' => t('Rieti'), + 'RM' => t('Roma'), + 'RN' => t('Rimini'), + 'RO' => t('Rovigo'), + 'SA' => t('Salerno'), + 'SI' => t('Siena'), + 'SO' => t('Sondrio'), + 'SP' => t('La Spezia'), + 'SR' => t('Siracusa'), + 'SS' => t('Sassari'), + 'SV' => t('Savona'), + 'TA' => t('Taranto'), + 'TE' => t('Teramo'), + 'TN' => t('Trento'), + 'TO' => t('Torino'), + 'TP' => t('Trapani'), + 'TR' => t('Terni'), + 'TS' => t('Trieste'), + 'TV' => t('Treviso'), + 'UD' => t('Udine'), + 'VA' => t('Varese'), + 'VB' => t('Verbano-Cusio-Ossola'), + 'VC' => t('Vercelli'), + 'VE' => t('Venezia'), + 'VI' => t('Vicenza'), + 'VR' => t('Verona'), + 'VS' => t('Medio Campidano'), + 'VT' => t('Viterbo'), + 'VV' => t('Vibo Valentia'), + ); + $administrative_areas['JM'] = array( + '13' => 'Clarendon', + '09' => 'Hanover', + '01' => 'Kingston', + '12' => 'Manchester', + '04' => 'Portland', + '02' => 'St. Andrew', + '06' => 'St. Ann', + '14' => 'St. Catherine', + '11' => 'St. Elizabeth', + '08' => 'St. James', + '05' => 'St. Mary', + '03' => 'St. Thomas', + '07' => 'Trelawny', + '10' => 'Westmoreland', + ); + $administrative_areas['JP'] = array( + '01' => t('Hokkaido'), + '02' => t('Aomori'), + '03' => t('Iwate'), + '04' => t('Miyagi'), + '05' => t('Akita'), + '06' => t('Yamagata'), + '07' => t('Fukushima'), + '08' => t('Ibaraki'), + '09' => t('Tochigi'), + '10' => t('Gunma'), + '11' => t('Saitama'), + '12' => t('Chiba'), + '13' => t('Tokyo'), + '14' => t('Kanagawa'), + '15' => t('Niigata'), + '16' => t('Toyama'), + '17' => t('Ishikawa'), + '18' => t('Fukui'), + '19' => t('Yamanashi'), + '20' => t('Nagano'), + '21' => t('Gifu'), + '22' => t('Shizuoka'), + '23' => t('Aichi'), + '24' => t('Mie'), + '25' => t('Shiga'), + '26' => t('Kyoto'), + '27' => t('Osaka'), + '28' => t('Hyogo'), + '29' => t('Nara'), + '30' => t('Wakayama'), + '31' => t('Tottori'), + '32' => t('Shimane'), + '33' => t('Okayama'), + '34' => t('Hiroshima'), + '35' => t('Yamaguchi'), + '36' => t('Tokushima'), + '37' => t('Kagawa'), + '38' => t('Ehime'), + '39' => t('Kochi'), + '40' => t('Fukuoka'), + '41' => t('Saga'), + '42' => t('Nagasaki'), + '43' => t('Kumamoto'), + '44' => t('Oita'), + '45' => t('Miyazaki'), + '46' => t('Kagoshima'), + '47' => t('Okinawa'), + ); + $administrative_areas['KR'] = array( + '11' => t('Seoul'), + '26' => t('Busan'), + '27' => t('Daegu'), + '30' => t('Daejeon'), + '29' => t('Gwangju'), + '28' => t('Incheon'), + '31' => t('Ulsan'), + '43' => t('Chungcheongbuk-do'), + '44' => t('Chungcheongnam-do'), + '42' => t('Gangwon-do'), + '41' => t('Gyeonggi-do'), + '47' => t('Gyeongsangbuk-do'), + '48' => t('Gyeongsangnam-do'), + '49' => t('Jeju-do'), + '45' => t('Jeollabuk-do'), + '46' => t('Jeollanam-do'), + '50' => t('Sejong'), + ); + $administrative_areas['KZ'] = array( + 'AST' => t('Astana'), + 'ALA' => t('Almaty'), + 'ALM' => t('Almaty region'), + 'AKM' => t('Aqmola region'), + 'AKT' => t('Aqtöbe region'), + 'ATY' => t('Atyraū region'), + 'ZAP' => t('Batys Qazaqstan region'), + 'MAN' => t('Mangghystaū region'), + 'YUZ' => t('Ongtüstik Qazaqstan region'), + 'PAV' => t('Pavlodar region'), + 'KAR' => t('Qaraghandy region'), + 'KUS' => t('Qostanay region'), + 'KZY' => t('Qyzylorda region'), + 'VOS' => t('Shyghys Qazaqstan region'), + 'SEV' => t('Soltüstik Qazaqstan region'), + 'ZHA' => t('Zhambyl region'), + ); + $administrative_areas['MX'] = array( + 'AGU' => t('Aguascalientes'), + 'BCN' => t('Baja California'), + 'BCS' => t('Baja California Sur'), + 'CAM' => t('Campeche'), + 'COA' => t('Coahuila'), + 'COL' => t('Colima'), + 'CHP' => t('Chiapas'), + 'CHH' => t('Chihuahua'), + 'DIF' => t('Distrito Federal'), + 'DUG' => t('Durango'), + 'MEX' => t('Estado de México'), + 'GUA' => t('Guanajuato'), + 'GRO' => t('Guerrero'), + 'HID' => t('Hidalgo'), + 'JAL' => t('Jalisco'), + 'MIC' => t('Michoacán'), + 'MOR' => t('Morelos'), + 'NAY' => t('Nayarit'), + 'NLE' => t('Nuevo León'), + 'OAX' => t('Oaxaca'), + 'PUE' => t('Puebla'), + 'QUE' => t('Queretaro'), + 'ROO' => t('Quintana Roo'), + 'SLP' => t('San Luis Potosí'), + 'SIN' => t('Sinaloa'), + 'SON' => t('Sonora'), + 'TAB' => t('Tabasco'), + 'TAM' => t('Tamaulipas'), + 'TLA' => t('Tlaxcala'), + 'VER' => t('Veracruz'), + 'YUC' => t('Yucatán'), + 'ZAC' => t('Zacatecas'), + ); + $administrative_areas['MY'] = array( + '01' => t('Johor'), + '02' => t('Kedah'), + '03' => t('Kelantan'), + '14' => t('Kuala Lumpur'), + '15' => t('Labuan'), + '04' => t('Melaka'), + '05' => t('Negeri Sembilan'), + '06' => t('Pahang'), + '08' => t('Perak'), + '09' => t('Perlis'), + '07' => t('Pulau Pinang'), + '16' => t('Putrajaya'), + '12' => t('Sabah'), + '13' => t('Sarawak'), + '10' => t('Selangor'), + '11' => t('Terengganu'), + ); + $administrative_areas['PE'] = array( + 'AMA' => t('Amazonas'), + 'ANC' => t('Ancash'), + 'APU' => t('Apurimac'), + 'ARE' => t('Arequipa'), + 'AYA' => t('Ayacucho'), + 'CAJ' => t('Cajamarca'), + 'CAL' => t('Callao'), + 'CUS' => t('Cusco'), + 'HUV' => t('Huancavelica'), + 'HUC' => t('Huanuco'), + 'ICA' => t('Ica'), + 'JUN' => t('Junin'), + 'LAL' => t('La Libertad'), + 'LAM' => t('Lambayeque'), + 'LIM' => t('Lima'), + 'LOR' => t('Loreto'), + 'MDD' => t('Madre de Dios'), + 'MOQ' => t('Moquegua'), + 'PAS' => t('Pasco'), + 'PIU' => t('Piura'), + 'PUN' => t('Puno'), + 'SAM' => t('San Martin'), + 'TAC' => t('Tacna'), + 'TUM' => t('Tumbes'), + 'UCA' => t('Ucayali'), + ); + $administrative_areas['RU'] = array( + 'MOW' => t('Moskva'), + 'SPE' => t('Sankt-Peterburg'), + 'AD' => t('Adygeya, Respublika'), + 'AL' => t('Altay, Respublika'), + 'BA' => t('Bashkortostan, Respublika'), + 'BU' => t('Buryatiya, Respublika'), + 'CE' => t('Chechenskaya Respublika'), + 'CU' => t('Chuvashskaya Respublika'), + 'DA' => t('Dagestan, Respublika'), + 'IN' => t('Ingushetiya, Respublika'), + 'KB' => t('Kabardino-Balkarskaya Respublika'), + 'KL' => t('Kalmykiya, Respublika'), + 'KC' => t('Karachayevo-Cherkesskaya Respublika'), + 'KR' => t('Kareliya, Respublika'), + 'KK' => t('Khakasiya, Respublika'), + 'KO' => t('Komi, Respublika'), + 'ME' => t('Mariy El, Respublika'), + 'MO' => t('Mordoviya, Respublika'), + 'SA' => t('Sakha, Respublika [Yakutiya]'), + 'SE' => t('Severnaya Osetiya-Alaniya, Respublika'), + 'TA' => t('Tatarstan, Respublika'), + 'TY' => t('Tyva, Respublika [Tuva]'), + 'UD' => t('Udmurtskaya Respublika'), + 'ALT' => t('Altayskiy kray'), + 'KAM' => t('Kamchatskiy kray'), + 'KHA' => t('Khabarovskiy kray'), + 'KDA' => t('Krasnodarskiy kray'), + 'KYA' => t('Krasnoyarskiy kray'), + 'PER' => t('Permskiy kray'), + 'PRI' => t('Primorskiy kray'), + 'STA' => t('Stavropolskiy kray'), + 'ZAB' => t('Zabaykalskiy kray'), + 'AMU' => t('Amurskaya oblast'), + 'ARK' => t('Arkhangelskaya oblast'), + 'AST' => t('Astrakhanskaya oblast'), + 'BEL' => t('Belgorodskaya oblast'), + 'BRY' => t('Bryanskaya oblast'), + 'CHE' => t('Chelyabinskaya oblast'), + 'IRK' => t('Irkutskaya oblast'), + 'IVA' => t('Ivanovskaya oblast'), + 'KGD' => t('Kaliningradskaya oblast'), + 'KLU' => t('Kaluzhskaya oblast'), + 'KEM' => t('Kemerovskaya oblast'), + 'KIR' => t('Kirovskaya oblast'), + 'KOS' => t('Kostromskaya oblast'), + 'KGN' => t('Kurganskaya oblast'), + 'KRS' => t('Kurskaya oblast'), + 'LEN' => t('Leningradskaya oblast'), + 'LIP' => t('Lipetskaya oblast'), + 'MAG' => t('Magadanskaya oblast'), + 'MOS' => t('Moskovskaya oblast'), + 'MUR' => t('Murmanskaya oblast'), + 'NIZ' => t('Nizhegorodskaya oblast'), + 'NGR' => t('Novgorodskaya oblast'), + 'NVS' => t('Novosibirskaya oblast'), + 'OMS' => t('Omskaya oblast'), + 'ORE' => t('Orenburgskaya oblast'), + 'ORL' => t('Orlovskaya oblast'), + 'PNZ' => t('Penzenskaya oblast'), + 'PSK' => t('Pskovskaya oblast'), + 'ROS' => t('Rostovskaya oblast'), + 'RYA' => t('Ryazanskaya oblast'), + 'SAK' => t('Sakhalinskaya oblast'), + 'SAM' => t('Samarskaya oblast'), + 'SAR' => t('Saratovskaya oblast'), + 'SMO' => t('Smolenskaya oblast'), + 'SVE' => t('Sverdlovskaya oblast'), + 'TAM' => t('Tambovskaya oblast'), + 'TOM' => t('Tomskaya oblast'), + 'TUL' => t('Tulskaya oblast'), + 'TVE' => t('Tverskaya oblast'), + 'TYU' => t('Tyumenskaya oblast'), + 'ULY' => t('Ulyanovskaya oblast'), + 'VLA' => t('Vladimirskaya oblast'), + 'VGG' => t('Volgogradskaya oblast'), + 'VLG' => t('Vologodskaya oblast'), + 'VOR' => t('Voronezhskaya oblast'), + 'YAR' => t('Yaroslavskaya oblast'), + 'YEV' => t('Yevreyskaya avtonomnaya oblast'), + 'CHU' => t('Chukotskiy avtonomnyy okrug'), + 'KHM' => t('Khanty-Mansiyskiy avtonomnyy okrug-Yugra'), + 'NEN' => t('Nenetskiy avtonomnyy okrug'), + 'YAN' => t('Yamalo-Nenetskiy avtonomnyy okrug'), + ); + $administrative_areas['TR'] = array( + '01' => t('Adana'), + '02' => t('Adıyaman'), + '03' => t('Afyon'), + '04' => t('Ağrı'), + '68' => t('Aksaray'), + '05' => t('Amasya'), + '06' => t('Ankara'), + '07' => t('Antalya'), + '75' => t('Ardahan'), + '08' => t('Artvin'), + '09' => t('Aydın'), + '10' => t('Balıkesir'), + '74' => t('Bartın'), + '72' => t('Batman'), + '69' => t('Bayburt'), + '11' => t('Bilecik'), + '12' => t('Bingöl'), + '13' => t('Bitlis'), + '14' => t('Bolu'), + '15' => t('Burdur'), + '16' => t('Bursa'), + '17' => t('Çanakkale'), + '18' => t('Çankırı'), + '19' => t('Çorum'), + '20' => t('Denizli'), + '21' => t('Diyarbakır'), + '81' => t('Düzce'), + '22' => t('Edirne'), + '23' => t('Elazığ'), + '24' => t('Erzincan'), + '25' => t('Erzurum'), + '26' => t('Eskişehir'), + '27' => t('Gaziantep'), + '28' => t('Giresun'), + '29' => t('Gümüşhane'), + '30' => t('Hakkari'), + '31' => t('Hatay'), + '76' => t('Iğdır'), + '32' => t('Isparta'), + '34' => t('İstanbul'), + '35' => t('İzmir'), + '46' => t('Kahramanmaraş'), + '78' => t('Karabük'), + '70' => t('Karaman'), + '36' => t('Kars'), + '37' => t('Kastamonu'), + '38' => t('Kayseri'), + '71' => t('Kırıkkale'), + '39' => t('Kırklareli'), + '40' => t('Kırşehir'), + '79' => t('Kilis'), + '41' => t('Kocaeli'), + '42' => t('Konya'), + '43' => t('Kütahya'), + '44' => t('Malatya'), + '45' => t('Manisa'), + '47' => t('Mardin'), + '33' => t('Mersin'), + '48' => t('Muğla'), + '49' => t('Muş'), + '50' => t('Nevşehir'), + '51' => t('Niğde'), + '52' => t('Ordu'), + '80' => t('Osmaniye'), + '53' => t('Rize'), + '54' => t('Sakarya'), + '55' => t('Samsun'), + '56' => t('Siirt'), + '57' => t('Sinop'), + '58' => t('Sivas'), + '63' => t('Şanlıurfa'), + '73' => t('Şırnak'), + '59' => t('Tekirdağ'), + '60' => t('Tokat'), + '61' => t('Trabzon'), + '62' => t('Tunceli'), + '64' => t('Uşak'), + '65' => t('Van'), + '77' => t('Yalova'), + '66' => t('Yozgat'), + '67' => t('Zonguldak'), + ); + $administrative_areas['TW'] = array( + 'TXG' => t('Taichung City'), + 'TPE' => t('Taipei City'), + 'TTT' => t('Taitung County'), + 'TNN' => t('Tainan City'), + 'ILA' => t('Yilan County'), + 'HUA' => t('Hualien County'), + 'Kinmen County' => t('Kinmen County'), + 'NAN' => t('Nantou County'), + 'PIF' => t('Pingtung County'), + 'MIA' => t('Miaoli County'), + 'TAO' => t('Taoyuan County'), + 'KHH' => t('Kaohsiung City'), + 'KEE' => t('Keelung City'), + 'Lienchiang County' => t('Lienchiang County'), + 'YUN' => t('Yunlin County'), + 'TPQ' => t('New Taipei City'), + 'HSZ' => t('Hsinchu City'), + 'HSQ' => t('Hsinchu County'), + 'CYI' => t('Chiayi City'), + 'CYQ' => t('Chiayi County'), + 'CHA' => t('Changhua County'), + 'PEN' => t('Penghu County'), + ); + $administrative_areas['UA'] = array( + '43' => t('Crimea'), + '05' => t('Vinnyts\'ka oblast'), + '07' => t('Volyns\'ka oblast'), + '12' => t('Dnipropetrovsk Oblast'), + '14' => t('Donetsk Oblast'), + '18' => t('Zhytomyrs\'ka oblast'), + '21' => t('Zakarpats\'ka oblast'), + '23' => t('Zaporiz\'ka oblast'), + '26' => t('Ivano-Frankivs\'ka oblast'), + '30' => t('Kyiv city'), + '30' => t('Kiev Oblast'), + '35' => t('Kirovohrads\'ka oblast'), + '09' => t('Luhans\'ka oblast'), + '46' => t('Lviv Oblast'), + '48' => t('Mykolaivs\'ka oblast'), + '51' => t('Odessa Oblast'), + '53' => t('Poltavs\'ka oblast'), + '56' => t('Rivnens\'ka oblast'), + '40' => t('Sevastopol\' city'), + '59' => t('Sums\'ka oblast'), + '61' => t('Ternopil\'s\'ka oblast'), + '63' => t('Kharkiv Oblast'), + '65' => t('Khersons\'ka oblast'), + '68' => t('Khmel\'nyts\'ka oblast'), + '71' => t('Cherkas\'ka oblast'), + '77' => t('Chernivets\'ka oblast'), + '74' => t('Chernihivs\'ka oblast'), + ); + $administrative_areas['US'] = array( + 'AL' => t('Alabama'), + 'AK' => t('Alaska'), + 'AZ' => t('Arizona'), + 'AR' => t('Arkansas'), + 'CA' => t('California'), + 'CO' => t('Colorado'), + 'CT' => t('Connecticut'), + 'DE' => t('Delaware'), + 'DC' => t('District of Columbia'), + 'FL' => t('Florida'), + 'GA' => t('Georgia'), + 'HI' => t('Hawaii'), + 'ID' => t('Idaho'), + 'IL' => t('Illinois'), + 'IN' => t('Indiana'), + 'IA' => t('Iowa'), + 'KS' => t('Kansas'), + 'KY' => t('Kentucky'), + 'LA' => t('Louisiana'), + 'ME' => t('Maine'), + 'MD' => t('Maryland'), + 'MA' => t('Massachusetts'), + 'MI' => t('Michigan'), + 'MN' => t('Minnesota'), + 'MS' => t('Mississippi'), + 'MO' => t('Missouri'), + 'MT' => t('Montana'), + 'NE' => t('Nebraska'), + 'NV' => t('Nevada'), + 'NH' => t('New Hampshire'), + 'NJ' => t('New Jersey'), + 'NM' => t('New Mexico'), + 'NY' => t('New York'), + 'NC' => t('North Carolina'), + 'ND' => t('North Dakota'), + 'OH' => t('Ohio'), + 'OK' => t('Oklahoma'), + 'OR' => t('Oregon'), + 'PA' => t('Pennsylvania'), + 'RI' => t('Rhode Island'), + 'SC' => t('South Carolina'), + 'SD' => t('South Dakota'), + 'TN' => t('Tennessee'), + 'TX' => t('Texas'), + 'UT' => t('Utah'), + 'VT' => t('Vermont'), + 'VA' => t('Virginia'), + 'WA' => t('Washington'), + 'WV' => t('West Virginia'), + 'WI' => t('Wisconsin'), + 'WY' => t('Wyoming'), + ' ' => t('--'), + 'AA' => t('Armed Forces (Americas)'), + 'AE' => t('Armed Forces (Europe, Canada, Middle East, Africa)'), + 'AP' => t('Armed Forces (Pacific)'), + 'AS' => t('American Samoa'), + 'FM' => t('Federated States of Micronesia'), + 'GU' => t('Guam'), + 'MH' => t('Marshall Islands'), + 'MP' => t('Northern Mariana Islands'), + 'PW' => t('Palau'), + 'PR' => t('Puerto Rico'), + 'VI' => t('Virgin Islands'), + ); + $administrative_areas['VE'] = array( + 'Z' => t('Amazonas'), + 'B' => t('Anzoátegui'), + 'C' => t('Apure'), + 'D' => t('Aragua'), + 'E' => t('Barinas'), + 'F' => t('Bolívar'), + 'G' => t('Carabobo'), + 'H' => t('Cojedes'), + 'Y' => t('Delta Amacuro'), + 'W' => t('Dependencias Federales'), + 'A' => t('Distrito Federal'), + 'I' => t('Falcón'), + 'J' => t('Guárico'), + 'K' => t('Lara'), + 'L' => t('Mérida'), + 'M' => t('Miranda'), + 'N' => t('Monagas'), + 'O' => t('Nueva Esparta'), + 'P' => t('Portuguesa'), + 'R' => t('Sucre'), + 'S' => t('Táchira'), + 'T' => t('Trujillo'), + 'X' => t('Vargas'), + 'U' => t('Yaracuy'), + 'V' => t('Zulia'), + ); + + // Allow other modules to alter the administrative areas. + drupal_alter('addressfield_administrative_areas', $administrative_areas); + + return isset($administrative_areas[$country_code]) ? $administrative_areas[$country_code] : null; +} diff --git a/sites/all/modules/contrib/addressfield/addressfield.api.php b/sites/all/modules/contrib/addressfield/addressfield.api.php new file mode 100644 index 0000000000..b52b9503ad --- /dev/null +++ b/sites/all/modules/contrib/addressfield/addressfield.api.php @@ -0,0 +1,114 @@ + t('Aland'), + 'B' => t('Bland'), + ); +} + +/** + * Allows modules to add arbitrary AJAX commands to the array returned from the + * standard address field widget refresh. + * + * @param &$commands + * The array of AJAX commands used to refresh the address field widget. + * @param $form + * The rebuilt form array. + * @param $form_state + * The form state array from the form. + * + * @see addressfield_standard_widget_refresh() + */ +function hook_addressfield_standard_widget_refresh_alter(&$commands, $form, $form_state) { + // Display an alert message. + $commands[] = ajax_command_alert(t('The address field widget has been updated.')); +} diff --git a/sites/all/modules/contrib/addressfield/addressfield.css b/sites/all/modules/contrib/addressfield/addressfield.css new file mode 100644 index 0000000000..3d7fd40d27 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/addressfield.css @@ -0,0 +1,26 @@ +div.addressfield-container-inline > div.form-item { + float: left; /* LTR */ + margin-right: 1em; /* LTR */ +} + +div.addressfield-container-inline.country-GB > div.form-item { + float: none; + margin-right: auto; /* LTR */ +} + +/* Clear-fix markup for the inline container */ +div.addressfield-container-inline:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} +/* IE6 */ +* html div.addressfield-container-inline { + height: 1%; +} +/* IE7 */ +*:first-child + html div.addressfield-container-inline { + min-height: 1%; +} diff --git a/sites/all/modules/contrib/addressfield/addressfield.devel_generate.inc b/sites/all/modules/contrib/addressfield/addressfield.devel_generate.inc new file mode 100644 index 0000000000..d3b0a1e919 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/addressfield.devel_generate.inc @@ -0,0 +1,66 @@ + ($country == 'NULL') ? NULL : trim($country), + 'administrative_area' => ($administrative_area == 'NULL') ? NULL : trim($administrative_area), + 'sub_administrative_area' => ($sub_administrative_area == 'NULL') ? NULL : trim($sub_administrative_area), + 'locality' => ($locality == 'NULL') ? NULL : trim($locality), + 'dependent_locality' => ($dependent_locality == 'NULL') ? NULL : trim($dependent_locality), + 'postal_code' => ($postal_code == 'NULL') ? NULL : trim($postal_code), + 'thoroughfare' => ($thoroughfare == 'NULL') ? NULL : trim($thoroughfare), + 'premise' => ($premise == 'NULL') ? NULL : trim($premise), + 'sub_premise' => ($sub_premise == 'NULL') ? NULL : trim($sub_premise), + ); + } + } + fclose($handle); + } + } + return $fields; +} diff --git a/sites/all/modules/contrib/addressfield/addressfield.feeds.inc b/sites/all/modules/contrib/addressfield/addressfield.feeds.inc new file mode 100644 index 0000000000..2b8537adfa --- /dev/null +++ b/sites/all/modules/contrib/addressfield/addressfield.feeds.inc @@ -0,0 +1,59 @@ + $instance) { + $info = field_info_field($name); + if ($info['type'] == 'addressfield') { + foreach ($info['columns'] as $sub_field => $schema_info) { + $name_label = $instance['label'] . ': ' . drupal_ucfirst(str_replace('_', ' ', $sub_field)); + $targets[$name . ':' . $sub_field] = array( + 'name' => $name_label, + 'callback' => 'addressfield_set_target', + 'real_target' => $info['field_name'], + 'description' => $schema_info['description'], + ); + } + } + } +} + +/** + * Callback for hook_feeds_processor_targets_alter(). + * + * @param $source + * Field mapper source settings. + * @param $entity + * An entity object, for instance a node object. + * @param $target + * A string identifying the target on the node. + * @param $value + * The value to populate the target with. + */ +function addressfield_set_target($source, $entity, $target, $values) { + list($field_name, $sub_field) = explode(':', $target, 2); + + // Convert the values into an array if it isn't one already to correspond to + // Drupal's handling of field value arrays. + if (!is_array($values)) { + $values = array($values); + } + + // If the field is already set on the given entity, update the existing value + // array. Otherwise start with a fresh field value array. + $field = isset($entity->$field_name) ? $entity->$field_name : array(); + + // Loop over the field values array... + foreach ($values as $delta => $value) { + $field[LANGUAGE_NONE][$delta][$sub_field] = $value; + } + + $entity->$field_name = $field; +} diff --git a/sites/all/modules/contrib/addressfield/addressfield.info b/sites/all/modules/contrib/addressfield/addressfield.info new file mode 100644 index 0000000000..26d4d238fd --- /dev/null +++ b/sites/all/modules/contrib/addressfield/addressfield.info @@ -0,0 +1,17 @@ +name = Address Field +description = Manage a flexible address field, implementing the xNAL standard. +core = 7.x +package = Fields + +dependencies[] = ctools + +files[] = addressfield.migrate.inc +files[] = views/addressfield_views_handler_field_country.inc +files[] = views/addressfield_views_handler_filter_country.inc + +; Information added by Drupal.org packaging script on 2015-01-16 +version = "7.x-1.0" +core = "7.x" +project = "addressfield" +datestamp = "1421426885" + diff --git a/sites/all/modules/contrib/addressfield/addressfield.install b/sites/all/modules/contrib/addressfield/addressfield.install new file mode 100644 index 0000000000..5e74bc14f6 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/addressfield.install @@ -0,0 +1,216 @@ + array( + 'description' => 'Two letter ISO country code of this address.', + 'type' => 'varchar', + 'length' => 2, + 'not null' => FALSE, + 'default' => '', + ), + 'administrative_area' => array( + 'description' => 'The administrative area of this address. (i.e. State/Province)', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'not null' => FALSE, + ), + 'sub_administrative_area' => array( + 'description' => 'The sub administrative area of this address.', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'not null' => FALSE, + ), + 'locality' => array( + 'description' => 'The locality of this address. (i.e. City)', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'not null' => FALSE, + ), + 'dependent_locality' => array( + 'description' => 'The dependent locality of this address.', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'not null' => FALSE, + ), + 'postal_code' => array( + 'description' => 'The postal code of this address.', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'not null' => FALSE, + ), + 'thoroughfare' => array( + 'description' => 'The thoroughfare of this address. (i.e. Street address)', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'not null' => FALSE, + ), + 'premise' => array( + 'description' => 'The premise of this address. (i.e. Apartment / Suite number)', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'not null' => FALSE, + ), + 'sub_premise' => array( + 'description' => 'The sub_premise of this address.', + 'type' => 'varchar', + 'length' => 255, + 'default' => '', + 'not null' => FALSE, + ), + 'organisation_name' => array( + 'description' => 'Contents of a primary OrganisationName element in the xNL XML.', + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + 'default' => '', + ), + 'name_line' => array( + 'description' => 'Contents of a primary NameLine element in the xNL XML.', + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + 'default' => '', + ), + 'first_name' => array( + 'description' => 'Contents of the FirstName element of a primary PersonName element in the xNL XML.', + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + 'default' => '', + ), + 'last_name' => array( + 'description' => 'Contents of the LastName element of a primary PersonName element in the xNL XML.', + 'type' => 'varchar', + 'length' => 255, + 'not null' => FALSE, + 'default' => '', + ), + 'data' => array( + 'description' => 'Additional data for this address.', + 'type' => 'text', + 'size' => 'big', + 'not null' => FALSE, + 'serialize' => TRUE, + ), + ); + + return array( + 'columns' => $columns, + // TODO Add indexes. + ); +} + +/** + * Update the field configuration to the new plugin structure. + */ +function addressfield_update_7000() { + // Enable ctools. + if (!module_enable(array('ctools'))) { + throw new Exception('This version of addressfield requires ctools, but it could not be enabled.'); + } + + // Get the list of fields of type 'addressfield'. + $address_fields = array(); + foreach (field_info_fields() as $field_name => $field_info) { + if ($field_info['type'] == 'addressfield') { + $address_fields[$field_name] = $field_name; + } + } + + foreach (field_info_instances() as $entity_type => $bundles) { + foreach ($bundles as $bundle_name => $instances) { + foreach (array_intersect_key($instances, $address_fields) as $field_name => $instance) { + $widget_settings = &$instance['widget']['settings']; + + if ($instance['widget']['type'] == 'addressfield_standard') { + // Default to use the country-based address widget. + $format_handlers = array('address'); + + // Map the old 'name_format' setting to the name and organization widgets. + if (in_array($widget_settings['name_format'], array('name_line_organisation', 'first_last_organisation'))) { + $format_handlers[] = 'organisation'; + } + if (in_array($widget_settings['name_format'], array('name_line', 'name_line_organisation'))) { + $format_handlers[] = 'name-oneline'; + } + else { + $format_handlers[] = 'name-full'; + } + unset($widget_settings['name_format']); + $widget_settings['format_handlers'] = $format_handlers; + } + + // Update displays. + foreach ($instance['display'] as $view_mode => &$view_mode_info) { + $display_settings = &$view_mode_info['settings']; + + if ($view_mode_info['type'] == 'addressfield_default') { + if (isset($widget_settings['format_handlers'])) { + $display_settings['use_widget_handlers'] = 1; + } + else { + // If the widget is non-standard, just use a sane default. + $display_settings['use_widget_handlers'] = 0; + $display_settings['format_handlers'] = array('address', 'name-oneline'); + } + } + else if ($view_mode_info['type'] == 'addressfield_name') { + // Migrate the 'addressfield_name' formatter to the new framework. + $view_mode_info['type'] = 'addressfield_default'; + // Start from the widget configuration. + $display_settings['use_widget_handlers'] = 0; + $display_settings['format_handlers'] = isset($widget_settings['format_handlers']) ? $widget_settings['format_handlers'] : array('address', 'name-oneline'); + + if (empty($display_settings['organisation'])) { + $display_settings['format_handlers'] = array_diff( $display_settings['format_handlers'], array('organisation')); + } + unset($display_settings['organisation']); + } + } + + field_update_instance($instance); + } + } + } +} + +/** + * Sets the value of the new "Default country" setting. + */ +function addressfield_update_7001() { + $address_fields = array(); + foreach (field_info_fields() as $field_name => $field_info) { + if ($field_info['type'] == 'addressfield') { + $address_fields[$field_name] = $field_name; + } + } + + foreach (field_info_instances() as $entity_type => $bundles) { + foreach ($bundles as $bundle_name => $instances) { + foreach (array_intersect_key($instances, $address_fields) as $field_name => $instance) { + // Optional fields get the None default. Required fields get the + // previously selected default country. + $default_country = ''; + if (!empty($instance['required']) && !empty($instance['default_value'])) { + $default_country = $instance['default_value']['country']; + } + + $instance['widget']['settings']['default_country'] = $default_country; + unset($instance['default_value']); + + field_update_instance($instance); + } + } + } +} diff --git a/sites/all/modules/contrib/addressfield/addressfield.migrate.inc b/sites/all/modules/contrib/addressfield/addressfield.migrate.inc new file mode 100644 index 0000000000..6e74d63f07 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/addressfield.migrate.inc @@ -0,0 +1,172 @@ + 2, + 'field handlers' => array('MigrateAddressFieldHandler'), + ); + return $api; +} + +/** + * Primary value passed to this field must be the two letter ISO country code of + * the address. + * + * Arguments are used to specify all the other values: + * 'administrative_area' - The administrative area of this address. (i.e. State/Province) + * 'sub_administrative_area' - The sub administrative area of this address. + * 'locality' - The locality of this address. (i.e. City) + * 'dependent_locality' - The dependent locality of this address. + * 'postal_code' - The postal code of this address. + * 'thoroughfare' - The thoroughfare of this address. (i.e. Street address) + * 'premise' - The premise of this address. (i.e. Apartment / Suite number) + * 'sub_premise' - The sub_premise of this address. + * 'organisation_name' - Contents of a primary OrganisationName element in the xNL XML. + * 'name_line' - Contents of a primary NameLine element in the xNL XML. + * 'first_name' - Contents of the FirstName element of a primary PersonName element in the xNL XML. + * 'last_name' - Contents of the LastName element of a primary PersonName element in the xNL XML. + * 'data' - Additional data for this address. + * + * Add the source field mappings to the argument array then add null mappings to + * avoid having fields flagged as as unmapped: + * @code + * // The country should be passed in as the primary value. + * $this->addFieldMapping('field_address', 'profile_country'); + * $this->addFieldMapping('field_address:thoroughfare', 'profile_address'); + * $this->addFieldMapping('field_address:locality', 'profile_city'); + * $this->addFieldMapping('field_address:administrative_area', 'profile_state'); + * @endcode + */ +class MigrateAddressFieldHandler extends MigrateFieldHandler { + public function __construct() { + $this->registerTypes(array('addressfield')); + } + + /** + * Provide subfields for the addressfield columns. + */ + public function fields() { + // Declare our arguments to also be available as subfields. + $fields = array( + 'administrative_area' => t('The administrative area of ' . + 'this address (i.e. State/Province)', + array('@doc' => 'http://drupal.org/node/1996546#administrative_area')), + 'sub_administrative_area' => t('The sub administrative ' . + 'area of this address', + array('@doc' => 'http://drupal.org/node/1996546#sub_administrative_area')), + 'locality' => t('The locality of this address (i.e. ' . + 'City)', + array('@doc' => 'http://drupal.org/node/1996546#locality')), + 'dependent_locality' => t('The dependent locality of ' . + 'this address', + array('@doc' => 'http://drupal.org/node/1996546#dependent_locality')), + 'postal_code' => t('The postal code of this address', + array('@doc' => 'http://drupal.org/node/1996546#postal_code')), + 'thoroughfare' => t('The thoroughfare of this address ' . + '(i.e. Street address)', + array('@doc' => 'http://drupal.org/node/1996546#thoroughfare')), + 'premise' => t('The premise of this address (i.e. Apartment / Suite number)', + array('@doc' => 'http://drupal.org/node/1996546#premise')), + 'sub_premise' => t('The sub_premise of this address', + array('@doc' => 'http://drupal.org/node/1996546#sub_premise')), + 'organisation_name' => t('Contents of a primary ' . + 'OrganisationName element in the xNL XML', + array('@doc' => 'http://drupal.org/node/1996546#organisation_name')), + 'name_line' => t('Contents of a primary NameLine element ' . + 'in the xNL XML', + array('@doc' => 'http://drupal.org/node/1996546#name_line')), + 'first_name' => t('Contents of the FirstName element of ' . + 'a primary PersonName element in the xNL XML', + array('@doc' => 'http://drupal.org/node/1996546#first_name')), + 'last_name' => t('Contents of the LastName element of a ' . + 'primary PersonName element in the xNL XML', + array('@doc' => 'http://drupal.org/node/1996546#last_name')), + 'data' => t('Additional data for this address', + array('@doc' => 'http://drupal.org/node/1996546#data')), + ); + return $fields; + } + + /** + * Implements MigrateFieldHandler::prepare(). + * + * @param $entity + * @param array $field_info + * @param array $instance + * @param array $values + * + * @return null + */ + public function prepare($entity, array $field_info, array $instance, + array $values) { + $arguments = array(); + if (isset($values['arguments'])) { + $arguments = array_filter($values['arguments']); + unset($values['arguments']); + } + $language = $this->getFieldLanguage($entity, $field_info, $arguments); + + // Setup the standard Field API array for saving. + $delta = 0; + foreach ($values as $value) { + $return[$language][$delta] = array('country' => $value) + + $this->prepareArguments($arguments, $field_info, $delta); + $delta++; + } + + return isset($return) ? $return : NULL; + } + + /** + * Builds an array with additional data for the current $delta. + * + * @param array $arguments + * @param array $field_info + * @param $delta + * + * @return array + */ + protected function prepareArguments(array $arguments, array $field_info, $delta) { + $result = array(); + $data = array(); + + foreach ($arguments as $column_key => $column_value) { + $value = NULL; + + if (is_array($arguments[$column_key])) { + if (!empty($arguments[$column_key][$delta])) { + $value = $arguments[$column_key][$delta]; + } + } + else { + $value = $arguments[$column_key]; + } + + if ($value) { + if (isset($field_info['columns'][$column_key])) { + // Store the data in a seperate column. + $result[$column_key] = $value; + } + else { + // Add the data to the 'data' column. + $data[$column_key] = $value; + } + } + } + + // Store all the other data as a serialized array in the data field. + if (!empty($data)) { + $result['data'] = serialize($data); + } + + return $result; + } +} diff --git a/sites/all/modules/contrib/addressfield/addressfield.module b/sites/all/modules/contrib/addressfield/addressfield.module new file mode 100644 index 0000000000..81082c2e30 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/addressfield.module @@ -0,0 +1,893 @@ + TRUE, + ); + return $plugins; +} + +/** + * Implements hook_views_api(). + */ +function addressfield_views_api() { + return array( + 'api' => 3, + 'path' => drupal_get_path('module', 'addressfield') . '/views', + ); +} + +/** + * Implements hook_module_implements_alter(). + * + * Moves the hook_token_info_alter() implementation to the bottom so it is + * invoked after all modules implementing the same hook. + */ +function addressfield_module_implements_alter(&$implementations, $hook) { + if ($hook == 'token_info_alter') { + // Make sure that the $implementations list is populated before altering it, + // to work around a crash experienced by some people (#2181001). + if (isset($implementations['addressfield'])) { + $group = $implementations['addressfield']; + unset($implementations['addressfield']); + $implementations['addressfield'] = $group; + } + } +} + +/** + * Returns TRUE if a field map array value represents an addressfield. + * + * Provided for use as a callback by array_filter(). + */ +function addressfield_field_map_filter($field) { + return !empty($field['type']) && $field['type'] == 'addressfield'; +} + +/** + * Get the list of format plugins. + */ +function addressfield_format_plugins() { + ctools_include('plugins'); + $plugins = ctools_get_plugins('addressfield', 'format'); + uasort($plugins, 'ctools_plugin_sort'); + + return $plugins; +} + +/** + * Get the list of format plugins in a format suitable for #options. + */ +function addressfield_format_plugins_options() { + $options = array(); + foreach (addressfield_format_plugins() as $widget => $info) { + $options[$widget] = check_plain($info['title']); + } + return $options; +} + +/** + * @defgroup addressfield_format Address format API + * @{ + * API for generating address forms and display formats. + * + * Addresses forms and display formats are collaboratively generated by one or + * more format handler plugins. An address with a name and a company, for example, + * will be generated by three handlers: + * - 'address' that will generate the country, locality, street blocks + * - 'organisation' that will add the organisation block to the address + * - 'name-full' that will add a first name and last name block to the address + * + * A format handler is a CTools plugin of type 'addressfield' / 'format'. Each + * handler is passed the format in turn, and can add to or modify the format. + * + * The format itself is a renderable array stub. This stub will be transformed + * into either a Form API array suitable for use as part of a form or into a + * renderable array suitable for use with drupal_render(). The following + * modifications are done: + * - when rendering as a form, every element which name (its key in the array) + * is a valid addressfield column (see addressfield_field_schema()), will + * be transformed into a form element, either using a type explicitly + * defined in '#widget_type' or using 'select' if '#options' is set or + * 'textfield' if it is not. In addition, the '#default_value' of every + * field will be populated from the address being edited. + * - when rendering as a formatter, every element which name (its key in the array) + * is a valid addressfield column (see addressfield_field_schema()), will + * be transformed into a renderable element, either using a type explicitly + * defined in '#render_type' or else using 'addressfield_container'. When + * the type is 'addressfield_container' the element will be rendered as + * an HTML element set by '#tag' (default: span). + */ + +/** + * Generate a format for a given address. + * + * @param $address + * The address format being generated. + * @param $handlers + * The format handlers to use to generate the format. + * @param $context + * An associative array of context information pertaining to how the address + * format should be generated. If no mode is given, it will initialize to the + * default value. The remaining context keys should only be present when the + * address format is being generated for a field: + * - mode: either 'form' or 'render'; defaults to 'render'. + * - field: the field info array. + * - instance: the field instance array. + * - langcode: the langcode of the language the field is being rendered in. + * - delta: the delta value of the given address. + * + * @return + * A renderable array suitable for use as part of a form (if 'mode' is 'form') + * or for formatted address output when passed to drupal_render(). + */ +function addressfield_generate($address, array $handlers, array $context = array()) { + // If no mode is given in the context array, default it to 'render'. + if (empty($context['mode'])) { + $context['mode'] = 'render'; + } + + ctools_include('plugins'); + $format = array(); + // Add the handlers, ordered by weight. + $plugins = addressfield_format_plugins(); + $format['#handlers'] = array_intersect(array_keys($plugins), $handlers); + + foreach ($format['#handlers'] as $handler) { + if ($callback = ctools_plugin_load_function('addressfield', 'format', $handler, 'format callback')) { + $callback($format, $address, $context); + } + } + + // Store the address in the format, for processing. + $format['#address'] = $address; + + // Post-process the format stub, depending on the rendering mode. + if ($context['mode'] == 'form') { + $format['#addressfield'] = TRUE; + $format['#process'][] = 'addressfield_process_format_form'; + } + elseif ($context['mode'] == 'render') { + $format['#pre_render'][] = 'addressfield_render_address'; + } + + return $format; +} + +/** + * Generate a full-fledged form from a format snippet, as returned by addressfield_formats(). + */ +function addressfield_process_format_form($format, &$form_state, $complete_form) { + // Make sure to load all the plugins that participated in this format. + ctools_include('plugins'); + foreach ($format['#handlers'] as $handler) { + ctools_plugin_load_function('addressfield', 'format', $handler, 'format callback'); + } + + _addressfield_process_format_form($format, $format['#address']); + return $format; +} + +function _addressfield_process_format_form(&$format, $address) { + foreach (element_children($format) as $key) { + $child = &$format[$key]; + + // Automatically convert any element in the format array to an appropriate + // form element that matches one of the address component names. + if (in_array($key, array('name_line', 'first_name', 'last_name', 'organisation_name', 'country', 'administrative_area', 'sub_administrative_area', 'locality', 'dependent_locality', 'postal_code', 'thoroughfare', 'premise', 'sub_premise'))) { + // Set the form element type for the address component to whatever the + // address format specified in its #widget_type property. + if (isset($child['#widget_type'])) { + $child['#type'] = $child['#widget_type']; + } + else { + // If the element didn't specify a #widget_type and has options, turn it + // into a select list and unset its #size value, which is typically used + // to provide the width of a textfield. + if (isset($child['#options'])) { + $child['#type'] = 'select'; + unset($child['#size']); + } + else { + // Otherwise go ahead and make it a textfield. + $child['#type'] = 'textfield'; + } + } + + if (isset($address[$key])) { + $child['#default_value'] = $address[$key]; + } + } + + // Recurse through the element's children if it has any. + _addressfield_process_format_form($child, $address); + } +} + +/** + * Render an address in a given format. + */ +function addressfield_render_address($format) { + _addressfield_render_address($format, $format['#address']); + return $format; +} + +function _addressfield_render_address(&$format, $address) { + foreach (element_children($format) as $key) { + $child = &$format[$key]; + + // Automatically expand elements that match one of the fields of the address + // structure. + if (in_array($key, array('name_line', 'first_name', 'last_name', 'organisation_name', 'country', 'administrative_area', 'sub_administrative_area', 'locality', 'dependent_locality', 'postal_code', 'thoroughfare', 'premise', 'sub_premise'), TRUE)) { + if (isset($child['#render_type'])) { + $child['#type'] = $child['#render_type']; + } + else { + $child['#type'] = 'addressfield_container'; + if (!isset($child['#tag'])) { + $child['#tag'] = 'span'; + } + } + + // If the element instructs us to render the option value instead of the + // raw address element value and its #options array has a matching key, + // swap it out for the option value now. + if (!empty($child['#render_option_value']) && isset($address[$key]) && isset($child['#options'][$address[$key]])) { + $child['#children'] = check_plain($child['#options'][$address[$key]]); + } + elseif (isset($address[$key])) { + $child['#children'] = check_plain($address[$key]); + } + else { + $child['#children'] = ''; + } + + // Skip empty elements. + if ((string) $child['#children'] === '') { + $child['#access'] = FALSE; + } + + // Add #field_prefix and #field_suffix to the prefixes and suffixes. + if (isset($child['#field_prefix'])) { + $child['#prefix'] = (isset($child['#prefix']) ? $child['#prefix'] : '') . $child['#field_prefix']; + } + if (isset($child['#field_suffix'])) { + $child['#suffix'] = (isset($child['#suffix']) ? $child['#suffix'] : '') . $child['#field_suffix']; + } + } + + // Recurse through the child. + _addressfield_render_address($child, $address); + } +} + +/** + * @} End of "ingroup addressfield_format" + */ + +/** + * Implementation of hook_theme(). + */ +function addressfield_theme() { + $hooks['addressfield_container'] = array( + 'render element' => 'element', + ); + return $hooks; +} + +/** + * Render a container for a set of address fields. + */ +function theme_addressfield_container($variables) { + $element = $variables['element']; + $element['#children'] = trim($element['#children']); + // Remove the autocomplete attributes because the W3C validator complains. + // They are only used on forms anyway. + unset($element['#attributes']['autocomplete']); + unset($element['#attributes']['x-autocompletetype']); + + if (strlen($element['#children']) > 0) { + $output = '<' . $element['#tag'] . drupal_attributes($element['#attributes']) . '>'; + $output .= $element['#children']; + $output .= '"; + return $output; + } + else { + return ''; + } +} + +/** + * Implementation of hook_element_info(). + */ +function addressfield_element_info() { + $types['addressfield_container'] = array( + '#theme_wrappers' => array('addressfield_container'), + '#process' => array('addressfield_widget_process'), + '#attributes' => array(), + '#tag' => 'div', + ); + return $types; +} + +/** + * Form API process function: set the #parents of the children of this element so they appear at the same level as the parent. + */ +function addressfield_widget_process($element) { + foreach (element_children($element) as $key) { + $element[$key]['#parents'] = $element['#parents']; + $element[$key]['#parents'][count($element[$key]['#parents']) - 1] = $key; + } + + return $element; +} + +/** + * Implements hook_field_info() + */ +function addressfield_field_info() { + $fields = array(); + + $fields['addressfield'] = array( + 'label' => t('Postal address'), + 'description' => t('A field type used for storing postal addresses according the xNAL standard.'), + 'settings' => array(), + 'instance_settings' => array(), + 'default_widget' => 'addressfield_standard', + 'default_formatter' => 'addressfield_default', + 'property_type' => 'addressfield', + 'property_callbacks' => array('addressfield_property_info_callback'), + ); + + return $fields; +} + +/** + * Returns an array of default values for the addressfield form elements. + * + * @param $field + * The field array. + * @param $instance + * The instance array. + * @param $address + * The current address values, if known. Allows for per-country defaults. + * + * @return + * An array of default values. + */ +function addressfield_default_values($field, $instance, array $address = array()) { + $available_countries = _addressfield_country_options_list($field, $instance); + $default_country = $instance['widget']['settings']['default_country']; + // If the default country is not in the list of available countries, + // fallback to the first country in the list. + if ($default_country && !isset($available_countries[$default_country])) { + $default_country = key($available_countries); + } + + $default_values = array( + 'country' => $default_country, + 'name_line' => '', + 'first_name' => '', + 'last_name' => '', + 'organisation_name' => '', + 'administrative_area' => '', + 'sub_administrative_area' => '', + 'locality' => '', + 'dependent_locality' => '', + 'postal_code' => '', + 'thoroughfare' => '', + 'premise' => '', + 'sub_premise' => '', + 'data' => '', + ); + + // Allow other modules to alter the default values. + $context = array( + 'field' => $field, + 'instance' => $instance, + 'address' => $address, + ); + drupal_alter('addressfield_default_values', $default_values, $context); + + return $default_values; +} + +/** + * Implements hook_field_is_empty(). + */ +function addressfield_field_is_empty($item, $field) { + // Every address field must have at least a country value or it is considered + // empty, even if it has name information. + return empty($item['country']); +} + +/** + * Implements hook_field_presave(). + */ +function addressfield_field_presave($entity_type, $entity, $field, $instance, $langcode, &$items) { + foreach ($items as $delta => &$item) { + // If the first name and last name are set but the name line isn't... + if (isset($item['first_name']) && isset($item['last_name']) && !isset($item['name_line'])) { + // Combine the first and last name to be the name line. + $items[$delta]['name_line'] = $items[$delta]['first_name'] . ' ' . $items[$delta]['last_name']; + } + elseif (isset($item['name_line'])) { + // Otherwise if the name line is set, separate it out into a best guess at + // the first and last name. + $names = explode(' ', $item['name_line']); + + $item['first_name'] = array_shift($names); + $item['last_name'] = implode(' ', $names); + } + + // Trim whitespace from all of the address components and convert any double + // spaces to single spaces. + foreach ($item as $key => &$value) { + if (!in_array($key, array('data')) && is_string($value)) { + $value = trim(str_replace(' ', ' ', $value)); + } + } + } +} + +/** + * Implements hook_field_widget_info() + */ +function addressfield_field_widget_info() { + $widgets = array(); + + $widgets['addressfield_standard'] = array( + 'label' => t('Dynamic address form'), + 'field types' => array('addressfield'), + 'settings' => array( + 'available_countries' => array(), + 'default_country' => '', + 'format_handlers' => array('address'), + ), + ); + + return $widgets; +} + +/** + * Implements hook_field_widget_settings_form() + */ +function addressfield_field_widget_settings_form($field, $instance) { + $widget = $instance['widget']; + $defaults = field_info_widget_settings($widget['type']); + $settings = array_merge($defaults, $widget['settings']); + $form = array(); + + if ($widget['type'] == 'addressfield_standard') { + $form['available_countries'] = array( + '#type' => 'select', + '#multiple' => TRUE, + '#title' => t('Available countries'), + '#description' => t('If no countries are selected, all countries will be available.'), + '#options' => _addressfield_country_options_list(), + '#default_value' => $settings['available_countries'], + ); + $form['default_country'] = array( + '#type' => 'select', + '#title' => t('Default country'), + '#options' => _addressfield_country_options_list(), + '#default_value' => $settings['default_country'], + '#empty_value' => '', + ); + $form['format_handlers'] = array( + '#type' => 'checkboxes', + '#title' => t('Format handlers'), + '#options' => addressfield_format_plugins_options(), + '#default_value' => $settings['format_handlers'], + ); + } + + return $form; +} + +/** + * Implements hook_form_BASE_FORM_ID_alter(). + * + * Removes the default values form from the field settings page. + * Allows the module to implement its own, more predictable default value + * handling, getting around #1253820 and other bugs. + */ +function addressfield_form_field_ui_field_edit_form_alter(&$form, $form_state) { + if ($form['#field']['type'] == 'addressfield') { + $form['instance']['default_value_widget']['#access'] = FALSE; + } +} + +/** + * Implements hook_field_widget_form() + */ +function addressfield_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $settings = $instance['widget']['settings']; + + $address = array(); + // If the form has been rebuilt via AJAX, use the form state values. + // $form_state['values'] is empty because of #limit_validation_errors, so + // $form_state['input'] needs to be used instead. + $parents = array_merge($element['#field_parents'], array($element['#field_name'], $langcode, $delta)); + $input_address = drupal_array_get_nested_value($form_state['input'], $parents); + if (!empty($input_address)) { + $address = $input_address; + } + elseif (!empty($items[$delta]['country'])) { + // Else use the saved value for the field. + $address = $items[$delta]; + } + + // Determine the list of available countries, and if the currently selected + // country is not in it, unset it so it can be reset to the default country. + $countries = _addressfield_country_options_list($field, $instance); + if (!empty($address['country']) && !isset($countries[$address['country']])) { + unset($address['country']); + } + + // Merge in default values. + $address += addressfield_default_values($field, $instance, $address); + + // Add the form elements for the standard widget, which includes a country + // select list at the top that reloads the available address elements when the + // country is changed. + if ($instance['widget']['type'] == 'addressfield_standard') { + // Wrap everything in a fieldset. This is not the best looking element, + // but it's the only wrapper available in Drupal we can properly use + // in that context, and it is overridable if necessary. + $element['#type'] = 'fieldset'; + + if (!empty($instance['description'])) { + // Checkout panes convert the fieldset into a container, causing + // #description to not be rendered. Hence, a real element is added and + // the old #description is removed. + $element['#description'] = ''; + $element['element_description'] = array( + '#markup' => $instance['description'], + '#prefix' => '
                  ', + '#suffix' => '
                  ', + '#weight' => -999, + ); + } + + // Generate the address form. + $context = array( + 'mode' => 'form', + 'field' => $field, + 'instance' => $instance, + 'langcode' => $langcode, + 'delta' => $delta, + ); + $element += addressfield_generate($address, $settings['format_handlers'], $context); + + // Remove any already saved default value. + // See addressfield_form_field_ui_field_edit_form_alter() for the reasoning. + if ($form_state['build_info']['form_id'] == 'field_ui_field_edit_form') { + $element['#address'] = array('country' => ''); + } + } + + return $element; +} + +/** + * Element validate callback: rebuilds the form on country change. + */ +function addressfield_standard_country_validate($element, &$form_state) { + if ($element['#default_value'] != $element['#value']) { + $parents = $element['#parents']; + array_pop($parents); + $address = drupal_array_get_nested_value($form_state['values'], $parents); + + // Clear the country-specific field values. + $country_specific_data = array( + 'dependent_locality' => '', + 'locality' => '', + 'administrative_area' => '', + 'postal_code' => '', + ); + $address = array_diff_key($address, $country_specific_data); + + drupal_array_set_nested_value($form_state['values'], $parents, $address); + drupal_array_set_nested_value($form_state['input'], $parents, $address); + + $form_state['rebuild'] = TRUE; + } +} + +/** + * Ajax callback in response to a change of country in an address field. + * + * The only thing we have to do is to find the proper element to render. + */ +function addressfield_standard_widget_refresh($form, $form_state) { + // The target element is one element below the triggering country selector. + $array_parents = $form_state['triggering_element']['#array_parents']; + array_pop($array_parents); + + // Iterate over the form parents to find the element. + $element = $form; + foreach ($array_parents as $name) { + $element = &$element[$name]; + if (!empty($element['#addressfield'])) { + break; + } + } + + // Return the address block, but remove the '_weight' element inserted + // by the field API. + unset($element['_weight']); + + // Replace the address field widget with the updated widget and focus on the + // new country select list. + $commands[] = ajax_command_replace(NULL, render($element)); + $commands[] = ajax_command_invoke('#' . $element['country']['#id'], 'focus'); + // Add the status messages inside the new addressfield's wrapper element, + // just like core does. + $commands[] = ajax_command_prepend(NULL, theme('status_messages')); + + // Allow other modules to add arbitrary AJAX commands on the refresh. + drupal_alter('addressfield_standard_widget_refresh', $commands, $form, $form_state); + + return array('#type' => 'ajax', '#commands' => $commands); +} + +/** + * Implements hook_field_formatter_info(). + */ +function addressfield_field_formatter_info() { + return array( + 'addressfield_default' => array( + 'label' => t('Default'), + 'field types' => array('addressfield'), + 'settings' => array( + 'use_widget_handlers' => 1, + 'format_handlers' => array('address'), + ), + ), + ); +} + +/** + * Implements hook_field_formatter_settings_form(). + */ +function addressfield_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) { + $display = $instance['display'][$view_mode]; + $settings = $display['settings']; + + $element['use_widget_handlers'] = array( + '#type' => 'checkbox', + '#title' => t('Use the same configuration as the widget.'), + '#default_value' => !empty($settings['use_widget_handlers']), + ); + + $element['format_handlers'] = array( + '#type' => 'checkboxes', + '#title' => t('Format handlers'), + '#options' => addressfield_format_plugins_options(), + '#default_value' => $settings['format_handlers'], + '#process' => array('form_process_checkboxes', '_addressfield_field_formatter_settings_form_process_add_state'), + '#element_validate' => array('_addressfield_field_formatter_settings_form_validate') + ); + + return $element; +} + +/** + * Helper function: set the proper #states to the use widget handlers checkbox. + */ +function _addressfield_field_formatter_settings_form_process_add_state($element, $form_state) { + // Build a #parents based on the current checkbox. + $target_parents = array_slice($element['#parents'], 0, -1); + $target_parents[] = 'use_widget_handlers'; + $target_parents = array_shift($target_parents) . ($target_parents ? '[' . implode('][', $target_parents) . ']' : ''); + + $element['#states']['visible'] = array( + ':input[name="' . $target_parents . '"]' => array('checked' => FALSE), + ); + + return $element; +} + +/** + * Helper function: filter the results of the checkboxes form element. + */ +function _addressfield_field_formatter_settings_form_validate($element, &$element_state) { + form_set_value($element, array_filter($element['#value']), $element_state); +} + +/** + * Implements hook_field_formatter_settings_summary(). + */ +function addressfield_field_formatter_settings_summary($field, $instance, $view_mode) { + $display = $instance['display'][$view_mode]; + $settings = $display['settings']; + + $summary = ''; + + if ($settings['use_widget_handlers']) { + return t('Use widget configuration'); + } + else { + $summary = array(); + $plugins = addressfield_format_plugins(); + foreach ($settings['format_handlers'] as $handler) { + $summary[] = $plugins[$handler]['title']; + } + return $summary ? implode(', ', $summary) : t('No handler'); + } +} + +/** + * Implements hook_field_formatter_view(). + */ +function addressfield_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) { + $settings = $display['settings']; + $element = array(); + + switch ($display['type']) { + case 'addressfield_default': + if (!empty($settings['use_widget_handlers'])) { + $handlers = $instance['widget']['settings']['format_handlers']; + } + else { + $handlers = $settings['format_handlers']; + } + foreach ($items as $delta => $address) { + // Generate the address format. + $context = array( + 'mode' => 'render', + 'field' => $field, + 'instance' => $instance, + 'langcode' => $langcode, + 'delta' => $delta, + ); + $element[$delta] = addressfield_generate($address, $handlers, $context); + } + break; + } + + return $element; +} + +/** + * Callback to alter the property info of address fields. + * + * @see addressfield_field_info(). + */ +function addressfield_property_info_callback(&$info, $entity_type, $field, $instance, $field_type) { + $name = $field['field_name']; + $property = &$info[$entity_type]['bundles'][$instance['bundle']]['properties'][$name]; + + $property['type'] = ($field['cardinality'] != 1) ? 'list' : 'addressfield'; + $property['getter callback'] = 'entity_metadata_field_verbatim_get'; + $property['setter callback'] = 'entity_metadata_field_verbatim_set'; + $property['auto creation'] = 'addressfield_auto_creation'; + $property['property info'] = addressfield_data_property_info(); + + unset($property['query callback']); +} + +/** + * Auto creation callback for an addressfield value array. + * + * @see addressfield_property_info_callback() + */ +function addressfield_auto_creation($property_name, $context) { + return addressfield_default_values($context['field'], $context['instance']); +} + +/** + * Defines info for the properties of the address field data structure. + */ +function addressfield_data_property_info($name = NULL) { + // Build an array of basic property information for the address field. + $properties = array( + 'country' => array( + 'label' => t('Country'), + 'options list' => '_addressfield_country_options_list', + ), + 'name_line' => array( + 'label' => t('Full name'), + ), + 'first_name' => array( + 'label' => t('First name'), + ), + 'last_name' => array( + 'label' => t('Last name'), + ), + 'organisation_name' => array( + 'label' => t('Company'), + ), + 'administrative_area' => array( + 'label' => t('Administrative area (i.e. State / Province)'), + ), + 'sub_administrative_area' => array( + 'label' => t('Sub administrative area'), + ), + 'locality' => array( + 'label' => t('Locality (i.e. City)'), + ), + 'dependent_locality' => array( + 'label' => t('Dependent locality'), + ), + 'postal_code' => array( + 'label' => t('Postal code'), + ), + 'thoroughfare' => array( + 'label' => t('Thoroughfare (i.e. Street address)'), + ), + 'premise' => array( + 'label' => t('Premise (i.e. Apartment / Suite number)'), + ), + 'sub_premise' => array( + 'label' => t('Sub Premise (i.e. Suite, Apartment, Floor, Unknown.'), + ), + ); + + // Add the default values for each of the address field properties. + foreach ($properties as $key => &$value) { + $value += array( + 'description' => !empty($name) ? t('!label of field %name', array('!label' => $value['label'], '%name' => $name)) : '', + 'type' => 'text', + 'getter callback' => 'entity_property_verbatim_get', + 'setter callback' => 'entity_property_verbatim_set', + ); + } + + return $properties; +} + +/** + * Returns the country list in a format suitable for use as an options list. + */ +function _addressfield_country_options_list($field = NULL, $instance = NULL) { + if (module_exists('countries')) { + $countries = countries_get_countries('name', array('enabled' => COUNTRIES_ENABLED)); + } + else { + require_once DRUPAL_ROOT . '/includes/locale.inc'; + $countries = country_get_list(); + } + + if (isset($field)) { + // If the instance is not specified, loop against all the instances of the field. + if (!isset($instance)) { + $instances = array(); + foreach ($field['bundles'] as $entity_type => $bundles) { + foreach ($bundles as $bundle_name) { + $instances[] = field_info_instance($entity_type, $field['field_name'], $bundle_name); + } + } + } + else { + $instances = array($instance); + } + + foreach ($instances as $instance) { + if (!empty($instance['widget']['settings']['available_countries'])) { + $countries = array_intersect_key($countries, $instance['widget']['settings']['available_countries']); + break; + } + } + } + + return $countries; +} diff --git a/sites/all/modules/contrib/addressfield/addressfield.tokens.inc b/sites/all/modules/contrib/addressfield/addressfield.tokens.inc new file mode 100644 index 0000000000..1c91e53184 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/addressfield.tokens.inc @@ -0,0 +1,233 @@ + t('Address field'), + 'description' => t('Tokens related to address field values and their components.'), + 'needs-data' => 'address-field', + 'field' => TRUE, + ); + + // Define tokens for the various components of addresses supported through the + // user interface along with two helper tokens for country and administrative + // area to distinguish between names and abbreviations. + $info['country'] = array( + 'name' => t('Country name'), + 'description' => t('The full name of the country.'), + ); + $info['country-code'] = array( + 'name' => t('Country code'), + 'description' => t('The two letter ISO country code.'), + ); + $info['administrative-area'] = array( + 'name' => t('Administrative area (i.e. State/Province)'), + 'description' => t('The administrative area value, expanded to the full name if applicable.'), + ); + $info['administrative-area-raw'] = array( + 'name' => t('Administrative area (raw value)'), + 'description' => t('The raw administrative area value.'), + ); + $info['locality'] = array( + 'name' => t('Locality (i.e. City)'), + 'description' => t('The locality value.'), + ); + $info['postal-code'] = array( + 'name' => t('Postal code'), + 'description' => t('The postal code value.'), + ); + $info['thoroughfare'] = array( + 'name' => t('Thoroughfare (i.e. Street address)'), + 'description' => t('The thoroughfare value.'), + ); + $info['premise'] = array( + 'name' => t('Premise (i.e. Street address)'), + 'description' => t('The premise value.'), + ); + $info['sub_premise'] = array( + 'name' => t('Sub Premise (i.e. Suite, Apartment, Floor, Unknown.)'), + 'description' => t('The sub premise value.'), + ); + $info['organisation'] = array( + 'name' => t('Organisation'), + 'description' => t('The organisation name value.'), + ); + $info['name-line'] = array( + 'name' => t('Full name'), + 'description' => t('The name line value of the address.'), + ); + $info['first-name'] = array( + 'name' => t('First name'), + 'description' => t('The first name value.'), + ); + $info['last-name'] = array( + 'name' => t('Last name'), + 'description' => t('The last name value.'), + ); + + // Add a helper token to format addresses as expected by MailChimp. + $info['format-mailchimp'] = array( + 'name' => t('Address formatted for MailChimp'), + 'description' => t('The full address formatted for import into MailChimp.'), + ); + + return array( + 'types' => array('address-field' => $type), + 'tokens' => array('address-field' => $info), + ); +} + +/** + * Implements hook_token_info_alter(). + */ +function addressfield_token_info_alter(&$data) { + // Loop over every address field on the site. + foreach (array_filter(field_info_field_map(), 'addressfield_field_map_filter') as $field_name => $field) { + foreach ($data['tokens'] as $group => $token){ + if (isset($data['tokens'][$group][$field_name]) && is_array($data['tokens'][$group][$field_name])) { + // Set the token type for the field to use the addressfield child tokens. + $data['tokens'][$group][$field_name]['type'] = 'address-field'; + } + } + } +} + +/** + * Implements hook_tokens(). + */ +function addressfield_tokens($type, $tokens, array $data = array(), array $options = array()) { + if (isset($options['language'])) { + $language_code = $options['language']->language; + } + else { + $language_code = LANGUAGE_NONE; + } + + $sanitize = !empty($options['sanitize']); + + $replacements = array(); + + // If we're generating tokens for an address field, extract the address data + // from the field value array and generate the necessary replacements. + if ($type == 'address-field' && !empty($data['address-field'][$language_code]) && is_array($data['address-field'][$language_code])) { + $address = reset($data['address-field'][$language_code]); + + foreach ($tokens as $name => $original) { + switch ($name) { + case 'country': + $countries = _addressfield_country_options_list(); + $replacements[$original] = $sanitize ? check_plain($countries[$address['country']]) : $countries[$address['country']]; + break; + + case 'country-code': + $replacements[$original] = $sanitize ? check_plain($address['country']) : $address['country']; + break; + + case 'administrative-area': + // If we received format handlers in the data array, generate the form + // for the address field to see if the administrative area should be + // expanded from an abbreviation to a related name. + $administrative_area = $address['administrative_area']; + + if (!empty($data['format_handlers'])) { + $form = addressfield_generate($address, $data['format_handlers'], array('mode' => 'form')); + + if (!empty($form['locality_block']['administrative_area']['#options'][$administrative_area])) { + $administrative_area = $form['locality_block']['administrative_area']['#options'][$administrative_area]; + } + } + + $replacements[$original] = $sanitize ? check_plain($administrative_area) : $administrative_area; + break; + + case 'administrative-area-raw': + $replacements[$original] = $sanitize ? check_plain($address['administrative_area']) : $address['administrative_area']; + break; + + case 'locality': + $replacements[$original] = $sanitize ? check_plain($address['locality']) : $address['locality']; + break; + + case 'postal-code': + $replacements[$original] = $sanitize ? check_plain($address['postal_code']) : $address['postal_code']; + break; + + case 'thoroughfare': + $replacements[$original] = $sanitize ? check_plain($address['thoroughfare']) : $address['thoroughfare']; + break; + + case 'premise': + $replacements[$original] = $sanitize ? check_plain($address['premise']) : $address['premise']; + break; + + case 'sub_premise': + $replacements[$original] = $sanitize ? check_plain($address['sub_premise']) : $address['sub_premise']; + break; + + case 'organisation': + $replacements[$original] = $sanitize ? check_plain($address['organisation_name']) : $address['organisation_name']; + break; + + case 'name-line': + $replacements[$original] = $sanitize ? check_plain($address['name_line']) : $address['name_line']; + break; + + case 'first-name': + $replacements[$original] = $sanitize ? check_plain($address['first_name']) : $address['first_name']; + break; + + case 'last-name': + $replacements[$original] = $sanitize ? check_plain($address['last_name']) : $address['last_name']; + break; + + // See: http://kb.mailchimp.com/article/how-do-i-format-my-list-fields-to-import-them + case 'format-mailchimp': + $components = array(); + + foreach (array('thoroughfare', 'premise', 'locality', 'administrative_area', 'postal_code', 'country') as $component) { + if (!empty($address[$component])) { + $components[] = $address[$component]; + } + } + + $format_mailchimp = implode(' ', $components); + $replacements[$original] = $sanitize ? check_plain($format_mailchimp) : $format_mailchimp; + break; + } + } + } + + // The Token module extends direct token generation by using a generic entity + // token generation process. Since we intend to overwrite the default Token + // module implementation of address field tokens, we use this generic token + // generation process to find and replace address field tokens on relevant + // entities. This ensures our tokens aren't overwritten by the Token module + // and helps us avoid having to do the entity detection ourselves. + if ($type == 'entity') { + // Loop over the address fields defined on the site. + foreach (array_filter(field_info_field_map(), 'addressfield_field_map_filter') as $field_name => $field) { + // If there are any address field tokens in the token list... + if ($addressfield_tokens = token_find_with_prefix($tokens, $field_name)) { + // If the current field is on the matching entity type... + if (!empty($field['bundles'][$data['entity_type']])) { + // Extract the format handlers selected in a representative instance + // settings form for use in formatting tokens. + $instance = field_info_instance($data['entity_type'], $field_name, reset($field['bundles'][$data['entity_type']])); + $format_handlers = $instance['widget']['settings']['format_handlers']; + } + + // Generate the necessary address field tokens for the entity. + $replacements += token_generate('address-field', $addressfield_tokens, array('address-field' => $data['entity']->$field_name, 'format_handlers' => $format_handlers), $options); + } + } + } + + return $replacements; +} diff --git a/sites/all/modules/contrib/addressfield/example/addressfield_example.info b/sites/all/modules/contrib/addressfield/example/addressfield_example.info new file mode 100644 index 0000000000..2e68b51fb7 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/example/addressfield_example.info @@ -0,0 +1,15 @@ +name = Address Field Example +description = Example module for how to implement an addressfield format handler. +core = 7.x +package = Fields +hidden = TRUE + +dependencies[] = ctools +dependencies[] = addressfield + +; Information added by Drupal.org packaging script on 2015-01-16 +version = "7.x-1.0" +core = "7.x" +project = "addressfield" +datestamp = "1421426885" + diff --git a/sites/all/modules/contrib/addressfield/example/addressfield_example.module b/sites/all/modules/contrib/addressfield/example/addressfield_example.module new file mode 100644 index 0000000000..453b625996 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/example/addressfield_example.module @@ -0,0 +1,10 @@ + t('Address form (CH add-on)'), + 'format callback' => 'addressfield_format_address_ch_generate', + 'type' => 'address', + 'weight' => -80, +); + +function addressfield_format_address_ch_generate(&$format, $address, $context = array()) { + if ($address['country'] == 'CH' && $context['mode'] == 'form') { + $format['locality_block']['postal_code']['#wrapper_id'] = $format['#wrapper_id']; + $format['locality_block']['postal_code']['#process'][] = 'ajax_process_form'; + $format['locality_block']['postal_code']['#process'][] = 'addressfield_format_address_ch_postal_code_process'; + + $format['locality_block']['postal_code']['#element_validate'] = array('addressfield_form_ch_postal_code_validation'); + $format['locality_block']['postal_code']['#ajax'] = array( + 'callback' => 'addressfield_standard_widget_refresh', + 'wrapper' => $format['#wrapper_id'], + ); + } + else { + if (isset($format['locality_block']['postal_code'])) { + // Cancel the AJAX for forms we don't control. + $format['locality_block']['postal_code']['#ajax'] = array(); + } + } +} + +function addressfield_format_address_ch_postal_code_process($element) { + $element['#limit_validation_errors'] = array($element['#parents']); + + return $element; +} + +function addressfield_form_ch_postal_code_validation($element, &$form_state, &$form) { + $data = array( + '1000' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1001' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1002' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1003' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1004' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1005' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1006' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1007' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1008' => array('town' => 'Prilly', 'canton' => 'VD'), + '1009' => array('town' => 'Pully', 'canton' => 'VD'), + '1010' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1011' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1012' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1014' => array('town' => 'Lausanne Adm cant', 'canton' => 'VD'), + '1015' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1018' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1020' => array('town' => 'Renens VD', 'canton' => 'VD'), + '1022' => array('town' => 'Chavannes-Renens', 'canton' => 'VD'), + '1023' => array('town' => 'Crissier', 'canton' => 'VD'), + '1024' => array('town' => 'Ecublens VD', 'canton' => 'VD'), + '1025' => array('town' => 'St-Sulpice VD', 'canton' => 'VD'), + '1026' => array('town' => 'Echandens-Denges', 'canton' => 'VD'), + '1027' => array('town' => 'Lonay', 'canton' => 'VD'), + '1028' => array('town' => 'Préverenges', 'canton' => 'VD'), + '1030' => array('town' => 'Bussigny-Lausanne', 'canton' => 'VD'), + '1032' => array('town' => 'Romanel-s-Lausanne', 'canton' => 'VD'), + '1033' => array('town' => 'Cheseaux-Lausanne', 'canton' => 'VD'), + '1037' => array('town' => 'Etagnières', 'canton' => 'VD'), + '1038' => array('town' => 'Bercher', 'canton' => 'VD'), + '1040' => array('town' => 'Echallens', 'canton' => 'VD'), + '1377' => array('town' => 'Oulens-Echallens', 'canton' => 'VD'), + '1042' => array('town' => 'Bettens', 'canton' => 'VD'), + '1417' => array('town' => 'Epautheyres', 'canton' => 'VD'), + '1041' => array('town' => 'Dommartin', 'canton' => 'VD'), + '1063' => array('town' => 'Peyres-Possens', 'canton' => 'VD'), + '1053' => array('town' => 'Bretigny-Morrens', 'canton' => 'VD'), + '1034' => array('town' => 'Boussens', 'canton' => 'VD'), + '1035' => array('town' => 'Bournens', 'canton' => 'VD'), + '1036' => array('town' => 'Sullens', 'canton' => 'VD'), + '1043' => array('town' => 'Sugnens', 'canton' => 'VD'), + '1044' => array('town' => 'Fey', 'canton' => 'VD'), + '1045' => array('town' => 'Ogens', 'canton' => 'VD'), + '1407' => array('town' => 'Bioley-Magnoux', 'canton' => 'VD'), + '1052' => array('town' => 'Mont-sur-Lausanne', 'canton' => 'VD'), + '1054' => array('town' => 'Morrens VD', 'canton' => 'VD'), + '1055' => array('town' => 'Froideville', 'canton' => 'VD'), + '1410' => array('town' => 'Thierrens', 'canton' => 'VD'), + '1066' => array('town' => 'Epalinges', 'canton' => 'VD'), + '1073' => array('town' => 'Savigny', 'canton' => 'VD'), + '1083' => array('town' => 'Mézières VD', 'canton' => 'VD'), + '1092' => array('town' => 'Belmont-Lausanne', 'canton' => 'VD'), + '1093' => array('town' => 'La Conversion', 'canton' => 'VD'), + '1094' => array('town' => 'Paudex', 'canton' => 'VD'), + '1095' => array('town' => 'Lutry', 'canton' => 'VD'), + '1096' => array('town' => 'Cully', 'canton' => 'VD'), + '1097' => array('town' => 'Riex', 'canton' => 'VD'), + '1098' => array('town' => 'Epesses', 'canton' => 'VD'), + '1058' => array('town' => 'Villars-Tiercelin', 'canton' => 'VD'), + '1059' => array('town' => 'Peney-le-Jorat', 'canton' => 'VD'), + '1061' => array('town' => 'Villars-Mendraz', 'canton' => 'VD'), + '1062' => array('town' => 'Sottens', 'canton' => 'VD'), + '1080' => array('town' => 'Les Cullayes', 'canton' => 'VD'), + '1081' => array('town' => 'Montpreveyres', 'canton' => 'VD'), + '1082' => array('town' => 'Corcelles-le-Jorat', 'canton' => 'VD'), + '1088' => array('town' => 'Ropraz', 'canton' => 'VD'), + '1084' => array('town' => 'Carrouge VD', 'canton' => 'VD'), + '1085' => array('town' => 'Vulliens', 'canton' => 'VD'), + '1509' => array('town' => 'Vucherens', 'canton' => 'VD'), + '1510' => array('town' => 'Syens', 'canton' => 'VD'), + '1076' => array('town' => 'Ferlens VD', 'canton' => 'VD'), + '1077' => array('town' => 'Servion', 'canton' => 'VD'), + '1078' => array('town' => 'Essertes', 'canton' => 'VD'), + '1673' => array('town' => 'Auboranges', 'canton' => 'FR'), + '1110' => array('town' => 'Morges', 'canton' => 'VD'), + '1112' => array('town' => 'Echichens', 'canton' => 'VD'), + '1167' => array('town' => 'Lussy-sur-Morges', 'canton' => 'VD'), + '1132' => array('town' => 'Lully VD', 'canton' => 'VD'), + '1131' => array('town' => 'Tolochenaz', 'canton' => 'VD'), + '1125' => array('town' => 'Monnaz', 'canton' => 'VD'), + '1126' => array('town' => 'Vaux-sur-Morges', 'canton' => 'VD'), + '1127' => array('town' => 'Clarmont', 'canton' => 'VD'), + '1128' => array('town' => 'Reverolle', 'canton' => 'VD'), + '1113' => array('town' => 'St-Saphorin-Morges', 'canton' => 'VD'), + '1114' => array('town' => 'Colombier VD', 'canton' => 'VD'), + '1115' => array('town' => 'Vullierens', 'canton' => 'VD'), + '1116' => array('town' => 'Cottens VD', 'canton' => 'VD'), + '1117' => array('town' => 'Grancy', 'canton' => 'VD'), + '1304' => array('town' => 'Senarclens', 'canton' => 'VD'), + '1121' => array('town' => 'Bremblens', 'canton' => 'VD'), + '1122' => array('town' => 'Romanel-sur-Morges', 'canton' => 'VD'), + '1123' => array('town' => 'Aclens', 'canton' => 'VD'), + '1124' => array('town' => 'Gollion', 'canton' => 'VD'), + '1134' => array('town' => 'Vufflens-Château', 'canton' => 'VD'), + '1135' => array('town' => 'Denens', 'canton' => 'VD'), + '1136' => array('town' => 'Bussy-Chardonney', 'canton' => 'VD'), + '1169' => array('town' => 'Yens', 'canton' => 'VD'), + '1168' => array('town' => 'Villars-sous-Yens', 'canton' => 'VD'), + '1144' => array('town' => 'Ballens', 'canton' => 'VD'), + '1149' => array('town' => 'Berolle', 'canton' => 'VD'), + '1146' => array('town' => 'Mollens VD', 'canton' => 'VD'), + '1147' => array('town' => 'Montricher', 'canton' => 'VD'), + '1142' => array('town' => 'Pampigny', 'canton' => 'VD'), + '1141' => array('town' => 'Sévery', 'canton' => 'VD'), + '1143' => array('town' => 'Apples', 'canton' => 'VD'), + '1145' => array('town' => 'Bière', 'canton' => 'VD'), + '1148' => array('town' => 'L\'Isle', 'canton' => 'VD'), + '1162' => array('town' => 'St-Prex', 'canton' => 'VD'), + '1163' => array('town' => 'Etoy', 'canton' => 'VD'), + '1164' => array('town' => 'Buchillon', 'canton' => 'VD'), + '1165' => array('town' => 'Allaman', 'canton' => 'VD'), + '1166' => array('town' => 'Perroy', 'canton' => 'VD'), + '1170' => array('town' => 'Aubonne', 'canton' => 'VD'), + '1172' => array('town' => 'Bougy-Villars', 'canton' => 'VD'), + '1173' => array('town' => 'Féchy', 'canton' => 'VD'), + '1174' => array('town' => 'Montherod', 'canton' => 'VD'), + '1175' => array('town' => 'Lavigny', 'canton' => 'VD'), + '1176' => array('town' => 'St-Livres', 'canton' => 'VD'), + '1180' => array('town' => 'Rolle', 'canton' => 'VD'), + '1182' => array('town' => 'Gilly', 'canton' => 'VD'), + '1183' => array('town' => 'Bursins', 'canton' => 'VD'), + '1184' => array('town' => 'Vinzel', 'canton' => 'VD'), + '1185' => array('town' => 'Mont-sur-Rolle', 'canton' => 'VD'), + '1186' => array('town' => 'Essertines-Rolle', 'canton' => 'VD'), + '1187' => array('town' => 'St-Oyens', 'canton' => 'VD'), + '1189' => array('town' => 'Saubraz', 'canton' => 'VD'), + '1188' => array('town' => 'Gimel', 'canton' => 'VD'), + '1195' => array('town' => 'Dully-Bursinel', 'canton' => 'VD'), + '1196' => array('town' => 'Gland', 'canton' => 'VD'), + '1197' => array('town' => 'Prangins', 'canton' => 'VD'), + '1200' => array('town' => 'Genève', 'canton' => 'GE'), + '1201' => array('town' => 'Genève', 'canton' => 'GE'), + '1202' => array('town' => 'Genève', 'canton' => 'GE'), + '1203' => array('town' => 'Genève', 'canton' => 'GE'), + '1204' => array('town' => 'Genève', 'canton' => 'GE'), + '1205' => array('town' => 'Genève', 'canton' => 'GE'), + '1206' => array('town' => 'Genève', 'canton' => 'GE'), + '1207' => array('town' => 'Genève', 'canton' => 'GE'), + '1208' => array('town' => 'Genève', 'canton' => 'GE'), + '1209' => array('town' => 'Genève', 'canton' => 'GE'), + '1211' => array('town' => 'Genève 1', 'canton' => 'GE'), + '1212' => array('town' => 'Grand-Lancy', 'canton' => 'GE'), + '1213' => array('town' => 'Petit-Lancy', 'canton' => 'GE'), + '1214' => array('town' => 'Vernier', 'canton' => 'GE'), + '1215' => array('town' => 'Genève', 'canton' => 'GE'), + '1216' => array('town' => 'Cointrin', 'canton' => 'GE'), + '1217' => array('town' => 'Meyrin', 'canton' => 'GE'), + '1218' => array('town' => 'Le Grand-Saconnex', 'canton' => 'GE'), + '1219' => array('town' => 'Le Lignon', 'canton' => 'GE'), + '1220' => array('town' => 'Les Avanchets', 'canton' => 'GE'), + '1222' => array('town' => 'Vésenaz', 'canton' => 'GE'), + '1223' => array('town' => 'Cologny', 'canton' => 'GE'), + '1224' => array('town' => 'Chêne-Bougeries', 'canton' => 'GE'), + '1225' => array('town' => 'Chêne-Bourg', 'canton' => 'GE'), + '1226' => array('town' => 'Thônex', 'canton' => 'GE'), + '1227' => array('town' => 'Carouge GE', 'canton' => 'GE'), + '1228' => array('town' => 'Plan-les-Ouates', 'canton' => 'GE'), + '1231' => array('town' => 'Conches', 'canton' => 'GE'), + '1232' => array('town' => 'Confignon', 'canton' => 'GE'), + '1233' => array('town' => 'Bernex', 'canton' => 'GE'), + '1234' => array('town' => 'Vessy', 'canton' => 'GE'), + '1236' => array('town' => 'Cartigny', 'canton' => 'GE'), + '1237' => array('town' => 'Avully', 'canton' => 'GE'), + '1239' => array('town' => 'Collex', 'canton' => 'GE'), + '1241' => array('town' => 'Puplinge', 'canton' => 'GE'), + '1242' => array('town' => 'Satigny', 'canton' => 'GE'), + '1243' => array('town' => 'Presinge', 'canton' => 'GE'), + '1244' => array('town' => 'Choulex', 'canton' => 'GE'), + '1245' => array('town' => 'Collonge-Bellerive', 'canton' => 'GE'), + '1246' => array('town' => 'Corsier GE', 'canton' => 'GE'), + '1247' => array('town' => 'Anières', 'canton' => 'GE'), + '1248' => array('town' => 'Hermance', 'canton' => 'GE'), + '1251' => array('town' => 'Gy', 'canton' => 'GE'), + '1252' => array('town' => 'Meinier', 'canton' => 'GE'), + '1253' => array('town' => 'Vandoeuvres', 'canton' => 'GE'), + '1254' => array('town' => 'Jussy', 'canton' => 'GE'), + '1255' => array('town' => 'Veyrier', 'canton' => 'GE'), + '1256' => array('town' => 'Troinex', 'canton' => 'GE'), + '1257' => array('town' => 'La Croix-de-Rozon', 'canton' => 'GE'), + '1258' => array('town' => 'Perly', 'canton' => 'GE'), + '1260' => array('town' => 'Nyon', 'canton' => 'VD'), + '1277' => array('town' => 'Borex', 'canton' => 'VD'), + '1278' => array('town' => 'La Rippe', 'canton' => 'VD'), + '1279' => array('town' => 'Chavannes-de-Bogis', 'canton' => 'VD'), + '1274' => array('town' => 'Grens', 'canton' => 'VD'), + '1275' => array('town' => 'Chéserex', 'canton' => 'VD'), + '1276' => array('town' => 'Gingins', 'canton' => 'VD'), + '1270' => array('town' => 'Trélex', 'canton' => 'VD'), + '1271' => array('town' => 'Givrins', 'canton' => 'VD'), + '1272' => array('town' => 'Genolier', 'canton' => 'VD'), + '1273' => array('town' => 'Le Muids', 'canton' => 'VD'), + '1268' => array('town' => 'Burtigny', 'canton' => 'VD'), + '1261' => array('town' => 'Marchissy', 'canton' => 'VD'), + '1269' => array('town' => 'Bassins', 'canton' => 'VD'), + '1262' => array('town' => 'Eysins', 'canton' => 'VD'), + '1263' => array('town' => 'Crassier', 'canton' => 'VD'), + '1264' => array('town' => 'St-Cergue', 'canton' => 'VD'), + '1265' => array('town' => 'La Cure', 'canton' => 'VD'), + '1266' => array('town' => 'Duillier', 'canton' => 'VD'), + '1267' => array('town' => 'Vich-Coinsins', 'canton' => 'VD'), + '1281' => array('town' => 'Russin', 'canton' => 'GE'), + '1283' => array('town' => 'Dardagny', 'canton' => 'GE'), + '1284' => array('town' => 'Chancy', 'canton' => 'GE'), + '1285' => array('town' => 'Athenaz (Avusy)', 'canton' => 'GE'), + '1286' => array('town' => 'Soral', 'canton' => 'GE'), + '1287' => array('town' => 'Laconnex', 'canton' => 'GE'), + '1288' => array('town' => 'Aire-la-Ville', 'canton' => 'GE'), + '1290' => array('town' => 'Versoix', 'canton' => 'GE'), + '1291' => array('town' => 'Commugny', 'canton' => 'VD'), + '1292' => array('town' => 'Chambésy', 'canton' => 'GE'), + '1293' => array('town' => 'Bellevue', 'canton' => 'GE'), + '1294' => array('town' => 'Genthod', 'canton' => 'GE'), + '1295' => array('town' => 'Mies-Tannay', 'canton' => 'VD'), + '1296' => array('town' => 'Coppet', 'canton' => 'VD'), + '1297' => array('town' => 'Founex', 'canton' => 'VD'), + '1298' => array('town' => 'Céligny', 'canton' => 'GE'), + '1299' => array('town' => 'Crans-près-Céligny', 'canton' => 'VD'), + '1302' => array('town' => 'Vufflens-la-Ville', 'canton' => 'VD'), + '1307' => array('town' => 'Lussery-Villars', 'canton' => 'VD'), + '1305' => array('town' => 'Penthalaz', 'canton' => 'VD'), + '1315' => array('town' => 'La Sarraz', 'canton' => 'VD'), + '1317' => array('town' => 'Orny', 'canton' => 'VD'), + '1316' => array('town' => 'Chevilly', 'canton' => 'VD'), + '1337' => array('town' => 'Vallorbe', 'canton' => 'VD'), + '1338' => array('town' => 'Ballaigues', 'canton' => 'VD'), + '1341' => array('town' => 'Orient', 'canton' => 'VD'), + '1346' => array('town' => 'Les Bioux', 'canton' => 'VD'), + '1344' => array('town' => 'L\'Abbaye', 'canton' => 'VD'), + '1342' => array('town' => 'Le Pont', 'canton' => 'VD'), + '1343' => array('town' => 'Les Charbonnières', 'canton' => 'VD'), + '1345' => array('town' => 'Le Lieu', 'canton' => 'VD'), + '1347' => array('town' => 'Le Sentier', 'canton' => 'VD'), + '1348' => array('town' => 'Le Brassus', 'canton' => 'VD'), + '1306' => array('town' => 'Daillens', 'canton' => 'VD'), + '1303' => array('town' => 'Penthaz', 'canton' => 'VD'), + '1308' => array('town' => 'La Chaux-Cossonay', 'canton' => 'VD'), + '1313' => array('town' => 'Ferreyres', 'canton' => 'VD'), + '1321' => array('town' => 'Arnex-sur-Orbe', 'canton' => 'VD'), + '1318' => array('town' => 'Pompaples', 'canton' => 'VD'), + '1312' => array('town' => 'Eclépens', 'canton' => 'VD'), + '1329' => array('town' => 'Bretonnières', 'canton' => 'VD'), + '1322' => array('town' => 'Croy', 'canton' => 'VD'), + '1323' => array('town' => 'Romainmôtier', 'canton' => 'VD'), + '1324' => array('town' => 'Premier', 'canton' => 'VD'), + '1325' => array('town' => 'Vaulion', 'canton' => 'VD'), + '1326' => array('town' => 'Juriens', 'canton' => 'VD'), + '1350' => array('town' => 'Orbe', 'canton' => 'VD'), + '1352' => array('town' => 'Agiez', 'canton' => 'VD'), + '1353' => array('town' => 'Bofflens', 'canton' => 'VD'), + '1354' => array('town' => 'Montcherand', 'canton' => 'VD'), + '1355' => array('town' => 'L\'Abergement', 'canton' => 'VD'), + '1356' => array('town' => 'Les Clées', 'canton' => 'VD'), + '1357' => array('town' => 'Lignerolle', 'canton' => 'VD'), + '1358' => array('town' => 'Valeyres-Rances', 'canton' => 'VD'), + '1439' => array('town' => 'Rances', 'canton' => 'VD'), + '1373' => array('town' => 'Chavornay', 'canton' => 'VD'), + '1372' => array('town' => 'Bavois', 'canton' => 'VD'), + '1374' => array('town' => 'Corcelles-Chavorn', 'canton' => 'VD'), + '1375' => array('town' => 'Penthéréaz', 'canton' => 'VD'), + '1376' => array('town' => 'Goumoens-la-Ville', 'canton' => 'VD'), + '1400' => array('town' => 'Yverdon-les-Bains', 'canton' => 'VD'), + '1401' => array('town' => 'Yverdon-les-Bains', 'canton' => 'VD'), + '1416' => array('town' => 'Pailly', 'canton' => 'VD'), + '1418' => array('town' => 'Vuarrens', 'canton' => 'VD'), + '1420' => array('town' => 'Fiez', 'canton' => 'VD'), + '1421' => array('town' => 'Fontaines-Grandson', 'canton' => 'VD'), + '1423' => array('town' => 'Villars-Burquin', 'canton' => 'VD'), + '1453' => array('town' => 'Mauborget', 'canton' => 'VD'), + '1429' => array('town' => 'Giez', 'canton' => 'VD'), + '1430' => array('town' => 'Orges', 'canton' => 'VD'), + '1431' => array('town' => 'Vugelles-La Mothe', 'canton' => 'VD'), + '1405' => array('town' => 'Pomy', 'canton' => 'VD'), + '1406' => array('town' => 'Cronay', 'canton' => 'VD'), + '1408' => array('town' => 'Prahins', 'canton' => 'VD'), + '1409' => array('town' => 'Chanéaz', 'canton' => 'VD'), + '1412' => array('town' => 'Valeyres-Ursins', 'canton' => 'VD'), + '1413' => array('town' => 'Orzens', 'canton' => 'VD'), + '1046' => array('town' => 'Rueyres', 'canton' => 'VD'), + '1404' => array('town' => 'Cuarny', 'canton' => 'VD'), + '1427' => array('town' => 'Bonvillars', 'canton' => 'VD'), + '1424' => array('town' => 'Champagne', 'canton' => 'VD'), + '1415' => array('town' => 'Molondin', 'canton' => 'VD'), + '1422' => array('town' => 'Grandson', 'canton' => 'VD'), + '1425' => array('town' => 'Onnens VD', 'canton' => 'VD'), + '1426' => array('town' => 'Concise', 'canton' => 'VD'), + '1432' => array('town' => 'Belmont-Yverdon', 'canton' => 'VD'), + '1433' => array('town' => 'Suchy', 'canton' => 'VD'), + '1434' => array('town' => 'Ependes VD', 'canton' => 'VD'), + '1435' => array('town' => 'Essert-Pittet', 'canton' => 'VD'), + '1436' => array('town' => 'Treycovagnes', 'canton' => 'VD'), + '1437' => array('town' => 'Suscévaz', 'canton' => 'VD'), + '1438' => array('town' => 'Mathod', 'canton' => 'VD'), + '1441' => array('town' => 'Valeyres-Montagny', 'canton' => 'VD'), + '1442' => array('town' => 'Montagny-Yverdon', 'canton' => 'VD'), + '1443' => array('town' => 'Champvent', 'canton' => 'VD'), + '1445' => array('town' => 'Vuiteboeuf', 'canton' => 'VD'), + '1446' => array('town' => 'Baulmes', 'canton' => 'VD'), + '1450' => array('town' => 'Ste-Croix', 'canton' => 'VD'), + '1454' => array('town' => 'L\'Auberson', 'canton' => 'VD'), + '1452' => array('town' => 'Les Rasses', 'canton' => 'VD'), + '1462' => array('town' => 'Yvonand', 'canton' => 'VD'), + '1463' => array('town' => 'Rovray', 'canton' => 'VD'), + '1464' => array('town' => 'Chavannes-le-Chêne', 'canton' => 'VD'), + '1468' => array('town' => 'Cheyres', 'canton' => 'FR'), + '1470' => array('town' => 'Estavayer-le-Lac', 'canton' => 'FR'), + '1473' => array('town' => 'Font', 'canton' => 'FR'), + '1474' => array('town' => 'Châbles FR', 'canton' => 'FR'), + '1483' => array('town' => 'Montet (Broye)', 'canton' => 'FR'), + '1482' => array('town' => 'Cugy FR', 'canton' => 'FR'), + '1541' => array('town' => 'Bussy FR', 'canton' => 'FR'), + '1484' => array('town' => 'Aumont', 'canton' => 'FR'), + '1485' => array('town' => 'Nuvilly', 'canton' => 'FR'), + '1486' => array('town' => 'Vuissens', 'canton' => 'FR'), + '1537' => array('town' => 'Champtauroz', 'canton' => 'VD'), + '1538' => array('town' => 'Treytorrens-Payern', 'canton' => 'VD'), + '1489' => array('town' => 'Murist', 'canton' => 'FR'), + '1512' => array('town' => 'Chavannes-s-Moudon', 'canton' => 'VD'), + '1513' => array('town' => 'Hermenches', 'canton' => 'VD'), + '1514' => array('town' => 'Bussy-sur-Moudon', 'canton' => 'VD'), + '1522' => array('town' => 'Oulens-sur-Lucens', 'canton' => 'VD'), + '1515' => array('town' => 'Villars-le-Comte', 'canton' => 'VD'), + '1521' => array('town' => 'Curtilles', 'canton' => 'VD'), + '1523' => array('town' => 'Granges-Marnand', 'canton' => 'VD'), + '1527' => array('town' => 'Villeneuve FR', 'canton' => 'FR'), + '1528' => array('town' => 'Surpierre', 'canton' => 'FR'), + '1529' => array('town' => 'Cheiry', 'canton' => 'FR'), + '1530' => array('town' => 'Payerne', 'canton' => 'VD'), + '1532' => array('town' => 'Fétigny', 'canton' => 'FR'), + '1533' => array('town' => 'Ménières', 'canton' => 'FR'), + '1534' => array('town' => 'Sassel', 'canton' => 'VD'), + '1536' => array('town' => 'Combremont-Petit', 'canton' => 'VD'), + '1526' => array('town' => 'Forel-sur-Lucens', 'canton' => 'VD'), + '1542' => array('town' => 'Rueyres-les-Prés', 'canton' => 'FR'), + '1543' => array('town' => 'Grandcour', 'canton' => 'VD'), + '1544' => array('town' => 'Gletterens', 'canton' => 'FR'), + '1545' => array('town' => 'Chevroux', 'canton' => 'VD'), + '1551' => array('town' => 'Vers-chez-Perrin', 'canton' => 'VD'), + '1552' => array('town' => 'Trey', 'canton' => 'VD'), + '1553' => array('town' => 'Châtonnaye', 'canton' => 'FR'), + '1554' => array('town' => 'Sédeilles', 'canton' => 'VD'), + '1555' => array('town' => 'Villarzel', 'canton' => 'VD'), + '1682' => array('town' => 'Villars-Bramard', 'canton' => 'VD'), + '1535' => array('town' => 'Combremont-Grand', 'canton' => 'VD'), + '1562' => array('town' => 'Corcelles-Payerne', 'canton' => 'VD'), + '1563' => array('town' => 'Dompierre FR', 'canton' => 'FR'), + '1564' => array('town' => 'Domdidier', 'canton' => 'FR'), + '1565' => array('town' => 'Missy', 'canton' => 'VD'), + '1475' => array('town' => 'Autavaux', 'canton' => 'FR'), + '1567' => array('town' => 'Delley', 'canton' => 'FR'), + '1568' => array('town' => 'Portalban', 'canton' => 'FR'), + '1566' => array('town' => 'St-Aubin FR', 'canton' => 'FR'), + '1580' => array('town' => 'Avenches', 'canton' => 'VD'), + '1582' => array('town' => 'Donatyre', 'canton' => 'VD'), + '1583' => array('town' => 'Villarepos', 'canton' => 'FR'), + '1584' => array('town' => 'Villars-le-Grand', 'canton' => 'VD'), + '1585' => array('town' => 'Salavaux', 'canton' => 'VD'), + '1586' => array('town' => 'Vallamand', 'canton' => 'VD'), + '1587' => array('town' => 'Montmagny', 'canton' => 'VD'), + '1589' => array('town' => 'Chabrey', 'canton' => 'VD'), + '1588' => array('town' => 'Cudrefin', 'canton' => 'VD'), + '1595' => array('town' => 'Faoug', 'canton' => 'VD'), + '1607' => array('town' => 'Palézieux-Village', 'canton' => 'VD'), + '1610' => array('town' => 'Châtillens', 'canton' => 'VD'), + '1525' => array('town' => 'Henniez', 'canton' => 'VD'), + '1524' => array('town' => 'Marnand', 'canton' => 'VD'), + '1090' => array('town' => 'La Croix (Lutry)', 'canton' => 'VD'), + '1091' => array('town' => 'Grandvaux', 'canton' => 'VD'), + '1070' => array('town' => 'Puidoux-Gare', 'canton' => 'VD'), + '1071' => array('town' => 'Chexbres', 'canton' => 'VD'), + '1072' => array('town' => 'Forel (Lavaux)', 'canton' => 'VD'), + '1614' => array('town' => 'Granges (Veveyse)', 'canton' => 'FR'), + '1615' => array('town' => 'Bossonnens', 'canton' => 'FR'), + '1616' => array('town' => 'Attalens', 'canton' => 'FR'), + '1617' => array('town' => 'Remaufens', 'canton' => 'FR'), + '1618' => array('town' => 'Châtel-St-Denis', 'canton' => 'FR'), + '1619' => array('town' => 'Les Paccots', 'canton' => 'FR'), + '1623' => array('town' => 'Semsales', 'canton' => 'FR'), + '1624' => array('town' => 'La Verrerie', 'canton' => 'FR'), + '1627' => array('town' => 'Vaulruz', 'canton' => 'FR'), + '1628' => array('town' => 'Vuadens', 'canton' => 'FR'), + '1630' => array('town' => 'Bulle', 'canton' => 'FR'), + '1633' => array('town' => 'Vuippens', 'canton' => 'FR'), + '1642' => array('town' => 'Sorens', 'canton' => 'FR'), + '1643' => array('town' => 'Gumefens', 'canton' => 'FR'), + '1644' => array('town' => 'Avry-devant-Pont', 'canton' => 'FR'), + '1645' => array('town' => 'Le Bry', 'canton' => 'FR'), + '1646' => array('town' => 'Echarlens', 'canton' => 'FR'), + '1647' => array('town' => 'Corbières', 'canton' => 'FR'), + '1648' => array('town' => 'Hauteville', 'canton' => 'FR'), + '1656' => array('town' => 'Im Fang', 'canton' => 'FR'), + '1657' => array('town' => 'Abländschen', 'canton' => 'BE'), + '1654' => array('town' => 'Cerniat FR', 'canton' => 'FR'), + '1651' => array('town' => 'Villarvolard', 'canton' => 'FR'), + '1652' => array('town' => 'Botterens', 'canton' => 'FR'), + '1638' => array('town' => 'Morlon', 'canton' => 'FR'), + '1663' => array('town' => 'Moléson-s-Gruyères', 'canton' => 'FR'), + '1632' => array('town' => 'Riaz', 'canton' => 'FR'), + '1634' => array('town' => 'La Roche FR', 'canton' => 'FR'), + '1649' => array('town' => 'Pont-la-Ville', 'canton' => 'FR'), + '1635' => array('town' => 'La Tour-de-Trême', 'canton' => 'FR'), + '1636' => array('town' => 'Broc', 'canton' => 'FR'), + '1637' => array('town' => 'Charmey (Gruyère)', 'canton' => 'FR'), + '1661' => array('town' => 'Pâquier-Montbarry', 'canton' => 'FR'), + '1665' => array('town' => 'Estavannens', 'canton' => 'FR'), + '1667' => array('town' => 'Enney', 'canton' => 'FR'), + '1669' => array('town' => 'Neirivue', 'canton' => 'FR'), + '1666' => array('town' => 'Grandvillard', 'canton' => 'FR'), + '1675' => array('town' => 'Vauderens', 'canton' => 'FR'), + '1670' => array('town' => 'Ursy', 'canton' => 'FR'), + '1674' => array('town' => 'Vuarmarens', 'canton' => 'FR'), + '1678' => array('town' => 'Siviriez', 'canton' => 'FR'), + '1679' => array('town' => 'Villaraboud', 'canton' => 'FR'), + '1676' => array('town' => 'Chavannes-Forts', 'canton' => 'FR'), + '1677' => array('town' => 'Prez-vers-Siviriez', 'canton' => 'FR'), + '1680' => array('town' => 'Romont FR', 'canton' => 'FR'), + '1681' => array('town' => 'Billens', 'canton' => 'FR'), + '1683' => array('town' => 'Brenles', 'canton' => 'VD'), + '1694' => array('town' => 'Orsonnens', 'canton' => 'FR'), + '1695' => array('town' => 'Villarlod', 'canton' => 'FR'), + '1696' => array('town' => 'Vuisternens-Ogoz', 'canton' => 'FR'), + '1684' => array('town' => 'Mézières FR', 'canton' => 'FR'), + '1685' => array('town' => 'Villariaz', 'canton' => 'FR'), + '1687' => array('town' => 'Estévenens', 'canton' => 'FR'), + '1686' => array('town' => 'Grangettes-Romont', 'canton' => 'FR'), + '1689' => array('town' => 'Châtelard-p-Romont', 'canton' => 'FR'), + '1688' => array('town' => 'Sommentier', 'canton' => 'FR'), + '1626' => array('town' => 'Romanens', 'canton' => 'FR'), + '1692' => array('town' => 'Massonnens', 'canton' => 'FR'), + '1625' => array('town' => 'Sâles (Gruyère)', 'canton' => 'FR'), + '1612' => array('town' => 'Ecoteaux', 'canton' => 'VD'), + '1613' => array('town' => 'Maracon', 'canton' => 'VD'), + '1608' => array('town' => 'Oron-le-Châtel', 'canton' => 'VD'), + '1609' => array('town' => 'St-Martin FR', 'canton' => 'FR'), + '1611' => array('town' => 'Le Crêt-p-Semsales', 'canton' => 'FR'), + '1697' => array('town' => 'La Joux FR', 'canton' => 'FR'), + '1699' => array('town' => 'Bouloz', 'canton' => 'FR'), + '1700' => array('town' => 'Fribourg', 'canton' => 'FR'), + '1702' => array('town' => 'Fribourg', 'canton' => 'FR'), + '1704' => array('town' => 'Fribourg', 'canton' => 'FR'), + '1705' => array('town' => 'Fribourg', 'canton' => 'FR'), + '1707' => array('town' => 'Fribourg', 'canton' => 'FR'), + '1708' => array('town' => 'Fribourg', 'canton' => 'FR'), + '1763' => array('town' => 'Granges-Paccot', 'canton' => 'FR'), + '1701' => array('town' => 'Fribourg', 'canton' => 'FR'), + '1720' => array('town' => 'Corminboeuf', 'canton' => 'FR'), + '1721' => array('town' => 'Misery-Courtion', 'canton' => 'FR'), + '1735' => array('town' => 'Giffers', 'canton' => 'FR'), + '1736' => array('town' => 'St. Silvester', 'canton' => 'FR'), + '1737' => array('town' => 'Plasselb', 'canton' => 'FR'), + '1738' => array('town' => 'Sangernboden', 'canton' => 'BE'), + '1716' => array('town' => 'Schwarzsee', 'canton' => 'FR'), + '1724' => array('town' => 'Bonnefontaine', 'canton' => 'FR'), + '1727' => array('town' => 'Corpataux-Magneden', 'canton' => 'FR'), + '1728' => array('town' => 'Rossens FR', 'canton' => 'FR'), + '1719' => array('town' => 'Brünisried', 'canton' => 'FR'), + '1731' => array('town' => 'Ependes FR', 'canton' => 'FR'), + '1732' => array('town' => 'Arconciel', 'canton' => 'FR'), + '1733' => array('town' => 'Treyvaux', 'canton' => 'FR'), + '1712' => array('town' => 'Tafers', 'canton' => 'FR'), + '1713' => array('town' => 'St. Antoni', 'canton' => 'FR'), + '1714' => array('town' => 'Heitenried', 'canton' => 'FR'), + '1715' => array('town' => 'Alterswil FR', 'canton' => 'FR'), + '1717' => array('town' => 'St. Ursen', 'canton' => 'FR'), + '1718' => array('town' => 'Rechthalten', 'canton' => 'FR'), + '1722' => array('town' => 'Bourguillon', 'canton' => 'FR'), + '1723' => array('town' => 'Marly', 'canton' => 'FR'), + '1725' => array('town' => 'Posieux', 'canton' => 'FR'), + '1726' => array('town' => 'Farvagny', 'canton' => 'FR'), + '1746' => array('town' => 'Prez-vers-Noréaz', 'canton' => 'FR'), + '1747' => array('town' => 'Corserey', 'canton' => 'FR'), + '1748' => array('town' => 'Torny-le-Grand', 'canton' => 'FR'), + '1749' => array('town' => 'Middes', 'canton' => 'FR'), + '1740' => array('town' => 'Neyruz FR', 'canton' => 'FR'), + '1741' => array('town' => 'Cottens FR', 'canton' => 'FR'), + '1744' => array('town' => 'Chénens', 'canton' => 'FR'), + '1745' => array('town' => 'Lentigny', 'canton' => 'FR'), + '1742' => array('town' => 'Autigny', 'canton' => 'FR'), + '1691' => array('town' => 'Villarimboud', 'canton' => 'FR'), + '1752' => array('town' => 'Villars-sur-Glâne', 'canton' => 'FR'), + '1753' => array('town' => 'Matran', 'canton' => 'FR'), + '1754' => array('town' => 'Rosé', 'canton' => 'FR'), + '1756' => array('town' => 'Onnens FR', 'canton' => 'FR'), + '1757' => array('town' => 'Noréaz', 'canton' => 'FR'), + '1690' => array('town' => 'Villaz-St-Pierre', 'canton' => 'FR'), + '1762' => array('town' => 'Givisiez', 'canton' => 'FR'), + '1772' => array('town' => 'Grolley', 'canton' => 'FR'), + '1773' => array('town' => 'Léchelles', 'canton' => 'FR'), + '1774' => array('town' => 'Cousset', 'canton' => 'FR'), + '1776' => array('town' => 'Montagny-la-Ville', 'canton' => 'FR'), + '1795' => array('town' => 'Courlevon', 'canton' => 'FR'), + '1796' => array('town' => 'Courgevaux', 'canton' => 'FR'), + '1797' => array('town' => 'Münchenwiler', 'canton' => 'BE'), + '1794' => array('town' => 'Salvenach', 'canton' => 'FR'), + '1793' => array('town' => 'Jeuss', 'canton' => 'FR'), + '1792' => array('town' => 'Cordast', 'canton' => 'FR'), + '1791' => array('town' => 'Courtaman', 'canton' => 'FR'), + '1788' => array('town' => 'Praz (Vully)', 'canton' => 'FR'), + '1789' => array('town' => 'Lugnorre', 'canton' => 'FR'), + '1782' => array('town' => 'Belfaux', 'canton' => 'FR'), + '1783' => array('town' => 'Pensier', 'canton' => 'FR'), + '1784' => array('town' => 'Courtepin', 'canton' => 'FR'), + '1785' => array('town' => 'Cressier FR', 'canton' => 'FR'), + '1786' => array('town' => 'Sugiez', 'canton' => 'FR'), + '1787' => array('town' => 'Môtier (Vully)', 'canton' => 'FR'), + '1800' => array('town' => 'Vevey', 'canton' => 'VD'), + '1801' => array('town' => 'Le Mont-Pèlerin', 'canton' => 'VD'), + '1808' => array('town' => 'Monts-de-Corsier', 'canton' => 'VD'), + '1809' => array('town' => 'Fenil-sur-Corsier', 'canton' => 'VD'), + '1802' => array('town' => 'Corseaux', 'canton' => 'VD'), + '1803' => array('town' => 'Chardonne', 'canton' => 'VD'), + '1804' => array('town' => 'Corsier-sur-Vevey', 'canton' => 'VD'), + '1805' => array('town' => 'Jongny', 'canton' => 'VD'), + '1806' => array('town' => 'St-Légier-Chiésaz', 'canton' => 'VD'), + '1807' => array('town' => 'Blonay', 'canton' => 'VD'), + '1814' => array('town' => 'La Tour-de-Peilz', 'canton' => 'VD'), + '1815' => array('town' => 'Clarens', 'canton' => 'VD'), + '1816' => array('town' => 'Chailly-Montreux', 'canton' => 'VD'), + '1817' => array('town' => 'Brent', 'canton' => 'VD'), + '1820' => array('town' => 'Montreux', 'canton' => 'VD'), + '1822' => array('town' => 'Chernex', 'canton' => 'VD'), + '1823' => array('town' => 'Glion', 'canton' => 'VD'), + '1824' => array('town' => 'Caux', 'canton' => 'VD'), + '1832' => array('town' => 'Villard-sur-Chamby', 'canton' => 'VD'), + '1658' => array('town' => 'La Tine', 'canton' => 'VD'), + '1660' => array('town' => 'Les Moulins', 'canton' => 'VD'), + '1659' => array('town' => 'Flendruz', 'canton' => 'VD'), + '1833' => array('town' => 'Les Avants', 'canton' => 'VD'), + '1844' => array('town' => 'Villeneuve VD', 'canton' => 'VD'), + '1847' => array('town' => 'Rennaz', 'canton' => 'VD'), + '1845' => array('town' => 'Noville', 'canton' => 'VD'), + '1846' => array('town' => 'Chessel', 'canton' => 'VD'), + '1852' => array('town' => 'Roche VD', 'canton' => 'VD'), + '1853' => array('town' => 'Yvorne', 'canton' => 'VD'), + '1854' => array('town' => 'Leysin', 'canton' => 'VD'), + '1867' => array('town' => 'St-Triphon', 'canton' => 'VD'), + '1860' => array('town' => 'Aigle', 'canton' => 'VD'), + '1856' => array('town' => 'Corbeyrier', 'canton' => 'VD'), + '1862' => array('town' => 'La Comballaz', 'canton' => 'VD'), + '1866' => array('town' => 'La Forclaz VD', 'canton' => 'VD'), + '1884' => array('town' => 'Huémoz', 'canton' => 'VD'), + '1863' => array('town' => 'Le Sépey', 'canton' => 'VD'), + '1864' => array('town' => 'Vers-l\'Eglise', 'canton' => 'VD'), + '1865' => array('town' => 'Les Diablerets', 'canton' => 'VD'), + '1868' => array('town' => 'Collombey', 'canton' => 'VS'), + '1870' => array('town' => 'Monthey', 'canton' => 'VS'), + '1871' => array('town' => 'Choëx', 'canton' => 'VS'), + '1872' => array('town' => 'Troistorrents', 'canton' => 'VS'), + '1873' => array('town' => 'Val-d\'Illiez', 'canton' => 'VS'), + '1874' => array('town' => 'Champéry', 'canton' => 'VS'), + '1875' => array('town' => 'Morgins', 'canton' => 'VS'), + '1880' => array('town' => 'Bex', 'canton' => 'VD'), + '1882' => array('town' => 'Les Posses-sur-Bex', 'canton' => 'VD'), + '1885' => array('town' => 'Chesières', 'canton' => 'VD'), + '1890' => array('town' => 'St-Maurice', 'canton' => 'VS'), + '1891' => array('town' => 'Vérossaz', 'canton' => 'VS'), + '1869' => array('town' => 'Massongex', 'canton' => 'VS'), + '1895' => array('town' => 'Vionnaz', 'canton' => 'VS'), + '1897' => array('town' => 'Les Evouettes', 'canton' => 'VS'), + '1899' => array('town' => 'Torgon', 'canton' => 'VS'), + '1892' => array('town' => 'Lavey-Village', 'canton' => 'VD'), + '1893' => array('town' => 'Muraz (Collombey)', 'canton' => 'VS'), + '1896' => array('town' => 'Vouvry', 'canton' => 'VS'), + '1898' => array('town' => 'St-Gingolph', 'canton' => 'VS'), + '1902' => array('town' => 'Evionnaz', 'canton' => 'VS'), + '1903' => array('town' => 'Collonges', 'canton' => 'VS'), + '1904' => array('town' => 'Vernayaz', 'canton' => 'VS'), + '1905' => array('town' => 'Dorénaz', 'canton' => 'VS'), + '1906' => array('town' => 'Charrat', 'canton' => 'VS'), + '1907' => array('town' => 'Saxon', 'canton' => 'VS'), + '1908' => array('town' => 'Riddes', 'canton' => 'VS'), + '1912' => array('town' => 'Leytron', 'canton' => 'VS'), + '1911' => array('town' => 'Ovronnaz', 'canton' => 'VS'), + '1913' => array('town' => 'Saillon', 'canton' => 'VS'), + '1914' => array('town' => 'Isérables', 'canton' => 'VS'), + '1918' => array('town' => 'La Tzoumaz', 'canton' => 'VS'), + '1955' => array('town' => 'Chamoson', 'canton' => 'VS'), + '1957' => array('town' => 'Ardon', 'canton' => 'VS'), + '1920' => array('town' => 'Martigny', 'canton' => 'VS'), + '1921' => array('town' => 'Martigny-Croix', 'canton' => 'VS'), + '1923' => array('town' => 'Le Trétien', 'canton' => 'VS'), + '1925' => array('town' => 'Le Châtelard VS', 'canton' => 'VS'), + '1927' => array('town' => 'Chemin', 'canton' => 'VS'), + '1929' => array('town' => 'Trient', 'canton' => 'VS'), + '1928' => array('town' => 'Ravoire', 'canton' => 'VS'), + '1922' => array('town' => 'Salvan', 'canton' => 'VS'), + '1926' => array('town' => 'Fully', 'canton' => 'VS'), + '1932' => array('town' => 'Bovernier', 'canton' => 'VS'), + '1947' => array('town' => 'Versegères', 'canton' => 'VS'), + '1941' => array('town' => 'Vollèges', 'canton' => 'VS'), + '1942' => array('town' => 'Levron', 'canton' => 'VS'), + '1948' => array('town' => 'Lourtier', 'canton' => 'VS'), + '1945' => array('town' => 'Liddes', 'canton' => 'VS'), + '1946' => array('town' => 'Bourg-St-Pierre', 'canton' => 'VS'), + '1943' => array('town' => 'Praz-de-Fort', 'canton' => 'VS'), + '1944' => array('town' => 'La Fouly VS', 'canton' => 'VS'), + '1933' => array('town' => 'Sembrancher', 'canton' => 'VS'), + '1934' => array('town' => 'Le Châble VS', 'canton' => 'VS'), + '1936' => array('town' => 'Verbier', 'canton' => 'VS'), + '1937' => array('town' => 'Orsières', 'canton' => 'VS'), + '1938' => array('town' => 'Champex-Lac', 'canton' => 'VS'), + '1950' => array('town' => 'Sion', 'canton' => 'VS'), + '1951' => array('town' => 'Sion', 'canton' => 'VS'), + '1975' => array('town' => 'St-Séverin', 'canton' => 'VS'), + '1976' => array('town' => 'Erde', 'canton' => 'VS'), + '1971' => array('town' => 'Grimisuat', 'canton' => 'VS'), + '1974' => array('town' => 'Arbaz', 'canton' => 'VS'), + '1961' => array('town' => 'Vernamiège', 'canton' => 'VS'), + '1973' => array('town' => 'Nax', 'canton' => 'VS'), + '1968' => array('town' => 'Mase', 'canton' => 'VS'), + '1969' => array('town' => 'St-Martin VS', 'canton' => 'VS'), + '1981' => array('town' => 'Vex', 'canton' => 'VS'), + '1982' => array('town' => 'Euseigne', 'canton' => 'VS'), + '1984' => array('town' => 'Les Haudères', 'canton' => 'VS'), + '1986' => array('town' => 'Arolla', 'canton' => 'VS'), + '1985' => array('town' => 'La Sage', 'canton' => 'VS'), + '1987' => array('town' => 'Hérémence', 'canton' => 'VS'), + '1988' => array('town' => 'Les Collons', 'canton' => 'VS'), + '1991' => array('town' => 'Salins', 'canton' => 'VS'), + '1992' => array('town' => 'Les Agettes', 'canton' => 'VS'), + '1993' => array('town' => 'Veysonnaz', 'canton' => 'VS'), + '1997' => array('town' => 'Siviez (Nendaz)', 'canton' => 'VS'), + '1996' => array('town' => 'Fey (Nendaz)', 'canton' => 'VS'), + '1994' => array('town' => 'Aproz (Nendaz)', 'canton' => 'VS'), + '1962' => array('town' => 'Pont-de-la-Morge', 'canton' => 'VS'), + '1963' => array('town' => 'Vétroz', 'canton' => 'VS'), + '1964' => array('town' => 'Conthey', 'canton' => 'VS'), + '1965' => array('town' => 'Savièse', 'canton' => 'VS'), + '1966' => array('town' => 'Ayent', 'canton' => 'VS'), + '1967' => array('town' => 'Bramois', 'canton' => 'VS'), + '1983' => array('town' => 'Evolène', 'canton' => 'VS'), + '1972' => array('town' => 'Anzère', 'canton' => 'VS'), + '2000' => array('town' => 'Neuchâtel', 'canton' => 'NE'), + '2004' => array('town' => 'Neuchâtel 4', 'canton' => 'NE'), + '2007' => array('town' => 'Neuchâtel 7', 'canton' => 'NE'), + '2008' => array('town' => 'Neuchâtel', 'canton' => 'NE'), + '2009' => array('town' => 'Neuchâtel 9', 'canton' => 'NE'), + '2001' => array('town' => 'Neuchâtel 1', 'canton' => 'NE'), + '2002' => array('town' => 'Neuchâtel 2', 'canton' => 'NE'), + '2003' => array('town' => 'Neuchâtel 3', 'canton' => 'NE'), + '2006' => array('town' => 'Neuchâtel 6', 'canton' => 'NE'), + '2012' => array('town' => 'Auvernier', 'canton' => 'NE'), + '2013' => array('town' => 'Colombier NE', 'canton' => 'NE'), + '2014' => array('town' => 'Bôle', 'canton' => 'NE'), + '2015' => array('town' => 'Areuse', 'canton' => 'NE'), + '2016' => array('town' => 'Cortaillod', 'canton' => 'NE'), + '2017' => array('town' => 'Boudry', 'canton' => 'NE'), + '2022' => array('town' => 'Bevaix', 'canton' => 'NE'), + '2023' => array('town' => 'Gorgier', 'canton' => 'NE'), + '2024' => array('town' => 'St-Aubin-Sauges', 'canton' => 'NE'), + '2025' => array('town' => 'Chez-le-Bart', 'canton' => 'NE'), + '2028' => array('town' => 'Vaumarcus', 'canton' => 'NE'), + '2034' => array('town' => 'Peseux', 'canton' => 'NE'), + '2035' => array('town' => 'Corcelles NE', 'canton' => 'NE'), + '2036' => array('town' => 'Cormondrèche', 'canton' => 'NE'), + '2042' => array('town' => 'Valangin', 'canton' => 'NE'), + '2043' => array('town' => 'Boudevilliers', 'canton' => 'NE'), + '2046' => array('town' => 'Fontaines NE', 'canton' => 'NE'), + '2052' => array('town' => 'Fontainemelon', 'canton' => 'NE'), + '2053' => array('town' => 'Cernier', 'canton' => 'NE'), + '2054' => array('town' => 'Chézard-St-Martin', 'canton' => 'NE'), + '2056' => array('town' => 'Dombresson', 'canton' => 'NE'), + '2057' => array('town' => 'Villiers', 'canton' => 'NE'), + '2058' => array('town' => 'Le Pâquier NE', 'canton' => 'NE'), + '2063' => array('town' => 'Vilars NE', 'canton' => 'NE'), + '2065' => array('town' => 'Savagnier', 'canton' => 'NE'), + '2067' => array('town' => 'Chaumont', 'canton' => 'NE'), + '2068' => array('town' => 'Hauterive NE', 'canton' => 'NE'), + '2072' => array('town' => 'St-Blaise', 'canton' => 'NE'), + '2073' => array('town' => 'Enges', 'canton' => 'NE'), + '2074' => array('town' => 'Marin-Epagnier', 'canton' => 'NE'), + '3238' => array('town' => 'Gals', 'canton' => 'BE'), + '2087' => array('town' => 'Cornaux NE', 'canton' => 'NE'), + '2088' => array('town' => 'Cressier NE', 'canton' => 'NE'), + '2318' => array('town' => 'Brot-Plamboz', 'canton' => 'NE'), + '2103' => array('town' => 'Noiraigue', 'canton' => 'NE'), + '2105' => array('town' => 'Travers', 'canton' => 'NE'), + '2108' => array('town' => 'Couvet', 'canton' => 'NE'), + '2112' => array('town' => 'Môtiers NE', 'canton' => 'NE'), + '2113' => array('town' => 'Boveresse', 'canton' => 'NE'), + '2114' => array('town' => 'Fleurier', 'canton' => 'NE'), + '2115' => array('town' => 'Buttes', 'canton' => 'NE'), + '2117' => array('town' => 'La Côte-aux-Fées', 'canton' => 'NE'), + '2123' => array('town' => 'St-Sulpice NE', 'canton' => 'NE'), + '2406' => array('town' => 'La Brévine', 'canton' => 'NE'), + '2126' => array('town' => 'Les Verrières', 'canton' => 'NE'), + '2127' => array('town' => 'Les Bayards', 'canton' => 'NE'), + '2149' => array('town' => 'Champ-du-Moulin', 'canton' => 'NE'), + '2124' => array('town' => 'Les Sagnettes', 'canton' => 'NE'), + '2116' => array('town' => 'Mont-de-Buttes', 'canton' => 'NE'), + '2019' => array('town' => 'Chambrelien', 'canton' => 'NE'), + '2037' => array('town' => 'Montmollin', 'canton' => 'NE'), + '2206' => array('town' => 'Geneveys-Coffrane', 'canton' => 'NE'), + '2207' => array('town' => 'Coffrane', 'canton' => 'NE'), + '2208' => array('town' => 'Les Hauts-Geneveys', 'canton' => 'NE'), + '2300' => array('town' => 'La Chaux-de-Fonds', 'canton' => 'NE'), + '2302' => array('town' => 'La Chaux-de-Fonds', 'canton' => 'NE'), + '2303' => array('town' => 'La Chaux-de-Fonds', 'canton' => 'NE'), + '2306' => array('town' => 'La Chaux-de-Fonds', 'canton' => 'NE'), + '2301' => array('town' => 'La Chaux-de-Fonds', 'canton' => 'NE'), + '2304' => array('town' => 'La Chaux-de-Fonds', 'canton' => 'NE'), + '2316' => array('town' => 'Petit-Martel', 'canton' => 'NE'), + '2338' => array('town' => 'Les Emibois', 'canton' => 'JU'), + '2314' => array('town' => 'La Sagne NE', 'canton' => 'NE'), + '2322' => array('town' => 'Le Crêt-du-Locle', 'canton' => 'NE'), + '2325' => array('town' => 'Les Planchettes', 'canton' => 'NE'), + '2333' => array('town' => 'La Ferrière', 'canton' => 'BE'), + '2336' => array('town' => 'Les Bois', 'canton' => 'JU'), + '2400' => array('town' => 'Le Locle', 'canton' => 'NE'), + '2405' => array('town' => 'La Chaux-du-Milieu', 'canton' => 'NE'), + '2414' => array('town' => 'Cerneux-Péquignot', 'canton' => 'NE'), + '2416' => array('town' => 'Les Brenets', 'canton' => 'NE'), + '2500' => array('town' => 'Biel/Bienne', 'canton' => 'BE'), + '2501' => array('town' => 'Biel/Bienne', 'canton' => 'BE'), + '2502' => array('town' => 'Biel/Bienne', 'canton' => 'BE'), + '2503' => array('town' => 'Biel/Bienne', 'canton' => 'BE'), + '2504' => array('town' => 'Biel/Bienne', 'canton' => 'BE'), + '2505' => array('town' => 'Biel/Bienne', 'canton' => 'BE'), + '2512' => array('town' => 'Tüscherz-Alfermée', 'canton' => 'BE'), + '2513' => array('town' => 'Twann', 'canton' => 'BE'), + '2514' => array('town' => 'Ligerz', 'canton' => 'BE'), + '2515' => array('town' => 'Prêles', 'canton' => 'BE'), + '2516' => array('town' => 'Lamboing', 'canton' => 'BE'), + '2517' => array('town' => 'Diesse', 'canton' => 'BE'), + '2518' => array('town' => 'Nods', 'canton' => 'BE'), + '2520' => array('town' => 'La Neuveville', 'canton' => 'BE'), + '2523' => array('town' => 'Lignières', 'canton' => 'NE'), + '2525' => array('town' => 'Le Landeron', 'canton' => 'NE'), + '2532' => array('town' => 'Magglingen/Macolin', 'canton' => 'BE'), + '2533' => array('town' => 'Evilard', 'canton' => 'BE'), + '2534' => array('town' => 'Orvin', 'canton' => 'BE'), + '2535' => array('town' => 'Frinvillier', 'canton' => 'BE'), + '2536' => array('town' => 'Plagne', 'canton' => 'BE'), + '2537' => array('town' => 'Vauffelin', 'canton' => 'BE'), + '2538' => array('town' => 'Romont BE', 'canton' => 'BE'), + '2540' => array('town' => 'Grenchen', 'canton' => 'SO'), + '2542' => array('town' => 'Pieterlen', 'canton' => 'BE'), + '2543' => array('town' => 'Lengnau BE', 'canton' => 'BE'), + '2544' => array('town' => 'Bettlach', 'canton' => 'SO'), + '2545' => array('town' => 'Selzach', 'canton' => 'SO'), + '2552' => array('town' => 'Orpund', 'canton' => 'BE'), + '2553' => array('town' => 'Safnern', 'canton' => 'BE'), + '2554' => array('town' => 'Meinisberg', 'canton' => 'BE'), + '2555' => array('town' => 'Brügg BE', 'canton' => 'BE'), + '2556' => array('town' => 'Scheuren', 'canton' => 'BE'), + '2557' => array('town' => 'Studen BE', 'canton' => 'BE'), + '2558' => array('town' => 'Aegerten', 'canton' => 'BE'), + '2560' => array('town' => 'Nidau', 'canton' => 'BE'), + '2562' => array('town' => 'Port', 'canton' => 'BE'), + '2563' => array('town' => 'Ipsach', 'canton' => 'BE'), + '2564' => array('town' => 'Bellmund', 'canton' => 'BE'), + '2565' => array('town' => 'Jens', 'canton' => 'BE'), + '2572' => array('town' => 'Sutz', 'canton' => 'BE'), + '2575' => array('town' => 'Täuffelen', 'canton' => 'BE'), + '2576' => array('town' => 'Lüscherz', 'canton' => 'BE'), + '2577' => array('town' => 'Siselen BE', 'canton' => 'BE'), + '3237' => array('town' => 'Brüttelen', 'canton' => 'BE'), + '2603' => array('town' => 'Péry', 'canton' => 'BE'), + '2604' => array('town' => 'La Heutte', 'canton' => 'BE'), + '2605' => array('town' => 'Sonceboz-Sombeval', 'canton' => 'BE'), + '2606' => array('town' => 'Corgémont', 'canton' => 'BE'), + '2607' => array('town' => 'Cortébert', 'canton' => 'BE'), + '2608' => array('town' => 'Courtelary', 'canton' => 'BE'), + '2610' => array('town' => 'St-Imier', 'canton' => 'BE'), + '2612' => array('town' => 'Cormoret', 'canton' => 'BE'), + '2613' => array('town' => 'Villeret', 'canton' => 'BE'), + '2615' => array('town' => 'Sonvilier', 'canton' => 'BE'), + '2616' => array('town' => 'Renan BE', 'canton' => 'BE'), + '2710' => array('town' => 'Tavannes', 'canton' => 'BE'), + '2712' => array('town' => 'Le Fuet', 'canton' => 'BE'), + '2714' => array('town' => 'Le Prédame', 'canton' => 'JU'), + '2717' => array('town' => 'Fornet-Dessous', 'canton' => 'BE'), + '2718' => array('town' => 'Fornet-Dessus', 'canton' => 'JU'), + '2716' => array('town' => 'Sornetan', 'canton' => 'BE'), + '2713' => array('town' => 'Bellelay', 'canton' => 'BE'), + '2720' => array('town' => 'Tramelan', 'canton' => 'BE'), + '2722' => array('town' => 'Les Reussilles', 'canton' => 'BE'), + '2723' => array('town' => 'Mont-Tramelan', 'canton' => 'BE'), + '2345' => array('town' => 'Les Breuleux', 'canton' => 'JU'), + '2340' => array('town' => 'Le Noirmont', 'canton' => 'JU'), + '2350' => array('town' => 'Saignelégier', 'canton' => 'JU'), + '2353' => array('town' => 'Les Pommerats', 'canton' => 'JU'), + '2354' => array('town' => 'Goumois', 'canton' => 'JU'), + '2732' => array('town' => 'Reconvilier', 'canton' => 'BE'), + '2733' => array('town' => 'Pontenet', 'canton' => 'BE'), + '2735' => array('town' => 'Malleray-Bévilard', 'canton' => 'BE'), + '2736' => array('town' => 'Sorvilier', 'canton' => 'BE'), + '2738' => array('town' => 'Court', 'canton' => 'BE'), + '2740' => array('town' => 'Moutier', 'canton' => 'BE'), + '2742' => array('town' => 'Perrefitte', 'canton' => 'BE'), + '2748' => array('town' => 'Souboz', 'canton' => 'BE'), + '2743' => array('town' => 'Eschert', 'canton' => 'BE'), + '2744' => array('town' => 'Belprahon', 'canton' => 'BE'), + '2747' => array('town' => 'Seehof', 'canton' => 'BE'), + '2745' => array('town' => 'Grandval', 'canton' => 'BE'), + '2746' => array('town' => 'Crémines', 'canton' => 'BE'), + '2762' => array('town' => 'Roches BE', 'canton' => 'BE'), + '2832' => array('town' => 'Rebeuvelier', 'canton' => 'JU'), + '2830' => array('town' => 'Courrendlin', 'canton' => 'JU'), + '2800' => array('town' => 'Delémont', 'canton' => 'JU'), + '2802' => array('town' => 'Develier', 'canton' => 'JU'), + '2803' => array('town' => 'Bourrignon', 'canton' => 'JU'), + '2805' => array('town' => 'Soyhières', 'canton' => 'JU'), + '2806' => array('town' => 'Mettembert', 'canton' => 'JU'), + '2807' => array('town' => 'Pleigne', 'canton' => 'JU'), + '2812' => array('town' => 'Movelier', 'canton' => 'JU'), + '2813' => array('town' => 'Ederswiler', 'canton' => 'JU'), + '2814' => array('town' => 'Roggenburg', 'canton' => 'BL'), + '2822' => array('town' => 'Courroux', 'canton' => 'JU'), + '2823' => array('town' => 'Courcelon', 'canton' => 'JU'), + '2824' => array('town' => 'Vicques', 'canton' => 'JU'), + '2825' => array('town' => 'Courchapoix', 'canton' => 'JU'), + '2826' => array('town' => 'Corban', 'canton' => 'JU'), + '2827' => array('town' => 'Mervelier', 'canton' => 'JU'), + '2828' => array('town' => 'Montsevelier', 'canton' => 'JU'), + '2829' => array('town' => 'Vermes', 'canton' => 'JU'), + '2842' => array('town' => 'Rossemaison', 'canton' => 'JU'), + '2843' => array('town' => 'Châtillon JU', 'canton' => 'JU'), + '2852' => array('town' => 'Courtételle', 'canton' => 'JU'), + '2853' => array('town' => 'Courfaivre', 'canton' => 'JU'), + '2854' => array('town' => 'Bassecourt', 'canton' => 'JU'), + '2855' => array('town' => 'Glovelier', 'canton' => 'JU'), + '2856' => array('town' => 'Boécourt', 'canton' => 'JU'), + '2857' => array('town' => 'Montavon', 'canton' => 'JU'), + '2863' => array('town' => 'Undervelier', 'canton' => 'JU'), + '2864' => array('town' => 'Soulce', 'canton' => 'JU'), + '2873' => array('town' => 'Saulcy', 'canton' => 'JU'), + '2882' => array('town' => 'St-Ursanne', 'canton' => 'JU'), + '2883' => array('town' => 'Montmelon', 'canton' => 'JU'), + '2884' => array('town' => 'Montenol', 'canton' => 'JU'), + '2885' => array('town' => 'Epauvillers', 'canton' => 'JU'), + '2886' => array('town' => 'Epiquerez', 'canton' => 'JU'), + '2887' => array('town' => 'Soubey', 'canton' => 'JU'), + '2888' => array('town' => 'Seleute', 'canton' => 'JU'), + '2889' => array('town' => 'Ocourt', 'canton' => 'JU'), + '2950' => array('town' => 'Courgenay', 'canton' => 'JU'), + '2900' => array('town' => 'Porrentruy', 'canton' => 'JU'), + '2902' => array('town' => 'Fontenais', 'canton' => 'JU'), + '2903' => array('town' => 'Villars-Fontenais', 'canton' => 'JU'), + '2904' => array('town' => 'Bressaucourt', 'canton' => 'JU'), + '2905' => array('town' => 'Courtedoux', 'canton' => 'JU'), + '2906' => array('town' => 'Chevenez', 'canton' => 'JU'), + '2907' => array('town' => 'Rocourt', 'canton' => 'JU'), + '2908' => array('town' => 'Grandfontaine', 'canton' => 'JU'), + '2912' => array('town' => 'Roche-d\'Or', 'canton' => 'JU'), + '2914' => array('town' => 'Damvant', 'canton' => 'JU'), + '2915' => array('town' => 'Bure', 'canton' => 'JU'), + '2916' => array('town' => 'Fahy', 'canton' => 'JU'), + '2922' => array('town' => 'Courchavon', 'canton' => 'JU'), + '2923' => array('town' => 'Courtemaîche', 'canton' => 'JU'), + '2924' => array('town' => 'Montignez', 'canton' => 'JU'), + '2925' => array('town' => 'Buix', 'canton' => 'JU'), + '2926' => array('town' => 'Boncourt', 'canton' => 'JU'), + '2932' => array('town' => 'Coeuve', 'canton' => 'JU'), + '2935' => array('town' => 'Beurnevésin', 'canton' => 'JU'), + '2942' => array('town' => 'Alle', 'canton' => 'JU'), + '2943' => array('town' => 'Vendlincourt', 'canton' => 'JU'), + '2944' => array('town' => 'Bonfol', 'canton' => 'JU'), + '2946' => array('town' => 'Miécourt', 'canton' => 'JU'), + '2947' => array('town' => 'Charmoille', 'canton' => 'JU'), + '2952' => array('town' => 'Cornol', 'canton' => 'JU'), + '2953' => array('town' => 'Fregiécourt-Pleuj', 'canton' => 'JU'), + '2954' => array('town' => 'Asuel', 'canton' => 'JU'), + '3000' => array('town' => 'Bern', 'canton' => 'BE'), + '3001' => array('town' => 'Bern', 'canton' => 'BE'), + '3002' => array('town' => 'Bern Postfinance', 'canton' => 'BE'), + '3003' => array('town' => 'Bern', 'canton' => 'BE'), + '3004' => array('town' => 'Bern', 'canton' => 'BE'), + '3005' => array('town' => 'Bern', 'canton' => 'BE'), + '3006' => array('town' => 'Bern', 'canton' => 'BE'), + '3007' => array('town' => 'Bern', 'canton' => 'BE'), + '3008' => array('town' => 'Bern', 'canton' => 'BE'), + '3010' => array('town' => 'Bern', 'canton' => 'BE'), + '3011' => array('town' => 'Bern', 'canton' => 'BE'), + '3012' => array('town' => 'Bern', 'canton' => 'BE'), + '3013' => array('town' => 'Bern', 'canton' => 'BE'), + '3014' => array('town' => 'Bern', 'canton' => 'BE'), + '3015' => array('town' => 'Bern', 'canton' => 'BE'), + '3018' => array('town' => 'Bern', 'canton' => 'BE'), + '3019' => array('town' => 'Bern', 'canton' => 'BE'), + '3020' => array('town' => 'Bern', 'canton' => 'BE'), + '3027' => array('town' => 'Bern', 'canton' => 'BE'), + '3095' => array('town' => 'Spiegel b. Bern', 'canton' => 'BE'), + '3032' => array('town' => 'Hinterkappelen', 'canton' => 'BE'), + '3033' => array('town' => 'Wohlen b. Bern', 'canton' => 'BE'), + '3034' => array('town' => 'Murzelen', 'canton' => 'BE'), + '3035' => array('town' => 'Frieswil', 'canton' => 'BE'), + '3036' => array('town' => 'Detligen', 'canton' => 'BE'), + '3037' => array('town' => 'Herrenschwanden', 'canton' => 'BE'), + '3038' => array('town' => 'Kirchlindach', 'canton' => 'BE'), + '3042' => array('town' => 'Ortschwaben', 'canton' => 'BE'), + '3043' => array('town' => 'Uettligen', 'canton' => 'BE'), + '3049' => array('town' => 'Säriswil', 'canton' => 'BE'), + '3045' => array('town' => 'Meikirch', 'canton' => 'BE'), + '3046' => array('town' => 'Wahlendorf', 'canton' => 'BE'), + '3047' => array('town' => 'Bremgarten b. Bern', 'canton' => 'BE'), + '3048' => array('town' => 'Worblaufen', 'canton' => 'BE'), + '3052' => array('town' => 'Zollikofen', 'canton' => 'BE'), + '3053' => array('town' => 'Münchenbuchsee', 'canton' => 'BE'), + '3054' => array('town' => 'Schüpfen', 'canton' => 'BE'), + '3063' => array('town' => 'Ittigen', 'canton' => 'BE'), + '3065' => array('town' => 'Bolligen', 'canton' => 'BE'), + '3066' => array('town' => 'Stettlen', 'canton' => 'BE'), + '3067' => array('town' => 'Boll', 'canton' => 'BE'), + '3068' => array('town' => 'Utzigen', 'canton' => 'BE'), + '3072' => array('town' => 'Ostermundigen', 'canton' => 'BE'), + '3073' => array('town' => 'Gümligen', 'canton' => 'BE'), + '3074' => array('town' => 'Muri b. Bern', 'canton' => 'BE'), + '3075' => array('town' => 'Rüfenacht BE', 'canton' => 'BE'), + '3076' => array('town' => 'Worb', 'canton' => 'BE'), + '3077' => array('town' => 'Enggistein', 'canton' => 'BE'), + '3078' => array('town' => 'Richigen', 'canton' => 'BE'), + '3082' => array('town' => 'Schlosswil', 'canton' => 'BE'), + '3083' => array('town' => 'Trimstein', 'canton' => 'BE'), + '3084' => array('town' => 'Wabern', 'canton' => 'BE'), + '3088' => array('town' => 'Oberbütschel', 'canton' => 'BE'), + '3086' => array('town' => 'Zimmerwald', 'canton' => 'BE'), + '3087' => array('town' => 'Niedermuhlern', 'canton' => 'BE'), + '3089' => array('town' => 'Hinterfultigen', 'canton' => 'BE'), + '3096' => array('town' => 'Oberbalm', 'canton' => 'BE'), + '3097' => array('town' => 'Liebefeld', 'canton' => 'BE'), + '3098' => array('town' => 'Köniz', 'canton' => 'BE'), + '3099' => array('town' => 'Rüti b. Riggisberg', 'canton' => 'BE'), + '3110' => array('town' => 'Münsingen', 'canton' => 'BE'), + '3112' => array('town' => 'Allmendingen b. BE', 'canton' => 'BE'), + '3114' => array('town' => 'Wichtrach', 'canton' => 'BE'), + '3115' => array('town' => 'Gerzensee', 'canton' => 'BE'), + '3116' => array('town' => 'Kirchdorf BE', 'canton' => 'BE'), + '3629' => array('town' => 'Kiesen', 'canton' => 'BE'), + '3628' => array('town' => 'Uttigen', 'canton' => 'BE'), + '3122' => array('town' => 'Kehrsatz', 'canton' => 'BE'), + '3123' => array('town' => 'Belp', 'canton' => 'BE'), + '3124' => array('town' => 'Belpberg', 'canton' => 'BE'), + '3125' => array('town' => 'Toffen', 'canton' => 'BE'), + '3126' => array('town' => 'Kaufdorf', 'canton' => 'BE'), + '3127' => array('town' => 'Mühlethurnen', 'canton' => 'BE'), + '3128' => array('town' => 'Kirchenthurnen', 'canton' => 'BE'), + '3132' => array('town' => 'Riggisberg', 'canton' => 'BE'), + '3664' => array('town' => 'Burgistein', 'canton' => 'BE'), + '3665' => array('town' => 'Wattenwil', 'canton' => 'BE'), + '3662' => array('town' => 'Seftigen', 'canton' => 'BE'), + '3663' => array('town' => 'Gurzelen', 'canton' => 'BE'), + '3661' => array('town' => 'Uetendorf', 'canton' => 'BE'), + '3144' => array('town' => 'Gasel', 'canton' => 'BE'), + '3145' => array('town' => 'Niederscherli', 'canton' => 'BE'), + '3147' => array('town' => 'Mittelhäusern', 'canton' => 'BE'), + '3148' => array('town' => 'Lanzenhäusern', 'canton' => 'BE'), + '3150' => array('town' => 'Schwarzenburg', 'canton' => 'BE'), + '3152' => array('town' => 'Mamishaus', 'canton' => 'BE'), + '3153' => array('town' => 'Rüschegg Gambach', 'canton' => 'BE'), + '3154' => array('town' => 'Rüschegg Heubach', 'canton' => 'BE'), + '3155' => array('town' => 'Helgisried', 'canton' => 'BE'), + '3156' => array('town' => 'Riffenmatt', 'canton' => 'BE'), + '3157' => array('town' => 'Milken', 'canton' => 'BE'), + '3158' => array('town' => 'Guggisberg', 'canton' => 'BE'), + '3159' => array('town' => 'Riedstätt', 'canton' => 'BE'), + '3172' => array('town' => 'Niederwangen BE', 'canton' => 'BE'), + '3173' => array('town' => 'Oberwangen b. Bern', 'canton' => 'BE'), + '3174' => array('town' => 'Thörishaus', 'canton' => 'BE'), + '3175' => array('town' => 'Flamatt', 'canton' => 'FR'), + '3176' => array('town' => 'Neuenegg', 'canton' => 'BE'), + '3177' => array('town' => 'Laupen BE', 'canton' => 'BE'), + '3178' => array('town' => 'Bösingen', 'canton' => 'FR'), + '3179' => array('town' => 'Kriechenwil', 'canton' => 'BE'), + '3182' => array('town' => 'Ueberstorf', 'canton' => 'FR'), + '3183' => array('town' => 'Albligen', 'canton' => 'BE'), + '3184' => array('town' => 'Wünnewil', 'canton' => 'FR'), + '3186' => array('town' => 'Düdingen', 'canton' => 'FR'), + '3202' => array('town' => 'Frauenkappelen', 'canton' => 'BE'), + '3203' => array('town' => 'Mühleberg', 'canton' => 'BE'), + '3204' => array('town' => 'Rosshäusern', 'canton' => 'BE'), + '3205' => array('town' => 'Gümmenen', 'canton' => 'BE'), + '3206' => array('town' => 'Rizenbach', 'canton' => 'BE'), + '3207' => array('town' => 'Wileroltigen', 'canton' => 'BE'), + '3208' => array('town' => 'Gurbrü', 'canton' => 'BE'), + '3210' => array('town' => 'Kerzers', 'canton' => 'FR'), + '3216' => array('town' => 'Ried b. Kerzers', 'canton' => 'FR'), + '3215' => array('town' => 'Gempenach', 'canton' => 'FR'), + '3214' => array('town' => 'Ulmiz', 'canton' => 'FR'), + '3213' => array('town' => 'Liebistorf', 'canton' => 'FR'), + '3212' => array('town' => 'Gurmels', 'canton' => 'FR'), + '3225' => array('town' => 'Müntschemier', 'canton' => 'BE'), + '3226' => array('town' => 'Treiten', 'canton' => 'BE'), + '3232' => array('town' => 'Ins', 'canton' => 'BE'), + '3233' => array('town' => 'Tschugg', 'canton' => 'BE'), + '3234' => array('town' => 'Vinelz', 'canton' => 'BE'), + '3235' => array('town' => 'Erlach', 'canton' => 'BE'), + '3236' => array('town' => 'Gampelen', 'canton' => 'BE'), + '3250' => array('town' => 'Lyss', 'canton' => 'BE'), + '3251' => array('town' => 'Wengi b. Büren', 'canton' => 'BE'), + '3252' => array('town' => 'Worben', 'canton' => 'BE'), + '3253' => array('town' => 'Schnottwil', 'canton' => 'SO'), + '3254' => array('town' => 'Messen', 'canton' => 'SO'), + '3255' => array('town' => 'Rapperswil BE', 'canton' => 'BE'), + '3256' => array('town' => 'Dieterswil', 'canton' => 'BE'), + '3257' => array('town' => 'Grossaffoltern', 'canton' => 'BE'), + '3262' => array('town' => 'Suberg', 'canton' => 'BE'), + '3263' => array('town' => 'Büetigen', 'canton' => 'BE'), + '3264' => array('town' => 'Diessbach b. Büren', 'canton' => 'BE'), + '3266' => array('town' => 'Wiler b. Seedorf', 'canton' => 'BE'), + '3267' => array('town' => 'Seedorf BE', 'canton' => 'BE'), + '3268' => array('town' => 'Lobsigen', 'canton' => 'BE'), + '3270' => array('town' => 'Aarberg', 'canton' => 'BE'), + '3271' => array('town' => 'Radelfingen', 'canton' => 'BE'), + '3272' => array('town' => 'Walperswil', 'canton' => 'BE'), + '3273' => array('town' => 'Kappelen', 'canton' => 'BE'), + '3274' => array('town' => 'Hermrigen', 'canton' => 'BE'), + '3280' => array('town' => 'Murten', 'canton' => 'FR'), + '3282' => array('town' => 'Bargen BE', 'canton' => 'BE'), + '3283' => array('town' => 'Kallnach', 'canton' => 'BE'), + '3284' => array('town' => 'Fräschels', 'canton' => 'FR'), + '3285' => array('town' => 'Galmiz', 'canton' => 'FR'), + '3286' => array('town' => 'Muntelier', 'canton' => 'FR'), + '3292' => array('town' => 'Busswil b. Büren', 'canton' => 'BE'), + '3293' => array('town' => 'Dotzigen', 'canton' => 'BE'), + '3294' => array('town' => 'Büren an der Aare', 'canton' => 'BE'), + '3295' => array('town' => 'Rüti b. Büren', 'canton' => 'BE'), + '3296' => array('town' => 'Arch', 'canton' => 'BE'), + '3297' => array('town' => 'Leuzigen', 'canton' => 'BE'), + '3298' => array('town' => 'Oberwil b. Büren', 'canton' => 'BE'), + '3302' => array('town' => 'Moosseedorf', 'canton' => 'BE'), + '3303' => array('town' => 'Jegenstorf', 'canton' => 'BE'), + '3308' => array('town' => 'Grafenried', 'canton' => 'BE'), + '3312' => array('town' => 'Fraubrunnen', 'canton' => 'BE'), + '3313' => array('town' => 'Büren zum Hof', 'canton' => 'BE'), + '3314' => array('town' => 'Schalunen', 'canton' => 'BE'), + '3315' => array('town' => 'Bätterkinden', 'canton' => 'BE'), + '3321' => array('town' => 'Schönbühl EKZ', 'canton' => 'BE'), + '3322' => array('town' => 'Urtenen-Schönbühl', 'canton' => 'BE'), + '3323' => array('town' => 'Bäriswil BE', 'canton' => 'BE'), + '3324' => array('town' => 'Hindelbank', 'canton' => 'BE'), + '3325' => array('town' => 'Hettiswil', 'canton' => 'BE'), + '3326' => array('town' => 'Krauchthal', 'canton' => 'BE'), + '3305' => array('town' => 'Iffwil', 'canton' => 'BE'), + '3306' => array('town' => 'Etzelkofen', 'canton' => 'BE'), + '3307' => array('town' => 'Brunnenthal', 'canton' => 'SO'), + '3309' => array('town' => 'Kernenried', 'canton' => 'BE'), + '3317' => array('town' => 'Limpach', 'canton' => 'BE'), + '3360' => array('town' => 'Herzogenbuchsee', 'canton' => 'BE'), + '4556' => array('town' => 'Aeschi SO', 'canton' => 'SO'), + '3376' => array('town' => 'Graben', 'canton' => 'BE'), + '3372' => array('town' => 'Wanzwil', 'canton' => 'BE'), + '3373' => array('town' => 'Heimenhausen', 'canton' => 'BE'), + '3374' => array('town' => 'Wangenried', 'canton' => 'BE'), + '3362' => array('town' => 'Niederönz', 'canton' => 'BE'), + '3363' => array('town' => 'Oberönz', 'canton' => 'BE'), + '3365' => array('town' => 'Seeberg', 'canton' => 'BE'), + '3366' => array('town' => 'Bettenhausen', 'canton' => 'BE'), + '3367' => array('town' => 'Thörigen', 'canton' => 'BE'), + '3368' => array('town' => 'Bleienbach', 'canton' => 'BE'), + '3400' => array('town' => 'Burgdorf', 'canton' => 'BE'), + '3401' => array('town' => 'Burgdorf', 'canton' => 'BE'), + '3402' => array('town' => 'Burgdorf', 'canton' => 'BE'), + '3412' => array('town' => 'Heimiswil', 'canton' => 'BE'), + '3413' => array('town' => 'Kaltacker', 'canton' => 'BE'), + '3414' => array('town' => 'Oberburg', 'canton' => 'BE'), + '3415' => array('town' => 'Hasle-Rüegsau', 'canton' => 'BE'), + '3416' => array('town' => 'Affoltern BE', 'canton' => 'BE'), + '3417' => array('town' => 'Rüegsau', 'canton' => 'BE'), + '3418' => array('town' => 'Rüegsbach', 'canton' => 'BE'), + '3419' => array('town' => 'Biembach', 'canton' => 'BE'), + '3421' => array('town' => 'Lyssach', 'canton' => 'BE'), + '3422' => array('town' => 'Kirchberg BE', 'canton' => 'BE'), + '3423' => array('town' => 'Ersigen', 'canton' => 'BE'), + '3424' => array('town' => 'Niederösch', 'canton' => 'BE'), + '3425' => array('town' => 'Koppigen', 'canton' => 'BE'), + '3426' => array('town' => 'Aefligen', 'canton' => 'BE'), + '3427' => array('town' => 'Utzenstorf', 'canton' => 'BE'), + '3428' => array('town' => 'Wiler b.Utzenstorf', 'canton' => 'BE'), + '3432' => array('town' => 'Lützelflüh-Goldb', 'canton' => 'BE'), + '3433' => array('town' => 'Schwanden i. E.', 'canton' => 'BE'), + '3434' => array('town' => 'Obergoldbach', 'canton' => 'BE'), + '3435' => array('town' => 'Ramsei', 'canton' => 'BE'), + '3436' => array('town' => 'Zollbrück', 'canton' => 'BE'), + '3437' => array('town' => 'Rüderswil', 'canton' => 'BE'), + '3438' => array('town' => 'Lauperswil', 'canton' => 'BE'), + '3439' => array('town' => 'Ranflüh', 'canton' => 'BE'), + '3452' => array('town' => 'Grünenmatt', 'canton' => 'BE'), + '3453' => array('town' => 'Heimisbach', 'canton' => 'BE'), + '3454' => array('town' => 'Sumiswald', 'canton' => 'BE'), + '3455' => array('town' => 'Grünen', 'canton' => 'BE'), + '3456' => array('town' => 'Trachselwald', 'canton' => 'BE'), + '3457' => array('town' => 'Wasen im Emmental', 'canton' => 'BE'), + '3462' => array('town' => 'Weier im Emmental', 'canton' => 'BE'), + '3463' => array('town' => 'Häusernmoos', 'canton' => 'BE'), + '3464' => array('town' => 'Schmidigen-Mühlew', 'canton' => 'BE'), + '3465' => array('town' => 'Dürrenroth', 'canton' => 'BE'), + '3472' => array('town' => 'Wynigen', 'canton' => 'BE'), + '3473' => array('town' => 'Alchenstorf', 'canton' => 'BE'), + '3474' => array('town' => 'Rüedisbach', 'canton' => 'BE'), + '3475' => array('town' => 'Riedtwil', 'canton' => 'BE'), + '3476' => array('town' => 'Oschwand', 'canton' => 'BE'), + '3111' => array('town' => 'Tägertschi', 'canton' => 'BE'), + '3503' => array('town' => 'Gysenstein', 'canton' => 'BE'), + '3504' => array('town' => 'Niederhünigen', 'canton' => 'BE'), + '3506' => array('town' => 'Grosshöchstetten', 'canton' => 'BE'), + '3507' => array('town' => 'Biglen', 'canton' => 'BE'), + '3508' => array('town' => 'Arni BE', 'canton' => 'BE'), + '3510' => array('town' => 'Konolfingen', 'canton' => 'BE'), + '3512' => array('town' => 'Walkringen', 'canton' => 'BE'), + '3513' => array('town' => 'Bigenthal', 'canton' => 'BE'), + '3672' => array('town' => 'Oberdiessbach', 'canton' => 'BE'), + '3673' => array('town' => 'Linden', 'canton' => 'BE'), + '3674' => array('town' => 'Bleiken', 'canton' => 'BE'), + '3671' => array('town' => 'Brenzikofen', 'canton' => 'BE'), + '3531' => array('town' => 'Oberthal', 'canton' => 'BE'), + '3532' => array('town' => 'Zäziwil', 'canton' => 'BE'), + '3533' => array('town' => 'Bowil', 'canton' => 'BE'), + '3534' => array('town' => 'Signau', 'canton' => 'BE'), + '3535' => array('town' => 'Schüpbach', 'canton' => 'BE'), + '3536' => array('town' => 'Aeschau', 'canton' => 'BE'), + '3537' => array('town' => 'Eggiwil', 'canton' => 'BE'), + '3538' => array('town' => 'Röthenbach i. E.', 'canton' => 'BE'), + '3543' => array('town' => 'Emmenmatt', 'canton' => 'BE'), + '3550' => array('town' => 'Langnau i. E.', 'canton' => 'BE'), + '3551' => array('town' => 'Oberfrittenbach', 'canton' => 'BE'), + '3552' => array('town' => 'Bärau', 'canton' => 'BE'), + '3553' => array('town' => 'Gohl', 'canton' => 'BE'), + '3555' => array('town' => 'Trubschachen', 'canton' => 'BE'), + '3556' => array('town' => 'Trub', 'canton' => 'BE'), + '3557' => array('town' => 'Fankhaus (Trub)', 'canton' => 'BE'), + '3600' => array('town' => 'Thun', 'canton' => 'BE'), + '3601' => array('town' => 'Thun', 'canton' => 'BE'), + '3602' => array('town' => 'Thun 2', 'canton' => 'BE'), + '3603' => array('town' => 'Thun', 'canton' => 'BE'), + '3604' => array('town' => 'Thun', 'canton' => 'BE'), + '3605' => array('town' => 'Thun', 'canton' => 'BE'), + '3607' => array('town' => 'Thun', 'canton' => 'BE'), + '3608' => array('town' => 'Thun', 'canton' => 'BE'), + '3617' => array('town' => 'Fahrni b. Thun', 'canton' => 'BE'), + '3618' => array('town' => 'Süderen', 'canton' => 'BE'), + '3619' => array('town' => 'Eriz', 'canton' => 'BE'), + '3622' => array('town' => 'Homberg b. Thun', 'canton' => 'BE'), + '3635' => array('town' => 'Uebeschi', 'canton' => 'BE'), + '3631' => array('town' => 'Höfen b. Thun', 'canton' => 'BE'), + '3636' => array('town' => 'Längenbühl', 'canton' => 'BE'), + '3612' => array('town' => 'Steffisburg', 'canton' => 'BE'), + '3613' => array('town' => 'Steffisburg', 'canton' => 'BE'), + '3614' => array('town' => 'Unterlangenegg', 'canton' => 'BE'), + '3615' => array('town' => 'Heimenschwand', 'canton' => 'BE'), + '3616' => array('town' => 'Schwarzenegg', 'canton' => 'BE'), + '3623' => array('town' => 'Teuffenthal BE', 'canton' => 'BE'), + '3624' => array('town' => 'Goldiwil (Thun)', 'canton' => 'BE'), + '3625' => array('town' => 'Heiligenschwendi', 'canton' => 'BE'), + '3626' => array('town' => 'Hünibach', 'canton' => 'BE'), + '3627' => array('town' => 'Heimberg', 'canton' => 'BE'), + '3633' => array('town' => 'Amsoldingen', 'canton' => 'BE'), + '3634' => array('town' => 'Thierachern', 'canton' => 'BE'), + '3638' => array('town' => 'Blumenstein', 'canton' => 'BE'), + '3645' => array('town' => 'Gwatt (Thun)', 'canton' => 'BE'), + '3646' => array('town' => 'Einigen', 'canton' => 'BE'), + '3647' => array('town' => 'Reutigen', 'canton' => 'BE'), + '3652' => array('town' => 'Hilterfingen', 'canton' => 'BE'), + '3653' => array('town' => 'Oberhofen Thun\'see', 'canton' => 'BE'), + '3654' => array('town' => 'Gunten', 'canton' => 'BE'), + '3655' => array('town' => 'Sigriswil', 'canton' => 'BE'), + '3656' => array('town' => 'Tschingel', 'canton' => 'BE'), + '3657' => array('town' => 'Schwanden Sigrisw', 'canton' => 'BE'), + '3658' => array('town' => 'Merligen', 'canton' => 'BE'), + '3700' => array('town' => 'Spiez', 'canton' => 'BE'), + '3702' => array('town' => 'Hondrich', 'canton' => 'BE'), + '3703' => array('town' => 'Aeschi b. Spiez', 'canton' => 'BE'), + '3704' => array('town' => 'Krattigen', 'canton' => 'BE'), + '3705' => array('town' => 'Faulensee', 'canton' => 'BE'), + '3706' => array('town' => 'Leissigen', 'canton' => 'BE'), + '3707' => array('town' => 'Därligen', 'canton' => 'BE'), + '3711' => array('town' => 'Emdthal', 'canton' => 'BE'), + '3713' => array('town' => 'Reichenbach i. K.', 'canton' => 'BE'), + '3714' => array('town' => 'Frutigen', 'canton' => 'BE'), + '3715' => array('town' => 'Adelboden', 'canton' => 'BE'), + '3716' => array('town' => 'Kandergrund', 'canton' => 'BE'), + '3717' => array('town' => 'Blausee-Mitholz', 'canton' => 'BE'), + '3718' => array('town' => 'Kandersteg', 'canton' => 'BE'), + '3722' => array('town' => 'Scharnachtal', 'canton' => 'BE'), + '3723' => array('town' => 'Kiental', 'canton' => 'BE'), + '3724' => array('town' => 'Ried (Frutigen)', 'canton' => 'BE'), + '3725' => array('town' => 'Achseten', 'canton' => 'BE'), + '3752' => array('town' => 'Wimmis', 'canton' => 'BE'), + '3753' => array('town' => 'Oey', 'canton' => 'BE'), + '3754' => array('town' => 'Diemtigen', 'canton' => 'BE'), + '3755' => array('town' => 'Horboden', 'canton' => 'BE'), + '3756' => array('town' => 'Zwischenflüh', 'canton' => 'BE'), + '3757' => array('town' => 'Schwenden', 'canton' => 'BE'), + '3758' => array('town' => 'Latterbach', 'canton' => 'BE'), + '3762' => array('town' => 'Erlenbach i. S.', 'canton' => 'BE'), + '3763' => array('town' => 'Därstetten', 'canton' => 'BE'), + '3764' => array('town' => 'Weissenburg', 'canton' => 'BE'), + '3765' => array('town' => 'Oberwil i. S.', 'canton' => 'BE'), + '3766' => array('town' => 'Boltigen', 'canton' => 'BE'), + '3770' => array('town' => 'Zweisimmen', 'canton' => 'BE'), + '3771' => array('town' => 'Blankenburg', 'canton' => 'BE'), + '3772' => array('town' => 'St. Stephan', 'canton' => 'BE'), + '3773' => array('town' => 'Matten(St.Stephan)', 'canton' => 'BE'), + '3775' => array('town' => 'Lenk im Simmental', 'canton' => 'BE'), + '3776' => array('town' => 'Oeschseite', 'canton' => 'BE'), + '3777' => array('town' => 'Saanenmöser', 'canton' => 'BE'), + '3778' => array('town' => 'Schönried', 'canton' => 'BE'), + '3780' => array('town' => 'Gstaad', 'canton' => 'BE'), + '3781' => array('town' => 'Turbach', 'canton' => 'BE'), + '3782' => array('town' => 'Lauenen b. Gstaad', 'canton' => 'BE'), + '3783' => array('town' => 'Grund b. Gstaad', 'canton' => 'BE'), + '3784' => array('town' => 'Feutersoey', 'canton' => 'BE'), + '3785' => array('town' => 'Gsteig b. Gstaad', 'canton' => 'BE'), + '3792' => array('town' => 'Saanen', 'canton' => 'BE'), + '3800' => array('town' => 'Interlaken', 'canton' => 'BE'), + '3801' => array('town' => 'Jungfraujoch', 'canton' => 'VS'), + '3803' => array('town' => 'Beatenberg', 'canton' => 'BE'), + '3804' => array('town' => 'Habkern', 'canton' => 'BE'), + '3805' => array('town' => 'Goldswil', 'canton' => 'BE'), + '3806' => array('town' => 'Bönigen', 'canton' => 'BE'), + '3807' => array('town' => 'Iseltwald', 'canton' => 'BE'), + '3812' => array('town' => 'Wilderswil', 'canton' => 'BE'), + '3813' => array('town' => 'Saxeten', 'canton' => 'BE'), + '3814' => array('town' => 'Gsteigwiler', 'canton' => 'BE'), + '3815' => array('town' => 'Zweilütschinen', 'canton' => 'BE'), + '3816' => array('town' => 'Lütschental', 'canton' => 'BE'), + '3818' => array('town' => 'Grindelwald', 'canton' => 'BE'), + '3822' => array('town' => 'Lauterbrunnen', 'canton' => 'BE'), + '3823' => array('town' => 'Wengen', 'canton' => 'BE'), + '3824' => array('town' => 'Stechelberg', 'canton' => 'BE'), + '3825' => array('town' => 'Mürren', 'canton' => 'BE'), + '3826' => array('town' => 'Gimmelwald', 'canton' => 'BE'), + '3852' => array('town' => 'Ringgenberg BE', 'canton' => 'BE'), + '3853' => array('town' => 'Niederried Interl', 'canton' => 'BE'), + '3854' => array('town' => 'Oberried Brienz', 'canton' => 'BE'), + '3855' => array('town' => 'Brienz BE', 'canton' => 'BE'), + '3856' => array('town' => 'Brienzwiler', 'canton' => 'BE'), + '3857' => array('town' => 'Unterbach BE', 'canton' => 'BE'), + '3858' => array('town' => 'Hofstetten BE', 'canton' => 'BE'), + '3860' => array('town' => 'Meiringen', 'canton' => 'BE'), + '3862' => array('town' => 'Innertkirchen', 'canton' => 'BE'), + '3863' => array('town' => 'Gadmen', 'canton' => 'BE'), + '3864' => array('town' => 'Guttannen', 'canton' => 'BE'), + '3900' => array('town' => 'Brig', 'canton' => 'VS'), + '3949' => array('town' => 'Hohtenn', 'canton' => 'VS'), + '3903' => array('town' => 'Birgisch', 'canton' => 'VS'), + '3914' => array('town' => 'Blatten b. Naters', 'canton' => 'VS'), + '3913' => array('town' => 'Rosswald', 'canton' => 'VS'), + '3911' => array('town' => 'Ried-Brig', 'canton' => 'VS'), + '3912' => array('town' => 'Termen', 'canton' => 'VS'), + '3901' => array('town' => 'Rothwald', 'canton' => 'VS'), + '3907' => array('town' => 'Simplon Hospiz', 'canton' => 'VS'), + '3922' => array('town' => 'Eisten', 'canton' => 'VS'), + '3908' => array('town' => 'Saas-Balen', 'canton' => 'VS'), + '3910' => array('town' => 'Saas-Grund', 'canton' => 'VS'), + '3902' => array('town' => 'Glis', 'canton' => 'VS'), + '3917' => array('town' => 'Goppenstein', 'canton' => 'VS'), + '3916' => array('town' => 'Ferden', 'canton' => 'VS'), + '3918' => array('town' => 'Wiler (Lötschen)', 'canton' => 'VS'), + '3919' => array('town' => 'Blatten(Lötschen)', 'canton' => 'VS'), + '3904' => array('town' => 'Naters', 'canton' => 'VS'), + '3905' => array('town' => 'Saas-Almagell', 'canton' => 'VS'), + '3906' => array('town' => 'Saas-Fee', 'canton' => 'VS'), + '3920' => array('town' => 'Zermatt', 'canton' => 'VS'), + '3923' => array('town' => 'Törbel', 'canton' => 'VS'), + '3926' => array('town' => 'Embd', 'canton' => 'VS'), + '3927' => array('town' => 'Herbriggen', 'canton' => 'VS'), + '3928' => array('town' => 'Randa', 'canton' => 'VS'), + '3929' => array('town' => 'Täsch', 'canton' => 'VS'), + '3924' => array('town' => 'St. Niklaus VS', 'canton' => 'VS'), + '3925' => array('town' => 'Grächen', 'canton' => 'VS'), + '3930' => array('town' => 'Visp', 'canton' => 'VS'), + '3942' => array('town' => 'St. German', 'canton' => 'VS'), + '3933' => array('town' => 'Staldenried', 'canton' => 'VS'), + '3937' => array('town' => 'Baltschieder', 'canton' => 'VS'), + '3938' => array('town' => 'Ausserberg', 'canton' => 'VS'), + '3939' => array('town' => 'Eggerberg', 'canton' => 'VS'), + '3931' => array('town' => 'Lalden', 'canton' => 'VS'), + '3932' => array('town' => 'Visperterminen', 'canton' => 'VS'), + '3934' => array('town' => 'Zeneggen', 'canton' => 'VS'), + '3935' => array('town' => 'Bürchen', 'canton' => 'VS'), + '3943' => array('town' => 'Eischoll', 'canton' => 'VS'), + '3944' => array('town' => 'Unterbäch VS', 'canton' => 'VS'), + '3947' => array('town' => 'Ergisch', 'canton' => 'VS'), + '3948' => array('town' => 'Unterems', 'canton' => 'VS'), + '3946' => array('town' => 'Gruben', 'canton' => 'VS'), + '3951' => array('town' => 'Agarn', 'canton' => 'VS'), + '3955' => array('town' => 'Albinen', 'canton' => 'VS'), + '3956' => array('town' => 'Guttet-Feschel', 'canton' => 'VS'), + '3957' => array('town' => 'Erschmatt', 'canton' => 'VS'), + '3953' => array('town' => 'Varen', 'canton' => 'VS'), + '3976' => array('town' => 'Noës', 'canton' => 'VS'), + '3978' => array('town' => 'Flanthey', 'canton' => 'VS'), + '1978' => array('town' => 'Lens', 'canton' => 'VS'), + '1977' => array('town' => 'Icogne', 'canton' => 'VS'), + '3979' => array('town' => 'Grône', 'canton' => 'VS'), + '3945' => array('town' => 'Gampel', 'canton' => 'VS'), + '3952' => array('town' => 'Susten', 'canton' => 'VS'), + '3954' => array('town' => 'Leukerbad', 'canton' => 'VS'), + '3970' => array('town' => 'Salgesch', 'canton' => 'VS'), + '3977' => array('town' => 'Granges VS', 'canton' => 'VS'), + '1958' => array('town' => 'St-Léonard', 'canton' => 'VS'), + '3960' => array('town' => 'Sierre', 'canton' => 'VS'), + '3971' => array('town' => 'Chermignon', 'canton' => 'VS'), + '3972' => array('town' => 'Miège', 'canton' => 'VS'), + '3973' => array('town' => 'Venthône', 'canton' => 'VS'), + '3974' => array('town' => 'Mollens VS', 'canton' => 'VS'), + '3975' => array('town' => 'Randogne', 'canton' => 'VS'), + '3961' => array('town' => 'Vissoie', 'canton' => 'VS'), + '3967' => array('town' => 'Vercorin', 'canton' => 'VS'), + '3963' => array('town' => 'Montana', 'canton' => 'VS'), + '3965' => array('town' => 'Chippis', 'canton' => 'VS'), + '3966' => array('town' => 'Chalais', 'canton' => 'VS'), + '3968' => array('town' => 'Veyras', 'canton' => 'VS'), + '3982' => array('town' => 'Bitsch', 'canton' => 'VS'), + '3993' => array('town' => 'Grengiols', 'canton' => 'VS'), + '3994' => array('town' => 'Lax', 'canton' => 'VS'), + '3997' => array('town' => 'Bellwald', 'canton' => 'VS'), + '3989' => array('town' => 'Niederwald', 'canton' => 'VS'), + '3998' => array('town' => 'Gluringen', 'canton' => 'VS'), + '3985' => array('town' => 'Geschinen', 'canton' => 'VS'), + '3988' => array('town' => 'Obergesteln', 'canton' => 'VS'), + '3999' => array('town' => 'Oberwald', 'canton' => 'VS'), + '3986' => array('town' => 'Ried-Mörel', 'canton' => 'VS'), + '3987' => array('town' => 'Riederalp', 'canton' => 'VS'), + '3991' => array('town' => 'Betten', 'canton' => 'VS'), + '3992' => array('town' => 'Bettmeralp', 'canton' => 'VS'), + '3995' => array('town' => 'Ernen', 'canton' => 'VS'), + '3996' => array('town' => 'Binn', 'canton' => 'VS'), + '3983' => array('town' => 'Mörel', 'canton' => 'VS'), + '3984' => array('town' => 'Fiesch', 'canton' => 'VS'), + '4000' => array('town' => 'Basel', 'canton' => 'BS'), + '4001' => array('town' => 'Basel', 'canton' => 'BS'), + '4002' => array('town' => 'Basel', 'canton' => 'BS'), + '4003' => array('town' => 'Basel', 'canton' => 'BS'), + '4004' => array('town' => 'Basel', 'canton' => 'BS'), + '4005' => array('town' => 'Basel', 'canton' => 'BS'), + '4007' => array('town' => 'Basel', 'canton' => 'BS'), + '4008' => array('town' => 'Basel', 'canton' => 'BS'), + '4009' => array('town' => 'Basel', 'canton' => 'BS'), + '4010' => array('town' => 'Basel', 'canton' => 'BS'), + '4011' => array('town' => 'Basel', 'canton' => 'BS'), + '4012' => array('town' => 'Basel', 'canton' => 'BS'), + '4013' => array('town' => 'Basel', 'canton' => 'BS'), + '4015' => array('town' => 'Basel', 'canton' => 'BS'), + '4016' => array('town' => 'Basel', 'canton' => 'BS'), + '4017' => array('town' => 'Basel', 'canton' => 'BS'), + '4018' => array('town' => 'Basel', 'canton' => 'BS'), + '4019' => array('town' => 'Basel', 'canton' => 'BS'), + '4020' => array('town' => 'Basel', 'canton' => 'BS'), + '4023' => array('town' => 'Basel', 'canton' => 'BL'), + '4024' => array('town' => 'Basel', 'canton' => 'BS'), + '4025' => array('town' => 'Basel', 'canton' => 'BS'), + '4030' => array('town' => 'Basel', 'canton' => 'BS'), + '4031' => array('town' => 'Basel UniSpital', 'canton' => 'BS'), + '4032' => array('town' => 'Basel', 'canton' => 'BS'), + '4051' => array('town' => 'Basel', 'canton' => 'BS'), + '4052' => array('town' => 'Basel', 'canton' => 'BS'), + '4053' => array('town' => 'Basel', 'canton' => 'BS'), + '4054' => array('town' => 'Basel', 'canton' => 'BS'), + '4055' => array('town' => 'Basel', 'canton' => 'BS'), + '4056' => array('town' => 'Basel', 'canton' => 'BS'), + '4057' => array('town' => 'Basel', 'canton' => 'BS'), + '4058' => array('town' => 'Basel', 'canton' => 'BS'), + '4059' => array('town' => 'Basel', 'canton' => 'BS'), + '4091' => array('town' => 'Basel', 'canton' => 'BS'), + '4101' => array('town' => 'Bruderholz', 'canton' => 'BL'), + '4102' => array('town' => 'Binningen', 'canton' => 'BL'), + '4103' => array('town' => 'Bottmingen', 'canton' => 'BL'), + '4104' => array('town' => 'Oberwil BL', 'canton' => 'BL'), + '4105' => array('town' => 'Biel-Benken BL', 'canton' => 'BL'), + '4106' => array('town' => 'Therwil', 'canton' => 'BL'), + '4107' => array('town' => 'Ettingen', 'canton' => 'BL'), + '4108' => array('town' => 'Witterswil', 'canton' => 'SO'), + '4112' => array('town' => 'Bättwil-Flüh', 'canton' => 'SO'), + '4114' => array('town' => 'Hofstetten SO', 'canton' => 'SO'), + '4115' => array('town' => 'Mariastein', 'canton' => 'SO'), + '4116' => array('town' => 'Metzerlen', 'canton' => 'SO'), + '4117' => array('town' => 'Burg im Leimental', 'canton' => 'BL'), + '4118' => array('town' => 'Rodersdorf', 'canton' => 'SO'), + '4123' => array('town' => 'Allschwil', 'canton' => 'BL'), + '4124' => array('town' => 'Schönenbuch', 'canton' => 'BL'), + '4125' => array('town' => 'Riehen', 'canton' => 'BS'), + '4126' => array('town' => 'Bettingen', 'canton' => 'BS'), + '4127' => array('town' => 'Birsfelden', 'canton' => 'BL'), + '4132' => array('town' => 'Muttenz', 'canton' => 'BL'), + '4133' => array('town' => 'Pratteln', 'canton' => 'BL'), + '4142' => array('town' => 'Münchenstein', 'canton' => 'BL'), + '4143' => array('town' => 'Dornach', 'canton' => 'SO'), + '4144' => array('town' => 'Arlesheim', 'canton' => 'BL'), + '4145' => array('town' => 'Gempen', 'canton' => 'SO'), + '4146' => array('town' => 'Hochwald', 'canton' => 'SO'), + '4147' => array('town' => 'Aesch BL', 'canton' => 'BL'), + '4148' => array('town' => 'Pfeffingen', 'canton' => 'BL'), + '4153' => array('town' => 'Reinach BL', 'canton' => 'BL'), + '4202' => array('town' => 'Duggingen', 'canton' => 'BL'), + '4203' => array('town' => 'Grellingen', 'canton' => 'BL'), + '4206' => array('town' => 'Seewen SO', 'canton' => 'SO'), + '4207' => array('town' => 'Bretzwil', 'canton' => 'BL'), + '4208' => array('town' => 'Nunningen', 'canton' => 'SO'), + '4222' => array('town' => 'Zwingen', 'canton' => 'BL'), + '4225' => array('town' => 'Brislach', 'canton' => 'BL'), + '4226' => array('town' => 'Breitenbach', 'canton' => 'SO'), + '4227' => array('town' => 'Büsserach', 'canton' => 'SO'), + '4228' => array('town' => 'Erschwil', 'canton' => 'SO'), + '4242' => array('town' => 'Laufen', 'canton' => 'BL'), + '4243' => array('town' => 'Dittingen', 'canton' => 'BL'), + '4244' => array('town' => 'Röschenz', 'canton' => 'BL'), + '4245' => array('town' => 'Kleinlützel', 'canton' => 'SO'), + '4204' => array('town' => 'Himmelried', 'canton' => 'SO'), + '4223' => array('town' => 'Blauen', 'canton' => 'BL'), + '4224' => array('town' => 'Nenzlingen', 'canton' => 'BL'), + '4229' => array('town' => 'Beinwil SO', 'canton' => 'SO'), + '4232' => array('town' => 'Fehren', 'canton' => 'SO'), + '4233' => array('town' => 'Meltingen', 'canton' => 'SO'), + '4234' => array('town' => 'Zullwil', 'canton' => 'SO'), + '4246' => array('town' => 'Wahlen b. Laufen', 'canton' => 'BL'), + '4247' => array('town' => 'Grindel', 'canton' => 'SO'), + '4252' => array('town' => 'Bärschwil', 'canton' => 'SO'), + '4253' => array('town' => 'Liesberg', 'canton' => 'BL'), + '4254' => array('town' => 'Liesberg Dorf', 'canton' => 'BL'), + '4302' => array('town' => 'Augst BL', 'canton' => 'BL'), + '4303' => array('town' => 'Kaiseraugst', 'canton' => 'AG'), + '4304' => array('town' => 'Giebenach', 'canton' => 'BL'), + '4305' => array('town' => 'Olsberg', 'canton' => 'AG'), + '4310' => array('town' => 'Rheinfelden', 'canton' => 'AG'), + '4312' => array('town' => 'Magden', 'canton' => 'AG'), + '4313' => array('town' => 'Möhlin', 'canton' => 'AG'), + '4314' => array('town' => 'Zeiningen', 'canton' => 'AG'), + '4315' => array('town' => 'Zuzgen', 'canton' => 'AG'), + '4316' => array('town' => 'Hellikon', 'canton' => 'AG'), + '4317' => array('town' => 'Wegenstetten', 'canton' => 'AG'), + '4322' => array('town' => 'Mumpf', 'canton' => 'AG'), + '4323' => array('town' => 'Wallbach', 'canton' => 'AG'), + '4324' => array('town' => 'Obermumpf', 'canton' => 'AG'), + '4325' => array('town' => 'Schupfart', 'canton' => 'AG'), + '4332' => array('town' => 'Stein AG', 'canton' => 'AG'), + '4333' => array('town' => 'Münchwilen AG', 'canton' => 'AG'), + '4334' => array('town' => 'Sisseln AG', 'canton' => 'AG'), + '5080' => array('town' => 'Laufenburg', 'canton' => 'AG'), + '5082' => array('town' => 'Kaisten', 'canton' => 'AG'), + '5083' => array('town' => 'Ittenthal', 'canton' => 'AG'), + '5084' => array('town' => 'Rheinsulz', 'canton' => 'AG'), + '5085' => array('town' => 'Sulz AG', 'canton' => 'AG'), + '5275' => array('town' => 'Etzgen', 'canton' => 'AG'), + '5274' => array('town' => 'Mettau', 'canton' => 'AG'), + '5273' => array('town' => 'Oberhofen AG', 'canton' => 'AG'), + '5272' => array('town' => 'Gansingen', 'canton' => 'AG'), + '5276' => array('town' => 'Wil AG', 'canton' => 'AG'), + '5277' => array('town' => 'Hottwil', 'canton' => 'AG'), + '5326' => array('town' => 'Schwaderloch', 'canton' => 'AG'), + '5325' => array('town' => 'Leibstadt', 'canton' => 'AG'), + '5324' => array('town' => 'Full-Reuenthal', 'canton' => 'AG'), + '4402' => array('town' => 'Frenkendorf', 'canton' => 'BL'), + '4410' => array('town' => 'Liestal', 'canton' => 'BL'), + '4411' => array('town' => 'Seltisberg', 'canton' => 'BL'), + '4412' => array('town' => 'Nuglar', 'canton' => 'SO'), + '4413' => array('town' => 'Büren SO', 'canton' => 'SO'), + '4414' => array('town' => 'Füllinsdorf', 'canton' => 'BL'), + '4415' => array('town' => 'Lausen', 'canton' => 'BL'), + '4416' => array('town' => 'Bubendorf', 'canton' => 'BL'), + '4417' => array('town' => 'Ziefen', 'canton' => 'BL'), + '4418' => array('town' => 'Reigoldswil', 'canton' => 'BL'), + '4419' => array('town' => 'Lupsingen', 'canton' => 'BL'), + '4421' => array('town' => 'St. Pantaleon', 'canton' => 'SO'), + '4422' => array('town' => 'Arisdorf', 'canton' => 'BL'), + '4423' => array('town' => 'Hersberg', 'canton' => 'BL'), + '4424' => array('town' => 'Arboldswil', 'canton' => 'BL'), + '4425' => array('town' => 'Titterten', 'canton' => 'BL'), + '4426' => array('town' => 'Lauwil', 'canton' => 'BL'), + '4431' => array('town' => 'Bennwil', 'canton' => 'BL'), + '4432' => array('town' => 'Lampenberg', 'canton' => 'BL'), + '4433' => array('town' => 'Ramlinsburg', 'canton' => 'BL'), + '4434' => array('town' => 'Hölstein', 'canton' => 'BL'), + '4435' => array('town' => 'Niederdorf', 'canton' => 'BL'), + '4436' => array('town' => 'Oberdorf BL', 'canton' => 'BL'), + '4437' => array('town' => 'Waldenburg', 'canton' => 'BL'), + '4438' => array('town' => 'Langenbruck', 'canton' => 'BL'), + '4441' => array('town' => 'Thürnen', 'canton' => 'BL'), + '4442' => array('town' => 'Diepflingen', 'canton' => 'BL'), + '4443' => array('town' => 'Wittinsburg', 'canton' => 'BL'), + '4444' => array('town' => 'Rümlingen', 'canton' => 'BL'), + '4445' => array('town' => 'Häfelfingen', 'canton' => 'BL'), + '4446' => array('town' => 'Buckten', 'canton' => 'BL'), + '4447' => array('town' => 'Känerkinden', 'canton' => 'BL'), + '4448' => array('town' => 'Läufelfingen', 'canton' => 'BL'), + '4450' => array('town' => 'Sissach', 'canton' => 'BL'), + '4451' => array('town' => 'Wintersingen', 'canton' => 'BL'), + '4452' => array('town' => 'Itingen', 'canton' => 'BL'), + '4453' => array('town' => 'Nusshof', 'canton' => 'BL'), + '4455' => array('town' => 'Zunzgen', 'canton' => 'BL'), + '4456' => array('town' => 'Tenniken', 'canton' => 'BL'), + '4457' => array('town' => 'Diegten', 'canton' => 'BL'), + '4458' => array('town' => 'Eptingen', 'canton' => 'BL'), + '4460' => array('town' => 'Gelterkinden', 'canton' => 'BL'), + '4461' => array('town' => 'Böckten', 'canton' => 'BL'), + '4465' => array('town' => 'Hemmiken', 'canton' => 'BL'), + '4469' => array('town' => 'Anwil', 'canton' => 'BL'), + '4462' => array('town' => 'Rickenbach BL', 'canton' => 'BL'), + '4463' => array('town' => 'Buus', 'canton' => 'BL'), + '4464' => array('town' => 'Maisprach', 'canton' => 'BL'), + '4466' => array('town' => 'Ormalingen', 'canton' => 'BL'), + '4467' => array('town' => 'Rothenfluh', 'canton' => 'BL'), + '4468' => array('town' => 'Kienberg', 'canton' => 'SO'), + '4492' => array('town' => 'Tecknau', 'canton' => 'BL'), + '4493' => array('town' => 'Wenslingen', 'canton' => 'BL'), + '4494' => array('town' => 'Oltingen', 'canton' => 'BL'), + '4495' => array('town' => 'Zeglingen', 'canton' => 'BL'), + '4496' => array('town' => 'Kilchberg BL', 'canton' => 'BL'), + '4497' => array('town' => 'Rünenberg', 'canton' => 'BL'), + '4500' => array('town' => 'Solothurn', 'canton' => 'SO'), + '4501' => array('town' => 'Solothurn', 'canton' => 'SO'), + '4502' => array('town' => 'Solothurn', 'canton' => 'SO'), + '4503' => array('town' => 'Solothurn', 'canton' => 'SO'), + '4515' => array('town' => 'Weissenstein', 'canton' => 'SO'), + '4525' => array('town' => 'Balm b. Günsberg', 'canton' => 'SO'), + '4523' => array('town' => 'Niederwil SO', 'canton' => 'SO'), + '4535' => array('town' => 'Hubersdorf', 'canton' => 'SO'), + '4539' => array('town' => 'Rumisberg', 'canton' => 'BE'), + '4557' => array('town' => 'Horriwil', 'canton' => 'SO'), + '4558' => array('town' => 'Hersiwil', 'canton' => 'SO'), + '4512' => array('town' => 'Bellach', 'canton' => 'SO'), + '4513' => array('town' => 'Langendorf', 'canton' => 'SO'), + '4514' => array('town' => 'Lommiswil', 'canton' => 'SO'), + '4522' => array('town' => 'Rüttenen', 'canton' => 'SO'), + '4524' => array('town' => 'Günsberg', 'canton' => 'SO'), + '4528' => array('town' => 'Zuchwil', 'canton' => 'SO'), + '4532' => array('town' => 'Feldbrunnen', 'canton' => 'SO'), + '4533' => array('town' => 'Riedholz', 'canton' => 'SO'), + '4534' => array('town' => 'Flumenthal', 'canton' => 'SO'), + '4536' => array('town' => 'Attiswil', 'canton' => 'BE'), + '4537' => array('town' => 'Wiedlisbach', 'canton' => 'BE'), + '4538' => array('town' => 'Oberbipp', 'canton' => 'BE'), + '4552' => array('town' => 'Derendingen', 'canton' => 'SO'), + '4553' => array('town' => 'Subingen', 'canton' => 'SO'), + '4554' => array('town' => 'Etziken', 'canton' => 'SO'), + '3375' => array('town' => 'Inkwil', 'canton' => 'BE'), + '4562' => array('town' => 'Biberist', 'canton' => 'SO'), + '4563' => array('town' => 'Gerlafingen', 'canton' => 'SO'), + '4564' => array('town' => 'Obergerlafingen', 'canton' => 'SO'), + '4565' => array('town' => 'Recherswil', 'canton' => 'SO'), + '4566' => array('town' => 'Kriegstetten', 'canton' => 'SO'), + '4581' => array('town' => 'Küttigkofen', 'canton' => 'SO'), + '4586' => array('town' => 'Kyburg-Buchegg', 'canton' => 'SO'), + '4582' => array('town' => 'Brügglen', 'canton' => 'SO'), + '4583' => array('town' => 'Mühledorf SO', 'canton' => 'SO'), + '4579' => array('town' => 'Gossliwil', 'canton' => 'SO'), + '4578' => array('town' => 'Bibern SO', 'canton' => 'SO'), + '4571' => array('town' => 'Lüterkofen-Ichert', 'canton' => 'SO'), + '4576' => array('town' => 'Tscheppach', 'canton' => 'SO'), + '4577' => array('town' => 'Hessigkofen', 'canton' => 'SO'), + '4585' => array('town' => 'Biezwil', 'canton' => 'SO'), + '4587' => array('town' => 'Aetingen', 'canton' => 'SO'), + '4588' => array('town' => 'Unterramsern', 'canton' => 'SO'), + '4574' => array('town' => 'Nennigkofen', 'canton' => 'SO'), + '4600' => array('town' => 'Olten', 'canton' => 'SO'), + '4601' => array('town' => 'Olten', 'canton' => 'SO'), + '4603' => array('town' => 'Olten', 'canton' => 'SO'), + '4612' => array('town' => 'Wangen b. Olten', 'canton' => 'SO'), + '4613' => array('town' => 'Rickenbach SO', 'canton' => 'SO'), + '4614' => array('town' => 'Hägendorf', 'canton' => 'SO'), + '4616' => array('town' => 'Kappel SO', 'canton' => 'SO'), + '4617' => array('town' => 'Gunzgen', 'canton' => 'SO'), + '4618' => array('town' => 'Boningen', 'canton' => 'SO'), + '4622' => array('town' => 'Egerkingen', 'canton' => 'SO'), + '4623' => array('town' => 'Neuendorf', 'canton' => 'SO'), + '4624' => array('town' => 'Härkingen', 'canton' => 'SO'), + '4625' => array('town' => 'Oberbuchsiten', 'canton' => 'SO'), + '4626' => array('town' => 'Niederbuchsiten', 'canton' => 'SO'), + '4632' => array('town' => 'Trimbach', 'canton' => 'SO'), + '4652' => array('town' => 'Winznau', 'canton' => 'SO'), + '4653' => array('town' => 'Obergösgen', 'canton' => 'SO'), + '4654' => array('town' => 'Lostorf', 'canton' => 'SO'), + '4655' => array('town' => 'Stüsslingen', 'canton' => 'SO'), + '4656' => array('town' => 'Starrkirch-Wil', 'canton' => 'SO'), + '4657' => array('town' => 'Dulliken', 'canton' => 'SO'), + '4658' => array('town' => 'Däniken SO', 'canton' => 'SO'), + '5010' => array('town' => 'Däniken PZ', 'canton' => 'SO'), + '4663' => array('town' => 'Aarburg', 'canton' => 'AG'), + '4665' => array('town' => 'Oftringen', 'canton' => 'AG'), + '4615' => array('town' => 'Allerheiligenberg', 'canton' => 'SO'), + '4633' => array('town' => 'Hauenstein', 'canton' => 'SO'), + '4634' => array('town' => 'Wisen SO', 'canton' => 'SO'), + '4702' => array('town' => 'Oensingen', 'canton' => 'SO'), + '4703' => array('town' => 'Kestenholz', 'canton' => 'SO'), + '4704' => array('town' => 'Niederbipp', 'canton' => 'BE'), + '3380' => array('town' => 'Wangen an der Aare', 'canton' => 'BE'), + '3377' => array('town' => 'Walliswil b.Wangen', 'canton' => 'BE'), + '4543' => array('town' => 'Deitingen', 'canton' => 'SO'), + '4542' => array('town' => 'Luterbach', 'canton' => 'SO'), + '4710' => array('town' => 'Balsthal', 'canton' => 'SO'), + '4714' => array('town' => 'Aedermannsdorf', 'canton' => 'SO'), + '4715' => array('town' => 'Herbetswil', 'canton' => 'SO'), + '4719' => array('town' => 'Ramiswil', 'canton' => 'SO'), + '4712' => array('town' => 'Laupersdorf', 'canton' => 'SO'), + '4713' => array('town' => 'Matzendorf', 'canton' => 'SO'), + '4716' => array('town' => 'Welschenrohr', 'canton' => 'SO'), + '4717' => array('town' => 'Mümliswil', 'canton' => 'SO'), + '4718' => array('town' => 'Holderbank SO', 'canton' => 'SO'), + '4800' => array('town' => 'Zofingen', 'canton' => 'AG'), + '4801' => array('town' => 'Zofingen', 'canton' => 'AG'), + '4802' => array('town' => 'Strengelbach', 'canton' => 'AG'), + '4803' => array('town' => 'Vordemwald', 'canton' => 'AG'), + '4805' => array('town' => 'Brittnau', 'canton' => 'AG'), + '4806' => array('town' => 'Wikon', 'canton' => 'LU'), + '4812' => array('town' => 'Mühlethal', 'canton' => 'AG'), + '4813' => array('town' => 'Uerkheim', 'canton' => 'AG'), + '4814' => array('town' => 'Bottenwil', 'canton' => 'AG'), + '4852' => array('town' => 'Rothrist', 'canton' => 'AG'), + '4853' => array('town' => 'Murgenthal', 'canton' => 'AG'), + '4629' => array('town' => 'Fulenbach', 'canton' => 'SO'), + '4628' => array('town' => 'Wolfwil', 'canton' => 'SO'), + '4856' => array('town' => 'Glashütten', 'canton' => 'AG'), + '4900' => array('town' => 'Langenthal', 'canton' => 'BE'), + '4901' => array('town' => 'Langenthal', 'canton' => 'BE'), + '4902' => array('town' => 'Langenthal', 'canton' => 'BE'), + '4911' => array('town' => 'Schwarzhäusern', 'canton' => 'BE'), + '4912' => array('town' => 'Aarwangen', 'canton' => 'BE'), + '4913' => array('town' => 'Bannwil', 'canton' => 'BE'), + '4914' => array('town' => 'Roggwil BE', 'canton' => 'BE'), + '4915' => array('town' => 'St. Urban', 'canton' => 'LU'), + '4916' => array('town' => 'Untersteckholz', 'canton' => 'BE'), + '4917' => array('town' => 'Melchnau', 'canton' => 'BE'), + '4955' => array('town' => 'Gondiswil', 'canton' => 'BE'), + '4919' => array('town' => 'Reisiswil', 'canton' => 'BE'), + '4922' => array('town' => 'Bützberg', 'canton' => 'BE'), + '4923' => array('town' => 'Wynau', 'canton' => 'BE'), + '4924' => array('town' => 'Obersteckholz', 'canton' => 'BE'), + '4932' => array('town' => 'Lotzwil', 'canton' => 'BE'), + '4933' => array('town' => 'Rütschelen', 'canton' => 'BE'), + '4934' => array('town' => 'Madiswil', 'canton' => 'BE'), + '4935' => array('town' => 'Leimiswil', 'canton' => 'BE'), + '4936' => array('town' => 'Kleindietwil', 'canton' => 'BE'), + '4937' => array('town' => 'Ursenbach', 'canton' => 'BE'), + '4938' => array('town' => 'Rohrbach', 'canton' => 'BE'), + '4942' => array('town' => 'Walterswil BE', 'canton' => 'BE'), + '4943' => array('town' => 'Oeschenbach', 'canton' => 'BE'), + '4944' => array('town' => 'Auswil', 'canton' => 'BE'), + '4950' => array('town' => 'Huttwil', 'canton' => 'BE'), + '4952' => array('town' => 'Eriswil', 'canton' => 'BE'), + '4953' => array('town' => 'Schwarzenbach BE', 'canton' => 'BE'), + '4954' => array('town' => 'Wyssachen', 'canton' => 'BE'), + '5000' => array('town' => 'Aarau', 'canton' => 'AG'), + '5001' => array('town' => 'Aarau', 'canton' => 'AG'), + '5004' => array('town' => 'Aarau', 'canton' => 'AG'), + '5012' => array('town' => 'Schönenwerd', 'canton' => 'SO'), + '5013' => array('town' => 'Niedergösgen', 'canton' => 'SO'), + '5014' => array('town' => 'Gretzenbach', 'canton' => 'SO'), + '5015' => array('town' => 'Erlinsbach SO', 'canton' => 'SO'), + '5017' => array('town' => 'Barmelweid', 'canton' => 'AG'), + '5022' => array('town' => 'Rombach', 'canton' => 'AG'), + '5023' => array('town' => 'Biberstein', 'canton' => 'AG'), + '5024' => array('town' => 'Küttigen', 'canton' => 'AG'), + '5025' => array('town' => 'Asp', 'canton' => 'AG'), + '5026' => array('town' => 'Densbüren', 'canton' => 'AG'), + '5027' => array('town' => 'Herznach', 'canton' => 'AG'), + '5028' => array('town' => 'Ueken', 'canton' => 'AG'), + '5032' => array('town' => 'Aarau Rohr', 'canton' => 'AG'), + '5033' => array('town' => 'Buchs AG', 'canton' => 'AG'), + '5034' => array('town' => 'Suhr', 'canton' => 'AG'), + '5035' => array('town' => 'Unterentfelden', 'canton' => 'AG'), + '5036' => array('town' => 'Oberentfelden', 'canton' => 'AG'), + '5037' => array('town' => 'Muhen', 'canton' => 'AG'), + '5040' => array('town' => 'Schöftland', 'canton' => 'AG'), + '5042' => array('town' => 'Hirschthal', 'canton' => 'AG'), + '5043' => array('town' => 'Holziken', 'canton' => 'AG'), + '5044' => array('town' => 'Schlossrued', 'canton' => 'AG'), + '5046' => array('town' => 'Schmiedrued', 'canton' => 'AG'), + '5053' => array('town' => 'Staffelbach', 'canton' => 'AG'), + '5054' => array('town' => 'Kirchleerau-Moosle', 'canton' => 'AG'), + '5056' => array('town' => 'Attelwil', 'canton' => 'AG'), + '5057' => array('town' => 'Reitnau', 'canton' => 'AG'), + '5102' => array('town' => 'Rupperswil', 'canton' => 'AG'), + '5103' => array('town' => 'Wildegg', 'canton' => 'AG'), + '5105' => array('town' => 'Auenstein', 'canton' => 'AG'), + '5106' => array('town' => 'Veltheim AG', 'canton' => 'AG'), + '5107' => array('town' => 'Schinznach Dorf', 'canton' => 'AG'), + '5108' => array('town' => 'Oberflachs', 'canton' => 'AG'), + '5112' => array('town' => 'Thalheim AG', 'canton' => 'AG'), + '5113' => array('town' => 'Holderbank AG', 'canton' => 'AG'), + '5116' => array('town' => 'Schinznach Bad', 'canton' => 'AG'), + '5245' => array('town' => 'Habsburg', 'canton' => 'AG'), + '5246' => array('town' => 'Scherz', 'canton' => 'AG'), + '5200' => array('town' => 'Brugg AG', 'canton' => 'AG'), + '5210' => array('town' => 'Windisch', 'canton' => 'AG'), + '5201' => array('town' => 'Brugg AG', 'canton' => 'AG'), + '5212' => array('town' => 'Hausen AG', 'canton' => 'AG'), + '5213' => array('town' => 'Villnachern', 'canton' => 'AG'), + '5222' => array('town' => 'Umiken', 'canton' => 'AG'), + '5223' => array('town' => 'Riniken', 'canton' => 'AG'), + '5224' => array('town' => 'Unterbözberg', 'canton' => 'AG'), + '5225' => array('town' => 'Oberbözberg', 'canton' => 'AG'), + '5233' => array('town' => 'Stilli', 'canton' => 'AG'), + '5234' => array('town' => 'Villigen', 'canton' => 'AG'), + '5235' => array('town' => 'Rüfenach AG', 'canton' => 'AG'), + '5236' => array('town' => 'Remigen', 'canton' => 'AG'), + '5237' => array('town' => 'Mönthal', 'canton' => 'AG'), + '5242' => array('town' => 'Birr-Lupfig', 'canton' => 'AG'), + '5243' => array('town' => 'Mülligen', 'canton' => 'AG'), + '5244' => array('town' => 'Birrhard', 'canton' => 'AG'), + '5078' => array('town' => 'Effingen', 'canton' => 'AG'), + '5076' => array('town' => 'Bözen', 'canton' => 'AG'), + '5077' => array('town' => 'Elfingen', 'canton' => 'AG'), + '5079' => array('town' => 'Zeihen', 'canton' => 'AG'), + '5075' => array('town' => 'Hornussen', 'canton' => 'AG'), + '5070' => array('town' => 'Frick', 'canton' => 'AG'), + '5072' => array('town' => 'Oeschgen', 'canton' => 'AG'), + '5073' => array('town' => 'Gipf-Oberfrick', 'canton' => 'AG'), + '5064' => array('town' => 'Wittnau', 'canton' => 'AG'), + '5063' => array('town' => 'Wölflinswil', 'canton' => 'AG'), + '5062' => array('town' => 'Oberhof', 'canton' => 'AG'), + '5074' => array('town' => 'Eiken', 'canton' => 'AG'), + '5300' => array('town' => 'Turgi', 'canton' => 'AG'), + '5301' => array('town' => 'Siggenthal Station', 'canton' => 'AG'), + '5303' => array('town' => 'Würenlingen', 'canton' => 'AG'), + '5304' => array('town' => 'Endingen', 'canton' => 'AG'), + '5305' => array('town' => 'Unterendingen', 'canton' => 'AG'), + '5306' => array('town' => 'Tegerfelden', 'canton' => 'AG'), + '5312' => array('town' => 'Döttingen', 'canton' => 'AG'), + '5313' => array('town' => 'Klingnau', 'canton' => 'AG'), + '5314' => array('town' => 'Kleindöttingen', 'canton' => 'AG'), + '5315' => array('town' => 'Böttstein', 'canton' => 'AG'), + '5316' => array('town' => 'Leuggern', 'canton' => 'AG'), + '5317' => array('town' => 'Hettenschwil', 'canton' => 'AG'), + '5318' => array('town' => 'Mandach', 'canton' => 'AG'), + '5322' => array('town' => 'Koblenz', 'canton' => 'AG'), + '5400' => array('town' => 'Baden', 'canton' => 'AG'), + '5408' => array('town' => 'Ennetbaden', 'canton' => 'AG'), + '5401' => array('town' => 'Baden', 'canton' => 'AG'), + '5402' => array('town' => 'Baden', 'canton' => 'AG'), + '5404' => array('town' => 'Baden', 'canton' => 'AG'), + '5405' => array('town' => 'Baden', 'canton' => 'AG'), + '5406' => array('town' => 'Baden', 'canton' => 'AG'), + '5412' => array('town' => 'Gebenstorf', 'canton' => 'AG'), + '5413' => array('town' => 'Birmenstorf AG', 'canton' => 'AG'), + '5415' => array('town' => 'Nussbaumen AG', 'canton' => 'AG'), + '5416' => array('town' => 'Kirchdorf AG', 'canton' => 'AG'), + '5417' => array('town' => 'Untersiggenthal', 'canton' => 'AG'), + '5420' => array('town' => 'Ehrendingen', 'canton' => 'AG'), + '5423' => array('town' => 'Freienwil', 'canton' => 'AG'), + '5425' => array('town' => 'Schneisingen', 'canton' => 'AG'), + '5426' => array('town' => 'Lengnau AG', 'canton' => 'AG'), + '5430' => array('town' => 'Wettingen', 'canton' => 'AG'), + '5431' => array('town' => 'Wettingen Sonderd', 'canton' => 'AG'), + '5432' => array('town' => 'Neuenhof', 'canton' => 'AG'), + '5442' => array('town' => 'Fislisbach', 'canton' => 'AG'), + '5443' => array('town' => 'Niederrohrdorf', 'canton' => 'AG'), + '5444' => array('town' => 'Künten', 'canton' => 'AG'), + '5445' => array('town' => 'Eggenwil', 'canton' => 'AG'), + '5452' => array('town' => 'Oberrohrdorf', 'canton' => 'AG'), + '5453' => array('town' => 'Remetschwil', 'canton' => 'AG'), + '5454' => array('town' => 'Bellikon', 'canton' => 'AG'), + '5502' => array('town' => 'Hunzenschwil', 'canton' => 'AG'), + '5503' => array('town' => 'Schafisheim', 'canton' => 'AG'), + '5504' => array('town' => 'Othmarsingen', 'canton' => 'AG'), + '5505' => array('town' => 'Brunegg', 'canton' => 'AG'), + '5506' => array('town' => 'Mägenwil', 'canton' => 'AG'), + '5507' => array('town' => 'Mellingen', 'canton' => 'AG'), + '5512' => array('town' => 'Wohlenschwil', 'canton' => 'AG'), + '5522' => array('town' => 'Tägerig', 'canton' => 'AG'), + '5524' => array('town' => 'Nesselnbach', 'canton' => 'AG'), + '5525' => array('town' => 'Fischbach-Göslikon', 'canton' => 'AG'), + '5600' => array('town' => 'Lenzburg', 'canton' => 'AG'), + '5603' => array('town' => 'Staufen', 'canton' => 'AG'), + '5604' => array('town' => 'Hendschiken', 'canton' => 'AG'), + '5605' => array('town' => 'Dottikon', 'canton' => 'AG'), + '5606' => array('town' => 'Dintikon', 'canton' => 'AG'), + '5607' => array('town' => 'Hägglingen', 'canton' => 'AG'), + '5608' => array('town' => 'Stetten AG', 'canton' => 'AG'), + '5610' => array('town' => 'Wohlen AG', 'canton' => 'AG'), + '5611' => array('town' => 'Anglikon', 'canton' => 'AG'), + '5619' => array('town' => 'Büttikon AG', 'canton' => 'AG'), + '5612' => array('town' => 'Villmergen', 'canton' => 'AG'), + '5613' => array('town' => 'Hilfikon', 'canton' => 'AG'), + '5614' => array('town' => 'Sarmenstorf', 'canton' => 'AG'), + '5615' => array('town' => 'Fahrwangen', 'canton' => 'AG'), + '5616' => array('town' => 'Meisterschwanden', 'canton' => 'AG'), + '5617' => array('town' => 'Tennwil', 'canton' => 'AG'), + '5618' => array('town' => 'Bettwil', 'canton' => 'AG'), + '5620' => array('town' => 'Bremgarten AG', 'canton' => 'AG'), + '5621' => array('town' => 'Zufikon', 'canton' => 'AG'), + '5622' => array('town' => 'Waltenschwil', 'canton' => 'AG'), + '5623' => array('town' => 'Boswil', 'canton' => 'AG'), + '5624' => array('town' => 'Bünzen', 'canton' => 'AG'), + '5625' => array('town' => 'Kallern', 'canton' => 'AG'), + '5626' => array('town' => 'Hermetschwil-Staff', 'canton' => 'AG'), + '5627' => array('town' => 'Besenbüren', 'canton' => 'AG'), + '5628' => array('town' => 'Aristau', 'canton' => 'AG'), + '5630' => array('town' => 'Muri AG', 'canton' => 'AG'), + '5632' => array('town' => 'Buttwil', 'canton' => 'AG'), + '5634' => array('town' => 'Merenschwand', 'canton' => 'AG'), + '5636' => array('town' => 'Benzenschwil', 'canton' => 'AG'), + '5637' => array('town' => 'Beinwil (Freiamt)', 'canton' => 'AG'), + '5642' => array('town' => 'Mühlau', 'canton' => 'AG'), + '5643' => array('town' => 'Sins', 'canton' => 'AG'), + '5644' => array('town' => 'Auw', 'canton' => 'AG'), + '5645' => array('town' => 'Aettenschwil', 'canton' => 'AG'), + '5646' => array('town' => 'Abtwil AG', 'canton' => 'AG'), + '5647' => array('town' => 'Oberrüti', 'canton' => 'AG'), + '5702' => array('town' => 'Niederlenz', 'canton' => 'AG'), + '5703' => array('town' => 'Seon', 'canton' => 'AG'), + '5704' => array('town' => 'Egliswil', 'canton' => 'AG'), + '5705' => array('town' => 'Hallwil', 'canton' => 'AG'), + '5706' => array('town' => 'Boniswil', 'canton' => 'AG'), + '5707' => array('town' => 'Seengen', 'canton' => 'AG'), + '5708' => array('town' => 'Birrwil', 'canton' => 'AG'), + '5712' => array('town' => 'Beinwil am See', 'canton' => 'AG'), + '5722' => array('town' => 'Gränichen', 'canton' => 'AG'), + '5723' => array('town' => 'Teufenthal AG', 'canton' => 'AG'), + '5724' => array('town' => 'Dürrenäsch', 'canton' => 'AG'), + '5725' => array('town' => 'Leutwil', 'canton' => 'AG'), + '5726' => array('town' => 'Unterkulm', 'canton' => 'AG'), + '5727' => array('town' => 'Oberkulm', 'canton' => 'AG'), + '5728' => array('town' => 'Gontenschwil', 'canton' => 'AG'), + '5732' => array('town' => 'Zetzwil', 'canton' => 'AG'), + '5733' => array('town' => 'Leimbach AG', 'canton' => 'AG'), + '5734' => array('town' => 'Reinach AG', 'canton' => 'AG'), + '5735' => array('town' => 'Pfeffikon LU', 'canton' => 'LU'), + '5736' => array('town' => 'Burg AG', 'canton' => 'AG'), + '5737' => array('town' => 'Menziken', 'canton' => 'AG'), + '5742' => array('town' => 'Kölliken', 'canton' => 'AG'), + '5745' => array('town' => 'Safenwil', 'canton' => 'AG'), + '5746' => array('town' => 'Walterswil SO', 'canton' => 'SO'), + '6000' => array('town' => 'Luzern', 'canton' => 'LU'), + '6002' => array('town' => 'Luzern', 'canton' => 'LU'), + '6003' => array('town' => 'Luzern', 'canton' => 'LU'), + '6004' => array('town' => 'Luzern', 'canton' => 'LU'), + '6005' => array('town' => 'Luzern', 'canton' => 'LU'), + '6006' => array('town' => 'Luzern', 'canton' => 'LU'), + '6010' => array('town' => 'Kriens', 'canton' => 'LU'), + '6012' => array('town' => 'Obernau', 'canton' => 'LU'), + '6013' => array('town' => 'Eigenthal', 'canton' => 'LU'), + '6014' => array('town' => 'Luzern', 'canton' => 'LU'), + '6015' => array('town' => 'Luzern', 'canton' => 'LU'), + '6016' => array('town' => 'Hellbühl', 'canton' => 'LU'), + '6017' => array('town' => 'Ruswil', 'canton' => 'LU'), + '6019' => array('town' => 'Sigigen', 'canton' => 'LU'), + '6018' => array('town' => 'Buttisholz', 'canton' => 'LU'), + '6020' => array('town' => 'Emmenbrücke', 'canton' => 'LU'), + '6022' => array('town' => 'Grosswangen', 'canton' => 'LU'), + '6023' => array('town' => 'Rothenburg', 'canton' => 'LU'), + '6024' => array('town' => 'Hildisrieden', 'canton' => 'LU'), + '6025' => array('town' => 'Neudorf', 'canton' => 'LU'), + '6026' => array('town' => 'Rain', 'canton' => 'LU'), + '6027' => array('town' => 'Römerswil LU', 'canton' => 'LU'), + '6028' => array('town' => 'Herlisberg', 'canton' => 'LU'), + '6030' => array('town' => 'Ebikon', 'canton' => 'LU'), + '6032' => array('town' => 'Emmen', 'canton' => 'LU'), + '6033' => array('town' => 'Buchrain', 'canton' => 'LU'), + '6034' => array('town' => 'Inwil', 'canton' => 'LU'), + '6035' => array('town' => 'Perlen', 'canton' => 'LU'), + '6036' => array('town' => 'Dierikon', 'canton' => 'LU'), + '6037' => array('town' => 'Root', 'canton' => 'LU'), + '6038' => array('town' => 'Gisikon', 'canton' => 'LU'), + '6042' => array('town' => 'Dietwil', 'canton' => 'AG'), + '6043' => array('town' => 'Adligenswil', 'canton' => 'LU'), + '6044' => array('town' => 'Udligenswil', 'canton' => 'LU'), + '6045' => array('town' => 'Meggen', 'canton' => 'LU'), + '6047' => array('town' => 'Kastanienbaum', 'canton' => 'LU'), + '6048' => array('town' => 'Horw', 'canton' => 'LU'), + '6052' => array('town' => 'Hergiswil NW', 'canton' => 'NW'), + '6053' => array('town' => 'Alpnachstad', 'canton' => 'OW'), + '6055' => array('town' => 'Alpnach Dorf', 'canton' => 'OW'), + '6056' => array('town' => 'Kägiswil', 'canton' => 'OW'), + '6060' => array('town' => 'Sarnen', 'canton' => 'OW'), + '6068' => array('town' => 'Melchsee-Frutt', 'canton' => 'OW'), + '6062' => array('town' => 'Wilen (Sarnen)', 'canton' => 'OW'), + '6063' => array('town' => 'Stalden (Sarnen)', 'canton' => 'OW'), + '6064' => array('town' => 'Kerns', 'canton' => 'OW'), + '6066' => array('town' => 'St. Niklausen OW', 'canton' => 'OW'), + '6067' => array('town' => 'Melchtal', 'canton' => 'OW'), + '6072' => array('town' => 'Sachseln', 'canton' => 'OW'), + '6073' => array('town' => 'Flüeli-Ranft', 'canton' => 'OW'), + '6074' => array('town' => 'Giswil', 'canton' => 'OW'), + '6078' => array('town' => 'Bürglen OW', 'canton' => 'OW'), + '6083' => array('town' => 'Hasliberg Hohfluh', 'canton' => 'BE'), + '6084' => array('town' => 'Hasliberg Wasserw', 'canton' => 'BE'), + '6085' => array('town' => 'Hasliberg Goldern', 'canton' => 'BE'), + '6086' => array('town' => 'Hasliberg Reuti', 'canton' => 'BE'), + '6102' => array('town' => 'Malters', 'canton' => 'LU'), + '6103' => array('town' => 'Schwarzenberg LU', 'canton' => 'LU'), + '6105' => array('town' => 'Schachen LU', 'canton' => 'LU'), + '6106' => array('town' => 'Werthenstein', 'canton' => 'LU'), + '6110' => array('town' => 'Wolhusen', 'canton' => 'LU'), + '6114' => array('town' => 'Steinhuserberg', 'canton' => 'LU'), + '6112' => array('town' => 'Doppleschwand', 'canton' => 'LU'), + '6113' => array('town' => 'Romoos', 'canton' => 'LU'), + '6122' => array('town' => 'Menznau', 'canton' => 'LU'), + '6123' => array('town' => 'Geiss', 'canton' => 'LU'), + '6125' => array('town' => 'Menzberg', 'canton' => 'LU'), + '6126' => array('town' => 'Daiwil', 'canton' => 'LU'), + '6130' => array('town' => 'Willisau', 'canton' => 'LU'), + '6132' => array('town' => 'Rohrmatt', 'canton' => 'LU'), + '6133' => array('town' => 'Hergiswil LU', 'canton' => 'LU'), + '6142' => array('town' => 'Gettnau', 'canton' => 'LU'), + '6143' => array('town' => 'Ohmstal', 'canton' => 'LU'), + '6144' => array('town' => 'Zell LU', 'canton' => 'LU'), + '6145' => array('town' => 'Fischbach LU', 'canton' => 'LU'), + '6146' => array('town' => 'Grossdietwil', 'canton' => 'LU'), + '6147' => array('town' => 'Altbüron', 'canton' => 'LU'), + '6152' => array('town' => 'Hüswil', 'canton' => 'LU'), + '6153' => array('town' => 'Ufhusen', 'canton' => 'LU'), + '6154' => array('town' => 'Hofstatt', 'canton' => 'LU'), + '6156' => array('town' => 'Luthern', 'canton' => 'LU'), + '6160' => array('town' => 'Entlebuch', 'canton' => 'LU'), + '6162' => array('town' => 'Entlebuch', 'canton' => 'LU'), + '6163' => array('town' => 'Ebnet', 'canton' => 'LU'), + '6166' => array('town' => 'Hasle LU', 'canton' => 'LU'), + '6167' => array('town' => 'Bramboden', 'canton' => 'LU'), + '6170' => array('town' => 'Schüpfheim', 'canton' => 'LU'), + '6173' => array('town' => 'Flühli LU', 'canton' => 'LU'), + '6174' => array('town' => 'Sörenberg', 'canton' => 'LU'), + '6182' => array('town' => 'Escholzmatt', 'canton' => 'LU'), + '6192' => array('town' => 'Wiggen', 'canton' => 'LU'), + '6196' => array('town' => 'Marbach LU', 'canton' => 'LU'), + '6197' => array('town' => 'Schangnau', 'canton' => 'BE'), + '6203' => array('town' => 'Sempach Station', 'canton' => 'LU'), + '6204' => array('town' => 'Sempach', 'canton' => 'LU'), + '6205' => array('town' => 'Eich', 'canton' => 'LU'), + '6206' => array('town' => 'Neuenkirch', 'canton' => 'LU'), + '6207' => array('town' => 'Nottwil', 'canton' => 'LU'), + '6208' => array('town' => 'Oberkirch LU', 'canton' => 'LU'), + '6210' => array('town' => 'Sursee', 'canton' => 'LU'), + '6211' => array('town' => 'Buchs LU', 'canton' => 'LU'), + '6212' => array('town' => 'St. Erhard', 'canton' => 'LU'), + '6213' => array('town' => 'Knutwil', 'canton' => 'LU'), + '6214' => array('town' => 'Schenkon', 'canton' => 'LU'), + '6215' => array('town' => 'Beromünster', 'canton' => 'LU'), + '6216' => array('town' => 'Mauensee', 'canton' => 'LU'), + '6217' => array('town' => 'Kottwil', 'canton' => 'LU'), + '6218' => array('town' => 'Ettiswil', 'canton' => 'LU'), + '6221' => array('town' => 'Rickenbach LU', 'canton' => 'LU'), + '6222' => array('town' => 'Gunzwil', 'canton' => 'LU'), + '6231' => array('town' => 'Schlierbach', 'canton' => 'LU'), + '6232' => array('town' => 'Geuensee', 'canton' => 'LU'), + '6233' => array('town' => 'Büron', 'canton' => 'LU'), + '6234' => array('town' => 'Triengen', 'canton' => 'LU'), + '6236' => array('town' => 'Wilihof', 'canton' => 'LU'), + '6235' => array('town' => 'Winikon', 'canton' => 'LU'), + '6242' => array('town' => 'Wauwil', 'canton' => 'LU'), + '6243' => array('town' => 'Egolzwil', 'canton' => 'LU'), + '6244' => array('town' => 'Nebikon', 'canton' => 'LU'), + '6245' => array('town' => 'Ebersecken', 'canton' => 'LU'), + '6246' => array('town' => 'Altishofen', 'canton' => 'LU'), + '6247' => array('town' => 'Schötz', 'canton' => 'LU'), + '6248' => array('town' => 'Alberswil', 'canton' => 'LU'), + '6252' => array('town' => 'Dagmersellen', 'canton' => 'LU'), + '6253' => array('town' => 'Uffikon', 'canton' => 'LU'), + '6260' => array('town' => 'Reiden', 'canton' => 'LU'), + '6262' => array('town' => 'Langnau b. Reiden', 'canton' => 'LU'), + '6263' => array('town' => 'Richenthal', 'canton' => 'LU'), + '6264' => array('town' => 'Pfaffnau', 'canton' => 'LU'), + '6265' => array('town' => 'Roggliswil', 'canton' => 'LU'), + '6274' => array('town' => 'Eschenbach LU', 'canton' => 'LU'), + '6275' => array('town' => 'Ballwil', 'canton' => 'LU'), + '6276' => array('town' => 'Hohenrain', 'canton' => 'LU'), + '6277' => array('town' => 'Kleinwangen', 'canton' => 'LU'), + '6280' => array('town' => 'Hochdorf', 'canton' => 'LU'), + '6283' => array('town' => 'Baldegg', 'canton' => 'LU'), + '6284' => array('town' => 'Gelfingen', 'canton' => 'LU'), + '6285' => array('town' => 'Hitzkirch', 'canton' => 'LU'), + '6289' => array('town' => 'Müswangen', 'canton' => 'LU'), + '6286' => array('town' => 'Altwis', 'canton' => 'LU'), + '6287' => array('town' => 'Aesch LU', 'canton' => 'LU'), + '6288' => array('town' => 'Schongau', 'canton' => 'LU'), + '6294' => array('town' => 'Ermensee', 'canton' => 'LU'), + '6295' => array('town' => 'Mosen', 'canton' => 'LU'), + '6300' => array('town' => 'Zug', 'canton' => 'ZG'), + '6330' => array('town' => 'Cham 2', 'canton' => 'ZG'), + '6301' => array('town' => 'Zug', 'canton' => 'ZG'), + '6310' => array('town' => 'Zug', 'canton' => 'ZG'), + '6313' => array('town' => 'Edlibach', 'canton' => 'ZG'), + '6319' => array('town' => 'Allenwinden', 'canton' => 'ZG'), + '6315' => array('town' => 'Morgarten', 'canton' => 'ZG'), + '6312' => array('town' => 'Steinhausen', 'canton' => 'ZG'), + '6314' => array('town' => 'Unterägeri', 'canton' => 'ZG'), + '6317' => array('town' => 'Oberwil b. Zug', 'canton' => 'ZG'), + '6318' => array('town' => 'Walchwil', 'canton' => 'ZG'), + '6331' => array('town' => 'Hünenberg', 'canton' => 'ZG'), + '6332' => array('town' => 'Hagendorn', 'canton' => 'ZG'), + '6340' => array('town' => 'Baar', 'canton' => 'ZG'), + '6343' => array('town' => 'Rotkreuz', 'canton' => 'ZG'), + '6344' => array('town' => 'Meierskappel', 'canton' => 'LU'), + '6345' => array('town' => 'Neuheim', 'canton' => 'ZG'), + '6353' => array('town' => 'Weggis', 'canton' => 'LU'), + '6354' => array('town' => 'Vitznau', 'canton' => 'LU'), + '6356' => array('town' => 'Rigi Kaltbad', 'canton' => 'LU'), + '6362' => array('town' => 'Stansstad', 'canton' => 'NW'), + '6363' => array('town' => 'Obbürgen', 'canton' => 'NW'), + '6365' => array('town' => 'Kehrsiten', 'canton' => 'NW'), + '6370' => array('town' => 'Stans', 'canton' => 'NW'), + '6372' => array('town' => 'Ennetmoos', 'canton' => 'NW'), + '6373' => array('town' => 'Ennetbürgen', 'canton' => 'NW'), + '6374' => array('town' => 'Buochs', 'canton' => 'NW'), + '6375' => array('town' => 'Beckenried', 'canton' => 'NW'), + '6376' => array('town' => 'Emmetten', 'canton' => 'NW'), + '6377' => array('town' => 'Seelisberg', 'canton' => 'UR'), + '6382' => array('town' => 'Büren NW', 'canton' => 'NW'), + '6383' => array('town' => 'Dallenwil', 'canton' => 'NW'), + '6386' => array('town' => 'Wolfenschiessen', 'canton' => 'NW'), + '6387' => array('town' => 'Oberrickenbach', 'canton' => 'NW'), + '6388' => array('town' => 'Grafenort', 'canton' => 'OW'), + '6390' => array('town' => 'Engelberg', 'canton' => 'OW'), + '6402' => array('town' => 'Merlischachen', 'canton' => 'SZ'), + '6403' => array('town' => 'Küssnacht am Rigi', 'canton' => 'SZ'), + '6404' => array('town' => 'Greppen', 'canton' => 'LU'), + '6405' => array('town' => 'Immensee', 'canton' => 'SZ'), + '6410' => array('town' => 'Goldau', 'canton' => 'SZ'), + '6414' => array('town' => 'Oberarth', 'canton' => 'SZ'), + '6415' => array('town' => 'Arth', 'canton' => 'SZ'), + '6416' => array('town' => 'Steinerberg', 'canton' => 'SZ'), + '6417' => array('town' => 'Sattel', 'canton' => 'SZ'), + '6418' => array('town' => 'Rothenthurm', 'canton' => 'SZ'), + '6422' => array('town' => 'Steinen', 'canton' => 'SZ'), + '6423' => array('town' => 'Seewen SZ', 'canton' => 'SZ'), + '6424' => array('town' => 'Lauerz', 'canton' => 'SZ'), + '6430' => array('town' => 'Schwyz', 'canton' => 'SZ'), + '6436' => array('town' => 'Ried (Muotathal)', 'canton' => 'SZ'), + '6432' => array('town' => 'Rickenbach SZ', 'canton' => 'SZ'), + '6433' => array('town' => 'Stoos SZ', 'canton' => 'SZ'), + '6434' => array('town' => 'Illgau', 'canton' => 'SZ'), + '6438' => array('town' => 'Ibach', 'canton' => 'SZ'), + '6440' => array('town' => 'Brunnen', 'canton' => 'SZ'), + '6441' => array('town' => 'Rütli', 'canton' => 'UR'), + '6442' => array('town' => 'Gersau', 'canton' => 'SZ'), + '6443' => array('town' => 'Morschach', 'canton' => 'SZ'), + '6452' => array('town' => 'Sisikon', 'canton' => 'UR'), + '6454' => array('town' => 'Flüelen', 'canton' => 'UR'), + '6460' => array('town' => 'Altdorf UR', 'canton' => 'UR'), + '6461' => array('town' => 'Isenthal', 'canton' => 'UR'), + '6462' => array('town' => 'Seedorf UR', 'canton' => 'UR'), + '6463' => array('town' => 'Bürglen UR', 'canton' => 'UR'), + '6464' => array('town' => 'Spiringen', 'canton' => 'UR'), + '6465' => array('town' => 'Unterschächen', 'canton' => 'UR'), + '6466' => array('town' => 'Bauen', 'canton' => 'UR'), + '6467' => array('town' => 'Schattdorf', 'canton' => 'UR'), + '6469' => array('town' => 'Haldi b.Schattdorf', 'canton' => 'UR'), + '6468' => array('town' => 'Attinghausen', 'canton' => 'UR'), + '6472' => array('town' => 'Erstfeld', 'canton' => 'UR'), + '6473' => array('town' => 'Silenen', 'canton' => 'UR'), + '6474' => array('town' => 'Amsteg', 'canton' => 'UR'), + '6475' => array('town' => 'Bristen', 'canton' => 'UR'), + '6476' => array('town' => 'Intschi', 'canton' => 'UR'), + '6482' => array('town' => 'Gurtnellen', 'canton' => 'UR'), + '6484' => array('town' => 'Wassen UR', 'canton' => 'UR'), + '6485' => array('town' => 'Meien', 'canton' => 'UR'), + '6487' => array('town' => 'Göschenen', 'canton' => 'UR'), + '6490' => array('town' => 'Andermatt', 'canton' => 'UR'), + '6491' => array('town' => 'Realp', 'canton' => 'UR'), + '6493' => array('town' => 'Hospental', 'canton' => 'UR'), + '6500' => array('town' => 'Bellinzona', 'canton' => 'TI'), + '6501' => array('town' => 'Bellinzona', 'canton' => 'TI'), + '6503' => array('town' => 'Bellinzona', 'canton' => 'TI'), + '6506' => array('town' => 'Bellinzona 6 Autop', 'canton' => 'TI'), + '6512' => array('town' => 'Giubiasco', 'canton' => 'TI'), + '6513' => array('town' => 'Monte Carasso', 'canton' => 'TI'), + '6514' => array('town' => 'Sementina', 'canton' => 'TI'), + '6515' => array('town' => 'Gudo', 'canton' => 'TI'), + '6516' => array('town' => 'Cugnasco', 'canton' => 'TI'), + '6517' => array('town' => 'Arbedo', 'canton' => 'TI'), + '6518' => array('town' => 'Gorduno', 'canton' => 'TI'), + '6525' => array('town' => 'Gnosca', 'canton' => 'TI'), + '6526' => array('town' => 'Prosito', 'canton' => 'TI'), + '6527' => array('town' => 'Lodrino', 'canton' => 'TI'), + '6528' => array('town' => 'Camorino', 'canton' => 'TI'), + '6532' => array('town' => 'Castione', 'canton' => 'TI'), + '6533' => array('town' => 'Lumino', 'canton' => 'TI'), + '6534' => array('town' => 'S. Vittore', 'canton' => 'GR'), + '6535' => array('town' => 'Roveredo GR', 'canton' => 'GR'), + '6537' => array('town' => 'Grono', 'canton' => 'GR'), + '6523' => array('town' => 'Preonzo', 'canton' => 'TI'), + '6524' => array('town' => 'Moleno', 'canton' => 'TI'), + '6582' => array('town' => 'Pianezzo', 'canton' => 'TI'), + '6583' => array('town' => 'S. Antonio', 'canton' => 'TI'), + '6584' => array('town' => 'Carena', 'canton' => 'TI'), + '6549' => array('town' => 'Laura', 'canton' => 'GR'), + '6540' => array('town' => 'Castaneda', 'canton' => 'GR'), + '6541' => array('town' => 'Sta. Maria', 'canton' => 'GR'), + '6538' => array('town' => 'Verdabbio', 'canton' => 'GR'), + '6542' => array('town' => 'Buseno', 'canton' => 'GR'), + '6543' => array('town' => 'Arvigo', 'canton' => 'GR'), + '6544' => array('town' => 'Braggio', 'canton' => 'GR'), + '6545' => array('town' => 'Selma', 'canton' => 'GR'), + '6546' => array('town' => 'Cauco', 'canton' => 'GR'), + '6547' => array('town' => 'Augio', 'canton' => 'GR'), + '6548' => array('town' => 'Rossa', 'canton' => 'GR'), + '6556' => array('town' => 'Leggia', 'canton' => 'GR'), + '6565' => array('town' => 'S. Bernardino', 'canton' => 'GR'), + '6557' => array('town' => 'Cama', 'canton' => 'GR'), + '6558' => array('town' => 'Lostallo', 'canton' => 'GR'), + '6562' => array('town' => 'Soazza', 'canton' => 'GR'), + '6563' => array('town' => 'Mesocco', 'canton' => 'GR'), + '6572' => array('town' => 'Quartino', 'canton' => 'TI'), + '6573' => array('town' => 'Magadino', 'canton' => 'TI'), + '6574' => array('town' => 'Vira (Gambarogno)', 'canton' => 'TI'), + '6575' => array('town' => 'S. Nazzaro', 'canton' => 'TI'), + '6576' => array('town' => 'Gerra (Gambarogno)', 'canton' => 'TI'), + '6577' => array('town' => 'Ranzo', 'canton' => 'TI'), + '6578' => array('town' => 'Caviano', 'canton' => 'TI'), + '6579' => array('town' => 'Piazzogna', 'canton' => 'TI'), + '6571' => array('town' => 'Indemini', 'canton' => 'TI'), + '6592' => array('town' => 'S. Antonino', 'canton' => 'TI'), + '6593' => array('town' => 'Cadenazzo', 'canton' => 'TI'), + '6594' => array('town' => 'Contone', 'canton' => 'TI'), + '6595' => array('town' => 'Riazzino', 'canton' => 'TI'), + '6596' => array('town' => 'Gordola', 'canton' => 'TI'), + '6597' => array('town' => 'Agarone', 'canton' => 'TI'), + '6598' => array('town' => 'Tenero', 'canton' => 'TI'), + '6599' => array('town' => 'Robasacco', 'canton' => 'TI'), + '6600' => array('town' => 'Locarno', 'canton' => 'TI'), + '6601' => array('town' => 'Locarno', 'canton' => 'TI'), + '6604' => array('town' => 'Locarno', 'canton' => 'TI'), + '6605' => array('town' => 'Locarno', 'canton' => 'TI'), + '6656' => array('town' => 'Golino', 'canton' => 'TI'), + '6618' => array('town' => 'Arcegno', 'canton' => 'TI'), + '6646' => array('town' => 'Contra', 'canton' => 'TI'), + '6647' => array('town' => 'Mergoscia', 'canton' => 'TI'), + '6661' => array('town' => 'Auressio', 'canton' => 'TI'), + '6611' => array('town' => 'Mosogno', 'canton' => 'TI'), + '6662' => array('town' => 'Russo', 'canton' => 'TI'), + '6664' => array('town' => 'Vergeletto', 'canton' => 'TI'), + '6663' => array('town' => 'Comologno', 'canton' => 'TI'), + '6632' => array('town' => 'Vogorno', 'canton' => 'TI'), + '6631' => array('town' => 'Corippo', 'canton' => 'TI'), + '6633' => array('town' => 'Lavertezzo', 'canton' => 'TI'), + '6634' => array('town' => 'Brione (Verzasca)', 'canton' => 'TI'), + '6635' => array('town' => 'Gerra (Verzasca)', 'canton' => 'TI'), + '6636' => array('town' => 'Frasco', 'canton' => 'TI'), + '6637' => array('town' => 'Sonogno', 'canton' => 'TI'), + '6612' => array('town' => 'Ascona', 'canton' => 'TI'), + '6613' => array('town' => 'Porto Ronco', 'canton' => 'TI'), + '6614' => array('town' => 'Brissago', 'canton' => 'TI'), + '6616' => array('town' => 'Losone', 'canton' => 'TI'), + '6622' => array('town' => 'Ronco sopra Ascona', 'canton' => 'TI'), + '6644' => array('town' => 'Orselina', 'canton' => 'TI'), + '6645' => array('town' => 'Brione s. Minusio', 'canton' => 'TI'), + '6648' => array('town' => 'Minusio', 'canton' => 'TI'), + '6655' => array('town' => 'Verdasio', 'canton' => 'TI'), + '6657' => array('town' => 'Palagnedra', 'canton' => 'TI'), + '6658' => array('town' => 'Borgnone', 'canton' => 'TI'), + '6659' => array('town' => 'Camedo', 'canton' => 'TI'), + '6652' => array('town' => 'Tegna', 'canton' => 'TI'), + '6653' => array('town' => 'Verscio', 'canton' => 'TI'), + '6654' => array('town' => 'Cavigliano', 'canton' => 'TI'), + '6670' => array('town' => 'Avegno', 'canton' => 'TI'), + '6677' => array('town' => 'Moghegno', 'canton' => 'TI'), + '6678' => array('town' => 'Coglio', 'canton' => 'TI'), + '6674' => array('town' => 'Riveo', 'canton' => 'TI'), + '6682' => array('town' => 'Linescio', 'canton' => 'TI'), + '6683' => array('town' => 'Cerentino', 'canton' => 'TI'), + '6685' => array('town' => 'Bosco/Gurin', 'canton' => 'TI'), + '6684' => array('town' => 'Campo (VM)', 'canton' => 'TI'), + '6690' => array('town' => 'Cavergno', 'canton' => 'TI'), + '6692' => array('town' => 'Brontallo', 'canton' => 'TI'), + '6693' => array('town' => 'Broglio', 'canton' => 'TI'), + '6694' => array('town' => 'Prato-Sornico', 'canton' => 'TI'), + '6695' => array('town' => 'Peccia', 'canton' => 'TI'), + '6696' => array('town' => 'Fusio', 'canton' => 'TI'), + '6672' => array('town' => 'Gordevio', 'canton' => 'TI'), + '6673' => array('town' => 'Maggia', 'canton' => 'TI'), + '6675' => array('town' => 'Cevio', 'canton' => 'TI'), + '6676' => array('town' => 'Bignasco', 'canton' => 'TI'), + '6702' => array('town' => 'Claro', 'canton' => 'TI'), + '6703' => array('town' => 'Osogna', 'canton' => 'TI'), + '6705' => array('town' => 'Cresciano', 'canton' => 'TI'), + '6707' => array('town' => 'Iragna', 'canton' => 'TI'), + '6710' => array('town' => 'Biasca', 'canton' => 'TI'), + '6721' => array('town' => 'Ludiano', 'canton' => 'TI'), + '6722' => array('town' => 'Corzoneso', 'canton' => 'TI'), + '6716' => array('town' => 'Leontica', 'canton' => 'TI'), + '6723' => array('town' => 'Prugiasco', 'canton' => 'TI'), + '6724' => array('town' => 'Ponto Valentino', 'canton' => 'TI'), + '6719' => array('town' => 'Aquila', 'canton' => 'TI'), + '6720' => array('town' => 'Campo (Blenio)', 'canton' => 'TI'), + '6713' => array('town' => 'Malvaglia', 'canton' => 'TI'), + '6714' => array('town' => 'Semione', 'canton' => 'TI'), + '6715' => array('town' => 'Dongio', 'canton' => 'TI'), + '6717' => array('town' => 'Dangio-Torre', 'canton' => 'TI'), + '6718' => array('town' => 'Olivone', 'canton' => 'TI'), + '6742' => array('town' => 'Pollegio', 'canton' => 'TI'), + '6743' => array('town' => 'Bodio TI', 'canton' => 'TI'), + '6745' => array('town' => 'Giornico', 'canton' => 'TI'), + '6746' => array('town' => 'Lavorgo', 'canton' => 'TI'), + '6747' => array('town' => 'Chironico', 'canton' => 'TI'), + '6760' => array('town' => 'Faido', 'canton' => 'TI'), + '6772' => array('town' => 'Rodi-Fiesso', 'canton' => 'TI'), + '6775' => array('town' => 'Ambrì', 'canton' => 'TI'), + '6776' => array('town' => 'Piotta', 'canton' => 'TI'), + '6777' => array('town' => 'Quinto', 'canton' => 'TI'), + '6780' => array('town' => 'Airolo', 'canton' => 'TI'), + '6781' => array('town' => 'Villa Bedretto', 'canton' => 'TI'), + '6744' => array('town' => 'Personico', 'canton' => 'TI'), + '6748' => array('town' => 'Anzonico', 'canton' => 'TI'), + '6749' => array('town' => 'Sobrio', 'canton' => 'TI'), + '6763' => array('town' => 'Mairengo', 'canton' => 'TI'), + '6764' => array('town' => 'Chiggiogna', 'canton' => 'TI'), + '6773' => array('town' => 'Prato (Leventina)', 'canton' => 'TI'), + '6774' => array('town' => 'Dalpe', 'canton' => 'TI'), + '6802' => array('town' => 'Rivera', 'canton' => 'TI'), + '6804' => array('town' => 'Bironico', 'canton' => 'TI'), + '6803' => array('town' => 'Camignolo', 'canton' => 'TI'), + '6807' => array('town' => 'Taverne', 'canton' => 'TI'), + '6808' => array('town' => 'Torricella', 'canton' => 'TI'), + '6814' => array('town' => 'Lamone-Cadempino', 'canton' => 'TI'), + '6815' => array('town' => 'Melide', 'canton' => 'TI'), + '6816' => array('town' => 'Bissone', 'canton' => 'TI'), + '6817' => array('town' => 'Maroggia', 'canton' => 'TI'), + '6818' => array('town' => 'Melano', 'canton' => 'TI'), + '6822' => array('town' => 'Arogno', 'canton' => 'TI'), + '6825' => array('town' => 'Capolago', 'canton' => 'TI'), + '6826' => array('town' => 'Riva San Vitale', 'canton' => 'TI'), + '6828' => array('town' => 'Balerna', 'canton' => 'TI'), + '6830' => array('town' => 'Chiasso', 'canton' => 'TI'), + '6839' => array('town' => 'Sagno', 'canton' => 'TI'), + '6837' => array('town' => 'Caneggio', 'canton' => 'TI'), + '6838' => array('town' => 'Cabbio', 'canton' => 'TI'), + '6832' => array('town' => 'Pedrinate', 'canton' => 'TI'), + '6833' => array('town' => 'Vacallo', 'canton' => 'TI'), + '6834' => array('town' => 'Morbio Inferiore', 'canton' => 'TI'), + '6836' => array('town' => 'Serfontana', 'canton' => 'TI'), + '6835' => array('town' => 'Morbio Superiore', 'canton' => 'TI'), + '6809' => array('town' => 'Medeglia', 'canton' => 'TI'), + '6810' => array('town' => 'Isone', 'canton' => 'TI'), + '6805' => array('town' => 'Mezzovico', 'canton' => 'TI'), + '6806' => array('town' => 'Sigirino', 'canton' => 'TI'), + '6821' => array('town' => 'Rovio', 'canton' => 'TI'), + '6823' => array('town' => 'Pugerna', 'canton' => 'TI'), + '6850' => array('town' => 'Mendrisio', 'canton' => 'TI'), + '6875' => array('town' => 'Monte', 'canton' => 'TI'), + '6873' => array('town' => 'Corteglia', 'canton' => 'TI'), + '6852' => array('town' => 'Genestrerio', 'canton' => 'TI'), + '6853' => array('town' => 'Ligornetto', 'canton' => 'TI'), + '6854' => array('town' => 'S. Pietro', 'canton' => 'TI'), + '6855' => array('town' => 'Stabio', 'canton' => 'TI'), + '6862' => array('town' => 'Rancate', 'canton' => 'TI'), + '6863' => array('town' => 'Besazio', 'canton' => 'TI'), + '6864' => array('town' => 'Arzo', 'canton' => 'TI'), + '6865' => array('town' => 'Tremona', 'canton' => 'TI'), + '6866' => array('town' => 'Meride', 'canton' => 'TI'), + '6867' => array('town' => 'Serpiano', 'canton' => 'TI'), + '6872' => array('town' => 'Salorino', 'canton' => 'TI'), + '6874' => array('town' => 'Castel San Pietro', 'canton' => 'TI'), + '6877' => array('town' => 'Coldrerio', 'canton' => 'TI'), + '6883' => array('town' => 'Novazzano', 'canton' => 'TI'), + '6900' => array('town' => 'Lugano', 'canton' => 'TI'), + '6901' => array('town' => 'Lugano', 'canton' => 'TI'), + '6902' => array('town' => 'Lugano 2 Caselle', 'canton' => 'TI'), + '6903' => array('town' => 'Lugano', 'canton' => 'TI'), + '6904' => array('town' => 'Lugano 4 Caselle', 'canton' => 'TI'), + '6905' => array('town' => 'Lugano 5 Autoposta', 'canton' => 'TI'), + '6906' => array('town' => 'Lugano 6 Caselle', 'canton' => 'TI'), + '6913' => array('town' => 'Carabbia', 'canton' => 'TI'), + '6915' => array('town' => 'Pambio-Noranco', 'canton' => 'TI'), + '6916' => array('town' => 'Grancia', 'canton' => 'TI'), + '6917' => array('town' => 'Barbengo', 'canton' => 'TI'), + '6919' => array('town' => 'Carabietta', 'canton' => 'TI'), + '6921' => array('town' => 'Vico Morcote', 'canton' => 'TI'), + '6928' => array('town' => 'Manno', 'canton' => 'TI'), + '6929' => array('town' => 'Gravesano', 'canton' => 'TI'), + '6930' => array('town' => 'Bedano', 'canton' => 'TI'), + '6939' => array('town' => 'Arosio', 'canton' => 'TI'), + '6938' => array('town' => 'Vezio', 'canton' => 'TI'), + '6937' => array('town' => 'Breno', 'canton' => 'TI'), + '6949' => array('town' => 'Comano', 'canton' => 'TI'), + '6979' => array('town' => 'Brè sopra Lugano', 'canton' => 'TI'), + '6827' => array('town' => 'Brusino Arsizio', 'canton' => 'TI'), + '6912' => array('town' => 'Pazzallo', 'canton' => 'TI'), + '6914' => array('town' => 'Carona', 'canton' => 'TI'), + '6918' => array('town' => 'Figino', 'canton' => 'TI'), + '6922' => array('town' => 'Morcote', 'canton' => 'TI'), + '6924' => array('town' => 'Sorengo', 'canton' => 'TI'), + '6925' => array('town' => 'Gentilino', 'canton' => 'TI'), + '6926' => array('town' => 'Montagnola', 'canton' => 'TI'), + '6927' => array('town' => 'Agra', 'canton' => 'TI'), + '6932' => array('town' => 'Breganzona', 'canton' => 'TI'), + '6933' => array('town' => 'Muzzano', 'canton' => 'TI'), + '6934' => array('town' => 'Bioggio', 'canton' => 'TI'), + '6935' => array('town' => 'Bosco Luganese', 'canton' => 'TI'), + '6936' => array('town' => 'Cademario', 'canton' => 'TI'), + '6942' => array('town' => 'Savosa', 'canton' => 'TI'), + '6943' => array('town' => 'Vezia', 'canton' => 'TI'), + '6948' => array('town' => 'Porza', 'canton' => 'TI'), + '6950' => array('town' => 'Tesserete', 'canton' => 'TI'), + '6944' => array('town' => 'Cureglia', 'canton' => 'TI'), + '6945' => array('town' => 'Origlio', 'canton' => 'TI'), + '6946' => array('town' => 'Ponte Capriasca', 'canton' => 'TI'), + '6947' => array('town' => 'Vaglio', 'canton' => 'TI'), + '6954' => array('town' => 'Sala Capriasca', 'canton' => 'TI'), + '6953' => array('town' => 'Lugaggia', 'canton' => 'TI'), + '6951' => array('town' => 'Insone', 'canton' => 'TI'), + '6956' => array('town' => 'Lopagno', 'canton' => 'TI'), + '6957' => array('town' => 'Roveredo TI', 'canton' => 'TI'), + '6958' => array('town' => 'Bidogno', 'canton' => 'TI'), + '6955' => array('town' => 'Cagiallo', 'canton' => 'TI'), + '6959' => array('town' => 'Cimadera', 'canton' => 'TI'), + '6952' => array('town' => 'Canobbio', 'canton' => 'TI'), + '6962' => array('town' => 'Viganello', 'canton' => 'TI'), + '6963' => array('town' => 'Pregassona', 'canton' => 'TI'), + '6964' => array('town' => 'Davesco-Soragno', 'canton' => 'TI'), + '6965' => array('town' => 'Cadro', 'canton' => 'TI'), + '6966' => array('town' => 'Villa Luganese', 'canton' => 'TI'), + '6967' => array('town' => 'Dino', 'canton' => 'TI'), + '6968' => array('town' => 'Sonvico', 'canton' => 'TI'), + '6974' => array('town' => 'Aldesago', 'canton' => 'TI'), + '6976' => array('town' => 'Castagnola', 'canton' => 'TI'), + '6977' => array('town' => 'Ruvigliana', 'canton' => 'TI'), + '6978' => array('town' => 'Gandria', 'canton' => 'TI'), + '6990' => array('town' => 'Cassina d\'Agno', 'canton' => 'TI'), + '6991' => array('town' => 'Neggio', 'canton' => 'TI'), + '6992' => array('town' => 'Vernate', 'canton' => 'TI'), + '6993' => array('town' => 'Iseo', 'canton' => 'TI'), + '6994' => array('town' => 'Aranno', 'canton' => 'TI'), + '6981' => array('town' => 'Bedigliora', 'canton' => 'TI'), + '6980' => array('town' => 'Castelrotto', 'canton' => 'TI'), + '6999' => array('town' => 'Astano', 'canton' => 'TI'), + '6986' => array('town' => 'Miglieglia', 'canton' => 'TI'), + '6989' => array('town' => 'Purasca', 'canton' => 'TI'), + '6995' => array('town' => 'Molinazzo', 'canton' => 'TI'), + '6996' => array('town' => 'Ponte Cremenaga', 'canton' => 'TI'), + '6997' => array('town' => 'Sessa', 'canton' => 'TI'), + '6998' => array('town' => 'Termine', 'canton' => 'TI'), + '6982' => array('town' => 'Agno', 'canton' => 'TI'), + '6983' => array('town' => 'Magliaso', 'canton' => 'TI'), + '6984' => array('town' => 'Pura', 'canton' => 'TI'), + '6987' => array('town' => 'Caslano', 'canton' => 'TI'), + '6988' => array('town' => 'Ponte Tresa', 'canton' => 'TI'), + '7000' => array('town' => 'Chur', 'canton' => 'GR'), + '7001' => array('town' => 'Chur', 'canton' => 'GR'), + '7002' => array('town' => 'Chur', 'canton' => 'GR'), + '7004' => array('town' => 'Chur', 'canton' => 'GR'), + '7006' => array('town' => 'Chur', 'canton' => 'GR'), + '7007' => array('town' => 'Chur', 'canton' => 'GR'), + '7012' => array('town' => 'Felsberg', 'canton' => 'GR'), + '7013' => array('town' => 'Domat/Ems', 'canton' => 'GR'), + '7015' => array('town' => 'Tamins', 'canton' => 'GR'), + '7017' => array('town' => 'Flims Dorf', 'canton' => 'GR'), + '7018' => array('town' => 'Flims Waldhaus', 'canton' => 'GR'), + '7023' => array('town' => 'Haldenstein', 'canton' => 'GR'), + '7026' => array('town' => 'Maladers', 'canton' => 'GR'), + '7031' => array('town' => 'Laax GR', 'canton' => 'GR'), + '7032' => array('town' => 'Laax GR 2', 'canton' => 'GR'), + '7050' => array('town' => 'Arosa', 'canton' => 'GR'), + '7062' => array('town' => 'Passugg-Araschgen', 'canton' => 'GR'), + '7063' => array('town' => 'Praden', 'canton' => 'GR'), + '7064' => array('town' => 'Tschiertschen', 'canton' => 'GR'), + '7074' => array('town' => 'Malix', 'canton' => 'GR'), + '7075' => array('town' => 'Churwalden', 'canton' => 'GR'), + '7076' => array('town' => 'Parpan', 'canton' => 'GR'), + '7077' => array('town' => 'Valbella', 'canton' => 'GR'), + '7078' => array('town' => 'Lenzerheide/Lai', 'canton' => 'GR'), + '7082' => array('town' => 'Vaz/Obervaz', 'canton' => 'GR'), + '7083' => array('town' => 'Lantsch/Lenz', 'canton' => 'GR'), + '7084' => array('town' => 'Brienz/Brinzauls', 'canton' => 'GR'), + '7014' => array('town' => 'Trin', 'canton' => 'GR'), + '7016' => array('town' => 'Trin Mulin', 'canton' => 'GR'), + '7019' => array('town' => 'Fidaz', 'canton' => 'GR'), + '7027' => array('town' => 'Lüen', 'canton' => 'GR'), + '7028' => array('town' => 'St. Peter', 'canton' => 'GR'), + '7056' => array('town' => 'Molinis', 'canton' => 'GR'), + '7029' => array('town' => 'Peist', 'canton' => 'GR'), + '7057' => array('town' => 'Langwies', 'canton' => 'GR'), + '7058' => array('town' => 'Litzirüti', 'canton' => 'GR'), + '7104' => array('town' => 'Versam', 'canton' => 'GR'), + '7106' => array('town' => 'Tenna', 'canton' => 'GR'), + '7107' => array('town' => 'Safien Platz', 'canton' => 'GR'), + '7109' => array('town' => 'Thalkirch', 'canton' => 'GR'), + '7122' => array('town' => 'Valendas', 'canton' => 'GR'), + '7126' => array('town' => 'Castrisch', 'canton' => 'GR'), + '7130' => array('town' => 'Ilanz', 'canton' => 'GR'), + '7154' => array('town' => 'Ruschein', 'canton' => 'GR'), + '7155' => array('town' => 'Ladir', 'canton' => 'GR'), + '7151' => array('town' => 'Schluein', 'canton' => 'GR'), + '7153' => array('town' => 'Falera', 'canton' => 'GR'), + '7152' => array('town' => 'Sagogn', 'canton' => 'GR'), + '7127' => array('town' => 'Sevgein', 'canton' => 'GR'), + '7128' => array('town' => 'Riein', 'canton' => 'GR'), + '7111' => array('town' => 'Pitasch', 'canton' => 'GR'), + '7112' => array('town' => 'Duvin', 'canton' => 'GR'), + '7113' => array('town' => 'Camuns', 'canton' => 'GR'), + '7114' => array('town' => 'Uors (Lumnezia)', 'canton' => 'GR'), + '7115' => array('town' => 'Surcasti', 'canton' => 'GR'), + '7116' => array('town' => 'Tersnaus', 'canton' => 'GR'), + '7141' => array('town' => 'Luven', 'canton' => 'GR'), + '7142' => array('town' => 'Cumbel', 'canton' => 'GR'), + '7143' => array('town' => 'Morissen', 'canton' => 'GR'), + '7144' => array('town' => 'Vella', 'canton' => 'GR'), + '7145' => array('town' => 'Degen', 'canton' => 'GR'), + '7146' => array('town' => 'Vattiz', 'canton' => 'GR'), + '7147' => array('town' => 'Vignogn', 'canton' => 'GR'), + '7148' => array('town' => 'Lumbrein', 'canton' => 'GR'), + '7149' => array('town' => 'Vrin', 'canton' => 'GR'), + '7137' => array('town' => 'Flond', 'canton' => 'GR'), + '7138' => array('town' => 'Surcuolm', 'canton' => 'GR'), + '7132' => array('town' => 'Vals', 'canton' => 'GR'), + '7133' => array('town' => 'Obersaxen Affeier', 'canton' => 'GR'), + '7134' => array('town' => 'Obersaxen Meierhof', 'canton' => 'GR'), + '7135' => array('town' => 'Obersaxen Giraniga', 'canton' => 'GR'), + '7136' => array('town' => 'Obers Friggahüs', 'canton' => 'GR'), + '7156' => array('town' => 'Pigniu', 'canton' => 'GR'), + '7157' => array('town' => 'Siat', 'canton' => 'GR'), + '7158' => array('town' => 'Waltensburg/Vuorz', 'canton' => 'GR'), + '7159' => array('town' => 'Andiast', 'canton' => 'GR'), + '7162' => array('town' => 'Tavanasa', 'canton' => 'GR'), + '7163' => array('town' => 'Danis', 'canton' => 'GR'), + '7164' => array('town' => 'Dardin', 'canton' => 'GR'), + '7165' => array('town' => 'Breil/Brigels', 'canton' => 'GR'), + '7166' => array('town' => 'Trun', 'canton' => 'GR'), + '7168' => array('town' => 'Schlans', 'canton' => 'GR'), + '7167' => array('town' => 'Zignau', 'canton' => 'GR'), + '7172' => array('town' => 'Rabius', 'canton' => 'GR'), + '7175' => array('town' => 'Sumvitg', 'canton' => 'GR'), + '7174' => array('town' => 'S. Benedetg', 'canton' => 'GR'), + '7180' => array('town' => 'Disentis/Mustér', 'canton' => 'GR'), + '7182' => array('town' => 'Cavardiras', 'canton' => 'GR'), + '7183' => array('town' => 'Mompé Medel', 'canton' => 'GR'), + '7184' => array('town' => 'Curaglia', 'canton' => 'GR'), + '7185' => array('town' => 'Platta', 'canton' => 'GR'), + '7186' => array('town' => 'Segnas', 'canton' => 'GR'), + '7187' => array('town' => 'Camischolas', 'canton' => 'GR'), + '7189' => array('town' => 'Rueras', 'canton' => 'GR'), + '7188' => array('town' => 'Sedrun', 'canton' => 'GR'), + '7173' => array('town' => 'Surrein', 'canton' => 'GR'), + '7176' => array('town' => 'Cumpadials', 'canton' => 'GR'), + '7201' => array('town' => 'Untervaz Bahnhof', 'canton' => 'GR'), + '7203' => array('town' => 'Trimmis', 'canton' => 'GR'), + '7202' => array('town' => 'Says', 'canton' => 'GR'), + '7204' => array('town' => 'Untervaz', 'canton' => 'GR'), + '7205' => array('town' => 'Zizers', 'canton' => 'GR'), + '7206' => array('town' => 'Igis', 'canton' => 'GR'), + '7208' => array('town' => 'Malans GR', 'canton' => 'GR'), + '7212' => array('town' => 'Seewis Dorf', 'canton' => 'GR'), + '7213' => array('town' => 'Valzeina', 'canton' => 'GR'), + '7214' => array('town' => 'Grüsch', 'canton' => 'GR'), + '7215' => array('town' => 'Fanas', 'canton' => 'GR'), + '7220' => array('town' => 'Schiers', 'canton' => 'GR'), + '7228' => array('town' => 'Schuders', 'canton' => 'GR'), + '7226' => array('town' => 'Stels', 'canton' => 'GR'), + '7222' => array('town' => 'Mittellunden', 'canton' => 'GR'), + '7223' => array('town' => 'Buchen', 'canton' => 'GR'), + '7224' => array('town' => 'Putz', 'canton' => 'GR'), + '7231' => array('town' => 'Pragg-Jenaz', 'canton' => 'GR'), + '7232' => array('town' => 'Furna', 'canton' => 'GR'), + '7233' => array('town' => 'Jenaz', 'canton' => 'GR'), + '7235' => array('town' => 'Fideris', 'canton' => 'GR'), + '7240' => array('town' => 'Küblis', 'canton' => 'GR'), + '7242' => array('town' => 'Luzein', 'canton' => 'GR'), + '7243' => array('town' => 'Pany', 'canton' => 'GR'), + '7244' => array('town' => 'Gadenstätt', 'canton' => 'GR'), + '7245' => array('town' => 'Ascharina', 'canton' => 'GR'), + '7246' => array('town' => 'St. Antönien', 'canton' => 'GR'), + '7241' => array('town' => 'Conters', 'canton' => 'GR'), + '7247' => array('town' => 'Saas im Prättigau', 'canton' => 'GR'), + '7249' => array('town' => 'Serneus', 'canton' => 'GR'), + '7250' => array('town' => 'Klosters', 'canton' => 'GR'), + '7252' => array('town' => 'Klosters Dorf', 'canton' => 'GR'), + '7260' => array('town' => 'Davos Dorf', 'canton' => 'GR'), + '7265' => array('town' => 'Davos Wolfgang', 'canton' => 'GR'), + '7270' => array('town' => 'Davos Platz', 'canton' => 'GR'), + '7272' => array('town' => 'Davos Clavadel', 'canton' => 'GR'), + '7276' => array('town' => 'Davos Frauenkirch', 'canton' => 'GR'), + '7277' => array('town' => 'Davos Glaris', 'canton' => 'GR'), + '7278' => array('town' => 'Davos Monstein', 'canton' => 'GR'), + '7302' => array('town' => 'Landquart', 'canton' => 'GR'), + '7303' => array('town' => 'Mastrils', 'canton' => 'GR'), + '7304' => array('town' => 'Maienfeld', 'canton' => 'GR'), + '7306' => array('town' => 'Fläsch', 'canton' => 'GR'), + '7307' => array('town' => 'Jenins', 'canton' => 'GR'), + '7310' => array('town' => 'Bad Ragaz', 'canton' => 'SG'), + '7317' => array('town' => 'Valens', 'canton' => 'SG'), + '7314' => array('town' => 'Vadura', 'canton' => 'SG'), + '7315' => array('town' => 'Vättis', 'canton' => 'SG'), + '7312' => array('town' => 'Pfäfers', 'canton' => 'SG'), + '7313' => array('town' => 'St. Margrethenberg', 'canton' => 'SG'), + '7320' => array('town' => 'Sargans', 'canton' => 'SG'), + '7325' => array('town' => 'Schwendi', 'canton' => 'SG'), + '7326' => array('town' => 'Weisstannen', 'canton' => 'SG'), + '7323' => array('town' => 'Wangs', 'canton' => 'SG'), + '7324' => array('town' => 'Vilters', 'canton' => 'SG'), + '7402' => array('town' => 'Bonaduz', 'canton' => 'GR'), + '7403' => array('town' => 'Rhäzüns', 'canton' => 'GR'), + '7404' => array('town' => 'Feldis/Veulden', 'canton' => 'GR'), + '7405' => array('town' => 'Rothenbrunnen', 'canton' => 'GR'), + '7408' => array('town' => 'Cazis', 'canton' => 'GR'), + '7411' => array('town' => 'Sils im Domleschg', 'canton' => 'GR'), + '7412' => array('town' => 'Scharans', 'canton' => 'GR'), + '7413' => array('town' => 'Fürstenaubruck', 'canton' => 'GR'), + '7414' => array('town' => 'Fürstenau', 'canton' => 'GR'), + '7415' => array('town' => 'Rodels', 'canton' => 'GR'), + '7416' => array('town' => 'Almens', 'canton' => 'GR'), + '7417' => array('town' => 'Paspels', 'canton' => 'GR'), + '7407' => array('town' => 'Trans', 'canton' => 'GR'), + '7418' => array('town' => 'Tumegl/Tomils', 'canton' => 'GR'), + '7419' => array('town' => 'Scheid', 'canton' => 'GR'), + '7430' => array('town' => 'Thusis', 'canton' => 'GR'), + '7425' => array('town' => 'Masein', 'canton' => 'GR'), + '7426' => array('town' => 'Flerden', 'canton' => 'GR'), + '7427' => array('town' => 'Urmein', 'canton' => 'GR'), + '7428' => array('town' => 'Tschappina', 'canton' => 'GR'), + '7421' => array('town' => 'Summaprada', 'canton' => 'GR'), + '7422' => array('town' => 'Tartar', 'canton' => 'GR'), + '7423' => array('town' => 'Sarn', 'canton' => 'GR'), + '7424' => array('town' => 'Präz', 'canton' => 'GR'), + '7431' => array('town' => 'Mutten', 'canton' => 'GR'), + '7432' => array('town' => 'Zillis', 'canton' => 'GR'), + '7433' => array('town' => 'Donat', 'canton' => 'GR'), + '7434' => array('town' => 'Sufers', 'canton' => 'GR'), + '7435' => array('town' => 'Splügen', 'canton' => 'GR'), + '7436' => array('town' => 'Medels', 'canton' => 'GR'), + '7437' => array('town' => 'Nufenen', 'canton' => 'GR'), + '7438' => array('town' => 'Hinterrhein', 'canton' => 'GR'), + '7440' => array('town' => 'Andeer', 'canton' => 'GR'), + '7442' => array('town' => 'Clugin', 'canton' => 'GR'), + '7443' => array('town' => 'Pignia', 'canton' => 'GR'), + '7444' => array('town' => 'Ausserferrera', 'canton' => 'GR'), + '7445' => array('town' => 'Innerferrera', 'canton' => 'GR'), + '7446' => array('town' => 'Campsut-Cröt', 'canton' => 'GR'), + '7447' => array('town' => 'Cresta (Avers)', 'canton' => 'GR'), + '7448' => array('town' => 'Juf', 'canton' => 'GR'), + '7450' => array('town' => 'Tiefencastel', 'canton' => 'GR'), + '7458' => array('town' => 'Mon', 'canton' => 'GR'), + '7459' => array('town' => 'Stierva', 'canton' => 'GR'), + '7451' => array('town' => 'Alvaschein', 'canton' => 'GR'), + '7452' => array('town' => 'Cunter', 'canton' => 'GR'), + '7453' => array('town' => 'Tinizong', 'canton' => 'GR'), + '7454' => array('town' => 'Rona', 'canton' => 'GR'), + '7455' => array('town' => 'Mulegns', 'canton' => 'GR'), + '7456' => array('town' => 'Sur', 'canton' => 'GR'), + '7457' => array('town' => 'Bivio', 'canton' => 'GR'), + '7460' => array('town' => 'Savognin', 'canton' => 'GR'), + '7462' => array('town' => 'Salouf', 'canton' => 'GR'), + '7463' => array('town' => 'Riom', 'canton' => 'GR'), + '7464' => array('town' => 'Parsonz', 'canton' => 'GR'), + '7472' => array('town' => 'Surava', 'canton' => 'GR'), + '7473' => array('town' => 'Alvaneu Bad', 'canton' => 'GR'), + '7477' => array('town' => 'Filisur', 'canton' => 'GR'), + '7482' => array('town' => 'Bergün/Bravuogn', 'canton' => 'GR'), + '7484' => array('town' => 'Latsch', 'canton' => 'GR'), + '7492' => array('town' => 'Alvaneu Dorf', 'canton' => 'GR'), + '7493' => array('town' => 'Schmitten (Albula)', 'canton' => 'GR'), + '7494' => array('town' => 'Davos Wiesen', 'canton' => 'GR'), + '7500' => array('town' => 'St. Moritz', 'canton' => 'GR'), + '7502' => array('town' => 'Bever', 'canton' => 'GR'), + '7503' => array('town' => 'Samedan', 'canton' => 'GR'), + '7504' => array('town' => 'Pontresina', 'canton' => 'GR'), + '7505' => array('town' => 'Celerina', 'canton' => 'GR'), + '7512' => array('town' => 'Champfèr', 'canton' => 'GR'), + '7513' => array('town' => 'Silvaplana', 'canton' => 'GR'), + '7514' => array('town' => 'Sils/Segl Maria', 'canton' => 'GR'), + '7515' => array('town' => 'Sils/Segl Baselgia', 'canton' => 'GR'), + '7516' => array('town' => 'Maloja', 'canton' => 'GR'), + '7517' => array('town' => 'Plaun da Lej', 'canton' => 'GR'), + '7522' => array('town' => 'La Punt-Chamues-ch', 'canton' => 'GR'), + '7523' => array('town' => 'Madulain', 'canton' => 'GR'), + '7524' => array('town' => 'Zuoz', 'canton' => 'GR'), + '7525' => array('town' => 'S-chanf', 'canton' => 'GR'), + '7526' => array('town' => 'Cinuos-chel', 'canton' => 'GR'), + '7527' => array('town' => 'Brail', 'canton' => 'GR'), + '7530' => array('town' => 'Zernez', 'canton' => 'GR'), + '7532' => array('town' => 'Tschierv', 'canton' => 'GR'), + '7533' => array('town' => 'Fuldera', 'canton' => 'GR'), + '7534' => array('town' => 'Lü', 'canton' => 'GR'), + '7535' => array('town' => 'Valchava', 'canton' => 'GR'), + '7536' => array('town' => 'Sta. Maria V. M.', 'canton' => 'GR'), + '7537' => array('town' => 'Müstair', 'canton' => 'GR'), + '7542' => array('town' => 'Susch', 'canton' => 'GR'), + '7543' => array('town' => 'Lavin', 'canton' => 'GR'), + '7545' => array('town' => 'Guarda', 'canton' => 'GR'), + '7546' => array('town' => 'Ardez', 'canton' => 'GR'), + '7550' => array('town' => 'Scuol', 'canton' => 'GR'), + '7551' => array('town' => 'Ftan', 'canton' => 'GR'), + '7552' => array('town' => 'Vulpera', 'canton' => 'GR'), + '7553' => array('town' => 'Tarasp', 'canton' => 'GR'), + '7554' => array('town' => 'Sent', 'canton' => 'GR'), + '7556' => array('town' => 'Ramosch', 'canton' => 'GR'), + '7557' => array('town' => 'Vnà', 'canton' => 'GR'), + '7558' => array('town' => 'Strada', 'canton' => 'GR'), + '7559' => array('town' => 'Tschlin', 'canton' => 'GR'), + '7560' => array('town' => 'Martina', 'canton' => 'GR'), + '7562' => array('town' => 'Samnaun-Compatsch', 'canton' => 'GR'), + '7563' => array('town' => 'Samnaun Dorf', 'canton' => 'GR'), + '7602' => array('town' => 'Casaccia', 'canton' => 'GR'), + '7603' => array('town' => 'Vicosoprano', 'canton' => 'GR'), + '7604' => array('town' => 'Borgonovo', 'canton' => 'GR'), + '7605' => array('town' => 'Stampa', 'canton' => 'GR'), + '7606' => array('town' => 'Promontogno', 'canton' => 'GR'), + '7610' => array('town' => 'Soglio', 'canton' => 'GR'), + '7608' => array('town' => 'Castasegna', 'canton' => 'GR'), + '7742' => array('town' => 'Poschiavo', 'canton' => 'GR'), + '7743' => array('town' => 'Brusio', 'canton' => 'GR'), + '7747' => array('town' => 'Viano', 'canton' => 'GR'), + '7744' => array('town' => 'Campocologno', 'canton' => 'GR'), + '7710' => array('town' => 'Ospizio Bernina', 'canton' => 'GR'), + '7741' => array('town' => 'S. Carlo GR', 'canton' => 'GR'), + '7745' => array('town' => 'Li Curt', 'canton' => 'GR'), + '7746' => array('town' => 'Le Prese', 'canton' => 'GR'), + '7748' => array('town' => 'Campascio', 'canton' => 'GR'), + '8000' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8001' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8002' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8003' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8004' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8005' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8006' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8008' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8010' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8020' => array('town' => 'Zürich 1', 'canton' => 'ZH'), + '8016' => array('town' => 'Zürich 16 Zust', 'canton' => 'ZH'), + '8080' => array('town' => 'Zürich 80', 'canton' => 'ZH'), + '8021' => array('town' => 'Zürich 1 Sihlpost', 'canton' => 'ZH'), + '8022' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8023' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8024' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8026' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8027' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8030' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8031' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8032' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8033' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8034' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8036' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8037' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8038' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8039' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8040' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8041' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8042' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8044' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8045' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8046' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8047' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8048' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8049' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8050' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8051' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8052' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8053' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8055' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8057' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8058' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8061' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8063' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8064' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8065' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8088' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8090' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8091' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8092' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8093' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8099' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8102' => array('town' => 'Oberengstringen', 'canton' => 'ZH'), + '8103' => array('town' => 'Unterengstringen', 'canton' => 'ZH'), + '8104' => array('town' => 'Weiningen ZH', 'canton' => 'ZH'), + '8105' => array('town' => 'Regensdorf', 'canton' => 'ZH'), + '8107' => array('town' => 'Buchs ZH', 'canton' => 'ZH'), + '8108' => array('town' => 'Dällikon', 'canton' => 'ZH'), + '8112' => array('town' => 'Otelfingen', 'canton' => 'ZH'), + '8113' => array('town' => 'Boppelsen', 'canton' => 'ZH'), + '8114' => array('town' => 'Dänikon ZH', 'canton' => 'ZH'), + '8115' => array('town' => 'Hüttikon', 'canton' => 'ZH'), + '5436' => array('town' => 'Würenlos', 'canton' => 'AG'), + '8117' => array('town' => 'Fällanden', 'canton' => 'ZH'), + '8121' => array('town' => 'Benglen', 'canton' => 'ZH'), + '8122' => array('town' => 'Binz', 'canton' => 'ZH'), + '8123' => array('town' => 'Ebmatingen', 'canton' => 'ZH'), + '8124' => array('town' => 'Maur', 'canton' => 'ZH'), + '8125' => array('town' => 'Zollikerberg', 'canton' => 'ZH'), + '8126' => array('town' => 'Zumikon', 'canton' => 'ZH'), + '8127' => array('town' => 'Forch', 'canton' => 'ZH'), + '8132' => array('town' => 'Hinteregg', 'canton' => 'ZH'), + '8133' => array('town' => 'Esslingen', 'canton' => 'ZH'), + '8134' => array('town' => 'Adliswil', 'canton' => 'ZH'), + '8135' => array('town' => 'Langnau am Albis', 'canton' => 'ZH'), + '8136' => array('town' => 'Gattikon', 'canton' => 'ZH'), + '8143' => array('town' => 'Uetliberg', 'canton' => 'ZH'), + '8142' => array('town' => 'Uitikon Waldegg', 'canton' => 'ZH'), + '8152' => array('town' => 'Glattbrugg', 'canton' => 'ZH'), + '8153' => array('town' => 'Rümlang', 'canton' => 'ZH'), + '8154' => array('town' => 'Oberglatt ZH', 'canton' => 'ZH'), + '8155' => array('town' => 'Niederhasli', 'canton' => 'ZH'), + '8156' => array('town' => 'Oberhasli', 'canton' => 'ZH'), + '8157' => array('town' => 'Dielsdorf', 'canton' => 'ZH'), + '8158' => array('town' => 'Regensberg', 'canton' => 'ZH'), + '8162' => array('town' => 'Steinmaur', 'canton' => 'ZH'), + '8164' => array('town' => 'Bachs', 'canton' => 'ZH'), + '8165' => array('town' => 'Schöfflisdorf', 'canton' => 'ZH'), + '8166' => array('town' => 'Niederweningen', 'canton' => 'ZH'), + '8172' => array('town' => 'Niederglatt ZH', 'canton' => 'ZH'), + '8173' => array('town' => 'Neerach', 'canton' => 'ZH'), + '8174' => array('town' => 'Stadel', 'canton' => 'ZH'), + '8175' => array('town' => 'Windlach', 'canton' => 'ZH'), + '8180' => array('town' => 'Bülach', 'canton' => 'ZH'), + '8181' => array('town' => 'Höri', 'canton' => 'ZH'), + '8182' => array('town' => 'Hochfelden', 'canton' => 'ZH'), + '8184' => array('town' => 'Bachenbülach', 'canton' => 'ZH'), + '8185' => array('town' => 'Winkel', 'canton' => 'ZH'), + '8192' => array('town' => 'Glattfelden', 'canton' => 'ZH'), + '8193' => array('town' => 'Eglisau', 'canton' => 'ZH'), + '8194' => array('town' => 'Hüntwangen', 'canton' => 'ZH'), + '8195' => array('town' => 'Wasterkingen', 'canton' => 'ZH'), + '8196' => array('town' => 'Wil ZH', 'canton' => 'ZH'), + '8197' => array('town' => 'Rafz', 'canton' => 'ZH'), + '8200' => array('town' => 'Schaffhausen', 'canton' => 'SH'), + '8201' => array('town' => 'Schaffhausen', 'canton' => 'SH'), + '8202' => array('town' => 'Schaffhausen', 'canton' => 'SH'), + '8203' => array('town' => 'Schaffhausen', 'canton' => 'SH'), + '8204' => array('town' => 'Schaffhausen', 'canton' => 'SH'), + '8205' => array('town' => 'Schaffhausen', 'canton' => 'SH'), + '8207' => array('town' => 'Schaffhausen', 'canton' => 'SH'), + '8208' => array('town' => 'Schaffhausen', 'canton' => 'SH'), + '8219' => array('town' => 'Trasadingen', 'canton' => 'SH'), + '8228' => array('town' => 'Beggingen', 'canton' => 'SH'), + '8231' => array('town' => 'Hemmental', 'canton' => 'SH'), + '8234' => array('town' => 'Stetten SH', 'canton' => 'SH'), + '8235' => array('town' => 'Lohn SH', 'canton' => 'SH'), + '8236' => array('town' => 'Opfertshofen SH', 'canton' => 'SH'), + '8242' => array('town' => 'Bibern SH', 'canton' => 'SH'), + '8243' => array('town' => 'Altdorf SH', 'canton' => 'SH'), + '8239' => array('town' => 'Dörflingen', 'canton' => 'SH'), + '8212' => array('town' => 'Neuhausen', 'canton' => 'SH'), + '8213' => array('town' => 'Neunkirch', 'canton' => 'SH'), + '8214' => array('town' => 'Gächlingen', 'canton' => 'SH'), + '8215' => array('town' => 'Hallau', 'canton' => 'SH'), + '8216' => array('town' => 'Oberhallau', 'canton' => 'SH'), + '8217' => array('town' => 'Wilchingen', 'canton' => 'SH'), + '8218' => array('town' => 'Osterfingen', 'canton' => 'SH'), + '8222' => array('town' => 'Beringen', 'canton' => 'SH'), + '8223' => array('town' => 'Guntmadingen', 'canton' => 'SH'), + '8224' => array('town' => 'Löhningen', 'canton' => 'SH'), + '8225' => array('town' => 'Siblingen', 'canton' => 'SH'), + '8226' => array('town' => 'Schleitheim', 'canton' => 'SH'), + '8232' => array('town' => 'Merishausen', 'canton' => 'SH'), + '8233' => array('town' => 'Bargen SH', 'canton' => 'SH'), + '8240' => array('town' => 'Thayngen', 'canton' => 'SH'), + '8241' => array('town' => 'Barzheim', 'canton' => 'SH'), + '8245' => array('town' => 'Feuerthalen', 'canton' => 'ZH'), + '8246' => array('town' => 'Langwiesen', 'canton' => 'ZH'), + '8247' => array('town' => 'Flurlingen', 'canton' => 'ZH'), + '8252' => array('town' => 'Schlatt TG', 'canton' => 'TG'), + '8254' => array('town' => 'Basadingen', 'canton' => 'TG'), + '8259' => array('town' => 'Kaltenbach', 'canton' => 'TG'), + '8253' => array('town' => 'Diessenhofen', 'canton' => 'TG'), + '8255' => array('town' => 'Schlattingen', 'canton' => 'TG'), + '8260' => array('town' => 'Stein am Rhein', 'canton' => 'SH'), + '8261' => array('town' => 'Hemishofen', 'canton' => 'SH'), + '8262' => array('town' => 'Ramsen', 'canton' => 'SH'), + '8263' => array('town' => 'Buch SH', 'canton' => 'SH'), + '8264' => array('town' => 'Eschenz', 'canton' => 'TG'), + '8265' => array('town' => 'Mammern', 'canton' => 'TG'), + '8266' => array('town' => 'Steckborn', 'canton' => 'TG'), + '8267' => array('town' => 'Berlingen', 'canton' => 'TG'), + '8268' => array('town' => 'Mannenbach-Salenst', 'canton' => 'TG'), + '8272' => array('town' => 'Ermatingen', 'canton' => 'TG'), + '8273' => array('town' => 'Triboltingen', 'canton' => 'TG'), + '8274' => array('town' => 'Tägerwilen', 'canton' => 'TG'), + '8280' => array('town' => 'Kreuzlingen', 'canton' => 'TG'), + '8301' => array('town' => 'Glattzentrum', 'canton' => 'ZH'), + '8302' => array('town' => 'Kloten', 'canton' => 'ZH'), + '8303' => array('town' => 'Bassersdorf', 'canton' => 'ZH'), + '8304' => array('town' => 'Wallisellen', 'canton' => 'ZH'), + '8305' => array('town' => 'Dietlikon', 'canton' => 'ZH'), + '8306' => array('town' => 'Brüttisellen', 'canton' => 'ZH'), + '8307' => array('town' => 'Effretikon', 'canton' => 'ZH'), + '8315' => array('town' => 'Lindau', 'canton' => 'ZH'), + '8308' => array('town' => 'Illnau', 'canton' => 'ZH'), + '8309' => array('town' => 'Nürensdorf', 'canton' => 'ZH'), + '8310' => array('town' => 'Kemptthal', 'canton' => 'ZH'), + '8312' => array('town' => 'Winterberg ZH', 'canton' => 'ZH'), + '8311' => array('town' => 'Brütten', 'canton' => 'ZH'), + '8314' => array('town' => 'Kyburg', 'canton' => 'ZH'), + '8130' => array('town' => 'Zumikon Y. Rocher', 'canton' => 'ZH'), + '8320' => array('town' => 'Fehraltorf', 'canton' => 'ZH'), + '8489' => array('town' => 'Wildberg', 'canton' => 'ZH'), + '8322' => array('town' => 'Madetswil', 'canton' => 'ZH'), + '8330' => array('town' => 'Pfäffikon ZH', 'canton' => 'ZH'), + '8331' => array('town' => 'Auslikon', 'canton' => 'ZH'), + '8332' => array('town' => 'Russikon', 'canton' => 'ZH'), + '8335' => array('town' => 'Hittnau', 'canton' => 'ZH'), + '8340' => array('town' => 'Hinwil', 'canton' => 'ZH'), + '8342' => array('town' => 'Wernetshausen', 'canton' => 'ZH'), + '8344' => array('town' => 'Bäretswil', 'canton' => 'ZH'), + '8345' => array('town' => 'Adetswil', 'canton' => 'ZH'), + '8352' => array('town' => 'Elsau', 'canton' => 'ZH'), + '8353' => array('town' => 'Elgg', 'canton' => 'ZH'), + '8354' => array('town' => 'Hofstetten ZH', 'canton' => 'ZH'), + '8355' => array('town' => 'Aadorf', 'canton' => 'TG'), + '8356' => array('town' => 'Ettenhausen TG', 'canton' => 'TG'), + '8357' => array('town' => 'Guntershausen', 'canton' => 'TG'), + '8360' => array('town' => 'Eschlikon TG', 'canton' => 'TG'), + '8362' => array('town' => 'Balterswil', 'canton' => 'TG'), + '8363' => array('town' => 'Bichelsee', 'canton' => 'TG'), + '8370' => array('town' => 'Sirnach', 'canton' => 'TG'), + '8372' => array('town' => 'Wiezikon b.Sirnach', 'canton' => 'TG'), + '8374' => array('town' => 'Oberwangen TG', 'canton' => 'TG'), + '8376' => array('town' => 'Fischingen', 'canton' => 'TG'), + '8400' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8401' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8402' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8404' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8405' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8406' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8408' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8409' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8410' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8411' => array('town' => 'Winterthur', 'canton' => 'ZH'), + '8412' => array('town' => 'Aesch (Neftenbach)', 'canton' => 'ZH'), + '8413' => array('town' => 'Neftenbach', 'canton' => 'ZH'), + '8414' => array('town' => 'Buch am Irchel', 'canton' => 'ZH'), + '8415' => array('town' => 'Berg am Irchel', 'canton' => 'ZH'), + '8416' => array('town' => 'Flaach', 'canton' => 'ZH'), + '8418' => array('town' => 'Schlatt', 'canton' => 'ZH'), + '8422' => array('town' => 'Pfungen', 'canton' => 'ZH'), + '8421' => array('town' => 'Dättlikon', 'canton' => 'ZH'), + '8423' => array('town' => 'Embrach-Embraport', 'canton' => 'ZH'), + '8424' => array('town' => 'Embrach', 'canton' => 'ZH'), + '8425' => array('town' => 'Oberembrach', 'canton' => 'ZH'), + '8426' => array('town' => 'Lufingen', 'canton' => 'ZH'), + '8427' => array('town' => 'Rorbas-Freienstein', 'canton' => 'ZH'), + '8428' => array('town' => 'Teufen ZH', 'canton' => 'ZH'), + '8187' => array('town' => 'Weiach', 'canton' => 'ZH'), + '5466' => array('town' => 'Kaiserstuhl AG', 'canton' => 'AG'), + '5467' => array('town' => 'Fisibach', 'canton' => 'AG'), + '5332' => array('town' => 'Rekingen AG', 'canton' => 'AG'), + '5330' => array('town' => 'Bad Zurzach', 'canton' => 'AG'), + '5323' => array('town' => 'Rietheim', 'canton' => 'AG'), + '5464' => array('town' => 'Rümikon AG', 'canton' => 'AG'), + '5465' => array('town' => 'Mellikon', 'canton' => 'AG'), + '5463' => array('town' => 'Wislikofen', 'canton' => 'AG'), + '5462' => array('town' => 'Siglistorf', 'canton' => 'AG'), + '5333' => array('town' => 'Baldingen', 'canton' => 'AG'), + '5334' => array('town' => 'Böbikon', 'canton' => 'AG'), + '8442' => array('town' => 'Hettlingen', 'canton' => 'ZH'), + '8444' => array('town' => 'Henggart', 'canton' => 'ZH'), + '8447' => array('town' => 'Dachsen', 'canton' => 'ZH'), + '8248' => array('town' => 'Uhwiesen', 'canton' => 'ZH'), + '8450' => array('town' => 'Andelfingen', 'canton' => 'ZH'), + '8453' => array('town' => 'Alten', 'canton' => 'ZH'), + '8451' => array('town' => 'Kleinandelfingen', 'canton' => 'ZH'), + '8452' => array('town' => 'Adlikon', 'canton' => 'ZH'), + '8457' => array('town' => 'Humlikon', 'canton' => 'ZH'), + '8458' => array('town' => 'Dorf', 'canton' => 'ZH'), + '8459' => array('town' => 'Volken', 'canton' => 'ZH'), + '8454' => array('town' => 'Buchberg', 'canton' => 'SH'), + '8455' => array('town' => 'Rüdlingen', 'canton' => 'SH'), + '8460' => array('town' => 'Marthalen', 'canton' => 'ZH'), + '8464' => array('town' => 'Ellikon am Rhein', 'canton' => 'ZH'), + '8461' => array('town' => 'Oerlingen', 'canton' => 'ZH'), + '8465' => array('town' => 'Rudolfingen', 'canton' => 'ZH'), + '8466' => array('town' => 'Trüllikon', 'canton' => 'ZH'), + '8462' => array('town' => 'Rheinau', 'canton' => 'ZH'), + '8463' => array('town' => 'Benken ZH', 'canton' => 'ZH'), + '8472' => array('town' => 'Seuzach', 'canton' => 'ZH'), + '8474' => array('town' => 'Dinhard', 'canton' => 'ZH'), + '8475' => array('town' => 'Ossingen', 'canton' => 'ZH'), + '8476' => array('town' => 'Unterstammheim', 'canton' => 'ZH'), + '8477' => array('town' => 'Oberstammheim', 'canton' => 'ZH'), + '8471' => array('town' => 'Rutschwil', 'canton' => 'ZH'), + '8478' => array('town' => 'Thalheim', 'canton' => 'ZH'), + '8479' => array('town' => 'Altikon', 'canton' => 'ZH'), + '8467' => array('town' => 'Truttikon', 'canton' => 'ZH'), + '8468' => array('town' => 'Guntalingen', 'canton' => 'ZH'), + '8482' => array('town' => 'Sennhof', 'canton' => 'ZH'), + '8483' => array('town' => 'Kollbrunn', 'canton' => 'ZH'), + '8484' => array('town' => 'Weisslingen', 'canton' => 'ZH'), + '8486' => array('town' => 'Rikon im Tösstal', 'canton' => 'ZH'), + '8487' => array('town' => 'Rämismühle', 'canton' => 'ZH'), + '8488' => array('town' => 'Turbenthal', 'canton' => 'ZH'), + '8492' => array('town' => 'Wila', 'canton' => 'ZH'), + '8493' => array('town' => 'Saland', 'canton' => 'ZH'), + '8494' => array('town' => 'Bauma', 'canton' => 'ZH'), + '8496' => array('town' => 'Steg im Tösstal', 'canton' => 'ZH'), + '8497' => array('town' => 'Fischenthal', 'canton' => 'ZH'), + '8498' => array('town' => 'Gibswil-Ried', 'canton' => 'ZH'), + '8495' => array('town' => 'Schmidrüti', 'canton' => 'ZH'), + '8499' => array('town' => 'Sternenberg', 'canton' => 'ZH'), + '8500' => array('town' => 'Frauenfeld', 'canton' => 'TG'), + '8501' => array('town' => 'Frauenfeld', 'canton' => 'TG'), + '8502' => array('town' => 'Frauenfeld', 'canton' => 'TG'), + '8503' => array('town' => 'Frauenfeld', 'canton' => 'TG'), + '8505' => array('town' => 'Pfyn', 'canton' => 'TG'), + '8506' => array('town' => 'Lanzenneunforn', 'canton' => 'TG'), + '8507' => array('town' => 'Hörhausen', 'canton' => 'TG'), + '8508' => array('town' => 'Homburg', 'canton' => 'TG'), + '8512' => array('town' => 'Thundorf', 'canton' => 'TG'), + '8514' => array('town' => 'Amlikon-Bissegg', 'canton' => 'TG'), + '8522' => array('town' => 'Häuslenen', 'canton' => 'TG'), + '8523' => array('town' => 'Hagenbuch ZH', 'canton' => 'ZH'), + '8524' => array('town' => 'Uesslingen', 'canton' => 'TG'), + '8525' => array('town' => 'Niederneunforn', 'canton' => 'TG'), + '8526' => array('town' => 'Oberneunforn', 'canton' => 'TG'), + '8532' => array('town' => 'Warth', 'canton' => 'TG'), + '8535' => array('town' => 'Herdern', 'canton' => 'TG'), + '8536' => array('town' => 'Hüttwilen', 'canton' => 'TG'), + '8537' => array('town' => 'Nussbaumen TG', 'canton' => 'TG'), + '8542' => array('town' => 'Wiesendangen', 'canton' => 'ZH'), + '8545' => array('town' => 'Rickenbach ZH', 'canton' => 'ZH'), + '8544' => array('town' => 'Attikon', 'canton' => 'ZH'), + '8546' => array('town' => 'Islikon', 'canton' => 'TG'), + '8547' => array('town' => 'Gachnang', 'canton' => 'TG'), + '8548' => array('town' => 'Ellikon a d Thur', 'canton' => 'ZH'), + '8552' => array('town' => 'Felben-Wellhausen', 'canton' => 'TG'), + '8553' => array('town' => 'Hüttlingen-Mettdf', 'canton' => 'TG'), + '8554' => array('town' => 'Müllheim-Wigoltgn', 'canton' => 'TG'), + '8555' => array('town' => 'Müllheim Dorf', 'canton' => 'TG'), + '8556' => array('town' => 'Wigoltingen', 'canton' => 'TG'), + '8564' => array('town' => 'Lipperswil', 'canton' => 'TG'), + '8558' => array('town' => 'Raperswilen', 'canton' => 'TG'), + '8269' => array('town' => 'Fruthwilen', 'canton' => 'TG'), + '8560' => array('town' => 'Märstetten', 'canton' => 'TG'), + '8561' => array('town' => 'Ottoberg', 'canton' => 'TG'), + '8565' => array('town' => 'Hugelshofen', 'canton' => 'TG'), + '8566' => array('town' => 'Dotnacht', 'canton' => 'TG'), + '8570' => array('town' => 'Weinfelden', 'canton' => 'TG'), + '8572' => array('town' => 'Berg TG', 'canton' => 'TG'), + '8573' => array('town' => 'Siegershausen', 'canton' => 'TG'), + '8574' => array('town' => 'Lengwil-Oberhofen', 'canton' => 'TG'), + '8575' => array('town' => 'Bürglen TG', 'canton' => 'TG'), + '8576' => array('town' => 'Mauren TG', 'canton' => 'TG'), + '8577' => array('town' => 'Schönholzerswilen', 'canton' => 'TG'), + '9217' => array('town' => 'Neukirch', 'canton' => 'TG'), + '8580' => array('town' => 'Amriswil', 'canton' => 'TG'), + '8582' => array('town' => 'Dozwil', 'canton' => 'TG'), + '8581' => array('town' => 'Schocherswil', 'canton' => 'TG'), + '8588' => array('town' => 'Zihlschlacht', 'canton' => 'TG'), + '8589' => array('town' => 'Sitterdorf', 'canton' => 'TG'), + '8583' => array('town' => 'Sulgen', 'canton' => 'TG'), + '8584' => array('town' => 'Leimbach TG', 'canton' => 'TG'), + '8585' => array('town' => 'Mattwil', 'canton' => 'TG'), + '8586' => array('town' => 'Erlen', 'canton' => 'TG'), + '8587' => array('town' => 'Oberaach', 'canton' => 'TG'), + '8590' => array('town' => 'Romanshorn', 'canton' => 'TG'), + '8599' => array('town' => 'Salmsach', 'canton' => 'TG'), + '8592' => array('town' => 'Uttwil', 'canton' => 'TG'), + '8593' => array('town' => 'Kesswil', 'canton' => 'TG'), + '8594' => array('town' => 'Güttingen', 'canton' => 'TG'), + '8595' => array('town' => 'Altnau', 'canton' => 'TG'), + '8596' => array('town' => 'Scherzingen', 'canton' => 'TG'), + '8597' => array('town' => 'Landschlacht', 'canton' => 'TG'), + '8598' => array('town' => 'Bottighofen', 'canton' => 'TG'), + '8600' => array('town' => 'Dübendorf', 'canton' => 'ZH'), + '8602' => array('town' => 'Wangen ZH', 'canton' => 'ZH'), + '8603' => array('town' => 'Schwerzenbach', 'canton' => 'ZH'), + '8604' => array('town' => 'Volketswil', 'canton' => 'ZH'), + '8605' => array('town' => 'Gutenswil', 'canton' => 'ZH'), + '8606' => array('town' => 'Nänikon', 'canton' => 'ZH'), + '8607' => array('town' => 'Aathal-Seegräben', 'canton' => 'ZH'), + '8608' => array('town' => 'Bubikon', 'canton' => 'ZH'), + '8610' => array('town' => 'Uster', 'canton' => 'ZH'), + '8612' => array('town' => 'Uster 2', 'canton' => 'ZH'), + '8613' => array('town' => 'Uster 3', 'canton' => 'ZH'), + '8614' => array('town' => 'Bertschikon Gossau', 'canton' => 'ZH'), + '8615' => array('town' => 'Wermatswil', 'canton' => 'ZH'), + '8616' => array('town' => 'Riedikon', 'canton' => 'ZH'), + '8617' => array('town' => 'Mönchaltorf', 'canton' => 'ZH'), + '8618' => array('town' => 'Oetwil am See', 'canton' => 'ZH'), + '8620' => array('town' => 'Wetzikon ZH', 'canton' => 'ZH'), + '8621' => array('town' => 'Wetzikon ZH 4', 'canton' => 'ZH'), + '8622' => array('town' => 'Wetzikon ZH', 'canton' => 'ZH'), + '8623' => array('town' => 'Wetzikon ZH', 'canton' => 'ZH'), + '8624' => array('town' => 'Grüt (Gossau ZH)', 'canton' => 'ZH'), + '8625' => array('town' => 'Gossau ZH', 'canton' => 'ZH'), + '8626' => array('town' => 'Ottikon', 'canton' => 'ZH'), + '8627' => array('town' => 'Grüningen', 'canton' => 'ZH'), + '8630' => array('town' => 'Rüti ZH', 'canton' => 'ZH'), + '8632' => array('town' => 'Tann', 'canton' => 'ZH'), + '8633' => array('town' => 'Wolfhausen', 'canton' => 'ZH'), + '8634' => array('town' => 'Hombrechtikon', 'canton' => 'ZH'), + '8635' => array('town' => 'Dürnten', 'canton' => 'ZH'), + '8636' => array('town' => 'Wald ZH', 'canton' => 'ZH'), + '8639' => array('town' => 'Faltigberg', 'canton' => 'ZH'), + '8637' => array('town' => 'Laupen ZH', 'canton' => 'ZH'), + '8638' => array('town' => 'Goldingen', 'canton' => 'SG'), + '8640' => array('town' => 'Rapperswil SG', 'canton' => 'SG'), + '8645' => array('town' => 'Jona', 'canton' => 'SG'), + '8646' => array('town' => 'Wagen', 'canton' => 'SG'), + '8700' => array('town' => 'Küsnacht ZH', 'canton' => 'ZH'), + '8702' => array('town' => 'Zollikon', 'canton' => 'ZH'), + '8703' => array('town' => 'Erlenbach ZH', 'canton' => 'ZH'), + '8704' => array('town' => 'Herrliberg', 'canton' => 'ZH'), + '8706' => array('town' => 'Meilen', 'canton' => 'ZH'), + '8707' => array('town' => 'Uetikon am See', 'canton' => 'ZH'), + '8708' => array('town' => 'Männedorf', 'canton' => 'ZH'), + '8712' => array('town' => 'Stäfa', 'canton' => 'ZH'), + '8713' => array('town' => 'Uerikon', 'canton' => 'ZH'), + '8714' => array('town' => 'Feldbach', 'canton' => 'ZH'), + '8715' => array('town' => 'Bollingen', 'canton' => 'SG'), + '8716' => array('town' => 'Schmerikon', 'canton' => 'SG'), + '8717' => array('town' => 'Benken SG', 'canton' => 'SG'), + '8718' => array('town' => 'Schänis', 'canton' => 'SG'), + '8722' => array('town' => 'Kaltbrunn', 'canton' => 'SG'), + '8723' => array('town' => 'Rufi', 'canton' => 'SG'), + '8725' => array('town' => 'Ernetschwil', 'canton' => 'SG'), + '8726' => array('town' => 'Ricken SG', 'canton' => 'SG'), + '8727' => array('town' => 'Walde SG', 'canton' => 'SG'), + '8730' => array('town' => 'Uznach', 'canton' => 'SG'), + '8732' => array('town' => 'Neuhaus SG', 'canton' => 'SG'), + '8733' => array('town' => 'Eschenbach SG', 'canton' => 'SG'), + '8734' => array('town' => 'Ermenswil', 'canton' => 'SG'), + '8735' => array('town' => 'St. Gallenkappel', 'canton' => 'SG'), + '8737' => array('town' => 'Gommiswald', 'canton' => 'SG'), + '8738' => array('town' => 'Uetliburg SG', 'canton' => 'SG'), + '8739' => array('town' => 'Rieden SG', 'canton' => 'SG'), + '8740' => array('town' => 'Uznach Vögele AG', 'canton' => 'SG'), + '8750' => array('town' => 'Glarus', 'canton' => 'GL'), + '8751' => array('town' => 'Urnerboden', 'canton' => 'UR'), + '8752' => array('town' => 'Näfels', 'canton' => 'GL'), + '8753' => array('town' => 'Mollis', 'canton' => 'GL'), + '8754' => array('town' => 'Netstal', 'canton' => 'GL'), + '8755' => array('town' => 'Ennenda', 'canton' => 'GL'), + '8756' => array('town' => 'Mitlödi', 'canton' => 'GL'), + '8762' => array('town' => 'Schwanden GL', 'canton' => 'GL'), + '8765' => array('town' => 'Engi', 'canton' => 'GL'), + '8766' => array('town' => 'Matt', 'canton' => 'GL'), + '8767' => array('town' => 'Elm', 'canton' => 'GL'), + '8772' => array('town' => 'Nidfurn', 'canton' => 'GL'), + '8773' => array('town' => 'Haslen GL', 'canton' => 'GL'), + '8775' => array('town' => 'Luchsingen', 'canton' => 'GL'), + '8777' => array('town' => 'Diesbach GL', 'canton' => 'GL'), + '8782' => array('town' => 'Rüti GL', 'canton' => 'GL'), + '8783' => array('town' => 'Linthal', 'canton' => 'GL'), + '8784' => array('town' => 'Braunwald', 'canton' => 'GL'), + '8800' => array('town' => 'Thalwil', 'canton' => 'ZH'), + '8802' => array('town' => 'Kilchberg ZH', 'canton' => 'ZH'), + '8803' => array('town' => 'Rüschlikon', 'canton' => 'ZH'), + '8804' => array('town' => 'Au ZH', 'canton' => 'ZH'), + '8805' => array('town' => 'Richterswil', 'canton' => 'ZH'), + '8806' => array('town' => 'Bäch SZ', 'canton' => 'SZ'), + '8807' => array('town' => 'Freienbach', 'canton' => 'SZ'), + '8808' => array('town' => 'Pfäffikon SZ', 'canton' => 'SZ'), + '8810' => array('town' => 'Horgen', 'canton' => 'ZH'), + '8812' => array('town' => 'Horgen', 'canton' => 'ZH'), + '8813' => array('town' => 'Horgen', 'canton' => 'ZH'), + '8815' => array('town' => 'Horgenberg', 'canton' => 'ZH'), + '8816' => array('town' => 'Hirzel', 'canton' => 'ZH'), + '8820' => array('town' => 'Wädenswil', 'canton' => 'ZH'), + '8824' => array('town' => 'Schönenberg ZH', 'canton' => 'ZH'), + '8825' => array('town' => 'Hütten', 'canton' => 'ZH'), + '8832' => array('town' => 'Wollerau', 'canton' => 'SZ'), + '8833' => array('town' => 'Samstagern', 'canton' => 'ZH'), + '8834' => array('town' => 'Schindellegi', 'canton' => 'SZ'), + '8835' => array('town' => 'Feusisberg', 'canton' => 'SZ'), + '8836' => array('town' => 'Bennau', 'canton' => 'SZ'), + '8840' => array('town' => 'Einsiedeln', 'canton' => 'SZ'), + '8849' => array('town' => 'Alpthal', 'canton' => 'SZ'), + '8846' => array('town' => 'Willerzell', 'canton' => 'SZ'), + '8847' => array('town' => 'Egg SZ', 'canton' => 'SZ'), + '8841' => array('town' => 'Gross', 'canton' => 'SZ'), + '8844' => array('town' => 'Euthal', 'canton' => 'SZ'), + '8845' => array('town' => 'Studen SZ', 'canton' => 'SZ'), + '8842' => array('town' => 'Unteriberg', 'canton' => 'SZ'), + '8843' => array('town' => 'Oberiberg', 'canton' => 'SZ'), + '8852' => array('town' => 'Altendorf', 'canton' => 'SZ'), + '8853' => array('town' => 'Lachen SZ', 'canton' => 'SZ'), + '8854' => array('town' => 'Siebnen', 'canton' => 'SZ'), + '8855' => array('town' => 'Wangen SZ', 'canton' => 'SZ'), + '8856' => array('town' => 'Tuggen', 'canton' => 'SZ'), + '8857' => array('town' => 'Vorderthal', 'canton' => 'SZ'), + '8858' => array('town' => 'Innerthal', 'canton' => 'SZ'), + '8862' => array('town' => 'Schübelbach', 'canton' => 'SZ'), + '8863' => array('town' => 'Buttikon SZ', 'canton' => 'SZ'), + '8864' => array('town' => 'Reichenburg', 'canton' => 'SZ'), + '8865' => array('town' => 'Bilten', 'canton' => 'GL'), + '8866' => array('town' => 'Ziegelbrücke', 'canton' => 'GL'), + '8867' => array('town' => 'Niederurnen', 'canton' => 'GL'), + '8868' => array('town' => 'Oberurnen', 'canton' => 'GL'), + '8872' => array('town' => 'Weesen', 'canton' => 'SG'), + '8873' => array('town' => 'Amden', 'canton' => 'SG'), + '8874' => array('town' => 'Mühlehorn', 'canton' => 'GL'), + '8758' => array('town' => 'Obstalden', 'canton' => 'GL'), + '8757' => array('town' => 'Filzbach', 'canton' => 'GL'), + '8877' => array('town' => 'Murg', 'canton' => 'SG'), + '8878' => array('town' => 'Quinten', 'canton' => 'SG'), + '8880' => array('town' => 'Walenstadt', 'canton' => 'SG'), + '8881' => array('town' => 'Walenstadtberg', 'canton' => 'SG'), + '8882' => array('town' => 'Unterterzen', 'canton' => 'SG'), + '8883' => array('town' => 'Quarten', 'canton' => 'SG'), + '8884' => array('town' => 'Oberterzen', 'canton' => 'SG'), + '8885' => array('town' => 'Mols', 'canton' => 'SG'), + '8887' => array('town' => 'Mels', 'canton' => 'SG'), + '8886' => array('town' => 'Mädris-Vermol', 'canton' => 'SG'), + '8889' => array('town' => 'Plons', 'canton' => 'SG'), + '8888' => array('town' => 'Heiligkreuz (Mels)', 'canton' => 'SG'), + '8890' => array('town' => 'Flums', 'canton' => 'SG'), + '8892' => array('town' => 'Berschis', 'canton' => 'SG'), + '8893' => array('town' => 'Flums Hochwiese', 'canton' => 'SG'), + '8894' => array('town' => 'Flumserberg Saxli', 'canton' => 'SG'), + '8895' => array('town' => 'Flumserberg Portel', 'canton' => 'SG'), + '8896' => array('town' => 'Flumserberg Bergh', 'canton' => 'SG'), + '8897' => array('town' => 'Flumserberg Theim', 'canton' => 'SG'), + '8898' => array('town' => 'Flumserberg Tboden', 'canton' => 'SG'), + '8902' => array('town' => 'Urdorf', 'canton' => 'ZH'), + '8903' => array('town' => 'Birmensdorf ZH', 'canton' => 'ZH'), + '8904' => array('town' => 'Aesch ZH', 'canton' => 'ZH'), + '8905' => array('town' => 'Arni-Islisberg', 'canton' => 'AG'), + '8906' => array('town' => 'Bonstetten', 'canton' => 'ZH'), + '8907' => array('town' => 'Wettswil', 'canton' => 'ZH'), + '8908' => array('town' => 'Hedingen', 'canton' => 'ZH'), + '8910' => array('town' => 'Affoltern am Albis', 'canton' => 'ZH'), + '8909' => array('town' => 'Zwillikon', 'canton' => 'ZH'), + '8911' => array('town' => 'Rifferswil', 'canton' => 'ZH'), + '8912' => array('town' => 'Obfelden', 'canton' => 'ZH'), + '8913' => array('town' => 'Ottenbach', 'canton' => 'ZH'), + '8914' => array('town' => 'Aeugst am Albis', 'canton' => 'ZH'), + '8915' => array('town' => 'Hausen am Albis', 'canton' => 'ZH'), + '8916' => array('town' => 'Jonen', 'canton' => 'AG'), + '8917' => array('town' => 'Oberlunkhofen', 'canton' => 'AG'), + '8918' => array('town' => 'Unterlunkhofen', 'canton' => 'AG'), + '8919' => array('town' => 'Rottenschwil', 'canton' => 'AG'), + '8925' => array('town' => 'Ebertswil', 'canton' => 'ZH'), + '8926' => array('town' => 'Kappel am Albis', 'canton' => 'ZH'), + '8932' => array('town' => 'Mettmenstetten', 'canton' => 'ZH'), + '8933' => array('town' => 'Maschwanden', 'canton' => 'ZH'), + '8934' => array('town' => 'Knonau', 'canton' => 'ZH'), + '8942' => array('town' => 'Oberrieden', 'canton' => 'ZH'), + '8951' => array('town' => 'Fahrweid', 'canton' => 'ZH'), + '8952' => array('town' => 'Schlieren', 'canton' => 'ZH'), + '8953' => array('town' => 'Dietikon', 'canton' => 'ZH'), + '8954' => array('town' => 'Geroldswil', 'canton' => 'ZH'), + '8955' => array('town' => 'Oetwil a.d. Limmat', 'canton' => 'ZH'), + '8956' => array('town' => 'Killwangen', 'canton' => 'AG'), + '8957' => array('town' => 'Spreitenbach', 'canton' => 'AG'), + '8962' => array('town' => 'Bergdietikon', 'canton' => 'AG'), + '8964' => array('town' => 'Rudolfstetten', 'canton' => 'AG'), + '8965' => array('town' => 'Berikon', 'canton' => 'AG'), + '8966' => array('town' => 'Oberwil-Lieli', 'canton' => 'AG'), + '8967' => array('town' => 'Widen', 'canton' => 'AG'), + '9000' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9001' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9004' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9006' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9007' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9008' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9009' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9010' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9011' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9012' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9013' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9014' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9015' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9016' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '9030' => array('town' => 'Abtwil SG', 'canton' => 'SG'), + '9032' => array('town' => 'Engelburg', 'canton' => 'SG'), + '9033' => array('town' => 'Untereggen', 'canton' => 'SG'), + '9034' => array('town' => 'Eggersriet', 'canton' => 'SG'), + '9035' => array('town' => 'Grub AR', 'canton' => 'AR'), + '9036' => array('town' => 'Grub SG', 'canton' => 'SG'), + '9037' => array('town' => 'Speicherschwendi', 'canton' => 'AR'), + '9038' => array('town' => 'Rehetobel', 'canton' => 'AR'), + '9042' => array('town' => 'Speicher', 'canton' => 'AR'), + '9043' => array('town' => 'Trogen', 'canton' => 'AR'), + '9044' => array('town' => 'Wald AR', 'canton' => 'AR'), + '9050' => array('town' => 'Appenzell', 'canton' => 'AI'), + '9052' => array('town' => 'Niederteufen', 'canton' => 'AR'), + '9053' => array('town' => 'Teufen AR', 'canton' => 'AR'), + '9054' => array('town' => 'Haslen AI', 'canton' => 'AI'), + '9055' => array('town' => 'Bühler', 'canton' => 'AR'), + '9056' => array('town' => 'Gais', 'canton' => 'AR'), + '9057' => array('town' => 'Weissbad', 'canton' => 'AI'), + '9058' => array('town' => 'Brülisau', 'canton' => 'AI'), + '9062' => array('town' => 'Lustmühle', 'canton' => 'AR'), + '9063' => array('town' => 'Stein AR', 'canton' => 'AR'), + '9064' => array('town' => 'Hundwil', 'canton' => 'AR'), + '9100' => array('town' => 'Herisau', 'canton' => 'AR'), + '9102' => array('town' => 'Herisau', 'canton' => 'AR'), + '9103' => array('town' => 'Schwellbrunn', 'canton' => 'AR'), + '9104' => array('town' => 'Waldstatt', 'canton' => 'AR'), + '9105' => array('town' => 'Schönengrund', 'canton' => 'AR'), + '9107' => array('town' => 'Urnäsch', 'canton' => 'AR'), + '9108' => array('town' => 'Gonten', 'canton' => 'AI'), + '9112' => array('town' => 'Schachen b.Herisau', 'canton' => 'AR'), + '9113' => array('town' => 'Degersheim', 'canton' => 'SG'), + '9114' => array('town' => 'Hoffeld', 'canton' => 'SG'), + '9115' => array('town' => 'Dicken', 'canton' => 'SG'), + '9116' => array('town' => 'Wolfertswil', 'canton' => 'SG'), + '9122' => array('town' => 'Mogelsberg', 'canton' => 'SG'), + '9123' => array('town' => 'Nassen', 'canton' => 'SG'), + '9125' => array('town' => 'Brunnadern', 'canton' => 'SG'), + '9126' => array('town' => 'Necker', 'canton' => 'SG'), + '9127' => array('town' => 'St. Peterzell', 'canton' => 'SG'), + '9633' => array('town' => 'Bächli (Hemberg)', 'canton' => 'SG'), + '9200' => array('town' => 'Gossau SG', 'canton' => 'SG'), + '9203' => array('town' => 'Niederwil SG', 'canton' => 'SG'), + '9204' => array('town' => 'Andwil SG', 'canton' => 'SG'), + '9205' => array('town' => 'Waldkirch', 'canton' => 'SG'), + '9212' => array('town' => 'Arnegg', 'canton' => 'SG'), + '9213' => array('town' => 'Hauptwil', 'canton' => 'TG'), + '9214' => array('town' => 'Kradolf-Schönenb.', 'canton' => 'TG'), + '9216' => array('town' => 'Heldswil', 'canton' => 'TG'), + '9215' => array('town' => 'Schönenberg TG', 'canton' => 'TG'), + '9220' => array('town' => 'Bischofszell', 'canton' => 'TG'), + '9223' => array('town' => 'Schweizersholz', 'canton' => 'TG'), + '9225' => array('town' => 'Wilen (Gottshaus)', 'canton' => 'TG'), + '9230' => array('town' => 'Flawil', 'canton' => 'SG'), + '9231' => array('town' => 'Egg (Flawil)', 'canton' => 'SG'), + '9604' => array('town' => 'Oberrindal', 'canton' => 'SG'), + '9240' => array('town' => 'Uzwil', 'canton' => 'SG'), + '9242' => array('town' => 'Oberuzwil', 'canton' => 'SG'), + '9248' => array('town' => 'Bichwil', 'canton' => 'SG'), + '9243' => array('town' => 'Jonschwil', 'canton' => 'SG'), + '9244' => array('town' => 'Niederuzwil', 'canton' => 'SG'), + '9245' => array('town' => 'Oberbüren', 'canton' => 'SG'), + '9246' => array('town' => 'Niederbüren', 'canton' => 'SG'), + '9247' => array('town' => 'Henau', 'canton' => 'SG'), + '9249' => array('town' => 'Algetshausen', 'canton' => 'SG'), + '9300' => array('town' => 'Wittenbach', 'canton' => 'SG'), + '9304' => array('town' => 'Bernhardzell', 'canton' => 'SG'), + '9305' => array('town' => 'Berg SG', 'canton' => 'SG'), + '9306' => array('town' => 'Freidorf TG', 'canton' => 'TG'), + '9315' => array('town' => 'Winden', 'canton' => 'TG'), + '9308' => array('town' => 'Lömmenschwil', 'canton' => 'SG'), + '9312' => array('town' => 'Häggenschwil', 'canton' => 'SG'), + '9313' => array('town' => 'Muolen', 'canton' => 'SG'), + '9314' => array('town' => 'Steinebrunn', 'canton' => 'TG'), + '9320' => array('town' => 'Arbon', 'canton' => 'TG'), + '9322' => array('town' => 'Egnach', 'canton' => 'TG'), + '9323' => array('town' => 'Steinach', 'canton' => 'SG'), + '9325' => array('town' => 'Roggwil TG', 'canton' => 'TG'), + '9326' => array('town' => 'Horn', 'canton' => 'TG'), + '9327' => array('town' => 'Tübach', 'canton' => 'SG'), + '9400' => array('town' => 'Rorschach', 'canton' => 'SG'), + '9404' => array('town' => 'Rorschacherberg', 'canton' => 'SG'), + '9402' => array('town' => 'Mörschwil', 'canton' => 'SG'), + '9403' => array('town' => 'Goldach', 'canton' => 'SG'), + '9405' => array('town' => 'Wienacht-Tobel', 'canton' => 'AR'), + '9410' => array('town' => 'Heiden', 'canton' => 'AR'), + '9411' => array('town' => 'Reute AR', 'canton' => 'AR'), + '9413' => array('town' => 'Oberegg', 'canton' => 'AI'), + '9414' => array('town' => 'Schachen b. Reute', 'canton' => 'AR'), + '9422' => array('town' => 'Staad SG', 'canton' => 'SG'), + '9423' => array('town' => 'Altenrhein', 'canton' => 'SG'), + '9424' => array('town' => 'Rheineck', 'canton' => 'SG'), + '9425' => array('town' => 'Thal', 'canton' => 'SG'), + '9426' => array('town' => 'Lutzenberg', 'canton' => 'AR'), + '9427' => array('town' => 'Wolfhalden', 'canton' => 'AR'), + '9428' => array('town' => 'Walzenhausen', 'canton' => 'AR'), + '9430' => array('town' => 'St. Margrethen SG', 'canton' => 'SG'), + '9434' => array('town' => 'Au SG', 'canton' => 'SG'), + '9435' => array('town' => 'Heerbrugg', 'canton' => 'SG'), + '9436' => array('town' => 'Balgach', 'canton' => 'SG'), + '9437' => array('town' => 'Marbach SG', 'canton' => 'SG'), + '9450' => array('town' => 'Lüchingen', 'canton' => 'SG'), + '9442' => array('town' => 'Berneck', 'canton' => 'SG'), + '9443' => array('town' => 'Widnau', 'canton' => 'SG'), + '9444' => array('town' => 'Diepoldsau', 'canton' => 'SG'), + '9445' => array('town' => 'Rebstein', 'canton' => 'SG'), + '9451' => array('town' => 'Kriessern', 'canton' => 'SG'), + '9452' => array('town' => 'Hinterforst', 'canton' => 'SG'), + '9453' => array('town' => 'Eichberg', 'canton' => 'SG'), + '9462' => array('town' => 'Montlingen', 'canton' => 'SG'), + '9463' => array('town' => 'Oberriet SG', 'canton' => 'SG'), + '9464' => array('town' => 'Rüthi (Rheintal)', 'canton' => 'SG'), + '9465' => array('town' => 'Salez', 'canton' => 'SG'), + '9466' => array('town' => 'Sennwald', 'canton' => 'SG'), + '9467' => array('town' => 'Frümsen', 'canton' => 'SG'), + '9468' => array('town' => 'Sax', 'canton' => 'SG'), + '9469' => array('town' => 'Haag (Rheintal)', 'canton' => 'SG'), + '9470' => array('town' => 'Buchs SG', 'canton' => 'SG'), + '9472' => array('town' => 'Grabs', 'canton' => 'SG'), + '9473' => array('town' => 'Gams', 'canton' => 'SG'), + '9475' => array('town' => 'Sevelen', 'canton' => 'SG'), + '9476' => array('town' => 'Weite', 'canton' => 'SG'), + '9477' => array('town' => 'Trübbach', 'canton' => 'SG'), + '9478' => array('town' => 'Azmoos', 'canton' => 'SG'), + '9479' => array('town' => 'Oberschan', 'canton' => 'SG'), + '9485' => array('town' => 'Nendeln', 'canton' => 'FL'), + '9486' => array('town' => 'Schaanwald', 'canton' => 'FL'), + '9487' => array('town' => 'Gamprin-Bendern', 'canton' => 'FL'), + '9488' => array('town' => 'Schellenberg', 'canton' => 'FL'), + '9490' => array('town' => 'Vaduz', 'canton' => 'FL'), + '9491' => array('town' => 'Ruggell', 'canton' => 'FL'), + '9492' => array('town' => 'Eschen', 'canton' => 'FL'), + '9493' => array('town' => 'Mauren FL', 'canton' => 'FL'), + '9494' => array('town' => 'Schaan', 'canton' => 'FL'), + '9495' => array('town' => 'Triesen', 'canton' => 'FL'), + '9496' => array('town' => 'Balzers', 'canton' => 'FL'), + '9497' => array('town' => 'Triesenberg', 'canton' => 'FL'), + '9500' => array('town' => 'Wil SG', 'canton' => 'SG'), + '9502' => array('town' => 'Braunau', 'canton' => 'TG'), + '9503' => array('town' => 'Stehrenberg', 'canton' => 'TG'), + '9504' => array('town' => 'Friltschen', 'canton' => 'TG'), + '9506' => array('town' => 'Lommis', 'canton' => 'TG'), + '9507' => array('town' => 'Stettfurt', 'canton' => 'TG'), + '9508' => array('town' => 'Weingarten-Kalth', 'canton' => 'TG'), + '9512' => array('town' => 'Rossrüti', 'canton' => 'SG'), + '9514' => array('town' => 'Wuppenau', 'canton' => 'TG'), + '9515' => array('town' => 'Hosenruck', 'canton' => 'TG'), + '9517' => array('town' => 'Mettlen', 'canton' => 'TG'), + '9565' => array('town' => 'Rothenhausen', 'canton' => 'TG'), + '9523' => array('town' => 'Züberwangen', 'canton' => 'SG'), + '9524' => array('town' => 'Zuzwil SG', 'canton' => 'SG'), + '9525' => array('town' => 'Lenggenwil', 'canton' => 'SG'), + '9526' => array('town' => 'Zuckenriet', 'canton' => 'SG'), + '9527' => array('town' => 'Niederhelfenschwil', 'canton' => 'SG'), + '9532' => array('town' => 'Rickenbach b. Wil', 'canton' => 'TG'), + '9533' => array('town' => 'Kirchberg SG', 'canton' => 'SG'), + '9534' => array('town' => 'Gähwil', 'canton' => 'SG'), + '9535' => array('town' => 'Wilen b. Wil', 'canton' => 'TG'), + '9536' => array('town' => 'Schwarzenbach SG', 'canton' => 'SG'), + '9542' => array('town' => 'Münchwilen TG', 'canton' => 'TG'), + '9543' => array('town' => 'St. Margarethen TG', 'canton' => 'TG'), + '9545' => array('town' => 'Wängi', 'canton' => 'TG'), + '9546' => array('town' => 'Tuttwil', 'canton' => 'TG'), + '9547' => array('town' => 'Wittenwil', 'canton' => 'TG'), + '9548' => array('town' => 'Matzingen', 'canton' => 'TG'), + '9552' => array('town' => 'Bronschhofen', 'canton' => 'SG'), + '9553' => array('town' => 'Bettwiesen', 'canton' => 'TG'), + '9554' => array('town' => 'Tägerschen', 'canton' => 'TG'), + '9555' => array('town' => 'Tobel', 'canton' => 'TG'), + '9556' => array('town' => 'Affeltrangen', 'canton' => 'TG'), + '9562' => array('town' => 'Märwil', 'canton' => 'TG'), + '9573' => array('town' => 'Littenheid', 'canton' => 'TG'), + '9601' => array('town' => 'Lütisburg Station', 'canton' => 'SG'), + '9602' => array('town' => 'Bazenheid', 'canton' => 'SG'), + '9606' => array('town' => 'Bütschwil', 'canton' => 'SG'), + '9607' => array('town' => 'Mosnang', 'canton' => 'SG'), + '9608' => array('town' => 'Ganterschwil', 'canton' => 'SG'), + '9612' => array('town' => 'Dreien', 'canton' => 'SG'), + '9613' => array('town' => 'Mühlrüti', 'canton' => 'SG'), + '9614' => array('town' => 'Libingen', 'canton' => 'SG'), + '9615' => array('town' => 'Dietfurt', 'canton' => 'SG'), + '9620' => array('town' => 'Lichtensteig', 'canton' => 'SG'), + '9621' => array('town' => 'Oberhelfenschwil', 'canton' => 'SG'), + '9622' => array('town' => 'Krinau', 'canton' => 'SG'), + '9630' => array('town' => 'Wattwil', 'canton' => 'SG'), + '9631' => array('town' => 'Ulisbach', 'canton' => 'SG'), + '9642' => array('town' => 'Ebnat-Kappel', 'canton' => 'SG'), + '9643' => array('town' => 'Krummenau', 'canton' => 'SG'), + '9650' => array('town' => 'Nesslau', 'canton' => 'SG'), + '9651' => array('town' => 'Ennetbühl', 'canton' => 'SG'), + '9655' => array('town' => 'Stein SG', 'canton' => 'SG'), + '9652' => array('town' => 'Neu St. Johann', 'canton' => 'SG'), + '9656' => array('town' => 'Alt St. Johann', 'canton' => 'SG'), + '9657' => array('town' => 'Unterwasser', 'canton' => 'SG'), + '9658' => array('town' => 'Wildhaus', 'canton' => 'SG'), + '3185' => array('town' => 'Schmitten FR', 'canton' => 'FR'), + '3113' => array('town' => 'Rubigen', 'canton' => 'BE'), + '6304' => array('town' => 'Zug', 'canton' => 'ZG'), + '6911' => array('town' => 'Campione', 'canton' => 'IT'), + '8238' => array('town' => 'Büsingen', 'canton' => 'DE'), + '6302' => array('town' => 'Zug', 'canton' => 'ZG'), + '6303' => array('town' => 'Zug', 'canton' => 'ZG'), + '1289' => array('town' => 'Genève Serv. Spéc.', 'canton' => 'GE'), + '7003' => array('town' => 'Chur Postauto', 'canton' => 'GR'), + '3024' => array('town' => 'Bern', 'canton' => 'BE'), + '1017' => array('town' => 'Lausanne Veillon', 'canton' => 'VD'), + '1099' => array('town' => 'Montpreveyres Foto', 'canton' => 'VD'), + '3030' => array('town' => 'Bern', 'canton' => 'BE'), + '1031' => array('town' => 'Mex VD', 'canton' => 'VD'), + '1734' => array('town' => 'Tentlingen', 'canton' => 'FR'), + '1029' => array('town' => 'Villars-Ste-Croix', 'canton' => 'VD'), + '9101' => array('town' => 'Herisau', 'canton' => 'AR'), + '3044' => array('town' => 'Innerberg', 'canton' => 'BE'), + '8317' => array('town' => 'Tagelswangen', 'canton' => 'ZH'), + '6908' => array('town' => 'Massagno Caselle', 'canton' => 'TI'), + '6009' => array('town' => 'Luzern', 'canton' => 'LU'), + '6910' => array('town' => 'Lugano', 'canton' => 'TI'), + '5232' => array('town' => 'Villigen PSI', 'canton' => 'AG'), + '6349' => array('town' => 'Baar', 'canton' => 'ZG'), + '2715' => array('town' => 'Monible', 'canton' => 'BE'), + '1653' => array('town' => 'Châtel-Montsalvens', 'canton' => 'FR'), + '1730' => array('town' => 'Ecuvillens', 'canton' => 'FR'), + '1428' => array('town' => 'Mutrux', 'canton' => 'VD'), + '1047' => array('town' => 'Oppens', 'canton' => 'VD'), + '2027' => array('town' => 'Montalchez', 'canton' => 'NE'), + '2933' => array('town' => 'Damphreux', 'canton' => 'JU'), + '8543' => array('town' => 'Bertschikon', 'canton' => 'ZH'), + '3429' => array('town' => 'Hellsau', 'canton' => 'BE'), + '3632' => array('town' => 'Niederstocken', 'canton' => 'BE'), + '8774' => array('town' => 'Leuggelbach', 'canton' => 'GL'), + '4584' => array('town' => 'Gächliwil', 'canton' => 'SO'), + '5058' => array('town' => 'Wiliberg', 'canton' => 'AG'), + '3940' => array('town' => 'Steg VS', 'canton' => 'VS'), + '9498' => array('town' => 'Planken', 'canton' => 'FL'), + '8801' => array('town' => 'Thalwil', 'canton' => 'ZH'), + '6341' => array('town' => 'Baar', 'canton' => 'ZG'), + '6342' => array('town' => 'Baar', 'canton' => 'ZG'), + '9029' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '1709' => array('town' => 'Fribourg', 'canton' => 'FR'), + '8879' => array('town' => 'Pizolpark (Mels)', 'canton' => 'SG'), + '8118' => array('town' => 'Pfaffhausen', 'canton' => 'ZH'), + '5601' => array('town' => 'Lenzburg Sonderdst', 'canton' => 'AG'), + '9028' => array('town' => 'St. Gallen CV AG', 'canton' => 'SG'), + '9027' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '1811' => array('town' => 'Vevey', 'canton' => 'VD'), + '3609' => array('town' => 'Thun', 'canton' => 'BE'), + '1775' => array('town' => 'Mannens', 'canton' => 'FR'), + '8106' => array('town' => 'Adlikon b.Regensdf', 'canton' => 'ZH'), + '8070' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8071' => array('town' => 'Zürich CS PZ', 'canton' => 'ZH'), + '1631' => array('town' => 'Bulle', 'canton' => 'FR'), + '3040' => array('town' => 'Bern', 'canton' => 'BE'), + '4040' => array('town' => 'Basel', 'canton' => 'BL'), + '6007' => array('town' => 'Luzern', 'canton' => 'LU'), + '8759' => array('town' => 'Netstal', 'canton' => 'GL'), + '9020' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '4573' => array('town' => 'Lohn-Ammannsegg', 'canton' => 'SO'), + '9026' => array('town' => 'St. Gallen K AG', 'canton' => 'SG'), + '6031' => array('town' => 'Ebikon', 'canton' => 'LU'), + '6021' => array('town' => 'Emmenbrücke 1', 'canton' => 'LU'), + '6391' => array('town' => 'Engelberg', 'canton' => 'OW'), + '6281' => array('town' => 'Hochdorf', 'canton' => 'LU'), + '6011' => array('town' => 'Kriens', 'canton' => 'LU'), + '6061' => array('town' => 'Sarnen 1', 'canton' => 'OW'), + '6371' => array('town' => 'Stans', 'canton' => 'NW'), + '6431' => array('town' => 'Schwyz', 'canton' => 'SZ'), + '9025' => array('town' => 'St. Gallen Quelle', 'canton' => 'SG'), + '6907' => array('town' => 'Lugano 7 Caselle', 'canton' => 'TI'), + '1240' => array('town' => 'Genève', 'canton' => 'GE'), + '9471' => array('town' => 'Buchs SG 1', 'canton' => 'SG'), + '9401' => array('town' => 'Rorschach', 'canton' => 'SG'), + '9501' => array('town' => 'Wil SG 1', 'canton' => 'SG'), + '4509' => array('town' => 'Solothurn', 'canton' => 'SO'), + '4070' => array('town' => 'Basel', 'canton' => 'BS'), + '8609' => array('town' => 'Schwerzenbach', 'canton' => 'ZH'), + '6602' => array('town' => 'Muralto', 'canton' => 'TI'), + '6161' => array('town' => 'Entlebuch', 'canton' => 'LU'), + '9201' => array('town' => 'Gossau SG', 'canton' => 'SG'), + '8510' => array('town' => 'Frauenfeld', 'canton' => 'TG'), + '3050' => array('town' => 'Bern', 'canton' => 'BE'), + '8086' => array('town' => 'Zürich R Digest', 'canton' => 'ZH'), + '8085' => array('town' => 'Zürich Versich.', 'canton' => 'ZH'), + '2075' => array('town' => 'Thielle', 'canton' => 'NE'), + '1068' => array('town' => 'Les Monts-de-Pully', 'canton' => 'VD'), + '2010' => array('town' => 'Neuchâtel OFS', 'canton' => 'NE'), + '8285' => array('town' => 'Kreuzlingen Ifolor', 'canton' => 'TG'), + '4039' => array('town' => 'Basel', 'canton' => 'BS'), + '2510' => array('town' => 'Biel/Bienne DistBa', 'canton' => 'BE'), + '5510' => array('town' => 'Hunzenschwil DistB', 'canton' => 'AG'), + '8210' => array('town' => 'Schaffhausen DistB', 'canton' => 'SH'), + '9510' => array('town' => 'Wil SG Dist Ba', 'canton' => 'SG'), + '5018' => array('town' => 'Erlinsbach', 'canton' => 'AG'), + '1310' => array('town' => 'Daillens Dist Ba', 'canton' => 'VD'), + '8098' => array('town' => 'Zürich', 'canton' => 'ZH'), + '8066' => array('town' => 'Zürich', 'canton' => 'ZH'), + '4620' => array('town' => 'Härkingen PZ', 'canton' => 'SO'), + '8183' => array('town' => 'Bülach Dist Ba', 'canton' => 'ZH'), + '8325' => array('town' => 'Effretikon Dist Ba', 'canton' => 'ZH'), + '8520' => array('town' => 'Frauenfeld PZ', 'canton' => 'TG'), + '8343' => array('town' => 'Hinwil Dist Ba', 'canton' => 'ZH'), + '8087' => array('town' => 'Zürich', 'canton' => 'ZH'), + '4078' => array('town' => 'Basel Reader\'s D.', 'canton' => 'BS'), + '9024' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '4609' => array('town' => 'Olten', 'canton' => 'SO'), + '8015' => array('town' => 'Zürich 15', 'canton' => 'ZH'), + '1818' => array('town' => 'Montreux Redoute', 'canton' => 'VD'), + '8540' => array('town' => 'Frauenfeld ST PP 1', 'canton' => 'TG'), + '8530' => array('town' => 'Frauenfeld CALL', 'canton' => 'TG'), + '4640' => array('town' => 'Härkingen ST PP 1', 'canton' => 'SO'), + '4630' => array('town' => 'Härkingen CALL', 'canton' => 'SO'), + '1330' => array('town' => 'Daillens CALL', 'canton' => 'VD'), + '1320' => array('town' => 'Daillens ST PP 1', 'canton' => 'VD'), + '1440' => array('town' => 'Montagny-Chamard', 'canton' => 'VD'), + '4065' => array('town' => 'Basel SBB Cargo AG', 'canton' => 'BS'), + '8075' => array('town' => 'Zürich', 'canton' => 'ZH'), + '4080' => array('town' => 'Basel', 'canton' => 'BS'), + '6039' => array('town' => 'Root Längenbold', 'canton' => 'LU'), + '4034' => array('town' => 'Basel 34 Breite', 'canton' => 'BS'), + '4035' => array('town' => 'Basel', 'canton' => 'BS'), + '4089' => array('town' => 'Basel', 'canton' => 'BS'), + '8068' => array('town' => 'Zürich', 'canton' => 'ZH'), + '3071' => array('town' => 'Ostermundigen Zust', 'canton' => 'BE'), + '4033' => array('town' => 'Basel', 'canton' => 'BS'), + '4081' => array('town' => 'Basel', 'canton' => 'BS'), + '4082' => array('town' => 'Basel', 'canton' => 'BS'), + '8186' => array('town' => 'Bülach', 'canton' => 'ZH'), + '3039' => array('town' => 'Bern PF OC', 'canton' => 'BE'), + '4042' => array('town' => 'Basel PF OC', 'canton' => 'BL'), + '4083' => array('town' => 'Basel', 'canton' => 'BS'), + '4084' => array('town' => 'Basel', 'canton' => 'BS'), + '4085' => array('town' => 'Basel', 'canton' => 'BS'), + '4086' => array('town' => 'Basel', 'canton' => 'BS'), + '4087' => array('town' => 'Basel', 'canton' => 'BS'), + '4088' => array('town' => 'Basel', 'canton' => 'BS'), + '8081' => array('town' => 'Zürich', 'canton' => 'ZH'), + '4092' => array('town' => 'Basel SPI AS 22', 'canton' => 'BS'), + '4093' => array('town' => 'Basel SPI AS 23', 'canton' => 'BS'), + '4094' => array('town' => 'Basel SPI AS 24', 'canton' => 'BS'), + '4095' => array('town' => 'Basel SPI AS 25', 'canton' => 'BS'), + '4096' => array('town' => 'Basel SPI AS 26', 'canton' => 'BS'), + '8901' => array('town' => 'Urdorf', 'canton' => 'ZH'), + '3041' => array('town' => 'Bern', 'canton' => 'BE'), + '6008' => array('town' => 'Luzern', 'canton' => 'LU'), + '4041' => array('town' => 'Basel', 'canton' => 'BS'), + '9489' => array('town' => 'Vaduz', 'canton' => 'FL'), + '4551' => array('town' => 'Derendingen', 'canton' => 'SO'), + '4075' => array('town' => 'Basel', 'canton' => 'BS'), + '9022' => array('town' => 'St. Gallen', 'canton' => 'SG'), + '8109' => array('town' => 'Kloster Fahr', 'canton' => 'AG'), + '1019' => array('town' => 'Lausanne', 'canton' => 'VD'), + '1039' => array('town' => 'Cheseaux Polyval', 'canton' => 'VD'), + '6346' => array('town' => 'Baar 3', 'canton' => 'ZG'), + '3085' => array('town' => 'Wabern Weihnachten', 'canton' => 'BE'), + '1300' => array('town' => 'Eclépens CC', 'canton' => 'VD'), + '3070' => array('town' => 'Ostermundigen LZB', 'canton' => 'BE'), + '4621' => array('town' => 'Härkingen BZ', 'canton' => 'SO'), + '6590' => array('town' => 'Cadenazzo (CLL)', 'canton' => 'TI'), + '1919' => array('town' => 'Martigny Mutuel', 'canton' => 'VS'), + '8096' => array('town' => 'Zürich IBRS local', 'canton' => 'ZH'), + '4808' => array('town' => 'Zofingen PF', 'canton' => 'AG'), + '4807' => array('town' => 'Zofingen PF', 'canton' => 'AG'), + '1311' => array('town' => 'Eclépens SC', 'canton' => 'VD'), + '4611' => array('town' => 'Härkingen SC', 'canton' => 'SO'), + '8011' => array('town' => 'Zürich Mülligen SC', 'canton' => 'ZH'), + '8060' => array('town' => 'Zürich', 'canton' => 'ZH'), + '6333' => array('town' => 'Hünenberg See', 'canton' => 'ZG'), + '4809' => array('town' => 'Zofingen PF', 'canton' => 'AG'), + '8059' => array('town' => 'Zürich 59 EO', 'canton' => 'ZH'), + '3017' => array('town' => 'Bern Zustellung', 'canton' => 'BE'), + '9301' => array('town' => 'Wittenbach', 'canton' => 'SG'), + '6511' => array('town' => 'Cadenazzo SC', 'canton' => 'TI'), + '8074' => array('town' => 'Zürich Voice Pub', 'canton' => 'ZH'), + '3029' => array('town' => 'Bern Entris', 'canton' => 'BE'), + '7110' => array('town' => 'Peiden', 'canton' => 'GR'), + '8012' => array('town' => 'Zürich', 'canton' => 'ZH'), + '2360' => array('town' => 'Le Bémont', 'canton' => 'JU'), + '2362' => array('town' => 'Montfaucon', 'canton' => 'JU'), + '2363' => array('town' => 'Les Enfers', 'canton' => 'JU'), + '2364' => array('town' => 'St-Brais', 'canton' => 'JU'), + '8970' => array('town' => 'Urdorf Exchange', 'canton' => 'ZH'), + ); + + // Check if theres something for autocomplete + if (!empty($element['#value']) && (isset($data[$element['#value']]))) { + // Get the base #parents for this address form. + $base_parents = array_slice($element['#parents'], 0, -1); + $base_array_parents = array_slice($element['#array_parents'], 0, -2); + + $city = $data[$element['#value']]; + + // Set the new values in the form. + drupal_array_set_nested_value($form_state['values'], array_merge($base_parents, array('locality')), $city['town'], TRUE); + drupal_array_set_nested_value($form_state['values'], array_merge($base_parents, array('administrative_area')), $city['canton'], TRUE); + + // Discard value the user has already entered there. + drupal_array_set_nested_value($form_state['input'], array_merge($base_parents, array('locality')), NULL, TRUE); + drupal_array_set_nested_value($form_state['input'], array_merge($base_parents, array('administrative_area')), NULL, TRUE); + } +} diff --git a/sites/all/modules/contrib/addressfield/plugins/format/address-hide-country.inc b/sites/all/modules/contrib/addressfield/plugins/format/address-hide-country.inc new file mode 100644 index 0000000000..13ebd1cb22 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/plugins/format/address-hide-country.inc @@ -0,0 +1,40 @@ + t('Hide the country when only one is available'), + 'format callback' => 'addressfield_format_address_hide_country', + 'type' => 'address', + 'weight' => -80, +); + +/** + * Format callback. + * + * @see CALLBACK_addressfield_format_callback() + */ +function addressfield_format_address_hide_country(&$format, $address, $context = array()) { + // Hide the country element only if the whole field is required, otherwise + // there will always be an additional None option. + if ($context['mode'] == 'form' && $context['instance']['required']) { + if (!empty($format['country']['#options']) && count($format['country']['#options']) == 1) { + $format['country']['#access'] = FALSE; + } + } + elseif ($context['mode'] == 'render') { + // However, in render mode, the element does not have an #options list, so + // we look instead in the field instance settings if given. If we find a + // single country option and it matches the country of the current address, + // go ahead and hide it. + if (!empty($context['instance']['widget']['settings']['available_countries']) && + count($context['instance']['widget']['settings']['available_countries']) == 1) { + if (isset($context['instance']['widget']['settings']['available_countries'][$address['country']])) { + $format['country']['#access'] = FALSE; + } + } + } +} diff --git a/sites/all/modules/contrib/addressfield/plugins/format/address-hide-postal-code.inc b/sites/all/modules/contrib/addressfield/plugins/format/address-hide-postal-code.inc new file mode 100644 index 0000000000..4f058d34c9 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/plugins/format/address-hide-postal-code.inc @@ -0,0 +1,24 @@ + t('Hide the postal code'), + 'format callback' => 'addressfield_format_address_hide_postal_code', + 'type' => 'address', + 'weight' => -85, +); + +/** + * Format callback. + * + * @see CALLBACK_addressfield_format_callback() + */ +function addressfield_format_address_hide_postal_code(&$format, $address, $context = array()) { + if (isset($format['locality_block']['postal_code'])) { + $format['locality_block']['postal_code']['#access'] = FALSE; + } +} diff --git a/sites/all/modules/contrib/addressfield/plugins/format/address-hide-street.inc b/sites/all/modules/contrib/addressfield/plugins/format/address-hide-street.inc new file mode 100644 index 0000000000..a5912dce29 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/plugins/format/address-hide-street.inc @@ -0,0 +1,24 @@ + t('Hide the street address'), + 'format callback' => 'addressfield_format_address_hide_street', + 'type' => 'address', + 'weight' => -85, +); + +/** + * Format callback. + * + * @see CALLBACK_addressfield_format_callback() + */ +function addressfield_format_address_hide_street(&$format, $address, $context = array()) { + if (isset($format['street_block'])) { + $format['street_block']['#access'] = FALSE; + } +} diff --git a/sites/all/modules/contrib/addressfield/plugins/format/address-optional.inc b/sites/all/modules/contrib/addressfield/plugins/format/address-optional.inc new file mode 100644 index 0000000000..201e40eabc --- /dev/null +++ b/sites/all/modules/contrib/addressfield/plugins/format/address-optional.inc @@ -0,0 +1,36 @@ + t('Make all fields optional (Not recommended)'), + 'format callback' => 'addressfield_format_address_optional', + 'type' => 'address', + 'weight' => 100, +); + +/** + * Format callback. + * + * @see CALLBACK_addressfield_format_callback() + */ +function addressfield_format_address_optional(&$format, $address, $context = array()) { + if (isset($format['name_block'])) { + if (isset($format['name_block']['name_line'])) { + $format['name_block']['name_line']['#required'] = FALSE; + } + elseif (isset($format['name_block']['first_name'])) { + $format['name_block']['first_name']['#required'] = FALSE; + $format['name_block']['last_name']['#required'] = FALSE; + } + } + $format['street_block']['thoroughfare']['#required'] = FALSE; + $format['locality_block']['postal_code']['#required'] = FALSE; + $format['locality_block']['dependent_locality']['#required'] = FALSE; + $format['locality_block']['locality']['#required'] = FALSE; + $format['locality_block']['administrative_area']['#required'] = FALSE; +} diff --git a/sites/all/modules/contrib/addressfield/plugins/format/address.inc b/sites/all/modules/contrib/addressfield/plugins/format/address.inc new file mode 100644 index 0000000000..d99b7f9983 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/plugins/format/address.inc @@ -0,0 +1,289 @@ + t('Address form (country-specific)'), + 'format callback' => 'addressfield_format_address_generate', + 'type' => 'address', + 'weight' => -100, +); + +/** + * Format callback. + * + * @see CALLBACK_addressfield_format_callback() + */ +function addressfield_format_address_generate(&$format, $address, $context = array()) { + // Load the predefined address format for the selected country. + module_load_include('inc', 'addressfield', 'addressfield.address_formats'); + $address_format = addressfield_get_address_format($address['country']); + + // Used to move certain fields to their own row. + $clearfix = '
                  '; + + // The street block. + $format['street_block'] = array( + '#type' => 'addressfield_container', + '#attributes' => array( + 'class' => array('street-block'), + ), + '#weight' => 0, + ); + $format['street_block']['thoroughfare'] = array( + '#title' => t('Address 1'), + '#tag' => 'div', + '#attributes' => array( + 'class' => array('thoroughfare'), + 'x-autocompletetype' => 'address-line1', + 'autocomplete' => 'address-line1', + ), + '#size' => 30, + '#required' => TRUE, + ); + $format['street_block']['premise'] = array( + '#title' => t('Address 2'), + '#tag' => 'div', + '#attributes' => array( + 'class' => array('premise'), + 'x-autocompletetype' => 'address-line2', + 'autocomplete' => 'address-line2', + ), + '#size' => 30, + ); + $format['locality_block'] = array( + '#type' => 'addressfield_container', + '#attributes' => array( + 'class' => array('addressfield-container-inline', 'locality-block', 'country-' . $address['country']), + ), + '#weight' => 50, + ); + $format['locality_block']['#attached']['css'][] = drupal_get_path('module', 'addressfield') . '/addressfield.css'; + $format['locality_block']['postal_code'] = array( + '#title' => $address_format['postal_code_label'], + '#required' => in_array('postal_code', $address_format['required_fields']), + '#access' => in_array('postal_code', $address_format['used_fields']), + '#size' => 10, + '#attributes' => array( + 'class' => array('postal-code'), + 'x-autocompletetype' => 'postal-code', + 'autocomplete' => 'postal-code', + ), + ); + $format['locality_block']['dependent_locality'] = array( + '#title' => $address_format['dependent_locality_label'], + '#required' => in_array('dependent_locality', $address_format['required_fields']), + '#access' => in_array('dependent_locality', $address_format['used_fields']), + '#size' => 25, + '#tag' => 'div', + '#attributes' => array( + 'class' => array('dependent-locality') + ), + // Most formats place this field in its own row. + '#suffix' => $clearfix, + ); + $format['locality_block']['locality'] = array( + '#title' => $address_format['locality_label'], + '#required' => in_array('locality', $address_format['required_fields']), + '#access' => in_array('locality', $address_format['used_fields']), + '#size' => 30, + '#prefix' => ' ', + '#attributes' => array( + 'class' => array('locality'), + 'x-autocompletetype' => 'locality', + 'autocomplete' => 'locality', + ), + ); + $format['locality_block']['administrative_area'] = array( + '#title' => $address_format['administrative_area_label'], + '#required' => in_array('administrative_area', $address_format['required_fields']), + '#access' => in_array('administrative_area', $address_format['used_fields']), + '#empty_value' => '', + '#size' => 10, + '#prefix' => ' ', + '#render_option_value' => $address_format['render_administrative_area_value'], + '#attributes' => array( + 'class' => array('state'), + 'x-autocompletetype' => 'region', + 'autocomplete' => 'region', + ), + ); + $format['country'] = array( + '#title' => t('Country'), + '#options' => _addressfield_country_options_list(), + '#render_option_value' => TRUE, + '#required' => TRUE, + '#attributes' => array( + 'class' => array('country'), + 'x-autocompletetype' => 'country', + 'autocomplete' => 'country', + ), + '#weight' => 100, + ); + + if (empty($format['locality_block']['postal_code']['#access'])) { + // Remove the prefix from the first widget of the block. + $element_children = element_children($format['locality_block']); + $first_child = reset($element_children); + unset($format['locality_block'][$first_child]['#prefix']); + } + + if (!empty($format['locality_block']['administrative_area']['#access'])) { + // Set the predefined administrative areas, if found. + module_load_include('inc', 'addressfield', 'addressfield.administrative_areas'); + $administrative_areas = addressfield_get_administrative_areas($address['country']); + $format['locality_block']['administrative_area']['#options'] = $administrative_areas; + } + + // Country-specific customizations. + if (in_array($address['country'], array('AU', 'EE', 'LT', 'LV', 'NZ', 'RU'))) { + // These countries don't use the "Address 2" line. + // Leave it as a precaution, but hide the label to avoid confusing users. + $format['street_block']['thoroughfare']['#title'] = t('Address'); + $format['street_block']['premise']['#title_display'] = 'invisible'; + } + elseif ($address['country'] == 'US') { + if ($context['mode'] == 'render') { + $format['locality_block']['locality']['#suffix'] = ','; + } + } + elseif ($address['country'] == 'BR') { + $format['locality_block']['dependent_locality']['#suffix'] = $clearfix; + $format['locality_block']['dependent_locality']['#tag'] = 'div'; + $format['locality_block']['administrative_area']['#suffix'] = $clearfix; + $format['locality_block']['postal_code']['#tag'] = 'div'; + // Change some titles to make translation easier. + $format['street_block']['#attributes'] = array( + 'class' => array('addressfield-container-inline'), + ); + $format['street_block']['thoroughfare']['#title'] = t('Thoroughfare'); + $format['street_block']['thoroughfare']['#tag'] = NULL; + $format['street_block']['premise'] = array( + '#title' => t('Complement'), + '#tag' => NULL, + '#attributes' => array('class' => array('premise')), + '#size' => 20, + '#prefix' => ', ', + ); + $format['locality_block']['locality']['#suffix'] = ' - '; + // Hide suffixes and prefixes while in form. + if ($context['mode'] == 'form') { + $format['street_block']['premise']['#prefix'] = NULL; + $format['street_block']['premise']['#suffix'] = NULL; + $format['locality_block']['locality']['#suffix'] = NULL; + } + } + elseif ($address['country'] == 'CN') { + $format['locality_block']['locality']['#suffix'] = $clearfix; + } + elseif ($address['country'] == 'CA') { + if ($context['mode'] == 'render') { + $format['locality_block']['locality']['#suffix'] = ','; + } + } + elseif ($address['country'] == 'GB') { + $format['locality_block']['administrative_area']['#size'] = '30'; + } + elseif ($address['country'] == 'ID') { + $format['locality_block']['administrative_area']['#weight'] = 1; + } + elseif ($address['country'] == 'JP') { + $format['locality_block']['#weight'] = 10; + $format['locality_block']['postal_code']['#weight'] = 10; + $format['locality_block']['postal_code']['#tag'] = 'div'; + $format['locality_block']['postal_code']['#size'] = 30; + $format['locality_block']['administrative_area']['#weight'] = 20; + $format['locality_block']['administrative_area']['#size'] = 30; + $format['locality_block']['locality']['#weight'] = 30; + $format['street_block']['#weight'] = 20; + } + elseif ($address['country'] == 'PE') { + $format['locality_block']['administrative_area']['#weight'] = 1; + $format['locality_block']['locality']['#weight'] = 2; + } + elseif ($address['country'] == 'PH' || $address['country'] == 'TH') { + $format['locality_block']['dependent_locality']['#suffix'] = ''; + $format['locality_block']['locality']['#suffix'] = $clearfix; + } + + // These countries show every field in its own row. + $countries_field_per_row = array( + 'AM', 'EG', 'FK', 'GB', 'GG', 'GS', 'HK', 'HU', 'IE', 'IM', 'IO', 'JE', 'JM', + 'JP', 'KE', 'KR', 'KZ', 'LK', 'PA', 'PN', 'RU', 'SC', 'SH', 'SZ', 'TC', 'UA', + 'VG', 'ZA', + ); + if (in_array($address['country'], $countries_field_per_row)) { + $format['locality_block']['#attributes']['class'][0] = 'addressfield-container'; + $format['locality_block']['postal_code']['#prefix'] = ''; + $format['locality_block']['postal_code']['#tag'] = 'div'; + $format['locality_block']['locality']['#prefix'] = ''; + $format['locality_block']['locality']['#tag'] = 'div'; + $format['locality_block']['administrative_area']['#prefix'] = ''; + $format['locality_block']['administrative_area']['#tag'] = 'div'; + } + + // These countries tend to put the postal code after the locality. + $countries_postal_code_after_locality = array( + 'AS', 'AU', 'BD', 'BF', 'BH', 'BM', 'BN', 'BR', 'BT', 'CA', 'CC', 'CN', 'CX', + 'EG', 'FK', 'FM', 'GB', 'GG', 'GS', 'GU', 'HN', 'HU', 'ID', 'IL', 'IM', 'IN', + 'IO', 'IQ', 'IR', 'JE', 'JO', 'JP', 'KE', 'KH', 'KR', 'LB', 'LK', 'LS', 'LV', + 'MH', 'MM', 'MN', 'MP', 'MT', 'MV', 'MX', 'MY', 'NF', 'NG', 'NP', 'NZ', 'PG', + 'PH', 'PK', 'PN', 'PR', 'PW', 'RU', 'SA', 'SH', 'SO', 'SZ', 'TC', 'TH', 'TW', + 'UA', 'UM', 'US', 'VE', 'VI', 'VG', 'VN', 'ZA', + ); + if (in_array($address['country'], $countries_postal_code_after_locality)) { + // Take the widget out of the array. + $postal_code_widget = $format['locality_block']['postal_code']; + $postal_code_widget['#prefix'] = ' '; + unset($format['locality_block']['postal_code']); + + // Add it back. + $format['locality_block']['postal_code'] = $postal_code_widget; + + // Remove the prefix from the first widget of the block. + $element_children = element_children($format['locality_block']); + $first_child = reset($element_children); + unset($format['locality_block'][$first_child]['#prefix']); + } + + if ($context['mode'] == 'form') { + // Provide a wrapper ID for AJAX replacement based on country selection. + if (!isset($format['#wrapper_id'])) { + $format['#wrapper_id'] = drupal_html_id('addressfield-wrapper'); + $format['#prefix'] = '
                  '; + $format['#suffix'] = '
                  '; + } + // AJAX enable it. + $format['country']['#ajax'] = array( + 'callback' => 'addressfield_standard_widget_refresh', + 'wrapper' => $format['#wrapper_id'], + ); + $format['country']['#element_validate'] = array('addressfield_standard_country_validate'); + // Don't validate any element when the country is changed. + $format['country']['#limit_validation_errors'] = array(); + + // Move the country selector to the top of the form. + $format['country']['#weight'] = -500; + // Limit it to the countries supported by the widget. + if (isset($context['field'])) { + $format['country']['#options'] = _addressfield_country_options_list($context['field'], $context['instance']); + } + + // The whole field is considered empty if the country column is empty. + // Therefore, if the field is optional, allow the country to be optional. + // The same logic applies if the field allows multiple values, in which case + // only the first delta needs to have a value. + if (empty($context['instance']['required']) || (isset($context['delta']) && $context['delta'] > 0)) { + $format['country']['#required'] = FALSE; + $format['country']['#empty_value'] = ''; + // Hide all other fields until the country is selected. + if (empty($address['country'])) { + $format['street_block']['#access'] = FALSE; + $format['locality_block']['#access'] = FALSE; + } + } + } +} diff --git a/sites/all/modules/contrib/addressfield/plugins/format/name-full.inc b/sites/all/modules/contrib/addressfield/plugins/format/name-full.inc new file mode 100644 index 0000000000..02a67b93a1 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/plugins/format/name-full.inc @@ -0,0 +1,52 @@ + t('Name (First name, Last name)'), + 'format callback' => 'addressfield_format_name_full_generate', + 'type' => 'name', + 'weight' => 0, +); + +/** + * Format callback. + * + * @see CALLBACK_addressfield_format_callback() + */ +function addressfield_format_name_full_generate(&$format, $address) { + $format['name_block'] = array( + '#type' => 'addressfield_container', + '#attributes' => array( + 'class' => array('addressfield-container-inline', 'name-block'), + ), + '#weight' => -100, + // The addressfield is considered empty without a country, hide all fields + // until one is selected. + '#access' => !empty($address['country']), + ); + $format['name_block']['first_name'] = array( + '#title' => t('First name'), + '#size' => 30, + '#required' => TRUE, + '#attributes' => array( + 'class' => array('first-name'), + 'x-autocompletetype' => 'given-name', + 'autocomplete' => 'given-name', + ), + ); + $format['name_block']['last_name'] = array( + '#title' => t('Last name'), + '#size' => 30, + '#required' => TRUE, + '#prefix' => ' ', + '#attributes' => array( + 'class' => array('last-name'), + 'x-autocompletetype' => 'family-name', + 'autocomplete' => 'family-name', + ), + ); +} diff --git a/sites/all/modules/contrib/addressfield/plugins/format/name-oneline.inc b/sites/all/modules/contrib/addressfield/plugins/format/name-oneline.inc new file mode 100644 index 0000000000..0f7de04504 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/plugins/format/name-oneline.inc @@ -0,0 +1,40 @@ + t('Name (single line)'), + 'format callback' => 'addressfield_format_name_oneline_generate', + 'type' => 'name', + 'weight' => 0, +); + +/** + * Format callback. + * + * @see CALLBACK_addressfield_format_callback() + */ +function addressfield_format_name_oneline_generate(&$format, $address) { + $format['name_block'] = array( + '#type' => 'addressfield_container', + '#attributes' => array('class' => array('addressfield-container-inline', 'name-block')), + '#weight' => -100, + // The addressfield is considered empty without a country, hide all fields + // until one is selected. + '#access' => !empty($address['country']), + ); + $format['name_block']['name_line'] = array( + '#title' => t('Full name'), + '#tag' => 'div', + '#attributes' => array( + 'class' => array('name-block'), + 'x-autocompletetype' => 'name', + 'autocomplete' => 'name', + ), + '#size' => 30, + '#required' => TRUE, + ); +} diff --git a/sites/all/modules/contrib/addressfield/plugins/format/organisation.inc b/sites/all/modules/contrib/addressfield/plugins/format/organisation.inc new file mode 100644 index 0000000000..d658f83f77 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/plugins/format/organisation.inc @@ -0,0 +1,38 @@ + t('Organisation (single line)'), + 'format callback' => 'addressfield_format_organisation_generate', + 'type' => 'organisation', + 'weight' => -10, +); + +/** + * Format callback. + * + * @see CALLBACK_addressfield_format_callback() + */ +function addressfield_format_organisation_generate(&$format, $address) { + $format['organisation_block'] = array( + '#type' => 'addressfield_container', + '#attributes' => array('class' => array('addressfield-container-inline', 'name-block')), + '#weight' => -50, + // The addressfield is considered empty without a country, hide all fields + // until one is selected. + '#access' => !empty($address['country']), + ); + $format['organisation_block']['organisation_name'] = array( + '#title' => t('Company'), + '#size' => 30, + '#attributes' => array( + 'class' => array('organisation-name'), + 'x-autocompletetype' => 'organization', + 'autocomplete' => 'organization', + ), + ); +} diff --git a/sites/all/modules/contrib/addressfield/views/addressfield.views.inc b/sites/all/modules/contrib/addressfield/views/addressfield.views.inc new file mode 100644 index 0000000000..9be1637e1c --- /dev/null +++ b/sites/all/modules/contrib/addressfield/views/addressfield.views.inc @@ -0,0 +1,95 @@ + $tables) { + foreach ($tables as $table_name => $columns) { + if (!isset($columns['country'])) { + continue; + } + + $column_real_name = $columns['country']; + if (!isset($data[$table_name][$column_real_name]['filter'])) { + continue; + } + + $data[$table_name][$column_real_name]['filter']['handler'] = 'addressfield_views_handler_filter_country'; + } + } + + // Only expose these components as Views field handlers. + $implemented = array( + 'country' => 'addressfield_views_handler_field_country', + 'administrative_area' => 'views_handler_field', + 'sub_administrative_area' => 'views_handler_field', + 'dependent_locality' => 'views_handler_field', + 'locality' => 'views_handler_field', + 'postal_code' => 'views_handler_field', + 'thoroughfare' => 'views_handler_field', + 'premise' => 'views_handler_field', + 'sub_premise' => 'views_handler_field', + 'organisation_name' => 'views_handler_field', + 'name_line' => 'views_handler_field', + 'first_name' => 'views_handler_field', + 'last_name' => 'views_handler_field', + 'data' => 'views_handler_field_serialized', + ); + + // Get the translated field information. + $properties = addressfield_data_property_info(); + + // Iterate over addressfield defined tables. + foreach ($data as &$table) { + // Make sure the parent Views field (addressfield) is defined. + if (isset($table[$field['field_name']]['field'])) { + // Use the parent field definition as a template for component columns. + $field_def = $table[$field['field_name']]['field']; + + // Remove 'additional fields' from the field definition. We don't + // necessarily want all our sibling columns. + unset($field_def['additional fields']); + + // Define the valid columns. + $valid_columns = array(); + foreach ($implemented as $implement => $handler) { + $column_name = $field['field_name'] . '_' . $implement; + $valid_columns[$column_name] = $handler; + } + + // Iterate over the addressfield components. + foreach ($table as $column_name => &$column) { + if (empty($column['field']) && isset($valid_columns[$column_name])) { + // Assign the default component definition. + $column['field'] = $field_def; + $column['field']['real field'] = $column_name; + $column['field']['handler'] = $valid_columns[$column_name]; + + // Assign human-friendly field labels for addressfield components. + $field_labels = field_views_field_label($field['field_name']); + $field_label = array_shift($field_labels); + $property = str_replace($field_def['field_name'] . '_', '', $column_name); + + if (!empty($properties[$property])) { + $property_label = $properties[$property]['label']; + + $title = t('@field-label - @property-label', array( + '@field-label' => $field_label, + '@property-label' => $property_label, + )); + + $column['title'] = $title; + $column['title short'] = $title; + } + } + } + } + } + + return $data; +} diff --git a/sites/all/modules/contrib/addressfield/views/addressfield_views_handler_field_country.inc b/sites/all/modules/contrib/addressfield/views/addressfield_views_handler_field_country.inc new file mode 100644 index 0000000000..65ca79d3c3 --- /dev/null +++ b/sites/all/modules/contrib/addressfield/views/addressfield_views_handler_field_country.inc @@ -0,0 +1,40 @@ + TRUE); + return $options; + } + + function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + + $form['display_name'] = array( + '#type' => 'checkbox', + '#title' => t('Display the localized country name instead of the two character country code'), + '#default_value' => $this->options['display_name'], + ); + } + + function get_value($values, $field = NULL) { + $value = parent::get_value($values, $field); + + // If we have a value for the field, look for the country name in the + // Address Field options list array if specified. + if (!empty($value) && !empty($this->options['display_name'])) { + $countries = _addressfield_country_options_list(); + + if (!empty($countries[$value])) { + $value = $countries[$value]; + } + } + + return $value; + } +} diff --git a/sites/all/modules/contrib/addressfield/views/addressfield_views_handler_filter_country.inc b/sites/all/modules/contrib/addressfield/views/addressfield_views_handler_filter_country.inc new file mode 100644 index 0000000000..d1b11c197e --- /dev/null +++ b/sites/all/modules/contrib/addressfield/views/addressfield_views_handler_filter_country.inc @@ -0,0 +1,9 @@ +value_title = t('Country'); + $field = field_info_field($this->definition['field_name']); + $this->value_options = _addressfield_country_options_list($field); + } +} \ No newline at end of file diff --git a/sites/all/modules/contrib/admin_menu/CHANGELOG.txt b/sites/all/modules/contrib/admin_menu/CHANGELOG.txt new file mode 100644 index 0000000000..b2dcdfefcf --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/CHANGELOG.txt @@ -0,0 +1,366 @@ + +Admin Menu 7.x-3.x, xxxx-xx-xx +------------------------------ +#1177202 by das-peter, dereine, sun: Fixed copying and re-injection of child + router items breaks badly. Change them by reference instead. + Requires latest Views 3.x code. +#1212064 by sun: Updated admin_views default views for VBO 3.x. +#1196590 by sun: Fixed errors and notices for admin_views with Views 3. +#1144768 by idlewilder, sun: Fixed devel modules to skip are not displayed. +#1079374 by WillHall: Fixed JS Error: unrecognized expression: [href=/]. +#1114132 by joelstein, sun: Added Field UI to list of developer modules. +#1008380 by bdragon, sun: Updated admin_views for D7. +#1146644 by sun: Fixed PHP 5.3 compability in tests. +#442560 by sun: Fixed 'defer' script attribute breaks Drupal.behaviors in FF3.6. +#1022902 by matglas86, sun: Updated for changed core Toolbar styles. + + +Admin Menu 7.x-3.0-RC1, 2010-01-07 +---------------------------------- +#990774 by sun: Updated for $closure renamed to $page_bottom. +#991906 by johnv, sun: Added configure to .info file. +#947198 by sun: Added hint about disabling Toolbar. +by sun: Updated administrative settings form for D7 UX guidelines. +by sun: Disabled "Rebuild system links" button on settings form. +#420816 by sun, smk-ka: Improved on-demand loading of dynamic paths. +#420816 by tim.plunkett: Fixed dynamic Field UI paths for vocabularies. +#871774 by swentel: Fixed developer modules toggle still uses referer_uri(). +#671760 by sun: Updated for new preprocess defaults. +#731462 by sun: Updated for system_rebuild_theme_data(). +by sun: Re-added a "Rebuild system links" button to settings form. +#420816 by tim.plunkett: Updated taxonomy path map for machine names. +#857688 by sun: Updated for reverted system_settings_form(). +#420816 by smk-ka, sun: Added merging of menu trees containing dynamic paths. +by sun: Fixed tests and minor admin_menu_toolbar styling issues. +by sun: Fixed various styling issues for admin_menu and admin_menu_toolbar. +by sun: Updated for Schema API, DBTNG, coding standards. +by sun: Updated for new admin/modules path. +#701424 by hutch: Updated for new admin/people/people path. +by sun: Removed orphan menu rewrite function. +#667858 by sun: Don't remove the current user from the switch user list. +#631550 by sun: Updated for fixed MENU_VISIBLE_IN_BREADCRUMB behavior. +#658344 by dereine, sun: Updated for removed drupal_session_count(). +by sun: Added separate permission to flush cashes. +by sun: Updated for changed Devel settings form. +by sun: Updated for new {system}.info module data. +#614730 by azriprajwala, sun: Updated for hook_theme() key changes. +by sun: Updated for all theme functions should take a single argument. +by sun: Reverted removal of registry cache flushing option. +#578520 by sun: Fixed destination query parameter is processed wrongly. +#578520 by sun: Updated for $query in url() should always be an array. +by Dave Reid: Updated for PHP 5 date constants. +by sun: Updated for new database API. +by smk-ka: Removed remnants of the registry. Fixed flush admin menu cache + command. +#567618 by smk-ka: Revised test cases. Abstracted out base web test class. +by sun: Updated for removed registry, new admin paths. +#326539 by sun: Updated for class attribute array. +#519782 by sun: Updated for hook_footer() replaced by hook_page_alter(). +#525638 by Razorraser: Updated for admin/build renamed to admin/structure. +by Dave Reid: Updated for hook_permission(). +#482314 by Dave Reid: Updated for node_type_get_types(). +#437506 by yched, Dave Reid: Updated for menu_router_build(). +#376816 by sun: Updated for compatibility for other JavaScript libraries. +#337820 by Dave Reid: Updated for new user/logout path. +#340546 by Dave Reid: Updated for drupal_add_js(). +#340531 by Dave Reid: Updated for module_list(). +#266358 by sun: Updated for drupal_add_css(). +#320526 by yettyn, sun: Updated to UNSTABLE-2 (DBTNG queries, permissions, etc). +by sun: Changed admin_menu_wipe() to admin_menu_flush_caches(). +by sun: Updated content-type edit menu item locations. +by sun: Fixed sess_count() changed to drupal_session_count(). + + +Admin Menu 6.x-3.x, xxxx-xx-xx +------------------------------ +#588936 by fenstrat: Fixed Toolbar shortcuts not visible. +#860390 by Kevin Rogers: Fixed .info file parsing error on uncertain platform. +#551484 by sun: Fixed stale hook_admin_menu_output_alter() docs. + + +Admin Menu 6.x-3.0-ALPHA4, 2010-03-11 +------------------------------------- +#730156 by sun: Fixed Administration views. +by sun: Fixed missing .element-hidden style in D6 for permissions tweak. +#645526 by TravisCarden: Fixed stale local tasks markup after moving them. +#366442 by sun: Added tweak to collapse modules on permissions page. +#655926 by donquixote, sun: Improved performance of delayed mouseout. +#557062 by sun: Fixed admin_menu_toolbar JS/CSS loaded before admin_menu's. +#599462 by sun, koyama: Added background-color to avoid unintentional override. +#601918 by BWPanda: Fixed admin_menu.css overrides admin_menu_toolbar.css. +#586228 by Island Usurper: Fixed for PHP 5.3. +#554124 by Dave Reid: Added missing toolbar.png. +#557062 by Dave Reid: Fixed undefined Drupal.admin error when including + admin_menu_toolbar.js before admin_menu.js. +#511744 by smk-ka, sun: Fixed /admin page links are broken. +by smk-ka: Added missing variables to hook_uninstall(). +#571038 by smk-ka: Removed call to admin_menu_wipe() and cleaned install file. +#552190 by Bartezz: Fixed missing t() for user logout link. + + +Admin Menu 6.x-3.0-ALPHA3, 2009-08-16 +------------------------------------- +#502500 by sun: Added "Create content" menu. +#538714 by sun: Fixed wrong re-parenting in Drupal's menu system. +#550132 by sun: Fixed (temporarily) admin_views menu items. +by sun: Added Administration views sub-module, converting all administrative + listing pages in Drupal core into real, ajaxified, and alterable views. +#547206 by sun: Fixed menu link descriptions lead to mouseover clashes. +#540954 by Rob Loach: Added String Overrides to list of developer modules. +#540762 by Deslack: Added Malay translation. + + +Admin Menu 6.x-3.0-ALPHA2, 2009-08-02 +------------------------------------- +#527908 by sun: Changed theme_admin_menu_links() to use $element['#children']. +#527908 by markus_petrux, sun: Changed admin menu into a renderable array. +#420812 by sun, smk-ka: Added support for hook_js(). +by sun: Fixed destination query string of current page not applied to links. +by sun: Changed Drupal.admin.attachBehaviors() to accept local JS settings. +#276751 by sun: Revamped rendering of menu additions/widgets. +#500866 by sun: Updated for removed t() from getInfo() in tests. +#402058 by sun: Added Administration menu toolbar module. +by markus_petrux, sun: Added API documentation. +#461264 by sun: Added site/domain as CSS class. +#451270 by smk-ka, sun: Changed visual indication for uid1. +by sun: Minor code clean-up. +#490670 by sun: Fixed missing menu after installation/upgrade. +#515718 by joelstein, sun: Added rules_admin module to developer modules list. +#352065 by sun: Added setting to select developer modules to keep enabled. +#511854 by psynaptic: Fixed logout link. +#424960 by markus_petrux, sun: Fixed gzip compression for cached output. +by sun: Fixed opacity of links in sub-menus. +#479922 by sun: Fixed fieldsets not collapsed on admin/build/modules/list*. +#495148 by sun: Fixed MENU_NORMAL_ITEMs do not appear in administration menu. +by sun: Fixed tests for new content-type locations. +#345984 by markus_petrux, sun: Fixed old menu links not removed on upgrade. +#276751 by sun: Major rewrite. Fixed menu items cannot be moved, altered, or + added as well as various performance issues. +by sun: Added variable to allow to disable caching (rewrite). + + +Admin Menu 6.x-3.0-ALPHA1, 2009-06-10 +------------------------------------- +#236657 by sun: Updated for corrected arguments of system_clear_cache_submit(). +#483870 by sun: Fixed compatibility with new Admin module. +#483152 by sun: Fixed admin_menu caches not flushed when clean URLs are toggled. +#479922 by danep: Fixed fieldsets not collapsed on admin/build/modules/list. +#469716 by sun: Fixed wrong AJAX callback URL under various conditions. +#471504 by wulff: Updated Danish translation. +by sun: Fixed admin_menu_suppress() does not suppress margin-top. +#451270 by sun: Added visual indication when working as uid 1. +by Dave Reid: Updated for getInfo() in tests. +#420828 by sun: Added dynamic replacements for cached administration menu. +#420840 by sun: Fixed Drupal.behaviors.adminMenu must be only executed once. +#345984 by markus_petrux, sun: Added client-side caching of administration menu. + Attention: A new era of Drupal user experience starts here. This is the very + first issue of a series of improvements targeting plain awesomeness. +#349169 by sun: Fixed Devel switch user links contain multiple path prefixes. +#345984 by sun: Code clean-up in preparation for client-side caching. +#415196 by psynaptic: Updated for CSS coding standards. +#406672 by mr.j, sun: Fixed "Move local tasks" option leaves stale UL. +by sun: Major code clean-up and sync across 3.x branches. +#349505 by smk-ka, sun: Performance: Added caching of entire menu output. +#315342 by wulff: Added "My account" link (by splitting the "Log out" item). +#384100 by kepol, sun: Fixed content-type items displayed in wrong place. +#373339 by sun: Fixed double-escaped 'Edit ' link titles. +#373372 by sun: Turned procedural JavaScript into admin menu behaviors. +by sun: Fixed admin menu tests (and updated to 6.x for SimpleTest 2.x). +#359158 by nitrospectide, sun: Fixed Devel Themer breaks admin menu. +#365335 by sun: Fixed not all variables removed after uninstall. + + +Admin Menu 6.x-1.3, 2009-01-24 +------------------------------ +#362454 by sun: Fixed Drupal.settings.admin_menu is undefined JS error in some + browsers. + + +Admin Menu 6.x-1.2, 2009-01-20 +------------------------------ +#358697 by sun: Added docs about admin_menu_suppress() to README.txt. +#342684 by darumaki, sun: Added notice about Opera configuration to README.txt. +#350932 by sun: Fixed "Run updates" link repeated per language/site. +#342298 by gustz: Updated Spanish translation. +#346106 by sun: Fixed XHTML-Strict validation for admin menu icon. +#287448 by sun: Fixed unnecessary menu rebuild for users without permission to + use admin menu. +#342002 by AltaVida: Fixed improper test for node/add paths. +#272920 by keith.smith: Changed all text strings throughout the module. +#322731 by sun: Fixed improper use of t() in module install file. +#282030 by sun: Fixed "Run updates" item visible for unprivileged users. +#322877 by sun: Added tweak to move page tabs into administration menu. +#287468 by sun: Fixed module paths directly below "admin" get the wrong parent. +#310423 by sun: Added optional position: fixed configuration setting. +#292657 by smk-ka: Improved rendering performance. +#234149 by yhager, sun: Fixed RTL support for IE. +#323726 by danez1972: Added Spanish translation. +#325057 by sun: Updated README.txt. +#234149 by yhager, levavie, sun: Added RTL support. +#325057 by sun: Added links to flush specific caches. +#324334 by AltaVida: Fixed usernames with spaces not in Devel user switch links. +#319382 by betz: Added Dutch translation. + + +Admin Menu 6.x-1.1, 2008-09-12 +------------------------------ +#295476 by pwolanin, use for icon path to fix front-page path-change + bug and pathauto conflict, add wipe button to admin form. +#301370 by sun: Disabled module fieldset collapsing behavior by default. +#288672 by sun: Fixed JS hover behavior not working in IE. +#290803 by sun: Fixed missing devel_themer in devel modules; added some others. +#286636 by sun: Fixed menus do not drop down in IE6. +#249537 by pwolanin, sun: Added admin_menu_suppress() to allow other modules to + disable the display of admin_menu on certain pages (f.e. popups). +#268211 by sun: Fixed invalid issue queue links for custom modules and + sub-modules of projects. +#261461 by sun: Added FAQ entry for displaying other menus like admin_menu. +#264067 by sun: Added FAQ entry for huge amount of anonymous users displayed. +#280002 by pwolanin: Clean up .test setUp function. +#242377 by sun: Fixed sub-level menu items exceed total document height. + + +Admin Menu 6.x-1.0, 2008-06-26 +------------------------------ +#266308 by sun: Fixed jQuery 1.0.x incompatible selector for collapsing modules. +#268373 by sun: Added hook_update to cleanup for alpha/beta testers. +#268373 by sun: Added menu callback to disable/enable developer modules. +#132524 by pwolanin: Fixed admin_menu links are re-inserted each time menu links + are rebuilt. +by smk-ka: Performance: Use 'defer' attribute for JavaScript to delay execution. +#266099 by sun: Fixed description of "Apply margin-top" configuration setting. +#266308 by sun: Usability: Added Utility module features to collapse module + fieldsets on Modules page. +#251341 by sun: Added docs about display drupal links permission. + + +Admin Menu 6.x-1.0-BETA, 2008-06-08 +----------------------------------- +#132524 by sun: Fixed support for sub-content-types below node/add. +#132524 by pwolanin: Added support for localizable menu links. +#132524 by pwolanin, sun: Fixed menu links adjustments. +#132524 by pwolanin: Added simpletest. +#132524 by pwolanin: Major rewrite to better use Drupal 6 menu system. +#132524 by sun: Moved gettext translation files into translations. +#132524 by sun: Committing pre-alpha code for D6 due to public demand. + + +Admin Menu 5.x-2.x, xxxx-xx-xx +------------------------------ +#246221 by sun: Fixed user counter displays different values than Who's online + block. +#239022 by mikl: Added Danish translation. +#234444 by smk-ka: Fixed admin_menu icon does not respect theme settings. +#198240 by sun: Fixed admin_menu displayed in print output. + + +Admin Menu 5.x-2.4, 2008-02-24 +------------------------------ +#214740 by sun: Regression: Fixed directly applied marginTop not supported by IE. +#214725 by sun: Fixed wrong CSS id in admin_menu.js (missed in 5.x-2.3). + + +Admin Menu 5.x-2.3, 2008-02-24 +------------------------------ +#214725 by sun: Fixed CSS id and classes should not contain underscores. +#209390 by sun: Added note about interaction with user role permissions. +#214740 by jjeff, sun: Added module settings to configure margin-top CSS. +#200737 by sun: Changed admin_menu (fav)icon to use theme setting, if defined. +#203116 by smk-ka: Improved performance of non-cached admin_menu by storing + already processed URLs in the cache. +#224605 by sun: 'Add ' items do not appear without 'administer + nodes' permission. +#210615 by robertgarrigos: Fixed Mozilla Mac: Collapsible fieldsets display + error. + + +Admin Menu 5.x-2.2, 2007-01-08 +------------------------------ +#204884 by jjeff: Usability: Override theme font family declaration. +#204935 by jjeff: Added mouseout delay for hovered menus (yay!). +#193941 by downgang: Fixed margin in IE6 using Garland theme. +#197306 by sun: Fixed 'Run updates' leads to wrong url with clean URLs disabled. +Moved images into sub-folder. +by smk-ka: Fixed icon title for user counter not displayed & coding style. +Fixed user count not displayed without 'administer users' permission. + + +Admin Menu 5.x-2.1, 2007-12-02 +------------------------------ +Fixed adding menu items with negative weight not always working. +Fixed admin_menu_copy_items() is overwriting already existing items. +Fixed display menu item ids in devel settings does not work. + + +Admin Menu 5.x-2.0, 2007-12-02 +------------------------------ +Added devel_admin_menu() for fast access to clear-cache, variable editor and + switch_user. +Added username to logout button. +Added hook_admin_menu() to allow other modules to alter admin_menu. +#194189 by sun: Added counter for current anonymous/authenticated users. +Added Drupal.org project issue queue links for all enabled contrib modules. +#189701 by sun: Changed admin_menu icon to be a menu. +#193925 by sun: Removed obsolete menu slicing code. +#193669 by smk-ka: Moved admin_menu builder functions into include file. + + +Admin Menu 5.x-1.2, 2007-11-18 +------------------------------ +#176969 by smk-ka: Fixed performance issues with path(auto) module by + introducing a menu cache for admin_menu. +#179648 by sun: Inject admin_menu into theme. + Fixes several CSS bugs in various themes and also activation of admin_menu + immediately after installation. +#191213 by Standard: Fixed block info shouldn't contain the word "block". +#187816 by sun: Fixed "Add" not translatable. +#186218 by sun: Fixed admin menu icon too big in Safari. +#182563 by sun: Fixed wrong datatype for array_search in _admin_menu_get_children(). +#183496 by sun: Fixed invalid argument supplied for foreach in admin_menu_copy_items(). + + +Admin Menu 5.x-1.1, 2007-10-10 +------------------------------ +#178876 by sun: Fixed 3rd-level submenus expand without hover over. +#153455 by sun: Fixed add product node sub-elements are empty. +Fixed path_to_theme() call breaking blocks page. +#177582 by sun: Fixed bluebreeze theme compatibility. + + +Admin Menu 5.x-1.0, 2007-09-06 +------------------------------ +#156952 by sun: Fixed admin menu inaccessible due to margins. +#149229 by sun: Fixed admin menu not expanding in IE7. +#172545 by sun: Use opacity instead of -moz-opacity. +#132867 Fixed z-index too low. +- Fixed admin menu block selectors to override any other theme styles. +#155589 by sun: Added permission to access administration menu. +- Fixed a PHP warning when there are no content types defined in the system, as + node/add then has no child menu items. +#155312 by sun: Fixed menu item tooltip clashes. +Added support for custom stylesheets per theme. +Removed 4.7.x compatibility. + + +Admin Menu 4.7-1.3, 2007-03-30 +------------------------------ +#126601 Fixed Users can see inaccessible items. +#121027 Fixed Page not found entries for menu-collapsed.png. + + +Admin Menu 4.7-1.2, 2007-03-04 +------------------------------ +- Fixed menu item adjustments +- Fixed IE / Safari support +- Fixed base_path for IE support +- Added create content options to content management menu + + +Admin Menu 4.7-1.1, 2007-01-24 +------------------------------ +First stable release, compatible to Drupal 4.7.x and 5.x. + + +Admin Menu 4.7-1.0, 2007-01-16 +------------------------------ +Initial release of admin_menu module. Already supporting Drupal 5.0. diff --git a/sites/all/modules/contrib/admin_menu/LICENSE.txt b/sites/all/modules/contrib/admin_menu/LICENSE.txt new file mode 100644 index 0000000000..d159169d10 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/sites/all/modules/contrib/admin_menu/README.txt b/sites/all/modules/contrib/admin_menu/README.txt new file mode 100644 index 0000000000..136db70991 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/README.txt @@ -0,0 +1,188 @@ + +-- SUMMARY -- + +The Administration menu module displays the entire administrative menu tree (and +most local tasks) in a drop-down menu, providing administrators one- or +two-click access to most pages. Other modules may also add menu links to the +menu using hook_admin_menu_output_alter(). + +For a full description of the module, visit the project page: + http://drupal.org/project/admin_menu + +To submit bug reports and feature suggestions, or to track changes: + http://drupal.org/project/issues/admin_menu + + +-- REQUIREMENTS -- + +None. + + +-- INSTALLATION -- + +* Install as usual, see http://drupal.org/node/895232 for further information. + +* You likely want to disable Toolbar module, since its output clashes with + Administration menu. + + +-- CONFIGURATION -- + +* Configure user permissions in Administration » People » Permissions: + + - Use the administration pages and help (System module) + + The top-level administration categories require this permission to be + accessible. The administration menu will be empty unless this permission is + granted. + + - Access administration menu + + Users in roles with the "Access administration menu" permission will see + the administration menu at the top of each page. + + - Display Drupal links + + Users in roles with the "Display drupal links" permission will receive + links to drupal.org issue queues for all enabled contributed modules. The + issue queue links appear under the administration menu icon. + + Note that the menu items displayed in the administration menu depend on the + actual permissions of the viewing user. For example, the "People" menu item + is not displayed to a user who is not a member of a role with the "Administer + users" permission. + +* Customize the menu settings in Administration » Configuration and modules » + Administration » Administration menu. + +* To prevent administrative menu items from appearing twice, you may hide the + "Management" menu block. + + +-- CUSTOMIZATION -- + +* To override the default administration menu icon, you may: + + 1) Disable it via CSS in your theme: + + body #admin-menu-icon { display: none; } + + 2) Alter the image by overriding the theme function: + + Copy the entire theme_admin_menu_icon() function into your template.php, + rename it to phptemplate_admin_menu_icon() or THEMENAME_admin_menu_icon(), + and customize the output according to your needs. + + Remember that the output of the administration menu is cached. To see changes + from your theme override function, you must clear your site cache (via + the "Flush all caches" link on the menu). + +* To override the font size, add the following line to your theme's stylesheet: + + body #admin-menu { font-size: 10px; } + + +-- TROUBLESHOOTING -- + +* If the menu does not display, check the following: + + - Are the "Access administration menu" and "Use the administration pages and help" + permissions enabled for the appropriate roles? + + - Does html.tpl.php of your theme output the $page_bottom variable? + +* If the menu is rendered behind a Flash movie object, add this property to your + Flash object(s): + + + + See http://drupal.org/node/195386 for further information. + + +-- FAQ -- + +Q: When the administration menu module is enabled, blank space is added to the + bottom of my theme. Why? + +A: This is caused by a long list of links to module issue queues at Drupal.org. + Use Administer >> User management >> Permissions to disable the "display + drupal links" permission for all appropriate roles. Note that since UID 1 + automatically receives all permissions, the list of issue queue links cannot + be disabled for UID 1. + + +Q: After upgrading to 6.x-1.x, the menu disappeared. Why? + +A: You may need to regenerate your menu. Visit + http://example.com/admin/build/modules to regenerate your menu (substitute + your site name for example.com). + + +Q: Can I configure the administration menu module to display another menu (like + the Navigation menu, for instance)? + +A: No. As the name implies, administration menu module is for administrative + menu links only. However, you can copy and paste the contents of + admin_menu.css into your theme's stylesheet and replace #admin-menu with any + other menu block id (#block-menu-1, for example). + + +Q: Sometimes, the user counter displays a lot of anonymous users, but no spike + of users or requests appear in Google Analytics or other tracking tools. + +A: If your site was concurrently spidered by search-engine robots, it may have + a significant number of anonymous users for a short time. Most web tracking + tools like Google Analytics automatically filter out these requests. + + +Q: I enabled "Aggregate and compress CSS files", but admin_menu.css is still + there. Is this normal? + +A: Yes, this is the intended behavior. the administration menu module only loads + its stylesheet as needed (i.e., on page requests by logged-on, administrative + users). + + +Q: Why are sub-menus not visible in Opera? + +A: In the Opera browser preferences under "web pages" there is an option to fit + to width. By disabling this option, sub-menus in the administration menu + should appear. + + +Q: How can the administration menu be hidden on certain pages? + +A: You can suppress it by simply calling the following function in PHP: + + module_invoke('admin_menu', 'suppress'); + + However, this needs to happen as early as possible in the page request, so + placing it in the theming layer (resp. a page template file) is too late. + Ideally, the function is called in hook_init() in a custom module. If you do + not have a custom module, placing it into some conditional code at the top of + template.php may work out, too. + + +-- CONTACT -- + +Current maintainers: +* Daniel F. Kudwien (sun) - http://drupal.org/user/54136 +* Peter Wolanin (pwolanin) - http://drupal.org/user/49851 +* Stefan M. Kudwien (smk-ka) - http://drupal.org/user/48898 +* Dave Reid (Dave Reid) - http://drupal.org/user/53892 + +Major rewrite for Drupal 6 by Peter Wolanin (pwolanin). + +This project has been sponsored by: +* UNLEASHED MIND + Specialized in consulting and planning of Drupal powered sites, UNLEASHED + MIND offers installation, development, theming, customization, and hosting + to get you started. Visit http://www.unleashedmind.com for more information. + +* Lullabot + Friendly Drupal experts providing professional consulting & education + services. Visit http://www.lullabot.com for more information. + +* Acquia + Commercially Supported Drupal. Visit http://acquia.com for more information. + diff --git a/sites/all/modules/contrib/admin_menu/admin_devel/admin_devel.info b/sites/all/modules/contrib/admin_menu/admin_devel/admin_devel.info new file mode 100644 index 0000000000..ab3d641ff3 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_devel/admin_devel.info @@ -0,0 +1,12 @@ +name = Administration Development tools +description = Administration and debugging functionality for developers and site builders. +package = Administration +core = 7.x +scripts[] = admin_devel.js + +; Information added by Drupal.org packaging script on 2014-12-19 +version = "7.x-3.0-rc5" +core = "7.x" +project = "admin_menu" +datestamp = "1419029284" + diff --git a/sites/all/modules/contrib/admin_menu/admin_devel/admin_devel.js b/sites/all/modules/contrib/admin_menu/admin_devel/admin_devel.js new file mode 100644 index 0000000000..833197a1b4 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_devel/admin_devel.js @@ -0,0 +1,40 @@ +(function($) { + +/** + * jQuery debugging helper. + * + * Invented for Dreditor. + * + * @usage + * $.debug(var [, name]); + * $variable.debug( [name] ); + */ +jQuery.extend({ + debug: function () { + // Setup debug storage in global window. We want to look into it. + window.debug = window.debug || []; + + args = jQuery.makeArray(arguments); + // Determine data source; this is an object for $variable.debug(). + // Also determine the identifier to store data with. + if (typeof this == 'object') { + var name = (args.length ? args[0] : window.debug.length); + var data = this; + } + else { + var name = (args.length > 1 ? args.pop() : window.debug.length); + var data = args[0]; + } + // Store data. + window.debug[name] = data; + // Dump data into Firebug console. + if (typeof console != 'undefined') { + console.log(name, data); + } + return this; + } +}); +// @todo Is this the right way? +jQuery.fn.debug = jQuery.debug; + +})(jQuery); diff --git a/sites/all/modules/contrib/admin_menu/admin_devel/admin_devel.module b/sites/all/modules/contrib/admin_menu/admin_devel/admin_devel.module new file mode 100644 index 0000000000..5884f54ea6 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_devel/admin_devel.module @@ -0,0 +1,33 @@ + 'submit', + '#value' => t('Rebuild system links'), + '#submit' => array('admin_devel_form_admin_menu_theme_settings_alter_rebuild_submit'), + // @todo Not necessarily ready for mass-consumption yet. + '#access' => FALSE, + ); +} + +/** + * Form submit handler to wipe and rebuild all 'module' = 'system' menu links. + */ +function admin_devel_form_admin_menu_theme_settings_alter_rebuild_submit($form, &$form_state) { + // Delete all auto-generated menu links derived from menu router items. + db_delete('menu_links') + ->condition('module', 'system') + ->execute(); + // Rebuild menu links from current menu router items. + menu_rebuild(); + + drupal_set_message(t('System links derived from menu router paths have been rebuilt.')); +} diff --git a/sites/all/modules/contrib/admin_menu/admin_menu-rtl.css b/sites/all/modules/contrib/admin_menu/admin_menu-rtl.css new file mode 100644 index 0000000000..9414dcf950 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_menu-rtl.css @@ -0,0 +1,64 @@ + +#admin-menu { + text-align: right; +} +#admin-menu .dropdown .admin-menu-users a { + background-position: 10% center; + padding-left: 22px; + padding-right: 0; +} +#admin-menu .dropdown .admin-menu-action, +#admin-menu .dropdown .admin-menu-search { + float: left; +} +#admin-menu .dropdown .admin-menu-action a { + border-left: none; + border-right: 1px solid #323232; +} + +/* All lists */ +#admin-menu a { + text-align: right; +} +#admin-menu .dropdown a { + border-left: 1px solid #323232; + border-right: 0; +} +#admin-menu .dropdown .admin-menu-tab a { + border-left: 1px solid #52565E; + border-right: 0; +} +#admin-menu .dropdown li li a { + border-left: 0; +} + +/* All list items */ +#admin-menu .dropdown li { + float: right; +} +#admin-menu .dropdown li li { +} + +/* Second-level lists */ +#admin-menu .dropdown li ul { + left: auto; + right: -999em; +} + +/* Third-and-above-level lists */ +#admin-menu .dropdown li li.expandable ul { + margin-left: 0; + margin-right: 160px; +} + +/* Lists nested under hovered list items */ +#admin-menu .dropdown li.admin-menu-action:hover ul { + left: 0 !important; + right: auto; +} + +/* Second-and-more-level hovering */ +#admin-menu .dropdown li li.expandable { + background-image: url(images/arrow-rtl.png); + background-position: 5px 6px; +} diff --git a/sites/all/modules/contrib/admin_menu/admin_menu.admin.js b/sites/all/modules/contrib/admin_menu/admin_menu.admin.js new file mode 100644 index 0000000000..9ee9f36f3a --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_menu.admin.js @@ -0,0 +1,62 @@ +(function($) { + +/** + * Live preview of Administration menu components. + */ +Drupal.behaviors.adminMenuLivePreview = { + attach: function (context, settings) { + $('input[name^="admin_menu_components"]', context).once('admin-menu-live-preview') + .change(function () { + var target = $(this).attr('rel'); + $(target).toggle(this.checked); + }) + .trigger('change'); + } +}; + +/** + * Automatically enables required permissions on demand. + * + * Many users do not understand that two permissions are required for the + * administration menu to appear. Since Drupal core provides no facility for + * this, we implement a simple manual confirmation for automatically enabling + * the "other" permission. + */ +Drupal.behaviors.adminMenuPermissionsSetupHelp = { + attach: function (context, settings) { + $('#permissions', context).once('admin-menu-permissions-setup', function () { + // Retrieve matrix/mapping - these need to use the same indexes for the + // same permissions and roles. + var $roles = $(this).find('th:not(:first)'); + var $admin = $(this).find('input[name$="[access administration pages]"]'); + var $menu = $(this).find('input[name$="[access administration menu]"]'); + + // Retrieve the permission label - without description. + var adminPermission = $.trim($admin.eq(0).parents('td').prev().children().get(0).firstChild.textContent); + var menuPermission = $.trim($menu.eq(0).parents('td').prev().children().get(0).firstChild.textContent); + + $admin.each(function (index) { + // Only proceed if both are not enabled already. + if (!(this.checked && $menu[index].checked)) { + // Stack both checkboxes and attach a click event handler to both. + $(this).add($menu[index]).click(function () { + // Do nothing when disabling a permission. + if (this.checked) { + // Figure out which is the other, check whether it still disabled, + // and if so, ask whether to auto-enable it. + var other = (this == $admin[index] ? $menu[index] : $admin[index]); + if (!other.checked && confirm(Drupal.t('Also allow !name role to !permission?', { + '!name': $roles[index].textContent, + '!permission': (this == $admin[index] ? menuPermission : adminPermission) + }))) { + other.checked = 'checked'; + } + } + }); + } + }); + }); + } +}; + +})(jQuery); diff --git a/sites/all/modules/contrib/admin_menu/admin_menu.api.php b/sites/all/modules/contrib/admin_menu/admin_menu.api.php new file mode 100644 index 0000000000..2d212fbc33 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_menu.api.php @@ -0,0 +1,164 @@ + Content types. + // The key denotes the dynamic path to expand to multiple menu items. + $map['admin/structure/types/manage/%node_type'] = array( + // Link generated items directly to the "Content types" item. + 'parent' => 'admin/structure/types', + // Create expansion arguments for the '%node_type' placeholder. + 'arguments' => array( + array( + '%node_type' => array_keys(node_type_get_types()), + ), + ), + ); + return $map; +} + +/** + * Add to the administration menu content before it is rendered. + * + * Only use this hook to add new data to the menu structure. Use + * hook_admin_menu_output_alter() to *alter* existing data. + * + * @param array $content + * A structured array suitable for drupal_render(), potentially containing: + * - menu: The administrative menu of links below the path 'admin/*'. + * - icon: The icon menu. + * - account: The user account name and log out link. + * - users: The user counter. + * Additionally, these special properties: + * - #components: The actual components contained in $content are configurable + * and depend on the 'admin_menu_components' configuration value. #components + * holds a copy of that for convenience. + * - #complete: A Boolean indicating whether the complete menu should be built, + * ignoring the current configuration in #components. + * Passed by reference. + * + * @see hook_admin_menu_output_alter() + * @see admin_menu_links_menu() + * @see admin_menu_links_icon() + * @see admin_menu_links_user() + * @see theme_admin_menu_links() + */ +function hook_admin_menu_output_build(&$content) { + // In case your implementation provides a configurable component, check + // whether the component should be displayed: + if (empty($content['#components']['shortcut.links']) && !$content['#complete']) { + return; + } + + // Add new top-level item to the menu. + if (isset($content['menu'])) { + $content['menu']['myitem'] = array( + '#title' => t('My item'), + // #attributes are used for list items (LI). + '#attributes' => array('class' => array('mymodule-myitem')), + '#href' => 'mymodule/path', + // #options are passed to l(). + '#options' => array( + 'query' => drupal_get_destination(), + // Apply a class on the link (anchor). + 'attributes' => array('class' => array('myitem-link-anchor')), + ), + // #weight controls the order of links in the resulting item list. + '#weight' => 50, + ); + } + // Add link to the icon menu to manually run cron. + if (isset($content['icon'])) { + $content['icon']['myitem']['cron'] = array( + '#title' => t('Run cron'), + '#access' => user_access('administer site configuration'), + '#href' => 'admin/reports/status/run-cron', + ); + } +} + +/** + * Change the administration menu content before it is rendered. + * + * Only use this hook to alter existing data in the menu structure. Use + * hook_admin_menu_output_build() to *add* new data. + * + * @param array $content + * A structured array suitable for drupal_render(). Passed by reference. + * + * @see hook_admin_menu_output_build() + */ +function hook_admin_menu_output_alter(&$content) { +} + +/** + * Return content to be replace via JS in the cached menu output. + * + * @param bool $complete + * A Boolean indicating whether all available components of the menu will be + * output and the cache will be skipped. + * + * @return array + * An associative array whose keys are jQuery selectors and whose values are + * strings containing the replacement content. + */ +function hook_admin_menu_replacements($complete) { + $items = array(); + // If the complete menu is output, then it is uncached and will contain the + // current counts already. + if (!$complete) { + // Check whether the users count component is enabled. + $components = variable_get('admin_menu_components', array()); + if (!empty($components['admin_menu.users']) && ($user_count = admin_menu_get_user_count())) { + // Replace the counters in the cached menu output with current counts. + $items['.admin-menu-users a'] = $user_count; + } + } + return $items; +} + +/** + * Inform about additional module-specific caches that can be cleared. + * + * Administration menu uses this hook to gather information about available + * caches that can be flushed individually. Each returned item forms a separate + * menu link below the "Flush all caches" link in the icon menu. + * + * @return array + * An associative array whose keys denote internal identifiers for a + * particular caches (which can be freely defined, but should be in a module's + * namespace) and whose values are associative arrays containing: + * - title: The name of the cache, without "cache" suffix. This label is + * output as link text, but also for the "!title cache cleared." + * confirmation message after flushing the cache; make sure it works and + * makes sense to users in both locations. + * - callback: The name of a function to invoke to flush the individual cache. + */ +function hook_admin_menu_cache_info() { + $caches['update'] = array( + 'title' => t('Update data'), + 'callback' => '_update_cache_clear', + ); + return $caches; +} diff --git a/sites/all/modules/contrib/admin_menu/admin_menu.color.css b/sites/all/modules/contrib/admin_menu/admin_menu.color.css new file mode 100644 index 0000000000..ea3ef491d5 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_menu.color.css @@ -0,0 +1,45 @@ + +/** + * @file + * Administration menu color override. + */ + +#admin-menu { + background-color: #911; + background-image: url(images/bkg-red.png); +} +#admin-menu li.admin-menu-action a { + border-left-color: #a91f1f; +} + +/* All lists */ +#admin-menu ul a { + border-right-color: #a91f1f; +} +#admin-menu ul li.admin-menu-tab a { + border-right-color: #52565E; +} +#admin-menu li li a { + border-top-color: #801f1f; +} + +/* All list items */ +#admin-menu li li { + background-color: #991f1f; +} + +/* Second-and-more-level hovering */ +#admin-menu li li.expandable { + background-color: #b93f3f; +} +#admin-menu li li:hover { + background-color: #690f0f; +} +#admin-menu li li.expandable:hover a, +#admin-menu li li.expandable:hover li.expandable:hover a { + border-color: #801f1f; +} +#admin-menu li li.expandable:hover li a, +#admin-menu li li.expandable:hover li.expandable:hover li a { + border-color: #801f1f; +} diff --git a/sites/all/modules/contrib/admin_menu/admin_menu.css b/sites/all/modules/contrib/admin_menu/admin_menu.css new file mode 100644 index 0000000000..52ae3ff54c --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_menu.css @@ -0,0 +1,233 @@ + +/** + * @file + * Administration menu. + * + * Implementation of Sons of Suckerfish Dropdowns. + * + * @see www.htmldog.com/articles/suckerfish + */ + +#admin-menu { + background: #101010 url(images/bkg.png) bottom left repeat-x; + font-size: 9px; + font-family: "lucida grande", tahoma, verdana, arial, sans-serif; + left: 0; + position: absolute; + text-align: left; + top: 0; + width: 100%; +} +#admin-menu-wrapper { + overflow: hidden; +} +#admin-menu .dropdown .admin-menu-icon a { + padding: 1px 8px 4px; +} +#admin-menu .dropdown .admin-menu-icon ul a { + padding: 4px 8px; +} +#admin-menu .dropdown .admin-menu-icon img { + vertical-align: bottom; +} +#admin-menu .dropdown .admin-menu-users a { + background: transparent url(images/icon_users.png) 90% center no-repeat; + padding-right: 22px; +} +#admin-menu .dropdown .admin-menu-action, +#admin-menu .dropdown .admin-menu-search { + float: right; +} +#admin-menu .dropdown .admin-menu-action a { + border-left: 1px solid #323232; + border-right: none; +} +body.admin-menu { + margin-top: 20px !important; +} + +/* All lists */ +#admin-menu, +#admin-menu .dropdown { + line-height: 1.4em; + list-style: none; + margin: 0; + padding: 0; + z-index: 999; +} +#admin-menu .dropdown { + position: static; +} +#admin-menu a, +#admin-menu li > span { + background: transparent none; + border: none; + color: #EEE; + font-weight: normal; + text-align: left; /* LTR */ + text-decoration: none; +} +#admin-menu .dropdown a, +#admin-menu .dropdown li > span { + border-right: 1px solid #323232; /* LTR */ + display: block; + padding: 4px 8px; +} +#admin-menu .dropdown .admin-menu-tab a { + border-right: 1px solid #52565E; /* LTR */ +} +#admin-menu .dropdown li li a { + border-right: none; /* LTR */ + border-top: 1px solid #323232; +} + +/* All list items */ +#admin-menu .dropdown li { + background-image: none; + float: left; /* LTR */ + height: 100%; + list-style-image: none; + list-style-type: none; + margin: 0 !important; + padding: 0; +} +#admin-menu .dropdown .admin-menu-tab { + background: url(images/bkg_tab.png) repeat-x left bottom; + padding-bottom: 1px; +} +#admin-menu .dropdown li li { + background: #202020; + filter: Alpha(opacity=88); + float: none; + opacity: 0.88; + width: 160px; /* Required for Opera */ +} +#admin-menu .dropdown li li li { + filter: Alpha(opacity=100); + opacity: 1; +} + +/* Second-level lists */ +/* Note: We must hide sub-lists or scrollbars might appear (display: none is not read by screen readers). */ +#admin-menu .dropdown li ul { + background: none; + display: none; + left: -999em; /* LTR */ + line-height: 1.2em; + margin: 0; + position: absolute; + width: 160px; +} + +/* Third-and-above-level lists */ +#admin-menu .dropdown li li.expandable ul { + margin: -20px 0 0 160px; /* LTR */ +} + +#admin-menu .dropdown li:hover ul ul, +#admin-menu .dropdown li:hover ul ul ul, +#admin-menu .dropdown li:hover ul ul ul ul, +#admin-menu .dropdown li:hover ul ul ul ul ul { + display: none; + left: -999em; /* LTR */ +} + +/* Lists nested under hovered list items */ +#admin-menu .dropdown li:hover ul, +#admin-menu .dropdown li li:hover ul, +#admin-menu .dropdown li li li:hover ul, +#admin-menu .dropdown li li li li:hover ul, +#admin-menu .dropdown li li li li li:hover ul { + display: block; + left: auto; /* LTR */ +} +#admin-menu .dropdown li.admin-menu-action:hover ul { + right: 0; /* LTR */ +} + +/* Second-and-more-level hovering */ +#admin-menu .dropdown li li.expandable { + background: #45454A url(images/arrow.png) no-repeat 145px 6px; +} +#admin-menu .dropdown li li:hover { + background-color: #111; +} +#admin-menu .dropdown li li:hover a, +#admin-menu .dropdown li li:hover li:hover a, +#admin-menu .dropdown li li:hover li:hover li:hover a { + color: #FFF; +} +#admin-menu .dropdown li li.expandable:hover a, +#admin-menu .dropdown li li.expandable:hover li.expandable:hover a { + border-color: #444; + color: #EEE; +} +#admin-menu .dropdown li li.expandable:hover li a, +#admin-menu .dropdown li li.expandable:hover li.expandable:hover li a { + border-color: #323232; +} +#admin-menu .dropdown li li:hover li a { + color: #EEE; +} + +/* Search form */ +#admin-menu .admin-menu-search .form-item { + margin: 0; + padding: 0; +} +#admin-menu .admin-menu-search input { + background: #fff none center right no-repeat; + border: none; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + font-size: 10px; + margin: 1px 0; + outline: none; + padding: 2px 22px 2px 4px; + width: 158px; +} + +#admin-menu .dropdown .admin-menu-search-results { + display: block !important; + left: auto !important; + top: 100%; +} +#admin-menu .admin-menu-search-results, +#admin-menu .admin-menu-search-results li { + width: 186px; +} + +#admin-menu li.highlight { + background-color: #eee !important; +} +#admin-menu li.highlight > a { + border-color: #ccc !important; + color: #111 !important; +} + +/* #210615: Mozilla on Mac fix */ +html.js fieldset.collapsible div.fieldset-wrapper { + overflow: visible; +} + +/* Hide the menu on print output. */ +@media print { + #admin-menu { + display: none !important; + } + body.admin-menu { + margin-top: 0 !important; + } +} + +/** + * Tweaks permissions, if enabled. + */ +tr.admin-menu-tweak-permissions-processed { + cursor: pointer; + cursor: hand; +} +tr.admin-menu-tweak-permissions-processed td.module { + border-top: 0; +} diff --git a/sites/all/modules/contrib/admin_menu/admin_menu.inc b/sites/all/modules/contrib/admin_menu/admin_menu.inc new file mode 100644 index 0000000000..2eab789b4f --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_menu.inc @@ -0,0 +1,910 @@ + $data) { + // Convert named placeholders to anonymous placeholders, since the menu + // system stores paths using anonymous placeholders. + $replacements = array_fill_keys(array_keys($data['arguments'][0]), '%'); + $data['parent'] = strtr($data['parent'], $replacements); + $new_map[strtr($path, $replacements)] = $data; + } + $expand_map = $new_map; + unset($new_map); + + // Retrieve dynamic menu link tree for the expansion mappings. + // @todo Skip entire processing if initial $expand_map is empty and directly + // return $tree? + if (!empty($expand_map)) { + $tree_dynamic = admin_menu_tree_dynamic($expand_map); + } + else { + $tree_dynamic = array(); + } + + // Merge local tasks with static menu tree. + $tree = menu_tree_all_data($menu_name); + admin_menu_merge_tree($tree, $tree_dynamic, array()); + + return $tree; +} + +/** + * Load menu link trees for router paths containing dynamic arguments. + * + * @param $expand_map + * An array containing menu router path placeholder expansion argument + * mappings. + * + * @return + * An associative array whose keys are the parent paths of the menu router + * paths given in $expand_map as well as the parent paths of any child link + * deeper down the tree. The parent paths are used in admin_menu_merge_tree() + * to check whether anything needs to be merged. + * + * @see hook_admin_menu_map() + */ +function admin_menu_tree_dynamic(array $expand_map) { + $p_columns = array(); + for ($i = 1; $i <= MENU_MAX_DEPTH; $i++) { + $p_columns[] = 'p' . $i; + } + + // Fetch p* columns for all router paths to expand. + $router_paths = array_keys($expand_map); + $plids = db_select('menu_links', 'ml') + ->fields('ml', $p_columns) + ->condition('router_path', $router_paths) + ->execute() + ->fetchAll(PDO::FETCH_ASSOC); + + // Unlikely, but possible. + if (empty($plids)) { + return array(); + } + + // Use queried plid columns to query sub-trees for the router paths. + $query = db_select('menu_links', 'ml'); + $query->join('menu_router', 'm', 'ml.router_path = m.path'); + $query + ->fields('ml') + ->fields('m', array_diff(drupal_schema_fields_sql('menu_router'), drupal_schema_fields_sql('menu_links'))); + + // The retrieved menu link trees have to be ordered by depth, so parents + // always come before their children for the storage logic below. + foreach ($p_columns as $column) { + $query->orderBy($column, 'ASC'); + } + + $db_or = db_or(); + foreach ($plids as $path_plids) { + $db_and = db_and(); + // plids with value 0 may be ignored. + foreach (array_filter($path_plids) as $column => $plid) { + $db_and->condition($column, $plid); + } + $db_or->condition($db_and); + } + $query->condition($db_or); + $result = $query + ->execute() + ->fetchAllAssoc('mlid', PDO::FETCH_ASSOC); + + // Store dynamic links grouped by parent path for later merging and assign + // placeholder expansion arguments. + $tree_dynamic = array(); + foreach ($result as $mlid => $link) { + // If contained in $expand_map, then this is a (first) parent, and we need + // to store by the defined 'parent' path for later merging, as well as + // provide the expansion map arguments to apply to the dynamic tree. + if (isset($expand_map[$link['path']])) { + $parent_path = $expand_map[$link['path']]['parent']; + $link['expand_map'] = $expand_map[$link['path']]['arguments']; + } + // Otherwise, just store this link keyed by its parent path; the expand_map + // is automatically derived from parent paths. + else { + $parent_path = $result[$link['plid']]['path']; + } + + $tree_dynamic[$parent_path][] = $link; + } + + return $tree_dynamic; +} + +/** + * Walk through the entire menu tree and merge in expanded dynamic menu links. + * + * @param &$tree + * A menu tree structure as returned by menu_tree_all_data(). + * @param $tree_dynamic + * A dynamic menu tree structure as returned by admin_menu_tree_dynamic(). + * @param $expand_map + * An array containing menu router path placeholder expansion argument + * mappings. + * + * @see hook_admin_menu_map() + * @see admin_menu_tree_dynamic() + * @see menu_tree_all_data() + */ +function admin_menu_merge_tree(array &$tree, array $tree_dynamic, array $expand_map) { + foreach ($tree as $key => $data) { + $path = $data['link']['router_path']; + + // Recurse into regular menu tree. + if ($tree[$key]['below']) { + admin_menu_merge_tree($tree[$key]['below'], $tree_dynamic, $expand_map); + } + // Nothing to merge, if this parent path is not in our dynamic tree. + if (!isset($tree_dynamic[$path])) { + continue; + } + + // Add expanded dynamic items. + foreach ($tree_dynamic[$path] as $link) { + // If the dynamic item has custom placeholder expansion parameters set, + // use them, otherwise keep current. + if (isset($link['expand_map'])) { + // If there are currently no expansion parameters, we may use the new + // set immediately. + if (empty($expand_map)) { + $current_expand_map = $link['expand_map']; + } + else { + // Otherwise we need to filter out elements that differ from the + // current set, i.e. that are not in the same path. + $current_expand_map = array(); + foreach ($expand_map as $arguments) { + foreach ($arguments as $placeholder => $value) { + foreach ($link['expand_map'] as $new_arguments) { + // Skip the new argument if it doesn't contain the current + // replacement placeholders or if their values differ. + if (!isset($new_arguments[$placeholder]) || $new_arguments[$placeholder] != $value) { + continue; + } + $current_expand_map[] = $new_arguments; + } + } + } + } + } + else { + $current_expand_map = $expand_map; + } + + // Skip dynamic items without expansion parameters. + if (empty($current_expand_map)) { + continue; + } + + // Expand anonymous to named placeholders. + // @see _menu_load_objects() + $path_args = explode('/', $link['path']); + $load_functions = unserialize($link['load_functions']); + if (is_array($load_functions)) { + foreach ($load_functions as $index => $function) { + if ($function) { + if (is_array($function)) { + list($function,) = each($function); + } + // Add the loader function name minus "_load". + $placeholder = '%' . substr($function, 0, -5); + $path_args[$index] = $placeholder; + } + } + } + $path_dynamic = implode('/', $path_args); + + // Create new menu items using expansion arguments. + foreach ($current_expand_map as $arguments) { + // Create the cartesian product for all arguments and create new + // menu items for each generated combination thereof. + foreach (admin_menu_expand_args($arguments) as $replacements) { + $newpath = strtr($path_dynamic, $replacements); + // Skip this item, if any placeholder could not be replaced. + // Faster than trying to invoke _menu_translate(). + if (strpos($newpath, '%') !== FALSE) { + continue; + } + $map = explode('/', $newpath); + $item = admin_menu_translate($link, $map); + // Skip this item, if the current user does not have access. + if (empty($item)) { + continue; + } + // Build subtree using current replacement arguments. + $new_expand_map = array(); + foreach ($replacements as $placeholder => $value) { + $new_expand_map[$placeholder] = array($value); + } + admin_menu_merge_tree($item, $tree_dynamic, array($new_expand_map)); + $tree[$key]['below'] += $item; + } + } + } + // Sort new subtree items. + ksort($tree[$key]['below']); + } +} + +/** + * Translate an expanded router item into a menu link suitable for rendering. + * + * @param $router_item + * A menu router item. + * @param $map + * A path map with placeholders replaced. + */ +function admin_menu_translate($router_item, $map) { + _menu_translate($router_item, $map, TRUE); + + // Run through hook_translated_menu_link_alter() to add devel information, + // if configured. + $router_item['menu_name'] = 'management'; + // @todo Invoke as usual like _menu_link_translate(). + admin_menu_translated_menu_link_alter($router_item, NULL); + + if ($router_item['access']) { + // Override mlid to make this item unique; since these items are expanded + // from dynamic items, the mlid is always the same, so each item would + // replace any other. + // @todo Doing this instead leads to plenty of duplicate links below + // admin/structure/menu; likely a hidden recursion problem. + // $router_item['mlid'] = $router_item['href'] . $router_item['mlid']; + $router_item['mlid'] = $router_item['href']; + // Turn menu callbacks into regular menu items to make them visible. + if ($router_item['type'] == MENU_CALLBACK) { + $router_item['type'] = MENU_NORMAL_ITEM; + } + + // @see _menu_tree_check_access() + $key = (50000 + $router_item['weight']) . ' ' . $router_item['title'] . ' ' . $router_item['mlid']; + return array($key => array( + 'link' => $router_item, + 'below' => array(), + )); + } + + return array(); +} + +/** + * Create the cartesian product of multiple varying sized argument arrays. + * + * @param $arguments + * A two dimensional array of arguments. + * + * @see hook_admin_menu_map() + */ +function admin_menu_expand_args($arguments) { + $replacements = array(); + + // Initialize line cursors, move out array keys (placeholders) and assign + // numeric keys instead. + $i = 0; + $placeholders = array(); + $new_arguments = array(); + foreach ($arguments as $placeholder => $values) { + // Skip empty arguments. + if (empty($values)) { + continue; + } + $cursor[$i] = 0; + $placeholders[$i] = $placeholder; + $new_arguments[$i] = $values; + $i++; + } + $arguments = $new_arguments; + unset($new_arguments); + + if ($rows = count($arguments)) { + do { + // Collect current argument from each row. + $row = array(); + for ($i = 0; $i < $rows; ++$i) { + $row[$placeholders[$i]] = $arguments[$i][$cursor[$i]]; + } + $replacements[] = $row; + + // Increment cursor position. + $j = $rows - 1; + $cursor[$j]++; + while (!array_key_exists($cursor[$j], $arguments[$j])) { + // No more arguments left: reset cursor, go to next line and increment + // that cursor instead. Repeat until argument found or out of rows. + $cursor[$j] = 0; + if (--$j < 0) { + // We're done. + break 2; + } + $cursor[$j]++; + } + } while (1); + } + + return $replacements; +} + +/** + * Build the administration menu as renderable menu links. + * + * @param $tree + * A data structure representing the administration menu tree as returned from + * menu_tree_all_data(). + * + * @return + * The complete administration menu, suitable for theme_admin_menu_links(). + * + * @see theme_admin_menu_links() + * @see admin_menu_menu_alter() + */ +function admin_menu_links_menu($tree) { + $links = array(); + foreach ($tree as $data) { + // Skip items that are inaccessible, invisible, or link to their parent. + // (MENU_DEFAULT_LOCAL_TASK), and MENU_CALLBACK-alike items that should only + // appear in the breadcrumb. + if (!$data['link']['access'] || $data['link']['type'] & MENU_LINKS_TO_PARENT || $data['link']['type'] == MENU_VISIBLE_IN_BREADCRUMB || $data['link']['hidden'] == 1) { + continue; + } + // Hide 'Administer' and make child links appear on this level. + // @todo Make this configurable. + if ($data['link']['router_path'] == 'admin') { + if ($data['below']) { + $links = array_merge($links, admin_menu_links_menu($data['below'])); + } + continue; + } + // Omit alias lookups. + $data['link']['localized_options']['alias'] = TRUE; + // Remove description to prevent mouseover tooltip clashes. + unset($data['link']['localized_options']['attributes']['title']); + + // Make action links (typically "Add ...") appear first in dropdowns. + // They might appear first already, but only as long as there is no link + // that comes alphabetically first (e.g., a node type with label "Ad"). + if ($data['link']['type'] & MENU_IS_LOCAL_ACTION) { + $data['link']['weight'] -= 1000; + } + + $links[$data['link']['href']] = array( + '#title' => $data['link']['title'], + '#href' => $data['link']['href'], + '#options' => $data['link']['localized_options'], + '#weight' => $data['link']['weight'], + ); + + // Recurse to add any child links. + $children = array(); + if ($data['below']) { + $children = admin_menu_links_menu($data['below']); + $links[$data['link']['href']] += $children; + } + + // Handle links pointing to category/overview pages. + if ($data['link']['page_callback'] == 'system_admin_menu_block_page' || $data['link']['page_callback'] == 'system_admin_config_page') { + // Apply a marker for others to consume. + $links[$data['link']['href']]['#is_category'] = TRUE; + // Automatically hide empty categories. + // Check for empty children first for performance. Only when non-empty + // (typically 'admin/config'), check whether children are accessible. + if (empty($children) || !element_get_visible_children($children)) { + $links[$data['link']['href']]['#access'] = FALSE; + } + } + } + return $links; +} + +/** + * Build icon menu links; mostly containing maintenance helpers. + * + * @see theme_admin_menu_links() + */ +function admin_menu_links_icon() { + $destination = drupal_get_destination(); + + $links = array( + '#theme' => 'admin_menu_links', + '#wrapper_attributes' => array('id' => 'admin-menu-icon'), + '#weight' => -100, + ); + $links['icon'] = array( + '#title' => theme('admin_menu_icon'), + '#attributes' => array('class' => array('admin-menu-icon')), + '#href' => '', + '#options' => array( + 'html' => TRUE, + ), + ); + // Add link to manually run cron. + $links['icon']['cron'] = array( + '#title' => t('Run cron'), + '#weight' => 50, + '#access' => user_access('administer site configuration'), + '#href' => 'admin/reports/status/run-cron', + ); + // Add link to run update.php. + $links['icon']['update'] = array( + '#title' => t('Run updates'), + '#weight' => 50, + // @see update_access_allowed() + '#access' => $GLOBALS['user']->uid == 1 || !empty($GLOBALS['update_free_access']) || user_access('administer software updates'), + '#href' => base_path() . 'update.php', + '#options' => array( + 'external' => TRUE, + ), + ); + // Add link to drupal.org. + $links['icon']['drupal.org'] = array( + '#title' => 'Drupal.org', + '#weight' => 100, + '#access' => user_access('display drupal links'), + '#href' => 'http://drupal.org', + ); + // Add links to project issue queues. + foreach (module_list(FALSE, TRUE) as $module) { + $info = drupal_parse_info_file(drupal_get_path('module', $module) . '/' . $module . '.info'); + if (!isset($info['project']) || isset($links['icon']['drupal.org'][$info['project']])) { + continue; + } + $links['icon']['drupal.org'][$info['project']] = array( + '#title' => t('@project issue queue', array('@project' => $info['name'])), + '#weight' => ($info['project'] == 'drupal' ? -10 : 0), + '#href' => 'http://drupal.org/project/issues/' . $info['project'], + '#options' => array( + 'query' => array('version' => (isset($info['core']) ? $info['core'] : 'All')), + ), + ); + } + // Add items to flush caches. + $links['icon']['flush-cache'] = array( + '#title' => t('Flush all caches'), + '#weight' => 20, + '#access' => user_access('flush caches'), + '#href' => 'admin_menu/flush-cache', + '#options' => array( + 'query' => $destination + array('token' => drupal_get_token('admin_menu/flush-cache')), + ), + ); + $caches = module_invoke_all('admin_menu_cache_info'); + foreach ($caches as $name => $cache) { + $links['icon']['flush-cache'][$name] = array( + '#title' => $cache['title'], + '#href' => 'admin_menu/flush-cache/' . $name, + '#options' => array( + 'query' => $destination + array('token' => drupal_get_token('admin_menu/flush-cache/' . $name)), + ), + ); + } + + // Add Devel module menu links. + if (module_exists('devel')) { + $devel_tree = menu_build_tree('devel'); + $devel_links = admin_menu_links_menu($devel_tree); + if (element_get_visible_children($devel_links)) { + $links['icon']['devel'] = array( + '#title' => t('Development'), + '#weight' => 30, + ) + $devel_links; + } + } + + return $links; +} + +/** + * Builds the account links. + * + * @see theme_admin_menu_links() + */ +function admin_menu_links_account() { + $links = array( + '#theme' => 'admin_menu_links', + '#wrapper_attributes' => array('id' => 'admin-menu-account'), + '#weight' => 100, + ); + $links['account'] = array( + '#title' => format_username($GLOBALS['user']), + '#weight' => -99, + '#attributes' => array('class' => array('admin-menu-action', 'admin-menu-account')), + '#href' => 'user/' . $GLOBALS['user']->uid, + ); + $links['logout'] = array( + '#title' => t('Log out'), + '#weight' => -100, + '#attributes' => array('class' => array('admin-menu-action')), + '#href' => 'user/logout', + ); + // Add Devel module switch user links. + $switch_links = module_invoke('devel', 'switch_user_list'); + if (!empty($switch_links) && count($switch_links) > 1) { + foreach ($switch_links as $uid => $link) { + $links['account'][$link['title']] = array( + '#title' => $link['title'], + '#description' => $link['attributes']['title'], + '#href' => $link['href'], + '#options' => array( + 'query' => $link['query'], + 'html' => !empty($link['html']), + ), + ); + } + } + return $links; +} + +/** + * Builds user counter. + * + * @see theme_admin_menu_links() + */ +function admin_menu_links_users() { + $links = array( + '#theme' => 'admin_menu_links', + '#wrapper_attributes' => array('id' => 'admin-menu-users'), + '#weight' => 150, + ); + // Add link to show current authenticated/anonymous users. + $links['user-counter'] = array( + '#title' => admin_menu_get_user_count(), + '#description' => t('Current anonymous / authenticated users'), + '#weight' => -90, + '#attributes' => array('class' => array('admin-menu-action', 'admin-menu-users')), + '#href' => (user_access('administer users') ? 'admin/people/people' : 'user'), + ); + return $links; +} + +/** + * Build search widget. + * + * @see theme_admin_menu_links() + */ +function admin_menu_links_search() { + $links = array( + '#theme' => 'admin_menu_links', + '#wrapper_attributes' => array('id' => 'admin-menu-search'), + '#weight' => 180, + ); + $links['search'] = array( + '#type' => 'textfield', + '#title' => t('Search'), + '#title_display' => 'attribute', + '#attributes' => array( + 'placeholder' => t('Search'), + 'class' => array('admin-menu-search'), + ), + ); + return $links; +} + +/** + * Form builder function for module settings. + */ +function admin_menu_theme_settings() { + $form['admin_menu_margin_top'] = array( + '#type' => 'checkbox', + '#title' => t('Adjust top margin'), + '#default_value' => variable_get('admin_menu_margin_top', 1), + '#description' => t('Shifts the site output down by approximately 20 pixels from the top of the viewport. If disabled, absolute- or fixed-positioned page elements may be covered by the administration menu.'), + ); + $form['admin_menu_position_fixed'] = array( + '#type' => 'checkbox', + '#title' => t('Keep menu at top of page'), + '#default_value' => variable_get('admin_menu_position_fixed', 1), + '#description' => t('Displays the administration menu always at the top of the browser viewport (even when scrolling the page).'), + ); + // @todo Re-confirm this with latest browser versions. + $form['admin_menu_position_fixed']['#description'] .= '
                  ' . t('In some browsers, this setting may result in a malformed page, an invisible cursor, non-selectable elements in forms, or other issues.') . ''; + + $form['advanced'] = array( + '#type' => 'vertical_tabs', + '#title' => t('Advanced settings'), + ); + + $form['plugins'] = array( + '#type' => 'fieldset', + '#title' => t('Plugins'), + '#group' => 'advanced', + ); + $form['plugins']['admin_menu_components'] = array( + '#type' => 'checkboxes', + '#title' => t('Enabled components'), + '#options' => array( + 'admin_menu.icon' => t('Icon menu'), + 'admin_menu.menu' => t('Administration menu'), + 'admin_menu.search' => t('Search bar'), + 'admin_menu.users' => t('User counts'), + 'admin_menu.account' => t('Account links'), + ), + ); + $form['plugins']['admin_menu_components']['#default_value'] = array_keys(array_filter(variable_get('admin_menu_components', $form['plugins']['admin_menu_components']['#options']))); + + $process = element_info_property('checkboxes', '#process', array()); + $form['plugins']['admin_menu_components']['#process'] = array_merge(array('admin_menu_settings_process_components'), $process); + $form['#attached']['js'][] = drupal_get_path('module', 'admin_menu') . '/admin_menu.admin.js'; + + $form['tweaks'] = array( + '#type' => 'fieldset', + '#title' => t('System tweaks'), + '#group' => 'advanced', + ); + $form['tweaks']['admin_menu_tweak_modules'] = array( + '#type' => 'checkbox', + '#title' => t('Collapse module groups on the %modules page', array( + '%modules' => t('Modules'), + '!modules-url' => url('admin/modules'), + )), + '#default_value' => variable_get('admin_menu_tweak_modules', 0), + ); + if (module_exists('util')) { + $form['tweaks']['admin_menu_tweak_modules']['#description'] .= '
                  ' . t('If the Utility module was installed for this purpose, it can be safely disabled and uninstalled.') . ''; + } + $form['tweaks']['admin_menu_tweak_permissions'] = array( + '#type' => 'checkbox', + '#title' => t('Collapse module groups on the %permissions page', array( + '%permissions' => t('Permissions'), + '@permissions-url' => url('admin/people/permissions'), + )), + '#default_value' => variable_get('admin_menu_tweak_permissions', 0), + ); + $form['tweaks']['admin_menu_tweak_tabs'] = array( + '#type' => 'checkbox', + '#title' => t('Move local tasks into menu'), + '#default_value' => variable_get('admin_menu_tweak_tabs', 0), + '#description' => t('Moves the tabs on all pages into the administration menu. Only possible for themes using the CSS classes tabs primary and tabs secondary.'), + ); + + $form['performance'] = array( + '#type' => 'fieldset', + '#title' => t('Performance'), + '#group' => 'advanced', + ); + $form['performance']['admin_menu_cache_client'] = array( + '#type' => 'checkbox', + '#title' => t('Cache menu in client-side browser'), + '#default_value' => variable_get('admin_menu_cache_client', 1), + ); + + return system_settings_form($form); +} + +/** + * #process callback for component plugin form element in admin_menu_theme_settings(). + */ +function admin_menu_settings_process_components($element) { + // Assign 'rel' attributes to all options to achieve a live preview. + // Unfortunately, #states relies on wrapping .form-wrapper classes, so it + // cannot be used here. + foreach ($element['#options'] as $key => $label) { + if (!isset($element[$key]['#attributes']['rel'])) { + $id = preg_replace('/[^a-z]/', '-', $key); + $element[$key]['#attributes']['rel'] = '#' . $id; + } + } + return $element; +} + +/** + * Form validation handler for admin_menu_theme_settings(). + */ +function admin_menu_theme_settings_validate(&$form, &$form_state) { + // Change the configured components to Boolean values. + foreach ($form_state['values']['admin_menu_components'] as $component => &$enabled) { + $enabled = (bool) $enabled; + } +} + +/** + * Implementation of hook_form_FORM_ID_alter(). + * + * Extends Devel module with Administration menu developer settings. + */ +function _admin_menu_form_devel_admin_settings_alter(&$form, $form_state) { + // Shift system_settings_form buttons. + $weight = isset($form['buttons']['#weight']) ? $form['buttons']['#weight'] : 0; + $form['buttons']['#weight'] = $weight + 1; + + $form['admin_menu'] = array( + '#type' => 'fieldset', + '#title' => t('Administration menu settings'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + $display_options = array('mid', 'weight', 'pid'); + $display_options = array(0 => t('None'), 'mlid' => t('Menu link ID'), 'weight' => t('Weight'), 'plid' => t('Parent link ID')); + $form['admin_menu']['admin_menu_display'] = array( + '#type' => 'radios', + '#title' => t('Display additional data for each menu item'), + '#default_value' => variable_get('admin_menu_display', 0), + '#options' => $display_options, + '#description' => t('Display the selected items next to each menu item link.'), + ); + $form['admin_menu']['admin_menu_show_all'] = array( + '#type' => 'checkbox', + '#title' => t('Display all menu items'), + '#default_value' => variable_get('admin_menu_show_all', 0), + '#description' => t('If enabled, all menu items are displayed regardless of your site permissions. Note: Do not enable on a production site.'), + ); +} + +/** + * Flush all caches or a specific one. + * + * @param $name + * (optional) Name of cache to flush. + */ +function admin_menu_flush_cache($name = NULL) { + if (!isset($_GET['token']) || !drupal_valid_token($_GET['token'], current_path())) { + return MENU_ACCESS_DENIED; + } + if (isset($name)) { + $caches = module_invoke_all('admin_menu_cache_info'); + if (!isset($caches[$name])) { + return MENU_NOT_FOUND; + } + } + else { + $caches[$name] = array( + 'title' => t('Every'), + 'callback' => 'drupal_flush_all_caches', + ); + } + // Pass the cache to flush forward to the callback. + $function = $caches[$name]['callback']; + $function($name); + + drupal_set_message(t('!title cache cleared.', array('!title' => $caches[$name]['title']))); + + // The JavaScript injects a destination request parameter pointing to the + // originating page, so the user is redirected back to that page. Without + // destination parameter, the redirect ends on the front page. + drupal_goto(); +} + +/** + * Implements hook_admin_menu_cache_info(). + */ +function admin_menu_admin_menu_cache_info() { + $caches['admin_menu'] = array( + 'title' => t('Administration menu'), + 'callback' => '_admin_menu_flush_cache', + ); + return $caches; +} + +/** + * Implements hook_admin_menu_cache_info() on behalf of System module. + */ +function system_admin_menu_cache_info() { + $caches = array( + 'assets' => t('CSS and JavaScript'), + 'cache' => t('Page and else'), + 'menu' => t('Menu'), + 'registry' => t('Class registry'), + 'theme' => t('Theme registry'), + ); + foreach ($caches as $name => $cache) { + $caches[$name] = array( + 'title' => $cache, + 'callback' => '_admin_menu_flush_cache', + ); + } + return $caches; +} + +/** + * Implements hook_admin_menu_cache_info() on behalf of Update module. + */ +function update_admin_menu_cache_info() { + $caches['update'] = array( + 'title' => t('Update data'), + 'callback' => '_update_cache_clear', + ); + return $caches; +} + +/** + * Flush all caches or a specific one. + * + * @param $name + * (optional) Name of cache to flush. + * + * @see system_admin_menu_cache_info() + */ +function _admin_menu_flush_cache($name = NULL) { + switch ($name) { + case 'admin_menu': + admin_menu_flush_caches(); + break; + + case 'menu': + menu_rebuild(); + break; + + case 'registry': + registry_rebuild(); + // Fall-through to clear cache tables, since registry information is + // usually the base for other data that is cached (e.g. SimpleTests). + case 'cache': + // Don't clear cache_form - in-progress form submissions may break. + // Ordered so clearing the page cache will always be the last action. + // @see drupal_flush_all_caches() + $core = array('cache', 'cache_bootstrap', 'cache_filter', 'cache_page'); + $cache_tables = array_merge(module_invoke_all('flush_caches'), $core); + foreach ($cache_tables as $table) { + cache_clear_all('*', $table, TRUE); + } + break; + + case 'assets': + // Change query-strings on css/js files to enforce reload for all users. + _drupal_flush_css_js(); + + drupal_clear_css_cache(); + drupal_clear_js_cache(); + + // Clear the page cache, since cached HTML pages might link to old CSS and + // JS aggregates. + cache_clear_all('*', 'cache_page', TRUE); + break; + + case 'theme': + system_rebuild_theme_data(); + drupal_theme_rebuild(); + break; + } +} + +/** + * Preprocesses variables for theme_admin_menu_icon(). + */ +function template_preprocess_admin_menu_icon(&$variables) { + // Image source might have been passed in as theme variable. + if (!isset($variables['src'])) { + if (theme_get_setting('toggle_favicon')) { + $variables['src'] = theme_get_setting('favicon'); + } + else { + $variables['src'] = base_path() . 'misc/favicon.ico'; + } + } + // Strip the protocol without delimiters for transient HTTP/HTTPS support. + // Since the menu is cached on the server-side and client-side, the cached + // version might contain a HTTP link, whereas the actual page is on HTTPS. + // Relative paths will work fine, but theme_get_setting() returns an + // absolute URI. + $variables['src'] = preg_replace('@^https?:@', '', $variables['src']); + $variables['src'] = check_plain($variables['src']); + $variables['alt'] = t('Home'); +} + +/** + * Renders an icon to display in the administration menu. + * + * @ingroup themeable + */ +function theme_admin_menu_icon($variables) { + return '' . $variables['alt'] . ''; +} + diff --git a/sites/all/modules/contrib/admin_menu/admin_menu.info b/sites/all/modules/contrib/admin_menu/admin_menu.info new file mode 100644 index 0000000000..c6dbd892b3 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_menu.info @@ -0,0 +1,16 @@ +name = Administration menu +description = "Provides a dropdown menu to most administrative tasks and other common destinations (to users with the proper permissions)." +package = Administration +core = 7.x +configure = admin/config/administration/admin_menu +; Requires menu_build_tree() conditions; available after 7.10. +; @see http://drupal.org/node/1025582 +dependencies[] = system (>7.10) +files[] = tests/admin_menu.test + +; Information added by Drupal.org packaging script on 2014-12-19 +version = "7.x-3.0-rc5" +core = "7.x" +project = "admin_menu" +datestamp = "1419029284" + diff --git a/sites/all/modules/contrib/admin_menu/admin_menu.install b/sites/all/modules/contrib/admin_menu/admin_menu.install new file mode 100644 index 0000000000..4e5443d366 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_menu.install @@ -0,0 +1,123 @@ +fields(array('weight' => 100)) + ->condition('type', 'module') + ->condition('name', 'admin_menu') + ->execute(); +} + +/** + * Implements hook_uninstall(). + */ +function admin_menu_uninstall() { + // Delete variables. + variable_del('admin_menu_components'); + variable_del('admin_menu_margin_top'); + variable_del('admin_menu_position_fixed'); + variable_del('admin_menu_tweak_modules'); + variable_del('admin_menu_tweak_tabs'); + variable_del('admin_menu_show_all'); + variable_del('admin_menu_display'); + variable_del('admin_menu_cache_server'); + variable_del('admin_menu_cache_client'); + // Unused variables still should be deleted. + variable_del('admin_menu_devel_modules'); + variable_del('admin_menu_devel_modules_enabled'); + variable_del('admin_menu_devel_modules_skip'); +} + +/** + * Ensure that admin_menu is rebuilt after upgrading to D6. + */ +function admin_menu_update_6000() { + // Drop the {admin_menu} table in admin_menu_update_6000() on sites that used + // one of the later patches in #132524. + if (db_table_exists('admin_menu')) { + db_drop_table('admin_menu'); + } +} + +/** + * Wipe and rebuild so we can switch the icon path to . + */ +function admin_menu_update_6001() { + db_delete('menu_links')->condition('module', 'admin_menu')->execute(); + menu_cache_clear('admin_menu'); +} + +/** + * Add {cache_admin_menu} table. + */ +function admin_menu_update_7300() { + if (!db_table_exists('cache_admin_menu')) { + $schema = drupal_get_schema_unprocessed('system', 'cache'); + db_create_table('cache_admin_menu', $schema); + } +} + +/** + * Increase the module weight. + * + * @see admin_menu_install() + */ +function admin_menu_update_7302() { + db_update('system') + ->fields(array('weight' => 100)) + ->condition('type', 'module') + ->condition('name', 'admin_menu') + ->execute(); +} + +/** + * Remove local tasks from {menu_links} table. + */ +function admin_menu_update_7303() { + db_delete('menu_router') + ->condition('path', 'admin/%', 'LIKE') + ->condition('type', MENU_IS_LOCAL_TASK, '&') + ->execute(); +} + +/** + * Remove obsolete 'admin_menu' menu and all orphan links in it. + */ +function admin_menu_update_7304() { + // Remove the custom menu used by 6.x-1.x. + if (db_table_exists('menu_custom')) { + db_delete('menu_custom')->condition('menu_name', 'admin_menu')->execute(); + } + + // 6.x-1.x cloned the entire link structure below the path 'admin' into a + // separate 'menu_name' "admin_menu" with 'module' "admin_menu". 6.x-3.x and + // early alpha versions of 7.x-3.x still did something similar. All of these + // records are obsolete. Removal of the 'module' records (without different + // menu_name) is particularly important, since they would otherwise appear + // as duplicate links. + db_delete('menu_links') + ->condition(db_or() + ->condition('module', 'admin_menu') + ->condition('menu_name', 'admin_menu') + ) + ->execute(); +} diff --git a/sites/all/modules/contrib/admin_menu/admin_menu.js b/sites/all/modules/contrib/admin_menu/admin_menu.js new file mode 100644 index 0000000000..2e28b554a2 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_menu.js @@ -0,0 +1,385 @@ +(function($) { + +Drupal.admin = Drupal.admin || {}; +Drupal.admin.behaviors = Drupal.admin.behaviors || {}; +Drupal.admin.hashes = Drupal.admin.hashes || {}; + +/** + * Core behavior for Administration menu. + * + * Test whether there is an administration menu is in the output and execute all + * registered behaviors. + */ +Drupal.behaviors.adminMenu = { + attach: function (context, settings) { + // Initialize settings. + settings.admin_menu = $.extend({ + suppress: false, + margin_top: false, + position_fixed: false, + tweak_modules: false, + tweak_permissions: false, + tweak_tabs: false, + destination: '', + basePath: settings.basePath, + hash: 0, + replacements: {} + }, settings.admin_menu || {}); + // Check whether administration menu should be suppressed. + if (settings.admin_menu.suppress) { + return; + } + var $adminMenu = $('#admin-menu:not(.admin-menu-processed)', context); + // Client-side caching; if administration menu is not in the output, it is + // fetched from the server and cached in the browser. + if (!$adminMenu.length && settings.admin_menu.hash) { + Drupal.admin.getCache(settings.admin_menu.hash, function (response) { + if (typeof response == 'string' && response.length > 0) { + $('body', context).append(response); + } + var $adminMenu = $('#admin-menu:not(.admin-menu-processed)', context); + // Apply our behaviors. + Drupal.admin.attachBehaviors(context, settings, $adminMenu); + // Allow resize event handlers to recalculate sizes/positions. + $(window).triggerHandler('resize'); + }); + } + // If the menu is in the output already, this means there is a new version. + else { + // Apply our behaviors. + Drupal.admin.attachBehaviors(context, settings, $adminMenu); + } + } +}; + +/** + * Collapse fieldsets on Modules page. + */ +Drupal.behaviors.adminMenuCollapseModules = { + attach: function (context, settings) { + if (settings.admin_menu.tweak_modules) { + $('#system-modules fieldset:not(.collapsed)', context).addClass('collapsed'); + } + } +}; + +/** + * Collapse modules on Permissions page. + */ +Drupal.behaviors.adminMenuCollapsePermissions = { + attach: function (context, settings) { + if (settings.admin_menu.tweak_permissions) { + // Freeze width of first column to prevent jumping. + $('#permissions th:first', context).css({ width: $('#permissions th:first', context).width() }); + // Attach click handler. + $modules = $('#permissions tr:has(td.module)', context).once('admin-menu-tweak-permissions', function () { + var $module = $(this); + $module.bind('click.admin-menu', function () { + // @todo Replace with .nextUntil() in jQuery 1.4. + $module.nextAll().each(function () { + var $row = $(this); + if ($row.is(':has(td.module)')) { + return false; + } + $row.toggleClass('element-hidden'); + }); + }); + }); + // Collapse all but the targeted permission rows set. + if (window.location.hash.length) { + $modules = $modules.not(':has(' + window.location.hash + ')'); + } + $modules.trigger('click.admin-menu'); + } + } +}; + +/** + * Apply margin to page. + * + * Note that directly applying marginTop does not work in IE. To prevent + * flickering/jumping page content with client-side caching, this is a regular + * Drupal behavior. + */ +Drupal.behaviors.adminMenuMarginTop = { + attach: function (context, settings) { + if (!settings.admin_menu.suppress && settings.admin_menu.margin_top) { + $('body:not(.admin-menu)', context).addClass('admin-menu'); + } + } +}; + +/** + * Retrieve content from client-side cache. + * + * @param hash + * The md5 hash of the content to retrieve. + * @param onSuccess + * A callback function invoked when the cache request was successful. + */ +Drupal.admin.getCache = function (hash, onSuccess) { + if (Drupal.admin.hashes.hash !== undefined) { + return Drupal.admin.hashes.hash; + } + $.ajax({ + cache: true, + type: 'GET', + dataType: 'text', // Prevent auto-evaluation of response. + global: false, // Do not trigger global AJAX events. + url: Drupal.settings.admin_menu.basePath.replace(/admin_menu/, 'js/admin_menu/cache/' + hash), + success: onSuccess, + complete: function (XMLHttpRequest, status) { + Drupal.admin.hashes.hash = status; + } + }); +}; + +/** + * TableHeader callback to determine top viewport offset. + * + * @see toolbar.js + */ +Drupal.admin.height = function() { + var $adminMenu = $('#admin-menu'); + var height = $adminMenu.outerHeight(); + // In IE, Shadow filter adds some extra height, so we need to remove it from + // the returned height. + if ($adminMenu.css('filter') && $adminMenu.css('filter').match(/DXImageTransform\.Microsoft\.Shadow/)) { + height -= $adminMenu.get(0).filters.item("DXImageTransform.Microsoft.Shadow").strength; + } + return height; +}; + +/** + * @defgroup admin_behaviors Administration behaviors. + * @{ + */ + +/** + * Attach administrative behaviors. + */ +Drupal.admin.attachBehaviors = function (context, settings, $adminMenu) { + if ($adminMenu.length) { + $adminMenu.addClass('admin-menu-processed'); + $.each(Drupal.admin.behaviors, function() { + this(context, settings, $adminMenu); + }); + } +}; + +/** + * Apply 'position: fixed'. + */ +Drupal.admin.behaviors.positionFixed = function (context, settings, $adminMenu) { + if (settings.admin_menu.position_fixed) { + $adminMenu.addClass('admin-menu-position-fixed'); + $adminMenu.css('position', 'fixed'); + } +}; + +/** + * Move page tabs into administration menu. + */ +Drupal.admin.behaviors.pageTabs = function (context, settings, $adminMenu) { + if (settings.admin_menu.tweak_tabs) { + var $tabs = $(context).find('ul.tabs.primary'); + $adminMenu.find('#admin-menu-wrapper > ul').eq(1) + .append($tabs.find('li').addClass('admin-menu-tab')); + $(context).find('ul.tabs.secondary') + .appendTo('#admin-menu-wrapper > ul > li.admin-menu-tab.active') + .removeClass('secondary'); + $tabs.remove(); + } +}; + +/** + * Perform dynamic replacements in cached menu. + */ +Drupal.admin.behaviors.replacements = function (context, settings, $adminMenu) { + for (var item in settings.admin_menu.replacements) { + $(item, $adminMenu).html(settings.admin_menu.replacements[item]); + } +}; + +/** + * Inject destination query strings for current page. + */ +Drupal.admin.behaviors.destination = function (context, settings, $adminMenu) { + if (settings.admin_menu.destination) { + $('a.admin-menu-destination', $adminMenu).each(function() { + this.search += (!this.search.length ? '?' : '&') + Drupal.settings.admin_menu.destination; + }); + } +}; + +/** + * Apply JavaScript-based hovering behaviors. + * + * @todo This has to run last. If another script registers additional behaviors + * it will not run last. + */ +Drupal.admin.behaviors.hover = function (context, settings, $adminMenu) { + // Delayed mouseout. + $('li.expandable', $adminMenu).hover( + function () { + // Stop the timer. + clearTimeout(this.sfTimer); + // Display child lists. + $('> ul', this) + .css({left: 'auto', display: 'block'}) + // Immediately hide nephew lists. + .parent().siblings('li').children('ul').css({left: '-999em', display: 'none'}); + }, + function () { + // Start the timer. + var uls = $('> ul', this); + this.sfTimer = setTimeout(function () { + uls.css({left: '-999em', display: 'none'}); + }, 400); + } + ); +}; + +/** + * Apply the search bar functionality. + */ +Drupal.admin.behaviors.search = function (context, settings, $adminMenu) { + // @todo Add a HTML ID. + var $input = $('input.admin-menu-search', $adminMenu); + // Initialize the current search needle. + var needle = $input.val(); + // Cache of all links that can be matched in the menu. + var links; + // Minimum search needle length. + var needleMinLength = 2; + // Append the results container. + var $results = $('
                  ').insertAfter($input); + + /** + * Executes the search upon user input. + */ + function keyupHandler() { + var matches, $html, value = $(this).val(); + // Only proceed if the search needle has changed. + if (value !== needle) { + needle = value; + // Initialize the cache of menu links upon first search. + if (!links && needle.length >= needleMinLength) { + // @todo Limit to links in dropdown menus; i.e., skip menu additions. + links = buildSearchIndex($adminMenu.find('li:not(.admin-menu-action, .admin-menu-action li) > a')); + } + // Empty results container when deleting search text. + if (needle.length < needleMinLength) { + $results.empty(); + } + // Only search if the needle is long enough. + if (needle.length >= needleMinLength && links) { + matches = findMatches(needle, links); + // Build the list in a detached DOM node. + $html = buildResultsList(matches); + // Display results. + $results.empty().append($html); + } + } + } + + /** + * Builds the search index. + */ + function buildSearchIndex($links) { + return $links + .map(function () { + var text = (this.textContent || this.innerText); + // Skip menu entries that do not contain any text (e.g., the icon). + if (typeof text === 'undefined') { + return; + } + return { + text: text, + textMatch: text.toLowerCase(), + element: this + }; + }); + } + + /** + * Searches the index for a given needle and returns matching entries. + */ + function findMatches(needle, links) { + var needleMatch = needle.toLowerCase(); + // Select matching links from the cache. + return $.grep(links, function (link) { + return link.textMatch.indexOf(needleMatch) !== -1; + }); + } + + /** + * Builds the search result list in a detached DOM node. + */ + function buildResultsList(matches) { + var $html = $(''; + } + return $output; +} + +/** + * Function used by uasort to sort structured arrays by #weight AND #title. + */ +function admin_menu_element_sort($a, $b) { + // @see element_sort() + $a_weight = isset($a['#weight']) ? $a['#weight'] : 0; + $b_weight = isset($b['#weight']) ? $b['#weight'] : 0; + if ($a_weight == $b_weight) { + // @see element_sort_by_title() + $a_title = isset($a['#title']) ? $a['#title'] : ''; + $b_title = isset($b['#title']) ? $b['#title'] : ''; + return strnatcasecmp($a_title, $b_title); + } + return ($a_weight < $b_weight) ? -1 : 1; +} + +/** + * Implements hook_translated_menu_link_alter(). + * + * Here is where we make changes to links that need dynamic information such + * as the current page path or the number of users. + */ +function admin_menu_translated_menu_link_alter(&$item, $map) { + global $user, $base_url; + static $access_all; + + if ($item['menu_name'] != 'admin_menu') { + return; + } + + // Check whether additional development output is enabled. + if (!isset($access_all)) { + $access_all = variable_get('admin_menu_show_all', 0) && module_exists('devel'); + } + // Prepare links that would not be displayed normally. + if ($access_all && !$item['access']) { + $item['access'] = TRUE; + // Prepare for http://drupal.org/node/266596 + if (!isset($item['localized_options'])) { + _menu_item_localize($item, $map, TRUE); + } + } + + // Don't waste cycles altering items that are not visible + if (!$item['access']) { + return; + } + + // Add developer information to all links, if enabled. + if ($extra = variable_get('admin_menu_display', 0)) { + $item['title'] .= ' ' . $extra[0] . ': ' . $item[$extra]; + } +} + +/** + * Implements hook_flush_caches(). + * + * Flushes client-side caches. + * + * @param int $uid + * (optional) A user ID to limit the cache flush to. + */ +function admin_menu_flush_caches($uid = NULL) { + // A call to menu_rebuild() will trigger potentially thousands of calls into + // menu_link_save(), for which admin_menu has to implement the corresponding + // CRUD hooks, in order to take up any menu link changes, since any menu link + // change could affect the admin menu (which essentially is an aggregate) and + // since there is no other way to get notified about stale caches. The cache + // only needs to be flushed once though, so we prevent a ton of needless + // subsequent calls with this static. + // @see http://drupal.org/node/918538 + $was_flushed = &drupal_static(__FUNCTION__, array()); + // $uid can be NULL. PHP automatically converts that into '' (empty string), + // which is different to uid 0 (zero). + if (isset($was_flushed[$uid])) { + return; + } + $was_flushed[$uid] = TRUE; + + $cid = 'admin_menu:'; + if (isset($uid)) { + $cid .= $uid . ':'; + } + // Flush cached output of admin_menu. + cache_clear_all($cid, 'cache_menu', TRUE); + // Flush client-side cache hashes. + drupal_static_reset('admin_menu_cache_get'); + // db_table_exists() required for SimpleTest. + if (db_table_exists('cache_admin_menu')) { + cache_clear_all(isset($uid) ? $cid : '*', 'cache_admin_menu', TRUE); + } +} + +/** + * Implements hook_form_alter(). + */ +function admin_menu_form_alter(&$form, &$form_state, $form_id) { + $global_flush_ids = array( + 'admin_menu_theme_settings' => 1, + // Update links for clean/non-clean URLs. + 'system_clean_url_settings' => 1, + // Incorporate changed user permissions. + 'user_admin_permissions' => 1, + // Removing a role potentially means less permissions. + 'user_admin_role_delete_confirm' => 1, + // User name and roles may be changed on the user account form. + 'user_profile_form' => 1, + ); + if (isset($global_flush_ids[$form_id])) { + $form['#submit'][] = 'admin_menu_form_alter_flush_cache_submit'; + + // Optionally limit the cache flush to a certain user ID. + $form_state['admin_menu_uid'] = NULL; + if ($form_id == 'user_profile_form') { + $form_state['admin_menu_uid'] = $form_state['user']->uid; + } + } + + // UX: Add a confirmation to the permissions form to ask the user whether to + // auto-enable the 'access administration menu' permission along with + // 'access administration pages'. + if ($form_id == 'user_admin_permissions') { + $form['#attached']['js'][] = drupal_get_path('module', 'admin_menu') . '/admin_menu.admin.js'; + } +} + +/** + * Form submission handler to flush Administration menu caches. + */ +function admin_menu_form_alter_flush_cache_submit($form, &$form_state) { + admin_menu_flush_caches($form_state['admin_menu_uid']); +} + +/** + * Implements hook_form_FORM_ID_alter(). + * + * Extends Devel module with Administration menu developer settings. + */ +function admin_menu_form_devel_admin_settings_alter(&$form, &$form_state) { + form_load_include($form_state, 'inc', 'admin_menu'); + _admin_menu_form_devel_admin_settings_alter($form, $form_state); +} diff --git a/sites/all/modules/contrib/admin_menu/admin_menu.uid1.css b/sites/all/modules/contrib/admin_menu/admin_menu.uid1.css new file mode 100644 index 0000000000..e375cfe666 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_menu.uid1.css @@ -0,0 +1,9 @@ + +/** + * @file + * Administration menu color override for uid1. + */ + +#admin-menu li.admin-menu-account > a { + background: #911 url(images/bkg-red.png) bottom left repeat-x; +} diff --git a/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/admin_menu_toolbar.css b/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/admin_menu_toolbar.css new file mode 100644 index 0000000000..a3e9f3e300 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/admin_menu_toolbar.css @@ -0,0 +1,145 @@ + +/** + * @file + * Toolbar style for Administration menu. + * + * Important: We cannot re-use toolbar.png from Toolbar module, since we cannot + * reliably determine the path to it. + * + * @todo Separate shortcut functionality into own module/widget. + */ + +/* Adjust margin/height */ +html body.admin-menu { + margin-top: 29px !important; +} +html body.admin-menu-with-shortcuts { + margin-top: 65px !important; +} +/* Displace the core Toolbar, if concurrently output. */ +body div#toolbar.toolbar { + top: 30px; +} + +/** + * Base styles. + * + * We use a keyword for the toolbar font size to make it display consistently + * across different themes, while still allowing browsers to resize the text. + */ +#admin-menu { + font: normal small "Lucida Grande", Verdana, sans-serif; + -moz-box-shadow: 0 -10px 20px 13px #000; + -webkit-box-shadow: 0 -10px 20px 13px #000; + box-shadow: 0 -10px 20px 13px #000; + right: 0; + width: auto; +} +#admin-menu-wrapper { + font-size: .846em; + padding: 5px 10px 0; +} + +#admin-menu .dropdown a { + color: #fafafa; +} + +/* Remove border from all lists and actions */ +#admin-menu .dropdown .admin-menu-action a { + border-left: 0; +} +#admin-menu .dropdown .admin-menu-icon > a { + padding: 2px 10px 3px; +} + +/** + * Administration menu. + */ +#admin-menu .dropdown .admin-menu-icon > a span { + vertical-align: text-bottom; + width: 11px; + height: 14px; + display: block; + background: url(toolbar.png) no-repeat 0 -45px; + text-indent: -9999px; +} +#admin-menu > div > .dropdown > li > a { + border-right: 0; + margin-bottom: 4px; + padding: 2px 10px 3px; +} +#admin-menu .dropdown .admin-menu-toolbar-category > a, +#admin-menu .dropdown .admin-menu-action > a { + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} +#admin-menu .dropdown .admin-menu-toolbar-category > a.active-trail { + text-shadow: #333 0 1px 0; + background: url(toolbar.png) 0 0 repeat-x; +} +#admin-menu .dropdown .admin-menu-toolbar-category > a:hover { + background-color: #444; +} +#admin-menu .dropdown .admin-menu-tab a { + border-right: 0; +} +#admin-menu .dropdown li li.expandable ul { + margin: -22px 0 0 160px; +} + +/** + * Shortcuts toggle. + */ +#admin-menu .shortcut-toggle { + cursor: pointer; + background: url(toolbar.png) 0 -20px no-repeat; + display: block; + float: right; + margin: 0 0 0 1.3em; + text-indent: -9999px; + overflow: hidden; + width: 25px; + height: 25px; +} +#admin-menu .shortcut-toggle:focus, +#admin-menu .shortcut-toggle:hover { + background-position: -50px -20px; +} +#admin-menu .shortcut-toggle.active { + background-position: -25px -20px; +} +#admin-menu .shortcut-toggle.active:focus, +#admin-menu .shortcut-toggle.active:hover { + background-position: -75px -20px; +} + +/** + * Shortcuts widget. + */ +#admin-menu .shortcut-toolbar { + background-color: #666; + clear: both; + display: none; + margin: 0 -10px; + overflow: hidden; + /* Align with icon; @see shortcut.css */ + padding-left: 5px; +} +#admin-menu .shortcut-toolbar.active { + display: block; +} +/* Override theme list style; @see shortcut.css */ +#admin-menu .shortcut-toolbar ul { + margin: 0; +} +/* @see toolbar.css */ +#admin-menu .shortcut-toolbar li { + float: left; + list-style-image: none; + list-style-type: none; +} +#admin-menu .shortcut-toolbar a { + display: block; +} + diff --git a/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/admin_menu_toolbar.info b/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/admin_menu_toolbar.info new file mode 100644 index 0000000000..fa4ca095e8 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/admin_menu_toolbar.info @@ -0,0 +1,12 @@ +name = Administration menu Toolbar style +description = A better Toolbar. +package = Administration +core = 7.x +dependencies[] = admin_menu + +; Information added by Drupal.org packaging script on 2014-12-19 +version = "7.x-3.0-rc5" +core = "7.x" +project = "admin_menu" +datestamp = "1419029284" + diff --git a/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/admin_menu_toolbar.install b/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/admin_menu_toolbar.install new file mode 100644 index 0000000000..bf067d7858 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/admin_menu_toolbar.install @@ -0,0 +1,37 @@ +fields(array('weight' => 101)) + ->condition('type', 'module') + ->condition('name', 'admin_menu_toolbar') + ->execute(); +} + +/** + * Set module weight to a value higher than admin_menu. + * + * At this point, admin_menu should have a weight of 100. To account for + * customized weights, we increase the weight relatively. + * + * @see admin_menu_toolbar_install() + */ +function admin_menu_toolbar_update_6300() { + $weight = db_query("SELECT weight FROM {system} WHERE type = 'module' AND name = 'admin_menu'")->fetchField(); + $weight++; + db_update('system') + ->fields(array('weight' => $weight)) + ->condition('type', 'module') + ->condition('name', 'admin_menu_toolbar') + ->execute(); +} + diff --git a/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/admin_menu_toolbar.js b/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/admin_menu_toolbar.js new file mode 100644 index 0000000000..809d9ead93 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/admin_menu_toolbar.js @@ -0,0 +1,56 @@ +(function($) { + +Drupal.admin = Drupal.admin || {}; +Drupal.admin.behaviors = Drupal.admin.behaviors || {}; + +/** + * @ingroup admin_behaviors + * @{ + */ + +/** + * Apply active trail highlighting based on current path. + * + * @todo Not limited to toolbar; move into core? + */ +Drupal.admin.behaviors.toolbarActiveTrail = function (context, settings, $adminMenu) { + if (settings.admin_menu.toolbar && settings.admin_menu.toolbar.activeTrail) { + $adminMenu.find('> div > ul > li > a[href="' + settings.admin_menu.toolbar.activeTrail + '"]').addClass('active-trail'); + } +}; + +/** + * Toggles the shortcuts bar. + */ +Drupal.admin.behaviors.shortcutToggle = function (context, settings, $adminMenu) { + var $shortcuts = $adminMenu.find('.shortcut-toolbar'); + if (!$shortcuts.length) { + return; + } + var storage = window.localStorage || false; + var storageKey = 'Drupal.admin_menu.shortcut'; + var $body = $(context).find('body'); + var $toggle = $adminMenu.find('.shortcut-toggle'); + $toggle.click(function () { + var enable = !$shortcuts.hasClass('active'); + $shortcuts.toggleClass('active', enable); + $toggle.toggleClass('active', enable); + if (settings.admin_menu.margin_top) { + $body.toggleClass('admin-menu-with-shortcuts', enable); + } + // Persist toggle state across requests. + storage && enable ? storage.setItem(storageKey, 1) : storage.removeItem(storageKey); + this.blur(); + return false; + }); + + if (!storage || storage.getItem(storageKey)) { + $toggle.trigger('click'); + } +}; + +/** + * @} End of "ingroup admin_behaviors". + */ + +})(jQuery); diff --git a/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/admin_menu_toolbar.module b/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/admin_menu_toolbar.module new file mode 100644 index 0000000000..c6111bdc4d --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/admin_menu_toolbar.module @@ -0,0 +1,118 @@ + TRUE); + + $attached['css'][$path . '/admin_menu_toolbar.css'] = $options; + $attached['js'][$path . '/admin_menu_toolbar.js'] = $options; + + // @todo Stop-gap fix until cached rendering is resolved. + // @see http://drupal.org/node/1567622 + if (module_exists('shortcut')) { + $attached['css'][drupal_get_path('module', 'shortcut') . '/shortcut.css'] = $options; + } + + $settings = array(); + // Add current path to support menu item highlighting. + // @todo Compile real active trail here? + $args = explode('/', $_GET['q']); + if ($args[0] == 'admin' && !empty($args[1])) { + $settings['activeTrail'] = url($args[0] . '/' . $args[1]); + } + elseif (drupal_is_front_page()) { + $settings['activeTrail'] = url(''); + } + + $attached['js'][] = array( + 'data' => array('admin_menu' => array('toolbar' => $settings)), + 'type' => 'setting', + ); +} + +/** + * Implements hook_admin_menu_output_build(). + */ +function admin_menu_toolbar_admin_menu_output_build(&$content) { + if (empty($content['#components']['shortcut.links']) && !$content['#complete']) { + return; + } + // Add shortcuts toggle. + $content['shortcut-toggle'] = array( + '#access' => module_exists('shortcut'), + '#weight' => -200, + '#type' => 'link', + '#title' => t('Show shortcuts'), + '#href' => '', + '#options' => array( + 'attributes' => array('class' => array('shortcut-toggle')), + ), + ); + + // Add shortcuts bar. + $content['shortcut'] = array( + '#access' => module_exists('shortcut'), + '#weight' => 200, + '#prefix' => '
                  ', + '#suffix' => '
                  ', + ); + $content['shortcut']['shortcuts'] = array( + // Shortcut module's CSS relies on Toolbar module's markup. + // @see http://drupal.org/node/1217038 + '#prefix' => '
                  ', + '#suffix' => '
                  ', + // @todo Links may contain .active-trail classes. + '#pre_render' => array('shortcut_toolbar_pre_render'), + ); +} + +/** + * Implements hook_admin_menu_output_alter(). + */ +function admin_menu_toolbar_admin_menu_output_alter(&$content) { + // Add a class to top-level items for styling. + if (isset($content['menu'])) { + foreach (element_children($content['menu']) as $link) { + $content['menu'][$link]['#attributes']['class'][] = 'admin-menu-toolbar-category'; + } + } + + // Alter icon. + if (isset($content['icon'])) { + unset($content['icon']['icon']['#theme']); + $content['icon']['icon']['#title'] = '' . t('Home') . ''; + $content['icon']['icon']['#attributes']['class'][] = 'admin-menu-toolbar-category'; + } + + // Alter user account link. + if (isset($content['account'])) { + $content['account']['account']['#title'] = t('Hello @username', array('@username' => $content['account']['account']['#title'])); + $content['account']['account']['#options']['html'] = TRUE; + } +} + diff --git a/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/toolbar.png b/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/toolbar.png new file mode 100644 index 0000000000..f2c7f355a6 Binary files /dev/null and b/sites/all/modules/contrib/admin_menu/admin_menu_toolbar/toolbar.png differ diff --git a/sites/all/modules/contrib/admin_menu/images/arrow-rtl.png b/sites/all/modules/contrib/admin_menu/images/arrow-rtl.png new file mode 100644 index 0000000000..dccaad7f5e Binary files /dev/null and b/sites/all/modules/contrib/admin_menu/images/arrow-rtl.png differ diff --git a/sites/all/modules/contrib/admin_menu/images/arrow.png b/sites/all/modules/contrib/admin_menu/images/arrow.png new file mode 100644 index 0000000000..3c3166ffd1 Binary files /dev/null and b/sites/all/modules/contrib/admin_menu/images/arrow.png differ diff --git a/sites/all/modules/contrib/admin_menu/images/bkg-red.png b/sites/all/modules/contrib/admin_menu/images/bkg-red.png new file mode 100644 index 0000000000..80647b0ec7 Binary files /dev/null and b/sites/all/modules/contrib/admin_menu/images/bkg-red.png differ diff --git a/sites/all/modules/contrib/admin_menu/images/bkg.png b/sites/all/modules/contrib/admin_menu/images/bkg.png new file mode 100644 index 0000000000..9de137bfd4 Binary files /dev/null and b/sites/all/modules/contrib/admin_menu/images/bkg.png differ diff --git a/sites/all/modules/contrib/admin_menu/images/bkg_tab.png b/sites/all/modules/contrib/admin_menu/images/bkg_tab.png new file mode 100644 index 0000000000..6ee3de0b6e Binary files /dev/null and b/sites/all/modules/contrib/admin_menu/images/bkg_tab.png differ diff --git a/sites/all/modules/contrib/admin_menu/images/icon_users.png b/sites/all/modules/contrib/admin_menu/images/icon_users.png new file mode 100644 index 0000000000..0923fda05f Binary files /dev/null and b/sites/all/modules/contrib/admin_menu/images/icon_users.png differ diff --git a/sites/all/modules/contrib/admin_menu/tests/admin_menu.test b/sites/all/modules/contrib/admin_menu/tests/admin_menu.test new file mode 100644 index 0000000000..4b48c9ab54 --- /dev/null +++ b/sites/all/modules/contrib/admin_menu/tests/admin_menu.test @@ -0,0 +1,520 @@ + 'access administration pages', + 'admin_menu' => 'access administration menu', + ); + + function setUp() { + // Enable admin menu module and any other modules. + $modules = func_get_args(); + $modules = isset($modules[0]) ? $modules[0] : $modules; + $modules[] = 'admin_menu'; + parent::setUp($modules); + + // Disable client-side caching. + variable_set('admin_menu_cache_client', FALSE); + // Disable Clean URLs to ensure drupal.org testbot compatibility. + variable_set('clean_url', 0); + } + + /** + * Check that an element exists in HTML markup. + * + * @param $xpath + * An XPath expression. + * @param array $arguments + * (optional) An associative array of XPath replacement tokens to pass to + * DrupalWebTestCase::buildXPathQuery(). + * @param $message + * The message to display along with the assertion. + * @param $group + * The type of assertion - examples are "Browser", "PHP". + * + * @return + * TRUE if the assertion succeeded, FALSE otherwise. + */ + protected function assertElementByXPath($xpath, array $arguments = array(), $message, $group = 'Other') { + $elements = $this->xpath($xpath, $arguments); + return $this->assertTrue(!empty($elements[0]), $message, $group); + } + + /** + * Check that an element does not exist in HTML markup. + * + * @param $xpath + * An XPath expression. + * @param array $arguments + * (optional) An associative array of XPath replacement tokens to pass to + * DrupalWebTestCase::buildXPathQuery(). + * @param $message + * The message to display along with the assertion. + * @param $group + * The type of assertion - examples are "Browser", "PHP". + * + * @return + * TRUE if the assertion succeeded, FALSE otherwise. + */ + protected function assertNoElementByXPath($xpath, array $arguments = array(), $message, $group = 'Other') { + $elements = $this->xpath($xpath, $arguments); + return $this->assertTrue(empty($elements), $message, $group); + } + + /** + * Asserts that links appear in the menu in a specified trail. + * + * @param array $trail + * A list of menu link titles to assert in the menu. + */ + protected function assertLinkTrailByTitle(array $trail) { + $xpath = array(); + $args = array(); + $message = ''; + foreach ($trail as $i => $title) { + $xpath[] = '/li/a[text()=:title' . $i . ']'; + $args[':title' . $i] = $title; + $message .= ($i ? ' » ' : '') . check_plain($title); + } + $xpath = '//div[@id="admin-menu"]/div/ul' . implode('/parent::li/ul', $xpath); + $this->assertElementByXPath($xpath, $args, $message . ' link found.'); + } + + /** + * Asserts that no link appears in the menu for a specified trail. + * + * @param array $trail + * A list of menu link titles to assert in the menu. + */ + protected function assertNoLinkTrailByTitle(array $trail) { + $xpath = array(); + $args = array(); + $message = ''; + foreach ($trail as $i => $title) { + $xpath[] = '/li/a[text()=:title' . $i . ']'; + $args[':title' . $i] = $title; + $message .= ($i ? ' » ' : '') . check_plain($title); + } + $xpath = '//div[@id="admin-menu"]/div/ul' . implode('/parent::li/ul', $xpath); + $this->assertNoElementByXPath($xpath, $args, $message . ' link not found.'); + } +} + +/** + * Tests menu links depending on user permissions. + */ +class AdminMenuPermissionsTestCase extends AdminMenuWebTestCase { + public static function getInfo() { + return array( + 'name' => 'Menu link access permissions', + 'description' => 'Tests appearance of menu links depending on user permissions.', + 'group' => 'Administration menu', + ); + } + + function setUp() { + parent::setUp(array('node')); + } + + /** + * Test that the links are added to the page (no JS testing). + */ + function testPermissions() { + module_enable(array('contact')); + $this->resetAll(); + + // Anonymous users should not see the menu. + $this->drupalGet(''); + $this->assertNoElementByXPath('//div[@id="admin-menu"]', array(), t('Administration menu not found.')); + + // Create a user who + // - can access content overview + // - cannot access drupal.org links + // - cannot administer Contact module + $permissions = $this->basePermissions + array( + 'access content overview', + ); + $admin_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($admin_user); + + // Check that the user can see the admin links, but not the drupal links. + $this->assertElementByXPath('//div[@id="admin-menu"]', array(), 'Administration menu found.'); + $this->assertElementByXPath('//div[@id="admin-menu"]//a[contains(@href, :path)]', array(':path' => 'admin/content'), 'Content link found.'); + $this->assertNoElementByXPath('//div[@id="admin-menu"]//a[@href=:path]', array(':path' => 'http://drupal.org'), 'Icon » Drupal.org link not found.'); + $this->assertNoElementByXPath('//div[@id="admin-menu"]//a[contains(@href, :path)]', array(':path' => 'admin/structure/contact'), 'Structure » Contact link not found.'); + + // Create a user "reversed" to the above; i.e., who + // - cannot access content overview + // - can access drupal.org links + // - can administer Contact module + $permissions = $this->basePermissions + array( + 'display drupal links', + 'administer contact forms', + ); + $admin_user2 = $this->drupalCreateUser($permissions); + $this->drupalLogin($admin_user2); + $this->assertElementByXPath('//div[@id="admin-menu"]', array(), 'Administration menu found.'); + $this->assertNoElementByXPath('//div[@id="admin-menu"]//a[contains(@href, :path)]', array(':path' => 'admin/content'), 'Content link not found.'); + $this->assertElementByXPath('//div[@id="admin-menu"]//a[@href=:path]', array(':path' => 'http://drupal.org'), 'Icon » Drupal.org link found.'); + $this->assertElementByXPath('//div[@id="admin-menu"]//a[contains(@href, :path)]', array(':path' => 'admin/structure/contact'), 'Structure » Contact link found.'); + } + + /** + * Tests handling of links pointing to category/overview pages. + */ + function testCategories() { + // Create a user with minimum permissions. + $admin_user = $this->drupalCreateUser($this->basePermissions); + $this->drupalLogin($admin_user); + + // Verify that no category links appear. + $this->assertNoLinkTrailByTitle(array(t('Structure'))); + $this->assertNoLinkTrailByTitle(array(t('Configuration'))); + + // Create a user with access to one configuration category. + $permissions = $this->basePermissions + array( + 'administer users', + ); + $admin_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($admin_user); + + // Verify that only expected category links appear. + $this->assertNoLinkTrailByTitle(array(t('Structure'))); + $this->assertLinkTrailByTitle(array(t('People'))); + $this->assertLinkTrailByTitle(array(t('Configuration'))); + $this->assertLinkTrailByTitle(array(t('Configuration'), t('People'))); + // Random picks are sufficient. + $this->assertNoLinkTrailByTitle(array(t('Configuration'), t('Media'))); + $this->assertNoLinkTrailByTitle(array(t('Configuration'), t('System'))); + } + + /** + * Tests that user role and permission changes are properly taken up. + */ + function testPermissionChanges() { + // Create a user who is able to change permissions. + $permissions = $this->basePermissions + array( + 'administer permissions', + ); + $admin_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($admin_user); + + // Extract the user role ID that was created for above permissions. + $rid = key(array_diff_key($admin_user->roles, array(DRUPAL_AUTHENTICATED_RID => 0))); + + // Verify that Configuration does not appear. + $this->assertNoLinkTrailByTitle(array(t('Configuration'))); + // Grant the 'administer site configuration' permission to ourselves. + $edit = array( + $rid . '[administer site configuration]' => TRUE, + ); + $this->drupalPost('admin/people/permissions', $edit, t('Save permissions')); + // Verify that Configuration appears. + $this->assertLinkTrailByTitle(array(t('Configuration'))); + + // Verify that Structure » Content types does not appear. + $this->assertNoLinkTrailByTitle(array(t('Structure'), t('Content types'))); + // Create a new role. + $edit = array( + 'name' => 'test', + ); + $this->drupalPost('admin/people/permissions/roles', $edit, t('Add role')); + // It should be safe to assume that the new role gets the next ID. + $test_rid = $rid + 1; + // Grant the 'administer content types' permission for the role. + $edit = array( + $test_rid . '[administer content types]' => TRUE, + ); + $this->drupalPost('admin/people/permissions/' . $test_rid, $edit, t('Save permissions')); + // Verify that Structure » Content types does not appear. + $this->assertNoLinkTrailByTitle(array(t('Structure'), t('Content types'))); + + // Assign the role to ourselves. + $edit = array( + 'roles[' . $test_rid . ']' => TRUE, + ); + $this->drupalPost('user/' . $admin_user->uid . '/edit', $edit, t('Save')); + // Verify that Structure » Content types appears. + $this->assertLinkTrailByTitle(array(t('Structure'), t('Content types'))); + + // Delete the role. + $this->drupalPost('admin/people/permissions/roles/edit/' . $test_rid, array(), t('Delete role')); + $this->drupalPost(NULL, array(), t('Delete')); + // Verify that Structure » Content types does not appear. + $this->assertNoLinkTrailByTitle(array(t('Structure'), t('Content types'))); + } +} + +/** + * Tests appearance, localization, and escaping of dynamic links. + */ +class AdminMenuDynamicLinksTestCase extends AdminMenuWebTestCase { + public static function getInfo() { + return array( + 'name' => 'Dynamic links', + 'description' => 'Tests appearance, localization, and escaping of dynamic links.', + 'group' => 'Administration menu', + ); + } + + function setUp() { + parent::setUp(array('node')); + } + + /** + * Tests node type links. + */ + function testNode() { + $type = $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article')); + // Create a content-type with special characters. + $type = $this->drupalCreateContentType(array('type' => 'special', 'name' => 'Cool & Special')); + + $permissions = $this->basePermissions + array( + 'administer content types', + 'create article content', + 'create special content', + ); + $this->admin_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($this->admin_user); + + // Verify that dynamic links are displayed. + $this->drupalGet(''); + $this->assertElementByXPath('//div[@id="admin-menu"]', array(), t('Administration menu found.')); + $this->assertElementByXPath('//div[@id="admin-menu"]//a[contains(@href, :path)]', array(':path' => 'admin/structure/types'), "Structure » Content types link found."); + + // Verify link title output escaping. + $this->assertNoRaw('Cool & Special'); + $this->assertRaw(check_plain('Cool & Special')); + + // Verify Manage content type links. + $links = array( + 'admin/structure/types/manage/article' => 'Article', + 'admin/structure/types/manage/special' => 'Cool & Special', + ); + foreach ($links as $path => $title) { + $this->assertElementByXPath('//div[@id="admin-menu"]//a[contains(@href, :path) and text()=:title]', array( + ':path' => $path, + ':title' => $title, + ), "Structure » Content types » $title link found."); + } + + // Verify Add content links. + $links = array( + 'node/add/article' => 'Article', + 'node/add/special' => 'Cool & Special', + ); + foreach ($links as $path => $title) { + $this->assertElementByXPath('//div[@id="admin-menu"]//a[contains(@href, :path) and text()=:title]', array( + ':path' => $path, + ':title' => $title, + ), "Add content » $title link found."); + } + } + + /** + * Tests Add content links. + */ + function testNodeAdd() { + $type = $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article')); + + // Verify that "Add content" does not appear for unprivileged users. + $permissions = $this->basePermissions + array( + 'access content', + ); + $this->web_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($this->web_user); + $this->assertNoText(t('Add content')); + + // Verify "Add content" appears below "Content" for administrative users. + $permissions = $this->basePermissions + array( + 'access content overview', + 'access content', + 'create article content', + ); + $this->admin_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($this->admin_user); + $this->assertLinkTrailByTitle(array( + t('Content'), + t('Add content'), + )); + + // Verify "Add content" appears on the top-level for regular users. + $permissions = $this->basePermissions + array( + 'access content', + 'create article content', + ); + $this->web_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($this->web_user); + $this->assertLinkTrailByTitle(array( + t('Add content'), + )); + } +} + +/** + * Tests appearance of different types of links. + */ +class AdminMenuLinkTypesTestCase extends AdminMenuWebTestCase { + public static function getInfo() { + return array( + 'name' => 'Link types', + 'description' => 'Tests appearance of different types of links.', + 'group' => 'Administration menu', + ); + } + + function setUp() { + parent::setUp(array('help')); + + $permissions = module_invoke_all('permission'); + $permissions = array_keys($permissions); + $this->admin_user = $this->drupalCreateUser($permissions); + $this->drupalLogin($this->admin_user); + } + + /** + * Tests appearance of different router item link types. + */ + function testLinkTypes() { + // Verify that MENU_NORMAL_ITEMs appear. + $this->assertLinkTrailByTitle(array( + t('Configuration'), + t('System'), + t('Site information'), + )); + + // Verify that MENU_LOCAL_TASKs appear. + $this->assertLinkTrailByTitle(array(t('People'), t('Permissions'))); + $this->assertLinkTrailByTitle(array(t('Appearance'), t('Settings'))); + $this->assertLinkTrailByTitle(array(t('Modules'), t('Uninstall'))); + + // Verify that MENU_LOCAL_ACTIONs appear. + $this->assertLinkTrailByTitle(array( + t('People'), + t('Add user'), + )); + + // Verify that MENU_DEFAULT_LOCAL_TASKs do NOT appear. + $this->assertNoLinkTrailByTitle(array(t('Modules'), t('List'))); + $this->assertNoLinkTrailByTitle(array(t('People'), t('List'))); + $this->assertNoLinkTrailByTitle(array(t('People'), t('Permissions'), t('Permissions'))); + $this->assertNoLinkTrailByTitle(array(t('Appearance'), t('List'))); + + // Verify that MENU_VISIBLE_IN_BREADCRUMB items (exact type) do NOT appear. + $this->assertNoLinkTrailByTitle(array(t('Modules'), t('Uninstall'), t('Uninstall'))); + $this->assertNoLinkTrailByTitle(array(t('Help'), 'admin_menu')); + + // Verify that special "Index" link appears below icon. + $this->assertElementByXPath('//div[@id="admin-menu"]//a[contains(@href, :path) and text()=:title]', array( + ':path' => 'admin/index', + ':title' => t('Index'), + ), "Icon » Index link found."); + } +} + +/** + * Tests customized menu links. + */ +class AdminMenuCustomizedTestCase extends AdminMenuWebTestCase { + public static function getInfo() { + return array( + 'name' => 'Customized links', + 'description' => 'Tests customized menu links.', + 'group' => 'Administration menu', + ); + } + + function setUp() { + parent::setUp(array('menu')); + + $this->admin_user = $this->drupalCreateUser($this->basePermissions + array( + 'administer menu', + )); + $this->drupalLogin($this->admin_user); + } + + /** + * Test disabled custom links. + */ + function testCustomDisabled() { + $type = $this->drupalCreateContentType(); + $node = $this->drupalCreateNode(array('type' => $type->type)); + $text = $this->randomName(); + $xpath = $this->buildXPathQuery('//div[@id=:id]//a[contains(text(), :text)]', array( + ':id' => 'admin-menu', + ':text' => $text, + )); + + // Verify that the link does not appear in the menu. + $this->drupalGet('node'); + $elements = $this->xpath($xpath); + $this->assertFalse($elements, 'Custom link not found.'); + + // Add a custom link to the node to the menu. + $edit = array( + 'link_path' => 'node/' . $node->nid, + 'link_title' => $text, + 'parent' => 'management:' . $this->queryMlidByPath('admin'), + ); + $this->drupalPost('admin/structure/menu/manage/management/add', $edit, t('Save')); + + // Verify that the link appears in the menu. + $this->drupalGet('node'); + $elements = $this->xpath($xpath); + $this->assertTrue($elements, 'Custom link found.'); + + // Disable the link. + $edit = array( + 'enabled' => FALSE, + ); + $this->drupalPost('admin/structure/menu/item/' . $this->queryMlidByPath('node/' . $node->nid) . '/edit', $edit, t('Save')); + + // Verify that the disabled link does not appear in the menu. + $this->drupalGet('node'); + $elements = $this->xpath($xpath); + $this->assertFalse($elements, 'Disabled custom link not found.'); + } + + /** + * Tests external links. + */ + function testCustomExternal() { + // Add a custom link to the node to the menu. + $edit = array( + 'link_path' => 'http://example.com', + 'link_title' => 'Example', + 'parent' => 'management:' . $this->queryMlidByPath('admin'), + ); + $this->drupalPost('admin/structure/menu/manage/management/add', $edit, t('Save')); + + // Verify that the link appears in the menu. + $this->drupalGet(''); + $elements = $this->xpath('//div[@id=:id]//a[@href=:href and contains(text(), :text)]', array( + ':id' => 'admin-menu', + ':href' => $edit['link_path'], + ':text' => $edit['link_title'], + )); + $this->assertTrue($elements, 'External link found.'); + } + + /** + * Returns the menu link ID for a given link path in the management menu. + */ + protected function queryMlidByPath($path) { + return db_query('SELECT mlid FROM {menu_links} WHERE menu_name = :menu AND link_path = :path', array( + ':menu' => 'management', + ':path' => $path, + ))->fetchField(); + } +} + diff --git a/sites/all/modules/contrib/adminimal_admin_menu/LICENSE.txt b/sites/all/modules/contrib/adminimal_admin_menu/LICENSE.txt new file mode 100755 index 0000000000..d159169d10 --- /dev/null +++ b/sites/all/modules/contrib/adminimal_admin_menu/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/sites/all/modules/contrib/adminimal_admin_menu/README.txt b/sites/all/modules/contrib/adminimal_admin_menu/README.txt new file mode 100644 index 0000000000..67ff8806d1 --- /dev/null +++ b/sites/all/modules/contrib/adminimal_admin_menu/README.txt @@ -0,0 +1,22 @@ +Quick info: +“Adminimal Administration Menu” changes the style of the +“Administration menu” module. It adds a nice and simple minimalist look and +provides some tweaks to improve you Drupal administration experience. +The menu hierarchy is not simpler and easier to understand +(removing the unnecessary transparency and only highlighting the correct menus). + It also adds shortcut links that can be edited from the core shortcut module. + The shortcut links fit nicely and have a small icon that separates them from + the normal admin menu links. + +Requirements: +Requires the administration menu module (http://drupal.org/project/admin_menu) + +Installation: +1) Download and install like any other drupal module +2) Enable the “Administration menu Adminimal Theme” from the module manager. +If you are using the “Administration menu Toolbar style” it will be disabled +automatically to prevent some styling issues. This change will be saved in your +database, so if you decide to disable the “Administration menu Adminimal Theme” +your old “Administration menu Toolbar style” will be enabled automatically +so you have nothing to worry about. +3) Refresh your administration page and you must be good to go! diff --git a/sites/all/modules/contrib/adminimal_admin_menu/adminimal_admin_menu.css b/sites/all/modules/contrib/adminimal_admin_menu/adminimal_admin_menu.css new file mode 100644 index 0000000000..91663d3a84 --- /dev/null +++ b/sites/all/modules/contrib/adminimal_admin_menu/adminimal_admin_menu.css @@ -0,0 +1,319 @@ +/* Import the Open Sans webfont from Google CDN */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + src: local('Open Sans Light'), local('OpenSans-Light'), url(https://themes.googleusercontent.com/static/fonts/opensans/v6/DXI1ORHCpsQm3Vp6mXoaTRsxEYwM7FgeyaSgU71cLG0.woff) format('woff'); +} +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans'), local('OpenSans'), url(https://themes.googleusercontent.com/static/fonts/opensans/v6/uYKcPVoh6c5R0NpdEY5A-Q.woff) format('woff'); +} +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(https://themes.googleusercontent.com/static/fonts/opensans/v6/MTP_ySUJH_bn48VBG8sNShsxEYwM7FgeyaSgU71cLG0.woff) format('woff'); +} + +/* Blink Animation */ +@keyframes blink { + 0% {background-color: #f69231;} + 50% {background-color: #d94f13;} + 99% {background-color: #f69231;} +} + +@-moz-keyframes blink { + 0% {background-color: #f69231;} + 50% {background-color: #d94f13;} + 99% {background-color: #f69231;} +} + +@-webkit-keyframes blink { + 0% {background-color: #f69231;} + 50% {background-color: #d94f13;} + 99% {background-color: #f69231;} +} + +@-o-keyframes blink { + 0% {background-color: #f69231;} + 50% {background-color: #d94f13;} + 99% {background-color: #f69231;} +} + +/* Admin menu */ +body.adminimal-menu div#admin-menu { + background: #333; + background: none repeat scroll 0 0 #202020; + border-bottom: 1px solid #111111; + font-family: Open Sans, "Segoe UI", "Helvetica", sans-serif; +} + +body.adminimal-menu div#admin-menu li.admin-menu-toolbar-home-menu { + background: transparent; +} + +body.adminimal-menu div#admin-menu ul.dropdown span.admin-menu-home-icon { + background: url("images/home.png") no-repeat scroll 0 2px transparent; + display: block; + margin: 5px 0 0; + padding: 0; + width: 13px; +} + +body.adminimal-menu div#admin-menu ul.dropdown span.admin-menu-home-icon:hover { + background-position: 0px -86px; +} + +body.adminimal-menu div#admin-menu a, +body.adminimal-menu div#admin-menu span { + border: none !important; + font-family: "Open Sans", "Segoe UI", "Helvetica", sans-serif; + font-size: 12px; + line-height: 18px; +} + +body.adminimal-menu div#admin-menu a:hover { + background-color: #0074bd; + color: #fff; +} + +body.adminimal-menu #admin-menu .dropdown li li { + background-color: #1f1f1f; +} + +body.adminimal-menu #admin-menu .dropdown li li.expandable ul { + margin-top: -28px; +} + +body.adminimal-menu #admin-menu .dropdown li li > li.admin-menu-toolbar-category { + background: #fff !important; +} + +body.adminimal-menu #admin-menu .dropdown li li li:hover, +body.adminimal-menu #admin-menu .dropdown li:hover { + background: #0074bd !important; +} + +body.adminimal-menu #admin-menu .dropdown a { + border-right: none; +} + +body.adminimal-menu #admin-menu .dropdown li.admin-menu-toolbar-category a { + line-height: 20px; +} + +body.adminimal-menu #admin-menu #admin-menu-wrapper .dropdown li li { + opacity: 1; +} + +body.adminimal-menu #admin-menu .dropdown li li:hover, +body.adminimal-menu #admin-menu .dropdown li li.iehover { + background-color: #333; +} + +body.adminimal-menu #admin-menu #admin-menu-wrapper .dropdown li li a { + border: none; +} + +body.adminimal-menu #admin-menu #admin-menu-wrapper .dropdown li li.expandable { + background: url("images/square.png") no-repeat scroll 145px 11px #1f1f1f; +} + +body.adminimal-menu #admin-menu #admin-menu-wrapper .dropdown li li.expandable a { + background: transparent !important; + padding-right: 25px; + width: 135px; +} + +body.adminimal-menu #admin-menu #admin-menu-wrapper .dropdown li li.expandable:hover { + background: url("images/square.png") no-repeat scroll 145px -83px #0074bd !important; +} +/* Shortcuts bar */ + +body.adminimal-menu div.toolbar-shortcuts { + float: left; +} + +body.adminimal-menu div.shortcut-toolbar div#toolbar div.toolbar-shortcuts ul.menu { + margin: 0; + padding: 0; +} + +body.adminimal-menu div.shortcut-toolbar div#toolbar div.toolbar-shortcuts ul.menu li { + float: left; + list-style: none outside none; + padding: 0; +} + +body.adminimal-menu div.shortcut-toolbar div#toolbar a#edit-shortcuts { + float: right; + line-height: 18px; + padding: 5px 10px; +} + +body.adminimal-menu div.shortcut-toolbar div#toolbar a#edit-shortcuts:hover { + text-decoration: none; +} + +body.adminimal-menu #admin-menu .dropdown li.admin-menu-action a { + border: none !important; +} + +body.adminimal-menu #admin-menu .dropdown li.admin-menu-action:first-child a { + background: #444; + padding: 5px 10px; +} + +body.adminimal-menu #admin-menu .dropdown li.admin-menu-action:first-child a:hover { + background: #b73939; +} + +body.adminimal-menu #admin-menu .dropdown li.admin-menu-action.admin-menu-users { + border-left: 1px solid #000; +} + +body.adminimal-menu #admin-menu .dropdown li.admin-menu-action.admin-menu-users a:hover { + background: #0074BD; +} + +body.adminimal-menu #admin-menu .dropdown li.admin-menu-action.admin-menu-account a { + background: #4d8f46 !important; + border: medium none; + padding: 5px 10px; +} + +body.adminimal-menu #admin-menu .dropdown li.admin-menu-action.admin-menu-account a:hover { + background: #277d1e !important; +} + +body.adminimal-menu #admin-menu #admin-menu-wrapper div#toolbar div.toolbar-shortcuts ul li a { + background: url("images/shortcut.png") no-repeat scroll 7px 7px transparent; + border-radius: 0 0 0 0; + display: block; + margin-right: 0; + padding: 5px 10px; + text-indent: 16px; +} + +body.adminimal-menu #admin-menu #admin-menu-wrapper div#toolbar div.toolbar-shortcuts ul li a:hover { + background-color: #0074bd; + background-position: 7px -78px; +} + +body.adminimal-menu #admin-menu .admin-menu-search input { + background: none no-repeat scroll right center #444; + border: medium none; + border-radius: 0 0 0 0; + color: #999999; + font-size: 12px; + margin: 0 !important; + outline: medium none; + padding: 5px 22px 3px 8px; + width: 110px; + height: 20px; +} + +body.adminimal-menu #admin-menu .admin-menu-search input:focus, #admin-menu .admin-menu-search input:hover, #admin-menu .admin-menu-search input:active { + background: none no-repeat scroll right center #888; + color: #eee; +} + +body.adminimal-menu li.admin-menu-search:hover { + background: transparent !important; +} + +body.adminimal-menu #admin-menu li.highlight { + background-color: #ef6114 !important; + animation: blink 0.5s ease infinite; + -moz-animation: blink 0.5s ease infinite; + -webkit-animation: blink 0.5s ease infinite; + -o-animation: blink 0.5s ease infinite; +} + +body.adminimal-menu #admin-menu li.highlight > a { + border-color: #ef6114 !important; + color: #fff !important; +} + +/* Newline render mode */ +body.adminimal-menu.admin-menu.menu-render-newline div#admin-menu div#admin-menu-wrapper div.shortcut-toolbar { + clear: both; + border-top: 1px solid #000; +} + +body.adminimal-menu.admin-menu.menu-render-newline { + margin-top: 56px !important; +} + +body.adminimal-menu.admin-menu.menu-render-newline #overlay-container, body.adminimal-menu.admin-menu.newline .overlay-modal-background, body.adminimal-menu.admin-menu.newline .overlay-element, body.adminimal-menu.admin-menu.newline #overlay { + padding-top: 30px !important; +} + +/* Collapsed render mode */ +body.adminimal-menu.admin-menu.menu-render-collapsed div.shortcut-toolbar div#toolbar div.toolbar-shortcuts ul.menu { + position: absolute; +} + +body.adminimal-menu.admin-menu.menu-render-collapsed div.shortcut-toolbar div#toolbar div.toolbar-shortcuts ul.menu li { + float: none; + display: none; + border: none; +} + +body.adminimal-menu.admin-menu.menu-render-collapsed div.shortcut-toolbar div#toolbar div.toolbar-shortcuts ul.menu li.label { + display: block; + cursor: default; +} + +body.adminimal-menu.admin-menu.menu-render-collapsed div.shortcut-toolbar div#toolbar div.toolbar-shortcuts ul.menu li.label a:hover { + background: url("images/shortcut.png") no-repeat scroll 7px 7px #202020 !important; + color: #EEEEEE !important; +} + +body.adminimal-menu.admin-menu.menu-render-collapsed div.shortcut-toolbar div#toolbar div.toolbar-shortcuts ul.menu:hover li { + display: block; + background: #202020; +} + + +/* Dropdown render mode */ +body.adminimal-menu.admin-menu.menu-render-dropdown .toolbar-shortcuts select#shortcut-menu { + -webkit-appearance: none; + background: url("images/shortcut.png") no-repeat scroll 7px 7px #222222; + border: medium none; + color: #EEEEEE; + font-family: "Open Sans", "Segoe UI", "Helvetica", sans-serif; + font-size: 12px; + padding: 5px 4px 4px 24px; +} + +body.adminimal-menu.admin-menu.menu-render-dropdown .toolbar-shortcuts select#shortcut-menu option:hover { + cursor: pointer; +} + +body.adminimal-menu.admin-menu.menu-render-dropdown .toolbar-shortcuts select#shortcut-menu option:first-child { + display: none; +} + +body.adminimal-menu #admin-menu .dropdown .admin-menu-tab { + background: #444; + padding-bottom: 2px; +} + + +/* Environment indicator 2.x */ +body.adminimal-menu #admin-menu #environment-indicator { + text-shadow: none; +} + +body.adminimal-menu #admin-menu #environment-indicator .environment-indicator-name { + background-image: none; + border-left: 1px solid #323232; + border-radius: 0; + font-size: 12px; + line-height: 18px; + padding: 5px 10px; +} diff --git a/sites/all/modules/contrib/adminimal_admin_menu/adminimal_admin_menu.info b/sites/all/modules/contrib/adminimal_admin_menu/adminimal_admin_menu.info new file mode 100644 index 0000000000..cf0ec8daf4 --- /dev/null +++ b/sites/all/modules/contrib/adminimal_admin_menu/adminimal_admin_menu.info @@ -0,0 +1,12 @@ +name = Administration menu Adminimal Theme +description = Clean and minimal theme for the administration menu module. +package = Administration +core = 7.x +dependencies[] = admin_menu + +; Information added by Drupal.org packaging script on 2014-01-27 +version = "7.x-1.5" +core = "7.x" +project = "adminimal_admin_menu" +datestamp = "1390792706" + diff --git a/sites/all/modules/contrib/adminimal_admin_menu/adminimal_admin_menu.install b/sites/all/modules/contrib/adminimal_admin_menu/adminimal_admin_menu.install new file mode 100644 index 0000000000..f195a9dbaf --- /dev/null +++ b/sites/all/modules/contrib/adminimal_admin_menu/adminimal_admin_menu.install @@ -0,0 +1,80 @@ +Administration menu Adminimal Theme module successfully enabled!
                  The core "Toolbar" module was automatically disabled to avoid double menu rendering. Disabling the Adminimal menu module will automatically re-enable the core toolbar module, so you have nothing to worry about.'), 'status'); + + // Let the database know that the module was disabled. + variable_set('adminimal_admin_menu_core-toolbar-disabled', TRUE); + + } + + // Check if Admin Toolbar theme is enabled. + if (module_exists('admin_menu_toolbar')) { + + // Disable the admin menu toolbar theme to avoid style issues. + module_disable(array('admin_menu_toolbar'), FALSE); + + // Display message to the administrator that the module is disabled. + drupal_set_message(t('Administration menu Adminimal Theme module successfully enabled!
                  Your old Administration menu Toolbar theme was automatically disabled to avoid styling issues. Disabling the Adminimal menu module will automatically re-enable your old toolbar theme, so you have nothing to worry about.'), 'status'); + + // Let the database know that the module was disabled. + variable_set('adminimal_admin_menu_toolbar-disabled', TRUE); + + } +} + +/** + * Implements hook_disable(). + */ +function adminimal_admin_menu_disable() { + + // Check if core "Toolbar" module was disabled by adminimal menu. + if (variable_get('adminimal_admin_menu_core-toolbar-disabled', FALSE)) { + + // If true, re-enable the "Administration menu Toolbar style" module. + module_enable(array('toolbar'), FALSE); + + // Display message to the administrator that the module is disabled. + drupal_set_message(t('Administration menu Adminimal Theme module successfully disabled!
                  The core "Toolbar" module was automatically re-enabled.'), 'status'); + + } + + // Check if "Administration menu Toolbar style" was disabled by this module. + if (variable_get('adminimal_admin_menu_toolbar-disabled', FALSE)) { + + // If true, re-enable the "Administration menu Toolbar style" module. + module_enable(array('admin_menu_toolbar'), FALSE); + + // Display message to the administrator that the module is disabled. + drupal_set_message(t('Administration menu Adminimal Theme module successfully disabled!
                  The old Toolbar theme was automatically re-enabled.'), 'status'); + + } +} + +/** + * Implements hook_uninstall(). + */ +function adminimal_admin_menu_uninstall() { + + // Clean up the module variables from database after uninstall. + variable_del('adminimal_admin_menu_toolbar-disabled'); + variable_del('adminimal_admin_menu_core-toolbar-disabled'); + variable_del('adminimal_admin_menu_render'); + +} diff --git a/sites/all/modules/contrib/adminimal_admin_menu/adminimal_admin_menu.js b/sites/all/modules/contrib/adminimal_admin_menu/adminimal_admin_menu.js new file mode 100644 index 0000000000..4c4340bbe0 --- /dev/null +++ b/sites/all/modules/contrib/adminimal_admin_menu/adminimal_admin_menu.js @@ -0,0 +1,62 @@ +(function($) { + +Drupal.admin = Drupal.admin || {}; +Drupal.admin.behaviors = Drupal.admin.behaviors || {}; + +/** + * @ingroup admin_behaviors + * @{ + */ + +/** + * Apply active trail highlighting based on current path. + * + * @todo Not limited to toolbar; move into core? + */ +Drupal.admin.behaviors.toolbarActiveTrail = function (context, settings, $adminMenu) { + if (settings.admin_menu.toolbar && settings.admin_menu.toolbar.activeTrail) { + $adminMenu.find('> div > ul > li > a[href="' + settings.admin_menu.toolbar.activeTrail + '"]').addClass('active-trail'); + } +}; + +/** + * @} End of "ingroup admin_behaviors". + */ + +Drupal.admin.behaviors.shorcutcollapsed = function (context, settings, $adminMenu) { + + // Create the dropdown base + $("
                • "+Drupal.t('Shortcuts')+"
                • ").prependTo("body.menu-render-collapsed div.toolbar-shortcuts ul"); + +} + +Drupal.admin.behaviors.shorcutselect = function (context, settings, $adminMenu) { + + // Create the dropdown base + $("').appendTo(this.element); + + close.mousedown(function() { + self.remove(item); + }); + }; + + Drupal.autocomplete_deluxe.MultipleWidget.Item.prototype.remove = function() { + this.element.remove(); + var values = this.widget.valueForm.val(); + var escapedValue = Drupal.autocomplete_deluxe.escapeRegex( this.item.value ); + var regex = new RegExp('()*""' + escapedValue + '""()*', 'gi'); + this.widget.valueForm.val(values.replace(regex, '')); + delete this.widget.items[this.value]; + }; + + Drupal.autocomplete_deluxe.MultipleWidget.prototype.setup = function() { + var jqObject = this.jqObject; + var parent = jqObject.parents('.autocomplete-deluxe-container'); + var value_container = parent.next(); + var value_input = value_container.find('input'); + var items = this.items; + var self = this; + this.valueForm = value_input; + + // Override the resize function, so that the suggestion list doesn't resizes + // all the time. + var autocompleteDataKey = typeof(this.jqObject.data('autocomplete')) === 'object' ? 'autocomplete' : 'ui-autocomplete'; + + jqObject.data(autocompleteDataKey)._resizeMenu = function() {}; + + jqObject.show(); + + value_container.hide(); + + // Add the default values to the box. + var default_values = value_input.val(); + default_values = $.trim(default_values); + default_values = default_values.substr(2, default_values.length-4); + default_values = default_values.split('"" ""'); + + for (var index in default_values) { + var value = default_values[index]; + if (value != '') { + // If a terms is encoded in double quotes, then the label should have + // no double quotes. + var label = value.match(/["][\w|\s|\D|]*["]/gi) !== null ? value.substr(1, value.length-2) : value; + var item = { + label : label, + value : value + }; + var item = new Drupal.autocomplete_deluxe.MultipleWidget.Item(self, item); + item.element.insertBefore(jqObject); + items[item.value] = item; + } + } + + jqObject.addClass('autocomplete-deluxe-multiple'); + parent.addClass('autocomplete-deluxe-multiple'); + + + // Adds a value to the list. + this.addValue = function(ui_item) { + var item = new Drupal.autocomplete_deluxe.MultipleWidget.Item(self, ui_item); + item.element.insertBefore(jqObject); + items[ui_item.value] = item; + var new_value = ' ' + self.wrapper + ui_item.value + self.wrapper; + var values = value_input.val(); + value_input.val(values + new_value); + jqObject.val(''); + }; + + parent.mouseup(function() { + jqObject.autocomplete('search', ''); + jqObject.focus(); + }); + + jqObject.bind("autocompleteselect", function(event, ui) { + self.addValue(ui.item); + jqObject.width(25); + // Return false to prevent setting the last term as value for the jqObject. + return false; + }); + + jqObject.bind("autocompletechange", function(event, ui) { + jqObject.val(''); + }); + + jqObject.blur(function() { + var last_element = jqObject.parent().children('.autocomplete-deluxe-item').last(); + last_element.removeClass('autocomplete-deluxe-item-focus'); + var value = jqObject.val(); + if(value != '') { + var ui_item = { + label: value, + value: value + }; + self.addValue(ui_item); + } + }); + + var clear = false; + + jqObject.keypress(function (event) { + var value = jqObject.val(); + // If a comma was entered and there is none or more then one comma,or the + // enter key was entered, then enter the new term. + if ((event.which == self.delimiter && (value.split('"').length - 1) != 1) || (event.which == 13 && jqObject.val() != "")) { + value = value.substr(0, value.length); + if (typeof self.items[value] == 'undefined' && value != '') { + var ui_item = { + label: value, + value: value + }; + self.addValue(ui_item); + } + clear = true; + if (event.which == 13) { + return false; + } + } + + // If the Backspace key was hit and the input is empty + if (event.which == 8 && value == '') { + var last_element = jqObject.parent().children('.autocomplete-deluxe-item').last(); + // then mark the last item for deletion or deleted it if already marked. + if (last_element.hasClass('autocomplete-deluxe-item-focus')) { + var value = last_element.children('input').val(); + self.items[value].remove(self.items[value]); + jqObject.autocomplete('search', ''); + } else { + last_element.addClass('autocomplete-deluxe-item-focus'); + } + } else { + // Remove the focus class if any other key was hit. + var last_element = jqObject.parent().children('.autocomplete-deluxe-item').last(); + last_element.removeClass('autocomplete-deluxe-item-focus'); + } + }); + + jqObject.autoGrowInput({ + comfortZone: 50, + minWidth: 10, + maxWidth: 460 + }); + + + jqObject.keyup(function (event) { + if (clear) { + // Trigger the search, so it display the values for an empty string. + jqObject.autocomplete('search', ''); + jqObject.val(''); + clear = false; + // Return false to prevent entering the last character. + return false; + } + }); + }; +})(jQuery); diff --git a/sites/all/modules/contrib/autocomplete_deluxe/autocomplete_deluxe.module b/sites/all/modules/contrib/autocomplete_deluxe/autocomplete_deluxe.module new file mode 100755 index 0000000000..a1efa261e1 --- /dev/null +++ b/sites/all/modules/contrib/autocomplete_deluxe/autocomplete_deluxe.module @@ -0,0 +1,400 @@ + array( + 'label' => t('Autocomplete Deluxe'), + 'field types' => array('taxonomy_term_reference'), + 'settings' => array( + 'size' => 60, + 'autocomplete_deluxe_path' => 'autocomplete_deluxe/taxonomy', + ), + 'behaviors' => array( + 'multiple values' => FIELD_BEHAVIOR_CUSTOM, + ), + ), + ); +} + +/** + * Custom taxonomy callback, which also accepts an empty string search. + */ +function autocomplete_deluxe_taxonomy_callback($field_name, $tags_typed = '', $limit = 10) { + $field = field_info_field($field_name); + $use_synonyms = !empty($_GET['synonyms']); + + // The user enters a comma-separated list of tags. We only autocomplete the last tag. + $tags_typed = drupal_explode_tags($tags_typed); + $tag_last = drupal_strtolower(array_pop($tags_typed)); + + $matches = array(); + + // Part of the criteria for the query come from the field's own settings. + $vids = array(); + $vocabularies = taxonomy_vocabulary_get_names(); + foreach ($field['settings']['allowed_values'] as $tree) { + // If the content taxonomy setting content_taxonomy_ignore_in_suggestions + // is set, then the vocabulary is ignored. + if (empty($tree['content_taxonomy_ignore_in_suggestions'])) { + $vids[] = $vocabularies[$tree['vocabulary']]->vid; + } + } + + $query = db_select('taxonomy_term_data', 't'); + $query->addTag('translatable'); + $query->addTag('term_access'); + + if (module_exists('synonyms') && !empty($use_synonyms)) { + $query->leftJoin('field_data_synonyms_synonym', 'fdss', 'fdss.entity_id = t.tid'); + } + + if ($tag_last != '') { + // Do not select already entered terms. + if (!empty($tags_typed)) { + $query->condition('t.name', $tags_typed, 'NOT IN'); + } + // Select rows that match by term name. + $query + ->fields('t', array('tid', 'name')) + ->condition('t.vid', $vids); + + if (module_exists('synonyms') && !empty($use_synonyms)) { + $or = db_or(); + $or->condition('fdss.synonyms_synonym_value', '%' . db_like($tag_last) . '%', 'LIKE'); + $or->condition('t.name', '%' . db_like($tag_last) . '%', 'LIKE'); + $query->condition($or); + } + else { + $query->condition('t.name', '%' . db_like($tag_last) . '%', 'LIKE'); + } + + if (isset($limit) && $limit > 0) { + $query->range(0, $limit); + } + + $tags_return = $query->execute() + ->fetchAllKeyed(); + } + else { + $query + ->fields('t', array('tid', 'name')) + ->condition('t.vid', $vids); + + if (isset($limit) && $limit > 0) { + $query->range(0, $limit); + } + + $tags_return = $query->execute() + ->fetchAllKeyed(); + } + + $prefix = count($tags_typed) ? drupal_implode_tags($tags_typed) . ', ' : ''; + + $term_matches = array(); + foreach ($tags_return as $tid => $name) { + $n = $name; + // Term names containing commas or quotes must be wrapped in quotes. + if (strpos($name, ',') !== FALSE || strpos($name, '"') !== FALSE) { + $n = '"' . str_replace('"', '""', $name) . '"'; + } + $term_matches[$prefix . $n] = check_plain($name); + } + + drupal_json_output($term_matches); +} + +/** + * Returns all allowed terms for a field without any prefix. + */ +function autocomplete_deluxe_allowed_terms($field) { + $options = array(); + foreach ($field['settings']['allowed_values'] as $tree) { + if ($vocabulary = taxonomy_vocabulary_machine_name_load($tree['vocabulary'])) { + if ($terms = taxonomy_get_tree($vocabulary->vid, $tree['parent'])) { + foreach ($terms as $term) { + $options[$term->name] = $term->name; + } + } + } + } + return $options; +} + +/** + * Implements hook_field_widget_settings_form(). + */ +function autocomplete_deluxe_field_widget_settings_form($field, $instance) { + $widget = $instance['widget']; + $settings = $widget['settings']; + + $form['size'] = array( + '#type' => 'textfield', + '#title' => t('Size of textfield'), + '#default_value' => isset($settings['size']) ? $settings['size'] : 6, + '#element_validate' => array('_element_validate_integer_positive'), + '#required' => TRUE, + ); + $form['limit'] = array( + '#type' => 'textfield', + '#title' => t('Limit of the output.'), + '#description' => t('If set to zero no limit will be used'), + '#default_value' => isset($settings['limit']) ? $settings['limit'] : 10, + '#element_validate' => array('_element_validate_integer'), + ); + $form['min_length'] = array( + '#type' => 'textfield', + '#title' => t('Mininum length.'), + '#description' => t('The minimum length of characters to enter to open the suggestion list.'), + '#default_value' => isset($settings['min_length']) ? $settings['min_length'] : 0, + '#element_validate' => array('_element_validate_integer'), + ); + $form['delimiter'] = array( + '#type' => 'textfield', + '#title' => t('Delimiter.'), + '#description' => t('A character which should be used beside the enter key, to seperate terms.'), + '#default_value' => isset($settings['delimiter']) ? $settings['delimiter'] : '', + '#size' => 1, + ); + $form['not_found_message'] = array( + '#type' => 'textfield', + '#title' => t('Term not found message.'), + '#description' => t('A message text which will be displayed, if the entered term was not found.'), + '#default_value' => isset($settings['not_found_message']) ? $settings['not_found_message'] : "The term '@term' will be added.", + ); + + if (module_exists('synonyms')) { + $form['use_synonyms'] = array( + '#type' => 'checkbox', + '#title' => t('Allow synonyms'), + '#description' => t('Should users be able to search for synonyms of terms?'), + '#default_value' => isset($settings['use_synonyms']) ? $settings['use_synonyms'] : FALSE, + ); + } + return $form; +} + +/** + * Implodes the tags from the taxonomy module. + * + * This function is essentially the same as axonomy_implode_tags, with the + * difference, that it uses only a comma instead of a comma and a space to + * implode the tags. It will help keep problems with delimiters to a minimum. + */ +function autocomplete_deluxe_taxonomy_implode_tags($tags, $vid = NULL) { + $typed_tags = array(); + foreach ($tags as $tag) { + // Extract terms belonging to the vocabulary in question. + if (!isset($vid) || $tag->vid == $vid) { + // Make sure we have a completed loaded taxonomy term. + if (isset($tag->name)) { + // Commas and quotes in tag names are special cases, so encode 'em. + if (strpos($tag->name, ',') !== FALSE || strpos($tag->name, '"') !== FALSE) { + $tag->name = '"' . str_replace('"', '""', $tag->name) . '"'; + } + + $typed_tags[] = $tag->name; + } + } + } + return implode(',', $typed_tags); +} + +/** + * Implements hook_field_widget_error(). + */ +function autocomplete_deluxe_field_widget_error($element, $error, $form, &$form_state) { + form_error($element, $error['message']); +} + +/** + * Implements hook_field_widget_form(). + */ +function autocomplete_deluxe_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $element += array( + '#type' => 'autocomplete_deluxe', + '#size' => $instance['widget']['settings']['size'], + '#limit' => isset($instance['widget']['settings']['limit']) ? $instance['widget']['settings']['limit'] : 10, + '#min_length' => isset($instance['widget']['settings']['min_length']) ? $instance['widget']['settings']['min_length'] : 0, + '#use_synonyms' =>isset($instance['widget']['settings']['use_synonyms']) ? $instance['widget']['settings']['use_synonyms'] : 0, + '#delimiter' =>isset($instance['widget']['settings']['delimiter']) ? $instance['widget']['settings']['delimiter'] : '', + '#not_found_message' =>isset($instance['widget']['settings']['not_found_message']) ? $instance['widget']['settings']['not_found_message'] : "The term '@term' will be added.", + ); + + $multiple = $field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED ? TRUE : FALSE; + + $tags = array(); + foreach ($items as $item) { + $tags[$item['tid']] = isset($item['taxonomy_term']) ? $item['taxonomy_term'] : taxonomy_term_load($item['tid']); + } + + $element['#element_validate'] = array('taxonomy_autocomplete_validate'); + $element += array( + '#multiple' => $multiple, + '#autocomplete_deluxe_path' => url($instance['widget']['settings']['autocomplete_deluxe_path'] . '/' . $field['field_name'], array('absolute' => TRUE)), + '#default_value' => autocomplete_deluxe_taxonomy_implode_tags($tags), + ); + + return $element; +} + +/** + * Generates the basic form elements and javascript settings. + */ +function autocomplete_deluxe_element_process($element) { + $element['#attached'] = array( + 'library' => array(array('system', 'ui.autocomplete'), array('system', 'ui.button')), + 'js' => array(drupal_get_path('module', 'autocomplete_deluxe') . '/autocomplete_deluxe.js'), + 'css' => array(drupal_get_path('module', 'autocomplete_deluxe') . '/autocomplete_deluxe.css'), + ); + // Workaround for problems with jquery css in seven theme. + if ($GLOBALS['theme'] == 'seven') { + $element['#attached']['css'][] = drupal_get_path('module', 'autocomplete_deluxe') . '/autocomplete_deluxe.seven.css'; + } + + $html_id = drupal_html_id('autocomplete-deluxe-input'); + + $element['#after_build'][] = 'autocomplete_deluxe_after_build'; + + // Set default options for multiple values. + $element['#multiple'] = isset($element['#multiple']) ? $element['#multiple'] : FALSE; + + $element['textfield'] = array( + '#type' => 'textfield', + '#size' => isset($element['#size']) ? $element['#size'] : '', + '#attributes' => array('class' => array('autocomplete-deluxe-form'), 'id' => array($html_id)), + '#default_value' => '', + '#prefix' => '
                  ', + '#suffix' => '
                  ', + ); + + $js_settings['autocomplete_deluxe'][$html_id] = array( + 'input_id' => $html_id, + 'multiple' => $element['#multiple'], + 'required' => $element['#required'], + 'limit' => isset($element['#limit']) ? $element['#limit'] : 10, + 'min_length' => isset($element['#min_length']) ? $element['#min_length'] : 0, + 'use_synonyms' => isset($element['#use_synonyms']) ? $element['#use_synonyms'] : 0, + 'delimiter' => isset($element['#delimiter']) ? $element['#delimiter'] : '', + 'not_found_message' => isset($element['#not_found_message']) ? $element['#not_found_message'] : "The term '@term' will be added.", + ); + + if (isset($element['#autocomplete_deluxe_path'])) { + if (isset($element['#default_value'])) { + // Split on the comma only if that comma has zero, or an even number of + // quotes in ahead of it. + // http://stackoverflow.com/questions/1757065/java-splitting-a-comma-separated-string-but-ignoring-commas-in-quotes + $default_value = preg_replace('/,(?=([^\"]*\"[^\"]*\")*[^\"]*$)/i', '"" ""', $element['#default_value']); + $default_value = '""' . $default_value . '""'; + } + else { + $default_value = ''; + } + + if ($element['#multiple']) { + $element['value_field'] = array( + '#type' => 'textfield', + '#attributes' => array('class' => array('autocomplete-deluxe-value-field')), + '#default_value' => $default_value, + '#prefix' => '
                  ', + '#suffix' => '
                  ', + ); + $element['textfield']['#attributes']['style'] = array('display:none'); + } + else { + $element['textfield']['#default_value'] = isset($element['#default_value']) ? $element['#default_value'] : ''; + } + + $js_settings['autocomplete_deluxe'][$html_id] += array( + 'type' => 'ajax', + 'uri' => $element['#autocomplete_deluxe_path'], + ); + } + else { + // If there is no source (path or data), we don't want to add the js + // settings and so the functions will be abborted. + return $element; + } + $element['#attached']['js'][] = array('data' => $js_settings, 'type' => 'setting'); + $element['#tree'] = TRUE; + + return $element; +} + +/** + * Helper function to determine the value for a autocomplete deluxe form + * element. + */ +function autocomplete_deluxe_value(&$element, $input = FALSE, $form_state = NULL) { + // This runs before child elements are processed, so we cannot calculate the + // value here. But we have to make sure the value is an array, so the form + // API is able to proccess the children to set their values in the array. Thus + // once the form API has finished processing the element, the value is an + // array containing the child element values. Then finally the after build + // callback converts it back to the numeric value and sets that. + return array(); +} + +/** + * FAPI after build callback for the duration parameter type form. + * Fixes up the form value by applying the multiplier. + */ +function autocomplete_deluxe_after_build($element, &$form_state) { + // By default drupal sets the maxlength to 128 if the property isn't + // specified, but since the limit isn't useful in some cases, + // we unset the property. + unset($element['textfield']['#maxlength']); + + // Set the elements value from either the value field or text field input. + $element['#value'] = isset($element['value_field']) ? $element['value_field']['#value'] : $element['textfield']['#value']; + + if (isset($element['value_field'])) { + $element['#value'] = trim($element['#value']); + // Replace all double double quotes and space with a comma. This will allows + // us to keep entries in double quotes. + $element['#value'] = str_replace('"" ""', ',', $element['#value']); + $element['#value'] = str_replace('"" ""', ',', $element['#value']); + // Remove the double quotes at the beginning and the end from the first and + // the last term. + $element['#value'] = substr($element['#value'], 2, strlen($element['#value']) - 4); + + unset($element['value_field']['#maxlength']); + } + + + form_set_value($element, $element['#value'], $form_state); + return $element; +} + +/** + * Implements hook_element_info(). + */ +function autocomplete_deluxe_element_info() { + $types['autocomplete_deluxe'] = array( + '#input' => TRUE, + '#value_callback' => 'autocomplete_deluxe_value', + '#pre_render' => array('form_pre_render_conditional_form_element'), + '#process' => array('autocomplete_deluxe_element_process'), + ); + return $types; +} + +/** + * Implements hook_menu(). + */ +function autocomplete_deluxe_menu() { + $items['autocomplete_deluxe/taxonomy'] = array( + 'title' => 'Autocomplete deluxe taxonomy', + 'page callback' => 'autocomplete_deluxe_taxonomy_callback', + 'access arguments' => array('access content'), + 'type' => MENU_CALLBACK, + ); + return $items; +} diff --git a/sites/all/modules/contrib/autocomplete_deluxe/autocomplete_deluxe.seven.css b/sites/all/modules/contrib/autocomplete_deluxe/autocomplete_deluxe.seven.css new file mode 100644 index 0000000000..0bbe29edc8 --- /dev/null +++ b/sites/all/modules/contrib/autocomplete_deluxe/autocomplete_deluxe.seven.css @@ -0,0 +1,89 @@ +@CHARSET "UTF-8"; + +/** + * JQuery UI style sheet fix for seven. + */ + +.ui-button { + border: 1px solid #cccccc; + background: #e6e6e6; +} + +.ui-state-hover, +.ui-state-focus { + border: 1px solid #bbbbbb; +} + +.ui-button.ui-state-active { + border: 1px solid #777777; + font-weight: bold; +} + +/** + * Corner radius + */ +.ui-corner-tl { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; +} + +.ui-corner-tr { + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; +} + +.ui-corner-bl { + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.ui-corner-br { + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.ui-corner-top { + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +.ui-corner-bottom { + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +.ui-corner-right { + -moz-border-radius-bottomright: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} + +.ui-corner-left { + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} + +.ui-corner-all { + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; +} diff --git a/sites/all/modules/contrib/autocomplete_deluxe/throbber.gif b/sites/all/modules/contrib/autocomplete_deluxe/throbber.gif new file mode 100644 index 0000000000..4352e64e85 Binary files /dev/null and b/sites/all/modules/contrib/autocomplete_deluxe/throbber.gif differ diff --git a/sites/all/modules/contrib/autocomplete_deluxe/x.gif b/sites/all/modules/contrib/autocomplete_deluxe/x.gif new file mode 100644 index 0000000000..c0d1ea545f Binary files /dev/null and b/sites/all/modules/contrib/autocomplete_deluxe/x.gif differ diff --git a/sites/all/modules/contrib/better_exposed_filters/CHANGELOG.txt b/sites/all/modules/contrib/better_exposed_filters/CHANGELOG.txt new file mode 100644 index 0000000000..57dc261a60 --- /dev/null +++ b/sites/all/modules/contrib/better_exposed_filters/CHANGELOG.txt @@ -0,0 +1,71 @@ + +Better Exposed Filters change log +--------------------------------- + +Better Exposed Filters 7.x-x.x xxxx-xx-xx +------------------------------------------ +Issue #1240238 by marvil07, Max Ka, gapple, chichilatte: Let use toggle links on the exposed form sorts. +by mikeker: Revamped automated tests. +by mikeker: Fixed (most) Drupal Coding Standards errors and warnings +Issue #1842494 by mikeker: Fixed Combined Sort Order - Rendered in Div of Submit Button. +Issue #1784424 by mikeker: Refactored getting existing and default values. +Issue #1666896 by Staratel: Fixed Filter captions on BEF settings form are empty if filter labels are empty. +Issue #1798350 by mikeker: Fixed: secondary options were using the filter label instead of ID. +By mikeker: Allow rewriting of filter values (similar to the rewrite combined sort option) +Issue #1673562 by buzkall, nedjo: Added Automatically select children in nested checkboxes option. +Issue #1813654 by elbahek, mikeker: Fixed Undefined offset notice on rendered page. +Issue #1627524 by rooby: Added the jQuery slider widget to BEF. +Issue #1873164 by mikeker: Fixed Taxonomy exposed filter links not linking to appropriate page. +By mikeker: Correctly handle hierarchical taxonomy filters when rewriting filter options. + +Better Exposed Filters 7.x-3.0-beta2 2012-09-13 +------------------------------------------------ +Issue #975376 by mikeker, gordon: Inital port. Note: only supports Views 3.x as there is no 2.x release planned for D7. +Issue #1109950 by mikeker, Francois LR: Fixes errors in taxonomy tree +Issue #1099528 by mikeker: Radio button labels not displayed +Issue #1128688 by sreynen: Select All/None not working on nested checkboxes +Issue #1111712 by mikeker: Adds Links as an option for filters +mikeker: Fixed attributes, select all/none issues +Issue #1120244 by mikeker: Fixed collapsible filter options +Issue #1132818 by mikeker: Allows more specific targeting of BEF options based on filter options +Issue #1162488 by klickreflex: Fixes incorrect HTML in nested displays +By mikeker: Added datepicker option +Issue #1194102 by dj1999: Adds BEF options to 'is all of' filters +Issue #1149254 by aaronbauman: Hides Apply button when exposed filters are set to hidden +Issue #1227168 by gionnibgud: Adds IDs to select_as_links filter options +Issue #1260194 by zhuber: Adds toggle functionality to filter links (added --author attribution in a later commit) +Issue #1099528 by Murz: Fixes incorrect depth of '- Any -' option +Issue #1241960 by mikeker: Fixes E_STRICT warning +Issue #1217204 by mikeker: Fixes Undefined index errors when BEF settings page is raised as a standalong page +Issue #1281348 by mikeker: form.js and collapse.js not being aggregated properly +Issue #1272694 by samhassell and mikeker: correctly sets form-item classes for wrapper divs +Issue #1290630 by d.clarke: Removes duplicated IDs from radio buttons +Issue #1289370 by mikeker: Gets Datepicker working again. Note: needs to be added to behaviors. +By mikeker: Added/Cleaned up highlight JS, moved datepicker JS to Drupal.behaviors +Issue #1289370 by ducktape: Adds support for Drupal's default date field and corrects missing JS file +Issue #1297418 by mikeker: Puts exposed operators inside fieldset +Issue #1283998 by mikeker: Added token support in description fields +Issue #1212744 by mikeker: Collapsible option for sort +Issue #1398048 by mikeker: Rewritable combined sort options +Issue #1439216 by KeyboardCowboy: Remove duplicate name attributes on checkboxes (W3C validation) +Issue #1548292 by richard.thomas: Use drupal_add_library() for datepicker option +Issue #1171952 by mikeker: Added single on/off checkbox support +Issue #1286378 by m4olivei: Fixes link filter state being list when non-link filter is used +Issue #1362344 by mikeker, arkz: Adds option to put exposed form elements in a secondary options fieldset. + +Better Exposed Filters 6.x-x.x xxxx-xx-xx +------------------------------------------ +#864614 by OxideInteractive: Fixes extra space in class attributes +#874978 by vosechu: select_as_checkboxes now respects #default_value +#812778 by mikeker: Fixes problem with "Show hierarchy in dropdown enabled" +#811954 by pivica: Fixes duplicate Select All/None links with multiple Behavior executions +#657148 by mikeker: Adds support for exposed sort manipulation +#965388 by mikeker: Adds support for collapsible fieldsets +#965388 by mikeker: Adds support for collapsible fieldsets +mikeker: Adds nested list display for hierarchical taxonomy filters +#894312 by kenorb, mikeker: Adds links as a BEF option +#1006716 by attiks: Corrects