mirror of
https://github.com/WordPress/WordPress.git
synced 2025-01-03 15:08:10 +01:00
introduce custom menus, props jeffikus, See #11817
git-svn-id: http://svn.automattic.com/wordpress/trunk@13257 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
00706d68ce
commit
4d203a02c6
1
wp-admin/css/custom-navigation.css
Normal file
1
wp-admin/css/custom-navigation.css
Normal file
File diff suppressed because one or more lines are too long
168
wp-admin/css/custom-navigation.dev.css
Normal file
168
wp-admin/css/custom-navigation.dev.css
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
/**
|
||||||
|
* WordPress Administration Custom Navigation
|
||||||
|
* Interface CSS
|
||||||
|
*
|
||||||
|
* @author Jeffikus <pearce.jp@gmail.com>
|
||||||
|
* @version 1.1.0
|
||||||
|
*
|
||||||
|
* @package WordPress
|
||||||
|
* @subpackage Administration
|
||||||
|
*/
|
||||||
|
|
||||||
|
.fix{clear: both;height: 1px;margin: -1px 0 0;overflow: hidden;}
|
||||||
|
|
||||||
|
#no-js {display:block;}
|
||||||
|
|
||||||
|
.maintitle { margin: 0 0 20px 0!important;}
|
||||||
|
|
||||||
|
.logo { vertical-align: middle; margin: 0 10px 0 0; }
|
||||||
|
|
||||||
|
#pages-left { min-width:650px;max-width:1100px;width: 100%; float:left; clear: left; margin-right: -315px; }
|
||||||
|
#pages-left .inside {margin-top: 20px; margin-right: 315px; }
|
||||||
|
#nav-container { margin-top: -3px; }
|
||||||
|
|
||||||
|
.sidebar-name { background-color:#AAAAAA;
|
||||||
|
background-image:url(../../../../../wp-admin/images/ed-bg.gif);
|
||||||
|
border-color:#DFDFDF;
|
||||||
|
text-shadow:0 1px 0 #FFFFFF;-moz-border-radius-topleft:8px;
|
||||||
|
-moz-border-radius-topright:8px;
|
||||||
|
background-position:0 0;
|
||||||
|
background-repeat:repeat-x;
|
||||||
|
border-style:solid;
|
||||||
|
border-width:1px;
|
||||||
|
cursor:pointer;
|
||||||
|
font-size:13px; }
|
||||||
|
|
||||||
|
|
||||||
|
.sidebar-name h3 {
|
||||||
|
font-size:13px;
|
||||||
|
height:19px;
|
||||||
|
margin:0;
|
||||||
|
overflow:hidden;
|
||||||
|
padding:5px 12px;
|
||||||
|
white-space:nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-name-arrow {
|
||||||
|
background:transparent url(../../../../../wp-admin/images/menu-bits.gif) no-repeat scroll left -109px;
|
||||||
|
float:right;
|
||||||
|
height:29px;
|
||||||
|
width:26px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu-right { width: 285px; margin-right: 10px; margin-left: 20px; float:left; clear: right;}
|
||||||
|
h2.heading { margin: 32px 0 10px 0; }
|
||||||
|
|
||||||
|
.widgets-holder-wrap { margin: 0 0 20px 0; }
|
||||||
|
.widget-holder {
|
||||||
|
padding:15px 10px;
|
||||||
|
-moz-border-radius-bottomleft:8px;
|
||||||
|
-moz-border-radius-bottomright:8px;
|
||||||
|
border-style:none solid solid;
|
||||||
|
border-width:0 1px 1px;
|
||||||
|
background-color:#F1F1F1;
|
||||||
|
border-color:#DDDDDD;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkboxes { float: right; margin: 10px 12px 0 0; }
|
||||||
|
|
||||||
|
.addtomenu {
|
||||||
|
display: block;
|
||||||
|
float: right;
|
||||||
|
margin: 10px 0 0 0;
|
||||||
|
text-shadow:0 -1px 0 rgba(0, 0, 0, 0.3);
|
||||||
|
background:#21759B url(../../../../../wp-admin/images/button-grad.png) repeat-x scroll left top;
|
||||||
|
border-color:#298CBA !important;
|
||||||
|
color:#FFFFFF !important;
|
||||||
|
font-weight:bold;
|
||||||
|
-moz-border-radius-bottomleft:11px;
|
||||||
|
-moz-border-radius-bottomright:11px;
|
||||||
|
-moz-border-radius-topleft:11px;
|
||||||
|
-moz-border-radius-topright:11px;
|
||||||
|
border-style:solid;
|
||||||
|
border-width:1px;
|
||||||
|
cursor:pointer;
|
||||||
|
font-size:11px !important;
|
||||||
|
line-height:16px;
|
||||||
|
padding:2px 8px;
|
||||||
|
text-decoration:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list { zoom: 1; }
|
||||||
|
.list li { margin: 0; }
|
||||||
|
.list dt { display:none; float: left; width: 260px; margin: 0; padding: 0 0 0 5px; line-height: 30px; border-bottom: 1px solid #e3e3e3; }
|
||||||
|
.list dt span { float: left; }
|
||||||
|
.list dt img { cursor: pointer; float: right; margin: 7px 5px 0 0 }
|
||||||
|
|
||||||
|
#nav-container { padding: 0 10px 10px 10px; background-color: #fff; border: 1px solid #DFDFDF; border-top: none; -moz-border-radius-bottomleft:8px; -moz-border-radius-bottomright:8px; }
|
||||||
|
|
||||||
|
#custom-nav ul { width: 100%; }
|
||||||
|
#custom-nav li { margin: 0; }
|
||||||
|
.ui-draggable-dragging { width: 500px; }
|
||||||
|
#custom-nav li dl dt { -webkit-border-bottom-left-radius:6px;-webkit-border-bottom-right-radius:6px;-webkit-border-top-left-radius:6px;-webkit-border-top-right-radius:6px;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top-left-radius:6px;border-top-right-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;
|
||||||
|
border:1px solid #E6E6E6;position: relative; padding-left:10px;background-color: #f1f1f1; height: 35px; line-height: 35px; }
|
||||||
|
#custom-nav li dl dt:hover { cursor: move; }
|
||||||
|
#custom-nav li dl dt .controls { position: absolute; right: 15px; top: -1px; }
|
||||||
|
#custom-nav li dl dt img { vertical-align: middle; }
|
||||||
|
#custom-nav li dl dt a {}
|
||||||
|
#custom-nav li .title { background:url(../images/ico-arrow.png) no-repeat 4px 5px; padding-left:15px; }
|
||||||
|
#custom-nav li ul li { margin-left:20px; opacity:.7;}
|
||||||
|
#custom-nav li ul li ul li { opacity: .9;}
|
||||||
|
#custom-nav li ul li ul li ul li { opacity: .9;}
|
||||||
|
#custom-nav li ul li ul li ul li ul li { opacity: .95; }
|
||||||
|
|
||||||
|
#existing-pages li .title { background:url(../images/ico-arrow.png) no-repeat 4px 13px; padding-left:15px; }
|
||||||
|
#existing-pages li ul li .title { margin-left:10px; }
|
||||||
|
#existing-pages li ul li ul li .title { margin-left:20px; }
|
||||||
|
#existing-pages li ul li ul li ul li .title { margin-left:30px; }
|
||||||
|
#existing-pages li ul li ul li ul li ul li .title { margin-left:40px; }
|
||||||
|
#existing-pages li ul li ul li ul li ul li ul li .title { margin-left:50px; }
|
||||||
|
#existing-pages li ul li ul li ul li ul li ul li ul li .title { margin-left:60px; }
|
||||||
|
#existing-pages li ul li ul li ul li ul li ul li ul li ul li .title { margin-left:70px; }
|
||||||
|
#existing-pages li ul li ul li ul li ul li ul li ul li ul li ul li .title { margin-left:80px; }
|
||||||
|
|
||||||
|
#existing-categories li .title { background:url(../images/ico-arrow.png) no-repeat 4px 13px; padding-left:15px; }
|
||||||
|
#existing-categories li ul li .title { margin-left:10px; }
|
||||||
|
#existing-categories li ul li ul li .title { margin-left:20px; }
|
||||||
|
#existing-categories li ul li ul li ul li .title { margin-left:30px; }
|
||||||
|
#existing-categories li ul li ul li ul li ul li .title { margin-left:40px; }
|
||||||
|
#existing-categories li ul li ul li ul li ul li ul li .title { margin-left:50px; }
|
||||||
|
#existing-categories li ul li ul li ul li ul li ul li ul li .title { margin-left:60px; }
|
||||||
|
#existing-categories li ul li ul li ul li ul li ul li ul li ul li .title { margin-left:70px; }
|
||||||
|
#existing-categories li ul li ul li ul li ul li ul li ul li ul li ul li .title { margin-left:80px; }
|
||||||
|
|
||||||
|
|
||||||
|
img.remove, img.edit { cursor: pointer; margin: 0 5px 0 0; }
|
||||||
|
|
||||||
|
.dropzone {height:7px;margin: 3px 0 3px 0;}
|
||||||
|
|
||||||
|
#custom-nav li dl {}
|
||||||
|
|
||||||
|
.hide {display:none;}
|
||||||
|
|
||||||
|
.type { text-transform: uppercase; font-size: 11px; color: #999999; padding-right:10px; }
|
||||||
|
|
||||||
|
#menu_select { width: 170px; }
|
||||||
|
|
||||||
|
#dialog-confirm label { padding-left: 10px; }
|
||||||
|
|
||||||
|
/* EDIT LINK BOX */
|
||||||
|
.ui-dialog { background: #fff; border: 1px solid #555555; -moz-box-shadow:0 4px 30px #000000; }
|
||||||
|
.ui-dialog-titlebar { color: #CFCFCF;font-family:"Lucida Grande",Verdana,Arial,sans-serif; padding: 6px 10px 6px; background-color: #222222!important; border: none!important; -moz-border-radius: none!important; }
|
||||||
|
#dialog-confirm { height: 168px !important; padding: 20px 10px 10px; }
|
||||||
|
#dialog-confirm input { margin: 0 0 15px 0; width: 280px; }
|
||||||
|
#dialog-confirm select { margin: 0 0 15px 0; }
|
||||||
|
.ui-dialog-buttonpane { padding: 10px; }
|
||||||
|
.ui-dialog-buttonpane button { margin: 0 10px 0 0; background:#F2F2F2; text-shadow:0 1px 0 #FFFFFF; border-color:#BBBBBB; color:#464646; -moz-border-radius-bottomleft:11px; -moz-border-radius-bottomright:11px; -moz-border-radius-topleft:11px; -moz-border-radius-topright:11px; border-style:solid; border-width:1px; cursor:pointer; font-size:11px !important; line-height:14px; padding:2px 8px; text-decoration:none; }
|
||||||
|
|
||||||
|
.ui-dialog-buttonpane button:hover {color:#000;border-color:#666;}
|
||||||
|
|
||||||
|
.ui-icon { display: none; }
|
||||||
|
|
||||||
|
/* Overlays */
|
||||||
|
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
|
||||||
|
.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); }
|
||||||
|
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 8px; -webkit-border-radius: 8px; }
|
||||||
|
|
||||||
|
|
||||||
|
#reset_wp_menu { background:#c77 none !important;color:white!important;text-shadow:0 1px 0 #555 !important;}
|
590
wp-admin/custom-navigation.php
Normal file
590
wp-admin/custom-navigation.php
Normal file
@ -0,0 +1,590 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* WordPress Administration Custom Navigation
|
||||||
|
* Interface functions
|
||||||
|
*
|
||||||
|
* @author Jeffikus <pearce.jp@gmail.com>
|
||||||
|
* @version 1.1.0
|
||||||
|
*
|
||||||
|
* @package WordPress
|
||||||
|
* @subpackage Administration
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once('admin.php');
|
||||||
|
|
||||||
|
wp_admin_css( 'custom-navigation' );
|
||||||
|
wp_enqueue_script( 'custom-navigation-jquery' );
|
||||||
|
wp_enqueue_script( 'custom-navigation-ui-custom' );
|
||||||
|
wp_enqueue_script( 'custom-navigation-dynamic-functions' );
|
||||||
|
wp_enqueue_script( 'custom-navigation-default-items' );
|
||||||
|
wp_enqueue_script( 'custom-navigation-autocomplete' );
|
||||||
|
wp_enqueue_script( 'custom-navigation-php-functions' );
|
||||||
|
wp_enqueue_script( 'jquery-ui-dialog' );
|
||||||
|
|
||||||
|
require_once('admin-header.php');
|
||||||
|
require_once (ABSPATH . WPINC . '/custom-navigation-functions.php');
|
||||||
|
|
||||||
|
wp_custom_navigation();
|
||||||
|
|
||||||
|
function wp_custom_nav_reset() {
|
||||||
|
|
||||||
|
global $wpdb;
|
||||||
|
|
||||||
|
$table_name = $wpdb->prefix . "custom_nav_records";
|
||||||
|
//DROP existing menu records
|
||||||
|
$wpdb->query("DELETE FROM ".$table_name);
|
||||||
|
|
||||||
|
$table_name_menus = $wpdb->prefix . "custom_nav_menus";
|
||||||
|
//DELETE existing menus
|
||||||
|
$wpdb->query("DELETE FROM ".$table_name_menus);
|
||||||
|
|
||||||
|
wp_custom_navigation_setup(true);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
/* Custom Navigation Admin Interface
|
||||||
|
/* wp_custom_navigation() is the main function for the Custom Navigation
|
||||||
|
/* See functions in admin-functions.php
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
function wp_custom_navigation() {
|
||||||
|
global $wpdb, $user_ID;
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div class="wrap">
|
||||||
|
<div id="no-js"><h3>You do not have JavaScript enabled in your browser. Please enabled it to access the Custom Menu functionality.</h3></div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$messagesdiv = '';
|
||||||
|
$menu_id_in_edit = 0;
|
||||||
|
|
||||||
|
//Get the theme name
|
||||||
|
$themename = get_current_theme();
|
||||||
|
|
||||||
|
//CHECK which menu is selected and if menu is in edit already
|
||||||
|
if ( isset( $_POST['switch_menu'] ) )
|
||||||
|
$menu_selected_id = $_POST['menu_select'];
|
||||||
|
elseif ( isset( $_POST['menu_id_in_edit'] ) )
|
||||||
|
$menu_selected_id = $_POST['menu_id_in_edit'];
|
||||||
|
|
||||||
|
//Default Menu to show
|
||||||
|
$custom_menus = get_terms( 'menu', array( 'hide_empty' => false ) );
|
||||||
|
if ( !empty( $custom_menus ) )
|
||||||
|
$menu_selected_id = $custom_menus[0]->term_id;
|
||||||
|
|
||||||
|
$menu_title = '';
|
||||||
|
if ( $menu_selected_id > 0 ) {
|
||||||
|
foreach( $custom_menus as $menu ) {
|
||||||
|
if ( $menu->term_id == $menu_selected_id ) {
|
||||||
|
$menu_title = $menu->name;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( isset( $_POST['set_wp_menu'] ) ) {
|
||||||
|
update_option( 'wp_custom_nav_menu', $_POST['enable_wp_menu'] );
|
||||||
|
$messagesdiv = '<div id="message" class="updated fade below-h2"><p>'.$themename.'s Custom Menu has been updated!</p></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( isset( $_POST['licount'] ) )
|
||||||
|
$postCounter = $_POST['licount'];
|
||||||
|
else
|
||||||
|
$postCounter = 0;
|
||||||
|
|
||||||
|
if ( isset( $_POST['add_menu'] ) ) {
|
||||||
|
$insert_menu_name = $_POST['add_menu_name'];
|
||||||
|
|
||||||
|
if ( $insert_menu_name != '' ) {
|
||||||
|
$existing_term = get_term_by( 'name', $insert_menu_name, 'menu' );
|
||||||
|
if ( $existing_term ) {
|
||||||
|
$messagesdiv = '<div id="message" class="error fade below-h2"><p>'.$insert_menu_name.' Menu has already created - please try another name</p></div>';
|
||||||
|
} else {
|
||||||
|
$term = wp_insert_term( $insert_menu_name, 'menu' );
|
||||||
|
if ( $term ) {
|
||||||
|
$custom_menus[$term['term_id']] = $term;
|
||||||
|
$menu_selected_id = $term['term_id'];
|
||||||
|
$menu_id_in_edit = $menu_selected_id;
|
||||||
|
$messagesdiv = '<div id="message" class="updated fade below-h2"><p>'.$insert_menu_name.' Menu has been created!</p></div>';
|
||||||
|
|
||||||
|
$postCounter = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$messagesdiv = '<div id="message" class="error fade below-h2"><p>Please enter a valid Menu name</p></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($_POST['reset_wp_menu'])) {
|
||||||
|
$success = wp_custom_nav_reset();
|
||||||
|
if ($success) {
|
||||||
|
//DISPLAY SUCCESS MESSAGE IF Menu Reset Correctly
|
||||||
|
$messagesdiv = '<div id="message" class="updated fade below-h2"><p>'.$themename.'s Custom Menu has been RESET!</p></div>';
|
||||||
|
//GET reset menu id
|
||||||
|
$custom_menus = array();
|
||||||
|
$menu_selected_id = 0;
|
||||||
|
} else {
|
||||||
|
//DISPLAY SUCCESS MESSAGE IF Menu Reset Correctly
|
||||||
|
$messagesdiv = '<div id="message" class="error fade below-h2"><p>'.$themename.'s Custom Menu could not be RESET. Please try again.</p></div>';
|
||||||
|
}
|
||||||
|
} elseif ( $postCounter > 0 && $menu_selected_id > 0 ) {
|
||||||
|
$menu_objects = get_objects_in_term( $menu_selected_id, 'menu' );
|
||||||
|
$menu_items = wp_custom_navigation_get_menu_items( $menu_objects );
|
||||||
|
|
||||||
|
$update_fields = array( 'menu_order', 'guid', 'post_content', 'post_title', 'post_excerpt', 'post_content_filtered' );
|
||||||
|
//Loop through all POST variables
|
||||||
|
for ($k = 1;$k<= $postCounter; $k++) {
|
||||||
|
|
||||||
|
if (isset($_POST['dbid'.$k])) { $db_id = $_POST['dbid'.$k]; } else { $db_id = 0; }
|
||||||
|
if (isset($_POST['postmenu'.$k])) { $post_id = $_POST['postmenu'.$k]; } else { $post_id = 0; }
|
||||||
|
//@todo implement heirarchy
|
||||||
|
if (isset($_POST['parent'.$k])) { $parent_id = $_POST['parent'.$k]; } else { $parent_id = 0; }
|
||||||
|
if (isset($_POST['title'.$k])) { $custom_title = stripslashes($_POST['title'.$k]); } else { $custom_title = ''; }
|
||||||
|
if (isset($_POST['linkurl'.$k])) { $custom_linkurl = $_POST['linkurl'.$k]; } else { $custom_linkurl = ''; }
|
||||||
|
if (isset($_POST['description'.$k])) { $custom_description = stripslashes($_POST['description'.$k]); } else { $custom_description = ''; }
|
||||||
|
// doesn't seem to be used by UI
|
||||||
|
if (isset($_POST['icon'.$k])) { $icon = $_POST['icon'.$k]; } else { $icon = 0; }
|
||||||
|
if (isset($_POST['position'.$k])) { $position = $_POST['position'.$k]; } else { $position = 0; }
|
||||||
|
if (isset($_POST['linktype'.$k])) { $linktype = $_POST['linktype'.$k]; } else { $linktype = 'custom'; }
|
||||||
|
if (isset($_POST['anchortitle'.$k])) { $custom_anchor_title = stripslashes($_POST['anchortitle'.$k]); } else { $custom_anchor_title = $custom_title; }
|
||||||
|
if (isset($_POST['newwindow'.$k])) { $new_window = $_POST['newwindow'.$k]; } else { $new_window = 0; }
|
||||||
|
|
||||||
|
$post = array( 'post_status' => 'menu-' . $linktype, 'post_type' => 'menu_item', 'post_author' => $user_ID,
|
||||||
|
'ping_status' => 0, 'post_parent' => $post_id, 'menu_order' => $position,
|
||||||
|
'guid' => $custom_linkurl, 'post_excerpt' => $custom_anchor_title, 'tax_input' => array( 'menu' => $menu_title ),
|
||||||
|
'post_content' => $custom_description, 'post_title' => $custom_title );
|
||||||
|
if ( $new_window )
|
||||||
|
$post['post_content_filtered'] = '_blank';
|
||||||
|
else
|
||||||
|
$post['post_content_filtered'] = '';
|
||||||
|
|
||||||
|
//New menu item
|
||||||
|
if ($db_id == 0) {
|
||||||
|
$post_id = wp_insert_post( $post );
|
||||||
|
} elseif ( isset( $menu_items[$db_id] ) ) {
|
||||||
|
foreach( $update_fields as $field ) {
|
||||||
|
if ( $post[$field] != $menu_items[$db_id]->$field ) {
|
||||||
|
$post['ID'] = $db_id;
|
||||||
|
wp_insert_post( $post );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
unset( $menu_items[$db_id] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( !empty( $menu_items ) ) {
|
||||||
|
foreach( array_keys( $menu_items ) as $menu_id ) {
|
||||||
|
wp_delete_post( $menu_id );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//DISPLAY SUCCESS MESSAGE IF POST CORRECT
|
||||||
|
$messagesdiv = '<div id="message" class="updated fade below-h2"><p>'.$themename.'s Custom Menu has been updated!</p></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
//DISPLAY Custom Navigation
|
||||||
|
?>
|
||||||
|
<div id="pages-left">
|
||||||
|
<div class="inside">
|
||||||
|
<h2 class="maintitle">Custom Navigation</h2>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
//CHECK if custom menu has been enabled
|
||||||
|
$enabled_menu = get_option('wp_custom_nav_menu');
|
||||||
|
$checked = strtolower($enabled_menu);
|
||||||
|
|
||||||
|
if ($checked == 'true') {
|
||||||
|
} else {
|
||||||
|
echo '<div id="message-enabled" class="error fade below-h2"><p><strong>The Custom Menu has not been Enabled yet. Please enable it in order to use it --------></strong></p></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
||||||
|
<?php echo $messagesdiv; ?>
|
||||||
|
<form onsubmit="updatepostdata()" action="custom-navigation.php" method="post" enctype="multipart/form-data">
|
||||||
|
|
||||||
|
<input type="hidden" name="licount" id="licount" value="0" />
|
||||||
|
<input type="hidden" name="menu_id_in_edit" id="menu_id_in_edit" value="<?php echo $menu_selected_id; ?>" />
|
||||||
|
|
||||||
|
<div class="sidebar-name">
|
||||||
|
|
||||||
|
<div class="sidebar-name-arrow">
|
||||||
|
<br/>
|
||||||
|
</div>
|
||||||
|
<h3><?php echo $menu_title; ?></h3>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-container">
|
||||||
|
<ul id="custom-nav">
|
||||||
|
|
||||||
|
<?php
|
||||||
|
//DISPLAY existing menu
|
||||||
|
if ( $menu_selected_id > 0 ) {
|
||||||
|
//SET output type
|
||||||
|
$output_type = "backend";
|
||||||
|
//MAIN OUTPUT FUNCTION
|
||||||
|
wp_custom_navigation_output( 'type='.$output_type.'&name='.$menu_title.'&id='.$menu_selected_id );
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div><!-- /#nav-container -->
|
||||||
|
|
||||||
|
<p class="submit">
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
updatepostdata();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<input id="save_bottom" name="save_bottom" type="submit" value="Save All Changes" /></p>
|
||||||
|
</div><!-- /.inside -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="menu-right">
|
||||||
|
|
||||||
|
<h2 class="heading">Options</h2>
|
||||||
|
|
||||||
|
<div class="widgets-holder-wrap">
|
||||||
|
<div class="sidebar-name">
|
||||||
|
<div class="sidebar-name-arrow"></div>
|
||||||
|
<h3>Setup Custom Menu</h3>
|
||||||
|
</div>
|
||||||
|
<div class="widget-holder">
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
//SETUP Custom Menu
|
||||||
|
|
||||||
|
$enabled_menu = get_option('wp_custom_nav_menu');
|
||||||
|
|
||||||
|
$checked = strtolower($enabled_menu);
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<span >
|
||||||
|
<label>Enable</label><input type="radio" name="enable_wp_menu" value="true" <?php if ($checked=='true') { echo 'checked="checked"'; } ?> />
|
||||||
|
<label>Disable</label><input type="radio" name="enable_wp_menu" value="false" <?php if ($checked=='true') { } else { echo 'checked="checked"'; } ?> />
|
||||||
|
</span><!-- /.checkboxes -->
|
||||||
|
|
||||||
|
<input id="set_wp_menu" type="submit" value="Set Menu" name="set_wp_menu" class="button" /><br />
|
||||||
|
|
||||||
|
<span>
|
||||||
|
<label>Reset Menu to Default</label>
|
||||||
|
<input id="reset_wp_menu" type="submit" value="Reset" name="reset_wp_menu" class="button" onclick="return confirm('Are you sure you want to RESET the Custom Navigation Menu to its Default Settings?');" />
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<div class="fix"></div>
|
||||||
|
</div>
|
||||||
|
</div><!-- /.widgets-holder-wrap -->
|
||||||
|
|
||||||
|
<div class="widgets-holder-wrap">
|
||||||
|
<div class="sidebar-name">
|
||||||
|
<div class="sidebar-name-arrow"></div>
|
||||||
|
<h3>Menu Selector</h3>
|
||||||
|
</div>
|
||||||
|
<div class="widget-holder">
|
||||||
|
<select id="menu_select" name="menu_select">
|
||||||
|
<?php
|
||||||
|
|
||||||
|
//DISPLAY SELECT OPTIONS
|
||||||
|
foreach( $custom_menus as $menu ) {
|
||||||
|
$menu_term = get_term( $menu, 'menu' );
|
||||||
|
if ( ( $menu_id_in_edit == $menu ) || ( $menu_selected_id == $menu ) )
|
||||||
|
$selected_option = 'selected="selected"';
|
||||||
|
else
|
||||||
|
$selected_option = '';
|
||||||
|
?>
|
||||||
|
<option value="<?php echo $menu_term->term_id; ?>" <?php echo $selected_option; ?>><?php echo $menu_term->name; ?></option>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<input id="switch_menu" type="submit" value="Switch" name="switch_menu" class="button" />
|
||||||
|
<input id="add_menu_name" name="add_menu_name" type="text" value="" />
|
||||||
|
<input id="add_menu" type="submit" value="Add Menu" name="add_menu" class="button" />
|
||||||
|
|
||||||
|
<div class="fix"></div>
|
||||||
|
</div>
|
||||||
|
</div><!-- /.widgets-holder-wrap -->
|
||||||
|
<?php $advanced_option_descriptions = get_option('wp_settings_custom_nav_advanced_options'); ?>
|
||||||
|
<div class="widgets-holder-wrap" style="display:none;">
|
||||||
|
<div class="sidebar-name">
|
||||||
|
<div class="sidebar-name-arrow"></div>
|
||||||
|
<h3>Top Level Menu Descriptions</h3>
|
||||||
|
</div>
|
||||||
|
<div class="widget-holder">
|
||||||
|
<span>Display Descriptions in Top Level Menu?</span>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
//UPDATE and DISPLAY Menu Description Option
|
||||||
|
if (isset($_POST['menu-descriptions']))
|
||||||
|
{
|
||||||
|
|
||||||
|
if (isset($_POST['switch_menu'])) {
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$menu_options_to_edit = $_POST['menu_id_in_edit'];
|
||||||
|
update_option('wp_settings_custom_nav_'.$menu_options_to_edit.'_descriptions',$_POST['menu-descriptions']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($menu_id_in_edit > 0)
|
||||||
|
{
|
||||||
|
$checkedraw = get_option('wp_settings_custom_nav_'.$menu_id_in_edit.'_descriptions');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$checkedraw = get_option('wp_settings_custom_nav_'.$menu_selected_id.'_descriptions');
|
||||||
|
}
|
||||||
|
|
||||||
|
$checked = strtolower($checkedraw);
|
||||||
|
|
||||||
|
if ($advanced_option_descriptions == 'no')
|
||||||
|
{
|
||||||
|
$checked = 'no';
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<span class="checkboxes">
|
||||||
|
<label>Yes</label><input type="radio" name="menu-descriptions" value="yes" <?php if ($checked=='yes') { echo 'checked="checked"'; } ?> />
|
||||||
|
<label>No</label><input type="radio" name="menu-descriptions" value="no" <?php if ($checked=='yes') { } else { echo 'checked="checked"'; } ?> />
|
||||||
|
</span><!-- /.checkboxes -->
|
||||||
|
</form>
|
||||||
|
<div class="fix"></div>
|
||||||
|
</div>
|
||||||
|
</div><!-- /.widgets-holder-wrap -->
|
||||||
|
|
||||||
|
<div class="widgets-holder-wrap">
|
||||||
|
<div class="sidebar-name">
|
||||||
|
<div class="sidebar-name-arrow"></div>
|
||||||
|
<h3>Add an Existing Page</h3>
|
||||||
|
</div>
|
||||||
|
<div class="widget-holder">
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$pages_args = array(
|
||||||
|
'child_of' => 0,
|
||||||
|
'sort_order' => 'ASC',
|
||||||
|
'sort_column' => 'post_title',
|
||||||
|
'hierarchical' => 1,
|
||||||
|
'exclude' => '',
|
||||||
|
'include' => '',
|
||||||
|
'meta_key' => '',
|
||||||
|
'meta_value' => '',
|
||||||
|
'authors' => '',
|
||||||
|
'parent' => -1,
|
||||||
|
'exclude_tree' => '',
|
||||||
|
'number' => '',
|
||||||
|
'offset' => 0 );
|
||||||
|
|
||||||
|
//GET all pages
|
||||||
|
$pages_array = get_pages($pages_args);
|
||||||
|
$page_name = '';
|
||||||
|
//CHECK if pages exist
|
||||||
|
if ($pages_array)
|
||||||
|
{
|
||||||
|
foreach ($pages_array as $post)
|
||||||
|
{
|
||||||
|
//Add page name to
|
||||||
|
$page_name .= htmlentities($post->post_title).'|';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$page_name = "No pages available";
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
//GET PHP pages
|
||||||
|
var dataposts = "<?php echo $page_name; ?>".split("|");
|
||||||
|
|
||||||
|
//Set autocomplete
|
||||||
|
$("#page-search").autocomplete(dataposts);
|
||||||
|
|
||||||
|
//Handle autocomplete result
|
||||||
|
$("#page-search").result(function(event, data, formatted) {
|
||||||
|
$('#existing-pages').css('display','block');
|
||||||
|
$("#existing-pages dt:contains('" + data + "')").css("display", "block");
|
||||||
|
|
||||||
|
$('#show-pages').hide();
|
||||||
|
$('#hide-pages').show();
|
||||||
|
|
||||||
|
});
|
||||||
|
$('#existing-pages').css('display','none');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<input type="text" onfocus="jQuery('#page-search').attr('value','');" id="page-search" value="Search Pages" />
|
||||||
|
|
||||||
|
<a id="show-pages" style="cursor:pointer;" onclick="jQuery('#existing-pages').css('display','block');jQuery('#page-search').attr('value','');jQuery('#existing-pages dt').css('display','block');jQuery('#show-pages').hide();jQuery('#hide-pages').show();">View All</a>
|
||||||
|
<a id="hide-pages" style="cursor:pointer;" onclick="jQuery('#existing-pages').css('display','none');jQuery('#page-search').attr('value','Search Pages');jQuery('#existing-pages dt').css('display','none');jQuery('#show-pages').show();jQuery('#hide-pages').hide();">Hide All</a>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
jQuery('#hide-pages').hide();
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<ul id="existing-pages" class="list">
|
||||||
|
<?php
|
||||||
|
$intCounter = 0;
|
||||||
|
//Get default Pages
|
||||||
|
$intCounter = wp_custom_nav_get_pages($intCounter,'default');
|
||||||
|
?>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="fix"></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div><!-- /.widgets-holder-wrap -->
|
||||||
|
|
||||||
|
<div class="widgets-holder-wrap">
|
||||||
|
<div class="sidebar-name">
|
||||||
|
<div class="sidebar-name-arrow"></div>
|
||||||
|
<h3>Add an Existing Category</h3>
|
||||||
|
</div>
|
||||||
|
<div class="widget-holder">
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
//Custom GET categories query
|
||||||
|
$categories = $wpdb->get_results("SELECT term_id FROM $wpdb->term_taxonomy WHERE taxonomy = 'category' ORDER BY term_id ASC");
|
||||||
|
$cat_name = '';
|
||||||
|
//CHECK for results
|
||||||
|
if ($categories)
|
||||||
|
{
|
||||||
|
foreach($categories as $category)
|
||||||
|
{
|
||||||
|
$cat_id = $category->term_id;
|
||||||
|
|
||||||
|
$cat_args=array(
|
||||||
|
'orderby' => 'name',
|
||||||
|
'include' => $cat_id,
|
||||||
|
'hierarchical' => 1,
|
||||||
|
'order' => 'ASC'
|
||||||
|
);
|
||||||
|
|
||||||
|
$category_names=get_categories($cat_args);
|
||||||
|
|
||||||
|
if (isset($category_names[0]->name))
|
||||||
|
{
|
||||||
|
//Add category name to data string
|
||||||
|
$cat_name .= htmlentities($category_names[0]->name).'|';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$cat_name = "No categories available";
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
|
||||||
|
//GET PHP categories
|
||||||
|
var datacats = "<?php echo $cat_name; ?>".split("|");
|
||||||
|
|
||||||
|
//Set autocomplete
|
||||||
|
$("#cat-search").autocomplete(datacats);
|
||||||
|
|
||||||
|
//Handle autocomplete result
|
||||||
|
$("#cat-search").result(function(event, data, formatted) {
|
||||||
|
$('#existing-categories').css('display','block');
|
||||||
|
$("#existing-categories dt:contains('" + data + "')").css("display", "block");
|
||||||
|
|
||||||
|
$('#show-cats').hide();
|
||||||
|
$('#hide-cats').show();
|
||||||
|
|
||||||
|
});
|
||||||
|
$('#existing-categories').css('display','none');
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<input type="text" onfocus="jQuery('#cat-search').attr('value','');" id="cat-search" value="Search Categories" />
|
||||||
|
|
||||||
|
<a id="show-cats" style="cursor:pointer;" onclick="jQuery('#existing-categories').css('display','block');jQuery('#cat-search').attr('value','');jQuery('#existing-categories dt').css('display','block');jQuery('#show-cats').hide();jQuery('#hide-cats').show();">View All</a>
|
||||||
|
<a id="hide-cats" style="cursor:pointer;" onclick="jQuery('#existing-categories').css('display','none');jQuery('#cat-search').attr('value','Search Categories');jQuery('#existing-categories dt').css('display','none');jQuery('#show-cats').show();jQuery('#hide-cats').hide();">Hide All</a>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
jQuery('#hide-cats').hide();
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<ul id="existing-categories" class="list">
|
||||||
|
<?php
|
||||||
|
//Get default Categories
|
||||||
|
$intCounter = wp_custom_nav_get_categories($intCounter,'default');
|
||||||
|
?>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="fix"></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div><!-- /.widgets-holder-wrap -->
|
||||||
|
|
||||||
|
<div class="widgets-holder-wrap">
|
||||||
|
<div class="sidebar-name">
|
||||||
|
<div class="sidebar-name-arrow"></div>
|
||||||
|
<h3>Add a Custom Url</h3>
|
||||||
|
</div>
|
||||||
|
<div class="widget-holder">
|
||||||
|
<input id="custom_menu_item_url" type="text" value="http://" />
|
||||||
|
<label>URL</label><br />
|
||||||
|
<?php $templatedir = get_bloginfo('url'); ?>
|
||||||
|
<input type="hidden" id="templatedir" value="<?php echo $templatedir; ?>" />
|
||||||
|
<input id="custom_menu_item_name" type="text" value="Menu Item" onfocus="jQuery('#custom_menu_item_name').attr('value','');" />
|
||||||
|
<label>Menu Text</label><br />
|
||||||
|
<input id="custom_menu_item_description" type="text" value="A description" <?php if ($advanced_option_descriptions == 'no') { ?>style="display:none;"<?php } ?> onfocus="jQuery('#custom_menu_item_description').attr('value','');" />
|
||||||
|
<label <?php if ($advanced_option_descriptions == 'no') { ?>style="display:none;"<?php } ?> >Description</label>
|
||||||
|
<a class="addtomenu" onclick="appendToList('<?php echo $templatedir; ?>','Custom','','','','0','');jQuery('#custom_menu_item_name').attr('value','Menu Item');jQuery('#custom_menu_item_description').attr('value','A description');">Add to menu</a>
|
||||||
|
<div class="fix"></div>
|
||||||
|
</div>
|
||||||
|
</div><!-- /.widgets-holder-wrap -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
document.getElementById('pages-left').style.display='block';
|
||||||
|
document.getElementById('menu-right').style.display='block';
|
||||||
|
document.getElementById('no-js').style.display='none';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div id="dialog-confirm" title="Edit Menu Item">
|
||||||
|
</label><input id="edittitle" type="text" name="edittitle" value="" /><label class="editlabel" for="edittitle">Menu Title</label><br />
|
||||||
|
<input id="editlink" type="text" name="editlink" value="" /><label class="editlabel" for="editlink">URL</label><br />
|
||||||
|
<input id="editanchortitle" type="text" name="editanchortitle" value="" /><label class="editlabel" for="editanchortitle" >Link Title</label><br />
|
||||||
|
<select id="editnewwindow" name="editnewwindow">
|
||||||
|
<option value="1" >Yes</option>
|
||||||
|
<option value="0" >No</option>
|
||||||
|
</select><label class="editlabel" for="editnewwindow" >Open Link in a New Window</label>
|
||||||
|
<input id="editdescription" type="text" name="editdescription" value="" <?php if ($advanced_option_descriptions == 'no') { ?>style="display:none;"<?php } ?> /><label class="editlabel" for="editdescription" <?php if ($advanced_option_descriptions == 'no') { ?>style="display:none;"<?php } ?> >Description</label><br />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
include("admin-footer.php");
|
19
wp-admin/js/custom-navigation-custom-jquery-1.3.2.dev.js
Normal file
19
wp-admin/js/custom-navigation-custom-jquery-1.3.2.dev.js
Normal file
File diff suppressed because one or more lines are too long
1
wp-admin/js/custom-navigation-custom-jquery-1.3.2.js
Normal file
1
wp-admin/js/custom-navigation-custom-jquery-1.3.2.js
Normal file
File diff suppressed because one or more lines are too long
808
wp-admin/js/custom-navigation-custom-jquery-autocomplete.dev.js
Normal file
808
wp-admin/js/custom-navigation-custom-jquery-autocomplete.dev.js
Normal file
@ -0,0 +1,808 @@
|
|||||||
|
/*
|
||||||
|
* jQuery Autocomplete plugin 1.1
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009 Jörn Zaefferer
|
||||||
|
*
|
||||||
|
* Dual licensed under the MIT and GPL licenses:
|
||||||
|
* http://www.opensource.org/licenses/mit-license.php
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $
|
||||||
|
*/
|
||||||
|
|
||||||
|
;(function($) {
|
||||||
|
|
||||||
|
$.fn.extend({
|
||||||
|
autocomplete: function(urlOrData, options) {
|
||||||
|
var isUrl = typeof urlOrData == "string";
|
||||||
|
options = $.extend({}, $.Autocompleter.defaults, {
|
||||||
|
url: isUrl ? urlOrData : null,
|
||||||
|
data: isUrl ? null : urlOrData,
|
||||||
|
delay: isUrl ? $.Autocompleter.defaults.delay : 10,
|
||||||
|
max: options && !options.scroll ? 10 : 150
|
||||||
|
}, options);
|
||||||
|
|
||||||
|
// if highlight is set to false, replace it with a do-nothing function
|
||||||
|
options.highlight = options.highlight || function(value) { return value; };
|
||||||
|
|
||||||
|
// if the formatMatch option is not specified, then use formatItem for backwards compatibility
|
||||||
|
options.formatMatch = options.formatMatch || options.formatItem;
|
||||||
|
|
||||||
|
return this.each(function() {
|
||||||
|
new $.Autocompleter(this, options);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
result: function(handler) {
|
||||||
|
return this.bind("result", handler);
|
||||||
|
},
|
||||||
|
search: function(handler) {
|
||||||
|
return this.trigger("search", [handler]);
|
||||||
|
},
|
||||||
|
flushCache: function() {
|
||||||
|
return this.trigger("flushCache");
|
||||||
|
},
|
||||||
|
setOptions: function(options){
|
||||||
|
return this.trigger("setOptions", [options]);
|
||||||
|
},
|
||||||
|
unautocomplete: function() {
|
||||||
|
return this.trigger("unautocomplete");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$.Autocompleter = function(input, options) {
|
||||||
|
|
||||||
|
var KEY = {
|
||||||
|
UP: 38,
|
||||||
|
DOWN: 40,
|
||||||
|
DEL: 46,
|
||||||
|
TAB: 9,
|
||||||
|
RETURN: 13,
|
||||||
|
ESC: 27,
|
||||||
|
COMMA: 188,
|
||||||
|
PAGEUP: 33,
|
||||||
|
PAGEDOWN: 34,
|
||||||
|
BACKSPACE: 8
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create $ object for input element
|
||||||
|
var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass);
|
||||||
|
|
||||||
|
var timeout;
|
||||||
|
var previousValue = "";
|
||||||
|
var cache = $.Autocompleter.Cache(options);
|
||||||
|
var hasFocus = 0;
|
||||||
|
var lastKeyPressCode;
|
||||||
|
var config = {
|
||||||
|
mouseDownOnSelect: false
|
||||||
|
};
|
||||||
|
var select = $.Autocompleter.Select(options, input, selectCurrent, config);
|
||||||
|
|
||||||
|
var blockSubmit;
|
||||||
|
|
||||||
|
// prevent form submit in opera when selecting with return key
|
||||||
|
$.browser.opera && $(input.form).bind("submit.autocomplete", function() {
|
||||||
|
if (blockSubmit) {
|
||||||
|
blockSubmit = false;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all
|
||||||
|
$input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {
|
||||||
|
// a keypress means the input has focus
|
||||||
|
// avoids issue where input had focus before the autocomplete was applied
|
||||||
|
hasFocus = 1;
|
||||||
|
// track last key pressed
|
||||||
|
lastKeyPressCode = event.keyCode;
|
||||||
|
switch(event.keyCode) {
|
||||||
|
|
||||||
|
case KEY.UP:
|
||||||
|
event.preventDefault();
|
||||||
|
if ( select.visible() ) {
|
||||||
|
select.prev();
|
||||||
|
} else {
|
||||||
|
onChange(0, true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KEY.DOWN:
|
||||||
|
event.preventDefault();
|
||||||
|
if ( select.visible() ) {
|
||||||
|
select.next();
|
||||||
|
} else {
|
||||||
|
onChange(0, true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KEY.PAGEUP:
|
||||||
|
event.preventDefault();
|
||||||
|
if ( select.visible() ) {
|
||||||
|
select.pageUp();
|
||||||
|
} else {
|
||||||
|
onChange(0, true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KEY.PAGEDOWN:
|
||||||
|
event.preventDefault();
|
||||||
|
if ( select.visible() ) {
|
||||||
|
select.pageDown();
|
||||||
|
} else {
|
||||||
|
onChange(0, true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
// matches also semicolon
|
||||||
|
case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA:
|
||||||
|
case KEY.TAB:
|
||||||
|
case KEY.RETURN:
|
||||||
|
if( selectCurrent() ) {
|
||||||
|
// stop default to prevent a form submit, Opera needs special handling
|
||||||
|
event.preventDefault();
|
||||||
|
blockSubmit = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KEY.ESC:
|
||||||
|
select.hide();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
clearTimeout(timeout);
|
||||||
|
timeout = setTimeout(onChange, options.delay);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}).focus(function(){
|
||||||
|
// track whether the field has focus, we shouldn't process any
|
||||||
|
// results if the field no longer has focus
|
||||||
|
hasFocus++;
|
||||||
|
}).blur(function() {
|
||||||
|
hasFocus = 0;
|
||||||
|
if (!config.mouseDownOnSelect) {
|
||||||
|
hideResults();
|
||||||
|
}
|
||||||
|
}).click(function() {
|
||||||
|
// show select when clicking in a focused field
|
||||||
|
if ( hasFocus++ > 1 && !select.visible() ) {
|
||||||
|
onChange(0, true);
|
||||||
|
}
|
||||||
|
}).bind("search", function() {
|
||||||
|
// TODO why not just specifying both arguments?
|
||||||
|
var fn = (arguments.length > 1) ? arguments[1] : null;
|
||||||
|
function findValueCallback(q, data) {
|
||||||
|
var result;
|
||||||
|
if( data && data.length ) {
|
||||||
|
for (var i=0; i < data.length; i++) {
|
||||||
|
if( data[i].result.toLowerCase() == q.toLowerCase() ) {
|
||||||
|
result = data[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( typeof fn == "function" ) fn(result);
|
||||||
|
else $input.trigger("result", result && [result.data, result.value]);
|
||||||
|
}
|
||||||
|
$.each(trimWords($input.val()), function(i, value) {
|
||||||
|
request(value, findValueCallback, findValueCallback);
|
||||||
|
});
|
||||||
|
}).bind("flushCache", function() {
|
||||||
|
cache.flush();
|
||||||
|
}).bind("setOptions", function() {
|
||||||
|
$.extend(options, arguments[1]);
|
||||||
|
// if we've updated the data, repopulate
|
||||||
|
if ( "data" in arguments[1] )
|
||||||
|
cache.populate();
|
||||||
|
}).bind("unautocomplete", function() {
|
||||||
|
select.unbind();
|
||||||
|
$input.unbind();
|
||||||
|
$(input.form).unbind(".autocomplete");
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
function selectCurrent() {
|
||||||
|
var selected = select.selected();
|
||||||
|
if( !selected )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var v = selected.result;
|
||||||
|
previousValue = v;
|
||||||
|
|
||||||
|
if ( options.multiple ) {
|
||||||
|
var words = trimWords($input.val());
|
||||||
|
if ( words.length > 1 ) {
|
||||||
|
var seperator = options.multipleSeparator.length;
|
||||||
|
var cursorAt = $(input).selection().start;
|
||||||
|
var wordAt, progress = 0;
|
||||||
|
$.each(words, function(i, word) {
|
||||||
|
progress += word.length;
|
||||||
|
if (cursorAt <= progress) {
|
||||||
|
wordAt = i;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
progress += seperator;
|
||||||
|
});
|
||||||
|
words[wordAt] = v;
|
||||||
|
// TODO this should set the cursor to the right position, but it gets overriden somewhere
|
||||||
|
//$.Autocompleter.Selection(input, progress + seperator, progress + seperator);
|
||||||
|
v = words.join( options.multipleSeparator );
|
||||||
|
}
|
||||||
|
v += options.multipleSeparator;
|
||||||
|
}
|
||||||
|
|
||||||
|
$input.val(v);
|
||||||
|
hideResultsNow();
|
||||||
|
$input.trigger("result", [selected.data, selected.value]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onChange(crap, skipPrevCheck) {
|
||||||
|
if( lastKeyPressCode == KEY.DEL ) {
|
||||||
|
select.hide();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var currentValue = $input.val();
|
||||||
|
|
||||||
|
if ( !skipPrevCheck && currentValue == previousValue )
|
||||||
|
return;
|
||||||
|
|
||||||
|
previousValue = currentValue;
|
||||||
|
|
||||||
|
currentValue = lastWord(currentValue);
|
||||||
|
if ( currentValue.length >= options.minChars) {
|
||||||
|
$input.addClass(options.loadingClass);
|
||||||
|
if (!options.matchCase)
|
||||||
|
currentValue = currentValue.toLowerCase();
|
||||||
|
request(currentValue, receiveData, hideResultsNow);
|
||||||
|
} else {
|
||||||
|
stopLoading();
|
||||||
|
select.hide();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function trimWords(value) {
|
||||||
|
if (!value)
|
||||||
|
return [""];
|
||||||
|
if (!options.multiple)
|
||||||
|
return [$.trim(value)];
|
||||||
|
return $.map(value.split(options.multipleSeparator), function(word) {
|
||||||
|
return $.trim(value).length ? $.trim(word) : null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function lastWord(value) {
|
||||||
|
if ( !options.multiple )
|
||||||
|
return value;
|
||||||
|
var words = trimWords(value);
|
||||||
|
if (words.length == 1)
|
||||||
|
return words[0];
|
||||||
|
var cursorAt = $(input).selection().start;
|
||||||
|
if (cursorAt == value.length) {
|
||||||
|
words = trimWords(value)
|
||||||
|
} else {
|
||||||
|
words = trimWords(value.replace(value.substring(cursorAt), ""));
|
||||||
|
}
|
||||||
|
return words[words.length - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// fills in the input box w/the first match (assumed to be the best match)
|
||||||
|
// q: the term entered
|
||||||
|
// sValue: the first matching result
|
||||||
|
function autoFill(q, sValue){
|
||||||
|
// autofill in the complete box w/the first match as long as the user hasn't entered in more data
|
||||||
|
// if the last user key pressed was backspace, don't autofill
|
||||||
|
if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) {
|
||||||
|
// fill in the value (keep the case the user has typed)
|
||||||
|
$input.val($input.val() + sValue.substring(lastWord(previousValue).length));
|
||||||
|
// select the portion of the value not typed by the user (so the next character will erase)
|
||||||
|
$(input).selection(previousValue.length, previousValue.length + sValue.length);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function hideResults() {
|
||||||
|
clearTimeout(timeout);
|
||||||
|
timeout = setTimeout(hideResultsNow, 200);
|
||||||
|
};
|
||||||
|
|
||||||
|
function hideResultsNow() {
|
||||||
|
var wasVisible = select.visible();
|
||||||
|
select.hide();
|
||||||
|
clearTimeout(timeout);
|
||||||
|
stopLoading();
|
||||||
|
if (options.mustMatch) {
|
||||||
|
// call search and run callback
|
||||||
|
$input.search(
|
||||||
|
function (result){
|
||||||
|
// if no value found, clear the input box
|
||||||
|
if( !result ) {
|
||||||
|
if (options.multiple) {
|
||||||
|
var words = trimWords($input.val()).slice(0, -1);
|
||||||
|
$input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$input.val( "" );
|
||||||
|
$input.trigger("result", null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function receiveData(q, data) {
|
||||||
|
if ( data && data.length && hasFocus ) {
|
||||||
|
stopLoading();
|
||||||
|
select.display(data, q);
|
||||||
|
autoFill(q, data[0].value);
|
||||||
|
select.show();
|
||||||
|
} else {
|
||||||
|
hideResultsNow();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function request(term, success, failure) {
|
||||||
|
if (!options.matchCase)
|
||||||
|
term = term.toLowerCase();
|
||||||
|
var data = cache.load(term);
|
||||||
|
// recieve the cached data
|
||||||
|
if (data && data.length) {
|
||||||
|
success(term, data);
|
||||||
|
// if an AJAX url has been supplied, try loading the data now
|
||||||
|
} else if( (typeof options.url == "string") && (options.url.length > 0) ){
|
||||||
|
|
||||||
|
var extraParams = {
|
||||||
|
timestamp: +new Date()
|
||||||
|
};
|
||||||
|
$.each(options.extraParams, function(key, param) {
|
||||||
|
extraParams[key] = typeof param == "function" ? param() : param;
|
||||||
|
});
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
// try to leverage ajaxQueue plugin to abort previous requests
|
||||||
|
mode: "abort",
|
||||||
|
// limit abortion to this input
|
||||||
|
port: "autocomplete" + input.name,
|
||||||
|
dataType: options.dataType,
|
||||||
|
url: options.url,
|
||||||
|
data: $.extend({
|
||||||
|
q: lastWord(term),
|
||||||
|
limit: options.max
|
||||||
|
}, extraParams),
|
||||||
|
success: function(data) {
|
||||||
|
var parsed = options.parse && options.parse(data) || parse(data);
|
||||||
|
cache.add(term, parsed);
|
||||||
|
success(term, parsed);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match
|
||||||
|
select.emptyList();
|
||||||
|
failure(term);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function parse(data) {
|
||||||
|
var parsed = [];
|
||||||
|
var rows = data.split("\n");
|
||||||
|
for (var i=0; i < rows.length; i++) {
|
||||||
|
var row = $.trim(rows[i]);
|
||||||
|
if (row) {
|
||||||
|
row = row.split("|");
|
||||||
|
parsed[parsed.length] = {
|
||||||
|
data: row,
|
||||||
|
value: row[0],
|
||||||
|
result: options.formatResult && options.formatResult(row, row[0]) || row[0]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return parsed;
|
||||||
|
};
|
||||||
|
|
||||||
|
function stopLoading() {
|
||||||
|
$input.removeClass(options.loadingClass);
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
$.Autocompleter.defaults = {
|
||||||
|
inputClass: "ac_input",
|
||||||
|
resultsClass: "ac_results",
|
||||||
|
loadingClass: "ac_loading",
|
||||||
|
minChars: 1,
|
||||||
|
delay: 400,
|
||||||
|
matchCase: false,
|
||||||
|
matchSubset: true,
|
||||||
|
matchContains: false,
|
||||||
|
cacheLength: 10,
|
||||||
|
max: 100,
|
||||||
|
mustMatch: false,
|
||||||
|
extraParams: {},
|
||||||
|
selectFirst: true,
|
||||||
|
formatItem: function(row) { return row[0]; },
|
||||||
|
formatMatch: null,
|
||||||
|
autoFill: false,
|
||||||
|
width: 0,
|
||||||
|
multiple: false,
|
||||||
|
multipleSeparator: ", ",
|
||||||
|
highlight: function(value, term) {
|
||||||
|
return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
|
||||||
|
},
|
||||||
|
scroll: true,
|
||||||
|
scrollHeight: 180
|
||||||
|
};
|
||||||
|
|
||||||
|
$.Autocompleter.Cache = function(options) {
|
||||||
|
|
||||||
|
var data = {};
|
||||||
|
var length = 0;
|
||||||
|
|
||||||
|
function matchSubset(s, sub) {
|
||||||
|
if (!options.matchCase)
|
||||||
|
s = s.toLowerCase();
|
||||||
|
var i = s.indexOf(sub);
|
||||||
|
if (options.matchContains == "word"){
|
||||||
|
i = s.toLowerCase().search("\\b" + sub.toLowerCase());
|
||||||
|
}
|
||||||
|
if (i == -1) return false;
|
||||||
|
return i == 0 || options.matchContains;
|
||||||
|
};
|
||||||
|
|
||||||
|
function add(q, value) {
|
||||||
|
if (length > options.cacheLength){
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
if (!data[q]){
|
||||||
|
length++;
|
||||||
|
}
|
||||||
|
data[q] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
function populate(){
|
||||||
|
if( !options.data ) return false;
|
||||||
|
// track the matches
|
||||||
|
var stMatchSets = {},
|
||||||
|
nullData = 0;
|
||||||
|
|
||||||
|
// no url was specified, we need to adjust the cache length to make sure it fits the local data store
|
||||||
|
if( !options.url ) options.cacheLength = 1;
|
||||||
|
|
||||||
|
// track all options for minChars = 0
|
||||||
|
stMatchSets[""] = [];
|
||||||
|
|
||||||
|
// loop through the array and create a lookup structure
|
||||||
|
for ( var i = 0, ol = options.data.length; i < ol; i++ ) {
|
||||||
|
var rawValue = options.data[i];
|
||||||
|
// if rawValue is a string, make an array otherwise just reference the array
|
||||||
|
rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue;
|
||||||
|
|
||||||
|
var value = options.formatMatch(rawValue, i+1, options.data.length);
|
||||||
|
if ( value === false )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var firstChar = value.charAt(0).toLowerCase();
|
||||||
|
// if no lookup array for this character exists, look it up now
|
||||||
|
if( !stMatchSets[firstChar] )
|
||||||
|
stMatchSets[firstChar] = [];
|
||||||
|
|
||||||
|
// if the match is a string
|
||||||
|
var row = {
|
||||||
|
value: value,
|
||||||
|
data: rawValue,
|
||||||
|
result: options.formatResult && options.formatResult(rawValue) || value
|
||||||
|
};
|
||||||
|
|
||||||
|
// push the current match into the set list
|
||||||
|
stMatchSets[firstChar].push(row);
|
||||||
|
|
||||||
|
// keep track of minChars zero items
|
||||||
|
if ( nullData++ < options.max ) {
|
||||||
|
stMatchSets[""].push(row);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// add the data items to the cache
|
||||||
|
$.each(stMatchSets, function(i, value) {
|
||||||
|
// increase the cache size
|
||||||
|
options.cacheLength++;
|
||||||
|
// add to the cache
|
||||||
|
add(i, value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// populate any existing data
|
||||||
|
setTimeout(populate, 25);
|
||||||
|
|
||||||
|
function flush(){
|
||||||
|
data = {};
|
||||||
|
length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
flush: flush,
|
||||||
|
add: add,
|
||||||
|
populate: populate,
|
||||||
|
load: function(q) {
|
||||||
|
if (!options.cacheLength || !length)
|
||||||
|
return null;
|
||||||
|
/*
|
||||||
|
* if dealing w/local data and matchContains than we must make sure
|
||||||
|
* to loop through all the data collections looking for matches
|
||||||
|
*/
|
||||||
|
if( !options.url && options.matchContains ){
|
||||||
|
// track all matches
|
||||||
|
var csub = [];
|
||||||
|
// loop through all the data grids for matches
|
||||||
|
for( var k in data ){
|
||||||
|
// don't search through the stMatchSets[""] (minChars: 0) cache
|
||||||
|
// this prevents duplicates
|
||||||
|
if( k.length > 0 ){
|
||||||
|
var c = data[k];
|
||||||
|
$.each(c, function(i, x) {
|
||||||
|
// if we've got a match, add it to the array
|
||||||
|
if (matchSubset(x.value, q)) {
|
||||||
|
csub.push(x);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return csub;
|
||||||
|
} else
|
||||||
|
// if the exact item exists, use it
|
||||||
|
if (data[q]){
|
||||||
|
return data[q];
|
||||||
|
} else
|
||||||
|
if (options.matchSubset) {
|
||||||
|
for (var i = q.length - 1; i >= options.minChars; i--) {
|
||||||
|
var c = data[q.substr(0, i)];
|
||||||
|
if (c) {
|
||||||
|
var csub = [];
|
||||||
|
$.each(c, function(i, x) {
|
||||||
|
if (matchSubset(x.value, q)) {
|
||||||
|
csub[csub.length] = x;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return csub;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
$.Autocompleter.Select = function (options, input, select, config) {
|
||||||
|
var CLASSES = {
|
||||||
|
ACTIVE: "ac_over"
|
||||||
|
};
|
||||||
|
|
||||||
|
var listItems,
|
||||||
|
active = -1,
|
||||||
|
data,
|
||||||
|
term = "",
|
||||||
|
needsInit = true,
|
||||||
|
element,
|
||||||
|
list;
|
||||||
|
|
||||||
|
// Create results
|
||||||
|
function init() {
|
||||||
|
if (!needsInit)
|
||||||
|
return;
|
||||||
|
element = $("<div/>")
|
||||||
|
.hide()
|
||||||
|
.addClass(options.resultsClass)
|
||||||
|
.css("position", "absolute")
|
||||||
|
.appendTo(document.body);
|
||||||
|
|
||||||
|
list = $("<ul/>").appendTo(element).mouseover( function(event) {
|
||||||
|
if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') {
|
||||||
|
active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event));
|
||||||
|
$(target(event)).addClass(CLASSES.ACTIVE);
|
||||||
|
}
|
||||||
|
}).click(function(event) {
|
||||||
|
$(target(event)).addClass(CLASSES.ACTIVE);
|
||||||
|
select();
|
||||||
|
// TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus
|
||||||
|
input.focus();
|
||||||
|
return false;
|
||||||
|
}).mousedown(function() {
|
||||||
|
config.mouseDownOnSelect = true;
|
||||||
|
}).mouseup(function() {
|
||||||
|
config.mouseDownOnSelect = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
if( options.width > 0 )
|
||||||
|
element.css("width", options.width);
|
||||||
|
|
||||||
|
needsInit = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function target(event) {
|
||||||
|
var element = event.target;
|
||||||
|
while(element && element.tagName != "LI")
|
||||||
|
element = element.parentNode;
|
||||||
|
// more fun with IE, sometimes event.target is empty, just ignore it then
|
||||||
|
if(!element)
|
||||||
|
return [];
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
|
function moveSelect(step) {
|
||||||
|
listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE);
|
||||||
|
movePosition(step);
|
||||||
|
var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE);
|
||||||
|
if(options.scroll) {
|
||||||
|
var offset = 0;
|
||||||
|
listItems.slice(0, active).each(function() {
|
||||||
|
offset += this.offsetHeight;
|
||||||
|
});
|
||||||
|
if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) {
|
||||||
|
list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight());
|
||||||
|
} else if(offset < list.scrollTop()) {
|
||||||
|
list.scrollTop(offset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function movePosition(step) {
|
||||||
|
active += step;
|
||||||
|
if (active < 0) {
|
||||||
|
active = listItems.size() - 1;
|
||||||
|
} else if (active >= listItems.size()) {
|
||||||
|
active = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function limitNumberOfItems(available) {
|
||||||
|
return options.max && options.max < available
|
||||||
|
? options.max
|
||||||
|
: available;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fillList() {
|
||||||
|
list.empty();
|
||||||
|
var max = limitNumberOfItems(data.length);
|
||||||
|
for (var i=0; i < max; i++) {
|
||||||
|
if (!data[i])
|
||||||
|
continue;
|
||||||
|
var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term);
|
||||||
|
if ( formatted === false )
|
||||||
|
continue;
|
||||||
|
var li = $("<li/>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0];
|
||||||
|
$.data(li, "ac_data", data[i]);
|
||||||
|
}
|
||||||
|
listItems = list.find("li");
|
||||||
|
if ( options.selectFirst ) {
|
||||||
|
listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
|
||||||
|
active = 0;
|
||||||
|
}
|
||||||
|
// apply bgiframe if available
|
||||||
|
if ( $.fn.bgiframe )
|
||||||
|
list.bgiframe();
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
display: function(d, q) {
|
||||||
|
init();
|
||||||
|
data = d;
|
||||||
|
term = q;
|
||||||
|
fillList();
|
||||||
|
},
|
||||||
|
next: function() {
|
||||||
|
moveSelect(1);
|
||||||
|
},
|
||||||
|
prev: function() {
|
||||||
|
moveSelect(-1);
|
||||||
|
},
|
||||||
|
pageUp: function() {
|
||||||
|
if (active != 0 && active - 8 < 0) {
|
||||||
|
moveSelect( -active );
|
||||||
|
} else {
|
||||||
|
moveSelect(-8);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
pageDown: function() {
|
||||||
|
if (active != listItems.size() - 1 && active + 8 > listItems.size()) {
|
||||||
|
moveSelect( listItems.size() - 1 - active );
|
||||||
|
} else {
|
||||||
|
moveSelect(8);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
hide: function() {
|
||||||
|
element && element.hide();
|
||||||
|
listItems && listItems.removeClass(CLASSES.ACTIVE);
|
||||||
|
active = -1;
|
||||||
|
},
|
||||||
|
visible : function() {
|
||||||
|
return element && element.is(":visible");
|
||||||
|
},
|
||||||
|
current: function() {
|
||||||
|
return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]);
|
||||||
|
},
|
||||||
|
show: function() {
|
||||||
|
var offset = $(input).offset();
|
||||||
|
element.css({
|
||||||
|
width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(),
|
||||||
|
top: offset.top + input.offsetHeight,
|
||||||
|
left: offset.left
|
||||||
|
}).show();
|
||||||
|
if(options.scroll) {
|
||||||
|
list.scrollTop(0);
|
||||||
|
list.css({
|
||||||
|
maxHeight: options.scrollHeight,
|
||||||
|
overflow: 'auto'
|
||||||
|
});
|
||||||
|
|
||||||
|
if($.browser.msie && typeof document.body.style.maxHeight === "undefined") {
|
||||||
|
var listHeight = 0;
|
||||||
|
listItems.each(function() {
|
||||||
|
listHeight += this.offsetHeight;
|
||||||
|
});
|
||||||
|
var scrollbarsVisible = listHeight > options.scrollHeight;
|
||||||
|
list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight );
|
||||||
|
if (!scrollbarsVisible) {
|
||||||
|
// IE doesn't recalculate width when scrollbar disappears
|
||||||
|
listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
selected: function() {
|
||||||
|
var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);
|
||||||
|
return selected && selected.length && $.data(selected[0], "ac_data");
|
||||||
|
},
|
||||||
|
emptyList: function (){
|
||||||
|
list && list.empty();
|
||||||
|
},
|
||||||
|
unbind: function() {
|
||||||
|
element && element.remove();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.selection = function(start, end) {
|
||||||
|
if (start !== undefined) {
|
||||||
|
return this.each(function() {
|
||||||
|
if( this.createTextRange ){
|
||||||
|
var selRange = this.createTextRange();
|
||||||
|
if (end === undefined || start == end) {
|
||||||
|
selRange.move("character", start);
|
||||||
|
selRange.select();
|
||||||
|
} else {
|
||||||
|
selRange.collapse(true);
|
||||||
|
selRange.moveStart("character", start);
|
||||||
|
selRange.moveEnd("character", end);
|
||||||
|
selRange.select();
|
||||||
|
}
|
||||||
|
} else if( this.setSelectionRange ){
|
||||||
|
this.setSelectionRange(start, end);
|
||||||
|
} else if( this.selectionStart ){
|
||||||
|
this.selectionStart = start;
|
||||||
|
this.selectionEnd = end;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
var field = this[0];
|
||||||
|
if ( field.createTextRange ) {
|
||||||
|
var range = document.selection.createRange(),
|
||||||
|
orig = field.value,
|
||||||
|
teststring = "<->",
|
||||||
|
textLength = range.text.length;
|
||||||
|
range.text = teststring;
|
||||||
|
var caretAt = field.value.indexOf(teststring);
|
||||||
|
field.value = orig;
|
||||||
|
this.selection(caretAt, caretAt + textLength);
|
||||||
|
return {
|
||||||
|
start: caretAt,
|
||||||
|
end: caretAt + textLength
|
||||||
|
}
|
||||||
|
} else if( field.selectionStart !== undefined ){
|
||||||
|
return {
|
||||||
|
start: field.selectionStart,
|
||||||
|
end: field.selectionEnd
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
})(jQuery);
|
File diff suppressed because one or more lines are too long
47
wp-admin/js/custom-navigation-custom-jquery-ui-1.7.2.dev.js
Normal file
47
wp-admin/js/custom-navigation-custom-jquery-ui-1.7.2.dev.js
Normal file
File diff suppressed because one or more lines are too long
1
wp-admin/js/custom-navigation-custom-jquery-ui-1.7.2.js
Normal file
1
wp-admin/js/custom-navigation-custom-jquery-ui-1.7.2.js
Normal file
File diff suppressed because one or more lines are too long
147
wp-admin/js/custom-navigation-default-items.dev.js
Normal file
147
wp-admin/js/custom-navigation-default-items.dev.js
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
/**
|
||||||
|
* WordPress Administration Custom Navigation
|
||||||
|
* Interface JQuery functions
|
||||||
|
*
|
||||||
|
* @author Jeffikus <pearce.jp@gmail.com>
|
||||||
|
* @version 1.1.0
|
||||||
|
*
|
||||||
|
* @package WordPress
|
||||||
|
* @subpackage Administration
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Init Functions
|
||||||
|
*/
|
||||||
|
$(function()
|
||||||
|
{
|
||||||
|
//Makes dialog box
|
||||||
|
$("#dialog-confirm").dialog({
|
||||||
|
autoOpen: false,
|
||||||
|
resizable: false,
|
||||||
|
height: 210,
|
||||||
|
width: 400,
|
||||||
|
modal: true,
|
||||||
|
buttons: {
|
||||||
|
'Save': function() {
|
||||||
|
|
||||||
|
titletosave = $('#edittitle').attr('value');
|
||||||
|
linktosave = $('#editlink').attr('value');
|
||||||
|
anchortitletosave = $('#editanchortitle').attr('value');
|
||||||
|
newwindowtosave = $('#editnewwindow').attr('value');
|
||||||
|
desctosave = $('#editdescription').attr('value');
|
||||||
|
|
||||||
|
$('#title' + $(this).dialog('option', 'itemID')).attr('value',titletosave);
|
||||||
|
$('#linkurl' + $(this).dialog('option', 'itemID')).attr('value',linktosave);
|
||||||
|
$('#anchortitle' + $(this).dialog('option', 'itemID')).attr('value',anchortitletosave);
|
||||||
|
$('#newwindow' + $(this).dialog('option', 'itemID')).attr('value',newwindowtosave);
|
||||||
|
$('#description' + $(this).dialog('option', 'itemID')).attr('value',desctosave);
|
||||||
|
|
||||||
|
$('#menu-' + $(this).dialog('option', 'itemID') + ' > dl > dt > span.title').text(titletosave);
|
||||||
|
|
||||||
|
$('#view' + + $(this).dialog('option', 'itemID')).attr('href', linktosave);
|
||||||
|
|
||||||
|
$(this).dialog('close');
|
||||||
|
|
||||||
|
},
|
||||||
|
Cancel: function() {
|
||||||
|
$(this).dialog('close');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#message').animate({ opacity: 1.0 },2000).fadeOut(300, function(){ $(this).remove();});
|
||||||
|
|
||||||
|
//Add dropzone
|
||||||
|
$('#custom-nav li').prepend('<div class="dropzone"></div>');
|
||||||
|
|
||||||
|
//Make li items draggable
|
||||||
|
$('#custom-nav li').draggable({
|
||||||
|
handle: ' > dl',
|
||||||
|
opacity: .8,
|
||||||
|
addClasses: false,
|
||||||
|
helper: 'clone',
|
||||||
|
zIndex: 100
|
||||||
|
});
|
||||||
|
|
||||||
|
//Make items droppable
|
||||||
|
$('#custom-nav dl, #custom-nav .dropzone').droppable(
|
||||||
|
{
|
||||||
|
accept: '#custom-nav li',
|
||||||
|
tolerance: 'pointer',
|
||||||
|
drop: function(e, ui)
|
||||||
|
{
|
||||||
|
var li = $(this).parent();
|
||||||
|
var child = !$(this).hasClass('dropzone');
|
||||||
|
//Add UL to first child
|
||||||
|
if (child && li.children('ul').length == 0)
|
||||||
|
{
|
||||||
|
li.append('<ul id="sub-menu" />');
|
||||||
|
}
|
||||||
|
//Make it draggable
|
||||||
|
if (child)
|
||||||
|
{
|
||||||
|
li.children('ul').append(ui.draggable);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
li.before(ui.draggable);
|
||||||
|
}
|
||||||
|
|
||||||
|
li.find('dl,.dropzone').css({ backgroundColor: '', borderColor: '' });
|
||||||
|
|
||||||
|
var draggablevalue = ui.draggable.attr('value');
|
||||||
|
var droppablevalue = li.attr('value');
|
||||||
|
li.find('#menu-' + draggablevalue).find('#parent' + draggablevalue).val(droppablevalue);
|
||||||
|
$(this).parent().find("dt").removeAttr('style');
|
||||||
|
$(this).parent().find("div:first").removeAttr('style');
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
over: function()
|
||||||
|
{
|
||||||
|
//Add child
|
||||||
|
if ($(this).attr('class') == 'dropzone ui-droppable')
|
||||||
|
{
|
||||||
|
$(this).parent().find("div:first").css('background', 'none').css('height', '50px');
|
||||||
|
}
|
||||||
|
//Add above
|
||||||
|
else if ($(this).attr('class') == 'ui-droppable')
|
||||||
|
{
|
||||||
|
$(this).parent().find("dt:first").css('background', '#d8d8d8');
|
||||||
|
}
|
||||||
|
//do nothing
|
||||||
|
else {
|
||||||
|
|
||||||
|
}
|
||||||
|
var parentid = $(this).parent().attr('id');
|
||||||
|
|
||||||
|
},
|
||||||
|
out: function()
|
||||||
|
{
|
||||||
|
$(this).parent().find("dt").removeAttr('style');
|
||||||
|
$(this).parent().find("div:first").removeAttr('style');
|
||||||
|
$(this).filter('.dropzone').css({ borderColor: '' });
|
||||||
|
},
|
||||||
|
deactivate: function()
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
//Handle Save Button Clicks
|
||||||
|
$('#save_top').click(function()
|
||||||
|
{
|
||||||
|
updatepostdata();
|
||||||
|
});
|
||||||
|
$('#save_bottom').click(function()
|
||||||
|
{
|
||||||
|
updatepostdata();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
1
wp-admin/js/custom-navigation-default-items.js
Normal file
1
wp-admin/js/custom-navigation-default-items.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
$(function(){$("#dialog-confirm").dialog({autoOpen:false,resizable:false,height:210,width:400,modal:true,buttons:{Save:function(){titletosave=$("#edittitle").attr("value");linktosave=$("#editlink").attr("value");anchortitletosave=$("#editanchortitle").attr("value");newwindowtosave=$("#editnewwindow").attr("value");desctosave=$("#editdescription").attr("value");$("#title"+$(this).dialog("option","itemID")).attr("value",titletosave);$("#linkurl"+$(this).dialog("option","itemID")).attr("value",linktosave);$("#anchortitle"+$(this).dialog("option","itemID")).attr("value",anchortitletosave);$("#newwindow"+$(this).dialog("option","itemID")).attr("value",newwindowtosave);$("#description"+$(this).dialog("option","itemID")).attr("value",desctosave);$("#menu-"+$(this).dialog("option","itemID")+" > dl > dt > span.title").text(titletosave);$("#view"+ +$(this).dialog("option","itemID")).attr("href",linktosave);$(this).dialog("close")},Cancel:function(){$(this).dialog("close")}}});$("#message").animate({opacity:1},2000).fadeOut(300,function(){$(this).remove()});$("#custom-nav li").prepend('<div class="dropzone"></div>');$("#custom-nav li").draggable({handle:" > dl",opacity:0.8,addClasses:false,helper:"clone",zIndex:100});$("#custom-nav dl, #custom-nav .dropzone").droppable({accept:"#custom-nav li",tolerance:"pointer",drop:function(f,d){var a=$(this).parent();var g=!$(this).hasClass("dropzone");if(g&&a.children("ul").length==0){a.append('<ul id="sub-menu" />')}if(g){a.children("ul").append(d.draggable)}else{a.before(d.draggable)}a.find("dl,.dropzone").css({backgroundColor:"",borderColor:""});var c=d.draggable.attr("value");var b=a.attr("value");a.find("#menu-"+c).find("#parent"+c).val(b);$(this).parent().find("dt").removeAttr("style");$(this).parent().find("div:first").removeAttr("style")},over:function(){if($(this).attr("class")=="dropzone ui-droppable"){$(this).parent().find("div:first").css("background","none").css("height","50px")}else{if($(this).attr("class")=="ui-droppable"){$(this).parent().find("dt:first").css("background","#d8d8d8")}else{}}var a=$(this).parent().attr("id")},out:function(){$(this).parent().find("dt").removeAttr("style");$(this).parent().find("div:first").removeAttr("style");$(this).filter(".dropzone").css({borderColor:""})},deactivate:function(){}});$("#save_top").click(function(){updatepostdata()});$("#save_bottom").click(function(){updatepostdata()})});
|
289
wp-admin/js/custom-navigation-dynamic-functions.dev.js
Normal file
289
wp-admin/js/custom-navigation-dynamic-functions.dev.js
Normal file
@ -0,0 +1,289 @@
|
|||||||
|
/**
|
||||||
|
* WordPress Administration Custom Navigation
|
||||||
|
* Interface JS functions
|
||||||
|
*
|
||||||
|
* @author Jeffikus <pearce.jp@gmail.com>
|
||||||
|
* @version 1.1.0
|
||||||
|
*
|
||||||
|
* @package WordPress
|
||||||
|
* @subpackage Administration
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Removes menu items from current menu
|
||||||
|
* @param int o - the id of the menu li to remove.
|
||||||
|
*/
|
||||||
|
function removeitem(o)
|
||||||
|
{
|
||||||
|
|
||||||
|
var todelete = document.getElementById('menu-' + o);
|
||||||
|
|
||||||
|
if (todelete)
|
||||||
|
{
|
||||||
|
var parenttodelete = document.getElementById('menu-' + o).parentNode;
|
||||||
|
throwaway_node = parenttodelete.removeChild(todelete);
|
||||||
|
}
|
||||||
|
|
||||||
|
updatepostdata();
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Loads dialog window to edit menu items from current menu
|
||||||
|
* @param int o - the id of the menu li to edit.
|
||||||
|
*/
|
||||||
|
function edititem(o)
|
||||||
|
{
|
||||||
|
|
||||||
|
itemTitle = $('#title' + o).attr('value');
|
||||||
|
itemURL = $('#linkurl' + o).attr('value');
|
||||||
|
itemAnchorTitle = $('#anchortitle' + o).attr('value');
|
||||||
|
itemNewWindow = $('#newwindow' + o).attr('value');
|
||||||
|
itemDesc = $('#description' + o).attr('value');
|
||||||
|
|
||||||
|
$('#dialog-confirm').dialog( 'option' , 'itemID' , o )
|
||||||
|
|
||||||
|
$('#dialog-confirm').dialog('open');
|
||||||
|
|
||||||
|
$('#edittitle').attr('value', itemTitle);
|
||||||
|
$('#editlink').attr('value', itemURL);
|
||||||
|
$('#editanchortitle').attr('value', itemAnchorTitle);
|
||||||
|
$("#editnewwindow option[value='" + itemNewWindow + "']").attr('selected', 'selected');
|
||||||
|
$('#editdescription').attr('value', itemDesc);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prepares menu items for POST
|
||||||
|
*/
|
||||||
|
function updatepostdata()
|
||||||
|
{
|
||||||
|
|
||||||
|
var i = 0;
|
||||||
|
$("#custom-nav").find("li").each(function(i) {
|
||||||
|
i = i + 1;
|
||||||
|
var j = $(this).attr('value');
|
||||||
|
|
||||||
|
$(this).find('#position' + j).attr('value', i);
|
||||||
|
$(this).attr('id','menu-' + i);
|
||||||
|
$(this).attr('value', i);
|
||||||
|
|
||||||
|
$(this).find('#dbid' + j).attr('name','dbid' + i);
|
||||||
|
$(this).find('#dbid' + j).attr('id','dbid' + i);
|
||||||
|
|
||||||
|
$(this).find('#postmenu' + j).attr('name','postmenu' + i);
|
||||||
|
$(this).find('#postmenu' + j).attr('id','postmenu' + i);
|
||||||
|
|
||||||
|
var p = $(this).find('#parent' + j).parent().parent().parent().attr('value');
|
||||||
|
|
||||||
|
$(this).find('#parent' + j).attr('name','parent' + i);
|
||||||
|
$(this).find('#parent' + j).attr('id','parent' + i);
|
||||||
|
if (p) {
|
||||||
|
//Do nothing
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//reset p to be top level
|
||||||
|
p = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$(this).find('#parent' + j).attr('value', p);
|
||||||
|
|
||||||
|
$(this).find('#title' + j).attr('name','title' + i);
|
||||||
|
$(this).find('#title' + j).attr('id','title' + i);
|
||||||
|
|
||||||
|
$(this).find('#linkurl' + j).attr('name','linkurl' + i);
|
||||||
|
$(this).find('#linkurl' + j).attr('id','linkurl' + i);
|
||||||
|
|
||||||
|
$(this).find('#description' + j).attr('name','description' + i);
|
||||||
|
$(this).find('#description' + j).attr('id','description' + i);
|
||||||
|
|
||||||
|
$(this).find('#icon' + j).attr('name','icon' + i);
|
||||||
|
$(this).find('#icon' + j).attr('id','icon' + i);
|
||||||
|
|
||||||
|
$(this).find('#position' + j).attr('name','position' + i);
|
||||||
|
$(this).find('#position' + j).attr('id','position' + i);
|
||||||
|
|
||||||
|
$(this).find('#linktype' + j).attr('name','linktype' + i);
|
||||||
|
$(this).find('#linktype' + j).attr('id','linktype' + i);
|
||||||
|
|
||||||
|
$(this).find('#anchortitle' + j).attr('name','anchortitle' + i);
|
||||||
|
$(this).find('#anchortitle' + j).attr('id','anchortitle' + i);
|
||||||
|
|
||||||
|
$(this).find('#newwindow' + j).attr('name','newwindow' + i);
|
||||||
|
$(this).find('#newwindow' + j).attr('id','newwindow' + i);
|
||||||
|
|
||||||
|
$(this).find('dl > dt > span > #remove' + j).attr('value', i);
|
||||||
|
$(this).find('dl > dt > span > #remove' + j).attr('onClick', 'removeitem(' + i + ')');
|
||||||
|
$(this).find('dl > dt > span > #remove' + j).attr('id','remove' + i);
|
||||||
|
|
||||||
|
$('#licount').attr('value',i);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Adds item from Page, Category, or Custom options menu
|
||||||
|
* @param string templatedir - directory of the add, edit, view images.
|
||||||
|
* @param string additemtype - Page, Category, or Custom.
|
||||||
|
* @param string itemtext - menu text.
|
||||||
|
* @param string itemurl - url of the menu.
|
||||||
|
* @param int itemid - menu id.
|
||||||
|
* @param int itemparentid - default 0.
|
||||||
|
* @param string itemdescription - the description of the menu item.
|
||||||
|
*/
|
||||||
|
function appendToList(templatedir,additemtype,itemtext,itemurl,itemid,itemparentid,itemdescription)
|
||||||
|
{
|
||||||
|
var inputvaluevarname = '';
|
||||||
|
var inputvaluevarurl = '';
|
||||||
|
var inputitemid = '';
|
||||||
|
var inputparentid= '';
|
||||||
|
var inputdescription = '';
|
||||||
|
var inputicon = '';
|
||||||
|
|
||||||
|
if (additemtype == 'Custom')
|
||||||
|
{
|
||||||
|
inputvaluevarname = document.getElementById('custom_menu_item_name').value;
|
||||||
|
inputvaluevarurl = document.getElementById('custom_menu_item_url').value;
|
||||||
|
inputitemid = '';
|
||||||
|
inputparentid = '';
|
||||||
|
inputlinktype = 'custom';
|
||||||
|
inputdescription = document.getElementById('custom_menu_item_description').value;
|
||||||
|
}
|
||||||
|
else if (additemtype == 'Page')
|
||||||
|
{
|
||||||
|
inputvaluevarname = htmlentities(itemtext.toString());
|
||||||
|
inputvaluevarurl = itemurl.toString();
|
||||||
|
inputitemid = itemid.toString();
|
||||||
|
inputparentid = '0';
|
||||||
|
inputlinktype = 'page';
|
||||||
|
inputdescription = htmlentities(itemdescription.toString());
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (additemtype == 'Category')
|
||||||
|
{
|
||||||
|
inputvaluevarname = htmlentities(itemtext.toString());
|
||||||
|
inputvaluevarurl = itemurl.toString();
|
||||||
|
inputitemid = itemid.toString();
|
||||||
|
inputparentid = '0';
|
||||||
|
inputlinktype = 'category';
|
||||||
|
inputdescription = htmlentities(itemdescription.toString());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
inputvaluevarname = '';
|
||||||
|
inputvaluevarname = '';
|
||||||
|
inputitemid = '';
|
||||||
|
inputparentid = '';
|
||||||
|
inputlinktype = 'custom';
|
||||||
|
inputdescription = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
var count=document.getElementById('custom-nav').getElementsByTagName('li').length;
|
||||||
|
|
||||||
|
var randomnumber = count;
|
||||||
|
|
||||||
|
var validatetest = 0;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var test=document.getElementById("menu-" + randomnumber.toString()).value;
|
||||||
|
}
|
||||||
|
catch (err)
|
||||||
|
{
|
||||||
|
validatetest = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (validatetest == 0)
|
||||||
|
{
|
||||||
|
randomnumber = randomnumber + 1;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var test2=document.getElementById("menu-" + randomnumber.toString()).value;
|
||||||
|
}
|
||||||
|
catch (err)
|
||||||
|
{
|
||||||
|
validatetest = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Notification Message
|
||||||
|
$('.maintitle').after('<div id="message" class="updated fade below-h2"><p>Menu Item added!</p></div>');
|
||||||
|
$('#message').animate({ opacity: 1.0 },2000).fadeOut(300, function(){ $(this).remove();});
|
||||||
|
|
||||||
|
//Appends HTML to the menu
|
||||||
|
$('#custom-nav').append('<li id="menu-' + randomnumber + '" value="' + randomnumber + '"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="title">' + inputvaluevarname + '</span><span class="controls"><span class="type">' + additemtype + '</span><a id="edit' + randomnumber + '" onclick="edititem(' + randomnumber + ')" value="' + randomnumber +'"><img class="edit" alt="Edit Menu Item" title="Edit Menu Item" src="' + templatedir + '/wp-admin/images/ico-edit.png" /></a> <a id="remove' + randomnumber + '" onclick="removeitem(' + randomnumber + ')" value="' + randomnumber +'"><img class="remove" alt="Remove from Custom Menu" title="Remove from Custom Menu" src="' + templatedir + '/wp-admin/images/ico-close.png" /></a> <a href="' + inputvaluevarurl + '" target="_blank"><img alt="View Custom Link" title="View Custom Link" src="' + templatedir + '/wp-admin/images/ico-viewpage.png" /></a></span></dt></dl><a class="hide" href="' + inputvaluevarurl + '">' + inputvaluevarname + '</a><input type="hidden" name="postmenu' + randomnumber + '" id="postmenu' + randomnumber + '" value="' + inputitemid + '" /><input type="hidden" name="parent' + randomnumber + '" id="parent' + randomnumber + '" value="' + inputparentid + '" /><input type="hidden" name="title' + randomnumber + '" id="title' + randomnumber + '" value="' + inputvaluevarname + '" /><input type="hidden" name="linkurl' + randomnumber + '" id="linkurl' + randomnumber + '" value="' + inputvaluevarurl + '" /><input type="hidden" name="description' + randomnumber + '" id="description' + randomnumber + '" value="' + inputdescription + '" /><input type="hidden" name="icon' + randomnumber + '" id="icon' + randomnumber + '" value="' + inputicon + '" /><input type="hidden" name="position' + randomnumber + '" id="position' + randomnumber + '" value="' + randomnumber + '" /><input type="hidden" name="linktype' + randomnumber + '" id="linktype' + randomnumber + '" value="' + inputlinktype + '" /><input type="hidden" name="anchortitle' + randomnumber + '" id="anchortitle' + randomnumber + '" value="' + inputvaluevarname + '" /><input type="hidden" name="newwindow' + randomnumber + '" id="newwindow' + randomnumber + '" value="0" /></li>');
|
||||||
|
|
||||||
|
//make menu item draggable
|
||||||
|
$('#menu-' + randomnumber + '').draggable(
|
||||||
|
{
|
||||||
|
handle: ' > dl',
|
||||||
|
opacity: .8,
|
||||||
|
addClasses: false,
|
||||||
|
helper: 'clone',
|
||||||
|
zIndex: 100
|
||||||
|
});
|
||||||
|
|
||||||
|
//make menu item droppable
|
||||||
|
$('#menu-' + randomnumber + ' dl, #menu-' + randomnumber + ' .dropzone').droppable({
|
||||||
|
accept: '#' + randomnumber + ', #custom-nav li',
|
||||||
|
tolerance: 'pointer',
|
||||||
|
drop: function(e, ui)
|
||||||
|
{
|
||||||
|
var li = $(this).parent();
|
||||||
|
var child = !$(this).hasClass('dropzone');
|
||||||
|
//Append UL to first child
|
||||||
|
if (child && li.children('ul').length == 0)
|
||||||
|
{
|
||||||
|
li.append('<ul/>');
|
||||||
|
}
|
||||||
|
//Make it draggable
|
||||||
|
if (child)
|
||||||
|
{
|
||||||
|
li.children('ul').append(ui.draggable);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
li.before(ui.draggable);
|
||||||
|
}
|
||||||
|
|
||||||
|
li.find('dl,.dropzone').css({ backgroundColor: '', borderColor: '' });
|
||||||
|
|
||||||
|
var draggablevalue = ui.draggable.attr('value');
|
||||||
|
var droppablevalue = li.attr('value');
|
||||||
|
li.find('#menu-' + draggablevalue).find('#parent' + draggablevalue).val(droppablevalue);
|
||||||
|
$(this).parent().find("dt").removeAttr('style');
|
||||||
|
$(this).parent().find("div:first").removeAttr('style');
|
||||||
|
|
||||||
|
},
|
||||||
|
over: function()
|
||||||
|
{
|
||||||
|
//Add child
|
||||||
|
if ($(this).attr('class') == 'dropzone ui-droppable')
|
||||||
|
{
|
||||||
|
$(this).parent().find("div:first").css('background', 'none').css('height', '50px');
|
||||||
|
}
|
||||||
|
//Add above
|
||||||
|
else if ($(this).attr('class') == 'ui-droppable')
|
||||||
|
{
|
||||||
|
$(this).parent().find("dt:first").css('background', '#d8d8d8');
|
||||||
|
}
|
||||||
|
//do nothing
|
||||||
|
else {
|
||||||
|
|
||||||
|
}
|
||||||
|
var parentid = $(this).parent().attr('id');
|
||||||
|
|
||||||
|
},
|
||||||
|
out: function()
|
||||||
|
{
|
||||||
|
$(this).parent().find("dt").removeAttr('style');
|
||||||
|
$(this).parent().find("div:first").removeAttr('style');
|
||||||
|
$(this).filter('.dropzone').css({ borderColor: '' });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
updatepostdata();
|
||||||
|
};
|
1
wp-admin/js/custom-navigation-dynamic-functions.js
Normal file
1
wp-admin/js/custom-navigation-dynamic-functions.js
Normal file
File diff suppressed because one or more lines are too long
300
wp-admin/js/custom-navigation-php-functions.dev.js
Normal file
300
wp-admin/js/custom-navigation-php-functions.dev.js
Normal file
@ -0,0 +1,300 @@
|
|||||||
|
/*
|
||||||
|
* More info at: http://phpjs.org
|
||||||
|
*
|
||||||
|
* This is version: 3.08
|
||||||
|
* php.js is copyright 2010 Kevin van Zonneveld.
|
||||||
|
*
|
||||||
|
* Portions copyright Brett Zamir (http://brett-zamir.me), Kevin van Zonneveld
|
||||||
|
* (http://kevin.vanzonneveld.net), Onno Marsman, Theriault, Michael White
|
||||||
|
* (http://getsprink.com), Waldo Malqui Silva, Paulo Ricardo F. Santos, Jack,
|
||||||
|
* Jonas Raoni Soares Silva (http://www.jsfromhell.com), Philip Peterson, Ates
|
||||||
|
* Goral (http://magnetiq.com), Legaev Andrey, Alex, Ratheous, Martijn
|
||||||
|
* Wieringa, Nate, lmeyrick (https://sourceforge.net/projects/bcmath-js/),
|
||||||
|
* Enrique Gonzalez, Philippe Baumann, Webtoolkit.info
|
||||||
|
* (http://www.webtoolkit.info/), travc, Carlos R. L. Rodrigues
|
||||||
|
* (http://www.jsfromhell.com), Jani Hartikainen, Ash Searle
|
||||||
|
* (http://hexmen.com/blog/), Ole Vrijenhoek, stag019, d3x, Erkekjetter,
|
||||||
|
* GeekFG (http://geekfg.blogspot.com), T.Wild, Johnny Mast
|
||||||
|
* (http://www.phpvrouwen.nl), Michael Grier,
|
||||||
|
* http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,
|
||||||
|
* pilus, marrtins, Andrea Giammarchi (http://webreflection.blogspot.com),
|
||||||
|
* WebDevHobo (http://webdevhobo.blogspot.com/), Caio Ariede
|
||||||
|
* (http://caioariede.com), Thunder.m, Aman Gupta, Martin
|
||||||
|
* (http://www.erlenwiese.de/), Tyler Akins (http://rumkin.com), Lars Fischer,
|
||||||
|
* Paul Smith, Alfonso Jimenez (http://www.alfonsojimenez.com), Michael White,
|
||||||
|
* mdsjack (http://www.mdsjack.bo.it), Pellentesque Malesuada, gettimeofday,
|
||||||
|
* David, Joris, saulius, Robin, Steven Levithan
|
||||||
|
* (http://blog.stevenlevithan.com), Public Domain
|
||||||
|
* (http://www.json.org/json2.js), Kankrelune (http://www.webfaktory.info/),
|
||||||
|
* Tim de Koning (http://www.kingsquare.nl), Arpad Ray (mailto:arpad@php.net),
|
||||||
|
* AJ, KELAN, Sakimori, Mailfaker (http://www.weedem.fr/), Oleg Eremeev, Marc
|
||||||
|
* Palau, Josh Fraser
|
||||||
|
* (http://onlineaspect.com/2007/06/08/auto-detect-a-time-zone-with-javascript/),
|
||||||
|
* Karol Kowalski, Chris, Breaking Par Consulting Inc
|
||||||
|
* (http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256CFB006C45F7),
|
||||||
|
* Mirek Slugen, majak, Felix Geisendoerfer (http://www.debuggable.com/felix),
|
||||||
|
* gorthaur, Steve Hilder, LH, Stoyan Kyosev (http://www.svest.org/), Der
|
||||||
|
* Simon (http://innerdom.sourceforge.net/), HKM, echo is bad, nord_ua, Ozh,
|
||||||
|
* metjay, XoraX (http://www.xorax.info), Eugene Bulkin
|
||||||
|
* (http://doubleaw.com/), JB, strcasecmp, strcmp, Taras Bogach, Francesco,
|
||||||
|
* Marco, noname, class_exists, madipta, Alan C, mktime, Douglas Crockford
|
||||||
|
* (http://javascript.crockford.com), uestla, Frank Forte, David James, Steve
|
||||||
|
* Clay, J A R, jpfle, Marc Jansen, Paul, Hyam Singer
|
||||||
|
* (http://www.impact-computing.com/), T. Wild, Ole Vrijenhoek
|
||||||
|
* (http://www.nervous.nl/), Raphael (Ao RUDLER), kenneth, Brad Touesnard,
|
||||||
|
* ChaosNo1, Subhasis Deb, Norman "zEh" Fuchs, 0m3r, Sanjoy Roy, Rob, Gilbert,
|
||||||
|
* Bayron Guevara, paulo kuong, Orlando, duncan, sankai, hitwork, Philippe
|
||||||
|
* Jausions (http://pear.php.net/user/jausions), Aidan Lister
|
||||||
|
* (http://aidanlister.com/), ejsanders, Nick Callen, Brian Tafoya
|
||||||
|
* (http://www.premasolutions.com/), johnrembo, sowberry, Yves Sucaet, Denny
|
||||||
|
* Wardhana, Ulrich, kilops, dptr1988, john (http://www.jd-tech.net), MeEtc
|
||||||
|
* (http://yass.meetcweb.com), Peter-Paul Koch
|
||||||
|
* (http://www.quirksmode.org/js/beat.html), T0bsn, Tim Wiel, Bryan Elliott,
|
||||||
|
* Alexander Ermolaev (http://snippets.dzone.com/user/AlexanderErmolaev), JT,
|
||||||
|
* Thomas Beaucourt (http://www.webapp.fr), David Randall, DxGx, Soren Hansen,
|
||||||
|
* lmeyrick (https://sourceforge.net/projects/bcmath-js/this.), Le Torbi,
|
||||||
|
* djmix, Lincoln Ramsay, Linuxworld, Thiago Mata
|
||||||
|
* (http://thiagomata.blog.com), Pedro Tainha (http://www.pedrotainha.com),
|
||||||
|
* James, Pyerre, Jon Hohle, felix, ger, Russell Walker
|
||||||
|
* (http://www.nbill.co.uk/), Garagoth, Andrej Pavlovic, Dino, Jamie Beck
|
||||||
|
* (http://www.terabit.ca/), DtTvB
|
||||||
|
* (http://dt.in.th/2008-09-16.string-length-in-bytes.html), setcookie, YUI
|
||||||
|
* Library: http://developer.yahoo.com/yui/docs/YAHOO.util.DateLocale.html,
|
||||||
|
* Blues at http://hacks.bluesmoon.info/strftime/strftime.js, Andreas, rem,
|
||||||
|
* meo, Jay Klehr, Kheang Hok Chin (http://www.distantia.ca/), Luke Smith
|
||||||
|
* (http://lucassmith.name), Rival, Amir Habibi
|
||||||
|
* (http://www.residence-mixte.com/), Cagri Ekin, Greenseed, mk.keck, Leslie
|
||||||
|
* Hoare, booeyOH, Ben Bryan, Michael, Christian Doebler, Kirk Strobeck, Brant
|
||||||
|
* Messenger (http://www.brantmessenger.com/), Rick Waldron, Mick@el, Martin
|
||||||
|
* Pool, Pierre-Luc Paour, Daniel Esteban, Christoph, Saulo Vallory, Kristof
|
||||||
|
* Coomans (SCK-CEN Belgian Nucleair Research Centre), rezna, Tomasz
|
||||||
|
* Wesolowski, Gabriel Paderni, Marco van Oort, Philipp Lenssen,
|
||||||
|
* penutbutterjelly, Simon Willison (http://simonwillison.net), Anton Ongson,
|
||||||
|
* Eric Nagel, Bobby Drake, Pul, Blues (http://tech.bluesmoon.info/), Luke
|
||||||
|
* Godfrey, Diogo Resende, Howard Yeend, vlado houba, Jalal Berrami, Itsacon
|
||||||
|
* (http://www.itsacon.net/), date, Billy, stensi, Cord, fearphage
|
||||||
|
* (http://http/my.opera.com/fearphage/), Victor, Matteo, Artur Tchernychev,
|
||||||
|
* Francois, nobbler, Fox, marc andreu, Nick Kolosov (http://sammy.ru),
|
||||||
|
* Nathan, Arno, Scott Cariss, Slawomir Kaniecki, ReverseSyntax, Jason Wong
|
||||||
|
* (http://carrot.org/), Mateusz "loonquawl" Zalega, Manish, Wagner B. Soares,
|
||||||
|
* 3D-GRAF, jakes, Yannoo, gabriel paderni, daniel airton wermann
|
||||||
|
* (http://wermann.com.br), Atli ?—r, Allan Jensen
|
||||||
|
* (http://www.winternet.no), Benjamin Lupton, davook, Maximusya, FGFEmperor,
|
||||||
|
* baris ozdil, Luis Salazar (http://www.freaky-media.com/), Tim de Koning,
|
||||||
|
* taith, Matt Bradley, FremyCompany, T.J. Leahy, Greg Frazier, Valentina De
|
||||||
|
* Rosa, Tod Gentille, Riddler (http://www.frontierwebdev.com/), Alexander M
|
||||||
|
* Beedie
|
||||||
|
*
|
||||||
|
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
||||||
|
* and GPL (GPL-LICENSE.txt) licenses.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the
|
||||||
|
* "Software"), to deal in the Software without restriction, including
|
||||||
|
* without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
* permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
* the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included
|
||||||
|
* in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
* IN NO EVENT SHALL KEVIN VAN ZONNEVELD BE LIABLE FOR ANY CLAIM, DAMAGES
|
||||||
|
* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
* OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function get_html_translation_table (table, quote_style) {
|
||||||
|
// http://kevin.vanzonneveld.net
|
||||||
|
// + original by: Philip Peterson
|
||||||
|
// + revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
||||||
|
// + bugfixed by: noname
|
||||||
|
// + bugfixed by: Alex
|
||||||
|
// + bugfixed by: Marco
|
||||||
|
// + bugfixed by: madipta
|
||||||
|
// + improved by: KELAN
|
||||||
|
// + improved by: Brett Zamir (http://brett-zamir.me)
|
||||||
|
// + bugfixed by: Brett Zamir (http://brett-zamir.me)
|
||||||
|
// + input by: Frank Forte
|
||||||
|
// + bugfixed by: T.Wild
|
||||||
|
// + input by: Ratheous
|
||||||
|
// % note: It has been decided that we're not going to add global
|
||||||
|
// % note: dependencies to php.js, meaning the constants are not
|
||||||
|
// % note: real constants, but strings instead. Integers are also supported if someone
|
||||||
|
// % note: chooses to create the constants themselves.
|
||||||
|
// * example 1: get_html_translation_table('HTML_SPECIALCHARS');
|
||||||
|
// * returns 1: {'"': '"', '&': '&', '<': '<', '>': '>'}
|
||||||
|
|
||||||
|
var entities = {}, hash_map = {}, decimal = 0, symbol = '';
|
||||||
|
var constMappingTable = {}, constMappingQuoteStyle = {};
|
||||||
|
var useTable = {}, useQuoteStyle = {};
|
||||||
|
|
||||||
|
// Translate arguments
|
||||||
|
constMappingTable[0] = 'HTML_SPECIALCHARS';
|
||||||
|
constMappingTable[1] = 'HTML_ENTITIES';
|
||||||
|
constMappingQuoteStyle[0] = 'ENT_NOQUOTES';
|
||||||
|
constMappingQuoteStyle[2] = 'ENT_COMPAT';
|
||||||
|
constMappingQuoteStyle[3] = 'ENT_QUOTES';
|
||||||
|
|
||||||
|
useTable = !isNaN(table) ? constMappingTable[table] : table ? table.toUpperCase() : 'HTML_SPECIALCHARS';
|
||||||
|
useQuoteStyle = !isNaN(quote_style) ? constMappingQuoteStyle[quote_style] : quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT';
|
||||||
|
|
||||||
|
if (useTable !== 'HTML_SPECIALCHARS' && useTable !== 'HTML_ENTITIES') {
|
||||||
|
throw new Error("Table: "+useTable+' not supported');
|
||||||
|
// return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
entities['38'] = '&';
|
||||||
|
if (useTable === 'HTML_ENTITIES') {
|
||||||
|
entities['160'] = ' ';
|
||||||
|
entities['161'] = '¡';
|
||||||
|
entities['162'] = '¢';
|
||||||
|
entities['163'] = '£';
|
||||||
|
entities['164'] = '¤';
|
||||||
|
entities['165'] = '¥';
|
||||||
|
entities['166'] = '¦';
|
||||||
|
entities['167'] = '§';
|
||||||
|
entities['168'] = '¨';
|
||||||
|
entities['169'] = '©';
|
||||||
|
entities['170'] = 'ª';
|
||||||
|
entities['171'] = '«';
|
||||||
|
entities['172'] = '¬';
|
||||||
|
entities['173'] = '­';
|
||||||
|
entities['174'] = '®';
|
||||||
|
entities['175'] = '¯';
|
||||||
|
entities['176'] = '°';
|
||||||
|
entities['177'] = '±';
|
||||||
|
entities['178'] = '²';
|
||||||
|
entities['179'] = '³';
|
||||||
|
entities['180'] = '´';
|
||||||
|
entities['181'] = 'µ';
|
||||||
|
entities['182'] = '¶';
|
||||||
|
entities['183'] = '·';
|
||||||
|
entities['184'] = '¸';
|
||||||
|
entities['185'] = '¹';
|
||||||
|
entities['186'] = 'º';
|
||||||
|
entities['187'] = '»';
|
||||||
|
entities['188'] = '¼';
|
||||||
|
entities['189'] = '½';
|
||||||
|
entities['190'] = '¾';
|
||||||
|
entities['191'] = '¿';
|
||||||
|
entities['192'] = 'À';
|
||||||
|
entities['193'] = 'Á';
|
||||||
|
entities['194'] = 'Â';
|
||||||
|
entities['195'] = 'Ã';
|
||||||
|
entities['196'] = 'Ä';
|
||||||
|
entities['197'] = 'Å';
|
||||||
|
entities['198'] = 'Æ';
|
||||||
|
entities['199'] = 'Ç';
|
||||||
|
entities['200'] = 'È';
|
||||||
|
entities['201'] = 'É';
|
||||||
|
entities['202'] = 'Ê';
|
||||||
|
entities['203'] = 'Ë';
|
||||||
|
entities['204'] = 'Ì';
|
||||||
|
entities['205'] = 'Í';
|
||||||
|
entities['206'] = 'Î';
|
||||||
|
entities['207'] = 'Ï';
|
||||||
|
entities['208'] = 'Ð';
|
||||||
|
entities['209'] = 'Ñ';
|
||||||
|
entities['210'] = 'Ò';
|
||||||
|
entities['211'] = 'Ó';
|
||||||
|
entities['212'] = 'Ô';
|
||||||
|
entities['213'] = 'Õ';
|
||||||
|
entities['214'] = 'Ö';
|
||||||
|
entities['215'] = '×';
|
||||||
|
entities['216'] = 'Ø';
|
||||||
|
entities['217'] = 'Ù';
|
||||||
|
entities['218'] = 'Ú';
|
||||||
|
entities['219'] = 'Û';
|
||||||
|
entities['220'] = 'Ü';
|
||||||
|
entities['221'] = 'Ý';
|
||||||
|
entities['222'] = 'Þ';
|
||||||
|
entities['223'] = 'ß';
|
||||||
|
entities['224'] = 'à';
|
||||||
|
entities['225'] = 'á';
|
||||||
|
entities['226'] = 'â';
|
||||||
|
entities['227'] = 'ã';
|
||||||
|
entities['228'] = 'ä';
|
||||||
|
entities['229'] = 'å';
|
||||||
|
entities['230'] = 'æ';
|
||||||
|
entities['231'] = 'ç';
|
||||||
|
entities['232'] = 'è';
|
||||||
|
entities['233'] = 'é';
|
||||||
|
entities['234'] = 'ê';
|
||||||
|
entities['235'] = 'ë';
|
||||||
|
entities['236'] = 'ì';
|
||||||
|
entities['237'] = 'í';
|
||||||
|
entities['238'] = 'î';
|
||||||
|
entities['239'] = 'ï';
|
||||||
|
entities['240'] = 'ð';
|
||||||
|
entities['241'] = 'ñ';
|
||||||
|
entities['242'] = 'ò';
|
||||||
|
entities['243'] = 'ó';
|
||||||
|
entities['244'] = 'ô';
|
||||||
|
entities['245'] = 'õ';
|
||||||
|
entities['246'] = 'ö';
|
||||||
|
entities['247'] = '÷';
|
||||||
|
entities['248'] = 'ø';
|
||||||
|
entities['249'] = 'ù';
|
||||||
|
entities['250'] = 'ú';
|
||||||
|
entities['251'] = 'û';
|
||||||
|
entities['252'] = 'ü';
|
||||||
|
entities['253'] = 'ý';
|
||||||
|
entities['254'] = 'þ';
|
||||||
|
entities['255'] = 'ÿ';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (useQuoteStyle !== 'ENT_NOQUOTES') {
|
||||||
|
entities['34'] = '"';
|
||||||
|
}
|
||||||
|
if (useQuoteStyle === 'ENT_QUOTES') {
|
||||||
|
entities['39'] = ''';
|
||||||
|
}
|
||||||
|
entities['60'] = '<';
|
||||||
|
entities['62'] = '>';
|
||||||
|
|
||||||
|
|
||||||
|
// ascii decimals to real symbols
|
||||||
|
for (decimal in entities) {
|
||||||
|
symbol = String.fromCharCode(decimal);
|
||||||
|
hash_map[symbol] = entities[decimal];
|
||||||
|
}
|
||||||
|
|
||||||
|
return hash_map;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function htmlentities (string, quote_style) {
|
||||||
|
// http://kevin.vanzonneveld.net
|
||||||
|
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
||||||
|
// + revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
||||||
|
// + improved by: nobbler
|
||||||
|
// + tweaked by: Jack
|
||||||
|
// + bugfixed by: Onno Marsman
|
||||||
|
// + revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
||||||
|
// + bugfixed by: Brett Zamir (http://brett-zamir.me)
|
||||||
|
// + input by: Ratheous
|
||||||
|
// - depends on: get_html_translation_table
|
||||||
|
// * example 1: htmlentities('Kevin & van Zonneveld');
|
||||||
|
// * returns 1: 'Kevin & van Zonneveld'
|
||||||
|
// * example 2: htmlentities("foo'bar","ENT_QUOTES");
|
||||||
|
// * returns 2: 'foo'bar'
|
||||||
|
|
||||||
|
var hash_map = {}, symbol = '', tmp_str = '', entity = '';
|
||||||
|
tmp_str = string.toString();
|
||||||
|
|
||||||
|
if (false === (hash_map = this.get_html_translation_table('HTML_ENTITIES', quote_style))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
hash_map["'"] = ''';
|
||||||
|
for (symbol in hash_map) {
|
||||||
|
entity = hash_map[symbol];
|
||||||
|
tmp_str = tmp_str.split(symbol).join(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tmp_str;
|
||||||
|
}
|
1
wp-admin/js/custom-navigation-php-functions.js
Normal file
1
wp-admin/js/custom-navigation-php-functions.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
function get_html_translation_table(i,g){var d={},f={},c=0,a="";var e={},b={};var j={},h={};e[0]="HTML_SPECIALCHARS";e[1]="HTML_ENTITIES";b[0]="ENT_NOQUOTES";b[2]="ENT_COMPAT";b[3]="ENT_QUOTES";j=!isNaN(i)?e[i]:i?i.toUpperCase():"HTML_SPECIALCHARS";h=!isNaN(g)?b[g]:g?g.toUpperCase():"ENT_COMPAT";if(j!=="HTML_SPECIALCHARS"&&j!=="HTML_ENTITIES"){throw new Error("Table: "+j+" not supported")}d["38"]="&";if(j==="HTML_ENTITIES"){d["160"]=" ";d["161"]="¡";d["162"]="¢";d["163"]="£";d["164"]="¤";d["165"]="¥";d["166"]="¦";d["167"]="§";d["168"]="¨";d["169"]="©";d["170"]="ª";d["171"]="«";d["172"]="¬";d["173"]="­";d["174"]="®";d["175"]="¯";d["176"]="°";d["177"]="±";d["178"]="²";d["179"]="³";d["180"]="´";d["181"]="µ";d["182"]="¶";d["183"]="·";d["184"]="¸";d["185"]="¹";d["186"]="º";d["187"]="»";d["188"]="¼";d["189"]="½";d["190"]="¾";d["191"]="¿";d["192"]="À";d["193"]="Á";d["194"]="Â";d["195"]="Ã";d["196"]="Ä";d["197"]="Å";d["198"]="Æ";d["199"]="Ç";d["200"]="È";d["201"]="É";d["202"]="Ê";d["203"]="Ë";d["204"]="Ì";d["205"]="Í";d["206"]="Î";d["207"]="Ï";d["208"]="Ð";d["209"]="Ñ";d["210"]="Ò";d["211"]="Ó";d["212"]="Ô";d["213"]="Õ";d["214"]="Ö";d["215"]="×";d["216"]="Ø";d["217"]="Ù";d["218"]="Ú";d["219"]="Û";d["220"]="Ü";d["221"]="Ý";d["222"]="Þ";d["223"]="ß";d["224"]="à";d["225"]="á";d["226"]="â";d["227"]="ã";d["228"]="ä";d["229"]="å";d["230"]="æ";d["231"]="ç";d["232"]="è";d["233"]="é";d["234"]="ê";d["235"]="ë";d["236"]="ì";d["237"]="í";d["238"]="î";d["239"]="ï";d["240"]="ð";d["241"]="ñ";d["242"]="ò";d["243"]="ó";d["244"]="ô";d["245"]="õ";d["246"]="ö";d["247"]="÷";d["248"]="ø";d["249"]="ù";d["250"]="ú";d["251"]="û";d["252"]="ü";d["253"]="ý";d["254"]="þ";d["255"]="ÿ"}if(h!=="ENT_NOQUOTES"){d["34"]="""}if(h==="ENT_QUOTES"){d["39"]="'"}d["60"]="<";d["62"]=">";for(c in d){a=String.fromCharCode(c);f[a]=d[c]}return f}function htmlentities(c,f){var e={},d="",a="",b="";a=c.toString();if(false===(e=this.get_html_translation_table("HTML_ENTITIES",f))){return false}e["'"]="'";for(d in e){b=e[d];a=a.split(d).join(b)}return a};
|
@ -108,6 +108,7 @@ $menu[60] = array( __('Appearance'), 'switch_themes', 'themes.php', '', 'menu-to
|
|||||||
$submenu['themes.php'][5] = array(__('Themes'), 'switch_themes', 'themes.php');
|
$submenu['themes.php'][5] = array(__('Themes'), 'switch_themes', 'themes.php');
|
||||||
$submenu['themes.php'][10] = array(_x('Editor', 'theme editor'), 'edit_themes', 'theme-editor.php');
|
$submenu['themes.php'][10] = array(_x('Editor', 'theme editor'), 'edit_themes', 'theme-editor.php');
|
||||||
$submenu['themes.php'][15] = array(__('Add New Themes'), 'install_themes', 'theme-install.php');
|
$submenu['themes.php'][15] = array(__('Add New Themes'), 'install_themes', 'theme-install.php');
|
||||||
|
$submenu['themes.php'][20] = array(__('Custom Navigation'), 'switch_themes', 'custom-navigation.php');
|
||||||
|
|
||||||
$update_plugins = get_site_transient( 'update_plugins' );
|
$update_plugins = get_site_transient( 'update_plugins' );
|
||||||
$update_count = 0;
|
$update_count = 0;
|
||||||
|
993
wp-includes/custom-navigation-functions.php
Normal file
993
wp-includes/custom-navigation-functions.php
Normal file
@ -0,0 +1,993 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* WordPress Administration Custom Navigation
|
||||||
|
* General Functions
|
||||||
|
*
|
||||||
|
* @author Jeffikus <pearce.jp@gmail.com>
|
||||||
|
* @version 1.1.0
|
||||||
|
*
|
||||||
|
* @package WordPress
|
||||||
|
* @subpackage Administration
|
||||||
|
*/
|
||||||
|
|
||||||
|
function wp_custom_navigation_get_menu_items( $menu_objects, $key = 'ID' ) {
|
||||||
|
$menu_items = array();
|
||||||
|
if ( !empty( $menu_objects ) && !empty( $key ) ) {
|
||||||
|
$args = array( 'orderby' => 'menu_order', 'post_type' => 'menu_item', 'post_status' => 'menu-category,menu-page,menu-custom' );
|
||||||
|
if ( count( $menu_objects ) > 1 )
|
||||||
|
$args['include'] = implode( ',', $menu_objects );
|
||||||
|
else
|
||||||
|
$args['include'] = $menu_objects[0];
|
||||||
|
$posts = new WP_Query( $args );
|
||||||
|
if ( ! empty( $posts->posts ) ) {
|
||||||
|
foreach( $posts->posts as $post ) {
|
||||||
|
$menu_items[ $post->$key ] = $post;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
unset( $posts );
|
||||||
|
ksort( $menu_items );
|
||||||
|
}
|
||||||
|
return $menu_items;
|
||||||
|
}
|
||||||
|
function wp_custom_navigation_setup($override = false) {
|
||||||
|
|
||||||
|
$nav_version = '1.1.0';
|
||||||
|
//Custom Navigation Menu Setup
|
||||||
|
|
||||||
|
//Check for Upgrades
|
||||||
|
if (get_option('wp_settings_custom_nav_version') <> '') {
|
||||||
|
$nav_version_in_db = get_option('wp_settings_custom_nav_version');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$nav_version_in_db = '0';
|
||||||
|
}
|
||||||
|
|
||||||
|
//Override for menu descriptions
|
||||||
|
update_option('wp_settings_custom_nav_advanced_options','yes');
|
||||||
|
|
||||||
|
if(($nav_version_in_db <> $nav_version) || ($override))
|
||||||
|
update_option('wp_settings_custom_nav_version',$nav_version);
|
||||||
|
|
||||||
|
$custom_menus = get_terms( 'menu', array( 'hide_empty' => false ) );
|
||||||
|
if ( !empty( $custom_menus ) ) {
|
||||||
|
foreach( $custom_menus as $menu ) {
|
||||||
|
$menu_objects = get_objects_in_term( $menu->term_id, 'menu' );
|
||||||
|
if ( !empty( $menu_objects ) ) {
|
||||||
|
foreach( $menu_objects as $item )
|
||||||
|
wp_delete_post( $item );
|
||||||
|
}
|
||||||
|
wp_delete_term( $menu->term_id, 'menu' );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
/* Custom Navigation Functions */
|
||||||
|
/* wp_custom_navigation_output() displays the menu in the back/frontend
|
||||||
|
/* wp_custom_navigation_sub_items() is a recursive sub menu item function
|
||||||
|
/* wp_custom_nav_get_pages()
|
||||||
|
/* wp_custom_nav_get_categories()
|
||||||
|
/* wp_custom_navigation_default_sub_items() is a recursive sub menu item function
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
/* Main Output Function
|
||||||
|
/* args list
|
||||||
|
/* type - frontend or backend
|
||||||
|
/* name - name of your menu
|
||||||
|
/* id - id of menu in db
|
||||||
|
/* desc - 1 = show descriptions, 2 = dont show descriptions
|
||||||
|
/* before_title - html before title is outputted in <a> tag
|
||||||
|
/* after_title - html after title is outputted in <a> tag
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
function wp_custom_navigation_output($args = array()) {
|
||||||
|
|
||||||
|
//DEFAULT ARGS
|
||||||
|
$type = 'frontend';
|
||||||
|
$name = 'Menu 1';
|
||||||
|
$id = 0;
|
||||||
|
$desc = 2;
|
||||||
|
$before_title = '';
|
||||||
|
$after_title = '';
|
||||||
|
|
||||||
|
if (isset($args)) {
|
||||||
|
|
||||||
|
if ( !is_array($args) )
|
||||||
|
parse_str( $args, $args );
|
||||||
|
|
||||||
|
extract($args);
|
||||||
|
}
|
||||||
|
|
||||||
|
$menu_objects = get_objects_in_term( $id, 'menu' );
|
||||||
|
$menu_items = wp_custom_navigation_get_menu_items( $menu_objects, 'menu_order' );
|
||||||
|
//Override for menu descriptions
|
||||||
|
$advanced_option_descriptions = get_option('wp_settings_custom_nav_advanced_options');
|
||||||
|
if ($advanced_option_descriptions == 'no')
|
||||||
|
{
|
||||||
|
$desc = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
$queried_id = 0;
|
||||||
|
global $wp_query;
|
||||||
|
if ( is_page() )
|
||||||
|
$queried_id = $wp_query->post->ID;
|
||||||
|
elseif ( is_category() )
|
||||||
|
$queried_id = $wp_query->query_vars['cat'];
|
||||||
|
//DISPLAY Loop
|
||||||
|
foreach ($menu_items as $menu_item) {
|
||||||
|
|
||||||
|
//PREPARE Menu Data
|
||||||
|
//Page Menu Item
|
||||||
|
switch ( $menu_item->post_status ) {
|
||||||
|
case 'menu-page':
|
||||||
|
if ($menu_item->guid == '')
|
||||||
|
$link = get_permalink( $menu_item->post_parent );
|
||||||
|
else
|
||||||
|
$link = $menu_item->guid;
|
||||||
|
|
||||||
|
if ( $menu_item->post_title == '' )
|
||||||
|
$title = htmlentities( get_the_title( $menu_item->post_parent ) );
|
||||||
|
else
|
||||||
|
$title = htmlentities( $menu_item->post_title );
|
||||||
|
|
||||||
|
if ( $menu_item->post_content == '' )
|
||||||
|
$description = htmlentities( get_post_meta( $menu_item->ID, 'page-description', true ) );
|
||||||
|
else
|
||||||
|
$description = htmlentities( $menu_item->post_content );
|
||||||
|
$target = '';
|
||||||
|
break;
|
||||||
|
//Category Menu Item
|
||||||
|
case 'menu-category':
|
||||||
|
if ($menu_item->guid == '')
|
||||||
|
$link = get_category_link( $menu_item->post_parent );
|
||||||
|
else
|
||||||
|
$link = $menu_item->guid;
|
||||||
|
|
||||||
|
if ( $menu_item->post_title == '' ) {
|
||||||
|
$title_raw = get_categories( 'include='.$menu_item->post_parent );
|
||||||
|
$title = htmlentities($title_raw[0]->cat_name);
|
||||||
|
} else {
|
||||||
|
$title = htmlentities( $menu_item->post_title );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $menu_item->post_content == '' )
|
||||||
|
$description = htmlentities( strip_tags( category_description( $menu_item->post_parent ) ) );
|
||||||
|
else
|
||||||
|
$description = htmlentities( $menu_item->post_content );
|
||||||
|
$target = '';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
//Custom Menu Item
|
||||||
|
$link = $menu_item->guid;
|
||||||
|
$title = htmlentities( $menu_item->post_title );
|
||||||
|
$description = htmlentities( $menu_item->post_content );
|
||||||
|
$target = 'target="_blank"';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* @todo: update to use tax/post data
|
||||||
|
|
||||||
|
//SET anchor title
|
||||||
|
if (isset($wp_custom_nav_menu_items->custom_anchor_title)) {
|
||||||
|
$anchor_title = htmlentities($wp_custom_nav_menu_items->custom_anchor_title);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$anchor_title = $title;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($queried_id == $wp_custom_nav_menu_items->post_id) {
|
||||||
|
$li_class = 'class="current_page_item"';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$li_class = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($wp_custom_nav_menu_items->new_window)) {
|
||||||
|
if ($wp_custom_nav_menu_items->new_window > 0) {
|
||||||
|
$target = 'target="_blank"';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$target = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
//List Items
|
||||||
|
?><li id="menu-<?php echo $menu_item->ID; ?>" value="<?php echo $menu_item->ID; ?>" <?php echo $li_class; ?>><?php
|
||||||
|
//@todo: update front end to use post data
|
||||||
|
//FRONTEND Link
|
||||||
|
if ($type == "frontend")
|
||||||
|
{
|
||||||
|
?><a title="<?php echo $anchor_title; ?>" href="<?php echo $link; ?>" <?php echo $target; ?>><?php echo $before_title.$title.$after_title; ?><?php
|
||||||
|
|
||||||
|
if ( $advanced_option_descriptions == 'no' )
|
||||||
|
{
|
||||||
|
// 2 widget override do NOT display descriptions
|
||||||
|
// 1 widget override display descriptions
|
||||||
|
// 0 widget override not set
|
||||||
|
if (($desc == 1) || ($desc == 0) )
|
||||||
|
{
|
||||||
|
?><span class="nav-description"><?php echo $description; ?></span><?php
|
||||||
|
}
|
||||||
|
elseif ($desc == 2)
|
||||||
|
{ }
|
||||||
|
else
|
||||||
|
{ }
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 2 widget override do NOT display descriptions
|
||||||
|
// 1 widget override display descriptions
|
||||||
|
// 0 widget override not set
|
||||||
|
if ($desc == 1)
|
||||||
|
{
|
||||||
|
?><span class="nav-description"><?php echo $description; ?></span><?php
|
||||||
|
}
|
||||||
|
elseif (($desc == 2) || ($desc == 0))
|
||||||
|
{ }
|
||||||
|
else
|
||||||
|
{ }
|
||||||
|
}
|
||||||
|
|
||||||
|
?></a><?php
|
||||||
|
}
|
||||||
|
//BACKEND draggable and droppable elements
|
||||||
|
elseif ($type == "backend")
|
||||||
|
$link_type = substr( $menu_item->post_status, 5 );
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<span class="title"><?php echo $title; ?></span>
|
||||||
|
<span class="controls">
|
||||||
|
<span class="type"><?php echo $link_type; ?></span>
|
||||||
|
<a id="edit<?php echo $menu_item->menu_order; ?>" onclick="edititem(<?php echo $menu_item->menu_order; ?>)" value="<?php echo $menu_item->menu_order; ?>"><img class="edit" alt="Edit Menu Item" title="Edit Menu Item" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-edit.png" /></a>
|
||||||
|
<a id="remove<?php echo $menu_item->menu_order; ?>" onclick="removeitem(<?php echo $menu_item->menu_order; ?>)" value="<?php echo $menu_item->menu_order; ?>"><img class="remove" alt="Remove from Custom Menu" title="Remove from Custom Menu" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-close.png" /></a>
|
||||||
|
<a id="view<?php echo $menu_item->menu_order; ?>" target="_blank" href="<?php echo $link; ?>"><img alt="View Page" title="View Page" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-viewpage.png" /></a>
|
||||||
|
</span>
|
||||||
|
</dt>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
<a><span class=""></span></a>
|
||||||
|
<input type="hidden" name="dbid<?php echo $menu_item->menu_order; ?>" id="dbid<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->ID; ?>" />
|
||||||
|
<input type="hidden" name="postmenu<?php echo $menu_item->menu_order; ?>" id="postmenu<?php echo $menu_item->menu_order; ?>" value="<?php echo $id; ?>" />
|
||||||
|
<input type="hidden" name="parent<?php echo $menu_item->menu_order; ?>" id="parent<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->post_parent; ?>" />
|
||||||
|
<input type="hidden" name="title<?php echo $menu_item->menu_order; ?>" id="title<?php echo $menu_item->menu_order; ?>" value="<?php echo $title; ?>" />
|
||||||
|
<input type="hidden" name="linkurl<?php echo $menu_item->menu_order; ?>" id="linkurl<?php echo $menu_item->menu_order; ?>" value="<?php echo $link; ?>" />
|
||||||
|
<input type="hidden" name="description<?php echo $menu_item->menu_order; ?>" id="description<?php echo $menu_item->menu_order; ?>" value="<?php echo $description; ?>" />
|
||||||
|
<input type="hidden" name="icon<?php echo $menu_item->menu_order; ?>" id="icon<?php echo $menu_item->menu_order; ?>" value="0" />
|
||||||
|
<input type="hidden" name="position<?php echo $menu_item->menu_order; ?>" id="position<?php echo $menu_item->menu_order; ?>" value="<?php echo $menu_item->menu_order; ?>" />
|
||||||
|
<input type="hidden" name="linktype<?php echo $menu_item->menu_order; ?>" id="linktype<?php echo $menu_item->menu_order; ?>" value="<?php echo $link_type; ?>" />
|
||||||
|
<input type="hidden" name="anchortitle<?php echo $menu_item->menu_order; ?>" id="anchortitle<?php echo $menu_item->menu_order; ?>" value="<?php echo esc_html( $menu_item->post_excerpt ); ?>" />
|
||||||
|
<input type="hidden" name="newwindow<?php echo $menu_item->menu_order; ?>" id="newwindow<?php echo $menu_item->menu_order; ?>" value="<?php echo ( '' == $menu_item->post_content_filtered ? '0' : '1' ); ?>" />
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
//@todo: implement menu heirarchy
|
||||||
|
/* //DISPLAY menu sub items
|
||||||
|
if ($wp_custom_nav_menu_items->parent_id == 0)
|
||||||
|
{
|
||||||
|
//FRONTEND
|
||||||
|
if ($type == 'frontend')
|
||||||
|
{
|
||||||
|
//Recursive function
|
||||||
|
$intj = wp_custom_navigation_sub_items($wp_custom_nav_menu_items->id,$wp_custom_nav_menu_items->link_type,$table_name,$type,$wp_custom_nav_menu_id);
|
||||||
|
}
|
||||||
|
//BACKEND
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//Recursive function
|
||||||
|
$intj = wp_custom_navigation_sub_items($wp_custom_nav_menu_items->id,$wp_custom_nav_menu_items->link_type,$table_name,$type,$id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/ ?></li>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//@todo: implement menu heirarchy
|
||||||
|
//RECURSIVE Sub Menu Items
|
||||||
|
function wp_custom_navigation_sub_items($post_id,$type,$table_name,$output_type,$menu_id = 0) {
|
||||||
|
|
||||||
|
$parent_id = 0;
|
||||||
|
global $wpdb;
|
||||||
|
|
||||||
|
//GET sub menu items
|
||||||
|
$wp_custom_nav_menu = $wpdb->get_results("SELECT id,post_id,parent_id,position,custom_title,custom_link,custom_description,menu_icon,link_type,custom_anchor_title,new_window FROM ".$table_name." WHERE parent_id = '".$post_id."' AND menu_id='".$menu_id."' ORDER BY position ASC");
|
||||||
|
|
||||||
|
if (empty($wp_custom_nav_menu))
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
?><ul id="sub-custom-nav">
|
||||||
|
<?php
|
||||||
|
$queried_id = 0;
|
||||||
|
global $wp_query;
|
||||||
|
if (is_page()) {
|
||||||
|
$queried_id = $wp_query->post->ID;
|
||||||
|
}
|
||||||
|
elseif (is_category()) {
|
||||||
|
$queried_id = $wp_query->query_vars['cat'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
}
|
||||||
|
//DISPLAY Loop
|
||||||
|
foreach ($wp_custom_nav_menu as $sub_item)
|
||||||
|
{
|
||||||
|
//Figure out where the menu item sits
|
||||||
|
$counter=$sub_item->position;
|
||||||
|
|
||||||
|
//Prepare Menu Data
|
||||||
|
//Category Menu Item
|
||||||
|
if ($sub_item->link_type == 'category')
|
||||||
|
{
|
||||||
|
|
||||||
|
$parent_id = $sub_item->parent_id;
|
||||||
|
$post_id = $sub_item->post_id;
|
||||||
|
|
||||||
|
if ($sub_item->custom_link == '') {
|
||||||
|
$link = get_category_link($sub_item->post_id);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$link = $sub_item->custom_link;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($sub_item->custom_title == '') {
|
||||||
|
$title_raw = get_categories('include='.$sub_item->post_id);
|
||||||
|
$title = htmlentities($title_raw[0]->cat_name);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$title = htmlentities($sub_item->custom_title);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($sub_item->custom_description == '') {
|
||||||
|
$description = strip_tags(category_description($sub_item->post_id));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$description = $sub_item->custom_description;
|
||||||
|
}
|
||||||
|
$target = '';
|
||||||
|
}
|
||||||
|
//Page Menu Item
|
||||||
|
elseif ($sub_item->link_type == 'page')
|
||||||
|
{
|
||||||
|
|
||||||
|
$parent_id = $sub_item->parent_id;
|
||||||
|
$post_id = $sub_item->post_id;
|
||||||
|
|
||||||
|
if ($sub_item->custom_link == '') {
|
||||||
|
$link = get_permalink($sub_item->post_id);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$link = $sub_item->custom_link;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($sub_item->custom_title == '') {
|
||||||
|
$title = htmlentities(get_the_title($sub_item->post_id));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$title = htmlentities($sub_item->custom_title);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($sub_item->custom_description == '') {
|
||||||
|
$description = get_post_meta($sub_item->post_id, 'page-description', true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$description = $sub_item->custom_description;
|
||||||
|
}
|
||||||
|
$target = '';
|
||||||
|
|
||||||
|
}
|
||||||
|
//Custom Menu Item
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$link = $sub_item->custom_link;
|
||||||
|
$title = htmlentities($sub_item->custom_title);
|
||||||
|
$parent_id = $sub_item->parent_id;
|
||||||
|
$post_id = $sub_item->post_id;
|
||||||
|
$description = $sub_item->custom_description;
|
||||||
|
$target = 'target="_blank"';
|
||||||
|
}
|
||||||
|
if ($queried_id == $sub_item->post_id) {
|
||||||
|
$li_class = 'class="current_page_item"';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$li_class = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
//SET anchor title
|
||||||
|
if (isset($sub_item->custom_anchor_title)) {
|
||||||
|
$anchor_title = htmlentities($sub_item->custom_anchor_title);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$anchor_title = $title;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($sub_item->new_window)) {
|
||||||
|
if ($sub_item->new_window > 0) {
|
||||||
|
$target = 'target="_blank"';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//List Items
|
||||||
|
?><li id="menu-<?php echo $counter; ?>" value="<?php echo $counter; ?>" <?php echo $li_class; ?>><?php
|
||||||
|
//FRONTEND
|
||||||
|
if ($output_type == "frontend")
|
||||||
|
{
|
||||||
|
?><a title="<?php echo $anchor_title; ?>" href="<?php echo $link; ?>" <?php echo $target; ?>><?php echo $title; ?></a><?php
|
||||||
|
}
|
||||||
|
//BACKEND
|
||||||
|
elseif ($output_type == "backend")
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<span class="title"><?php echo $title; ?></span>
|
||||||
|
<span class="controls">
|
||||||
|
<span class="type"><?php echo $sub_item->link_type; ?></span>
|
||||||
|
<a id="edit<?php echo $counter; ?>" onclick="edititem(<?php echo $counter; ?>)" value="<?php echo $counter; ?>"><img class="edit" alt="Edit Menu Item" title="Edit Menu Item" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-edit.png" /></a>
|
||||||
|
<a id="remove<?php echo $counter; ?>" onclick="removeitem(<?php echo $counter; ?>)" value="<?php echo $counter; ?>"><img class="remove" alt="Remove from Custom Menu" title="Remove from Custom Menu" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-close.png" /></a>
|
||||||
|
<a id="view<?php echo $counter; ?>" target="_blank" href="<?php echo $link; ?>"><img alt="View Page" title="View Page" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-viewpage.png" /></a>
|
||||||
|
</span>
|
||||||
|
</dt>
|
||||||
|
</dl>
|
||||||
|
<a class="hide" href="<?php echo $link; ?>"><?php echo $title; ?></a>
|
||||||
|
<input type="hidden" name="dbid<?php echo $counter; ?>" id="dbid<?php echo $counter; ?>" value="<?php echo $sub_item->id; ?>" />
|
||||||
|
<input type="hidden" name="postmenu<?php echo $counter; ?>" id="postmenu<?php echo $counter; ?>" value="<?php echo $post_id; ?>" />
|
||||||
|
<input type="hidden" name="parent<?php echo $counter; ?>" id="parent<?php echo $counter; ?>" value="<?php echo $parent_id; ?>" />
|
||||||
|
<input type="hidden" name="title<?php echo $counter; ?>" id="title<?php echo $counter; ?>" value="<?php echo $title; ?>" />
|
||||||
|
<input type="hidden" name="linkurl<?php echo $counter; ?>" id="linkurl<?php echo $counter; ?>" value="<?php echo $link; ?>" />
|
||||||
|
<input type="hidden" name="description<?php echo $counter; ?>" id="description<?php echo $counter; ?>" value="<?php echo $description; ?>" />
|
||||||
|
<input type="hidden" name="icon<?php echo $counter; ?>" id="icon<?php echo $counter; ?>" value="0" />
|
||||||
|
<input type="hidden" name="position<?php echo $counter; ?>" id="position<?php echo $counter; ?>" value="<?php echo $counter; ?>" />
|
||||||
|
<input type="hidden" name="linktype<?php echo $counter; ?>" id="linktype<?php echo $counter; ?>" value="<?php echo $sub_item->link_type; ?>" />
|
||||||
|
<input type="hidden" name="anchortitle<?php echo $counter; ?>" id="anchortitle<?php echo $counter; ?>" value="<?php echo $anchor_title; ?>" />
|
||||||
|
<input type="hidden" name="newwindow<?php echo $counter; ?>" id="newwindow<?php echo $counter; ?>" value="<?php echo $sub_item->new_window; ?>" />
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
//Do recursion
|
||||||
|
wp_custom_navigation_sub_items($sub_item->id,$sub_item->link_type,$table_name,$output_type,$menu_id);
|
||||||
|
?></li>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?></ul>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return $parent_id;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Outputs All Pages and Sub Items
|
||||||
|
function wp_custom_nav_get_pages($counter,$type) {
|
||||||
|
|
||||||
|
$pages_args = array(
|
||||||
|
'child_of' => 0,
|
||||||
|
'sort_order' => 'ASC',
|
||||||
|
'sort_column' => 'post_title',
|
||||||
|
'hierarchical' => 1,
|
||||||
|
'exclude' => '',
|
||||||
|
'include' => '',
|
||||||
|
'meta_key' => '',
|
||||||
|
'meta_value' => '',
|
||||||
|
'authors' => '',
|
||||||
|
'parent' => -1,
|
||||||
|
'exclude_tree' => '',
|
||||||
|
'number' => '',
|
||||||
|
'offset' => 0 );
|
||||||
|
|
||||||
|
//GET all pages
|
||||||
|
$pages_array = get_pages($pages_args);
|
||||||
|
|
||||||
|
$intCounter = $counter;
|
||||||
|
$parentli = $intCounter;
|
||||||
|
|
||||||
|
if ($pages_array)
|
||||||
|
{
|
||||||
|
//DISPLAY Loop
|
||||||
|
foreach ($pages_array as $post)
|
||||||
|
{
|
||||||
|
|
||||||
|
if ($post->post_parent == 0)
|
||||||
|
{
|
||||||
|
//Custom Menu
|
||||||
|
if ($type == 'menu')
|
||||||
|
{
|
||||||
|
$description = get_post_meta($post->ID, 'page-description', true);
|
||||||
|
?>
|
||||||
|
|
||||||
|
<li id="menu-<?php echo $intCounter; ?>" value="<?php echo $intCounter; ?>">
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<span class="title"><?php echo $post->post_title; ?></span>
|
||||||
|
<span class="controls">
|
||||||
|
<span class="type">page</span>
|
||||||
|
<a id="edit<?php echo $intCounter; ?>" onclick="edititem(<?php echo $intCounter; ?>)" value="<?php echo $intCounter; ?>"><img class="edit" alt="Edit Menu Item" title="Edit Menu Item" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-edit.png" /></a>
|
||||||
|
<a id="remove<?php echo $intCounter; ?>" onclick="removeitem(<?php echo $intCounter; ?>)" value="<?php echo $intCounter; ?>">
|
||||||
|
<img class="remove" alt="Remove from Custom Menu" title="Remove from Custom Menu" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-close.png" />
|
||||||
|
</a>
|
||||||
|
<a target="_blank" href="<?php echo get_permalink($post->ID); ?>">
|
||||||
|
<img alt="View Page" title="View Page" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-viewpage.png" />
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</dt>
|
||||||
|
</dl>
|
||||||
|
<a class="hide" href="<?php echo get_permalink($post->ID); ?>"><span class="title"><?php echo $post->post_title; ?></span>
|
||||||
|
</a>
|
||||||
|
<input type="hidden" name="postmenu<?php echo $intCounter; ?>" id="postmenu<?php echo $intCounter; ?>" value="<?php echo $post->ID; ?>" />
|
||||||
|
<input type="hidden" name="parent<?php echo $intCounter; ?>" id="parent<?php echo $intCounter; ?>" value="0" />
|
||||||
|
<input type="hidden" name="title<?php echo $intCounter; ?>" id="title<?php echo $intCounter; ?>" value="<?php echo htmlentities($post->post_title); ?>" />
|
||||||
|
<input type="hidden" name="linkurl<?php echo $intCounter; ?>" id="linkurl<?php echo $intCounter; ?>" value="<?php echo get_permalink($post->ID); ?>" />
|
||||||
|
<input type="hidden" name="description<?php echo $intCounter; ?>" id="description<?php echo $intCounter; ?>" value="<?php echo $description; ?>" />
|
||||||
|
<input type="hidden" name="icon<?php echo $intCounter; ?>" id="icon<?php echo $intCounter; ?>" value="0" />
|
||||||
|
<input type="hidden" name="position<?php echo $intCounter; ?>" id="position<?php echo $intCounter; ?>" value="<?php echo $intCounter; ?>" />
|
||||||
|
<input type="hidden" name="linktype<?php echo $intCounter; ?>" id="linktype<?php echo $intCounter; ?>" value="page" />
|
||||||
|
<input type="hidden" name="anchortitle<?php echo $intCounter; ?>" id="anchortitle<?php echo $intCounter; ?>" value="<?php echo htmlentities($post->post_title); ?>" />
|
||||||
|
<input type="hidden" name="newwindow<?php echo $intCounter; ?>" id="newwindow<?php echo $intCounter; ?>" value="0" />
|
||||||
|
|
||||||
|
<?php $parentli = $post->ID; ?>
|
||||||
|
<?php $intCounter++; ?>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
//Recursive function
|
||||||
|
$intCounter = wp_custom_navigation_default_sub_items($post->ID, $intCounter, $parentli, 'pages', 'menu');
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
}
|
||||||
|
//Sidebar Menu
|
||||||
|
elseif ($type == 'default')
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<?php
|
||||||
|
$post_text = htmlentities($post->post_title);
|
||||||
|
$post_url = get_permalink($post->ID);
|
||||||
|
$post_id = $post->ID;
|
||||||
|
$post_parent_id = $post->post_parent;
|
||||||
|
|
||||||
|
$description = htmlentities(get_post_meta($post_id, 'page-description', true));
|
||||||
|
|
||||||
|
?>
|
||||||
|
<?php $templatedir = get_bloginfo('url'); ?>
|
||||||
|
|
||||||
|
<span class="title"><?php echo $post->post_title; ?></span> <a onclick="appendToList('<?php echo $templatedir; ?>','Page','<?php echo $post_text; ?>','<?php echo $post_url; ?>','<?php echo $post_id; ?>','<?php echo $post_parent_id ?>','<?php echo $description; ?>')" name="<?php echo $post_text; ?>" value="<?php echo get_permalink($post->ID); ?>"><img alt="Add to Custom Menu" title="Add to Custom Menu" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-add.png" /></a></dt>
|
||||||
|
</dl>
|
||||||
|
<?php $parentli = $post->ID; ?>
|
||||||
|
<?php $intCounter++; ?>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
//Recursive function
|
||||||
|
$intCounter = wp_custom_navigation_default_sub_items($post_id, $intCounter, $parentli, 'pages', 'default');
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo 'Not Found';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $intCounter;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Outputs All Categories and Sub Items
|
||||||
|
function wp_custom_nav_get_categories($counter, $type) {
|
||||||
|
|
||||||
|
$category_args = array(
|
||||||
|
'type' => 'post',
|
||||||
|
'child_of' => 0,
|
||||||
|
'orderby' => 'name',
|
||||||
|
'order' => 'ASC',
|
||||||
|
'hide_empty' => false,
|
||||||
|
'include_last_update_time' => false,
|
||||||
|
'hierarchical' => 1,
|
||||||
|
'exclude' => '',
|
||||||
|
'include' => '',
|
||||||
|
'number' => '',
|
||||||
|
'pad_counts' => false );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$intCounter = $counter;
|
||||||
|
|
||||||
|
//GET all categories
|
||||||
|
$categories_array = get_categories($category_args);
|
||||||
|
|
||||||
|
if ($categories_array)
|
||||||
|
{
|
||||||
|
//DISPLAY Loop
|
||||||
|
foreach ($categories_array as $cat_item)
|
||||||
|
{
|
||||||
|
|
||||||
|
if ($cat_item->parent == 0)
|
||||||
|
{
|
||||||
|
//Custom Menu
|
||||||
|
if ($type == 'menu')
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
|
||||||
|
<li id="menu-<?php echo $intCounter; ?>" value="<?php echo $intCounter; ?>">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<span class="title"><?php echo $cat_item->cat_name; ?></span>
|
||||||
|
<span class="controls">
|
||||||
|
<span class="type">category</span>
|
||||||
|
<a id="edit<?php echo $intCounter; ?>" onclick="edititem(<?php echo $intCounter; ?>)" value="<?php echo $intCounter; ?>"><img class="edit" alt="Edit Menu Item" title="Edit Menu Item" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-edit.png" /></a>
|
||||||
|
<a id="remove<?php echo $intCounter; ?>" onclick="removeitem(<?php echo $intCounter; ?>)" value="<?php echo $intCounter; ?>">
|
||||||
|
<img class="remove" alt="Remove from Custom Menu" title="Remove from Custom Menu" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-close.png" />
|
||||||
|
</a>
|
||||||
|
<a target="_blank" href="<?php echo get_category_link($cat_item->cat_ID); ?>">
|
||||||
|
<img alt="View Page" title="View Page" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-viewpage.png" />
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</dt>
|
||||||
|
</dl>
|
||||||
|
<a class="hide" href="<?php echo get_category_link($cat_item->cat_ID); ?>"><span class="title"><?php echo $cat_item->cat_name; ?></span>
|
||||||
|
<?php
|
||||||
|
$use_cats_raw = get_option('wp_settings_custom_nav_descriptions');
|
||||||
|
$use_cats = strtolower($use_cats_raw);
|
||||||
|
if ($use_cats == 'yes') { ?>
|
||||||
|
<br/> <span><?php echo $cat_item->category_description; ?></span>
|
||||||
|
<?php } ?>
|
||||||
|
</a>
|
||||||
|
<input type="hidden" name="postmenu<?php echo $intCounter; ?>" id="postmenu<?php echo $intCounter; ?>" value="<?php echo $cat_item->cat_ID; ?>" />
|
||||||
|
<input type="hidden" name="parent<?php echo $intCounter; ?>" id="parent<?php echo $intCounter; ?>" value="0" />
|
||||||
|
<input type="hidden" name="title<?php echo $intCounter; ?>" id="title<?php echo $intCounter; ?>" value="<?php echo htmlentities($cat_item->cat_name); ?>" />
|
||||||
|
<input type="hidden" name="linkurl<?php echo $intCounter; ?>" id="linkurl<?php echo $intCounter; ?>" value="<?php echo get_category_link($cat_item->cat_ID); ?>" />
|
||||||
|
<input type="hidden" name="description<?php echo $intCounter; ?>" id="description<?php echo $intCounter; ?>" value="<?php echo htmlentities($cat_item->category_description); ?>" />
|
||||||
|
<input type="hidden" name="icon<?php echo $intCounter; ?>" id="icon<?php echo $intCounter; ?>" value="0" />
|
||||||
|
<input type="hidden" name="position<?php echo $intCounter; ?>" id="position<?php echo $intCounter; ?>" value="<?php echo $intCounter; ?>" />
|
||||||
|
<input type="hidden" name="linktype<?php echo $intCounter; ?>" id="linktype<?php echo $intCounter; ?>" value="category" />
|
||||||
|
<input type="hidden" name="anchortitle<?php echo $intCounter; ?>" id="anchortitle<?php echo $intCounter; ?>" value="<?php echo htmlentities($cat_item->cat_name); ?>" />
|
||||||
|
<input type="hidden" name="newwindow<?php echo $intCounter; ?>" id="newwindow<?php echo $intCounter; ?>" value="0" />
|
||||||
|
|
||||||
|
<?php $parentli = $cat_item->cat_ID; ?>
|
||||||
|
<?php $intCounter++; ?>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
//Recursive function
|
||||||
|
$intCounter = wp_custom_navigation_default_sub_items($cat_item->cat_ID, $intCounter, $parentli, 'categories','menu');
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
//Sidebar Menu
|
||||||
|
elseif ($type == 'default')
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
<li>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<?php
|
||||||
|
$post_text = htmlentities($cat_item->cat_name);
|
||||||
|
$post_url = get_category_link($cat_item->cat_ID);
|
||||||
|
$post_id = $cat_item->cat_ID;
|
||||||
|
$post_parent_id = $cat_item->parent;
|
||||||
|
$description = htmlentities(strip_tags($cat_item->description));
|
||||||
|
?>
|
||||||
|
<?php $templatedir = get_bloginfo('url'); ?>
|
||||||
|
<span class="title"><?php echo $cat_item->cat_name; ?></span> <a onclick="appendToList('<?php echo $templatedir; ?>','Category','<?php echo $post_text; ?>','<?php echo $post_url; ?>','<?php echo $post_id; ?>','<?php echo $post_parent_id ?>','<?php echo $description; ?>')" name="<?php echo $post_text; ?>" value="<?php echo $post_url; ?>"><img alt="Add to Custom Menu" title="Add to Custom Menu" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-add.png" /></a> </dt>
|
||||||
|
</dl>
|
||||||
|
<?php $parentli = $cat_item->cat_ID; ?>
|
||||||
|
<?php $intCounter++; ?>
|
||||||
|
<?php
|
||||||
|
//Recursive function
|
||||||
|
$intCounter = wp_custom_navigation_default_sub_items($cat_item->cat_ID, $intCounter, $parentli, 'categories','default');
|
||||||
|
?>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo 'Not Found';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $intCounter;
|
||||||
|
}
|
||||||
|
|
||||||
|
//RECURSIVE Sub Menu Items of default categories and pages
|
||||||
|
function wp_custom_navigation_default_sub_items($childof, $intCounter, $parentli, $type, $output_type) {
|
||||||
|
|
||||||
|
$counter = $intCounter;
|
||||||
|
|
||||||
|
//Custom Menu
|
||||||
|
if ($output_type == 'menu')
|
||||||
|
{
|
||||||
|
$sub_args = array(
|
||||||
|
'child_of' => $childof,
|
||||||
|
'hide_empty' => false,
|
||||||
|
'parent' => $childof);
|
||||||
|
}
|
||||||
|
//Sidebar Menu
|
||||||
|
elseif ($output_type == 'default')
|
||||||
|
{
|
||||||
|
$sub_args = array(
|
||||||
|
'child_of' => $childof,
|
||||||
|
'hide_empty' => false,
|
||||||
|
'parent' => $childof);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Get Sub Category Items
|
||||||
|
if ($type == 'categories')
|
||||||
|
{
|
||||||
|
$sub_array = get_categories($sub_args);
|
||||||
|
}
|
||||||
|
//Get Sub Page Items
|
||||||
|
elseif ($type == 'pages')
|
||||||
|
{
|
||||||
|
$sub_array = get_pages($sub_args);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ($sub_array)
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
|
||||||
|
<ul id="sub-custom-nav-<?php echo $type ?>">
|
||||||
|
|
||||||
|
<?php
|
||||||
|
//DISPLAY Loop
|
||||||
|
foreach ($sub_array as $sub_item)
|
||||||
|
{
|
||||||
|
//Prepare Menu Data
|
||||||
|
//Category Menu Item
|
||||||
|
if ($type == 'categories')
|
||||||
|
{
|
||||||
|
$link = get_category_link($sub_item->cat_ID);
|
||||||
|
$title = htmlentities($sub_item->cat_name);
|
||||||
|
$parent_id = $sub_item->cat_ID;
|
||||||
|
$itemid = $sub_item->cat_ID;
|
||||||
|
$linktype = 'category';
|
||||||
|
$appendtype = 'Category';
|
||||||
|
$description = htmlentities(strip_tags($sub_item->description));
|
||||||
|
}
|
||||||
|
//Page Menu Item
|
||||||
|
elseif ($type == 'pages')
|
||||||
|
{
|
||||||
|
$link = get_permalink($sub_item->ID);
|
||||||
|
$title = htmlentities($sub_item->post_title);
|
||||||
|
$parent_id = $sub_item->ID;
|
||||||
|
$linktype = 'page';
|
||||||
|
$itemid = $sub_item->ID;
|
||||||
|
$appendtype = 'Page';
|
||||||
|
$description = htmlentities(get_post_meta($itemid, 'page-description', true));
|
||||||
|
}
|
||||||
|
//Custom Menu Item
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$title = '';
|
||||||
|
$linktype = 'custom';
|
||||||
|
$appendtype= 'Custom';
|
||||||
|
}
|
||||||
|
|
||||||
|
//Custom Menu
|
||||||
|
if ($output_type == 'menu')
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
<li id="menu-<?php echo $counter; ?>" value="<?php echo $counter; ?>">
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
<span class="title"><?php echo $title; ?></span>
|
||||||
|
<span class="controls">
|
||||||
|
<span class="type"><?php echo $linktype; ?></span>
|
||||||
|
<a id="edit<?php echo $counter; ?>" onclick="edititem(<?php echo $counter; ?>)" value="<?php echo $counter; ?>"><img class="edit" alt="Edit Menu Item" title="Edit Menu Item" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-edit.png" /></a>
|
||||||
|
<a id="remove<?php echo $counter; ?>" onclick="removeitem(<?php echo $counter; ?>)" value="<?php echo $counter; ?>">
|
||||||
|
<img class="remove" alt="Remove from Custom Menu" title="Remove from Custom Menu" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-close.png" />
|
||||||
|
</a>
|
||||||
|
<a target="_blank" href="<?php echo $link; ?>">
|
||||||
|
<img alt="View Page" title="View Page" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-viewpage.png" />
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</dt>
|
||||||
|
</dl>
|
||||||
|
<a class="hide" href="<?php echo $link; ?>"><?php echo $title; ?></a>
|
||||||
|
<input type="hidden" name="dbid<?php echo $counter; ?>" id="dbid<?php echo $counter; ?>" value="<?php echo $sub_item->id; ?>" />
|
||||||
|
<input type="hidden" name="postmenu<?php echo $counter; ?>" id="postmenu<?php echo $counter; ?>" value="<?php echo $parent_id; ?>" />
|
||||||
|
<input type="hidden" name="parent<?php echo $counter; ?>" id="parent<?php echo $counter; ?>" value="<?php echo $parentli; ?>" />
|
||||||
|
<input type="hidden" name="title<?php echo $counter; ?>" id="title<?php echo $counter; ?>" value="<?php echo $title; ?>" />
|
||||||
|
<input type="hidden" name="linkurl<?php echo $counter; ?>" id="linkurl<?php echo $counter; ?>" value="<?php echo $link; ?>" />
|
||||||
|
<input type="hidden" name="description<?php echo $counter; ?>" id="description<?php echo $counter; ?>" value="<?php echo $description; ?>" />
|
||||||
|
<input type="hidden" name="icon<?php echo $counter; ?>" id="icon<?php echo $counter; ?>" value="0" />
|
||||||
|
<input type="hidden" name="position<?php echo $counter; ?>" id="position<?php echo $counter; ?>" value="<?php echo $counter; ?>" />
|
||||||
|
<input type="hidden" name="linktype<?php echo $counter; ?>" id="linktype<?php echo $counter; ?>" value="<?php echo $linktype; ?>" />
|
||||||
|
<input type="hidden" name="anchortitle<?php echo $counter; ?>" id="anchortitle<?php echo $counter; ?>" value="<?php echo $title; ?>" />
|
||||||
|
<input type="hidden" name="newwindow<?php echo $counter; ?>" id="newwindow<?php echo $counter; ?>" value="0" />
|
||||||
|
|
||||||
|
<?php $counter++; ?>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
//Do recursion
|
||||||
|
$counter = wp_custom_navigation_default_sub_items($parent_id, $counter, $parent_id, $type, 'menu');
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
//Sidebar Menu
|
||||||
|
elseif ($output_type == 'default')
|
||||||
|
{
|
||||||
|
|
||||||
|
?>
|
||||||
|
<li>
|
||||||
|
<dl>
|
||||||
|
<dt>
|
||||||
|
|
||||||
|
<?php $templatedir = get_bloginfo('url'); ?>
|
||||||
|
<span class="title"><?php echo $title; ?></span> <a onclick="appendToList('<?php echo $templatedir; ?>','<?php echo $appendtype; ?>','<?php echo $title; ?>','<?php echo $link; ?>','<?php echo $itemid; ?>','<?php echo $parent_id ?>','<?php echo $description; ?>')" name="<?php echo $title; ?>" value="<?php echo $link; ?>"><img alt="Add to Custom Menu" title="Add to Custom Menu" src="<?php echo get_bloginfo('url'); ?>/wp-admin/images/ico-add.png" /></a> </dt>
|
||||||
|
</dl>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
//Do recursion
|
||||||
|
$counter = wp_custom_navigation_default_sub_items($itemid, $counter, $parent_id, $type, 'default');
|
||||||
|
|
||||||
|
?>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
return $counter;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
/* Recursive get children */
|
||||||
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
function get_children_menu_elements($childof, $intCounter, $parentli, $type, $menu_id, $table_name) {
|
||||||
|
|
||||||
|
$counter = $intCounter;
|
||||||
|
|
||||||
|
global $wpdb;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Get Sub Category Items
|
||||||
|
if ($type == 'categories')
|
||||||
|
{
|
||||||
|
$sub_args = array(
|
||||||
|
'child_of' => $childof,
|
||||||
|
'hide_empty' => false,
|
||||||
|
'parent' => $childof);
|
||||||
|
$sub_array = get_categories($sub_args);
|
||||||
|
}
|
||||||
|
//Get Sub Page Items
|
||||||
|
elseif ($type == 'pages')
|
||||||
|
{
|
||||||
|
$sub_args = array(
|
||||||
|
'child_of' => $childof,
|
||||||
|
'parent' => $childof);
|
||||||
|
|
||||||
|
$sub_array = get_pages($sub_args);
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($sub_array)
|
||||||
|
{
|
||||||
|
//DISPLAY Loop
|
||||||
|
foreach ($sub_array as $sub_item)
|
||||||
|
{
|
||||||
|
if (isset($sub_item->parent)) {
|
||||||
|
$sub_item_parent = $sub_item->parent;
|
||||||
|
}
|
||||||
|
elseif (isset($sub_item->post_parent)) {
|
||||||
|
$sub_item_parent = $sub_item->post_parent;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
}
|
||||||
|
//Is child
|
||||||
|
if ($sub_item_parent == $childof)
|
||||||
|
{
|
||||||
|
//Prepare Menu Data
|
||||||
|
//Category Menu Item
|
||||||
|
if ($type == 'categories')
|
||||||
|
{
|
||||||
|
$link = get_category_link($sub_item->cat_ID);
|
||||||
|
$title = htmlentities($sub_item->cat_name);
|
||||||
|
$parent_id = $sub_item->category_parent;
|
||||||
|
$itemid = $sub_item->cat_ID;
|
||||||
|
$linktype = 'category';
|
||||||
|
$appendtype= 'Category';
|
||||||
|
}
|
||||||
|
//Page Menu Item
|
||||||
|
elseif ($type == 'pages')
|
||||||
|
{
|
||||||
|
$link = get_permalink($sub_item->ID);
|
||||||
|
$title = htmlentities($sub_item->post_title);
|
||||||
|
$parent_id = $sub_item->post_parent;
|
||||||
|
$linktype = 'page';
|
||||||
|
$itemid = $sub_item->ID;
|
||||||
|
$appendtype= 'Page';
|
||||||
|
}
|
||||||
|
//Custom Menu Item
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$title = '';
|
||||||
|
$linktype = 'custom';
|
||||||
|
$appendtype= 'Custom';
|
||||||
|
}
|
||||||
|
|
||||||
|
//CHECK for existing parent records
|
||||||
|
//echo $parent_id;
|
||||||
|
$wp_result = $wpdb->get_results("SELECT id FROM ".$table_name." WHERE post_id='".$parent_id."' AND link_type='".$linktype."' AND menu_id='".$menu_id."'");
|
||||||
|
if ($wp_result > 0 && isset($wp_result[0]->id)) {
|
||||||
|
$parent_id = $wp_result[0]->id;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//$parent_id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//INSERT item
|
||||||
|
$insert = "INSERT INTO ".$table_name." (position,post_id,parent_id,custom_title,custom_link,custom_description,menu_icon,link_type,menu_id,custom_anchor_title) "."VALUES ('".$counter."','".$itemid."','".$parent_id."','".$title."','".$link."','','','".$linktype."','".$menu_id."','".$title."')";
|
||||||
|
$results = $wpdb->query( $insert );
|
||||||
|
|
||||||
|
$counter++;
|
||||||
|
$counter = get_children_menu_elements($itemid, $counter, $parent_id, $type, $menu_id, $table_name);
|
||||||
|
}
|
||||||
|
//Do nothing
|
||||||
|
else {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $counter;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
@ -1000,6 +1000,379 @@ class WP_Widget_Tag_Cloud extends WP_Widget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom Navigation widget class
|
||||||
|
*
|
||||||
|
* @since 3.0.0
|
||||||
|
*/
|
||||||
|
class WP_CustomNavWidget extends WP_Widget {
|
||||||
|
|
||||||
|
function WP_CustomNavWidget() {
|
||||||
|
$widget_ops = array('description' => 'Use this widget to add one of your Custom Navigation Menus as a widget.' );
|
||||||
|
parent::WP_Widget(false, __('Custom Navigation Menu'),$widget_ops);
|
||||||
|
}
|
||||||
|
|
||||||
|
function widget($args, $instance) {
|
||||||
|
$navmenu = $instance['navmenu'];
|
||||||
|
$navtitle = $instance['navtitle'];
|
||||||
|
$navdeveloper = strtolower($instance['navdeveloper']);
|
||||||
|
$navdiv = strtolower($instance['navdiv']);
|
||||||
|
$navul = strtolower($instance['navul']);
|
||||||
|
$navdivid = $instance['navdivid'];
|
||||||
|
$navdivclass = $instance['navdivclass'];
|
||||||
|
$navulid = $instance['navulid'];
|
||||||
|
$navulclass = $instance['navulclass'];
|
||||||
|
|
||||||
|
//Override for menu descriptions
|
||||||
|
$advanced_option_descriptions = get_option('wp_settings_custom_nav_advanced_options');
|
||||||
|
if ($advanced_option_descriptions == 'no')
|
||||||
|
{
|
||||||
|
$navwidgetdescription = 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$navwidgetdescription = $instance['navwidgetdescription'];
|
||||||
|
}
|
||||||
|
$menuexists = false;
|
||||||
|
|
||||||
|
global $wpdb;
|
||||||
|
|
||||||
|
//GET menu name
|
||||||
|
if ($navmenu > 0)
|
||||||
|
{
|
||||||
|
$table_name_menus = $wpdb->prefix . "custom_nav_menus";
|
||||||
|
$wp_result = $wpdb->get_results("SELECT menu_name FROM ".$table_name_menus." WHERE id='".$navmenu."'");
|
||||||
|
$wp_custom_nav_menu_name = $wp_result[0]->menu_name;
|
||||||
|
$menuexists = true;
|
||||||
|
}
|
||||||
|
//Do nothing
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$menuexists = false;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
//DEVELOPER settings enabled
|
||||||
|
if ($navdeveloper == 'yes')
|
||||||
|
{
|
||||||
|
//DISPLAY Custom DIV
|
||||||
|
if ($navdiv == 'yes')
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
<div id="<?php echo $navdivid; ?>" class="<?php echo $navdivclass; ?>">
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
//Do NOT display DIV
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//DISPLAY default DIV
|
||||||
|
else
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
<div class="widget">
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<h3><?php echo $navtitle; ?></h3>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
if ($menuexists)
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
//DEVELOPER settings enabled
|
||||||
|
if ($navdeveloper == 'yes')
|
||||||
|
{
|
||||||
|
//DISPLAY Custom UL
|
||||||
|
if ($navul == 'yes')
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
<ul id="<?php echo $navulid; ?>" class="<?php echo $navulclass; ?>">
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
//Do NOT display UL
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//DISPLAY default UL
|
||||||
|
else
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
<ul class="custom-nav">
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
//DISPLAY custom navigation menu
|
||||||
|
if (get_option('wp_custom_nav_menu') == 'true') {
|
||||||
|
custom_nav('name='.$wp_custom_nav_menu_name.'&desc='.$navwidgetdescription);
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
//DEVELOPER settings enabled
|
||||||
|
if ($navdeveloper == 'yes')
|
||||||
|
{
|
||||||
|
//DISPLAY Custom UL
|
||||||
|
if ($navul == 'yes')
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
</ul>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
//Do NOT display UL
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//DISPLAY default UL
|
||||||
|
else
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
</ul>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo "You have not setup the custom navigation widget correctly, please check your settings in the backend.";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<?php
|
||||||
|
//DEVELOPER settings enabled
|
||||||
|
if ($navdeveloper == 'yes')
|
||||||
|
{
|
||||||
|
//DISPLAY Custom DIV
|
||||||
|
if ($navdiv == 'yes')
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
//Do NOT display DIV
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//DISPLAY default DIV
|
||||||
|
else
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?><!-- /#nav-container -->
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
function update($new_instance, $old_instance) {
|
||||||
|
return $new_instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
function form($instance) {
|
||||||
|
$navmenu = esc_attr($instance['navmenu']);
|
||||||
|
$navtitle = esc_attr($instance['navtitle']);
|
||||||
|
$navdeveloper = esc_attr($instance['navdeveloper']);
|
||||||
|
$navdiv = esc_attr($instance['navdiv']);
|
||||||
|
$navul = esc_attr($instance['navul']);
|
||||||
|
$navdivid = esc_attr($instance['navdivid']);
|
||||||
|
$navdivclass = esc_attr($instance['navdivclass']);
|
||||||
|
$navulid = esc_attr($instance['navulid']);
|
||||||
|
$navulclass = esc_attr($instance['navulclass']);
|
||||||
|
$navwidgetdescription = esc_attr($instance['navwidgetdescription']);
|
||||||
|
|
||||||
|
global $wpdb;
|
||||||
|
|
||||||
|
//GET Menu Items for SELECT OPTIONS
|
||||||
|
$table_name_custom_menus = $wpdb->prefix . "custom_nav_menus";
|
||||||
|
$custom_menu_records = $wpdb->get_results("SELECT id,menu_name FROM ".$table_name_custom_menus);
|
||||||
|
|
||||||
|
//CHECK if menus exist
|
||||||
|
if ($custom_menu_records > 0)
|
||||||
|
{
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<label for="<?php echo $this->get_field_id('navmenu'); ?>"><?php _e('Select Menu:'); ?></label>
|
||||||
|
|
||||||
|
<select id="<?php echo $this->get_field_id('navmenu'); ?>" name="<?php echo $this->get_field_name('navmenu'); ?>">
|
||||||
|
<?php
|
||||||
|
|
||||||
|
//DISPLAY SELECT OPTIONS
|
||||||
|
foreach ($custom_menu_records as $custom_menu_record)
|
||||||
|
{
|
||||||
|
if ($navmenu == $custom_menu_record->id) {
|
||||||
|
$selected_option = 'selected="selected"';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$selected_option = '';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<option value="<?php echo $custom_menu_record->id; ?>" <?php echo $selected_option; ?>><?php echo $custom_menu_record->menu_name; ?></option>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
|
||||||
|
<label for="<?php echo $this->get_field_id('navtitle'); ?>"><?php _e('Title:'); ?></label>
|
||||||
|
<input type="text" name="<?php echo $this->get_field_name('navtitle'); ?>" value="<?php echo $navtitle; ?>" class="widefat" id="<?php echo $this->get_field_id('navtitle'); ?>" />
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<?php
|
||||||
|
$checked = strtolower($navdeveloper);
|
||||||
|
?>
|
||||||
|
|
||||||
|
<label for="<?php echo $this->get_field_id('navdeveloper'); ?>"><?php _e('Advanced Options:'); ?></label><br />
|
||||||
|
<span class="checkboxes">
|
||||||
|
<label>Yes</label><input type="radio" id="<?php echo $this->get_field_name('navdeveloper'); ?>" name="<?php echo $this->get_field_name('navdeveloper'); ?>" value="yes" <?php if ($checked=='yes') { echo 'checked="checked"'; } ?> />
|
||||||
|
<label>No</label><input type="radio" id="<?php echo $this->get_field_name('navdeveloper'); ?>" name="<?php echo $this->get_field_name('navdeveloper'); ?>" value="no" <?php if ($checked=='yes') { } else { echo 'checked="checked"'; } ?> />
|
||||||
|
</span><!-- /.checkboxes -->
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
//DEVELOPER settings
|
||||||
|
if ($checked == 'yes')
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<?php
|
||||||
|
$checked = strtolower($navdiv);
|
||||||
|
?>
|
||||||
|
|
||||||
|
<label for="<?php echo $this->get_field_id('navdiv'); ?>"><?php _e('Wrap in container DIV:'); ?></label><br />
|
||||||
|
<span class="checkboxes">
|
||||||
|
<label>Yes</label><input type="radio" id="<?php echo $this->get_field_name('navdiv'); ?>" name="<?php echo $this->get_field_name('navdiv'); ?>" value="yes" <?php if ($checked=='yes') { echo 'checked="checked"'; } ?> />
|
||||||
|
<label>No</label><input type="radio" id="<?php echo $this->get_field_name('navdiv'); ?>" name="<?php echo $this->get_field_name('navdiv'); ?>" value="no" <?php if ($checked=='yes') { } else { echo 'checked="checked"'; } ?> />
|
||||||
|
</span><!-- /.checkboxes -->
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
if ($checked == 'yes')
|
||||||
|
{
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
|
||||||
|
<label for="<?php echo $this->get_field_id('navdivid'); ?>"><?php _e('DIV id:'); ?></label>
|
||||||
|
<input type="text" name="<?php echo $this->get_field_name('navdivid'); ?>" value="<?php echo $navdivid; ?>" class="widefat" id="<?php echo $this->get_field_id('navdivid'); ?>" />
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
|
||||||
|
<label for="<?php echo $this->get_field_id('navdivclass'); ?>"><?php _e('DIV class:'); ?></label>
|
||||||
|
<input type="text" name="<?php echo $this->get_field_name('navdivclass'); ?>" value="<?php echo $navdivclass; ?>" class="widefat" id="<?php echo $this->get_field_id('navdivclass'); ?>" />
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<?php
|
||||||
|
$checked = strtolower($navul);
|
||||||
|
?>
|
||||||
|
|
||||||
|
<label for="<?php echo $this->get_field_id('navul'); ?>"><?php _e('Wrap in container UL:'); ?></label><br />
|
||||||
|
<span class="checkboxes">
|
||||||
|
<label>Yes</label><input type="radio" id="<?php echo $this->get_field_name('navul'); ?>" name="<?php echo $this->get_field_name('navul'); ?>" value="yes" <?php if ($checked=='yes') { echo 'checked="checked"'; } ?> />
|
||||||
|
<label>No</label><input type="radio" id="<?php echo $this->get_field_name('navul'); ?>" name="<?php echo $this->get_field_name('navul'); ?>" value="no" <?php if ($checked=='yes') { } else { echo 'checked="checked"'; } ?> />
|
||||||
|
</span><!-- /.checkboxes -->
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
if ($checked == 'yes')
|
||||||
|
{
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
|
||||||
|
<label for="<?php echo $this->get_field_id('navulid'); ?>"><?php _e('UL id:'); ?></label>
|
||||||
|
<input type="text" name="<?php echo $this->get_field_name('navulid'); ?>" value="<?php echo $navulid; ?>" class="widefat" id="<?php echo $this->get_field_id('navulid'); ?>" />
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
|
||||||
|
<label for="<?php echo $this->get_field_id('navulclass'); ?>"><?php _e('UL class:'); ?></label>
|
||||||
|
<input type="text" name="<?php echo $this->get_field_name('navulclass'); ?>" value="<?php echo $navulclass; ?>" class="widefat" id="<?php echo $this->get_field_id('navulclass'); ?>" />
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
<?php $advanced_option_descriptions = get_option('wp_settings_custom_nav_advanced_options'); ?>
|
||||||
|
<p <?php if ($advanced_option_descriptions == 'no') { ?>style="display:none;"<?php } ?>>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$checked = strtolower($navwidgetdescription);
|
||||||
|
?>
|
||||||
|
|
||||||
|
<label for="<?php echo $this->get_field_id('navwidgetdescription'); ?>"><?php _e('Show Top Level Descriptions:'); ?></label><br />
|
||||||
|
<span class="checkboxes">
|
||||||
|
<label>Yes</label><input type="radio" id="<?php echo $this->get_field_name('navwidgetdescription'); ?>" name="<?php echo $this->get_field_name('navwidgetdescription'); ?>" value="1" <?php if ($checked=='1') { echo 'checked="checked"'; } ?> />
|
||||||
|
<label>No</label><input type="radio" id="<?php echo $this->get_field_name('navwidgetdescription'); ?>" name="<?php echo $this->get_field_name('navwidgetdescription'); ?>" value="2" <?php if ($checked=='1') { } else { echo 'checked="checked"'; } ?> />
|
||||||
|
</span><!-- /.checkboxes -->
|
||||||
|
</p>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
//Do nothing
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//Error message for menus not existing
|
||||||
|
else
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
<p>
|
||||||
|
<label><?php _e('The Custom Navigation has not been configured correctly. Please check your Custom Navigation settings before adding this widget.'); ?></label>
|
||||||
|
</p>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register all of the default WordPress widgets on startup.
|
* Register all of the default WordPress widgets on startup.
|
||||||
*
|
*
|
||||||
@ -1036,6 +1409,8 @@ function wp_widgets_init() {
|
|||||||
|
|
||||||
register_widget('WP_Widget_Tag_Cloud');
|
register_widget('WP_Widget_Tag_Cloud');
|
||||||
|
|
||||||
|
register_widget('WP_CustomNavWidget');
|
||||||
|
|
||||||
do_action('widgets_init');
|
do_action('widgets_init');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2215,4 +2215,14 @@ function get_the_generator( $type = '' ) {
|
|||||||
return apply_filters( "get_the_generator_{$type}", $gen, $type );
|
return apply_filters( "get_the_generator_{$type}", $gen, $type );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Outputs the Custom Navigation.
|
||||||
|
*
|
||||||
|
* @since 3.0.0
|
||||||
|
*/
|
||||||
|
function custom_nav($args = array()) {
|
||||||
|
require_once (ABSPATH . WPINC . '/custom-navigation-functions.php');
|
||||||
|
wp_custom_navigation_output($args);
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
@ -63,6 +63,14 @@ function create_initial_post_types() {
|
|||||||
'query_var' => false,
|
'query_var' => false,
|
||||||
) );
|
) );
|
||||||
|
|
||||||
|
register_post_type( 'menu_item', array( 'public' => false,
|
||||||
|
'show_ui' => false,
|
||||||
|
'_builtin' => true,
|
||||||
|
'capability_type' => 'post',
|
||||||
|
'hierarchical' => false,
|
||||||
|
'rewrite' => false,
|
||||||
|
'query_var' => false,
|
||||||
|
) );
|
||||||
register_post_status( 'publish', array( 'label' => _x('Published', 'post'),
|
register_post_status( 'publish', array( 'label' => _x('Published', 'post'),
|
||||||
'public' => true,
|
'public' => true,
|
||||||
'_builtin' => true,
|
'_builtin' => true,
|
||||||
@ -105,6 +113,18 @@ function create_initial_post_types() {
|
|||||||
'_builtin' => true,
|
'_builtin' => true,
|
||||||
'label_count' => _n_noop('Auto-Draft <span class="count">(%s)</span>', 'Auto-Drafts <span class="count">(%s)</span>')
|
'label_count' => _n_noop('Auto-Draft <span class="count">(%s)</span>', 'Auto-Drafts <span class="count">(%s)</span>')
|
||||||
) );
|
) );
|
||||||
|
|
||||||
|
register_post_status( 'menu-category', array( 'internal' => true,
|
||||||
|
'_builtin' => true
|
||||||
|
) );
|
||||||
|
|
||||||
|
register_post_status( 'menu-page', array( 'internal' => true,
|
||||||
|
'_builtin' => true
|
||||||
|
) );
|
||||||
|
|
||||||
|
register_post_status( 'menu-custom', array( 'internal' => true,
|
||||||
|
'_builtin' => true
|
||||||
|
) );
|
||||||
}
|
}
|
||||||
add_action( 'init', 'create_initial_post_types', 0 ); // highest priority
|
add_action( 'init', 'create_initial_post_types', 0 ); // highest priority
|
||||||
|
|
||||||
|
@ -394,6 +394,21 @@ function wp_default_scripts( &$scripts ) {
|
|||||||
) );
|
) );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Custom Navigation
|
||||||
|
|
||||||
|
$scripts->add( 'custom-navigation-jquery', '/wp-admin/js/custom-navigation-custom-jquery-1.3.2.js', false, '1.3.2' );
|
||||||
|
|
||||||
|
$scripts->add( 'custom-navigation-ui-custom', '/wp-admin/js/custom-navigation-custom-jquery-ui-1.7.2.js', array('custom-navigation-jquery'), '1.7.2' );
|
||||||
|
$scripts->add_data( 'custom-navigation-ui-custom', 'group', 1 );
|
||||||
|
|
||||||
|
$scripts->add( 'custom-navigation-autocomplete', '/wp-admin/js/custom-navigation-custom-jquery-autocomplete.js', array('custom-navigation-jquery'), '1.0.0' );
|
||||||
|
$scripts->add_data( 'custom-navigation-autocomplete', 'group', 1 );
|
||||||
|
|
||||||
|
$scripts->add( 'custom-navigation-default-items', '/wp-admin/js/custom-navigation-default-items.js', false, '1.0.0' );
|
||||||
|
$scripts->add( 'custom-navigation-dynamic-functions', '/wp-admin/js/custom-navigation-dynamic-functions.js', false, '1.0.0' );
|
||||||
|
$scripts->add( 'custom-navigation-php-functions', '/wp-admin/js/custom-navigation-php-functions.js', false, '1.0.0' );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -459,6 +474,7 @@ function wp_default_styles( &$styles ) {
|
|||||||
$styles->add( 'farbtastic', '/wp-admin/css/farbtastic.css', array(), '1.2' );
|
$styles->add( 'farbtastic', '/wp-admin/css/farbtastic.css', array(), '1.2' );
|
||||||
$styles->add( 'jcrop', '/wp-includes/js/jcrop/jquery.Jcrop.css', array(), '0.9.8' );
|
$styles->add( 'jcrop', '/wp-includes/js/jcrop/jquery.Jcrop.css', array(), '0.9.8' );
|
||||||
$styles->add( 'imgareaselect', '/wp-includes/js/imgareaselect/imgareaselect.css', array(), '0.9.1' );
|
$styles->add( 'imgareaselect', '/wp-includes/js/imgareaselect/imgareaselect.css', array(), '0.9.1' );
|
||||||
|
$styles->add( 'custom-navigation', "/wp-admin/css/custom-navigation$suffix.css", array(), '20100215' );
|
||||||
|
|
||||||
foreach ( $rtl_styles as $rtl_style )
|
foreach ( $rtl_styles as $rtl_style )
|
||||||
$styles->add_data( $rtl_style, 'rtl', true );
|
$styles->add_data( $rtl_style, 'rtl', true );
|
||||||
|
@ -38,6 +38,11 @@ function create_initial_taxonomies() {
|
|||||||
'_builtin' => true
|
'_builtin' => true
|
||||||
) ) ;
|
) ) ;
|
||||||
|
|
||||||
|
register_taxonomy( 'menu', 'post', array( 'hierarchical' => false,
|
||||||
|
'query_var' => false,
|
||||||
|
'rewrite' => false
|
||||||
|
) ) ;
|
||||||
|
|
||||||
register_taxonomy( 'link_category', 'link', array( 'hierarchical' => false,
|
register_taxonomy( 'link_category', 'link', array( 'hierarchical' => false,
|
||||||
'label' => __('Categories'),
|
'label' => __('Categories'),
|
||||||
'query_var' => false,
|
'query_var' => false,
|
||||||
|
Loading…
Reference in New Issue
Block a user