Skip to content

Commit

Permalink
Fixed - Folder rename not working if "space" is added in folder name #…
Browse files Browse the repository at this point in the history
…1054

Issue: #1054
  • Loading branch information
xdan committed Jan 8, 2024
1 parent b5ab5b2 commit b535c84
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 105 deletions.
14 changes: 9 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@
- `.jodit-filebrowser` class prefix was renamed to `.jodit-file-browser`
- CSS key `--color-background-filebrowser-folders` was removed from global scope.

### :bug: Bug Fix

- [Folder rename not working if "space" is added in folder name #1054](https://github.com/xdan/jodit/issues/1054)

#### :house: Internal

- Update dependencies
Expand Down Expand Up @@ -2443,11 +2447,11 @@ Related with https://github.com/xdan/jodit/issues/574. In some cases need to lim
- @property {IUIOption[]} link.selectOptionsClassName=[] The list of the option for the select (to use with
modeClassName="select")
- ex: [
- { value: "", text: "" },
- { value: "val1", text: "text1" },
- { value: "val2", text: "text2" },
- { value: "val3", text: "text3" }
- ]
- { value: "", text: "" },
- { value: "val1", text: "text1" },
- { value: "val2", text: "text2" },
- { value: "val3", text: "text3" }
- ]
PR: https://github.com/xdan/jodit/pull/577 Thanks @s-renier-taonix-fr
##### New option `statusbar: boolean = true`
Expand Down
4 changes: 2 additions & 2 deletions src/core/helpers/checker/is-valid-name.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@
*/

/**
* Check if name has normal format
* Check if name has a normal format
*/
export function isValidName(name: string): boolean {
if (!name.length) {
return false;
}

return !/[^0-9A-Za-zа-яА-ЯЁё\w\-_.]/.test(name);
return !/[^0-9A-Za-zа-яА-ЯЁё\w\-_. ]/.test(name) && name.trim().length > 0;
}
195 changes: 97 additions & 98 deletions src/modules/file-browser/file-browser.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -976,22 +976,27 @@ function getFirstItem(fb, index = 0, file = false) {
});
});

