var cloneCounter = 0;
- mw.hook( 'htmlform.enhance' ).add( function ( $root ) {
- $root.find( '.mw-htmlform-cloner-delete-button' ).filter( ':input' ).click( function ( ev ) {
- ev.preventDefault();
- $( this ).closest( 'li.mw-htmlform-cloner-li' ).remove();
- } );
-
- $root.find( '.mw-htmlform-cloner-create-button' ).filter( ':input' ).click( function ( ev ) {
- var $ul, $li, html;
-
- ev.preventDefault();
-
- $ul = $( this ).prev( 'ul.mw-htmlform-cloner-ul' );
-
+ /**
+ * Appends a new row with fields to the cloner.
+ *
+ * @ignore
+ * @param {jQuery} $createButton
+ */
+ function appendToCloner( $createButton ) {
+ var $li,
+ $ul = $createButton.prev( 'ul.mw-htmlform-cloner-ul' ),
html = $ul.data( 'template' ).replace(
new RegExp( mw.RegExp.escape( $ul.data( 'uniqueId' ) ), 'g' ),
'clone' + ( ++cloneCounter )
);
- $li = $( '<li>' )
- .addClass( 'mw-htmlform-cloner-li' )
- .html( html )
- .appendTo( $ul );
+ $li = $( '<li>' )
+ .addClass( 'mw-htmlform-cloner-li' )
+ .html( html )
+ .appendTo( $ul );
- mw.hook( 'htmlform.enhance' ).fire( $li );
+ mw.hook( 'htmlform.enhance' ).fire( $li );
+ }
+
+ mw.hook( 'htmlform.enhance' ).add( function ( $root ) {
+ var $deleteElement = $root.find( '.mw-htmlform-cloner-delete-button' ),
+ $createElement = $root.find( '.mw-htmlform-cloner-create-button' ),
+ createButton;
+
+ $deleteElement.each( function () {
+ var $element = $( this ),
+ deleteButton;
+
+ if ( $element.hasClass( 'oo-ui-widget' ) ) {
+ deleteButton = OO.ui.infuse( $element );
+ deleteButton.on( 'click', function () {
+ deleteButton.$element.closest( 'li.mw-htmlform-cloner-li' ).remove();
+ } );
+ } else {
+ $element.filter( ':input' ).on( 'click', function ( e ) {
+ e.preventDefault();
+ $( this ).closest( 'li.mw-htmlform-cloner-li' ).remove();
+ } );
+ }
} );
+
+ if ( $createElement.hasClass( 'oo-ui-widget' ) ) {
+ createButton = OO.ui.infuse( $createElement );
+ createButton.on( 'click', function () {
+ appendToCloner( createButton.$element );
+ } );
+ } else {
+ $createElement.filter( ':input' ).on( 'click', function ( e ) {
+ e.preventDefault();
+
+ appendToCloner( $( this ) );
+ } );
+ }
} );
}() );