initial commit

This commit is contained in:
John Bintz 2009-06-13 08:07:36 -04:00
commit e2c51b0d22
135 changed files with 22977 additions and 0 deletions

25
README Normal file
View File

@ -0,0 +1,25 @@
The ComicPress Manager plugin works in conjunction with an installation of ComicPress,
the Webcomic theme for WordPress. ComicPress Manager is intended to reduce the amount
of work required to administer a site running ComicPress.
This is the 1.4 line. Only critical bugfixes should go here. All new development and
cleanup work should go in the 1.5 line:
http://github.com/johnbintz/comicpress-manager-1.5/tree/master
Copyright 2008-2009 John Bintz
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

View File

@ -0,0 +1,282 @@
<?php
//harmonious @zip @hash
function cpm_action_batch_processing() {
global $cpm_config;
$files_to_delete = array();
$posts_to_delete = array();
$thumbnails_to_regenerate = array();
$files_to_redate = array();
$posts_to_redate = array();
$posts_to_generate = array();
$posts_that_exist = array();
$posts_to_recategorize = array();
extract(cpm_normalize_storyline_structure());
$comic_categories = array();
foreach ($category_tree as $node) { $comic_categories[] = end(explode("/", $node)); }
$cpm_config->is_cpm_managing_posts = true;
foreach ($_POST as $field => $value) {
if (($_POST['bulk-action'] != "-1") && ($_POST['bulk-action'] != "individual")) {
$bulk_posts_updated = array();
if (preg_match("#^(file|post),([^\,]*),(.*)$#", $field, $matches) > 0) {
list ($all, $type, $date, $id) = $matches;
if (isset($_POST["batch-${date}"])) {
switch ($_POST['bulk-action']) {
case "delete":
switch ($type) {
case "file":
if (($result = cpm_match_id_to_file($id)) !== false) {
$files_to_delete[] = $result;
}
break;
case "post": $posts_to_delete[] = $id; break;
}
break;
case "regen-thumbs":
if ($type == "file") {
if (($result = cpm_match_id_to_file($id)) !== false) {
$thumbnails_to_regenerate[] = $result;
}
}
break;
case "edit":
if ($type == "post") {
foreach (array('hovertext' => 'bulk-hovertext',
'transcript' => 'bulk-transcript') as $meta_name => $post_name) {
if (isset($_POST[$post_name])) {
update_post_meta($id, $meta_name, $_POST[$post_name]);
}
}
$post_categories = wp_get_post_categories($id);
$did_change = false;
if (isset($_POST['bulk-storyline-in-comic-category'])) {
foreach ($comic_categories as $category_id) {
if (in_array($category_id, $_POST['bulk-storyline-in-comic-category'])) {
if (!in_array($category_id, $post_categories)) {
$did_change = true;
$post_categories[] = $category_id;
}
} else {
if (($index = array_search($category_id, $post_categories)) !== false) {
$did_change = true;
array_splice($post_categories, $index, 1);
}
}
}
}
if ($did_change) {
wp_set_post_categories($id, $post_categories);
}
$bulk_posts_updates[] = $id;
}
break;
case "import":
switch ($type) {
case "file":
if (($result = cpm_match_id_to_file($id)) !== false) {
$posts_to_generate[] = $result;
}
break;
case "post":
$posts_that_exist[] = $date;
break;
}
break;
}
}
}
} else {
if (preg_match('#^([0-9]+)-in-comic-category#', $field, $matches) > 0) {
if (get_post($matches[1])) {
$posts_to_recategorize[$matches[1]] = $value;
}
}
if (preg_match("#^delete-file-(.*)$#", $field, $matches) > 0) {
if (($result = cpm_match_id_to_file($matches[1])) !== false) {
$files_to_delete[] = $result;
}
}
if (preg_match("#^delete-post-(.*)$#", $field, $matches) > 0) {
if (get_post($matches[1])) {
$posts_to_delete[] = $matches[1];
}
}
if (preg_match('#^regen-(.*)$#', $field, $matches) > 0) {
if (($result = cpm_match_id_to_file($matches[1])) !== false) {
$thumbnails_to_regenerate[] = $result;
}
}
if (preg_match("#^do-redate-file-(.*)$#", $field, $matches) > 0) {
if (($result = cpm_match_id_to_file($matches[1])) !== false) {
$files_to_redate[$result] = $value;
}
}
if (preg_match("#^generate-post-(.*)$#", $field, $matches) > 0) {
if (($result = cpm_match_id_to_file($matches[1])) !== false) {
$posts_to_generate[] = $result;
}
}
if (preg_match("#^delete-post-(.*)$#", $field, $matches) > 0) {
if (get_post($matches[1])) {
$posts_to_redate[$matches[1]] = $value;
}
}
}
}
$did_generate_thumbs = array();
$ok_to_keep_uploading = true;
$files_created_in_operation = array();
if (count($thumbnails_to_regenerate) > 0) {
$thumbnails_written = array();
$thumbnails_not_written = array();
foreach ($thumbnails_to_regenerate as $file) {
$comic_file = pathinfo($file, PATHINFO_BASENAME);
$wrote_thumbnail = cpm_write_thumbnail($file, $comic_file, true);
if (!is_null($wrote_thumbnail)) {
if (is_array($wrote_thumbnail)) {
$files_created_in_operation = array_merge($files_created_in_operation, $wrote_thumbnail);
$thumbnails_written[] = $comic_file;
} else {
$thumbnails_not_written[] = $comic_file;
}
}
if (function_exists('cpm_wpmu_is_over_storage_limit')) {
if (cpm_wpmu_is_over_storage_limit()) { $ok_to_keep_uploading = false; break; }
}
}
if (count($thumbnails_written) > 0) {
$cpm_config->messages[] = sprintf(__("<strong>The following thumbnails were written:</strong> %s", 'comicpress-manager'), implode(", ", $thumbnails_written));
}
if (count($thumbnails_not_written) > 0) {
$cpm_config->warnings[] = sprintf(__("<strong>The following thumbnails were not written:</strong> %s", 'comicpress-manager'), implode(", ", $thumbnails_not_written));
}
}
if (count($bulk_posts_updates) > 0) {
$cpm_config->messages[] = sprintf(__("<strong>The following posts were updated:</strong> %s", 'comicpress-manager'), implode(", ", $bulk_posts_updates));
}
if (count($files_to_delete) > 0) {
$comic_files_deleted = array();
foreach ($files_to_delete as $file) {
$comic_file = pathinfo($file, PATHINFO_BASENAME);
$delete_targets = array($file);
foreach ($cpm_config->thumbs_folder_writable as $type => $value) {
$path = CPM_DOCUMENT_ROOT . '/' . $cpm_config->properties[$type . "_comic_folder"];
if (($subdir = cpm_get_subcomic_directory()) !== false) {
$path .= '/' . $subdir;
}
$path .= '/' . $comic_file;
$delete_targets[] = $path;;
}
foreach ($delete_targets as $target) {
if (file_exists($target)) {
@unlink($target);
}
}
$comic_files_deleted[] = $comic_file;
}
$cpm_config->messages[] = sprintf(__("<strong>The following comic files and their associated thumbnails were deleted:</strong> %s", 'comicpress-manager'), implode(", ", $comic_files_deleted));
}
if (count($posts_to_delete) > 0) {
foreach ($posts_to_delete as $post) {
wp_delete_post($post);
}
$cpm_config->messages[] = sprintf(__("<strong>The following posts were deleted:</strong> %s", 'comicpress-manager'), implode(", ", $posts_to_delete));
}
$master_category = end(explode("/", reset($category_tree)));
foreach ($posts_to_generate as $file) {
$ok = false;
$comic_file = pathinfo($file, PATHINFO_BASENAME);
if (($result = cpm_breakdown_comic_filename($comic_file)) !== false) {
if (!in_array(date("Y-m-d", strtotime($result['date'])), $posts_that_exist)) {
if (($post_hash = generate_post_hash($result['date'], $result['converted_title'])) !== false) {
$post_hash['post_category'] = array($master_category);
$ok = !is_null($post_id = wp_insert_post($post_hash));
}
}
}
if ($ok) {
$cpm_config->messages[] = sprintf(__('<strong>Created post %1$s for %2$s.</strong>', 'comicpress-manager'), $post_id, $comic_file);
} else {
$cpm_config->warnings[] = sprintf(__("<strong>Could not create post for %s.</strong>", 'comicpress-manager'), $comic_file);
}
}
foreach ($posts_to_recategorize as $id => $requested_comic_categories) {
if (!in_array($id, $posts_to_delete)) {
$post_categories = wp_get_post_categories($id);
$did_change = false;
foreach ($comic_categories as $category_id) {
if (in_array($category_id, $requested_comic_categories)) {
if (!in_array($category_id, $post_categories)) {
$did_change = true;
$post_categories[] = $category_id;
}
} else {
if (($index = array_search($category_id, $post_categories)) !== false) {
$did_change = true;
array_splice($post_categories, $index, 1);
}
}
}
if ($did_change) {
wp_set_post_categories($id, $post_categories);
$cpm_config->messages[] = sprintf(__("<strong>Storyline for post %s updated.</strong>", 'comicpress-manager'), $id);
}
}
}
if (!$ok_to_keep_uploading) {
$cpm_config->warnings = array($cpm_config->wpmu_disk_space_message);
foreach ($files_created_in_operation as $file) { @unlink($file); }
}
$cpm_config->comic_files = cpm_read_comics_folder();
}
function cpm_match_id_to_file($id) {
global $cpm_config;
foreach ($cpm_config->comic_files as $file) {
$filename = str_replace(".", "_", pathinfo($file, PATHINFO_BASENAME));
if ($filename == $id) { return $file; }
}
return false;
}
?>

View File

@ -0,0 +1,191 @@
<?php
//harmonious @zip @hash
function cpm_action_build_storyline_schema() {
global $cpm_config;
update_option('comicpress-enable-storyline-support', isset($_POST['enable-storyline-support']) ? 1 : 0);
update_option('comicpress-storyline-show-top-category', isset($_POST['show-top-category']) ? 1 : 0);
if (isset($_POST['enable-storyline-support'])) {
$cpm_config->is_cpm_modifying_categories = true;
$categories_to_create = array();
$categories_to_rename = array();
$category_ids_to_clean = array();
extract(cpm_get_all_comic_categories());
$comic_posts = cpm_query_posts();
$comic_posts_by_category_id = array();
foreach ($comic_posts as $post) {
foreach (wp_get_post_categories($post->ID) as $category) {
if (!isset($comic_posts_by_category_id[$category])) { $comic_posts_by_category_id[$category] = array(); }
$comic_posts_by_category_id[$category][] = $post->ID;
}
}
foreach ($_POST as $field => $value) {
$parts = explode("/", $field);
if (($parts[0] == "0") && (count($parts) > 1)) {
$category_id = end($parts);
$category = get_category($category_id, ARRAY_A);
if (!empty($category)) {
if ($category['cat_name'] != $value) {
$cpm_config->messages[] = sprintf(__('Category <strong>%1$s</strong> renamed to <strong>%2$s</strong>.', 'comicpress-manager'), $category['cat_name'], $value);
$category['cat_name'] = $value;
wp_update_category($category);
$category_ids_to_clean[] = $category_id;
}
} else {
$categories_to_create[$field] = $value;
}
if (($index = array_search($field, $category_tree)) !== false) {
array_splice($category_tree, $index, 1);
}
}
}
if (isset($_POST['original-categories'])) {
foreach (explode(",", $_POST['original-categories']) as $node) {
if (!isset($_POST[$node])) {
$category_id = end(explode("/", $node));
$category = get_category($category_id);
$original_cat_name = $category->cat_name;
// ensure that we're not deleting a ComicPress category
$ok = true;
foreach (array('comiccat', 'blogcat') as $type) {
if ($category_id == $cpm_config->properties[$type]) { $ok = false; }
}
// ensure that the category truly is a child of the comic category
if ($ok) {
$category = get_category($category_id);
$ok = false;
if (!is_wp_error($category)) {
while (($category->parent != 0) && ($category->parent != $cpm_config->properties['comiccat'])) {
$category = get_category($category->parent);
}
if ($category->parent == $cpm_config->properties['comiccat']) { $ok = true; }
}
}
if ($ok) {
wp_delete_category($category_id);
$category_ids_to_clean[] = $category_id;
$cpm_config->messages[] = sprintf(__('Category <strong>%s</strong> deleted.', 'comicpress-manager'), $original_cat_name);
}
}
}
}
uksort($categories_to_create, 'cpm_sort_category_keys_by_length');
$changed_field_ids = array();
$removed_field_ids = array();
$target_category_ids = array();
foreach ($categories_to_create as $field => $value) {
$original_field = $field;
foreach ($changed_field_ids as $changed_field => $new_field) {
if ((strpos($field, $changed_field) === 0) && (strlen($field) > strlen($changed_field))) {
$field = str_replace($changed_field, $new_field, $field);
break;
}
}
$parts = explode("/", $field);
$target_id = array_pop($parts);
$parent_id = array_pop($parts);
if (!category_exists($value)) {
$category_id = wp_create_category($value, $parent_id);
$category_ids_to_clean[] = $category_id;
array_push($parts, $parent_id);
array_push($parts, $category_id);
$changed_field_ids[$original_field] = implode("/", $parts);
$cpm_config->messages[] = sprintf(__('Category <strong>%s</strong> created.', 'comicpress-manager'), $value);
} else {
$cpm_config->warnings[] = sprintf(__("The category %s already exists. Please enter a new name.", 'comicpress-manager'), $value);
$removed_field_ids[] = $field;
}
}
$order = array_diff(explode(",", $_POST['order']), $removed_field_ids);
for ($i = 0; $i < count($order); ++$i) {
if (isset($changed_field_ids[$order[$i]])) {
$order[$i] = $changed_field_ids[$order[$i]];
}
}
// ensure we're writing sane data
$new_order = array();
$valid_comic_categories = array();
foreach ($order as $node) {
$parts = explode("/", $node);
if (($parts[0] == "0") && (count($parts) > 1)) {
$new_order[] = $node;
$valid_comic_categories[] = end($parts);
}
}
$comic_categories_preserved = array();
foreach ($comic_posts as $post) {
$categories = wp_get_post_categories($post->ID);
if (count(array_intersect($valid_comic_categories, $categories)) == 0) {
$all_parent_categories = array();
foreach ($comic_posts_by_category_id as $category => $post_ids) {
if (in_array($post->ID, $post_ids)) {
foreach ($new_order as $node) {
$parts = explode("/", $node);
if ($category == end($parts)) {
$parts = explode("/", $node);
array_pop($parts);
if (count($parts) > 1) { $all_parent_categories[] = implode("/", $parts); }
}
}
}
}
if (count($all_parent_categories) > 0) {
foreach ($all_parent_categories as $category_node) {
if (in_array($category_node, $new_order)) {
$categories[] = end(explode("/", $category_node));
}
}
} else {
$categories[] = $cpm_config->properties['comiccat'];
}
wp_set_post_categories($post->ID, $categories);
$comic_categories_preserved[] = $post->ID;
}
}
if (count($comic_categories_preserved) > 0) {
$cpm_config->messages[] = sprintf(__("The following orphaned comic posts were placed into their original category's parent: <strong>%s</strong>"), implode(", ", $comic_categories_preserved));
}
$cpm_config->messages[] = __('Storyline structure saved.', 'comicpress-manager');
update_option("comicpress-storyline-category-order", implode(",", $new_order));
clean_term_cache($category_ids_to_clean, 'category');
wp_cache_flush();
}
}
function cpm_sort_category_keys_by_length($a, $b) {
return strlen($a) - strlen($b);
}
?>

View File

@ -0,0 +1,180 @@
<?php
//harmonious @zip @hash
function cpm_action_change_dates() {
global $cpm_config;
$comic_posts_to_date_shift = array();
$comic_files_to_date_shift = array();
$comic_post_target_date_counts = array();
$wp_date_string_length = strlen(date("Y-m-d"));
$cpm_date_string_length = strlen(date(CPM_DATE_FORMAT));
$cpm_config->is_cpm_managing_posts = true;
// find all comic files that will be shifted
foreach ($cpm_config->comic_files as $comic_file) {
$comic_filename = pathinfo($comic_file, PATHINFO_BASENAME);
$filename_info = cpm_breakdown_comic_filename($comic_filename);
$key = md5($comic_file);
if (isset($_POST['dates'][$key])) {
if ($_POST['dates'][$key] != $filename_info['date']) {
$timestamp = strtotime($_POST['dates'][$key]);
if (($timestamp !== false) && ($timestamp !== -1)) {
$target_date = date(CPM_DATE_FORMAT, $timestamp);
$new_comic_filename = $target_date . substr($comic_filename, $cpm_date_string_length);
$comic_posts_to_date_shift[strtotime($filename_info['date'])] = $timestamp;
if (!isset($comic_post_target_date_counts[$timestamp])) {
$comic_post_target_date_counts[$timestamp] = 0;
}
$comic_post_target_date_counts[$timestamp]++;
if (!isset($comic_files_to_date_shift[$timestamp])) {
$comic_files_to_date_shift[$timestamp] = array($comic_filename, $new_comic_filename);
}
}
}
}
}
$comic_posts_to_change = array();
$all_posts = cpm_query_posts();
// get the target dates for all files to move
if (count($comic_posts_to_date_shift) > 0) {
foreach ($all_posts as $comic_post) {
$post_date_day = substr($comic_post->post_date, 0, $wp_date_string_length);
$post_date_day_timestamp = strtotime($post_date_day);
if (isset($comic_posts_to_date_shift[$post_date_day_timestamp])) {
if ($comic_post_target_date_counts[$comic_posts_to_date_shift[$post_date_day_timestamp]] == 1) {
$new_post_date = date("Y-m-d", $comic_posts_to_date_shift[$post_date_day_timestamp]) . substr($comic_post->post_date, $wp_date_string_length);
$comic_posts_to_change[$comic_post->ID] = array($comic_post, $new_post_date);
}
}
}
}
$final_post_day_counts = array();
// intersect all existing and potential new posts, counting how many
// posts occur on each day
foreach ($all_posts as $comic_post) {
if (isset($comic_posts_to_change[$comic_post->ID])) {
$date_to_use = $comic_posts_to_change[$comic_post->ID][1];
} else {
$date_to_use = $comic_post->post_date;
}
$day_to_use = strtotime(substr($date_to_use, 0, $wp_date_string_length));
if (!isset($final_post_day_counts[$day_to_use])) {
$final_post_day_counts[$day_to_use] = 0;
}
$final_post_day_counts[$day_to_use]++;
}
$posts_moved = array();
// move what can be moved
foreach ($comic_posts_to_change as $id => $info) {
list($comic_post, $new_post_date) = $info;
$new_post_day = strtotime(substr($new_post_date, 0, $wp_date_string_length));
if ($final_post_day_counts[$new_post_day] == 1) {
$old_post_date = $comic_post->post_date;
$comic_post->post_date = $new_post_date;
$comic_post->post_date_gmt = get_gmt_from_date($new_post_date);
wp_update_post($comic_post);
$cpm_config->messages[] = sprintf(__('<strong>Post %1$s moved to %2$s.</strong>', 'comicpress-manager'), $id, date("Y-m-d", $new_post_day));
$posts_moved[$new_post_day] = array($comic_post, $old_post_date);
} else {
$cpm_config->warnings[] = sprintf(__('<strong>Moving post %1$s to %2$s would cause two comic posts to exist on the same day.</strong> This is not allowed in the automated process.', 'comicpress-manager'), $id, date("Y-m-d", $new_post_day));
}
}
// try to move all the files, and roll back any changes to files and posts that fail
foreach ($comic_post_target_date_counts as $target_date => $count) {
if (!isset($final_post_day_counts[$target_date]) || ($final_post_day_counts[$target_date] == 1)) {
if ($count > 1) {
$cpm_config->warnings[] = sprintf(__("<strong>You are moving two comics to the same date: %s.</strong> This is not allowed in the automated process.", 'comicpress-manager'), $target_date);
} else {
list($comic_filename, $new_comic_filename) = $comic_files_to_date_shift[$target_date];
$roll_back_change = false;
$calculate_do_move = array();
foreach (array(
array(__('comic folder', 'comicpress-manager'), 'comic_folder', ""),
array(__('RSS feed folder', 'comicpress-manager'), 'rss_comic_folder', "rss"),
array(__('archive folder', 'comicpress-manager'), 'archive_comic_folder', "archive")) as $folder_info) {
list ($name, $property, $type) = $folder_info;
$do_move = true;
if ($type != "") {
if ($cpm_config->separate_thumbs_folder_defined[$type]) {
if ($cpm_config->thumbs_folder_writable[$type]) {
$do_move = (cpm_option("${type}-generate-thumbnails") == 1);
}
}
$calculate_do_move[$type] = $do_move;
}
if ($do_move) {
$path = CPM_DOCUMENT_ROOT . '/' . $cpm_config->properties[$property];
if (!file_exists($path)) {
$cpm_config->errors[] = sprintf(__('The %1$s <strong>%2$s</strong> does not exist.', 'comicpress-manager'), $name, $cpm_config->properties[$property]);
$roll_back_change = true;
} else {
if (file_exists($path . '/' . $comic_filename)) {
if (@rename($path . '/' . $comic_filename, $path . '/' . $new_comic_filename)) {
$cpm_config->messages[] = sprintf(__('<strong>Rename %1$s file %2$s to %3$s.</strong>', 'comicpress-manager'), $name, $comic_filename, $new_comic_filename);
} else {
$cpm_config->warnings[] = sprintf(__('<strong>The renaming of %1$s to %2$s failed.</strong> Check the permissions on %3$s', 'comicpress-manager'), $comic_filename, $new_comic_filename, $path);
$roll_back_change = true;
}
}
}
}
}
if ($roll_back_change) {
foreach (array(
array(__('comic folder', 'comicpress-manager'), 'comic_folder',""),
array(__('RSS feed folder', 'comicpress-manager'), 'rss_comic_folder',"rss"),
array(__('archive folder', 'comicpress-manager'), 'archive_comic_folder',"archive")) as $folder_info) {
list ($name, $property) = $folder_info;
$do_move = isset($calculate_do_move[$type]) ? $calculate_do_move[$type] : true;
if ($do_move) {
$path = CPM_DOCUMENT_ROOT . '/' . $cpm_config->properties[$property];
if (file_exists($path . '/' . $new_comic_filename)) {
@rename($path . '/' . $new_comic_filename, $path . '/' . $comic_filename);
$cpm_config->messages[] = sprintf(__("<strong>Rolling back %s.</strong>", 'comicpress-manager'), $new_comic_filename);
}
}
}
if (isset($posts_moved[$target_date])) {
list($comic_post, $old_post_date) = $posts_moved[$target_date];
$comic_post->post_date = $old_post_date;
$comic_post->post_date_gmt = get_gmt_from_date($old_post_date);
wp_update_post($comic_post);
$cpm_config->messages[] = sprintf(__('<strong>Rename error, rolling back post %1$s to %2$s.</strong>', 'comicpress-manager'), $comic_post->ID, $old_post_date);
}
}
}
}
}
$cpm_config->comic_files = cpm_read_comics_folder();
}
?>

View File

@ -0,0 +1,110 @@
<?php
function cpm_action_create_missing_posts() {
global $cpm_config;
$all_post_dates = array();
foreach (cpm_query_posts() as $comic_post) {
$all_post_dates[] = date(CPM_DATE_FORMAT, strtotime($comic_post->post_date));
}
$all_post_dates = array_unique($all_post_dates);
$duplicate_posts_within_creation = array();
$posts_created = array();
$thumbnails_written = array();
$thumbnails_not_written = array();
$invalid_filenames = array();
$duplicate_posts = array();
$new_thumbnails_not_needed = array();
$execution_time = ini_get("max_execution_time");
$max_posts_imported = (int)($execution_time / 2);
$imported_post_count = 0;
$safe_exit = false;
if (strtotime($_POST['time']) === false) {
$cpm_config->warnings[] = sprintf(__('<strong>There was an error in the post time (%1$s)</strong>. The time is not parseable by strtotime().', 'comicpress-manager'), $_POST['time']);
} else {
foreach ($cpm_config->comic_files as $comic_file) {
$comic_file = pathinfo($comic_file, PATHINFO_BASENAME);
if (($result = cpm_breakdown_comic_filename($comic_file)) !== false) {
extract($result, EXTR_PREFIX_ALL, 'filename');
$ok_to_create_post = !in_array($result['date'], $all_post_dates);
$show_duplicate_post_message = false;
$post_id = null;
if (isset($duplicate_posts_within_creation[$result['date']])) {
$ok_to_create_post = false;
$show_duplicate_post_message = true;
$post_id = $duplicate_posts_within_creation[$result['date']];
}
if ($ok_to_create_post) {
if (isset($_POST['duplicate_check'])) {
$ok_to_create_post = (($post_id = post_exists($post_title, $post_content, $post_date)) == 0);
}
} else {
if (!isset($_POST['duplicate_check'])) {
$ok_to_create_post = true;
}
}
if ($ok_to_create_post) {
if (($post_hash = generate_post_hash($filename_date, $filename_converted_title)) !== false) {
if (!is_null($post_id = wp_insert_post($post_hash))) {
$imported_post_count++;
$posts_created[] = get_post($post_id, ARRAY_A);
$date = date(CPM_DATE_FORMAT, strtotime($filename_date));
$all_post_dates[] = $date;
$duplicate_posts_within_creation[$date] = $post_id;
foreach (array('hovertext', 'transcript') as $field) {
if (!empty($_POST["${field}-to-use"])) { update_post_meta($post_id, $field, $_POST["${field}-to-use"]); }
}
if (isset($_POST['thumbnails'])) {
$wrote_thumbnail = cpm_write_thumbnail($cpm_config->path . '/' . $comic_file, $comic_file);
if (!is_null($wrote_thumbnail)) {
if ($wrote_thumbnail) {
$thumbnails_written[] = $comic_file;
} else {
$thumbnails_not_written[] = $comic_file;
}
} else {
$new_thumbnails_not_needed[] = $comic_file;
}
}
}
} else {
$invalid_filenames[] = $comic_file;
}
} else {
if ($show_duplicate_post_message) {
$duplicate_posts[] = array(get_post($post_id, ARRAY_A), $comic_file);
}
}
}
if ($imported_post_count >= $max_posts_imported) {
$safe_exit = true; break;
}
}
}
$cpm_config->import_safe_exit = $safe_exit;
if ($safe_exit) {
$cpm_config->messages[] = __("<strong>Import safely exited before you ran out of execution time.</strong> Scroll down to continue creating missing posts.", 'comicpress-manager');
}
if (count($posts_created) > 0) {
cpm_display_operation_messages(compact('invalid_filenames', 'thumbnails_written',
'thumbnails_not_written', 'posts_created',
'duplicate_posts', 'new_thumbnails_not_needed'));
} else {
$cpm_config->messages[] = __("<strong>No new posts needed to be created.</strong>", 'comicpress-manager');
}
}
?>

View File

@ -0,0 +1,45 @@
<?php
function cpm_action_delete_comic_and_post() {
global $cpm_config;
$comic_file = pathinfo($_POST['comic'], PATHINFO_BASENAME);
if (file_exists($cpm_config->path . '/' . $comic_file)) {
if (($result = cpm_breakdown_comic_filename($comic_file)) !== false) {
extract($result, EXTR_PREFIX_ALL, 'filename');
$all_possible_posts = array();
foreach (cpm_query_posts() as $comic_post) {
if (date(CPM_DATE_FORMAT, strtotime($comic_post->post_date)) == $filename_date) {
$all_possible_posts[] = $comic_post->ID;
}
}
if (count($all_possible_posts) > 1) {
$cpm_config->messages[] = sprintf(
__('There are multiple posts (%1$s) with the date %2$s in the comic categories. Please manually delete the posts.', 'comicpress-manager'),
implode(", ", $all_possible_posts),
$filename_date
);
} else {
$delete_targets = array($cpm_config->path . '/' . $comic_file);
foreach ($cpm_config->thumbs_folder_writable as $type => $value) {
$delete_targets[] = CPM_DOCUMENT_ROOT . '/' . $cpm_config->properties[$type . "_comic_folder"] . '/' . $comic_file;
}
foreach ($delete_targets as $target) { @unlink($target); }
if (count($all_possible_posts) == 0) {
$cpm_config->messages[] = sprintf(__("<strong>%s deleted.</strong> No matching posts found. Any associated thumbnails were also deleted.", 'comicpress-manager'), $comic_file);
} else {
wp_delete_post($all_possible_posts[0]);
$cpm_config->messages[] = sprintf(__('<strong>%1$s and post %2$s deleted.</strong> Any associated thumbnails were also deleted.', 'comicpress-manager'), $comic_file, $all_possible_posts[0]);
}
$cpm_config->comic_files = cpm_read_comics_folder();
}
}
}
}
?>

View File

@ -0,0 +1,52 @@
<?php
function cpm_action_do_first_run() {
global $cpm_config, $blog_id;
$dir_list = array(
CPM_DOCUMENT_ROOT,
CPM_DOCUMENT_ROOT . '/comics',
CPM_DOCUMENT_ROOT . '/comics-rss',
CPM_DOCUMENT_ROOT . '/comics-archive'
);
//if ($is_wpmu = function_exists('get_site_option')) { $dir_list = cpm_wpmu_first_run_dir_list(); }
$any_made = false;
$all_made = true;
foreach ($dir_list as $dir_to_make) {
if (!file_exists($dir_to_make)) {
$any_made = true;
if (@mkdir($dir_to_make)) {
if (!$is_wpmu) {
$cpm_config->messages[] = sprintf(__("<strong>Directory created:</strong> %s", 'comicpress-manager'), $dir_to_make);
}
} else {
$all_made = false;
if (!$is_wpmu) {
$cpm_config->warnings[] = sprintf(__("<strong>Unable to create directory:</strong> %s", 'comicpress-manager'), $dir_to_make);
}
}
}
}
if (!$any_made) {
$cpm_config->messages[] = __("<strong>All the directories were already found, nothing to do!</strong>", "comicpress-manager");
}
if ($is_wpmu) {
if ($all_made) {
$cpm_config->messages[] = sprintf(__("<strong>All directories created!</strong>", 'comicpress-manager'), $dir_to_make);
cpm_wpmu_complete_first_run();
} else {
$cpm_config->warnings[] = sprintf(__("<strong>Unable to create directories!</strong> Contact your administrator.", 'comicpress-manager'), $dir_to_make);
}
update_option("comicpress-manager-cpm-did-first-run", 1);
}
$cpm_config->did_first_run = true;
cpm_read_information_and_check_config();
}
?>

View File

@ -0,0 +1,36 @@
<?php
function cpm_action_generate_thumbnails() {
global $cpm_config;
$ok_to_keep_uploading = true;
$files_created_in_operation = array();
foreach ($_POST['comics'] as $comic) {
$comic_file = stripslashes(pathinfo($comic, PATHINFO_BASENAME));
$wrote_thumbnail = cpm_write_thumbnail($cpm_config->path . '/' . $comic_file, $comic_file, true);
if (!is_null($wrote_thumbnail)) {
if (is_array($wrote_thumbnail)) {
$files_created_in_operation = array_merge($files_created_in_operation, $wrote_thumbnail);
$cpm_config->messages[] = sprintf(__("<strong>Wrote thumbnail for %s.</strong>", 'comicpress-manager'), $comic_file);
} else {
$cpm_config->warnings[] = sprintf(__("<strong>Could not write thumbnail for %s.</strong> Check the permissions on the thumbnail directories.", 'comicpress-manager'), $comic_file);
}
}
if (function_exists('cpm_wpmu_is_over_storage_limit')) {
if (cpm_wpmu_is_over_storage_limit()) { $ok_to_keep_uploading = false; break; }
}
}
if (!$ok_to_keep_uploading) {
$cpm_config->messages = array();
$cpm_config->warnings = array($cpm_config->wpmu_disk_space_message);
foreach ($files_created_in_operation as $file) { @unlink($file); }
}
}
?>

View File

@ -0,0 +1,29 @@
<?php
function cpm_action_manage_subcomic() {
global $cpm_config;
$target_category_id = (int)$_POST['comic'];
extract(cpm_normalize_storyline_structure());
$final_category_id = false;
$first = true;
foreach ($category_tree as $node) {
$category = get_category(end(explode("/", $node)));
if ($first) { $final_category_id = $category->term_id; }
if ($target_category_id == $category->term_id) {
if (is_dir(CPM_DOCUMENT_ROOT . '/' . $cpm_config->properties['comic_folder'] . '/' . $category->slug)) {
$final_category_id = $category->term_id; break;
}
}
$first = false;
}
update_option('comicpress-manager-manage-subcomic', $final_category_id);
cpm_read_information_and_check_config();
$cpm_config->messages[] = sprintf(__("Now managing <strong>%s</strong>.", 'comicpress-manager'), get_cat_name($final_category_id));
}
?>

View File

@ -0,0 +1,41 @@
<?php
function cpm_action_multiple_upload_file() {
global $cpm_config;
if (strtotime($_POST['time']) === false) {
$cpm_config->warnings[] = sprintf(__('<strong>There was an error in the post time (%1$s)</strong>. The time is not parseable by strtotime().', 'comicpress-manager'), $_POST['time']);
} else {
$files_to_handle = array();
foreach ($_FILES as $name => $info) {
if (strpos($name, "upload-") !== false) {
if (is_uploaded_file($_FILES[$name]['tmp_name'])) {
$files_to_handle[] = $name;
} else {
switch ($_FILES[$name]['error']) {
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
$cpm_config->warnings[] = sprintf(__("<strong>The file %s was too large.</strong> The max allowed filesize for uploads to your server is %s.", 'comicpress-manager'), $_FILES[$name]['name'], ini_get('upload_max_filesize'));
break;
case UPLOAD_ERR_NO_FILE:
break;
default:
$cpm_config->warnings[] = sprintf(__("<strong>There was an error in uploading %s.</strong> The <a href='http://php.net/manual/en/features.file-upload.errors.php'>PHP upload error code</a> was %s.", 'comicpress-manager'), $_FILES[$name]['name'], $_FILES[$name]['error']);
break;
}
}
}
}
if (count($files_to_handle) > 0) {
cpm_handle_file_uploads($files_to_handle);
$cpm_config->comic_files = cpm_read_comics_folder();
} else {
$cpm_config->warnings[] = __("<strong>You didn't upload any files!</strong>", 'comicpress-manager');
}
}
}
?>

View File

@ -0,0 +1,24 @@
<?php
function cpm_action_restore_backup() {
global $cpm_config;
$config_dirname = dirname($cpm_config->config_filepath);
if (is_numeric($_POST['backup-file-time'])) {
if (file_exists($config_dirname . '/comicpress-config.php.' . $_POST['backup-file-time'])) {
if ($cpm_config->can_write_config) {
if (@copy($config_dirname . '/comicpress-config.php.' . $_POST['backup-file-time'],
$config_dirname . '/comicpress-config.php') !== false) {
cpm_read_information_and_check_config();
$cpm_config->messages[] = sprintf(__("<strong>Restored %s</strong>. Check to make sure your site is functioning correctly.", 'comicpress-manager'), 'comicpress-config.php.' . $_POST['backup-file-time']);
} else {
$cpm_config->warnings[] = sprintf(__("<strong>Could not restore %s</strong>. Check the permissions of your theme folder and try again.", 'comicpress-manager'), 'comicpress-config.php.' . $_POST['backup-file-time']);
}
}
}
}
}
?>

View File

@ -0,0 +1,11 @@
<?php
function cpm_action_skip_first_run() {
global $cpm_config;
$cpm_config->messages[] = __("<strong>No directories were created.</strong> You'll need to create directories on your own.", 'comicpress-manager');
cpm_read_information_and_check_config();
}
?>

View File

@ -0,0 +1,79 @@
<?php
function cpm_action_update_config() {
global $cpm_config;
$cpm_config->is_cpm_managing_posts = true;
$do_write = false;
$use_default_file = false;
if ($cpm_config->config_method == "comicpress-config.php") {
$do_write = !isset($_POST['just-show-config']);
} else {
$use_default_file = true;
}
include(realpath(dirname(__FILE__)) . '/../cp_configuration_options.php');
$original_properties = $cpm_config->properties;
foreach ($comicpress_configuration_options as $field_info) {
extract($field_info);
$config_id = (isset($field_info['variable_name'])) ? $field_info['variable_name'] : $field_info['id'];
switch ($type) {
case "folder":
$cpm_config->properties[$config_id] = $_POST[$_POST["folder-{$config_id}"] . "-" . $config_id];
break;
default:
if (isset($_POST[$config_id])) {
$cpm_config->properties[$config_id] = $_POST[$config_id];
}
break;
}
}
//if (function_exists('get_site_option')) {
// cpm_wpmu_save_options();
// $cpm_config->is_wp_options = true;
//}
if (!$cpm_config->is_wp_options) {
if (!$do_write) {
$file_output = write_comicpress_config_functions_php($cpm_config->config_filepath, true, $use_default_file);
$cpm_config->properties = $original_properties;
if ($use_default_file) {
$cpm_config->messages[] = __("<strong>No comicpress-config.php file was found in your theme folder.</strong> Using default configuration file.", 'comicpress-manager');
}
$cpm_config->messages[] = __("<strong>Your configuration:</strong>", 'comicpress-manager') . "<pre class=\"code-block\">" . htmlentities($file_output) . "</pre>";
} else {
if (!is_null($cpm_config->config_filepath)) {
if (is_array($file_output = write_comicpress_config_functions_php($cpm_config->config_filepath))) {
$cpm_config->config_method = read_current_theme_comicpress_config();
$cpm_config->path = get_comic_folder_path();
$cpm_config->plugin_path = PLUGINDIR . '/' . plugin_basename(__FILE__);
cpm_read_information_and_check_config();
$backup_file = pathinfo($file_output[0], PATHINFO_BASENAME);
$cpm_config->messages[] = sprintf(__("<strong>Configuration updated and original config backed up to %s.</strong> Rename this file to comicpress-config.php if you are having problems.", 'comicpress-manager'), $backup_file);
} else {
$relative_path = substr(realpath($cpm_config->config_filepath), CPM_STRLEN_REALPATH_DOCUMENT_ROOT);
$cpm_config->warnings[] = sprintf(__("<strong>Configuration not updated</strong>, check the permissions of %s and the theme folder. They should be writable by the Webserver process. Alternatively, copy and paste the following code into your comicpress-config.php file:", 'comicpress-manager'), $relative_path) . "<pre class=\"code-block\">" . htmlentities($file_output) . "</pre>";
$cpm_config->properties = $original_properties;
}
}
}
} else {
cpm_read_information_and_check_config();
$cpm_config->messages[] = sprintf(__("<strong>Configuration updated in database.</strong>", 'comicpress-manager'), $backup_file);
}
}
?>

View File

@ -0,0 +1,58 @@
<?php
function cpm_action_update_cpm_config() {
global $cpm_config;
include(realpath(dirname(__FILE__)) . '/../cpm_configuration_options.php');
$all_valid = true;
$target_update_options = array();
foreach ($configuration_options as $option_info) {
$target_key = 'comicpress-manager-' . $option_info['id'];
switch ($option_info['type']) {
case "text":
case "textarea":
case "dropdown":
if (isset($_POST[$option_info['id']])) {
$validate_function_name = "cpm_validate_cpm_option_" . str_replace("-", "_", $option_info['id']);
$ok = true;
if (function_exists($validate_function_name)) {
$ok = call_user_func($validate_function_name, $_POST[$option_info['id']]);
}
if ($ok) {
$target_update_options[$target_key] = $_POST[$option_info['id']];
} else {
$all_valid = false;
break 2;
}
}
break;
case "checkbox":
$target_update_options[$target_key] = (isset($_POST[$option_info['id']]) ? "1" : "0");
break;
case "categories":
if (isset($_POST[$option_info['id']])) {
$all_categories = implode(",", $_POST[$option_info['id']]);
$target_update_options[$target_key] = $all_categories;
} else {
$target_update_options[$target_key] = "";
}
break;
}
}
if ($all_valid) {
cpm_read_information_and_check_config();
foreach ($target_update_options as $option => $value) { update_option($option, $value); }
$cpm_config->messages[] = __("<strong>ComicPress Manager configuration updated.</strong>", 'comicpress-manager');
} else {
$cpm_config->warnings[] = __("<strong>You entered invalid data into your configuration.</strong> Configuration not updated.", 'comicpress-manager');
}
}
function cpm_validate_cpm_option_cpm_default_post_time($value) {
return (strtotime("2008-01-01 {$value}") !== false);
}
?>

View File

@ -0,0 +1,38 @@
<?php
function cpm_action_write_comic_post() {
global $cpm_config;
$files_to_handle = array();
if (isset($_FILES['upload'])) {
if (is_uploaded_file($_FILES['upload']['tmp_name'])) {
$files_to_handle[] = 'upload';
}
}
if (count($files_to_handle) > 0) {
list($posts_created, $duplicated_posts) = cpm_handle_file_uploads($files_to_handle);
if (count($posts_created) > 0) {
if (count($posts_created) == 1) {
?><script type="text/javascript">document.location.href = "post.php?action=edit&post=<?php echo $posts_created[0]['ID'] ?>";</script><?php
} else {
$cpm_config->warnings[] = __("<strong>More than one new post was generated!</strong> Please report this error.", 'comicpress-manager');
}
}
if (count($duplicated_posts) > 0) {
if (count($duplicated_posts) == 1) {
?><script type="text/javascript">document.location.href = "post.php?action=edit&post=<?php echo $duplicated_posts[0][0]['ID'] ?>";</script><?php
} else {
$cpm_config->warnings[] = __("<strong>More than one duplicate post was found!</strong> Please report this error.", 'comicpress-manager');
}
}
$cpm_config->warnings[] = __("<strong>No posts were created, and no duplicate posts could be found!</strong>", 'comicpress-manager');
} else {
$cpm_config->warnings[] = __("<strong>You didn't upload any files!</strong>", 'comicpress-manager');
}
}
?>

BIN
comicpress-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

40
comicpress-manager.php Normal file
View File

@ -0,0 +1,40 @@
<?php
/*
Plugin Name: ComicPress Manager
Plugin URI: http://www.coswellproductions.com/wordpress/wordpress-plugins/
Description: Manage the comics within a <a href="http://www.comicpress.org/">ComicPress</a> theme installation.
Version: 1.4.5
Author: John Bintz
Author URI: http://www.coswellproductions.com/wordpress/
Copyright 2009 John Bintz (email : john@coswellproductions.com)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* The loader for the rest of the plugin components.
*/
// load the config, since you can do useful things with this in your theme
require_once('comicpress_manager_config.php');
// only load the plugin code of we're in the administration part of WordPress.
if (WP_ADMIN === true) {
require_once('comicpress_manager_admin.php');
}
?>

1574
comicpress-manager.pot Normal file

File diff suppressed because it is too large Load Diff

2487
comicpress_manager_admin.php Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,56 @@
<?php
// Select the level of access you want editors on your site to have.
$access_level = 10; // Administrator only
//$access_level = 5; // Editors only
//$access_level = 2; // Authors & Editors
define("CPM_SCALE_NONE", 0);
define("CPM_SCALE_IMAGEMAGICK", 1);
define("CPM_SCALE_GD", 2);
$result = get_option('comicpress-manager-cpm-date-format');
if (!empty($result)) {
define("CPM_DATE_FORMAT", $result);
} else {
define("CPM_DATE_FORMAT", "Y-m-d");
}
// for Windows users, your permissions will automatically be set to 0777 (writable).
// there is no easy way in PHP to modify permissions on an NTFS filesystem (and no
// permissions to speak of on FAT32!)
if (strpos(PHP_OS, "WIN") !== false) {
// for Windows users
define("CPM_FILE_UPLOAD_CHMOD", 0777);
} else {
$result = get_option('comicpress-manager-cpm-upload-permissions');
$chmod_to_use = 0664; // writable by owner and any group members (common)
if (!empty($result)) {
$requested_chmod_to_use = 0;
$strlen_result = strlen($result);
$is_ok = true;
for ($i = 0; $i < $strlen_result; ++$i) {
$char = $result{$strlen_result - 1 - $i};
if (preg_match('#[0-7]#', $char) > 0) {
$requested_chmod_to_use = $requested_chmod_to_use + ($char * pow(8, $i));
} else {
$is_ok = false;
}
}
if ($is_ok) {
$chmod_to_use = $requested_chmod_to_use;
}
}
define("CPM_FILE_UPLOAD_CHMOD", $chmod_to_use);
}
// CPM_DOCUMENT_ROOT override
$result = get_option("comicpress-manager-cpm-document-root");
if (!empty($result)) {
define('CPM_DOCUMENT_ROOT', untrailingslashit($result));
}
?>

View File

@ -0,0 +1,47 @@
<?php
global $blog_id;
if (!function_exists('add_action')) {
require_once("../../../wp-config.php");
}
if (WP_ADMIN) {
require_once('comicpress_manager_config.php');
require_once('comicpress_manager_library.php');
cpm_get_cpm_document_root();
$cpm_config = new ComicPressConfig();
cpm_read_information_and_check_config();
if (isset($_REQUEST['blog_id']) && function_exists('switch_to_blog')) {
switch_to_blog((int)$_REQUEST['blog_id']);
}
// TODO: handle different comic categories differently, this is still too geared
// toward one blog/one comic...
$all_post_dates = array();
foreach (cpm_query_posts() as $comic_post) {
$all_post_dates[] = date(CPM_DATE_FORMAT, strtotime($comic_post->post_date));
}
$all_post_dates = array_unique($all_post_dates);
ob_start();
$missing_comic_count = 0;
foreach (cpm_read_comics_folder() as $comic_file) {
$comic_file = pathinfo($comic_file, PATHINFO_BASENAME);
if (($result = cpm_breakdown_comic_filename($comic_file)) !== false) {
if (!in_array($result['date'], $all_post_dates)) {
if (($post_hash = generate_post_hash($result['date'], $result['converted_title'])) !== false) {
$missing_comic_count++;
}
}
}
}
header("X-JSON: {missing_posts: ${missing_comic_count}}");
ob_end_flush();
}
?>

View File

@ -0,0 +1,763 @@
<?php
/**
* Functions that are tested by test_comicpress_manager.php live here,
* to reduce the amount of WordPress simulation necessary for testing.
*/
class ComicPressConfig {
var $properties = array(
// Leave these alone! These values should be read from your comicpress-config.php file.
// If your values from comicpress-config.php are not being read, then something is wrong in your config.
'comic_folder' => 'comics',
'comiccat' => '1',
'blogcat' => '2',
'rss_comic_folder' => 'comics',
'archive_comic_folder' => 'comics',
'archive_comic_width' => '380',
'rss_comic_width' => '380',
'blog_postcount' => '10'
);
var $warnings, $messages, $errors, $detailed_warnings, $show_config_editor;
var $config_method, $config_filepath, $path, $plugin_path;
var $comic_files, $blog_category_info, $comic_category_info;
var $scale_method_cache, $identify_method_cache, $can_write_config;
var $need_calendars = false;
var $is_wp_options = false;
var $import_safe_exit = null;
var $did_first_run;
var $is_cpm_managing_posts, $is_cpm_modifying_categories;
var $wpmu_disk_space_message;
var $separate_thumbs_folder_defined = array('rss' => null, 'archive' => null);
var $thumbs_folder_writable = array('rss' => null, 'archive' => null);
var $allowed_extensions = array("gif", "jpg", "jpeg", "png");
function get_scale_method() {
if (!isset($this->scale_method_cache)) {
$this->scale_method_cache = CPM_SCALE_NONE;
$result = @shell_exec("which convert") . @shell_exec("which identify");
if (!empty($result)) {
$this->scale_method_cache = CPM_SCALE_IMAGEMAGICK;
} else {
if (extension_loaded("gd")) {
$this->scale_method_cache = CPM_SCALE_GD;
}
}
}
return $this->scale_method_cache;
}
function ComicPressConfig() {
if (function_exists('cpm_wpmu_config_setup')) { cpm_wpmu_config_setup($this); }
}
}
/**
* Get a ComicPress Manager option from WP Options.
*/
function cpm_option($name) { return get_option("comicpress-manager-${name}"); }
/**
* Calculate the document root where comics are stored.
*/
function cpm_calculate_document_root() {
global $cpm_attempted_document_roots;
$cpm_attempted_document_roots = array();
$document_root = null;
$parsed_url = parse_url(get_option('home'));
$translated_script_filename = str_replace('\\', '/', $_SERVER['SCRIPT_FILENAME']);
foreach (array('SCRIPT_NAME', 'SCRIPT_URL') as $var_to_try) {
$root_to_try = substr($translated_script_filename, 0, -strlen($_SERVER[$var_to_try])) . $parsed_url['path'];
$cpm_attempted_document_roots[] = $root_to_try;
if (file_exists($root_to_try . '/index.php')) {
$document_root = $root_to_try;
break;
}
}
if (is_null($document_root)) { $document_root = $_SERVER['DOCUMENT_ROOT'] . $parsed_url['path']; }
//if (function_exists('get_site_option')) {
// $document_root = cpm_wpmu_modify_path($document_root);
//}
return untrailingslashit($document_root);
}
/**
* Define the constants for the document root.
*/
function cpm_get_cpm_document_root() {
if (!defined('CPM_DOCUMENT_ROOT')) {
define('CPM_DOCUMENT_ROOT', cpm_calculate_document_root());
define("CPM_STRLEN_REALPATH_DOCUMENT_ROOT", strlen(realpath(CPM_DOCUMENT_ROOT)));
}
}
/**
* Transform a date()-compatible string into a human-parseable string.
* Useful for generating examples of date() usage.
*/
function cpm_transform_date_string($string, $replacements) {
if (!is_array($replacements)) { return false; }
if (!is_string($string)) { return false; }
$transformed_string = $string;
foreach (array("Y", "m", "d") as $required_key) {
if (!isset($replacements[$required_key])) { return false; }
$transformed_string = preg_replace('#(?<![\\\])' . $required_key . '#', $replacements[$required_key], $transformed_string);
}
$transformed_string = str_replace('\\', '', $transformed_string);
return $transformed_string;
}
/**
* Generate an example date string.
*/
function cpm_generate_example_date($example_date) {
return cpm_transform_date_string($example_date, array('Y' => "YYYY", 'm' => "MM", 'd' => "DD"));
}
/**
* Build the URI to a comic file.
*/
function cpm_build_comic_uri($filename, $base_dir = null) {
if (!is_null($base_dir)) {
if (strlen($filename) < strlen($base_dir)) { return false; }
}
if (($realpath_result = realpath($filename)) !== false) {
$filename = $realpath_result;
}
if (!is_null($base_dir)) {
$filename = substr($filename, strlen($base_dir));
}
$parts = explode('/', str_replace('\\', '/', $filename));
if (count($parts) < 2) { return false; }
$parsed_url = parse_url(get_bloginfo('url'));
$path = $parsed_url['path'];
//if (function_exists('get_site_option')) { $path = cpm_wpmu_fix_admin_uri($path); }
$count = (cpm_get_subcomic_directory() !== false) ? 3 : 2;
return $path . '/' . implode('/', array_slice($parts, -$count, $count));
}
/**
* Breakdown the name of a comic file into a date and proper title.
*/
function cpm_breakdown_comic_filename($filename, $allow_override = false) {
$pattern = CPM_DATE_FORMAT;
if ($allow_override) {
if (isset($_POST['upload-date-format']) && !empty($_POST['upload-date-format'])) { $pattern = $_POST['upload-date-format']; }
}
$pattern = cpm_transform_date_string($pattern, array("Y" => '[0-9]{4,4}',
"m" => '[0-9]{2,2}',
"d" => '[0-9]{2,2}'));
if (preg_match("/^(${pattern})(.*)\.[^\.]+$/", $filename, $matches) > 0) {
list($all, $date, $title) = $matches;
if (strtotime($date) === false) { return false; }
$converted_title = ucwords(trim(preg_replace('/[\-\_]/', ' ', $title)));
return compact('date', 'title', 'converted_title');
} else {
return false;
}
}
/**
* Generate a hash for passing to wp_insert_post()
* @param string $filename_date The post date.
* @param string $filename_converted_title The title of the comic.
* @return array The post information or false if the date is invalid.
*/
function generate_post_hash($filename_date, $filename_converted_title) {
if (isset($_POST['time']) && !empty($_POST['time'])) {
if (strtolower($_POST['time']) == "now") {
$filename_date .= " " . strftime("%H:%M:%S");
} else {
$filename_date .= " " . $_POST['time'];
}
}
if (($timestamp = strtotime($filename_date)) !== false) {
if ($filename_converted_title == "") {
$filename_converted_title = strftime("%m/%d/%Y", $timestamp);
}
extract(cpm_normalize_storyline_structure());
$selected_categories = array();
if (isset($_POST['in-comic-category'])) {
foreach ($category_tree as $node) {
$category_id = end(explode("/", $node));
if (in_array($category_id, $_POST['in-comic-category'])) {
$selected_categories[$category_id] = get_cat_name($category_id);
}
}
}
$category_name = implode(",", array_values($selected_categories));
$post_content = "";
if (isset($_POST['content']) && !empty($_POST['content'])) {
$post_content = $_POST['content'];
$post_content = preg_replace('/\{date\}/', date('F j, Y', $timestamp), $post_content);
$post_content = preg_replace('/\{title\}/', $filename_converted_title, $post_content);
$post_content = preg_replace('/\{category\}/', $category_name, $post_content);
}
$override_title = $_POST['override-title-to-use'];
$tags = $_POST['tags'];
if (get_magic_quotes_gpc()) {
$override_title = stripslashes($override_title);
$tags = stripslashes($tags);
}
$post_title = !empty($override_title) ? $override_title : $filename_converted_title;
$post_date = date('Y-m-d H:i:s', $timestamp);
$post_date_gmt = get_gmt_from_date($post_date);
$post_category = array_keys($selected_categories);
if (isset($_POST['additional-categories'])) {
if (is_array($_POST['additional-categories'])) {
$post_category = array_merge($post_category, array_intersect(get_all_category_ids(), $_POST['additional-categories']));
}
}
$publish_mode = ($timestamp > time()) ? "future" : "publish";
$post_status = isset($_POST['publish']) ? $publish_mode : "draft";
$tags_input = $tags;
return compact('post_content', 'post_title', 'post_date', 'post_date_gmt', 'post_category', 'post_status', 'tags_input');
}
return false;
}
/**
* Retrieve posts from the WordPress database.
*/
function cpm_query_posts() {
global $cpm_config;
$query_posts_string = "posts_per_page=999999&post_status=draft,pending,future,inherit,publish&cat=";
$comic_categories = array();
extract(cpm_get_all_comic_categories());
foreach ($category_tree as $node) {
$comic_categories[] = end(explode("/", $node));
}
$query_posts_string .= implode(",", $comic_categories);
$result = query_posts($query_posts_string);
if (empty($result)) { $result = array(); }
return $result;
}
/**
* Get the absolute filepath to the comic folder.
*/
function get_comic_folder_path() {
global $cpm_config;
$output = CPM_DOCUMENT_ROOT . '/' . $cpm_config->properties['comic_folder'];
if (($subdir = cpm_get_subcomic_directory()) !== false) {
$output .= '/' . $subdir;
}
return $output;
}
function cpm_get_subcomic_directory() {
global $cpm_config;
if (function_exists('get_option')) {
$result = get_option('comicpress-manager-manage-subcomic');
if (!empty($result)) {
if ($result != $cpm_config->properties['comiccat']) {
if (($category= get_category($result)) !== false) {
return $category->slug;
}
}
}
}
return false;
}
/**
* Find all the valid comics in the comics folder.
* If CPM_SKIP_CHECKS is enabled, comic file validity is not checked, improving speed.
* @return array The list of valid comic files in the comic folder.
*/
function cpm_read_comics_folder() {
global $cpm_config;
$glob_results = glob(get_comic_folder_path() . "/*");
if ($glob_results === false) {
//$cpm_config->messages[] = "FYI: glob({$cpm_config->path}/*) returned false. This can happen on some PHP installations if you have no files in your comic directory. This message will disappear once you upload a comic to your site.";
return array();
}
$filtered_glob_results = array();
foreach ($glob_results as $result) {
if (in_array(strtolower(pathinfo($result, PATHINFO_EXTENSION)), $cpm_config->allowed_extensions)) {
$filtered_glob_results[] = $result;
}
}
if (cpm_option("cpm-skip-checks") == 1) {
return $filtered_glob_results;
} else {
$files = array();
foreach ($filtered_glob_results as $file) {
if (cpm_breakdown_comic_filename(pathinfo($file, PATHINFO_BASENAME)) !== false) {
$files[] = $file;
}
}
return $files;
}
}
/**
* Read information about the current installation.
*/
function cpm_read_information_and_check_config() {
global $cpm_config, $cpm_attempted_document_roots, $blog_id;
$cpm_config->config_method = read_current_theme_comicpress_config();
$cpm_config->config_filepath = get_functions_php_filepath();
$cpm_config->can_write_config = can_write_comicpress_config($cpm_config->config_filepath);
$cpm_config->path = get_comic_folder_path();
$cpm_config->plugin_path = PLUGINDIR . '/' . plugin_basename(__FILE__);
foreach (array_keys($cpm_config->separate_thumbs_folder_defined) as $type) {
$cpm_config->separate_thumbs_folder_defined[$type] = ($cpm_config->properties['comic_folder'] != $cpm_config->properties[$type . '_comic_folder']);
}
$cpm_config->errors = array();
$cpm_config->warnings = array();
$cpm_config->detailed_warnings = array();
$cpm_config->messages = array();
$cpm_config->show_config_editor = true;
$folders = array(
array('comic folder', 'comic_folder', true, ""),
array('RSS feed folder', 'rss_comic_folder', false, 'rss'),
array('archive folder', 'archive_comic_folder', false, 'archive'));
foreach ($folders as $folder_info) {
list ($name, $property, $is_fatal, $thumb_type) = $folder_info;
if ($thumb_type != "") {
$cpm_config->thumbs_folder_writable[$thumb_type] = null;
}
}
if (cpm_option("cpm-skip-checks") == 1) {
// if the user knows what they're doing, disabling all of the checks improves performance
foreach ($folders as $folder_info) {
list ($name, $property, $is_fatal, $thumb_type) = $folder_info;
$path = CPM_DOCUMENT_ROOT . '/' . $cpm_config->properties[$property];
if ($thumb_type != "") {
$cpm_config->thumbs_folder_writable[$thumb_type] = true;
}
}
$cpm_config->comic_category_info = get_object_vars(get_category($cpm_config->properties['comiccat']));
$cpm_config->blog_category_info = get_object_vars(get_category($cpm_config->properties['blogcat']));
$cpm_config->comic_files = cpm_read_comics_folder();
} else {
// quick check to see if the theme is ComicPress.
// this needs to be made more robust.
if (preg_match('/ComicPress/', get_current_theme()) == 0) {
$cpm_config->detailed_warnings[] = __("The current theme isn't the ComicPress theme. If you've renamed the theme, ignore this warning.", 'comicpress-manager');
}
$any_cpm_document_root_failures = false;
//if (!function_exists('get_site_option')) {
// is the site root configured properly?
if (!file_exists(CPM_DOCUMENT_ROOT)) {
$cpm_config->errors[] = sprintf(__('The comics site root <strong>%s</strong> does not exist. Check your <a href="options-general.php">WordPress address and address settings</a>.', 'comicpress-manager'), CPM_DOCUMENT_ROOT);
$any_cpm_document_root_failures = true;
}
if (!file_exists(CPM_DOCUMENT_ROOT . '/index.php')) {
$cpm_config->errors[] = sprintf(__('The comics site root <strong>%s</strong> does not contain a WordPress index.php file. Check your <a href="options-general.php">WordPress address and address settings</a>.', 'comicpress-manager'), CPM_DOCUMENT_ROOT);
$any_cpm_document_root_failures = true;
}
//}
if ($any_cpm_document_root_failures) {
$cpm_config->errors[] = print_r($cpm_attempted_document_roots, true);
}
// folders that are the same as the comics folder won't be written to
$all_the_same = array();
foreach ($cpm_config->separate_thumbs_folder_defined as $type => $value) {
if (!$value) { $all_the_same[] = $type; }
}
if (count($all_the_same) > 0) {
$cpm_config->detailed_warnings[] = sprintf(__("The <strong>%s</strong> folders and the comics folder are the same. You won't be able to generate thumbnails until you change these folders.", 'comicpress-manager'), implode(", ", $all_the_same));
}
if (cpm_option('cpm-did-first-run') == 1) {
// check the existence and writability of all image folders
foreach ($folders as $folder_info) {
list ($name, $property, $is_fatal, $thumb_type) = $folder_info;
if (($thumb_type == "") || ($cpm_config->separate_thumbs_folder_defined[$thumb_type] == true)) {
$path = CPM_DOCUMENT_ROOT . '/' . $cpm_config->properties[$property];
if (!file_exists($path)) {
$cpm_config->errors[] = sprintf(__('The %1$s <strong>%2$s</strong> does not exist. Did you create it within the <strong>%3$s</strong> folder?' , 'comicpress-manager'), $name, $cpm_config->properties[$property], CPM_DOCUMENT_ROOT);
} else {
do {
$tmp_filename = "test-" . md5(rand());
} while (file_exists($path . '/' . $tmp_filename));
$ok_to_warn = true;
if ($thumb_type != "") {
$ok_to_warn = (cpm_option("cpm-${thumb_type}-generate-thumbnails") == 1);
}
if ($ok_to_warn) {
if (!@touch($path . '/' . $tmp_filename)) {
$message = sprintf(__('The %1$s <strong>%2$s</strong> is not writable by the Webserver.', 'comicpress-manager'), $name, $cpm_config->properties[$property]);
if ($is_fatal) {
$cpm_config->errors[] = $message;
} else {
$cpm_config->warnings[] = $message;
}
if ($thumb_type != "") {
$cpm_config->thumbs_folder_writable[$thumb_type] = false;
}
} else {
if (@stat($path . '/' . $tmp_filename) === false) {
$cpm_config->errors[] = __('<strong>Files written to the %s directory by the Webserver cannot be read again!</strong> Are you using IIS7 with FastCGI?', $cpm_config->properties[$property]);
if ($thumb_type != "") {
$cpm_config->thumbs_folder_writable[$thumb_type] = false;
}
}
}
}
if (is_null($cpm_config->thumbs_folder_writable[$thumb_type])) {
@unlink($path . '/' . $tmp_filename);
if ($thumb_type != "") {
$cpm_config->thumbs_folder_writable[$thumb_type] = true;
}
}
}
}
}
}
// to generate thumbnails, a supported image processor is needed
if ($cpm_config->get_scale_method() == CPM_SCALE_NONE) {
$cpm_config->detailed_warnings[] = __("No image resize methods are installed (GD or ImageMagick). You are unable to generate thumbnails automatically.", 'comicpress-manager');
}
// are there enough categories created?
if (count(get_all_category_ids()) < 2) {
$cpm_config->errors[] = __("You need to define at least two categories, a blog category and a comics category, to use ComicPress. Visit <a href=\"categories.php\">Manage -> Categories</a> and create at least two categories, then return here to continue your configuration.", 'comicpress-manager');
$cpm_config->show_config_editor = false;
} else {
// ensure the defined comic category exists
if (is_null($cpm_config->properties['comiccat'])) {
// all non-blog categories are comic categories
$cpm_config->comic_category_info = array(
'name' => __("All other categories", 'comicpress-manager'),
);
$cpm_config->properties['comiccat'] = array_diff(get_all_category_ids(), array($cpm_config->properties['blogcat']));
if (count($cpm_config->properties['comiccat']) == 1) {
$cpm_config->properties['comiccat'] = $cpm_config->properties['comiccat'][0];
$cpm_config->comic_category_info = get_object_vars(get_category($cpm_config->properties['comiccat']));
}
} else {
if (!is_numeric($cpm_config->properties['comiccat'])) {
// the property is non-numeric
$cpm_config->errors[] = __("The comic category needs to be defined as a number, not an alphanumeric string.", 'comicpress-manager');
} else {
// one comic category is specified
if (is_null($cpm_config->comic_category_info = get_category($cpm_config->properties['comiccat']))) {
$cpm_config->errors[] = sprintf(__("The requested category ID for your comic, <strong>%s</strong>, doesn't exist!", 'comicpress-manager'), $cpm_config->properties['comiccat']);
} else {
$cpm_config->comic_category_info = get_object_vars($cpm_config->comic_category_info);
}
}
}
// ensure the defined blog category exists
// TODO: multiple blog categories
if (!is_numeric($cpm_config->properties['blogcat'])) {
// the property is non-numeric
$cpm_config->errors[] = __("The blog category needs to be defined as a number, not an alphanumeric string.", 'comicpress-manager');
} else {
if (is_null($cpm_config->blog_category_info = get_category($cpm_config->properties['blogcat']))) {
$cpm_config->errors[] = sprintf(__("The requested category ID for your blog, <strong>%s</strong>, doesn't exist!", 'comicpress-manager'), $cpm_config->properties['blogcat']);
} else {
$cpm_config->blog_category_info = get_object_vars($cpm_config->blog_category_info);
}
if (!is_array($cpm_config->properties['blogcat']) && !is_array($cpm_config->properties['comiccat'])) {
if ($cpm_config->properties['blogcat'] == $cpm_config->properties['comiccat']) {
$cpm_config->warnings[] = __("Your comic and blog categories are the same. This will cause browsing problems for visitors to your site.", 'comicpress-manager');
}
}
}
}
// a quick note if you have no comics uploaded.
// could be a sign of something more serious.
if (count($cpm_config->comic_files = cpm_read_comics_folder()) == 0) {
$cpm_config->detailed_warnings[] = __("Your comics folder is empty!", 'comicpress-manager');
}
}
}
/**
* Read the ComicPress config from a file.
*/
function read_current_theme_comicpress_config() {
global $cpm_config;
//if (function_exists('get_site_option')) {
// cpm_wpmu_load_options();
// return __("WordPress Options", 'comicpress-manager');
//}
$current_theme_info = get_theme(get_current_theme());
$method = null;
$config_json_file = ABSPATH . '/' . $current_theme_info['Template Dir'] . '/config.json';
// harmonious json_decode
if (function_exists("json_decode")) {
if (file_exists($config_json_file)) {
$config = json_decode(file_get_contents($config_json_file), true);
$cpm_config->properties = array_merge($cpm_config->properties, $config);
$method = "config.json";
}
}
//harmonious_end
if (is_null($method)) {
if (!is_null($filepath = get_functions_php_filepath())) {
read_comicpress_config_functions_php($filepath);
$method = basename($filepath);
}
}
return $method;
}
/**
* Read the ComicPress config from a functions.php file.
* Note: this isn't super-robust, but should cover basic use cases.
*/
function read_comicpress_config_functions_php($filepath) {
global $cpm_config;
if (!file_exists($filepath)) { $cpm_config->warnings[] = "file not found: ${filepath}"; return; }
$file = file_get_contents($filepath);
$variable_values = array();
foreach (array_keys($cpm_config->properties) as $variable) {
if (preg_match("#\\$${variable}\ *\=\ *([^\;]*)\;#", $file, $matches) > 0) {
$variable_values[$variable] = preg_replace('#"#', '', $matches[1]);
}
}
$cpm_config->properties = array_merge($cpm_config->properties, $variable_values);
}
/**
* Get the path to the currently used config.
*/
function get_functions_php_filepath() {
$template_files = glob(TEMPLATEPATH . '/*');
if ($template_files === false) { $template_files = array(); }
foreach (array("comicpress-config.php", "functions.php") as $possible_file) {
foreach ($template_files as $file) {
if (pathinfo($file, PATHINFO_BASENAME) == $possible_file) {
return $file;
}
}
}
return null;
}
/**
* See if we can write to the config folder.
*/
function can_write_comicpress_config($filepath) {
$perm_check_filename = $filepath . '-' . md5(rand());
if (@touch($perm_check_filename) === true) {
$move_check_filename = $perm_check_filename . '-' . md5(rand());
if (@rename($perm_check_filename, $move_check_filename)) {
@unlink($move_check_filename);
return true;
} else {
@unlink($perm_check_filename);
return false;
}
}
return false;
}
function cpm_get_thumbnails_to_generate() {
global $cpm_config;
$thumbnails_to_generate = array();
if ($cpm_config->get_scale_method() != CPM_SCALE_NONE) {
foreach ($cpm_config->thumbs_folder_writable as $type => $value) {
if ($value) {
if ($cpm_config->separate_thumbs_folder_defined[$type] !== false) {
if (cpm_option("cpm-${type}-generate-thumbnails") == 1) {
$thumbnails_to_generate[] = $type;
}
}
}
}
}
return $thumbnails_to_generate;
}
/**
* Get a tree of the categories that are children of the comic category.
*/
function cpm_get_all_comic_categories() {
global $cpm_config;
$max_id = 0;
foreach (get_all_category_ids() as $category_id) {
$category = get_category($category_id);
$category_tree[] = $category->parent . '/' . $category_id;
$max_id = max($max_id, $category_id);
}
do {
$all_ok = true;
for ($i = 0; $i < count($category_tree); ++$i) {
$current_parts = explode("/", $category_tree[$i]);
if (reset($current_parts) != 0) {
$all_ok = false;
for ($j = 0; $j < count($category_tree); ++$j) {
$j_parts = explode("/", $category_tree[$j]);
if (end($j_parts) == reset($current_parts)) {
$category_tree[$i] = implode("/", array_merge($j_parts, array_slice($current_parts, 1)));
break;
}
}
}
}
} while (!$all_ok);
$new_category_tree = array();
foreach ($category_tree as $node) {
$parts = explode("/", $node);
if ($parts[1] == $cpm_config->properties['comiccat']) { $new_category_tree[] = $node; }
}
$category_tree = $new_category_tree;
return compact('category_tree', 'max_id');
}
/**
* Normalize a storyline structure, merging it with category changes as necessary.
* @return array A compact()ed array with the $max_id found and the $category_tree.
*/
function cpm_normalize_storyline_structure() {
global $cpm_config;
extract(cpm_get_all_comic_categories());
do {
$did_normalize = false;
// sort it by this order as best as possible
if ($result = get_option("comicpress-storyline-category-order")) {
$sorted_tree = explode(",", $result);
$new_sorted_tree = array();
foreach ($sorted_tree as $node) {
if (in_array($node, $category_tree)) {
$new_sorted_tree[] = $node;
} else {
$did_normalize = true;
}
}
$sorted_tree = $new_sorted_tree;
foreach ($category_tree as $node) {
if (!in_array($node, $sorted_tree)) {
// try to find the nearest sibling
$parts = explode("/", $node);
while (count($parts) > 0) {
array_pop($parts);
$node_snippit = implode("/", $parts);
$last_sibling = null;
for ($i = 0; $i < count($sorted_tree); ++$i) {
if (strpos($sorted_tree[$i], $node_snippit) === 0) {
$last_sibling = $i;
}
}
if (!is_null($last_sibling)) {
$did_normalize = true;
array_splice($sorted_tree, $last_sibling + 1, 0, $node);
break;
}
}
}
}
$category_tree = $sorted_tree;
} else {
sort($category_tree);
}
if ($did_normalize || empty($result)) {
update_option("comicpress-storyline-category-order", implode(",", $category_tree));
}
} while ($did_normalize);
return compact('category_tree', 'max_id');
}
function cpm_short_size_string_to_bytes($string) {
$max_bytes = trim($string);
$last = strtolower(substr($max_bytes, -1, 1));
switch($last) {
case 'g': $max_bytes *= 1024;
case 'm': $max_bytes *= 1024;
case 'k': $max_bytes *= 1024;
}
return $max_bytes;
}
?>

147
comicpress_script.js Normal file
View File

@ -0,0 +1,147 @@
/**
* hide/show the new post holder box depending on the status of the checkbox.
*/
function hide_show_checkbox_holder(which, reverse) {
if (reverse !== true) { reverse = false; }
if ($(which + '-checkbox').checked !== reverse) {
$(which + '-holder').show();
} else {
$(which + '-holder').hide();
}
}
function setup_hide_show_checkbox_holder(which) {
Event.observe(which + '-checkbox', 'click', function() { hide_show_checkbox_holder(which) });
hide_show_checkbox_holder(which);
}
function hide_show_div_on_checkbox(div, checkbox, flip_behavior) {
if ($(checkbox) && $(div)) {
ok = (flip_behavior) ? !$(checkbox).checked : $(checkbox).checked;
(ok) ? $(div).show() : $(div).hide();
}
}
/**
* Show the preview image for deleting an image.
*/
function change_image_preview() {
var which = $F('delete-comic-dropdown');
$('image-preview').innerHTML = '<img src="' + which + '" width="420" />';
}
var current_file_index = 0;
var current_file_upload_count = 0;
var on_change_file_upload_count = null;
/**
* Add a file upload field.
*/
function add_file_upload() {
var field = "<div class=\"upload-holder\" id=\"upload-holder-" + current_file_index + "\">";
field += messages['add_file_upload_file'] + "<input size=\"35\" type=\"file\" name=\"upload-" + current_file_index + "\" />";
field += " [<a href=\"#\" onclick=\"remove_file_upload('" + current_file_index + "');\">" + messages['add_file_upload_remove'] + "</a>]";
field += "</div>";
Element.insert('multiple-file-upload', { bottom: field });
current_file_index++;
current_file_upload_count++;
if (on_change_file_upload_count) { on_change_file_upload_count(current_file_upload_count); }
}
function remove_file_upload(which) {
Element.remove('upload-holder-' + which);
current_file_upload_count--;
if (on_change_file_upload_count) { on_change_file_upload_count(current_file_upload_count); }
}
// page startup code
Event.observe(window, 'load', function() {
if ($('multiple-new-post-checkbox')) {
setup_hide_show_checkbox_holder("multiple-new-post");
add_file_upload();
hide_show_div_on_checkbox('override-title-holder', 'override-title');
hide_show_div_on_checkbox('thumbnail-write-holder', 'no-thumbnails', true);
}
if ($('upload-destination')) {
var toggle_upload_destination_holder = function() {
var show_upload_destination = true;
if ($('overwrite-existing-file-selector-checkbox')) {
show_upload_destination = !$('overwrite-existing-file-selector-checkbox').checked;
}
if (show_upload_destination) {
if ($('upload-destination').options[$('upload-destination').selectedIndex].value == "comic") {
$('upload-destination-holder').show();
} else {
$('upload-destination-holder').hide();
}
} else {
$('upload-destination-holder').hide();
}
};
Event.observe('upload-destination', 'change', toggle_upload_destination_holder);
toggle_upload_destination_holder();
on_change_file_upload_count = function(count) {
if (count == 1) {
Element.show('specify-date-holder');
Element.show('overwrite-existing-holder');
} else {
Element.hide('specify-date-holder');
Element.hide('overwrite-existing-holder');
if ($('overwrite-existing-file-selector-checkbox')) {
$('overwrite-existing-file-selector-checkbox').checked = false;
}
toggle_upload_destination_holder();
}
hide_show_checkbox_holder('overwrite-existing-file-selector');
}
if ($('overwrite-existing-file-selector-checkbox')) {
Event.observe('overwrite-existing-file-selector-checkbox', 'click', function() {
hide_show_checkbox_holder('overwrite-existing-file-selector');
toggle_upload_destination_holder();
});
}
if ($('overwrite-existing-file-selector-checkbox')) {
hide_show_checkbox_holder('overwrite-existing-file-selector');
}
}
if ($('count-missing-posts-clicker')) {
hide_show_div_on_checkbox('override-title-holder', 'override-title');
hide_show_div_on_checkbox('thumbnail-write-holder', 'no-thumbnails', true);
Event.observe('count-missing-posts-clicker', 'click', function() {
$('missing-posts-display').innerHTML = "..." + messages['count_missing_posts_counting'] + "...";
new Ajax.Request(ajax_request_uri,
{
method: 'post',
parameters: {
action: "count-missing-posts"
},
onSuccess: function(transport) {
if (transport.responseText.match(/missing-posts>(.*)<\/missing-posts/)) {
$('missing-posts-display').innerHTML = RegExp.$1;
} else {
$('missing-posts-display').innerHTML = messages['count_missing_posts_none_missing'];
}
},
onFailure: function(transport) {
$('missing-posts-display').innerHTML = messages['failure_in_counting_posts'];
}
}
);
return false;
});
}
if ($('image-preview')) { change_image_preview(); }
});

298
comicpress_styles.css Normal file
View File

@ -0,0 +1,298 @@
div#cpm-container {
padding: 10px;
padding-bottom: 0;
width: 955px
}
div#cpm-container.no-sidebar {
width: 100%;
padding: 0;
}
div#cpm-container h1 {
margin-top: 0;
margin-bottom: 5px;
}
div#cpm-container h2 {
margin-top: 0;
margin-bottom: 4px;
}
div#cpm-container div h2 {
padding-top: 0;
font-size: 20px;
font-style: normal;
font-weight: bold;
font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif
}
div#cpm-container h3 { margin-top: 0 }
div#cpm-container em { font-style: oblique }
div#cpm-container div#cpm-sidebar-column {
float: left;
display: inline;
width: 320px;
padding-top: 10px;
margin-left: 10px;
}
div#cpm-container div#cpm-activity-column {
float: left;
display: inline;
width: 625px;
}
div#cpm-container div#cpm-activity-column.no-sidebar {
margin-left: 0;
float: none;
display: block;
width: 100%
}
div#cpm-container div#comicpress-details {
border: solid #E3E3E3 1px;
background-color: #f1f1f1;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
padding: 10px;
}
div#cpm-container div#comicpress-details ul {
list-style-type: circle
}
div#cpm-container div#comicpress-help {
border: solid #464646 1px;
background-color: #b0b0b0;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
padding: 10px;
margin-top: 10px;
}
div#cpm-container div#config-editor {
border: solid #abc 1px;
background-color: #fed;
padding: 10px;
margin-top: 10px;
}
form#config-editor h3 {
margin-bottom: 5px;
margin-top: 5px;
}
form#config-editor table.form-table {
padding-bottom: 10px;
margin-top: 5px;
}
div#cpm-container div.activity-box {
overflow: hidden
}
div#cpm-container div.top-activity-box {
margin-top: 0;
}
div#cpm-container div#cpm-footer {
color: #777;
margin-top: 10px;
text-align: left;
clear: both;
overflow: hidden
}
div#cpm-footer-paypal {
width: 100px;
float: right;
display: inline;
text-align: right
}
div#zip-upload-warning {
border: solid red 1px;
background-color: #dcc;
margin: 5px;
padding: 5px;
}
div#image-preview {
margin: 5px;
padding: 5px;
background-color: #777;
border: solid black 2px
}
div#editor-toolbar {
text-align: right;
overflow: hidden
}
div#editor-toolbar a {
padding: 5px;
display: block;
float: right;
cursor: pointer;
cursor: hand;
}
div#editor-toolbar a.active {
background-color: #CEE1EF
}
form#config-editor input.update-config {
clear: both;
width: 295px;
}
.form-title {
font-weight: bold
}
form span.form-title {
width: 280px;
display: block;
position: absolute;
height: 30px;
}
form span.form-field {
width: 200px;
display: inline;
margin-left: 290px;
height: 30px;
}
table td {
padding-bottom: 5px
}
table input {
font-size: 12px;
border: solid black 1px;
padding: 1px;
}
#cpm-container h2 { padding-right: 0; }
#comicpress-details h3 {
color: #7f958a;
border-bottom: 1px solid #acb;
}
#comicpress-help h2 {
color: #333333;
border-color: #333333;
}
#categories-table { border-top: solid #aaa 1px }
#categories-table th { padding: 0 10px }
#categories-table td { border-top: solid #ddd 1px; }
.code-block {
background-color: white;
border:solid black 2px;
padding: 5px;
overflow: auto;
height: 300px;
font-family: 'courier new';
white-space: pre;
display: block
}
div.upload-holder {
text-align: center;
padding: 3px 0;
border-top: solid #ddd 1px;
}
div#cpm-messages, div#cpm-errors, div#cpm-warnings, div#import-count-information {
padding: 5px;
margin-bottom: 5px;
border-width: 1px;
border-style: solid
}
div#cpm-messages, div#import-count-information {
background-color: #ffe;
border-color: #ddc;
}
div#cpm-warnings {
background-color: #fee;
border-color: #dcc;
}
div#cpm-errors {
background-color: #330007;
border-color: #a00;
color: white
}
div#import-count-information {
text-align: center
}
div#first-run-holder {
border: solid #a77 1px;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
background-color: #fff0f0;
padding: 5px;
text-align: center;
margin-top: 10px
}
div#dashboard_quomicpress div.wrap {
margin: 0
}
div#dashboard_quomicpress div#cpm-container {
padding: 0
}
div#comicpress-latest-posts h3 {
text-align: center;
padding-top: 5px;
}
div#comicpress-latest-posts div.comic-found,
div#comicpress-latest-posts div.comic-not-found {
border-top: solid #aaa 1px;
padding: 0 5px 5px;
}
div#comicpress-latest-posts div.comic-not-found {
background-color: #ffe0e0
}
div#comicpress-latest-posts div.comic-not-found div.alert {
border: solid #a00 2px;
margin: 10px;
padding: 10px;
background-color: white;
text-align: center;
font-size: 18px;
font-weight: bold
}
tr.grey { background-color: #d4d4d4 }
table#status-table {
width: 100%
}
table#status-table td.comic {
background-color: #f3f3f3;
}
table#status-table td.post {
background-color: #e0e0e0;
}

View File

@ -0,0 +1,68 @@
<?php
$comicpress_configuration_options = array(
array(
'id' => 'comiccat',
'name' => 'Comic Category',
'type' => 'category',
'description' => 'The category ID of your comic category',
'default' => 1
),
array(
'id' => 'blogcat',
'name' => 'Blog Category',
'type' => 'category',
'description' => 'The category ID of your blog category',
'default' => 2
),
array(
'id' => 'comics_path',
'variable_name' => 'comic_folder',
'name' => 'Comic Folder',
'type' => 'folder',
'description' => 'The folder your comics are located in',
'default' => "comics",
'no_wpmu' => true
),
array(
'id' => 'comicsrss_path',
'variable_name' => 'rss_comic_folder',
'name' => 'RSS Comic Folder',
'type' => 'folder',
'description' => 'The folder your comics are located in for the RSS feed',
'default' => "comics-rss",
'no_wpmu' => true
),
array(
'id' => 'comicsarchive_path',
'variable_name' => 'archive_comic_folder',
'name' => 'Archive Comic Folder',
'type' => 'folder',
'description' => 'The folder your comics are located in for the Archive pages',
'default' => "comics-archive",
'no_wpmu' => true
),
array(
'id' => 'archive_comic_width',
'name' => 'Archive Comic Width',
'type' => 'integer',
'description' => 'The width your comics will appear on archive or search results',
'default' => "380"
),
array(
'id' => 'rss_comic_width',
'name' => 'RSS Comic Width',
'type' => 'integer',
'description' => 'The width your comics will appear in the RSS feed',
'default' => "380"
),
array(
'id' => 'blog_postcount',
'name' => 'Blog Post Count',
'type' => 'integer',
'description' => 'The number of blog entries to appear on the home page',
'default' => "10"
),
);
?>

View File

@ -0,0 +1,158 @@
<?php
// the list of all CPM configuration options that are saved to wp_options
$configuration_options = array(
'Basic Configuration',
array(
'id' => 'cpm-default-post-time',
'name' => "Default Post Time",
'type' => 'text',
'size' => 8,
'default' => '12:00am',
'message' => "Default time for comic posts to go live, cannot be blank. enter 'now' to always post at the current system time.",
'not_blank' => true
),
array(
'id' => 'cpm-default-post-content',
'name' => "Default Post Content",
'type' => 'textarea',
'message' => "Default content for comic posts"
),
array(
'id' => 'cpm-default-override-title',
'name' => "Default Post Title",
'type' => 'text',
'size' => 40,
'message' => "Default title for comic posts"
),
array(
'id' => 'cpm-default-post-tags',
'name' => "Default Post Tags",
'type' => 'text',
'size' => 40,
'message' => "Default tags for comic posts"
),
array(
'id' => 'cpm-default-comic-category-is-last-storyline',
'name' => "Default Comic Category is Last Storyline Category",
'type' => 'checkbox',
'default' => "1",
'message' => "If checked, the default comic cateogry for upload/import is the last category in the storyline"
),
array(
'id' => 'cpm-default-additional-categories',
'name' => "Default Additional Categories",
'type' => 'categories',
'message' => "Additional default categories for comic posts"
),
array(
'id' => 'cpm-archive-generate-thumbnails',
'name' => "Generate Archive Thumbnails?",
'type' => 'checkbox',
'default' => "1",
'message' => "If checked and server is configured correctly, generate archive thumbnails"
),
array(
'id' => 'cpm-rss-generate-thumbnails',
'name' => "Generate RSS Thumbnails?",
'type' => 'checkbox',
'default' => "1",
'message' => "If checked and server is configured correctly, generate RSS thumbnails"
),
array(
'id' => 'cpm-thumbnail-quality',
'name' => "Thumbnail Quality",
'type' => 'text',
'size' => 3,
'default' => "80",
'message' => "Quality of JPEG Thumbnails"
),
array(
'id' => 'cpm-strip-icc-profiles',
'name' => "Strip ICC Profiles",
'type' => 'checkbox',
'default' => "1",
'message' => "Strip ICC profiles from uploaded images. ImageMagick only.",
'imagemagick-only' => true
),
array(
'id' => 'cpm-obfuscate-filenames-on-upload',
'name' => "Obfuscate Filenames on Upload?",
'type' => 'dropdown',
'options' => "none:No obfuscation|append:Append code to title|replace:Replace title with code",
'default' => "none",
'message' => "add or replace the title of the image file with a random code to prevent nosy readers from looking ahead in your archive"
),
"Advanced Configuration",
array(
"id" => "cpm-skip-checks",
"name" => "Skip Checks?",
"type" => "checkbox",
'default' => "1",
"message" => "if you know your configuration is correct, enable this to improve performance. Enabling this also hides ComicPress version incompatibiity messages."
),
array(
"id" => "cpm-edit-post-integrate",
"name" => "Allow date change/deletions in Edit Post to affect associated comic files?",
"type" => "checkbox",
'default' => "1",
"message" => "if checked, working in Edit Post will affect your comic files"
),
array(
"id" => "cpm-sidebar-type",
"name" => "ComicPress Manager Sidebar:",
"type" => "dropdown",
'options' => 'standard:ComicPress Status and Help|latest:Latest Comic Posts|none:No Sidebar',
'default' => "standard",
"message" => "change the ComicPress Manager sidebar to a different default view"
),
array(
"id" => "cpm-date-format",
"name" => "ComicPress Manager Date Format",
"type" => "text",
"size" => 12,
'default' => "Y-m-d",
"message" => "if you've hacked on ComicPress to support a different date format, change it here"
),
array(
"id" => "cpm-perform-gd-check",
"name" => "Check uploaded files using GD?",
"type" => "checkbox",
'default' => "1",
"message" => "enable this to check if uploaded files are valid images using the GD library"
),
array(
"id" => "cpm-enable-dashboard-rss-feed",
"name" => "Enable the ComicPress RSS Feed on the Dashboard?",
"type" => "checkbox",
'default' => "1",
"message" => "enable this to get the latest ComicPress news on your Dashboard"
),
array(
"id" => "cpm-enable-quomicpress",
"name" => "Enable the QuomicPress (Quick ComicPress) panel on the Dashboard?",
"type" => "checkbox",
'default' => "1",
"message" => "enable this to use the QuomicPress (Quick ComicPress) posting box on your Dashboard"
),
array(
"id" => "cpm-upload-permissions",
"name" => "Unix chmod permissions to assign to uploaded files?",
"type" => "text",
"size" => 5,
"strip-wpmu" => true,
'default' => "664",
"message" => "if you're on a Unix-like operating system, and need to have files uploaded with specific permissions, enter them in here. Windows systems always upload with chmod 777"
),
array(
"id" => "cpm-document-root",
"name" => "Specify a WordPress DOCUMENT_ROOT",
"type" => "text",
"strip-wpmu" => true,
"size" => 30,
"message" => "if ComicPress Manager isn't able to automatically find the path to your index.php file and comics folders, enter in the proper absolute path here"
),
);
?>

46
js/comicpress_dates.js Normal file
View File

@ -0,0 +1,46 @@
function pad(s, l) { s = "0000" + (s + ""); return s.substr(s.length - l, l); }
function get_date_string(date) {
return date.getFullYear() + "-" + pad(date.getMonth() + 1, 2) + "-" + pad(date.getDate(), 2);
}
function reschedule_posts(start) {
var start_processing = false;
var interval = null;
var current_date = null;
var current_interval = 0;
for (var i = 0, l = comic_files_keys.length; i < l; ++i) {
if (start_processing) {
current_date += (interval[current_interval] * 86400 * 1000);
current_interval = (current_interval + 1) % interval.length;
date_string = get_date_string(new Date(current_date));
$('dates[' + comic_files_keys[i] + ']').value = date_string;
$('holder-' + comic_files_keys[i]).style.backgroundColor = "#ddd";
}
if (comic_files_keys[i] == start) {
start_processing = true;
interval = prompt(days_between_posts_message, "7");
if (interval !== null) {
var all_valid = true;
var parts = interval.split(",");
for (var j = 0, jl = parts.length; j < jl; ++j) {
if (!parts[j].toString().match(/^\d+$/)) { all_valid = false; break; }
}
if (all_valid) {
interval = parts;
date_parts = $F('dates[' + comic_files_keys[i] + ']').split("-");
current_date = Date.UTC(date_parts[0], date_parts[1] - 1, date_parts[2], 2) + 86400 * 1000;
} else {
alert(interval + " " + valid_interval_message);
break;
}
} else {
break;
}
}
}
}

165
js/comicpress_script.js Normal file
View File

@ -0,0 +1,165 @@
/**
* hide/show the new post holder box depending on the status of the checkbox.
*/
function hide_show_checkbox_holder(which, reverse) {
if (reverse !== true) { reverse = false; }
($(which + '-checkbox').checked !== reverse) ? new Effect.Appear(which + '-holder') : new Effect.BlindUp(which + '-holder');
}
function setup_hide_show_checkbox_holder(which) {
Event.observe(which + '-checkbox', 'click', function() { hide_show_checkbox_holder(which) });
hide_show_checkbox_holder(which);
}
function hide_show_div_on_checkbox(div, checkbox, flip_behavior) {
if ($(checkbox) && $(div)) {
ok = (flip_behavior) ? !$(checkbox).checked : $(checkbox).checked;
(ok) ? new Effect.Appear(div) : new Effect.BlindUp(div);
}
}
/**
* Show the preview image for deleting an image.
*/
function change_image_preview() {
var which = $F('delete-comic-dropdown');
$('image-preview').innerHTML = '<img src="' + which + '" width="420" />';
}
var current_file_index = 0;
var current_file_upload_count = 0;
var on_change_file_upload_count = null;
/**
* Add a file upload field.
*/
function add_file_upload() {
var field = "<div class=\"upload-holder\" id=\"upload-holder-" + current_file_index + "\">";
field += messages['add_file_upload_file'] + "<input size=\"35\" type=\"file\" name=\"upload-" + current_file_index + "\" />";
field += " [<a href=\"#\" onclick=\"remove_file_upload('" + current_file_index + "');\">" + messages['add_file_upload_remove'] + "</a>]";
field += "</div>";
Element.insert('multiple-file-upload', { bottom: field });
current_file_index++;
current_file_upload_count++;
if (on_change_file_upload_count) { on_change_file_upload_count(current_file_upload_count); }
}
function remove_file_upload(which) {
Element.remove('upload-holder-' + which);
current_file_upload_count--;
if (on_change_file_upload_count) { on_change_file_upload_count(current_file_upload_count); }
}
// page startup code
function prepare_comicpress_manager() {
if ($('multiple-new-post-checkbox')) {
setup_hide_show_checkbox_holder("multiple-new-post");
add_file_upload();
hide_show_div_on_checkbox('override-title-holder', 'override-title');
hide_show_div_on_checkbox('thumbnail-write-holder', 'no-thumbnails', true);
var add_to_tags = function(href) {
var all_tags = [];
if (!$F('tags').empty()) {
all_tags = $F('tags').replace(new RegExp("s*\,\s*"), ",").split(",");
}
if (all_tags.indexOf(href.innerHTML) == -1) {
all_tags.push(href.innerHTML);
}
$('tags').value = all_tags.join(",");
}
$$('a.tag').each(function(href) {
Event.observe(href, 'click', function(e) {
Event.stop(e);
add_to_tags(href);
});
});
}
var handle_show_rebuild_thumbnails = function(e) {
(($F('overwrite-existing-file-choice') != "") && ($F('upload-destination') == "comic")) ? $('rebuild-thumbnails').show() : $('rebuild-thumbnails').hide();
};
if ($('overwrite-existing-file-choice')) {
Event.observe('overwrite-existing-file-choice', 'change', handle_show_rebuild_thumbnails);
handle_show_rebuild_thumbnails();
}
if ($('replace-comic-rebuild-thumbnails') && $('thumbnails')) {
Event.observe($('replace-comic-rebuild-thumbnails'), 'click', function(e) {
$('thumbnails').checked = $('replace-comic-rebuild-thumbnails').checked;
});
}
if ($('upload-destination')) {
var toggle_upload_destination_holder = function() {
if ($F('overwrite-existing-file-choice') == "") {
if ($('upload-destination').options[$('upload-destination').selectedIndex].value == "comic") {
new Effect.Appear('upload-destination-holder');
} else {
new Effect.BlindUp('upload-destination-holder');
}
} else {
new Effect.BlindUp('upload-destination-holder');
}
handle_show_rebuild_thumbnails();
};
Event.observe('upload-destination', 'change', toggle_upload_destination_holder);
toggle_upload_destination_holder();
on_change_file_upload_count = function(count) {
if (count == 1) {
new Effect.Appear('specify-date-holder');
new Effect.Appear('overwrite-existing-holder');
} else {
new Effect.BlindUp('specify-date-holder');
new Effect.BlindUp('overwrite-existing-holder');
toggle_upload_destination_holder();
}
}
if ($('overwrite-existing-file-choice')) {
Event.observe('overwrite-existing-file-choice', 'change', function() {
toggle_upload_destination_holder();
});
}
}
if ($('count-missing-posts-clicker')) {
hide_show_div_on_checkbox('override-title-holder', 'override-title');
hide_show_div_on_checkbox('thumbnail-write-holder', 'no-thumbnails', true);
Event.observe('count-missing-posts-clicker', 'click', function() {
$('missing-posts-display').innerHTML = "..." + messages['count_missing_posts_counting'] + "...";
new Ajax.Request(ajax_request_uri,
{
method: 'post',
parameters: {
action: "count-missing-posts"
},
onSuccess: function(transport) {
if (transport.headerJSON) {
$('missing-posts-display').innerHTML = transport.headerJSON.missing_posts;
} else {
$('missing-posts-display').innerHTML = messages['count_missing_posts_none_missing'];
}
},
onFailure: function(transport) {
$('missing-posts-display').innerHTML = messages['failure_in_counting_posts'];
}
}
);
return false;
});
}
if ($('image-preview')) { change_image_preview(); }
}

63
js/comicpress_status.js Normal file
View File

@ -0,0 +1,63 @@
var active_filters = {};
function toggle_filter(id) {
if (active_filters[id] === undefined) { active_filters[id] = false; }
active_filters[id] = !active_filters[id];
var any_filters_active = false;
for (var key in active_filters) {
if (active_filters[key] === true) {
any_filters_active = true; break;
}
}
if (top.console && top.console.log) {
top.console.log(active_filters);
}
var rows = document.getElementsByClassName('data-row');
for (var i = 0, il = rows.length; i < il; ++i) {
if (any_filters_active) {
var filter_active = false;
for (var key in active_filters) {
if (top.console && top.console.log) {
top.console.log(key);
}
if (active_filters[key] === true) {
if (rows[i].hasClassName(key)) {
filter_active = true; break;
}
}
}
if (top.console && top.console.log) {
top.console.log(i + ": " + filter_active);
}
if (filter_active) {
Element.show(rows[i]);
} else {
Element.hide(rows[i]);
}
} else {
Element.show(rows[i]);
}
}
for (var key in active_filters) {
var target = $(key);
if (active_filters[key] === true) {
if (!Element.hasClassName(target, 'enabled')) { Element.addClassName(target, 'enabled'); }
} else {
if (Element.hasClassName(target, 'enabled')) { Element.removeClassName(target, 'enabled'); }
}
}
}
function setup_status_togglers() {
var togglers = document.getElementsByClassName('toggler');
for (var i = 0; i < togglers.length; ++i) {
Event.observe(togglers[i], 'click', function(e) {
var element = Event.element(e);
toggle_filter(element.id);
});
}
}

View File

@ -0,0 +1,6 @@
function pad(s,l){s="0000"+(s+"");return s.substr(s.length-l,l);}
function get_date_string(date){return date.getFullYear()+"-"+pad(date.getMonth()+1,2)+"-"+pad(date.getDate(),2);}
function reschedule_posts(start){var start_processing=false;var interval=null;var current_date=null;var current_interval=0;for(var i=0,l=comic_files_keys.length;i<l;++i){if(start_processing){current_date+=(interval[current_interval]*86400*1000);current_interval=(current_interval+1)%interval.length;date_string=get_date_string(new Date(current_date));$('dates['+comic_files_keys[i]+']').value=date_string;$('holder-'+comic_files_keys[i]).style.backgroundColor="#ddd";}
if(comic_files_keys[i]==start){start_processing=true;interval=prompt(days_between_posts_message,"7");if(interval!==null){var all_valid=true;var parts=interval.split(",");for(var j=0,jl=parts.length;j<jl;++j){if(!parts[j].toString().match(/^\d+$/)){all_valid=false;break;}}
if(all_valid){interval=parts;date_parts=$F('dates['+comic_files_keys[i]+']').split("-");current_date=Date.UTC(date_parts[0],date_parts[1]-1,date_parts[2],2)+86400*1000;}else{alert(interval+" "+valid_interval_message);break;}}else{break;}}}}

View File

@ -0,0 +1,19 @@
function hide_show_checkbox_holder(which,reverse){if(reverse!==true){reverse=false;}
($(which+'-checkbox').checked!==reverse)?new Effect.Appear(which+'-holder'):new Effect.BlindUp(which+'-holder');}
function setup_hide_show_checkbox_holder(which){Event.observe(which+'-checkbox','click',function(){hide_show_checkbox_holder(which)});hide_show_checkbox_holder(which);}
function hide_show_div_on_checkbox(div,checkbox,flip_behavior){if($(checkbox)&&$(div)){ok=(flip_behavior)?!$(checkbox).checked:$(checkbox).checked;(ok)?new Effect.Appear(div):new Effect.BlindUp(div);}}
function change_image_preview(){var which=$F('delete-comic-dropdown');$('image-preview').innerHTML='<img src="'+which+'" width="420" />';}
var current_file_index=0;var current_file_upload_count=0;var on_change_file_upload_count=null;function add_file_upload(){var field="<div class=\"upload-holder\" id=\"upload-holder-"+current_file_index+"\">";field+=messages['add_file_upload_file']+"<input size=\"35\" type=\"file\" name=\"upload-"+current_file_index+"\" />";field+=" [<a href=\"#\" onclick=\"remove_file_upload('"+current_file_index+"');\">"+messages['add_file_upload_remove']+"</a>]";field+="</div>";Element.insert('multiple-file-upload',{bottom:field});current_file_index++;current_file_upload_count++;if(on_change_file_upload_count){on_change_file_upload_count(current_file_upload_count);}}
function remove_file_upload(which){Element.remove('upload-holder-'+which);current_file_upload_count--;if(on_change_file_upload_count){on_change_file_upload_count(current_file_upload_count);}}
function prepare_comicpress_manager(){if($('multiple-new-post-checkbox')){setup_hide_show_checkbox_holder("multiple-new-post");add_file_upload();hide_show_div_on_checkbox('override-title-holder','override-title');hide_show_div_on_checkbox('thumbnail-write-holder','no-thumbnails',true);var add_to_tags=function(href){var all_tags=[];if(!$F('tags').empty()){all_tags=$F('tags').replace(new RegExp("s*\,\s*"),",").split(",");}
if(all_tags.indexOf(href.innerHTML)==-1){all_tags.push(href.innerHTML);}
$('tags').value=all_tags.join(",");}
$$('a.tag').each(function(href){Event.observe(href,'click',function(e){Event.stop(e);add_to_tags(href);});});}
var handle_show_rebuild_thumbnails=function(e){(($F('overwrite-existing-file-choice')!="")&&($F('upload-destination')=="comic"))?$('rebuild-thumbnails').show():$('rebuild-thumbnails').hide();};if($('overwrite-existing-file-choice')){Event.observe('overwrite-existing-file-choice','change',handle_show_rebuild_thumbnails);handle_show_rebuild_thumbnails();}
if($('replace-comic-rebuild-thumbnails')&&$('thumbnails')){Event.observe($('replace-comic-rebuild-thumbnails'),'click',function(e){$('thumbnails').checked=$('replace-comic-rebuild-thumbnails').checked;});}
if($('upload-destination')){var toggle_upload_destination_holder=function(){if($F('overwrite-existing-file-choice')==""){if($('upload-destination').options[$('upload-destination').selectedIndex].value=="comic"){new Effect.Appear('upload-destination-holder');}else{new Effect.BlindUp('upload-destination-holder');}}else{new Effect.BlindUp('upload-destination-holder');}
handle_show_rebuild_thumbnails();};Event.observe('upload-destination','change',toggle_upload_destination_holder);toggle_upload_destination_holder();on_change_file_upload_count=function(count){if(count==1){new Effect.Appear('specify-date-holder');new Effect.Appear('overwrite-existing-holder');}else{new Effect.BlindUp('specify-date-holder');new Effect.BlindUp('overwrite-existing-holder');toggle_upload_destination_holder();}}
if($('overwrite-existing-file-choice')){Event.observe('overwrite-existing-file-choice','change',function(){toggle_upload_destination_holder();});}}
if($('count-missing-posts-clicker')){hide_show_div_on_checkbox('override-title-holder','override-title');hide_show_div_on_checkbox('thumbnail-write-holder','no-thumbnails',true);Event.observe('count-missing-posts-clicker','click',function(){$('missing-posts-display').innerHTML="..."+messages['count_missing_posts_counting']+"...";new Ajax.Request(ajax_request_uri,{method:'post',parameters:{action:"count-missing-posts"},onSuccess:function(transport){if(transport.headerJSON){$('missing-posts-display').innerHTML=transport.headerJSON.missing_posts;}else{$('missing-posts-display').innerHTML=messages['count_missing_posts_none_missing'];}},onFailure:function(transport){$('missing-posts-display').innerHTML=messages['failure_in_counting_posts'];}});return false;});}
if($('image-preview')){change_image_preview();}}

View File

@ -0,0 +1,10 @@
var active_filters={};function toggle_filter(id){if(active_filters[id]===undefined){active_filters[id]=false;}
active_filters[id]=!active_filters[id];var any_filters_active=false;for(var key in active_filters){if(active_filters[key]===true){any_filters_active=true;break;}}
if(top.console&&top.console.log){top.console.log(active_filters);}
var rows=document.getElementsByClassName('data-row');for(var i=0,il=rows.length;i<il;++i){if(any_filters_active){var filter_active=false;for(var key in active_filters){if(top.console&&top.console.log){top.console.log(key);}
if(active_filters[key]===true){if(rows[i].hasClassName(key)){filter_active=true;break;}}}
if(top.console&&top.console.log){top.console.log(i+": "+filter_active);}
if(filter_active){Element.show(rows[i]);}else{Element.hide(rows[i]);}}else{Element.show(rows[i]);}}
for(var key in active_filters){var target=$(key);if(active_filters[key]===true){if(!Element.hasClassName(target,'enabled')){Element.addClassName(target,'enabled');}}else{if(Element.hasClassName(target,'enabled')){Element.removeClassName(target,'enabled');}}}}
function setup_status_togglers(){var togglers=document.getElementsByClassName('toggler');for(var i=0;i<togglers.length;++i){Event.observe(togglers[i],'click',function(e){var element=Event.element(e);toggle_filter(element.id);});}}

761
jscalendar-1.0/ChangeLog Normal file
View File

@ -0,0 +1,761 @@
2005-03-07 Mihai Bazon <mihai_bazon@yahoo.com>
* skins/aqua/theme.css: *** empty log message ***
* release-notes.html: updated release notes
* calendar-setup.js:
use a better approach to initialize the calendar--don't call _init twice,
it's the most time consuming function in the calendar. Instead, determine
the date beforehand if possible and pass it to the calendar at constructor.
* calendar.js:
avoid keyboard operation when 'multiple dates' is set (very buggy for now)
* calendar.js:
fixed keyboard handling problems: now it works fine when "showsOtherMonths"
is passed; it also seems to be fine with disabled dates (won't normally
allow selection)--however this area is still likely to be buggy, i.e. in a
month that has all the dates disabled.
* calendar.js:
some trivial performance improvements in the _init function
Added Date.parseDate (old Calendar.prototype.parseDate now calls this one)
2005-03-05 Mihai Bazon <mihai_bazon@yahoo.com>
* release-notes.html: updated release notes
* dayinfo.html: *** empty log message ***
* calendar-setup.js:
bugfix--update an inputField even if flat calendar is selected
* calendar.js:
fixed bugs in parseDate function (if for some reason the input string is
totally broken, then check numbers for NaN and use values from the current
date instead)
* make-release.pl: copy the skins subdirectory and all skins
* index.html: added Aqua skin
* skins/aqua/active-bg.gif, skins/aqua/dark-bg.gif, skins/aqua/hover-bg.gif, skins/aqua/menuarrow.gif, skins/aqua/normal-bg.gif, skins/aqua/rowhover-bg.gif, skins/aqua/status-bg.gif, skins/aqua/theme.css, skins/aqua/title-bg.gif, skins/aqua/today-bg.gif:
in the future, skins will go to this directory, each in a separate subdir; for now there's only Aqua, an excellent new skin
* calendar.js: workaround IE bug, needed in the Aqua theme
don't hide select elements unless browser is IE or Opera
* lang/calendar-bg.js, lang/calendar-big5-utf8.js, lang/calendar-big5.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-cs-utf8.js, lang/calendar-cs-win.js, lang/calendar-da.js, lang/calendar-de.js, lang/calendar-el.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fi.js, lang/calendar-fr.js, lang/calendar-he-utf8.js, lang/calendar-hu.js, lang/calendar-it.js, lang/calendar-ko-utf8.js, lang/calendar-ko.js, lang/calendar-lt-utf8.js, lang/calendar-lt.js, lang/calendar-lv.js, lang/calendar-nl.js, lang/calendar-no.js, lang/calendar-pl-utf8.js, lang/calendar-pl.js, lang/calendar-pt.js, lang/calendar-ro.js, lang/calendar-ru.js, lang/calendar-ru_win_.js, lang/calendar-si.js, lang/calendar-sk.js, lang/calendar-sp.js, lang/calendar-sv.js, lang/calendar-zh.js, lang/cn_utf8.js:
updated urls, copyright notices
* doc/reference.tex: updated documentation
* calendar.js, index.html:
renamed the global variable to _dynarch_popupCalendar to avoid name clashes
* multiple-dates.html: start with an empty array
* calendar.js:
fixed bugs in the time selector (12:XX pm was wrongfully understood as 12:XX am)
* calendar.js:
using innerHTML instead of text nodes; works better in Safari and also makes
a smaller, cleaner code
2005-03-04 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar.js:
fixed a performance regression that occurred after adding support for multiple dates
fixed the time selection bug (now it keeps time correctly)
clicking today will close the calendar if "today" is already selected
* lang/cn_utf8.js: new translation
2005-02-17 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-ar-utf8.zip: Added arabic translation
2004-10-19 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-zh.js: updated
2004-09-20 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-no.js: updated (Daniel Holmen)
2004-09-20 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-no.js: updated (Daniel Holmen)
2004-08-11 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-nl.js: updated language file (thanks to Arjen Duursma)
* lang/calendar-sp.js: updated (thanks to Rafael Velasco)
2004-07-21 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-br.js: updated
* calendar-setup.js: fixed bug (dateText)
2004-07-21 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-br.js: updated
* calendar-setup.js: fixed bug (dateText)
2004-07-04 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-lv.js:
added LV translation (thanks to Juris Valdovskis)
2004-06-25 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar.js:
fixed bug in IE (el.calendar.tooltips is null or not an object)
2004-06-24 Mihai Bazon <mihai_bazon@yahoo.com>
* doc/reference.tex: fixed latex compilation
* index.html: linking other sample files
* calendar-setup.js, calendar.js, dayinfo.html:
ability to display day info (dateText parameter) + sample file
2004-06-23 Mihai Bazon <mihai_bazon@yahoo.com>
* doc/reference.tex, lang/calendar-bg.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fr.js, lang/calendar-it.js, lang/calendar-ko-utf8.js, lang/calendar-ko.js, lang/calendar-nl.js, lang/calendar-sv.js, README, calendar.js, index.html:
email address changed
2004-06-14 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-cs-utf8.js, lang/calendar-cs-win.js:
updated translations
* calendar-system.css: added z-index to drop downs
* lang/calendar-en.js:
first day of week can now be part of the language file
* lang/calendar-es.js:
updated language file (thanks to Servilio Afre Puentes)
* calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-tas.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar-blue.css:
added z-index property to drop downs (fixes bug)
2004-06-13 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar-setup.js: fixed bug (apply showOthers to flat calendars too)
2004-06-06 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar-setup.js:
firstDay defaults to "null", in which case the value in the language file
will be used
* calendar.js:
firstDayOfWeek can now default to a value specified in the language definition file
* index.html: first day of week is now numeric
2004-06-02 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar.js: added date tooltip function
2004-05-28 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-br.js: updated (thanks to Marcos Pont)
* calendar-setup.js: fixed small bug
2004-05-01 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar-setup.js: returns the calendar object
2004-04-28 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar-setup.js:
patch to read the date value from the inputField, according to ifFormat (if
both are passed), for flat calendars. (thanks Colin T. Hill)
2004-04-20 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar-setup.js, calendar.js, multiple-dates.html:
added support for multiple dates selection
* lang/calendar-nl.js:
updated Dutch translation, thanks to Jeroen Wolsink
* lang/calendar-big5-utf8.js, lang/calendar-big5.js:
Traditional Chinese language (thanks GaryFu)
2004-03-26 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-fr.js, lang/calendar-pt.js: updated
* lang/calendar-ru_win_.js, lang/calendar-ru.js:
updated, thanks to Sly Golovanov
2004-03-25 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-fr.js: updated (thanks to David Duret)
2004-03-24 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-da.js: updated (thanks to Michael Thingmand Henriksen)
2004-03-21 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-ca.js: updated (thanks to David Valls)
2004-03-17 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-de.js: updated to UTF8 (thanks to Jack (tR))
2004-03-09 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-bg.js: Bulgarian translation
2004-03-08 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-he-utf8.js: Hebrew translation (thanks to Idan Sofer)
* lang/calendar-hu.js: updated (thanks to Istvan Karaszi)
2004-02-27 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-it.js: updated (thanks to Fabio Di Bernardini)
2004-02-25 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar.js: fix for Safari (thanks to Olivier Chirouze / XPWeb)
2004-02-22 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-al.js: Albanian language file
2004-02-17 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-fr.js: fixed
* lang/calendar-fr.js:
FR translation updated (thanks to SIMON Alexandre)
* lang/calendar-es.js: ES translation updated, thanks to David Gonzales
2004-02-10 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-pt.js:
updated Portugese translation, thanks to Elcio Ferreira
2004-02-09 Mihai Bazon <mihai_bazon@yahoo.com>
* TODO: updated
2004-02-06 Mihai Bazon <mihai_bazon@yahoo.com>
* README: describe the PHP files
* make-release.pl: includes php files
* make-release.pl: ChangeLog included in the distribution (if found)
* calendar.js, doc/reference.tex, index.html: switched to version 0.9.6
* doc/Calendar.setup.tex, doc/reference.tex: updated documentation
* release-notes.html: updated release notes
* calendar.js: Fixed bug: Feb/29 and year change now keeps Feb in view
* calendar.js: fixed the "ESC" problem (call the close handler)
* calendar.js: fixed day of year range (1 to 366 instead of 0 to 365)
* calendar.js: fixed week number calculations
* doc/reference.tex: fixed (date input format)
* calendar.php: removed comment
* calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-tas.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar.js:
workaround for IE bug (you can't normally specify through CSS the style for
an element having two classes or more; we had to change a classname)
* calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-tas.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css:
smaller fonts on days that are in neighbor months
2004-02-04 Mihai Bazon <mihai_bazon@yahoo.com>
* index.html: first demo shows the "showOtherMonths" capability
* calendar-setup.js: support new parameters in the calendar.
added: firstDay, showOthers, cache.
* calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar.js, lang/calendar-en.js, lang/calendar-ro.js:
new parameters: firstDayOfWeek, showsOtherMonths; removed mondayFirst.
This adds support for setting any day to be the first day of week (by just
clicking the day name in the display); also, if showsOtherMonths is enabled
then dates belonging to adjacent months that are in the current view will be
displayed and the calendar will have a fixed height.
all themes updated.
* test.php: test for calendar.php
* calendar.php: fixed bug (pass numeric values as numbers)
2004-02-01 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar.php: added PHP wrapper
* img.gif: icon updated
* TODO: updated TODO list
2004-01-27 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar.js:
Janusz Piwowarski sent over a patch for IE5 compatibility which is much more
elegant than the atrocities that I had wrote :-D I'm gettin' old.. Thanks Janusz!
* lang/calendar-fi.js: updated
2004-01-15 Mihai Bazon <mihai_bazon@yahoo.com>
* TODO: updated TODO list
* calendar-setup.js: default align changed to "Br"
* doc/reference.tex: changed default value for "align"
* calendar-setup.js: calling onchange event handler, if available
* calendar-setup.js: added "position" option
* simple-1.html: demonstrates "step" option
* calendar-setup.js: added "step" option
* calendar.js: added yearStep config parameter
* calendar.js:
fixed parseDate routine (the NaN bug which occurred when there was a space
after the date and no time)
2004-01-14 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-en.js: added "Time:"
* test-position.html: test for the new position algorithm
* index.html: do not destroy() the calendar
avoid bug in parseDate (%p must be separated by non-word characters)
* menuarrow2.gif: for calendar-blue2.css
* calendar-setup.js: honor "date" parameter if passed
* calendar.js: IE5 support is back
performance improvements in IE6 (mouseover combo boxes)
display "Time:" beside the clock area, if defined in the language file
new positioning algorithm (try to keep the calendar in page)
rewrote parseDate a little cleaner
* lang/calendar-el.js:
updated Greek translation (thanks Alexandros Pappas)
2004-01-13 Mihai Bazon <mihai_bazon@yahoo.com>
* index.html: added style blue2, using utf-8 instead of iso-8859-2
* calendar.js: performance under IE (which sucks, by the way)
* doc/reference.tex: Sunny added to sponsor list
* doc/Calendar.setup.tex: documenting parameter 'electric'
* calendar-blue.css, calendar-blue2.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css:
fixed IE text size problems
2004-01-08 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-pl.js:
Polish translation updated to UTF-8 (thanks to Artur Filipiak)
2004-01-07 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-si.js: updated (David Milost)
* lang/calendar-si.js: Slovenian translation (thanks to David Milost)
2003-12-21 Mihai Bazon <mihai_bazon@yahoo.com>
* TODO: updated TODO list
* lang/calendar-de.js: German translation (thanks to Peter Strotmann)
2003-12-19 Mihai Bazon <mihai_bazon@yahoo.com>
* doc/reference.tex: Thank you, Ian Barrak
2003-12-18 Mihai Bazon <mihai_bazon@yahoo.com>
* doc/reference.tex: fixed documentation bug (thanks Mike)
2003-12-05 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-ko-utf8.js:
UTF8 version of the Korean language (hopefully correct)
* lang/calendar-pl-utf8.js, lang/calendar-pl.js:
updated Polish translation (thanks to Janusz Piwowarski)
2003-12-04 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-fr.js:
French translation updated (thanks to Angiras Rama)
2003-11-22 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-da.js: updated (thanks to Jesper M. Christensen)
2003-11-20 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar-blue2.css, calendar-tas.css:
new styles (thanks to Wendall Mosemann for blue2, Mark Lynch for tas)
* lang/calendar-lt-utf8.js, lang/calendar-lt.js:
Lithuanian translation (thanks to Martynas Majeris)
* lang/calendar-sp.js: updated
2003-11-17 Mihai Bazon <mihai_bazon@yahoo.com>
* TODO: added TODO list
2003-11-14 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-ko.js: Korean translation (thanks to Yourim Yi)
2003-11-12 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-jp.js: small bug fixed (thanks to TAHARA Yusei)
2003-11-10 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-fr.js: translation updated, thanks to Florent Ramiere
* calendar-setup.js:
added new parameter: electric (if false then the field will not get updated on each move)
* index.html: fixed DOCTYPE
2003-11-07 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar-setup.js:
fixed minor problem (maybe we're passing object reference instead of ID for
the flat calendar parent)
2003-11-06 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-fi.js:
added Finnish translation (thanks to Antti Tuppurainen)
2003-11-05 Mihai Bazon <mihai_bazon@yahoo.com>
* release-notes.html: fixed typo
* doc/reference.tex, index.html, calendar.js: 0.9.5
* README: fixed license statement
* release-notes.html: updated release notes (0.9.5)
2003-11-03 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-de.js:
updated German translation (thanks to Gerhard Neiner)
* calendar-setup.js: fixed license statement
* calendar.js: whitespace
* calendar.js: fixed license statement
* calendar.js:
fixed positioning problem when input field is inside scrolled divs
2003-11-01 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-af.js: Afrikaan language (thanks to Derick Olivier)
2003-10-31 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-it.js:
updated IT translation (thanks to Christian Blaser)
* lang/calendar-es.js: updated ES translation, thanks to Raul
2003-10-30 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-hu.js: updated thanks to Istvan Karaszi
* index.html, simple-1.html, simple-2.html, simple-3.html:
switched to utf-8 all encodings
* lang/calendar-sk.js:
added Slovak translation (thanks to Peter Valach)
* lang/calendar-ro.js: switched to utf-8
2003-10-29 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-es.js:
updated translation, thanks to Jose Ma. Martinez Miralles
* doc/reference.tex:
fixed the footnote problem (thanks Dominique de Waleffe for the tip)
* lang/calendar-ro.js: fixed typo
* lang/calendar-sv.js: oops, license should be LGPL
* lang/calendar-sw.js: new swedish translation is calendar-sv.js
* menuarrow.gif, menuarrow.png:
oops, forgot little drop-down menu arrows
* lang/calendar-sv.js: swedish translation thanks to Leonard Norrgard
* index.html: oops, some other minor changes
* index.html, release-notes.html:
latest changes in release-notes and index page for 0.9.4
* doc/reference.tex, calendar.js:
added %s date format (# of seconds since Epoch)
* calendar.js:
A click on TODAY will not close the calendar, even in single-click mode
2003-10-28 Mihai Bazon <mihai_bazon@yahoo.com>
* index.html: previous cal.html
* cal.html: moved to index.html
* README, cal.html, doc/reference.tex, lang/calendar-de.js, lang/calendar-en.js, lang/calendar-ro.js, release-notes.html:
LGPL license, forever.
* doc/Calendar.setup.tex, simple-1.html:
doc updated for the onUpdate parameter to Calendar.setup
2003-10-26 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar.js: fixed bug (correct display of the dropdown menus)
* doc/Calendar.setup.tex, doc/reference.tex, lang/calendar-de.js, lang/calendar-en.js, lang/calendar-ro.js, README, cal.html, calendar-blue.css, calendar-brown.css, calendar-green.css, calendar-setup.js, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css, calendar.js, release-notes.html, simple-1.html, simple-3.html:
lots of changes for the 0.9.4 release (see the release-notes.html)
2003-10-15 Mihai Bazon <mihai_bazon@yahoo.com>
* doc/reference.tex:
documentation updated for 0.9.4 (not yet finished though)
2003-10-07 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar.js, doc/reference.tex, release-notes.html, README, cal.html, calendar-setup.js:
modified project website
2003-10-06 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar-setup.js:
added some properties (onSelect, onClose, date) (thanks altblue)
2003-09-24 Mihai Bazon <mihai_bazon@yahoo.com>
* simple-3.html: dateIsSpecial does not need the "date" argument ;-)
2003-09-24 fsoft <fsoft@mishoo>
* calendar.js, simple-3.html:
added year, month, day to getDateStatus() function
2003-09-24 Mihai Bazon <mihai_bazon@yahoo.com>
* simple-3.html: example on how to use special dates
* calendar-setup.js, calendar.js, simple-1.html:
support for special dates (thanks fabio)
2003-09-17 Mihai Bazon <mihai_bazon@yahoo.com>
* doc/reference.tex: fixed error in section 3.
2003-08-01 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-jp.js: added Japanese translation
2003-07-16 Mihai Bazon <mihai_bazon@yahoo.com>
* simple-1.html: fixed problem with first example [IE,Opera]
2003-07-09 Mihai Bazon <mihai_bazon@yahoo.com>
* doc/Calendar.setup.tex: fixed typo (closing parenthesis)
* lang/calendar-de.js:
added German translation, thanks to Hartwig Weinkauf
2003-07-08 Mihai Bazon <mihai_bazon@yahoo.com>
* cal.html: added link to release-notes
* release-notes.html: 0.9.3 release notes
* make-release.pl:
Script to create distribution archive. It needs some additional packages:
- LaTeX
- tex2page
- jscrunch (JS compressor)
* doc/html/makedoc.sh, doc/html/reference.css, doc/reference.tex, doc/makedoc.sh:
documentation updates...
* calendar.js: added semicolon to make the code "compressible"
2003-07-06 Mihai Bazon <mihai_bazon@yahoo.com>
* doc/reference.tex: spell checked
* doc/reference.tex: [minor] changed credits order
* doc/reference.tex: various improvements and additions
* doc/html/reference.css: minor eye-candy tweaks
2003-07-05 Mihai Bazon <mihai_bazon@yahoo.com>
* doc/html/Calendar.setup.html.tex, doc/html/makedoc.sh, doc/html/reference.css, doc/html/reference.t2p, doc/hyperref.cfg, doc/makedoc.sh, doc/reference.tex, doc/Calendar.setup.tex, doc/Calendar.setup.pdf.tex:
full documentation in LaTeX, for PDF and HTML formats
* simple-2.html:
added demonstration of flat calendar with Calendar.setup
* simple-1.html:
modified some links, added link to documentation, added demonstration of
disableFunc property
* calendar-setup.js: added the ability to create flat calendar too
* cal.html: added links to documentation and simple-[12].html pages
* README: up-to-date...
* calendar-setup.html: removed: the documentation is unified
2003-07-03 Mihai Bazon <mihai_bazon@yahoo.com>
* cal.html: some links to newly added files
* calendar-setup.html, calendar-setup.js, img.gif, simple-1.html:
added some files to simplify calendar creation for non-(JS)-programmers
* lang/calendar-zh.js: added simplified chinese (thanks ATang)
2003-07-02 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar.js: * "yy"-related... [small fix]
* calendar.js:
* #721833 fixed (yy format will understand years prior to 29 as 20xx)
* calendar.js: * added refresh() function
* calendar.js: * fixed bug when in single click mode
* added alignment options to "showAtElement" member function
2003-06-25 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-pt.js:
added portugese translation (thanks Nuno Barreto)
2003-06-24 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar.js:
call user handler when the date was changed using the keyboard
* bugtest-hidden-selects.html:
file to test bug with hidden select-s (thanks Ying Zhang for reporting and for this test file)
* lang/calendar-hr-utf8.js:
added croatian translation in utf8 (thanks Krunoslav Zubrinic)
2003-06-23 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-hu.js: added hungarian translation
* lang/calendar-hr.js:
added croatian translation (thanks to Krunoslav Zubrinic)
2003-06-22 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar.js:
* #723335 fixed (clicking TODAY will not select the today date if the
disabledHandler rejects it)
* cal.html: * new code for to work with fix for bug #703238
* switch to new version
* calendar.js:
* some patches to make code compatible with Opera 7 (well, almost compatible)
* bug #703238 fixed (fix breaks compatibility with older code that uses
calendar in single-click mode)
* bug #703814 fixed
2003-04-09 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-tr.js: added turkish lang file
2003-03-19 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-ru.js: russian translation added
* lang/calendar-no.js: norwegian translation added
2003-03-15 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-no.js: norwegian translation
2003-03-12 Mihai Bazon <mihai_bazon@yahoo.com>
* lang/calendar-pl.js: added polish translation
2003-03-11 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar.js:
bugfix in parseDate (added base to parseInt, thanks Alan!)
2003-03-05 Mihai Bazon <mihai_bazon@yahoo.com>
* calendar.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-cs-win.js, lang/calendar-da.js, lang/calendar-du.js, lang/calendar-el.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fr.js, lang/calendar-it.js, lang/calendar-nl.js, lang/calendar-ro.js, lang/calendar-sp.js, lang/calendar-sw.js:
New file.
* calendar.js, lang/calendar-br.js, lang/calendar-ca.js, lang/calendar-cs-win.js, lang/calendar-da.js, lang/calendar-du.js, lang/calendar-el.js, lang/calendar-en.js, lang/calendar-es.js, lang/calendar-fr.js, lang/calendar-it.js, lang/calendar-nl.js, lang/calendar-ro.js, lang/calendar-sp.js, lang/calendar-sw.js:
moved to CVS at sourceforge.net
release: 0.9.2 + new language packs
* README, cal.html, calendar-blue.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css:
New file.
* README, cal.html, calendar-blue.css, calendar-brown.css, calendar-green.css, calendar-system.css, calendar-win2k-1.css, calendar-win2k-2.css, calendar-win2k-cold-1.css, calendar-win2k-cold-2.css:
moved to CVS at sourceforge.net
release: 0.9.2 + new language packs

33
jscalendar-1.0/README Normal file
View File

@ -0,0 +1,33 @@
The DHTML Calendar
-------------------
Author: Mihai Bazon, <mihai_bazon@yahoo.com>
http://dynarch.com/mishoo/
This program is free software published under the
terms of the GNU Lesser General Public License.
For the entire license text please refer to
http://www.gnu.org/licenses/lgpl.html
Contents
---------
calendar.js -- the main program file
lang/*.js -- internalization files
*.css -- color themes
cal.html -- example usage file
doc/ -- documentation, in PDF and HTML
simple-1.html -- quick setup examples [popup calendars]
simple-2.html -- quick setup example for flat calendar
calendar.php -- PHP wrapper
test.php -- test file for the PHP wrapper
Homepage
---------
For details and latest versions please refer to calendar
homepage, located on my website:
http://dynarch.com/mishoo/calendar.epl

View File

@ -0,0 +1,108 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ro" lang="ro">
<head>
<title>Bug</title>
<link rel="stylesheet" type="text/css" media="all" href="calendar-win2k-1.css" title="win2k-1" />
<!-- import the calendar script -->
<script type="text/javascript" src="calendar.js"></script>
<!-- import the language module -->
<script type="text/javascript" src="lang/calendar-en.js"></script>
<!-- helper script that uses the calendar -->
<script type="text/javascript">
// This function gets called when the end-user clicks on some date.
function selected(cal, date) {
cal.sel.value = date; // just update the date in the input field.
if (cal.sel.id == "sel1" || cal.sel.id == "sel3")
// if we add this call we close the calendar on single-click.
// just to exemplify both cases, we are using this only for the 1st
// and the 3rd field, while 2nd and 4th will still require double-click.
cal.callCloseHandler();
}
// And this gets called when the end-user clicks on the _selected_ date,
// or clicks on the "Close" button. It just hides the calendar without
// destroying it.
function closeHandler(cal) {
cal.hide(); // hide the calendar
}
// This function shows the calendar under the element having the given id.
// It takes care of catching "mousedown" signals on document and hiding the
// calendar if the click was outside.
function showCalendar(id, format) {
var el = document.getElementById(id);
if (calendar != null) {
// we already have some calendar created
calendar.hide(); // so we hide it first.
} else {
// first-time call, create the calendar.
var cal = new Calendar(false, null, selected, closeHandler);
// uncomment the following line to hide the week numbers
// cal.weekNumbers = false;
calendar = cal; // remember it in the global var
cal.setRange(1900, 2070); // min/max year allowed.
cal.create();
}
calendar.setDateFormat(format); // set the specified date format
calendar.parseDate(el.value); // try to parse the text in field
calendar.sel = el; // inform it what input field we use
calendar.showAtElement(el); // show the calendar below it
return false;
}
var MINUTE = 60 * 1000;
var HOUR = 60 * MINUTE;
var DAY = 24 * HOUR;
var WEEK = 7 * DAY;
// If this handler returns true then the "date" given as
// parameter will be disabled. In this example we enable
// only days within a range of 10 days from the current
// date.
// You can use the functions date.getFullYear() -- returns the year
// as 4 digit number, date.getMonth() -- returns the month as 0..11,
// and date.getDate() -- returns the date of the month as 1..31, to
// make heavy calculations here. However, beware that this function
// should be very fast, as it is called for each day in a month when
// the calendar is (re)constructed.
function isDisabled(date) {
var today = new Date();
return (Math.abs(date.getTime() - today.getTime()) / DAY) > 10;
}
</script>
</head>
<body>
<form>
<b>Date:</b>
<br>
<input type="text" name="date1" id="sel1" size="30">
<input type="button" value="..." onclick="return showCalendar('sel1', 'y-m-d');">
<p>
<br>
<br><b>Visible &lt;select&gt;, hides and unhides as expected</b>
<br>
<select name="foo" multiple>
<option value="1">can use the functions date.getFullYear() -- returns</option>
<option value="2">4 digit number, date.getMonth() -- returns the month</option>
<option value="3">heavy calculations here. However, beware that this</option>
</select>
<p>
<br><b>Hidden &lt;select&gt;, it should stay hidden (but doesn't)</b>
<br>
<select name="foo2" multiple style="visibility: hidden">
<option value="1">this should</option>
<option value="2">remain hidden right?</option>
</select>
<p>
<br><b>Hidden textbox below, it stays hidden as expected</b>
<br>
<input type="text" name="foo3" value="this stays hidden just fine" style="visibility: hidden">
</form>
</body></html>

View File

@ -0,0 +1,232 @@
/* The main calendar widget. DIV containing a table. */
div.calendar { position: relative; }
.calendar, .calendar table {
border: 1px solid #556;
font-size: 11px;
color: #000;
cursor: default;
background: #eef;
font-family: tahoma,verdana,sans-serif;
}
/* Header part -- contains navigation buttons and day names. */
.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */
text-align: center; /* They are the navigation buttons */
padding: 2px; /* Make the buttons seem like they're pressing */
}
.calendar .nav {
background: #778 url(menuarrow.gif) no-repeat 100% 100%;
}
.calendar thead .title { /* This holds the current "month, year" */
font-weight: bold; /* Pressing it will take you to the current date */
text-align: center;
background: #fff;
color: #000;
padding: 2px;
}
.calendar thead .headrow { /* Row <TR> containing navigation buttons */
background: #778;
color: #fff;
}
.calendar thead .daynames { /* Row <TR> containing the day names */
background: #bdf;
}
.calendar thead .name { /* Cells <TD> containing the day names */
border-bottom: 1px solid #556;
padding: 2px;
text-align: center;
color: #000;
}
.calendar thead .weekend { /* How a weekend day name shows in header */
color: #a66;
}
.calendar thead .hilite { /* How do the buttons in header appear when hover */
background-color: #aaf;
color: #000;
border: 1px solid #04f;
padding: 1px;
}
.calendar thead .active { /* Active (pressed) buttons in header */
background-color: #77c;
padding: 2px 0px 0px 2px;
}
/* The body part -- contains all the days in month. */
.calendar tbody .day { /* Cells <TD> containing month days dates */
width: 2em;
color: #456;
text-align: right;
padding: 2px 4px 2px 2px;
}
.calendar tbody .day.othermonth {
font-size: 80%;
color: #bbb;
}
.calendar tbody .day.othermonth.oweekend {
color: #fbb;
}
.calendar table .wn {
padding: 2px 3px 2px 2px;
border-right: 1px solid #000;
background: #bdf;
}
.calendar tbody .rowhilite td {
background: #def;
}
.calendar tbody .rowhilite td.wn {
background: #eef;
}
.calendar tbody td.hilite { /* Hovered cells <TD> */
background: #def;
padding: 1px 3px 1px 1px;
border: 1px solid #bbb;
}
.calendar tbody td.active { /* Active (pressed) cells <TD> */
background: #cde;
padding: 2px 2px 0px 2px;
}
.calendar tbody td.selected { /* Cell showing today date */
font-weight: bold;
border: 1px solid #000;
padding: 1px 3px 1px 1px;
background: #fff;
color: #000;
}
.calendar tbody td.weekend { /* Cells showing weekend days */
color: #a66;
}
.calendar tbody td.today { /* Cell showing selected date */
font-weight: bold;
color: #00f;
}
.calendar tbody .disabled { color: #999; }
.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */
visibility: hidden;
}
.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */
display: none;
}
/* The footer part -- status bar and "Close" button */
.calendar tfoot .footrow { /* The <TR> in footer (only one right now) */
text-align: center;
background: #556;
color: #fff;
}
.calendar tfoot .ttip { /* Tooltip (status bar) cell <TD> */
background: #fff;
color: #445;
border-top: 1px solid #556;
padding: 1px;
}
.calendar tfoot .hilite { /* Hover style for buttons in footer */
background: #aaf;
border: 1px solid #04f;
color: #000;
padding: 1px;
}
.calendar tfoot .active { /* Active (pressed) style for buttons in footer */
background: #77c;
padding: 2px 0px 0px 2px;
}
/* Combo boxes (menus that display months/years for direct selection) */
.calendar .combo {
position: absolute;
display: none;
top: 0px;
left: 0px;
width: 4em;
cursor: default;
border: 1px solid #655;
background: #def;
color: #000;
font-size: 90%;
z-index: 100;
}
.calendar .combo .label,
.calendar .combo .label-IEfix {
text-align: center;
padding: 1px;
}
.calendar .combo .label-IEfix {
width: 4em;
}
.calendar .combo .hilite {
background: #acf;
}
.calendar .combo .active {
border-top: 1px solid #46a;
border-bottom: 1px solid #46a;
background: #eef;
font-weight: bold;
}
.calendar td.time {
border-top: 1px solid #000;
padding: 1px 0px;
text-align: center;
background-color: #f4f0e8;
}
.calendar td.time .hour,
.calendar td.time .minute,
.calendar td.time .ampm {
padding: 0px 3px 0px 4px;
border: 1px solid #889;
font-weight: bold;
background-color: #fff;
}
.calendar td.time .ampm {
text-align: center;
}
.calendar td.time .colon {
padding: 0px 2px 0px 3px;
font-weight: bold;
}
.calendar td.time span.hilite {
border-color: #000;
background-color: #667;
color: #fff;
}
.calendar td.time span.active {
border-color: #f00;
background-color: #000;
color: #0f0;
}

View File

@ -0,0 +1,236 @@
/* The main calendar widget. DIV containing a table. */
div.calendar { position: relative; }
.calendar, .calendar table {
border: 1px solid #206A9B;
font-size: 11px;
color: #000;
cursor: default;
background: #F1F8FC;
font-family: tahoma,verdana,sans-serif;
}
/* Header part -- contains navigation buttons and day names. */
.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */
text-align: center; /* They are the navigation buttons */
padding: 2px; /* Make the buttons seem like they're pressing */
}
.calendar .nav {
background: #007ED1 url(menuarrow2.gif) no-repeat 100% 100%;
}
.calendar thead .title { /* This holds the current "month, year" */
font-weight: bold; /* Pressing it will take you to the current date */
text-align: center;
background: #000;
color: #fff;
padding: 2px;
}
.calendar thead tr { /* Row <TR> containing navigation buttons */
background: #007ED1;
color: #fff;
}
.calendar thead .daynames { /* Row <TR> containing the day names */
background: #C7E1F3;
}
.calendar thead .name { /* Cells <TD> containing the day names */
border-bottom: 1px solid #206A9B;
padding: 2px;
text-align: center;
color: #000;
}
.calendar thead .weekend { /* How a weekend day name shows in header */
color: #a66;
}
.calendar thead .hilite { /* How do the buttons in header appear when hover */
background-color: #34ABFA;
color: #000;
border: 1px solid #016DC5;
padding: 1px;
}
.calendar thead .active { /* Active (pressed) buttons in header */
background-color: #006AA9;
border: 1px solid #008AFF;
padding: 2px 0px 0px 2px;
}
/* The body part -- contains all the days in month. */
.calendar tbody .day { /* Cells <TD> containing month days dates */
width: 2em;
color: #456;
text-align: right;
padding: 2px 4px 2px 2px;
}
.calendar tbody .day.othermonth {
font-size: 80%;
color: #bbb;
}
.calendar tbody .day.othermonth.oweekend {
color: #fbb;
}
.calendar table .wn {
padding: 2px 3px 2px 2px;
border-right: 1px solid #000;
background: #C7E1F3;
}
.calendar tbody .rowhilite td {
background: #def;
}
.calendar tbody .rowhilite td.wn {
background: #F1F8FC;
}
.calendar tbody td.hilite { /* Hovered cells <TD> */
background: #def;
padding: 1px 3px 1px 1px;
border: 1px solid #8FC4E8;
}
.calendar tbody td.active { /* Active (pressed) cells <TD> */
background: #cde;
padding: 2px 2px 0px 2px;
}
.calendar tbody td.selected { /* Cell showing today date */
font-weight: bold;
border: 1px solid #000;
padding: 1px 3px 1px 1px;
background: #fff;
color: #000;
}
.calendar tbody td.weekend { /* Cells showing weekend days */
color: #a66;
}
.calendar tbody td.today { /* Cell showing selected date */
font-weight: bold;
color: #D50000;
}
.calendar tbody .disabled { color: #999; }
.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */
visibility: hidden;
}
.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */
display: none;
}
/* The footer part -- status bar and "Close" button */
.calendar tfoot .footrow { /* The <TR> in footer (only one right now) */
text-align: center;
background: #206A9B;
color: #fff;
}
.calendar tfoot .ttip { /* Tooltip (status bar) cell <TD> */
background: #000;
color: #fff;
border-top: 1px solid #206A9B;
padding: 1px;
}
.calendar tfoot .hilite { /* Hover style for buttons in footer */
background: #B8DAF0;
border: 1px solid #178AEB;
color: #000;
padding: 1px;
}
.calendar tfoot .active { /* Active (pressed) style for buttons in footer */
background: #006AA9;
padding: 2px 0px 0px 2px;
}
/* Combo boxes (menus that display months/years for direct selection) */
.calendar .combo {
position: absolute;
display: none;
top: 0px;
left: 0px;
width: 4em;
cursor: default;
border: 1px solid #655;
background: #def;
color: #000;
font-size: 90%;
z-index: 100;
}
.calendar .combo .label,
.calendar .combo .label-IEfix {
text-align: center;
padding: 1px;
}
.calendar .combo .label-IEfix {
width: 4em;
}
.calendar .combo .hilite {
background: #34ABFA;
border-top: 1px solid #46a;
border-bottom: 1px solid #46a;
font-weight: bold;
}
.calendar .combo .active {
border-top: 1px solid #46a;
border-bottom: 1px solid #46a;
background: #F1F8FC;
font-weight: bold;
}
.calendar td.time {
border-top: 1px solid #000;
padding: 1px 0px;
text-align: center;
background-color: #E3F0F9;
}
.calendar td.time .hour,
.calendar td.time .minute,
.calendar td.time .ampm {
padding: 0px 3px 0px 4px;
border: 1px solid #889;
font-weight: bold;
background-color: #F1F8FC;
}
.calendar td.time .ampm {
text-align: center;
}
.calendar td.time .colon {
padding: 0px 2px 0px 3px;
font-weight: bold;
}
.calendar td.time span.hilite {
border-color: #000;
background-color: #267DB7;
color: #fff;
}
.calendar td.time span.active {
border-color: red;
background-color: #000;
color: #A5FF00;
}

View File

@ -0,0 +1,225 @@
/* The main calendar widget. DIV containing a table. */
div.calendar { position: relative; }
.calendar, .calendar table {
border: 1px solid #655;
font-size: 11px;
color: #000;
cursor: default;
background: #ffd;
font-family: tahoma,verdana,sans-serif;
}
/* Header part -- contains navigation buttons and day names. */
.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */
text-align: center; /* They are the navigation buttons */
padding: 2px; /* Make the buttons seem like they're pressing */
}
.calendar .nav {
background: #edc url(menuarrow.gif) no-repeat 100% 100%;
}
.calendar thead .title { /* This holds the current "month, year" */
font-weight: bold; /* Pressing it will take you to the current date */
text-align: center;
background: #654;
color: #fed;
padding: 2px;
}
.calendar thead .headrow { /* Row <TR> containing navigation buttons */
background: #edc;
color: #000;
}
.calendar thead .name { /* Cells <TD> containing the day names */
border-bottom: 1px solid #655;
padding: 2px;
text-align: center;
color: #000;
}
.calendar thead .weekend { /* How a weekend day name shows in header */
color: #f00;
}
.calendar thead .hilite { /* How do the buttons in header appear when hover */
background-color: #faa;
color: #000;
border: 1px solid #f40;
padding: 1px;
}
.calendar thead .active { /* Active (pressed) buttons in header */
background-color: #c77;
padding: 2px 0px 0px 2px;
}
.calendar thead .daynames { /* Row <TR> containing the day names */
background: #fed;
}
/* The body part -- contains all the days in month. */
.calendar tbody .day { /* Cells <TD> containing month days dates */
width: 2em;
text-align: right;
padding: 2px 4px 2px 2px;
}
.calendar tbody .day.othermonth {
font-size: 80%;
color: #bbb;
}
.calendar tbody .day.othermonth.oweekend {
color: #fbb;
}
.calendar table .wn {
padding: 2px 3px 2px 2px;
border-right: 1px solid #000;
background: #fed;
}
.calendar tbody .rowhilite td {
background: #ddf;
}
.calendar tbody .rowhilite td.wn {
background: #efe;
}
.calendar tbody td.hilite { /* Hovered cells <TD> */
background: #ffe;
padding: 1px 3px 1px 1px;
border: 1px solid #bbb;
}
.calendar tbody td.active { /* Active (pressed) cells <TD> */
background: #ddc;
padding: 2px 2px 0px 2px;
}
.calendar tbody td.selected { /* Cell showing today date */
font-weight: bold;
border: 1px solid #000;
padding: 1px 3px 1px 1px;
background: #fea;
}
.calendar tbody td.weekend { /* Cells showing weekend days */
color: #f00;
}
.calendar tbody td.today { font-weight: bold; }
.calendar tbody .disabled { color: #999; }
.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */
visibility: hidden;
}
.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */
display: none;
}
/* The footer part -- status bar and "Close" button */
.calendar tfoot .footrow { /* The <TR> in footer (only one right now) */
text-align: center;
background: #988;
color: #000;
}
.calendar tfoot .ttip { /* Tooltip (status bar) cell <TD> */
border-top: 1px solid #655;
background: #dcb;
color: #840;
}
.calendar tfoot .hilite { /* Hover style for buttons in footer */
background: #faa;
border: 1px solid #f40;
padding: 1px;
}
.calendar tfoot .active { /* Active (pressed) style for buttons in footer */
background: #c77;
padding: 2px 0px 0px 2px;
}
/* Combo boxes (menus that display months/years for direct selection) */
.calendar .combo {
position: absolute;
display: none;
top: 0px;
left: 0px;
width: 4em;
cursor: default;
border: 1px solid #655;
background: #ffe;
color: #000;
font-size: 90%;
z-index: 100;
}
.calendar .combo .label,
.calendar .combo .label-IEfix {
text-align: center;
padding: 1px;
}
.calendar .combo .label-IEfix {
width: 4em;
}
.calendar .combo .hilite {
background: #fc8;
}
.calendar .combo .active {
border-top: 1px solid #a64;
border-bottom: 1px solid #a64;
background: #fee;
font-weight: bold;
}
.calendar td.time {
border-top: 1px solid #a88;
padding: 1px 0px;
text-align: center;
background-color: #fed;
}
.calendar td.time .hour,
.calendar td.time .minute,
.calendar td.time .ampm {
padding: 0px 3px 0px 4px;
border: 1px solid #988;
font-weight: bold;
background-color: #fff;
}
.calendar td.time .ampm {
text-align: center;
}
.calendar td.time .colon {
padding: 0px 2px 0px 3px;
font-weight: bold;
}
.calendar td.time span.hilite {
border-color: #000;
background-color: #866;
color: #fff;
}
.calendar td.time span.active {
border-color: #f00;
background-color: #000;
color: #0f0;
}

View File

@ -0,0 +1,229 @@
/* The main calendar widget. DIV containing a table. */
div.calendar { position: relative; }
.calendar, .calendar table {
border: 1px solid #565;
font-size: 11px;
color: #000;
cursor: default;
background: #efe;
font-family: tahoma,verdana,sans-serif;
}
/* Header part -- contains navigation buttons and day names. */
.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */
text-align: center; /* They are the navigation buttons */
padding: 2px; /* Make the buttons seem like they're pressing */
background: #676;
color: #fff;
font-size: 90%;
}
.calendar .nav {
background: #676 url(menuarrow.gif) no-repeat 100% 100%;
}
.calendar thead .title { /* This holds the current "month, year" */
font-weight: bold; /* Pressing it will take you to the current date */
text-align: center;
padding: 2px;
background: #250;
color: #efa;
}
.calendar thead .headrow { /* Row <TR> containing navigation buttons */
}
.calendar thead .name { /* Cells <TD> containing the day names */
border-bottom: 1px solid #565;
padding: 2px;
text-align: center;
color: #000;
}
.calendar thead .weekend { /* How a weekend day name shows in header */
color: #a66;
}
.calendar thead .hilite { /* How do the buttons in header appear when hover */
background-color: #afa;
color: #000;
border: 1px solid #084;
padding: 1px;
}
.calendar thead .active { /* Active (pressed) buttons in header */
background-color: #7c7;
padding: 2px 0px 0px 2px;
}
.calendar thead .daynames { /* Row <TR> containing the day names */
background: #dfb;
}
/* The body part -- contains all the days in month. */
.calendar tbody .day { /* Cells <TD> containing month days dates */
width: 2em;
color: #564;
text-align: right;
padding: 2px 4px 2px 2px;
}
.calendar tbody .day.othermonth {
font-size: 80%;
color: #bbb;
}
.calendar tbody .day.othermonth.oweekend {
color: #fbb;
}
.calendar table .wn {
padding: 2px 3px 2px 2px;
border-right: 1px solid #8a8;
background: #dfb;
}
.calendar tbody .rowhilite td {
background: #dfd;
}
.calendar tbody .rowhilite td.wn {
background: #efe;
}
.calendar tbody td.hilite { /* Hovered cells <TD> */
background: #efd;
padding: 1px 3px 1px 1px;
border: 1px solid #bbb;
}
.calendar tbody td.active { /* Active (pressed) cells <TD> */
background: #dec;
padding: 2px 2px 0px 2px;
}
.calendar tbody td.selected { /* Cell showing today date */
font-weight: bold;
border: 1px solid #000;
padding: 1px 3px 1px 1px;
background: #f8fff8;
color: #000;
}
.calendar tbody td.weekend { /* Cells showing weekend days */
color: #a66;
}
.calendar tbody td.today { font-weight: bold; color: #0a0; }
.calendar tbody .disabled { color: #999; }
.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */
visibility: hidden;
}
.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */
display: none;
}
/* The footer part -- status bar and "Close" button */
.calendar tfoot .footrow { /* The <TR> in footer (only one right now) */
text-align: center;
background: #565;
color: #fff;
}
.calendar tfoot .ttip { /* Tooltip (status bar) cell <TD> */
padding: 2px;
background: #250;
color: #efa;
}
.calendar tfoot .hilite { /* Hover style for buttons in footer */
background: #afa;
border: 1px solid #084;
color: #000;
padding: 1px;
}
.calendar tfoot .active { /* Active (pressed) style for buttons in footer */
background: #7c7;
padding: 2px 0px 0px 2px;
}
/* Combo boxes (menus that display months/years for direct selection) */
.calendar .combo {
position: absolute;
display: none;
top: 0px;
left: 0px;
width: 4em;
cursor: default;
border: 1px solid #565;
background: #efd;
color: #000;
font-size: 90%;
z-index: 100;
}
.calendar .combo .label,
.calendar .combo .label-IEfix {
text-align: center;
padding: 1px;
}
.calendar .combo .label-IEfix {
width: 4em;
}
.calendar .combo .hilite {
background: #af8;
}
.calendar .combo .active {
border-top: 1px solid #6a4;
border-bottom: 1px solid #6a4;
background: #efe;
font-weight: bold;
}
.calendar td.time {
border-top: 1px solid #8a8;
padding: 1px 0px;
text-align: center;
background-color: #dfb;
}
.calendar td.time .hour,
.calendar td.time .minute,
.calendar td.time .ampm {
padding: 0px 3px 0px 4px;
border: 1px solid #898;
font-weight: bold;
background-color: #fff;
}
.calendar td.time .ampm {
text-align: center;
}
.calendar td.time .colon {
padding: 0px 2px 0px 3px;
font-weight: bold;
}
.calendar td.time span.hilite {
border-color: #000;
background-color: #686;
color: #fff;
}
.calendar td.time span.active {
border-color: #f00;
background-color: #000;
color: #0f0;
}

View File

@ -0,0 +1,200 @@
/* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/
* ---------------------------------------------------------------------------
*
* The DHTML Calendar
*
* Details and latest version at:
* http://dynarch.com/mishoo/calendar.epl
*
* This script is distributed under the GNU Lesser General Public License.
* Read the entire license text here: http://www.gnu.org/licenses/lgpl.html
*
* This file defines helper functions for setting up the calendar. They are
* intended to help non-programmers get a working calendar on their site
* quickly. This script should not be seen as part of the calendar. It just
* shows you what one can do with the calendar, while in the same time
* providing a quick and simple method for setting it up. If you need
* exhaustive customization of the calendar creation process feel free to
* modify this code to suit your needs (this is recommended and much better
* than modifying calendar.js itself).
*/
// $Id: calendar-setup.js,v 1.25 2005/03/07 09:51:33 mishoo Exp $
/**
* This function "patches" an input field (or other element) to use a calendar
* widget for date selection.
*
* The "params" is a single object that can have the following properties:
*
* prop. name | description
* -------------------------------------------------------------------------------------------------
* inputField | the ID of an input field to store the date
* displayArea | the ID of a DIV or other element to show the date
* button | ID of a button or other element that will trigger the calendar
* eventName | event that will trigger the calendar, without the "on" prefix (default: "click")
* ifFormat | date format that will be stored in the input field
* daFormat | the date format that will be used to display the date in displayArea
* singleClick | (true/false) wether the calendar is in single click mode or not (default: true)
* firstDay | numeric: 0 to 6. "0" means display Sunday first, "1" means display Monday first, etc.
* align | alignment (default: "Br"); if you don't know what's this see the calendar documentation
* range | array with 2 elements. Default: [1900, 2999] -- the range of years available
* weekNumbers | (true/false) if it's true (default) the calendar will display week numbers
* flat | null or element ID; if not null the calendar will be a flat calendar having the parent with the given ID
* flatCallback | function that receives a JS Date object and returns an URL to point the browser to (for flat calendar)
* disableFunc | function that receives a JS Date object and should return true if that date has to be disabled in the calendar
* onSelect | function that gets called when a date is selected. You don't _have_ to supply this (the default is generally okay)
* onClose | function that gets called when the calendar is closed. [default]
* onUpdate | function that gets called after the date is updated in the input field. Receives a reference to the calendar.
* date | the date that the calendar will be initially displayed to
* showsTime | default: false; if true the calendar will include a time selector
* timeFormat | the time format; can be "12" or "24", default is "12"
* electric | if true (default) then given fields/date areas are updated for each move; otherwise they're updated only on close
* step | configures the step of the years in drop-down boxes; default: 2
* position | configures the calendar absolute position; default: null
* cache | if "true" (but default: "false") it will reuse the same calendar object, where possible
* showOthers | if "true" (but default: "false") it will show days from other months too
*
* None of them is required, they all have default values. However, if you
* pass none of "inputField", "displayArea" or "button" you'll get a warning
* saying "nothing to setup".
*/
Calendar.setup = function (params) {
function param_default(pname, def) { if (typeof params[pname] == "undefined") { params[pname] = def; } };
param_default("inputField", null);
param_default("displayArea", null);
param_default("button", null);
param_default("eventName", "click");
param_default("ifFormat", "%Y/%m/%d");
param_default("daFormat", "%Y/%m/%d");
param_default("singleClick", true);
param_default("disableFunc", null);
param_default("dateStatusFunc", params["disableFunc"]); // takes precedence if both are defined
param_default("dateText", null);
param_default("firstDay", null);
param_default("align", "Br");
param_default("range", [1900, 2999]);
param_default("weekNumbers", true);
param_default("flat", null);
param_default("flatCallback", null);
param_default("onSelect", null);
param_default("onClose", null);
param_default("onUpdate", null);
param_default("date", null);
param_default("showsTime", false);
param_default("timeFormat", "24");
param_default("electric", true);
param_default("step", 2);
param_default("position", null);
param_default("cache", false);
param_default("showOthers", false);
param_default("multiple", null);
var tmp = ["inputField", "displayArea", "button"];
for (var i in tmp) {
if (typeof params[tmp[i]] == "string") {
params[tmp[i]] = document.getElementById(params[tmp[i]]);
}
}
if (!(params.flat || params.multiple || params.inputField || params.displayArea || params.button)) {
alert("Calendar.setup:\n Nothing to setup (no fields found). Please check your code");
return false;
}
function onSelect(cal) {
var p = cal.params;
var update = (cal.dateClicked || p.electric);
if (update && p.inputField) {
p.inputField.value = cal.date.print(p.ifFormat);
if (typeof p.inputField.onchange == "function")
p.inputField.onchange();
}
if (update && p.displayArea)
p.displayArea.innerHTML = cal.date.print(p.daFormat);
if (update && typeof p.onUpdate == "function")
p.onUpdate(cal);
if (update && p.flat) {
if (typeof p.flatCallback == "function")
p.flatCallback(cal);
}
if (update && p.singleClick && cal.dateClicked)
cal.callCloseHandler();
};
if (params.flat != null) {
if (typeof params.flat == "string")
params.flat = document.getElementById(params.flat);
if (!params.flat) {
alert("Calendar.setup:\n Flat specified but can't find parent.");
return false;
}
var cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect);
cal.showsOtherMonths = params.showOthers;
cal.showsTime = params.showsTime;
cal.time24 = (params.timeFormat == "24");
cal.params = params;
cal.weekNumbers = params.weekNumbers;
cal.setRange(params.range[0], params.range[1]);
cal.setDateStatusHandler(params.dateStatusFunc);
cal.getDateText = params.dateText;
if (params.ifFormat) {
cal.setDateFormat(params.ifFormat);
}
if (params.inputField && typeof params.inputField.value == "string") {
cal.parseDate(params.inputField.value);
}
cal.create(params.flat);
cal.show();
return false;
}
var triggerEl = params.button || params.displayArea || params.inputField;
triggerEl["on" + params.eventName] = function() {
var dateEl = params.inputField || params.displayArea;
var dateFmt = params.inputField ? params.ifFormat : params.daFormat;
var mustCreate = false;
var cal = window.calendar;
if (dateEl)
params.date = Date.parseDate(dateEl.value || dateEl.innerHTML, dateFmt);
if (!(cal && params.cache)) {
window.calendar = cal = new Calendar(params.firstDay,
params.date,
params.onSelect || onSelect,
params.onClose || function(cal) { cal.hide(); });
cal.showsTime = params.showsTime;
cal.time24 = (params.timeFormat == "24");
cal.weekNumbers = params.weekNumbers;
mustCreate = true;
} else {
if (params.date)
cal.setDate(params.date);
cal.hide();
}
if (params.multiple) {
cal.multiple = {};
for (var i = params.multiple.length; --i >= 0;) {
var d = params.multiple[i];
var ds = d.print("%Y%m%d");
cal.multiple[ds] = d;
}
}
cal.showsOtherMonths = params.showOthers;
cal.yearStep = params.step;
cal.setRange(params.range[0], params.range[1]);
cal.params = params;
cal.setDateStatusHandler(params.dateStatusFunc);
cal.getDateText = params.dateText;
cal.setDateFormat(dateFmt);
if (mustCreate)
cal.create();
cal.refresh();
if (!params.position)
cal.showAtElement(params.button || params.displayArea || params.inputField, params.align);
else
cal.showAt(params.position[0], params.position[1]);
return false;
};
return cal;
};

View File

@ -0,0 +1,21 @@
/* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/
* ---------------------------------------------------------------------------
*
* The DHTML Calendar
*
* Details and latest version at:
* http://dynarch.com/mishoo/calendar.epl
*
* This script is distributed under the GNU Lesser General Public License.
* Read the entire license text here: http://www.gnu.org/licenses/lgpl.html
*
* This file defines helper functions for setting up the calendar. They are
* intended to help non-programmers get a working calendar on their site
* quickly. This script should not be seen as part of the calendar. It just
* shows you what one can do with the calendar, while in the same time
* providing a quick and simple method for setting it up. If you need
* exhaustive customization of the calendar creation process feel free to
* modify this code to suit your needs (this is recommended and much better
* than modifying calendar.js itself).
*/
Calendar.setup=function(params){function param_default(pname,def){if(typeof params[pname]=="undefined"){params[pname]=def;}};param_default("inputField",null);param_default("displayArea",null);param_default("button",null);param_default("eventName","click");param_default("ifFormat","%Y/%m/%d");param_default("daFormat","%Y/%m/%d");param_default("singleClick",true);param_default("disableFunc",null);param_default("dateStatusFunc",params["disableFunc"]);param_default("dateText",null);param_default("firstDay",null);param_default("align","Br");param_default("range",[1900,2999]);param_default("weekNumbers",true);param_default("flat",null);param_default("flatCallback",null);param_default("onSelect",null);param_default("onClose",null);param_default("onUpdate",null);param_default("date",null);param_default("showsTime",false);param_default("timeFormat","24");param_default("electric",true);param_default("step",2);param_default("position",null);param_default("cache",false);param_default("showOthers",false);param_default("multiple",null);var tmp=["inputField","displayArea","button"];for(var i in tmp){if(typeof params[tmp[i]]=="string"){params[tmp[i]]=document.getElementById(params[tmp[i]]);}}if(!(params.flat||params.multiple||params.inputField||params.displayArea||params.button)){alert("Calendar.setup:\n Nothing to setup (no fields found). Please check your code");return false;}function onSelect(cal){var p=cal.params;var update=(cal.dateClicked||p.electric);if(update&&p.inputField){p.inputField.value=cal.date.print(p.ifFormat);if(typeof p.inputField.onchange=="function")p.inputField.onchange();}if(update&&p.displayArea)p.displayArea.innerHTML=cal.date.print(p.daFormat);if(update&&typeof p.onUpdate=="function")p.onUpdate(cal);if(update&&p.flat){if(typeof p.flatCallback=="function")p.flatCallback(cal);}if(update&&p.singleClick&&cal.dateClicked)cal.callCloseHandler();};if(params.flat!=null){if(typeof params.flat=="string")params.flat=document.getElementById(params.flat);if(!params.flat){alert("Calendar.setup:\n Flat specified but can't find parent.");return false;}var cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect);cal.showsOtherMonths=params.showOthers;cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.params=params;cal.weekNumbers=params.weekNumbers;cal.setRange(params.range[0],params.range[1]);cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;if(params.ifFormat){cal.setDateFormat(params.ifFormat);}if(params.inputField&&typeof params.inputField.value=="string"){cal.parseDate(params.inputField.value);}cal.create(params.flat);cal.show();return false;}var triggerEl=params.button||params.displayArea||params.inputField;triggerEl["on"+params.eventName]=function(){var dateEl=params.inputField||params.displayArea;var dateFmt=params.inputField?params.ifFormat:params.daFormat;var mustCreate=false;var cal=window.calendar;if(dateEl)params.date=Date.parseDate(dateEl.value||dateEl.innerHTML,dateFmt);if(!(cal&&params.cache)){window.calendar=cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect,params.onClose||function(cal){cal.hide();});cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.weekNumbers=params.weekNumbers;mustCreate=true;}else{if(params.date)cal.setDate(params.date);cal.hide();}if(params.multiple){cal.multiple={};for(var i=params.multiple.length;--i>=0;){var d=params.multiple[i];var ds=d.print("%Y%m%d");cal.multiple[ds]=d;}}cal.showsOtherMonths=params.showOthers;cal.yearStep=params.step;cal.setRange(params.range[0],params.range[1]);cal.params=params;cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;cal.setDateFormat(dateFmt);if(mustCreate)cal.create();cal.refresh();if(!params.position)cal.showAtElement(params.button||params.displayArea||params.inputField,params.align);else cal.showAt(params.position[0],params.position[1]);return false;};return cal;};

View File

@ -0,0 +1,251 @@
/* The main calendar widget. DIV containing a table. */
.calendar {
position: relative;
display: none;
border: 1px solid;
border-color: #fff #000 #000 #fff;
font-size: 11px;
cursor: default;
background: Window;
color: WindowText;
font-family: tahoma,verdana,sans-serif;
}
.calendar table {
border: 1px solid;
border-color: #fff #000 #000 #fff;
font-size: 11px;
cursor: default;
background: Window;
color: WindowText;
font-family: tahoma,verdana,sans-serif;
}
/* Header part -- contains navigation buttons and day names. */
.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */
text-align: center;
padding: 1px;
border: 1px solid;
border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
background: ButtonFace;
}
.calendar .nav {
background: ButtonFace url(menuarrow.gif) no-repeat 100% 100%;
}
.calendar thead .title { /* This holds the current "month, year" */
font-weight: bold;
padding: 1px;
border: 1px solid #000;
background: ActiveCaption;
color: CaptionText;
text-align: center;
}
.calendar thead .headrow { /* Row <TR> containing navigation buttons */
}
.calendar thead .daynames { /* Row <TR> containing the day names */
}
.calendar thead .name { /* Cells <TD> containing the day names */
border-bottom: 1px solid ButtonShadow;
padding: 2px;
text-align: center;
background: ButtonFace;
color: ButtonText;
}
.calendar thead .weekend { /* How a weekend day name shows in header */
color: #f00;
}
.calendar thead .hilite { /* How do the buttons in header appear when hover */
border: 2px solid;
padding: 0px;
border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
}
.calendar thead .active { /* Active (pressed) buttons in header */
border-width: 1px;
padding: 2px 0px 0px 2px;
border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
}
/* The body part -- contains all the days in month. */
.calendar tbody .day { /* Cells <TD> containing month days dates */
width: 2em;
text-align: right;
padding: 2px 4px 2px 2px;
}
.calendar tbody .day.othermonth {
font-size: 80%;
color: #aaa;
}
.calendar tbody .day.othermonth.oweekend {
color: #faa;
}
.calendar table .wn {
padding: 2px 3px 2px 2px;
border-right: 1px solid ButtonShadow;
background: ButtonFace;
color: ButtonText;
}
.calendar tbody .rowhilite td {
background: Highlight;
color: HighlightText;
}
.calendar tbody td.hilite { /* Hovered cells <TD> */
padding: 1px 3px 1px 1px;
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
}
.calendar tbody td.active { /* Active (pressed) cells <TD> */
padding: 2px 2px 0px 2px;
border: 1px solid;
border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
}
.calendar tbody td.selected { /* Cell showing selected date */
font-weight: bold;
border: 1px solid;
border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
padding: 2px 2px 0px 2px;
background: ButtonFace;
color: ButtonText;
}
.calendar tbody td.weekend { /* Cells showing weekend days */
color: #f00;
}
.calendar tbody td.today { /* Cell showing today date */
font-weight: bold;
color: #00f;
}
.calendar tbody td.disabled { color: GrayText; }
.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */
visibility: hidden;
}
.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */
display: none;
}
/* The footer part -- status bar and "Close" button */
.calendar tfoot .footrow { /* The <TR> in footer (only one right now) */
}
.calendar tfoot .ttip { /* Tooltip (status bar) cell <TD> */
background: ButtonFace;
padding: 1px;
border: 1px solid;
border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
color: ButtonText;
text-align: center;
}
.calendar tfoot .hilite { /* Hover style for buttons in footer */
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
padding: 1px;
background: #e4e0d8;
}
.calendar tfoot .active { /* Active (pressed) style for buttons in footer */
padding: 2px 0px 0px 2px;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
}
/* Combo boxes (menus that display months/years for direct selection) */
.calendar .combo {
position: absolute;
display: none;
width: 4em;
top: 0px;
left: 0px;
cursor: default;
border: 1px solid;
border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
background: Menu;
color: MenuText;
font-size: 90%;
padding: 1px;
z-index: 100;
}
.calendar .combo .label,
.calendar .combo .label-IEfix {
text-align: center;
padding: 1px;
}
.calendar .combo .label-IEfix {
width: 4em;
}
.calendar .combo .active {
padding: 0px;
border: 1px solid #000;
}
.calendar .combo .hilite {
background: Highlight;
color: HighlightText;
}
.calendar td.time {
border-top: 1px solid ButtonShadow;
padding: 1px 0px;
text-align: center;
background-color: ButtonFace;
}
.calendar td.time .hour,
.calendar td.time .minute,
.calendar td.time .ampm {
padding: 0px 3px 0px 4px;
border: 1px solid #889;
font-weight: bold;
background-color: Menu;
}
.calendar td.time .ampm {
text-align: center;
}
.calendar td.time .colon {
padding: 0px 2px 0px 3px;
font-weight: bold;
}
.calendar td.time span.hilite {
border-color: #000;
background-color: Highlight;
color: HighlightText;
}
.calendar td.time span.active {
border-color: #f00;
background-color: #000;
color: #0f0;
}

View File

@ -0,0 +1,239 @@
/* The main calendar widget. DIV containing a table. */
div.calendar { position: relative; }
.calendar, .calendar table {
border: 1px solid #655;
font-size: 11px;
color: #000;
cursor: default;
background: #ffd;
font-family: tahoma,verdana,sans-serif;
filter:
progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#DDDCCC,EndColorStr=#FFFFFF);
}
/* Header part -- contains navigation buttons and day names. */
.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */
text-align: center; /* They are the navigation buttons */
padding: 2px; /* Make the buttons seem like they're pressing */
color:#363636;
}
.calendar .nav {
background: #edc url(menuarrow.gif) no-repeat 100% 100%;
}
.calendar thead .title { /* This holds the current "month, year" */
font-weight: bold; /* Pressing it will take you to the current date */
text-align: center;
background: #654;
color: #363636;
padding: 2px;
filter:
progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#ffffff,EndColorStr=#dddccc);
}
.calendar thead .headrow { /* Row <TR> containing navigation buttons */
/*background: #3B86A0;*/
color: #363636;
font-weight: bold;
filter:
progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#ffffff,EndColorStr=#3b86a0);
}
.calendar thead .name { /* Cells <TD> containing the day names */
border-bottom: 1px solid #655;
padding: 2px;
text-align: center;
color: #363636;
filter:
progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#DDDCCC,EndColorStr=#FFFFFF);
}
.calendar thead .weekend { /* How a weekend day name shows in header */
color: #f00;
}
.calendar thead .hilite { /* How do the buttons in header appear when hover */
background-color: #ffcc86;
color: #000;
border: 1px solid #b59345;
padding: 1px;
}
.calendar thead .active { /* Active (pressed) buttons in header */
background-color: #c77;
padding: 2px 0px 0px 2px;
}
.calendar thead .daynames { /* Row <TR> containing the day names */
background: #fed;
}
/* The body part -- contains all the days in month. */
.calendar tbody .day { /* Cells <TD> containing month days dates */
width: 2em;
text-align: right;
padding: 2px 4px 2px 2px;
}
.calendar tbody .day.othermonth {
font-size: 80%;
color: #aaa;
}
.calendar tbody .day.othermonth.oweekend {
color: #faa;
}
.calendar table .wn {
padding: 2px 3px 2px 2px;
border-right: 1px solid #000;
background: #fed;
}
.calendar tbody .rowhilite td {
background: #ddf;
}
.calendar tbody .rowhilite td.wn {
background: #efe;
}
.calendar tbody td.hilite { /* Hovered cells <TD> */
background: #ffe;
padding: 1px 3px 1px 1px;
border: 1px solid #bbb;
}
.calendar tbody td.active { /* Active (pressed) cells <TD> */
background: #ddc;
padding: 2px 2px 0px 2px;
}
.calendar tbody td.selected { /* Cell showing today date */
font-weight: bold;
border: 1px solid #000;
padding: 1px 3px 1px 1px;
background: #fea;
}
.calendar tbody td.weekend { /* Cells showing weekend days */
color: #f00;
}
.calendar tbody td.today { font-weight: bold; }
.calendar tbody .disabled { color: #999; }
.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */
visibility: hidden;
}
.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */
display: none;
}
/* The footer part -- status bar and "Close" button */
.calendar tfoot .footrow { /* The <TR> in footer (only one right now) */
text-align: center;
background: #988;
color: #000;
}
.calendar tfoot .ttip { /* Tooltip (status bar) cell <TD> */
border-top: 1px solid #655;
background: #dcb;
color: #363636;
font-weight: bold;
filter:
progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#FFFFFF,EndColorStr=#DDDCCC);
}
.calendar tfoot .hilite { /* Hover style for buttons in footer */
background: #faa;
border: 1px solid #f40;
padding: 1px;
}
.calendar tfoot .active { /* Active (pressed) style for buttons in footer */
background: #c77;
padding: 2px 0px 0px 2px;
}
/* Combo boxes (menus that display months/years for direct selection) */
.combo {
position: absolute;
display: none;
top: 0px;
left: 0px;
width: 4em;
cursor: default;
border: 1px solid #655;
background: #ffe;
color: #000;
font-size: smaller;
z-index: 100;
}
.combo .label,
.combo .label-IEfix {
text-align: center;
padding: 1px;
}
.combo .label-IEfix {
width: 4em;
}
.combo .hilite {
background: #fc8;
}
.combo .active {
border-top: 1px solid #a64;
border-bottom: 1px solid #a64;
background: #fee;
font-weight: bold;
}
.calendar td.time {
border-top: 1px solid #a88;
padding: 1px 0px;
text-align: center;
background-color: #fed;
}
.calendar td.time .hour,
.calendar td.time .minute,
.calendar td.time .ampm {
padding: 0px 3px 0px 4px;
border: 1px solid #988;
font-weight: bold;
background-color: #fff;
}
.calendar td.time .ampm {
text-align: center;
}
.calendar td.time .colon {
padding: 0px 2px 0px 3px;
font-weight: bold;
}
.calendar td.time span.hilite {
border-color: #000;
background-color: #866;
color: #fff;
}
.calendar td.time span.active {
border-color: #f00;
background-color: #000;
color: #0f0;
}

View File

@ -0,0 +1,271 @@
/* The main calendar widget. DIV containing a table. */
.calendar {
position: relative;
display: none;
border-top: 2px solid #fff;
border-right: 2px solid #000;
border-bottom: 2px solid #000;
border-left: 2px solid #fff;
font-size: 11px;
color: #000;
cursor: default;
background: #d4d0c8;
font-family: tahoma,verdana,sans-serif;
}
.calendar table {
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
font-size: 11px;
color: #000;
cursor: default;
background: #d4d0c8;
font-family: tahoma,verdana,sans-serif;
}
/* Header part -- contains navigation buttons and day names. */
.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */
text-align: center;
padding: 1px;
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
}
.calendar .nav {
background: transparent url(menuarrow.gif) no-repeat 100% 100%;
}
.calendar thead .title { /* This holds the current "month, year" */
font-weight: bold;
padding: 1px;
border: 1px solid #000;
background: #848078;
color: #fff;
text-align: center;
}
.calendar thead .headrow { /* Row <TR> containing navigation buttons */
}
.calendar thead .daynames { /* Row <TR> containing the day names */
}
.calendar thead .name { /* Cells <TD> containing the day names */
border-bottom: 1px solid #000;
padding: 2px;
text-align: center;
background: #f4f0e8;
}
.calendar thead .weekend { /* How a weekend day name shows in header */
color: #f00;
}
.calendar thead .hilite { /* How do the buttons in header appear when hover */
border-top: 2px solid #fff;
border-right: 2px solid #000;
border-bottom: 2px solid #000;
border-left: 2px solid #fff;
padding: 0px;
background-color: #e4e0d8;
}
.calendar thead .active { /* Active (pressed) buttons in header */
padding: 2px 0px 0px 2px;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
background-color: #c4c0b8;
}
/* The body part -- contains all the days in month. */
.calendar tbody .day { /* Cells <TD> containing month days dates */
width: 2em;
text-align: right;
padding: 2px 4px 2px 2px;
}
.calendar tbody .day.othermonth {
font-size: 80%;
color: #aaa;
}
.calendar tbody .day.othermonth.oweekend {
color: #faa;
}
.calendar table .wn {
padding: 2px 3px 2px 2px;
border-right: 1px solid #000;
background: #f4f0e8;
}
.calendar tbody .rowhilite td {
background: #e4e0d8;
}
.calendar tbody .rowhilite td.wn {
background: #d4d0c8;
}
.calendar tbody td.hilite { /* Hovered cells <TD> */
padding: 1px 3px 1px 1px;
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
}
.calendar tbody td.active { /* Active (pressed) cells <TD> */
padding: 2px 2px 0px 2px;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
}
.calendar tbody td.selected { /* Cell showing selected date */
font-weight: bold;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
padding: 2px 2px 0px 2px;
background: #e4e0d8;
}
.calendar tbody td.weekend { /* Cells showing weekend days */
color: #f00;
}
.calendar tbody td.today { /* Cell showing today date */
font-weight: bold;
color: #00f;
}
.calendar tbody .disabled { color: #999; }
.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */
visibility: hidden;
}
.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */
display: none;
}
/* The footer part -- status bar and "Close" button */
.calendar tfoot .footrow { /* The <TR> in footer (only one right now) */
}
.calendar tfoot .ttip { /* Tooltip (status bar) cell <TD> */
background: #f4f0e8;
padding: 1px;
border: 1px solid #000;
background: #848078;
color: #fff;
text-align: center;
}
.calendar tfoot .hilite { /* Hover style for buttons in footer */
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
padding: 1px;
background: #e4e0d8;
}
.calendar tfoot .active { /* Active (pressed) style for buttons in footer */
padding: 2px 0px 0px 2px;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
}
/* Combo boxes (menus that display months/years for direct selection) */
.calendar .combo {
position: absolute;
display: none;
width: 4em;
top: 0px;
left: 0px;
cursor: default;
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
background: #e4e0d8;
font-size: 90%;
padding: 1px;
z-index: 100;
}
.calendar .combo .label,
.calendar .combo .label-IEfix {
text-align: center;
padding: 1px;
}
.calendar .combo .label-IEfix {
width: 4em;
}
.calendar .combo .active {
background: #c4c0b8;
padding: 0px;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
}
.calendar .combo .hilite {
background: #048;
color: #fea;
}
.calendar td.time {
border-top: 1px solid #000;
padding: 1px 0px;
text-align: center;
background-color: #f4f0e8;
}
.calendar td.time .hour,
.calendar td.time .minute,
.calendar td.time .ampm {
padding: 0px 3px 0px 4px;
border: 1px solid #889;
font-weight: bold;
background-color: #fff;
}
.calendar td.time .ampm {
text-align: center;
}
.calendar td.time .colon {
padding: 0px 2px 0px 3px;
font-weight: bold;
}
.calendar td.time span.hilite {
border-color: #000;
background-color: #766;
color: #fff;
}
.calendar td.time span.active {
border-color: #f00;
background-color: #000;
color: #0f0;
}

View File

@ -0,0 +1,271 @@
/* The main calendar widget. DIV containing a table. */
.calendar {
position: relative;
display: none;
border-top: 2px solid #fff;
border-right: 2px solid #000;
border-bottom: 2px solid #000;
border-left: 2px solid #fff;
font-size: 11px;
color: #000;
cursor: default;
background: #d4c8d0;
font-family: tahoma,verdana,sans-serif;
}
.calendar table {
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
font-size: 11px;
color: #000;
cursor: default;
background: #d4c8d0;
font-family: tahoma,verdana,sans-serif;
}
/* Header part -- contains navigation buttons and day names. */
.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */
text-align: center;
padding: 1px;
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
}
.calendar .nav {
background: transparent url(menuarrow.gif) no-repeat 100% 100%;
}
.calendar thead .title { /* This holds the current "month, year" */
font-weight: bold;
padding: 1px;
border: 1px solid #000;
background: #847880;
color: #fff;
text-align: center;
}
.calendar thead .headrow { /* Row <TR> containing navigation buttons */
}
.calendar thead .daynames { /* Row <TR> containing the day names */
}
.calendar thead .name { /* Cells <TD> containing the day names */
border-bottom: 1px solid #000;
padding: 2px;
text-align: center;
background: #f4e8f0;
}
.calendar thead .weekend { /* How a weekend day name shows in header */
color: #f00;
}
.calendar thead .hilite { /* How do the buttons in header appear when hover */
border-top: 2px solid #fff;
border-right: 2px solid #000;
border-bottom: 2px solid #000;
border-left: 2px solid #fff;
padding: 0px;
background-color: #e4d8e0;
}
.calendar thead .active { /* Active (pressed) buttons in header */
padding: 2px 0px 0px 2px;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
background-color: #c4b8c0;
}
/* The body part -- contains all the days in month. */
.calendar tbody .day { /* Cells <TD> containing month days dates */
width: 2em;
text-align: right;
padding: 2px 4px 2px 2px;
}
.calendar tbody .day.othermonth {
font-size: 80%;
color: #aaa;
}
.calendar tbody .day.othermonth.oweekend {
color: #faa;
}
.calendar table .wn {
padding: 2px 3px 2px 2px;
border-right: 1px solid #000;
background: #f4e8f0;
}
.calendar tbody .rowhilite td {
background: #e4d8e0;
}
.calendar tbody .rowhilite td.wn {
background: #d4c8d0;
}
.calendar tbody td.hilite { /* Hovered cells <TD> */
padding: 1px 3px 1px 1px;
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
}
.calendar tbody td.active { /* Active (pressed) cells <TD> */
padding: 2px 2px 0px 2px;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
}
.calendar tbody td.selected { /* Cell showing selected date */
font-weight: bold;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
padding: 2px 2px 0px 2px;
background: #e4d8e0;
}
.calendar tbody td.weekend { /* Cells showing weekend days */
color: #f00;
}
.calendar tbody td.today { /* Cell showing today date */
font-weight: bold;
color: #00f;
}
.calendar tbody .disabled { color: #999; }
.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */
visibility: hidden;
}
.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */
display: none;
}
/* The footer part -- status bar and "Close" button */
.calendar tfoot .footrow { /* The <TR> in footer (only one right now) */
}
.calendar tfoot .ttip { /* Tooltip (status bar) cell <TD> */
background: #f4e8f0;
padding: 1px;
border: 1px solid #000;
background: #847880;
color: #fff;
text-align: center;
}
.calendar tfoot .hilite { /* Hover style for buttons in footer */
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
padding: 1px;
background: #e4d8e0;
}
.calendar tfoot .active { /* Active (pressed) style for buttons in footer */
padding: 2px 0px 0px 2px;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
}
/* Combo boxes (menus that display months/years for direct selection) */
.calendar .combo {
position: absolute;
display: none;
width: 4em;
top: 0px;
left: 0px;
cursor: default;
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
background: #e4d8e0;
font-size: 90%;
padding: 1px;
z-index: 100;
}
.calendar .combo .label,
.calendar .combo .label-IEfix {
text-align: center;
padding: 1px;
}
.calendar .combo .label-IEfix {
width: 4em;
}
.calendar .combo .active {
background: #d4c8d0;
padding: 0px;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
}
.calendar .combo .hilite {
background: #408;
color: #fea;
}
.calendar td.time {
border-top: 1px solid #000;
padding: 1px 0px;
text-align: center;
background-color: #f4f0e8;
}
.calendar td.time .hour,
.calendar td.time .minute,
.calendar td.time .ampm {
padding: 0px 3px 0px 4px;
border: 1px solid #889;
font-weight: bold;
background-color: #fff;
}
.calendar td.time .ampm {
text-align: center;
}
.calendar td.time .colon {
padding: 0px 2px 0px 3px;
font-weight: bold;
}
.calendar td.time span.hilite {
border-color: #000;
background-color: #766;
color: #fff;
}
.calendar td.time span.active {
border-color: #f00;
background-color: #000;
color: #0f0;
}

View File

@ -0,0 +1,265 @@
/* The main calendar widget. DIV containing a table. */
.calendar {
position: relative;
display: none;
border-top: 2px solid #fff;
border-right: 2px solid #000;
border-bottom: 2px solid #000;
border-left: 2px solid #fff;
font-size: 11px;
color: #000;
cursor: default;
background: #c8d0d4;
font-family: tahoma,verdana,sans-serif;
}
.calendar table {
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
font-size: 11px;
color: #000;
cursor: default;
background: #c8d0d4;
font-family: tahoma,verdana,sans-serif;
}
/* Header part -- contains navigation buttons and day names. */
.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */
text-align: center;
padding: 1px;
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
}
.calendar .nav {
background: transparent url(menuarrow.gif) no-repeat 100% 100%;
}
.calendar thead .title { /* This holds the current "month, year" */
font-weight: bold;
padding: 1px;
border: 1px solid #000;
background: #788084;
color: #fff;
text-align: center;
}
.calendar thead .headrow { /* Row <TR> containing navigation buttons */
}
.calendar thead .daynames { /* Row <TR> containing the day names */
}
.calendar thead .name { /* Cells <TD> containing the day names */
border-bottom: 1px solid #000;
padding: 2px;
text-align: center;
background: #e8f0f4;
}
.calendar thead .weekend { /* How a weekend day name shows in header */
color: #f00;
}
.calendar thead .hilite { /* How do the buttons in header appear when hover */
border-top: 2px solid #fff;
border-right: 2px solid #000;
border-bottom: 2px solid #000;
border-left: 2px solid #fff;
padding: 0px;
background-color: #d8e0e4;
}
.calendar thead .active { /* Active (pressed) buttons in header */
padding: 2px 0px 0px 2px;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
background-color: #b8c0c4;
}
/* The body part -- contains all the days in month. */
.calendar tbody .day { /* Cells <TD> containing month days dates */
width: 2em;
text-align: right;
padding: 2px 4px 2px 2px;
}
.calendar tbody .day.othermonth {
font-size: 80%;
color: #aaa;
}
.calendar tbody .day.othermonth.oweekend {
color: #faa;
}
.calendar table .wn {
padding: 2px 3px 2px 2px;
border-right: 1px solid #000;
background: #e8f4f0;
}
.calendar tbody .rowhilite td {
background: #d8e4e0;
}
.calendar tbody .rowhilite td.wn {
background: #c8d4d0;
}
.calendar tbody td.hilite { /* Hovered cells <TD> */
padding: 1px 3px 1px 1px;
border: 1px solid;
border-color: #fff #000 #000 #fff;
}
.calendar tbody td.active { /* Active (pressed) cells <TD> */
padding: 2px 2px 0px 2px;
border: 1px solid;
border-color: #000 #fff #fff #000;
}
.calendar tbody td.selected { /* Cell showing selected date */
font-weight: bold;
padding: 2px 2px 0px 2px;
border: 1px solid;
border-color: #000 #fff #fff #000;
background: #d8e0e4;
}
.calendar tbody td.weekend { /* Cells showing weekend days */
color: #f00;
}
.calendar tbody td.today { /* Cell showing today date */
font-weight: bold;
color: #00f;
}
.calendar tbody .disabled { color: #999; }
.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */
visibility: hidden;
}
.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */
display: none;
}
/* The footer part -- status bar and "Close" button */
.calendar tfoot .footrow { /* The <TR> in footer (only one right now) */
}
.calendar tfoot .ttip { /* Tooltip (status bar) cell <TD> */
background: #e8f0f4;
padding: 1px;
border: 1px solid #000;
background: #788084;
color: #fff;
text-align: center;
}
.calendar tfoot .hilite { /* Hover style for buttons in footer */
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
padding: 1px;
background: #d8e0e4;
}
.calendar tfoot .active { /* Active (pressed) style for buttons in footer */
padding: 2px 0px 0px 2px;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
}
/* Combo boxes (menus that display months/years for direct selection) */
.calendar .combo {
position: absolute;
display: none;
width: 4em;
top: 0px;
left: 0px;
cursor: default;
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
background: #d8e0e4;
font-size: 90%;
padding: 1px;
z-index: 100;
}
.calendar .combo .label,
.calendar .combo .label-IEfix {
text-align: center;
padding: 1px;
}
.calendar .combo .label-IEfix {
width: 4em;
}
.calendar .combo .active {
background: #c8d0d4;
padding: 0px;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
}
.calendar .combo .hilite {
background: #048;
color: #aef;
}
.calendar td.time {
border-top: 1px solid #000;
padding: 1px 0px;
text-align: center;
background-color: #e8f0f4;
}
.calendar td.time .hour,
.calendar td.time .minute,
.calendar td.time .ampm {
padding: 0px 3px 0px 4px;
border: 1px solid #889;
font-weight: bold;
background-color: #fff;
}
.calendar td.time .ampm {
text-align: center;
}
.calendar td.time .colon {
padding: 0px 2px 0px 3px;
font-weight: bold;
}
.calendar td.time span.hilite {
border-color: #000;
background-color: #667;
color: #fff;
}
.calendar td.time span.active {
border-color: #f00;
background-color: #000;
color: #0f0;
}

View File

@ -0,0 +1,271 @@
/* The main calendar widget. DIV containing a table. */
.calendar {
position: relative;
display: none;
border-top: 2px solid #fff;
border-right: 2px solid #000;
border-bottom: 2px solid #000;
border-left: 2px solid #fff;
font-size: 11px;
color: #000;
cursor: default;
background: #c8d4d0;
font-family: tahoma,verdana,sans-serif;
}
.calendar table {
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
font-size: 11px;
color: #000;
cursor: default;
background: #c8d4d0;
font-family: tahoma,verdana,sans-serif;
}
/* Header part -- contains navigation buttons and day names. */
.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */
text-align: center;
padding: 1px;
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
}
.calendar .nav {
background: transparent url(menuarrow.gif) no-repeat 100% 100%;
}
.calendar thead .title { /* This holds the current "month, year" */
font-weight: bold;
padding: 1px;
border: 1px solid #000;
background: #788480;
color: #fff;
text-align: center;
}
.calendar thead .headrow { /* Row <TR> containing navigation buttons */
}
.calendar thead .daynames { /* Row <TR> containing the day names */
}
.calendar thead .name { /* Cells <TD> containing the day names */
border-bottom: 1px solid #000;
padding: 2px;
text-align: center;
background: #e8f4f0;
}
.calendar thead .weekend { /* How a weekend day name shows in header */
color: #f00;
}
.calendar thead .hilite { /* How do the buttons in header appear when hover */
border-top: 2px solid #fff;
border-right: 2px solid #000;
border-bottom: 2px solid #000;
border-left: 2px solid #fff;
padding: 0px;
background-color: #d8e4e0;
}
.calendar thead .active { /* Active (pressed) buttons in header */
padding: 2px 0px 0px 2px;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
background-color: #b8c4c0;
}
/* The body part -- contains all the days in month. */
.calendar tbody .day { /* Cells <TD> containing month days dates */
width: 2em;
text-align: right;
padding: 2px 4px 2px 2px;
}
.calendar tbody .day.othermonth {
font-size: 80%;
color: #aaa;
}
.calendar tbody .day.othermonth.oweekend {
color: #faa;
}
.calendar table .wn {
padding: 2px 3px 2px 2px;
border-right: 1px solid #000;
background: #e8f4f0;
}
.calendar tbody .rowhilite td {
background: #d8e4e0;
}
.calendar tbody .rowhilite td.wn {
background: #c8d4d0;
}
.calendar tbody td.hilite { /* Hovered cells <TD> */
padding: 1px 3px 1px 1px;
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
}
.calendar tbody td.active { /* Active (pressed) cells <TD> */
padding: 2px 2px 0px 2px;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
}
.calendar tbody td.selected { /* Cell showing selected date */
font-weight: bold;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
padding: 2px 2px 0px 2px;
background: #d8e4e0;
}
.calendar tbody td.weekend { /* Cells showing weekend days */
color: #f00;
}
.calendar tbody td.today { /* Cell showing today date */
font-weight: bold;
color: #00f;
}
.calendar tbody .disabled { color: #999; }
.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */
visibility: hidden;
}
.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */
display: none;
}
/* The footer part -- status bar and "Close" button */
.calendar tfoot .footrow { /* The <TR> in footer (only one right now) */
}
.calendar tfoot .ttip { /* Tooltip (status bar) cell <TD> */
background: #e8f4f0;
padding: 1px;
border: 1px solid #000;
background: #788480;
color: #fff;
text-align: center;
}
.calendar tfoot .hilite { /* Hover style for buttons in footer */
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
padding: 1px;
background: #d8e4e0;
}
.calendar tfoot .active { /* Active (pressed) style for buttons in footer */
padding: 2px 0px 0px 2px;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
}
/* Combo boxes (menus that display months/years for direct selection) */
.calendar .combo {
position: absolute;
display: none;
width: 4em;
top: 0px;
left: 0px;
cursor: default;
border-top: 1px solid #fff;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
border-left: 1px solid #fff;
background: #d8e4e0;
font-size: 90%;
padding: 1px;
z-index: 100;
}
.calendar .combo .label,
.calendar .combo .label-IEfix {
text-align: center;
padding: 1px;
}
.calendar .combo .label-IEfix {
width: 4em;
}
.calendar .combo .active {
background: #c8d4d0;
padding: 0px;
border-top: 1px solid #000;
border-right: 1px solid #fff;
border-bottom: 1px solid #fff;
border-left: 1px solid #000;
}
.calendar .combo .hilite {
background: #048;
color: #aef;
}
.calendar td.time {
border-top: 1px solid #000;
padding: 1px 0px;
text-align: center;
background-color: #e8f0f4;
}
.calendar td.time .hour,
.calendar td.time .minute,
.calendar td.time .ampm {
padding: 0px 3px 0px 4px;
border: 1px solid #889;
font-weight: bold;
background-color: #fff;
}
.calendar td.time .ampm {
text-align: center;
}
.calendar td.time .colon {
padding: 0px 2px 0px 3px;
font-weight: bold;
}
.calendar td.time span.hilite {
border-color: #000;
background-color: #667;
color: #fff;
}
.calendar td.time span.active {
border-color: #f00;
background-color: #000;
color: #0f0;
}

1806
jscalendar-1.0/calendar.js Normal file

File diff suppressed because it is too large Load Diff

119
jscalendar-1.0/calendar.php Normal file
View File

@ -0,0 +1,119 @@
<?php
/**
* File: calendar.php | (c) dynarch.com 2004
* Distributed as part of "The Coolest DHTML Calendar"
* under the same terms.
* -----------------------------------------------------------------
* This file implements a simple PHP wrapper for the calendar. It
* allows you to easily include all the calendar files and setup the
* calendar by instantiating and calling a PHP object.
*/
define('NEWLINE', "\n");
class DHTML_Calendar {
var $calendar_lib_path;
var $calendar_file;
var $calendar_lang_file;
var $calendar_setup_file;
var $calendar_theme_file;
var $calendar_options;
function DHTML_Calendar($calendar_lib_path = '/calendar/',
$lang = 'en',
$theme = 'calendar-win2k-1',
$stripped = true) {
if ($stripped) {
$this->calendar_file = 'calendar_stripped.js';
$this->calendar_setup_file = 'calendar-setup_stripped.js';
} else {
$this->calendar_file = 'calendar.js';
$this->calendar_setup_file = 'calendar-setup.js';
}
$this->calendar_lang_file = 'lang/calendar-' . $lang . '.js';
$this->calendar_theme_file = $theme.'.css';
$this->calendar_lib_path = preg_replace('/\/+$/', '/', $calendar_lib_path);
$this->calendar_options = array('ifFormat' => '%Y/%m/%d',
'daFormat' => '%Y/%m/%d');
}
function set_option($name, $value) {
$this->calendar_options[$name] = $value;
}
function load_files() {
echo $this->get_load_files_code();
}
function get_load_files_code() {
$code = ( '<link rel="stylesheet" type="text/css" media="all" href="' .
$this->calendar_lib_path . $this->calendar_theme_file .
'" />' . NEWLINE );
$code .= ( '<script type="text/javascript" src="' .
$this->calendar_lib_path . $this->calendar_file .
'"></script>' . NEWLINE );
$code .= ( '<script type="text/javascript" src="' .
$this->calendar_lib_path . $this->calendar_lang_file .
'"></script>' . NEWLINE );
$code .= ( '<script type="text/javascript" src="' .
$this->calendar_lib_path . $this->calendar_setup_file .
'"></script>' );
return $code;
}
function _make_calendar($other_options = array()) {
$js_options = $this->_make_js_hash(array_merge($this->calendar_options, $other_options));
$code = ( '<script type="text/javascript">Calendar.setup({' .
$js_options .
'});</script>' );
return $code;
}
function make_input_field($cal_options = array(), $field_attributes = array()) {
$id = $this->_gen_id();
$attrstr = $this->_make_html_attr(array_merge($field_attributes,
array('id' => $this->_field_id($id),
'type' => 'text')));
echo '<input ' . $attrstr .'/>';
echo '<a href="#" id="'. $this->_trigger_id($id) . '">' .
'<img align="middle" border="0" src="' . $this->calendar_lib_path . 'img.gif" alt="" /></a>';
$options = array_merge($cal_options,
array('inputField' => $this->_field_id($id),
'button' => $this->_trigger_id($id)));
echo $this->_make_calendar($options);
}
/// PRIVATE SECTION
function _field_id($id) { return 'f-calendar-field-' . $id; }
function _trigger_id($id) { return 'f-calendar-trigger-' . $id; }
function _gen_id() { static $id = 0; return ++$id; }
function _make_js_hash($array) {
$jstr = '';
reset($array);
while (list($key, $val) = each($array)) {
if (is_bool($val))
$val = $val ? 'true' : 'false';
else if (!is_numeric($val))
$val = '"'.$val.'"';
if ($jstr) $jstr .= ',';
$jstr .= '"' . $key . '":' . $val;
}
return $jstr;
}
function _make_html_attr($array) {
$attrstr = '';
reset($array);
while (list($key, $val) = each($array)) {
$attrstr .= $key . '="' . $val . '" ';
}
return $attrstr;
}
};
?>

File diff suppressed because one or more lines are too long

109
jscalendar-1.0/dayinfo.html Normal file
View File

@ -0,0 +1,109 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html> <head>
<title>How to include additional info in day cells</title>
<script type="text/javascript" src="calendar.js"></script>
<script type="text/javascript" src="lang/calendar-en.js"></script>
<script type="text/javascript" src="calendar-setup.js"></script>
<script type="text/javascript">
// define info for dates in this table:
var dateInfo = {
"20050308" : "Mishoo's&nbsp;birthday",
"20050310" : "foo",
"20050315" : "bar",
"20050318" : "25$",
"20050324" : "60$"
};
</script>
<style type="text/css">
@import url(calendar-win2k-1.css);
.calendar .inf { font-size: 80%; color: #444; }
.calendar .wn { font-weight: bold; vertical-align: top; }
</style>
</head>
<body>
<h1>How to include additional info in day cells</h1>
<div id="flatcal" style="float: right"></div>
<script type="text/javascript">
function getDateText(date, d) {
var inf = dateInfo[date.print("%Y%m%d")];
if (!inf) {
return d + "<div class='inf'>&nbsp;</div>";
} else {
return d + "<div class='inf'>" + inf + "</div>";
}
};
function flatCallback(cal) {
if (cal.dateClicked) {
// do something here
window.status = "Selected: " + cal.date;
var inf = dateInfo[cal.date.print("%Y%m%d")];
if (inf) {
window.status += ". Additional info: " + inf;
}
}
};
Calendar.setup({
flat: "flatcal",
dateText: getDateText,
flatCallback: flatCallback
});
</script>
<p>The idea is simple:</p>
<ol>
<li>
<p>Define a callback that takes two parameters like this:</p>
<pre>function getDateText(date, d)</pre>
<p>
This function will receive the date object as the first
parameter and the current date number (1..31) as the second (you
can get it as well by calling date.getDate() but since it's very
probably useful I thought I'd pass it too so that we can avoid a
function call).
</p>
<p>
This function <em>must</em> return the text to be inserted in
the cell of the passed date. That is, one should at least
"return d;".
</p>
</li>
<li>
Pass the above function as the "dateText" parameter to
Calendar.setup.
</li>
</ol>
<p>
The function could simply look like:
</p>
<pre
> function getDateText(date, d) {
if (d == 12) {
return "12th";
} else if (d == 13) {
return "bad luck";
} /* ... etc ... */
}</pre>
<p>
but it's easy to imagine that this approach sucks. For a better
way, see the source of this page and note the usage of an externally
defined "dateText" object which maps "date" to "date info", also
taking into account the year and month. This object can be easily
generated from a database, and the getDateText function becomes
extremely simple (and static).
</p>
<p>
Cheers!
</p>
<hr />
<address><a href="http://dynarch.com/mishoo/">mishoo</a></address>
<!-- hhmts start --> Last modified: Sat Mar 5 17:18:06 EET 2005 <!-- hhmts end -->
</body> </html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,193 @@
body {
color: black;
/* background-color: #e5e5e5;*/
background-color: #ffffff;
/*background-color: beige;*/
margin-top: 2em;
margin-left: 8%;
margin-right: 8%;
}
h1,h2,h3,h4,h5,h6 {
margin-top: .5em;
}
.title {
font-size: 200%;
font-weight: normal;
}
.partheading {
font-size: 100%;
}
.chapterheading {
font-size: 100%;
}
.beginsection {
font-size: 110%;
}
.tiny {
font-size: 40%;
}
.scriptsize {
font-size: 60%;
}
.footnotesize {
font-size: 75%;
}
.small {
font-size: 90%;
}
.normalsize {
font-size: 100%;
}
.large {
font-size: 120%;
}
.largecap {
font-size: 150%;
}
.largeup {
font-size: 200%;
}
.huge {
font-size: 300%;
}
.hugecap {
font-size: 350%;
}
pre {
margin-left: 2em;
}
blockquote {
margin-left: 2em;
}
ol {
list-style-type: decimal;
}
ol ol {
list-style-type: lower-alpha;
}
ol ol ol {
list-style-type: lower-roman;
}
ol ol ol ol {
list-style-type: upper-alpha;
}
/*
.verbatim {
color: #4d0000;
}
*/
tt i {
font-family: serif;
}
.verbatim em {
font-family: serif;
}
.scheme em {
font-family: serif;
color: black;
}
.scheme {
color: brown;
}
.scheme .keyword {
color: #990000;
font-weight: bold;
}
.scheme .builtin {
color: #990000;
}
.scheme .variable {
color: navy;
}
.scheme .global {
color: purple;
}
.scheme .selfeval {
color: green;
}
.scheme .comment {
color: teal;
}
.schemeresponse {
color: green;
}
.navigation {
color: red;
text-align: right;
font-size: medium;
font-style: italic;
}
.disable {
/* color: #e5e5e5; */
color: gray;
}
.smallcaps {
font-size: 75%;
}
.smallprint {
color: gray;
font-size: 75%;
text-align: right;
}
/*
.smallprint hr {
text-align: left;
width: 40%;
}
*/
.footnoterule {
text-align: left;
width: 40%;
}
.colophon {
color: gray;
font-size: 80%;
text-align: right;
}
.colophon a {
color: gray;
}

View File

@ -0,0 +1,34 @@
html { margin: 0px; padding: 0px; background-color: #08f; color: #444; font-family: georgia,serif; }
body { margin: 2em 8%; background-color: #fff; padding: 1em; border: 2px ridge #048; }
a:link, a:visited { text-decoration: none; color: #00f; }
a:hover { color: #f00; text-decoration: underline; }
a:active { color: #f84; }
h1, h2, h3, h4, h5, h6 { font-family: tahoma,verdana,sans-serif; }
h2, h3 { font-weight: normal; }
h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover { text-decoration: none; }
h1 { font-size: 170%; border: 2px ridge #048; letter-spacing: 2px; color: #000; margin-left: -2em; margin-right: -2em;
background-color: #fff; padding: 2px 1em; background-color: #def; }
h2 { font-size: 140%; color: #222; }
h3 { font-size: 120%; color: #444; }
h1.title { font-size: 300%; font-family: georgia,serif; font-weight: normal; color: #846; letter-spacing: -1px;
border: none;
padding: none;
background-color: #fff;
border-bottom: 3px double #624; padding-bottom: 2px; margin-left: 8%; margin-right: 8%; }
.colophon { padding-top: 2em; color: #999; font-size: 90%; font-family: georgia,"times new roman",serif; }
.colophon a:link, .colophon a:visited { color: #755; }
.colophon a:hover { color: #422; text-decoration: underline; }
.footnote { font-size: 90%; font-style: italic; font-family: georgia,"times new roman",serif; margin: 0px 3em; }
.footnote sup { font-size: 120%; padding: 0px 0.3em; position: relative; top: -0.2em; }
.small { font-size: 90%; }
.verbatim { background-color: #eee; padding: 0.2em 1em; border: 1px solid #aaa; }

File diff suppressed because it is too large Load Diff

Binary file not shown.

BIN
jscalendar-1.0/img.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 B

330
jscalendar-1.0/index.html Normal file
View File

@ -0,0 +1,330 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- $Id: index.html,v 1.15 2005/03/05 14:38:10 mishoo Exp $ -->
<head>
<meta http-equiv="content-type" content="text/xml; charset=utf-8" />
<title>The Coolest DHTML Calendar - Online Demo</title>
<link rel="stylesheet" type="text/css" media="all" href="skins/aqua/theme.css" title="Aqua" />
<link rel="alternate stylesheet" type="text/css" media="all" href="calendar-blue.css" title="winter" />
<link rel="alternate stylesheet" type="text/css" media="all" href="calendar-blue2.css" title="blue" />
<link rel="alternate stylesheet" type="text/css" media="all" href="calendar-brown.css" title="summer" />
<link rel="alternate stylesheet" type="text/css" media="all" href="calendar-green.css" title="green" />
<link rel="alternate stylesheet" type="text/css" media="all" href="calendar-win2k-1.css" title="win2k-1" />
<link rel="alternate stylesheet" type="text/css" media="all" href="calendar-win2k-2.css" title="win2k-2" />
<link rel="alternate stylesheet" type="text/css" media="all" href="calendar-win2k-cold-1.css" title="win2k-cold-1" />
<link rel="alternate stylesheet" type="text/css" media="all" href="calendar-win2k-cold-2.css" title="win2k-cold-2" />
<link rel="alternate stylesheet" type="text/css" media="all" href="calendar-system.css" title="system" />
<!-- import the calendar script -->
<script type="text/javascript" src="calendar.js"></script>
<!-- import the language module -->
<script type="text/javascript" src="lang/calendar-en.js"></script>
<!-- other languages might be available in the lang directory; please check
your distribution archive. -->
<!-- helper script that uses the calendar -->
<script type="text/javascript">
var oldLink = null;
// code to change the active stylesheet
function setActiveStyleSheet(link, title) {
var i, a, main;
for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
a.disabled = true;
if(a.getAttribute("title") == title) a.disabled = false;
}
}
if (oldLink) oldLink.style.fontWeight = 'normal';
oldLink = link;
link.style.fontWeight = 'bold';
return false;
}
// This function gets called when the end-user clicks on some date.
function selected(cal, date) {
cal.sel.value = date; // just update the date in the input field.
if (cal.dateClicked && (cal.sel.id == "sel1" || cal.sel.id == "sel3"))
// if we add this call we close the calendar on single-click.
// just to exemplify both cases, we are using this only for the 1st
// and the 3rd field, while 2nd and 4th will still require double-click.
cal.callCloseHandler();
}
// And this gets called when the end-user clicks on the _selected_ date,
// or clicks on the "Close" button. It just hides the calendar without
// destroying it.
function closeHandler(cal) {
cal.hide(); // hide the calendar
// cal.destroy();
_dynarch_popupCalendar = null;
}
// This function shows the calendar under the element having the given id.
// It takes care of catching "mousedown" signals on document and hiding the
// calendar if the click was outside.
function showCalendar(id, format, showsTime, showsOtherMonths) {
var el = document.getElementById(id);
if (_dynarch_popupCalendar != null) {
// we already have some calendar created
_dynarch_popupCalendar.hide(); // so we hide it first.
} else {
// first-time call, create the calendar.
var cal = new Calendar(1, null, selected, closeHandler);
// uncomment the following line to hide the week numbers
// cal.weekNumbers = false;
if (typeof showsTime == "string") {
cal.showsTime = true;
cal.time24 = (showsTime == "24");
}
if (showsOtherMonths) {
cal.showsOtherMonths = true;
}
_dynarch_popupCalendar = cal; // remember it in the global var
cal.setRange(1900, 2070); // min/max year allowed.
cal.create();
}
_dynarch_popupCalendar.setDateFormat(format); // set the specified date format
_dynarch_popupCalendar.parseDate(el.value); // try to parse the text in field
_dynarch_popupCalendar.sel = el; // inform it what input field we use
// the reference element that we pass to showAtElement is the button that
// triggers the calendar. In this example we align the calendar bottom-right
// to the button.
_dynarch_popupCalendar.showAtElement(el.nextSibling, "Br"); // show the calendar
return false;
}
var MINUTE = 60 * 1000;
var HOUR = 60 * MINUTE;
var DAY = 24 * HOUR;
var WEEK = 7 * DAY;
// If this handler returns true then the "date" given as
// parameter will be disabled. In this example we enable
// only days within a range of 10 days from the current
// date.
// You can use the functions date.getFullYear() -- returns the year
// as 4 digit number, date.getMonth() -- returns the month as 0..11,
// and date.getDate() -- returns the date of the month as 1..31, to
// make heavy calculations here. However, beware that this function
// should be very fast, as it is called for each day in a month when
// the calendar is (re)constructed.
function isDisabled(date) {
var today = new Date();
return (Math.abs(date.getTime() - today.getTime()) / DAY) > 10;
}
function flatSelected(cal, date) {
var el = document.getElementById("preview");
el.innerHTML = date;
}
function showFlatCalendar() {
var parent = document.getElementById("display");
// construct a calendar giving only the "selected" handler.
var cal = new Calendar(0, null, flatSelected);
// hide week numbers
cal.weekNumbers = false;
// We want some dates to be disabled; see function isDisabled above
cal.setDisabledHandler(isDisabled);
cal.setDateFormat("%A, %B %e");
// this call must be the last as it might use data initialized above; if
// we specify a parent, as opposite to the "showCalendar" function above,
// then we create a flat calendar -- not popup. Hidden, though, but...
cal.create(parent);
// ... we can show it here.
cal.show();
}
</script>
<style type="text/css">
.ex { font-weight: bold; background: #fed; color: #080 }
.help { color: #080; font-style: italic; }
body { background: #fea; font: 10pt tahoma,verdana,sans-serif; }
table { font: 13px verdana,tahoma,sans-serif; }
a { color: #00f; }
a:visited { color: #00f; }
a:hover { color: #f00; background: #fefaf0; }
a:active { color: #08f; }
.key { border: 1px solid #000; background: #fff; color: #008;
padding: 0px 5px; cursor: default; font-size: 80%; }
</style>
</head>
<body onload="showFlatCalendar()">
<h2><a href="http://www.dynarch.com/projects/calendar/"
title="Visit the project website">jscalendar</a>-1.0
"It is happening again"</h2>
<p>
<div style="float: right; border: 1px solid #b87; padding: 2px; font-size: 90%; background: #ffb;">
Theme:<br />
<a href="#" id="defaultTheme" onclick="return setActiveStyleSheet(this, 'Aqua');">Aqua</a>
|
<a href="#" onclick="return setActiveStyleSheet(this, 'winter');">winter</a>
|
<a href="#" onclick="return setActiveStyleSheet(this, 'blue');">blue</a>
|
<a href="#" onclick="return setActiveStyleSheet(this, 'summer');">summer</a>
|
<a href="#" onclick="return setActiveStyleSheet(this, 'green');">green</a>
<br />
<a href="#" onclick="return setActiveStyleSheet(this, 'win2k-1');">win2k-1</a>
|
<a href="#" onclick="return setActiveStyleSheet(this, 'win2k-2');">win2k-2</a>
|
<a href="#" onclick="return setActiveStyleSheet(this, 'win2k-cold-1');">win2k-cold-1</a>
|
<a href="#" onclick="return setActiveStyleSheet(this, 'win2k-cold-2');">win2k-cold-2</a>
<br />
<a href="#" onclick="return setActiveStyleSheet(this, 'system');">system</a>
<script type="text/javascript">
setActiveStyleSheet(document.getElementById("defaultTheme"), "Aqua");
</script>
</div>
<a href="release-notes.html">Release notes</a>.
<br />
Set it up in minutes:
<a href="simple-1.html">popup calendar</a>,
<a href="simple-2.html">flat calendar</a>.
Other samples:
<a href="simple-3.html">special days</a>,
<a href="dayinfo.html">day info</a>,
<a href="multiple-dates.html">multiple dates selection</a>
<br />
Documentation:
<a href="doc/html/reference.html">HTML</a>,
<a href="doc/reference.pdf">PDF</a>.
<br />
</p>
<div style="padding-left:20px; font-size: 90%; font-style: italic;">
</div>
<table style="width: 100%">
<tr valign="top">
<td style="background: #ffa; padding: 5px; border: 1px solid #995;">
<form action="#">
<div style="background: #995; color: #ffa; font-weight: bold; padding: 2px;">
Popup examples
</div>
<br />
<b>Date #1:</b> <input type="text" name="date1" id="sel1" size="30"
><input type="reset" value=" ... "
onclick="return showCalendar('sel1', '%Y-%m-%d [%W] %H:%M', '24', true);"> %Y-%m-%d [%W] %H:%M -- single
click<br />
<b>Date #2:</b> <input type="text" name="date2" id="sel2" size="30"
><input type="reset" value=" ... "
onclick="return showCalendar('sel2', '%a, %b %e, %Y [%I:%M %p]', '12');"> %a, %b %e, %Y [%I:%M %p]
-- double click
<br /><br />
<!--
if you remove this comment and leave the following HTML code
you will see a horrible effect, in all supported browsers (IE and Mozilla).
-->
<SELECT multiple size="4" name="component-select">
<OPTION selected value="Component_1_a">Component_1</OPTION>
<OPTION selected value="Component_1_b">Component_2</OPTION>
<OPTION>Component_3</OPTION>
<OPTION>Component_4</OPTION>
<OPTION>Component_5</OPTION>
<OPTION>Component_6</OPTION>
<OPTION>Component_7</OPTION>
</SELECT>
this select should hide when the calendar is above it.
<br /><br />
<b>Date #3:</b> <input type="text" name="date3" id="sel3" size="30"
><input type="reset" value=" ... "
onclick="return showCalendar('sel3', '%d/%m/%Y');"> %d/%m/%Y
-- single click
<br />
<b>Date #4:</b> <input type="text" name="date4" id="sel4" size="30"
><input type="reset" value=" ... "
onclick="return showCalendar('sel4', '%A, %B %e, %Y');"> %A, %B %e, %Y --
double click
</form>
<p>This is release <b>1.0</b>. Works on MSIE/Win 5.0 or better (really),
Opera 7+, Mozilla, Firefox, Netscape 6.x, 7.0 and all other Gecko-s,
Konqueror and Safari.</p>
<h4>Keyboard navigation</h4>
<p>Starting with version 0.9.2, you can also use the keyboard to select
dates (only for popup calendars; does <em>not</em> work with Opera
7 or Konqueror/Safari). The following keys are available:</p>
<ul>
<li><span class="key">&larr;</span> , <span class="key">&rarr;</span> ,
<span class="key">&uarr;</span> , <span class="key">&darr;</span> -- select date</li>
<li><span class="key">CTRL</span> + <span class="key">&larr;</span> ,
<span class="key">&rarr;</span> -- select month</li>
<li><span class="key">CTRL</span> + <span class="key">&uarr;</span> ,
<span class="key">&darr;</span> -- select year</li>
<li><span class="key">SPACE</span> -- go to <em>today</em> date</li>
<li><span class="key">ENTER</span> -- accept the currently selected date</li>
<li><span class="key">ESC</span> -- cancel selection</li>
</ul>
</td>
<td style="padding: 5px; margin: 5px; border: 1px solid #984; background: #ed9; width: 19em;">
<div style="background: #984; color: #fea; font-weight: bold; padding: 2px; text-align: center">
Flat calendar
</div>
<p style="width: 12em"><small>A non-popup version will appear below as soon
as the page is loaded. Note that it doesn't show the week number.</small></p>
<!-- the calendar will be inserted here -->
<div id="display" style="float: right; clear: both;"></div>
<div id="preview" style="font-size: 80%; text-align: center; padding: 2px">&nbsp;</div>
<p style="clear: both;"><small>
The example above uses the <code>setDisabledHandler()</code> member function
to setup a handler that would only enable days withing a range of 10 days,
forward or backward, from the current date.
</small></p>
</div>
</td>
</tr>
</table>
<hr /><address>
&copy; <a href="http://www.dynarch.com/">dynarch.com</a> 2002-2005 <br />
Author: <a href="http://www.bazon.net/mishoo/">Mihai
Bazon</a><br /> Distributed under the <a
href="http://www.gnu.org/licenses/lgpl.html">GNU LGPL</a>.</address>
<p style="font-size: smaller">If you use this script on a public page we
would love it if you would <a href="http://www.dynarch.com/contact.html">let us
know</a>.</p>
</body></html>

View File

@ -0,0 +1,39 @@
// ** I18N Afrikaans
Calendar._DN = new Array
("Sondag",
"Maandag",
"Dinsdag",
"Woensdag",
"Donderdag",
"Vrydag",
"Saterdag",
"Sondag");
Calendar._MN = new Array
("Januarie",
"Februarie",
"Maart",
"April",
"Mei",
"Junie",
"Julie",
"Augustus",
"September",
"Oktober",
"November",
"Desember");
// tooltips
Calendar._TT = {};
Calendar._TT["TOGGLE"] = "Verander eerste dag van die week";
Calendar._TT["PREV_YEAR"] = "Vorige jaar (hou vir keuselys)";
Calendar._TT["PREV_MONTH"] = "Vorige maand (hou vir keuselys)";
Calendar._TT["GO_TODAY"] = "Gaan na vandag";
Calendar._TT["NEXT_MONTH"] = "Volgende maand (hou vir keuselys)";
Calendar._TT["NEXT_YEAR"] = "Volgende jaar (hou vir keuselys)";
Calendar._TT["SEL_DATE"] = "Kies datum";
Calendar._TT["DRAG_TO_MOVE"] = "Sleep om te skuif";
Calendar._TT["PART_TODAY"] = " (vandag)";
Calendar._TT["MON_FIRST"] = "Vertoon Maandag eerste";
Calendar._TT["SUN_FIRST"] = "Display Sunday first";
Calendar._TT["CLOSE"] = "Close";
Calendar._TT["TODAY"] = "Today";

View File

@ -0,0 +1,101 @@
// Calendar ALBANIAN language
//author Rigels Gordani rige@hotmail.com
// ditet
Calendar._DN = new Array
("E Diele",
"E Hene",
"E Marte",
"E Merkure",
"E Enjte",
"E Premte",
"E Shtune",
"E Diele");
//ditet shkurt
Calendar._SDN = new Array
("Die",
"Hen",
"Mar",
"Mer",
"Enj",
"Pre",
"Sht",
"Die");
// muajt
Calendar._MN = new Array
("Janar",
"Shkurt",
"Mars",
"Prill",
"Maj",
"Qeshor",
"Korrik",
"Gusht",
"Shtator",
"Tetor",
"Nentor",
"Dhjetor");
// muajte shkurt
Calendar._SMN = new Array
("Jan",
"Shk",
"Mar",
"Pri",
"Maj",
"Qes",
"Kor",
"Gus",
"Sht",
"Tet",
"Nen",
"Dhj");
// ndihmesa
Calendar._TT = {};
Calendar._TT["INFO"] = "Per kalendarin";
Calendar._TT["ABOUT"] =
"Zgjedhes i ores/dates ne DHTML \n" +
"\n\n" +"Zgjedhja e Dates:\n" +
"- Perdor butonat \xab, \xbb per te zgjedhur vitin\n" +
"- Perdor butonat" + String.fromCharCode(0x2039) + ", " +
String.fromCharCode(0x203a) +
" per te zgjedhur muajin\n" +
"- Mbani shtypur butonin e mousit per nje zgjedje me te shpejte.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Zgjedhja e kohes:\n" +
"- Kliko tek ndonje nga pjeset e ores per ta rritur ate\n" +
"- ose kliko me Shift per ta zvogeluar ate\n" +
"- ose cliko dhe terhiq per zgjedhje me te shpejte.";
Calendar._TT["PREV_YEAR"] = "Viti i shkuar (prit per menune)";
Calendar._TT["PREV_MONTH"] = "Muaji i shkuar (prit per menune)";
Calendar._TT["GO_TODAY"] = "Sot";
Calendar._TT["NEXT_MONTH"] = "Muaji i ardhshem (prit per menune)";
Calendar._TT["NEXT_YEAR"] = "Viti i ardhshem (prit per menune)";
Calendar._TT["SEL_DATE"] = "Zgjidh daten";
Calendar._TT["DRAG_TO_MOVE"] = "Terhiqe per te levizur";
Calendar._TT["PART_TODAY"] = " (sot)";
// "%s" eshte dita e pare e javes
// %s do te zevendesohet me emrin e dite
Calendar._TT["DAY_FIRST"] = "Trego te %s te paren";
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Mbyll";
Calendar._TT["TODAY"] = "Sot";
Calendar._TT["TIME_PART"] = "Kliko me (Shift-)ose terhiqe per te ndryshuar
vleren";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["WK"] = "Java";
Calendar._TT["TIME"] = "Koha:";

View File

@ -0,0 +1,124 @@
// ** I18N
// Calendar BG language
// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
// Translator: Valentin Sheiretsky, <valio@valio.eu.org>
// Encoding: Windows-1251
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("Íåäåëÿ",
"Ïîíåäåëíèê",
"Âòîðíèê",
"Ñðÿäà",
"×åòâúðòúê",
"Ïåòúê",
"Ñúáîòà",
"Íåäåëÿ");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("Íåä",
"Ïîí",
"Âòî",
"Ñðÿ",
"×åò",
"Ïåò",
"Ñúá",
"Íåä");
// full month names
Calendar._MN = new Array
("ßíóàðè",
"Ôåâðóàðè",
"Ìàðò",
"Àïðèë",
"Ìàé",
"Þíè",
"Þëè",
"Àâãóñò",
"Ñåïòåìâðè",
"Îêòîìâðè",
"Íîåìâðè",
"Äåêåìâðè");
// short month names
Calendar._SMN = new Array
("ßíó",
"Ôåâ",
"Ìàð",
"Àïð",
"Ìàé",
"Þíè",
"Þëè",
"Àâã",
"Ñåï",
"Îêò",
"Íîå",
"Äåê");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Èíôîðìàöèÿ çà êàëåíäàðà";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Date selection:\n" +
"- Use the \xab, \xbb buttons to select year\n" +
"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" +
"- Hold mouse button on any of the above buttons for faster selection.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Time selection:\n" +
"- Click on any of the time parts to increase it\n" +
"- or Shift-click to decrease it\n" +
"- or click and drag for faster selection.";
Calendar._TT["PREV_YEAR"] = "Ïðåäíà ãîäèíà (çàäðúæòå çà ìåíþ)";
Calendar._TT["PREV_MONTH"] = "Ïðåäåí ìåñåö (çàäðúæòå çà ìåíþ)";
Calendar._TT["GO_TODAY"] = "Èçáåðåòå äíåñ";
Calendar._TT["NEXT_MONTH"] = "Ñëåäâàù ìåñåö (çàäðúæòå çà ìåíþ)";
Calendar._TT["NEXT_YEAR"] = "Ñëåäâàùà ãîäèíà (çàäðúæòå çà ìåíþ)";
Calendar._TT["SEL_DATE"] = "Èçáåðåòå äàòà";
Calendar._TT["DRAG_TO_MOVE"] = "Ïðåìåñòâàíå";
Calendar._TT["PART_TODAY"] = " (äíåñ)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "%s êàòî ïúðâè äåí";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Çàòâîðåòå";
Calendar._TT["TODAY"] = "Äíåñ";
Calendar._TT["TIME_PART"] = "(Shift-)Click èëè drag çà äà ïðîìåíèòå ñòîéíîñòòà";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%A - %e %B %Y";
Calendar._TT["WK"] = "Ñåäì";
Calendar._TT["TIME"] = "×àñ:";

View File

@ -0,0 +1,123 @@
// ** I18N
// Calendar big5-utf8 language
// Author: Gary Fu, <gary@garyfu.idv.tw>
// Encoding: utf8
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六",
"星期日");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("日",
"一",
"二",
"三",
"四",
"五",
"六",
"日");
// full month names
Calendar._MN = new Array
("一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月");
// short month names
Calendar._SMN = new Array
("一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "關於";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"日期選擇方法:\n" +
"- 使用 \xab, \xbb 按鈕可選擇年份\n" +
"- 使用 " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " 按鈕可選擇月份\n" +
"- 按住上面的按鈕可以加快選取";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"時間選擇方法:\n" +
"- 點擊任何的時間部份可增加其值\n" +
"- 同時按Shift鍵再點擊可減少其值\n" +
"- 點擊並拖曳可加快改變的值";
Calendar._TT["PREV_YEAR"] = "上一年 (按住選單)";
Calendar._TT["PREV_MONTH"] = "下一年 (按住選單)";
Calendar._TT["GO_TODAY"] = "到今日";
Calendar._TT["NEXT_MONTH"] = "上一月 (按住選單)";
Calendar._TT["NEXT_YEAR"] = "下一月 (按住選單)";
Calendar._TT["SEL_DATE"] = "選擇日期";
Calendar._TT["DRAG_TO_MOVE"] = "拖曳";
Calendar._TT["PART_TODAY"] = " (今日)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "將 %s 顯示在前";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "關閉";
Calendar._TT["TODAY"] = "今日";
Calendar._TT["TIME_PART"] = "點擊or拖曳可改變時間(同時按Shift為減)";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["WK"] = "週";
Calendar._TT["TIME"] = "Time:";

View File

@ -0,0 +1,123 @@
// ** I18N
// Calendar big5 language
// Author: Gary Fu, <gary@garyfu.idv.tw>
// Encoding: big5
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六",
"星期日");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("日",
"一",
"二",
"三",
"四",
"五",
"六",
"日");
// full month names
Calendar._MN = new Array
("一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月");
// short month names
Calendar._SMN = new Array
("一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "關於";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"日期選擇方法:\n" +
"- 使用 \xab, \xbb 按鈕可選擇年份\n" +
"- 使用 " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " 按鈕可選擇月份\n" +
"- 按住上面的按鈕可以加快選取";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"時間選擇方法:\n" +
"- 點擊任何的時間部份可增加其值\n" +
"- 同時按Shift鍵再點擊可減少其值\n" +
"- 點擊並拖曳可加快改變的值";
Calendar._TT["PREV_YEAR"] = "上一年 (按住選單)";
Calendar._TT["PREV_MONTH"] = "下一年 (按住選單)";
Calendar._TT["GO_TODAY"] = "到今日";
Calendar._TT["NEXT_MONTH"] = "上一月 (按住選單)";
Calendar._TT["NEXT_YEAR"] = "下一月 (按住選單)";
Calendar._TT["SEL_DATE"] = "選擇日期";
Calendar._TT["DRAG_TO_MOVE"] = "拖曳";
Calendar._TT["PART_TODAY"] = " (今日)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "將 %s 顯示在前";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "關閉";
Calendar._TT["TODAY"] = "今日";
Calendar._TT["TIME_PART"] = "點擊or拖曳可改變時間(同時按Shift為減)";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["WK"] = "週";
Calendar._TT["TIME"] = "Time:";

View File

@ -0,0 +1,108 @@
// ** I18N
// Calendar pt-BR language
// Author: Fernando Dourado, <fernando.dourado@ig.com.br>
// Encoding: any
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("Domingo",
"Segunda",
"Terça",
"Quarta",
"Quinta",
"Sexta",
"Sabádo",
"Domingo");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
// [No changes using default values]
// full month names
Calendar._MN = new Array
("Janeiro",
"Fevereiro",
"Março",
"Abril",
"Maio",
"Junho",
"Julho",
"Agosto",
"Setembro",
"Outubro",
"Novembro",
"Dezembro");
// short month names
// [No changes using default values]
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Sobre o calendário";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Translate to portuguese Brazil (pt-BR) by Fernando Dourado (fernando.dourado@ig.com.br)\n" +
"Tradução para o português Brasil (pt-BR) por Fernando Dourado (fernando.dourado@ig.com.br)" +
"\n\n" +
"Selecionar data:\n" +
"- Use as teclas \xab, \xbb para selecionar o ano\n" +
"- Use as teclas " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para selecionar o mês\n" +
"- Clique e segure com o mouse em qualquer botão para selecionar rapidamente.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Selecionar hora:\n" +
"- Clique em qualquer uma das partes da hora para aumentar\n" +
"- ou Shift-clique para diminuir\n" +
"- ou clique e arraste para selecionar rapidamente.";
Calendar._TT["PREV_YEAR"] = "Ano anterior (clique e segure para menu)";
Calendar._TT["PREV_MONTH"] = "Mês anterior (clique e segure para menu)";
Calendar._TT["GO_TODAY"] = "Ir para a data atual";
Calendar._TT["NEXT_MONTH"] = "Próximo mês (clique e segure para menu)";
Calendar._TT["NEXT_YEAR"] = "Próximo ano (clique e segure para menu)";
Calendar._TT["SEL_DATE"] = "Selecione uma data";
Calendar._TT["DRAG_TO_MOVE"] = "Clique e segure para mover";
Calendar._TT["PART_TODAY"] = " (hoje)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Exibir %s primeiro";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Fechar";
Calendar._TT["TODAY"] = "Hoje";
Calendar._TT["TIME_PART"] = "(Shift-)Clique ou arraste para mudar o valor";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y";
Calendar._TT["TT_DATE_FORMAT"] = "%d de %B de %Y";
Calendar._TT["WK"] = "sem";
Calendar._TT["TIME"] = "Hora:";

View File

@ -0,0 +1,123 @@
// ** I18N
// Calendar CA language
// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
// Encoding: any
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("Diumenge",
"Dilluns",
"Dimarts",
"Dimecres",
"Dijous",
"Divendres",
"Dissabte",
"Diumenge");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("Diu",
"Dil",
"Dmt",
"Dmc",
"Dij",
"Div",
"Dis",
"Diu");
// full month names
Calendar._MN = new Array
("Gener",
"Febrer",
"Març",
"Abril",
"Maig",
"Juny",
"Juliol",
"Agost",
"Setembre",
"Octubre",
"Novembre",
"Desembre");
// short month names
Calendar._SMN = new Array
("Gen",
"Feb",
"Mar",
"Abr",
"Mai",
"Jun",
"Jul",
"Ago",
"Set",
"Oct",
"Nov",
"Des");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Sobre el calendari";
Calendar._TT["ABOUT"] =
"DHTML Selector de Data/Hora\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Sel.lecció de Dates:\n" +
"- Fes servir els botons \xab, \xbb per sel.leccionar l'any\n" +
"- Fes servir els botons " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " per se.lecciconar el mes\n" +
"- Manté el ratolí apretat en qualsevol dels anteriors per sel.lecció ràpida.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Time selection:\n" +
"- claca en qualsevol de les parts de la hora per augmentar-les\n" +
"- o Shift-click per decrementar-la\n" +
"- or click and arrastra per sel.lecció ràpida.";
Calendar._TT["PREV_YEAR"] = "Any anterior (Mantenir per menu)";
Calendar._TT["PREV_MONTH"] = "Mes anterior (Mantenir per menu)";
Calendar._TT["GO_TODAY"] = "Anar a avui";
Calendar._TT["NEXT_MONTH"] = "Mes següent (Mantenir per menu)";
Calendar._TT["NEXT_YEAR"] = "Any següent (Mantenir per menu)";
Calendar._TT["SEL_DATE"] = "Sel.leccionar data";
Calendar._TT["DRAG_TO_MOVE"] = "Arrastrar per moure";
Calendar._TT["PART_TODAY"] = " (avui)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Mostra %s primer";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Tanca";
Calendar._TT["TODAY"] = "Avui";
Calendar._TT["TIME_PART"] = "(Shift-)Click a arrastra per canviar el valor";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["WK"] = "st";
Calendar._TT["TIME"] = "Hora:";

View File

@ -0,0 +1,65 @@
/*
calendar-cs-win.js
language: Czech
encoding: windows-1250
author: Lubos Jerabek (xnet@seznam.cz)
Jan Uhlir (espinosa@centrum.cz)
*/
// ** I18N
Calendar._DN = new Array('Neděle','Pondělí','Úterý','Středa','Čtvrtek','Pátek','Sobota','Neděle');
Calendar._SDN = new Array('Ne','Po','Út','St','Čt','Pá','So','Ne');
Calendar._MN = new Array('Leden','Únor','Březen','Duben','Květen','Červen','Červenec','Srpen','Září','Říjen','Listopad','Prosinec');
Calendar._SMN = new Array('Led','Úno','Bře','Dub','Kvě','Črv','Čvc','Srp','Zář','Říj','Lis','Pro');
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "O komponentě kalendář";
Calendar._TT["TOGGLE"] = "Změna prvního dne v týdnu";
Calendar._TT["PREV_YEAR"] = "Předchozí rok (přidrž pro menu)";
Calendar._TT["PREV_MONTH"] = "Předchozí měsíc (přidrž pro menu)";
Calendar._TT["GO_TODAY"] = "Dnešní datum";
Calendar._TT["NEXT_MONTH"] = "Další měsíc (přidrž pro menu)";
Calendar._TT["NEXT_YEAR"] = "Další rok (přidrž pro menu)";
Calendar._TT["SEL_DATE"] = "Vyber datum";
Calendar._TT["DRAG_TO_MOVE"] = "Chyť a táhni, pro přesun";
Calendar._TT["PART_TODAY"] = " (dnes)";
Calendar._TT["MON_FIRST"] = "Ukaž jako první Pondělí";
//Calendar._TT["SUN_FIRST"] = "Ukaž jako první Neděli";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Výběr datumu:\n" +
"- Use the \xab, \xbb buttons to select year\n" +
"- Použijte tlačítka " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " k výběru měsíce\n" +
"- Podržte tlačítko myši na jakémkoliv z těch tlačítek pro rychlejší výběr.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Výběr času:\n" +
"- Klikněte na jakoukoliv z částí výběru času pro zvýšení.\n" +
"- nebo Shift-click pro snížení\n" +
"- nebo klikněte a táhněte pro rychlejší výběr.";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Zobraz %s první";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Zavřít";
Calendar._TT["TODAY"] = "Dnes";
Calendar._TT["TIME_PART"] = "(Shift-)Klikni nebo táhni pro změnu hodnoty";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "d.m.yy";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["WK"] = "wk";
Calendar._TT["TIME"] = "Čas:";

View File

@ -0,0 +1,65 @@
/*
calendar-cs-win.js
language: Czech
encoding: windows-1250
author: Lubos Jerabek (xnet@seznam.cz)
Jan Uhlir (espinosa@centrum.cz)
*/
// ** I18N
Calendar._DN = new Array('Nedìle','Pondìlí','Úterý','Støeda','Ètvrtek','Pátek','Sobota','Nedìle');
Calendar._SDN = new Array('Ne','Po','Út','St','Èt','Pá','So','Ne');
Calendar._MN = new Array('Leden','Únor','Bøezen','Duben','Kvìten','Èerven','Èervenec','Srpen','Záøí','Øíjen','Listopad','Prosinec');
Calendar._SMN = new Array('Led','Úno','Bøe','Dub','Kvì','Èrv','Èvc','Srp','Záø','Øíj','Lis','Pro');
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "O komponentì kalendáø";
Calendar._TT["TOGGLE"] = "Zmìna prvního dne v týdnu";
Calendar._TT["PREV_YEAR"] = "Pøedchozí rok (pøidrž pro menu)";
Calendar._TT["PREV_MONTH"] = "Pøedchozí mìsíc (pøidrž pro menu)";
Calendar._TT["GO_TODAY"] = "Dnešní datum";
Calendar._TT["NEXT_MONTH"] = "Další mìsíc (pøidrž pro menu)";
Calendar._TT["NEXT_YEAR"] = "Další rok (pøidrž pro menu)";
Calendar._TT["SEL_DATE"] = "Vyber datum";
Calendar._TT["DRAG_TO_MOVE"] = "Chy<68> a táhni, pro pøesun";
Calendar._TT["PART_TODAY"] = " (dnes)";
Calendar._TT["MON_FIRST"] = "Ukaž jako první Pondìlí";
//Calendar._TT["SUN_FIRST"] = "Ukaž jako první Nedìli";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Výbìr datumu:\n" +
"- Use the \xab, \xbb buttons to select year\n" +
"- Použijte tlaèítka " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " k výbìru mìsíce\n" +
"- Podržte tlaèítko myši na jakémkoliv z tìch tlaèítek pro rychlejší výbìr.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Výbìr èasu:\n" +
"- Kliknìte na jakoukoliv z èástí výbìru èasu pro zvýšení.\n" +
"- nebo Shift-click pro snížení\n" +
"- nebo kliknìte a táhnìte pro rychlejší výbìr.";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Zobraz %s první";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Zavøít";
Calendar._TT["TODAY"] = "Dnes";
Calendar._TT["TIME_PART"] = "(Shift-)Klikni nebo táhni pro zmìnu hodnoty";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "d.m.yy";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["WK"] = "wk";
Calendar._TT["TIME"] = "Èas:";

View File

@ -0,0 +1,123 @@
// ** I18N
// Calendar DA language
// Author: Michael Thingmand Henriksen, <michael (a) thingmand dot dk>
// Encoding: any
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("Søndag",
"Mandag",
"Tirsdag",
"Onsdag",
"Torsdag",
"Fredag",
"Lørdag",
"Søndag");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("Søn",
"Man",
"Tir",
"Ons",
"Tor",
"Fre",
"Lør",
"Søn");
// full month names
Calendar._MN = new Array
("Januar",
"Februar",
"Marts",
"April",
"Maj",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"December");
// short month names
Calendar._SMN = new Array
("Jan",
"Feb",
"Mar",
"Apr",
"Maj",
"Jun",
"Jul",
"Aug",
"Sep",
"Okt",
"Nov",
"Dec");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Om Kalenderen";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For den seneste version besøg: http://www.dynarch.com/projects/calendar/\n"; +
"Distribueret under GNU LGPL. Se http://gnu.org/licenses/lgpl.html for detajler." +
"\n\n" +
"Valg af dato:\n" +
"- Brug \xab, \xbb knapperne for at vælge år\n" +
"- Brug " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " knapperne for at vælge måned\n" +
"- Hold knappen på musen nede på knapperne ovenfor for hurtigere valg.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Valg af tid:\n" +
"- Klik på en vilkårlig del for større værdi\n" +
"- eller Shift-klik for for mindre værdi\n" +
"- eller klik og træk for hurtigere valg.";
Calendar._TT["PREV_YEAR"] = "Ét år tilbage (hold for menu)";
Calendar._TT["PREV_MONTH"] = "Én måned tilbage (hold for menu)";
Calendar._TT["GO_TODAY"] = "Gå til i dag";
Calendar._TT["NEXT_MONTH"] = "Én måned frem (hold for menu)";
Calendar._TT["NEXT_YEAR"] = "Ét år frem (hold for menu)";
Calendar._TT["SEL_DATE"] = "Vælg dag";
Calendar._TT["DRAG_TO_MOVE"] = "Træk vinduet";
Calendar._TT["PART_TODAY"] = " (i dag)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Vis %s først";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Luk";
Calendar._TT["TODAY"] = "I dag";
Calendar._TT["TIME_PART"] = "(Shift-)klik eller træk for at ændre værdi";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["WK"] = "Uge";
Calendar._TT["TIME"] = "Tid:";

View File

@ -0,0 +1,124 @@
// ** I18N
// Calendar DE language
// Author: Jack (tR), <jack@jtr.de>
// Encoding: any
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("Sonntag",
"Montag",
"Dienstag",
"Mittwoch",
"Donnerstag",
"Freitag",
"Samstag",
"Sonntag");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("So",
"Mo",
"Di",
"Mi",
"Do",
"Fr",
"Sa",
"So");
// full month names
Calendar._MN = new Array
("Januar",
"Februar",
"M\u00e4rz",
"April",
"Mai",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"Dezember");
// short month names
Calendar._SMN = new Array
("Jan",
"Feb",
"M\u00e4r",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Okt",
"Nov",
"Dez");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "\u00DCber dieses Kalendarmodul";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this ;-)
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Datum ausw\u00e4hlen:\n" +
"- Benutzen Sie die \xab, \xbb Buttons um das Jahr zu w\u00e4hlen\n" +
"- Benutzen Sie die " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " Buttons um den Monat zu w\u00e4hlen\n" +
"- F\u00fcr eine Schnellauswahl halten Sie die Maustaste \u00fcber diesen Buttons fest.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Zeit ausw\u00e4hlen:\n" +
"- Klicken Sie auf die Teile der Uhrzeit, um diese zu erh\u00F6hen\n" +
"- oder klicken Sie mit festgehaltener Shift-Taste um diese zu verringern\n" +
"- oder klicken und festhalten f\u00fcr Schnellauswahl.";
Calendar._TT["TOGGLE"] = "Ersten Tag der Woche w\u00e4hlen";
Calendar._TT["PREV_YEAR"] = "Voriges Jahr (Festhalten f\u00fcr Schnellauswahl)";
Calendar._TT["PREV_MONTH"] = "Voriger Monat (Festhalten f\u00fcr Schnellauswahl)";
Calendar._TT["GO_TODAY"] = "Heute ausw\u00e4hlen";
Calendar._TT["NEXT_MONTH"] = "N\u00e4chst. Monat (Festhalten f\u00fcr Schnellauswahl)";
Calendar._TT["NEXT_YEAR"] = "N\u00e4chst. Jahr (Festhalten f\u00fcr Schnellauswahl)";
Calendar._TT["SEL_DATE"] = "Datum ausw\u00e4hlen";
Calendar._TT["DRAG_TO_MOVE"] = "Zum Bewegen festhalten";
Calendar._TT["PART_TODAY"] = " (Heute)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Woche beginnt mit %s ";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Schlie\u00dfen";
Calendar._TT["TODAY"] = "Heute";
Calendar._TT["TIME_PART"] = "(Shift-)Klick oder Festhalten und Ziehen um den Wert zu \u00e4ndern";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%d.%m.%Y";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["WK"] = "wk";
Calendar._TT["TIME"] = "Zeit:";

View File

@ -0,0 +1,45 @@
// ** I18N
Calendar._DN = new Array
("Zondag",
"Maandag",
"Dinsdag",
"Woensdag",
"Donderdag",
"Vrijdag",
"Zaterdag",
"Zondag");
Calendar._MN = new Array
("Januari",
"Februari",
"Maart",
"April",
"Mei",
"Juni",
"Juli",
"Augustus",
"September",
"Oktober",
"November",
"December");
// tooltips
Calendar._TT = {};
Calendar._TT["TOGGLE"] = "Toggle startdag van de week";
Calendar._TT["PREV_YEAR"] = "Vorig jaar (indrukken voor menu)";
Calendar._TT["PREV_MONTH"] = "Vorige month (indrukken voor menu)";
Calendar._TT["GO_TODAY"] = "Naar Vandaag";
Calendar._TT["NEXT_MONTH"] = "Volgende Maand (indrukken voor menu)";
Calendar._TT["NEXT_YEAR"] = "Volgend jaar (indrukken voor menu)";
Calendar._TT["SEL_DATE"] = "Selecteer datum";
Calendar._TT["DRAG_TO_MOVE"] = "Sleep om te verplaatsen";
Calendar._TT["PART_TODAY"] = " (vandaag)";
Calendar._TT["MON_FIRST"] = "Toon Maandag eerst";
Calendar._TT["SUN_FIRST"] = "Toon Zondag eerst";
Calendar._TT["CLOSE"] = "Sluiten";
Calendar._TT["TODAY"] = "Vandaag";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "y-mm-dd";
Calendar._TT["TT_DATE_FORMAT"] = "D, M d";
Calendar._TT["WK"] = "wk";

View File

@ -0,0 +1,89 @@
// ** I18N
Calendar._DN = new Array
("Κυριακή",
"Δευτέρα",
"Τρίτη",
"Τετάρτη",
"Πέμπτη",
"Παρασκευή",
"Σάββατο",
"Κυριακή");
Calendar._SDN = new Array
("Κυ",
"Δε",
"Tρ",
"Τε",
"Πε",
"Πα",
"Σα",
"Κυ");
Calendar._MN = new Array
("Ιανουάριος",
"Φεβρουάριος",
"Μάρτιος",
"Απρίλιος",
"Μάϊος",
"Ιούνιος",
"Ιούλιος",
"Αύγουστος",
"Σεπτέμβριος",
"Οκτώβριος",
"Νοέμβριος",
"Δεκέμβριος");
Calendar._SMN = new Array
("Ιαν",
"Φεβ",
"Μαρ",
"Απρ",
"Μαι",
"Ιουν",
"Ιουλ",
"Αυγ",
"Σεπ",
"Οκτ",
"Νοε",
"Δεκ");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Για το ημερολόγιο";
Calendar._TT["ABOUT"] =
"Επιλογέας ημερομηνίας/ώρας σε DHTML\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"Για τελευταία έκδοση: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Επιλογή ημερομηνίας:\n" +
"- Χρησιμοποιείστε τα κουμπιά \xab, \xbb για επιλογή έτους\n" +
"- Χρησιμοποιείστε τα κουμπιά " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " για επιλογή μήνα\n" +
"- Κρατήστε κουμπί ποντικού πατημένο στα παραπάνω κουμπιά για πιο γρήγορη επιλογή.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Επιλογή ώρας:\n" +
"- Κάντε κλικ σε ένα από τα μέρη της ώρας για αύξηση\n" +
"- ή Shift-κλικ για μείωση\n" +
"- ή κλικ και μετακίνηση για πιο γρήγορη επιλογή.";
Calendar._TT["TOGGLE"] = "Μπάρα πρώτης ημέρας της εβδομάδας";
Calendar._TT["PREV_YEAR"] = "Προηγ. έτος (κρατήστε για το μενού)";
Calendar._TT["PREV_MONTH"] = "Προηγ. μήνας (κρατήστε για το μενού)";
Calendar._TT["GO_TODAY"] = "Σήμερα";
Calendar._TT["NEXT_MONTH"] = "Επόμενος μήνας (κρατήστε για το μενού)";
Calendar._TT["NEXT_YEAR"] = "Επόμενο έτος (κρατήστε για το μενού)";
Calendar._TT["SEL_DATE"] = "Επιλέξτε ημερομηνία";
Calendar._TT["DRAG_TO_MOVE"] = "Σύρτε για να μετακινήσετε";
Calendar._TT["PART_TODAY"] = " (σήμερα)";
Calendar._TT["MON_FIRST"] = "Εμφάνιση Δευτέρας πρώτα";
Calendar._TT["SUN_FIRST"] = "Εμφάνιση Κυριακής πρώτα";
Calendar._TT["CLOSE"] = "Κλείσιμο";
Calendar._TT["TODAY"] = "Σήμερα";
Calendar._TT["TIME_PART"] = "(Shift-)κλικ ή μετακίνηση για αλλαγή";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y";
Calendar._TT["TT_DATE_FORMAT"] = "D, d M";
Calendar._TT["WK"] = "εβδ";

View File

@ -0,0 +1,127 @@
// ** I18N
// Calendar EN language
// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
// Encoding: any
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("Sun",
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat",
"Sun");
// First day of the week. "0" means display Sunday first, "1" means display
// Monday first, etc.
Calendar._FD = 0;
// full month names
Calendar._MN = new Array
("January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December");
// short month names
Calendar._SMN = new Array
("Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "About the calendar";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Date selection:\n" +
"- Use the \xab, \xbb buttons to select year\n" +
"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" +
"- Hold mouse button on any of the above buttons for faster selection.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Time selection:\n" +
"- Click on any of the time parts to increase it\n" +
"- or Shift-click to decrease it\n" +
"- or click and drag for faster selection.";
Calendar._TT["PREV_YEAR"] = "Prev. year (hold for menu)";
Calendar._TT["PREV_MONTH"] = "Prev. month (hold for menu)";
Calendar._TT["GO_TODAY"] = "Go Today";
Calendar._TT["NEXT_MONTH"] = "Next month (hold for menu)";
Calendar._TT["NEXT_YEAR"] = "Next year (hold for menu)";
Calendar._TT["SEL_DATE"] = "Select date";
Calendar._TT["DRAG_TO_MOVE"] = "Drag to move";
Calendar._TT["PART_TODAY"] = " (today)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Display %s first";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Close";
Calendar._TT["TODAY"] = "Today";
Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["WK"] = "wk";
Calendar._TT["TIME"] = "Time:";

View File

@ -0,0 +1,129 @@
// ** I18N
// Calendar ES (spanish) language
// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
// Updater: Servilio Afre Puentes <servilios@yahoo.com>
// Updated: 2004-06-03
// Encoding: utf-8
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("Domingo",
"Lunes",
"Martes",
"Miércoles",
"Jueves",
"Viernes",
"Sábado",
"Domingo");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("Dom",
"Lun",
"Mar",
"Mié",
"Jue",
"Vie",
"Sáb",
"Dom");
// First day of the week. "0" means display Sunday first, "1" means display
// Monday first, etc.
Calendar._FD = 1;
// full month names
Calendar._MN = new Array
("Enero",
"Febrero",
"Marzo",
"Abril",
"Mayo",
"Junio",
"Julio",
"Agosto",
"Septiembre",
"Octubre",
"Noviembre",
"Diciembre");
// short month names
Calendar._SMN = new Array
("Ene",
"Feb",
"Mar",
"Abr",
"May",
"Jun",
"Jul",
"Ago",
"Sep",
"Oct",
"Nov",
"Dic");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Acerca del calendario";
Calendar._TT["ABOUT"] =
"Selector DHTML de Fecha/Hora\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"Para conseguir la última versión visite: http://www.dynarch.com/projects/calendar/\n" +
"Distribuido bajo licencia GNU LGPL. Visite http://gnu.org/licenses/lgpl.html para más detalles." +
"\n\n" +
"Selección de fecha:\n" +
"- Use los botones \xab, \xbb para seleccionar el año\n" +
"- Use los botones " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para seleccionar el mes\n" +
"- Mantenga pulsado el ratón en cualquiera de estos botones para una selección rápida.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Selección de hora:\n" +
"- Pulse en cualquiera de las partes de la hora para incrementarla\n" +
"- o pulse las mayúsculas mientras hace clic para decrementarla\n" +
"- o haga clic y arrastre el ratón para una selección más rápida.";
Calendar._TT["PREV_YEAR"] = "Año anterior (mantener para menú)";
Calendar._TT["PREV_MONTH"] = "Mes anterior (mantener para menú)";
Calendar._TT["GO_TODAY"] = "Ir a hoy";
Calendar._TT["NEXT_MONTH"] = "Mes siguiente (mantener para menú)";
Calendar._TT["NEXT_YEAR"] = "Año siguiente (mantener para menú)";
Calendar._TT["SEL_DATE"] = "Seleccionar fecha";
Calendar._TT["DRAG_TO_MOVE"] = "Arrastrar para mover";
Calendar._TT["PART_TODAY"] = " (hoy)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Hacer %s primer día de la semana";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Cerrar";
Calendar._TT["TODAY"] = "Hoy";
Calendar._TT["TIME_PART"] = "(Mayúscula-)Clic o arrastre para cambiar valor";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y";
Calendar._TT["TT_DATE_FORMAT"] = "%A, %e de %B de %Y";
Calendar._TT["WK"] = "sem";
Calendar._TT["TIME"] = "Hora:";

View File

@ -0,0 +1,98 @@
// ** I18N
// Calendar FI language (Finnish, Suomi)
// Author: Jarno Käyhkö, <gambler@phnet.fi>
// Encoding: UTF-8
// Distributed under the same terms as the calendar itself.
// full day names
Calendar._DN = new Array
("Sunnuntai",
"Maanantai",
"Tiistai",
"Keskiviikko",
"Torstai",
"Perjantai",
"Lauantai",
"Sunnuntai");
// short day names
Calendar._SDN = new Array
("Su",
"Ma",
"Ti",
"Ke",
"To",
"Pe",
"La",
"Su");
// full month names
Calendar._MN = new Array
("Tammikuu",
"Helmikuu",
"Maaliskuu",
"Huhtikuu",
"Toukokuu",
"Kesäkuu",
"Heinäkuu",
"Elokuu",
"Syyskuu",
"Lokakuu",
"Marraskuu",
"Joulukuu");
// short month names
Calendar._SMN = new Array
("Tam",
"Hel",
"Maa",
"Huh",
"Tou",
"Kes",
"Hei",
"Elo",
"Syy",
"Lok",
"Mar",
"Jou");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Tietoja kalenterista";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"Uusin versio osoitteessa: http://www.dynarch.com/projects/calendar/\n" +
"Julkaistu GNU LGPL lisenssin alaisuudessa. Lisätietoja osoitteessa http://gnu.org/licenses/lgpl.html" +
"\n\n" +
"Päivämäärä valinta:\n" +
"- Käytä \xab, \xbb painikkeita valitaksesi vuosi\n" +
"- Käytä " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " painikkeita valitaksesi kuukausi\n" +
"- Pitämällä hiiren painiketta minkä tahansa yllä olevan painikkeen kohdalla, saat näkyviin valikon nopeampaan siirtymiseen.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Ajan valinta:\n" +
"- Klikkaa kellonajan numeroita lisätäksesi aikaa\n" +
"- tai pitämällä Shift-näppäintä pohjassa saat aikaa taaksepäin\n" +
"- tai klikkaa ja pidä hiiren painike pohjassa sekä liikuta hiirtä muuttaaksesi aikaa nopeasti eteen- ja taaksepäin.";
Calendar._TT["PREV_YEAR"] = "Edell. vuosi (paina hetki, näet valikon)";
Calendar._TT["PREV_MONTH"] = "Edell. kuukausi (paina hetki, näet valikon)";
Calendar._TT["GO_TODAY"] = "Siirry tähän päivään";
Calendar._TT["NEXT_MONTH"] = "Seur. kuukausi (paina hetki, näet valikon)";
Calendar._TT["NEXT_YEAR"] = "Seur. vuosi (paina hetki, näet valikon)";
Calendar._TT["SEL_DATE"] = "Valitse päivämäärä";
Calendar._TT["DRAG_TO_MOVE"] = "Siirrä kalenterin paikkaa";
Calendar._TT["PART_TODAY"] = " (tänään)";
Calendar._TT["MON_FIRST"] = "Näytä maanantai ensimmäisenä";
Calendar._TT["SUN_FIRST"] = "Näytä sunnuntai ensimmäisenä";
Calendar._TT["CLOSE"] = "Sulje";
Calendar._TT["TODAY"] = "Tänään";
Calendar._TT["TIME_PART"] = "(Shift-) Klikkaa tai liikuta muuttaaksesi aikaa";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%d.%m.%Y";
Calendar._TT["TT_DATE_FORMAT"] = "%d.%m.%Y";
Calendar._TT["WK"] = "Vko";

View File

@ -0,0 +1,125 @@
// ** I18N
// Calendar EN language
// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
// Encoding: any
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// Translator: David Duret, <pilgrim@mala-template.net> from previous french version
// full day names
Calendar._DN = new Array
("Dimanche",
"Lundi",
"Mardi",
"Mercredi",
"Jeudi",
"Vendredi",
"Samedi",
"Dimanche");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("Dim",
"Lun",
"Mar",
"Mar",
"Jeu",
"Ven",
"Sam",
"Dim");
// full month names
Calendar._MN = new Array
("Janvier",
"Février",
"Mars",
"Avril",
"Mai",
"Juin",
"Juillet",
"Août",
"Septembre",
"Octobre",
"Novembre",
"Décembre");
// short month names
Calendar._SMN = new Array
("Jan",
"Fev",
"Mar",
"Avr",
"Mai",
"Juin",
"Juil",
"Aout",
"Sep",
"Oct",
"Nov",
"Dec");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "A propos du calendrier";
Calendar._TT["ABOUT"] =
"DHTML Date/Heure Selecteur\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"Pour la derniere version visitez : http://www.dynarch.com/projects/calendar/\n" +
"Distribué par GNU LGPL. Voir http://gnu.org/licenses/lgpl.html pour les details." +
"\n\n" +
"Selection de la date :\n" +
"- Utiliser les bouttons \xab, \xbb pour selectionner l\'annee\n" +
"- Utiliser les bouttons " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " pour selectionner les mois\n" +
"- Garder la souris sur n'importe quels boutons pour une selection plus rapide";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Selection de l\'heure :\n" +
"- Cliquer sur heures ou minutes pour incrementer\n" +
"- ou Maj-clic pour decrementer\n" +
"- ou clic et glisser-deplacer pour une selection plus rapide";
Calendar._TT["PREV_YEAR"] = "Année préc. (maintenir pour menu)";
Calendar._TT["PREV_MONTH"] = "Mois préc. (maintenir pour menu)";
Calendar._TT["GO_TODAY"] = "Atteindre la date du jour";
Calendar._TT["NEXT_MONTH"] = "Mois suiv. (maintenir pour menu)";
Calendar._TT["NEXT_YEAR"] = "Année suiv. (maintenir pour menu)";
Calendar._TT["SEL_DATE"] = "Sélectionner une date";
Calendar._TT["DRAG_TO_MOVE"] = "Déplacer";
Calendar._TT["PART_TODAY"] = " (Aujourd'hui)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Afficher %s en premier";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Fermer";
Calendar._TT["TODAY"] = "Aujourd'hui";
Calendar._TT["TIME_PART"] = "(Maj-)Clic ou glisser pour modifier la valeur";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["WK"] = "Sem.";
Calendar._TT["TIME"] = "Heure :";

View File

@ -0,0 +1,123 @@
// ** I18N
// Calendar EN language
// Author: Idan Sofer, <idan@idanso.dyndns.org>
// Encoding: UTF-8
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("ראשון",
"שני",
"שלישי",
"רביעי",
"חמישי",
"שישי",
"שבת",
"ראשון");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("א",
"ב",
"ג",
"ד",
"ה",
"ו",
"ש",
"א");
// full month names
Calendar._MN = new Array
("ינואר",
"פברואר",
"מרץ",
"אפריל",
"מאי",
"יוני",
"יולי",
"אוגוסט",
"ספטמבר",
"אוקטובר",
"נובמבר",
"דצמבר");
// short month names
Calendar._SMN = new Array
("ינא",
"פבר",
"מרץ",
"אפר",
"מאי",
"יונ",
"יול",
"אוג",
"ספט",
"אוק",
"נוב",
"דצמ");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "אודות השנתון";
Calendar._TT["ABOUT"] =
"בחרן תאריך/שעה DHTML\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"הגירסא האחרונה זמינה ב: http://www.dynarch.com/projects/calendar/\n" +
"מופץ תחת זיכיון ה GNU LGPL. עיין ב http://gnu.org/licenses/lgpl.html לפרטים נוספים." +
"\n\n" +
בחירת תאריך:\n" +
"- השתמש בכפתורים \xab, \xbb לבחירת שנה\n" +
"- השתמש בכפתורים " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " לבחירת חודש\n" +
"- החזק העכבר לחוץ מעל הכפתורים המוזכרים לעיל לבחירה מהירה יותר.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"בחירת זמן:\n" +
"- לחץ על כל אחד מחלקי הזמן כדי להוסיף\n" +
"- או shift בשילוב עם לחיצה כדי להחסיר\n" +
"- או לחץ וגרור לפעולה מהירה יותר.";
Calendar._TT["PREV_YEAR"] = "שנה קודמת - החזק לקבלת תפריט";
Calendar._TT["PREV_MONTH"] = "חודש קודם - החזק לקבלת תפריט";
Calendar._TT["GO_TODAY"] = "עבור להיום";
Calendar._TT["NEXT_MONTH"] = "חודש הבא - החזק לתפריט";
Calendar._TT["NEXT_YEAR"] = "שנה הבאה - החזק לתפריט";
Calendar._TT["SEL_DATE"] = "בחר תאריך";
Calendar._TT["DRAG_TO_MOVE"] = "גרור להזזה";
Calendar._TT["PART_TODAY"] = " )היום(";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "הצג %s קודם";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "6";
Calendar._TT["CLOSE"] = "סגור";
Calendar._TT["TODAY"] = "היום";
Calendar._TT["TIME_PART"] = "(שיפט-)לחץ וגרור כדי לשנות ערך";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["WK"] = "wk";
Calendar._TT["TIME"] = "שעה::";

View File

@ -0,0 +1,49 @@
/* Croatian language file for the DHTML Calendar version 0.9.2
* Author Krunoslav Zubrinic <krunoslav.zubrinic@vip.hr>, June 2003.
* Feel free to use this script under the terms of the GNU Lesser General
* Public License, as long as you do not remove or alter this notice.
*/
Calendar._DN = new Array
("Nedjelja",
"Ponedjeljak",
"Utorak",
"Srijeda",
"Četvrtak",
"Petak",
"Subota",
"Nedjelja");
Calendar._MN = new Array
("Siječanj",
"Veljača",
"Ožujak",
"Travanj",
"Svibanj",
"Lipanj",
"Srpanj",
"Kolovoz",
"Rujan",
"Listopad",
"Studeni",
"Prosinac");
// tooltips
Calendar._TT = {};
Calendar._TT["TOGGLE"] = "Promjeni dan s kojim počinje tjedan";
Calendar._TT["PREV_YEAR"] = "Prethodna godina (dugi pritisak za meni)";
Calendar._TT["PREV_MONTH"] = "Prethodni mjesec (dugi pritisak za meni)";
Calendar._TT["GO_TODAY"] = "Idi na tekući dan";
Calendar._TT["NEXT_MONTH"] = "Slijedeći mjesec (dugi pritisak za meni)";
Calendar._TT["NEXT_YEAR"] = "Slijedeća godina (dugi pritisak za meni)";
Calendar._TT["SEL_DATE"] = "Izaberite datum";
Calendar._TT["DRAG_TO_MOVE"] = "Pritisni i povuci za promjenu pozicije";
Calendar._TT["PART_TODAY"] = " (today)";
Calendar._TT["MON_FIRST"] = "Prikaži ponedjeljak kao prvi dan";
Calendar._TT["SUN_FIRST"] = "Prikaži nedjelju kao prvi dan";
Calendar._TT["CLOSE"] = "Zatvori";
Calendar._TT["TODAY"] = "Danas";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y";
Calendar._TT["TT_DATE_FORMAT"] = "DD, dd.mm.y";
Calendar._TT["WK"] = "Tje";

Binary file not shown.

View File

@ -0,0 +1,124 @@
// ** I18N
// Calendar HU language
// Author: ???
// Modifier: KARASZI Istvan, <jscalendar@spam.raszi.hu>
// Encoding: any
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("Vasárnap",
"Hétfõ",
"Kedd",
"Szerda",
"Csütörtök",
"Péntek",
"Szombat",
"Vasárnap");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("v",
"h",
"k",
"sze",
"cs",
"p",
"szo",
"v");
// full month names
Calendar._MN = new Array
("január",
"február",
"március",
"április",
"május",
"június",
"július",
"augusztus",
"szeptember",
"október",
"november",
"december");
// short month names
Calendar._SMN = new Array
("jan",
"feb",
"már",
"ápr",
"máj",
"jún",
"júl",
"aug",
"sze",
"okt",
"nov",
"dec");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "A kalendáriumról";
Calendar._TT["ABOUT"] =
"DHTML dátum/idõ kiválasztó\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"a legfrissebb verzió megtalálható: http://www.dynarch.com/projects/calendar/\n" +
"GNU LGPL alatt terjesztve. Lásd a http://gnu.org/licenses/lgpl.html oldalt a részletekhez." +
"\n\n" +
"Dátum választás:\n" +
"- használja a \xab, \xbb gombokat az év kiválasztásához\n" +
"- használja a " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " gombokat a hónap kiválasztásához\n" +
"- tartsa lenyomva az egérgombot a gyors választáshoz.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Idõ választás:\n" +
"- kattintva növelheti az idõt\n" +
"- shift-tel kattintva csökkentheti\n" +
"- lenyomva tartva és húzva gyorsabban kiválaszthatja.";
Calendar._TT["PREV_YEAR"] = "Elõzõ év (tartsa nyomva a menühöz)";
Calendar._TT["PREV_MONTH"] = "Elõzõ hónap (tartsa nyomva a menühöz)";
Calendar._TT["GO_TODAY"] = "Mai napra ugrás";
Calendar._TT["NEXT_MONTH"] = "Köv. hónap (tartsa nyomva a menühöz)";
Calendar._TT["NEXT_YEAR"] = "Köv. év (tartsa nyomva a menühöz)";
Calendar._TT["SEL_DATE"] = "Válasszon dátumot";
Calendar._TT["DRAG_TO_MOVE"] = "Húzza a mozgatáshoz";
Calendar._TT["PART_TODAY"] = " (ma)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "%s legyen a hét elsõ napja";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Bezár";
Calendar._TT["TODAY"] = "Ma";
Calendar._TT["TIME_PART"] = "(Shift-)Klikk vagy húzás az érték változtatásához";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%b %e, %a";
Calendar._TT["WK"] = "hét";
Calendar._TT["TIME"] = "idõ:";

View File

@ -0,0 +1,124 @@
// ** I18N
// Calendar EN language
// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
// Translator: Fabio Di Bernardini, <altraqua@email.it>
// Encoding: any
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("Domenica",
"Lunedì",
"Martedì",
"Mercoledì",
"Giovedì",
"Venerdì",
"Sabato",
"Domenica");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("Dom",
"Lun",
"Mar",
"Mer",
"Gio",
"Ven",
"Sab",
"Dom");
// full month names
Calendar._MN = new Array
("Gennaio",
"Febbraio",
"Marzo",
"Aprile",
"Maggio",
"Giugno",
"Luglio",
"Augosto",
"Settembre",
"Ottobre",
"Novembre",
"Dicembre");
// short month names
Calendar._SMN = new Array
("Gen",
"Feb",
"Mar",
"Apr",
"Mag",
"Giu",
"Lug",
"Ago",
"Set",
"Ott",
"Nov",
"Dic");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Informazioni sul calendario";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"Per gli aggiornamenti: http://www.dynarch.com/projects/calendar/\n" +
"Distribuito sotto licenza GNU LGPL. Vedi http://gnu.org/licenses/lgpl.html per i dettagli." +
"\n\n" +
"Selezione data:\n" +
"- Usa \xab, \xbb per selezionare l'anno\n" +
"- Usa " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " per i mesi\n" +
"- Tieni premuto a lungo il mouse per accedere alle funzioni di selezione veloce.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Selezione orario:\n" +
"- Clicca sul numero per incrementarlo\n" +
"- o Shift+click per decrementarlo\n" +
"- o click e sinistra o destra per variarlo.";
Calendar._TT["PREV_YEAR"] = "Anno prec.(clicca a lungo per il menù)";
Calendar._TT["PREV_MONTH"] = "Mese prec. (clicca a lungo per il menù)";
Calendar._TT["GO_TODAY"] = "Oggi";
Calendar._TT["NEXT_MONTH"] = "Pross. mese (clicca a lungo per il menù)";
Calendar._TT["NEXT_YEAR"] = "Pross. anno (clicca a lungo per il menù)";
Calendar._TT["SEL_DATE"] = "Seleziona data";
Calendar._TT["DRAG_TO_MOVE"] = "Trascina per spostarlo";
Calendar._TT["PART_TODAY"] = " (oggi)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Mostra prima %s";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Chiudi";
Calendar._TT["TODAY"] = "Oggi";
Calendar._TT["TIME_PART"] = "(Shift-)Click o trascina per cambiare il valore";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y";
Calendar._TT["TT_DATE_FORMAT"] = "%a:%b:%e";
Calendar._TT["WK"] = "set";
Calendar._TT["TIME"] = "Ora:";

View File

@ -0,0 +1,45 @@
// ** I18N
Calendar._DN = new Array
("日",
"月",
"火",
"水",
"木",
"金",
"土",
"日");
Calendar._MN = new Array
("1月",
"2月",
"3月",
"4月",
"5月",
"6月",
"7月",
"8月",
"9月",
"10月",
"11月",
"12月");
// tooltips
Calendar._TT = {};
Calendar._TT["TOGGLE"] = "週の最初の曜日を切り替え";
Calendar._TT["PREV_YEAR"] = "前年";
Calendar._TT["PREV_MONTH"] = "前月";
Calendar._TT["GO_TODAY"] = "今日";
Calendar._TT["NEXT_MONTH"] = "翌月";
Calendar._TT["NEXT_YEAR"] = "翌年";
Calendar._TT["SEL_DATE"] = "日付選択";
Calendar._TT["DRAG_TO_MOVE"] = "ウィンドウの移動";
Calendar._TT["PART_TODAY"] = " (今日)";
Calendar._TT["MON_FIRST"] = "月曜日を先頭に";
Calendar._TT["SUN_FIRST"] = "日曜日を先頭に";
Calendar._TT["CLOSE"] = "閉じる";
Calendar._TT["TODAY"] = "今日";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "y-mm-dd";
Calendar._TT["TT_DATE_FORMAT"] = "%m月 %d日 (%a)";
Calendar._TT["WK"] = "週";

View File

@ -0,0 +1,120 @@
// ** I18N
// Calendar EN language
// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
// Translation: Yourim Yi <yyi@yourim.net>
// Encoding: EUC-KR
// lang : ko
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("일요일",
"월요일",
"화요일",
"수요일",
"목요일",
"금요일",
"토요일",
"일요일");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("일",
"월",
"화",
"수",
"목",
"금",
"토",
"일");
// full month names
Calendar._MN = new Array
("1월",
"2월",
"3월",
"4월",
"5월",
"6월",
"7월",
"8월",
"9월",
"10월",
"11월",
"12월");
// short month names
Calendar._SMN = new Array
("1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "calendar 에 대해서";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"\n"+
"최신 버전을 받으시려면 http://www.dynarch.com/projects/calendar/ 에 방문하세요\n" +
"\n"+
"GNU LGPL 라이센스로 배포됩니다. \n"+
"라이센스에 대한 자세한 내용은 http://gnu.org/licenses/lgpl.html 을 읽으세요." +
"\n\n" +
"날짜 선택:\n" +
"- 연도를 선택하려면 \xab, \xbb 버튼을 사용합니다\n" +
"- 달을 선택하려면 " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " 버튼을 누르세요\n" +
"- 계속 누르고 있으면 위 값들을 빠르게 선택하실 수 있습니다.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"시간 선택:\n" +
"- 마우스로 누르면 시간이 증가합니다\n" +
"- Shift 키와 함께 누르면 감소합니다\n" +
"- 누른 상태에서 마우스를 움직이면 좀 더 빠르게 값이 변합니다.\n";
Calendar._TT["PREV_YEAR"] = "지난 해 (길게 누르면 목록)";
Calendar._TT["PREV_MONTH"] = "지난 달 (길게 누르면 목록)";
Calendar._TT["GO_TODAY"] = "오늘 날짜로";
Calendar._TT["NEXT_MONTH"] = "다음 달 (길게 누르면 목록)";
Calendar._TT["NEXT_YEAR"] = "다음 해 (길게 누르면 목록)";
Calendar._TT["SEL_DATE"] = "날짜를 선택하세요";
Calendar._TT["DRAG_TO_MOVE"] = "마우스 드래그로 이동 하세요";
Calendar._TT["PART_TODAY"] = " (오늘)";
Calendar._TT["MON_FIRST"] = "월요일을 한 주의 시작 요일로";
Calendar._TT["SUN_FIRST"] = "일요일을 한 주의 시작 요일로";
Calendar._TT["CLOSE"] = "닫기";
Calendar._TT["TODAY"] = "오늘";
Calendar._TT["TIME_PART"] = "(Shift-)클릭 또는 드래그 하세요";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%b/%e [%a]";
Calendar._TT["WK"] = "주";

View File

@ -0,0 +1,120 @@
// ** I18N
// Calendar EN language
// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
// Translation: Yourim Yi <yyi@yourim.net>
// Encoding: EUC-KR
// lang : ko
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("일요일",
"월요일",
"화요일",
"수요일",
"목요일",
"금요일",
"토요일",
"일요일");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("일",
"월",
"화",
"수",
"목",
"금",
"토",
"일");
// full month names
Calendar._MN = new Array
("1월",
"2월",
"3월",
"4월",
"5월",
"6월",
"7월",
"8월",
"9월",
"10월",
"11월",
"12월");
// short month names
Calendar._SMN = new Array
("1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "calendar 에 대해서";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"\n"+
"최신 버전을 받으시려면 http://www.dynarch.com/projects/calendar/ 에 방문하세요\n" +
"\n"+
"GNU LGPL 라이센스로 배포됩니다. \n"+
"라이센스에 대한 자세한 내용은 http://gnu.org/licenses/lgpl.html 을 읽으세요." +
"\n\n" +
"날짜 선택:\n" +
"- 연도를 선택하려면 \xab, \xbb 버튼을 사용합니다\n" +
"- 달을 선택하려면 " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " 버튼을 누르세요\n" +
"- 계속 누르고 있으면 위 값들을 빠르게 선택하실 수 있습니다.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"시간 선택:\n" +
"- 마우스로 누르면 시간이 증가합니다\n" +
"- Shift 키와 함께 누르면 감소합니다\n" +
"- 누른 상태에서 마우스를 움직이면 좀 더 빠르게 값이 변합니다.\n";
Calendar._TT["PREV_YEAR"] = "지난 해 (길게 누르면 목록)";
Calendar._TT["PREV_MONTH"] = "지난 달 (길게 누르면 목록)";
Calendar._TT["GO_TODAY"] = "오늘 날짜로";
Calendar._TT["NEXT_MONTH"] = "다음 달 (길게 누르면 목록)";
Calendar._TT["NEXT_YEAR"] = "다음 해 (길게 누르면 목록)";
Calendar._TT["SEL_DATE"] = "날짜를 선택하세요";
Calendar._TT["DRAG_TO_MOVE"] = "마우스 드래그로 이동 하세요";
Calendar._TT["PART_TODAY"] = " (오늘)";
Calendar._TT["MON_FIRST"] = "월요일을 한 주의 시작 요일로";
Calendar._TT["SUN_FIRST"] = "일요일을 한 주의 시작 요일로";
Calendar._TT["CLOSE"] = "닫기";
Calendar._TT["TODAY"] = "오늘";
Calendar._TT["TIME_PART"] = "(Shift-)클릭 또는 드래그 하세요";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%b/%e [%a]";
Calendar._TT["WK"] = "주";

View File

@ -0,0 +1,114 @@
// ** I18N
// Calendar LT language
// Author: Martynas Majeris, <martynas@solmetra.lt>
// Encoding: UTF-8
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("Sekmadienis",
"Pirmadienis",
"Antradienis",
"Trečiadienis",
"Ketvirtadienis",
"Pentadienis",
"Šeštadienis",
"Sekmadienis");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("Sek",
"Pir",
"Ant",
"Tre",
"Ket",
"Pen",
"Šeš",
"Sek");
// full month names
Calendar._MN = new Array
("Sausis",
"Vasaris",
"Kovas",
"Balandis",
"Gegužė",
"Birželis",
"Liepa",
"Rugpjūtis",
"Rugsėjis",
"Spalis",
"Lapkritis",
"Gruodis");
// short month names
Calendar._SMN = new Array
("Sau",
"Vas",
"Kov",
"Bal",
"Geg",
"Bir",
"Lie",
"Rgp",
"Rgs",
"Spa",
"Lap",
"Gru");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Apie kalendorių";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"Naujausią versiją rasite: http://www.dynarch.com/projects/calendar/\n" +
"Platinamas pagal GNU LGPL licenciją. Aplankykite http://gnu.org/licenses/lgpl.html" +
"\n\n" +
"Datos pasirinkimas:\n" +
"- Metų pasirinkimas: \xab, \xbb\n" +
"- Mėnesio pasirinkimas: " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + "\n" +
"- Nuspauskite ir laikykite pelės klavišą greitesniam pasirinkimui.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Laiko pasirinkimas:\n" +
"- Spustelkite ant valandų arba minučių - skaičius padidės vienetu.\n" +
"- Jei spausite kartu su Shift, skaičius sumažės.\n" +
"- Greitam pasirinkimui spustelkite ir pajudinkite pelę.";
Calendar._TT["PREV_YEAR"] = "Ankstesni metai (laikykite, jei norite meniu)";
Calendar._TT["PREV_MONTH"] = "Ankstesnis mėnuo (laikykite, jei norite meniu)";
Calendar._TT["GO_TODAY"] = "Pasirinkti šiandieną";
Calendar._TT["NEXT_MONTH"] = "Kitas mėnuo (laikykite, jei norite meniu)";
Calendar._TT["NEXT_YEAR"] = "Kiti metai (laikykite, jei norite meniu)";
Calendar._TT["SEL_DATE"] = "Pasirinkite datą";
Calendar._TT["DRAG_TO_MOVE"] = "Tempkite";
Calendar._TT["PART_TODAY"] = " (šiandien)";
Calendar._TT["MON_FIRST"] = "Pirma savaitės diena - pirmadienis";
Calendar._TT["SUN_FIRST"] = "Pirma savaitės diena - sekmadienis";
Calendar._TT["CLOSE"] = "Uždaryti";
Calendar._TT["TODAY"] = "Šiandien";
Calendar._TT["TIME_PART"] = "Spustelkite arba tempkite jei norite pakeisti";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%A, %Y-%m-%d";
Calendar._TT["WK"] = "sav";

View File

@ -0,0 +1,114 @@
// ** I18N
// Calendar LT language
// Author: Martynas Majeris, <martynas@solmetra.lt>
// Encoding: Windows-1257
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("Sekmadienis",
"Pirmadienis",
"Antradienis",
"Treèiadienis",
"Ketvirtadienis",
"Pentadienis",
"Ðeðtadienis",
"Sekmadienis");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("Sek",
"Pir",
"Ant",
"Tre",
"Ket",
"Pen",
"Ðeð",
"Sek");
// full month names
Calendar._MN = new Array
("Sausis",
"Vasaris",
"Kovas",
"Balandis",
"Geguþë",
"Birþelis",
"Liepa",
"Rugpjûtis",
"Rugsëjis",
"Spalis",
"Lapkritis",
"Gruodis");
// short month names
Calendar._SMN = new Array
("Sau",
"Vas",
"Kov",
"Bal",
"Geg",
"Bir",
"Lie",
"Rgp",
"Rgs",
"Spa",
"Lap",
"Gru");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Apie kalendoriø";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"Naujausià versijà rasite: http://www.dynarch.com/projects/calendar/\n" +
"Platinamas pagal GNU LGPL licencijà. Aplankykite http://gnu.org/licenses/lgpl.html" +
"\n\n" +
"Datos pasirinkimas:\n" +
"- Metø pasirinkimas: \xab, \xbb\n" +
"- Mënesio pasirinkimas: " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + "\n" +
"- Nuspauskite ir laikykite pelës klaviðà greitesniam pasirinkimui.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Laiko pasirinkimas:\n" +
"- Spustelkite ant valandø arba minuèiø - skaièus padidës vienetu.\n" +
"- Jei spausite kartu su Shift, skaièius sumaþës.\n" +
"- Greitam pasirinkimui spustelkite ir pajudinkite pelæ.";
Calendar._TT["PREV_YEAR"] = "Ankstesni metai (laikykite, jei norite meniu)";
Calendar._TT["PREV_MONTH"] = "Ankstesnis mënuo (laikykite, jei norite meniu)";
Calendar._TT["GO_TODAY"] = "Pasirinkti ðiandienà";
Calendar._TT["NEXT_MONTH"] = "Kitas mënuo (laikykite, jei norite meniu)";
Calendar._TT["NEXT_YEAR"] = "Kiti metai (laikykite, jei norite meniu)";
Calendar._TT["SEL_DATE"] = "Pasirinkite datà";
Calendar._TT["DRAG_TO_MOVE"] = "Tempkite";
Calendar._TT["PART_TODAY"] = " (ðiandien)";
Calendar._TT["MON_FIRST"] = "Pirma savaitës diena - pirmadienis";
Calendar._TT["SUN_FIRST"] = "Pirma savaitës diena - sekmadienis";
Calendar._TT["CLOSE"] = "Uþdaryti";
Calendar._TT["TODAY"] = "Ðiandien";
Calendar._TT["TIME_PART"] = "Spustelkite arba tempkite jei norite pakeisti";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%A, %Y-%m-%d";
Calendar._TT["WK"] = "sav";

View File

@ -0,0 +1,123 @@
// ** I18N
// Calendar LV language
// Author: Juris Valdovskis, <juris@dc.lv>
// Encoding: cp1257
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("Svçtdiena",
"Pirmdiena",
"Otrdiena",
"Treðdiena",
"Ceturdiena",
"Piektdiena",
"Sestdiena",
"Svçtdiena");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("Sv",
"Pr",
"Ot",
"Tr",
"Ce",
"Pk",
"Se",
"Sv");
// full month names
Calendar._MN = new Array
("Janvâris",
"Februâris",
"Marts",
"Aprîlis",
"Maijs",
"Jûnijs",
"Jûlijs",
"Augusts",
"Septembris",
"Oktobris",
"Novembris",
"Decembris");
// short month names
Calendar._SMN = new Array
("Jan",
"Feb",
"Mar",
"Apr",
"Mai",
"Jûn",
"Jûl",
"Aug",
"Sep",
"Okt",
"Nov",
"Dec");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Par kalendâru";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Datuma izvçle:\n" +
"- Izmanto \xab, \xbb pogas, lai izvçlçtos gadu\n" +
"- Izmanto " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + "pogas, lai izvçlçtos mçnesi\n" +
"- Turi nospiestu peles pogu uz jebkuru no augstâk minçtajâm pogâm, lai paâtrinâtu izvçli.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Laika izvçle:\n" +
"- Uzklikðíini uz jebkuru no laika daïâm, lai palielinâtu to\n" +
"- vai Shift-klikðíis, lai samazinâtu to\n" +
"- vai noklikðíini un velc uz attiecîgo virzienu lai mainîtu âtrâk.";
Calendar._TT["PREV_YEAR"] = "Iepr. gads (turi izvçlnei)";
Calendar._TT["PREV_MONTH"] = "Iepr. mçnesis (turi izvçlnei)";
Calendar._TT["GO_TODAY"] = "Ðodien";
Calendar._TT["NEXT_MONTH"] = "Nâkoðais mçnesis (turi izvçlnei)";
Calendar._TT["NEXT_YEAR"] = "Nâkoðais gads (turi izvçlnei)";
Calendar._TT["SEL_DATE"] = "Izvçlies datumu";
Calendar._TT["DRAG_TO_MOVE"] = "Velc, lai pârvietotu";
Calendar._TT["PART_TODAY"] = " (ðodien)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Attçlot %s kâ pirmo";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "1,7";
Calendar._TT["CLOSE"] = "Aizvçrt";
Calendar._TT["TODAY"] = "Ðodien";
Calendar._TT["TIME_PART"] = "(Shift-)Klikðíis vai pârvieto, lai mainîtu";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %e %b";
Calendar._TT["WK"] = "wk";
Calendar._TT["TIME"] = "Laiks:";

View File

@ -0,0 +1,73 @@
// ** I18N
Calendar._DN = new Array
("Zondag",
"Maandag",
"Dinsdag",
"Woensdag",
"Donderdag",
"Vrijdag",
"Zaterdag",
"Zondag");
Calendar._SDN_len = 2;
Calendar._MN = new Array
("Januari",
"Februari",
"Maart",
"April",
"Mei",
"Juni",
"Juli",
"Augustus",
"September",
"Oktober",
"November",
"December");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Info";
Calendar._TT["ABOUT"] =
"DHTML Datum/Tijd Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" +
"Ga voor de meest recente versie naar: http://www.dynarch.com/projects/calendar/\n" +
"Verspreid onder de GNU LGPL. Zie http://gnu.org/licenses/lgpl.html voor details." +
"\n\n" +
"Datum selectie:\n" +
"- Gebruik de \xab \xbb knoppen om een jaar te selecteren\n" +
"- Gebruik de " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " knoppen om een maand te selecteren\n" +
"- Houd de muis ingedrukt op de genoemde knoppen voor een snellere selectie.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Tijd selectie:\n" +
"- Klik op een willekeurig onderdeel van het tijd gedeelte om het te verhogen\n" +
"- of Shift-klik om het te verlagen\n" +
"- of klik en sleep voor een snellere selectie.";
//Calendar._TT["TOGGLE"] = "Selecteer de eerste week-dag";
Calendar._TT["PREV_YEAR"] = "Vorig jaar (ingedrukt voor menu)";
Calendar._TT["PREV_MONTH"] = "Vorige maand (ingedrukt voor menu)";
Calendar._TT["GO_TODAY"] = "Ga naar Vandaag";
Calendar._TT["NEXT_MONTH"] = "Volgende maand (ingedrukt voor menu)";
Calendar._TT["NEXT_YEAR"] = "Volgend jaar (ingedrukt voor menu)";
Calendar._TT["SEL_DATE"] = "Selecteer datum";
Calendar._TT["DRAG_TO_MOVE"] = "Klik en sleep om te verplaatsen";
Calendar._TT["PART_TODAY"] = " (vandaag)";
//Calendar._TT["MON_FIRST"] = "Toon Maandag eerst";
//Calendar._TT["SUN_FIRST"] = "Toon Zondag eerst";
Calendar._TT["DAY_FIRST"] = "Toon %s eerst";
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Sluiten";
Calendar._TT["TODAY"] = "(vandaag)";
Calendar._TT["TIME_PART"] = "(Shift-)Klik of sleep om de waarde te veranderen";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %e %b %Y";
Calendar._TT["WK"] = "wk";
Calendar._TT["TIME"] = "Tijd:";

View File

@ -0,0 +1,114 @@
// ** I18N
// Calendar NO language
// Author: Daniel Holmen, <daniel.holmen@ciber.no>
// Encoding: UTF-8
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("Søndag",
"Mandag",
"Tirsdag",
"Onsdag",
"Torsdag",
"Fredag",
"Lørdag",
"Søndag");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("Søn",
"Man",
"Tir",
"Ons",
"Tor",
"Fre",
"Lør",
"Søn");
// full month names
Calendar._MN = new Array
("Januar",
"Februar",
"Mars",
"April",
"Mai",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"Desember");
// short month names
Calendar._SMN = new Array
("Jan",
"Feb",
"Mar",
"Apr",
"Mai",
"Jun",
"Jul",
"Aug",
"Sep",
"Okt",
"Nov",
"Des");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Om kalenderen";
Calendar._TT["ABOUT"] =
"DHTML Dato-/Tidsvelger\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For nyeste versjon, gå til: http://www.dynarch.com/projects/calendar/\n" +
"Distribuert under GNU LGPL. Se http://gnu.org/licenses/lgpl.html for detaljer." +
"\n\n" +
"Datovalg:\n" +
"- Bruk knappene \xab og \xbb for å velge år\n" +
"- Bruk knappene " + String.fromCharCode(0x2039) + " og " + String.fromCharCode(0x203a) + " for å velge måned\n" +
"- Hold inne musknappen eller knappene over for raskere valg.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Tidsvalg:\n" +
"- Klikk på en av tidsdelene for å øke den\n" +
"- eller Shift-klikk for å senke verdien\n" +
"- eller klikk-og-dra for raskere valg..";
Calendar._TT["PREV_YEAR"] = "Forrige. år (hold for meny)";
Calendar._TT["PREV_MONTH"] = "Forrige. måned (hold for meny)";
Calendar._TT["GO_TODAY"] = "Gå til idag";
Calendar._TT["NEXT_MONTH"] = "Neste måned (hold for meny)";
Calendar._TT["NEXT_YEAR"] = "Neste år (hold for meny)";
Calendar._TT["SEL_DATE"] = "Velg dato";
Calendar._TT["DRAG_TO_MOVE"] = "Dra for å flytte";
Calendar._TT["PART_TODAY"] = " (idag)";
Calendar._TT["MON_FIRST"] = "Vis mandag først";
Calendar._TT["SUN_FIRST"] = "Vis søndag først";
Calendar._TT["CLOSE"] = "Lukk";
Calendar._TT["TODAY"] = "Idag";
Calendar._TT["TIME_PART"] = "(Shift-)Klikk eller dra for å endre verdi";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%d.%m.%Y";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["WK"] = "uke";

View File

@ -0,0 +1,93 @@
// ** I18N
// Calendar PL language
// Author: Dariusz Pietrzak, <eyck@ghost.anime.pl>
// Author: Janusz Piwowarski, <jpiw@go2.pl>
// Encoding: utf-8
// Distributed under the same terms as the calendar itself.
Calendar._DN = new Array
("Niedziela",
"Poniedziałek",
"Wtorek",
"Środa",
"Czwartek",
"Piątek",
"Sobota",
"Niedziela");
Calendar._SDN = new Array
("Nie",
"Pn",
"Wt",
"Śr",
"Cz",
"Pt",
"So",
"Nie");
Calendar._MN = new Array
("Styczeń",
"Luty",
"Marzec",
"Kwiecień",
"Maj",
"Czerwiec",
"Lipiec",
"Sierpień",
"Wrzesień",
"Październik",
"Listopad",
"Grudzień");
Calendar._SMN = new Array
("Sty",
"Lut",
"Mar",
"Kwi",
"Maj",
"Cze",
"Lip",
"Sie",
"Wrz",
"Paź",
"Lis",
"Gru");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "O kalendarzu";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"Aby pobrać najnowszą wersję, odwiedź: http://www.dynarch.com/projects/calendar/\n" +
"Dostępny na licencji GNU LGPL. Zobacz szczegóły na http://gnu.org/licenses/lgpl.html." +
"\n\n" +
"Wybór daty:\n" +
"- Użyj przycisków \xab, \xbb by wybrać rok\n" +
"- Użyj przycisków " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " by wybrać miesiąc\n" +
"- Przytrzymaj klawisz myszy nad jednym z powyższych przycisków dla szybszego wyboru.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Wybór czasu:\n" +
"- Kliknij na jednym z pól czasu by zwiększyć jego wartość\n" +
"- lub kliknij trzymając Shift by zmiejszyć jego wartość\n" +
"- lub kliknij i przeciągnij dla szybszego wyboru.";
//Calendar._TT["TOGGLE"] = "Zmień pierwszy dzień tygodnia";
Calendar._TT["PREV_YEAR"] = "Poprzedni rok (przytrzymaj dla menu)";
Calendar._TT["PREV_MONTH"] = "Poprzedni miesiąc (przytrzymaj dla menu)";
Calendar._TT["GO_TODAY"] = "Idź do dzisiaj";
Calendar._TT["NEXT_MONTH"] = "Następny miesiąc (przytrzymaj dla menu)";
Calendar._TT["NEXT_YEAR"] = "Następny rok (przytrzymaj dla menu)";
Calendar._TT["SEL_DATE"] = "Wybierz datę";
Calendar._TT["DRAG_TO_MOVE"] = "Przeciągnij by przesunąć";
Calendar._TT["PART_TODAY"] = " (dzisiaj)";
Calendar._TT["MON_FIRST"] = "Wyświetl poniedziałek jako pierwszy";
Calendar._TT["SUN_FIRST"] = "Wyświetl niedzielę jako pierwszą";
Calendar._TT["CLOSE"] = "Zamknij";
Calendar._TT["TODAY"] = "Dzisiaj";
Calendar._TT["TIME_PART"] = "(Shift-)Kliknij lub przeciągnij by zmienić wartość";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%e %B, %A";
Calendar._TT["WK"] = "ty";

View File

@ -0,0 +1,56 @@
// ** I18N
// Calendar PL language
// Author: Artur Filipiak, <imagen@poczta.fm>
// January, 2004
// Encoding: UTF-8
Calendar._DN = new Array
("Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela");
Calendar._SDN = new Array
("N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N");
Calendar._MN = new Array
("Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień");
Calendar._SMN = new Array
("Sty", "Lut", "Mar", "Kwi", "Maj", "Cze", "Lip", "Sie", "Wrz", "Paź", "Lis", "Gru");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "O kalendarzu";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Wybór daty:\n" +
"- aby wybrać rok użyj przycisków \xab, \xbb\n" +
"- aby wybrać miesiąc użyj przycisków " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + "\n" +
"- aby przyspieszyć wybór przytrzymaj wciśnięty przycisk myszy nad ww. przyciskami.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Wybór czasu:\n" +
"- aby zwiększyć wartość kliknij na dowolnym elemencie selekcji czasu\n" +
"- aby zmniejszyć wartość użyj dodatkowo klawisza Shift\n" +
"- możesz również poruszać myszkę w lewo i prawo wraz z wciśniętym lewym klawiszem.";
Calendar._TT["PREV_YEAR"] = "Poprz. rok (przytrzymaj dla menu)";
Calendar._TT["PREV_MONTH"] = "Poprz. miesiąc (przytrzymaj dla menu)";
Calendar._TT["GO_TODAY"] = "Pokaż dziś";
Calendar._TT["NEXT_MONTH"] = "Nast. miesiąc (przytrzymaj dla menu)";
Calendar._TT["NEXT_YEAR"] = "Nast. rok (przytrzymaj dla menu)";
Calendar._TT["SEL_DATE"] = "Wybierz datę";
Calendar._TT["DRAG_TO_MOVE"] = "Przesuń okienko";
Calendar._TT["PART_TODAY"] = " (dziś)";
Calendar._TT["MON_FIRST"] = "Pokaż Poniedziałek jako pierwszy";
Calendar._TT["SUN_FIRST"] = "Pokaż Niedzielę jako pierwszą";
Calendar._TT["CLOSE"] = "Zamknij";
Calendar._TT["TODAY"] = "Dziś";
Calendar._TT["TIME_PART"] = "(Shift-)klik | drag, aby zmienić wartość";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y.%m.%d";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["WK"] = "wk";

View File

@ -0,0 +1,123 @@
// ** I18N
// Calendar pt_BR language
// Author: Adalberto Machado, <betosm@terra.com.br>
// Encoding: any
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("Domingo",
"Segunda",
"Terca",
"Quarta",
"Quinta",
"Sexta",
"Sabado",
"Domingo");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("Dom",
"Seg",
"Ter",
"Qua",
"Qui",
"Sex",
"Sab",
"Dom");
// full month names
Calendar._MN = new Array
("Janeiro",
"Fevereiro",
"Marco",
"Abril",
"Maio",
"Junho",
"Julho",
"Agosto",
"Setembro",
"Outubro",
"Novembro",
"Dezembro");
// short month names
Calendar._SMN = new Array
("Jan",
"Fev",
"Mar",
"Abr",
"Mai",
"Jun",
"Jul",
"Ago",
"Set",
"Out",
"Nov",
"Dez");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Sobre o calendario";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"Ultima versao visite: http://www.dynarch.com/projects/calendar/\n" +
"Distribuido sobre GNU LGPL. Veja http://gnu.org/licenses/lgpl.html para detalhes." +
"\n\n" +
"Selecao de data:\n" +
"- Use os botoes \xab, \xbb para selecionar o ano\n" +
"- Use os botoes " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para selecionar o mes\n" +
"- Segure o botao do mouse em qualquer um desses botoes para selecao rapida.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Selecao de hora:\n" +
"- Clique em qualquer parte da hora para incrementar\n" +
"- ou Shift-click para decrementar\n" +
"- ou clique e segure para selecao rapida.";
Calendar._TT["PREV_YEAR"] = "Ant. ano (segure para menu)";
Calendar._TT["PREV_MONTH"] = "Ant. mes (segure para menu)";
Calendar._TT["GO_TODAY"] = "Hoje";
Calendar._TT["NEXT_MONTH"] = "Prox. mes (segure para menu)";
Calendar._TT["NEXT_YEAR"] = "Prox. ano (segure para menu)";
Calendar._TT["SEL_DATE"] = "Selecione a data";
Calendar._TT["DRAG_TO_MOVE"] = "Arraste para mover";
Calendar._TT["PART_TODAY"] = " (hoje)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Mostre %s primeiro";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Fechar";
Calendar._TT["TODAY"] = "Hoje";
Calendar._TT["TIME_PART"] = "(Shift-)Click ou arraste para mudar valor";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %e %b";
Calendar._TT["WK"] = "sm";
Calendar._TT["TIME"] = "Hora:";

View File

@ -0,0 +1,66 @@
// ** I18N
Calendar._DN = new Array
("Duminică",
"Luni",
"Marţi",
"Miercuri",
"Joi",
"Vineri",
"Sâmbătă",
"Duminică");
Calendar._SDN_len = 2;
Calendar._MN = new Array
("Ianuarie",
"Februarie",
"Martie",
"Aprilie",
"Mai",
"Iunie",
"Iulie",
"August",
"Septembrie",
"Octombrie",
"Noiembrie",
"Decembrie");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Despre calendar";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"Pentru ultima versiune vizitaţi: http://www.dynarch.com/projects/calendar/\n" +
"Distribuit sub GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Selecţia datei:\n" +
"- Folosiţi butoanele \xab, \xbb pentru a selecta anul\n" +
"- Folosiţi butoanele " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " pentru a selecta luna\n" +
"- Tineţi butonul mouse-ului apăsat pentru selecţie mai rapidă.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Selecţia orei:\n" +
"- Click pe ora sau minut pentru a mări valoarea cu 1\n" +
"- Sau Shift-Click pentru a micşora valoarea cu 1\n" +
"- Sau Click şi drag pentru a selecta mai repede.";
Calendar._TT["PREV_YEAR"] = "Anul precedent (lung pt menu)";
Calendar._TT["PREV_MONTH"] = "Luna precedentă (lung pt menu)";
Calendar._TT["GO_TODAY"] = "Data de azi";
Calendar._TT["NEXT_MONTH"] = "Luna următoare (lung pt menu)";
Calendar._TT["NEXT_YEAR"] = "Anul următor (lung pt menu)";
Calendar._TT["SEL_DATE"] = "Selectează data";
Calendar._TT["DRAG_TO_MOVE"] = "Trage pentru a mişca";
Calendar._TT["PART_TODAY"] = " (astăzi)";
Calendar._TT["DAY_FIRST"] = "Afişează %s prima zi";
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Închide";
Calendar._TT["TODAY"] = "Astăzi";
Calendar._TT["TIME_PART"] = "(Shift-)Click sau drag pentru a selecta";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y";
Calendar._TT["TT_DATE_FORMAT"] = "%A, %d %B";
Calendar._TT["WK"] = "spt";
Calendar._TT["TIME"] = "Ora:";

View File

@ -0,0 +1,123 @@
// ** I18N
// Calendar RU language
// Translation: Sly Golovanov, http://golovanov.net, <sly@golovanov.net>
// Encoding: any
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("воскресенье",
"понедельник",
"вторник",
"среда",
"четверг",
"пятница",
"суббота",
"воскресенье");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("вск",
"пон",
"втр",
"срд",
"чет",
"пят",
"суб",
"вск");
// full month names
Calendar._MN = new Array
("январь",
"февраль",
"март",
"апрель",
"май",
"июнь",
"июль",
"август",
"сентябрь",
"октябрь",
"ноябрь",
"декабрь");
// short month names
Calendar._SMN = new Array
("янв",
"фев",
"мар",
"апр",
"май",
"июн",
"июл",
"авг",
"сен",
"окт",
"ноя",
"дек");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "О календаре...";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Как выбрать дату:\n" +
"- При помощи кнопок \xab, \xbb можно выбрать год\n" +
"- При помощи кнопок " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " можно выбрать месяц\n" +
"- Подержите эти кнопки нажатыми, чтобы появилось меню быстрого выбора.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Как выбрать время:\n" +
"- При клике на часах или минутах они увеличиваются\n" +
"- при клике с нажатой клавишей Shift они уменьшаются\n" +
"- если нажать и двигать мышкой влево/вправо, они будут меняться быстрее.";
Calendar._TT["PREV_YEAR"] = "На год назад (удерживать для меню)";
Calendar._TT["PREV_MONTH"] = "На месяц назад (удерживать для меню)";
Calendar._TT["GO_TODAY"] = "Сегодня";
Calendar._TT["NEXT_MONTH"] = "На месяц вперед (удерживать для меню)";
Calendar._TT["NEXT_YEAR"] = "На год вперед (удерживать для меню)";
Calendar._TT["SEL_DATE"] = "Выберите дату";
Calendar._TT["DRAG_TO_MOVE"] = "Перетаскивайте мышкой";
Calendar._TT["PART_TODAY"] = " (сегодня)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Первый день недели будет %s";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Закрыть";
Calendar._TT["TODAY"] = "Сегодня";
Calendar._TT["TIME_PART"] = "(Shift-)клик или нажать и двигать";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%e %b, %a";
Calendar._TT["WK"] = "нед";
Calendar._TT["TIME"] = "Время:";

View File

@ -0,0 +1,123 @@
// ** I18N
// Calendar RU language
// Translation: Sly Golovanov, http://golovanov.net, <sly@golovanov.net>
// Encoding: any
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("âîñêðåñåíüå",
"ïîíåäåëüíèê",
"âòîðíèê",
"ñðåäà",
"÷åòâåðã",
"ïÿòíèöà",
"ñóááîòà",
"âîñêðåñåíüå");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("âñê",
"ïîí",
"âòð",
"ñðä",
"÷åò",
"ïÿò",
"ñóá",
"âñê");
// full month names
Calendar._MN = new Array
("ÿíâàðü",
"ôåâðàëü",
"ìàðò",
"àïðåëü",
"ìàé",
"èþíü",
"èþëü",
"àâãóñò",
"ñåíòÿáðü",
"îêòÿáðü",
"íîÿáðü",
"äåêàáðü");
// short month names
Calendar._SMN = new Array
("ÿíâ",
"ôåâ",
"ìàð",
"àïð",
"ìàé",
"èþí",
"èþë",
"àâã",
"ñåí",
"îêò",
"íîÿ",
"äåê");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Î êàëåíäàðå...";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Êàê âûáðàòü äàòó:\n" +
"- Ïðè ïîìîùè êíîïîê \xab, \xbb ìîæíî âûáðàòü ãîä\n" +
"- Ïðè ïîìîùè êíîïîê " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " ìîæíî âûáðàòü ìåñÿö\n" +
"- Ïîäåðæèòå ýòè êíîïêè íàæàòûìè, ÷òîáû ïîÿâèëîñü ìåíþ áûñòðîãî âûáîðà.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Êàê âûáðàòü âðåìÿ:\n" +
"- Ïðè êëèêå íà ÷àñàõ èëè ìèíóòàõ îíè óâåëè÷èâàþòñÿ\n" +
"- ïðè êëèêå ñ íàæàòîé êëàâèøåé Shift îíè óìåíüøàþòñÿ\n" +
"- åñëè íàæàòü è äâèãàòü ìûøêîé âëåâî/âïðàâî, îíè áóäóò ìåíÿòüñÿ áûñòðåå.";
Calendar._TT["PREV_YEAR"] = "Íà ãîä íàçàä (óäåðæèâàòü äëÿ ìåíþ)";
Calendar._TT["PREV_MONTH"] = "Íà ìåñÿö íàçàä (óäåðæèâàòü äëÿ ìåíþ)";
Calendar._TT["GO_TODAY"] = "Ñåãîäíÿ";
Calendar._TT["NEXT_MONTH"] = "Íà ìåñÿö âïåðåä (óäåðæèâàòü äëÿ ìåíþ)";
Calendar._TT["NEXT_YEAR"] = "Íà ãîä âïåðåä (óäåðæèâàòü äëÿ ìåíþ)";
Calendar._TT["SEL_DATE"] = "Âûáåðèòå äàòó";
Calendar._TT["DRAG_TO_MOVE"] = "Ïåðåòàñêèâàéòå ìûøêîé";
Calendar._TT["PART_TODAY"] = " (ñåãîäíÿ)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Ïåðâûé äåíü íåäåëè áóäåò %s";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Çàêðûòü";
Calendar._TT["TODAY"] = "Ñåãîäíÿ";
Calendar._TT["TIME_PART"] = "(Shift-)êëèê èëè íàæàòü è äâèãàòü";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%e %b, %a";
Calendar._TT["WK"] = "íåä";
Calendar._TT["TIME"] = "Âðåìÿ:";

View File

@ -0,0 +1,94 @@
/* Slovenian language file for the DHTML Calendar version 0.9.2
* Author David Milost <mercy@volja.net>, January 2004.
* Feel free to use this script under the terms of the GNU Lesser General
* Public License, as long as you do not remove or alter this notice.
*/
// full day names
Calendar._DN = new Array
("Nedelja",
"Ponedeljek",
"Torek",
"Sreda",
"Četrtek",
"Petek",
"Sobota",
"Nedelja");
// short day names
Calendar._SDN = new Array
("Ned",
"Pon",
"Tor",
"Sre",
"Čet",
"Pet",
"Sob",
"Ned");
// short month names
Calendar._SMN = new Array
("Jan",
"Feb",
"Mar",
"Apr",
"Maj",
"Jun",
"Jul",
"Avg",
"Sep",
"Okt",
"Nov",
"Dec");
// full month names
Calendar._MN = new Array
("Januar",
"Februar",
"Marec",
"April",
"Maj",
"Junij",
"Julij",
"Avgust",
"September",
"Oktober",
"November",
"December");
// tooltips
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "O koledarju";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"Za zadnjo verzijo pojdine na naslov: http://www.dynarch.com/projects/calendar/\n" +
"Distribuirano pod GNU LGPL. Poglejte http://gnu.org/licenses/lgpl.html za podrobnosti." +
"\n\n" +
"Izbor datuma:\n" +
"- Uporabite \xab, \xbb gumbe za izbor leta\n" +
"- Uporabite " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " gumbe za izbor meseca\n" +
"- Zadržite klik na kateremkoli od zgornjih gumbov za hiter izbor.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Izbor ćasa:\n" +
"- Kliknite na katerikoli del ćasa za poveć. le-tega\n" +
"- ali Shift-click za zmanj. le-tega\n" +
"- ali kliknite in povlecite za hiter izbor.";
Calendar._TT["TOGGLE"] = "Spremeni dan s katerim se prićne teden";
Calendar._TT["PREV_YEAR"] = "Predhodnje leto (dolg klik za meni)";
Calendar._TT["PREV_MONTH"] = "Predhodnji mesec (dolg klik za meni)";
Calendar._TT["GO_TODAY"] = "Pojdi na tekoći dan";
Calendar._TT["NEXT_MONTH"] = "Naslednji mesec (dolg klik za meni)";
Calendar._TT["NEXT_YEAR"] = "Naslednje leto (dolg klik za meni)";
Calendar._TT["SEL_DATE"] = "Izberite datum";
Calendar._TT["DRAG_TO_MOVE"] = "Pritisni in povleci za spremembo pozicije";
Calendar._TT["PART_TODAY"] = " (danes)";
Calendar._TT["MON_FIRST"] = "Prikaži ponedeljek kot prvi dan";
Calendar._TT["SUN_FIRST"] = "Prikaži nedeljo kot prvi dan";
Calendar._TT["CLOSE"] = "Zapri";
Calendar._TT["TODAY"] = "Danes";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["WK"] = "Ted";

View File

@ -0,0 +1,99 @@
// ** I18N
// Calendar SK language
// Author: Peter Valach (pvalach@gmx.net)
// Encoding: utf-8
// Last update: 2003/10/29
// Distributed under the same terms as the calendar itself.
// full day names
Calendar._DN = new Array
("NedeÄľa",
"Pondelok",
"Utorok",
"Streda",
 tvrtok",
"Piatok",
"Sobota",
"NedeÄľa");
// short day names
Calendar._SDN = new Array
("Ned",
"Pon",
"Uto",
"Str",
 tv",
"Pia",
"Sob",
"Ned");
// full month names
Calendar._MN = new Array
("Január",
"Február",
"Marec",
"AprĂ­l",
"Máj",
"JĂşn",
"JĂşl",
"August",
"September",
"OktĂłber",
"November",
"December");
// short month names
Calendar._SMN = new Array
("Jan",
"Feb",
"Mar",
"Apr",
"Máj",
"JĂşn",
"JĂşl",
"Aug",
"Sep",
"Okt",
"Nov",
"Dec");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "O kalendári";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" +
"Poslednú verziu nájdete na: http://www.dynarch.com/projects/calendar/\n" +
"Distribuované pod GNU LGPL. Viď http://gnu.org/licenses/lgpl.html pre detaily." +
"\n\n" +
"Výber dátumu:\n" +
"- Použite tlačidlá \xab, \xbb pre výber roku\n" +
"- Použite tlačidlá " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " pre výber mesiaca\n" +
"- Ak ktorékoľvek z týchto tlačidiel podržíte dlhšie, zobrazí sa rýchly výber.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Výber času:\n" +
"- Kliknutie na niektorú položku času ju zvýši\n" +
"- Shift-klik ju znĂ­Ĺľi\n" +
"- Ak podržíte tlačítko stlačené, posúvaním meníte hodnotu.";
Calendar._TT["PREV_YEAR"] = "Predošlý rok (podržte pre menu)";
Calendar._TT["PREV_MONTH"] = "Predošlý mesiac (podržte pre menu)";
Calendar._TT["GO_TODAY"] = "Prejsť na dnešok";
Calendar._TT["NEXT_MONTH"] = "Nasl. mesiac (podrĹľte pre menu)";
Calendar._TT["NEXT_YEAR"] = "Nasl. rok (podrĹľte pre menu)";
Calendar._TT["SEL_DATE"] = "Zvoľte dátum";
Calendar._TT["DRAG_TO_MOVE"] = "PodrĹľanĂ­m tlaÄŤĂ­tka zmenĂ­te polohu";
Calendar._TT["PART_TODAY"] = " (dnes)";
Calendar._TT["MON_FIRST"] = "ZobraziĹĄ pondelok ako prvĂ˝";
Calendar._TT["SUN_FIRST"] = "ZobraziĹĄ nedeÄľu ako prvĂş";
Calendar._TT["CLOSE"] = "ZavrieĹĄ";
Calendar._TT["TODAY"] = "Dnes";
Calendar._TT["TIME_PART"] = "(Shift-)klik/ĹĄahanie zmenĂ­ hodnotu";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "$d. %m. %Y";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %e. %b";
Calendar._TT["WK"] = "týž";

View File

@ -0,0 +1,110 @@
// ** I18N
// Calendar SP language
// Author: Rafael Velasco <rvu_at_idecnet_dot_com>
// Encoding: any
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("Domingo",
"Lunes",
"Martes",
"Miercoles",
"Jueves",
"Viernes",
"Sabado",
"Domingo");
Calendar._SDN = new Array
("Dom",
"Lun",
"Mar",
"Mie",
"Jue",
"Vie",
"Sab",
"Dom");
// full month names
Calendar._MN = new Array
("Enero",
"Febrero",
"Marzo",
"Abril",
"Mayo",
"Junio",
"Julio",
"Agosto",
"Septiembre",
"Octubre",
"Noviembre",
"Diciembre");
// short month names
Calendar._SMN = new Array
("Ene",
"Feb",
"Mar",
"Abr",
"May",
"Jun",
"Jul",
"Ago",
"Sep",
"Oct",
"Nov",
"Dic");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Información del Calendario";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"Nuevas versiones en: http://www.dynarch.com/projects/calendar/\n" +
"Distribuida bajo licencia GNU LGPL. Para detalles vea http://gnu.org/licenses/lgpl.html ." +
"\n\n" +
"Selección de Fechas:\n" +
"- Use \xab, \xbb para seleccionar el año\n" +
"- Use " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para seleccionar el mes\n" +
"- Mantenga presionado el botón del ratón en cualquiera de las opciones superiores para un acceso rapido .";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Selección del Reloj:\n" +
"- Seleccione la hora para cambiar el reloj\n" +
"- o presione Shift-click para disminuirlo\n" +
"- o presione click y arrastre del ratón para una selección rapida.";
Calendar._TT["PREV_YEAR"] = "Año anterior (Presione para menu)";
Calendar._TT["PREV_MONTH"] = "Mes Anterior (Presione para menu)";
Calendar._TT["GO_TODAY"] = "Ir a Hoy";
Calendar._TT["NEXT_MONTH"] = "Mes Siguiente (Presione para menu)";
Calendar._TT["NEXT_YEAR"] = "Año Siguiente (Presione para menu)";
Calendar._TT["SEL_DATE"] = "Seleccione fecha";
Calendar._TT["DRAG_TO_MOVE"] = "Arrastre y mueva";
Calendar._TT["PART_TODAY"] = " (Hoy)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "Mostrar %s primero";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Cerrar";
Calendar._TT["TODAY"] = "Hoy";
Calendar._TT["TIME_PART"] = "(Shift-)Click o arrastra para cambar el valor";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%dd-%mm-%yy";
Calendar._TT["TT_DATE_FORMAT"] = "%A, %e de %B de %Y";
Calendar._TT["WK"] = "Sm";
Calendar._TT["TIME"] = "Hora:";

View File

@ -0,0 +1,93 @@
// ** I18N
// Calendar SV language (Swedish, svenska)
// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
// Translation team: <sv@li.org>
// Translator: Leonard Norrgård <leonard.norrgard@refactor.fi>
// Last translator: Leonard Norrgård <leonard.norrgard@refactor.fi>
// Encoding: iso-latin-1
// Distributed under the same terms as the calendar itself.
// For translators: please use UTF-8 if possible. We strongly believe that
// Unicode is the answer to a real internationalized world. Also please
// include your contact information in the header, as can be seen above.
// full day names
Calendar._DN = new Array
("söndag",
"måndag",
"tisdag",
"onsdag",
"torsdag",
"fredag",
"lördag",
"söndag");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
Calendar._SDN_len = 2;
Calendar._SMN_len = 3;
// full month names
Calendar._MN = new Array
("januari",
"februari",
"mars",
"april",
"maj",
"juni",
"juli",
"augusti",
"september",
"oktober",
"november",
"december");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "Om kalendern";
Calendar._TT["ABOUT"] =
"DHTML Datum/tid-väljare\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"För senaste version gå till: http://www.dynarch.com/projects/calendar/\n" +
"Distribueras under GNU LGPL. Se http://gnu.org/licenses/lgpl.html för detaljer." +
"\n\n" +
"Val av datum:\n" +
"- Använd knapparna \xab, \xbb för att välja år\n" +
"- Använd knapparna " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " för att välja månad\n" +
"- Håll musknappen nedtryckt på någon av ovanstående knappar för snabbare val.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Val av tid:\n" +
"- Klicka på en del av tiden för att öka den delen\n" +
"- eller skift-klicka för att minska den\n" +
"- eller klicka och drag för snabbare val.";
Calendar._TT["PREV_YEAR"] = "Föregående år (håll för menu)";
Calendar._TT["PREV_MONTH"] = "Föregående månad (håll för menu)";
Calendar._TT["GO_TODAY"] = "Gå till dagens datum";
Calendar._TT["NEXT_MONTH"] = "Följande månad (håll för menu)";
Calendar._TT["NEXT_YEAR"] = "Följande år (håll för menu)";
Calendar._TT["SEL_DATE"] = "Välj datum";
Calendar._TT["DRAG_TO_MOVE"] = "Drag för att flytta";
Calendar._TT["PART_TODAY"] = " (idag)";
Calendar._TT["MON_FIRST"] = "Visa måndag först";
Calendar._TT["SUN_FIRST"] = "Visa söndag först";
Calendar._TT["CLOSE"] = "Stäng";
Calendar._TT["TODAY"] = "Idag";
Calendar._TT["TIME_PART"] = "(Skift-)klicka eller drag för att ändra tid";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%A %d %b %Y";
Calendar._TT["WK"] = "vecka";

View File

@ -0,0 +1,58 @@
//////////////////////////////////////////////////////////////////////////////////////////////
// Turkish Translation by Nuri AKMAN
// Location: Ankara/TURKEY
// e-mail : nuriakman@hotmail.com
// Date : April, 9 2003
//
// Note: if Turkish Characters does not shown on you screen
// please include falowing line your html code:
//
// <meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
//
//////////////////////////////////////////////////////////////////////////////////////////////
// ** I18N
Calendar._DN = new Array
("Pazar",
"Pazartesi",
"Salı",
"Çarşamba",
"Perşembe",
"Cuma",
"Cumartesi",
"Pazar");
Calendar._MN = new Array
("Ocak",
"Şubat",
"Mart",
"Nisan",
"Mayıs",
"Haziran",
"Temmuz",
"Ağustos",
"Eylül",
"Ekim",
"Kasım",
"Aralık");
// tooltips
Calendar._TT = {};
Calendar._TT["TOGGLE"] = "Haftanın ilk gününü kaydır";
Calendar._TT["PREV_YEAR"] = "Önceki Yıl (Menü için basılı tutunuz)";
Calendar._TT["PREV_MONTH"] = "Önceki Ay (Menü için basılı tutunuz)";
Calendar._TT["GO_TODAY"] = "Bugün'e git";
Calendar._TT["NEXT_MONTH"] = "Sonraki Ay (Menü için basılı tutunuz)";
Calendar._TT["NEXT_YEAR"] = "Sonraki Yıl (Menü için basılı tutunuz)";
Calendar._TT["SEL_DATE"] = "Tarih seçiniz";
Calendar._TT["DRAG_TO_MOVE"] = "Taşımak için sürükleyiniz";
Calendar._TT["PART_TODAY"] = " (bugün)";
Calendar._TT["MON_FIRST"] = "Takvim Pazartesi gününden başlasın";
Calendar._TT["SUN_FIRST"] = "Takvim Pazar gününden başlasın";
Calendar._TT["CLOSE"] = "Kapat";
Calendar._TT["TODAY"] = "Bugün";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y";
Calendar._TT["TT_DATE_FORMAT"] = "d MM y, DD";
Calendar._TT["WK"] = "Hafta";

View File

@ -0,0 +1,119 @@
// ** I18N
// Calendar ZH language
// Author: muziq, <muziq@sina.com>
// Encoding: GB2312 or GBK
// Distributed under the same terms as the calendar itself.
// full day names
Calendar._DN = new Array
("星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六",
"星期日");
// Please note that the following array of short day names (and the same goes
// for short month names, _SMN) isn't absolutely necessary. We give it here
// for exemplification on how one can customize the short day names, but if
// they are simply the first N letters of the full name you can simply say:
//
// Calendar._SDN_len = N; // short day name length
// Calendar._SMN_len = N; // short month name length
//
// If N = 3 then this is not needed either since we assume a value of 3 if not
// present, to be compatible with translation files that were written before
// this feature.
// short day names
Calendar._SDN = new Array
("日",
"一",
"二",
"三",
"四",
"五",
"六",
"日");
// full month names
Calendar._MN = new Array
("一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月");
// short month names
Calendar._SMN = new Array
("一月",
"二月",
"三月",
"四月",
"五月",
"六月",
"七月",
"八月",
"九月",
"十月",
"十一月",
"十二月");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "帮助";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"选择日期:\n" +
"- 点击 \xab, \xbb 按钮选择年份\n" +
"- 点击 " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " 按钮选择月份\n" +
"- 长按以上按钮可从菜单中快速选择年份或月份";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"选择时间:\n" +
"- 点击小时或分钟可使改数值加一\n" +
"- 按住Shift键点击小时或分钟可使改数值减一\n" +
"- 点击拖动鼠标可进行快速选择";
Calendar._TT["PREV_YEAR"] = "上一年 (按住出菜单)";
Calendar._TT["PREV_MONTH"] = "上一月 (按住出菜单)";
Calendar._TT["GO_TODAY"] = "转到今日";
Calendar._TT["NEXT_MONTH"] = "下一月 (按住出菜单)";
Calendar._TT["NEXT_YEAR"] = "下一年 (按住出菜单)";
Calendar._TT["SEL_DATE"] = "选择日期";
Calendar._TT["DRAG_TO_MOVE"] = "拖动";
Calendar._TT["PART_TODAY"] = " (今日)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "最左边显示%s";
// This may be locale-dependent. It specifies the week-end days, as an array
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "关闭";
Calendar._TT["TODAY"] = "今日";
Calendar._TT["TIME_PART"] = "(Shift-)点击鼠标或拖动改变值";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%A, %b %e日";
Calendar._TT["WK"] = "周";
Calendar._TT["TIME"] = "时间:";

Some files were not shown because too many files have changed in this diff Show More