jquery текст сортируемого перетаскивания div не редактируется ckeditor - PullRequest
0 голосов
/ 27 февраля 2020

У меня следующий исходный код

$( function() {
  $( "#sortable1, #sortable2" ).sortable({
    connectWith: ".connectedSortable"
  }).disableSelection();
} );

InlineEditor
  .create( document.querySelector( '.editor' ) )
  .catch( error => {
    console.error( error );
  });
#sortable1, #sortable2 {
  border: 1px solid #eee;
  width: 142px;
  min-height: 20px;
  list-style-type: none;
  margin: 0;
  padding: 5px 0 0 0;
  float: left;
  margin-right: 10px;
}
#sortable1 li, #sortable2 li {
  margin: 0 5px 5px 5px;
  padding: 5px;
  font-size: 1.2em;
  width: 120px;
}
<!doctype html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>jQuery UI Sortable - Connect lists</title>
      <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
      <link rel="stylesheet" href="/resources/demos/style.css">
      <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
      <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <body>
     
    <p class="editor">Text edited by ckeditor outer sortable can edit by ckeditor</p>
    
    
    <ul id="sortable1" class="connectedSortable">
      <li class="ui-state-default">Item 1</li>
      <li class="ui-state-default">Item 2</li>
      <li class="ui-state-default">Item 3</li>
      <li class="ui-state-default">Item 4</li>
      <li class="ui-state-default">Item 5</li>
    </ul>
     
    <ul id="sortable2" class="connectedSortable">
      <li class="ui-state-highlight editor">Text edited by ckeditor inside sortable can not edit by ckeditor</li>
      <li class="ui-state-highlight">Item 2</li>
      <li class="ui-state-highlight">Item 3</li>
      <li class="ui-state-highlight">Item 4</li>
      <li class="ui-state-highlight">Item 5</li>
    </ul>
     
     
    </body>
    </html>
    
    <script src="https://cdn.ckeditor.com/ckeditor5/17.0.0/inline/ckeditor.js"></script>

Этот связанный сортируемый перетаскиваемый список создается с помощью jquery ui. Я хотел бы редактировать текст для каждого сортируемого текста <li> элементов по ckeditor. Но, используя приведенный выше фрагмент кода, внутренний текст сортируемого элемента недоступен для редактирования. Я хотел бы, чтобы оба действия были перетаскиваемыми элементами и встроенным редактированием текста.

Как изменить сегмент кода, который можно редактировать с помощью текста сортируемого элемента?

1 Ответ

1 голос
/ 27 февраля 2020

Вы должны предоставить атрибут id для вашего тега HTML, вероятно, чтобы библиотека не перепутала ваш тег с другими тегами по ошибке.

Обновление : лучший способ получить реализацию для этой ситуации - настроить sortable() с отключенной опцией, а при dbclick() он включит встроенный редактор и отключит сортируемую опцию, а на blur() мы уничтожим встроенный редактор и повторно включить функцию сортировки для элемента.

Я не достаточно много тестировал, поэтому вы можете столкнуться с некоторыми ошибками, связанными с тем, что blur() не запускается должным образом на CKeditor, я оставлю это тебе. Просто дважды щелкните по элементу editor <li>, это активирует CKeditor, а затем снова щелкните внутри него, чтобы появился редактор, затем вы можете щелкнуть в любом месте страницы, чтобы отключить редактор и повторно сохранить функциональность sortable().

вот рабочий фрагмент.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>jQuery UI Sortable - Connect lists</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <style>
  #sortable1, #sortable2 {
    border: 1px solid #eee;
    width: 142px;
    min-height: 20px;
    list-style-type: none;
    margin: 0;
    padding: 5px 0 0 0;
    float: left;
    margin-right: 10px;
  }
  #sortable1 li, #sortable2 li {
    margin: 0 5px 5px 5px;
    padding: 5px;
    font-size: 1.2em;
    width: 120px;
  }
  </style>
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  
</head>
<body>

<p class="editor">Text edited by ckeditor outer sortable can edit by ckeditor</p>


<ul id="sortable1" class="connectedSortable">
  <li class="ui-state-default">Item 1</li>
  <li class="ui-state-default">Item 2</li>
  <li class="ui-state-default">Item 3</li>
  <li class="ui-state-default">Item 4</li>
  <li class="ui-state-default">Item 5</li>
</ul>

<ul id="sortable2" class="connectedSortable">
  <li class="ui-state-highlight" id="editor">Text edited by ckeditor inside sortable can not edit by ckeditor</li>
  <li class="ui-state-highlight">Item 2</li>
  <li class="ui-state-highlight">Item 3</li>
  <li class="ui-state-highlight">Item 4</li>
  <li class="ui-state-highlight">Item 5</li>
</ul>

<!-- <div id="editor">
    <p>this is test</p>
</div> -->
</body>
</html>

<script src="https://cdn.ckeditor.com/ckeditor5/17.0.0/inline/ckeditor.js"></script>
<script>
    $( function() {
      var myEditor;
        $( "#sortable1, #sortable2" ).sortable({
          connectWith: ".connectedSortable",
          cancel: ".unsortable" 
        });

        document.querySelector( '#editor' ).addEventListener('dblclick', function() {
            $(this).addClass('unsortable');
            myEditor = InlineEditor
              .create( document.querySelector( '#editor' ) )
              .catch( error => {
                  console.error( error );
              }).then(editor => myEditor = editor)
        });

        document.querySelector( '#editor' ).addEventListener('blur', function() {
            myEditor.destroy().then(editor => $(this).removeClass('unsortable'))
        });
} );
  
</script>
...