aboutsummaryrefslogtreecommitdiffstats
path: root/library/tinymce/jscripts/tiny_mce/utils
diff options
context:
space:
mode:
authorSimon L'nu <simon.lnu@gmail.com>2012-03-22 01:29:55 -0400
committerSimon L'nu <simon.lnu@gmail.com>2012-03-22 01:29:55 -0400
commit8e29669b81f8df724bb77e2e2b6eff330a17cbec (patch)
tree4c1aa63a36eeaadab00c61eb05f3f9f5ae0da095 /library/tinymce/jscripts/tiny_mce/utils
parentbe50cc03b8b997a3b073c3627f371bd16b82eaa5 (diff)
parentd81256d7b051d9a76b087feeb64ac79fb4aeff4d (diff)
downloadvolse-hubzilla-8e29669b81f8df724bb77e2e2b6eff330a17cbec.tar.gz
volse-hubzilla-8e29669b81f8df724bb77e2e2b6eff330a17cbec.tar.bz2
volse-hubzilla-8e29669b81f8df724bb77e2e2b6eff330a17cbec.zip
Merge branch 'master', remote-tracking branch 'remotes/upstream/master'
* remotes/upstream/master: support lowercase :-p smilie work around doubled linefeeds in tinymce3.5b2 add icons to aside diabook, fixes in css revert permissions relaxation on community add comix-plain smooth the comix comment box make autocomplete work with updated tinymce ika to ica private file in repository facepark is unsupported ATM remove stray template variable from old code add comix theme use password field for DB input added Vijay's theme from facepark.in added README to mcefixes to explain what is going on. update tinymce to 3.5b2 to fix issues with FF 11 and pasting into code blocks more friend suggestions * master:
Diffstat (limited to 'library/tinymce/jscripts/tiny_mce/utils')
-rw-r--r--[-rwxr-xr-x]library/tinymce/jscripts/tiny_mce/utils/editable_selects.js2
-rw-r--r--[-rwxr-xr-x]library/tinymce/jscripts/tiny_mce/utils/form_utils.js18
-rw-r--r--[-rwxr-xr-x]library/tinymce/jscripts/tiny_mce/utils/mctabs.js105
-rw-r--r--[-rwxr-xr-x]library/tinymce/jscripts/tiny_mce/utils/validate.js38
4 files changed, 145 insertions, 18 deletions
diff --git a/library/tinymce/jscripts/tiny_mce/utils/editable_selects.js b/library/tinymce/jscripts/tiny_mce/utils/editable_selects.js
index fd943c0f8..4b920f3d1 100755..100644
--- a/library/tinymce/jscripts/tiny_mce/utils/editable_selects.js
+++ b/library/tinymce/jscripts/tiny_mce/utils/editable_selects.js
@@ -16,7 +16,7 @@ var TinyMCE_EditableSelects = {
for (i=0; i<nl.length; i++) {
if (nl[i].className.indexOf('mceEditableSelect') != -1) {
- o = new Option('(value)', '__mce_add_custom__');
+ o = new Option(tinyMCEPopup.editor.translate('value'), '__mce_add_custom__');
o.className = 'mceAddSelectValue';
diff --git a/library/tinymce/jscripts/tiny_mce/utils/form_utils.js b/library/tinymce/jscripts/tiny_mce/utils/form_utils.js
index 2617a26ed..59da01399 100755..100644
--- a/library/tinymce/jscripts/tiny_mce/utils/form_utils.js
+++ b/library/tinymce/jscripts/tiny_mce/utils/form_utils.js
@@ -11,10 +11,14 @@
var themeBaseURL = tinyMCEPopup.editor.baseURI.toAbsolute('themes/' + tinyMCEPopup.getParam("theme"));
function getColorPickerHTML(id, target_form_element) {
- var h = "";
+ var h = "", dom = tinyMCEPopup.dom;
- h += '<a id="' + id + '_link" href="javascript:;" onclick="tinyMCEPopup.pickColor(event,\'' + target_form_element +'\');" onmousedown="return false;" class="pickcolor">';
- h += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '">&nbsp;</span></a>';
+ if (label = dom.select('label[for=' + target_form_element + ']')[0]) {
+ label.id = label.id || dom.uniqueId();
+ }
+
+ h += '<a role="button" aria-labelledby="' + id + '_label" id="' + id + '_link" href="javascript:;" onclick="tinyMCEPopup.pickColor(event,\'' + target_form_element +'\');" onmousedown="return false;" class="pickcolor">';
+ h += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '">&nbsp;<span id="' + id + '_label" class="mceVoiceLabel mceIconOnly" style="display:none;">' + tinyMCEPopup.getLang('browse') + '</span></span></a>';
return h;
}
@@ -67,6 +71,9 @@ function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {
if (!form_obj || !form_obj.elements[field_name])
return;
+ if (!value)
+ value = "";
+
var sel = form_obj.elements[field_name];
var found = false;
@@ -171,7 +178,7 @@ function convertHexToRGB(col) {
}
function trimSize(size) {
- return size.replace(/([0-9\.]+)px|(%|in|cm|mm|em|ex|pt|pc)/, '$1$2');
+ return size.replace(/([0-9\.]+)(px|%|in|cm|mm|em|ex|pt|pc)/i, '$1$2');
}
function getCSSSize(size) {
@@ -183,6 +190,9 @@ function getCSSSize(size) {
// Add px
if (/^[0-9]+$/.test(size))
size += 'px';
+ // Sanity check, IE doesn't like broken values
+ else if (!(/^[0-9\.]+(px|%|in|cm|mm|em|ex|pt|pc)$/i.test(size)))
+ return "";
return size;
}
diff --git a/library/tinymce/jscripts/tiny_mce/utils/mctabs.js b/library/tinymce/jscripts/tiny_mce/utils/mctabs.js
index 825d4c143..458ec86da 100755..100644
--- a/library/tinymce/jscripts/tiny_mce/utils/mctabs.js
+++ b/library/tinymce/jscripts/tiny_mce/utils/mctabs.js
@@ -10,6 +10,7 @@
function MCTabs() {
this.settings = [];
+ this.onChange = tinyMCEPopup.editor.windowManager.createInstance('tinymce.util.Dispatcher');
};
MCTabs.prototype.init = function(settings) {
@@ -28,26 +29,62 @@ MCTabs.prototype.getParam = function(name, default_value) {
return value;
};
-MCTabs.prototype.displayTab = function(tab_id, panel_id) {
- var panelElm, panelContainerElm, tabElm, tabContainerElm, selectionClass, nodes, i;
+MCTabs.prototype.showTab =function(tab){
+ tab.className = 'current';
+ tab.setAttribute("aria-selected", true);
+ tab.setAttribute("aria-expanded", true);
+ tab.tabIndex = 0;
+};
+
+MCTabs.prototype.hideTab =function(tab){
+ var t=this;
+
+ tab.className = '';
+ tab.setAttribute("aria-selected", false);
+ tab.setAttribute("aria-expanded", false);
+ tab.tabIndex = -1;
+};
+
+MCTabs.prototype.showPanel = function(panel) {
+ panel.className = 'current';
+ panel.setAttribute("aria-hidden", false);
+};
+
+MCTabs.prototype.hidePanel = function(panel) {
+ panel.className = 'panel';
+ panel.setAttribute("aria-hidden", true);
+};
+
+MCTabs.prototype.getPanelForTab = function(tabElm) {
+ return tinyMCEPopup.dom.getAttrib(tabElm, "aria-controls");
+};
+
+MCTabs.prototype.displayTab = function(tab_id, panel_id, avoid_focus) {
+ var panelElm, panelContainerElm, tabElm, tabContainerElm, selectionClass, nodes, i, t = this;
+
+ tabElm = document.getElementById(tab_id);
+
+ if (panel_id === undefined) {
+ panel_id = t.getPanelForTab(tabElm);
+ }
panelElm= document.getElementById(panel_id);
panelContainerElm = panelElm ? panelElm.parentNode : null;
- tabElm = document.getElementById(tab_id);
tabContainerElm = tabElm ? tabElm.parentNode : null;
- selectionClass = this.getParam('selection_class', 'current');
+ selectionClass = t.getParam('selection_class', 'current');
if (tabElm && tabContainerElm) {
nodes = tabContainerElm.childNodes;
// Hide all other tabs
for (i = 0; i < nodes.length; i++) {
- if (nodes[i].nodeName == "LI")
- nodes[i].className = '';
+ if (nodes[i].nodeName == "LI") {
+ t.hideTab(nodes[i]);
+ }
}
// Show selected tab
- tabElm.className = 'current';
+ t.showTab(tabElm);
}
if (panelElm && panelContainerElm) {
@@ -56,11 +93,15 @@ MCTabs.prototype.displayTab = function(tab_id, panel_id) {
// Hide all other panels
for (i = 0; i < nodes.length; i++) {
if (nodes[i].nodeName == "DIV")
- nodes[i].className = 'panel';
+ t.hidePanel(nodes[i]);
+ }
+
+ if (!avoid_focus) {
+ tabElm.focus();
}
// Show selected panel
- panelElm.className = 'current';
+ t.showPanel(panelElm);
}
};
@@ -73,5 +114,49 @@ MCTabs.prototype.getAnchor = function() {
return "";
};
-// Global instance
+
+//Global instance
var mcTabs = new MCTabs();
+
+tinyMCEPopup.onInit.add(function() {
+ var tinymce = tinyMCEPopup.getWin().tinymce, dom = tinyMCEPopup.dom, each = tinymce.each;
+
+ each(dom.select('div.tabs'), function(tabContainerElm) {
+ var keyNav;
+
+ dom.setAttrib(tabContainerElm, "role", "tablist");
+
+ var items = tinyMCEPopup.dom.select('li', tabContainerElm);
+ var action = function(id) {
+ mcTabs.displayTab(id, mcTabs.getPanelForTab(id));
+ mcTabs.onChange.dispatch(id);
+ };
+
+ each(items, function(item) {
+ dom.setAttrib(item, 'role', 'tab');
+ dom.bind(item, 'click', function(evt) {
+ action(item.id);
+ });
+ });
+
+ dom.bind(dom.getRoot(), 'keydown', function(evt) {
+ if (evt.keyCode === 9 && evt.ctrlKey && !evt.altKey) { // Tab
+ keyNav.moveFocus(evt.shiftKey ? -1 : 1);
+ tinymce.dom.Event.cancel(evt);
+ }
+ });
+
+ each(dom.select('a', tabContainerElm), function(a) {
+ dom.setAttrib(a, 'tabindex', '-1');
+ });
+
+ keyNav = tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', {
+ root: tabContainerElm,
+ items: items,
+ onAction: action,
+ actOnFocus: true,
+ enableLeftRight: true,
+ enableUpDown: true
+ }, tinyMCEPopup.dom);
+ });
+}); \ No newline at end of file
diff --git a/library/tinymce/jscripts/tiny_mce/utils/validate.js b/library/tinymce/jscripts/tiny_mce/utils/validate.js
index a6fcf9701..27cbfab81 100755..100644
--- a/library/tinymce/jscripts/tiny_mce/utils/validate.js
+++ b/library/tinymce/jscripts/tiny_mce/utils/validate.js
@@ -32,7 +32,7 @@ var Validator = {
},
isSize : function(s) {
- return this.test(s, '^[0-9]+(%|in|cm|mm|em|ex|pt|pc|px)?$');
+ return this.test(s, '^[0-9.]+(%|in|cm|mm|em|ex|pt|pc|px)?$');
},
isId : function(s) {
@@ -96,8 +96,10 @@ var AutoValidator = {
var i, nl, s = this.settings, c = 0;
nl = this.tags(f, 'label');
- for (i=0; i<nl.length; i++)
+ for (i=0; i<nl.length; i++) {
this.removeClass(nl[i], s.invalid_cls);
+ nl[i].setAttribute('aria-invalid', false);
+ }
c += this.validateElms(f, 'input');
c += this.validateElms(f, 'select');
@@ -109,6 +111,33 @@ var AutoValidator = {
invalidate : function(n) {
this.mark(n.form, n);
},
+
+ getErrorMessages : function(f) {
+ var nl, i, s = this.settings, field, msg, values, messages = [], ed = tinyMCEPopup.editor;
+ nl = this.tags(f, "label");
+ for (i=0; i<nl.length; i++) {
+ if (this.hasClass(nl[i], s.invalid_cls)) {
+ field = document.getElementById(nl[i].getAttribute("for"));
+ values = { field: nl[i].textContent };
+ if (this.hasClass(field, s.min_cls, true)) {
+ message = ed.getLang('invalid_data_min');
+ values.min = this.getNum(field, s.min_cls);
+ } else if (this.hasClass(field, s.number_cls)) {
+ message = ed.getLang('invalid_data_number');
+ } else if (this.hasClass(field, s.size_cls)) {
+ message = ed.getLang('invalid_data_size');
+ } else {
+ message = ed.getLang('invalid_data');
+ }
+
+ message = message.replace(/{\#([^}]+)\}/g, function(a, b) {
+ return values[b] || '{#' + b + '}';
+ });
+ messages.push(message);
+ }
+ }
+ return messages;
+ },
reset : function(e) {
var t = ['label', 'input', 'select', 'textarea'];
@@ -119,8 +148,10 @@ var AutoValidator = {
for (i=0; i<t.length; i++) {
nl = this.tags(e.form ? e.form : e, t[i]);
- for (j=0; j<nl.length; j++)
+ for (j=0; j<nl.length; j++) {
this.removeClass(nl[j], s.invalid_cls);
+ nl[j].setAttribute('aria-invalid', false);
+ }
}
},
@@ -201,6 +232,7 @@ var AutoValidator = {
var s = this.settings;
this.addClass(n, s.invalid_cls);
+ n.setAttribute('aria-invalid', 'true');
this.markLabels(f, n, s.invalid_cls);
return false;