Make WordPress Core

Changeset 33528


Ignore:
Timestamp:
08/03/2015 07:27:27 PM (10 years ago)
Author:
westonruter
Message:

Customizer: Add QUnit tests for menus.

Props adamsilverstein, westonruter, jorbin.
Fixes #32688.

Location:
trunk/tests/qunit
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/qunit/fixtures/customize-menus.js

    r33451 r33528  
     1
    12window._wpCustomizeNavMenusSettings = {
    23    'nonce': 'yo',
     
    56    'allMenus': [{
    67        'term_id': '2',
    7         'name': 'Awesome menu',
    8         'slug': 'awesome-menu',
     8        'name': 'Social Menu',
     9        'slug': 'social-menu',
    910        'term_group': '0',
    1011        'term_taxonomy_id': '2',
     
    1516    }, {
    1617        'term_id': '3',
    17         'name': 'Cool Menu',
    18         'slug': 'cool-menu',
     18        'name': 'Primary Menu',
     19        'slug': 'primary-menu',
    1920        'term_group': '0',
    2021        'term_taxonomy_id': '3',
     
    4950        }
    5051    },
    51     'itemTypes': {
    52         'postTypes': {
    53             'page': {
    54                 'label': 'Page'
    55             },
    56             'post': {
    57                 'label': 'Post'
    58             }
     52    'itemTypes': [
     53        {
     54            'title': 'Post',
     55            'type': 'post_type',
     56            'object': 'post'
    5957        },
    60         'taxonomies': {
    61             'post_tag': {
    62                 'label': 'Tag'
    63             },
    64             'post_format': {
    65                 'label': 'Format'
    66             },
    67             'category': {
    68                 'label': 'Category'
    69             }
     58        {
     59            'title': 'Page',
     60            'type': 'post_type',
     61            'object': 'page'
     62        },
     63        {
     64            'title': 'Category',
     65            'type': 'taxonomy',
     66            'object': 'category'
     67        },
     68        {
     69            'title': 'Tag',
     70            'type': 'taxonomy',
     71            'object': 'post_tag'
     72        },
     73        {
     74            'title': 'Format',
     75            'type': 'taxonomy',
     76            'object': 'post_format'
    7077        }
    71     },
     78    ],
    7279    'l10n': {
    7380        'custom_label': 'Custom Link',
     
    98105    }
    99106};
    100 
    101107window._wpCustomizeSettings.panels.nav_menus = {
    102108    'id': 'nav_menus',
     
    110116};
    111117
     118// Nav Menu Locations
     119window._wpCustomizeSettings.sections.menu_locations = {
     120    'id': 'menu_locations',
     121    'description': '<p>Your theme contains 1 menu location. Select which menu you would like to use.<\/p><p>You can also place menus in widget areas with the Custom Menu widget.<\/p>',
     122    'priority': 5,
     123    'panel': 'nav_menus',
     124    'type': 'default',
     125    'title': 'Menu Locations',
     126    'content': '',
     127    'active': true,
     128    'instanceNumber': 13,
     129    'customizeAction': 'Customizing &#9656; Menus'
     130};
     131window._wpCustomizeSettings.settings['nav_menu_locations[social]'] = {
     132    'value': 2,
     133    'transport': 'postMessage',
     134    'dirty': false
     135};
     136window._wpCustomizeSettings.controls['nav_menu_locations[social]'] = {
     137    'settings': { 'default': 'nav_menu_locations[social]' },
     138    'type': 'nav_menu_location',
     139    'priority': 10,
     140    'active': true,
     141    'section': 'menu_locations',
     142    'content': '<li id="customize-control-nav_menu_locations-social" class="customize-control customize-control-nav_menu_location"> <label> <span class="customize-control-title">Social Links Menu</span> <select data-customize-setting-link="nav_menu_locations[social]"> <option value="0">&mdash; Select &mdash;</option><option value="59">Prim</option><option value="60" selected="selected">Social</option><option value="61">test11</option><option value="62">test222</option><option value="63">test333</option> </select> </label> </li>',
     143    'label': 'Social Links Menu',
     144    'description': '',
     145    'instanceNumber': 40,
     146    'locationId': 'social'
     147};
     148window._wpCustomizeSettings.settings['nav_menu_locations[primary]'] = {
     149    'value': 3,
     150    'transport': 'postMessage',
     151    'dirty': false
     152};
     153window._wpCustomizeSettings.controls['nav_menu_locations[primary]'] = {
     154    'active': true,
     155    'content': '<li id="customize-control-nav_menu_locations-primary" class="customize-control customize-control-nav_menu_location"> <label> <span class="customize-control-title">Primary Menu</span> <select data-customize-setting-link="nav_menu_locations[primary]"> <option value="0">&mdash; Select &mdash;</option><option value="59" selected="selected">Prim</option><option value="60">Social</option><option value="61">test11</option><option value="62">test222</option><option value="63">test333</option> </select> </label> </li>',
     156    'description': '',
     157    'instanceNumber': 39,
     158    'label': 'Primary Menu',
     159    'locationId': 'primary',
     160    'priority': 10,
     161    'section': 'menu_locations',
     162    'settings': {
     163        'default': 'nav_menu_locations[primary]'
     164    },
     165    'type': 'nav_menu_location'
     166};
     167
     168// Nav Menus
     169window._wpCustomizeSettings.sections['nav_menu[3]'] = {
     170    'id': 'nav_menu[3]',
     171    'description': '',
     172    'priority': 10,
     173    'panel': 'nav_menus',
     174    'type': 'nav_menu',
     175    'title': 'Primary Menu',
     176    'content': '',
     177    'active': true,
     178    'instanceNumber': 15,
     179    'customizeAction': 'Customizing &#9656; Menus',
     180    'menu_id': 3
     181};
     182window._wpCustomizeSettings.settings['nav_menu[3]'] = {
     183    'value': {
     184        'name': 'Primary menu',
     185        'description': '',
     186        'parent': 0,
     187        'auto_add': false
     188    },
     189    'transport': 'postMessage',
     190    'dirty': false
     191};
     192
     193window._wpCustomizeSettings.sections['nav_menu[2]'] = {
     194    'id': 'nav_menu[2]',
     195    'description': '',
     196    'priority': 10,
     197    'panel': 'nav_menus',
     198    'type': 'nav_menu',
     199    'title': 'Social menu',
     200    'content': '',
     201    'active': true,
     202    'instanceNumber': 14,
     203    'customizeAction': 'Customizing &#9656; Menus',
     204    'menu_id': 2
     205};
     206window._wpCustomizeSettings.settings['nav_menu[2]'] = {
     207    'value': {
     208        'name': 'Social menu',
     209        'description': '',
     210        'parent': 0,
     211        'auto_add': false
     212    },
     213    'transport': 'postMessage',
     214    'dirty': false
     215};
     216
     217// Menu items
     218window._wpCustomizeSettings.settings['nav_menu_item[2000]'] = {
     219    'dirty': false,
     220    'transport': 'postMessage',
     221    'value': {
     222        'attr_title': '',
     223        'classes': [
     224            ''
     225        ],
     226        'description': '',
     227        'menu_item_parent': 0,
     228        'nav_menu_term_id': 3,
     229        'object': 'page',
     230        'object_id': 2,
     231        'original_title': 'Sample Page',
     232        'position': 1,
     233        'status': 'publish',
     234        'target': '',
     235        'title': 'Sample Page',
     236        'type': 'post_type',
     237        'type_label': 'Page',
     238        'url': 'http://src.wordpress-develop.dev/sample-page/',
     239        'xfn': ''
     240    }
     241};
     242window._wpCustomizeSettings.controls['nav_menu_item[2000]'] = {
     243    'active': true,
     244    'attr_title': '',
     245    'classes': '',
     246    'content': '<li id="customize-control-nav_menu_item-2000" class="customize-control customize-control-nav_menu_item"> </li>',
     247    'depth': 0,
     248    'description': '',
     249    'el_classes': 'menu-item menu-item-depth-0 menu-item-page menu-item-edit-inactive',
     250    'instanceNumber': 42,
     251    'item_type': 'post_type',
     252    'item_type_label': 'Page',
     253    'label': 'Sample Page',
     254    'menu_item_id': 2000,
     255    'original_title': 'Sample Page',
     256    'parent': 0,
     257    'priority': 1,
     258    'section': 'nav_menu[3]',
     259    'settings': {
     260        'default': 'nav_menu_item[2000]'
     261    },
     262    'target': '',
     263    'title': 'Sample Page',
     264    'type': 'nav_menu_item',
     265    'url': 'http://src.wordpress-develop.dev/sample-page/',
     266    'xfn': ''
     267};
     268
     269window._wpCustomizeSettings.settings['nav_menu_item[2001]'] = {
     270    'dirty': false,
     271    'transport': 'postMessage',
     272    'value': {
     273        'attr_title': '',
     274        'classes': [
     275            ''
     276        ],
     277        'description': '',
     278        'menu_item_parent': 0,
     279        'nav_menu_term_id': 3,
     280        'object': 'custom',
     281        'object_id': 2001,
     282        'original_title': '',
     283        'position': 2,
     284        'status': 'publish',
     285        'target': '',
     286        'title': 'Example',
     287        'type': 'custom',
     288        'type_label': 'Custom Link',
     289        'url': 'http://example.com/',
     290        'xfn': ''
     291    }
     292};
     293window._wpCustomizeSettings.controls['nav_menu_item[2001]'] = {
     294    'active': true,
     295    'attr_title': '',
     296    'classes': '',
     297    'content': '<li id="customize-control-nav_menu_item-2001" class="customize-control customize-control-nav_menu_item"> </li>',
     298    'depth': 0,
     299    'description': '',
     300    'el_classes': 'menu-item menu-item-depth-0 menu-item-custom menu-item-edit-inactive',
     301    'instanceNumber': 46,
     302    'item_type': 'custom',
     303    'item_type_label': 'Custom Link',
     304    'label': 'Example',
     305    'menu_item_id': 2001,
     306    'original_title': '',
     307    'parent': 0,
     308    'priority': 2,
     309    'section': 'nav_menu[3]',
     310    'settings': {
     311        'default': 'nav_menu_item[2001]'
     312    },
     313    'target': '',
     314    'title': 'Example',
     315    'type': 'nav_menu_item',
     316    'url': 'http://example.com/',
     317    'xfn': ''
     318};
     319
     320window._wpCustomizeSettings.settings['nav_menu_item[2002]'] = {
     321    'dirty': false,
     322    'transport': 'postMessage',
     323    'value': {
     324        'attr_title': '',
     325        'classes': '',
     326        'description': '',
     327        'menu_item_parent': 2001,
     328        'nav_menu_term_id': 3,
     329        'object': '',
     330        'object_id': 0,
     331        'original_title': 'Sub-Example',
     332        'position': 3,
     333        'status': 'publish',
     334        'target': '',
     335        'title': 'Example',
     336        'type': 'custom',
     337        'type_label': 'Custom Link',
     338        'url': 'http://sub.example.com/',
     339        'xfn': ''
     340    }
     341};
     342window._wpCustomizeSettings.controls['nav_menu_item[2002]'] = {
     343    'active': true,
     344    'attr_title': '',
     345    'classes': '',
     346    'content': '<li id="customize-control-nav_menu_item-2002" class="customize-control customize-control-nav_menu_item"> </li>',
     347    'depth': 0,
     348    'description': '',
     349    'el_classes': 'menu-item menu-item-depth-0 menu-item-custom menu-item-edit-inactive',
     350    'instanceNumber': 46,
     351    'item_type': 'custom',
     352    'item_type_label': 'Custom Link',
     353    'label': 'Sub-Example',
     354    'menu_item_id': 2001,
     355    'original_title': '',
     356    'parent': 2001,
     357    'priority': 3,
     358    'section': 'nav_menu[3]',
     359    'settings': {
     360        'default': 'nav_menu_item[2002]'
     361    },
     362    'target': '',
     363    'title': 'Sub-Example',
     364    'type': 'nav_menu_item',
     365    'url': 'http://sub.example.com/',
     366    'xfn': ''
     367};
     368
     369// Meta controls
     370window._wpCustomizeSettings.sections.add_menu = {
     371    'id': 'add_menu',
     372    'description': '',
     373    'priority': 999,
     374    'panel': 'nav_menus',
     375    'type': 'new_menu',
     376    'title': 'Add a Menu',
     377    'content': '<li id="accordion-section-add_menu" class="accordion-section-new-menu">\n\t\t\t<button type="button" class="button-secondary add-new-menu-item add-menu-toggle" aria-expanded="false">\n\t\t\t\tAdd a Menu\t\t\t<\/button>\n\t\t\t<ul class="new-menu-section-content"><\/ul>\n\t\t<\/li>',
     378    'active': true,
     379    'instanceNumber': 16,
     380    'customizeAction': 'Customizing &#9656; Menus'
     381};
     382window._wpCustomizeSettings.controls.new_menu_name = {
     383    'settings': { 'default': 'new_menu_name' },
     384    'type': 'text',
     385    'priority': 10,
     386    'active': true,
     387    'section': 'add_menu',
     388    'content': '<li id="customize-control-new_menu_name" class="customize-control customize-control-text"> <label> <input type="text" class="menu-name-field" placeholder="New menu name"  value="" data-customize-setting-link="new_menu_name" /> </label> </li>',
     389    'label': '',
     390    'description': '',
     391    'instanceNumber': 46
     392};
     393window._wpCustomizeSettings.settings.new_menu_name = {
     394    'value': '',
     395    'transport': 'postMessage',
     396    'dirty': false
     397};
     398
     399// From nav-menu.js
    112400window.wpNavMenu = {
    113401    'options': {
     
    121409    'negateIfRTL': 1
    122410};
    123 
  • trunk/tests/qunit/fixtures/customize-settings.js

    r33120 r33528  
    44var customizerRootElement;
    55customizerRootElement = jQuery( '<div id="customize-theme-controls"><ul></ul></div>' );
    6 customizerRootElement.css( { position: 'absolute', left: -1000 } ); // remove from view
     6customizerRootElement.css( { position: 'absolute', left: -10000, top: -10000 } ); // remove from view
    77jQuery( document.body ).append( customizerRootElement );
    88
     
    137137jQuery.ajaxSetup( {
    138138    beforeSend: function( e, data ) {
    139         if ( data.data.indexOf( 'wp_customize' ) !== -1 ) {
     139        if ( data.url.indexOf( '//example.org' ) !== -1 ) {
    140140            return false;
    141141        }
  • trunk/tests/qunit/index.html

    r33451 r33528  
    3535        <script src="../../src/wp-includes/js/shortcode.js"></script>
    3636        <script src="../../src/wp-admin/js/customize-controls.js"></script>
     37
     38        <script type='text/javascript' src='../../src/wp-includes/js/jquery/ui/core.js'></script>
     39        <script type='text/javascript' src='../../src/wp-includes/js/jquery/ui/widget.js'></script>
     40        <script type='text/javascript' src='../../src/wp-includes/js/jquery/ui/mouse.js'></script>
     41        <script type='text/javascript' src='../../src/wp-includes/js/jquery/ui/sortable.js'></script>
     42        <script type='text/javascript' src='../../src/wp-includes/js/jquery/ui/draggable.js'></script>
     43        <script type='text/javascript' src='../../src/wp-includes/js/jquery/ui/droppable.js'></script>
     44
     45        <script src="../../src/wp-admin/js/nav-menu.js"></script>
    3746        <script src="../../src/wp-admin/js/customize-nav-menus.js"></script>
    3847        <script src="../../src/wp-admin/js/word-count.js"></script>
     
    116125        </script>
    117126
    118         <!-- TinyMCE -->
     127        <!-- Templates for Customizer Menus -->
     128        <script type="text/html" id="tmpl-customize-control-nav_menu-content">
     129                    <button type="button" class="button-secondary add-new-menu-item" aria-label="Add or remove menu items" aria-expanded="false" aria-controls="available-menu-items">
     130            Add Items       </button>
     131        <button type="button" class="not-a-button reorder-toggle" aria-label="Reorder menu items" aria-describedby="reorder-items-desc-{{ data.menu_id }}">
     132            <span class="reorder">Reorder</span>
     133            <span class="reorder-done">Done</span>
     134        </button>
     135        <p class="screen-reader-text" id="reorder-items-desc-{{ data.menu_id }}">When in reorder mode, additional controls to reorder menu items will be available in the items list above.</p>
     136        <span class="add-menu-item-loading spinner"></span>
     137        <span class="menu-delete-item">
     138            <button type="button" class="not-a-button menu-delete">
     139                Delete menu <span class="screen-reader-text">{{ data.menu_name }}</span>
     140            </button>
     141        </span>
     142                <ul class="menu-settings">
     143            <li class="customize-control">
     144                <span class="customize-control-title">Menu locations</span>
     145            </li>
     146
     147                        <li class="customize-control customize-control-checkbox assigned-menu-location">
     148                <label>
     149                    <input type="checkbox" data-menu-id="{{ data.menu_id }}" data-location-id="primary" class="menu-location" /> Primary Menu                   <span class="theme-location-set">(Current: <span class="current-menu-location-name-primary"></span>)</span>
     150                </label>
     151            </li>
     152                        <li class="customize-control customize-control-checkbox assigned-menu-location">
     153                <label>
     154                    <input type="checkbox" data-menu-id="{{ data.menu_id }}" data-location-id="social" class="menu-location" /> Social Links Menu                   <span class="theme-location-set">(Current: <span class="current-menu-location-name-social"></span>)</span>
     155                </label>
     156            </li>
     157
     158        </ul>
     159                </script>
     160                <script type="text/html" id="tmpl-customize-control-nav_menu_name-content">
     161                    <label>
     162            <# if ( data.label ) { #>
     163                <span class="customize-control-title screen-reader-text">{{ data.label }}</span>
     164            <# } #>
     165            <input type="text" class="menu-name-field live-update-section-title" />
     166        </label>
     167                </script>
     168                <script type="text/html" id="tmpl-customize-control-nav_menu_auto_add-content">
     169                    <span class="customize-control-title">Menu options</span>
     170        <label>
     171            <input type="checkbox" class="auto_add" />
     172            Automatically add new top-level pages to this menu      </label>
     173                </script>
     174                <script type="text/html" id="tmpl-customize-control-nav_menu_item-content">
     175                    <div class="menu-item-bar">
     176            <div class="menu-item-handle">
     177                <span class="item-type" aria-hidden="true">{{ data.item_type_label }}</span>
     178                <span class="item-title" aria-hidden="true">
     179                    <span class="spinner"></span>
     180                    <span class="menu-item-title<# if ( ! data.title ) { #> no-title<# } #>">{{ data.title || wp.customize.Menus.data.l10n.untitled }}</span>
     181                </span>
     182                <span class="item-controls">
     183                    <button type="button" class="not-a-button item-edit" aria-expanded="false"><span class="screen-reader-text">Edit menu item: {{ data.title || wp.customize.Menus.data.l10n.untitled }} ({{ data.item_type_label }})</span><span class="toggle-indicator" aria-hidden="true"></span></button>
     184                    <button type="button" class="not-a-button item-delete submitdelete deletion"><span class="screen-reader-text">Remove Menu Item: {{ data.title || wp.customize.Menus.data.l10n.untitled }} ({{ data.item_type_label }})</span></button>
     185                </span>
     186            </div>
     187        </div>
     188
     189        <div class="menu-item-settings" id="menu-item-settings-{{ data.menu_item_id }}">
     190            <# if ( 'custom' === data.item_type ) { #>
     191            <p class="field-url description description-thin">
     192                <label for="edit-menu-item-url-{{ data.menu_item_id }}">
     193                    URL<br />
     194                    <input class="widefat code edit-menu-item-url" type="text" id="edit-menu-item-url-{{ data.menu_item_id }}" name="menu-item-url" />
     195                </label>
     196            </p>
     197        <# } #>
     198            <p class="description description-thin">
     199                <label for="edit-menu-item-title-{{ data.menu_item_id }}">
     200                    Navigation Label<br />
     201                    <input type="text" id="edit-menu-item-title-{{ data.menu_item_id }}" class="widefat edit-menu-item-title" name="menu-item-title" />
     202                </label>
     203            </p>
     204            <p class="field-link-target description description-thin">
     205                <label for="edit-menu-item-target-{{ data.menu_item_id }}">
     206                    <input type="checkbox" id="edit-menu-item-target-{{ data.menu_item_id }}" class="edit-menu-item-target" value="_blank" name="menu-item-target" />
     207                    Open link in a new tab              </label>
     208            </p>
     209            <p class="field-attr-title description description-thin">
     210                <label for="edit-menu-item-attr-title-{{ data.menu_item_id }}">
     211                    Title Attribute<br />
     212                    <input type="text" id="edit-menu-item-attr-title-{{ data.menu_item_id }}" class="widefat edit-menu-item-attr-title" name="menu-item-attr-title" />
     213                </label>
     214            </p>
     215            <p class="field-css-classes description description-thin">
     216                <label for="edit-menu-item-classes-{{ data.menu_item_id }}">
     217                    CSS Classes<br />
     218                    <input type="text" id="edit-menu-item-classes-{{ data.menu_item_id }}" class="widefat code edit-menu-item-classes" name="menu-item-classes" />
     219                </label>
     220            </p>
     221            <p class="field-xfn description description-thin">
     222                <label for="edit-menu-item-xfn-{{ data.menu_item_id }}">
     223                    Link Relationship (XFN)<br />
     224                    <input type="text" id="edit-menu-item-xfn-{{ data.menu_item_id }}" class="widefat code edit-menu-item-xfn" name="menu-item-xfn" />
     225                </label>
     226            </p>
     227            <p class="field-description description description-thin">
     228                <label for="edit-menu-item-description-{{ data.menu_item_id }}">
     229                    Description<br />
     230                    <textarea id="edit-menu-item-description-{{ data.menu_item_id }}" class="widefat edit-menu-item-description" rows="3" cols="20" name="menu-item-description">{{ data.description }}</textarea>
     231                    <span class="description">The description will be displayed in the menu if the current theme supports it.</span>
     232                </label>
     233            </p>
     234
     235            <div class="menu-item-actions description-thin submitbox">
     236                <# if ( ( 'post_type' === data.item_type || 'taxonomy' === data.item_type ) && '' !== data.original_title ) { #>
     237                <p class="link-to-original">
     238                    Original: <a class="original-link" href="{{ data.url }}">{{ data.original_title }}</a>              </p>
     239                <# } #>
     240
     241                <button type="button" class="not-a-button item-delete submitdelete deletion">Remove</button>
     242                <span class="spinner"></span>
     243            </div>
     244            <input type="hidden" name="menu-item-db-id[{{ data.menu_item_id }}]" class="menu-item-data-db-id" value="{{ data.menu_item_id }}" />
     245            <input type="hidden" name="menu-item-parent-id[{{ data.menu_item_id }}]" class="menu-item-data-parent-id" value="{{ data.parent }}" />
     246        </div><!-- .menu-item-settings-->
     247        <ul class="menu-item-transport"></ul>
     248        </script>
     249
     250                <script type="text/html" id="tmpl-available-menu-item">
     251            <li id="menu-item-tpl-{{ data.id }}" class="menu-item-tpl" data-menu-item-id="{{ data.id }}">
     252                <div class="menu-item-bar">
     253                    <div class="menu-item-handle">
     254                        <span class="item-type" aria-hidden="true">{{ data.type_label }}</span>
     255                        <span class="item-title" aria-hidden="true">
     256                            <span class="menu-item-title<# if ( ! data.title ) { #> no-title<# } #>">{{ data.title || wp.customize.Menus.data.l10n.untitled }}</span>
     257                        </span>
     258                        <button type="button" class="not-a-button item-add">
     259                            <span class="screen-reader-text">Add to menu: {{ data.title || wp.customize.Menus.data.l10n.untitled }} ({{ data.type_label }})</span>
     260                        </button>
     261                    </div>
     262                </div>
     263            </li>
     264        </script>
     265
     266        <script type="text/html" id="tmpl-menu-item-reorder-nav">
     267            <div class="menu-item-reorder-nav">
     268                <button type="button" class="menus-move-up">Move up</button><button type="button" class="menus-move-down">Move down</button><button type="button" class="menus-move-left">Move one level up</button><button type="button" class="menus-move-right">Move one level down</button>         </div>
     269        </script>
     270        <div hidden>
     271            <div id="available-menu-items" class="accordion-container">
     272            <div class="customize-section-title">
     273                <button type="button" class="customize-section-back" tabindex="-1">
     274                    <span class="screen-reader-text">Back</span>
     275                </button>
     276                <h3>
     277                    <span class="customize-action">
     278                        Customizing &#9656; Menus                   </span>
     279                    Add Menu Items              </h3>
     280            </div>
     281            <div id="available-menu-items-search" class="accordion-section cannot-expand">
     282                <div class="accordion-section-title">
     283                    <label class="screen-reader-text" for="menu-items-search">Search Menu Items</label>
     284                    <input type="text" id="menu-items-search" placeholder="Search menu items&hellip;" aria-describedby="menu-items-search-desc" />
     285                    <p class="screen-reader-text" id="menu-items-search-desc">The search results will be updated as you type.</p>
     286                    <span class="spinner"></span>
     287                    <span class="clear-results"><span class="screen-reader-text">Clear Results</span></span>
     288                </div>
     289                <ul class="accordion-section-content" data-type="search"></ul>
     290            </div>
     291            <div id="new-custom-menu-item" class="accordion-section">
     292                <h4 class="accordion-section-title" role="presentation">
     293                    Custom Links                    <button type="button" class="not-a-button" aria-expanded="false">
     294                        <span class="screen-reader-text">Toggle section: Custom Links</span>
     295                        <span class="toggle-indicator" aria-hidden="true"></span>
     296                    </button>
     297                </h4>
     298                <div class="accordion-section-content">
     299                    <input type="hidden" value="custom" id="custom-menu-item-type" name="menu-item[-1][menu-item-type]" />
     300                    <p id="menu-item-url-wrap">
     301                        <label class="howto" for="custom-menu-item-url">
     302                            <span>URL</span>
     303                            <input id="custom-menu-item-url" name="menu-item[-1][menu-item-url]" type="text" class="code menu-item-textbox" value="http://">
     304                        </label>
     305                    </p>
     306                    <p id="menu-item-name-wrap">
     307                        <label class="howto" for="custom-menu-item-name">
     308                            <span>Link Text</span>
     309                            <input id="custom-menu-item-name" name="menu-item[-1][menu-item-title]" type="text" class="regular-text menu-item-textbox">
     310                        </label>
     311                    </p>
     312                    <p class="button-controls">
     313                        <span class="add-to-menu">
     314                            <input type="submit" class="button-secondary submit-add-to-menu right" value="Add to Menu" name="add-custom-menu-item" id="custom-menu-item-submit">
     315                            <span class="spinner"></span>
     316                        </span>
     317                    </p>
     318                </div>
     319            </div>
     320            <div id="available-menu-items-post_type-post" class="accordion-section">
     321                    <h4 class="accordion-section-title" role="presentation">
     322                        Post                        <span class="spinner"></span>
     323                        <span class="no-items">No items</span>
     324                        <button type="button" class="not-a-button" aria-expanded="false">
     325                            <span class="screen-reader-text">Toggle section: Post</span>
     326                            <span class="toggle-indicator" aria-hidden="true"></span>
     327                        </button>
     328                    </h4>
     329                    <ul class="accordion-section-content" data-type="post_type" data-object="post"></ul>
     330                </div>
     331                                <div id="available-menu-items-post_type-page" class="accordion-section">
     332                    <h4 class="accordion-section-title" role="presentation">
     333                        Page                        <span class="spinner"></span>
     334                        <span class="no-items">No items</span>
     335                        <button type="button" class="not-a-button" aria-expanded="false">
     336                            <span class="screen-reader-text">Toggle section: Page</span>
     337                            <span class="toggle-indicator" aria-hidden="true"></span>
     338                        </button>
     339                    </h4>
     340                    <ul class="accordion-section-content" data-type="post_type" data-object="page"></ul>
     341                </div>
     342                                <div id="available-menu-items-taxonomy-category" class="accordion-section">
     343                    <h4 class="accordion-section-title" role="presentation">
     344                        Category                        <span class="spinner"></span>
     345                        <span class="no-items">No items</span>
     346                        <button type="button" class="not-a-button" aria-expanded="false">
     347                            <span class="screen-reader-text">Toggle section: Category</span>
     348                            <span class="toggle-indicator" aria-hidden="true"></span>
     349                        </button>
     350                    </h4>
     351                    <ul class="accordion-section-content" data-type="taxonomy" data-object="category"></ul>
     352                </div>
     353                                <div id="available-menu-items-taxonomy-post_tag" class="accordion-section">
     354                    <h4 class="accordion-section-title" role="presentation">
     355                        Tag                     <span class="spinner"></span>
     356                        <span class="no-items">No items</span>
     357                        <button type="button" class="not-a-button" aria-expanded="false">
     358                            <span class="screen-reader-text">Toggle section: Tag</span>
     359                            <span class="toggle-indicator" aria-hidden="true"></span>
     360                        </button>
     361                    </h4>
     362                    <ul class="accordion-section-content" data-type="taxonomy" data-object="post_tag"></ul>
     363                </div>
     364                                <div id="available-menu-items-taxonomy-post_format" class="accordion-section">
     365                    <h4 class="accordion-section-title" role="presentation">
     366                        Format                      <span class="spinner"></span>
     367                        <span class="no-items">No items</span>
     368                        <button type="button" class="not-a-button" aria-expanded="false">
     369                            <span class="screen-reader-text">Toggle section: Format</span>
     370                            <span class="toggle-indicator" aria-hidden="true"></span>
     371                        </button>
     372                    </h4>
     373                    <ul class="accordion-section-content" data-type="taxonomy" data-object="post_format"></ul>
     374                </div>
     375                        </div><!-- #available-menu-items -->
     376            </div><!-- end nav menu templates -->
     377
    119378
    120379        <script src="../../src/wp-includes/js/tinymce/tinymce.js"></script>
  • trunk/tests/qunit/vendor/sinon-qunit.js

    r27847 r33528  
    5858        }
    5959
     60
    6061        return qTest(testName, expected, sinon.test(callback), async);
    6162    };
  • trunk/tests/qunit/wp-admin/js/customize-nav-menus.js

    r33451 r33528  
    11/* global wp */
    2 jQuery( function( ) {
     2jQuery( window ).load( function (){
    33
    44    var api = wp.customize,
    5         settings = window._wpCustomizeNavMenusSettings,
    6         navMenu = window.wpNavMenu;
    7        
    8     module( 'Customize Nav Menus', {
    9         setup: function() {
    10             window._wpCustomizeNavMenusSettings = settings;
    11             window.wpNavMenu = navMenu;
    12         },
    13         teardown: function() {
    14             // restore defaults
    15             window._wpCustomizeNavMenusSettings = settings;
    16             window.wpNavMenu = navMenu;
    17         }
     5        primaryMenuId = 3,
     6        socialMenuId = 2;
    187
    19     });
    20 
     8    module( 'Customize Nav Menus' );
    219
    2210    /**
     
    2715            ids = [ api.Menus.generatePlaceholderAutoIncrementId() ];
    2816
    29         while( testIterations-- > 0 ) {
     17        while ( testIterations ) {
    3018            var placeholderID = api.Menus.generatePlaceholderAutoIncrementId();
    3119
    3220            ok( -1 === ids.indexOf( placeholderID ) );
    3321            ids.push( placeholderID );
     22            testIterations -= 1;
    3423        }
    3524
     
    3827    test( 'it should parse _wpCustomizeMenusSettings.defaults into itself', function() {
    3928        deepEqual( window._wpCustomizeNavMenusSettings, api.Menus.data );
    40     });
     29    } );
    4130
     31    test( 'empty menus should have no Menu Item Controls', function() {
     32        ok( 0 === wp.customize.Menus.getMenuControl( socialMenuId ).getMenuItemControls().length, 'empty menus' );
     33    } );
    4234
    43 });
     35    test( 'populated menus should have no Menu Item Controls', function() {
     36        ok( 0 !== wp.customize.Menus.getMenuControl( primaryMenuId ).getMenuItemControls().length, 'non-empty menus' );
     37    } );
     38
     39    // @todo Add tests for api.Menus.AvailableMenuItemsPanelView (and api.Menus.AvailableItemCollection, api.Menus.AvailableItemCollection, api.Menus.AvailableItemModel)
     40
     41    test( 'there is a properly configured MenusPanel', function() {
     42        var panel, sections;
     43
     44        panel = api.panel( 'nav_menus' );
     45        ok( panel );
     46        ok( panel.extended( api.Menus.MenusPanel ) );
     47
     48        sections = panel.sections();
     49        ok( 'menu_locations' === sections[0].id, 'first section is menu_locations' );
     50        ok( sections[1].extended( api.Menus.MenuSection ), 'second section is MenuSection' );
     51        ok( sections[ sections.length - 1 ].extended( api.Menus.NewMenuSection ), 'last section is NewMenuSection' );
     52    } );
     53    // @todo Add more tests for api.Menus.MenusPanel behaviors
     54
     55    test( 'there an expected MenuSection for the primary menu', function() {
     56        var section, controls;
     57
     58        section = api.section( 'nav_menu[' + primaryMenuId + ']' );
     59        ok( section, 'section exists' );
     60        ok( section.extended( api.Menus.MenuSection ), 'section is a api.Menus.MenuSection' );
     61        ok( section.deferred.initSortables, 'has section.deferred.initSortables' );
     62        ok( section.active(), 'section active() is true' );
     63        ok( section.active.set( false ).get(), 'section active() cannot be set false' );
     64
     65        controls = section.controls();
     66        ok( controls[0].extended( api.Menus.MenuNameControl ), 'first control in menu section is MenuNameControl' );
     67        ok( controls[1].extended( api.Menus.MenuItemControl ), 'second control in menu section is MenuItemControl' );
     68        console.info( 'noep', controls[ controls.length - 1].id )
     69        ok( controls[ controls.length - 1 ].extended( api.Menus.MenuAutoAddControl ), 'last control in menu section is a MenuAutoAddControl' );
     70    } );
     71    // @todo Add more tests for api.Menus.MenuSection behaviors
     72
     73    test( 'changing a MenuNameControl change the corresponding menu value', function() {
     74        var section, control;
     75
     76        section = api.section( 'nav_menu[' + primaryMenuId + ']' );
     77        control = section.controls()[0];
     78        ok( control.extended( api.Menus.MenuNameControl ), 'control is a MenuNameControl' );
     79        equal( control.setting().name, 'Primary menu' );
     80        ok( ! control.setting._dirty );
     81        control.container.find( 'input[type=text]:first' ).val( 'Main menu' ).trigger( 'change' );
     82        equal( control.setting().name, 'Main menu' );
     83        ok( control.setting._dirty );
     84    } );
     85    // @todo Add more tests for api.Menus.MenuNameControl
     86
     87    test( 'manipulating a MenuItemControl works', function() {
     88        var section, control, value;
     89        section = api.section( 'nav_menu[' + primaryMenuId + ']' );
     90        ok( section );
     91
     92        control = section.controls()[1];
     93        ok( control.extended( api.Menus.MenuItemControl ), 'control is a MenuItemControl' );
     94
     95        control.actuallyEmbed();
     96
     97        control.container.find( '.edit-menu-item-title' ).val( 'Hello World' ).trigger( 'change' );
     98        equal( control.setting().title, 'Hello World' );
     99        value = _.clone( control.setting() );
     100        value.title = 'Hola Mundo';
     101        equal( control.container.find( '.edit-menu-item-title' ).val(), 'Hello World' );
     102        equal( value.position, 1 );
     103        equal( control.priority(), 1 );
     104
     105        // @todo test control.moveDown();
     106    } );
     107    // @todo Add more tests for api.Menus.MenuItemControl
     108
     109    // @todo Add tests for api.Menus.NewMenuSection
     110    // @todo Add tests for api.Menus.MenuLocationControl
     111    // @todo Add tests for api.Menus.MenuAutoAddControl
     112    // @todo Add tests for api.Menus.MenuControl
     113    // @todo Add tests for api.Menus.NewMenuControl
     114    // @todo Add tests for api.Menus.applySavedData
     115    // @todo Add tests for api.Menus.focusMenuItemControl
     116
     117    test( 'api.Menus.getMenuControl() should return the expected control', function() {
     118        var control = api.Menus.getMenuControl( primaryMenuId );
     119        ok( !! control, 'control is returned' );
     120        ok( control.extended( api.Menus.MenuControl ), 'control is a MenuControl' );
     121    } );
     122
     123    test( 'api.Menus.getMenuItemControl() should return the expected control', function() {
     124        var control = api.Menus.getMenuItemControl( 2000 );
     125        ok( !! control, 'control is returned' );
     126        ok( control.extended( api.Menus.MenuItemControl ), 'control is a MenuItemControl' );
     127    } );
     128
     129} );
Note: See TracChangeset for help on using the changeset viewer.