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:
Dave Ward
2012-05-28 11:33:15 +00:00
parent 31850deb6e
commit 278928ae1d
4 changed files with 206 additions and 4 deletions

View File

@@ -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,

View 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)})();

View 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: &lt;attribute_name>=&lt;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);
})();