mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged V4.0-BUG-FIX to HEAD
37067: ALF-13294 CIFS: When versionable aspect is active, using the Microsoft Word for Mac 2008 option "always create a backup copy" leads to document versions loss 37073: ALF-14319 Add a unit test for using the real remote credentials shared container (most use a test one to avoid issues/clashing), and tweak the qname to match other similar ones 37074: Merged V3.4-BUG-FIX to V4.0-BUG_FIX 36881: Merged DEV to V3.4-BUG-FIX 36759: Fix to Checkin failing to distinguish between 'null' and 'unset' properties - Some minor ammendments to unit test as well 36898: Merge HEAD to V3.4-BUG-FIX: 33668: ALF-12541 / ALF-14254: AMP files need to be able to be pinned to specific "edition(s)" of Alfresco. It is now possible to specify a module.editions property (eg. community) which is checked by the MMT. Also, the version is checked on install. Also, started refactoring some of the code for better reuse. 33793: ALF-12541 / ALF-14254: Better fix for ALF-12541 - AMP files need to be able to be pinned to specific "edition(s)" of Alfresco Share doesn't have a version.properties file so I need to cater for that scenario. I didn't want to create the LogOutput interface but its a stop-gap until the MMT gets re-worked. 33695: ALF-12531 / ALF-14255: MMT needs to properly support upgrading of AMP files 33725: ALF-12532 / ALF-14256: MMT should fail with an error if the target war file doesn't exist 33735: ALF-12533 / ALF-14257: When run with -directory, MMT should only backup the alfresco.war file once 33781: ALF-12540 / ALF-14258: AMP - file-mapping.properties: white space at end of line is significant 33880: ALF-12777 / ALF-14259: MMT should not install AMPs which override pre-existing files in the war file, unless -force is provided. The MMT is moving toward more of a validation phase (checks things, calculate changes) then an execution phase (makes the changes). 33707: ALF-12541 / ALF-14254: Fix for failing unit tests 37030: ALF-12511 Allow debugging of the authentication chain at a high level - enable with log4j.loggerorg.alfresco.repo.security.authentication.AbstractChainingAuthenticationService=debug 37066: Merged DEV to V3.4-BUG-FIX (3.4.10) 37063: ALF-11956: WCM accessibility New Tab focus plugin is added for TinyMCE: - plugin covers the RTE changes special for 'XForms'; - configuration for custom appearance has been set in 'web-client-config-wcm.xml' 37069: ALF-13379: READ_ONLY_LOCK prevents access via deprecated CMIS API - Fix by Alex Bykov 37075: Fix for ALF-14267 SOLR index check - First transaction time used instead of first ACL time - indexCheck, checkInitialState 37076: Merged V3.4-BUG-FIX to V4.0-BUG-FIX (RECORD ONLY) 36942: ALF-12081: Cancel Editing button should only be shown for documents that are checked out for offline editing. 36957: ALF-12081: Reverse-merging r36942 pending UI team review git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@37079 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -1102,8 +1102,7 @@ alfresco.xforms.RichTextEditor = alfresco.xforms.Widget.extend({
|
||||
{
|
||||
var result = new Element("a");
|
||||
result.src = "#";
|
||||
result.style.width = "1px";
|
||||
result.style.height = "1px";
|
||||
result.addClass("xformsAccessibilityInvisibleText");
|
||||
result.style.border.width = 0;
|
||||
result.style.padding = 0;
|
||||
result.style.margin = 0;
|
||||
@@ -5628,7 +5627,11 @@ alfresco.constants.TINY_MCE_DEFAULT_SETTINGS =
|
||||
{
|
||||
theme: "advanced",
|
||||
mode: "exact",
|
||||
plugins: alfresco.constants.TINY_MCE_DEFAULT_PLUGINS,
|
||||
plugins: ((alfresco.constants.TINY_MCE_DEFAULT_PLUGINS && (alfresco.constants.TINY_MCE_DEFAULT_PLUGINS.length > 0)) ? (alfresco.constants.TINY_MCE_DEFAULT_PLUGINS + ",xformstabfocus") : ("xformstabfocus")), // ALF-11956: Each RTE instance MUST BE configured with 'xformstabfocus' plugin to handle Shift + Tab keys
|
||||
form_scope_id: "alfresco-xforms-ui", // ALF-11956: Id of a root container for all widgets. Scope of elements search
|
||||
editor_condition: 'accesskey="z"', // ALF-11956: CSS class of element which handles events for RTE
|
||||
forward_element_classes: "xformsAccessibilityInvisibleText", // ALF-11956
|
||||
backward_element_classes: "mceButton mceButtonEnabled", // ALF-11956
|
||||
language: alfresco.constants.LANGUAGE,
|
||||
width: -1,
|
||||
height: -1,
|
||||
|
1
source/web/scripts/tiny_mce/plugins/xformstabfocus/editor_plugin.js
vendored
Normal file
1
source/web/scripts/tiny_mce/plugins/xformstabfocus/editor_plugin.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
alfresco.xforms.constants.XFORMS_CSS_SELECT_QUERY="input:enabled,area:tabindex,button:tabindex,object:tabindex,select:tabindex,textarea:tabindex";alfresco.xforms.constants.XFORMS_FOCUSABLE_ELEMENTS=["INPUT","AREA","BUTTON","OBJECT","SELECT","TEXTAREA"];(function(){var c=tinymce.DOM,a=tinymce.dom.Event,d=tinymce.each,b=tinymce.explode;tinymce.create("tinymce.plugins.XFormsTabFocusPlugin",{init:function(f,g){function e(i,k){var j=(k.which)?(k.wich):(k.keyCode);if(9===j){return a.cancel(k)}}function h(i,m){function n(x){var v=-1;var t=alfresco.xforms.constants.XFORMS_CSS_SELECT_QUERY;if((null!=x.editorCondition)&&(x.editorCondition.length>0)){t+=",*["+x.editorCondition+"]"}var r=((null!=x.forwardClasses)&&(x.forwardClasses.length>0))?(b(x.forwardClasses," ")):(null);var w=((null!=x.backwardClasses)&&(x.backwardClasses.length>0))?(b(x.backwardClasses," ")):(null);function u(y){d(y,function(z){t+=',a[class~="'+z+'"]';return true})}if(r){u(r)}if(w){u(w)}var o=((null!=x.formScopeId)&&(x.formScopeId.length>0))?(c.select(t,document.getElementById(x.formScopeId))):(c.select(t));if(o){var s=c.select("*["+x.editorCondition+"]");d(o,function(z,y){if(s.toString()==z.toString()){v=y;return false}return true});function p(A,z){if(null==z){return false}for(var y=0;y<A.length;y++){if(!c.hasClass(z,A[y])){return false}}return true}for(var q=(v+x.direction);(x.direction>0)?(q<o.length):(q>=0);q+=x.direction){if(!o[q].hidden&&("none"!=o[q].style.display)&&(o[q].tabIndex>=0)){if((("A"==o[q].tagName)&&p((x.direction>0)?(r):(w),o[q]))||(-1!=alfresco.xforms.constants.XFORMS_FOCUSABLE_ELEMENTS.indexOf(o[q].tagName))){return o[q]}}}}return null}var l=(m.which)?(m.which):(m.keyCode);if(9===l){var j={direction:(m.shiftKey)?(-1):(1),formScopeId:i.getParam("form_scope_id"),editorCondition:i.getParam("editor_condition"),forwardClasses:i.getParam("forward_element_classes"),backwardClasses:i.getParam("backward_element_classes")};var k=n(j);if(k){if(i=tinymce.EditorManager.get(k.id||k.name)){i.focus()}else{window.setTimeout(function(){window.focus();k.focus()},10)}return a.cancel(m)}}return true}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}},getInfo:function(){var e={longname:"XFormsTabFocus",author:"Dmitry Velichkevich",infourl:"http://alfresco.com/",version:tinymce.majorVersion+"."+tinymce.minorVersion};return e}});tinymce.PluginManager.add("xformstabfocus",tinymce.plugins.XFormsTabFocusPlugin)})();
|
198
source/web/scripts/tiny_mce/plugins/xformstabfocus/editor_plugin_src.js
vendored
Normal file
198
source/web/scripts/tiny_mce/plugins/xformstabfocus/editor_plugin_src.js
vendored
Normal file
@@ -0,0 +1,198 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2012 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
alfresco.xforms.constants.XFORMS_CSS_SELECT_QUERY = "input:enabled,area:tabindex,button:tabindex,object:tabindex,select:tabindex,textarea:tabindex";
|
||||
|
||||
alfresco.xforms.constants.XFORMS_FOCUSABLE_ELEMENTS = ["INPUT", "AREA", "BUTTON", "OBJECT", "SELECT", "TEXTAREA"];
|
||||
|
||||
/**
|
||||
* This plugin introduces a possibility of navigation into and from TinyMCE RTE.<br />
|
||||
* <br />
|
||||
* Supported options:<br />
|
||||
* - backward_element_classes - break-separated CSS class names of element which should be navigated on Shift + Tab;<br />
|
||||
* - forward_element_classes - break-separated CSS class names of element which should be navigated on Tab;<br />
|
||||
* - editor_condition - statement of the next form: <attribute_name>=<value> which allows to identify position between toolbars and editor areas.
|
||||
* String values MUST BE wrapped into quotes;<br />
|
||||
* - form_scope_id - id of an element which contains all elements that should participate in tab navigating
|
||||
*
|
||||
* @author Dmitry Velichkevich
|
||||
*/
|
||||
(function()
|
||||
{
|
||||
var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode;
|
||||
|
||||
tinymce.create('tinymce.plugins.XFormsTabFocusPlugin',
|
||||
{
|
||||
init: function (ed, url)
|
||||
{
|
||||
function tabCancel (ed, e)
|
||||
{
|
||||
var code = (e.which) ? (e.wich) : (e.keyCode);
|
||||
if (9 === code)
|
||||
{
|
||||
return Event.cancel(e);
|
||||
}
|
||||
};
|
||||
|
||||
function tabHandler (ed, e)
|
||||
{
|
||||
function find (options)
|
||||
{
|
||||
var edIndex = -1;
|
||||
|
||||
var query = alfresco.xforms.constants.XFORMS_CSS_SELECT_QUERY;
|
||||
if ((null != options.editorCondition) && (options.editorCondition.length > 0))
|
||||
{
|
||||
query += ",*[" + options.editorCondition + "]";
|
||||
}
|
||||
var forward = ((null != options.forwardClasses) && (options.forwardClasses.length > 0)) ? (explode(options.forwardClasses, " ")) : (null);
|
||||
var backward = ((null != options.backwardClasses) && (options.backwardClasses.length > 0)) ? (explode(options.backwardClasses, " ")) : (null);
|
||||
|
||||
function extendQuery(elements)
|
||||
{
|
||||
each(elements, function(element)
|
||||
{
|
||||
query += ',a[class~="' + element + '"]';
|
||||
return true;
|
||||
});
|
||||
};
|
||||
|
||||
if (forward)
|
||||
{
|
||||
extendQuery(forward);
|
||||
}
|
||||
if (backward)
|
||||
{
|
||||
extendQuery(backward);
|
||||
}
|
||||
|
||||
var el = ((null != options.formScopeId) && (options.formScopeId.length > 0)) ? (DOM.select(query, document.getElementById(options.formScopeId))) : (DOM.select(query));
|
||||
|
||||
if (el)
|
||||
{
|
||||
var ed = DOM.select('*[' + options.editorCondition + ']');
|
||||
each(el, function(element, index)
|
||||
{
|
||||
if (ed.toString() == element.toString())
|
||||
{
|
||||
edIndex = index;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
function containsClasses(classes, element)
|
||||
{
|
||||
if (null == element)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
for (var i = 0; i < classes.length; i++)
|
||||
{
|
||||
if (!DOM.hasClass(element, classes[i]))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
for (var i = (edIndex + options.direction); (options.direction > 0) ? (i < el.length) : (i >= 0); i += options.direction)
|
||||
{
|
||||
if (!el[i].hidden && ("none" != el[i].style.display) && (el[i].tabIndex >= 0))
|
||||
{
|
||||
if ((("A" == el[i].tagName) && containsClasses((options.direction > 0) ? (forward) : (backward), el[i])) || (-1 != alfresco.xforms.constants.XFORMS_FOCUSABLE_ELEMENTS.indexOf(el[i].tagName)))
|
||||
{
|
||||
return el[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
var code = (e.which) ? (e.which) : (e.keyCode);
|
||||
|
||||
if (9 === code)
|
||||
{
|
||||
var options =
|
||||
{
|
||||
"direction": (e.shiftKey) ? (-1) : (1),
|
||||
"formScopeId": ed.getParam("form_scope_id"),
|
||||
"editorCondition": ed.getParam("editor_condition"),
|
||||
"forwardClasses": ed.getParam("forward_element_classes"),
|
||||
"backwardClasses": ed.getParam("backward_element_classes")
|
||||
};
|
||||
|
||||
var el = find(options);
|
||||
|
||||
if (el)
|
||||
{
|
||||
if (ed = tinymce.EditorManager.get(el.id || el.name))
|
||||
{
|
||||
ed.focus();
|
||||
}
|
||||
else
|
||||
{
|
||||
window.setTimeout(function ()
|
||||
{
|
||||
window.focus();
|
||||
el.focus();
|
||||
}, 10);
|
||||
}
|
||||
|
||||
return Event.cancel(e);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
ed.onKeyUp.add(tabCancel);
|
||||
|
||||
if (tinymce.isGecko)
|
||||
{
|
||||
ed.onKeyPress.add(tabHandler);
|
||||
ed.onKeyDown.add(tabCancel);
|
||||
}
|
||||
else
|
||||
{
|
||||
ed.onKeyDown.add(tabHandler);
|
||||
}
|
||||
},
|
||||
|
||||
getInfo: function ()
|
||||
{
|
||||
var result =
|
||||
{
|
||||
"longname": "XFormsTabFocus",
|
||||
"author": "Dmitry Velichkevich",
|
||||
"infourl": "http://alfresco.com/",
|
||||
"version": tinymce.majorVersion + "." + tinymce.minorVersion
|
||||
};
|
||||
return result;
|
||||
}
|
||||
});
|
||||
|
||||
tinymce.PluginManager.add("xformstabfocus", tinymce.plugins.XFormsTabFocusPlugin);
|
||||
})();
|
Reference in New Issue
Block a user