summaryrefslogtreecommitdiffstats
path: root/wp-admin/js/link.js
diff options
context:
space:
mode:
Diffstat (limited to 'wp-admin/js/link.js')
-rw-r--r--wp-admin/js/link.js140
1 files changed, 140 insertions, 0 deletions
diff --git a/wp-admin/js/link.js b/wp-admin/js/link.js
new file mode 100644
index 0000000..1456ba9
--- /dev/null
+++ b/wp-admin/js/link.js
@@ -0,0 +1,140 @@
+/**
+ * @output wp-admin/js/link.js
+ */
+
+/* global postboxes, deleteUserSetting, setUserSetting, getUserSetting */
+
+jQuery( function($) {
+
+ var newCat, noSyncChecks = false, syncChecks, catAddAfter;
+
+ $('#link_name').trigger( 'focus' );
+ // Postboxes.
+ postboxes.add_postbox_toggles('link');
+
+ /**
+ * Adds event that opens a particular category tab.
+ *
+ * @ignore
+ *
+ * @return {boolean} Always returns false to prevent the default behavior.
+ */
+ $('#category-tabs a').on( 'click', function(){
+ var t = $(this).attr('href');
+ $(this).parent().addClass('tabs').siblings('li').removeClass('tabs');
+ $('.tabs-panel').hide();
+ $(t).show();
+ if ( '#categories-all' == t )
+ deleteUserSetting('cats');
+ else
+ setUserSetting('cats','pop');
+ return false;
+ });
+ if ( getUserSetting('cats') )
+ $('#category-tabs a[href="#categories-pop"]').trigger( 'click' );
+
+ // Ajax Cat.
+ newCat = $('#newcat').one( 'focus', function() { $(this).val( '' ).removeClass( 'form-input-tip' ); } );
+
+ /**
+ * After adding a new category, focus on the category add input field.
+ *
+ * @return {void}
+ */
+ $('#link-category-add-submit').on( 'click', function() { newCat.focus(); } );
+
+ /**
+ * Synchronize category checkboxes.
+ *
+ * This function makes sure that the checkboxes are synced between the all
+ * categories tab and the most used categories tab.
+ *
+ * @since 2.5.0
+ *
+ * @return {void}
+ */
+ syncChecks = function() {
+ if ( noSyncChecks )
+ return;
+ noSyncChecks = true;
+ var th = $(this), c = th.is(':checked'), id = th.val().toString();
+ $('#in-link-category-' + id + ', #in-popular-link_category-' + id).prop( 'checked', c );
+ noSyncChecks = false;
+ };
+
+ /**
+ * Adds event listeners to an added category.
+ *
+ * This is run on the addAfter event to make sure the correct event listeners
+ * are bound to the DOM elements.
+ *
+ * @since 2.5.0
+ *
+ * @param {string} r Raw XML response returned from the server after adding a
+ * category.
+ * @param {Object} s List manager configuration object; settings for the Ajax
+ * request.
+ *
+ * @return {void}
+ */
+ catAddAfter = function( r, s ) {
+ $(s.what + ' response_data', r).each( function() {
+ var t = $($(this).text());
+ t.find( 'label' ).each( function() {
+ var th = $(this),
+ val = th.find('input').val(),
+ id = th.find('input')[0].id,
+ name = th.text().trim(),
+ o;
+ $('#' + id).on( 'change', syncChecks );
+ o = $( '<option value="' + parseInt( val, 10 ) + '"></option>' ).text( name );
+ } );
+ } );
+ };
+
+ /*
+ * Instantiates the list manager.
+ *
+ * @see js/_enqueues/lib/lists.js
+ */
+ $('#categorychecklist').wpList( {
+ // CSS class name for alternate styling.
+ alt: '',
+
+ // The type of list.
+ what: 'link-category',
+
+ // ID of the element the parsed Ajax response will be stored in.
+ response: 'category-ajax-response',
+
+ // Callback that's run after an item got added to the list.
+ addAfter: catAddAfter
+ } );
+
+ // All categories is the default tab, so we delete the user setting.
+ $('a[href="#categories-all"]').on( 'click', function(){deleteUserSetting('cats');});
+
+ // Set a preference for the popular categories to cookies.
+ $('a[href="#categories-pop"]').on( 'click', function(){setUserSetting('cats','pop');});
+
+ if ( 'pop' == getUserSetting('cats') )
+ $('a[href="#categories-pop"]').trigger( 'click' );
+
+ /**
+ * Adds event handler that shows the interface controls to add a new category.
+ *
+ * @ignore
+ *
+ * @param {Event} event The event object.
+ * @return {boolean} Always returns false to prevent regular link
+ * functionality.
+ */
+ $('#category-add-toggle').on( 'click', function() {
+ $(this).parents('div:first').toggleClass( 'wp-hidden-children' );
+ $('#category-tabs a[href="#categories-all"]').trigger( 'click' );
+ $('#newcategory').trigger( 'focus' );
+ return false;
+ } );
+
+ $('.categorychecklist :checkbox').on( 'change', syncChecks ).filter( ':checked' ).trigger( 'change' );
+});