8
0
Просмотр исходного кода

Changed: Stub new dropdown creator methods.

Maciej Gołaszewski 8 лет назад
Родитель
Сommit
aecb314b64

+ 9 - 4
packages/ckeditor5-ui/src/dropdown/button/createbuttondropdown.js

@@ -7,10 +7,14 @@
  * @module ui/dropdown/button/createbuttondropdown
  */
 
-import createDropdown from '../createdropdown';
-
 import ToolbarView from '../../toolbar/toolbarview';
-import { closeDropdownOnBlur, closeDropdownOnExecute, focusDropdownContentsOnArrows } from '../utils';
+import {
+	closeDropdownOnBlur,
+	closeDropdownOnExecute,
+	createButtonForDropdown,
+	createDropdownView,
+	focusDropdownContentsOnArrows
+} from '../utils';
 
 import '../../../theme/components/dropdown/buttondropdown.css';
 
@@ -78,8 +82,9 @@ export default function createButtonDropdown( model, locale ) {
 			}
 		);
 	}
+	const buttonView = createButtonForDropdown( model, locale );
+	const dropdownView = createDropdownView( model, buttonView, locale );
 
-	const dropdownView = createDropdown( model, locale );
 	const toolbarView = dropdownView.toolbarView = new ToolbarView();
 
 	toolbarView.bind( 'isVertical', 'className' ).to( model, 'isVertical', 'toolbarClassName' );

+ 4 - 14
packages/ckeditor5-ui/src/dropdown/createdropdown.js

@@ -7,9 +7,7 @@
  * @module ui/dropdown/createdropdown
  */
 
-import ButtonView from '../button/buttonview';
-import DropdownView from './dropdownview';
-import DropdownPanelView from './dropdownpanelview';
+import { createButtonForDropdown, createDropdownView } from './utils';
 
 /**
  * A helper which creates an instance of {@link module:ui/dropdown/dropdownview~DropdownView} class using
@@ -38,17 +36,9 @@ import DropdownPanelView from './dropdownpanelview';
  * @param {module:ui/dropdown/dropdownmodel~DropdownModel} model Model of this dropdown.
  * @param {module:utils/locale~Locale} locale The locale instance.
  * @returns {module:ui/dropdown/dropdownview~DropdownView} The dropdown view instance.
+ *
+ * TODO: only used in tests.
  */
 export default function createDropdown( model, locale ) {
-	const buttonView = new ButtonView( locale );
-	const panelView = new DropdownPanelView( locale );
-	const dropdownView = new DropdownView( locale, buttonView, panelView );
-
-	dropdownView.bind( 'isEnabled' ).to( model );
-	buttonView.bind( 'label', 'isEnabled', 'withText', 'keystroke', 'tooltip', 'icon' ).to( model );
-	buttonView.bind( 'isOn' ).to( model, 'isOn', dropdownView, 'isOpen', ( isOn, isOpen ) => {
-		return isOn || isOpen;
-	} );
-
-	return dropdownView;
+	return createDropdownView( model, createButtonForDropdown( model, locale ), locale );
 }

+ 3 - 7
packages/ckeditor5-ui/src/dropdown/createsplitbuttondropdown.js

@@ -7,9 +7,7 @@
  * @module ui/dropdown/createsplitbuttondropdown
  */
 
-import SplitButtonView from '../button/splitbuttonview';
-import DropdownPanelView from './dropdownpanelview';
-import DropdownView from './dropdownview';
+import { createDropdownView, createSplitButtonForDropdown } from './utils';
 
 /**
  * Create a dropdown that have a split button as button.
@@ -17,14 +15,12 @@ import DropdownView from './dropdownview';
  * TODO: docs
  */
 export default function createSplitButtonDropdown( model, locale ) {
-	const splitButtonView = new SplitButtonView( locale );
+	const splitButtonView = createSplitButtonForDropdown( model, locale );
 
-	splitButtonView.bind( 'label', 'isOn', 'isEnabled', 'withText', 'keystroke', 'tooltip', 'icon' ).to( model );
 	splitButtonView.buttonView.bind( 'isOn' ).to( model );
 	splitButtonView.buttonView.bind( 'tooltip' ).to( model );
 
-	const panelView = new DropdownPanelView( locale );
-	const dropdownView = new DropdownView( locale, splitButtonView, panelView );
+	const dropdownView = createDropdownView( model, splitButtonView, locale );
 
 	// Extend template to hide arrow from dropdown.
 	// TODO: enable this on normal button instead of hiding it

+ 8 - 3
packages/ckeditor5-ui/src/dropdown/list/createlistdropdown.js

@@ -9,8 +9,11 @@
 
 import ListView from '../../list/listview';
 import ListItemView from '../../list/listitemview';
-import createDropdown from '../createdropdown';
-import { closeDropdownOnBlur, closeDropdownOnExecute, focusDropdownContentsOnArrows } from '../utils';
+
+import {
+	closeDropdownOnBlur, closeDropdownOnExecute, createButtonForDropdown, createDropdownView,
+	focusDropdownContentsOnArrows
+} from '../utils';
 
 /**
  * Creates an instance of {@link module:ui/dropdown/list/listdropdownview~ListDropdownView} class using
@@ -51,7 +54,9 @@ import { closeDropdownOnBlur, closeDropdownOnExecute, focusDropdownContentsOnArr
  * @returns {module:ui/dropdown/list/listdropdownview~ListDropdownView} The list dropdown view instance.
  */
 export default function createListDropdown( model, locale ) {
-	const dropdownView = createDropdown( model, locale );
+	const buttonView = createButtonForDropdown( model, locale );
+	const dropdownView = createDropdownView( model, buttonView, locale );
+
 	const listView = dropdownView.listView = new ListView( locale );
 
 	listView.items.bindTo( model.items ).using( itemModel => {

+ 37 - 0
packages/ckeditor5-ui/src/dropdown/utils.js

@@ -8,6 +8,10 @@
  */
 
 import clickOutsideHandler from '../bindings/clickoutsidehandler';
+import SplitButtonView from '../button/splitbuttonview';
+import ButtonView from '../button/buttonview';
+import DropdownPanelView from './dropdownpanelview';
+import DropdownView from './dropdownview';
 
 /**
  * Adds a behavior to a dropdownView that focuses dropdown panel view contents on keystrokes.
@@ -68,3 +72,36 @@ export function closeDropdownOnBlur( dropdownView ) {
 		} );
 	} );
 }
+
+/** TODO: new methods below - refactor to own files later */
+
+export function createButtonForDropdown( model, locale ) {
+	const buttonView = new ButtonView( locale );
+
+	buttonView.bind( 'label', 'isEnabled', 'withText', 'keystroke', 'tooltip', 'icon' ).to( model );
+
+	return buttonView;
+}
+
+export function createSplitButtonForDropdown( model, locale ) {
+	const buttonView = new SplitButtonView( locale );
+
+	// TODO: check 'isOn' binding.
+	buttonView.bind( 'label', 'isOn', 'isEnabled', 'withText', 'keystroke', 'tooltip', 'icon' ).to( model );
+
+	return buttonView;
+}
+
+export function createDropdownView( model, buttonView, locale ) {
+	const panelView = new DropdownPanelView( locale );
+	const dropdownView = new DropdownView( locale, buttonView, panelView );
+
+	dropdownView.bind( 'isEnabled' ).to( model );
+
+	// TODO: check 'isOn' binding.
+	// buttonView.bind( 'isOn' ).to( model, 'isOn', dropdownView, 'isOpen', ( isOn, isOpen ) => {
+	// 	return isOn || isOpen;
+	// } );
+
+	return dropdownView;
+}