describe('Rename', () => {
describe('Folder', () => {
it('Should create button inside every folder of list', async () => {
const editor = getJodit({
filebrowser: {
ajax: {
url: 'https://xdsoft.net/jodit/connector/index.php'
}
describe('CRUD Folder', () => {
let editor, filebrowser;

beforeEach(async () => {
editor = getJodit({
filebrowser: {
ajax: {
url: 'https://xdsoft.net/jodit/connector/index.php'
}
});
}
});

const filebrowser = editor.filebrowser;
filebrowser = editor.filebrowser;
await filebrowser.open(function () {});
});

await filebrowser.open(function () {});
describe('Rename', () => {
let dialog, tree;

const tree = filebrowser.tree.container;
beforeEach(() => {
tree = filebrowser.tree.container;

expect(tree).is.not.null;

Expand All @@ -1010,132 +1015,126 @@ function getFirstItem(fb, index = 0, file = false) {
);
simulateEvent('click', trigger);

const dialog = getOpenedDialog(editor);
dialog = getOpenedDialog(editor);
expect(dialog).is.not.null;
expect(dialog).does.not.equal(filebrowser._dialog);

expect(dialog.querySelector('input').value).equals(
'ceicom'
);
});

dialog.querySelector('input').value = 'ceicom1';
clickButton('ok', dialog);

await filebrowser.async.requestIdlePromise();

const item2 = tree.querySelectorAll(
'.' + filebrowser.tree.getFullElName('item')
)[1];
expect(item2.textContent.trim()).equals('ceicom1');
describe('Folder', () => {
it('Should create button inside every folder of list', async () => {
dialog.querySelector('input').value = 'ceicom1';
clickButton('ok', dialog);

filebrowser.destruct();
});
});
});
await filebrowser.async.requestIdlePromise();

describe('Remove', () => {
describe('Folder', () => {
it('Should create button inside every folder of list', async () => {
const editor = getJodit({
filebrowser: {
ajax: {
url: 'https://xdsoft.net/jodit/connector/index.php'
}
}
const item2 = tree.querySelectorAll(
'.' + filebrowser.tree.getFullElName('item')
)[1];
expect(item2.textContent.trim()).equals('ceicom1');
});

const filebrowser = editor.filebrowser;
describe('With space', () => {
it('Should rename folder correct', async () => {
dialog.querySelector('input').value =
'ceicom1 post';
clickButton('ok', dialog);

await filebrowser.open(function () {});
await filebrowser.async.requestIdlePromise();

const tree = filebrowser.tree.container;
const item2 = tree.querySelectorAll(
'.' + filebrowser.tree.getFullElName('item')
)[1];
expect(item2.textContent.trim()).equals(
'ceicom1 post'
);
});

expect(tree).is.not.null;
describe('Only space', () => {
it('Should not rename folder correct', async () => {
dialog.querySelector('input').value = ' ';
clickButton('ok', dialog);

const item = tree.querySelectorAll(
'.' + filebrowser.tree.getFullElName('item')
)[1];
await filebrowser.async.requestIdlePromise();

expect(item).is.not.null;
const item2 = tree.querySelectorAll(
'.' + filebrowser.tree.getFullElName('item')
)[1];
expect(item2.textContent.trim()).equals(
'ceicom'
);
});
});
});
});
});

const trigger = getButton('remove', item);
describe('Remove', () => {
describe('Folder', () => {
it('Should create button inside every folder of list', async () => {
const tree = filebrowser.tree.container;

expect(trigger).is.not.null;
expect(tree).is.not.null;

simulateEvent('click', trigger);
const item = tree.querySelectorAll(
'.' + filebrowser.tree.getFullElName('item')
)[1];

const dialog = getOpenedDialog(editor);
expect(dialog).is.not.null;
expect(dialog).does.not.equal(filebrowser._dialog);
expect(item).is.not.null;

clickButton('ok', dialog);
const trigger = getButton('remove', item);

filebrowser.destruct();
});
});
});

describe('Create', () => {
describe('Folder', () => {
it('Should create button below folders list', async () => {
const editor = getJodit({
filebrowser: {
ajax: {
url: 'https://xdsoft.net/jodit/connector/index.php'
}
}
});
expect(trigger).is.not.null;

const filebrowser = editor.filebrowser;
simulateEvent('click', trigger);

await filebrowser.open(function () {});
const dialog = getOpenedDialog(editor);
expect(dialog).is.not.null;
expect(dialog).does.not.equal(filebrowser._dialog);

const addfolder = getButton('plus', filebrowser.tree);
clickButton('ok', dialog);

expect(addfolder).is.not.null;
filebrowser.destruct();
filebrowser.destruct();
});
});
});

describe('Create new folder', () => {
it('Should create new folder', async () => {
const editor = getJodit({
filebrowser: {
ajax: {
url: 'https://xdsoft.net/jodit/connector/index.php'
}
}
});

const filebrowser = editor.filebrowser;

await filebrowser.open(function () {});

describe('Create', () => {
describe('Folder', () => {
it('Should create button below folders list', async () => {
const addfolder = getButton('plus', filebrowser.tree);

expect(addfolder).is.not.null;
});

simulateEvent('click', addfolder);
describe('Create new folder', () => {
it('Should create new folder', async () => {
const addfolder = getButton('plus', filebrowser.tree);

const dialog = getOpenedDialog(editor);
expect(addfolder).is.not.null;

expect(dialog).is.not.null;
dialog.querySelector('input').value = 'free';
clickButton('ok', dialog);
await filebrowser.async.requestIdlePromise();
simulateEvent('click', addfolder);

const tree = filebrowser.tree.container;
const dialog = getOpenedDialog(editor);

const item = tree.querySelectorAll(
'.' + filebrowser.tree.getFullElName('item')
)[1];
expect(item.textContent.trim()).equals('free');
expect(dialog).is.not.null;
dialog.querySelector('input').value = 'free';
clickButton('ok', dialog);
await filebrowser.async.requestIdlePromise();

filebrowser.destruct();
const tree = filebrowser.tree.container;

const item = tree.querySelectorAll(
'.' + filebrowser.tree.getFullElName('item')
)[1];
expect(item.textContent.trim()).equals('free');
});
});
});
});
});

describe('Context menu', () => {
describe('Right click on image', () => {
it('Should open context menu', async () => {
Expand Down

0 comments on commit b535c84

Please sign in to comment.