Version Description
Download this release
Release Info
Developer | supercleanse |
Plugin | Shortlinks by Pretty Links – Best WordPress Link Tracking Plugin |
Version | 1.2.3 |
Comparing to | |
See all releases |
Version 1.2.3
- classes/models/PrliLink.php +153 -0
- classes/models/PrliReport.php +226 -0
- classes/models/PrliUtils.php +114 -0
- classes/models/models.inc.php +9 -0
- classes/views/prli-links/edit.php +48 -0
- classes/views/prli-links/list.php +62 -0
- classes/views/prli-links/new.php +48 -0
- classes/views/prli-reports/form.php +37 -0
- classes/views/shared/errors.php +19 -0
- classes/views/shared/table-nav.php +93 -0
- images/bookmark.png +0 -0
- images/pretty-link-add.png +0 -0
- images/pretty-link-med.png +0 -0
- images/pretty-link-small.png +0 -0
- images/url_icon.gif +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
- includes/jquery/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
- includes/jquery/css/ui-lightness/jquery-ui-1.7.1.custom.css +404 -0
- includes/jquery/js/jquery-1.3.2.min.js +19 -0
- includes/jquery/js/jquery-ui-1.7.1.custom.min.js +273 -0
- includes/version-2-ichor/README.txt +8 -0
- includes/version-2-ichor/js/README.txt +12 -0
- includes/version-2-ichor/js/json/json2.js +461 -0
- includes/version-2-ichor/js/swfobject.js +5 -0
- includes/version-2-ichor/open-flash-chart.swf +0 -0
- pretty-link.php +326 -0
- prli-config.php +10 -0
- prli-links.php +109 -0
- prli-reports.php +9 -0
- prli.php +73 -0
- readme.txt +61 -0
- screenshot-1.png +0 -0
- screenshot-2.png +0 -0
- screenshot-3.png +0 -0
- screenshot-4.png +0 -0
classes/models/PrliLink.php
ADDED
@@ -0,0 +1,153 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class PrliLink
|
3 |
+
{
|
4 |
+
function table_name()
|
5 |
+
{
|
6 |
+
global $wpdb;
|
7 |
+
return $wpdb->prefix . 'prli_links';
|
8 |
+
}
|
9 |
+
|
10 |
+
function create( $values )
|
11 |
+
{
|
12 |
+
global $wpdb, $wp_rewrite;
|
13 |
+
$query = 'INSERT INTO ' . $this->table_name() .
|
14 |
+
' (url,slug,forward_params,track_as_img,created_at) VALUES (\'' .
|
15 |
+
$values['url'] . '\',\'' .
|
16 |
+
$values['slug'] . '\',' .
|
17 |
+
(int)isset($values['forward_params']) . ',' .
|
18 |
+
(int)isset($values['track_as_img']) . ',' .
|
19 |
+
'NOW())';
|
20 |
+
$query_results = $wpdb->query($query);
|
21 |
+
$wp_rewrite->flush_rules();
|
22 |
+
return $query_results;
|
23 |
+
}
|
24 |
+
|
25 |
+
function update( $id, $values )
|
26 |
+
{
|
27 |
+
global $wpdb, $wp_rewrite;
|
28 |
+
$query = 'UPDATE ' . $this->table_name() .
|
29 |
+
' SET url=\'' . $values['url'] . '\', ' .
|
30 |
+
' slug=\'' . $values['slug'] . '\', ' .
|
31 |
+
' forward_params=' . (int)isset($values['forward_params']) . ', ' .
|
32 |
+
' track_as_img=' . (int)isset($values['track_as_img']) .
|
33 |
+
' WHERE id='.$id;
|
34 |
+
$query_results = $wpdb->query($query);
|
35 |
+
$wp_rewrite->flush_rules();
|
36 |
+
return $query_results;
|
37 |
+
}
|
38 |
+
|
39 |
+
function destroy( $id )
|
40 |
+
{
|
41 |
+
require_once(PRLI_MODELS_PATH.'/models.inc.php');
|
42 |
+
global $wpdb, $wp_rewrite;
|
43 |
+
$destroy = 'DELETE FROM ' . $this->table_name() . ' WHERE id=' . $id;
|
44 |
+
$wp_rewrite->flush_rules();
|
45 |
+
return $wpdb->query($destroy);
|
46 |
+
}
|
47 |
+
|
48 |
+
function getOne( $id )
|
49 |
+
{
|
50 |
+
global $wpdb;
|
51 |
+
$click_table = $wpdb->prefix . "prli_clicks";
|
52 |
+
$query = 'SELECT li.*, (SELECT COUNT(*) FROM ' . $click_table . ' cl WHERE cl.link_id = li.id) as clicks FROM ' . $this->table_name() . ' li WHERE id=' . $id . ';';
|
53 |
+
return $wpdb->get_row($query);
|
54 |
+
}
|
55 |
+
|
56 |
+
function getAll()
|
57 |
+
{
|
58 |
+
global $wpdb;
|
59 |
+
$click_table = $wpdb->prefix . "prli_clicks";
|
60 |
+
$query = 'SELECT li.*, (SELECT COUNT(*) FROM ' . $click_table . ' cl WHERE cl.link_id = li.id) as clicks FROM ' . $this->table_name() . ' li;';
|
61 |
+
return $wpdb->get_results($query);
|
62 |
+
}
|
63 |
+
|
64 |
+
// Pagination Methods
|
65 |
+
function getRecordCount($where="")
|
66 |
+
{
|
67 |
+
global $wpdb;
|
68 |
+
$query = 'SELECT COUNT(*) FROM ' . $this->table_name() . $where;
|
69 |
+
return $wpdb->get_var($query);
|
70 |
+
}
|
71 |
+
|
72 |
+
function getPageCount($p_size, $where="")
|
73 |
+
{
|
74 |
+
return ceil((int)$this->getRecordCount($where) / (int)$p_size);
|
75 |
+
}
|
76 |
+
|
77 |
+
function getPage($current_p,$p_size, $where = "")
|
78 |
+
{
|
79 |
+
global $wpdb;
|
80 |
+
$click_table = $wpdb->prefix . "prli_clicks";
|
81 |
+
$end_index = $current_p * $p_size;
|
82 |
+
$start_index = $end_index - $p_size;
|
83 |
+
$query = 'SELECT li.*, (SELECT COUNT(*) FROM ' . $click_table . ' cl WHERE cl.link_id = li.id) as clicks FROM ' . $this->table_name() . ' li' . $where . ' LIMIT ' . $start_index . ',' . $p_size . ';';
|
84 |
+
$results = $wpdb->get_results($query);
|
85 |
+
return $results;
|
86 |
+
}
|
87 |
+
|
88 |
+
/** I'm generating a slug that is by default 2-3 characters long.
|
89 |
+
* This gives us a possibility of 36^3 - 37 = 46,619 possible
|
90 |
+
* random slugs. That should be *more* than enough slugs for
|
91 |
+
* any website -- if I get any feedback that we need more then
|
92 |
+
* I can always make a config option to raise the # of chars.
|
93 |
+
*/
|
94 |
+
function generateValidSlug($num_chars = 3)
|
95 |
+
{
|
96 |
+
global $wpdb, $prli_utils;
|
97 |
+
|
98 |
+
// We're doing a base 36 hash which is why we're always doing everything by 36
|
99 |
+
$max_slug_value = pow(36,$num_chars);
|
100 |
+
$min_slug_value = 37; // we want to have at least 2 characters in the slug
|
101 |
+
$slug = base_convert( rand($min_slug_value,$max_slug_value), 10, 36 );
|
102 |
+
|
103 |
+
$query = "SELECT slug FROM " . $this->table_name(); // . " WHERE slug='" . $slug . "'";
|
104 |
+
$slugs = $wpdb->get_col($query,0);
|
105 |
+
|
106 |
+
// It is highly unlikely that we'll ever see 2 identical random slugs
|
107 |
+
// but just in case, here's some code to prevent collisions
|
108 |
+
while( in_array($slug,$slugs) or !$prli_utils->slugIsAvailable($slug) )
|
109 |
+
$slug = base_convert( rand($min_slug_value,$max_slug_value), 10, 36 );
|
110 |
+
|
111 |
+
return $slug;
|
112 |
+
}
|
113 |
+
|
114 |
+
function validate( $values )
|
115 |
+
{
|
116 |
+
global $wpdb, $prli_utils;
|
117 |
+
|
118 |
+
$errors = array();
|
119 |
+
if( $values['url'] == null or $values['url'] == '' )
|
120 |
+
$errors[] = "Link URL can't be blank";
|
121 |
+
|
122 |
+
if( $values['slug'] == null or $values['slug'] == '' )
|
123 |
+
$errors[] = "Pretty Link can't be blank";
|
124 |
+
|
125 |
+
if( !preg_match('/^http.?:\/\/.*\..*$/', $values['url'] ) )
|
126 |
+
$errors[] = "Link URL must be a correctly formatted url";
|
127 |
+
|
128 |
+
if( !preg_match('/^[a-zA-Z0-9\.\-_]+$/', $values['slug'] ) )
|
129 |
+
$errors[] = "Pretty Link must not contain spaces or special characters";
|
130 |
+
|
131 |
+
if($values['id'] != null and $values['id'] != '')
|
132 |
+
$query = "SELECT slug FROM " . $this->table_name() . " WHERE slug='" . $values['slug'] . "' AND id <> " . $values['id'];
|
133 |
+
else
|
134 |
+
$query = "SELECT slug FROM " . $this->table_name() . " WHERE slug='" . $values['slug'] . "'";
|
135 |
+
|
136 |
+
$slug_already_exists = $wpdb->get_var($query);
|
137 |
+
|
138 |
+
if( $slug_already_exists or !$prli_utils->slugIsAvailable($values['slug']) )
|
139 |
+
$errors[] = "This pretty link slug is already taken, please choose a different one";
|
140 |
+
|
141 |
+
if(isset($values['track_as_img']) and $values['track_as_img'] == 'on' and $values['url'] != null and $values['url'] != '')
|
142 |
+
{
|
143 |
+
$size = getimagesize($values['url']);
|
144 |
+
if(!preg_match('#image#',$size['mime']))
|
145 |
+
{
|
146 |
+
$errors[] = "If you want to track this pretty link as an image then your target url must be an image (png, jpeg, gif, etc.)";
|
147 |
+
}
|
148 |
+
}
|
149 |
+
|
150 |
+
return $errors;
|
151 |
+
}
|
152 |
+
}
|
153 |
+
?>
|
classes/models/PrliReport.php
ADDED
@@ -0,0 +1,226 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
//include PRLI_PATH.'/includes/version-2-ichor/php-ofc-library/open-flash-chart.php';
|
4 |
+
|
5 |
+
class PrliReport {
|
6 |
+
|
7 |
+
function setupClickReport($start_timestamp,$end_timestamp, $link_id = "all", $type = "all")
|
8 |
+
{
|
9 |
+
global $wpdb, $prli_utils;
|
10 |
+
|
11 |
+
$clicks_table = $wpdb->prefix . "prli_clicks";
|
12 |
+
$links_table = $wpdb->prefix . "prli_links";
|
13 |
+
|
14 |
+
// Scrub times and leave the dates
|
15 |
+
$start_timestamp = mktime(0, 0, 0, date('n', $start_timestamp), date('j', $start_timestamp), date('Y', $start_timestamp));
|
16 |
+
$end_timestamp = mktime(0, 0, 0, date('n', $end_timestamp), date('j', $end_timestamp), date('Y', $end_timestamp) );
|
17 |
+
|
18 |
+
$day_timestamp = $start_timestamp;
|
19 |
+
$data_array = array();
|
20 |
+
|
21 |
+
while($day_timestamp <= ($end_timestamp + 60*60*24))
|
22 |
+
{
|
23 |
+
$dyear = date('Y',$day_timestamp);
|
24 |
+
$dmon = date('n',$day_timestamp);
|
25 |
+
$ddom = date('j',$day_timestamp);
|
26 |
+
|
27 |
+
$query = "SELECT count(*) FROM $clicks_table c2 WHERE c2.created_at BETWEEN '$dyear-$dmon-$ddom 00:00:00' AND '$dyear-$dmon-$ddom 23:59:59'";
|
28 |
+
|
29 |
+
if($link_id != "all")
|
30 |
+
{
|
31 |
+
$query .= " AND link_id=$link_id";
|
32 |
+
}
|
33 |
+
|
34 |
+
if($type == "unique")
|
35 |
+
{
|
36 |
+
$query .= " AND first_click=1";
|
37 |
+
}
|
38 |
+
|
39 |
+
$data_array[date("Y-n-j",$day_timestamp)] = (int)$wpdb->get_var($query);
|
40 |
+
$day_timestamp += 60*60*24; // Advance one day
|
41 |
+
}
|
42 |
+
|
43 |
+
$top_click_count = $prli_utils->getTopValue(array_values($data_array));
|
44 |
+
|
45 |
+
if($link_id == "all")
|
46 |
+
$link_slug = "all links";
|
47 |
+
else
|
48 |
+
$link_slug = "'".$wpdb->get_var("SELECT slug FROM $links_table WHERE id=$link_id") . "'";
|
49 |
+
|
50 |
+
if($type == "all")
|
51 |
+
$type_string = "All clicks";
|
52 |
+
else
|
53 |
+
$type_string = "Unique clicks";
|
54 |
+
|
55 |
+
$json_array = array(
|
56 |
+
"elements" => array( array(
|
57 |
+
"type" => "line",
|
58 |
+
"values" => array_values($data_array),
|
59 |
+
"dot-style" => array(
|
60 |
+
"type" => "dot",
|
61 |
+
"dot-size" => 4,
|
62 |
+
"colour" => "#ffc94e",
|
63 |
+
"halo-size" => 1,
|
64 |
+
"tip" => "#val# $type_string"
|
65 |
+
),
|
66 |
+
"width" => 2
|
67 |
+
) ),
|
68 |
+
"title" => array(
|
69 |
+
"text" => 'Pretty Link: '.$type_string.' on '.$link_slug. ' between ' . date("Y-n-j",$start_timestamp) . ' and ' . date("Y-n-j",$end_timestamp),
|
70 |
+
"style" => "font-size: 16px; font-weight: bold; color: #3030d0; text-align: center; padding-bottom: 5px;"
|
71 |
+
),
|
72 |
+
"bg_colour" => "-1",
|
73 |
+
"y_axis" => array(
|
74 |
+
"min" => 0,
|
75 |
+
"max" => $top_click_count,
|
76 |
+
"steps" => (int)(($top_click_count>=10)?$top_click_count/10:1),
|
77 |
+
"colour" => "#A2ACBA"
|
78 |
+
),
|
79 |
+
"x_axis" => array(
|
80 |
+
"colour" => "#A2ACBA",
|
81 |
+
"grid-colour" => "#ffefa7",
|
82 |
+
"offset" => false,
|
83 |
+
"steps" => 4,
|
84 |
+
"labels" => array(
|
85 |
+
"steps" => 2,
|
86 |
+
"rotate" => 45,
|
87 |
+
"colour" => "#000000",
|
88 |
+
"labels" => array_keys($data_array)
|
89 |
+
)
|
90 |
+
)
|
91 |
+
);
|
92 |
+
|
93 |
+
return $this->prli_json_encode($json_array);
|
94 |
+
|
95 |
+
/*
|
96 |
+
$title = new title('Pretty Link: '.$type_string.' on '.$link_slug. ' between ' . date("Y-n-j",$start_timestamp) . ' and ' . date("Y-n-j",$end_timestamp));
|
97 |
+
|
98 |
+
$title->set_style('font-size: 16px; font-weight: bold; color: #3030d0; text-align: center; padding-bottom: 5px;');
|
99 |
+
|
100 |
+
$default_dot = new dot();
|
101 |
+
$default_dot->size(4);
|
102 |
+
//$default_dot->rotation(-15);
|
103 |
+
//$default_dot->hollow(false);
|
104 |
+
$default_dot->colour('#ffc94e');
|
105 |
+
$default_dot->halo_size(1);
|
106 |
+
$default_dot->tooltip( '#val# Clicks' );
|
107 |
+
|
108 |
+
$line = new line();
|
109 |
+
$line->set_default_dot_style($default_dot);
|
110 |
+
$line->set_values( array_values($data_array) );
|
111 |
+
$line->set_width(2);
|
112 |
+
|
113 |
+
$y = new y_axis();
|
114 |
+
$y->set_range( 0, $top_click_count, (int)(($top_click_count>=10)?$top_click_count/10:1) );
|
115 |
+
$y->set_colour( '#A2ACBA' );
|
116 |
+
|
117 |
+
$chart = new open_flash_chart();
|
118 |
+
$chart->set_title( $title );
|
119 |
+
$chart->set_bg_colour("-1");
|
120 |
+
$chart->set_y_axis( $y );
|
121 |
+
$chart->add_element( $line );
|
122 |
+
|
123 |
+
$x_labels = new x_axis_labels();
|
124 |
+
$x_labels->set_steps( 2 );
|
125 |
+
$x_labels->rotate(45);
|
126 |
+
$x_labels->set_colour( '#000000' );
|
127 |
+
$x_labels->set_labels( array_keys($data_array) );
|
128 |
+
|
129 |
+
$x = new x_axis();
|
130 |
+
$x->set_colour( '#A2ACBA' );
|
131 |
+
$x->set_grid_colour( '#ffefa7' );
|
132 |
+
$x->set_offset( false );
|
133 |
+
$x->set_steps(4);
|
134 |
+
|
135 |
+
// Add the X Axis Labels to the X Axis
|
136 |
+
$x->set_labels( $x_labels );
|
137 |
+
$chart->set_x_axis( $x );
|
138 |
+
|
139 |
+
return $chart->toPrettyString();
|
140 |
+
*/
|
141 |
+
}
|
142 |
+
|
143 |
+
// Detects whether an array is a true numerical array or an
|
144 |
+
// associative array (or hash).
|
145 |
+
function prli_array_type($item)
|
146 |
+
{
|
147 |
+
$array_type = 'unknown';
|
148 |
+
|
149 |
+
if(is_array($item))
|
150 |
+
{
|
151 |
+
$array_type = 'array';
|
152 |
+
|
153 |
+
foreach($item as $key => $value)
|
154 |
+
{
|
155 |
+
if(!is_numeric($key))
|
156 |
+
{
|
157 |
+
$array_type = 'hash';
|
158 |
+
break;
|
159 |
+
}
|
160 |
+
}
|
161 |
+
}
|
162 |
+
|
163 |
+
return $array_type;
|
164 |
+
}
|
165 |
+
|
166 |
+
// This eliminates the need to use php's built in json_encoder
|
167 |
+
// which only works with PHP 5.2 and above.
|
168 |
+
function prli_json_encode($json_array)
|
169 |
+
{
|
170 |
+
$json_str = '';
|
171 |
+
|
172 |
+
if(is_array($json_array))
|
173 |
+
{
|
174 |
+
if($this->prli_array_type($json_array) == 'array')
|
175 |
+
{
|
176 |
+
$first = true;
|
177 |
+
$json_str .= "[";
|
178 |
+
foreach($json_array as $item)
|
179 |
+
{
|
180 |
+
if(!$first)
|
181 |
+
$json_str .= ",";
|
182 |
+
|
183 |
+
if(is_numeric($item))
|
184 |
+
$json_str .= (($item < 0)?"\"$item\"":$item);
|
185 |
+
else if(is_array($item))
|
186 |
+
$json_str .= $this->prli_json_encode($item);
|
187 |
+
else if(is_string($item))
|
188 |
+
$json_str .= '"'.$item.'"';
|
189 |
+
else if(is_bool($item))
|
190 |
+
$json_str .= (($item)?"true":"false");
|
191 |
+
|
192 |
+
$first = false;
|
193 |
+
}
|
194 |
+
$json_str .= "]";
|
195 |
+
}
|
196 |
+
else if($this->prli_array_type($json_array) == 'hash')
|
197 |
+
{
|
198 |
+
$first = true;
|
199 |
+
$json_str .= "{";
|
200 |
+
foreach($json_array as $key => $item)
|
201 |
+
{
|
202 |
+
if(!$first)
|
203 |
+
$json_str .= ",";
|
204 |
+
|
205 |
+
$json_str .= "\"$key\":";
|
206 |
+
|
207 |
+
if(is_numeric($item))
|
208 |
+
$json_str .= (($item < 0)?"\"$item\"":$item);
|
209 |
+
else if(is_array($item))
|
210 |
+
$json_str .= $this->prli_json_encode($item);
|
211 |
+
else if(is_string($item))
|
212 |
+
$json_str .= "\"$item\"";
|
213 |
+
else if(is_bool($item))
|
214 |
+
$json_str .= (($item)?"true":"false");
|
215 |
+
|
216 |
+
$first = false;
|
217 |
+
}
|
218 |
+
$json_str .= "}";
|
219 |
+
}
|
220 |
+
}
|
221 |
+
|
222 |
+
return $json_str;
|
223 |
+
}
|
224 |
+
}
|
225 |
+
|
226 |
+
?>
|
classes/models/PrliUtils.php
ADDED
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
require_once 'models.inc.php';
|
3 |
+
|
4 |
+
class PrliUtils
|
5 |
+
{
|
6 |
+
|
7 |
+
/** Okay I realize that Percentagize isn't really a word but
|
8 |
+
* this is so that the values we have will work with google
|
9 |
+
* charts.
|
10 |
+
*/
|
11 |
+
function percentagizeArray($data,$max_value)
|
12 |
+
{
|
13 |
+
$new_data = array();
|
14 |
+
foreach($data as $point)
|
15 |
+
{
|
16 |
+
if( $max_value > 0 )
|
17 |
+
{
|
18 |
+
$new_data[] = $point / $max_value * 100;
|
19 |
+
}
|
20 |
+
else
|
21 |
+
{
|
22 |
+
$new_data[] = 0;
|
23 |
+
}
|
24 |
+
}
|
25 |
+
return $new_data;
|
26 |
+
}
|
27 |
+
|
28 |
+
function getTopValue($values_array)
|
29 |
+
{
|
30 |
+
rsort($values_array);
|
31 |
+
return $values_array[0];
|
32 |
+
}
|
33 |
+
|
34 |
+
function getFirstClickDate()
|
35 |
+
{
|
36 |
+
global $wpdb;
|
37 |
+
|
38 |
+
$clicks_table = $wpdb->prefix . "prli_clicks";
|
39 |
+
$query = "SELECT created_at FROM $clicks_table ORDER BY created_at LIMIT 1";
|
40 |
+
$first_click = $wpdb->get_var($query);
|
41 |
+
|
42 |
+
if(isset($first_click))
|
43 |
+
{
|
44 |
+
return strtotime($first_click);
|
45 |
+
}
|
46 |
+
else
|
47 |
+
return null;
|
48 |
+
}
|
49 |
+
|
50 |
+
function getMonthsArray()
|
51 |
+
{
|
52 |
+
global $wpdb;
|
53 |
+
global $prli_click;
|
54 |
+
|
55 |
+
$months = array();
|
56 |
+
$year = date("Y");
|
57 |
+
$month = date("m");
|
58 |
+
$current_timestamp = time();
|
59 |
+
$current_month_timestamp = mktime(0, 0, 0, date("m", $current_timestamp), 1, date("Y", $current_timestamp));
|
60 |
+
|
61 |
+
$clicks_table = $prli_click->tableName();
|
62 |
+
$first_click = $wpdb->get_var("SELECT created_at FROM $clicks_table ORDER BY created_at LIMIT 1;");
|
63 |
+
$first_timestamp = ((empty($first_click))?$current_timestamp:strtotime($first_click));
|
64 |
+
$first_date = mktime(0, 0, 0, date("m", $first_timestamp), 1, date("Y", $first_timestamp));
|
65 |
+
|
66 |
+
while($current_month_timestamp >= $first_date)
|
67 |
+
{
|
68 |
+
$months[] = $current_month_timestamp;
|
69 |
+
if(date("m") == 1)
|
70 |
+
{
|
71 |
+
$current_month_timestamp = mktime(0, 0, 0, 12, 1, date("Y", $current_month_timestamp)-1);
|
72 |
+
}
|
73 |
+
else
|
74 |
+
{
|
75 |
+
$current_month_timestamp = mktime(0, 0, 0, date("m", $current_month_timestamp)-1, 1, date("Y", $current_month_timestamp));
|
76 |
+
}
|
77 |
+
}
|
78 |
+
return $months;
|
79 |
+
}
|
80 |
+
|
81 |
+
// For Pagination
|
82 |
+
function getLastRecordNum($r_count,$current_p,$p_size)
|
83 |
+
{
|
84 |
+
return (($r_count < ($current_p * $p_size))?$r_count:($current_p * $p_size));
|
85 |
+
}
|
86 |
+
|
87 |
+
// For Pagination
|
88 |
+
function getFirstRecordNum($r_count,$current_p,$p_size)
|
89 |
+
{
|
90 |
+
if($current_p == 1)
|
91 |
+
{
|
92 |
+
return 1;
|
93 |
+
}
|
94 |
+
else
|
95 |
+
{
|
96 |
+
return ($this->getLastRecordNum($r_count,($current_p - 1),$p_size) + 1);
|
97 |
+
}
|
98 |
+
}
|
99 |
+
|
100 |
+
function slugIsAvailable($slug)
|
101 |
+
{
|
102 |
+
global $wpdb;
|
103 |
+
|
104 |
+
$posts_table = $wpdb->prefix . "posts";
|
105 |
+
$terms_table = $wpdb->prefix . "terms";
|
106 |
+
|
107 |
+
$post_slug = $wpdb->get_var("SELECT post_name FROM $posts_table WHERE post_name='$slug'");
|
108 |
+
$term_slug = $wpdb->get_col("SELECT slug FROM $terms_table WHERE slug='$slug'");
|
109 |
+
|
110 |
+
return ( $post_slug != $slug and $term_slug != $slug );
|
111 |
+
}
|
112 |
+
|
113 |
+
}
|
114 |
+
?>
|
classes/models/models.inc.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
require_once(PRLI_MODELS_PATH.'/PrliLink.php');
|
3 |
+
require_once(PRLI_MODELS_PATH.'/PrliReport.php');
|
4 |
+
require_once(PRLI_MODELS_PATH.'/PrliUtils.php');
|
5 |
+
|
6 |
+
$prli_link = new PrliLink();
|
7 |
+
$prli_report = new PrliReport();
|
8 |
+
$prli_utils = new PrliUtils();
|
9 |
+
?>
|
classes/views/prli-links/edit.php
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/> Pretty Link: Edit Link</h2>
|
3 |
+
|
4 |
+
<?php
|
5 |
+
require(PRLI_VIEWS_PATH.'/shared/errors.php');
|
6 |
+
?>
|
7 |
+
|
8 |
+
<form name="form1" method="post" action="?page=<?php print PRLI_PLUGIN_NAME ?>/prli-links.php">
|
9 |
+
<input type="hidden" name="action" value="update">
|
10 |
+
<input type="hidden" name="id" value="<?php print $id; ?>">
|
11 |
+
<?php wp_nonce_field('update-options'); ?>
|
12 |
+
|
13 |
+
<table class="form-table">
|
14 |
+
<tr>
|
15 |
+
<td width="75px" valign="top">URL*: </td>
|
16 |
+
<td><input type="text" name="url" value="<?php print (($_POST['url'] != null and $record == null)?$_POST['url']:$record->url); ?>" size="75">
|
17 |
+
<br/><span class="setting-description">Enter the URL you want to mask and track. Don't forget to start your url with <code>http://</code> or <code>https://</code>. Example: <code>http://www.yoururl.com</code></span></td>
|
18 |
+
</tr>
|
19 |
+
<tr>
|
20 |
+
<td valign="top">Pretty Link*: </td>
|
21 |
+
<td><strong><?php print get_option('siteurl'); ?></strong>/<input type="text" name="slug" value="<?php print (($_POST['slug'] != null and $record == null)?$_POST['slug']:$record->slug); ?>" size="25">
|
22 |
+
<br/><span class="setting-description">Enter the slug (word trailing your main URL) that will form your pretty link and redirect to the URL above.</span></td>
|
23 |
+
</tr>
|
24 |
+
</table>
|
25 |
+
<a href="#" class="advanced_toggle">Advanced Options</a>
|
26 |
+
<div class="advanced_pane" style="display:none;">
|
27 |
+
<table class="form-table">
|
28 |
+
<tr>
|
29 |
+
<td colspan="2">
|
30 |
+
<input type="checkbox" name="forward_params" <?php print ((($_POST['forward_params'] or $record->forward_params) and ($_POST['forward_params'] == 'on' or $record->forward_params == 1))?'checked="true"':''); ?>/> Forward Parameters (experimental)
|
31 |
+
<br/><span class="setting-description">Select this option if you want to forward custom parameters through your pretty link to your target url. Note: The Pretty Link plugin uses a parameter named <code>sprli</code> for tracking purposes and is therefore not available as one of your custom parameters.</span>
|
32 |
+
</td>
|
33 |
+
</tr>
|
34 |
+
<tr>
|
35 |
+
<td colspan="2">
|
36 |
+
<input type="checkbox" name="track_as_img" <?php print ((($_POST['track_as_img'] or $record->track_as_img) and ($_POST['track_as_img'] == 'on' or $record->track_as_img == 1))?'checked="true"':''); ?>/> Track as an Image (experimental)
|
37 |
+
<br/><span class="setting-description">Select this option if you want to track this link as an image instead of as a link. This option is useful if you want to track the number of times a page or email is opened. If you place your Pretty Link inside an img tag on the page (Example: <code><img src="<?php echo get_option('siteurl') . "/yourslug"; ?>" /></code>) then the image will be tracked as a click and then displayed. Note: If this option is selected your target url must be an image.</span>
|
38 |
+
</td>
|
39 |
+
</tr>
|
40 |
+
</table>
|
41 |
+
</div>
|
42 |
+
|
43 |
+
<p class="submit">
|
44 |
+
<input type="submit" name="Submit" value="Update" /> or <a href="?page=<?php print PRLI_PLUGIN_NAME ?>/prli-links.php">Cancel</a>
|
45 |
+
</p>
|
46 |
+
|
47 |
+
</form>
|
48 |
+
</div>
|
classes/views/prli-links/list.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/> Pretty Link: Links</h2>
|
3 |
+
<div id="message" class="updated fade" style="padding:5px;"><?php echo $prli_message; ?></div>
|
4 |
+
<p><a href="?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-links.php&action=new"><img src="<?php echo PRLI_URL.'/images/pretty-link-add.png'; ?>"/> Add a Pretty Link</a> | <a href="?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-links.php®enerate=true">Manually Regenerate Pretty Links</a></p>
|
5 |
+
<?php
|
6 |
+
require(PRLI_VIEWS_PATH.'/shared/table-nav.php');
|
7 |
+
?>
|
8 |
+
<table class="widefat post fixed" cellspacing="0">
|
9 |
+
<thead>
|
10 |
+
<tr>
|
11 |
+
<th class="manage-column" width="25%">Slug</th>
|
12 |
+
<th class="manage-column" width="10%">Clicks</th>
|
13 |
+
<th class="manage-column" width="40%">URL</th>
|
14 |
+
<th class="manage-column" width="25%">Pretty Link</th>
|
15 |
+
</tr>
|
16 |
+
</thead>
|
17 |
+
<?php
|
18 |
+
|
19 |
+
if(count($links) <= 0)
|
20 |
+
{
|
21 |
+
?>
|
22 |
+
<tr>
|
23 |
+
<td colspan="5"><a href="?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-links.php&action=new"><img src="<?php echo PRLI_URL.'/images/pretty-link-add.png'; ?>"/> Add your First Pretty Link</a></td>
|
24 |
+
</tr>
|
25 |
+
<?php
|
26 |
+
}
|
27 |
+
else
|
28 |
+
{
|
29 |
+
foreach($links as $link)
|
30 |
+
{
|
31 |
+
$pretty_link_url = get_option('siteurl') . '/' . $link->slug;
|
32 |
+
?>
|
33 |
+
<tr>
|
34 |
+
<td class="edit_link">
|
35 |
+
<a href="<? print $pretty_link_url; ?>" target="_blank" title="Visit <?php echo $pretty_link_url; ?> in New Window"><img src="<?php echo PRLI_URL.'/images/url_icon.gif'; ?>" name="Visit" alt="Visit"/></a> <a class="slug_name" href="?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-links.php&action=edit&id=<?php print $link->id; ?>" title="Edit <?php echo $link->slug; ?>"><?php print $link->slug; ?></a>
|
36 |
+
<br/>
|
37 |
+
<div class="link_actions" style="display:none;">
|
38 |
+
<a href="?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-links.php&action=edit&id=<?php print $link->id; ?>" title="Edit <?php echo $link->slug; ?>">Edit</a> | <a href="?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-links.php&action=destroy&id=<?php print $link->id; ?>" onclick="return confirm('Are you sure you want to delete your <?php print $link->slug; ?> Pretty Link?');" title="Delete <?php echo $link->slug; ?>">Destroy</a> | <a href="http://twitter.com/home?status=<?php echo $pretty_link_url; ?>" target="_blank" title="Post <?php echo $pretty_link_url; ?> to Twitter">Twitter</a> | <a href="mailto:?subject=Pretty Link&body=<?php echo $pretty_link_url; ?>" target="_blank" title="Send <?php echo $pretty_link_url; ?> in an Email">Email</a>
|
39 |
+
</div>
|
40 |
+
</td>
|
41 |
+
<td><?php print $link->clicks; ?></td>
|
42 |
+
<td><a href="<? print $link->url; ?>" target="_blank" title="Visit <?php echo $link->url; ?> in New Window"><img src="<?php echo PRLI_URL.'/images/url_icon.gif'; ?>" name="Visit" alt="Visit"/></a> <? print $link->url; ?></td>
|
43 |
+
<td><input type='text' style="font-size: 10px;" readonly="true" onclick='this.select();' onfocus='this.select();' value='<?php echo $pretty_link_url; ?>' size="30" /></td>
|
44 |
+
</tr>
|
45 |
+
<?php
|
46 |
+
}
|
47 |
+
}
|
48 |
+
?>
|
49 |
+
<tfoot>
|
50 |
+
<tr>
|
51 |
+
<th class="manage-column">Slug</th>
|
52 |
+
<th class="manage-column">Clicks</th>
|
53 |
+
<th class="manage-column">URL</th>
|
54 |
+
<th class="manage-column">Pretty Link</th>
|
55 |
+
</tr>
|
56 |
+
</tfoot>
|
57 |
+
</table>
|
58 |
+
<?php
|
59 |
+
require(PRLI_VIEWS_PATH.'/shared/table-nav.php');
|
60 |
+
?>
|
61 |
+
|
62 |
+
</div>
|
classes/views/prli-links/new.php
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/> Pretty Link: Add Link</h2>
|
3 |
+
|
4 |
+
<?php
|
5 |
+
require(PRLI_VIEWS_PATH.'/shared/errors.php');
|
6 |
+
?>
|
7 |
+
|
8 |
+
<form name="form1" method="post" action="?page=<?php print PRLI_PLUGIN_NAME ?>/prli-links.php">
|
9 |
+
<input type="hidden" name="action" value="create">
|
10 |
+
<?php wp_nonce_field('update-options'); ?>
|
11 |
+
<input type="hidden" name="id" value="<?php print $id; ?>">
|
12 |
+
|
13 |
+
<table class="form-table">
|
14 |
+
<tr>
|
15 |
+
<td width="75px" valign="top">URL*: </td>
|
16 |
+
<td><input type="text" name="url" value="<?php print (($_POST['url'] != null)?$_POST['url']:''); ?>" size="75">
|
17 |
+
<br/><span class="setting-description">Enter the URL you want to mask and track. Don't forget to start your url with <code>http://</code> or <code>https://</code>. Example: <code>http://www.yoururl.com</code></span></td>
|
18 |
+
</tr>
|
19 |
+
<tr>
|
20 |
+
<td valign="top">Pretty Link*: </td>
|
21 |
+
<td><strong><?php print get_option('siteurl'); ?></strong>/<input type="text" name="slug" value="<?php print (($_POST['slug'] != null)?$_POST['slug']:$prli_link->generateValidSlug()); ?>" size="25">
|
22 |
+
<br/><span class="setting-description">Use the auto-generated short slug (2-3 characters) here or enter any word (must only contain letters, numbers or the following special characters: ".","-" or "_") that will form your pretty link and redirect to the URL above. Just refresh this page to auto-generate another slug.</span></td>
|
23 |
+
</tr>
|
24 |
+
</table>
|
25 |
+
<a href="#" class="advanced_toggle">Advanced Options</a>
|
26 |
+
<div class="advanced_pane" style="display:none;">
|
27 |
+
<table class="form-table">
|
28 |
+
<tr>
|
29 |
+
<td colspan="2">
|
30 |
+
<input type="checkbox" name="forward_params" <?php print ((isset($_POST['forward_params']) and $_POST['forward_params'] == 'on')?'checked="true"':''); ?>/> Forward Parameters (experimental)
|
31 |
+
<br/><span class="setting-description">Select this option if you want to forward custom parameters through your pretty link to your target url. Note: The Pretty Link plugin uses a parameter named <code>sprli</code> for tracking purposes and is therefore not available as one of your custom parameters.</span>
|
32 |
+
</td>
|
33 |
+
</tr>
|
34 |
+
<tr>
|
35 |
+
<td colspan="2">
|
36 |
+
<input type="checkbox" name="track_as_img" <?php print ((isset($_POST['track_as_img']) and $_POST['track_as_img'] == 'on')?'checked="true"':''); ?>/> Track as an Image (experimental)
|
37 |
+
<br/><span class="setting-description">Select this option if you want to track this link as an image instead of as a link. This option is useful if you want to track the number of times a page or email is opened. If you place your Pretty Link inside an img tag on the page (Example: <code><img src="<?php echo get_option('siteurl') . "/yourslug"; ?>" /></code>) then the image will be tracked as a click and then displayed. Note: If this option is selected your target url must be an image.</span>
|
38 |
+
</td>
|
39 |
+
</tr>
|
40 |
+
</table>
|
41 |
+
</div>
|
42 |
+
|
43 |
+
<p class="submit">
|
44 |
+
<input type="submit" name="Submit" value="Create" /> or <a href="?page=<?php print PRLI_PLUGIN_NAME ?>/prli-links.php">Cancel</a>
|
45 |
+
</p>
|
46 |
+
|
47 |
+
</form>
|
48 |
+
</div>
|
classes/views/prli-reports/form.php
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="wrap">
|
2 |
+
<h2><img src="<?php echo PRLI_URL.'/images/pretty-link-med.png'; ?>"/> Pretty Link: Reports</h2>
|
3 |
+
<a href="#" class="filter_toggle">Customize Report</a>
|
4 |
+
<div class="filter_pane" style="display:none;">
|
5 |
+
<form class="form-fields" name="form2" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
|
6 |
+
<?php wp_nonce_field('prli-reports'); ?>
|
7 |
+
<span>Link:</span>
|
8 |
+
<select id="link" name="link" style="display: inline;">
|
9 |
+
<option value="all"<?php print ((!isset($_POST['link']) or $_POST['link'] == "all")?" selected=\"true\"":""); ?>>All </option>
|
10 |
+
<?php
|
11 |
+
foreach($prli_link->getAll() as $link)
|
12 |
+
{
|
13 |
+
?>
|
14 |
+
<option value="<?php print $link->id; ?>"<?php print (($_POST['link'] == $link->id)?" selected=\"true\"":""); ?>><?php print $link->slug; ?> </option>
|
15 |
+
<?php
|
16 |
+
}
|
17 |
+
?>
|
18 |
+
</select>
|
19 |
+
<span>Type:</span>
|
20 |
+
<select id="type" name="type" style="display: inline;">
|
21 |
+
<option value="all"<?php print ((!isset($_POST['type']) or $_POST['type'] == "all")?" selected=\"true\"":""); ?>>All Clicks </option>
|
22 |
+
<option value="unique"<?php print (($_POST['type'] == "unique")?" selected=\"true\"":""); ?>>Unique Clicks </option>
|
23 |
+
</select>
|
24 |
+
<br/>
|
25 |
+
<br/>
|
26 |
+
<span>Date Range:</span>
|
27 |
+
<div id="dateselectors" style="display: inline;">
|
28 |
+
<input type="text" name="sdate" id="sdate" value="<?php echo $_POST['sdate']; ?>" style="display:inline;"/> to <input type="text" name="edate" id="edate" value="<?php echo $_POST['edate']; ?>" style="display:inline;"/>
|
29 |
+
</div>
|
30 |
+
<br/>
|
31 |
+
<br/>
|
32 |
+
<div class="submit" style="display: inline;"><input type="submit" name="Submit" value="Customize"/> or <a href="#" class="filter_toggle">Cancel</a></div>
|
33 |
+
</form>
|
34 |
+
</div>
|
35 |
+
<br/>
|
36 |
+
<div id="my_chart"></div>
|
37 |
+
</div>
|
classes/views/shared/errors.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if( $errors != null and count($errors) > 0 )
|
3 |
+
{
|
4 |
+
?>
|
5 |
+
<div class="error">
|
6 |
+
<ul>
|
7 |
+
<?php
|
8 |
+
foreach( $errors as $error )
|
9 |
+
{
|
10 |
+
?>
|
11 |
+
<li><strong>ERROR</strong>: <?php print $error; ?></li>
|
12 |
+
<?php
|
13 |
+
}
|
14 |
+
?>
|
15 |
+
</ul>
|
16 |
+
</div>
|
17 |
+
<?php
|
18 |
+
}
|
19 |
+
?>
|
classes/views/shared/table-nav.php
ADDED
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// Only show the pager bar if there is more than 1 page
|
3 |
+
if($page_count > 1)
|
4 |
+
{
|
5 |
+
?>
|
6 |
+
<div class="tablenav">
|
7 |
+
<div class='tablenav-pages'><span class="displaying-num">Displaying <?php print "$page_first_record–$page_last_record of $record_count"; ?></span>
|
8 |
+
|
9 |
+
<?php
|
10 |
+
// Only show the prev page button if the current page is not the first page
|
11 |
+
if($current_page > 1)
|
12 |
+
{
|
13 |
+
?>
|
14 |
+
<a class='prev page-numbers' href='?page=<?php print PRLI_PLUGIN_NAME; ?>/<?php print $controller_file . $page_params; ?>&paged=<?php print($current_page-1); ?>'>«</a>
|
15 |
+
<?php
|
16 |
+
}
|
17 |
+
|
18 |
+
// First page is always displayed
|
19 |
+
if($current_page==1)
|
20 |
+
{
|
21 |
+
?>
|
22 |
+
<span class='page-numbers current'>1</span>
|
23 |
+
<?php
|
24 |
+
}
|
25 |
+
else
|
26 |
+
{
|
27 |
+
?>
|
28 |
+
<a class='page-numbers' href='?page=<?php print PRLI_PLUGIN_NAME; ?>/<?php print $controller_file . $page_params; ?>&paged=1'>1</a>
|
29 |
+
<?php
|
30 |
+
}
|
31 |
+
|
32 |
+
// If the current page is more than 2 spaces away from the first page then we put some dots in here
|
33 |
+
if($current_page >= 5)
|
34 |
+
{
|
35 |
+
?>
|
36 |
+
<span class='page-numbers dots'>...</span>
|
37 |
+
<?php
|
38 |
+
}
|
39 |
+
|
40 |
+
// display the current page icon and the 2 pages beneath and above it
|
41 |
+
$low_page = (($current_page >= 5)?($current_page-2):2);
|
42 |
+
$high_page = ((($current_page + 2) < ($page_count-1))?($current_page+2):($page_count-1));
|
43 |
+
for($i = $low_page; $i <= $high_page; $i++)
|
44 |
+
{
|
45 |
+
if($current_page==$i)
|
46 |
+
{
|
47 |
+
?>
|
48 |
+
<span class='page-numbers current'><?php print $i; ?></span>
|
49 |
+
<?php
|
50 |
+
}
|
51 |
+
else
|
52 |
+
{
|
53 |
+
?>
|
54 |
+
<a class='page-numbers' href='?page=<?php print PRLI_PLUGIN_NAME; ?>/<?php print $controller_file . $page_params; ?>&paged=<?php print $i; ?>'><?php print $i; ?></a>
|
55 |
+
<?php
|
56 |
+
}
|
57 |
+
}
|
58 |
+
|
59 |
+
// If the current page is more than 2 away from the last page then show ellipsis
|
60 |
+
if($current_page < ($page_count - 3))
|
61 |
+
{
|
62 |
+
?>
|
63 |
+
<span class='page-numbers dots'>...</span>
|
64 |
+
<?php
|
65 |
+
}
|
66 |
+
|
67 |
+
// Display the last page icon
|
68 |
+
if($current_page == $page_count)
|
69 |
+
{
|
70 |
+
?>
|
71 |
+
<span class='page-numbers current'><?php print $page_count; ?></span>
|
72 |
+
<?php
|
73 |
+
}
|
74 |
+
else
|
75 |
+
{
|
76 |
+
?>
|
77 |
+
<a class='page-numbers' href='?page=<?php print PRLI_PLUGIN_NAME; ?>/<?php print $controller_file . $page_params; ?>&paged=<?php print $page_count; ?>'><?php print $page_count; ?></a>
|
78 |
+
<?php
|
79 |
+
}
|
80 |
+
|
81 |
+
// Display the next page icon if there is a next page
|
82 |
+
if($current_page < $page_count)
|
83 |
+
{
|
84 |
+
?>
|
85 |
+
<a class='next page-numbers' href='?page=<?php print PRLI_PLUGIN_NAME; ?>/<?php print $controller_file . $page_params; ?>&paged=<?php print($current_page + 1); ?>'>»</a>
|
86 |
+
<?php
|
87 |
+
}
|
88 |
+
?>
|
89 |
+
</div>
|
90 |
+
</div>
|
91 |
+
<?php
|
92 |
+
}
|
93 |
+
?>
|
images/bookmark.png
ADDED
Binary file
|
images/pretty-link-add.png
ADDED
Binary file
|
images/pretty-link-med.png
ADDED
Binary file
|
images/pretty-link-small.png
ADDED
Binary file
|
images/url_icon.gif
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-icons_222222_256x240.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-icons_228ef1_256x240.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-icons_ef8c08_256x240.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-icons_ffd27a_256x240.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/images/ui-icons_ffffff_256x240.png
ADDED
Binary file
|
includes/jquery/css/ui-lightness/jquery-ui-1.7.1.custom.css
ADDED
@@ -0,0 +1,404 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* jQuery UI CSS Framework
|
3 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
4 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
|
5 |
+
*/
|
6 |
+
|
7 |
+
/* Layout helpers
|
8 |
+
----------------------------------*/
|
9 |
+
.ui-helper-hidden { display: none; }
|
10 |
+
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
|
11 |
+
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
|
12 |
+
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
13 |
+
.ui-helper-clearfix { display: inline-block; }
|
14 |
+
/* required comment for clearfix to work in Opera \*/
|
15 |
+
* html .ui-helper-clearfix { height:1%; }
|
16 |
+
.ui-helper-clearfix { display:block; }
|
17 |
+
/* end clearfix */
|
18 |
+
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
|
19 |
+
|
20 |
+
|
21 |
+
/* Interaction Cues
|
22 |
+
----------------------------------*/
|
23 |
+
.ui-state-disabled { cursor: default !important; }
|
24 |
+
|
25 |
+
|
26 |
+
/* Icons
|
27 |
+
----------------------------------*/
|
28 |
+
|
29 |
+
/* states and images */
|
30 |
+
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
|
31 |
+
|
32 |
+
|
33 |
+
/* Misc visuals
|
34 |
+
----------------------------------*/
|
35 |
+
|
36 |
+
/* Overlays */
|
37 |
+
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
|
38 |
+
|
39 |
+
/*
|
40 |
+
* jQuery UI CSS Framework
|
41 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
42 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
|
43 |
+
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
|
44 |
+
*/
|
45 |
+
|
46 |
+
|
47 |
+
/* Component containers
|
48 |
+
----------------------------------*/
|
49 |
+
.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
|
50 |
+
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
|
51 |
+
.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
|
52 |
+
.ui-widget-content a { color: #333333; }
|
53 |
+
.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
|
54 |
+
.ui-widget-header a { color: #ffffff; }
|
55 |
+
|
56 |
+
/* Interaction states
|
57 |
+
----------------------------------*/
|
58 |
+
.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; outline: none; }
|
59 |
+
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; outline: none; }
|
60 |
+
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; outline: none; }
|
61 |
+
.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; outline: none; }
|
62 |
+
.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; outline: none; }
|
63 |
+
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; outline: none; text-decoration: none; }
|
64 |
+
|
65 |
+
/* Interaction Cues
|
66 |
+
----------------------------------*/
|
67 |
+
.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
|
68 |
+
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
|
69 |
+
.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
|
70 |
+
.ui-state-error a, .ui-widget-content .ui-state-error a { color: #ffffff; }
|
71 |
+
.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; }
|
72 |
+
.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
|
73 |
+
.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
|
74 |
+
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
|
75 |
+
|
76 |
+
/* Icons
|
77 |
+
----------------------------------*/
|
78 |
+
|
79 |
+
/* states and images */
|
80 |
+
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
|
81 |
+
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
|
82 |
+
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
|
83 |
+
.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
|
84 |
+
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
|
85 |
+
.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
|
86 |
+
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
|
87 |
+
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
|
88 |
+
|
89 |
+
/* positioning */
|
90 |
+
.ui-icon-carat-1-n { background-position: 0 0; }
|
91 |
+
.ui-icon-carat-1-ne { background-position: -16px 0; }
|
92 |
+
.ui-icon-carat-1-e { background-position: -32px 0; }
|
93 |
+
.ui-icon-carat-1-se { background-position: -48px 0; }
|
94 |
+
.ui-icon-carat-1-s { background-position: -64px 0; }
|
95 |
+
.ui-icon-carat-1-sw { background-position: -80px 0; }
|
96 |
+
.ui-icon-carat-1-w { background-position: -96px 0; }
|
97 |
+
.ui-icon-carat-1-nw { background-position: -112px 0; }
|
98 |
+
.ui-icon-carat-2-n-s { background-position: -128px 0; }
|
99 |
+
.ui-icon-carat-2-e-w { background-position: -144px 0; }
|
100 |
+
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
101 |
+
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
102 |
+
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
103 |
+
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
104 |
+
.ui-icon-triangle-1-s { background-position: -64px -16px; }
|
105 |
+
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
106 |
+
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
107 |
+
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
108 |
+
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
109 |
+
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
110 |
+
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
111 |
+
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
112 |
+
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
113 |
+
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
114 |
+
.ui-icon-arrow-1-s { background-position: -64px -32px; }
|
115 |
+
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
116 |
+
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
117 |
+
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
118 |
+
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
119 |
+
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
120 |
+
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
121 |
+
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
122 |
+
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
123 |
+
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
124 |
+
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
125 |
+
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
126 |
+
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
|
127 |
+
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
128 |
+
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
129 |
+
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
130 |
+
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
131 |
+
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
132 |
+
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
133 |
+
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
134 |
+
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
135 |
+
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
136 |
+
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
137 |
+
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
138 |
+
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
139 |
+
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
140 |
+
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
141 |
+
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
142 |
+
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
143 |
+
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
144 |
+
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
145 |
+
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
146 |
+
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
147 |
+
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
148 |
+
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
149 |
+
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
150 |
+
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
151 |
+
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
152 |
+
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
153 |
+
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
154 |
+
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
155 |
+
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
156 |
+
.ui-icon-extlink { background-position: -32px -80px; }
|
157 |
+
.ui-icon-newwin { background-position: -48px -80px; }
|
158 |
+
.ui-icon-refresh { background-position: -64px -80px; }
|
159 |
+
.ui-icon-shuffle { background-position: -80px -80px; }
|
160 |
+
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
161 |
+
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
162 |
+
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
163 |
+
.ui-icon-folder-open { background-position: -16px -96px; }
|
164 |
+
.ui-icon-document { background-position: -32px -96px; }
|
165 |
+
.ui-icon-document-b { background-position: -48px -96px; }
|
166 |
+
.ui-icon-note { background-position: -64px -96px; }
|
167 |
+
.ui-icon-mail-closed { background-position: -80px -96px; }
|
168 |
+
.ui-icon-mail-open { background-position: -96px -96px; }
|
169 |
+
.ui-icon-suitcase { background-position: -112px -96px; }
|
170 |
+
.ui-icon-comment { background-position: -128px -96px; }
|
171 |
+
.ui-icon-person { background-position: -144px -96px; }
|
172 |
+
.ui-icon-print { background-position: -160px -96px; }
|
173 |
+
.ui-icon-trash { background-position: -176px -96px; }
|
174 |
+
.ui-icon-locked { background-position: -192px -96px; }
|
175 |
+
.ui-icon-unlocked { background-position: -208px -96px; }
|
176 |
+
.ui-icon-bookmark { background-position: -224px -96px; }
|
177 |
+
.ui-icon-tag { background-position: -240px -96px; }
|
178 |
+
.ui-icon-home { background-position: 0 -112px; }
|
179 |
+
.ui-icon-flag { background-position: -16px -112px; }
|
180 |
+
.ui-icon-calendar { background-position: -32px -112px; }
|
181 |
+
.ui-icon-cart { background-position: -48px -112px; }
|
182 |
+
.ui-icon-pencil { background-position: -64px -112px; }
|
183 |
+
.ui-icon-clock { background-position: -80px -112px; }
|
184 |
+
.ui-icon-disk { background-position: -96px -112px; }
|
185 |
+
.ui-icon-calculator { background-position: -112px -112px; }
|
186 |
+
.ui-icon-zoomin { background-position: -128px -112px; }
|
187 |
+
.ui-icon-zoomout { background-position: -144px -112px; }
|
188 |
+
.ui-icon-search { background-position: -160px -112px; }
|
189 |
+
.ui-icon-wrench { background-position: -176px -112px; }
|
190 |
+
.ui-icon-gear { background-position: -192px -112px; }
|
191 |
+
.ui-icon-heart { background-position: -208px -112px; }
|
192 |
+
.ui-icon-star { background-position: -224px -112px; }
|
193 |
+
.ui-icon-link { background-position: -240px -112px; }
|
194 |
+
.ui-icon-cancel { background-position: 0 -128px; }
|
195 |
+
.ui-icon-plus { background-position: -16px -128px; }
|
196 |
+
.ui-icon-plusthick { background-position: -32px -128px; }
|
197 |
+
.ui-icon-minus { background-position: -48px -128px; }
|
198 |
+
.ui-icon-minusthick { background-position: -64px -128px; }
|
199 |
+
.ui-icon-close { background-position: -80px -128px; }
|
200 |
+
.ui-icon-closethick { background-position: -96px -128px; }
|
201 |
+
.ui-icon-key { background-position: -112px -128px; }
|
202 |
+
.ui-icon-lightbulb { background-position: -128px -128px; }
|
203 |
+
.ui-icon-scissors { background-position: -144px -128px; }
|
204 |
+
.ui-icon-clipboard { background-position: -160px -128px; }
|
205 |
+
.ui-icon-copy { background-position: -176px -128px; }
|
206 |
+
.ui-icon-contact { background-position: -192px -128px; }
|
207 |
+
.ui-icon-image { background-position: -208px -128px; }
|
208 |
+
.ui-icon-video { background-position: -224px -128px; }
|
209 |
+
.ui-icon-script { background-position: -240px -128px; }
|
210 |
+
.ui-icon-alert { background-position: 0 -144px; }
|
211 |
+
.ui-icon-info { background-position: -16px -144px; }
|
212 |
+
.ui-icon-notice { background-position: -32px -144px; }
|
213 |
+
.ui-icon-help { background-position: -48px -144px; }
|
214 |
+
.ui-icon-check { background-position: -64px -144px; }
|
215 |
+
.ui-icon-bullet { background-position: -80px -144px; }
|
216 |
+
.ui-icon-radio-off { background-position: -96px -144px; }
|
217 |
+
.ui-icon-radio-on { background-position: -112px -144px; }
|
218 |
+
.ui-icon-pin-w { background-position: -128px -144px; }
|
219 |
+
.ui-icon-pin-s { background-position: -144px -144px; }
|
220 |
+
.ui-icon-play { background-position: 0 -160px; }
|
221 |
+
.ui-icon-pause { background-position: -16px -160px; }
|
222 |
+
.ui-icon-seek-next { background-position: -32px -160px; }
|
223 |
+
.ui-icon-seek-prev { background-position: -48px -160px; }
|
224 |
+
.ui-icon-seek-end { background-position: -64px -160px; }
|
225 |
+
.ui-icon-seek-first { background-position: -80px -160px; }
|
226 |
+
.ui-icon-stop { background-position: -96px -160px; }
|
227 |
+
.ui-icon-eject { background-position: -112px -160px; }
|
228 |
+
.ui-icon-volume-off { background-position: -128px -160px; }
|
229 |
+
.ui-icon-volume-on { background-position: -144px -160px; }
|
230 |
+
.ui-icon-power { background-position: 0 -176px; }
|
231 |
+
.ui-icon-signal-diag { background-position: -16px -176px; }
|
232 |
+
.ui-icon-signal { background-position: -32px -176px; }
|
233 |
+
.ui-icon-battery-0 { background-position: -48px -176px; }
|
234 |
+
.ui-icon-battery-1 { background-position: -64px -176px; }
|
235 |
+
.ui-icon-battery-2 { background-position: -80px -176px; }
|
236 |
+
.ui-icon-battery-3 { background-position: -96px -176px; }
|
237 |
+
.ui-icon-circle-plus { background-position: 0 -192px; }
|
238 |
+
.ui-icon-circle-minus { background-position: -16px -192px; }
|
239 |
+
.ui-icon-circle-close { background-position: -32px -192px; }
|
240 |
+
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
241 |
+
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
242 |
+
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
243 |
+
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
244 |
+
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
245 |
+
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
246 |
+
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
247 |
+
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
248 |
+
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
249 |
+
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
250 |
+
.ui-icon-circle-check { background-position: -208px -192px; }
|
251 |
+
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
252 |
+
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
253 |
+
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
254 |
+
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
255 |
+
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
256 |
+
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
257 |
+
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
258 |
+
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
259 |
+
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
260 |
+
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
261 |
+
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
262 |
+
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
263 |
+
|
264 |
+
|
265 |
+
/* Misc visuals
|
266 |
+
----------------------------------*/
|
267 |
+
|
268 |
+
/* Corner radius */
|
269 |
+
.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; }
|
270 |
+
.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
|
271 |
+
.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
|
272 |
+
.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
|
273 |
+
.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
|
274 |
+
.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
|
275 |
+
.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
|
276 |
+
.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
|
277 |
+
.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; }
|
278 |
+
|
279 |
+
/* Overlays */
|
280 |
+
.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
|
281 |
+
.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; }/* Accordion
|
282 |
+
----------------------------------*/
|
283 |
+
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
|
284 |
+
.ui-accordion .ui-accordion-li-fix { display: inline; }
|
285 |
+
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
|
286 |
+
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
|
287 |
+
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
|
288 |
+
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
|
289 |
+
.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
|
290 |
+
----------------------------------*/
|
291 |
+
.ui-datepicker { width: 17em; padding: .2em .2em 0; }
|
292 |
+
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
|
293 |
+
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
|
294 |
+
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
|
295 |
+
.ui-datepicker .ui-datepicker-prev { left:2px; }
|
296 |
+
.ui-datepicker .ui-datepicker-next { right:2px; }
|
297 |
+
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
|
298 |
+
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
|
299 |
+
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
|
300 |
+
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
|
301 |
+
.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
|
302 |
+
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
|
303 |
+
.ui-datepicker select.ui-datepicker-month,
|
304 |
+
.ui-datepicker select.ui-datepicker-year { width: 49%;}
|
305 |
+
.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
|
306 |
+
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
|
307 |
+
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
|
308 |
+
.ui-datepicker td { border: 0; padding: 1px; }
|
309 |
+
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
|
310 |
+
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
|
311 |
+
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
|
312 |
+
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
|
313 |
+
|
314 |
+
/* with multiple calendars */
|
315 |
+
.ui-datepicker.ui-datepicker-multi { width:auto; }
|
316 |
+
.ui-datepicker-multi .ui-datepicker-group { float:left; }
|
317 |
+
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
|
318 |
+
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
|
319 |
+
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
|
320 |
+
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
|
321 |
+
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
|
322 |
+
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
|
323 |
+
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
|
324 |
+
.ui-datepicker-row-break { clear:both; width:100%; }
|
325 |
+
|
326 |
+
/* RTL support */
|
327 |
+
.ui-datepicker-rtl { direction: rtl; }
|
328 |
+
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
|
329 |
+
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
|
330 |
+
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
|
331 |
+
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
|
332 |
+
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
|
333 |
+
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
|
334 |
+
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
|
335 |
+
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
|
336 |
+
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
337 |
+
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
338 |
+
|
339 |
+
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
|
340 |
+
.ui-datepicker-cover {
|
341 |
+
display: none; /*sorry for IE5*/
|
342 |
+
display/**/: block; /*sorry for IE5*/
|
343 |
+
position: absolute; /*must have*/
|
344 |
+
z-index: -1; /*must have*/
|
345 |
+
filter: mask(); /*must have*/
|
346 |
+
top: -4px; /*must have*/
|
347 |
+
left: -4px; /*must have*/
|
348 |
+
width: 200px; /*must have*/
|
349 |
+
height: 200px; /*must have*/
|
350 |
+
}/* Dialog
|
351 |
+
----------------------------------*/
|
352 |
+
.ui-dialog { position: relative; padding: .2em; width: 300px; }
|
353 |
+
.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; }
|
354 |
+
.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }
|
355 |
+
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
|
356 |
+
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
|
357 |
+
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
|
358 |
+
.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
|
359 |
+
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
|
360 |
+
.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
|
361 |
+
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
|
362 |
+
.ui-draggable .ui-dialog-titlebar { cursor: move; }
|
363 |
+
/* Progressbar
|
364 |
+
----------------------------------*/
|
365 |
+
.ui-progressbar { height:2em; text-align: left; }
|
366 |
+
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
|
367 |
+
----------------------------------*/
|
368 |
+
.ui-resizable { position: relative;}
|
369 |
+
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
|
370 |
+
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
|
371 |
+
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
|
372 |
+
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
|
373 |
+
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
|
374 |
+
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
|
375 |
+
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
|
376 |
+
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
|
377 |
+
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
|
378 |
+
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider
|
379 |
+
----------------------------------*/
|
380 |
+
.ui-slider { position: relative; text-align: left; }
|
381 |
+
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
|
382 |
+
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
|
383 |
+
|
384 |
+
.ui-slider-horizontal { height: .8em; }
|
385 |
+
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
|
386 |
+
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
|
387 |
+
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
|
388 |
+
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
|
389 |
+
|
390 |
+
.ui-slider-vertical { width: .8em; height: 100px; }
|
391 |
+
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
|
392 |
+
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
|
393 |
+
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
|
394 |
+
.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
|
395 |
+
----------------------------------*/
|
396 |
+
.ui-tabs { padding: .2em; zoom: 1; }
|
397 |
+
.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
|
398 |
+
.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
|
399 |
+
.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
|
400 |
+
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
|
401 |
+
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
|
402 |
+
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
|
403 |
+
.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
|
404 |
+
.ui-tabs .ui-tabs-hide { display: none !important; }
|
includes/jquery/js/jquery-1.3.2.min.js
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* jQuery JavaScript Library v1.3.2
|
3 |
+
* http://jquery.com/
|
4 |
+
*
|
5 |
+
* Copyright (c) 2009 John Resig
|
6 |
+
* Dual licensed under the MIT and GPL licenses.
|
7 |
+
* http://docs.jquery.com/License
|
8 |
+
*
|
9 |
+
* Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
|
10 |
+
* Revision: 6246
|
11 |
+
*/
|
12 |
+
(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
|
13 |
+
/*
|
14 |
+
* Sizzle CSS Selector Engine - v0.9.3
|
15 |
+
* Copyright 2009, The Dojo Foundation
|
16 |
+
* Released under the MIT, BSD, and GPL Licenses.
|
17 |
+
* More information: http://sizzlejs.com/
|
18 |
+
*/
|
19 |
+
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
|
includes/jquery/js/jquery-ui-1.7.1.custom.min.js
ADDED
@@ -0,0 +1,273 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* jQuery UI 1.7.1
|
3 |
+
*
|
4 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
5 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
6 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
7 |
+
*
|
8 |
+
* http://docs.jquery.com/UI
|
9 |
+
*/
|
10 |
+
* jQuery UI Draggable 1.7.1
|
11 |
+
*
|
12 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
13 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
14 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
15 |
+
*
|
16 |
+
* http://docs.jquery.com/UI/Draggables
|
17 |
+
*
|
18 |
+
* Depends:
|
19 |
+
* ui.core.js
|
20 |
+
*/
|
21 |
+
* jQuery UI Droppable 1.7.1
|
22 |
+
*
|
23 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
24 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
25 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
26 |
+
*
|
27 |
+
* http://docs.jquery.com/UI/Droppables
|
28 |
+
*
|
29 |
+
* Depends:
|
30 |
+
* ui.core.js
|
31 |
+
* ui.draggable.js
|
32 |
+
*/
|
33 |
+
* jQuery UI Resizable 1.7.1
|
34 |
+
*
|
35 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
36 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
37 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
38 |
+
*
|
39 |
+
* http://docs.jquery.com/UI/Resizables
|
40 |
+
*
|
41 |
+
* Depends:
|
42 |
+
* ui.core.js
|
43 |
+
*/
|
44 |
+
* jQuery UI Selectable 1.7.1
|
45 |
+
*
|
46 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
47 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
48 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
49 |
+
*
|
50 |
+
* http://docs.jquery.com/UI/Selectables
|
51 |
+
*
|
52 |
+
* Depends:
|
53 |
+
* ui.core.js
|
54 |
+
*/
|
55 |
+
* jQuery UI Sortable 1.7.1
|
56 |
+
*
|
57 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
58 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
59 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
60 |
+
*
|
61 |
+
* http://docs.jquery.com/UI/Sortables
|
62 |
+
*
|
63 |
+
* Depends:
|
64 |
+
* ui.core.js
|
65 |
+
*/
|
66 |
+
* jQuery UI Accordion 1.7.1
|
67 |
+
*
|
68 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
69 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
70 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
71 |
+
*
|
72 |
+
* http://docs.jquery.com/UI/Accordion
|
73 |
+
*
|
74 |
+
* Depends:
|
75 |
+
* ui.core.js
|
76 |
+
*/
|
77 |
+
* jQuery UI Dialog 1.7.1
|
78 |
+
*
|
79 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
80 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
81 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
82 |
+
*
|
83 |
+
* http://docs.jquery.com/UI/Dialog
|
84 |
+
*
|
85 |
+
* Depends:
|
86 |
+
* ui.core.js
|
87 |
+
* ui.draggable.js
|
88 |
+
* ui.resizable.js
|
89 |
+
*/
|
90 |
+
* jQuery UI Slider 1.7.1
|
91 |
+
*
|
92 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
93 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
94 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
95 |
+
*
|
96 |
+
* http://docs.jquery.com/UI/Slider
|
97 |
+
*
|
98 |
+
* Depends:
|
99 |
+
* ui.core.js
|
100 |
+
*/
|
101 |
+
* jQuery UI Tabs 1.7.1
|
102 |
+
*
|
103 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
104 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
105 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
106 |
+
*
|
107 |
+
* http://docs.jquery.com/UI/Tabs
|
108 |
+
*
|
109 |
+
* Depends:
|
110 |
+
* ui.core.js
|
111 |
+
*/
|
112 |
+
* jQuery UI Datepicker 1.7.1
|
113 |
+
*
|
114 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
115 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
116 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
117 |
+
*
|
118 |
+
* http://docs.jquery.com/UI/Datepicker
|
119 |
+
*
|
120 |
+
* Depends:
|
121 |
+
* ui.core.js
|
122 |
+
*/
|
123 |
+
* jQuery UI Progressbar 1.7.1
|
124 |
+
*
|
125 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
126 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
127 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
128 |
+
*
|
129 |
+
* http://docs.jquery.com/UI/Progressbar
|
130 |
+
*
|
131 |
+
* Depends:
|
132 |
+
* ui.core.js
|
133 |
+
*/
|
134 |
+
* jQuery UI Effects 1.7.1
|
135 |
+
*
|
136 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
137 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
138 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
139 |
+
*
|
140 |
+
* http://docs.jquery.com/UI/Effects/
|
141 |
+
*/
|
142 |
+
* jQuery UI Effects Blind 1.7.1
|
143 |
+
*
|
144 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
145 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
146 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
147 |
+
*
|
148 |
+
* http://docs.jquery.com/UI/Effects/Blind
|
149 |
+
*
|
150 |
+
* Depends:
|
151 |
+
* effects.core.js
|
152 |
+
*/
|
153 |
+
* jQuery UI Effects Bounce 1.7.1
|
154 |
+
*
|
155 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
156 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
157 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
158 |
+
*
|
159 |
+
* http://docs.jquery.com/UI/Effects/Bounce
|
160 |
+
*
|
161 |
+
* Depends:
|
162 |
+
* effects.core.js
|
163 |
+
*/
|
164 |
+
* jQuery UI Effects Clip 1.7.1
|
165 |
+
*
|
166 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
167 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
168 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
169 |
+
*
|
170 |
+
* http://docs.jquery.com/UI/Effects/Clip
|
171 |
+
*
|
172 |
+
* Depends:
|
173 |
+
* effects.core.js
|
174 |
+
*/
|
175 |
+
* jQuery UI Effects Drop 1.7.1
|
176 |
+
*
|
177 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
178 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
179 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
180 |
+
*
|
181 |
+
* http://docs.jquery.com/UI/Effects/Drop
|
182 |
+
*
|
183 |
+
* Depends:
|
184 |
+
* effects.core.js
|
185 |
+
*/
|
186 |
+
* jQuery UI Effects Explode 1.7.1
|
187 |
+
*
|
188 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
189 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
190 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
191 |
+
*
|
192 |
+
* http://docs.jquery.com/UI/Effects/Explode
|
193 |
+
*
|
194 |
+
* Depends:
|
195 |
+
* effects.core.js
|
196 |
+
*/
|
197 |
+
* jQuery UI Effects Fold 1.7.1
|
198 |
+
*
|
199 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
200 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
201 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
202 |
+
*
|
203 |
+
* http://docs.jquery.com/UI/Effects/Fold
|
204 |
+
*
|
205 |
+
* Depends:
|
206 |
+
* effects.core.js
|
207 |
+
*/
|
208 |
+
* jQuery UI Effects Highlight 1.7.1
|
209 |
+
*
|
210 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
211 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
212 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
213 |
+
*
|
214 |
+
* http://docs.jquery.com/UI/Effects/Highlight
|
215 |
+
*
|
216 |
+
* Depends:
|
217 |
+
* effects.core.js
|
218 |
+
*/
|
219 |
+
* jQuery UI Effects Pulsate 1.7.1
|
220 |
+
*
|
221 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
222 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
223 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
224 |
+
*
|
225 |
+
* http://docs.jquery.com/UI/Effects/Pulsate
|
226 |
+
*
|
227 |
+
* Depends:
|
228 |
+
* effects.core.js
|
229 |
+
*/
|
230 |
+
* jQuery UI Effects Scale 1.7.1
|
231 |
+
*
|
232 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
233 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
234 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
235 |
+
*
|
236 |
+
* http://docs.jquery.com/UI/Effects/Scale
|
237 |
+
*
|
238 |
+
* Depends:
|
239 |
+
* effects.core.js
|
240 |
+
*/
|
241 |
+
* jQuery UI Effects Shake 1.7.1
|
242 |
+
*
|
243 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
244 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
245 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
246 |
+
*
|
247 |
+
* http://docs.jquery.com/UI/Effects/Shake
|
248 |
+
*
|
249 |
+
* Depends:
|
250 |
+
* effects.core.js
|
251 |
+
*/
|
252 |
+
* jQuery UI Effects Slide 1.7.1
|
253 |
+
*
|
254 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
255 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
256 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
257 |
+
*
|
258 |
+
* http://docs.jquery.com/UI/Effects/Slide
|
259 |
+
*
|
260 |
+
* Depends:
|
261 |
+
* effects.core.js
|
262 |
+
*/
|
263 |
+
* jQuery UI Effects Transfer 1.7.1
|
264 |
+
*
|
265 |
+
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
|
266 |
+
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
267 |
+
* and GPL (GPL-LICENSE.txt) licenses.
|
268 |
+
*
|
269 |
+
* http://docs.jquery.com/UI/Effects/Transfer
|
270 |
+
*
|
271 |
+
* Depends:
|
272 |
+
* effects.core.js
|
273 |
+
*/
|
includes/version-2-ichor/README.txt
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Hello.
|
2 |
+
|
3 |
+
This is the Open Flash Chart source code.
|
4 |
+
|
5 |
+
Take a look around :-)
|
6 |
+
|
7 |
+
The test data is in the 'data-files' directory.
|
8 |
+
|
includes/version-2-ichor/js/README.txt
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
***************
|
2 |
+
** JS Folder **
|
3 |
+
***************
|
4 |
+
|
5 |
+
Here are some Javascript libraries used on the code or samples.
|
6 |
+
|
7 |
+
- swfobject.js
|
8 |
+
|
9 |
+
SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
|
10 |
+
*
|
11 |
+
* SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
|
12 |
+
* http://www.opensource.org/licenses/mit-license.php
|
includes/version-2-ichor/js/json/json2.js
ADDED
@@ -0,0 +1,461 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
http://www.JSON.org/json2.js
|
3 |
+
2008-03-24
|
4 |
+
|
5 |
+
Public Domain.
|
6 |
+
|
7 |
+
NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
|
8 |
+
|
9 |
+
See http://www.JSON.org/js.html
|
10 |
+
|
11 |
+
This file creates a global JSON object containing three methods: stringify,
|
12 |
+
parse, and quote.
|
13 |
+
|
14 |
+
|
15 |
+
JSON.stringify(value, replacer, space)
|
16 |
+
value any JavaScript value, usually an object or array.
|
17 |
+
|
18 |
+
replacer an optional parameter that determines how object
|
19 |
+
values are stringified for objects without a toJSON
|
20 |
+
method. It can be a function or an array.
|
21 |
+
|
22 |
+
space an optional parameter that specifies the indentation
|
23 |
+
of nested structures. If it is omitted, the text will
|
24 |
+
be packed without extra whitespace. If it is a number,
|
25 |
+
it will specify the number of spaces to indent at each
|
26 |
+
level. If it is a string (such as '\t'), it contains the
|
27 |
+
characters used to indent at each level.
|
28 |
+
|
29 |
+
This method produces a JSON text from a JavaScript value.
|
30 |
+
|
31 |
+
When an object value is found, if the object contains a toJSON
|
32 |
+
method, its toJSON method will be called and the result will be
|
33 |
+
stringified. A toJSON method does not serialize: it returns the
|
34 |
+
value represented by the name/value pair that should be serialized,
|
35 |
+
or undefined if nothing should be serialized. The toJSON method will
|
36 |
+
be passed the key associated with the value, and this will be bound
|
37 |
+
to the object holding the key.
|
38 |
+
|
39 |
+
This is the toJSON method added to Dates:
|
40 |
+
|
41 |
+
function toJSON(key) {
|
42 |
+
return this.getUTCFullYear() + '-' +
|
43 |
+
f(this.getUTCMonth() + 1) + '-' +
|
44 |
+
f(this.getUTCDate()) + 'T' +
|
45 |
+
f(this.getUTCHours()) + ':' +
|
46 |
+
f(this.getUTCMinutes()) + ':' +
|
47 |
+
f(this.getUTCSeconds()) + 'Z';
|
48 |
+
}
|
49 |
+
|
50 |
+
You can provide an optional replacer method. It will be passed the
|
51 |
+
key and value of each member, with this bound to the containing
|
52 |
+
object. The value that is returned from your method will be
|
53 |
+
serialized. If your method returns undefined, then the member will
|
54 |
+
be excluded from the serialization.
|
55 |
+
|
56 |
+
If no replacer parameter is provided, then a default replacer
|
57 |
+
will be used:
|
58 |
+
|
59 |
+
function replacer(key, value) {
|
60 |
+
return Object.hasOwnProperty.call(this, key) ?
|
61 |
+
value : undefined;
|
62 |
+
}
|
63 |
+
|
64 |
+
The default replacer is passed the key and value for each item in
|
65 |
+
the structure. It excludes inherited members.
|
66 |
+
|
67 |
+
If the replacer parameter is an array, then it will be used to
|
68 |
+
select the members to be serialized. It filters the results such
|
69 |
+
that only members with keys listed in the replacer array are
|
70 |
+
stringified.
|
71 |
+
|
72 |
+
Values that do not have JSON representaions, such as undefined or
|
73 |
+
functions, will not be serialized. Such values in objects will be
|
74 |
+
dropped; in arrays they will be replaced with null. You can use
|
75 |
+
a replacer function to replace those with JSON values.
|
76 |
+
JSON.stringify(undefined) returns undefined.
|
77 |
+
|
78 |
+
The optional space parameter produces a stringification of the value
|
79 |
+
that is filled with line breaks and indentation to make it easier to
|
80 |
+
read.
|
81 |
+
|
82 |
+
If the space parameter is a non-empty string, then that string will
|
83 |
+
be used for indentation. If the space parameter is a number, then
|
84 |
+
then indentation will be that many spaces.
|
85 |
+
|
86 |
+
Example:
|
87 |
+
|
88 |
+
text = JSON.stringify(['e', {pluribus: 'unum'}]);
|
89 |
+
// text is '["e",{"pluribus":"unum"}]'
|
90 |
+
|
91 |
+
|
92 |
+
text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
|
93 |
+
// text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
|
94 |
+
|
95 |
+
|
96 |
+
JSON.parse(text, reviver)
|
97 |
+
This method parses a JSON text to produce an object or array.
|
98 |
+
It can throw a SyntaxError exception.
|
99 |
+
|
100 |
+
The optional reviver parameter is a function that can filter and
|
101 |
+
transform the results. It receives each of the keys and values,
|
102 |
+
and its return value is used instead of the original value.
|
103 |
+
If it returns what it received, then the structure is not modified.
|
104 |
+
If it returns undefined then the member is deleted.
|
105 |
+
|
106 |
+
Example:
|
107 |
+
|
108 |
+
// Parse the text. Values that look like ISO date strings will
|
109 |
+
// be converted to Date objects.
|
110 |
+
|
111 |
+
myData = JSON.parse(text, function (key, value) {
|
112 |
+
var a;
|
113 |
+
if (typeof value === 'string') {
|
114 |
+
a =
|
115 |
+
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
|
116 |
+
if (a) {
|
117 |
+
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
|
118 |
+
+a[5], +a[6]));
|
119 |
+
}
|
120 |
+
}
|
121 |
+
return value;
|
122 |
+
});
|
123 |
+
|
124 |
+
|
125 |
+
JSON.quote(text)
|
126 |
+
This method wraps a string in quotes, escaping some characters
|
127 |
+
as needed.
|
128 |
+
|
129 |
+
|
130 |
+
This is a reference implementation. You are free to copy, modify, or
|
131 |
+
redistribute.
|
132 |
+
|
133 |
+
USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD THIRD PARTY
|
134 |
+
CODE INTO YOUR PAGES.
|
135 |
+
*/
|
136 |
+
|
137 |
+
/*jslint regexp: true, forin: true, evil: true */
|
138 |
+
|
139 |
+
/*global JSON */
|
140 |
+
|
141 |
+
/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
|
142 |
+
call, charCodeAt, floor, getUTCDate, getUTCFullYear, getUTCHours,
|
143 |
+
getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, length,
|
144 |
+
parse, propertyIsEnumerable, prototype, push, quote, replace, stringify,
|
145 |
+
test, toJSON, toString
|
146 |
+
*/
|
147 |
+
|
148 |
+
if (!this.JSON) {
|
149 |
+
|
150 |
+
// Create a JSON object only if one does not already exist. We create the
|
151 |
+
// object in a closure to avoid global variables.
|
152 |
+
|
153 |
+
JSON = function () {
|
154 |
+
|
155 |
+
function f(n) { // Format integers to have at least two digits.
|
156 |
+
return n < 10 ? '0' + n : n;
|
157 |
+
}
|
158 |
+
|
159 |
+
Date.prototype.toJSON = function () {
|
160 |
+
|
161 |
+
// Eventually, this method will be based on the date.toISOString method.
|
162 |
+
|
163 |
+
return this.getUTCFullYear() + '-' +
|
164 |
+
f(this.getUTCMonth() + 1) + '-' +
|
165 |
+
f(this.getUTCDate()) + 'T' +
|
166 |
+
f(this.getUTCHours()) + ':' +
|
167 |
+
f(this.getUTCMinutes()) + ':' +
|
168 |
+
f(this.getUTCSeconds()) + 'Z';
|
169 |
+
};
|
170 |
+
|
171 |
+
|
172 |
+
var escapeable = /["\\\x00-\x1f\x7f-\x9f]/g,
|
173 |
+
gap,
|
174 |
+
indent,
|
175 |
+
meta = { // table of character substitutions
|
176 |
+
'\b': '\\b',
|
177 |
+
'\t': '\\t',
|
178 |
+
'\n': '\\n',
|
179 |
+
'\f': '\\f',
|
180 |
+
'\r': '\\r',
|
181 |
+
'"' : '\\"',
|
182 |
+
'\\': '\\\\'
|
183 |
+
},
|
184 |
+
rep;
|
185 |
+
|
186 |
+
|
187 |
+
function quote(string) {
|
188 |
+
|
189 |
+
// If the string contains no control characters, no quote characters, and no
|
190 |
+
// backslash characters, then we can safely slap some quotes around it.
|
191 |
+
// Otherwise we must also replace the offending characters with safe escape
|
192 |
+
// sequences.
|
193 |
+
|
194 |
+
return escapeable.test(string) ?
|
195 |
+
'"' + string.replace(escapeable, function (a) {
|
196 |
+
var c = meta[a];
|
197 |
+
if (typeof c === 'string') {
|
198 |
+
return c;
|
199 |
+
}
|
200 |
+
c = a.charCodeAt();
|
201 |
+
return '\\u00' + Math.floor(c / 16).toString(16) +
|
202 |
+
(c % 16).toString(16);
|
203 |
+
}) + '"' :
|
204 |
+
'"' + string + '"';
|
205 |
+
}
|
206 |
+
|
207 |
+
|
208 |
+
function str(key, holder) {
|
209 |
+
|
210 |
+
// Produce a string from holder[key].
|
211 |
+
|
212 |
+
var i, // The loop counter.
|
213 |
+
k, // The member key.
|
214 |
+
v, // The member value.
|
215 |
+
length,
|
216 |
+
mind = gap,
|
217 |
+
partial,
|
218 |
+
value = holder[key];
|
219 |
+
|
220 |
+
// If the value has a toJSON method, call it to obtain a replacement value.
|
221 |
+
|
222 |
+
if (value && typeof value === 'object' &&
|
223 |
+
typeof value.toJSON === 'function') {
|
224 |
+
value = value.toJSON(key);
|
225 |
+
}
|
226 |
+
|
227 |
+
// If we were called with a replacer function, then call the replacer to
|
228 |
+
// obtain a replacement value.
|
229 |
+
|
230 |
+
if (typeof rep === 'function') {
|
231 |
+
value = rep.call(holder, key, value);
|
232 |
+
}
|
233 |
+
|
234 |
+
// What happens next depends on the value's type.
|
235 |
+
|
236 |
+
switch (typeof value) {
|
237 |
+
case 'string':
|
238 |
+
return quote(value);
|
239 |
+
|
240 |
+
case 'number':
|
241 |
+
|
242 |
+
// JSON numbers must be finite. Encode non-finite numbers as null.
|
243 |
+
|
244 |
+
return isFinite(value) ? String(value) : 'null';
|
245 |
+
|
246 |
+
case 'boolean':
|
247 |
+
case 'null':
|
248 |
+
|
249 |
+
// If the value is a boolean or null, convert it to a string. Note:
|
250 |
+
// typeof null does not produce 'null'. The case is included here in
|
251 |
+
// the remote chance that this gets fixed someday.
|
252 |
+
|
253 |
+
return String(value);
|
254 |
+
|
255 |
+
// If the type is 'object', we might be dealing with an object or an array or
|
256 |
+
// null.
|
257 |
+
|
258 |
+
case 'object':
|
259 |
+
|
260 |
+
// Due to a specification blunder in ECMAScript, typeof null is 'object',
|
261 |
+
// so watch out for that case.
|
262 |
+
|
263 |
+
if (!value) {
|
264 |
+
return 'null';
|
265 |
+
}
|
266 |
+
|
267 |
+
// Make an array to hold the partial results of stringifying this object value.
|
268 |
+
|
269 |
+
gap += indent;
|
270 |
+
partial = [];
|
271 |
+
|
272 |
+
// If the object has a dontEnum length property, we'll treat it as an array.
|
273 |
+
|
274 |
+
if (typeof value.length === 'number' &&
|
275 |
+
!(value.propertyIsEnumerable('length'))) {
|
276 |
+
|
277 |
+
// The object is an array. Stringify every element. Use null as a placeholder
|
278 |
+
// for non-JSON values.
|
279 |
+
|
280 |
+
length = value.length;
|
281 |
+
for (i = 0; i < length; i += 1) {
|
282 |
+
partial[i] = str(i, value) || 'null';
|
283 |
+
}
|
284 |
+
|
285 |
+
// Join all of the elements together, separated with commas, and wrap them in
|
286 |
+
// brackets.
|
287 |
+
|
288 |
+
v = partial.length === 0 ? '[]' :
|
289 |
+
gap ? '[\n' + gap + partial.join(',\n' + gap) +
|
290 |
+
'\n' + mind + ']' :
|
291 |
+
'[' + partial.join(',') + ']';
|
292 |
+
gap = mind;
|
293 |
+
return v;
|
294 |
+
}
|
295 |
+
|
296 |
+
// If the replacer is an array, use it to select the members to be stringified.
|
297 |
+
|
298 |
+
if (typeof rep === 'object') {
|
299 |
+
length = rep.length;
|
300 |
+
for (i = 0; i < length; i += 1) {
|
301 |
+
k = rep[i];
|
302 |
+
if (typeof k === 'string') {
|
303 |
+
v = str(k, value, rep);
|
304 |
+
if (v) {
|
305 |
+
partial.push(quote(k) + (gap ? ': ' : ':') + v);
|
306 |
+
}
|
307 |
+
}
|
308 |
+
}
|
309 |
+
} else {
|
310 |
+
|
311 |
+
// Otherwise, iterate through all of the keys in the object.
|
312 |
+
|
313 |
+
for (k in value) {
|
314 |
+
v = str(k, value, rep);
|
315 |
+
if (v) {
|
316 |
+
partial.push(quote(k) + (gap ? ': ' : ':') + v);
|
317 |
+
}
|
318 |
+
}
|
319 |
+
}
|
320 |
+
|
321 |
+
// Join all of the member texts together, separated with commas,
|
322 |
+
// and wrap them in braces.
|
323 |
+
|
324 |
+
v = partial.length === 0 ? '{}' :
|
325 |
+
gap ? '{\n' + gap + partial.join(',\n' + gap) +
|
326 |
+
'\n' + mind + '}' :
|
327 |
+
'{' + partial.join(',') + '}';
|
328 |
+
gap = mind;
|
329 |
+
return v;
|
330 |
+
}
|
331 |
+
}
|
332 |
+
|
333 |
+
|
334 |
+
// Return the JSON object containing the stringify, parse, and quote methods.
|
335 |
+
|
336 |
+
return {
|
337 |
+
stringify: function (value, replacer, space) {
|
338 |
+
|
339 |
+
// The stringify method takes a value and an optional replacer, and an optional
|
340 |
+
// space parameter, and returns a JSON text. The replacer can be a function
|
341 |
+
// that can replace values, or an array of strings that will select the keys.
|
342 |
+
// A default replacer method can be provided. Use of the space parameter can
|
343 |
+
// produce text that is more easily readable.
|
344 |
+
|
345 |
+
var i;
|
346 |
+
gap = '';
|
347 |
+
indent = '';
|
348 |
+
if (space) {
|
349 |
+
|
350 |
+
// If the space parameter is a number, make an indent string containing that
|
351 |
+
// many spaces.
|
352 |
+
|
353 |
+
if (typeof space === 'number') {
|
354 |
+
for (i = 0; i < space; i += 1) {
|
355 |
+
indent += ' ';
|
356 |
+
}
|
357 |
+
|
358 |
+
// If the space parameter is a string, it will be used as the indent string.
|
359 |
+
|
360 |
+
} else if (typeof space === 'string') {
|
361 |
+
indent = space;
|
362 |
+
}
|
363 |
+
}
|
364 |
+
|
365 |
+
// If there is no replacer parameter, use the default replacer.
|
366 |
+
|
367 |
+
if (!replacer) {
|
368 |
+
rep = function (key, value) {
|
369 |
+
if (!Object.hasOwnProperty.call(this, key)) {
|
370 |
+
return undefined;
|
371 |
+
}
|
372 |
+
return value;
|
373 |
+
};
|
374 |
+
|
375 |
+
// The replacer can be a function or an array. Otherwise, throw an error.
|
376 |
+
|
377 |
+
} else if (typeof replacer === 'function' ||
|
378 |
+
(typeof replacer === 'object' &&
|
379 |
+
typeof replacer.length === 'number')) {
|
380 |
+
rep = replacer;
|
381 |
+
} else {
|
382 |
+
throw new Error('JSON.stringify');
|
383 |
+
}
|
384 |
+
|
385 |
+
// Make a fake root object containing our value under the key of ''.
|
386 |
+
// Return the result of stringifying the value.
|
387 |
+
|
388 |
+
return str('', {'': value});
|
389 |
+
},
|
390 |
+
|
391 |
+
|
392 |
+
parse: function (text, reviver) {
|
393 |
+
|
394 |
+
// The parse method takes a text and an optional reviver function, and returns
|
395 |
+
// a JavaScript value if the text is a valid JSON text.
|
396 |
+
|
397 |
+
var j;
|
398 |
+
|
399 |
+
function walk(holder, key) {
|
400 |
+
|
401 |
+
// The walk method is used to recursively walk the resulting structure so
|
402 |
+
// that modifications can be made.
|
403 |
+
|
404 |
+
var k, v, value = holder[key];
|
405 |
+
if (value && typeof value === 'object') {
|
406 |
+
for (k in value) {
|
407 |
+
if (Object.hasOwnProperty.call(value, k)) {
|
408 |
+
v = walk(value, k);
|
409 |
+
if (v !== undefined) {
|
410 |
+
value[k] = v;
|
411 |
+
} else {
|
412 |
+
delete value[k];
|
413 |
+
}
|
414 |
+
}
|
415 |
+
}
|
416 |
+
}
|
417 |
+
return reviver.call(holder, key, value);
|
418 |
+
}
|
419 |
+
|
420 |
+
|
421 |
+
// Parsing happens in three stages. In the first stage, we run the text against
|
422 |
+
// regular expressions that look for non-JSON patterns. We are especially
|
423 |
+
// concerned with '()' and 'new' because they can cause invocation, and '='
|
424 |
+
// because it can cause mutation. But just to be safe, we want to reject all
|
425 |
+
// unexpected forms.
|
426 |
+
|
427 |
+
// We split the first stage into 4 regexp operations in order to work around
|
428 |
+
// crippling inefficiencies in IE's and Safari's regexp engines. First we
|
429 |
+
// replace all backslash pairs with '@' (a non-JSON character). Second, we
|
430 |
+
// replace all simple value tokens with ']' characters. Third, we delete all
|
431 |
+
// open brackets that follow a colon or comma or that begin the text. Finally,
|
432 |
+
// we look to see that the remaining characters are only whitespace or ']' or
|
433 |
+
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
|
434 |
+
|
435 |
+
if (/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g, '@').
|
436 |
+
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
|
437 |
+
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
|
438 |
+
|
439 |
+
// In the second stage we use the eval function to compile the text into a
|
440 |
+
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
|
441 |
+
// in JavaScript: it can begin a block or an object literal. We wrap the text
|
442 |
+
// in parens to eliminate the ambiguity.
|
443 |
+
|
444 |
+
j = eval('(' + text + ')');
|
445 |
+
|
446 |
+
// In the optional third stage, we recursively walk the new structure, passing
|
447 |
+
// each name/value pair to a reviver function for possible transformation.
|
448 |
+
|
449 |
+
return typeof reviver === 'function' ?
|
450 |
+
walk({'': j}, '') : j;
|
451 |
+
}
|
452 |
+
|
453 |
+
// If the text is not JSON parseable, then a SyntaxError is thrown.
|
454 |
+
|
455 |
+
throw new SyntaxError('JSON.parse');
|
456 |
+
},
|
457 |
+
|
458 |
+
quote: quote
|
459 |
+
};
|
460 |
+
}();
|
461 |
+
}
|
includes/version-2-ichor/js/swfobject.js
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* SWFObject v2.1 <http://code.google.com/p/swfobject/>
|
2 |
+
Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis
|
3 |
+
This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
|
4 |
+
*/
|
5 |
+
var swfobject=function(){var b="undefined",Q="object",n="Shockwave Flash",p="ShockwaveFlash.ShockwaveFlash",P="application/x-shockwave-flash",m="SWFObjectExprInst",j=window,K=document,T=navigator,o=[],N=[],i=[],d=[],J,Z=null,M=null,l=null,e=false,A=false;var h=function(){var v=typeof K.getElementById!=b&&typeof K.getElementsByTagName!=b&&typeof K.createElement!=b,AC=[0,0,0],x=null;if(typeof T.plugins!=b&&typeof T.plugins[n]==Q){x=T.plugins[n].description;if(x&&!(typeof T.mimeTypes!=b&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=x.replace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=parseInt(x.replace(/^(.*)\..*$/,"$1"),10);AC[1]=parseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof j.ActiveXObject!=b){var y=null,AB=false;try{y=new ActiveXObject(p+".7")}catch(t){try{y=new ActiveXObject(p+".6");AC=[6,0,21];y.AllowScriptAccess="always"}catch(t){if(AC[0]==6){AB=true}}if(!AB){try{y=new ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=y.GetVariable("$version");if(x){x=x.split(" ")[1].split(",");AC=[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],10)]}}catch(t){}}}}var AD=T.userAgent.toLowerCase(),r=T.platform.toLowerCase(),AA=/webkit/.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,q=false,z=r?/win/.test(r):/win/.test(AD),w=r?/mac/.test(r):/mac/.test(AD);/*@cc_on q=true;@if(@_win32)z=true;@elif(@_mac)w=true;@end@*/return{w3cdom:v,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var L=function(){if(!h.w3cdom){return }f(H);if(h.ie&&h.win){try{K.write("<script id=__ie_ondomload defer=true src=//:><\/script>");J=C("__ie_ondomload");if(J){I(J,"onreadystatechange",S)}}catch(q){}}if(h.webkit&&typeof K.readyState!=b){Z=setInterval(function(){if(/loaded|complete/.test(K.readyState)){E()}},10)}if(typeof K.addEventListener!=b){K.addEventListener("DOMContentLoaded",E,null)}R(E)}();function S(){if(J.readyState=="complete"){J.parentNode.removeChild(J);E()}}function E(){if(e){return }if(h.ie&&h.win){var v=a("span");try{var u=K.getElementsByTagName("body")[0].appendChild(v);u.parentNode.removeChild(u)}catch(w){return }}e=true;if(Z){clearInterval(Z);Z=null}var q=o.length;for(var r=0;r<q;r++){o[r]()}}function f(q){if(e){q()}else{o[o.length]=q}}function R(r){if(typeof j.addEventListener!=b){j.addEventListener("load",r,false)}else{if(typeof K.addEventListener!=b){K.addEventListener("load",r,false)}else{if(typeof j.attachEvent!=b){I(j,"onload",r)}else{if(typeof j.onload=="function"){var q=j.onload;j.onload=function(){q();r()}}else{j.onload=r}}}}}function H(){var t=N.length;for(var q=0;q<t;q++){var u=N[q].id;if(h.pv[0]>0){var r=C(u);if(r){N[q].width=r.getAttribute("width")?r.getAttribute("width"):"0";N[q].height=r.getAttribute("height")?r.getAttribute("height"):"0";if(c(N[q].swfVersion)){if(h.webkit&&h.webkit<312){Y(r)}W(u,true)}else{if(N[q].expressInstall&&!A&&c("6.0.65")&&(h.win||h.mac)){k(N[q])}else{O(r)}}}}else{W(u,true)}}}function Y(t){var q=t.getElementsByTagName(Q)[0];if(q){var w=a("embed"),y=q.attributes;if(y){var v=y.length;for(var u=0;u<v;u++){if(y[u].nodeName=="DATA"){w.setAttribute("src",y[u].nodeValue)}else{w.setAttribute(y[u].nodeName,y[u].nodeValue)}}}var x=q.childNodes;if(x){var z=x.length;for(var r=0;r<z;r++){if(x[r].nodeType==1&&x[r].nodeName=="PARAM"){w.setAttribute(x[r].getAttribute("name"),x[r].getAttribute("value"))}}}t.parentNode.replaceChild(w,t)}}function k(w){A=true;var u=C(w.id);if(u){if(w.altContentId){var y=C(w.altContentId);if(y){M=y;l=w.altContentId}}else{M=G(u)}if(!(/%$/.test(w.width))&&parseInt(w.width,10)<310){w.width="310"}if(!(/%$/.test(w.height))&&parseInt(w.height,10)<137){w.height="137"}K.title=K.title.slice(0,47)+" - Flash Player Installation";var z=h.ie&&h.win?"ActiveX":"PlugIn",q=K.title,r="MMredirectURL="+j.location+"&MMplayerType="+z+"&MMdoctitle="+q,x=w.id;if(h.ie&&h.win&&u.readyState!=4){var t=a("div");x+="SWFObjectNew";t.setAttribute("id",x);u.parentNode.insertBefore(t,u);u.style.display="none";var v=function(){u.parentNode.removeChild(u)};I(j,"onload",v)}U({data:w.expressInstall,id:m,width:w.width,height:w.height},{flashvars:r},x)}}function O(t){if(h.ie&&h.win&&t.readyState!=4){var r=a("div");t.parentNode.insertBefore(r,t);r.parentNode.replaceChild(G(t),r);t.style.display="none";var q=function(){t.parentNode.removeChild(t)};I(j,"onload",q)}else{t.parentNode.replaceChild(G(t),t)}}function G(v){var u=a("div");if(h.win&&h.ie){u.innerHTML=v.innerHTML}else{var r=v.getElementsByTagName(Q)[0];if(r){var w=r.childNodes;if(w){var q=w.length;for(var t=0;t<q;t++){if(!(w[t].nodeType==1&&w[t].nodeName=="PARAM")&&!(w[t].nodeType==8)){u.appendChild(w[t].cloneNode(true))}}}}}return u}function U(AG,AE,t){var q,v=C(t);if(v){if(typeof AG.id==b){AG.id=t}if(h.ie&&h.win){var AF="";for(var AB in AG){if(AG[AB]!=Object.prototype[AB]){if(AB.toLowerCase()=="data"){AE.movie=AG[AB]}else{if(AB.toLowerCase()=="styleclass"){AF+=' class="'+AG[AB]+'"'}else{if(AB.toLowerCase()!="classid"){AF+=" "+AB+'="'+AG[AB]+'"'}}}}}var AD="";for(var AA in AE){if(AE[AA]!=Object.prototype[AA]){AD+='<param name="'+AA+'" value="'+AE[AA]+'" />'}}v.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AF+">"+AD+"</object>";i[i.length]=AG.id;q=C(AG.id)}else{if(h.webkit&&h.webkit<312){var AC=a("embed");AC.setAttribute("type",P);for(var z in AG){if(AG[z]!=Object.prototype[z]){if(z.toLowerCase()=="data"){AC.setAttribute("src",AG[z])}else{if(z.toLowerCase()=="styleclass"){AC.setAttribute("class",AG[z])}else{if(z.toLowerCase()!="classid"){AC.setAttribute(z,AG[z])}}}}}for(var y in AE){if(AE[y]!=Object.prototype[y]){if(y.toLowerCase()!="movie"){AC.setAttribute(y,AE[y])}}}v.parentNode.replaceChild(AC,v);q=AC}else{var u=a(Q);u.setAttribute("type",P);for(var x in AG){if(AG[x]!=Object.prototype[x]){if(x.toLowerCase()=="styleclass"){u.setAttribute("class",AG[x])}else{if(x.toLowerCase()!="classid"){u.setAttribute(x,AG[x])}}}}for(var w in AE){if(AE[w]!=Object.prototype[w]&&w.toLowerCase()!="movie"){F(u,w,AE[w])}}v.parentNode.replaceChild(u,v);q=u}}}return q}function F(t,q,r){var u=a("param");u.setAttribute("name",q);u.setAttribute("value",r);t.appendChild(u)}function X(r){var q=C(r);if(q&&(q.nodeName=="OBJECT"||q.nodeName=="EMBED")){if(h.ie&&h.win){if(q.readyState==4){B(r)}else{j.attachEvent("onload",function(){B(r)})}}else{q.parentNode.removeChild(q)}}}function B(t){var r=C(t);if(r){for(var q in r){if(typeof r[q]=="function"){r[q]=null}}r.parentNode.removeChild(r)}}function C(t){var q=null;try{q=K.getElementById(t)}catch(r){}return q}function a(q){return K.createElement(q)}function I(t,q,r){t.attachEvent(q,r);d[d.length]=[t,q,r]}function c(t){var r=h.pv,q=t.split(".");q[0]=parseInt(q[0],10);q[1]=parseInt(q[1],10)||0;q[2]=parseInt(q[2],10)||0;return(r[0]>q[0]||(r[0]==q[0]&&r[1]>q[1])||(r[0]==q[0]&&r[1]==q[1]&&r[2]>=q[2]))?true:false}function V(v,r){if(h.ie&&h.mac){return }var u=K.getElementsByTagName("head")[0],t=a("style");t.setAttribute("type","text/css");t.setAttribute("media","screen");if(!(h.ie&&h.win)&&typeof K.createTextNode!=b){t.appendChild(K.createTextNode(v+" {"+r+"}"))}u.appendChild(t);if(h.ie&&h.win&&typeof K.styleSheets!=b&&K.styleSheets.length>0){var q=K.styleSheets[K.styleSheets.length-1];if(typeof q.addRule==Q){q.addRule(v,r)}}}function W(t,q){var r=q?"visible":"hidden";if(e&&C(t)){C(t).style.visibility=r}else{V("#"+t,"visibility:"+r)}}function g(s){var r=/[\\\"<>\.;]/;var q=r.exec(s)!=null;return q?encodeURIComponent(s):s}var D=function(){if(h.ie&&h.win){window.attachEvent("onunload",function(){var w=d.length;for(var v=0;v<w;v++){d[v][0].detachEvent(d[v][1],d[v][2])}var t=i.length;for(var u=0;u<t;u++){X(i[u])}for(var r in h){h[r]=null}h=null;for(var q in swfobject){swfobject[q]=null}swfobject=null})}}();return{registerObject:function(u,q,t){if(!h.w3cdom||!u||!q){return }var r={};r.id=u;r.swfVersion=q;r.expressInstall=t?t:false;N[N.length]=r;W(u,false)},getObjectById:function(v){var q=null;if(h.w3cdom){var t=C(v);if(t){var u=t.getElementsByTagName(Q)[0];if(!u||(u&&typeof t.SetVariable!=b)){q=t}else{if(typeof u.SetVariable!=b){q=u}}}}return q},embedSWF:function(x,AE,AB,AD,q,w,r,z,AC){if(!h.w3cdom||!x||!AE||!AB||!AD||!q){return }AB+="";AD+="";if(c(q)){W(AE,false);var AA={};if(AC&&typeof AC===Q){for(var v in AC){if(AC[v]!=Object.prototype[v]){AA[v]=AC[v]}}}AA.data=x;AA.width=AB;AA.height=AD;var y={};if(z&&typeof z===Q){for(var u in z){if(z[u]!=Object.prototype[u]){y[u]=z[u]}}}if(r&&typeof r===Q){for(var t in r){if(r[t]!=Object.prototype[t]){if(typeof y.flashvars!=b){y.flashvars+="&"+t+"="+r[t]}else{y.flashvars=t+"="+r[t]}}}}f(function(){U(AA,y,AE);if(AA.id==AE){W(AE,true)}})}else{if(w&&!A&&c("6.0.65")&&(h.win||h.mac)){A=true;W(AE,false);f(function(){var AF={};AF.id=AF.altContentId=AE;AF.width=AB;AF.height=AD;AF.expressInstall=w;k(AF)})}}},getFlashPlayerVersion:function(){return{major:h.pv[0],minor:h.pv[1],release:h.pv[2]}},hasFlashPlayerVersion:c,createSWF:function(t,r,q){if(h.w3cdom){return U(t,r,q)}else{return undefined}},removeSWF:function(q){if(h.w3cdom){X(q)}},createCSS:function(r,q){if(h.w3cdom){V(r,q)}},addDomLoadEvent:f,addLoadEvent:R,getQueryParamValue:function(v){var u=K.location.search||K.location.hash;if(v==null){return g(u)}if(u){var t=u.substring(1).split("&");for(var r=0;r<t.length;r++){if(t[r].substring(0,t[r].indexOf("="))==v){return g(t[r].substring((t[r].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(A&&M){var q=C(m);if(q){q.parentNode.replaceChild(M,q);if(l){W(l,true);if(h.ie&&h.win){M.style.display="block"}}M=null;l=null;A=false}}}}}();
|
includes/version-2-ichor/open-flash-chart.swf
ADDED
Binary file
|
pretty-link.php
ADDED
@@ -0,0 +1,326 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Plugin Name: Pretty Link
|
4 |
+
Plugin URI: http://blairwilliams.com/pretty-link
|
5 |
+
Description: Create clean, simple, trackable links on your website that forward to other URLs and then analyze the number of clicks and unique clicks they get per day using Pretty Link. For instance you could create this URL: http://www.yourdomain.com/cnn that could redirect to http://www.cnn.com. This type of trackable redirection is EXTREMELY useful for masking Affiliate Links. Pretty Link is a superior alternative to using TinyURL, BudURL or other link shrinking service because the URLs are coming from your website's domain name. When these links are used, pretty link not only redirects but also keeps track of their clicks, unique clicks and other data about them which can be analyzed immediately.
|
6 |
+
Version: 1.2.3
|
7 |
+
Author: Blair Williams
|
8 |
+
Author URI: http://blairwilliams.com
|
9 |
+
Copyright: 2009, Caseproof, LLC
|
10 |
+
|
11 |
+
GNU General Public License, Free Software Foundation <http://creativecommons.org/licenses/GPL/2.0/>
|
12 |
+
This program is free software; you can redistribute it and/or modify
|
13 |
+
it under the terms of the GNU General Public License as published by
|
14 |
+
the Free Software Foundation; either version 2 of the License, or
|
15 |
+
(at your option) any later version.
|
16 |
+
|
17 |
+
This program is distributed in the hope that it will be useful,
|
18 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
19 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
20 |
+
GNU General Public License for more details.
|
21 |
+
|
22 |
+
You should have received a copy of the GNU General Public License
|
23 |
+
along with this program; if not, write to the Free Software
|
24 |
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
25 |
+
*/
|
26 |
+
|
27 |
+
require_once('prli-config.php');
|
28 |
+
require_once(PRLI_MODELS_PATH . '/models.inc.php');
|
29 |
+
|
30 |
+
|
31 |
+
function prli_menu()
|
32 |
+
{
|
33 |
+
add_menu_page('Pretty Link', 'Pretty Link', 8, PRLI_PATH.'/prli-links.php','',PRLI_URL.'/images/pretty-link-small.png');
|
34 |
+
add_submenu_page(PRLI_PATH.'/prli-links.php', 'Pretty Link | Reports', 'Reports', 8, PRLI_PATH.'/prli-reports.php');
|
35 |
+
|
36 |
+
add_action('admin_head-pretty-link/prli-reports.php', 'prli_reports_admin_header');
|
37 |
+
add_action('admin_head-pretty-link/prli-links.php', 'prli_links_admin_header');
|
38 |
+
}
|
39 |
+
|
40 |
+
add_action('admin_menu', 'prli_menu');
|
41 |
+
|
42 |
+
/* Add header to prli-reports page */
|
43 |
+
function prli_reports_admin_header()
|
44 |
+
{
|
45 |
+
global $prli_report, $prli_utils;
|
46 |
+
|
47 |
+
if(isset($_POST['link']))
|
48 |
+
$link_id = $_POST['link'];
|
49 |
+
else
|
50 |
+
$link_id = "all";
|
51 |
+
|
52 |
+
if(isset($_POST['type']))
|
53 |
+
$type = $_POST['type'];
|
54 |
+
else
|
55 |
+
$type = "all";
|
56 |
+
|
57 |
+
$first_click = $prli_utils->getFirstClickDate();
|
58 |
+
|
59 |
+
// Adjust for the first click
|
60 |
+
if(isset($first_click))
|
61 |
+
{
|
62 |
+
$min_date = (int)((time()-$first_click)/60/60/24);
|
63 |
+
|
64 |
+
if(isset($_POST['sdate']) and $_POST['sdate'] != '')
|
65 |
+
{
|
66 |
+
$sdate = explode("-",$_POST['sdate']);
|
67 |
+
$start_timestamp = mktime(0,0,0,$sdate[1],$sdate[2],$sdate[0]);
|
68 |
+
}
|
69 |
+
else
|
70 |
+
{
|
71 |
+
// Default to min_date or 30 days ago
|
72 |
+
if($min_date < 30)
|
73 |
+
$start_timestamp = time()-60*60*24*(int)$min_date;
|
74 |
+
else
|
75 |
+
$start_timestamp = time()-60*60*24*30;
|
76 |
+
}
|
77 |
+
|
78 |
+
if(isset($_POST['edate']) and $_POST['edate'] != '')
|
79 |
+
{
|
80 |
+
$edate = explode("-",$_POST['edate']);
|
81 |
+
$end_timestamp = mktime(0,0,0,$edate[1],$edate[2],$edate[0]);
|
82 |
+
}
|
83 |
+
else
|
84 |
+
{
|
85 |
+
$end_timestamp = time();
|
86 |
+
}
|
87 |
+
}
|
88 |
+
else
|
89 |
+
{
|
90 |
+
$min_date = 0;
|
91 |
+
$start_timestamp = time();
|
92 |
+
$end_timestamp = time();
|
93 |
+
}
|
94 |
+
?>
|
95 |
+
|
96 |
+
<!-- JQuery UI Includes -->
|
97 |
+
<link type="text/css" href="/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/includes/jquery/css/ui-lightness/jquery-ui-1.7.1.custom.css" rel="stylesheet" />
|
98 |
+
<script type="text/javascript" src="/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/includes/jquery/js/jquery-1.3.2.min.js"></script>
|
99 |
+
<script type="text/javascript" src="/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/includes/jquery/js/jquery-ui-1.7.1.custom.min.js"></script>
|
100 |
+
|
101 |
+
<script type="text/javascript">
|
102 |
+
$(document).ready(function(){
|
103 |
+
$("#sdate").datepicker({ dateFormat: 'yy-mm-dd', defaultDate: -30, minDate: -<?php echo $min_date; ?>, maxDate: 0 });
|
104 |
+
$("#edate").datepicker({ dateFormat: 'yy-mm-dd', minDate: -<?php echo $min_date; ?>, maxDate: 0 });
|
105 |
+
});
|
106 |
+
</script>
|
107 |
+
|
108 |
+
<script type="text/javascript">
|
109 |
+
$(document).ready(function(){
|
110 |
+
$(".filter_toggle").click( function () {
|
111 |
+
$(".filter_pane").slideToggle("slow");
|
112 |
+
});
|
113 |
+
});
|
114 |
+
</script>
|
115 |
+
|
116 |
+
<style type="text/css">
|
117 |
+
.filter_toggle {
|
118 |
+
line-height: 34px;
|
119 |
+
font-size: 14px;
|
120 |
+
font-weight: bold;
|
121 |
+
padding-bottom: 10px;
|
122 |
+
}
|
123 |
+
|
124 |
+
.filter_pane {
|
125 |
+
background-color: white;
|
126 |
+
border: 2px solid #777777;
|
127 |
+
height: 275px;
|
128 |
+
width: 600px;
|
129 |
+
padding-left: 20px;
|
130 |
+
padding-top: 10px;
|
131 |
+
}
|
132 |
+
|
133 |
+
</style>
|
134 |
+
|
135 |
+
<!-- Open Flash Chart Includes -->
|
136 |
+
<script type="text/javascript" src="/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/includes/version-2-ichor/js/json/json2.js"></script>
|
137 |
+
<script type="text/javascript" src="/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/includes/version-2-ichor/js/swfobject.js"></script>
|
138 |
+
<script type="text/javascript">
|
139 |
+
swfobject.embedSWF("/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/includes/version-2-ichor/open-flash-chart.swf", "my_chart", "100%", "400", "9.0.0");
|
140 |
+
</script>
|
141 |
+
|
142 |
+
<script type="text/javascript">
|
143 |
+
|
144 |
+
function ofc_ready()
|
145 |
+
{
|
146 |
+
//alert('ofc_ready');
|
147 |
+
}
|
148 |
+
|
149 |
+
function open_flash_chart_data()
|
150 |
+
{
|
151 |
+
//alert( 'reading data' );
|
152 |
+
return JSON.stringify(data);
|
153 |
+
}
|
154 |
+
|
155 |
+
function findSWF(movieName) {
|
156 |
+
if (navigator.appName.indexOf("Microsoft")!= -1) {
|
157 |
+
return window[movieName];
|
158 |
+
} else {
|
159 |
+
return document[movieName];
|
160 |
+
}
|
161 |
+
}
|
162 |
+
|
163 |
+
OFC = {};
|
164 |
+
|
165 |
+
OFC.jquery = {
|
166 |
+
name: "jQuery",
|
167 |
+
version: function(src) { return $('#'+ src)[0].get_version() },
|
168 |
+
rasterize: function (src, dst) { $('#'+ dst).replaceWith(OFC.jquery.image(src)) },
|
169 |
+
image: function(src) { return "<img src='data:image/png;base64," + $('#'+src)[0].get_img_binary() + "' />"},
|
170 |
+
popup: function(src) {
|
171 |
+
var img_win = window.open('', 'Charts: Export as Image')
|
172 |
+
with(img_win.document) {
|
173 |
+
write('<html><head><title>Charts: Export as Image<\/title><\/head><body>' + OFC.jquery.image(src) + '<div>Right-Click on the above Image to Save<\/div><\/body><\/html>') }
|
174 |
+
// stop the 'loading...' message
|
175 |
+
img_win.document.close();
|
176 |
+
}
|
177 |
+
}
|
178 |
+
|
179 |
+
// Using an object as namespaces is JS Best Practice. I like the Control.XXX style.
|
180 |
+
//if (!Control) {var Control = {}}
|
181 |
+
//if (typeof(Control == "undefined")) {var Control = {}}
|
182 |
+
if (typeof(Control == "undefined")) {var Control = {OFC: OFC.jquery}}
|
183 |
+
|
184 |
+
|
185 |
+
// By default, right-clicking on OFC and choosing "save image locally" calls this function.
|
186 |
+
// You are free to change the code in OFC and call my wrapper (Control.OFC.your_favorite_save_method)
|
187 |
+
// function save_image() { alert(1); Control.OFC.popup('my_chart') }
|
188 |
+
function save_image() {
|
189 |
+
//alert(1);
|
190 |
+
OFC.jquery.popup('my_chart')
|
191 |
+
}
|
192 |
+
|
193 |
+
function moo() {
|
194 |
+
//alert(99);
|
195 |
+
};
|
196 |
+
|
197 |
+
var data = <?php echo $prli_report->setupClickReport($start_timestamp,$end_timestamp,$link_id,$type); ?>;
|
198 |
+
|
199 |
+
</script>
|
200 |
+
|
201 |
+
<?php
|
202 |
+
}
|
203 |
+
|
204 |
+
function prli_links_admin_header()
|
205 |
+
{
|
206 |
+
?>
|
207 |
+
<script type="text/javascript" src="/wp-content/plugins/<?php echo PRLI_PLUGIN_NAME; ?>/includes/jquery/js/jquery-1.3.2.min.js"></script>
|
208 |
+
<script type="text/javascript">
|
209 |
+
$(document).ready(function(){
|
210 |
+
$(".edit_link").hover(
|
211 |
+
function () {
|
212 |
+
$(this).find(".link_actions").fadeIn(500);
|
213 |
+
},
|
214 |
+
function () {
|
215 |
+
$(this).find(".link_actions").fadeOut(300);
|
216 |
+
}
|
217 |
+
);
|
218 |
+
});
|
219 |
+
</script>
|
220 |
+
|
221 |
+
<script type="text/javascript">
|
222 |
+
$(document).ready(function(){
|
223 |
+
$(".advanced_toggle").click( function () {
|
224 |
+
$(".advanced_pane").slideToggle("slow");
|
225 |
+
});
|
226 |
+
});
|
227 |
+
</script>
|
228 |
+
|
229 |
+
<style type="text/css">
|
230 |
+
|
231 |
+
.advanced_toggle {
|
232 |
+
line-height: 34px;
|
233 |
+
font-size: 12px;
|
234 |
+
font-weight: bold;
|
235 |
+
padding-bottom: 10px;
|
236 |
+
}
|
237 |
+
|
238 |
+
.edit_link {
|
239 |
+
height: 50px;
|
240 |
+
}
|
241 |
+
.slug_name {
|
242 |
+
font-size: 12px;
|
243 |
+
font-weight: bold;
|
244 |
+
}
|
245 |
+
.link_actions {
|
246 |
+
padding-top: 5px;
|
247 |
+
}
|
248 |
+
</style>
|
249 |
+
<?php
|
250 |
+
}
|
251 |
+
|
252 |
+
/********* ADD REDIRECTS YO ***********/
|
253 |
+
function prli_link_rewrite($wp_rewrite) {
|
254 |
+
global $prli_link, $prli_utils;
|
255 |
+
|
256 |
+
$pretty_links = $prli_link->getAll();
|
257 |
+
|
258 |
+
foreach($pretty_links as $pl)
|
259 |
+
{
|
260 |
+
if( $pl->slug != null and $pl->slug != '' and $prli_utils->slugIsAvailable($pl->slug) )
|
261 |
+
{
|
262 |
+
if(isset($pl->forward_params) and $pl->forward_params)
|
263 |
+
add_rewrite_rule('(' . $pl->slug . ')/?\??(.*?)$', 'wp-content/plugins/' . PRLI_PLUGIN_NAME . '/prli.php?sprli=$1&$2');
|
264 |
+
else
|
265 |
+
add_rewrite_rule('(' . $pl->slug . ')/?$', 'wp-content/plugins/' . PRLI_PLUGIN_NAME . '/prli.php?sprli=$1');
|
266 |
+
}
|
267 |
+
|
268 |
+
}
|
269 |
+
}
|
270 |
+
|
271 |
+
// Add rules after the rest of the rules are run
|
272 |
+
add_filter('generate_rewrite_rules', 'prli_link_rewrite');
|
273 |
+
|
274 |
+
/********* INSTALL PLUGIN ***********/
|
275 |
+
$prli_db_version = "0.0.9";
|
276 |
+
|
277 |
+
function prli_install() {
|
278 |
+
global $wpdb, $prli_db_version;
|
279 |
+
|
280 |
+
$clicks_table = $wpdb->prefix . "prli_clicks";
|
281 |
+
$pretty_links_table = $wpdb->prefix . "prli_links";
|
282 |
+
|
283 |
+
$prli_db_version = 'prli_db_version';
|
284 |
+
$prli_current_db_version = get_option( $prli_db_version );
|
285 |
+
|
286 |
+
if( empty($prli_current_db_version) or ($prli_current_db_version != $prli_new_db_version))
|
287 |
+
{
|
288 |
+
/* Create/Upgrade Clicks Table */
|
289 |
+
$sql = "CREATE TABLE " . $clicks_table . " (
|
290 |
+
id int(11) NOT NULL auto_increment,
|
291 |
+
ip varchar(255) default NULL,
|
292 |
+
browser varchar(255) default NULL,
|
293 |
+
first_click tinyint default 0,
|
294 |
+
created_at datetime NOT NULL,
|
295 |
+
link_id int(11) default NULL,
|
296 |
+
PRIMARY KEY (id),
|
297 |
+
KEY link_id (link_id),
|
298 |
+
CONSTRAINT ".$clicks_table."_ibfk_1 FOREIGN KEY (link_id) REFERENCES $pretty_links_table (link_id)
|
299 |
+
);";
|
300 |
+
|
301 |
+
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
302 |
+
|
303 |
+
dbDelta($sql);
|
304 |
+
|
305 |
+
/* Create/Upgrade Pretty Links Table */
|
306 |
+
$sql = "CREATE TABLE " . $pretty_links_table . " (
|
307 |
+
id int(11) NOT NULL auto_increment,
|
308 |
+
url varchar(255) default NULL,
|
309 |
+
slug varchar(255) default NULL,
|
310 |
+
track_as_img tinyint(1) default 0,
|
311 |
+
forward_params tinyint(1) default 0,
|
312 |
+
created_at datetime NOT NULL,
|
313 |
+
PRIMARY KEY (id),
|
314 |
+
KEY slug (slug)
|
315 |
+
);";
|
316 |
+
|
317 |
+
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
318 |
+
|
319 |
+
dbDelta($sql);
|
320 |
+
}
|
321 |
+
}
|
322 |
+
|
323 |
+
// Ensure this gets called on first install
|
324 |
+
register_activation_hook(__FILE__,'prli_install');
|
325 |
+
|
326 |
+
?>
|
prli-config.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
define(PRLI_PLUGIN_NAME,"pretty-link");
|
3 |
+
define(PRLI_PATH,WP_PLUGIN_DIR.'/'.PRLI_PLUGIN_NAME);
|
4 |
+
define(PRLI_MODELS_PATH,PRLI_PATH.'/classes/models');
|
5 |
+
define(PRLI_VIEWS_PATH,PRLI_PATH.'/classes/views');
|
6 |
+
define(PRLI_URL,WP_PLUGIN_URL.'/'.PRLI_PLUGIN_NAME);
|
7 |
+
|
8 |
+
// The number of items per page on a table
|
9 |
+
$page_size = 15;
|
10 |
+
?>
|
prli-links.php
ADDED
@@ -0,0 +1,109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
require_once 'prli-config.php';
|
3 |
+
require_once(PRLI_MODELS_PATH . '/models.inc.php');
|
4 |
+
|
5 |
+
$controller_file = 'prli-links.php';
|
6 |
+
|
7 |
+
if($_GET['action'] == null and $_POST['action'] == null)
|
8 |
+
{
|
9 |
+
$prli_message = "Get started by <a href=\"?page=<?php print PRLI_PLUGIN_NAME; ?>/prli-links.php&action=new\">adding a URL</a> that you want to turn into a pretty link.<br/>Come back to see how many times it was clicked.";
|
10 |
+
|
11 |
+
if(isset($_GET['regenerate']) and $_GET['regenerate'] == 'true')
|
12 |
+
{
|
13 |
+
$wp_rewrite->flush_rules();
|
14 |
+
$prli_message = "Your Pretty Links were Successfully Regenerated";
|
15 |
+
}
|
16 |
+
|
17 |
+
// Required for Pagination to work
|
18 |
+
if($_GET['paged'] != null)
|
19 |
+
{
|
20 |
+
$current_page = $_GET['paged'];
|
21 |
+
}
|
22 |
+
else
|
23 |
+
{
|
24 |
+
$current_page = 1;
|
25 |
+
}
|
26 |
+
|
27 |
+
$record_count = $prli_link->getRecordCount();
|
28 |
+
$page_count = $prli_link->getPageCount($page_size);
|
29 |
+
$links = $prli_link->getPage($current_page,$page_size);
|
30 |
+
$page_last_record = $prli_utils->getLastRecordNum($record_count,$current_page,$page_size);
|
31 |
+
$page_first_record = $prli_utils->getFirstRecordNum($record_count,$current_page,$page_size);
|
32 |
+
$page_params = "";
|
33 |
+
require_once 'classes/views/prli-links/list.php';
|
34 |
+
}
|
35 |
+
else if($_GET['action'] == 'new' or $_POST['action'] == 'new')
|
36 |
+
{
|
37 |
+
require_once 'classes/views/prli-links/new.php';
|
38 |
+
}
|
39 |
+
else if($_GET['action'] == 'create' or $_POST['action'] == 'create')
|
40 |
+
{
|
41 |
+
$errors = $prli_link->validate($_POST);
|
42 |
+
if( count($errors) > 0 )
|
43 |
+
{
|
44 |
+
require_once 'classes/views/prli-links/new.php';
|
45 |
+
}
|
46 |
+
else
|
47 |
+
{
|
48 |
+
$record = $prli_link->create( $_POST );
|
49 |
+
|
50 |
+
// Required for Pagination to work
|
51 |
+
$current_page = 1;
|
52 |
+
$record_count = $prli_link->getRecordCount();
|
53 |
+
$page_count = $prli_link->getPageCount($page_size);
|
54 |
+
$links = $prli_link->getPage($current_page,$page_size);
|
55 |
+
$page_last_record = $prli_utils->getLastRecordNum($record_count,$current_page,$page_size);
|
56 |
+
$page_first_record = $prli_utils->getFirstRecordNum($record_count,$current_page,$page_size);
|
57 |
+
$page_params = "";
|
58 |
+
$prli_message = "Your Pretty Link was Successfully Created";
|
59 |
+
|
60 |
+
require_once 'classes/views/prli-links/list.php';
|
61 |
+
}
|
62 |
+
}
|
63 |
+
else if($_GET['action'] == 'edit' or $_POST['action'] == 'edit')
|
64 |
+
{
|
65 |
+
$record = $prli_link->getOne( $_GET['id'] );
|
66 |
+
$id = $_GET['id'];
|
67 |
+
require_once 'classes/views/prli-links/edit.php';
|
68 |
+
}
|
69 |
+
else if($_GET['action'] == 'update' or $_POST['action'] == 'update')
|
70 |
+
{
|
71 |
+
$errors = $prli_link->validate($_POST);
|
72 |
+
$id = $_POST['id'];
|
73 |
+
if( count($errors) > 0 )
|
74 |
+
{
|
75 |
+
require_once 'classes/views/prli-links/edit.php';
|
76 |
+
}
|
77 |
+
else
|
78 |
+
{
|
79 |
+
$record = $prli_link->update( $_POST['id'], $_POST );
|
80 |
+
|
81 |
+
// Required for Pagination to work
|
82 |
+
$current_page = 1;
|
83 |
+
$record_count = $prli_link->getRecordCount();
|
84 |
+
$page_count = $prli_link->getPageCount($page_size);
|
85 |
+
$links = $prli_link->getPage($current_page,$page_size);
|
86 |
+
$page_last_record = $prli_utils->getLastRecordNum($record_count,$current_page,$page_size);
|
87 |
+
$page_first_record = $prli_utils->getFirstRecordNum($record_count,$current_page,$page_size);
|
88 |
+
$page_params = "";
|
89 |
+
$prli_message = "Your Pretty Link was Successfully Updated";
|
90 |
+
|
91 |
+
require_once 'classes/views/prli-links/list.php';
|
92 |
+
}
|
93 |
+
}
|
94 |
+
else if($_GET['action'] == 'destroy')
|
95 |
+
{
|
96 |
+
$prli_link->destroy( $_GET['id'] );
|
97 |
+
|
98 |
+
// Required for Pagination to work
|
99 |
+
$current_page = 1;
|
100 |
+
$record_count = $prli_link->getRecordCount();
|
101 |
+
$page_count = $prli_link->getPageCount($page_size);
|
102 |
+
$links = $prli_link->getPage($current_page,$page_size);
|
103 |
+
$page_last_record = $prli_utils->getLastRecordNum($record_count,$current_page,$page_size);
|
104 |
+
$page_first_record = $prli_utils->getFirstRecordNum($record_count,$current_page,$page_size);
|
105 |
+
$page_params = "";
|
106 |
+
$prli_message = "Your Pretty Link was Successfully Destroyed";
|
107 |
+
require_once 'classes/views/prli-links/list.php';
|
108 |
+
}
|
109 |
+
?>
|
prli-reports.php
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
require_once 'prli-config.php';
|
3 |
+
require_once(PRLI_MODELS_PATH . '/models.inc.php');
|
4 |
+
|
5 |
+
$controller_file = 'prli-links.php';
|
6 |
+
|
7 |
+
require_once 'classes/views/prli-reports/form.php';
|
8 |
+
?>
|
9 |
+
|
prli.php
ADDED
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/* This file tracks clicks */
|
3 |
+
|
4 |
+
require_once(dirname(__FILE__) . '/../../../wp-config.php');
|
5 |
+
|
6 |
+
// reverse compatibility -- get rid of this within the next couple of releases
|
7 |
+
if( !isset($_GET['sprli']) and isset($_GET['s']) )
|
8 |
+
$_GET['sprli'] = $_GET['s'];
|
9 |
+
|
10 |
+
if( $_GET['sprli'] != null and $_GET['sprli'] != '' )
|
11 |
+
{
|
12 |
+
$slug = $_GET['sprli'];
|
13 |
+
|
14 |
+
$click_table = $wpdb->prefix . "prli_clicks";
|
15 |
+
$pretty_links_table = $wpdb->prefix . "prli_links";
|
16 |
+
|
17 |
+
$query = "SELECT * FROM $pretty_links_table WHERE slug='$slug' LIMIT 1";
|
18 |
+
$pretty_link = $wpdb->get_row($query);
|
19 |
+
|
20 |
+
$first_click = false;
|
21 |
+
|
22 |
+
$click_ip = $_SERVER['REMOTE_ADDR'];
|
23 |
+
$click_browser = $_SERVER['HTTP_USER_AGENT'];
|
24 |
+
|
25 |
+
//Set Cookie if it doesn't exist
|
26 |
+
$cookie_name = 'prli_click_' . $pretty_link->id;
|
27 |
+
$cookie_expire_time = time()+60*60*24*30; // Expire in 30 days
|
28 |
+
|
29 |
+
if($_COOKIE[$cookie_name] == null)
|
30 |
+
{
|
31 |
+
setcookie($cookie_name,$slug,$cookie_expire_time);
|
32 |
+
$first_click = true;
|
33 |
+
}
|
34 |
+
|
35 |
+
//Record Click in DB
|
36 |
+
$insert = "INSERT INTO $click_table (link_id,ip,browser,first_click,created_at) VALUES ($pretty_link->id,'$click_ip','$click_browser','$first_click',NOW())";
|
37 |
+
|
38 |
+
$results = $wpdb->query( $insert );
|
39 |
+
|
40 |
+
$param_string = '';
|
41 |
+
|
42 |
+
if(isset($pretty_link->forward_params) and $pretty_link->forward_params and isset($_GET) and count($_GET) > 1)
|
43 |
+
{
|
44 |
+
$first_param = true;
|
45 |
+
foreach($_GET as $key => $value)
|
46 |
+
{
|
47 |
+
// Ignore the 'sprli' parameter
|
48 |
+
if($key != 'sprli')
|
49 |
+
{
|
50 |
+
if($first_param)
|
51 |
+
{
|
52 |
+
$param_string = (preg_match("#\?#", $pretty_link->url)?"&":"?");
|
53 |
+
$first_param = false;
|
54 |
+
}
|
55 |
+
else
|
56 |
+
$param_string .= "&";
|
57 |
+
|
58 |
+
$param_string .= "$key=$value";
|
59 |
+
}
|
60 |
+
}
|
61 |
+
}
|
62 |
+
|
63 |
+
//Redirect to Product URL
|
64 |
+
if(isset($pretty_link->track_as_img) and $pretty_link->track_as_img)
|
65 |
+
{
|
66 |
+
$size = getimagesize($pretty_link->url);
|
67 |
+
header('Content-Type: '.$size['mime']);
|
68 |
+
echo file_get_contents($pretty_link->url.$param_string);
|
69 |
+
}
|
70 |
+
else
|
71 |
+
header("Location: $pretty_link->url".$param_string);
|
72 |
+
}
|
73 |
+
?>
|
readme.txt
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
=== Pretty Link ===
|
2 |
+
Contributors: supercleanse
|
3 |
+
Donate link: http://blairwilliams.com/pretty-link
|
4 |
+
Tags: links, link, url, urls, affiliate, affiliates, pretty, marketing, redirect, forward, plugin, rewrite, short, shorten, click, clicks, track, tracking, tiny, tinyurl, budurl, shrinking, domain, shrink, mask, masking, slug, slugs, admin, stats, statistics, stat, statistic, cloaking, cloak, twitter, email, ajax, javascript, ui
|
5 |
+
Requires at least: 2.7.1
|
6 |
+
Tested up to: 2.7.1
|
7 |
+
Stable tag: 1.2.3
|
8 |
+
|
9 |
+
Create clean, simple, trackable links on your website that forward to other URLs and then analyze the number of clicks and unique clicks they get per day using Pretty Link. For instance you could create this URL: http://www.yourdomain.com/cnn that could redirect to http://www.cnn.com. This type of trackable redirection is EXTREMELY useful for masking Affiliate Links. Pretty Link is a superior alternative to using TinyURL, BudURL or other link shrinking service because the URLs are coming from your website's domain name. When these links are used, pretty link not only redirects but also keeps track of their clicks, unique clicks and other data about them which can be analyzed immediately.
|
10 |
+
|
11 |
+
== Description ==
|
12 |
+
|
13 |
+
Create clean, simple, trackable links on your website that forward to other URLs and then analyze the number of clicks and unique clicks they get per day using Pretty Link. For instance you could create this URL: http://www.yourdomain.com/cnn that could redirect to http://www.cnn.com. This type of trackable redirection is EXTREMELY useful for masking Affiliate Links. Pretty Link is a superior alternative to using TinyURL, BudURL or other link shrinking service because the URLs are coming from your website's domain name. When these links are used, pretty link not only redirects but also keeps track of their clicks, unique clicks and other data about them which can be analyzed immediately.
|
14 |
+
|
15 |
+
= Features =
|
16 |
+
|
17 |
+
* Gives you the ability to create clean, simple URLs on your website that redirect to any other URL
|
18 |
+
* Generates random 2-3 character slugs for your URL or allows you to name a custom slug for your URL
|
19 |
+
* Enables you to post your Pretty Links to Twitter directly from your WordPress admin
|
20 |
+
* Enables you to send your Pretty Links via Email directly from your WordPress admin
|
21 |
+
* Tracks the Number of Clicks per link
|
22 |
+
* Tracks the Number of Unique Clicks per link
|
23 |
+
* Provides a reporting interface where you can see a configurable chart of clicks per day. This report can be filtered by the specific link clicked, date range, and/or unique clicks.
|
24 |
+
* Track impressions by loading images through pretty link (experimental)
|
25 |
+
* Pass custom parameters to your scripts through pretty link and still have full tracking ability (experimental)
|
26 |
+
* Intuitive Javascript / AJAX Admin User Interface
|
27 |
+
|
28 |
+
== Installation ==
|
29 |
+
|
30 |
+
1. Upload 'pretty-link.zip' to the '/wp-content/plugins/' directory
|
31 |
+
|
32 |
+
2. Activate the plugin through the 'Plugins' menu in WordPress
|
33 |
+
|
34 |
+
3. Make sure you have changed your permalink Common Settings in Settings -> Permalinks away from "Default" to something else. I prefer using custom and then "/%postname%/" for the simplest possible URL slugs.
|
35 |
+
|
36 |
+
== Frequently Asked Questions ==
|
37 |
+
|
38 |
+
* This plugin is extremely simple. All you have to do is to find the pretty link admin menu (bottom left of your admin page) and start by clicking "Add a Pretty Link."
|
39 |
+
|
40 |
+
* Make sure you haven't blocked access to the /wp-content/plugins/pretty-link/prli.php file in your WordPress install. Pretty Link needs this file to be publicly accessible in order to work. If access to this file is blocked then you'll recieve 404 errors for all your pretty links.
|
41 |
+
|
42 |
+
= SYSTEM REQUIREMENTS: =
|
43 |
+
|
44 |
+
1. WordPress 2.7.1
|
45 |
+
2. PHP
|
46 |
+
3. Mysql 5.0+
|
47 |
+
4. Apache (hasn't been tested on IIS)
|
48 |
+
5. Mod Rewrite must be installed and functioning
|
49 |
+
6. Your WordPress install must have write privileges for your .htaccess file
|
50 |
+
7. Unix based web host (hasn't been tested on Windows)
|
51 |
+
|
52 |
+
= NOTE: =
|
53 |
+
|
54 |
+
You must have pretty permalinks and rewrite working in your Wordpress/PHP/Apache install before pretty links will work (this is already done in most cases but if you can't get anything but Default permalinks working then you may need to contact your system administrator). Pretty links utlilzes Wordpress's URL rewriting capabilities (via Apache's mod_rewrite) which are only turned on when you change the settings in "Settings -> Permalinks" from "Default" to something else. If you want your blog to have any kind of decent SEO then you really should do this anyway.
|
55 |
+
|
56 |
+
== Screenshots ==
|
57 |
+
|
58 |
+
1. Analyze Click Data
|
59 |
+
2. Link Management Screen
|
60 |
+
3. Add a Link Screen
|
61 |
+
4. Edit a Link Screen
|
screenshot-1.png
ADDED
Binary file
|
screenshot-2.png
ADDED
Binary file
|
screenshot-3.png
ADDED
Binary file
|
screenshot-4.png
ADDED
Binary file
|