define( [
"jquery",
"./helper",
"ui/widgets/datepicker",
"ui/i18n/datepicker-fr",
"ui/i18n/datepicker-he",
"ui/i18n/datepicker-zh-CN",
"ui/ie"
], function( $, testHelper ) {
module( "datepicker: options" );
test( "setDefaults", function() {
expect( 3 );
testHelper.init( "#inp" );
equal( $.datepicker._defaults.showOn, "focus", "Initial showOn" );
$.datepicker.setDefaults( { showOn: "button" } );
equal( $.datepicker._defaults.showOn, "button", "Change default showOn" );
$.datepicker.setDefaults( { showOn: "focus" } );
equal( $.datepicker._defaults.showOn, "focus", "Restore showOn" );
} );
test( "option", function() {
expect( 17 );
var inp = testHelper.init( "#inp" ),
inst = $.data( inp[ 0 ], testHelper.PROP_NAME );
// Set option
equal( inst.settings.showOn, null, "Initial setting showOn" );
equal( $.datepicker._get( inst, "showOn" ), "focus", "Initial instance showOn" );
equal( $.datepicker._defaults.showOn, "focus", "Initial default showOn" );
inp.datepicker( "option", "showOn", "button" );
equal( inst.settings.showOn, "button", "Change setting showOn" );
equal( $.datepicker._get( inst, "showOn" ), "button", "Change instance showOn" );
equal( $.datepicker._defaults.showOn, "focus", "Retain default showOn" );
inp.datepicker( "option", { showOn: "both" } );
equal( inst.settings.showOn, "both", "Change setting showOn" );
equal( $.datepicker._get( inst, "showOn" ), "both", "Change instance showOn" );
equal( $.datepicker._defaults.showOn, "focus", "Retain default showOn" );
inp.datepicker( "option", "showOn", undefined );
equal( inst.settings.showOn, null, "Clear setting showOn" );
equal( $.datepicker._get( inst, "showOn" ), "focus", "Restore instance showOn" );
equal( $.datepicker._defaults.showOn, "focus", "Retain default showOn" );
// Get option
inp = testHelper.init( "#inp" );
equal( inp.datepicker( "option", "showOn" ), "focus", "Initial setting showOn" );
inp.datepicker( "option", "showOn", "button" );
equal( inp.datepicker( "option", "showOn" ), "button", "Change instance showOn" );
inp.datepicker( "option", "showOn", undefined );
equal( inp.datepicker( "option", "showOn" ), "focus", "Reset instance showOn" );
deepEqual( inp.datepicker( "option", "all" ), { showAnim: "" }, "Get instance settings" );
deepEqual( inp.datepicker( "option", "defaults" ), $.datepicker._defaults,
"Get default settings" );
} );
test( "disabled", function() {
expect( 8 );
var inp = testHelper.init( "#inp" );
ok( !inp.datepicker( "isDisabled" ), "Initially marked as enabled" );
ok( !inp[ 0 ].disabled, "Field initially enabled" );
inp.datepicker( "option", "disabled", true );
ok( inp.datepicker( "isDisabled" ), "Marked as disabled" );
ok( inp[ 0 ].disabled, "Field now disabled" );
inp.datepicker( "option", "disabled", false );
ok( !inp.datepicker( "isDisabled" ), "Marked as enabled" );
ok( !inp[ 0 ].disabled, "Field now enabled" );
inp.datepicker( "destroy" );
inp = testHelper.init( "#inp", { disabled: true } );
ok( inp.datepicker( "isDisabled" ), "Initially marked as disabled" );
ok( inp[ 0 ].disabled, "Field initially disabled" );
} );
test( "change", function() {
expect( 12 );
var inp = testHelper.init( "#inp" ),
inst = $.data( inp[ 0 ], testHelper.PROP_NAME );
equal( inst.settings.showOn, null, "Initial setting showOn" );
equal( $.datepicker._get( inst, "showOn" ), "focus", "Initial instance showOn" );
equal( $.datepicker._defaults.showOn, "focus", "Initial default showOn" );
inp.datepicker( "change", "showOn", "button" );
equal( inst.settings.showOn, "button", "Change setting showOn" );
equal( $.datepicker._get( inst, "showOn" ), "button", "Change instance showOn" );
equal( $.datepicker._defaults.showOn, "focus", "Retain default showOn" );
inp.datepicker( "change", { showOn: "both" } );
equal( inst.settings.showOn, "both", "Change setting showOn" );
equal( $.datepicker._get( inst, "showOn" ), "both", "Change instance showOn" );
equal( $.datepicker._defaults.showOn, "focus", "Retain default showOn" );
inp.datepicker( "change", "showOn", undefined );
equal( inst.settings.showOn, null, "Clear setting showOn" );
equal( $.datepicker._get( inst, "showOn" ), "focus", "Restore instance showOn" );
equal( $.datepicker._defaults.showOn, "focus", "Retain default showOn" );
} );
( function() {
var url = window.location.search;
url = decodeURIComponent( url.slice( url.indexOf( "swarmURL=" ) + 9 ) );
// TODO: This test occassionally fails in IE in TestSwarm
if ( $.ui.ie && url && url.indexOf( "http" ) === 0 ) {
return;
}
asyncTest( "invocation", function() {
var button, image,
isOldIE = $.ui.ie && ( !document.documentMode || document.documentMode < 9 ),
body = $( "body" );
expect( isOldIE ? 25 : 29 );
function step0() {
var inp = testHelper.initNewInput(),
dp = $( "#ui-datepicker-div" );
button = inp.siblings( "button" );
ok( button.length === 0, "Focus - button absent" );
image = inp.siblings( "img" );
ok( image.length === 0, "Focus - image absent" );
testHelper.onFocus( inp, function() {
ok( dp.is( ":visible" ), "Focus - rendered on focus" );
inp.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } );
ok( !dp.is( ":visible" ), "Focus - hidden on exit" );
step1();
} );
}
function step1() {
var inp = testHelper.initNewInput(),
dp = $( "#ui-datepicker-div" );
testHelper.onFocus( inp, function() {
ok( dp.is( ":visible" ), "Focus - rendered on focus" );
body.simulate( "mousedown", {} );
ok( !dp.is( ":visible" ), "Focus - hidden on external click" );
inp.datepicker( "hide" ).datepicker( "destroy" );
step2();
} );
}
function step2() {
var inp = testHelper.initNewInput( {
showOn: "button",
buttonText: "Popup"
} ),
dp = $( "#ui-datepicker-div" );
ok( !dp.is( ":visible" ), "Button - initially hidden" );
button = inp.siblings( "button" );
image = inp.siblings( "img" );
ok( button.length === 1, "Button - button present" );
ok( image.length === 0, "Button - image absent" );
equal( button.text(), "Popup", "Button - button text" );
testHelper.onFocus( inp, function() {
ok( !dp.is( ":visible" ), "Button - not rendered on focus" );
button.trigger( "click" );
ok( dp.is( ":visible" ), "Button - rendered on button click" );
button.trigger( "click" );
ok( !dp.is( ":visible" ), "Button - hidden on second button click" );
inp.datepicker( "hide" ).datepicker( "destroy" );
step3();
} );
}
function step3() {
var inp = testHelper.initNewInput( {
showOn: "button",
buttonImageOnly: true,
buttonImage: "images/calendar.gif",
buttonText: "Cal"
} ),
dp = $( "#ui-datepicker-div" );
ok( !dp.is( ":visible" ), "Image button - initially hidden" );
button = inp.siblings( "button" );
ok( button.length === 0, "Image button - button absent" );
image = inp.siblings( "img" );
ok( image.length === 1, "Image button - image present" );
ok( /images\/calendar\.gif$/.test( image.attr( "src" ) ), "Image button - image source" );
equal( image.attr( "title" ), "Cal", "Image button - image text" );
testHelper.onFocus( inp, function() {
ok( !dp.is( ":visible" ), "Image button - not rendered on focus" );
image.trigger( "click" );
ok( dp.is( ":visible" ), "Image button - rendered on image click" );
image.trigger( "click" );
ok( !dp.is( ":visible" ), "Image button - hidden on second image click" );
inp.datepicker( "hide" ).datepicker( "destroy" );
step4();
} );
}
function step4() {
var inp = testHelper.initNewInput( {
showOn: "both",
buttonImage: "images/calendar.gif"
} ),
dp = $( "#ui-datepicker-div" );
ok( !dp.is( ":visible" ), "Both - initially hidden" );
button = inp.siblings( "button" );
ok( button.length === 1, "Both - button present" );
image = inp.siblings( "img" );
ok( image.length === 0, "Both - image absent" );
image = button.children( "img" );
ok( image.length === 1, "Both - button image present" );
// TODO: This test occasionally fails to focus in IE8 in BrowserStack
if ( !isOldIE ) {
testHelper.onFocus( inp, function() {
ok( dp.is( ":visible" ), "Both - rendered on focus" );
body.simulate( "mousedown", {} );
ok( !dp.is( ":visible" ), "Both - hidden on external click" );
button.trigger( "click" );
ok( dp.is( ":visible" ), "Both - rendered on button click" );
button.trigger( "click" );
ok( !dp.is( ":visible" ), "Both - hidden on second button click" );
inp.datepicker( "hide" ).datepicker( "destroy" );
start();
} );
} else {
start();
}
}
step0();
} );
} )();
test( "otherMonths", function() {
expect( 8 );
var inp = testHelper.init( "#inp" ),
pop = $( "#ui-datepicker-div" );
inp.val( "06/01/2009" ).datepicker( "show" );
equal( pop.find( "tbody" ).text(),
// support: IE <9, jQuery <1.8
// In IE7/8 with jQuery <1.8, encoded spaces behave in strange ways
$( "\u00a0123456789101112131415161718192021222324252627282930\u00a0\u00a0\u00a0\u00a0 " ).text(),
"Other months - none" );
ok( pop.find( "td:last *" ).length === 0, "Other months - no content" );
inp.datepicker( "hide" ).datepicker( "option", "showOtherMonths", true ).datepicker( "show" );
equal( pop.find( "tbody" ).text(), "311234567891011121314151617181920212223242526272829301234",
"Other months - show" );
ok( pop.find( "td:last span" ).length === 1, "Other months - span content" );
inp.datepicker( "hide" ).datepicker( "option", "selectOtherMonths", true ).datepicker( "show" );
equal( pop.find( "tbody" ).text(), "311234567891011121314151617181920212223242526272829301234",
"Other months - select" );
ok( pop.find( "td:last a" ).length === 1, "Other months - link content" );
inp.datepicker( "hide" ).datepicker( "option", "showOtherMonths", false ).datepicker( "show" );
equal( pop.find( "tbody" ).text(),
// support: IE <9, jQuery <1.8
// In IE7/8 with jQuery <1.8, encoded spaces behave in strange ways
$( "\u00a0123456789101112131415161718192021222324252627282930\u00a0\u00a0\u00a0\u00a0 " ).text(),
"Other months - none" );
ok( pop.find( "td:last *" ).length === 0, "Other months - no content" );
} );
test( "defaultDate", function() {
expect( 16 );
var inp = testHelper.init( "#inp" ),
date = new Date();
inp.val( "" ).datepicker( "show" ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
testHelper.equalsDate( inp.datepicker( "getDate" ), date, "Default date null" );
// Numeric values
inp.datepicker( "option", { defaultDate: -2 } ).
datepicker( "hide" ).val( "" ).datepicker( "show" ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
date.setDate( date.getDate() - 2 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date, "Default date -2" );
date = new Date();
inp.datepicker( "option", { defaultDate: 3 } ).
datepicker( "hide" ).val( "" ).datepicker( "show" ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
date.setDate( date.getDate() + 3 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date, "Default date 3" );
date = new Date();
inp.datepicker( "option", { defaultDate: 1 / "a" } ).
datepicker( "hide" ).val( "" ).datepicker( "show" ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
testHelper.equalsDate( inp.datepicker( "getDate" ), date, "Default date NaN" );
// String offset values
inp.datepicker( "option", { defaultDate: "-1d" } ).
datepicker( "hide" ).val( "" ).datepicker( "show" ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
date.setDate( date.getDate() - 1 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date, "Default date -1d" );
inp.datepicker( "option", { defaultDate: "+3D" } ).
datepicker( "hide" ).val( "" ).datepicker( "show" ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
date.setDate( date.getDate() + 4 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date, "Default date +3D" );
inp.datepicker( "option", { defaultDate: " -2 w " } ).
datepicker( "hide" ).val( "" ).datepicker( "show" ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
date = new Date();
date.setDate( date.getDate() - 14 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date, "Default date -2 w" );
inp.datepicker( "option", { defaultDate: "+1 W" } ).
datepicker( "hide" ).val( "" ).datepicker( "show" ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
date.setDate( date.getDate() + 21 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date, "Default date +1 W" );
inp.datepicker( "option", { defaultDate: " -1 m " } ).
datepicker( "hide" ).val( "" ).datepicker( "show" ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
date = testHelper.addMonths( new Date(), -1 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date, "Default date -1 m" );
inp.datepicker( "option", { defaultDate: "+2M" } ).
datepicker( "hide" ).val( "" ).datepicker( "show" ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
date = testHelper.addMonths( new Date(), 2 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date, "Default date +2M" );
inp.datepicker( "option", { defaultDate: "-2y" } ).
datepicker( "hide" ).val( "" ).datepicker( "show" ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
date = new Date();
date.setFullYear( date.getFullYear() - 2 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date, "Default date -2y" );
inp.datepicker( "option", { defaultDate: "+1 Y " } ).
datepicker( "hide" ).val( "" ).datepicker( "show" ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
date.setFullYear( date.getFullYear() + 3 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date, "Default date +1 Y" );
inp.datepicker( "option", { defaultDate: "+1M +10d" } ).
datepicker( "hide" ).val( "" ).datepicker( "show" ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
date = testHelper.addMonths( new Date(), 1 );
date.setDate( date.getDate() + 10 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date, "Default date +1M +10d" );
// String date values
inp.datepicker( "option", { defaultDate: "07/04/2007" } ).
datepicker( "hide" ).val( "" ).datepicker( "show" ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
date = new Date( 2007, 7 - 1, 4 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date, "Default date 07/04/2007" );
inp.datepicker( "option", { dateFormat: "yy-mm-dd", defaultDate: "2007-04-02" } ).
datepicker( "hide" ).val( "" ).datepicker( "show" ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
date = new Date( 2007, 4 - 1, 2 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date, "Default date 2007-04-02" );
// Date value
date = new Date( 2007, 1 - 1, 26 );
inp.datepicker( "option", { dateFormat: "mm/dd/yy", defaultDate: date } ).
datepicker( "hide" ).val( "" ).datepicker( "show" ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
testHelper.equalsDate( inp.datepicker( "getDate" ), date, "Default date 01/26/2007" );
} );
test( "miscellaneous", function() {
expect( 19 );
var curYear, longNames, shortNames, date,
dp = $( "#ui-datepicker-div" ),
inp = testHelper.init( "#inp" );
// Year range
function genRange( start, offset ) {
var i = start,
range = "";
for ( ; i < start + offset; i++ ) {
range += i;
}
return range;
}
curYear = new Date().getFullYear();
inp.val( "02/04/2008" ).datepicker( "show" );
equal( dp.find( ".ui-datepicker-year" ).text(), "2008", "Year range - read-only default" );
inp.datepicker( "hide" ).datepicker( "option", { changeYear: true } ).datepicker( "show" );
equal( dp.find( ".ui-datepicker-year" ).text(), genRange( 2008 - 10, 21 ), "Year range - changeable default" );
inp.datepicker( "hide" ).datepicker( "option", { yearRange: "c-6:c+2", changeYear: true } ).datepicker( "show" );
equal( dp.find( ".ui-datepicker-year" ).text(), genRange( 2008 - 6, 9 ), "Year range - c-6:c+2" );
inp.datepicker( "hide" ).datepicker( "option", { yearRange: "2000:2010", changeYear: true } ).datepicker( "show" );
equal( dp.find( ".ui-datepicker-year" ).text(), genRange( 2000, 11 ), "Year range - 2000:2010" );
inp.datepicker( "hide" ).datepicker( "option", { yearRange: "-5:+3", changeYear: true } ).datepicker( "show" );
equal( dp.find( ".ui-datepicker-year" ).text(), genRange( curYear - 5, 9 ), "Year range - -5:+3" );
inp.datepicker( "hide" ).datepicker( "option", { yearRange: "2000:-5", changeYear: true } ).datepicker( "show" );
equal( dp.find( ".ui-datepicker-year" ).text(), genRange( 2000, curYear - 2004 ), "Year range - 2000:-5" );
inp.datepicker( "hide" ).datepicker( "option", { yearRange: "", changeYear: true } ).datepicker( "show" );
equal( dp.find( ".ui-datepicker-year" ).text(), genRange( curYear, 1 ), "Year range - -6:+2" );
// Navigation as date format
inp.datepicker( "option", { showButtonPanel: true } );
equal( dp.find( ".ui-datepicker-prev" ).text(), "Prev", "Navigation prev - default" );
equal( dp.find( ".ui-datepicker-current" ).text(), "Today", "Navigation current - default" );
equal( dp.find( ".ui-datepicker-next" ).text(), "Next", "Navigation next - default" );
inp.datepicker( "hide" ).datepicker( "option", { navigationAsDateFormat: true, prevText: "< M", currentText: "MM", nextText: "M >" } ).
val( "02/04/2008" ).datepicker( "show" );
longNames = $.datepicker.regional[ "" ].monthNames;
shortNames = $.datepicker.regional[ "" ].monthNamesShort;
date = new Date();
equal( dp.find( ".ui-datepicker-prev" ).text(), "< " + shortNames[ 0 ], "Navigation prev - as date format" );
equal( dp.find( ".ui-datepicker-current" ).text(),
longNames[ date.getMonth() ], "Navigation current - as date format" );
equal( dp.find( ".ui-datepicker-next" ).text(),
shortNames[ 2 ] + " >", "Navigation next - as date format" );
inp.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } );
equal( dp.find( ".ui-datepicker-prev" ).text(),
"< " + shortNames[ 1 ], "Navigation prev - as date format + pgdn" );
equal( dp.find( ".ui-datepicker-current" ).text(),
longNames[ date.getMonth() ], "Navigation current - as date format + pgdn" );
equal( dp.find( ".ui-datepicker-next" ).text(),
shortNames[ 3 ] + " >", "Navigation next - as date format + pgdn" );
inp.datepicker( "hide" ).datepicker( "option", { gotoCurrent: true } ).
val( "02/04/2008" ).datepicker( "show" );
equal( dp.find( ".ui-datepicker-prev" ).text(),
"< " + shortNames[ 0 ], "Navigation prev - as date format + goto current" );
equal( dp.find( ".ui-datepicker-current" ).text(),
longNames[ 1 ], "Navigation current - as date format + goto current" );
equal( dp.find( ".ui-datepicker-next" ).text(),
shortNames[ 2 ] + " >", "Navigation next - as date format + goto current" );
} );
test( "minMax", function() {
expect( 23 );
var date,
inp = testHelper.init( "#inp" ),
dp = $( "#ui-datepicker-div" ),
lastYear = new Date( 2007, 6 - 1, 4 ),
nextYear = new Date( 2009, 6 - 1, 4 ),
minDate = new Date( 2008, 2 - 1, 29 ),
maxDate = new Date( 2008, 12 - 1, 7 );
inp.val( "06/04/2008" ).datepicker( "show" );
inp.simulate( "keydown", { ctrlKey: true, keyCode: $.ui.keyCode.PAGE_UP } ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
testHelper.equalsDate( inp.datepicker( "getDate" ), lastYear,
"Min/max - null, null - ctrl+pgup" );
inp.val( "06/04/2008" ).datepicker( "show" );
inp.simulate( "keydown", { ctrlKey: true, keyCode: $.ui.keyCode.PAGE_DOWN } ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
testHelper.equalsDate( inp.datepicker( "getDate" ), nextYear,
"Min/max - null, null - ctrl+pgdn" );
inp.datepicker( "option", { minDate: minDate } ).
datepicker( "hide" ).val( "06/04/2008" ).datepicker( "show" );
inp.simulate( "keydown", { ctrlKey: true, keyCode: $.ui.keyCode.PAGE_UP } ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
testHelper.equalsDate( inp.datepicker( "getDate" ), minDate,
"Min/max - 02/29/2008, null - ctrl+pgup" );
inp.val( "06/04/2008" ).datepicker( "show" );
inp.simulate( "keydown", { ctrlKey: true, keyCode: $.ui.keyCode.PAGE_DOWN } ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
testHelper.equalsDate( inp.datepicker( "getDate" ), nextYear,
"Min/max - 02/29/2008, null - ctrl+pgdn" );
inp.datepicker( "option", { maxDate: maxDate } ).
datepicker( "hide" ).val( "06/04/2008" ).datepicker( "show" );
inp.simulate( "keydown", { ctrlKey: true, keyCode: $.ui.keyCode.PAGE_UP } ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
testHelper.equalsDate( inp.datepicker( "getDate" ), minDate,
"Min/max - 02/29/2008, 12/07/2008 - ctrl+pgup" );
inp.val( "06/04/2008" ).datepicker( "show" );
inp.simulate( "keydown", { ctrlKey: true, keyCode: $.ui.keyCode.PAGE_DOWN } ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
testHelper.equalsDate( inp.datepicker( "getDate" ), maxDate,
"Min/max - 02/29/2008, 12/07/2008 - ctrl+pgdn" );
inp.datepicker( "option", { minDate: null } ).
datepicker( "hide" ).val( "06/04/2008" ).datepicker( "show" );
inp.simulate( "keydown", { ctrlKey: true, keyCode: $.ui.keyCode.PAGE_UP } ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
testHelper.equalsDate( inp.datepicker( "getDate" ), lastYear,
"Min/max - null, 12/07/2008 - ctrl+pgup" );
inp.val( "06/04/2008" ).datepicker( "show" );
inp.simulate( "keydown", { ctrlKey: true, keyCode: $.ui.keyCode.PAGE_DOWN } ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
testHelper.equalsDate( inp.datepicker( "getDate" ), maxDate,
"Min/max - null, 12/07/2008 - ctrl+pgdn" );
// Relative dates
date = new Date();
date.setDate( date.getDate() - 7 );
inp.datepicker( "option", { minDate: "-1w", maxDate: "+1 M +10 D " } ).
datepicker( "hide" ).val( "" ).datepicker( "show" );
inp.simulate( "keydown", { ctrlKey: true, keyCode: $.ui.keyCode.PAGE_UP } ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
testHelper.equalsDate( inp.datepicker( "getDate" ), date,
"Min/max - -1w, +1 M +10 D - ctrl+pgup" );
date = testHelper.addMonths( new Date(), 1 );
date.setDate( date.getDate() + 10 );
inp.val( "" ).datepicker( "show" );
inp.simulate( "keydown", { ctrlKey: true, keyCode: $.ui.keyCode.PAGE_DOWN } ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
testHelper.equalsDate( inp.datepicker( "getDate" ), date,
"Min/max - -1w, +1 M +10 D - ctrl+pgdn" );
// With existing date
inp = testHelper.init( "#inp" );
inp.val( "06/04/2008" ).datepicker( "option", { minDate: minDate } );
testHelper.equalsDate( inp.datepicker( "getDate" ), new Date( 2008, 6 - 1, 4 ), "Min/max - setDate > min" );
inp.datepicker( "option", { minDate: null } ).val( "01/04/2008" ).datepicker( "option", { minDate: minDate } );
testHelper.equalsDate( inp.datepicker( "getDate" ), minDate, "Min/max - setDate < min" );
inp.datepicker( "option", { minDate: null } ).val( "06/04/2008" ).datepicker( "option", { maxDate: maxDate } );
testHelper.equalsDate( inp.datepicker( "getDate" ), new Date( 2008, 6 - 1, 4 ), "Min/max - setDate < max" );
inp.datepicker( "option", { maxDate: null } ).val( "01/04/2009" ).datepicker( "option", { maxDate: maxDate } );
testHelper.equalsDate( inp.datepicker( "getDate" ), maxDate, "Min/max - setDate > max" );
inp.datepicker( "option", { maxDate: null } ).val( "01/04/2008" ).datepicker( "option", { minDate: minDate, maxDate: maxDate } );
testHelper.equalsDate( inp.datepicker( "getDate" ), minDate, "Min/max - setDate < min" );
inp.datepicker( "option", { maxDate: null } ).val( "06/04/2008" ).datepicker( "option", { minDate: minDate, maxDate: maxDate } );
testHelper.equalsDate( inp.datepicker( "getDate" ), new Date( 2008, 6 - 1, 4 ), "Min/max - setDate > min, < max" );
inp.datepicker( "option", { maxDate: null } ).val( "01/04/2009" ).datepicker( "option", { minDate: minDate, maxDate: maxDate } );
testHelper.equalsDate( inp.datepicker( "getDate" ), maxDate, "Min/max - setDate > max" );
inp.datepicker( "option", { yearRange: "-0:+1" } ).val( "01/01/" + new Date().getFullYear() );
ok( dp.find( ".ui-datepicker-prev" ).hasClass( "ui-state-disabled" ), "Year Range Test - previous button disabled at 1/1/minYear" );
inp.datepicker( "setDate", "12/30/" + new Date().getFullYear() );
ok( dp.find( ".ui-datepicker-next" ).hasClass( "ui-state-disabled" ), "Year Range Test - next button disabled at 12/30/maxYear" );
inp.datepicker( "option", {
minDate: new Date( 1900, 0, 1 ),
maxDate: "-7Y",
yearRange: "1900:-7"
} ).val( "" );
ok( dp.find( ".ui-datepicker-next" ).hasClass( "ui-state-disabled" ), "Year Range Test - relative - next button disabled" );
ok( !dp.find( ".ui-datepicker-prev" ).hasClass( "ui-state-disabled" ), "Year Range Test - relative - prev button enabled" );
inp.datepicker( "option", {
minDate: new Date( 1900, 0, 1 ),
maxDate: "1/25/2007",
yearRange: "1900:2007"
} ).val( "" );
ok( dp.find( ".ui-datepicker-next" ).hasClass( "ui-state-disabled" ), "Year Range Test - absolute - next button disabled" );
ok( !dp.find( ".ui-datepicker-prev" ).hasClass( "ui-state-disabled" ), "Year Range Test - absolute - prev button enabled" );
} );
test( "setDate", function() {
expect( 24 );
var inl, alt, minDate, maxDate, dateAndTimeToSet, dateAndTimeClone,
inp = testHelper.init( "#inp" ),
date1 = new Date( 2008, 6 - 1, 4 ),
date2 = new Date();
ok( inp.datepicker( "getDate" ) == null, "Set date - default" );
inp.datepicker( "setDate", date1 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date1, "Set date - 2008-06-04" );
date1 = new Date();
date1.setDate( date1.getDate() + 7 );
inp.datepicker( "setDate", +7 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date1, "Set date - +7" );
date2.setFullYear( date2.getFullYear() + 2 );
inp.datepicker( "setDate", "+2y" );
testHelper.equalsDate( inp.datepicker( "getDate" ), date2, "Set date - +2y" );
inp.datepicker( "setDate", date1, date2 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date1, "Set date - two dates" );
inp.datepicker( "setDate" );
ok( inp.datepicker( "getDate" ) == null, "Set date - null" );
// Relative to current date
date1 = new Date();
date1.setDate( date1.getDate() + 7 );
inp.datepicker( "setDate", "c +7" );
testHelper.equalsDate( inp.datepicker( "getDate" ), date1, "Set date - c +7" );
date1.setDate( date1.getDate() + 7 );
inp.datepicker( "setDate", "c+7" );
testHelper.equalsDate( inp.datepicker( "getDate" ), date1, "Set date - c+7" );
date1.setDate( date1.getDate() - 21 );
inp.datepicker( "setDate", "c -3 w" );
testHelper.equalsDate( inp.datepicker( "getDate" ), date1, "Set date - c -3 w" );
// Inline
inl = testHelper.init( "#inl" );
date1 = new Date( 2008, 6 - 1, 4 );
date2 = new Date();
testHelper.equalsDate( inl.datepicker( "getDate" ), date2, "Set date inline - default" );
inl.datepicker( "setDate", date1 );
testHelper.equalsDate( inl.datepicker( "getDate" ), date1, "Set date inline - 2008-06-04" );
date1 = new Date();
date1.setDate( date1.getDate() + 7 );
inl.datepicker( "setDate", +7 );
testHelper.equalsDate( inl.datepicker( "getDate" ), date1, "Set date inline - +7" );
date2.setFullYear( date2.getFullYear() + 2 );
inl.datepicker( "setDate", "+2y" );
testHelper.equalsDate( inl.datepicker( "getDate" ), date2, "Set date inline - +2y" );
inl.datepicker( "setDate", date1, date2 );
testHelper.equalsDate( inl.datepicker( "getDate" ), date1, "Set date inline - two dates" );
inl.datepicker( "setDate" );
ok( inl.datepicker( "getDate" ) == null, "Set date inline - null" );
// Alternate field
alt = $( "#alt" );
inp.datepicker( "option", { altField: "#alt", altFormat: "yy-mm-dd" } );
date1 = new Date( 2008, 6 - 1, 4 );
inp.datepicker( "setDate", date1 );
equal( inp.val(), "06/04/2008", "Set date alternate - 06/04/2008" );
equal( alt.val(), "2008-06-04", "Set date alternate - 2008-06-04" );
// With minimum/maximum
inp = testHelper.init( "#inp" );
date1 = new Date( 2008, 1 - 1, 4 );
date2 = new Date( 2008, 6 - 1, 4 );
minDate = new Date( 2008, 2 - 1, 29 );
maxDate = new Date( 2008, 3 - 1, 28 );
inp.val( "" ).datepicker( "option", { minDate: minDate } ).datepicker( "setDate", date2 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date2, "Set date min/max - setDate > min" );
inp.datepicker( "setDate", date1 );
testHelper.equalsDate( inp.datepicker( "getDate" ), minDate, "Set date min/max - setDate < min" );
inp.val( "" ).datepicker( "option", { maxDate: maxDate, minDate: null } ).datepicker( "setDate", date1 );
testHelper.equalsDate( inp.datepicker( "getDate" ), date1, "Set date min/max - setDate < max" );
inp.datepicker( "setDate", date2 );
testHelper.equalsDate( inp.datepicker( "getDate" ), maxDate, "Set date min/max - setDate > max" );
inp.val( "" ).datepicker( "option", { minDate: minDate } ).datepicker( "setDate", date1 );
testHelper.equalsDate( inp.datepicker( "getDate" ), minDate, "Set date min/max - setDate < min" );
inp.datepicker( "setDate", date2 );
testHelper.equalsDate( inp.datepicker( "getDate" ), maxDate, "Set date min/max - setDate > max" );
dateAndTimeToSet = new Date( 2008, 3 - 1, 28, 1, 11, 0 );
dateAndTimeClone = new Date( 2008, 3 - 1, 28, 1, 11, 0 );
inp.datepicker( "setDate", dateAndTimeToSet );
equal( dateAndTimeToSet.getTime(), dateAndTimeClone.getTime(), "Date object passed should not be changed by setDate" );
} );
test( "altField", function() {
expect( 10 );
var inp = testHelper.init( "#inp" ),
alt = $( "#alt" );
// No alternate field set
alt.val( "" );
inp.val( "06/04/2008" ).datepicker( "show" );
inp.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
equal( inp.val(), "06/04/2008", "Alt field - dp - enter" );
equal( alt.val(), "", "Alt field - alt not set" );
// Alternate field set
alt.val( "" );
inp.datepicker( "option", { altField: "#alt", altFormat: "yy-mm-dd" } ).
val( "06/04/2008" ).datepicker( "show" );
inp.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
equal( inp.val(), "06/04/2008", "Alt field - dp - enter" );
equal( alt.val(), "2008-06-04", "Alt field - alt - enter" );
// Move from initial date
alt.val( "" );
inp.val( "06/04/2008" ).datepicker( "show" );
inp.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ).
simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
equal( inp.val(), "07/04/2008", "Alt field - dp - pgdn" );
equal( alt.val(), "2008-07-04", "Alt field - alt - pgdn" );
// Alternate field set - closed
alt.val( "" );
inp.val( "06/04/2008" ).datepicker( "show" );
inp.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ).
simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } );
equal( inp.val(), "06/04/2008", "Alt field - dp - pgdn/esc" );
equal( alt.val(), "", "Alt field - alt - pgdn/esc" );
// Clear date and alternate
alt.val( "" );
inp.val( "06/04/2008" ).datepicker( "show" );
inp.simulate( "keydown", { ctrlKey: true, keyCode: $.ui.keyCode.END } );
equal( inp.val(), "", "Alt field - dp - ctrl+end" );
equal( alt.val(), "", "Alt field - alt - ctrl+end" );
} );
test( "autoSize", function() {
expect( 15 );
var inp = testHelper.init( "#inp" );
equal( inp.prop( "size" ), 20, "Auto size - default" );
inp.datepicker( "option", "autoSize", true );
equal( inp.prop( "size" ), 10, "Auto size - mm/dd/yy" );
inp.datepicker( "option", "dateFormat", "m/d/yy" );
equal( inp.prop( "size" ), 10, "Auto size - m/d/yy" );
inp.datepicker( "option", "dateFormat", "D M d yy" );
equal( inp.prop( "size" ), 15, "Auto size - D M d yy" );
inp.datepicker( "option", "dateFormat", "DD, MM dd, yy" );
equal( inp.prop( "size" ), 29, "Auto size - DD, MM dd, yy" );
// French
inp.datepicker( "option", $.extend( { autoSize: false }, $.datepicker.regional.fr ) );
equal( inp.prop( "size" ), 29, "Auto size - fr - default" );
inp.datepicker( "option", "autoSize", true );
equal( inp.prop( "size" ), 10, "Auto size - fr - dd/mm/yy" );
inp.datepicker( "option", "dateFormat", "m/d/yy" );
equal( inp.prop( "size" ), 10, "Auto size - fr - m/d/yy" );
inp.datepicker( "option", "dateFormat", "D M d yy" );
equal( inp.prop( "size" ), 18, "Auto size - fr - D M d yy" );
inp.datepicker( "option", "dateFormat", "DD, MM dd, yy" );
equal( inp.prop( "size" ), 28, "Auto size - fr - DD, MM dd, yy" );
// Hebrew
inp.datepicker( "option", $.extend( { autoSize: false }, $.datepicker.regional.he ) );
equal( inp.prop( "size" ), 28, "Auto size - he - default" );
inp.datepicker( "option", "autoSize", true );
equal( inp.prop( "size" ), 10, "Auto size - he - dd/mm/yy" );
inp.datepicker( "option", "dateFormat", "m/d/yy" );
equal( inp.prop( "size" ), 10, "Auto size - he - m/d/yy" );
inp.datepicker( "option", "dateFormat", "D M d yy" );
equal( inp.prop( "size" ), 16, "Auto size - he - D M d yy" );
inp.datepicker( "option", "dateFormat", "DD, MM dd, yy" );
equal( inp.prop( "size" ), 23, "Auto size - he - DD, MM dd, yy" );
} );
test( "daylightSaving", function() {
expect( 25 );
var inp = testHelper.init( "#inp" ),
dp = $( "#ui-datepicker-div" );
ok( true, "Daylight saving - " + new Date() );
// Australia, Sydney - AM change, southern hemisphere
inp.val( "04/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(6) a", dp ).simulate( "click" );
equal( inp.val(), "04/05/2008", "Daylight saving - Australia 04/05/2008" );
inp.val( "04/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(7) a", dp ).simulate( "click" );
equal( inp.val(), "04/06/2008", "Daylight saving - Australia 04/06/2008" );
inp.val( "04/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(8) a", dp ).simulate( "click" );
equal( inp.val(), "04/07/2008", "Daylight saving - Australia 04/07/2008" );
inp.val( "10/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(6) a", dp ).simulate( "click" );
equal( inp.val(), "10/04/2008", "Daylight saving - Australia 10/04/2008" );
inp.val( "10/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(7) a", dp ).simulate( "click" );
equal( inp.val(), "10/05/2008", "Daylight saving - Australia 10/05/2008" );
inp.val( "10/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(8) a", dp ).simulate( "click" );
equal( inp.val(), "10/06/2008", "Daylight saving - Australia 10/06/2008" );
// Brasil, Brasilia - midnight change, southern hemisphere
inp.val( "02/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(20) a", dp ).simulate( "click" );
equal( inp.val(), "02/16/2008", "Daylight saving - Brasil 02/16/2008" );
inp.val( "02/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(21) a", dp ).simulate( "click" );
equal( inp.val(), "02/17/2008", "Daylight saving - Brasil 02/17/2008" );
inp.val( "02/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(22) a", dp ).simulate( "click" );
equal( inp.val(), "02/18/2008", "Daylight saving - Brasil 02/18/2008" );
inp.val( "10/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(13) a", dp ).simulate( "click" );
equal( inp.val(), "10/11/2008", "Daylight saving - Brasil 10/11/2008" );
inp.val( "10/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(14) a", dp ).simulate( "click" );
equal( inp.val(), "10/12/2008", "Daylight saving - Brasil 10/12/2008" );
inp.val( "10/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(15) a", dp ).simulate( "click" );
equal( inp.val(), "10/13/2008", "Daylight saving - Brasil 10/13/2008" );
// Lebanon, Beirut - midnight change, northern hemisphere
inp.val( "03/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(34) a", dp ).simulate( "click" );
equal( inp.val(), "03/29/2008", "Daylight saving - Lebanon 03/29/2008" );
inp.val( "03/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(35) a", dp ).simulate( "click" );
equal( inp.val(), "03/30/2008", "Daylight saving - Lebanon 03/30/2008" );
inp.val( "03/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(36) a", dp ).simulate( "click" );
equal( inp.val(), "03/31/2008", "Daylight saving - Lebanon 03/31/2008" );
inp.val( "10/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(27) a", dp ).simulate( "click" );
equal( inp.val(), "10/25/2008", "Daylight saving - Lebanon 10/25/2008" );
inp.val( "10/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(28) a", dp ).simulate( "click" );
equal( inp.val(), "10/26/2008", "Daylight saving - Lebanon 10/26/2008" );
inp.val( "10/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(29) a", dp ).simulate( "click" );
equal( inp.val(), "10/27/2008", "Daylight saving - Lebanon 10/27/2008" );
// US, Eastern - AM change, northern hemisphere
inp.val( "03/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(13) a", dp ).simulate( "click" );
equal( inp.val(), "03/08/2008", "Daylight saving - US 03/08/2008" );
inp.val( "03/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(14) a", dp ).simulate( "click" );
equal( inp.val(), "03/09/2008", "Daylight saving - US 03/09/2008" );
inp.val( "03/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(15) a", dp ).simulate( "click" );
equal( inp.val(), "03/10/2008", "Daylight saving - US 03/10/2008" );
inp.val( "11/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(6) a", dp ).simulate( "click" );
equal( inp.val(), "11/01/2008", "Daylight saving - US 11/01/2008" );
inp.val( "11/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(7) a", dp ).simulate( "click" );
equal( inp.val(), "11/02/2008", "Daylight saving - US 11/02/2008" );
inp.val( "11/01/2008" ).datepicker( "show" );
$( ".ui-datepicker-calendar td:eq(8) a", dp ).simulate( "click" );
equal( inp.val(), "11/03/2008", "Daylight saving - US 11/03/2008" );
} );
var beforeShowThis = null,
beforeShowInput = null,
beforeShowInst = null,
beforeShowDayThis = null,
beforeShowDayOK = true;
function beforeAll( input, inst ) {
beforeShowThis = this;
beforeShowInput = input;
beforeShowInst = inst;
return { currentText: "Current" };
}
function beforeDay( date ) {
beforeShowDayThis = this;
beforeShowDayOK &= ( date > new Date( 2008, 1 - 1, 26 ) &&
date < new Date( 2008, 3 - 1, 6 ) );
return [ ( date.getDate() % 2 === 0 ), ( date.getDate() % 10 === 0 ? "day10" : "" ),
( date.getDate() % 3 === 0 ? "Divisble by 3" : "" ) ];
}
test( "callbacks", function() {
expect( 13 );
// Before show
var dp, day20, day21,
inp = testHelper.init( "#inp", { beforeShow: beforeAll } ),
inst = $.data( inp[ 0 ], "datepicker" );
equal( $.datepicker._get( inst, "currentText" ), "Today", "Before show - initial" );
inp.val( "02/04/2008" ).datepicker( "show" );
equal( $.datepicker._get( inst, "currentText" ), "Current", "Before show - changed" );
ok( beforeShowThis.id === inp[ 0 ].id, "Before show - this OK" );
ok( beforeShowInput.id === inp[ 0 ].id, "Before show - input OK" );
deepEqual( beforeShowInst, inst, "Before show - inst OK" );
inp.datepicker( "hide" ).datepicker( "destroy" );
// Before show day
inp = testHelper.init( "#inp", { beforeShowDay: beforeDay } );
dp = $( "#ui-datepicker-div" );
inp.val( "02/04/2008" ).datepicker( "show" );
ok( beforeShowDayThis.id === inp[ 0 ].id, "Before show day - this OK" );
ok( beforeShowDayOK, "Before show day - dates OK" );
day20 = dp.find( ".ui-datepicker-calendar td:contains('20')" );
day21 = dp.find( ".ui-datepicker-calendar td:contains('21')" );
ok( !day20.is( ".ui-datepicker-unselectable" ), "Before show day - unselectable 20" );
ok( day21.is( ".ui-datepicker-unselectable" ), "Before show day - unselectable 21" );
ok( day20.is( ".day10" ), "Before show day - CSS 20" );
ok( !day21.is( ".day10" ), "Before show day - CSS 21" );
ok( !day20.attr( "title" ), "Before show day - title 20" );
ok( day21.attr( "title" ) === "Divisble by 3", "Before show day - title 21" );
inp.datepicker( "hide" ).datepicker( "destroy" );
} );
test( "beforeShowDay - tooltips with quotes", function() {
expect( 1 );
var inp, dp;
inp = testHelper.init( "#inp", {
beforeShowDay: function() {
return [ true, "", "'" ];
}
} );
dp = $( "#ui-datepicker-div" );
inp.datepicker( "show" );
equal( dp.find( ".ui-datepicker-calendar td:contains('9')" ).attr( "title" ), "'" );
inp.datepicker( "hide" ).datepicker( "destroy" );
} );
test( "localisation", function() {
expect( 24 );
var dp, month, day, date,
inp = testHelper.init( "#inp", $.datepicker.regional.fr );
inp.datepicker( "option", { dateFormat: "DD, d MM yy", showButtonPanel:true, changeMonth:true, changeYear:true } ).val( "" ).datepicker( "show" );
dp = $( "#ui-datepicker-div" );
equal( $( ".ui-datepicker-close", dp ).text(), "Fermer", "Localisation - close" );
$( ".ui-datepicker-close", dp ).simulate( "mouseover" );
equal( $( ".ui-datepicker-prev", dp ).text(), "Précédent", "Localisation - previous" );
equal( $( ".ui-datepicker-current", dp ).text(), "Aujourd'hui", "Localisation - current" );
equal( $( ".ui-datepicker-next", dp ).text(), "Suivant", "Localisation - next" );
month = 0;
$( ".ui-datepicker-month option", dp ).each( function() {
equal( $( this ).text(), $.datepicker.regional.fr.monthNamesShort[ month ],
"Localisation - month " + month );
month++;
} );
day = 1;
$( ".ui-datepicker-calendar th", dp ).each( function() {
equal( $( this ).text(), $.datepicker.regional.fr.dayNamesMin[ day ],
"Localisation - day " + day );
day = ( day + 1 ) % 7;
} );
inp.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
date = new Date();
equal( inp.val(), $.datepicker.regional.fr.dayNames[ date.getDay() ] + ", " +
date.getDate() + " " + $.datepicker.regional.fr.monthNames[ date.getMonth() ] +
" " + date.getFullYear(), "Localisation - formatting" );
} );
test( "noWeekends", function() {
expect( 31 );
var i, date;
for ( i = 1; i <= 31; i++ ) {
date = new Date( 2001, 1 - 1, i );
deepEqual( $.datepicker.noWeekends( date ), [ ( i + 1 ) % 7 >= 2, "" ],
"No weekends " + date );
}
} );
test( "iso8601Week", function() {
expect( 12 );
var date = new Date( 2000, 12 - 1, 31 );
equal( $.datepicker.iso8601Week( date ), 52, "ISO 8601 week " + date );
date = new Date( 2001, 1 - 1, 1 );
equal( $.datepicker.iso8601Week( date ), 1, "ISO 8601 week " + date );
date = new Date( 2001, 1 - 1, 7 );
equal( $.datepicker.iso8601Week( date ), 1, "ISO 8601 week " + date );
date = new Date( 2001, 1 - 1, 8 );
equal( $.datepicker.iso8601Week( date ), 2, "ISO 8601 week " + date );
date = new Date( 2003, 12 - 1, 28 );
equal( $.datepicker.iso8601Week( date ), 52, "ISO 8601 week " + date );
date = new Date( 2003, 12 - 1, 29 );
equal( $.datepicker.iso8601Week( date ), 1, "ISO 8601 week " + date );
date = new Date( 2004, 1 - 1, 4 );
equal( $.datepicker.iso8601Week( date ), 1, "ISO 8601 week " + date );
date = new Date( 2004, 1 - 1, 5 );
equal( $.datepicker.iso8601Week( date ), 2, "ISO 8601 week " + date );
date = new Date( 2009, 12 - 1, 28 );
equal( $.datepicker.iso8601Week( date ), 53, "ISO 8601 week " + date );
date = new Date( 2010, 1 - 1, 3 );
equal( $.datepicker.iso8601Week( date ), 53, "ISO 8601 week " + date );
date = new Date( 2010, 1 - 1, 4 );
equal( $.datepicker.iso8601Week( date ), 1, "ISO 8601 week " + date );
date = new Date( 2010, 1 - 1, 10 );
equal( $.datepicker.iso8601Week( date ), 1, "ISO 8601 week " + date );
} );
test( "parseDate", function() {
expect( 26 );
testHelper.init( "#inp" );
var currentYear, gmtDate, fr, settings, zh;
ok( $.datepicker.parseDate( "d m y", "" ) == null, "Parse date empty" );
testHelper.equalsDate( $.datepicker.parseDate( "d m y", "3 2 01" ),
new Date( 2001, 2 - 1, 3 ), "Parse date d m y" );
testHelper.equalsDate( $.datepicker.parseDate( "dd mm yy", "03 02 2001" ),
new Date( 2001, 2 - 1, 3 ), "Parse date dd mm yy" );
testHelper.equalsDate( $.datepicker.parseDate( "d m y", "13 12 01" ),
new Date( 2001, 12 - 1, 13 ), "Parse date d m y" );
testHelper.equalsDate( $.datepicker.parseDate( "dd mm yy", "13 12 2001" ),
new Date( 2001, 12 - 1, 13 ), "Parse date dd mm yy" );
testHelper.equalsDate( $.datepicker.parseDate( "y-o", "01-34" ),
new Date( 2001, 2 - 1, 3 ), "Parse date y-o" );
testHelper.equalsDate( $.datepicker.parseDate( "yy-oo", "2001-347" ),
new Date( 2001, 12 - 1, 13 ), "Parse date yy-oo" );
testHelper.equalsDate( $.datepicker.parseDate( "oo yy", "348 2004" ),
new Date( 2004, 12 - 1, 13 ), "Parse date oo yy" );
testHelper.equalsDate( $.datepicker.parseDate( "D d M y", "Sat 3 Feb 01" ),
new Date( 2001, 2 - 1, 3 ), "Parse date D d M y" );
testHelper.equalsDate( $.datepicker.parseDate( "d MM DD yy", "3 February Saturday 2001" ),
new Date( 2001, 2 - 1, 3 ), "Parse date dd MM DD yy" );
testHelper.equalsDate( $.datepicker.parseDate( "DD, MM d, yy", "Saturday, February 3, 2001" ),
new Date( 2001, 2 - 1, 3 ), "Parse date DD, MM d, yy" );
testHelper.equalsDate( $.datepicker.parseDate( "'day' d 'of' MM (''DD''), yy",
"day 3 of February ('Saturday'), 2001" ), new Date( 2001, 2 - 1, 3 ),
"Parse date 'day' d 'of' MM (''DD''), yy" );
currentYear = new Date().getFullYear();
testHelper.equalsDate( $.datepicker.parseDate( "y-m-d", ( currentYear - 2000 ) + "-02-03" ),
new Date( currentYear, 2 - 1, 3 ), "Parse date y-m-d - default cutuff" );
testHelper.equalsDate( $.datepicker.parseDate( "y-m-d", ( currentYear - 2000 + 10 ) + "-02-03" ),
new Date( currentYear + 10, 2 - 1, 3 ), "Parse date y-m-d - default cutuff" );
testHelper.equalsDate( $.datepicker.parseDate( "y-m-d", ( currentYear - 2000 + 11 ) + "-02-03" ),
new Date( currentYear - 89, 2 - 1, 3 ), "Parse date y-m-d - default cutuff" );
testHelper.equalsDate( $.datepicker.parseDate( "y-m-d", "80-02-03", { shortYearCutoff: 80 } ),
new Date( 2080, 2 - 1, 3 ), "Parse date y-m-d - cutoff 80" );
testHelper.equalsDate( $.datepicker.parseDate( "y-m-d", "81-02-03", { shortYearCutoff: 80 } ),
new Date( 1981, 2 - 1, 3 ), "Parse date y-m-d - cutoff 80" );
testHelper.equalsDate( $.datepicker.parseDate( "y-m-d", ( currentYear - 2000 + 60 ) + "-02-03", { shortYearCutoff: "+60" } ),
new Date( currentYear + 60, 2 - 1, 3 ), "Parse date y-m-d - cutoff +60" );
testHelper.equalsDate( $.datepicker.parseDate( "y-m-d", ( currentYear - 2000 + 61 ) + "-02-03", { shortYearCutoff: "+60" } ),
new Date( currentYear - 39, 2 - 1, 3 ), "Parse date y-m-d - cutoff +60" );
gmtDate = new Date( 2001, 2 - 1, 3 );
gmtDate.setMinutes( gmtDate.getMinutes() - gmtDate.getTimezoneOffset() );
testHelper.equalsDate( $.datepicker.parseDate( "@", "981158400000" ), gmtDate, "Parse date @" );
testHelper.equalsDate( $.datepicker.parseDate( "!", "631167552000000000" ), gmtDate, "Parse date !" );
fr = $.datepicker.regional.fr;
settings = { dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames,
monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames };
testHelper.equalsDate( $.datepicker.parseDate( "D d M y", "Lun. 9 avr. 01", settings ),
new Date( 2001, 4 - 1, 9 ), "Parse date D M y with settings" );
testHelper.equalsDate( $.datepicker.parseDate( "d MM DD yy", "9 Avril Lundi 2001", settings ),
new Date( 2001, 4 - 1, 9 ), "Parse date d MM DD yy with settings" );
testHelper.equalsDate( $.datepicker.parseDate( "DD, MM d, yy", "Lundi, Avril 9, 2001", settings ),
new Date( 2001, 4 - 1, 9 ), "Parse date DD, MM d, yy with settings" );
testHelper.equalsDate( $.datepicker.parseDate( "'jour' d 'de' MM (''DD''), yy", "jour 9 de Avril ('Lundi'), 2001", settings ),
new Date( 2001, 4 - 1, 9 ), "Parse date 'jour' d 'de' MM (''DD''), yy with settings" );
zh = $.datepicker.regional[ "zh-CN" ];
testHelper.equalsDate( $.datepicker.parseDate( "yy M d", "2011 十一月 22", zh ),
new Date( 2011, 11 - 1, 22 ), "Parse date yy M d with zh-CN" );
} );
test( "parseDateErrors", function() {
expect( 18 );
testHelper.init( "#inp" );
var fr, settings;
function expectError( expr, value, error ) {
try {
expr();
ok( false, "Parsed error " + value );
}
catch ( e ) {
equal( e, error, "Parsed error " + value );
}
}
expectError( function() { $.datepicker.parseDate( null, "Sat 2 01" ); },
"Sat 2 01", "Invalid arguments" );
expectError( function() { $.datepicker.parseDate( "d m y", null ); },
"null", "Invalid arguments" );
expectError( function() { $.datepicker.parseDate( "d m y", "Sat 2 01" ); },
"Sat 2 01 - d m y", "Missing number at position 0" );
expectError( function() { $.datepicker.parseDate( "dd mm yy", "Sat 2 01" ); },
"Sat 2 01 - dd mm yy", "Missing number at position 0" );
expectError( function() { $.datepicker.parseDate( "d m y", "3 Feb 01" ); },
"3 Feb 01 - d m y", "Missing number at position 2" );
expectError( function() { $.datepicker.parseDate( "dd mm yy", "3 Feb 01" ); },
"3 Feb 01 - dd mm yy", "Missing number at position 2" );
expectError( function() { $.datepicker.parseDate( "mm dd yy", "2 1 01" ); },
"2 1 01 - dd mm yy", "Missing number at position 4" );
expectError( function() { $.datepicker.parseDate( "d m y", "3 2 AD01" ); },
"3 2 AD01 - d m y", "Missing number at position 4" );
expectError( function() { $.datepicker.parseDate( "d m yy", "3 2 AD01" ); },
"3 2 AD01 - dd mm yy", "Missing number at position 4" );
expectError( function() { $.datepicker.parseDate( "y-o", "01-D01" ); },
"2001-D01 - y-o", "Missing number at position 3" );
expectError( function() { $.datepicker.parseDate( "yy-oo", "2001-D01" ); },
"2001-D01 - yy-oo", "Missing number at position 5" );
expectError( function() { $.datepicker.parseDate( "D d M y", "D7 3 Feb 01" ); },
"D7 3 Feb 01 - D d M y", "Unknown name at position 0" );
expectError( function() { $.datepicker.parseDate( "D d M y", "Sat 3 M2 01" ); },
"Sat 3 M2 01 - D d M y", "Unknown name at position 6" );
expectError( function() { $.datepicker.parseDate( "DD, MM d, yy", "Saturday- Feb 3, 2001" ); },
"Saturday- Feb 3, 2001 - DD, MM d, yy", "Unexpected literal at position 8" );
expectError( function() { $.datepicker.parseDate( "'day' d 'of' MM (''DD''), yy",
"day 3 of February (\"Saturday\"), 2001" ); },
"day 3 of Mon2 ('Day7'), 2001", "Unexpected literal at position 19" );
expectError( function() { $.datepicker.parseDate( "d m y", "29 2 01" ); },
"29 2 01 - d m y", "Invalid date" );
fr = $.datepicker.regional.fr;
settings = { dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames,
monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames };
expectError( function() { $.datepicker.parseDate( "D d M y", "Mon 9 Avr 01", settings ); },
"Mon 9 Avr 01 - D d M y", "Unknown name at position 0" );
expectError( function() { $.datepicker.parseDate( "D d M y", "Lun. 9 Apr 01", settings ); },
"Lun. 9 Apr 01 - D d M y", "Unknown name at position 7" );
} );
test( "Ticket #7244: date parser does not fail when too many numbers are passed into the date function", function() {
expect( 4 );
var date;
try {
date = $.datepicker.parseDate( "dd/mm/yy", "18/04/19881" );
ok( false, "Did not properly detect an invalid date" );
}catch ( e ) {
ok( "invalid date detected" );
}
try {
date = $.datepicker.parseDate( "dd/mm/yy", "18/04/1988 @ 2:43 pm" );
equal( date.getDate(), 18 );
equal( date.getMonth(), 3 );
equal( date.getFullYear(), 1988 );
} catch ( e ) {
ok( false, "Did not properly parse date with extra text separated by whitespace" );
}
} );
test( "formatDate", function() {
expect( 16 );
testHelper.init( "#inp" );
var gmtDate, fr, settings;
equal( $.datepicker.formatDate( "d m y", new Date( 2001, 2 - 1, 3 ) ),
"3 2 01", "Format date d m y" );
equal( $.datepicker.formatDate( "dd mm yy", new Date( 2001, 2 - 1, 3 ) ),
"03 02 2001", "Format date dd mm yy" );
equal( $.datepicker.formatDate( "d m y", new Date( 2001, 12 - 1, 13 ) ),
"13 12 01", "Format date d m y" );
equal( $.datepicker.formatDate( "dd mm yy", new Date( 2001, 12 - 1, 13 ) ),
"13 12 2001", "Format date dd mm yy" );
equal( $.datepicker.formatDate( "yy-o", new Date( 2001, 2 - 1, 3 ) ),
"2001-34", "Format date yy-o" );
equal( $.datepicker.formatDate( "yy-oo", new Date( 2001, 2 - 1, 3 ) ),
"2001-034", "Format date yy-oo" );
equal( $.datepicker.formatDate( "D M y", new Date( 2001, 2 - 1, 3 ) ),
"Sat Feb 01", "Format date D M y" );
equal( $.datepicker.formatDate( "DD MM yy", new Date( 2001, 2 - 1, 3 ) ),
"Saturday February 2001", "Format date DD MM yy" );
equal( $.datepicker.formatDate( "DD, MM d, yy", new Date( 2001, 2 - 1, 3 ) ),
"Saturday, February 3, 2001", "Format date DD, MM d, yy" );
equal( $.datepicker.formatDate( "'day' d 'of' MM (''DD''), yy",
new Date( 2001, 2 - 1, 3 ) ), "day 3 of February ('Saturday'), 2001",
"Format date 'day' d 'of' MM ('DD'), yy" );
gmtDate = new Date( 2001, 2 - 1, 3 );
gmtDate.setMinutes( gmtDate.getMinutes() - gmtDate.getTimezoneOffset() );
equal( $.datepicker.formatDate( "@", gmtDate ), "981158400000", "Format date @" );
equal( $.datepicker.formatDate( "!", gmtDate ), "631167552000000000", "Format date !" );
fr = $.datepicker.regional.fr;
settings = { dayNamesShort: fr.dayNamesShort, dayNames: fr.dayNames,
monthNamesShort: fr.monthNamesShort, monthNames: fr.monthNames };
equal( $.datepicker.formatDate( "D M y", new Date( 2001, 4 - 1, 9 ), settings ),
"lun. avr. 01", "Format date D M y with settings" );
equal( $.datepicker.formatDate( "DD MM yy", new Date( 2001, 4 - 1, 9 ), settings ),
"lundi avril 2001", "Format date DD MM yy with settings" );
equal( $.datepicker.formatDate( "DD, MM d, yy", new Date( 2001, 4 - 1, 9 ), settings ),
"lundi, avril 9, 2001", "Format date DD, MM d, yy with settings" );
equal( $.datepicker.formatDate( "'jour' d 'de' MM (''DD''), yy",
new Date( 2001, 4 - 1, 9 ), settings ), "jour 9 de avril ('lundi'), 2001",
"Format date 'jour' d 'de' MM (''DD''), yy with settings" );
} );
// TODO: Fix this test so it isn't mysteriously flaky in Browserstack on certain OS/Browser combos
// test("Ticket 6827: formatDate day of year calculation is wrong during day lights savings time", function(){
// expect( 1 );
// var time = $.datepicker.formatDate("oo", new Date("2010/03/30 12:00:00 CDT"));
// equal(time, "089");
// });
test( "Ticket 7602: Stop datepicker from appearing with beforeShow event handler", function() {
expect( 3 );
var inp, dp;
inp = testHelper.init( "#inp", {
beforeShow: function() {
}
} );
dp = $( "#ui-datepicker-div" );
inp.datepicker( "show" );
equal( dp.css( "display" ), "block", "beforeShow returns nothing" );
inp.datepicker( "hide" ).datepicker( "destroy" );
inp = testHelper.init( "#inp", {
beforeShow: function() {
return true;
}
} );
dp = $( "#ui-datepicker-div" );
inp.datepicker( "show" );
equal( dp.css( "display" ), "block", "beforeShow returns true" );
inp.datepicker( "hide" );
inp.datepicker( "destroy" );
inp = testHelper.init( "#inp", {
beforeShow: function() {
return false;
}
} );
dp = $( "#ui-datepicker-div" );
inp.datepicker( "show" );
equal( dp.css( "display" ), "none", "beforeShow returns false" );
inp.datepicker( "destroy" );
} );
} );
le30
backport/49225/stable28
backport/49225/stable29
backport/49225/stable30
backport/49226/stable30
backport/49232/stable28
backport/49232/stable29
backport/49232/stable30
backport/49237/stable30
backport/49259/stable30
backport/49260/stable30
backport/49261/stable30
backport/49262/stable28
backport/49262/stable29
backport/49271/stable29
backport/49271/stable30
backport/49281/stable30
backport/49288/stable29
backport/49288/stable30
backport/49293/stable30
backport/49308/stable29
backport/49308/stable30
backport/49311/stable28
backport/49311/stable29
backport/49311/stable30
backport/49315/stable28
backport/49315/stable29
backport/49315/stable30
backport/49332/stable28
backport/49332/stable29
backport/49332/stable30
backport/49346/stable30
backport/49351/stable29
backport/49351/stable30
backport/49352/stable30
backport/49357/stable30
backport/49361/stable28
backport/49361/stable29
backport/49361/stable30
backport/49372/stable28
backport/49372/stable29
backport/49372/stable30
backport/49373/stable29
backport/49380/stable30
backport/49384/master
backport/49398/stable29
backport/49398/stable30
backport/49432/master
backport/49432/stable30
backport/49434/stable30
backport/49440/stable29
backport/49440/stable30
backport/49440/stable31
backport/49442/stable28
backport/49442/stable29
backport/49442/stable30
backport/49451/stable29
backport/49451/stable30
backport/49454/stable28
backport/49454/stable29
backport/49454/stable30
backport/49459/stable30
backport/49464/stable28
backport/49464/stable29
backport/49464/stable30
backport/49476/stable28
backport/49476/stable29
backport/49476/stable30
backport/49477/stable30
backport/49489/stable30
backport/49493/stable28
backport/49493/stable29
backport/49494/stable29
backport/49494/stable29-squashed
backport/49494/stable30
backport/49503/stable28
backport/49503/stable29
backport/49503/stable30
backport/49528/stable28
backport/49528/stable29
backport/49528/stable30
backport/49551/stable29
backport/49551/stable30
backport/49552/stable28
backport/49552/stable29
backport/49552/stable30
backport/49552/stable31
backport/49557/stable30
backport/49569/stable29
backport/49569/stable30
backport/49581/stable28
backport/49581/stable30
backport/49587/stable30
backport/49588/stable29
backport/49588/stable30
backport/49602/stable28
backport/49602/stable29
backport/49602/stable30
backport/49629/stable29
backport/49631/stable29
backport/49639/stable28
backport/49639/stable29
backport/49639/stable30
backport/49639/stable31
backport/49645/stable31
backport/49677/stable30
backport/49681/stable29
backport/49681/stable30
backport/49685/stable28
backport/49685/stable29
backport/49685/stable30
backport/49693/stable29
backport/49693/stable30
backport/49694/stable30
backport/49695/stable29
backport/49695/stable30
backport/49746/stable30
backport/49747/stable27
backport/49747/stable28
backport/49747/stable29
backport/49747/stable30
backport/49761/stable29
backport/49761/stable30
backport/49799/stable28
backport/49799/stable29
backport/49799/stable30
backport/49801/stable30
backport/49803/stable29
backport/49803/stable30
backport/49815/stable28
backport/49815/stable29
backport/49820/stable30
backport/49822/stable28
backport/49822/stable29
backport/49832/stable30
backport/49839/stable29
backport/49839/stable30
backport/49843/stable29
backport/49843/stable30
backport/49847/stable30
backport/49852/stable30
backport/49880/stable28
backport/49880/stable30
backport/49882/stable28
backport/49882/stable29
backport/49885/stable30
backport/49887/stable29
backport/49887/stable30
backport/49895/stable29
backport/49895/stable30
backport/49898/stable30
backport/49900/stable29
backport/49903/stable29
backport/49903/stable30
backport/49917/stable30
backport/49927/stable28
backport/49962/stable29
backport/49962/stable30
backport/49966/stable29
backport/49966/stable30
backport/49973/master
backport/49974/stable29
backport/49974/stable30
backport/49988/stable29
backport/49988/stable30
backport/50017/stable29
backport/50017/stable30
backport/50025/stable29
backport/50025/stable30
backport/50026/stable29
backport/50026/stable30
backport/50034/stable29
backport/50034/stable30
backport/50035/stable28
backport/50035/stable29
backport/50035/stable30
backport/50046/stable29
backport/50046/stable30
backport/50053/stable29
backport/50053/stable30
backport/50053/stable31
backport/50070/stable29
backport/50070/stable30
backport/50076/stable29
backport/50076/stable30
backport/50077/stable29
backport/50077/stable30
backport/50081/stable31
backport/50083/stable30
backport/50092/stable31
backport/50111/stable29
backport/50111/stable30
backport/50113/stable29
backport/50113/stable30
backport/50121/master
backport/50121/stable30
backport/50121/stable31
backport/50123/master
backport/50123/stable29
backport/50123/stable30
backport/50128/stable29
backport/50128/stable30
backport/50129/stable30
backport/50129/stable31
backport/50152/stable29
backport/50152/stable30
backport/50154/stable29
backport/50157/stable30
backport/50157/stable31
backport/50161/stable29
backport/50161/stable30
backport/50177/stable29
backport/50177/stable30
backport/50179/stable30
backport/50187/stable30
backport/50192/stable28
backport/50192/stable29
backport/50192/stable30
backport/50193/stable29
backport/50193/stable30
backport/50193/stable31
backport/50220/stable30
backport/50234/stable30
backport/50234/stable31
backport/50237/stable29
backport/50241/stable30
backport/50244/stable31
backport/50260/stable30
backport/50260/stable31
backport/50270/stable26
backport/50270/stable27
backport/50270/stable28
backport/50270/stable28-follow-up
backport/50270/stable29
backport/50270/stable30
backport/50270/stable31
backport/50273/stable29
backport/50273/stable30
backport/50273/stable31
backport/50281/stable31
backport/50282/stable31
backport/50284/stable30
backport/50284/stable31
backport/50292/stable29
backport/50292/stable30
backport/50293/stable29
backport/50293/stable30
backport/50293/stable31
backport/50298/stable29
backport/50298/stable30
backport/50298/stable31
backport/50299/stable28
backport/50299/stable29
backport/50299/stable30
backport/50299/stable31
backport/50319/stable29
backport/50319/stable30
backport/50324/stable30
backport/50324/stable31
backport/50330/stable30
backport/50330/stable31
backport/50331/stable30
backport/50331/stable31
backport/50333/stable29
backport/50353/stable29
backport/50353/stable30
backport/50353/stable31
backport/50362/stable31
backport/50364/stable31
backport/50366/stable31
backport/50368/stable31
backport/50369/stable29
backport/50369/stable30
backport/50369/stable31
backport/50389/stable31
backport/50394/stable30
backport/50394/stable31
backport/50398/stable29
backport/50398/stable30
backport/50424/stable29
backport/50424/stable30
backport/50424/stable31
backport/50426/stable31
backport/50430/stable29
backport/50430/stable30
backport/50436/stable31
backport/50437/stable29
backport/50446/stable31
backport/50447/stable30
backport/50455/stable30
backport/50455/stable31
backport/50464/stable30
backport/50464/stable31
backport/50465/stable29
backport/50465/stable30
backport/50465/stable31
backport/50480/stable29
backport/50490/stable30
backport/50490/stable31
backport/50494/stable29
backport/50494/stable30
backport/50494/stable31
backport/50498/stable31
backport/50501/stable31
backport/50503/stable30
backport/50503/stable31
backport/50514/stable29
backport/50514/stable30
backport/50514/stable31
backport/50515/stable29
backport/50515/stable30
backport/50515/stable31
backport/50519/stable29
backport/50519/stable30
backport/50519/stable31
backport/50524/stable30
backport/50524/stable31
backport/50530/stable29
backport/50530/stable30
backport/50530/stable31
backport/50540/stable30
backport/50540/stable31
backport/50542/stable29
backport/50542/stable30
backport/50542/stable31
backport/50549/stable29
backport/50550/stable30
backport/50550/stable31
backport/50567/stable30
backport/50567/stable31
backport/50576/stable31
backport/50582/stable30
backport/50582/stable31
backport/50592/stable31
backport/50602/stable30
backport/50602/stable31
backport/50626/stable29
backport/50635/stable31
backport/50640/stable30
backport/50640/stable31
backport/50642/stable29
backport/50642/stable30
backport/50642/stable31
backport/50645/stable31
backport/50655/stable29
backport/50655/stable30
backport/50655/stable31
backport/50657/stable30
backport/50657/stable31
backport/50660/stable29
backport/50660/stable30
backport/50660/stable31
backport/50663/stable28
backport/50663/stable29
backport/50663/stable30
backport/50663/stable31
backport/50666/stable27
backport/50666/stable28
backport/50666/stable29
backport/50666/stable30
backport/50666/stable31
backport/50669/stable30
backport/50669/stable31
backport/50678/stable29
backport/50678/stable30
backport/50678/stable31
backport/50680/stable31
backport/50691/stable29
backport/50692/stable31
backport/50693/stable28
backport/50697/stable31
backport/50735/stable30
backport/50735/stable31
backport/50739/stable31
backport/50768/stable31
backport/50769/stable29
backport/50769/stable30
backport/50769/stable31
backport/50778/stable29
backport/50781/stable29
backport/50781/stable30
backport/50781/stable31
backport/50783/stable30
backport/50783/stable31
backport/50784/stable30
backport/50784/stable31
backport/50794/stable31
backport/50798/stable29
backport/50798/stable31
backport/50807/stable29
backport/50807/stable30
backport/50807/stable31
backport/50809/stable29
backport/50809/stable30
backport/50809/stable31
backport/50814/stable29
backport/50814/stable30
backport/50814/stable31
backport/50816/stable30
backport/50816/stable31
backport/50820/stable29
backport/50820/stable30
backport/50820/stable31
backport/50852/stable30
backport/50858/stable29
backport/50858/stable30
backport/50858/stable31
backport/50860/stable30
backport/50860/stable31
backport/50873/stable31
backport/50874/stable29
backport/50874/stable30
backport/50874/stable31
backport/50878/stable30
backport/50881/stable30
backport/50881/stable31
backport/50896/stable29
backport/50896/stable30
backport/50896/stable31
backport/50903/stable29
backport/50903/stable30
backport/50903/stable31
backport/50904/stable31
backport/50905/stable30
backport/50905/stable31
backport/50910/stable29
backport/50910/stable30
backport/50910/stable31
backport/50918/stable30
backport/50918/stable31
backport/50919/stable30
backport/50919/stable31
backport/50920/stable31
backport/50922/stable29
backport/50922/stable31
backport/50930/stable30
backport/50942/stable31
backport/50943/stable30
backport/50949/stable29
backport/50949/stable30
backport/50949/stable31
backport/50956/stable29
backport/50956/stable30
backport/50956/stable31
backport/50958/stable29
backport/50958/stable30
backport/50958/stable31
backport/50970/stable31
backport/50979/stable31
backport/50985/stable30
backport/50985/stable31
backport/50987/stable31
backport/50989/stable28
backport/50989/stable29
backport/50989/stable30
backport/50989/stable31
backport/50992/stable31
backport/51000/stable29
backport/51000/stable30
backport/51000/stable31
backport/51010-51839/stable29
backport/51010/stable29
backport/51010/stable30
backport/51010/stable31
backport/51019/stable26
backport/51019/stable27
backport/51019/stable28
backport/51019/stable29
backport/51019/stable30
backport/51019/stable31
backport/51020/stable29
backport/51020/stable30
backport/51020/stable31
backport/51031/stable31
backport/51049/stable29
backport/51049/stable30
backport/51049/stable31
backport/51050/stable28
backport/51050/stable29
backport/51050/stable30
backport/51050/stable31
backport/51051/stable25
backport/51051/stable26
backport/51051/stable27
backport/51051/stable28
backport/51051/stable29
backport/51051/stable30
backport/51051/stable31
backport/51069/stable31
backport/51071/stable30
backport/51071/stable31
backport/51073/stable29
backport/51073/stable30
backport/51073/stable31
backport/51077/stable31
backport/51079/stable31
backport/51081/stable30
backport/51081/stable31
backport/51082/stable31
backport/51108/stable29
backport/51108/stable30
backport/51108/stable31
backport/51126/stable31
backport/51130/stable28
backport/51130/stable29
backport/51130/stable30
backport/51130/stable31
backport/51131/stable30
backport/51131/stable31
backport/51132/stable30
backport/51142/stable30
backport/51142/stable31
backport/51144/stable29
backport/51144/stable30
backport/51144/stable31
backport/51146/stable29
backport/51146/stable30
backport/51146/stable31
backport/51148/stable30
backport/51148/stable31
backport/51151/stable31
backport/51152/stable31
backport/51173/master
backport/51194/stable26
backport/51194/stable27
backport/51194/stable28
backport/51194/stable29
backport/51194/stable30
backport/51194/stable31
backport/51211/stable31
backport/51216/stable29
backport/51216/stable30
backport/51216/stable31
backport/51218/stable31
backport/51229/stable30
backport/51229/stable31
backport/51239/stable31
backport/51243/stable30
backport/51250/stable29
backport/51250/stable30
backport/51250/stable31
backport/51256/stable28
backport/51256/stable29
backport/51256/stable30
backport/51258/stable30
backport/51258/stable31
backport/51259/stable28
backport/51259/stable29
backport/51259/stable30
backport/51259/stable31
backport/51260/master
backport/51280/stable26
backport/51280/stable27
backport/51280/stable28
backport/51280/stable29
backport/51281/stable29
backport/51285/stable29
backport/51287/stable31
backport/51302/stable30
backport/51302/stable31
backport/51309/stable31
backport/51310/stable31
backport/51320/stable29
backport/51320/stable30
backport/51320/stable31
backport/51333/stable29
backport/51333/stable30
backport/51333/stable31
backport/51336/stable30
backport/51336/stable31
backport/51361/stable26
backport/51361/stable27
backport/51361/stable28
backport/51361/stable29
backport/51361/stable30
backport/51361/stable31
backport/51364/stable29
backport/51364/stable30
backport/51364/stable31
backport/51365/stable31
backport/51378/stable31
backport/51379/stable30
backport/51379/stable31
backport/51380/stable29
backport/51380/stable30
backport/51380/stable31
backport/51384/stable29
backport/51384/stable30
backport/51384/stable31
backport/51389/stable29
backport/51389/stable30
backport/51389/stable31
backport/51394/stable31
backport/51404/stable29
backport/51404/stable30
backport/51405/stable29
backport/51405/stable30
backport/51407/stable22
backport/51407/stable23
backport/51407/stable24
backport/51407/stable25
backport/51407/stable26
backport/51407/stable27
backport/51407/stable28
backport/51418/stable30
backport/51418/stable31
backport/51431/stable30
backport/51431/stable31
backport/51433/stable29
backport/51433/stable30
backport/51433/stable31
backport/51434/stable29
backport/51434/stable30
backport/51434/stable31
backport/51438/stable29
backport/51438/stable30
backport/51438/stable31
backport/51439/stable30
backport/51439/stable31
backport/51440/master
backport/51441/stable30
backport/51441/stable31
backport/51442/stable31
backport/51449/stable30
backport/51449/stable31
backport/51458/stable31
backport/51469/stable30
backport/51469/stable31
backport/51471/stable30
backport/51471/stable31
backport/51477/stable29
backport/51477/stable30
backport/51477/stable31
backport/51490/stable31
backport/51491/stable30
backport/51491/stable31
backport/51501/stable31
backport/51512/stable31
backport/51521/stable31
backport/51524/stable31
backport/51544/stable26
backport/51544/stable27
backport/51544/stable28
backport/51544/stable29
backport/51544/stable30
backport/51544/stable31
backport/51554/stable25
backport/51594/stable30
backport/51598/stable29
backport/51598/stable30
backport/51598/stable31
backport/51600/stable29
backport/51600/stable30
backport/51600/stable31
backport/51602/stable28
backport/51602/stable29
backport/51602/stable30
backport/51602/stable31
backport/51603/stable30
backport/51603/stable31
backport/51608/stable31
backport/51609/stable30
backport/51609/stable31
backport/51611/stable30
backport/51611/stable31
backport/51622/stable31
backport/51644/stable29
backport/51644/stable30
backport/51644/stable31
backport/51668/stable29
backport/51668/stable30
backport/51668/stable31
backport/51669/stable30
backport/51669/stable31
backport/51675/stable30
backport/51675/stable31
backport/51684/stable31
backport/51689/stable30
backport/51689/stable31
backport/51697/stable29
backport/51697/stable30
backport/51697/stable31
backport/51705/stable29
backport/51705/stable30
backport/51705/stable31
backport/51707/stable29
backport/51707/stable30
backport/51707/stable31
backport/51715/stable31
backport/51724/stable30
backport/51724/stable31
backport/51737/stable29
backport/51737/stable30
backport/51737/stable31
backport/51744/stable29
backport/51744/stable30
backport/51744/stable31
backport/51745/stable29
backport/51745/stable30
backport/51745/stable31
backport/51750/stable29
backport/51750/stable30
backport/51750/stable31
backport/51760/stable28
backport/51760/stable29
backport/51760/stable30
backport/51760/stable31
backport/51807/stable29
backport/51818/stable30
backport/51818/stable31
backport/51837/stable29
backport/51837/stable30
backport/51837/stable31
backport/51845/stable31
backport/51852/stable31
backport/51861/stable29
backport/51861/stable30
backport/51861/stable31
backport/51863/stable29
backport/51863/stable30
backport/51863/stable31
backport/51866/stable29
backport/51866/stable30
backport/51866/stable31
backport/51870/stable29
backport/51870/stable30
backport/51870/stable31
backport/51876/stable31
backport/51905/stable26
backport/51905/stable27
backport/51905/stable28
backport/51905/stable29
backport/51905/stable30
backport/51905/stable31
backport/51920/stable29
backport/51920/stable30
backport/51920/stable31
backport/51927/stable31
backport/51937/stable30
backport/51937/stable31
backport/51942/stable31
backport/51944/stable29
backport/51944/stable30
backport/51944/stable31
backport/51946/stable31
backport/51982/stable29
backport/51982/stable30
backport/51982/stable31
backport/51994/stable28
backport/51994/stable29
backport/51994/stable30
backport/51994/stable31
backport/52008/stable30
backport/52008/stable31
backport/52013/stable28
backport/52013/stable29
backport/52013/stable30
backport/52013/stable31
backport/52015/stable29
backport/52015/stable30
backport/52019/stable29
backport/52019/stable30
backport/52019/stable31
backport/52035/stable31
backport/52045/stable31
backport/52046/stable31
backport/52048/stable30
backport/52048/stable31
backport/52050/stable31
backport/52066/stable30
backport/52066/stable31
backport/52072/stable30
backport/52072/stable31
backport/52073/stable30
backport/52073/stable31
backport/52075/stable29
backport/52075/stable30
backport/52075/stable31
backport/52079/stable31
backport/52085/stable31
backport/52094/stable31
backport/52099/stable31
backport/52116/stable31
backport/52121/stable30
backport/52121/stable31
backport/52133/stable31
backport/52135/stable29
backport/52135/stable30
backport/52168/stable31
backport/52180/stable31
backport/52187/stable30
backport/52215/stable30
backport/52215/stable31
backport/52221/stable31
backport/52223/stable29
backport/52223/stable30
backport/52223/stable31
backport/52224/stable31
backport/52228/stable30
backport/52228/stable31
backport/52240/stable31
backport/52242/stable29
backport/52242/stable30
backport/52242/stable31
backport/52249/stable31
backport/52250/stable30
backport/52250/stable31
backport/52252/stable31
backport/52257/stable31
backport/52269/stable31
backport/52285/stable31
backport/52296/stable30
backport/52296/stable31
backport/52299/stable31
backport/52360/stable29
backport/52360/stable30
backport/52360/stable31
backport/52361/stable30
backport/52361/stable31
backport/52364/stable29
backport/52364/stable30
backport/52364/stable31
backport/52366/stable31
backport/52373/stable30
backport/52373/stable31
backport/52374/stable30
backport/52374/stable31
backport/52375/stable30
backport/52375/stable31
backport/52402/stable30
backport/52402/stable31
backport/52404/stable31
backport/52417/stable30
backport/52417/stable31
backport/52423/stable31
backport/52429/stable29
backport/52429/stable30
backport/52429/stable31
backport/52434/stable30
backport/52434/stable31
backport/52438/stable31
backport/52439/stable31
backport/52441/stable31
backport/52443/stable31
backport/52479/stable31
backport/52503/stable30
backport/52503/stable31
backport/52514/stable31
backport/52516/stable28
backport/52516/stable29
backport/52525/stable30
backport/52525/stable31
backport/52526/stable30
backport/52526/stable31
backport/52532/stable31
backport/52533/stable31
backport/52534/stable30
backport/52534/stable31
backport/52535/stable30
backport/52535/stable31
backport/52543/stable30
backport/52543/stable31
backport/52551/stable30
backport/52551/stable31
backport/52565/stable31
backport/52572/stable30
backport/52572/stable31
backport/52575/stable30
backport/52575/stable31
backport/52583/stable29
backport/52583/stable30
backport/52583/stable31
backport/52587/stable30
backport/52589/stable30
backport/52589/stable31
backport/52628/stable26
backport/52628/stable27
backport/52628/stable28
backport/52628/stable29
backport/52628/stable30
backport/52628/stable31
backport/52630/stable31
backport/52634/stable31
backport/52642/stable30
backport/52642/stable31
backport/52665/stable31
backport/52681/stable30
backport/52681/stable31
backport/52686/stable30
backport/52686/stable31
backport/52693/stable30
backport/52693/stable31
backport/52694/stable30
backport/52694/stable31
backport/52699/stable30
backport/52699/stable31
backport/52703/stable31
backport/52706/stable30
backport/52706/stable31
backport/52707/stable29
backport/52707/stable30
backport/52707/stable31
backport/52708/stable29
backport/52708/stable30
backport/52708/stable31
backport/52752/stable30
backport/52752/stable31
backport/52755/stable29
backport/52755/stable30
backport/52771/stable31
backport/52772/stable29
backport/52772/stable30
backport/52772/stable31
backport/52775/stable29
backport/52775/stable30
backport/52775/stable31
backport/52776/stable30
backport/52776/stable31
backport/52778/stable30
backport/52778/stable31
backport/52782/stable30
backport/52782/stable31
backport/52792/stable31
backport/52798/stable30
backport/52798/stable31
backport/52808/stable30
backport/52809/stable30
backport/52809/stable31
backport/52810/stable31
backport/52813/stable30
backport/52813/stable31
backport/52825/stable29
backport/52825/stable30
backport/52825/stable31
backport/52833/stable30
backport/52833/stable31
backport/52850/stable29
backport/52851/stable30
backport/52851/stable31
backport/52859/stable30
backport/52859/stable31
backport/52871/stable31
backport/52873/stable30
backport/52873/stable31
backport/52879/stable30
backport/52879/stable31
backport/52891/stable30
backport/52891/stable31
backport/52897/stable30
backport/52897/stable31
backport/52914/stable30
backport/52914/stable31
backport/52932/stable30
backport/52932/stable31
backport/52951/stable29
backport/52951/stable30
backport/52951/stable31
backport/52963/stable30
backport/52963/stable31
backport/52972/stable30
backport/52972/stable31
backport/52976/stable29
backport/52976/stable30
backport/52976/stable31
backport/52981/stable29
backport/52981/stable30
backport/52981/stable31
backport/52996/stable30
backport/52996/stable31
backport/53000/stable30
backport/53000/stable31
backport/53001/stable30
backport/53001/stable31
backport/53005/stable30
backport/53005/stable31
backport/53029/stable30
backport/53029/stable31
backport/53032/stable31
backport/53054/stable30
backport/53054/stable31
backport/53055/master
backport/53075/stable30
backport/53075/stable31
backport/53109/stable30
backport/53109/stable31
backport/53112/stable30
backport/53112/stable31
backport/53120/stable29
backport/53120/stable30
backport/53120/stable31
backport/53124/stable30
backport/53124/stable31
backport/53130/stable29
backport/53130/stable30
backport/53130/stable31
backport/53131/stable30
backport/53131/stable31
backport/53140/stable30
backport/53140/stable31
backport/53145/stable30
backport/53145/stable31
backport/53147/stable30
backport/53147/stable31
backport/53171/stable30
backport/53171/stable31
backport/53178/stable30
backport/53178/stable31
backport/53198/stable29
backport/53198/stable30
backport/53198/stable31
backport/53205/stable30
backport/53205/stable31
backport/53210/stable30
backport/53210/stable31
backport/53244/stable31
backport/53250/stable29
backport/53250/stable30
backport/53250/stable31
backport/53264/stable30
backport/53264/stable31
backport/53273/stable31
backport/53274/stable30
backport/53274/stable31
backport/53275/stable31
backport/53276/stable30
backport/53276/stable31
backport/53277/stable31
backport/53278/stable30
backport/53285/stable30
backport/53285/stable31
backport/53291/stable30
backport/53291/stable31
backport/53292/stable29
backport/53292/stable30
backport/53292/stable31
backport/53295/stable27
backport/53295/stable28
backport/53304/stable30
backport/53304/stable31
backport/53314/stable30
backport/53314/stable31
backport/53321/stable29
backport/53321/stable30
backport/53321/stable31
backport/53322/stable31
backport/53323/stable30
backport/53323/stable31
backport/53326/stable30
backport/53326/stable31
backport/53339/stable31
backport/53356/stable29
backport/53363/stable30
backport/53363/stable31
backport/53369/stable30
backport/53369/stable31
backport/53378/stable30
backport/53378/stable31
backport/53398/stable30
backport/53398/stable31
backport/53418/stable30
backport/53418/stable31
backport/53419/stable30
backport/53419/stable31
backport/53420/stable30
backport/53420/stable31
backport/53426/stable30
backport/53426/stable31
backport/53427/stable31
backport/53429/stable30
backport/53429/stable31
backport/53436/stable30
backport/53436/stable31
backport/53466/stable30
backport/53466/stable31
backport/53477/stable31
backport/53498/stable30
backport/53498/stable31
backport/53499/stable30
backport/53499/stable31
backport/53501/stable30
backport/53501/stable31
backport/53512/stable30
backport/53512/stable31
backport/53514/stable31
backport/53534/stable30
backport/53534/stable31
backport/53548/stable31
backport/53564/stable30
backport/53564/stable31
backport/53567/stable30
backport/53567/stable31
backport/53569/stable31
backport/53574/stable30
backport/53574/stable31
backport/53590/stable31
backport/53607/stable30
backport/53607/stable31
backport/53616/stable30
backport/53616/stable31
backport/53635/stable30
backport/53635/stable31
backport/53639/stable30
backport/53639/stable31
backport/53647/stable31
backport/53648/stable30
backport/53648/stable31
backport/53661/stable31
backport/53665/stable30
backport/53665/stable31
backport/53669/stable31
backport/53677/stable30
backport/53677/stable31
backport/53693/stable30
backport/53693/stable31
backport/53695/stable30
backport/53695/stable31
backport/53698/stable31
backport/53730/stable30
backport/53735/stable31
backport/53738/stable30
backport/53738/stable31
backport/53741/stable30
backport/53741/stable31
backport/53764/stable31
backport/53767/stable30
backport/53767/stable31
backport/53773/stable29
backport/53788/stable31
backport/53814/stable30
backport/53814/stable31
backport/53840/stable30
backport/53840/stable31
backport/53855/stable30
backport/53855/stable31
backport/53857/stable31
backport/53872/stable30
backport/53872/stable31
backport/53875/stable31
backport/53887/stable30
backport/53887/stable31
backport/53897/stable31
backport/53909/stable30
backport/53909/stable31
backport/53922/stable30
backport/53922/stable31
backport/53950/stable30
backport/53950/stable31
backport/53964/stable30
backport/53964/stable31
backport/53966/stable30
backport/53967/stable30
backport/53967/stable31
backport/53968/stable30
backport/53968/stable31
backport/53972/stable31
backport/53979/stable30
backport/53979/stable31
backport/53983/stable30
backport/53983/stable31
backport/53986/stable30
backport/53986/stable31
backport/53992/stable30
backport/53992/stable31
backport/54003/stable31
backport/54005/stable30
backport/54005/stable31
backport/54014/stable31
backport/54016/stable31
backport/54019/stable29
backport/54019/stable30
backport/54019/stable31
backport/54027/stable29
backport/54027/stable30
backport/54027/stable31
backport/54037/stable30
backport/54037/stable31
backport/54049/stable31
backport/54051/stable30
backport/54051/stable31
backport/54055/stable30
backport/54055/stable31
backport/54068/stable30
backport/54068/stable31
backport/54084/stable31
backport/54119/stable31
backport/54121/stable31
backport/54125/stable31
backport/54159/stable30
backport/54159/stable31
backport/54167/stable30
backport/54167/stable31
backport/54171/stable31
backport/54172/stable30
backport/54172/stable31
backport/54179/stable30
backport/54179/stable31
backport/54182/stable29
backport/54182/stable30
backport/54182/stable31
backport/54192/stable31
backport/54203/stable30
backport/54203/stable31
backport/54207/stable31
backport/54230/stable30
backport/54230/stable31
backport/54233/stable30
backport/54233/stable31
backport/54240/stable31
backport/54264/stable30
backport/54264/stable31
backport/54266/stable30
backport/54269/stable31
backport/54270/stable30
backport/54298/stable27
backport/54298/stable28
backport/54298/stable29
backport/54298/stable30
backport/54298/stable31
backport/cachebuster-stable30
backport/dav-get
backport/fix-files-title
backport/object-store-orphan/27
backportArrayKeySetupCheks
block-dav-move-parent
branchoff/welcome-stable31
bug/19494/insert-ignore-conflict-for-filecache-extended
bug/30282/wrap-curl-in-stream-handler
bug/48518/ignore-invalid-dates
bug/48678/restore-dav-error-response
bug/48678/restore-dav-error-response-2
bug/49395/handle-multiple-tags
bug/49834/calendar-unsharing
bug/52977/opcache-reset-after-app-extract
bug/53243/wrong-app-id-for-systemtags-settings
bug/53811/charset-imip
bug/53856/hide-password-on-submit
bug/noid/clear-dav-photo-cache
bug/noid/codeowners-caldav-carddav
bug/noid/context-for-imip-warnings
bug/noid/drop-group-exists-cache-fetch-list-of-groups
bug/noid/expires-date-format
bug/noid/federated-addressbook-sync-without-localaddressallowed
bug/noid/federation-background-job-same-url-different-token
bug/noid/fix-wrong-table-name-reminders
bug/noid/group-imip-logs-in-sentry
bug/noid/handle-n-attendees-in-imip-cancel
bug/noid/hide-guests-groups
bug/noid/log-absolute-path-for-locked-exception-through-view
bug/noid/log-requests-exceeding-rate-limit
bug/noid/more-routing-weirdness
bug/noid/principal-guest_app-not-found
bug/noid/principal-guest_app-not-found-pt2
bug/noid/profile-clear-not-working
bug/noid/self-signed-trusted-servers-address-book-sync
bug/noid/skip-exceptions-in-transfer-ownership
bug/noid/skip-quote-cache-for-remote-shares
bug/noid/take-groups-and-circles-into-account-for-unshares
bug/noid/weird-ldap-caching
bugfix/45481/controller-parameter-overwrite
bugfix/47658/dont-fail-precondition-if-unset
bugfix/49973/allow-federated-filesharing-without-federation-app
bugfix/50443/fix-log-level-handling
bugfix/50619/correctly-init-server
bugfix/50619/no-session-work-in-constructor
bugfix/51082/restore-BC
bugfix/51248/no-session-work-in-constructor
bugfix/52420/closure-as-default-app
bugfix/53157/fix-hasNotifier-check
bugfix/53457/red-ci
bugfix/53985/trigger-update-for-autodisabled-local-apps
bugfix/cleanup-s3-multipart
bugfix/error-on-reshare-after-transfer-ownership
bugfix/exception-appscreenshot-notstring
bugfix/fix-not-found-exception-for-anonymous-users
bugfix/fix-service-worker-scope
bugfix/ios-3365/allow-2fa-for-ephemeral-sessions
bugfix/l10n-leading-spaces
bugfix/noid/add-missing-blurhash
bugfix/noid/allow-ratelimit-bypass
bugfix/noid/allow-to-fail-fake-AI-providers
bugfix/noid/allow-to-force-db-throttler
bugfix/noid/allow-to-get-permissions-of-a-principal
bugfix/noid/array-keys
bugfix/noid/background-job-testing
bugfix/noid/bump-php-dependency-update-versions
bugfix/noid/censor-more-app-configs
bugfix/noid/censor-more-values
bugfix/noid/compatibility-with-30
bugfix/noid/consistent-handling-of-SensitiveParameter
bugfix/noid/copy-better-typing-from-notifications-app
bugfix/noid/create-a-gap-before-files
bugfix/noid/document-hide-download
bugfix/noid/document-icon-requirements
bugfix/noid/dont-break-when-checking-if-too-long-user-exists
bugfix/noid/ensure-translation-of-shipped-apps
bugfix/noid/fix-activity-parameter-types
bugfix/noid/fix-autocomplete-of-app-configs
bugfix/noid/fix-cached-return-of-display-name
bugfix/noid/fix-download-activity-parameters
bugfix/noid/fix-icon-builder-warning
bugfix/noid/fix-infinite-loop-on-parallelaware-block
bugfix/noid/fix-oauth2-owncloud-migration
bugfix/noid/fix-otf-loading
bugfix/noid/fix-psr4-class
bugfix/noid/fix-room-or-resource-condition
bugfix/noid/fix-rtl-language-list
bugfix/noid/fix-tainted-file-appinfo
bugfix/noid/fix-triple-dot-translation
bugfix/noid/fix-type-error
bugfix/noid/ignore-sensitivity-when-explicitly-scheduled
bugfix/noid/improve-english-sources
bugfix/noid/improve-installation-speed-of-oracle
bugfix/noid/increase-exclude-list
bugfix/noid/keep-job-class-limitation
bugfix/noid/last-insert-id-when-reconnecting
bugfix/noid/make-comments-test-better-readable
bugfix/noid/mark-more-configs-as-sensitive
bugfix/noid/more-reliable-tests
bugfix/noid/only-check-to-cleanup-chunks-once
bugfix/noid/oracle-federation
bugfix/noid/prevent-infitnite-loop
bugfix/noid/remove-3rdparty-use
bugfix/noid/remove-more-withConsecutive
bugfix/noid/remove-sleep-from-throttler
bugfix/noid/run-all-unit-tests
bugfix/noid/skip-future-shipped-apps-from-updatenotification-check
bugfix/noid/update-opendyslexic
bugfix/noid/update-phpunit
bugfix/noid/use-query-parameters
bugfix/noid/user-ldap-cert-issue-8.3.21
bugfix/noid/user_status-unique-constraint
bugfix/noid/validate-parameter-keys
bugfix/spreed-15625/log-query-with-immutable-dates
bugfix/trim-tags
build/autoloader/remove-noisy-changes
build/integration/disable-password_policy-app
build/psalm/unstable-namespace
build/translation-checker-print-rtl-limited-characters
build/update-psalm-baseline
cache-delete-notfound-size
cache-rename-source-error
canceled-overwrite
case-insensitive-login
castUsersCountToInt
catchNullHash
certificate-manager-fallback
check-phpoutdated
checkColExists
checkResultArray
checkStorageIdSetCache
checkValidEncoding
chore-check-for-composer-bin
chore/30-symfony
chore/30-update-vue
chore/31-doctrine
chore/31-phpseclib
chore/31-symfony
chore/31-update-vue
chore/3rdparty-stecman-console
chore/48408/rename-twitter-to-x
chore/48409/replace-diaspora-and-twitter
chore/add-deprecation-date
chore/app-owners
chore/backport-50985
chore/behat-indention
chore/clean-sharing
chore/cleanup-warnings
chore/codeowners
chore/consistent-naming
chore/constants/sort
chore/cypress-typos
chore/dav/first-class-callable
chore/dav/refactor-inline-listeners
chore/debug-output
chore/dependabot
chore/depreate-oc-helper-ro
chore/deprecate-ochelper-copyr
chore/deps-nextcloud-vue-8-28
chore/deps/nextcloud-calendar-availability-vue-2.2.5
chore/deps/nextcloud-calendar-availability-vue-2.2.6
chore/deps/nextcloud-coding-standard
chore/deps/nextcloud-vue-8.22.0
chore/deps/openapi-extractor
chore/deps/rector-2.0
chore/drop-deprecated-account-scopes
chore/drop-jsdoc
chore/drop-query-string-dependency
chore/drop-skjnldsv/sanitize-svg
chore/encryption-php10
chore/files-consolitate-route-logic
chore/files-public-api
chore/files-title
chore/first-login-hours-minutes
chore/force-style-lint
chore/gender-neutral-language
chore/github/groupware-code-owners-update
chore/ignore-3rdparty
chore/ignore-code-style
chore/integration/hide-webserver-logs
chore/laravel-php84
chore/lazy-mount-providers
chore/legacy-updatenotification
chore/mail-bisect-6e1d9a26209ec5524fbc2fb9c7cbb53315e64d72
chore/mail-bisect-ee48cafd200233203a1444dba797ef3eb89a35ca
chore/mailer-tests
chore/master-searchdav
chore/migrate-encryption-away-from-hooks
chore/migrate-vite
chore/move-impl-util
chore/move-smb-package
chore/move-stream-copy-implementation
chore/ncselect-label-warning
chore/nextcloud-dialogs
chore/nextcloud-dialogs-master
chore/nextcloud-dialogs-stable29
chore/nextcloud-vue-8.13.0
chore/nix-flake
chore/no-moment
chore/node-moved-old-node
chore/noid/clarify-comments-api
chore/noid/coverage
chore/noid/disable-codecove-locally
chore/noid/git-blame-ignore-revs
chore/noid/use-same-app-id
chore/oc-helper-can-exec
chore/oc-helper-filesize
chore/oc-helper-rmdirr
chore/openstack-3-12
chore/phpseclib-30
chore/prepare-oc_repair-unit10
chore/psalm-test
chore/public/user-mount-events-union-type
chore/refactor-core
chore/refactor-header-scss
chore/refactor-update-notification+
chore/remove-dead-code-files
chore/remove-deprecated-aliases
chore/remove-deprecated-oc-helper
chore/remove-deprecated-package
chore/remove-files-templates
chore/remove-get-storage
chore/remove-hierarchical-shares
chore/remove-ijob-execute
chore/remove-ilogger
chore/remove-legacy-files-scripts
chore/remove-legacy-settings-fors
chore/remove-live-timestamps
chore/remove-old-test
chore/remove-travis
chore/request-reviews
chore/s30-deps-nextcloud-vue-8-28
chore/s31-deps-nextcloud-vue-8-28
chore/server-annotations
chore/share-constants
chore/stable30-doctrine
chore/stable30-laravel
chore/stable30-vue_8_23_1
chore/stable31-laravel
chore/support-longer-names
chore/switch-deps
chore/symfony-http
chore/symfony-process
chore/tests-hot-key
chore/too-many-arguments
chore/typo
chore/update-3rdparty
chore/update-guzzle7
chore/update-gw-codeowners-2
chore/update-nc-libs-stable29
chore/update-nc-libs-stable30
chore/update-nextcloud-vue-23_1
chore/update-openstack
chore/update-sass-loader
chore/update-stub
chore/update-symfony
chore/update_mysql_setup_check_i18n
chore/upload-1-9-1
chore/use-codeowners-instead
chore/use-nextcloud-cypress-docker-node
chore/use-public-api-helper
chore/user-mount-events-since
ci-fix-30
ci-mariadb-118
ci/49145/php-8.4-external-storages
ci/codeql/convert-to-action
ci/codeql/ignore-dist
ci/noid/3rdparty
ci/noid/3rdparty-29
ci/noid/3rdparty-30
ci/noid/3rdparty-31
ci/noid/crl31
ci/noid/debug-broken-ci
ci/noid/enable-required-php-extensions
ci/noid/fail-fast-false
ci/noid/ghActionSync
ci/noid/improve-running-psalm-locally
ci/noid/make-run-names-distinct
ci/noid/more-action-hardening
ci/noid/more-action-hardening-31
ci/noid/php-8.4
ci/noid/prepare-phpunit-10
ci/noid/prepare-phpunit10-part2
ci/noid/require-up-to-date-psalm-paseline
ci/noid/run-some-autochecks-also-on-non-php-files
ci/noid/skip-other-vendor-bins-when-only-running-psalm
ci/noid/syncActions
ci/noid/syncActions30
ci/noid/try-to-fix-smb-kerberos
ci/noid/update-integration-test-stuff
ci/noid/update-phpunit10
ci/noid/workflows-stable31
ci/oracle
ci/oracle-2
ci/phpunit-10
ci/phpunit-10--process-isolation
ci/psalm/imagick-extension
ci/request-reviews-perms
ci/revert/47342
ci/sso
ciBumpPhpUnit10
clean/version-ocp
cleanup-appframework-spreed
cleanup-legacy-trash
cleanup/event/trashbin
cleanup/karma
clear-pending-two-factor-tokens-also-from-configuration
clearKeysInBatches
combine-query-cache-entry-deleted
confWordingReview
config-carddav-sync-request-timeout
config-system-set-json
container-optimizations
contctsinteraction-usersetting
copy-all-permissions
copy-share-unmasked
copy-update-cache-excluded
copyr-no-empty-newfile
correctParentStorageMtime-id
custom-properties-preload-negative
dav-external-url-encoded-root
dav-file-write-log
dav-fix-birthday-sync
dav-open-log-path
dav-push-sync
dav-webcal-default-refresh-rate
davTagColor
db-error-logging-27
db-error-logging-28
dbQueriesExecStmt
dbQueriesExecStmt2
dbQueriesExecStmt3
dbQueriesToMaster
dbal-exception-query
dbg/noid/perms
debt/federation-qb-mapper
debt/noid/ignore-docker-image-lock-file
debt/noid/simple-file-generic-exception
debt/noid/use-logical-operator
debt/noid/user-changed-event
debt/noid/wrong-return-type-iresponse
debt/noid/wrong-return-type-nullcache
debug-cypress-grid-view
debug-file-exists-backtrace
debug-shares-in-folder-ownerless
debug/31-performance-patches
debug/66440/logs-for-debugging-slow-user-list
debug/72738/log-quota-info-regarding-expiration
debug/doctrine/dbal
debug/download-permision
debug/failing-notifications
debug/noid/encryption-fail
debug/noid/imaginary
debug/noid/log-ram-usage-with-threshold
debug/noid/log-reason-token-mismatch
debug/noid/log-reason-token-mismatch-stable27
debug/noid/log-reason-token-mismatch-stable29
debug/noid/log-reason-token-mismatch-stable31
debug/preview-invalid-id
debug/snae
def-share-provider-filecache-joins
default-navigation-reuse
deleteExistingTarget
dep/nextcloud
dependabot/composer/aws/aws-sdk-php-3.324.13
dependabot/composer/aws/aws-sdk-php-3.349.3
dependabot/composer/build/integration/behat/behat-3.17.0
dependabot/composer/build/integration/behat/behat-3.18.1
dependabot/composer/build/integration/behat/behat-3.19.0
dependabot/composer/build/integration/behat/behat-3.21.0
dependabot/composer/build/integration/behat/behat-3.21.1
dependabot/composer/build/integration/behat/behat-3.22.0
dependabot/composer/build/integration/behat/behat-3.23.0
dependabot/composer/build/integration/guzzlehttp/guzzle-7.9.3
dependabot/composer/build/integration/stable30/guzzlehttp/guzzle-7.9.3
dependabot/composer/build/integration/stable30/phpunit/phpunit-9.6.22
dependabot/composer/build/integration/stable30/phpunit/phpunit-9.6.23
dependabot/composer/build/integration/stable30/symfony/event-dispatcher-5.4.45
dependabot/composer/build/integration/stable31/behat/behat-3.16.1
dependabot/composer/build/integration/stable31/guzzlehttp/guzzle-7.9.3
dependabot/composer/build/integration/stable31/phpunit/phpunit-9.6.22
dependabot/composer/build/integration/stable31/phpunit/phpunit-9.6.23
dependabot/composer/build/integration/stable31/symfony/event-dispatcher-6.4.24
dependabot/composer/doctrine/dbal-3.9.x
dependabot/composer/doctrine/dbal-4.0.4
dependabot/composer/egulias/email-validator-4.0.4
dependabot/composer/fusonic/opengraph-3.0.0
dependabot/composer/giggsey/libphonenumber-for-php-lite-8.13.45
dependabot/composer/giggsey/libphonenumber-for-php-lite-8.13.48
dependabot/composer/giggsey/libphonenumber-for-php-lite-9.0.9
dependabot/composer/guzzlehttp/guzzle-7.9.2
dependabot/composer/icewind/streams-0.7.8
dependabot/composer/laravel/serializable-closure-1.3.5
dependabot/composer/mlocati/ip-lib-1.18.1
dependabot/composer/mlocati/ip-lib-1.20.0
dependabot/composer/pear/pear-core-minimal-1.10.16
dependabot/composer/sabre/dav-4.7.0
dependabot/composer/stable28/aws/aws-sdk-php-3.240.11
dependabot/composer/stable30/doctrine/dbal-3.9.1
dependabot/composer/stable30/giggsey/libphonenumber-for-php-lite-8.13.45
dependabot/composer/stable30/guzzlehttp/guzzle-7.8.2
dependabot/composer/stable30/laravel/serializable-closure-1.3.5
dependabot/composer/stable30/mlocati/ip-lib-1.18.1
dependabot/composer/stable30/symfony-3c0242c262
dependabot/composer/stable30/symfony-6.4
dependabot/composer/stable30/web-auth/webauthn-lib-4.8.7
dependabot/composer/symfony-6.4
dependabot/composer/symfony-929f96b730
dependabot/composer/symfony/stable29
dependabot/composer/symfony/string-6.4.13
dependabot/composer/vendor-bin/cs-fixer/nextcloud/coding-standard-1.3.0
dependabot/composer/vendor-bin/cs-fixer/nextcloud/coding-standard-1.3.2
dependabot/composer/vendor-bin/cs-fixer/nextcloud/coding-standard-1.4.0
dependabot/composer/vendor-bin/cs-fixer/stable30/nextcloud/coding-standard-1.2.2
dependabot/composer/vendor-bin/cs-fixer/stable30/nextcloud/coding-standard-1.2.3
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.0.1
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.1.0
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.2.2
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.3.0
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.4.0
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.5.0
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.5.1
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.5.3
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.6.0
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.7.0
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.8.0
dependabot/composer/vendor-bin/openapi-extractor/nextcloud/openapi-extractor-1.8.1
dependabot/composer/vendor-bin/openapi-extractor/stable30/nextcloud/openapi-extractor-1.0.1
dependabot/composer/vendor-bin/phpunit/stable30/phpunit/phpunit-9.6.22
dependabot/composer/vendor-bin/phpunit/stable30/phpunit/phpunit-9.6.23
dependabot/composer/vendor-bin/phpunit/stable31/phpunit/phpunit-9.6.22
dependabot/composer/vendor-bin/phpunit/stable31/phpunit/phpunit-9.6.23
dependabot/composer/vendor-bin/rector/rector/rector-2.0.17
dependabot/composer/vendor-bin/rector/rector/rector-2.0.18
dependabot/composer/vendor-bin/rector/rector/rector-2.1.1
dependabot/composer/vendor-bin/rector/rector/rector-2.1.2
dependabot/composer/wapmorgan/mp3info-0.1.1
dependabot/composer/web-auth/webauthn-lib-4.9.1
dependabot/github_actions/github-actions-062573ba34
dependabot/github_actions/github-actions-1204f2af31
dependabot/github_actions/github-actions-375e75ddd3
dependabot/github_actions/github-actions-3d94f56bd5
dependabot/github_actions/github-actions-510ea978f9
dependabot/github_actions/github-actions-52fdf4f9c4
dependabot/github_actions/github-actions-55de95cf11
dependabot/github_actions/github-actions-560ea78344
dependabot/github_actions/github-actions-5765af399d
dependabot/github_actions/github-actions-74498d6e3a
dependabot/github_actions/github-actions-962ddf9a44
dependabot/github_actions/github-actions-96894264d4
dependabot/github_actions/github-actions-a0ac68e364
dependabot/github_actions/github-actions-aa3137d618
dependabot/github_actions/github-actions-e6e62c2646
dependabot/npm_and_yarn/babel-loader-10.0.0
dependabot/npm_and_yarn/babel-loader-9.2.1
dependabot/npm_and_yarn/babel/node-7.25.7
dependabot/npm_and_yarn/babel/node-7.26.0
dependabot/npm_and_yarn/babel/node-7.27.1
dependabot/npm_and_yarn/babel/plugin-transform-private-methods-7.25.4
dependabot/npm_and_yarn/babel/plugin-transform-private-methods-7.25.7
dependabot/npm_and_yarn/babel/plugin-transform-private-methods-7.25.9
dependabot/npm_and_yarn/babel/plugin-transform-private-methods-7.27.1
dependabot/npm_and_yarn/babel/preset-typescript-7.27.0
dependabot/npm_and_yarn/babel/preset-typescript-7.27.1
dependabot/npm_and_yarn/backbone-1.6.1
dependabot/npm_and_yarn/brace-expansion-1.1.12
dependabot/npm_and_yarn/chenfengyuan/vue-qrcode-2.0.0
dependabot/npm_and_yarn/codecov/webpack-plugin-1.9.1
dependabot/npm_and_yarn/color-5.0.0
dependabot/npm_and_yarn/core-js-3.39.0
dependabot/npm_and_yarn/core-js-3.40.0
dependabot/npm_and_yarn/core-js-3.41.0
dependabot/npm_and_yarn/core-js-3.42.0
dependabot/npm_and_yarn/cross-spawn-7.0.6
dependabot/npm_and_yarn/cypress-13.15.0
dependabot/npm_and_yarn/cypress-13.17.0
dependabot/npm_and_yarn/cypress-14.2.0
dependabot/npm_and_yarn/cypress-14.2.1
dependabot/npm_and_yarn/cypress-14.3.0
dependabot/npm_and_yarn/cypress-14.3.1
dependabot/npm_and_yarn/cypress-14.3.2
dependabot/npm_and_yarn/cypress-14.3.3
dependabot/npm_and_yarn/cypress-14.4.0
dependabot/npm_and_yarn/cypress-axe-1.6.0
dependabot/npm_and_yarn/cypress-if-1.13.2
dependabot/npm_and_yarn/cypress-split-1.24.14
dependabot/npm_and_yarn/cypress-split-1.24.15
dependabot/npm_and_yarn/cypress-split-1.24.17
dependabot/npm_and_yarn/cypress-split-1.24.18
dependabot/npm_and_yarn/cypress-split-1.24.20
dependabot/npm_and_yarn/cypress-split-1.24.7
dependabot/npm_and_yarn/cypress-split-1.24.9
dependabot/npm_and_yarn/debounce-2.1.1
dependabot/npm_and_yarn/debounce-2.2.0
dependabot/npm_and_yarn/dockerode-4.0.4
dependabot/npm_and_yarn/dockerode-4.0.5
dependabot/npm_and_yarn/dockerode-4.0.6
dependabot/npm_and_yarn/dockerode-4.0.7
dependabot/npm_and_yarn/dompurify-3.1.7
dependabot/npm_and_yarn/dompurify-3.2.4
dependabot/npm_and_yarn/dompurify-3.2.5
dependabot/npm_and_yarn/dompurify-3.2.6
dependabot/npm_and_yarn/elliptic-6.6.0
dependabot/npm_and_yarn/elliptic-6.6.1
dependabot/npm_and_yarn/eslint-plugin-cypress-4.1.0
dependabot/npm_and_yarn/eslint-plugin-cypress-5.0.1
dependabot/npm_and_yarn/focus-trap-7.6.0
dependabot/npm_and_yarn/focus-trap-7.6.4
dependabot/npm_and_yarn/focus-trap-7.6.5
dependabot/npm_and_yarn/http-proxy-middleware-2.0.9
dependabot/npm_and_yarn/is-svg-6.0.0
dependabot/npm_and_yarn/is-svg-6.1.0
dependabot/npm_and_yarn/jquery-ui-1.14.0
dependabot/npm_and_yarn/jquery-ui-1.14.1
dependabot/npm_and_yarn/jsdoc-4.0.4
dependabot/npm_and_yarn/jsdom-26.1.0
dependabot/npm_and_yarn/libphonenumber-js-1.11.16
dependabot/npm_and_yarn/libphonenumber-js-1.11.17
dependabot/npm_and_yarn/libphonenumber-js-1.11.9
dependabot/npm_and_yarn/libphonenumber-js-1.12.6
dependabot/npm_and_yarn/libphonenumber-js-1.12.7
dependabot/npm_and_yarn/libphonenumber-js-1.12.8
dependabot/npm_and_yarn/libphonenumber-js-1.12.9
dependabot/npm_and_yarn/linkifyjs-4.3.2
dependabot/npm_and_yarn/marked-14.1.1
dependabot/npm_and_yarn/marked-15.0.0
dependabot/npm_and_yarn/marked-15.0.11
dependabot/npm_and_yarn/marked-15.0.12
dependabot/npm_and_yarn/marked-15.0.4
dependabot/npm_and_yarn/marked-15.0.7
dependabot/npm_and_yarn/marked-15.0.8
dependabot/npm_and_yarn/marked-16.1.1
dependabot/npm_and_yarn/mime-4.0.6
dependabot/npm_and_yarn/mime-4.0.7
dependabot/npm_and_yarn/moment-timezone-0.5.47
dependabot/npm_and_yarn/moment-timezone-0.5.48
dependabot/npm_and_yarn/moment-timezone-0.6.0
dependabot/npm_and_yarn/multi-206390e743
dependabot/npm_and_yarn/multi-2299424a7d
dependabot/npm_and_yarn/multi-843fc42519
dependabot/npm_and_yarn/multi-9423f4c335
dependabot/npm_and_yarn/multi-cf87d80143
dependabot/npm_and_yarn/multi-d66d039ac5
dependabot/npm_and_yarn/nanoid-3.3.8
dependabot/npm_and_yarn/nextcloud/axios-2.5.1
dependabot/npm_and_yarn/nextcloud/calendar-availability-vue-2.2.4
dependabot/npm_and_yarn/nextcloud/cypress-1.0.0-beta.12
dependabot/npm_and_yarn/nextcloud/cypress-1.0.0-beta.14
dependabot/npm_and_yarn/nextcloud/cypress-1.0.0-beta.15
dependabot/npm_and_yarn/nextcloud/cypress-1.0.0-beta.9
dependabot/npm_and_yarn/nextcloud/dialogs-6.2.0
dependabot/npm_and_yarn/nextcloud/dialogs-6.3.0
dependabot/npm_and_yarn/nextcloud/eslint-config-8.4.2
dependabot/npm_and_yarn/nextcloud/event-bus-3.3.2
dependabot/npm_and_yarn/nextcloud/files-3.10.2
dependabot/npm_and_yarn/nextcloud/l10n-3.3.0
dependabot/npm_and_yarn/nextcloud/moment-1.3.4
dependabot/npm_and_yarn/nextcloud/password-confirmation-5.3.1
dependabot/npm_and_yarn/nextcloud/stylelint-config-3.1.0
dependabot/npm_and_yarn/nextcloud/upload-1.6.1
dependabot/npm_and_yarn/nextcloud/vue-8.19.0
dependabot/npm_and_yarn/nextcloud/vue-8.20.0
dependabot/npm_and_yarn/nextcloud/vue-8.25.1
dependabot/npm_and_yarn/nextcloud/vue-8.26.0
dependabot/npm_and_yarn/nextcloud/vue-8.26.1
dependabot/npm_and_yarn/nextcloud/webpack-vue-config-6.3.0
dependabot/npm_and_yarn/node-vibrant-4.0.3
dependabot/npm_and_yarn/p-limit-6.2.0
dependabot/npm_and_yarn/p-queue-8.1.0
dependabot/npm_and_yarn/pbkdf2-3.1.3
dependabot/npm_and_yarn/pinia-2.2.6
dependabot/npm_and_yarn/pinia-2.3.0
dependabot/npm_and_yarn/pinia-2.3.1
dependabot/npm_and_yarn/pinia-3.0.1
dependabot/npm_and_yarn/pinia/testing-0.1.6
dependabot/npm_and_yarn/pinia/testing-0.1.7
dependabot/npm_and_yarn/pinia/testing-1.0.1
dependabot/npm_and_yarn/puppeteer-23.10.4
dependabot/npm_and_yarn/puppeteer-23.4.1
dependabot/npm_and_yarn/puppeteer-23.5.0
dependabot/npm_and_yarn/puppeteer-24.1.0
dependabot/npm_and_yarn/puppeteer-24.10.0
dependabot/npm_and_yarn/puppeteer-24.10.2
dependabot/npm_and_yarn/puppeteer-24.6.1
dependabot/npm_and_yarn/puppeteer-24.7.0
dependabot/npm_and_yarn/puppeteer-24.7.2
dependabot/npm_and_yarn/puppeteer-24.8.0
dependabot/npm_and_yarn/puppeteer-24.8.2
dependabot/npm_and_yarn/puppeteer-24.9.0
dependabot/npm_and_yarn/query-string-9.1.1
dependabot/npm_and_yarn/query-string-9.1.2
dependabot/npm_and_yarn/query-string-9.2.0
dependabot/npm_and_yarn/sass-1.79.3
dependabot/npm_and_yarn/sass-1.81.0
dependabot/npm_and_yarn/sass-1.85.1
dependabot/npm_and_yarn/sass-1.86.3
dependabot/npm_and_yarn/sass-1.87.0
dependabot/npm_and_yarn/sass-1.88.0
dependabot/npm_and_yarn/sass-1.89.0
dependabot/npm_and_yarn/sass-1.89.1
dependabot/npm_and_yarn/sass-1.89.2
dependabot/npm_and_yarn/sass-loader-16.0.3
dependabot/npm_and_yarn/sass-loader-16.0.5
dependabot/npm_and_yarn/simplewebauthn/browser-11.0.0
dependabot/npm_and_yarn/simplewebauthn/browser-13.1.0
dependabot/npm_and_yarn/simplewebauthn/types-12.0.0
dependabot/npm_and_yarn/stable28/babel/preset-typescript-7.24.7
dependabot/npm_and_yarn/stable28/browserslist-useragent-regexp-4.1.3
dependabot/npm_and_yarn/stable28/cypress-13.13.3
dependabot/npm_and_yarn/stable28/cypress-if-1.12.6
dependabot/npm_and_yarn/stable28/cypress/vue2-2.1.1
dependabot/npm_and_yarn/stable28/dompurify-3.1.7
dependabot/npm_and_yarn/stable28/karma-6.4.4
dependabot/npm_and_yarn/stable28/libphonenumber-js-1.10.64
dependabot/npm_and_yarn/stable28/moment-timezone-0.5.46
dependabot/npm_and_yarn/stable28/nextcloud/calendar-availability-vue-2.2.4
dependabot/npm_and_yarn/stable28/nextcloud/cypress-1.0.0-beta.10
dependabot/npm_and_yarn/stable28/nextcloud/cypress-1.0.0-beta.12
dependabot/npm_and_yarn/stable28/nextcloud/cypress-1.0.0-beta.9
dependabot/npm_and_yarn/stable28/nextcloud/dialogs-5.3.8
dependabot/npm_and_yarn/stable28/nextcloud/moment-1.3.2
dependabot/npm_and_yarn/stable28/nextcloud/password-confirmation-5.1.1
dependabot/npm_and_yarn/stable28/nextcloud/sharing-0.2.4
dependabot/npm_and_yarn/stable28/pinia-2.2.8
dependabot/npm_and_yarn/stable28/pinia/testing-0.1.6
dependabot/npm_and_yarn/stable28/pinia/testing-0.1.7
dependabot/npm_and_yarn/stable28/testing-library/jest-dom-6.4.8
dependabot/npm_and_yarn/stable28/types/jest-29.5.14
dependabot/npm_and_yarn/stable28/underscore-1.13.7
dependabot/npm_and_yarn/stable29/backbone-1.6.1
dependabot/npm_and_yarn/stable29/cypress-split-1.24.11
dependabot/npm_and_yarn/stable29/cypress-split-1.24.14
dependabot/npm_and_yarn/stable29/cypress-split-1.24.9
dependabot/npm_and_yarn/stable29/debounce-2.1.1
dependabot/npm_and_yarn/stable29/dockerode-4.0.3
dependabot/npm_and_yarn/stable29/dockerode-4.0.4
dependabot/npm_and_yarn/stable29/dompurify-3.1.7
dependabot/npm_and_yarn/stable29/dompurify-3.2.5
dependabot/npm_and_yarn/stable29/jquery-ui-1.13.3
dependabot/npm_and_yarn/stable29/jsdoc-4.0.3
dependabot/npm_and_yarn/stable29/jsdoc-4.0.4
dependabot/npm_and_yarn/stable29/libphonenumber-js-1.12.6
dependabot/npm_and_yarn/stable29/libphonenumber-js-1.12.7
dependabot/npm_and_yarn/stable29/mime-4.0.6
dependabot/npm_and_yarn/stable29/mime-4.0.7
dependabot/npm_and_yarn/stable29/moment-timezone-0.5.46
dependabot/npm_and_yarn/stable29/moment-timezone-0.5.47
dependabot/npm_and_yarn/stable29/moment-timezone-0.5.48
dependabot/npm_and_yarn/stable29/nextcloud/calendar-availability-vue-2.2.6
dependabot/npm_and_yarn/stable29/nextcloud/cypress-1.0.0-beta.12
dependabot/npm_and_yarn/stable29/nextcloud/cypress-1.0.0-beta.13
dependabot/npm_and_yarn/stable29/nextcloud/cypress-1.0.0-beta.14
dependabot/npm_and_yarn/stable29/nextcloud/event-bus-3.3.2
dependabot/npm_and_yarn/stable29/nextcloud/files-3.10.1
dependabot/npm_and_yarn/stable29/nextcloud/files-3.10.2
dependabot/npm_and_yarn/stable29/nextcloud/moment-1.3.2
dependabot/npm_and_yarn/stable29/nextcloud/sharing-0.2.4
dependabot/npm_and_yarn/stable29/nextcloud/upload-1.7.1
dependabot/npm_and_yarn/stable29/nextcloud/upload-1.9.1
dependabot/npm_and_yarn/stable29/nextcloud/vue-8.17.1
dependabot/npm_and_yarn/stable29/pinia-2.3.1
dependabot/npm_and_yarn/stable29/pinia/testing-0.1.7
dependabot/npm_and_yarn/stable29/tar-fs-2.1.3
dependabot/npm_and_yarn/stable29/testing-library/cypress-10.0.3
dependabot/npm_and_yarn/stable29/throttle-debounce-5.0.2
dependabot/npm_and_yarn/stable29/ts-jest-29.1.5
dependabot/npm_and_yarn/stable29/ts-loader-9.5.2
dependabot/npm_and_yarn/stable29/types/dockerode-3.3.34
dependabot/npm_and_yarn/stable29/types/dockerode-3.3.35
dependabot/npm_and_yarn/stable29/types/dockerode-3.3.37
dependabot/npm_and_yarn/stable29/types/dockerode-3.3.38
dependabot/npm_and_yarn/stable29/types/jest-29.5.14
dependabot/npm_and_yarn/stable29/typescript-5.8.3
dependabot/npm_and_yarn/stable29/vue-material-design-icons-5.3.1
dependabot/npm_and_yarn/stable29/vueuse/components-10.11.1
dependabot/npm_and_yarn/stable29/vueuse/core-10.11.1
dependabot/npm_and_yarn/stable29/vueuse/integrations-10.11.1
dependabot/npm_and_yarn/stable30/babel-loader-9.2.1
dependabot/npm_and_yarn/stable30/babel/node-7.26.0
dependabot/npm_and_yarn/stable30/babel/node-7.27.1
dependabot/npm_and_yarn/stable30/babel/plugin-transform-private-methods-7.25.9
dependabot/npm_and_yarn/stable30/babel/plugin-transform-private-methods-7.27.1
dependabot/npm_and_yarn/stable30/babel/preset-typescript-7.27.0
dependabot/npm_and_yarn/stable30/babel/preset-typescript-7.27.1
dependabot/npm_and_yarn/stable30/backbone-1.6.1
dependabot/npm_and_yarn/stable30/core-js-3.41.0
dependabot/npm_and_yarn/stable30/core-js-3.42.0
dependabot/npm_and_yarn/stable30/core-js-3.43.0
dependabot/npm_and_yarn/stable30/cypress-13.13.3
dependabot/npm_and_yarn/stable30/cypress-13.17.0
dependabot/npm_and_yarn/stable30/cypress-axe-1.6.0
dependabot/npm_and_yarn/stable30/cypress-if-1.12.6
dependabot/npm_and_yarn/stable30/cypress-if-1.13.2
dependabot/npm_and_yarn/stable30/cypress-split-1.24.11
dependabot/npm_and_yarn/stable30/cypress-split-1.24.14
dependabot/npm_and_yarn/stable30/cypress-split-1.24.15
dependabot/npm_and_yarn/stable30/cypress-split-1.24.17
dependabot/npm_and_yarn/stable30/cypress-split-1.24.18
dependabot/npm_and_yarn/stable30/cypress-split-1.24.9
dependabot/npm_and_yarn/stable30/cypress/webpack-preprocessor-6.0.4
dependabot/npm_and_yarn/stable30/debounce-2.1.1
dependabot/npm_and_yarn/stable30/dockerode-4.0.3
dependabot/npm_and_yarn/stable30/dockerode-4.0.4
dependabot/npm_and_yarn/stable30/dockerode-4.0.6
dependabot/npm_and_yarn/stable30/dockerode-4.0.7
dependabot/npm_and_yarn/stable30/dompurify-3.1.7
dependabot/npm_and_yarn/stable30/dompurify-3.2.5
dependabot/npm_and_yarn/stable30/dompurify-3.2.6
dependabot/npm_and_yarn/stable30/eslint-plugin-cypress-3.6.0
dependabot/npm_and_yarn/stable30/focus-trap-7.6.4
dependabot/npm_and_yarn/stable30/focus-trap-7.6.5
dependabot/npm_and_yarn/stable30/jasmine-core-2.99.1
dependabot/npm_and_yarn/stable30/jsdoc-4.0.4
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.11.10
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.11.11
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.11.16
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.11.17
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.11.18
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.11.19
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.11.20
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.11.9
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.12.7
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.12.8
dependabot/npm_and_yarn/stable30/libphonenumber-js-1.12.9
dependabot/npm_and_yarn/stable30/mime-4.0.6
dependabot/npm_and_yarn/stable30/mime-4.0.7
dependabot/npm_and_yarn/stable30/moment-timezone-0.5.46
dependabot/npm_and_yarn/stable30/moment-timezone-0.5.47
dependabot/npm_and_yarn/stable30/moment-timezone-0.5.48
dependabot/npm_and_yarn/stable30/moment-timezone-0.6.0
dependabot/npm_and_yarn/stable30/nextcloud/auth-2.5.1
dependabot/npm_and_yarn/stable30/nextcloud/axios-2.5.1
dependabot/npm_and_yarn/stable30/nextcloud/calendar-availability-vue-2.2.4
dependabot/npm_and_yarn/stable30/nextcloud/calendar-availability-vue-2.2.6
dependabot/npm_and_yarn/stable30/nextcloud/cypress-1.0.0-beta.13
dependabot/npm_and_yarn/stable30/nextcloud/cypress-1.0.0-beta.14
dependabot/npm_and_yarn/stable30/nextcloud/cypress-1.0.0-beta.15
dependabot/npm_and_yarn/stable30/nextcloud/dialogs-6.2.0
dependabot/npm_and_yarn/stable30/nextcloud/dialogs-6.3.0
dependabot/npm_and_yarn/stable30/nextcloud/dialogs-6.3.1
dependabot/npm_and_yarn/stable30/nextcloud/eslint-config-8.4.2
dependabot/npm_and_yarn/stable30/nextcloud/event-bus-3.3.2
dependabot/npm_and_yarn/stable30/nextcloud/files-3.10.1
dependabot/npm_and_yarn/stable30/nextcloud/files-3.10.2
dependabot/npm_and_yarn/stable30/nextcloud/l10n-3.3.0
dependabot/npm_and_yarn/stable30/nextcloud/moment-1.3.2
dependabot/npm_and_yarn/stable30/nextcloud/moment-1.3.4
dependabot/npm_and_yarn/stable30/nextcloud/password-confirmation-5.3.1
dependabot/npm_and_yarn/stable30/nextcloud/sharing-0.2.4
dependabot/npm_and_yarn/stable30/nextcloud/upload-1.10.0
dependabot/npm_and_yarn/stable30/nextcloud/upload-1.7.1
dependabot/npm_and_yarn/stable30/nextcloud/upload-1.9.1
dependabot/npm_and_yarn/stable30/nextcloud/vue-8.26.0
dependabot/npm_and_yarn/stable30/nextcloud/vue-8.26.1
dependabot/npm_and_yarn/stable30/nextcloud/vue-8.27.0
dependabot/npm_and_yarn/stable30/nextcloud/webpack-vue-config-6.1.1
dependabot/npm_and_yarn/stable30/nextcloud/webpack-vue-config-6.2.0
dependabot/npm_and_yarn/stable30/p-limit-6.2.0
dependabot/npm_and_yarn/stable30/pinia-2.3.1
dependabot/npm_and_yarn/stable30/pinia/testing-0.1.5
dependabot/npm_and_yarn/stable30/pinia/testing-0.1.6
dependabot/npm_and_yarn/stable30/pinia/testing-0.1.7
dependabot/npm_and_yarn/stable30/puppeteer-24.10.0
dependabot/npm_and_yarn/stable30/puppeteer-24.10.1
dependabot/npm_and_yarn/stable30/puppeteer-24.10.2
dependabot/npm_and_yarn/stable30/puppeteer-24.7.0
dependabot/npm_and_yarn/stable30/puppeteer-24.7.2
dependabot/npm_and_yarn/stable30/puppeteer-24.8.0
dependabot/npm_and_yarn/stable30/puppeteer-24.8.2
dependabot/npm_and_yarn/stable30/query-string-9.1.1
dependabot/npm_and_yarn/stable30/query-string-9.1.2
dependabot/npm_and_yarn/stable30/query-string-9.2.0
dependabot/npm_and_yarn/stable30/query-string-9.2.1
dependabot/npm_and_yarn/stable30/sass-1.87.0
dependabot/npm_and_yarn/stable30/sass-1.88.0
dependabot/npm_and_yarn/stable30/sass-1.89.1
dependabot/npm_and_yarn/stable30/sass-1.89.2
dependabot/npm_and_yarn/stable30/tar-fs-2.1.3
dependabot/npm_and_yarn/stable30/testing-library/cypress-10.0.3
dependabot/npm_and_yarn/stable30/testing-library/jest-dom-6.6.3
dependabot/npm_and_yarn/stable30/testing-library/user-event-14.6.1
dependabot/npm_and_yarn/stable30/ts-jest-29.2.6
dependabot/npm_and_yarn/stable30/ts-jest-29.3.2
dependabot/npm_and_yarn/stable30/ts-jest-29.3.3
dependabot/npm_and_yarn/stable30/ts-jest-29.4.0
dependabot/npm_and_yarn/stable30/ts-loader-9.5.2
dependabot/npm_and_yarn/stable30/tslib-2.8.1
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.32
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.34
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.35
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.36
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.37
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.38
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.39
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.40
dependabot/npm_and_yarn/stable30/types/dockerode-3.3.41
dependabot/npm_and_yarn/stable30/types/jest-29.5.13
dependabot/npm_and_yarn/stable30/types/jest-29.5.14
dependabot/npm_and_yarn/stable30/typescript-5.8.3
dependabot/npm_and_yarn/stable30/underscore-1.13.7
dependabot/npm_and_yarn/stable30/vue-material-design-icons-5.3.1
dependabot/npm_and_yarn/stable30/vue/tsconfig-0.6.0
dependabot/npm_and_yarn/stable30/vueuse/components-10.11.1
dependabot/npm_and_yarn/stable30/vueuse/core-10.11.1
dependabot/npm_and_yarn/stable30/vueuse/integrations-10.11.1
dependabot/npm_and_yarn/stable30/webpack-5.99.6
dependabot/npm_and_yarn/stable30/webpack-5.99.7
dependabot/npm_and_yarn/stable30/webpack-5.99.8
dependabot/npm_and_yarn/stable30/webpack-5.99.9
dependabot/npm_and_yarn/stable30/workbox-webpack-plugin-7.3.0
dependabot/npm_and_yarn/stable31/babel/node-7.25.9
dependabot/npm_and_yarn/stable31/babel/node-7.26.0
dependabot/npm_and_yarn/stable31/babel/node-7.27.1
dependabot/npm_and_yarn/stable31/babel/plugin-transform-private-methods-7.27.1
dependabot/npm_and_yarn/stable31/babel/preset-typescript-7.27.0
dependabot/npm_and_yarn/stable31/babel/preset-typescript-7.27.1
dependabot/npm_and_yarn/stable31/backbone-1.6.1
dependabot/npm_and_yarn/stable31/core-js-3.41.0
dependabot/npm_and_yarn/stable31/core-js-3.42.0
dependabot/npm_and_yarn/stable31/core-js-3.43.0
dependabot/npm_and_yarn/stable31/cypress-13.15.2
dependabot/npm_and_yarn/stable31/cypress-13.17.0
dependabot/npm_and_yarn/stable31/cypress-axe-1.6.0
dependabot/npm_and_yarn/stable31/cypress-if-1.13.2
dependabot/npm_and_yarn/stable31/cypress-split-1.24.11
dependabot/npm_and_yarn/stable31/cypress-split-1.24.14
dependabot/npm_and_yarn/stable31/cypress-split-1.24.15
dependabot/npm_and_yarn/stable31/cypress-split-1.24.17
dependabot/npm_and_yarn/stable31/cypress-split-1.24.18
dependabot/npm_and_yarn/stable31/cypress-split-1.24.9
dependabot/npm_and_yarn/stable31/dockerode-4.0.4
dependabot/npm_and_yarn/stable31/dockerode-4.0.6
dependabot/npm_and_yarn/stable31/dockerode-4.0.7
dependabot/npm_and_yarn/stable31/dompurify-3.2.5
dependabot/npm_and_yarn/stable31/dompurify-3.2.6
dependabot/npm_and_yarn/stable31/focus-trap-7.6.4
dependabot/npm_and_yarn/stable31/focus-trap-7.6.5
dependabot/npm_and_yarn/stable31/jasmine-core-2.99.1
dependabot/npm_and_yarn/stable31/jquery-ui-1.14.1
dependabot/npm_and_yarn/stable31/jsdoc-4.0.4
dependabot/npm_and_yarn/stable31/karma-coverage-2.2.1
dependabot/npm_and_yarn/stable31/libphonenumber-js-1.11.19
dependabot/npm_and_yarn/stable31/libphonenumber-js-1.11.20
dependabot/npm_and_yarn/stable31/libphonenumber-js-1.12.7
dependabot/npm_and_yarn/stable31/libphonenumber-js-1.12.8
dependabot/npm_and_yarn/stable31/libphonenumber-js-1.12.9
dependabot/npm_and_yarn/stable31/marked-15.0.11
dependabot/npm_and_yarn/stable31/marked-15.0.12
dependabot/npm_and_yarn/stable31/marked-15.0.6
dependabot/npm_and_yarn/stable31/marked-15.0.7
dependabot/npm_and_yarn/stable31/marked-15.0.8
dependabot/npm_and_yarn/stable31/marked-15.0.9
dependabot/npm_and_yarn/stable31/mime-4.0.7
dependabot/npm_and_yarn/stable31/moment-timezone-0.5.47
dependabot/npm_and_yarn/stable31/moment-timezone-0.5.48
dependabot/npm_and_yarn/stable31/moment-timezone-0.6.0
dependabot/npm_and_yarn/stable31/nextcloud/auth-2.5.1
dependabot/npm_and_yarn/stable31/nextcloud/cypress-1.0.0-beta.14
dependabot/npm_and_yarn/stable31/nextcloud/cypress-1.0.0-beta.15
dependabot/npm_and_yarn/stable31/nextcloud/dialogs-6.2.0
dependabot/npm_and_yarn/stable31/nextcloud/dialogs-6.3.0
dependabot/npm_and_yarn/stable31/nextcloud/dialogs-6.3.1
dependabot/npm_and_yarn/stable31/nextcloud/eslint-config-8.4.2
dependabot/npm_and_yarn/stable31/nextcloud/event-bus-3.3.2
dependabot/npm_and_yarn/stable31/nextcloud/files-3.10.2
dependabot/npm_and_yarn/stable31/nextcloud/l10n-3.3.0
dependabot/npm_and_yarn/stable31/nextcloud/moment-1.3.4
dependabot/npm_and_yarn/stable31/nextcloud/stylelint-config-3.1.0
dependabot/npm_and_yarn/stable31/nextcloud/upload-1.10.0
dependabot/npm_and_yarn/stable31/nextcloud/vue-8.26.0
dependabot/npm_and_yarn/stable31/nextcloud/vue-8.26.1
dependabot/npm_and_yarn/stable31/nextcloud/vue-8.27.0
dependabot/npm_and_yarn/stable31/p-limit-6.2.0
dependabot/npm_and_yarn/stable31/pinia-2.3.1
dependabot/npm_and_yarn/stable31/puppeteer-24.10.0
dependabot/npm_and_yarn/stable31/puppeteer-24.10.1
dependabot/npm_and_yarn/stable31/puppeteer-24.10.2
dependabot/npm_and_yarn/stable31/puppeteer-24.7.2
dependabot/npm_and_yarn/stable31/puppeteer-24.8.0
dependabot/npm_and_yarn/stable31/puppeteer-24.8.2
dependabot/npm_and_yarn/stable31/puppeteer-24.9.0
dependabot/npm_and_yarn/stable31/query-string-9.1.1
dependabot/npm_and_yarn/stable31/query-string-9.1.2
dependabot/npm_and_yarn/stable31/query-string-9.2.0
dependabot/npm_and_yarn/stable31/query-string-9.2.1
dependabot/npm_and_yarn/stable31/sass-1.81.1
dependabot/npm_and_yarn/stable31/sass-1.87.0
dependabot/npm_and_yarn/stable31/sass-1.88.0
dependabot/npm_and_yarn/stable31/sass-1.89.0
dependabot/npm_and_yarn/stable31/sass-1.89.1
dependabot/npm_and_yarn/stable31/sass-1.89.2
dependabot/npm_and_yarn/stable31/sass-loader-16.0.4
dependabot/npm_and_yarn/stable31/sass-loader-16.0.5
dependabot/npm_and_yarn/stable31/stylelint-16.18.0
dependabot/npm_and_yarn/stable31/stylelint-16.20.0
dependabot/npm_and_yarn/stable31/stylelint-16.21.0
dependabot/npm_and_yarn/stable31/tar-fs-2.1.3
dependabot/npm_and_yarn/stable31/testing-library/cypress-10.0.3
dependabot/npm_and_yarn/stable31/testing-library/jest-dom-6.6.3
dependabot/npm_and_yarn/stable31/testing-library/user-event-14.6.1
dependabot/npm_and_yarn/stable31/ts-loader-9.5.2
dependabot/npm_and_yarn/stable31/types/dockerode-3.3.34
dependabot/npm_and_yarn/stable31/types/dockerode-3.3.35
dependabot/npm_and_yarn/stable31/types/dockerode-3.3.37
dependabot/npm_and_yarn/stable31/types/dockerode-3.3.38
dependabot/npm_and_yarn/stable31/types/dockerode-3.3.39
dependabot/npm_and_yarn/stable31/types/dockerode-3.3.40
dependabot/npm_and_yarn/stable31/vitest/coverage-v8-2.1.9
dependabot/npm_and_yarn/stable31/vue/tsconfig-0.6.0
dependabot/npm_and_yarn/stable31/vueuse/components-11.3.0
dependabot/npm_and_yarn/stable31/vueuse/integrations-11.3.0
dependabot/npm_and_yarn/stable31/wait-on-8.0.2
dependabot/npm_and_yarn/stable31/wait-on-8.0.3
dependabot/npm_and_yarn/stable31/webpack-5.99.6
dependabot/npm_and_yarn/stable31/webpack-5.99.7
dependabot/npm_and_yarn/stable31/webpack-5.99.8
dependabot/npm_and_yarn/stable31/webpack-5.99.9
dependabot/npm_and_yarn/stable31/zip.js/zip.js-2.7.57
dependabot/npm_and_yarn/stable31/zip.js/zip.js-2.7.60
dependabot/npm_and_yarn/stable31/zip.js/zip.js-2.7.61
dependabot/npm_and_yarn/stable31/zip.js/zip.js-2.7.62
dependabot/npm_and_yarn/stylelint-16.17.0
dependabot/npm_and_yarn/stylelint-16.18.0
dependabot/npm_and_yarn/stylelint-16.19.1
dependabot/npm_and_yarn/tar-fs-2.1.3
dependabot/npm_and_yarn/testing-library/cypress-10.0.3
dependabot/npm_and_yarn/testing-library/jest-dom-6.6.3
dependabot/npm_and_yarn/testing-library/user-event-14.6.1
dependabot/npm_and_yarn/testing-library/vue-8.1.0
dependabot/npm_and_yarn/tmp-0.2.4
dependabot/npm_and_yarn/ts-loader-9.5.2
dependabot/npm_and_yarn/tslib-2.7.0
dependabot/npm_and_yarn/types/dockerode-3.3.32
dependabot/npm_and_yarn/types/dockerode-3.3.37
dependabot/npm_and_yarn/types/dockerode-3.3.38
dependabot/npm_and_yarn/types/dockerode-3.3.42
dependabot/npm_and_yarn/typescript-5.6.2
dependabot/npm_and_yarn/typescript-5.8.2
dependabot/npm_and_yarn/typescript-5.8.3
dependabot/npm_and_yarn/undici-5.29.0
dependabot/npm_and_yarn/vite-6.2.5
dependabot/npm_and_yarn/vite-6.3.4
dependabot/npm_and_yarn/vitejs/plugin-vue2-2.3.3
dependabot/npm_and_yarn/vitest-3.0.4
dependabot/npm_and_yarn/vitest-3.0.8
dependabot/npm_and_yarn/vitest-3.0.9
dependabot/npm_and_yarn/vitest-3.1.2
dependabot/npm_and_yarn/vitest-3.1.3
dependabot/npm_and_yarn/vitest-3.1.4
dependabot/npm_and_yarn/vitest/coverage-v8-2.1.1
dependabot/npm_and_yarn/vitest/coverage-v8-2.1.5
dependabot/npm_and_yarn/vitest/coverage-v8-2.1.8
dependabot/npm_and_yarn/vitest/coverage-v8-3.0.7
dependabot/npm_and_yarn/vitest/coverage-v8-3.1.3
dependabot/npm_and_yarn/vitest/coverage-v8-3.2.2
dependabot/npm_and_yarn/vitest/coverage-v8-3.2.3
dependabot/npm_and_yarn/vitest/coverage-v8-3.2.4
dependabot/npm_and_yarn/vue-cropperjs-5.0.0
dependabot/npm_and_yarn/vue-loader-16.8.3
dependabot/npm_and_yarn/vue-loader-17.4.2
dependabot/npm_and_yarn/vue-material-design-icons-5.3.1
dependabot/npm_and_yarn/vue-router-4.5.0
dependabot/npm_and_yarn/vue/tsconfig-0.6.0
dependabot/npm_and_yarn/vue/tsconfig-0.7.0
dependabot/npm_and_yarn/vueuse/components-11.1.0
dependabot/npm_and_yarn/vueuse/components-11.3.0
dependabot/npm_and_yarn/vueuse/components-12.8.2
dependabot/npm_and_yarn/vueuse/core-11.3.0
dependabot/npm_and_yarn/vueuse/core-12.5.0
dependabot/npm_and_yarn/vueuse/core-13.1.0
dependabot/npm_and_yarn/vueuse/integrations-11.1.0
dependabot/npm_and_yarn/vueuse/integrations-11.3.0
dependabot/npm_and_yarn/vueuse/integrations-12.7.0
dependabot/npm_and_yarn/vueuse/integrations-13.0.0
dependabot/npm_and_yarn/vuex-4.1.0
dependabot/npm_and_yarn/wait-on-8.0.0
dependabot/npm_and_yarn/wait-on-8.0.1
dependabot/npm_and_yarn/wait-on-8.0.3
dependabot/npm_and_yarn/wait-on-8.0.4
dependabot/npm_and_yarn/webdav-5.7.1
dependabot/npm_and_yarn/webdav-5.8.0
dependabot/npm_and_yarn/webpack-5.98.0
dependabot/npm_and_yarn/webpack-5.99.5
dependabot/npm_and_yarn/webpack-5.99.6
dependabot/npm_and_yarn/webpack-5.99.7
dependabot/npm_and_yarn/webpack-5.99.8
dependabot/npm_and_yarn/webpack-5.99.9
dependabot/npm_and_yarn/webpack-cli-6.0.1
dependabot/npm_and_yarn/workbox-webpack-plugin-7.3.0
dependabot/npm_and_yarn/zip.js/zip.js-2.7.53
dependabot/npm_and_yarn/zip.js/zip.js-2.7.54
dependabot/npm_and_yarn/zip.js/zip.js-2.7.57
dependabot/npm_and_yarn/zip.js/zip.js-2.7.61
dependabot/npm_and_yarn/zip.js/zip.js-2.7.62
dependabot/npm_and_yarn/zip.js/zip.js-2.7.71
dependabotjulia/bump-nextcloud-upload
dependaniel/aws-sdk-for-28
dependaniel/aws-sdk-for-29
deps/noid/bump-3rdparty-hash
depskjnldsv/vue
dept-remove-csrf-dependency-from-request
detect-inadvertent-config-overlaps
direct-access-shared-calendar
do-not-show-password-dialog-when-user-can-not-validate-password
docs/53002/calendar-search
docs/53002/calendar-search-impl
docs/caldav/getCalendarsForUserCount
docs/http/cors-attribute
dont-check-share-folder-remote
dont-double-scan-storage
ehn/sharing-sidebar-hide-search-labels
encoding-wrapper-metadata
encryption-no-header-size-error
encryption-version-version
enh/30551/weather-status-support-more-codes
enh/49868/add-display-override
enh/49868/adjust-display-mode
enh/add-cloud-id-chars
enh/add-details-to-code-integrity-check
enh/add-first-login-timestamp
enh/add-info-to-ldap-test-user-settings
enh/add-rich-object-formatter
enh/add-user-creation-date
enh/apply-rector-set-to-apps
enh/displayname-group-search
enh/do-not-enforce-cache-for-cli
enh/favorite-search
enh/identityproof/key_storage
enh/improve-transfer-ownership-logging
enh/issue-48528-disable-imip-messages
enh/issues-563-calendar-import-export
enh/ldap-add-test-settings-command
enh/ldap-clearer-errors
enh/ldap/more-error-output
enh/limit-ldap-user-count
enh/make-tag-event-webhook-compatible
enh/more-task-types
enh/no-issue/better-error-for-login-csrf
enh/no-issues/share-entry-link
enh/noid/add-types-to-issue-templates
enh/noid/allow-configure-config.owner
enh/noid/allow-disable-pwas
enh/noid/appconfig-get-fast-keys
enh/noid/async-process-run
enh/noid/avatar-chinese
enh/noid/clean-migration-check-appconfig
enh/noid/default-config-based-on-system-conf
enh/noid/disable-bulk-upload
enh/noid/disable-user-unmount
enh/noid/ensure-correctly-handling-special-characters
enh/noid/fix-docs-ci
enh/noid/fix-personal-settings-layout
enh/noid/fix-properties-files
enh/noid/gs.federation.auto_accept_shares
enh/noid/navigationentryevent
enh/noid/nullable-range
enh/noid/return-default-value-from-lexicon
enh/noid/returns-formated-app-values-2
enh/noid/signed-request
enh/noid/taskpro-agency-audio-chat
enh/noid/taskpro-audio-chat
enh/noid/taskprocessing-commands-task-errors
enh/noid/taskprocessing-include-error-msg-in-tasks
enh/noid/taskprocessing-lazy-config
enh/noid/taskprocessing-task-add-cleanup-flag
enh/noid/test-ci
enh/noid/testing-namespace
enh/noid/update-o.c.u-wording
enh/noid/user-preferences
enh/noid/workflow-contextchat-filesaccesscontrol-warning
enh/opcache-checks
enh/repair-mimetype-job
enh/share-sidebar
enh/test-mtime-after-move
enh/trashbin-scan-command
enh/users-configured-quota-value
enh/xss-protection-check
enhancement/passwordless-login-token
enhancements/files-sharing-tests
ensure-cloud-key
ensureTemplateFolder
ernolf/configurable_sharetoken_length
ext-store-check-update-filter
extra_sensitive_values
extract-caldav-sharing-plugin
feat-setupcheck-php-sapi-fpm-max-children
feat/26668/notifications-for-shared-calendars-2
feat/31420/bidi-backend-support
feat/42647/hide-app-password-note-without-2fa
feat/45085/validate-config-values
feat/46528/ask-confirm-extension-change
feat/47176/show-share-expiry
feat/52635/toggle-for-trusted-server-sharing
feat/54114/reportSlowPropfinds
feat/add-account-menu-outline
feat/add-addressbook-list-command
feat/add-config-for-share-perm
feat/add-configurable-ipv6-subnet
feat/add-datetime-qbmapper-support
feat/add-directory-check-workflowengine
feat/add-mount-change-log
feat/add-preload-script
feat/add-proofread-tasktype
feat/add-query-param-to-force-language
feat/add-rector-config
feat/add-search-everywhere-button
feat/add-subscription-via-occ
feat/add-user-enabled-apps-ocs
feat/add-wcf-cap
feat/add_log_scan_command
feat/ai-guest-restriction
feat/allow-account-local-search
feat/allow-enum-entity
feat/allow-getter-setter-decl-fors
feat/allow-oauth-grant-bypass
feat/allow-to-configure-default-view
feat/app-icon-opacity
feat/ask-deletion
feat/auto-accept-trusted-server
feat/auto-sync-desktop-version
feat/cache-routes
feat/caldav/migrate-to-sabre-sharing-plugin
feat/caption-cant-upload
feat/cardav-example-contact
feat/certificatemanager/default-bundle-path-option
feat/check-enterprise
feat/cleanup-oc-util
feat/cleanup-oc-util-methods
feat/clipboard-fallback
feat/contacts-menu/js-hook-action
feat/context-chat-ocp
feat/conversion-adjusting
feat/core/features-api
feat/core/install-without-admin-user
feat/core/pwa-hide-header
feat/cors-on-webdav
feat/cron/before-after-events
feat/cypress-setup
feat/dark-mode-variables
feat/database/primary-replica-split-stable28
feat/database/query-result-fetch-associative-fetch-num
feat/dav-pagination
feat/dav-trashbin-backend
feat/dav/absence-get-set-commands
feat/dav/calendar-obj-event-webhooks
feat/dav/calendar-object-admin-audit-log
feat/dav/public-share-chunked-upload
feat/declarative-settings/typed-abstraction
feat/delete-separator
feat/disable-share-deletion
feat/dispatcher/log-raw-response-data
feat/drop-compile-commits-rebase
feat/edit-share-token
feat/empty-trash
feat/event-builder-invitation-emails
feat/example-event
feat/expose-nc-groups-to-system-addressbook-contacts
feat/federated-calendar-sharing
feat/file-conversion-provider
feat/file-conversion-provider-front
feat/file-drop-recursive
feat/file-list-actions
feat/files-bulk-tagging
feat/files-bulk-tagging-followup
feat/files-home-view
feat/files-row-height
feat/files-shortcuts
feat/files-shortcuts-2
feat/files/chunked-upload-config-capabilities
feat/files/resumable-uploads
feat/files_sharing/co-owner
feat/files_trashbin/allow-preventing-trash-permanently
feat/getByAncestorInStorage
feat/hint-hidden
feat/http/request-header-attribute
feat/ignore-warning-files
feat/image-size-metadata
feat/imailaddressvalidator
feat/issue-3786-allow-shared-calendars
feat/issue-563-calendar-export
feat/issue-563-calendar-import
feat/issue-994-two-factor-api
feat/larger_ipv6_range
feat/lexicon/moving-out-from-unstable
feat/log-client-side-req-id
feat/log-large-assets
feat/log/log-session-id
feat/logger-allow-psr-loglevel
feat/mail-provider-settings
feat/make-setup-check-trait-public
feat/make-tasks-types-toggleable
feat/material-icons-outline
feat/maxschmi-49902
feat/meeting-proposals
feat/migrate-files_external-vue
feat/mime-column
feat/mime-names
feat/mimes-names
feat/mountmanager/emit-events
feat/namespace-group-route
feat/nfo
feat/no-issue/add-logging-preview-generation
feat/no-issue/show-remote-shares-as-internal-config
feat/no-two-factor-required-attribute
feat/node-dist
feat/noid/add-bulk-activity
feat/noid/add-busy-status
feat/noid/add-busy-status-capability
feat/noid/add-command-to-list-all-routes
feat/noid/add-fake-summary-provider
feat/noid/allow-specifying-related-object
feat/noid/cache-user-keys
feat/noid/check-integrity-all-apps
feat/noid/files-external-lexicon
feat/noid/get-value-type-from-lexicon
feat/noid/happy-birthday
feat/noid/info-xml-spdx-license-ids
feat/noid/internal-lint-request-event
feat/noid/lexicon-configurable-default-value
feat/noid/lexicon-events
feat/noid/lexicon-migrate-keys
feat/noid/lexicon-store-on-get-as-default
feat/noid/link-to-calendar-event
feat/noid/list-addressbook-shares
feat/noid/log-query-parameters
feat/noid/occ-list-delete-calendar-subscription
feat/noid/preset-config
feat/noid/priority-notifications
feat/noid/profile-data-api
feat/noid/ratelimit-header
feat/noid/show-nice-label-when-searching-in-root
feat/noid/store-lexicon-default
feat/noid/support-email-mentions
feat/notifications/preload-many
feat/occ-files-cleanup-help
feat/occ/command-events
feat/ocp-sanitize-filenames
feat/ocp/attendee-availability-api
feat/ocp/meetings-api-requirements
feat/openapi/merged-spec
feat/oracle-setup-cypres
feat/order-action
feat/package-node-npm-engines-update
feat/pagination-cardav
feat/photo-cache-avif
feat/photo-cache-webp
feat/php-setup-file-upload
feat/postgres-13-17
feat/preset/custom-share-token
feat/preset/load-apps-on-preset
feat/preset/profile-visibility+presetmanager
feat/profile-app
feat/psalm/error-deprecations
feat/public-log-level
feat/reduce_available_languages_set
feat/repair-step-deduplicate-mounts
feat/requestheader/indirect-parameter
feat/restore-to-original-dir
feat/restrict-tag-creation
feat/rich-profile-biography
feat/router-list-routs-cmd
feat/row_format_check
feat/s3/sse-c
feat/sanitize-filenames-command
feat/search-by-parent-id
feat/search-in-files
feat/search-in-files--small
feat/search-while-filtering
feat/sensitive-declarative-settings
feat/settings/advanced-deploy-options
feat/settings/app_api/daemon-selection
feat/settings/app_api_apps_management
feat/settings/too-much-caching-setup-check
feat/setup
feat/setup-check-logging
feat/setup-checks
feat/setupcheck-task-pickup-speed
feat/share-grid-view
feat/sharing-title
feat/shipped/app_api
feat/show-gs-users-like-internal
feat/show-hide-ext
feat/show-time-diff-user
feat/switch-from-settype-to-casts
feat/sync-truncation
feat/sync-truncation2
feat/sync-truncation3
feat/systemtags-bulk-create-list
feat/systemtags-missing-attrs
feat/systemtags-public
feat/tags-colors
feat/tags-colors-2
feat/talk-9679/threads
feat/task/analyze-image
feat/taskprocessing/TextToImageSingle
feat/template-field-extraction-improvements
feat/test-app-routes
feat/trashbin-hierarchy
feat/unified_search/online_providers
feat/use-php84-lazy-objects
feat/user-folder
feat/user-get-quota-bytes
feat/verbose-cron
feat/vue-material-icons-outline
feat/workflow-auto-update-cypress.yml
feat/workflow-auto-update-node.yml
feat/workflow-auto-update-npm-audit-fix.yml
feat/workflow-auto-update-pr-feedback.yml
feat/workflow-auto-update-reuse.yml
feat/workflow-generator
feat/zip-folder-plugin
feat/zst
feature/23308/create-new-favorite-dashboard-widget
feature/51791/add-bsky-option-to-accounts
feature/53428-autoCreateCollectionOnUpload
feature/add-allowed-view-extensions-config
feature/add-profile-to-occ
feature/files-list-occ-command
feature/hide-external-shares-excluded-groups
feature/highlight-active-menu
feature/noid/config-lexicon
feature/noid/wrapped-appconfig
feature/settings-design-improvements
fetch-mount-memory
fetch-mount-memory-30
fetch-mount-memory-30-squash
fieat/profile-pronounces
file-info-key-location-27
filePointerCheck
filecache-chunking
files-cache-node
files-external-optional-dependencies
files-external-setup-path
filesVersionsFuncRefact
files_external-scan-unscanned
fileutils-files-by-user
fix-44318-remote-share-not-listed
fix-button-alignment-for-email-templates-in-outlook
fix-clearing-unified-search-when-modal-is-closed
fix-copying-or-moving-from-shared-groupfolders
fix-dav-properties-column-type
fix-endless-spinner-on-file-entries-after-triggering-an-action-on-stable30
fix-enforce-theme-for-public-links
fix-federated-group-shares-when-no-longer-found-in-remote-server
fix-federated-sharing-bug
fix-files-external-smbclient-deprecated-binaryfinder
fix-format
fix-jobs-app-disable
fix-json-decoding-groups-excluded-from-share
fix-nc-env-inclusion
fix-order-metadata-deletion
fix-papercut-23486-weather-status-locale
fix-putcsv-default
fix-remove-auto-guessing-for-preview-semaphore
fix-running-files-external-s3-tests-in-stable30-ci
fix-setupcheck-filelocking
fix-setupcheck-webfinger-400
fix-setupchecks-normalizeUrl-url-filter
fix-sharing-expiration-notify
fix-show-original-owner
fix-theming-for-disabled-accounts
fix-theming-for-disabled-users
fix-updater-secret
fix-user-collaborators-returned-when-searching-for-mail-collaborators
fix/29-template-layout
fix/30-oc-files
fix/30-template-layout
fix/32bit-pack
fix/32bit-support
fix/43260
fix/44288/catch-filesmetadatanotfound-exception
fix/44492/settings-remove-user-manager
fix/45717/hide-last-modified-for-shipped-apps
fix/45884/accept-notification
fix/45982/hide-move-action
fix/46920/respect-no-download
fix/47275/driverException
fix/47658/upgrade-version-3100005
fix/48012/fix-share-email-send-mail-share
fix/48415/do-not-rename-main-share-link
fix/48437/dont-exclude-user
fix/48829/visual-feedback-4-encryption-toggle
fix/48860/stop-silent-expiry-date-addition-on-link-shares
fix/48993
fix/49431-automatically-disable-sab
fix/49473/task-url
fix/49584-background-worker-interval-fixes
fix/49584-background-worker-remove-interval
fix/49638/update-prefs-indexes
fix/49673-less-confusing-unified-search-folder-picker
fix/49728/adapt-search-filters-correctly
fix/49887/early-check-for-overwritten-home
fix/49909/workflow-vue-compat
fix/49954/add-send-mail-toggle
fix/50177/movy-copy-e2e-tests
fix/50215/hideCreateTemplateFolder
fix/50363/correct-system-tags-i18n
fix/50512/send-password-2-owner
fix/50788/pass-hide-download-on-save
fix/51022/simpler-request-before-upgrade
fix/51022/simpler-request-pre-upgrade
fix/51226/show-remote-shares-as-external
fix/51226/show-remote-shares-as-external-2
fix/51506/mdast-util-gfm-autolink-literal-override
fix/51833/add-retries-to-s3-client
fix/51875/allow-keyboard-input-4-share-expiration-on-chrome
fix/52060/manage-download-on-federated-reshare
fix/52131/ignore-missing-themes-31
fix/52278/remove-unused-etag-check
fix/52590/available-account-groups
fix/52617/fix-group-admin-delegation
fix/52794/share-advanced-settings
fix/52795/consistent-share-save-behavior
fix/53363/available-groups
fix/53674-webdav-paginate-missing-collection-type
fix/54080/using-userconfig-to-set-lang
fix/78296/nextcloud-vue
fix/788/add-password-confirmation-required-to-user-storage-create
fix/788/add-password-required-to-external-storages
fix/AppStore--remove-unneeded-warning
fix/FileList-render
fix/IMimeTypeDetector-types
fix/PasswordConfirmationMiddleware-empty-header
fix/PublicShareUtils
fix/account-manager
fix/account-mgmnt-settings
fix/account-property-validation
fix/activity-log-for-favorites-in-dav
fix/add-autoload.php-for-tests
fix/add-calendar-object-index
fix/add-function-type-for-mimetype-sanitizer
fix/add-getappversions-replacement
fix/add-password-confirmation-to-save-global-creds
fix/addUniqueMountpointIndex
fix/adjust-default-color-background-plain-to-new-background
fix/admin-tag-color-prevent
fix/ai-settings
fix/align-avatar-visibility
fix/allconfig-use-search-case-insensitive
fix/allow-255-filenames
fix/allow-download-with-hide-download-flag
fix/allow-enforcing-windows-support
fix/allow-quota-wrapper-check
fix/alter-invite-attachment-filename-and-type
fix/app-discover
fix/app-discover-section-media
fix/app-icon-aria
fix/app-store-groups
fix/app-store-markdown
fix/app-store-reactivity
fix/app-store-remove-force-enable
fix/appconfig/sensitive-keys-external-jwt-private-key
fix/appframework/csrf-request-checks
fix/apps/wrong-missing-casts
fix/appstore-regressions
fix/auth-token-uniq-constraint-violation-handling
fix/auth/authtoken-activity-update-in-transaction
fix/auth/logout-redirect-url
fix/auto-reload-tags
fix/avoid-crashing-versions-listener-on-non-existing-file
fix/avoid-invalid-share-on-transfer-ownership
fix/background-image
fix/backgroundjobs/adjust-intervals-time-sensitivities
fix/backport-gridview-29
fix/baseresponse/xml-element-value-string-cast
fix/better-drag-n-drop
fix/bring-back-hide-downlaod
fix/bring-back-zip-event
fix/broken-event-notifications
fix/cache-hit-getFirstNodeById
fix/cache-ldap-configuration-prefixes
fix/cachebuster-stable30
fix/caldav/event-organizer-interaction
fix/caldav/event-reader-duration
fix/caldav/no-invitations-to-circles
fix/caldav/use-direct-route-event-activity
fix/carddav/create-sab-concurrently
fix/cast-node-names-to-string
fix/catch-exception-in-encrypt-all
fix/catch-exception-in-encryption-listener
fix/clarify-app-manager-methods
fix/clean-up-group-shares
fix/cleanup-blurhash-images
fix/cleanup-dependencyanalyser
fix/cleanup-dicontainer
fix/cleanup-getinstallpath
fix/cleanup-loadapp-calls
fix/cleanup-servercontainer
fix/cleanup-template-functions
fix/cleanup-test-legacy-autoloader
fix/cleanup-updater-class
fix/cleanup-user-backends
fix/cloud-id-input
fix/code-sign-test
fix/codeowner-nc-backend
fix/collaboration/deduplicate-email-shares
fix/colum-sizes-outline-icon
fix/comment/children-count-integer
fix/comments-outlined-icons
fix/comments/activity-rich-subject-parameters
fix/composer/autoload-dev-deps
fix/config/additional-configs
fix/config/return-user-config-deleted
fix/contactsmenu/padding
fix/contactsmigratortest
fix/conversion-extension
fix/convert-log
fix/convert-rotate-to-timedjob
fix/convert-schedulednotifications-to-timedjob
fix/convert-type
fix/core-cachebuster
fix/core-session-logout-logging
fix/core/password-from-env-nc-pass
fix/core/preview-generation
fix/create-missing-replacement-indexes
fix/credential-passwordless-auth
fix/cron-strict-cookie
fix/cron/log-long-running-jobs-stable26
fix/cron/no-constructor-without-args
fix/csrf-token-ignore-twofactor
fix/current-user-principal
fix/cy-selectors-for-files-trashbin
fix/dashboard--performance-and-refactoring
fix/dashboard/dont-load-hidden-widgets-initially
fix/dashboard/skip-hidden-widgets
fix/datadirectory-protection-setupcheck
fix/dav-add-strict-type-declarations
fix/dav-cast-content-lenght-to-int
fix/dav-cast-params-to-string
fix/dav-csrf
fix/dav-harden-stream-handling
fix/dav-nickname-master
fix/dav-nickname-stable31
fix/dav-sorting
fix/dav-wrong-return-type
fix/dav/abort-incomplete-caldav-changes-sync
fix/dav/absence-status-too-long
fix/dav/addressbook-permissions-principal
fix/dav/carddav-new-card-check-addressbook-early
fix/dav/carddav-read-card-memory-usage
fix/dav/create-sab-in-transaction
fix/dav/create-sab-install
fix/dav/first-login-listener
fix/dav/image-export-plugin-fallback
fix/dav/limit-sync-token-created-at-updates-stable28
fix/dav/limit-sync-token-created-at-updates-stable29
fix/dav/orphan-cleanup-job
fix/dav/publicremote-share-token-pattern
fix/dav/remove-object-properties-expensive
fix/dav/update-rooms-resources-background-job
fix/dav/use-iuser-displayname
fix/dav/view-only-check
fix/db-adapter-insert-if-not-exists-atomic
fix/declarative-settings-priority
fix/default-contact
fix/default-contact-error-verbosity
fix/defaultshareprovider/filter-reshares-correctly
fix/delete-legacy-autoloader
fix/deprecate-oc-template-and-cleanup
fix/deprecation-comment
fix/deps/php-seclin
fix/destination-drop-check
fix/disable-reminder-invalid-nodes
fix/do-not-cache-routes-on-debug-mode
fix/do-not-remind
fix/do-not-throw-from-countusers
fix/do-not-update-userkey-when-masterkey-is-used
fix/docblock-color
fix/docs
fix/download-invalid-share
fix/download-non-files-view
fix/download-perms
fix/drop-file-preview
fix/drop-v-html
fix/duplicated-conflict-resolution
fix/dyslexia-font-not-loading
fix/edit-locally-labels
fix/emit_hooks_on_copy
fix/empty-file-0byte-stable30
fix/encode-guest-file-request
fix/encoding-wrapper-scanner
fix/encoding-wrapper-scanner-stable30
fix/encrypt-decrypt-password
fix/encryption-events
fix/encryption-text
fix/encryption/web-ui-bogus
fix/entity/strict-types
fix/eslint-warning
fix/eslint-warnings
fix/etag-constraint-search-query
fix/external-storage-controller-cast-id
fix/external-storage-int
fix/fail-safe-files-actions
fix/fav-sort-nav
fix/federated-share-opening
fix/federated-users
fix/federatedfilesharing/dialog-callback
fix/federatedfilesharing/group-cleanup
fix/federation-certificate-store
fix/file-conversion-missing-extension
fix/file-drop
fix/file-list-filters-reset
fix/file-name-validator-case-sensitivity
fix/file-request-enforced
fix/file-type-filter-state
fix/file_reference_invalidate_rename
fix/files--handle-empty-view-with-error
fix/files--list-header-button-title
fix/files-actions-menu-position
fix/files-actions-subcomponent
fix/files-add-move-info
fix/files-batch-actions
fix/files-better-search-icon
fix/files-duplicated-nodes
fix/files-external-notify-mount-id-stable28
fix/files-external-workflow
fix/files-failed-node
fix/files-header-empty-view
fix/files-header-submenu
fix/files-hidden-summary
fix/files-mtime
fix/files-navigation-quota-total
fix/files-new-folder
fix/files-page-title
fix/files-plural
fix/files-position-navigation
fix/files-proper-loading-icon
fix/files-public-share
fix/files-reload
fix/files-rename
fix/files-rename-esc
fix/files-rename-folder
fix/files-rename-store
fix/files-renaming
fix/files-scroll-perf
fix/files-sharing-download
fix/files-sharing-file-drop-folder
fix/files-sharing-label
fix/files-show-details-when-no-action
fix/files-summary
fix/files-trash-download
fix/files-trashbin-files-integration
fix/files-version-creation
fix/files-versions
fix/files-versions-author
fix/files-versions-listeners
fix/files-wording
fix/files/activity-rich-object-strings
fix/files/delete-display-no-trashbin
fix/files/favorites-widget-folder-preview
fix/files/preview-service-worker-registration
fix/files/reactivity-inject
fix/files/sort-after-view-change
fix/files_external-cred-dialog
fix/files_external/definition-parameter
fix/files_external/forbidden-exception
fix/files_external/hidden-password-fields
fix/files_external/smb-case-insensitive-path-building
fix/files_external_scan
fix/files_sharing--global-search-in-select
fix/files_sharing/advanced-settings-delete-share-button
fix/files_sharing/cleanup-error-messages
fix/files_sharing/disable-editing
fix/files_sharing/filter-own-reshared-shares
fix/files_sharing/harden-api
fix/files_sharing/hide-own-reshares
fix/files_sharing/ocm-permissions
fix/files_sharing/sharing-entry-link-override-expiration-date
fix/files_versions/previews
fix/filesreport-cast-fileId-to-int
fix/filter-empty-email
fix/filter-for-components-explicitly
fix/fix-32bits-phpunit
fix/fix-admin-audit-event-listening
fix/fix-admin-audit-listener
fix/fix-admin-audit-paths
fix/fix-appmanager-cleanappid
fix/fix-copy-to-mountpoint-root
fix/fix-cypress-note-to-recipient
fix/fix-default-share-folder-for-group-shares
fix/fix-di-when-casing-is-wrong
fix/fix-disabled-user-list-for-saml-subadmin
fix/fix-disabled-user-list-for-subadmins
fix/fix-email-setupcheck-with-null-smtpmode
fix/fix-email-share-transfer-accross-storages
fix/fix-encryption-manager-injection
fix/fix-incorrect-query-in-federatedshareprovider
fix/fix-int-casting
fix/fix-ldap-setupcheck-crash
fix/fix-loginflow-v1
fix/fix-movie-preview-construct
fix/fix-php-error-on-upgrade
fix/fix-psalm-taint-errors
fix/fix-psalm-taint-errors-2
fix/fix-public-download-activity
fix/fix-server-tests
fix/fix-share-creation-error-messages
fix/fix-storage-interface-check
fix/fix-warning-lazy-ghost-application
fix/flaky-cypress
fix/flaky-live-photos
fix/forbidden-files-insensitive
fix/forward-user-login-if-no-session
fix/get-managers-as-subadmin
fix/get-version-of-core
fix/gracefully-parse-trusted-certificates
fix/grid-view-actions
fix/group-admin-new-user
fix/handle-errors-in-migrate-key-format
fix/harden-account-properties
fix/harden-admin-settings
fix/harden-template-functions
fix/harden-thumbnail-endpoint
fix/harmonize-ldap-function-logging
fix/headers-lifecycle
fix/highcontras-scrollbar
fix/http/jsonresponse-data-type
fix/http/template-valid-status-codes
fix/icons-header-meu
fix/ignore-shares-in-encrypt-all
fix/imip-test-expects-integer
fix/improve-error-output-of-sso-test
fix/improve-init-profiling
fix/improve-ldap-avatar-handling
fix/index-systemtags
fix/insecure-crypto-env
fix/install-app-before-enable
fix/install-dbport-unused
fix/installation-wording
fix/invalid-app-config
fix/invalid-copied-share-link
fix/invalid-mtime
fix/invitations-named-parameter
fix/issue-12387-delete-invitations
fix/issue-13862
fix/issue-23666
fix/issue-3021-return-no-content-instead-of-error
fix/issue-34720
fix/issue-47879-property-serialization
fix/issue-48079-windows-time-zones
fix/issue-48528-disable-itip-and-imip-messages
fix/issue-48528-disable-itip-and-imip-messages-2
fix/issue-48732-exdate-rdate-property-instances
fix/issue-49756-translations
fix/issue-50054-resource-invite-regression
fix/issue-50104-system-address-book-ui-settings
fix/issue-50748-calendar-object-move
fix/issue-50748-card-object-move
fix/issue-6838-use-old-event-information-when-new-is-missing
fix/issue-7194-fifth-not-fifty
fix/issue-8458-imip-improvements-2
fix/istorage/return-types
fix/iurlgenerator/url-regex-markdown-parenthesis
fix/jquery-ui
fix/l10n-placeholder
fix/l10n-plain-string
fix/l10n-us-english
fix/ldap-avoid-false-positive-mapping
fix/ldap/cache-ttl-jitter
fix/ldap/lower-case-emails
fix/legacy-file-drop
fix/legacy-filepicker
fix/legacy-oc-filepicker
fix/less-useless-toasts
fix/less-words
fix/line-height-calc
fix/link-share-conflict-modal
fix/load-more-than-5-items-in-folder-filter
fix/loading-account-menu
fix/lock-session-during-cookie-renew
fix/log-failure-from-file-events
fix/log-login-flow-state-token-errors
fix/log-memcache-log-path-hash
fix/login-chain-24
fix/login-error-state
fix/login-origin
fix/loginflow
fix/lookup-server
fix/lookup-server-connector
fix/lookup-server-connector-v2
fix/low-res-for-blurhash
fix/lower-email-case
fix/lus-background-job
fix/mailer-binaryfinder-fallback
fix/make-router-reactive
fix/map-sharee-information
fix/master-template-layout
fix/middle-click
fix/migrate-dav-to-events
fix/migrate-encryption-away-from-hooks
fix/mime
fix/mime-fallback-public
fix/mime-int
fix/missing-import
fix/mkcol-quota-exceeded-response
fix/move-away-from-oc-app
fix/move-email-logic-local-user-backend
fix/move-storage-constructor-to-specific-interface
fix/multi-select
fix/mysql-removed-auth
fix/nav-quota-new-design
fix/newUser-provisioning_api
fix/no-account-filter-public-share
fix/no-issue/enforced-props-checks
fix/no-issue/file-request-disable-when-no-public-upload
fix/no-issue/link-sharing-defaults
fix/no-issue/no-reshare-perms-4-email-shares
fix/no-issue/prevent-create-delete-perms-on-file-shares
fix/no-issue/proper-share-sorting
fix/no-issue/show-file-drop-permissions-correctly
fix/no-issue/use-password-default-sharing-details
fix/no-issues/add-encryption-available-config
fix/node-version
fix/node-vibrant
fix/noid-add-status-and-set-attendee-status
fix/noid-adjust-variables-for-translations
fix/noid-catch-listener-erros-instead-of-failing
fix/noid-check-for-properties-before-processing
fix/noid-fix-user-create-quota
fix/noid-improve-calendar-accuracy-performace
fix/noid-reset-password
fix/noid-retrieve-all-authors-at-the-same-time
fix/noid/accept-informational-tests-as-success
fix/noid/actions-boundaries
fix/noid/allows-some-char-from-federationid
fix/noid/appconfig-setmixed-on-typed
fix/noid/broken-password-reset-form
fix/noid/broken-taskprocessing-api
fix/noid/calendar-enabled
fix/noid/check-file-before-download
fix/noid/clean-config-code
fix/noid/contactsmenu-ab-enabled
fix/noid/content-header-height
fix/noid/count-disabled-correct
fix/noid/debug-objectstorage-s3
fix/noid/deleted-circles-share
fix/noid/deprecation-correct-case
fix/noid/discover-unique-ocmprovider
fix/noid/empty-path-for-files-versions
fix/noid/encrypted-propagation-test
fix/noid/ensure-userid-attr-present
fix/noid/expose-calendar-enabled
fix/noid/fed-share-on-local-reshare
fix/noid/federation-really-surely-init-token
fix/noid/fifty-fifth
fix/noid/files-page-heading-theming-name
fix/noid/files-version-sidebar-item-style
fix/noid/filter-cancelled-events
fix/noid/fix-itipbroker-messages
fix/noid/fix-try-login
fix/noid/fix-unified-search-provider-id
fix/noid/flaky-sso-tests
fix/noid/get-fedid-from-cloudfed-provider
fix/noid/get-preview-force-mimetype
fix/noid/ignore-missing-memberships-on-reshare-verification
fix/noid/ignore-missing-owner
fix/noid/ignore-null-appinfo
fix/noid/ignore-unavailable-token
fix/noid/in-folder-search
fix/noid/init-navigation-data-too-soon
fix/noid/krb-fallback
fix/noid/ldap-displayname-cached
fix/noid/ldap-n-counted-mapped-users
fix/noid/ldap-no-connection-reason
fix/noid/ldap-remnants-as-disabled-global
fix/noid/ldap-setopt-for-disabling-certcheck
fix/noid/lexicon-update-lazy-status
fix/noid/log-false-user
fix/noid/make-s3-connect-timeout-option-configurable
fix/noid/mark-searchkeys-as-internal
fix/noid/metadata-on-fresh-setup
fix/noid/no-emails-for-user-shares
fix/noid/no-lazy-loading-on-isBypassListed
fix/noid/note-to-recipient-test
fix/noid/null-safe-metadata
fix/noid/oracle-test-failure
fix/noid/path-hash-prep-statement
fix/noid/refresh-filesize-on-conflict-24
fix/noid/remote-account-activity-translation
fix/noid/rename-remote-user-to-guest-user
fix/noid/return-verified-email
fix/noid/revert-api-breaking-return-type
fix/noid/rich-editor-mixin
fix/noid/run-kerberos-tests-on-ubuntu-latest
fix/noid/set-ext-pwd-as-sensitive
fix/noid/statetoken-concurrency
fix/noid/stuck-ffmpeg
fix/noid/task-processing-file-content-stream
fix/noid/taskprocessing-appapi
fix/noid/test-samba-with-self-hosted
fix/noid/textprocessing-list-types
fix/noid/textprocessing-schedule-taskprocessing-provider
fix/noid/thudnerbird-addon-useragent
fix/noid/transfer-ownership-select
fix/noid/try-latest-buildjet-cache
fix/noid/update-codeowners-nfebe
fix/noid/wfe-empty-group-in-check
fix/noid/wfe-set-inital-value
fix/noid/windows-font-family
fix/noid/wipe-local-storage
fix/note-icon-color
fix/note-to-recipient
fix/null-label
fix/oauth2/owncloud-migration
fix/oauth2/retain-legacy-oc-client-support
fix/oc/inheritdoc
fix/occ/config-fileowner-suppress-errors
fix/ocm-host
fix/ocm-public-key-is-optional
fix/ocmdiscoveryservice/cache-errors
fix/only-show-reshare-if-there-is
fix/openapi/array-syntax
fix/openapi/outdated-specs
fix/oracle-db-connection
fix/oracle-db-connection-29
fix/oracle-insert-id
fix/overide-itip-broker
fix/ownership-transfer-source-user-files
fix/pass-hide-download-in-update-request
fix/password-field-sharing
fix/password-validation
fix/path-length
fix/people-translation
fix/perf/cache-avilable-taskt-types
fix/perf/cache-taskprocessing-json-parse
fix/pick-folder-smart-picker
fix/picker-tag-color
fix/preview-check
fix/product-name-capability
fix/profile-visibility
fix/pronouns-tests
fix/pronouns-translation
fix/proper-download-check
fix/proper-preview-icon
fix/properly-fail-on-invalid-json
fix/provisionApi-status-codes
fix/provisioning_api/password-change-hint-translation
fix/proxy-app-screenshot
fix/psalm/enabled-find-unused-baseline-entry
fix/psalm/throws-annotations
fix/psalm/update-baseline
fix/public-copy-move-stable-28
fix/public-displayname-owner
fix/public-get
fix/public-owner-scope
fix/public-share-expiration
fix/public-share-router
fix/public-upload-notification-default
fix/qbmapper/find-entities-return-type
fix/querybuilder/oracle-indentifier-length
fix/querybuilder/output-columns-aliases
fix/quota-exceptions
fix/quota-view-files
fix/rate-limit-share-creation
fix/read-only-share-download
fix/reasons-to-use
fix/recently_active_pgsql
fix/recommended-apps
fix/rector-use-statements
fix/redirect-openfile-param
fix/refactor-imip
fix/refactor-user-access-to-file-list
fix/refresh-convert-list
fix/release-gen-changelog
fix/reminder-node-access
fix/remove-app.php-loading
fix/remove-broken-versions-routes
fix/remove-needless-console-log
fix/remove-redundant-check-server
fix/remove-references-to-deprected-storage-interface
fix/remove-share-hint-exception-wrapping
fix/rename-trashbin
fix/reply-message
fix/request-reviews
fix/requesttoken
fix/require-update-if-mtime-is-null
fix/reset-phone-number
fix/reset-property
fix/resiliant-user-removal
fix/resolve_public_rate_limit
fix/restore-sucess
fix/retry-delete-if-locked
fix/revive-lowercase-email
fix/rich-object-strings/better-exception-messages
fix/richobjectstrings/validator-string-key-value-error
fix/rtl-regession
fix/s3-verify-peer-setting
fix/s3-versions
fix/s3/empty-sse-c-key
fix/s3configtrait/proxy-false
fix/sabre-dav-itip-broker
fix/sass
fix/scrolling-file-list
fix/search-cast
fix/search-tags-lowercase
fix/session-cron
fix/session/failed-clear-cookies
fix/session/log-ephemeral-session-close
fix/session/log-likely-lost-session-conditions
fix/session/log-regenerate-id
fix/session/log-session-id
fix/session/log-session-start-error
fix/session/permanent-token-app-password
fix/session/session-passphraze-handling
fix/session/transactional-remember-me-renewal
fix/settings--disable-discover-when-app-store-is-disabled
fix/settings-command
fix/settings-l10n
fix/settings-share-folder
fix/settings/admin/ai/textprocessing
fix/settings/email-change-restriction
fix/settings/ex-apps-search
fix/settings/mail-server-settings-form
fix/settings/read-only-apps-root
fix/settings/userid-dependency-injection
fix/setupmanager/home-root-providers-register-mounts
fix/share-allow-delete-perms-4-files
fix/share-api-create--permissions
fix/share-expiry-translation
fix/share-label
fix/share-notifications
fix/share-sidebar-bugs
fix/share-status
fix/sharing-entry-link
fix/sharing-error-catch
fix/sharing-exp-date
fix/sharing-password-submit-create
fix/sharing-restore-on-failure
fix/sharing-sidebar-tab-default
fix/shipped-app-version
fix/show-better-mtime
fix/show-deleted-team-shares
fix/show-share-recipient-in-mail
fix/show-templates-folder-default
fix/sidebar-favorites
fix/simplify-login-box
fix/size-update-appdata
fix/stable27
fix/stable28-uploader
fix/stable28/webcal-subscription-jobs-middleware
fix/stable29-header-title
fix/stable29/numerical-userid-file-item-display
fix/stable29/webcal-subscription-jobs-middleware
fix/stable29_share-api-create--permissions
fix/stable30/create-download-attribute-if-missing
fix/stable30/rename-trashbin
fix/stable30/share-types-references
fix/storage-local/get-source-path-spl-file-info
fix/storage-settings
fix/storage/get-directory-content-return-type
fix/storage/get-owner-false
fix/storage/method-docs-inheritance
fix/strict-types
fix/subadmin-user-groups
fix/tag-fileid-check
fix/tags-events
fix/tags-icon
fix/tags-search-case
fix/tags/boolean-user-has-tags
fix/task-cleanup-delay
fix/task-processing-api-controller/dont-use-plus
fix/taskprocessing-api-get-file-contents
fix/taskprocessing-better-errors
fix/taskprocessing-cache
fix/taskprocessing-manager/php-notice
fix/taskprocessingcontroller-errorhandling
fix/tasktypes-translations
fix/team-resource-deduplication
fix/template-field-title
fix/template-name-overflow
fix/template-return-type
fix/template-vue3-main
fix/template/implement-itemplate
fix/tests/migrations
fix/texttotextchatwithtools-translator-notes
fix/themes-layout
fix/theming-migration
fix/theming/default-theme-selection
fix/ticket_9672007/share_mail
fix/timedjob-execution-time
fix/tp-validation
fix/twitter-fediverse
fix/two-factor-request-token
fix/type-error-filter-mount
fix/typo-recommended-apps
fix/undefined-application-key
fix/undefined-response
fix/unified-search-bar
fix/unified-search-ctrl-f
fix/unified-search-empty-sections
fix/unified-search-filter-reset-on-load-more
fix/unified-search-size
fix/unique-vcategory
fix/unnecessary-template-fields-request
fix/update-notification
fix/update-notification-respect-config
fix/update-share-entry-quick-select
fix/updateall
fix/updatenotification-legacy-toast
fix/updatenotification/applist-error-handling
fix/upload-file-drop-info
fix/use-also-default-text
fix/use-invokeprivate-for-test
fix/user-login-with-cookie-e2ee
fix/user-manager/limit-enabled-users-counting-seen
fix/user_status/harden-api
fix/users-gid
fix/usertrait/backend-initialization
fix/validation-defaults
fix/version-channel
fix/versions/wrong-toast
fix/view-in-folder-conditions
fix/view-local-close
fix/view-only-preview
fix/view/catch-mkdir-exception-non-existent-parents
fix/wait-for-toast
fix/weather_status/search-address-offline-errors
fix/webauthn
fix/webcal-subscription-jobs-middleware
fix/webpack-nonce
fix/wrong-image-type
fixFilesRemindersJoins
fixHardcodedVersionsFolder
fixHeaderStyleSettings
fixIncParam30
fixKeyExFileExt
fixPhp83Deprecation
fixWrongTranslation
followup/39574/ocm-provider-without-beautiful-urls
followup/47329/add-all-types-to-handling
followup/48086/fix-more-activity-providers
followup/53896/adjust-interface
forbid-moving-subfolder-24
fox/noid/extended-auth-on-webdav
fullFilePreviews
fwdport/48445/master
getMountsForFileId-non-sparse
guzzleHandler
gw-codeowners-public-api
handle-missing-share-providers-when-promoting-reshares
hasTableTaskprocessingTasks
home-folder-readonly
icewind-smb-3.7
ignore-write-test-unlink-err
info-file-more-encryption-checks
info-file-permissions
info-storage-command
instance-quota
introduce-publish-classification-levels
isNumericMtime
issue-563-calendar-import-a
issue_45523_actionmenu_in_multiple_actions_menu_bar
joblist-build-error-log
jr-quota-exceeded-admin-log
jr/enh/updates/options-buttons-web-ui
jr/meta/issue-template-bugs-closed-link
jtr-auth-pw-max-length-config-sample
jtr-chore-log-getEntries-cleanup
jtr-chore-mbstring-func-overload
jtr-ci-flakey-cypress-note-test
jtr-docs-dispatcher-return
jtr-feat-occ-default-help-docs-link
jtr-feat-setupchecks-limit-type
jtr-files-detection-refactor-finfo
jtr-fix-403-design
jtr-fix-dnspin-port-logging
jtr-fix-files-reminders-disabled
jtr-httpclient-compression
jtr-locale-personal-info
jtr-maint-refresh-part-1
jtr-oc-appframework-app-cleanup
jtr-perf-checks-connectivity-https-proto
jtr-profile-email-pages
jtr-refactor-auth-pubKeyTokPro
jtr-refactor-pub-app
jtr-refactor-remote-php
jtr-remove-always-populate-raw-post-data
jtr-settings-memory-limit-details
jtr/chore-bug-report-logs
jtr/desc-and-help-plus-minor-fixes-files-scan
jtr/dns-noisy-dns-get-record
jtr/fix-25162
jtr/fix-40666-fallback-copy
jtr/fix-45671
jtr/fix-46609-delegation-add-group-overlap
jtr/fix-appframework-server-proto
jtr/fix-hash-hkdf-valueerror
jtr/fix-ipv6-zone-ids-link-local
jtr/fix-sharing-update-hints
jtr/fix-streamer-zip64
jtr/fix-testSearchGroups
jtr/fix-tests/mysql-phpunit-health
jtr/fix-updater-cleanup-job-logging
jtr/fix-wipe-missing-token-handling
jtr/occ-maintenance-mode-desc
jtr/preview-thumb-robustness
jtr/router-light-refactoring
jtr/setup-checks-heading
jtr/setup-checks-heading-redo
jtr/test-binaryfinder
jtr/typo-accessibility-config-sample
kerberos-saved-ticket
kerberos-saved-ticket-27
ldap-queries
leftybournes/feat/guests_creation_simplification
leftybournes/fix/app-sorting
leftybournes/fix/files_trashbin_dont_restore_full
leftybournes/fix/files_trashbin_retention
leftybournes/fix/object_storage_large_uploads
leftybournes/fix/sftp_scan_infinite_loop
leftybournes/fix/syslog
location-provider
lockThreadsOlderThan120d
log-event-recursion
logger-app-versions
login-less-custom-bundle
man/backport/45237/stable27
master
master-IB#1156402
memcache-commands
merge-token-updates
metadata-storage-id
mgallien/fix/retry_cache_operations_on_deadlock
mixedSetTTL
mount-cache-without-fs-access
mount-move-checks
mountpoint-get-numeric-storage-id-cache
mountpoint-mkdir-quota
move-from-encryption-no-opt
moveOCPClasses
moveStrictTyping
multi-object-store
mysqlNativePassCi
nested-jail-root
new-julius
newfolder-race-improvements
nickv-debug-reactions-test
nickv/1214
nickv/1452
no-issue-use-correct-exceptions-in-share-class
no-shared-direct-download
noissue-refactor-share-class
normlize-less
notfound-debug-mounts
notfound-debug-mounts-30
obj-delete-not-found
obj-delete-not-found-20
object-store-filename
object-store-move-db
object-store-move-fixes
object-store-orphan
object-store-trash-move
objectstore-touch-double-cache
oc-wnd-migrate
oc-wnd-migrate-25
occ-as-root
occ-external-dependencies
occ-upgrade-reminder
occ-upgrade-wording
oci-ci-faststart
oci-string-length-empty
ocs-user-info-quota-optimize
optionally-hide-hidden-files-in-public-share-access
oracle-share-reminder
passedLockValueIsIntOrNull
patch-14
patch/52833
patch/61084/disable-clear-cache
patch/76955/disable-notification-on-email-change
patch/hash-return-null
patch/performance-scckit
path-available
perf/appconfig/caching
perf/avatar
perf/cache-file-reminders
perf/cache-reference-list
perf/cache-server-checks-local-cache
perf/caldav/bigger-chunks-orphan-repair
perf/capa
perf/carddav/dont-query-circles
perf/check-node-type
perf/core/jobs-index
perf/cron/delay-timedjob-checking
perf/dav-preload-search-tags
perf/db/cards-properties-abid-name-value-idx
perf/db/jobs-table-indexes
perf/excimer
perf/files/cache-garbage-collection-background-job
perf/files/chunked-upload-default-100-mib
perf/files/setup-fs-basic-auth-request
perf/filter-propfind
perf/force-sending-ifnonematch
perf/get_shares_at_once
perf/improve-incomplete-scan
perf/log-excessive-memory-consumption
perf/log-high-memory-requests
perf/mount-provider-join-array-merge
perf/noid/dont-load-addressbook-on-resolving-cloudid
perf/noid/query-performance
perf/noid/split-getSharedWith-query-into-more-performance-sets
perf/noid/unified-search-init
perf/paginate-filter-groups
perf/properies-index-
perf/realpath-custom-prop
perf/reduce_mount_db_load
perf/remove-filecache-index
perf/share20/get-all-shares-in-folder
perf/usermountcache/local-cache
pr/51113
prevPropPromarrayClas
primary-object-store-settings
printOccHumanFriendly
printOnlyOnceText
profile-request
pull_request-trigger
pulsejet-patch-share-attr
pulsejet/db-check-maria
pulsejet/truncate-1
query-req-id-26
rakekniven-patch-1
rakekniven-patch-2
readd-object-store-phpunit
rector-phpunit10
rector-tests
refactSmallAdjust
refactor-occ-preview-generate
refactor/48925/sharing-sidebar-redesign
refactor/account-management-router
refactor/app/remove-register-routes
refactor/apps/constructor-property-promotion
refactor/apps/declare-strict-types
refactor/apps/php55-features
refactor/appstore-modernization
refactor/background-service
refactor/class-string-constant
refactor/cleanup-login-logout-hooks
refactor/dav/example-contact-service
refactor/dirname-to-dir
refactor/drop-to-uploader
refactor/elvis
refactor/files-cleanup
refactor/files-deprecated-share-types
refactor/files-filelist-width
refactor/files-hotkeys
refactor/files-required-navigation
refactor/files/remove-app-class
refactor/migration-override-attribute
refactor/move-to-new-activity-exception
refactor/ocp-deprecations
refactor/preview-tests
refactor/provide-file-actions-through-composable
refactor/rector-core
refactor/rector-top-level
refactor/rector/extend-scope
refactor/register-routes
refactor/remove-app-registerRoutes
refactor/self-class-reference
refactor/settings/mail-settings-parameters
refactor/share-manager-appconfig
refactor/storage/constructors
refactor/storage/strong-param-types
refactor/storage/strong-type-properties
refactor/stream-encryption/typings
refactor/template-layout
refactor/tempmanager
refactor/unified-search-
refactor/use-in-instead-of-or
refactor/void-tests
refactor/zip-event
release/28.0.11
release/28.0.11_rc1
release/28.0.12
release/28.0.12_rc1
release/28.0.12_rc2
release/28.0.14
release/28.0.14_rc1
release/29.0.0beta2
release/29.0.11
release/29.0.11_rc1
release/29.0.12
release/29.0.12_rc1
release/29.0.12_rc2
release/29.0.13
release/29.0.13_rc1
release/29.0.13_rc2
release/29.0.14
release/29.0.14_rc1
release/29.0.15_rc1
release/29.0.15_rc2
release/29.0.16
release/29.0.16_rc1
release/29.0.8
release/29.0.8_rc1
release/29.0.9
release/29.0.9_rc1
release/29.0.9_rc2
release/30.0.10
release/30.0.10_rc1
release/30.0.11
release/30.0.11_rc1
release/30.0.12
release/30.0.12_rc1
release/30.0.13
release/30.0.13_rc1
release/30.0.14_rc1
release/30.0.1_rc
release/30.0.1_rc1
release/30.0.1_rc2
release/30.0.2
release/30.0.2_rc1
release/30.0.2_rc2
release/30.0.4
release/30.0.4_rc1
release/30.0.5
release/30.0.5_rc1
release/30.0.6
release/30.0.6_rc1
release/30.0.6_rc2
release/30.0.7
release/30.0.7_rc1
release/30.0.7_rc2
release/30.0.8
release/30.0.8_rc1
release/30.0.9
release/30.0.9_rc1
release/30.0.9_rc2
release/31.0.0
release/31.0.0_beta_1
release/31.0.0_beta_2
release/31.0.0_beta_4
release/31.0.0_rc2
release/31.0.0_rc3
release/31.0.0_rc4
release/31.0.0_rc5
release/31.0.1
release/31.0.1_rc1
release/31.0.1_rc2
release/31.0.2
release/31.0.2_rc1
release/31.0.3
release/31.0.3_rc1
release/31.0.3_rc2
release/31.0.4
release/31.0.4_rc1
release/31.0.5
release/31.0.5_rc1
release/31.0.6
release/31.0.6_rc1
release/31.0.7
release/31.0.7_rc1
release/31.0.8_rc1
reminder-dont-validiate-node-dav
remoteIdToShares
remove-filecache-joins
remove-locking-config-sample
remove-non-accessible-shares
remove-redundant-setting
remove-scrutinizer
remove-unused-method
removeNoisyTextEmails
removeTrailingComma
rename-deleted-default-calendar-in-trashbin
rename-hooks-webhook
repair-mimetype-expensive-squashed-29
repair-tree-invalid-parent
reshare-permission-logic-27
revert-49004
revert-49650-backport/49293/stable30
revert-49825-revert-49650-backport/49293/stable30
revert-51431-enh/noid/disable-bulk-upload
revert-52122-backport/51431/stable30
revert-52123-backport/51431/stable31
revert-52503-fix/files_sharing/filter-own-reshared-shares
revert-52914
revert-53077-backport/52914/stable31
revert-53078-backport/52914/stable30
revert-53918-revert-53141-perf/files/setup-fs-basic-auth-request
revert/41453
revert/50258
revert/52035
revert/52038
revert/52818
revert/email-setting-migration
revert/gfm-pin
revert/openapi-extractor
revert/share-node-accessible
revoke-admin-overwrite-8
reworkShareExceptions
rfc/global-rate-limit
rfc/request-timeout
run-test-mime-type-icon-again
s3-bucket-create-exception
s3-disable-multipart
s3-disable-multipart-remove-debug
s3-multipart-size-check
safety-net-null-check
scan-home-ext-storae
scan-locked-error
scanner-invalid-data-log
scckit-backports
security-missing-auth-error
seekable-http-size-24
settings-datadir-unused
setupChecksMoveFromBinary
sftp-fopen-write-stat-cache
sftp-known-mtime
shard-key-hint-partition
sharding-code-fixes
sharding-existing
sharding-select-fixes
share-list-cmd
share-list-set-owner
share-mount-check-no-in
share-move-storage-error
share-reminder-sharding
share-root-meta-cache
shared-cache-watcher-update
shared-cache-watcher-update-30
shared-target-verify-cache
shared-target-verify-cache-fix
skjnldbot/nextcloud-upload
skjnldsbot/dep-upload-stable29
skjnldsbot/dep-upload-stable30
skjnldsbot/dep-upload-stable31
skjnldsv-patch-1
smb-acl-fail-soft
smb-hasupdated-deleted
smb-notify-test
smb-open-failure-log
smb-systembridge
smb-timeout-unavailable
solracsf-patch-1
stable-swift-v3
stable10
stable11
stable12
stable13
stable14
stable15
stable16
stable17
stable18
stable19
stable20
stable21
stable22
stable23
stable24
stable25
stable26
stable27
stable28
stable28BackportMissingSetTTL
stable29
stable30
stable30-admin-audit-listen-failed-login
stable30-fix-renaming-a-received-share-by-a-user-with-stale-shares
stable31
stable9
storage-cache-not-exists
storage-debug-info
storage-id-cache-memcache
stream-assembly-stream-size
sub-mount-filter-no-storage
tag-color-query
targetIsNotShared-catch-notfound
techdebt/noid/add-parameter-typehints
techdebt/noid/more-phpunit-10-preparations
techdebt/noid/more-useful-debug-logs
techdebt/noid/prepare-phpunit10
techdebt/noid/reduce-deprecation-spam
techdebt/noid/use-new-attributes-to-declare-since
techdebt/standard-15/consumable-ocp
test-disable-autoload-apps
test-scanner-no-transactions-26
test/autotest-git
test/cypress-flaky
test/cypress-flakyness
test/eol-check
test/eol-check-26
test/files-download
test/files-sharing-phpunit
test/fix-cypress
test/fix-files-sharing
test/folder-tree
test/integration/cleanup-logs
test/no-git-ignore
test/noid/debug-reactions-test
test/noid/improve-test-output
test/noid/more-phpunit-10
test/widget-perf
test/workflow
tests/fix-jest-leftover
tests/noid/caldav-tests
tests/noid/carddav-tests
tests/noid/dav-systemtag
tests/noid/debug-systemkeeper
tests/noid/federated-file-sharing
tests/noid/files_sharing-1
tests/noid/finish-dav
tests/noid/ldap
tests/noid/migrate-federation-and-files_trashbin
tests/noid/migrate-files-external-to-phpunit10
tests/noid/migrate-files_versions
tests/noid/migrate-more-apps-to-phpunit10
tests/noid/more-phpunit10-apps
tests/noid/speed-up-comments-test
tests/template-workflow
transfer-external-storage
transfer-share-skip-notfound
translatable-string
trasbin-event-fixes
trimBucketDnsName
try-non-recursive-source-27
update-phpdoc-for-folder-get
update-size-byte
update-stale-bot-configuration
updateLastSeen
updater-change-mimetype-objectstore
upgrade/psr-log-to-v2
uploadfolder-rework
uploadfolder-rework-autofix
upstream/52135/52135-master
useHttpFramework
useNameNotUrl
useOCPClassesTrashbin
usermountcache-filecache-joins
usermountcache-logging
usermountcache-more-debug-logging
validateProvidedEmail
version-test-new-file
wrapper-instanceof-resiliant-squash
zip-download-no-sabre-response
zorn-v-patch-1
Nextcloud server, a safe home for all your data: https://github.com/nextcloud/server www-data
blob: 024993b310d2376d4dc349bff106701794290745 (
plain )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
/**
* ownCloud
*
* @author Vincent Petry
* @copyright 2014 Vincent Petry <pvince81@owncloud.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
* License as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
describe ( 'OCA.Files.FileActions tests' , function () {
var fileList , fileActions , clock ;
beforeEach ( function () {
clock = sinon . useFakeTimers ();
// init horrible parameters
var $body = $ ( '#testArea' );
$body . append ( '<input type="hidden" id="dir" value="/subdir"></input>' );
$body . append ( '<input type="hidden" id="permissions" value="31"></input>' );
$body . append ( '<table id="filestable" class="list-container view-grid"><tbody id="fileList"></tbody></table>' );
// dummy files table
fileActions = new OCA . Files . FileActions ();
fileActions . registerAction ({
name : 'Testdropdown' ,
displayName : 'Testdropdowndisplay' ,
mime : 'all' ,
permissions : OC . PERMISSION_READ ,
icon : function () {
return OC . imagePath ( 'core' , 'actions/download' );
}
});
fileActions . registerAction ({
name : 'Testinline' ,
displayName : 'Testinlinedisplay' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'all' ,
permissions : OC . PERMISSION_READ
});
fileActions . registerAction ({
name : 'Testdefault' ,
displayName : 'Testdefaultdisplay' ,
mime : 'all' ,
permissions : OC . PERMISSION_READ
});
fileActions . setDefault ( 'all' , 'Testdefault' );
fileList = new OCA . Files . FileList ( $body , {
fileActions : fileActions
});
});
afterEach ( function () {
fileActions = null ;
fileList . destroy ();
fileList = undefined ;
clock . restore ();
$ ( '#dir, #permissions, #filestable' ). remove ();
});
it ( 'calling clear() clears file actions' , function () {
fileActions . clear ();
expect ( fileActions . actions ). toEqual ({});
expect ( fileActions . defaults ). toEqual ({});
expect ( fileActions . icons ). toEqual ({});
expect ( fileActions . currentFile ). toBe ( null );
});
describe ( 'displaying actions' , function () {
var $tr ;
beforeEach ( function () {
var fileData = {
id : 18 ,
type : 'file' ,
name : 'testName.txt' ,
mimetype : 'text/plain' ,
size : '1234' ,
etag : 'a01234c' ,
mtime : '123456' ,
permissions : OC . PERMISSION_READ | OC . PERMISSION_UPDATE
};
// note: FileActions.display() is called implicitly
$tr = fileList . add ( fileData );
});
it ( 'renders inline file actions' , function () {
// actions defined after call
expect ( $tr . find ( '.action.action-testinline' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-testinline' ). attr ( 'data-action' )). toEqual ( 'Testinline' );
});
it ( 'does not render dropdown actions' , function () {
expect ( $tr . find ( '.action.action-testdropdown' ). length ). toEqual ( 0 );
});
it ( 'does not render default action' , function () {
expect ( $tr . find ( '.action.action-testdefault' ). length ). toEqual ( 0 );
});
it ( 'replaces file actions when displayed twice' , function () {
fileActions . display ( $tr . find ( 'td.filename' ), true , fileList );
fileActions . display ( $tr . find ( 'td.filename' ), true , fileList );
expect ( $tr . find ( '.action.action-testinline' ). length ). toEqual ( 1 );
});
it ( 'renders actions menu trigger' , function () {
expect ( $tr . find ( '.action.action-menu' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-menu' ). attr ( 'data-action' )). toEqual ( 'menu' );
});
it ( 'only renders actions relevant to the mime type' , function () {
fileActions . registerAction ({
name : 'Match' ,
displayName : 'MatchDisplay' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'text/plain' ,
permissions : OC . PERMISSION_READ
});
fileActions . registerAction ({
name : 'Nomatch' ,
displayName : 'NoMatchDisplay' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'application/octet-stream' ,
permissions : OC . PERMISSION_READ
});
fileActions . display ( $tr . find ( 'td.filename' ), true , fileList );
expect ( $tr . find ( '.action.action-match' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-nomatch' ). length ). toEqual ( 0 );
});
it ( 'only renders actions relevant to the permissions' , function () {
fileActions . registerAction ({
name : 'Match' ,
displayName : 'MatchDisplay' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'text/plain' ,
permissions : OC . PERMISSION_UPDATE
});
fileActions . registerAction ({
name : 'Nomatch' ,
displayName : 'NoMatchDisplay' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'text/plain' ,
permissions : OC . PERMISSION_DELETE
});
fileActions . display ( $tr . find ( 'td.filename' ), true , fileList );
expect ( $tr . find ( '.action.action-match' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-nomatch' ). length ). toEqual ( 0 );
});
it ( 'display inline icon with image path' , function () {
fileActions . registerAction ({
name : 'Icon' ,
displayName : 'IconDisplay' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'all' ,
icon : OC . imagePath ( 'core' , 'actions/icon' ),
permissions : OC . PERMISSION_READ
});
fileActions . registerAction ({
name : 'NoIcon' ,
displayName : 'NoIconDisplay' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'all' ,
permissions : OC . PERMISSION_READ
});
fileActions . display ( $tr . find ( 'td.filename' ), true , fileList );
expect ( $tr . find ( '.action.action-icon' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-icon' ). find ( 'img' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-icon' ). find ( 'img' ). eq ( 0 ). attr ( 'src' )). toEqual ( OC . imagePath ( 'core' , 'actions/icon' ));
expect ( $tr . find ( '.action.action-noicon' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-noicon' ). find ( 'img' ). length ). toEqual ( 0 );
});
it ( 'display alt text on inline icon with image path' , function () {
fileActions . registerAction ({
name : 'IconAltText' ,
displayName : 'IconAltTextDisplay' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'all' ,
icon : OC . imagePath ( 'core' , 'actions/iconAltText' ),
altText : 'alt icon text' ,
permissions : OC . PERMISSION_READ
});
fileActions . registerAction ({
name : 'IconNoAltText' ,
displayName : 'IconNoAltTextDisplay' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'all' ,
icon : OC . imagePath ( 'core' , 'actions/iconNoAltText' ),
permissions : OC . PERMISSION_READ
});
fileActions . display ( $tr . find ( 'td.filename' ), true , fileList );
expect ( $tr . find ( '.action.action-iconalttext' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-iconalttext' ). find ( 'img' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-iconalttext' ). find ( 'img' ). eq ( 0 ). attr ( 'alt' )). toEqual ( 'alt icon text' );
expect ( $tr . find ( '.action.action-iconnoalttext' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-iconnoalttext' ). find ( 'img' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-iconnoalttext' ). find ( 'img' ). eq ( 0 ). attr ( 'alt' )). toEqual ( '' );
});
it ( 'display inline icon with iconClass' , function () {
fileActions . registerAction ({
name : 'Icon' ,
displayName : 'IconDisplay' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'all' ,
iconClass : 'icon-test' ,
permissions : OC . PERMISSION_READ
});
fileActions . registerAction ({
name : 'NoIcon' ,
displayName : 'NoIconDisplay' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'all' ,
permissions : OC . PERMISSION_READ
});
fileActions . display ( $tr . find ( 'td.filename' ), true , fileList );
expect ( $tr . find ( '.action.action-icon' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-icon' ). find ( '.icon' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-icon' ). find ( '.icon' ). hasClass ( 'icon-test' )). toEqual ( true );
expect ( $tr . find ( '.action.action-noicon' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-noicon' ). find ( '.icon' ). length ). toEqual ( 0 );
});
it ( 'display alt text on inline icon with iconClass when no display name exists' , function () {
fileActions . registerAction ({
name : 'IconAltText' ,
displayName : '' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'all' ,
iconClass : 'icon-alttext' ,
altText : 'alt icon text' ,
permissions : OC . PERMISSION_READ
});
fileActions . registerAction ({
name : 'IconNoAltText' ,
displayName : 'IconNoAltTextDisplay' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'all' ,
altText : 'useless alt text' ,
iconClass : 'icon-noalttext' ,
permissions : OC . PERMISSION_READ
});
fileActions . display ( $tr . find ( 'td.filename' ), true , fileList );
expect ( $tr . find ( '.action.action-iconalttext' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-iconalttext' ). find ( '.icon' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-iconalttext' ). find ( '.hidden-visually' ). text ()). toEqual ( 'alt icon text' );
expect ( $tr . find ( '.action.action-iconnoalttext' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-iconnoalttext' ). find ( '.icon' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action.action-iconnoalttext' ). find ( '.hidden-visually' ). length ). toEqual ( 0 );
});
});
describe ( 'action handler' , function () {
var actionStub , $tr , clock ;
beforeEach ( function () {
clock = sinon . useFakeTimers ();
var fileData = {
id : 18 ,
type : 'file' ,
name : 'testName.txt' ,
mimetype : 'text/plain' ,
size : '1234' ,
etag : 'a01234c' ,
mtime : '123456'
};
actionStub = sinon . stub ();
fileActions . registerAction ({
name : 'Test' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'all' ,
icon : OC . imagePath ( 'core' , 'actions/test' ),
permissions : OC . PERMISSION_READ ,
actionHandler : actionStub
});
$tr = fileList . add ( fileData );
});
afterEach ( function () {
OC . hideMenus ();
// jump past animations
clock . tick ( 1000 );
clock . restore ();
});
it ( 'passes context to action handler' , function () {
var notifyUpdateListenersSpy = sinon . spy ( fileList . fileActions , '_notifyUpdateListeners' );
$tr . find ( '.action-test' ). click ();
expect ( actionStub . calledOnce ). toEqual ( true );
expect ( actionStub . getCall ( 0 ). args [ 0 ]). toEqual ( 'testName.txt' );
var context = actionStub . getCall ( 0 ). args [ 1 ];
expect ( context . $file . is ( $tr )). toEqual ( true );
expect ( context . fileList ). toBeDefined ();
expect ( context . fileActions ). toBeDefined ();
expect ( context . dir ). toEqual ( '/subdir' );
expect ( context . fileInfoModel . get ( 'name' )). toEqual ( 'testName.txt' );
expect ( notifyUpdateListenersSpy . calledTwice ). toEqual ( true );
expect ( notifyUpdateListenersSpy . calledBefore ( actionStub )). toEqual ( true );
expect ( notifyUpdateListenersSpy . calledAfter ( actionStub )). toEqual ( true );
expect ( notifyUpdateListenersSpy . getCall ( 0 ). args [ 0 ]). toEqual ( 'beforeTriggerAction' );
expect ( notifyUpdateListenersSpy . getCall ( 0 ). args [ 1 ]). toEqual ({
action : fileActions . getActions ( 'all' , OCA . Files . FileActions . TYPE_INLINE , OC . PERMISSION_READ )[ 'Test' ],
fileName : 'testName.txt' ,
context : context
});
expect ( notifyUpdateListenersSpy . getCall ( 1 ). args [ 0 ]). toEqual ( 'afterTriggerAction' );
expect ( notifyUpdateListenersSpy . getCall ( 1 ). args [ 1 ]). toEqual ({
action : fileActions . getActions ( 'all' , OCA . Files . FileActions . TYPE_INLINE , OC . PERMISSION_READ )[ 'Test' ],
fileName : 'testName.txt' ,
context : context
});
// when data-path is defined
actionStub . reset ();
$tr . attr ( 'data-path' , '/somepath' );
$tr . find ( '.action-test' ). click ();
context = actionStub . getCall ( 0 ). args [ 1 ];
expect ( context . dir ). toEqual ( '/somepath' );
});
it ( 'also triggers action handler when calling triggerAction()' , function () {
var notifyUpdateListenersSpy = sinon . spy ( fileList . fileActions , '_notifyUpdateListeners' );
var model = new OCA . Files . FileInfoModel ({
id : 1 ,
name : 'Test.txt' ,
path : '/subdir' ,
mime : 'text/plain' ,
permissions : 31
});
fileActions . triggerAction ( 'Test' , model , fileList );
expect ( actionStub . calledOnce ). toEqual ( true );
expect ( actionStub . getCall ( 0 ). args [ 0 ]). toEqual ( 'Test.txt' );
expect ( actionStub . getCall ( 0 ). args [ 1 ]. fileList ). toEqual ( fileList );
expect ( actionStub . getCall ( 0 ). args [ 1 ]. fileActions ). toEqual ( fileActions );
expect ( actionStub . getCall ( 0 ). args [ 1 ]. fileInfoModel ). toEqual ( model );
expect ( notifyUpdateListenersSpy . calledTwice ). toEqual ( true );
expect ( notifyUpdateListenersSpy . calledBefore ( actionStub )). toEqual ( true );
expect ( notifyUpdateListenersSpy . calledAfter ( actionStub )). toEqual ( true );
expect ( notifyUpdateListenersSpy . getCall ( 0 ). args [ 0 ]). toEqual ( 'beforeTriggerAction' );
expect ( notifyUpdateListenersSpy . getCall ( 0 ). args [ 1 ]). toEqual ({
action : fileActions . getActions ( 'all' , OCA . Files . FileActions . TYPE_INLINE , OC . PERMISSION_READ )[ 'Test' ],
fileName : 'Test.txt' ,
context : {
fileActions : fileActions ,
fileInfoModel : model ,
dir : '/subdir' ,
fileList : fileList ,
$file : fileList . findFileEl ( 'Test.txt' )
}
});
expect ( notifyUpdateListenersSpy . getCall ( 1 ). args [ 0 ]). toEqual ( 'afterTriggerAction' );
expect ( notifyUpdateListenersSpy . getCall ( 1 ). args [ 1 ]). toEqual ({
action : fileActions . getActions ( 'all' , OCA . Files . FileActions . TYPE_INLINE , OC . PERMISSION_READ )[ 'Test' ],
fileName : 'Test.txt' ,
context : {
fileActions : fileActions ,
fileInfoModel : model ,
dir : '/subdir' ,
fileList : fileList ,
$file : fileList . findFileEl ( 'Test.txt' )
}
});
});
it ( 'triggers listener events when invoked directly' , function () {
var context = { fileActions : new OCA . Files . FileActions ()}
var notifyUpdateListenersSpy = sinon . spy ( context . fileActions , '_notifyUpdateListeners' );
var testAction = fileActions . get ( 'all' , OCA . Files . FileActions . TYPE_INLINE , OC . PERMISSION_READ )[ 'Test' ];
testAction ( 'Test.txt' , context );
expect ( actionStub . calledOnce ). toEqual ( true );
expect ( actionStub . getCall ( 0 ). args [ 0 ]). toEqual ( 'Test.txt' );
expect ( actionStub . getCall ( 0 ). args [ 1 ]). toBe ( context );
expect ( notifyUpdateListenersSpy . calledTwice ). toEqual ( true );
expect ( notifyUpdateListenersSpy . calledBefore ( actionStub )). toEqual ( true );
expect ( notifyUpdateListenersSpy . calledAfter ( actionStub )). toEqual ( true );
expect ( notifyUpdateListenersSpy . getCall ( 0 ). args [ 0 ]). toEqual ( 'beforeTriggerAction' );
expect ( notifyUpdateListenersSpy . getCall ( 0 ). args [ 1 ]). toEqual ({
action : fileActions . getActions ( 'all' , OCA . Files . FileActions . TYPE_INLINE , OC . PERMISSION_READ )[ 'Test' ],
fileName : 'Test.txt' ,
context : context
});
expect ( notifyUpdateListenersSpy . getCall ( 1 ). args [ 0 ]). toEqual ( 'afterTriggerAction' );
expect ( notifyUpdateListenersSpy . getCall ( 1 ). args [ 1 ]). toEqual ({
action : fileActions . getActions ( 'all' , OCA . Files . FileActions . TYPE_INLINE , OC . PERMISSION_READ )[ 'Test' ],
fileName : 'Test.txt' ,
context : context
});
}),
describe ( 'actions menu' , function () {
it ( 'shows actions menu inside row when clicking the menu trigger' , function () {
expect ( $tr . find ( 'td.filename .fileActionsMenu' ). length ). toEqual ( 0 );
$tr . find ( '.action-menu' ). click ();
expect ( $tr . find ( 'td.filename .fileActionsMenu' ). length ). toEqual ( 1 );
});
it ( 'shows highlight on current row' , function () {
$tr . find ( '.action-menu' ). click ();
expect ( $tr . hasClass ( 'mouseOver' )). toEqual ( true );
});
it ( 'cleans up after hiding' , function () {
var slideUpStub = sinon . stub ( $ . fn , 'slideUp' );
$tr . find ( '.action-menu' ). click ();
expect ( $tr . find ( '.fileActionsMenu' ). length ). toEqual ( 1 );
OC . hideMenus ();
// sliding animation
expect ( slideUpStub . calledOnce ). toEqual ( true );
slideUpStub . getCall ( 0 ). args [ 1 ]();
expect ( $tr . hasClass ( 'mouseOver' )). toEqual ( false );
expect ( $tr . find ( '.fileActionsMenu' ). length ). toEqual ( 0 );
});
});
});
describe ( 'custom rendering' , function () {
var $tr ;
beforeEach ( function () {
var fileData = {
id : 18 ,
type : 'file' ,
name : 'testName.txt' ,
mimetype : 'text/plain' ,
size : '1234' ,
etag : 'a01234c' ,
mtime : '123456'
};
$tr = fileList . add ( fileData );
});
it ( 'regular function' , function () {
var actionStub = sinon . stub ();
fileActions . registerAction ({
name : 'Test' ,
displayName : '' ,
mime : 'all' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
permissions : OC . PERMISSION_READ ,
render : function ( actionSpec , isDefault , context ) {
expect ( actionSpec . name ). toEqual ( 'Test' );
expect ( actionSpec . displayName ). toEqual ( '' );
expect ( actionSpec . permissions ). toEqual ( OC . PERMISSION_READ );
expect ( actionSpec . mime ). toEqual ( 'all' );
expect ( isDefault ). toEqual ( false );
expect ( context . fileList ). toEqual ( fileList );
expect ( context . $file [ 0 ]). toEqual ( $tr [ 0 ]);
var $customEl = $ ( '<a class="action action-test" href="#"><span>blabli</span><span>blabla</span></a>' );
$tr . find ( 'td:first' ). append ( $customEl );
return $customEl ;
},
actionHandler : actionStub
});
fileActions . display ( $tr . find ( 'td.filename' ), true , fileList );
var $actionEl = $tr . find ( 'td:first .action-test' );
expect ( $actionEl . length ). toEqual ( 1 );
expect ( $actionEl . hasClass ( 'action' )). toEqual ( true );
$actionEl . click ();
expect ( actionStub . calledOnce ). toEqual ( true );
expect ( actionStub . getCall ( 0 ). args [ 0 ]). toEqual ( 'testName.txt' );
});
});
describe ( 'merging' , function () {
var $tr ;
beforeEach ( function () {
var fileData = {
id : 18 ,
type : 'file' ,
name : 'testName.txt' ,
path : '/anotherpath/there' ,
mimetype : 'text/plain' ,
size : '1234' ,
etag : 'a01234c' ,
mtime : '123456'
};
$tr = fileList . add ( fileData );
});
afterEach ( function () {
$tr = null ;
});
it ( 'copies all actions to target file actions' , function () {
var actions1 = new OCA . Files . FileActions ();
var actions2 = new OCA . Files . FileActions ();
var actionStub1 = sinon . stub ();
var actionStub2 = sinon . stub ();
actions1 . registerAction ({
name : 'Test' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'all' ,
permissions : OC . PERMISSION_READ ,
icon : OC . imagePath ( 'core' , 'actions/test' ),
actionHandler : actionStub1
});
actions2 . registerAction ({
name : 'Test2' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'all' ,
permissions : OC . PERMISSION_READ ,
icon : OC . imagePath ( 'core' , 'actions/test' ),
actionHandler : actionStub2
});
actions2 . merge ( actions1 );
actions2 . display ( $tr . find ( 'td.filename' ), true , fileList );
expect ( $tr . find ( '.action-test' ). length ). toEqual ( 1 );
expect ( $tr . find ( '.action-test2' ). length ). toEqual ( 1 );
$tr . find ( '.action-test' ). click ();
expect ( actionStub1 . calledOnce ). toEqual ( true );
expect ( actionStub2 . notCalled ). toEqual ( true );
actionStub1 . reset ();
$tr . find ( '.action-test2' ). click ();
expect ( actionStub1 . notCalled ). toEqual ( true );
expect ( actionStub2 . calledOnce ). toEqual ( true );
});
it ( 'overrides existing actions on merge' , function () {
var actions1 = new OCA . Files . FileActions ();
var actions2 = new OCA . Files . FileActions ();
var actionStub1 = sinon . stub ();
var actionStub2 = sinon . stub ();
actions1 . registerAction ({
name : 'Test' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
mime : 'all' ,
permissions : OC . PERMISSION_READ ,
icon : OC . imagePath ( 'core' , 'actions/test' ),
actionHandler : actionStub1
});
actions2 . registerAction ({
name : 'Test' , // override
mime : 'all' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
permissions : OC . PERMISSION_READ ,
icon : OC . imagePath ( 'core' , 'actions/test' ),
actionHandler : actionStub2
});
actions1 . merge ( actions2 );
actions1 . display ( $tr . find ( 'td.filename' ), true , fileList );
expect ( $tr . find ( '.action-test' ). length ). toEqual ( 1 );
$tr . find ( '.action-test' ). click ();
expect ( actionStub1 . notCalled ). toEqual ( true );
expect ( actionStub2 . calledOnce ). toEqual ( true );
});
it ( 'overrides existing action when calling register after merge' , function () {
var actions1 = new OCA . Files . FileActions ();
var actions2 = new OCA . Files . FileActions ();
var actionStub1 = sinon . stub ();
var actionStub2 = sinon . stub ();
actions1 . registerAction ({
mime : 'all' ,
name : 'Test' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
permissions : OC . PERMISSION_READ ,
icon : OC . imagePath ( 'core' , 'actions/test' ),
actionHandler : actionStub1
});
actions1 . merge ( actions2 );
// late override
actions1 . registerAction ({
mime : 'all' ,
name : 'Test' , // override
type : OCA . Files . FileActions . TYPE_INLINE ,
permissions : OC . PERMISSION_READ ,
icon : OC . imagePath ( 'core' , 'actions/test' ),
actionHandler : actionStub2
});
actions1 . display ( $tr . find ( 'td.filename' ), true , fileList );
expect ( $tr . find ( '.action-test' ). length ). toEqual ( 1 );
$tr . find ( '.action-test' ). click ();
expect ( actionStub1 . notCalled ). toEqual ( true );
expect ( actionStub2 . calledOnce ). toEqual ( true );
});
it ( 'leaves original file actions untouched (clean copy)' , function () {
var actions1 = new OCA . Files . FileActions ();
var actions2 = new OCA . Files . FileActions ();
var actionStub1 = sinon . stub ();
var actionStub2 = sinon . stub ();
actions1 . registerAction ({
mime : 'all' ,
name : 'Test' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
permissions : OC . PERMISSION_READ ,
icon : OC . imagePath ( 'core' , 'actions/test' ),
actionHandler : actionStub1
});
// copy the Test action to actions2
actions2 . merge ( actions1 );
// late override
actions2 . registerAction ({
mime : 'all' ,
name : 'Test' , // override
type : OCA . Files . FileActions . TYPE_INLINE ,
permissions : OC . PERMISSION_READ ,
icon : OC . imagePath ( 'core' , 'actions/test' ),
actionHandler : actionStub2
});
// check if original actions still call the correct handler
actions1 . display ( $tr . find ( 'td.filename' ), true , fileList );
expect ( $tr . find ( '.action-test' ). length ). toEqual ( 1 );
$tr . find ( '.action-test' ). click ();
expect ( actionStub1 . calledOnce ). toEqual ( true );
expect ( actionStub2 . notCalled ). toEqual ( true );
});
});
describe ( 'events' , function () {
var clock ;
beforeEach ( function () {
clock = sinon . useFakeTimers ();
});
afterEach ( function () {
clock . restore ();
});
it ( 'notifies update event handlers once after multiple changes' , function () {
var actionStub = sinon . stub ();
var handler = sinon . stub ();
fileActions . on ( 'registerAction' , handler );
fileActions . registerAction ({
mime : 'all' ,
name : 'Test' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
permissions : OC . PERMISSION_READ ,
icon : OC . imagePath ( 'core' , 'actions/test' ),
actionHandler : actionStub
});
fileActions . registerAction ({
mime : 'all' ,
name : 'Test2' ,
permissions : OC . PERMISSION_READ ,
icon : OC . imagePath ( 'core' , 'actions/test' ),
actionHandler : actionStub
});
expect ( handler . calledTwice ). toEqual ( true );
});
it ( 'does not notifies update event handlers after unregistering' , function () {
var actionStub = sinon . stub ();
var handler = sinon . stub ();
fileActions . on ( 'registerAction' , handler );
fileActions . off ( 'registerAction' , handler );
fileActions . registerAction ({
mime : 'all' ,
name : 'Test' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
permissions : OC . PERMISSION_READ ,
icon : OC . imagePath ( 'core' , 'actions/test' ),
actionHandler : actionStub
});
fileActions . registerAction ({
mime : 'all' ,
name : 'Test2' ,
type : OCA . Files . FileActions . TYPE_INLINE ,
permissions : OC . PERMISSION_READ ,
icon : OC . imagePath ( 'core' , 'actions/test' ),
actionHandler : actionStub
});
expect ( handler . notCalled ). toEqual ( true );
});
});
describe ( 'default actions' , function () {
describe ( 'download' , function () {
it ( 'redirects to URL and sets busy state to list' , function () {
var handleDownloadStub = sinon . stub ( OCA . Files . Files , 'handleDownload' );
var busyStub = sinon . stub ( fileList , 'showFileBusyState' );
var fileData = {
id : 18 ,
type : 'file' ,
name : 'testName.txt' ,
mimetype : 'text/plain' ,
size : '1234' ,
etag : 'a01234c' ,
mtime : '123456' ,
permissions : OC . PERMISSION_READ | OC . PERMISSION_UPDATE
};
// note: FileActions.display() is called implicitly
fileList . add ( fileData );
var model = fileList . getModelForFile ( 'testName.txt' );
fileActions . registerDefaultActions ();
fileActions . triggerAction ( 'Download' , model , fileList );
expect ( busyStub . calledOnce ). toEqual ( true );
expect ( busyStub . calledWith ( 'testName.txt' , true )). toEqual ( true );
expect ( handleDownloadStub . calledOnce ). toEqual ( true );
expect ( handleDownloadStub . getCall ( 0 ). args [ 0 ]). toEqual (
OC . getRootPath () + '/remote.php/webdav/subdir/testName.txt'
);
busyStub . reset ();
handleDownloadStub . yield ();
expect ( busyStub . calledOnce ). toEqual ( true );
expect ( busyStub . calledWith ( 'testName.txt' , false )). toEqual ( true );
busyStub . restore ();
handleDownloadStub . restore ();
});
});
});
describe ( 'download spinner' , function () {
var FileActions = OCA . Files . FileActions ;
var $el ;
beforeEach ( function () {
$el = $ ( '<a href="#"><span class="icon icon-download"></span><span>Download</span></a>' );
});
it ( 'replaces download icon with spinner' , function () {
FileActions . updateFileActionSpinner ( $el , true );
expect ( $el . find ( '.icon.icon-loading-small' ). length ). toEqual ( 1 );
expect ( $el . find ( '.icon.icon-download' ). hasClass ( 'hidden' )). toEqual ( true );
});
it ( 'replaces spinner back with download icon with spinner' , function () {
FileActions . updateFileActionSpinner ( $el , true );
FileActions . updateFileActionSpinner ( $el , false );
expect ( $el . find ( '.icon.icon-loading-small' ). length ). toEqual ( 0 );
expect ( $el . find ( '.icon.icon-download' ). hasClass ( 'hidden' )). toEqual ( false );
});
});
});