merged
This commit is contained in:
commit
cea99f7677
|
@ -24,7 +24,7 @@ def splitSearch(string):
|
|||
def get_real_ctype(module_name):
|
||||
for c in ContentType.objects.filter(model=module_name):
|
||||
try:
|
||||
if c.model_class().is_itf_model == True:
|
||||
if c.model_class() is not None:
|
||||
return c
|
||||
except:
|
||||
pass
|
||||
|
@ -80,6 +80,7 @@ class ItfModel(models.Model):
|
|||
|
||||
|
||||
def add_note(self, user, text):
|
||||
from itfprofiles.models import Note
|
||||
if self.user_has_perms(user):
|
||||
n = Note(user=user, text=text, content_object=self)
|
||||
n.save()
|
||||
|
@ -113,7 +114,7 @@ class ItfModel(models.Model):
|
|||
# d['add_form'] = self.__class__.get_add_form()
|
||||
d['forms'] = self.__class__.get_forms()
|
||||
d['obj'] = self
|
||||
d['content_type'] = ContentType.objects.filter(model=self.__class__._meta.module_name)[0]
|
||||
d['content_type'] = self.get_content_type()
|
||||
try:
|
||||
edit_url = self.get_edit_url()
|
||||
d['edit_url'] = edit_url
|
||||
|
@ -122,6 +123,11 @@ class ItfModel(models.Model):
|
|||
pass
|
||||
return d
|
||||
|
||||
def get_content_type(self):
|
||||
for c in ContentType.objects.filter(model=self.__class__._meta.module_name):
|
||||
if c.model_class() is not None:
|
||||
return c
|
||||
raise
|
||||
|
||||
def get_gallery_image(self):
|
||||
from mediagallery.models import Photo
|
||||
|
@ -246,34 +252,36 @@ class ItfModel(models.Model):
|
|||
Get the main image thumbnail for this object - checks if object has either a field or custom method called 'main_image', then checks for default_images on the ModelExtra for this model.
|
||||
'''
|
||||
def get_main_image(self, size="142x150"):
|
||||
|
||||
if hasattr(self, 'main_image'):
|
||||
main_image_getter = self.main_image
|
||||
if type(main_image_getter).__name__ == 'instancemethod':
|
||||
imgfield = main_image_getter()
|
||||
else:
|
||||
imgfield = main_image_getter
|
||||
main_image_getter = self.main_image
|
||||
if type(main_image_getter).__name__ == 'instancemethod':
|
||||
imgfield = main_image_getter()
|
||||
else:
|
||||
imgfield = main_image_getter
|
||||
else:
|
||||
imgfield = self.get_modelextra().default_image #FIXME!!
|
||||
|
||||
if imgfield is None or imgfield.name == '':
|
||||
if imgfield is None or imgfield.name == '' and self.get_modelextra():
|
||||
imgfield = self.get_modelextra().default_image
|
||||
|
||||
if imgfield:
|
||||
#try:
|
||||
thumb = get_thumbnail(imgfield, size, crop="center").url
|
||||
#except:
|
||||
# print imgfield.url
|
||||
# thumb = 'http://placehold.it/%s' % size
|
||||
try:
|
||||
thumb = get_thumbnail(imgfield, size, crop="center").url
|
||||
except:
|
||||
thumb = self.get_placeholder(size)
|
||||
|
||||
else:
|
||||
thumb = 'http://placehold.it/%s' % size # Add default image for site
|
||||
thumb = self.get_placeholder(size) # Add default image for site
|
||||
|
||||
return {
|
||||
'thumb': thumb
|
||||
'thumb': thumb
|
||||
}
|
||||
|
||||
'''
|
||||
def main_image(self):
|
||||
return None
|
||||
'''
|
||||
|
||||
def get_placeholder(self, size):
|
||||
return 'http://placehold.it/%s' % size
|
||||
|
||||
|
||||
'''
|
||||
The templates for objects are stored following the convention templates/modules/<app_label>/<model_name>.html
|
||||
|
|
|
@ -366,6 +366,7 @@ class TheatreGroup(ItfModel):
|
|||
return False
|
||||
|
||||
def get_dict(self):
|
||||
|
||||
return {
|
||||
#'object':self,
|
||||
'name': self.name,
|
||||
|
@ -383,6 +384,8 @@ class TheatreGroup(ItfModel):
|
|||
'resources': [obj for obj in self.resources.all()],
|
||||
'buzzitems': [obj for obj in self.buzzitems.all()],
|
||||
'productions': [obj for obj in self.production_set.all() ],
|
||||
'workshops': [obj for obj in self.event_set.filter(event_type='workshop')],
|
||||
'other_events': [obj for obj in self.event_set.exclude(event_type='workshop')],
|
||||
'scripts': [obj for obj in self.script_set.all() ],
|
||||
'people' : [obj for obj in self.persongroup_set.all() ],
|
||||
'worked_with_people': self.worked_with_people()
|
||||
|
|
|
@ -183,7 +183,7 @@ def contact_group(request):
|
|||
send_mail("Contact on theatreforum.in", message, frm, [to_email])
|
||||
return HttpResponse("Your message has been sent, thanks.")
|
||||
|
||||
|
||||
@csrf_exempt
|
||||
def add_note(request, content_type, object_id):
|
||||
model_class = ContentType.objects.get(pk=content_type).model_class()
|
||||
obj = model_class.objects.get(pk=object_id)
|
||||
|
|
|
@ -4,7 +4,7 @@ from tagging.fields import TagField
|
|||
from django.core.paginator import Paginator, InvalidPage, EmptyPage
|
||||
from django.contrib.contenttypes import generic
|
||||
from app.models import ItfModel
|
||||
from itfprofiles.models import TheatreGroup
|
||||
from itfprofiles.models import TheatreGroup, Note
|
||||
from mediagallery.models import GalleryAlbum
|
||||
|
||||
GENRES = (
|
||||
|
@ -47,6 +47,7 @@ class Script(ItfModel):
|
|||
theatre_group = models.ForeignKey(TheatreGroup, help_text="Theatre Group, if any")
|
||||
related_scripts = models.ManyToManyField("Script", through="ScriptScript", related_name='related_script')
|
||||
galleries = generic.GenericRelation(GalleryAlbum)
|
||||
notes = generic.GenericRelation(Note)
|
||||
# add_form = 'ScriptForm'
|
||||
|
||||
#Meta
|
||||
|
|
BIN
itf/static/js/html5Forms.js/.DS_Store
vendored
Normal file
BIN
itf/static/js/html5Forms.js/.DS_Store
vendored
Normal file
Binary file not shown.
1
itf/static/js/html5Forms.js/.git/HEAD
Normal file
1
itf/static/js/html5Forms.js/.git/HEAD
Normal file
|
@ -0,0 +1 @@
|
|||
ref: refs/heads/master
|
11
itf/static/js/html5Forms.js/.git/config
Normal file
11
itf/static/js/html5Forms.js/.git/config
Normal file
|
@ -0,0 +1,11 @@
|
|||
[core]
|
||||
repositoryformatversion = 0
|
||||
filemode = true
|
||||
bare = false
|
||||
logallrefupdates = true
|
||||
[remote "origin"]
|
||||
fetch = +refs/heads/*:refs/remotes/origin/*
|
||||
url = https://github.com/zoltan-dulac/html5Forms.js.git
|
||||
[branch "master"]
|
||||
remote = origin
|
||||
merge = refs/heads/master
|
1
itf/static/js/html5Forms.js/.git/description
Normal file
1
itf/static/js/html5Forms.js/.git/description
Normal file
|
@ -0,0 +1 @@
|
|||
Unnamed repository; edit this file 'description' to name the repository.
|
15
itf/static/js/html5Forms.js/.git/hooks/applypatch-msg.sample
Executable file
15
itf/static/js/html5Forms.js/.git/hooks/applypatch-msg.sample
Executable file
|
@ -0,0 +1,15 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to check the commit log message taken by
|
||||
# applypatch from an e-mail message.
|
||||
#
|
||||
# The hook should exit with non-zero status after issuing an
|
||||
# appropriate message if it wants to stop the commit. The hook is
|
||||
# allowed to edit the commit message file.
|
||||
#
|
||||
# To enable this hook, rename this file to "applypatch-msg".
|
||||
|
||||
. git-sh-setup
|
||||
test -x "$GIT_DIR/hooks/commit-msg" &&
|
||||
exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
|
||||
:
|
24
itf/static/js/html5Forms.js/.git/hooks/commit-msg.sample
Executable file
24
itf/static/js/html5Forms.js/.git/hooks/commit-msg.sample
Executable file
|
@ -0,0 +1,24 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to check the commit log message.
|
||||
# Called by "git commit" with one argument, the name of the file
|
||||
# that has the commit message. The hook should exit with non-zero
|
||||
# status after issuing an appropriate message if it wants to stop the
|
||||
# commit. The hook is allowed to edit the commit message file.
|
||||
#
|
||||
# To enable this hook, rename this file to "commit-msg".
|
||||
|
||||
# Uncomment the below to add a Signed-off-by line to the message.
|
||||
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
|
||||
# hook is more suited to it.
|
||||
#
|
||||
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
|
||||
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
|
||||
|
||||
# This example catches duplicate Signed-off-by lines.
|
||||
|
||||
test "" = "$(grep '^Signed-off-by: ' "$1" |
|
||||
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
|
||||
echo >&2 Duplicate Signed-off-by lines.
|
||||
exit 1
|
||||
}
|
8
itf/static/js/html5Forms.js/.git/hooks/post-update.sample
Executable file
8
itf/static/js/html5Forms.js/.git/hooks/post-update.sample
Executable file
|
@ -0,0 +1,8 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to prepare a packed repository for use over
|
||||
# dumb transports.
|
||||
#
|
||||
# To enable this hook, rename this file to "post-update".
|
||||
|
||||
exec git update-server-info
|
14
itf/static/js/html5Forms.js/.git/hooks/pre-applypatch.sample
Executable file
14
itf/static/js/html5Forms.js/.git/hooks/pre-applypatch.sample
Executable file
|
@ -0,0 +1,14 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to verify what is about to be committed
|
||||
# by applypatch from an e-mail message.
|
||||
#
|
||||
# The hook should exit with non-zero status after issuing an
|
||||
# appropriate message if it wants to stop the commit.
|
||||
#
|
||||
# To enable this hook, rename this file to "pre-applypatch".
|
||||
|
||||
. git-sh-setup
|
||||
test -x "$GIT_DIR/hooks/pre-commit" &&
|
||||
exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
|
||||
:
|
50
itf/static/js/html5Forms.js/.git/hooks/pre-commit.sample
Executable file
50
itf/static/js/html5Forms.js/.git/hooks/pre-commit.sample
Executable file
|
@ -0,0 +1,50 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to verify what is about to be committed.
|
||||
# Called by "git commit" with no arguments. The hook should
|
||||
# exit with non-zero status after issuing an appropriate message if
|
||||
# it wants to stop the commit.
|
||||
#
|
||||
# To enable this hook, rename this file to "pre-commit".
|
||||
|
||||
if git rev-parse --verify HEAD >/dev/null 2>&1
|
||||
then
|
||||
against=HEAD
|
||||
else
|
||||
# Initial commit: diff against an empty tree object
|
||||
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
|
||||
fi
|
||||
|
||||
# If you want to allow non-ascii filenames set this variable to true.
|
||||
allownonascii=$(git config hooks.allownonascii)
|
||||
|
||||
# Redirect output to stderr.
|
||||
exec 1>&2
|
||||
|
||||
# Cross platform projects tend to avoid non-ascii filenames; prevent
|
||||
# them from being added to the repository. We exploit the fact that the
|
||||
# printable range starts at the space character and ends with tilde.
|
||||
if [ "$allownonascii" != "true" ] &&
|
||||
# Note that the use of brackets around a tr range is ok here, (it's
|
||||
# even required, for portability to Solaris 10's /usr/bin/tr), since
|
||||
# the square bracket bytes happen to fall in the designated range.
|
||||
test $(git diff --cached --name-only --diff-filter=A -z $against |
|
||||
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
|
||||
then
|
||||
echo "Error: Attempt to add a non-ascii file name."
|
||||
echo
|
||||
echo "This can cause problems if you want to work"
|
||||
echo "with people on other platforms."
|
||||
echo
|
||||
echo "To be portable it is advisable to rename the file ..."
|
||||
echo
|
||||
echo "If you know what you are doing you can disable this"
|
||||
echo "check using:"
|
||||
echo
|
||||
echo " git config hooks.allownonascii true"
|
||||
echo
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# If there are whitespace errors, print the offending file names and fail.
|
||||
exec git diff-index --check --cached $against --
|
169
itf/static/js/html5Forms.js/.git/hooks/pre-rebase.sample
Executable file
169
itf/static/js/html5Forms.js/.git/hooks/pre-rebase.sample
Executable file
|
@ -0,0 +1,169 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2006, 2008 Junio C Hamano
|
||||
#
|
||||
# The "pre-rebase" hook is run just before "git rebase" starts doing
|
||||
# its job, and can prevent the command from running by exiting with
|
||||
# non-zero status.
|
||||
#
|
||||
# The hook is called with the following parameters:
|
||||
#
|
||||
# $1 -- the upstream the series was forked from.
|
||||
# $2 -- the branch being rebased (or empty when rebasing the current branch).
|
||||
#
|
||||
# This sample shows how to prevent topic branches that are already
|
||||
# merged to 'next' branch from getting rebased, because allowing it
|
||||
# would result in rebasing already published history.
|
||||
|
||||
publish=next
|
||||
basebranch="$1"
|
||||
if test "$#" = 2
|
||||
then
|
||||
topic="refs/heads/$2"
|
||||
else
|
||||
topic=`git symbolic-ref HEAD` ||
|
||||
exit 0 ;# we do not interrupt rebasing detached HEAD
|
||||
fi
|
||||
|
||||
case "$topic" in
|
||||
refs/heads/??/*)
|
||||
;;
|
||||
*)
|
||||
exit 0 ;# we do not interrupt others.
|
||||
;;
|
||||
esac
|
||||
|
||||
# Now we are dealing with a topic branch being rebased
|
||||
# on top of master. Is it OK to rebase it?
|
||||
|
||||
# Does the topic really exist?
|
||||
git show-ref -q "$topic" || {
|
||||
echo >&2 "No such branch $topic"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Is topic fully merged to master?
|
||||
not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
|
||||
if test -z "$not_in_master"
|
||||
then
|
||||
echo >&2 "$topic is fully merged to master; better remove it."
|
||||
exit 1 ;# we could allow it, but there is no point.
|
||||
fi
|
||||
|
||||
# Is topic ever merged to next? If so you should not be rebasing it.
|
||||
only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
|
||||
only_next_2=`git rev-list ^master ${publish} | sort`
|
||||
if test "$only_next_1" = "$only_next_2"
|
||||
then
|
||||
not_in_topic=`git rev-list "^$topic" master`
|
||||
if test -z "$not_in_topic"
|
||||
then
|
||||
echo >&2 "$topic is already up-to-date with master"
|
||||
exit 1 ;# we could allow it, but there is no point.
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
else
|
||||
not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
|
||||
/usr/bin/perl -e '
|
||||
my $topic = $ARGV[0];
|
||||
my $msg = "* $topic has commits already merged to public branch:\n";
|
||||
my (%not_in_next) = map {
|
||||
/^([0-9a-f]+) /;
|
||||
($1 => 1);
|
||||
} split(/\n/, $ARGV[1]);
|
||||
for my $elem (map {
|
||||
/^([0-9a-f]+) (.*)$/;
|
||||
[$1 => $2];
|
||||
} split(/\n/, $ARGV[2])) {
|
||||
if (!exists $not_in_next{$elem->[0]}) {
|
||||
if ($msg) {
|
||||
print STDERR $msg;
|
||||
undef $msg;
|
||||
}
|
||||
print STDERR " $elem->[1]\n";
|
||||
}
|
||||
}
|
||||
' "$topic" "$not_in_next" "$not_in_master"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
<<\DOC_END
|
||||
|
||||
This sample hook safeguards topic branches that have been
|
||||
published from being rewound.
|
||||
|
||||
The workflow assumed here is:
|
||||
|
||||
* Once a topic branch forks from "master", "master" is never
|
||||
merged into it again (either directly or indirectly).
|
||||
|
||||
* Once a topic branch is fully cooked and merged into "master",
|
||||
it is deleted. If you need to build on top of it to correct
|
||||
earlier mistakes, a new topic branch is created by forking at
|
||||
the tip of the "master". This is not strictly necessary, but
|
||||
it makes it easier to keep your history simple.
|
||||
|
||||
* Whenever you need to test or publish your changes to topic
|
||||
branches, merge them into "next" branch.
|
||||
|
||||
The script, being an example, hardcodes the publish branch name
|
||||
to be "next", but it is trivial to make it configurable via
|
||||
$GIT_DIR/config mechanism.
|
||||
|
||||
With this workflow, you would want to know:
|
||||
|
||||
(1) ... if a topic branch has ever been merged to "next". Young
|
||||
topic branches can have stupid mistakes you would rather
|
||||
clean up before publishing, and things that have not been
|
||||
merged into other branches can be easily rebased without
|
||||
affecting other people. But once it is published, you would
|
||||
not want to rewind it.
|
||||
|
||||
(2) ... if a topic branch has been fully merged to "master".
|
||||
Then you can delete it. More importantly, you should not
|
||||
build on top of it -- other people may already want to
|
||||
change things related to the topic as patches against your
|
||||
"master", so if you need further changes, it is better to
|
||||
fork the topic (perhaps with the same name) afresh from the
|
||||
tip of "master".
|
||||
|
||||
Let's look at this example:
|
||||
|
||||
o---o---o---o---o---o---o---o---o---o "next"
|
||||
/ / / /
|
||||
/ a---a---b A / /
|
||||
/ / / /
|
||||
/ / c---c---c---c B /
|
||||
/ / / \ /
|
||||
/ / / b---b C \ /
|
||||
/ / / / \ /
|
||||
---o---o---o---o---o---o---o---o---o---o---o "master"
|
||||
|
||||
|
||||
A, B and C are topic branches.
|
||||
|
||||
* A has one fix since it was merged up to "next".
|
||||
|
||||
* B has finished. It has been fully merged up to "master" and "next",
|
||||
and is ready to be deleted.
|
||||
|
||||
* C has not merged to "next" at all.
|
||||
|
||||
We would want to allow C to be rebased, refuse A, and encourage
|
||||
B to be deleted.
|
||||
|
||||
To compute (1):
|
||||
|
||||
git rev-list ^master ^topic next
|
||||
git rev-list ^master next
|
||||
|
||||
if these match, topic has not merged in next at all.
|
||||
|
||||
To compute (2):
|
||||
|
||||
git rev-list master..topic
|
||||
|
||||
if this is empty, it is fully merged to "master".
|
||||
|
||||
DOC_END
|
36
itf/static/js/html5Forms.js/.git/hooks/prepare-commit-msg.sample
Executable file
36
itf/static/js/html5Forms.js/.git/hooks/prepare-commit-msg.sample
Executable file
|
@ -0,0 +1,36 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to prepare the commit log message.
|
||||
# Called by "git commit" with the name of the file that has the
|
||||
# commit message, followed by the description of the commit
|
||||
# message's source. The hook's purpose is to edit the commit
|
||||
# message file. If the hook fails with a non-zero status,
|
||||
# the commit is aborted.
|
||||
#
|
||||
# To enable this hook, rename this file to "prepare-commit-msg".
|
||||
|
||||
# This hook includes three examples. The first comments out the
|
||||
# "Conflicts:" part of a merge commit.
|
||||
#
|
||||
# The second includes the output of "git diff --name-status -r"
|
||||
# into the message, just before the "git status" output. It is
|
||||
# commented because it doesn't cope with --amend or with squashed
|
||||
# commits.
|
||||
#
|
||||
# The third example adds a Signed-off-by line to the message, that can
|
||||
# still be edited. This is rarely a good idea.
|
||||
|
||||
case "$2,$3" in
|
||||
merge,)
|
||||
/usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
|
||||
|
||||
# ,|template,)
|
||||
# /usr/bin/perl -i.bak -pe '
|
||||
# print "\n" . `git diff --cached --name-status -r`
|
||||
# if /^#/ && $first++ == 0' "$1" ;;
|
||||
|
||||
*) ;;
|
||||
esac
|
||||
|
||||
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
|
||||
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
|
128
itf/static/js/html5Forms.js/.git/hooks/update.sample
Executable file
128
itf/static/js/html5Forms.js/.git/hooks/update.sample
Executable file
|
@ -0,0 +1,128 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to blocks unannotated tags from entering.
|
||||
# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
|
||||
#
|
||||
# To enable this hook, rename this file to "update".
|
||||
#
|
||||
# Config
|
||||
# ------
|
||||
# hooks.allowunannotated
|
||||
# This boolean sets whether unannotated tags will be allowed into the
|
||||
# repository. By default they won't be.
|
||||
# hooks.allowdeletetag
|
||||
# This boolean sets whether deleting tags will be allowed in the
|
||||
# repository. By default they won't be.
|
||||
# hooks.allowmodifytag
|
||||
# This boolean sets whether a tag may be modified after creation. By default
|
||||
# it won't be.
|
||||
# hooks.allowdeletebranch
|
||||
# This boolean sets whether deleting branches will be allowed in the
|
||||
# repository. By default they won't be.
|
||||
# hooks.denycreatebranch
|
||||
# This boolean sets whether remotely creating branches will be denied
|
||||
# in the repository. By default this is allowed.
|
||||
#
|
||||
|
||||
# --- Command line
|
||||
refname="$1"
|
||||
oldrev="$2"
|
||||
newrev="$3"
|
||||
|
||||
# --- Safety check
|
||||
if [ -z "$GIT_DIR" ]; then
|
||||
echo "Don't run this script from the command line." >&2
|
||||
echo " (if you want, you could supply GIT_DIR then run" >&2
|
||||
echo " $0 <ref> <oldrev> <newrev>)" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
|
||||
echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# --- Config
|
||||
allowunannotated=$(git config --bool hooks.allowunannotated)
|
||||
allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
|
||||
denycreatebranch=$(git config --bool hooks.denycreatebranch)
|
||||
allowdeletetag=$(git config --bool hooks.allowdeletetag)
|
||||
allowmodifytag=$(git config --bool hooks.allowmodifytag)
|
||||
|
||||
# check for no description
|
||||
projectdesc=$(sed -e '1q' "$GIT_DIR/description")
|
||||
case "$projectdesc" in
|
||||
"Unnamed repository"* | "")
|
||||
echo "*** Project description file hasn't been set" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# --- Check types
|
||||
# if $newrev is 0000...0000, it's a commit to delete a ref.
|
||||
zero="0000000000000000000000000000000000000000"
|
||||
if [ "$newrev" = "$zero" ]; then
|
||||
newrev_type=delete
|
||||
else
|
||||
newrev_type=$(git cat-file -t $newrev)
|
||||
fi
|
||||
|
||||
case "$refname","$newrev_type" in
|
||||
refs/tags/*,commit)
|
||||
# un-annotated tag
|
||||
short_refname=${refname##refs/tags/}
|
||||
if [ "$allowunannotated" != "true" ]; then
|
||||
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
|
||||
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
refs/tags/*,delete)
|
||||
# delete tag
|
||||
if [ "$allowdeletetag" != "true" ]; then
|
||||
echo "*** Deleting a tag is not allowed in this repository" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
refs/tags/*,tag)
|
||||
# annotated tag
|
||||
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
|
||||
then
|
||||
echo "*** Tag '$refname' already exists." >&2
|
||||
echo "*** Modifying a tag is not allowed in this repository." >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
refs/heads/*,commit)
|
||||
# branch
|
||||
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
|
||||
echo "*** Creating a branch is not allowed in this repository" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
refs/heads/*,delete)
|
||||
# delete branch
|
||||
if [ "$allowdeletebranch" != "true" ]; then
|
||||
echo "*** Deleting a branch is not allowed in this repository" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
refs/remotes/*,commit)
|
||||
# tracking branch
|
||||
;;
|
||||
refs/remotes/*,delete)
|
||||
# delete tracking branch
|
||||
if [ "$allowdeletebranch" != "true" ]; then
|
||||
echo "*** Deleting a tracking branch is not allowed in this repository" >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
# Anything else (is there anything else?)
|
||||
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# --- Finished
|
||||
exit 0
|
BIN
itf/static/js/html5Forms.js/.git/index
Normal file
BIN
itf/static/js/html5Forms.js/.git/index
Normal file
Binary file not shown.
6
itf/static/js/html5Forms.js/.git/info/exclude
Normal file
6
itf/static/js/html5Forms.js/.git/info/exclude
Normal file
|
@ -0,0 +1,6 @@
|
|||
# git ls-files --others --exclude-from=.git/info/exclude
|
||||
# Lines that start with '#' are comments.
|
||||
# For a project mostly in C, the following would be a good set of
|
||||
# exclude patterns (uncomment them if you want to use them):
|
||||
# *.[oa]
|
||||
# *~
|
1
itf/static/js/html5Forms.js/.git/logs/HEAD
Normal file
1
itf/static/js/html5Forms.js/.git/logs/HEAD
Normal file
|
@ -0,0 +1 @@
|
|||
0000000000000000000000000000000000000000 d390bb89714a6c7eba09f9eb29660560e07d35cb Sanjay B <b@pad.ma> 1379876216 +0530 clone: from https://github.com/zoltan-dulac/html5Forms.js.git
|
1
itf/static/js/html5Forms.js/.git/logs/refs/heads/master
Normal file
1
itf/static/js/html5Forms.js/.git/logs/refs/heads/master
Normal file
|
@ -0,0 +1 @@
|
|||
0000000000000000000000000000000000000000 d390bb89714a6c7eba09f9eb29660560e07d35cb Sanjay B <b@pad.ma> 1379876216 +0530 clone: from https://github.com/zoltan-dulac/html5Forms.js.git
|
Binary file not shown.
Binary file not shown.
2
itf/static/js/html5Forms.js/.git/packed-refs
Normal file
2
itf/static/js/html5Forms.js/.git/packed-refs
Normal file
|
@ -0,0 +1,2 @@
|
|||
# pack-refs with: peeled
|
||||
d390bb89714a6c7eba09f9eb29660560e07d35cb refs/remotes/origin/master
|
1
itf/static/js/html5Forms.js/.git/refs/heads/master
Normal file
1
itf/static/js/html5Forms.js/.git/refs/heads/master
Normal file
|
@ -0,0 +1 @@
|
|||
d390bb89714a6c7eba09f9eb29660560e07d35cb
|
|
@ -0,0 +1 @@
|
|||
ref: refs/remotes/origin/master
|
11
itf/static/js/html5Forms.js/.project
Normal file
11
itf/static/js/html5Forms.js/.project
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>html5Widgets</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
</natures>
|
||||
</projectDescription>
|
43
itf/static/js/html5Forms.js/README.txt
Normal file
43
itf/static/js/html5Forms.js/README.txt
Normal file
|
@ -0,0 +1,43 @@
|
|||
HTML5Forms.js is a JavaScript polyfill that implements a subset of the HTML5
|
||||
Forms module in all browsers. The script will only add support for the
|
||||
different parts of the module when there doesn't exist a native
|
||||
implementation. HTML5Forms supports the following HTML5 input types:
|
||||
|
||||
* range
|
||||
* date
|
||||
* datetime
|
||||
* datetime-local
|
||||
* week
|
||||
* color
|
||||
|
||||
It also supports:
|
||||
|
||||
* form validation (via "required" and "pattern" attributes)
|
||||
* the autofocus attribute (i.e. focusing on a particular form element onload)
|
||||
* the placeholder attribute (i.e. descriptive text of what should be in a form
|
||||
field)
|
||||
* the output tag (solves equations of form elements)
|
||||
* CSS styling of form validation states (simulates :invalid and :valid in
|
||||
unsupported browsers like IE9 and lower)
|
||||
* CSS styling of form elements that are not included in the CSS3 UI
|
||||
specification, but I think are useful for developers:
|
||||
|
||||
- .wf2_isBlank, .wf2_notBlank – these classes are applied to form field when
|
||||
a form element is blank/not blank repectively.
|
||||
- .wf2_lostFocus -this class is applied to a form element when a form field
|
||||
loses focus.
|
||||
- .wf2_submitAttempted – this class is applied to a <form> tag when a form
|
||||
submission is attempted.
|
||||
|
||||
|
||||
More information about how this works is available at:
|
||||
|
||||
http://www.useragentman.com/blog/2010/07/27/cross-browser-html5-forms-using-modernizr-webforms2-and-html5widgets/
|
||||
http://www.useragentman.com/blog/2012/05/14/cross-browser-styling-of-html5-forms-even-in-older-browsers/
|
||||
|
||||
Note that this package was originally released in 2010 as html5Widgets,
|
||||
and was renamed to a more accurate and descriptive name. Also note that
|
||||
the version of webforms2 that is included in this package does not
|
||||
include support for the depricated repetition module -- it will be
|
||||
put back in as a separate module at a later date.
|
||||
|
BIN
itf/static/js/html5Forms.js/shared/.DS_Store
vendored
Normal file
BIN
itf/static/js/html5Forms.js/shared/.DS_Store
vendored
Normal file
Binary file not shown.
35
itf/static/js/html5Forms.js/shared/css/number.css
Normal file
35
itf/static/js/html5Forms.js/shared/css/number.css
Normal file
|
@ -0,0 +1,35 @@
|
|||
|
||||
.html5-numberControls {
|
||||
display: block;
|
||||
vertical-align:top;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0em;
|
||||
height: 1.5em;
|
||||
border: solid 1px #666666;
|
||||
border-radius: 5px;
|
||||
width: 0.8em;
|
||||
color: #666666;
|
||||
margin-top: 0.3em;
|
||||
}
|
||||
|
||||
.html5-numberWrapper {
|
||||
position: absolute;
|
||||
height: 1em;
|
||||
}
|
||||
|
||||
.html5-numberControls a{
|
||||
margin: 0 0 0 0.2em;
|
||||
padding:0;
|
||||
border:0;
|
||||
background-color:transparent;
|
||||
width: 0.9em;
|
||||
cursor:pointer;
|
||||
position:absolute;
|
||||
|
||||
font-size: 0.6em;
|
||||
}
|
||||
|
||||
.html5-numberControls .upbutton{top:0px;}
|
||||
|
||||
.html5-numberControls .dnbutton{bottom: 0px;}
|
169
itf/static/js/html5Forms.js/shared/css/slider.css
Normal file
169
itf/static/js/html5Forms.js/shared/css/slider.css
Normal file
|
@ -0,0 +1,169 @@
|
|||
/*
|
||||
|
||||
Slider CSS, style as you please.
|
||||
|
||||
Note: The png images used for this demo were originally located at http://www.schillmania.com/
|
||||
|
||||
Remove the -moz & -khtml styles if you want the css to validate.
|
||||
|
||||
Change the image paths to suit you installation.
|
||||
|
||||
*/
|
||||
|
||||
/* Styles for the horizontal slider */
|
||||
.fd-slider
|
||||
{
|
||||
position:relative;
|
||||
width:100%;
|
||||
height:20px;
|
||||
text-align:center;
|
||||
border:0 none;
|
||||
text-decoration:none;
|
||||
display:block;
|
||||
-moz-user-select:none;
|
||||
-khtml-user-select:none
|
||||
cursor:pointer;
|
||||
}
|
||||
.fd-slider-inner
|
||||
{
|
||||
position:relative;
|
||||
display:block;
|
||||
z-index:1;
|
||||
height:18px;
|
||||
text-align:left;
|
||||
background:#fcfcfc;
|
||||
border:1px solid #ccc;
|
||||
border-radius:5px;
|
||||
-moz-border-radius:5px;
|
||||
}
|
||||
.fd-slider-bar
|
||||
{
|
||||
position:absolute;
|
||||
display:block;
|
||||
z-index:2;
|
||||
height:2px;
|
||||
border:1px solid #bbb;
|
||||
border-bottom:1px solid #aaa;
|
||||
border-right:1px solid #aaa;
|
||||
background:#ddd;
|
||||
margin:0;
|
||||
padding:0;
|
||||
overflow:hidden;
|
||||
line-height:4px;
|
||||
top:8px;
|
||||
bottom:none;
|
||||
left:10px;
|
||||
right:10px;
|
||||
border-radius:2px;
|
||||
-moz-border-radius:2px;
|
||||
}
|
||||
/* Styles for the vertical slider */
|
||||
.fd-slider-vertical
|
||||
{
|
||||
position:relative;
|
||||
border:0 none;
|
||||
text-decoration:none;
|
||||
display:block;
|
||||
width:20px;
|
||||
height:100%;
|
||||
text-align:center;
|
||||
-moz-user-select:none;
|
||||
-khtml-user-select:none
|
||||
cursor:pointer;
|
||||
cursor:hand;
|
||||
}
|
||||
.fd-slider-vertical .fd-slider-inner
|
||||
{
|
||||
display:block;
|
||||
width:18px;
|
||||
height:100%;
|
||||
text-align:left;
|
||||
background:#fcfcfc;
|
||||
border:1px solid #ccc;
|
||||
}
|
||||
.fd-slider-vertical .fd-slider-bar
|
||||
{
|
||||
width:2px;
|
||||
top:10px;
|
||||
bottom:10px;
|
||||
left:8px;
|
||||
right:none;
|
||||
height:auto;
|
||||
}
|
||||
.fd-slider-vertical .fd-slider-handle
|
||||
{
|
||||
cursor:N-resize;
|
||||
}
|
||||
.focused .fd-slider-inner
|
||||
{
|
||||
background:#eee !important;
|
||||
border:1px solid #aaa !important;
|
||||
}
|
||||
/* black handle, no glow */
|
||||
.fd-slider-handle
|
||||
{
|
||||
position:absolute;
|
||||
display:block;
|
||||
padding:0;
|
||||
border:0 none;
|
||||
margin:0;
|
||||
z-index:3;
|
||||
top:0;
|
||||
left:0;
|
||||
width:20px;
|
||||
height:20px;
|
||||
outline:0px none;
|
||||
background:transparent url(../images/slider/slider-disabled.png) no-repeat 0px 0px;
|
||||
cursor:W-resize;
|
||||
line-height:20px;
|
||||
font-size:20px;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select:none;
|
||||
-moz-user-focus:none;
|
||||
-moz-outline:0px none;
|
||||
}
|
||||
.fd-slider-handle:focus
|
||||
{
|
||||
outline:0px none;
|
||||
border:0 none;
|
||||
-moz-user-focus:normal;
|
||||
}
|
||||
button.fd-slider-handle:focus::-moz-focus-inner { border-color: transparent; }
|
||||
|
||||
/* black handle, glow */
|
||||
.fd-slider-hover .fd-slider-handle
|
||||
{
|
||||
background:transparent url(../images/slider/slider-disabled-1.png) no-repeat 0px 0px;
|
||||
}
|
||||
/* blue handle, no glow */
|
||||
.focused .fd-slider-handle
|
||||
{
|
||||
background:transparent url(../images/slider/slider.png) no-repeat 0px 0px;
|
||||
}
|
||||
/* blue handle glow */
|
||||
.focused.fd-slider-hover .fd-slider-handle
|
||||
{
|
||||
background:transparent url(../images/slider/slider-1.png) no-repeat 0px 0px;
|
||||
}
|
||||
body.slider-drag-vertical
|
||||
{
|
||||
cursor:N-resize !important;
|
||||
}
|
||||
body.slider-drag-horizontal
|
||||
{
|
||||
cursor:W-resize !important;
|
||||
}
|
||||
.fd_hide_slider_input
|
||||
{
|
||||
display:none;
|
||||
}
|
||||
/* Disabled Sliders */
|
||||
.slider-disabled
|
||||
{
|
||||
opacity:.8;
|
||||
filter:alpha(opacity=80);
|
||||
}
|
||||
.slider-disabled .fd-slider-handle
|
||||
{
|
||||
cursor:auto !important;
|
||||
}
|
41
itf/static/js/html5Forms.js/shared/css/slider_ie.css
Normal file
41
itf/static/js/html5Forms.js/shared/css/slider_ie.css
Normal file
|
@ -0,0 +1,41 @@
|
|||
.fd-slider-handle
|
||||
{
|
||||
background:none;
|
||||
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,sizingMethod=crop,src='http://www.frequency-decoder.com/demo/slider-revisited/slider-disabled.png');
|
||||
outline:expression(hideFocus='true');
|
||||
}
|
||||
.fd-slider-hover .fd-slider-handle
|
||||
{
|
||||
background:none;
|
||||
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,sizingMethod=crop,src='http://www.frequency-decoder.com/demo/slider-revisited/slider-disabled-1.png');
|
||||
}
|
||||
.focused .fd-slider-handle
|
||||
{
|
||||
background:none;
|
||||
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,sizingMethod=crop,src='http://www.frequency-decoder.com/demo/slider-revisited/slider.png');
|
||||
}
|
||||
.fd-fc-slider-hover .fd-slider-handle
|
||||
{
|
||||
background:none;
|
||||
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,sizingMethod=crop,src='http://www.frequency-decoder.com/demo/slider-revisited/slider-1.png');
|
||||
}
|
||||
.fd-slider
|
||||
{
|
||||
cursor:hand;
|
||||
}
|
||||
.fd-slider-bar
|
||||
{
|
||||
top:8px;
|
||||
bottom:none;
|
||||
left:10px;
|
||||
right:none;
|
||||
width:expression((this.parentNode.offsetWidth - 20) + "px");
|
||||
}
|
||||
.fd-slider-vertical .fd-slider-bar
|
||||
{
|
||||
top:10px;
|
||||
bottom:none;
|
||||
left:8px;
|
||||
right:none;
|
||||
height:expression((this.parentNode.offsetHeight - 20) + "px");
|
||||
}
|
114
itf/static/js/html5Forms.js/shared/css/useragentmanExample.css
Normal file
114
itf/static/js/html5Forms.js/shared/css/useragentmanExample.css
Normal file
|
@ -0,0 +1,114 @@
|
|||
body {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
body#myExample {
|
||||
font-family: "Arial", "Helvetica", sans-serif;
|
||||
}
|
||||
|
||||
#exampleBlurb {
|
||||
background: #2f2626 !important;
|
||||
text-align: justify !important;
|
||||
color: white !important;
|
||||
font: 14px Georgia, Serif !important;
|
||||
position: relative;
|
||||
margin-top: -1em;
|
||||
padding-top: 1em;
|
||||
zoom: 1;
|
||||
width: 100% !important;
|
||||
z-index: 9999 !important;
|
||||
line-height: 2.4em;
|
||||
padding-bottom: 1em;
|
||||
}
|
||||
|
||||
#exampleBlurb p {
|
||||
padding: 0 10px;
|
||||
line-height: 1.7em;
|
||||
}
|
||||
|
||||
#exampleBlurb a {
|
||||
color: #ccccff;
|
||||
}
|
||||
|
||||
#thirdPartyExample {
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
#myExample fieldset {
|
||||
width: 50em;
|
||||
margin: 1em auto;
|
||||
padding: 1em;
|
||||
|
||||
}
|
||||
|
||||
#myExample legend {
|
||||
font-weight: bold;
|
||||
|
||||
}
|
||||
|
||||
.formTable {
|
||||
width: 40em;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.formTable th {
|
||||
vertical-align: top;
|
||||
text-align: right;
|
||||
width: 20em;
|
||||
}
|
||||
|
||||
.formTable td,
|
||||
.formTable input,
|
||||
.formTable textarea {
|
||||
width: 20em;
|
||||
}
|
||||
|
||||
.formTable td input[type="checkbox"],
|
||||
.formTable td input[type="radio"] {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.formTable textarea {
|
||||
height: 8em;
|
||||
}
|
||||
|
||||
.formTable input.small {
|
||||
width: 4em;
|
||||
}
|
||||
|
||||
.buttonRow {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#exampleIntro {
|
||||
opacity: 0.7;
|
||||
position: absolute;
|
||||
padding: 0.7em;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background: #2f2626 !important;
|
||||
text-align: justify !important;
|
||||
color:white !important;
|
||||
font: 14px Georgia, Serif !important;
|
||||
position: relative;
|
||||
zoom: 1;
|
||||
|
||||
z-index: 10000 !important;
|
||||
}
|
||||
|
||||
#exampleIntro p {
|
||||
line-height: 2.4em;
|
||||
}
|
||||
|
||||
#exampleIntro a {
|
||||
color: #ccccff;
|
||||
}
|
||||
|
||||
.initiallyHidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
ul.exampleList > li {
|
||||
margin-bottom: 2em;
|
||||
}
|
23
itf/static/js/html5Forms.js/shared/css/visibleIf.css
Normal file
23
itf/static/js/html5Forms.js/shared/css/visibleIf.css
Normal file
|
@ -0,0 +1,23 @@
|
|||
.visibleIf, .visibleif {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
.visibleIf-visible, .visibleif-visible {
|
||||
display: block;
|
||||
}
|
||||
|
||||
span.visibleIf-visible, span.visibleif-visible {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
tr.visibleIf-visible, tr.visibleif-visible {
|
||||
display: block;
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
|
||||
.visibleIf-rule, .mandatoryIf-rule, .visibleif-rule, .mandatoryif-rule {
|
||||
display: none;
|
||||
}
|
||||
|
BIN
itf/static/js/html5Forms.js/shared/images/slider/slider-1.png
Normal file
BIN
itf/static/js/html5Forms.js/shared/images/slider/slider-1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
After Width: | Height: | Size: 935 B |
Binary file not shown.
After Width: | Height: | Size: 704 B |
BIN
itf/static/js/html5Forms.js/shared/images/slider/slider.png
Normal file
BIN
itf/static/js/html5Forms.js/shared/images/slider/slider.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 780 B |
BIN
itf/static/js/html5Forms.js/shared/js/.DS_Store
vendored
Normal file
BIN
itf/static/js/html5Forms.js/shared/js/.DS_Store
vendored
Normal file
Binary file not shown.
486
itf/static/js/html5Forms.js/shared/js/EventHelpers.js
Normal file
486
itf/static/js/html5Forms.js/shared/js/EventHelpers.js
Normal file
|
@ -0,0 +1,486 @@
|
|||
/*******************************************************************************
|
||||
* This notice must be untouched at all times.
|
||||
*
|
||||
* This javascript library contains helper routines to assist with event
|
||||
* handling consinstently among browsers
|
||||
*
|
||||
* EventHelpers.js v.1.4 available at http://www.useragentman.com/
|
||||
*
|
||||
* released under the MIT License:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
*
|
||||
* Chagelog: 1.4: fix fireEvent to work correctly for IE9.
|
||||
*
|
||||
*******************************************************************************/
|
||||
var EventHelpers = new function(){
|
||||
var me = this;
|
||||
|
||||
var safariTimer;
|
||||
var isSafari = /WebKit/i.test(navigator.userAgent);
|
||||
var globalEvent;
|
||||
|
||||
me.init = function () {
|
||||
if (me.hasPageLoadHappened(arguments)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* This is for fireEvent */
|
||||
if (document.createEvent) {
|
||||
globalEvent = document.createEvent("HTMLEvents");
|
||||
} else if (document.createEventObject){
|
||||
// dispatch for IE8 and lower.
|
||||
globalEvent = document.createEventObject();
|
||||
}
|
||||
|
||||
me.docIsLoaded = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an event to the document. Examples of usage:
|
||||
* me.addEvent(window, "load", myFunction);
|
||||
* me.addEvent(docunent, "keydown", keyPressedFunc);
|
||||
* me.addEvent(document, "keyup", keyPressFunc);
|
||||
*
|
||||
* @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events
|
||||
* @author John Resig - http://ejohn.org/projects/flexible-javascript-events/
|
||||
* @param {Object} obj - a javascript object.
|
||||
* @param {String} evType - an event to attach to the object.
|
||||
* @param {Function} fn - the function that is attached to the event.
|
||||
*/
|
||||
me.addEvent = function(obj, evType, fn){
|
||||
|
||||
if (obj.addEventListener) {
|
||||
obj.addEventListener(evType, fn, false);
|
||||
} else if (obj.attachEvent) {
|
||||
obj['e' + evType + fn] = fn;
|
||||
obj[evType + fn] = function(){
|
||||
obj["e" + evType + fn](self.event);
|
||||
}
|
||||
obj.attachEvent("on" + evType, obj[evType + fn]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Removes an event that is attached to a javascript object.
|
||||
*
|
||||
* @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events
|
||||
* @author John Resig - http://ejohn.org/projects/flexible-javascript-events/ * @param {Object} obj - a javascript object.
|
||||
* @param {String} evType - an event attached to the object.
|
||||
* @param {Function} fn - the function that is called when the event fires.
|
||||
*/
|
||||
me.removeEvent = function(obj, evType, fn){
|
||||
|
||||
if (obj.removeEventListener) {
|
||||
obj.removeEventListener(evType, fn, false);
|
||||
} else if (obj.detachEvent) {
|
||||
try {
|
||||
obj.detachEvent("on" + evType, obj[evType + fn]);
|
||||
obj[evType + fn] = null;
|
||||
obj["e" + evType + fn] = null;
|
||||
}
|
||||
catch (ex) {
|
||||
// do nothing;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function removeEventAttribute(obj, beginName){
|
||||
var attributes = obj.attributes;
|
||||
for (var i = 0; i < attributes.length; i++) {
|
||||
var attribute = attributes[i]
|
||||
var name = attribute.name
|
||||
if (name.indexOf(beginName) == 0) {
|
||||
//obj.removeAttributeNode(attribute);
|
||||
attribute.specified = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
me.addScrollWheelEvent = function(obj, fn){
|
||||
if (obj.addEventListener) {
|
||||
/** DOMMouseScroll is for mozilla. */
|
||||
obj.addEventListener('DOMMouseScroll', fn, true);
|
||||
}
|
||||
|
||||
/** IE/Opera. */
|
||||
if (obj.attachEvent) {
|
||||
obj.attachEvent("onmousewheel", fn);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
me.removeScrollWheelEvent = function(obj, fn){
|
||||
if (obj.removeEventListener) {
|
||||
/** DOMMouseScroll is for mozilla. */
|
||||
obj.removeEventListener('DOMMouseScroll', fn, true);
|
||||
}
|
||||
|
||||
/** IE/Opera. */
|
||||
if (obj.detachEvent) {
|
||||
obj.detatchEvent("onmousewheel", fn);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
me.getMouseCoords = function (e) {
|
||||
if (!e) {
|
||||
return;
|
||||
}
|
||||
// IE
|
||||
if (e.clientX != null) {
|
||||
return {
|
||||
x: e.clientX,
|
||||
y: e.clientY
|
||||
}
|
||||
|
||||
}
|
||||
// NS4
|
||||
else if (e.pageX != null) {
|
||||
return {
|
||||
x: e.pageX,
|
||||
y: e.pageY
|
||||
}
|
||||
// W3C
|
||||
} else if (window.event != null && window.event.clientX != null
|
||||
&& document.body != null &&
|
||||
document.body.scrollLeft != null) {
|
||||
return {
|
||||
x: window.event.clientX + document.body.scrollLeft,
|
||||
y: window.event.clientY + document.body.scrollTop
|
||||
}
|
||||
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a mouse event, get the mouse pointer's x-coordinate.
|
||||
*
|
||||
* @param {Object} e - a DOM Event object.
|
||||
* @return {int} - the mouse pointer's x-coordinate.
|
||||
*/
|
||||
me.getMouseX = function(e){
|
||||
if (!e) {
|
||||
return;
|
||||
}
|
||||
// NS4
|
||||
if (e.pageX != null) {
|
||||
return e.pageX;
|
||||
// IE
|
||||
} else if (window.event != null && window.event.clientX != null &&
|
||||
document.body != null &&
|
||||
document.body.scrollLeft != null)
|
||||
return window.event.clientX + document.body.scrollLeft;
|
||||
// W3C
|
||||
else if (e.clientX != null)
|
||||
return e.clientX;
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a mouse event, get the mouse pointer's y-coordinate.
|
||||
* @param {Object} e - a DOM Event Object.
|
||||
* @return {int} - the mouse pointer's y-coordinate.
|
||||
*/
|
||||
me.getMouseY = function(e){
|
||||
// NS4
|
||||
if (e.pageY != null)
|
||||
return e.pageY;
|
||||
// IE
|
||||
else if (window.event != null && window.event.clientY != null &&
|
||||
document.body != null &&
|
||||
document.body.scrollTop != null)
|
||||
return window.event.clientY + document.body.scrollTop;
|
||||
// W3C
|
||||
else if (e.clientY != null) {
|
||||
return e.clientY;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Given a mouse scroll wheel event, get the "delta" of how fast it moved.
|
||||
* @param {Object} e - a DOM Event Object.
|
||||
* @return {int} - the mouse wheel's delta. It is greater than 0, the
|
||||
* scroll wheel was spun upwards; if less than 0, downwards.
|
||||
*/
|
||||
me.getScrollWheelDelta = function(e){
|
||||
var delta = 0;
|
||||
if (!e) /* For IE. */
|
||||
e = window.event;
|
||||
if (e.wheelDelta) { /* IE/Opera. */
|
||||
delta = e.wheelDelta / 120;
|
||||
/** In Opera 9, delta differs in sign as compared to IE.
|
||||
*/
|
||||
if (window.opera) {
|
||||
delta = -delta;
|
||||
}
|
||||
} else if (e.detail) { /** Mozilla case. */
|
||||
/** In Mozilla, sign of delta is different than in IE.
|
||||
* Also, delta is multiple of 3.
|
||||
*/
|
||||
delta = -e.detail / 3;
|
||||
}
|
||||
return delta
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a mouse move event of a document.
|
||||
*
|
||||
* @deprecated - use only if compatibility with IE4 and NS4 is necessary. Otherwise, just
|
||||
* use EventHelpers.addEvent(window, 'mousemove', func) instead. Cannot be used to add
|
||||
* multiple mouse move event handlers.
|
||||
*
|
||||
* @param {Function} func - the function that you want a mouse event to fire.
|
||||
*/
|
||||
me.addMouseEvent = function(func){
|
||||
|
||||
if (document.captureEvents) {
|
||||
document.captureEvents(Event.MOUSEMOVE);
|
||||
}
|
||||
|
||||
document.onmousemove = func;
|
||||
window.onmousemove = func;
|
||||
window.onmouseover = func;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Find the HTML object that fired an Event.
|
||||
*
|
||||
* @param {Object} e - an HTML object
|
||||
* @return {Object} - the HTML object that fired the event.
|
||||
*/
|
||||
me.getEventTarget = function(e){
|
||||
// first, IE method for mouse events(also supported by Safari and Opera)
|
||||
if (e.toElement) {
|
||||
return e.toElement;
|
||||
// W3C
|
||||
} else if (e.currentTarget) {
|
||||
return e.currentTarget;
|
||||
|
||||
// MS way
|
||||
} else if (e.srcElement) {
|
||||
return e.srcElement;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Given an event fired by the keyboard, find the key associated with that event.
|
||||
*
|
||||
* @param {Object} e - an event object.
|
||||
* @return {String} - the ASCII character code representing the key associated with the event.
|
||||
*/
|
||||
me.getKey = function(e){
|
||||
if (e.keyCode) {
|
||||
return e.keyCode;
|
||||
} else if (e.event && e.event.keyCode) {
|
||||
return window.event.keyCode;
|
||||
} else if (e.which) {
|
||||
return e.which;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Will execute a function when the page's DOM has fully loaded (and before all attached images, iframes,
|
||||
* etc., are).
|
||||
*
|
||||
* Usage:
|
||||
*
|
||||
* EventHelpers.addPageLoadEvent('init');
|
||||
*
|
||||
* where the function init() has this code at the beginning:
|
||||
*
|
||||
* function init() {
|
||||
*
|
||||
* if (EventHelpers.hasPageLoadHappened(arguments)) return;
|
||||
*
|
||||
* // rest of code
|
||||
* ....
|
||||
* }
|
||||
*
|
||||
* @author This code is based off of code from http://dean.edwards.name/weblog/2005/09/busted/ by Dean
|
||||
* Edwards, with a modification by me.
|
||||
*
|
||||
* @param {String} funcName - a string containing the function to be called.
|
||||
*/
|
||||
me.addPageLoadEvent = function(funcName){
|
||||
|
||||
var func = eval(funcName);
|
||||
|
||||
// for Internet Explorer (using conditional comments)
|
||||
/*@cc_on @*/
|
||||
/*@if (@_win32)
|
||||
pageLoadEventArray.push(func);
|
||||
return;
|
||||
/*@end @*/
|
||||
if (isSafari) { // sniff
|
||||
pageLoadEventArray.push(func);
|
||||
|
||||
if (!safariTimer) {
|
||||
|
||||
safariTimer = setInterval(function(){
|
||||
if (/loaded|complete/.test(document.readyState)) {
|
||||
clearInterval(safariTimer);
|
||||
|
||||
/*
|
||||
* call the onload handler
|
||||
* func();
|
||||
*/
|
||||
me.runPageLoadEvents();
|
||||
return;
|
||||
}
|
||||
set = true;
|
||||
}, 10);
|
||||
}
|
||||
/* for Mozilla */
|
||||
} else if (document.addEventListener) {
|
||||
var x = document.addEventListener("DOMContentLoaded", func, null);
|
||||
|
||||
/* Others */
|
||||
} else {
|
||||
me.addEvent(window, 'load', func);
|
||||
}
|
||||
}
|
||||
|
||||
var pageLoadEventArray = new Array();
|
||||
|
||||
me.runPageLoadEvents = function(e){
|
||||
if (isSafari || e.srcElement.readyState == "complete") {
|
||||
|
||||
for (var i = 0; i < pageLoadEventArray.length; i++) {
|
||||
pageLoadEventArray[i]();
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Determines if either addPageLoadEvent('funcName') or addEvent(window, 'load', funcName)
|
||||
* has been executed.
|
||||
*
|
||||
* @see addPageLoadEvent
|
||||
* @param {Function} funcArgs - the arguments of the containing. function
|
||||
*/
|
||||
me.hasPageLoadHappened = function(funcArgs){
|
||||
// If the function already been called, return true;
|
||||
if (funcArgs.callee.done)
|
||||
return true;
|
||||
|
||||
// flag this function so we don't do the same thing twice
|
||||
funcArgs.callee.done = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Used in an event method/function to indicate that the default behaviour of the event
|
||||
* should *not* happen.
|
||||
*
|
||||
* @param {Object} e - an event object.
|
||||
* @return {Boolean} - always false
|
||||
*/
|
||||
me.preventDefault = function(e){
|
||||
|
||||
if (e.preventDefault) {
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
try {
|
||||
e.returnValue = false;
|
||||
}
|
||||
catch (ex) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
me.cancelBubble = function(e){
|
||||
if (e.stopPropagation) {
|
||||
e.stopPropagation();
|
||||
}
|
||||
|
||||
try {
|
||||
e.cancelBubble = true;
|
||||
}
|
||||
catch (ex) {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Fires an event manually.
|
||||
* @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events
|
||||
* @author John Resig - http://ejohn.org/projects/flexible-javascript-events/
|
||||
* @param {Object} obj - a javascript object.
|
||||
* @param {String} evType - an event attached to the object.
|
||||
* @param {Function} fn - the function that is called when the event fires.
|
||||
*
|
||||
*/
|
||||
me.fireEvent = function (element,event, options){
|
||||
|
||||
if(!element) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (element.dispatchEvent) {
|
||||
// dispatch for firefox + ie9 + others
|
||||
globalEvent.initEvent(event, true, true); // event type,bubbling,cancelable
|
||||
return !element.dispatchEvent(globalEvent);
|
||||
} else if (document.createEventObject){
|
||||
return element.fireEvent('on' + event, globalEvent)
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Detects whether the event "eventName" is supported on a tag with name
|
||||
* "nodeName". Based on code from
|
||||
* http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
|
||||
*/
|
||||
me.isSupported = function (eventName, nodeName) {
|
||||
var el = document.createElement(nodeName);
|
||||
eventName = 'on' + eventName;
|
||||
var isSupported = (eventName in el);
|
||||
if (!isSupported) {
|
||||
el.setAttribute(eventName, 'return;');
|
||||
isSupported = typeof el[eventName] == 'function';
|
||||
}
|
||||
el = null;
|
||||
return isSupported;
|
||||
}
|
||||
|
||||
|
||||
/* EventHelpers.init () */
|
||||
function init(){
|
||||
// Conditional comment alert: Do not remove comments. Leave intact.
|
||||
// The detection if the page is secure or not is important. If
|
||||
// this logic is removed, Internet Explorer will give security
|
||||
// alerts.
|
||||
/*@cc_on @*/
|
||||
/*@if (@_win32)
|
||||
|
||||
document.write('<script id="__ie_onload" defer src="' +
|
||||
|
||||
((location.protocol == 'https:') ? '//0' : 'javascript:void(0)') + '"><\/script>');
|
||||
|
||||
var script = document.getElementById("__ie_onload");
|
||||
|
||||
me.addEvent(script, 'readystatechange', me.runPageLoadEvents);
|
||||
|
||||
/*@end @*/
|
||||
|
||||
}
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
EventHelpers.addPageLoadEvent('EventHelpers.init');
|
137
itf/static/js/html5Forms.js/shared/js/Timer.js
Normal file
137
itf/static/js/html5Forms.js/shared/js/Timer.js
Normal file
|
@ -0,0 +1,137 @@
|
|||
/*
|
||||
* Timer.js - object oriented friendly timeout object
|
||||
* From code originally found on:
|
||||
*
|
||||
* http://www.codingforums.com/archive/index.php/index.php?t-10531.html
|
||||
*
|
||||
* The problems with the setTimeout and setInterval functions
|
||||
* provided in Javascript are twofold. First, you can't call a local
|
||||
* object method without losing your scope, and second, you can't pass
|
||||
* objects to the function, since the function call is implemented as a string.
|
||||
*
|
||||
* The Timer class solves these difficulties by employing a static array
|
||||
* to store the parent object and function arguments until the function is
|
||||
* called.
|
||||
*
|
||||
* This class is provided as-is and pro bono, so go ahead and muck with
|
||||
* it if you see things that could be done better.
|
||||
*
|
||||
* Thanks to WA for giving me the idea for this (albeit indirectly)!
|
||||
*
|
||||
* Updated 4/18/2003: Footprint decreased, minor code improvements.
|
||||
* Updated 5/3/2003: Minor comment clarification; no code changes.
|
||||
* Updated 5/10/2003: Minor code improvements.
|
||||
*/
|
||||
|
||||
|
||||
// The constructor should be called with
|
||||
// the parent object (optional, defaults to window).
|
||||
|
||||
function
|
||||
Timer ()
|
||||
{
|
||||
this.obj = (arguments.length) ? arguments[0] : window;
|
||||
return this;
|
||||
}
|
||||
|
||||
// The set functions should be called with:
|
||||
// - The name of the object method (as a string) (required)
|
||||
// - The millisecond delay (required)
|
||||
// - Any number of extra arguments, which will all be
|
||||
// passed to the method when it is evaluated.
|
||||
|
||||
Timer.prototype.setInterval = function (func, msec)
|
||||
{
|
||||
var i = Timer.getNew ();
|
||||
var t = Timer.buildCall (this.obj, i, arguments);
|
||||
Timer.set[i].timer = window.setInterval (t, msec);
|
||||
return i;
|
||||
}
|
||||
Timer.prototype.setTimeout = function (func, msec)
|
||||
{
|
||||
var i = Timer.getNew ();
|
||||
Timer.buildCall (this.obj, i, arguments);
|
||||
Timer.set[i].timer = window.setTimeout ("Timer.callOnce(" + i + ");", msec);
|
||||
return i;
|
||||
}
|
||||
|
||||
// The clear functions should be called with
|
||||
// the return value from the equivalent set function.
|
||||
|
||||
Timer.prototype.clearInterval = function (i)
|
||||
{
|
||||
if (!Timer.set[i])
|
||||
return;
|
||||
window.clearInterval (Timer.set[i].timer);
|
||||
Timer.set[i] = null;
|
||||
}
|
||||
Timer.prototype.clearTimeout = function (i)
|
||||
{
|
||||
if (!Timer.set[i])
|
||||
return;
|
||||
window.clearTimeout (Timer.set[i].timer);
|
||||
Timer.set[i] = null;
|
||||
}
|
||||
|
||||
// Private data
|
||||
|
||||
Timer.set = new Array ();
|
||||
Timer.buildCall = function (obj, i, args)
|
||||
{
|
||||
var t = "";
|
||||
Timer.set[i] = new Array ();
|
||||
if (obj != window)
|
||||
{
|
||||
Timer.set[i].obj = obj;
|
||||
t = "Timer.set[" + i + "].obj.";
|
||||
}
|
||||
t += args[0] + "(";
|
||||
if (args.length > 2)
|
||||
{
|
||||
Timer.set[i][0] = args[2];
|
||||
t += "Timer.set[" + i + "][0]";
|
||||
for (var j = 1; (j + 2) < args.length; j++)
|
||||
{
|
||||
Timer.set[i][j] = args[j + 2];
|
||||
t += ", Timer.set[" + i + "][" + j + "]";
|
||||
}
|
||||
}
|
||||
t += ");";
|
||||
Timer.set[i].call = t;
|
||||
return t;
|
||||
}
|
||||
Timer.callOnce = function (i)
|
||||
{
|
||||
if (!Timer.set[i])
|
||||
return;
|
||||
eval (Timer.set[i].call);
|
||||
Timer.set[i] = null;
|
||||
}
|
||||
Timer.getNew = function ()
|
||||
{
|
||||
var i = 0;
|
||||
while (Timer.set[i])
|
||||
i++;
|
||||
return i;
|
||||
}
|
||||
/*
|
||||
Here 's an example of the code in action:
|
||||
function Ticker ()
|
||||
{
|
||||
this.count = 0;
|
||||
this.timer = new Timer (this);
|
||||
}
|
||||
Ticker.prototype.tick = function (d)
|
||||
{
|
||||
this.count += d;
|
||||
window.status = "" + this.count;
|
||||
this.timer.setTimeout ("tick", 1000, d);
|
||||
}
|
||||
|
||||
window.onload = function ()
|
||||
{
|
||||
var ticker = new Ticker ();
|
||||
ticker.tick (1);
|
||||
}
|
||||
|
||||
*/
|
|
@ -0,0 +1,3 @@
|
|||
/index.html/1.1/Tue Jun 1 04:46:08 2010//
|
||||
D/turnOffInExplorer////
|
||||
D/xml////
|
|
@ -0,0 +1 @@
|
|||
screengenerator/htdocs/tests/autocomplete
|
|
@ -0,0 +1 @@
|
|||
:pserver:tv@192.168.2.25:/home/tv/cvs
|
|
@ -0,0 +1,387 @@
|
|||
var autocomplete = new function () {
|
||||
var me = this;
|
||||
|
||||
var inputNodes;
|
||||
var listContainerNode;
|
||||
var bodyNode;
|
||||
var minLength;
|
||||
var req;
|
||||
var currentLookupString = "";
|
||||
var currentFocusedInputNode = null;
|
||||
var numberCurrentValues;
|
||||
|
||||
var lastLookupString ="", lastLookupValues;
|
||||
|
||||
me.values = null;
|
||||
me.x = -1;
|
||||
me.y = -1;
|
||||
|
||||
me.init = function () {
|
||||
|
||||
if (EventHelpers.hasPageLoadHappened(arguments)) return;
|
||||
|
||||
bodyNode = document.getElementsByTagName('body')[0];
|
||||
minLength = config.getIntegerValue('autocomplete.values.minLength', 0);
|
||||
createListContainerNode();
|
||||
setInitialEvents();
|
||||
}
|
||||
|
||||
function createListContainerNode () {
|
||||
|
||||
|
||||
listContainerNode = document.createElement('div');
|
||||
|
||||
listContainerNode.style.display = 'none';
|
||||
listContainerNode.style.position= 'absolute';
|
||||
listContainerNode.id = 'autocomplete-selection'
|
||||
|
||||
|
||||
bodyNode.appendChild(listContainerNode);
|
||||
|
||||
}
|
||||
|
||||
function setInitialEvents () {
|
||||
inputNodes = CSSHelpers.getElementsByClassName(document,
|
||||
'autocomplete_input');
|
||||
|
||||
for (var i=0; i<inputNodes.length; i++) {
|
||||
|
||||
EventHelpers.addEvent(inputNodes[i], 'keyup', keyUpEvent);
|
||||
EventHelpers.addEvent(inputNodes[i], 'keypress', keyPressEvent);
|
||||
formNode = DOMHelpers.getAncestorByTagName(inputNodes[i], 'form');
|
||||
turnOffNativeAutocomplete(formNode);
|
||||
}
|
||||
|
||||
EventHelpers.addEvent(bodyNode, 'click', hideAutocompleteBox);
|
||||
EventHelpers.addEvent(document, 'click', hideAutocompleteBox)
|
||||
}
|
||||
|
||||
function keyUpEvent(e) {
|
||||
var key = EventHelpers.getKey(e);
|
||||
currentFocusedInputNode = EventHelpers.getEventTarget(e);
|
||||
switch (key) {
|
||||
case CharCode.DOWN:
|
||||
moveFocusOnListEvent(e);
|
||||
break;
|
||||
case CharCode.ESC:
|
||||
break;
|
||||
case CharCode.ENTER:
|
||||
EventHelpers.preventDefault(e);
|
||||
break;
|
||||
default:
|
||||
getListEvent(e);
|
||||
}
|
||||
|
||||
//getListEvent(e);
|
||||
}
|
||||
|
||||
function keyPressEvent(e) {
|
||||
var key = EventHelpers.getKey(e);
|
||||
switch (key) {
|
||||
case CharCode.DOWN:
|
||||
moveFocusOnListEvent(e);
|
||||
EventHelpers.preventDefault(e);
|
||||
break;
|
||||
case CharCode.ENTER:
|
||||
EventHelpers.preventDefault(e);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function moveFocusOnListEvent(e) {
|
||||
activeInputNode = EventHelpers.getEventTarget(e);
|
||||
|
||||
activeInputNode.blur();
|
||||
|
||||
var listNode = getListNode();
|
||||
|
||||
|
||||
// jslog.debug(listNode.nodeName)
|
||||
var listItemNodes = getListItemNodes();
|
||||
var firstListItemNode;
|
||||
|
||||
|
||||
|
||||
|
||||
if (listItemNodes.length > 0) {
|
||||
firstListItemNode = listItemNodes[0]
|
||||
} else {
|
||||
firstListItemNode = listItemNodes;
|
||||
}
|
||||
|
||||
jslog.debug('firstListItemNode: ' + firstListItemNode.nodeName)
|
||||
|
||||
if (firstListItemNode) {
|
||||
|
||||
switch (firstListItemNode.nodeName) {
|
||||
case "OPTION":
|
||||
|
||||
//listNode.focus();
|
||||
//jslog.debug(DebugHelpers.getProperties(firstListItemNode));
|
||||
firstListItemNode.selected = 'selected';
|
||||
replaceValue(firstListItemNode);
|
||||
listNode.focus();
|
||||
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
//firstListItemNode.focus();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//jslog.debug('listNode properties: ' + DebugHelpers.getProperties(listNode))
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function getListEvent(e) {
|
||||
activeInputNode = EventHelpers.getEventTarget(e);
|
||||
currentLookupString=activeInputNode.value;
|
||||
|
||||
if (currentLookupString.length < minLength) {
|
||||
listContainerNode.innerHTML = "";
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
me.x = CSSHelpers.getAbsoluteLeft(activeInputNode);
|
||||
me.y = CSSHelpers.getAbsoluteTop(activeInputNode)
|
||||
+ CSSHelpers.getHeight(activeInputNode);
|
||||
|
||||
|
||||
var id=activeInputNode.name.replace(/ /g, '_' );
|
||||
|
||||
|
||||
var URL = config.getScriptedValue('autocomplete.urls.' + id,
|
||||
{
|
||||
inputID: id,
|
||||
inputValue: currentLookupString
|
||||
});
|
||||
|
||||
listContainerNode.innerHTML = config.getValue('autocomplete.templates.pleaseWait');
|
||||
showAutocompleteBox();
|
||||
|
||||
|
||||
/*
|
||||
* if this is not the old request with a few letters tacked on,
|
||||
* do an httpRequest to this. Otherwise, do call setValues().
|
||||
*/
|
||||
|
||||
if (lastLookupString != "" && currentLookupString.toLowerCase().indexOf(lastLookupString.toLowerCase()) == 0) {
|
||||
showDropDown(lastLookupValues);
|
||||
} else {
|
||||
if (req) {
|
||||
req.abort();
|
||||
}
|
||||
req = XMLHelpers.getXMLHttpRequest(URL, getListRequest);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function getListRequest() {
|
||||
if (!req) {
|
||||
//DebugHelpers.log("XMLHttpRequest was null: exiting");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (req.readyState == ReadyState.COMPLETED) {
|
||||
// only if "OK"
|
||||
|
||||
if (req.status == HttpCode.OK) {
|
||||
var values = req.responseText.split('\n');
|
||||
showDropDown(values);
|
||||
lastLookupString=currentLookupString;
|
||||
lastLookupValues=values;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function showDropDown(values) {
|
||||
removeAutocompleteBoxEvents();
|
||||
me.setValues(values);
|
||||
jslog.debug(numberCurrentValues)
|
||||
if (numberCurrentValues == 0) {
|
||||
hideAutocompleteBox();
|
||||
} else {
|
||||
jslog.debug('not zeri')
|
||||
setAutocompleteBoxEvents();
|
||||
showAutocompleteBox();
|
||||
}
|
||||
}
|
||||
|
||||
me.setValues = function (values) {
|
||||
me.values = values;
|
||||
|
||||
var lastElement = me.values.pop();
|
||||
|
||||
if (lastElement.trim() != "") {
|
||||
me.values.push(lastElement)
|
||||
}
|
||||
|
||||
|
||||
if (me.values.length == 0) {
|
||||
listContainerNode.innerHTML = "";
|
||||
}
|
||||
else {
|
||||
|
||||
var valuesHTMLSb = new StringBuffer();
|
||||
numberCurrentValues = 0;
|
||||
for (var i = 0; i < me.values.length; i++) {
|
||||
var value = me.values[i].trim();
|
||||
|
||||
if (value != "" && value.toLowerCase().indexOf(currentLookupString.toLowerCase()) == 0 ) {
|
||||
numberCurrentValues++;
|
||||
valuesHTMLSb.append(config.getScriptedValue('autocomplete.templates.listItem', {
|
||||
listItem: me.values[i]
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
listContainerNode.innerHTML = config.getScriptedValue('autocomplete.templates.list', {
|
||||
listItemsHTML: valuesHTMLSb.toString()
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function selectKeyEvent (e) {
|
||||
var key = EventHelpers.getKey(e);
|
||||
|
||||
|
||||
switch(key){
|
||||
case CharCode.ESC:
|
||||
case CharCode.ENTER:
|
||||
hideAutocompleteBox(e);
|
||||
currentFocusedInputNode.focus();
|
||||
|
||||
break;
|
||||
case CharCode.TAB:
|
||||
focusOnInputField(e);
|
||||
break;
|
||||
case CharCode.BACKSPACE:
|
||||
currentFocusedInputNode.value = "";
|
||||
hideAutocompleteBox(e);
|
||||
currentFocusedInputNode.focus();
|
||||
// prevents browser from going back a page.
|
||||
EventHelpers.preventDefault(e);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function focusOnInputField(e) {
|
||||
currentFocusedInputNode.focus();
|
||||
if (BrowserDetect.browser == "Explorer") {
|
||||
EventHelpers.preventDefault(e);
|
||||
}
|
||||
}
|
||||
|
||||
function showAutocompleteBox () {
|
||||
CSSHelpers.moveTo(listContainerNode, me.x, me.y)
|
||||
listContainerNode.style.display = 'block';
|
||||
}
|
||||
|
||||
function hideAutocompleteBox(e) {
|
||||
listContainerNode.style.display = 'none';
|
||||
removeAutocompleteBoxEvents();
|
||||
listContainerNode.innerHTML = '';
|
||||
}
|
||||
|
||||
function getListItemNodes () {
|
||||
var valueNodes = cssQuery(
|
||||
config.getValue('autocomplete.selectors.listItem'),
|
||||
listContainerNode
|
||||
);
|
||||
|
||||
return valueNodes;
|
||||
}
|
||||
|
||||
function getListNode () {
|
||||
var listNodes = cssQuery(
|
||||
config.getValue('autocomplete.selectors.list'),
|
||||
listContainerNode
|
||||
);
|
||||
|
||||
if (listNodes && listNodes.length > 0) {
|
||||
return listNodes[0];
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function setAutocompleteBoxEvents() {
|
||||
var valueNodes = getListItemNodes();
|
||||
|
||||
var listNode = getListNode();
|
||||
|
||||
if (listNode) {
|
||||
EventHelpers.addEvent(listNode, 'change', replaceValueEvent);
|
||||
EventHelpers.addEvent(listNode, 'blur', hideAutocompleteBox);
|
||||
EventHelpers.addEvent(listNode, 'keyup', selectKeyEvent);
|
||||
EventHelpers.addEvent(listNode, 'keydown', selectKeyEvent);
|
||||
EventHelpers.addEvent(listNode, 'blur', focusOnInputField);
|
||||
}
|
||||
|
||||
if (valueNodes) {
|
||||
for (var i = 0; i < valueNodes.length; i++) {
|
||||
|
||||
EventHelpers.addEvent(valueNodes[i], 'click', replaceValueEvent);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function removeAutocompleteBoxEvents() {
|
||||
|
||||
|
||||
var valueNodes = getListItemNodes();
|
||||
|
||||
var listNode = getListNode();
|
||||
|
||||
if (listNode) {
|
||||
EventHelpers.removeEvent(listNode, 'change', replaceValueEvent);
|
||||
EventHelpers.removeEvent(listNode, 'blur', hideAutocompleteBox);
|
||||
}
|
||||
|
||||
if (valueNodes) {
|
||||
for (var i = 0; i < valueNodes.length; i++) {
|
||||
EventHelpers.removeEvent(valueNodes[i], 'click', replaceValueEvent);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function replaceValueEvent(e){
|
||||
var valueNode = EventHelpers.getEventTarget(e);
|
||||
replaceValue(valueNode)
|
||||
}
|
||||
|
||||
function replaceValue(valueNode) {
|
||||
var value = valueNode.value;
|
||||
jslog.debug(valueNode.value);
|
||||
if (!value) {
|
||||
value = valueNode.innerHTML;
|
||||
}
|
||||
|
||||
activeInputNode.value = value;
|
||||
|
||||
}
|
||||
|
||||
function turnOffNativeAutocomplete(formNode) {
|
||||
formNode.setAttribute('autocomplete', 'off');
|
||||
}
|
||||
}
|
||||
|
||||
EventHelpers.addPageLoadEvent('autocomplete.init');
|
|
@ -0,0 +1,34 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<title>Untitled Document</title>
|
||||
<!-- <script type="text/javascript" src="../../shared/js/jslog.js"></script> -->
|
||||
<script type="text/javascript" src="../../shared/js/helpers.js"></script>
|
||||
<script type="text/javascript" src="../../shared/js/config.js"></script>
|
||||
<script type="text/javascript" src="../../shared/js/cssQuery-p.js"></script>
|
||||
<script type="text/javascript" src="../../shared/js/autocomplete.js"></script>
|
||||
|
||||
<link type="text/css" href="../../shared/css/autocomplete.css" rel="stylesheet" media="all" />
|
||||
</head>
|
||||
<body>
|
||||
<form action="http://www.useragentman.com/testForm.php">
|
||||
<table class="formTable">
|
||||
<tr>
|
||||
<th>Homing City #1:</th>
|
||||
<td><input type="text" id="city" name="city" value="" class="autocomplete_input" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Homing City #2:</th>
|
||||
<td><input type="text" id="city" name="city2" value="" class="autocomplete_input" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<div id="config">
|
||||
<!--
|
||||
xml=xml/config.xml
|
||||
-->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1 @@
|
|||
/index.html/1.1/Tue Jun 1 04:45:15 2010//
|
|
@ -0,0 +1 @@
|
|||
screengenerator/htdocs/tests/autocomplete/turnOffInExplorer
|
|
@ -0,0 +1 @@
|
|||
:pserver:tv@192.168.2.25:/home/tv/cvs
|
|
@ -0,0 +1,30 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<title>Untitled Document</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<form action="http://www.useragentman.com/testForm.php">
|
||||
<table>
|
||||
<tr>
|
||||
<th>Username:</th>
|
||||
<td><input type="text" name="username" /></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th>Password:</th>
|
||||
<td><input type="password" name="password" /></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<input type="submit" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1 @@
|
|||
/config.xml/1.1/Tue Jun 1 04:45:42 2010//
|
|
@ -0,0 +1 @@
|
|||
screengenerator/htdocs/tests/autocomplete/xml
|
|
@ -0,0 +1 @@
|
|||
:pserver:tv@192.168.2.25:/home/tv/cvs
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<config>
|
||||
<autocomplete>
|
||||
<urls>
|
||||
<city>/bin/getList.cgi?inputValue=@inputValue&inputID=cities</city>
|
||||
<city2>/bin/getList.cgi?inputValue=@inputValue&inputID=cities</city2>
|
||||
</urls>
|
||||
<templates>
|
||||
<list><![CDATA[
|
||||
<select size="10">@listItemsHTML</select>
|
||||
]]></list>
|
||||
<listItem><![CDATA[
|
||||
<option value="@listItem">@listItem</option>
|
||||
]]></listItem>
|
||||
<pleaseWait><![CDATA[
|
||||
<div id="autocomplete-pleaseWait">
|
||||
<strong><img src="../../shared/images/icons/spinner.gif" />Please Wait</strong>
|
||||
</div>
|
||||
]]></pleaseWait>
|
||||
</templates>
|
||||
<selectors>
|
||||
<listItem>option</listItem>
|
||||
<list>select</list>
|
||||
</selectors>
|
||||
<values>
|
||||
<minLength>1</minLength>
|
||||
</values>
|
||||
</autocomplete>
|
||||
</config>
|
6
itf/static/js/html5Forms.js/shared/js/cssQuery-p.js
Normal file
6
itf/static/js/html5Forms.js/shared/js/cssQuery-p.js
Normal file
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,797 @@
|
|||
/*
|
||||
Unobtrusive Slider Control by frequency decoder v2.6 (http://www.frequency-decoder.com/)
|
||||
|
||||
Released under a creative commons Attribution-Share Alike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
You are free:
|
||||
|
||||
* to copy, distribute, display, and perform the work
|
||||
* to make derivative works
|
||||
* to make commercial use of the work
|
||||
|
||||
Under the following conditions:
|
||||
|
||||
by Attribution.
|
||||
--------------
|
||||
You must attribute the work in the manner specified by the author or licensor.
|
||||
|
||||
sa
|
||||
--
|
||||
Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one.
|
||||
|
||||
* For any reuse or distribution, you must make clear to others the license terms of this work.
|
||||
* Any of these conditions can be waived if you get permission from the copyright holder.
|
||||
*/
|
||||
|
||||
var fdSliderController = (function() {
|
||||
var sliders = {},
|
||||
uniqueid = 0,
|
||||
mouseWheelEnabled = true;
|
||||
|
||||
var removeMouseWheelSupport = function() {
|
||||
mouseWheelEnabled = false;
|
||||
};
|
||||
var addEvent = function(obj, type, fn) {
|
||||
if( obj.attachEvent ) {
|
||||
obj["e"+type+fn] = fn;
|
||||
obj[type+fn] = function(){obj["e"+type+fn]( window.event );};
|
||||
obj.attachEvent( "on"+type, obj[type+fn] );
|
||||
} else { obj.addEventListener( type, fn, true ); }
|
||||
};
|
||||
var removeEvent = function(obj, type, fn) {
|
||||
if( obj.detachEvent ) {
|
||||
try {
|
||||
obj.detachEvent( "on"+type, obj[type+fn] );
|
||||
obj[type+fn] = null;
|
||||
} catch(err) { };
|
||||
} else { obj.removeEventListener( type, fn, true ); }
|
||||
};
|
||||
var stopEvent = function(e) {
|
||||
if(e == null) e = document.parentWindow.event;
|
||||
if(e.stopPropagation) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
};
|
||||
|
||||
/*@cc_on@*/
|
||||
/*@if(@_win32)
|
||||
e.cancelBubble = true;
|
||||
e.returnValue = false;
|
||||
/*@end@*/
|
||||
|
||||
return false;
|
||||
};
|
||||
var joinNodeLists = function() {
|
||||
if(!arguments.length) { return []; };
|
||||
var nodeList = [];
|
||||
for (var i = 0; i < arguments.length; i++) {
|
||||
for (var j = 0, item; item = arguments[i][j]; j++) { nodeList[nodeList.length] = item; };
|
||||
};
|
||||
return nodeList;
|
||||
};
|
||||
|
||||
// Function by Artem B. with a minor change by f.d.
|
||||
var parseCallbacks = function(cbs) {
|
||||
if(cbs == null) { return {}; };
|
||||
var func,
|
||||
type,
|
||||
cbObj = {},
|
||||
parts,
|
||||
obj;
|
||||
for(var i = 0, fn; fn = cbs[i]; i++) {
|
||||
type = fn.match(/(fd_slider_cb_(update|create|destroy|redraw|move|focus|blur|enable|disable)_)([^\s|$]+)/i)[1];
|
||||
fn = fn.replace(new RegExp("^"+type), "").replace(/-/g, ".");
|
||||
type = type.replace(/^fd_slider_cb_/i, "").replace(/_$/, "");
|
||||
|
||||
try {
|
||||
if(fn.indexOf(".") != -1) {
|
||||
parts = fn.split('.');
|
||||
obj = window;
|
||||
for (var x = 0, part; part = obj[parts[x]]; x++) {
|
||||
if(part instanceof Function) {
|
||||
(function() {
|
||||
var method = part;
|
||||
func = function (data) { method.apply(obj, [data]) };
|
||||
})();
|
||||
} else {
|
||||
obj = part;
|
||||
};
|
||||
};
|
||||
} else {
|
||||
func = window[fn];
|
||||
};
|
||||
|
||||
if(!(func instanceof Function)) continue;
|
||||
if(!(type in cbObj)) { cbObj[type] = []; };
|
||||
cbObj[type][cbObj[type].length] = func;
|
||||
} catch (err) {};
|
||||
};
|
||||
return cbObj;
|
||||
};
|
||||
|
||||
var parseClassNames = function(cbs) {
|
||||
if(cbs == null) { return ""; };
|
||||
var cns = [];
|
||||
for(var i = 0, cn; cn = cbs[i]; i++) {
|
||||
cns[cns.length] = cn.replace(/^fd_slider_cn_/, "");
|
||||
};
|
||||
return cns.join(" ");
|
||||
};
|
||||
var createSlider = function(options) {
|
||||
if(!options || !options.inp || !options.inp.id) { return false; };
|
||||
destroySingleSlider(options.inp.id);
|
||||
sliders[options.inp.id] = new fdSlider(options);
|
||||
return true;
|
||||
};
|
||||
var init = function( elem ) {
|
||||
var ranges = /fd_range_([-]{0,1}[0-9]+(d[0-9]+){0,1}){1}_([-]{0,1}[0-9]+(d[0-9]+){0,1}){1}/i,
|
||||
increment = /fd_inc_([-]{0,1}[0-9]+(d[0-9]+){0,1}){1}/,
|
||||
kIncrement = /fd_maxinc_([-]{0,1}[0-9]+(d[0-9]+){0,1}){1}/,
|
||||
callbacks = /((fd_slider_cb_(update|create|destroy|redraw|move|focus|blur|enable|disable)_)([^\s|$]+))/ig,
|
||||
classnames = /(fd_slider_cn_([a-zA-Z0-9_\-]+))/ig,
|
||||
inputs = elem && elem.tagName && elem.tagName.search(/input|select/i) != -1 ? [elem] : joinNodeLists(document.getElementsByTagName('input'), document.getElementsByTagName('select')),
|
||||
range,
|
||||
tmp,
|
||||
options;
|
||||
|
||||
for(var i = 0, inp; inp = inputs[i]; i++) {
|
||||
if((inp.tagName.toLowerCase() == "input" && inp.type == "text" && (inp.className.search(ranges) != -1 || inp.className.search(/fd_slider/) != -1)) || (inp.tagName.toLowerCase() == "select" && inp.className.search(/fd_slider/) != -1)) {
|
||||
// If we haven't been passed a specific id and the slider exists then continue
|
||||
if(!elem && inp.id && document.getElementById("fd-slider-"+inp.id)) { continue; };
|
||||
|
||||
// Create an id if necessary
|
||||
if(!inp.id) { inp.id == "sldr" + uniqueid++; };
|
||||
|
||||
options = {
|
||||
inp: inp,
|
||||
inc: inp.className.search(increment) != -1 ? inp.className.match(increment)[0].replace("fd_inc_", "").replace("d",".") : "1",
|
||||
maxInc: inp.className.search(kIncrement) != -1 ? inp.className.match(kIncrement)[0].replace("fd_maxinc_", "").replace("d",".") : false,
|
||||
range: [0,100],
|
||||
callbacks: parseCallbacks(inp.className.match(callbacks)),
|
||||
classNames: parseClassNames(inp.className.match(classnames)),
|
||||
tween: inp.className.search(/fd_tween/i) != -1,
|
||||
vertical: inp.className.search(/fd_vertical/i) != -1,
|
||||
hideInput: inp.className.search(/fd_hide_input/i) != -1,
|
||||
clickJump: inp.className.search(/fd_jump/i) != -1,
|
||||
fullARIA: inp.className.search(/fd_full_aria/i) != -1,
|
||||
noMouseWheel: inp.className.search(/fd_disable_mousewheel/i) != -1
|
||||
};
|
||||
|
||||
if(inp.tagName.toLowerCase() == "select") {
|
||||
options.range = [0, inp.options.length - 1];
|
||||
} else if(inp.className.search(ranges) != -1) {
|
||||
range = inp.className.match(ranges)[0].replace("fd_range_", "").replace(/d/g,".").split("_");
|
||||
options.range = [range[0], range[1]];
|
||||
};
|
||||
|
||||
createSlider(options);
|
||||
};
|
||||
};
|
||||
|
||||
return true;
|
||||
};
|
||||
var destroySingleSlider = function(id) {
|
||||
if(id in sliders) {
|
||||
sliders[id].destroy();
|
||||
delete sliders[id];
|
||||
return true;
|
||||
};
|
||||
return false;
|
||||
};
|
||||
var destroyAllsliders = function(e) {
|
||||
for(slider in sliders) { sliders[slider].destroy(); };
|
||||
};
|
||||
var unload = function(e) {
|
||||
destroyAllsliders();
|
||||
sliders = null;
|
||||
removeEvent(window, "unload", unload);
|
||||
removeEvent(window, "resize", resize);
|
||||
removeOnloadEvent();
|
||||
};
|
||||
var resize = function(e) {
|
||||
for(slider in sliders) { sliders[slider].onResize(); };
|
||||
};
|
||||
var removeOnloadEvent = function() {
|
||||
removeEvent(window, "load", init);
|
||||
/*@cc_on@*/
|
||||
/*@if(@_win32)
|
||||
removeEvent(window, "load", function() { setTimeout(onload, 200) });
|
||||
/*@end@*/
|
||||
};
|
||||
function fdSlider(options) {
|
||||
|
||||
var inp = options.inp,
|
||||
disabled = false,
|
||||
tagName = inp.tagName.toLowerCase(),
|
||||
min = +options.range[0],
|
||||
max = +options.range[1],
|
||||
range = Math.abs(max - min),
|
||||
inc = tagName == "select" ? 1 : +options.inc||1,
|
||||
maxInc = options.maxInc && options.maxInc != 'undefined' ? options.maxInc : inc * 2;
|
||||
// alert(options.maxInc + "," + maxInc)
|
||||
|
||||
var precision = options.inc.search(".") != -1 ? options.inc.substr(options.inc.indexOf(".")+1, options.inc.length - 1).length : 0,
|
||||
steps = Math.ceil(range / inc),
|
||||
useTween = !!options.tween,
|
||||
fullARIA = !!options.fullARIA,
|
||||
hideInput = !!options.hideInput,
|
||||
clickJump = useTween ? false : !!options.clickJump,
|
||||
vertical = !!options.vertical,
|
||||
callbacks = options.callbacks,
|
||||
classNames = options.classNames,
|
||||
noMWheel = !!options.noMouseWheel,
|
||||
timer = null,
|
||||
kbEnabled = true,
|
||||
sliderH = 0,
|
||||
sliderW = 0,
|
||||
tweenX = 0,
|
||||
tweenB = 0,
|
||||
tweenC = 0,
|
||||
tweenD = 0,
|
||||
frame = 0,
|
||||
x = 0,
|
||||
y = 0,
|
||||
maxPx = 0,
|
||||
handlePos = 0,
|
||||
destPos = 0,
|
||||
mousePos = 0,
|
||||
deltaPx = 0,
|
||||
stepPx = 0,
|
||||
self = this,
|
||||
changeList = {},
|
||||
initVal = null,
|
||||
outerWrapper,
|
||||
wrapper,
|
||||
handle,
|
||||
bar;
|
||||
|
||||
if(max < min) {
|
||||
inc = -inc;
|
||||
maxInc = -maxInc;
|
||||
};
|
||||
|
||||
function disableSlider(noCallback) {
|
||||
if(disabled && !noCallback) { return; };
|
||||
|
||||
try {
|
||||
removeEvent(outerWrapper, "mouseover", onMouseOver);
|
||||
removeEvent(outerWrapper, "mouseout", onMouseOut);
|
||||
removeEvent(outerWrapper, "mousedown", onMouseDown);
|
||||
removeEvent(handle, "focus", onFocus);
|
||||
removeEvent(handle, "blur", onBlur);
|
||||
if(!window.opera) {
|
||||
removeEvent(handle, "keydown", onKeyDown);
|
||||
removeEvent(handle, "keypress", onKeyPress);
|
||||
} else {
|
||||
removeEvent(handle, "keypress", onKeyDown);
|
||||
};
|
||||
removeEvent(handle, "mousedown", onHandleMouseDown);
|
||||
removeEvent(handle, "mouseup", onHandleMouseUp);
|
||||
|
||||
if(mouseWheelEnabled && !noMWheel) {
|
||||
if (window.addEventListener && !window.devicePixelRatio) window.removeEventListener('DOMMouseScroll', trackMouseWheel, false);
|
||||
else {
|
||||
removeEvent(document, "mousewheel", trackMouseWheel);
|
||||
removeEvent(window, "mousewheel", trackMouseWheel);
|
||||
};
|
||||
};
|
||||
} catch(err) {};
|
||||
|
||||
clearTimeout(timer);
|
||||
outerWrapper.className = outerWrapper.className.replace("slider-disabled", "") + " slider-disabled";
|
||||
outerWrapper.setAttribute("aria-disabled", true);
|
||||
inp.disabled = disabled = true;
|
||||
|
||||
if(!noCallback) {
|
||||
callback("disable");
|
||||
};
|
||||
};
|
||||
|
||||
function enableSlider(noCallback) {
|
||||
if(!disabled && !noCallback) return;
|
||||
addEvent(outerWrapper, "mouseover", onMouseOver);
|
||||
addEvent(outerWrapper, "mouseout", onMouseOut);
|
||||
addEvent(outerWrapper, "mousedown", onMouseDown);
|
||||
if(!window.opera) {
|
||||
addEvent(handle, "keydown", onKeyDown);
|
||||
addEvent(handle, "keypress", onKeyPress);
|
||||
} else {
|
||||
addEvent(handle, "keypress", onKeyDown);
|
||||
};
|
||||
addEvent(handle, "focus", onFocus);
|
||||
addEvent(handle, "blur", onBlur);
|
||||
addEvent(handle, "mousedown", onHandleMouseDown);
|
||||
addEvent(handle, "mouseup", onHandleMouseUp);
|
||||
|
||||
outerWrapper.className = outerWrapper.className.replace("slider-disabled", "");
|
||||
outerWrapper.setAttribute("aria-disabled", false);
|
||||
inp.disabled = disabled = false;
|
||||
|
||||
if(!noCallback) {
|
||||
callback("enable");
|
||||
};
|
||||
};
|
||||
|
||||
function destroySlider() {
|
||||
try {
|
||||
disableSlider();
|
||||
outerWrapper.parentNode.removeChild(outerWrapper);
|
||||
} catch(err) {};
|
||||
|
||||
wrapper = bar = handle = outerWrapper = timer = null;
|
||||
callback("destroy");
|
||||
callbacks = null;
|
||||
};
|
||||
|
||||
function redraw() {
|
||||
locate();
|
||||
// Internet Explorer requires the try catch
|
||||
try {
|
||||
var sW = outerWrapper.offsetWidth,
|
||||
sH = outerWrapper.offsetHeight,
|
||||
hW = handle.offsetWidth,
|
||||
hH = handle.offsetHeight,
|
||||
bH = bar.offsetHeight,
|
||||
bW = bar.offsetWidth;
|
||||
|
||||
maxPx = vertical ? sH - hH : sW - hW;
|
||||
stepPx = maxPx / steps;
|
||||
deltaPx = maxPx / Math.ceil(range / maxInc);
|
||||
|
||||
|
||||
sliderW = sW;
|
||||
sliderH = sH;
|
||||
|
||||
valueToPixels();
|
||||
} catch(err) { };
|
||||
callback("redraw");
|
||||
};
|
||||
|
||||
function callback(type) {
|
||||
var cbObj = {"elem":inp, "value":tagName == "select" ? inp.options[inp.selectedIndex].value : inp.value};
|
||||
if(type in callbacks) {
|
||||
for(var i = 0, func; func = callbacks[type][i]; i++) {
|
||||
func(cbObj);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
function onFocus(e) {
|
||||
outerWrapper.className = outerWrapper.className.replace('focused','') + ' focused';
|
||||
if(mouseWheelEnabled && !noMWheel) {
|
||||
addEvent(window, 'DOMMouseScroll', trackMouseWheel);
|
||||
addEvent(document, 'mousewheel', trackMouseWheel);
|
||||
if(!window.opera) addEvent(window, 'mousewheel', trackMouseWheel);
|
||||
};
|
||||
callback("focus");
|
||||
};
|
||||
|
||||
function onBlur(e) {
|
||||
outerWrapper.className = outerWrapper.className.replace(/focused|fd-fc-slider-hover|fd-slider-hover/g,'');
|
||||
if(mouseWheelEnabled && !noMWheel) {
|
||||
removeEvent(document, 'mousewheel', trackMouseWheel);
|
||||
removeEvent(window, 'DOMMouseScroll', trackMouseWheel);
|
||||
if(!window.opera) removeEvent(window, 'mousewheel', trackMouseWheel);
|
||||
};
|
||||
callback("blur");
|
||||
};
|
||||
|
||||
function trackMouseWheel(e) {
|
||||
if(!kbEnabled) return;
|
||||
e = e || window.event;
|
||||
var delta = 0;
|
||||
|
||||
if (e.wheelDelta) {
|
||||
delta = e.wheelDelta/120;
|
||||
if (window.opera && window.opera.version() < 9.2) delta = -delta;
|
||||
} else if(e.detail) {
|
||||
delta = -e.detail/3;
|
||||
};
|
||||
|
||||
if(vertical) { delta = -delta; };
|
||||
|
||||
if(delta) {
|
||||
var xtmp = vertical ? handle.offsetTop : handle.offsetLeft;
|
||||
xtmp = (delta < 0) ? Math.ceil(xtmp + deltaPx) : Math.floor(xtmp - deltaPx);
|
||||
pixelsToValue(Math.min(Math.max(xtmp, 0), maxPx));
|
||||
}
|
||||
return stopEvent(e);
|
||||
};
|
||||
|
||||
function onKeyPress(e) {
|
||||
e = e || document.parentWindow.event;
|
||||
if ((e.keyCode >= 33 && e.keyCode <= 40) || !kbEnabled || e.keyCode == 45 || e.keyCode == 46) {
|
||||
return stopEvent(e);
|
||||
};
|
||||
return true;
|
||||
};
|
||||
|
||||
function onKeyDown(e) {
|
||||
if(!kbEnabled) return true;
|
||||
|
||||
e = e || document.parentWindow.event;
|
||||
var kc = e.keyCode != null ? e.keyCode : e.charCode;
|
||||
|
||||
if ( kc < 33 || (kc > 40 && (kc != 45 && kc != 46))) return true;
|
||||
|
||||
var value = tagName == "input" ? parseFloat(inp.value) : inp.selectedIndex;
|
||||
if(isNaN(value) || value < Math.min(min,max)) value = Math.min(min,max);
|
||||
|
||||
if( kc == 37 || kc == 40 || kc == 46 || kc == 34) {
|
||||
// left, down, ins, page down
|
||||
value -= (e.ctrlKey || kc == 34 ? maxInc : inc)
|
||||
} else if( kc == 39 || kc == 38 || kc == 45 || kc == 33) {
|
||||
// right, up, del, page up
|
||||
value += (e.ctrlKey || kc == 33 ? maxInc : inc)
|
||||
} else if( kc == 35 ) {
|
||||
// max
|
||||
value = max;
|
||||
} else if( kc == 36 ) {
|
||||
// min
|
||||
value = min;
|
||||
};
|
||||
|
||||
valueToPixels(value);
|
||||
callback("update");
|
||||
|
||||
// Opera doesn't let us cancel key events so the up/down arrows and home/end buttons will scroll the screen - which sucks
|
||||
return stopEvent(e);
|
||||
};
|
||||
|
||||
function onMouseOver( e ) {
|
||||
/*@cc_on@*/
|
||||
/*@if(@_jscript_version <= 5.6)
|
||||
if(this.className.search(/focused/) != -1) {
|
||||
this.className = this.className.replace("fd-fc-slider-hover", "") +' fd-fc-slider-hover';
|
||||
return;
|
||||
}
|
||||
/*@end@*/
|
||||
this.className = this.className.replace(/fd\-slider\-hover/g,"") +' fd-slider-hover';
|
||||
};
|
||||
|
||||
function onMouseOut( e ) {
|
||||
/*@cc_on@*/
|
||||
/*@if(@_jscript_version <= 5.6)
|
||||
if(this.className.search(/focused/) != -1) {
|
||||
this.className = this.className.replace("fd-fc-slider-hover", "");
|
||||
return;
|
||||
}
|
||||
/*@end@*/
|
||||
this.className = this.className.replace(/fd\-slider\-hover/g,"");
|
||||
};
|
||||
|
||||
function onHandleMouseUp(e) {
|
||||
e = e || window.event;
|
||||
removeEvent(document, 'mousemove', trackMouse);
|
||||
removeEvent(document, 'mouseup', onHandleMouseUp);
|
||||
|
||||
kbEnabled = true;
|
||||
|
||||
// Opera fires the blur event when the mouseup event occurs on a button, so we attept to force a focus
|
||||
if(window.opera) try { setTimeout(function() { onfocus(); }, 0); } catch(err) {};
|
||||
document.body.className = document.body.className.replace(/slider-drag-vertical|slider-drag-horizontal/g, "");
|
||||
|
||||
return stopEvent(e);
|
||||
};
|
||||
|
||||
function onHandleMouseDown(e) {
|
||||
e = e || window.event;
|
||||
mousePos = vertical ? e.clientY : e.clientX;
|
||||
handlePos = parseInt(vertical ? handle.offsetTop : handle.offsetLeft)||0;
|
||||
kbEnabled = false;
|
||||
|
||||
clearTimeout(timer);
|
||||
timer = null;
|
||||
|
||||
addEvent(document, 'mousemove', trackMouse);
|
||||
addEvent(document, 'mouseup', onHandleMouseUp);
|
||||
|
||||
// Force a "focus" on the button on mouse events
|
||||
if(window.devicePixelRatio || (document.all && !window.opera)) try { setTimeout(function() { handle.focus(); }, 0); } catch(err) {};
|
||||
|
||||
document.body.className += " slider-drag-" + (vertical ? "vertical" : "horizontal");
|
||||
};
|
||||
|
||||
function onMouseUp( e ) {
|
||||
e = e || window.event;
|
||||
removeEvent(document, 'mouseup', onMouseUp);
|
||||
if(!useTween) {
|
||||
clearTimeout(timer);
|
||||
timer = null;
|
||||
kbEnabled = true;
|
||||
};
|
||||
return stopEvent(e);
|
||||
};
|
||||
|
||||
function trackMouse( e ) {
|
||||
e = e || window.event;
|
||||
pixelsToValue(snapToNearestValue(handlePos + (vertical ? e.clientY - mousePos : e.clientX - mousePos)));
|
||||
};
|
||||
|
||||
function onMouseDown( e ) {
|
||||
e = e || window.event;
|
||||
var targ;
|
||||
if (e.target) targ = e.target;
|
||||
else if (e.srcElement) targ = e.srcElement;
|
||||
if (targ.nodeType == 3) targ = targ.parentNode;
|
||||
|
||||
if(targ.className.search("fd-slider-handle") != -1) { return true; };
|
||||
|
||||
try { setTimeout(function() { handle.focus(); }, 0); } catch(err) { };
|
||||
|
||||
clearTimeout(timer);
|
||||
locate();
|
||||
|
||||
timer = null;
|
||||
kbEnabled = false;
|
||||
|
||||
var posx = 0,
|
||||
sLft = 0,
|
||||
sTop = 0;
|
||||
|
||||
// Internet Explorer doctype woes
|
||||
if (document.documentElement && document.documentElement.scrollTop) {
|
||||
sTop = document.documentElement.scrollTop;
|
||||
sLft = document.documentElement.scrollLeft;
|
||||
} else if (document.body) {
|
||||
sTop = document.body.scrollTop;
|
||||
sLft = document.body.scrollLeft;
|
||||
};
|
||||
|
||||
if (e.pageX) posx = vertical ? e.pageY : e.pageX;
|
||||
else if (e.clientX) posx = vertical ? e.clientY + sTop : e.clientX + sLft;
|
||||
posx -= vertical ? y + Math.round(handle.offsetHeight / 2) : x + Math.round(handle.offsetWidth / 2);
|
||||
posx = snapToNearestValue(posx);
|
||||
|
||||
if(useTween) {
|
||||
tweenTo(posx);
|
||||
} else if(clickJump) {
|
||||
pixelsToValue(posx);
|
||||
} else {
|
||||
addEvent(document, 'mouseup', onMouseUp);
|
||||
destPos = posx;
|
||||
onTimer();
|
||||
};
|
||||
};
|
||||
|
||||
function incrementHandle(numOfSteps) {
|
||||
var value = tagName == "input" ? parseFloat(inp.value) : inp.selectedIndex;
|
||||
if(isNaN(value) || value < Math.min(min,max)) value = Math.min(min,max);
|
||||
value += inc * numOfSteps;
|
||||
valueToPixels(value);
|
||||
};
|
||||
|
||||
function snapToNearestValue(px) {
|
||||
var rem = px % stepPx;
|
||||
if(rem && rem >= (stepPx / 2)) { px += (stepPx - rem); }
|
||||
else { px -= rem; };
|
||||
return Math.min(Math.max(parseInt(px, 10), 0), maxPx);
|
||||
};
|
||||
|
||||
function locate(){
|
||||
var curleft = 0,
|
||||
curtop = 0,
|
||||
obj = outerWrapper;
|
||||
|
||||
// Try catch for IE's benefit
|
||||
try {
|
||||
while (obj.offsetParent) {
|
||||
curleft += obj.offsetLeft;
|
||||
curtop += obj.offsetTop;
|
||||
obj = obj.offsetParent;
|
||||
};
|
||||
} catch(err) {};
|
||||
x = curleft;
|
||||
y = curtop;
|
||||
};
|
||||
|
||||
function onTimer() {
|
||||
var xtmp = vertical ? handle.offsetTop : handle.offsetLeft;
|
||||
xtmp = Math.round((destPos < xtmp) ? Math.max(destPos, Math.floor(xtmp - deltaPx)) : Math.min(destPos, Math.ceil(xtmp + deltaPx)));
|
||||
pixelsToValue(xtmp);
|
||||
if(xtmp != destPos) timer = setTimeout(onTimer, steps > 20 ? 50 : 100);
|
||||
else kbEnabled = true;
|
||||
};
|
||||
|
||||
var tween = function(){
|
||||
frame++;
|
||||
var c = tweenC,
|
||||
d = 20,
|
||||
t = frame,
|
||||
b = tweenB,
|
||||
x = Math.ceil((t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b);
|
||||
|
||||
pixelsToValue(t == d ? tweenX : x);
|
||||
callback("move");
|
||||
if(t!=d) timer = setTimeout(tween, 20);
|
||||
else {
|
||||
clearTimeout(timer);
|
||||
timer = null;
|
||||
kbEnabled = true;
|
||||
};
|
||||
};
|
||||
|
||||
function tweenTo(tx){
|
||||
kbEnabled = false;
|
||||
tweenX = parseInt(tx, 10);
|
||||
tweenB = parseInt(vertical ? handle.style.top : handle.style.left, 10);
|
||||
tweenC = tweenX - tweenB;
|
||||
tweenD = 20;
|
||||
frame = 0;
|
||||
if(!timer) timer = setTimeout(tween, 20);
|
||||
};
|
||||
|
||||
function pixelsToValue(px) {
|
||||
//jslog.debug(DebugHelpers.getStackTrace())
|
||||
handle.style[vertical ? "top" : "left"] = px + "px";
|
||||
var val = min + (Math.round(px / stepPx) * inc);
|
||||
setInputValue((tagName == "select" || inc == 1) ? Math.round(val) : val);
|
||||
};
|
||||
|
||||
function valueToPixels(val) {
|
||||
var value = isNaN(val) ? tagName == "input" ? parseFloat(inp.value) : inp.selectedIndex : val;
|
||||
if(isNaN(value) || value < Math.min(min,max)) value = Math.min(min,max);
|
||||
else if(value > Math.max(min,max)) value = Math.max(min,max);
|
||||
setInputValue(value);
|
||||
handle.style[vertical ? "top" : "left"] = Math.round(((value - min) / inc) * stepPx) + "px";
|
||||
};
|
||||
|
||||
function setInputValue(val) {
|
||||
val = isNaN(val) ? min : val;
|
||||
if(tagName == "select") {
|
||||
try {
|
||||
val = parseInt(val, 10);
|
||||
if(inp.selectedIndex == val) return;
|
||||
inp.options[val].selected = true;
|
||||
} catch (err) {};
|
||||
} else {
|
||||
val = (min + (Math.round((val - min) / inc) * inc)).toFixed(precision);
|
||||
if(inp.value == val) return;
|
||||
inp.value = val;
|
||||
};
|
||||
updateAriaValues();
|
||||
callback("update");
|
||||
};
|
||||
|
||||
function findLabel() {
|
||||
var label;
|
||||
if(inp.parentNode && inp.parentNode.tagName.toLowerCase() == "label") label = inp.parentNode;
|
||||
else {
|
||||
var labelList = document.getElementsByTagName('label');
|
||||
// loop through label array attempting to match each 'for' attribute to the id of the current element
|
||||
for(var i = 0, lbl; lbl = labelList[i]; i++) {
|
||||
// Internet Explorer requires the htmlFor test
|
||||
if((lbl['htmlFor'] && lbl['htmlFor'] == inp.id) || (lbl.getAttribute('for') == inp.id)) {
|
||||
label = lbl;
|
||||
break;
|
||||
};
|
||||
};
|
||||
};
|
||||
if(label && !label.id) { label.id = inp.id + "_label"; };
|
||||
return label;
|
||||
};
|
||||
|
||||
function updateAriaValues() {
|
||||
handle.setAttribute("aria-valuenow", tagName == "select" ? inp.options[inp.selectedIndex].value : inp.value);
|
||||
handle.setAttribute("aria-valuetext", tagName == "select" ? inp.options[inp.selectedIndex].text : inp.value);
|
||||
};
|
||||
|
||||
function onChange( e ) {
|
||||
valueToPixels();
|
||||
callback("update");
|
||||
return true;
|
||||
};
|
||||
|
||||
(function() {
|
||||
if(hideInput) { inp.className += " fd_hide_slider_input"; }
|
||||
else { addEvent(inp, 'change', onChange); };
|
||||
|
||||
outerWrapper = document.createElement('div');
|
||||
outerWrapper.className = "fd-slider" + (vertical ? "-vertical " : " ") + classNames;
|
||||
outerWrapper.id = "fd-slider-" + inp.id;
|
||||
|
||||
wrapper = document.createElement('span');
|
||||
wrapper.className = "fd-slider-inner";
|
||||
|
||||
bar = document.createElement('span');
|
||||
bar.className = "fd-slider-bar";
|
||||
|
||||
if(fullARIA) {
|
||||
handle = document.createElement('span');
|
||||
handle.setAttribute(!/*@cc_on!@*/false ? "tabIndex" : "tabindex", "0");
|
||||
} else {
|
||||
handle = document.createElement('button');
|
||||
handle.setAttribute("type", "button");
|
||||
};
|
||||
|
||||
handle.className = "fd-slider-handle";
|
||||
handle.appendChild(document.createTextNode(String.fromCharCode(160)));
|
||||
|
||||
outerWrapper.appendChild(wrapper);
|
||||
outerWrapper.appendChild(bar);
|
||||
outerWrapper.appendChild(handle);
|
||||
|
||||
inp.parentNode.insertBefore(outerWrapper, inp);
|
||||
|
||||
/*@cc_on@*/
|
||||
/*@if(@_win32)
|
||||
handle.unselectable = "on";
|
||||
bar.unselectable = "on";
|
||||
wrapper.unselectable = "on";
|
||||
outerWrapper.unselectable = "on";
|
||||
/*@end@*/
|
||||
|
||||
// Add ARIA accessibility info programmatically
|
||||
handle.setAttribute("role", "slider");
|
||||
handle.setAttribute("aria-valuemin", min);
|
||||
handle.setAttribute("aria-valuemax", max);
|
||||
|
||||
var lbl = findLabel();
|
||||
if(lbl) {
|
||||
handle.setAttribute("aria-labelledby", lbl.id);
|
||||
handle.id = "fd-slider-handle-" + inp.id;
|
||||
/*@cc_on
|
||||
/*@if(@_win32)
|
||||
lbl.setAttribute("htmlFor", handle.id);
|
||||
@else @*/
|
||||
lbl.setAttribute("for", handle.id);
|
||||
/*@end
|
||||
@*/
|
||||
};
|
||||
|
||||
// Are there page instructions - the creation of the instructions has been left up to you fine reader...
|
||||
if(document.getElementById("fd_slider_describedby")) {
|
||||
handle.setAttribute("aria-describedby", "fd_slider_describedby"); // aaa:describedby
|
||||
};
|
||||
|
||||
if(inp.getAttribute("disabled") == true) {
|
||||
disableSlider(true);
|
||||
} else {
|
||||
enableSlider(true);
|
||||
};
|
||||
|
||||
updateAriaValues();
|
||||
callback("create");
|
||||
redraw();
|
||||
})();
|
||||
|
||||
return {
|
||||
onResize: function(e) { if(outerWrapper.offsetHeight != sliderH || outerWrapper.offsetWidth != sliderW) { redraw(); }; },
|
||||
destroy: function() { destroySlider(); },
|
||||
reset: function() { valueToPixels(); },
|
||||
increment: function(n) { incrementHandle(n); },
|
||||
disable: function() { disableSlider(); },
|
||||
enable: function() { enableSlider(); }
|
||||
};
|
||||
};
|
||||
|
||||
addEvent(window, "load", init);
|
||||
addEvent(window, "unload", unload);
|
||||
addEvent(window, "resize", resize);
|
||||
/*@cc_on@*/
|
||||
/*@if(@_win32)
|
||||
var onload = function(e) {
|
||||
for(slider in sliders) { sliders[slider].reset(); }
|
||||
};
|
||||
addEvent(window, "load", function() { setTimeout(onload, 200) });
|
||||
/*@end@*/
|
||||
|
||||
return {
|
||||
create: function(elem) { init(elem) },
|
||||
createSlider: function(opts) { createSlider(opts); },
|
||||
destroyAll: function() { destroyAllsliders(); },
|
||||
destroySlider: function(id) { return destroySingleSlider(id); },
|
||||
redrawAll: function() { resize(); },
|
||||
increment: function(id, numSteps) { if(!(id in sliders)) { return false; }; sliders[id].increment(numSteps); },
|
||||
addEvent: addEvent,
|
||||
removeEvent: removeEvent,
|
||||
stopEvent: stopEvent,
|
||||
updateSlider: function(id) { if(!(id in sliders)) { return false; }; sliders[id].reset(); },
|
||||
disableMouseWheel: function() { removeMouseWheelSupport(); },
|
||||
removeOnLoadEvent: function() { removeOnloadEvent(); },
|
||||
disableSlider: function(id) { if(!(id in sliders)) { return false; }; sliders[id].disable(); },
|
||||
enableSlider: function(id) { if(!(id in sliders)) { return false; }; sliders[id].enable(); }
|
||||
}
|
||||
})();
|
||||
|
||||
|
121
itf/static/js/html5Forms.js/shared/js/html5.js
Normal file
121
itf/static/js/html5Forms.js/shared/js/html5.js
Normal file
|
@ -0,0 +1,121 @@
|
|||
// For discussion and comments, see: http://remysharp.com/2009/01/07/html5-enabling-script/
|
||||
(function(){if(!/*@cc_on!@*/0)return;var e = "abbr,article,aside,audio,canvas,datalist,details,eventsource,figure,footer,header,hgroup,mark,menu,meter,nav,output,progress,section,time,video".split(','),i=e.length;while(i--){document.createElement(e[i])}})()
|
||||
|
||||
var html5 = new function () {
|
||||
var me = this;
|
||||
|
||||
/**
|
||||
* Given an HTML or XML object, find the an attribute by name.
|
||||
*
|
||||
* @param {Object} obj - a DOM object.
|
||||
* @param {String} attrName - the name of an attribute inside the DOM object.
|
||||
* @return {Object} - the attribute object or null if there isn't one.
|
||||
*/
|
||||
me.getAttributeByName = function (obj, attrName) {
|
||||
var i;
|
||||
|
||||
var attributes = obj.attributes;
|
||||
for (i=0; i<attributes.length; i++) {
|
||||
var attr = attributes[i]
|
||||
if (attr.nodeName == attrName && attr.specified) {
|
||||
return attr;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given an HTML or XML object, find the value of an attribute.
|
||||
*
|
||||
* @param {Object} obj - a DOM object.
|
||||
* @param {String} attrName - the name of an attribute inside the DOM object.
|
||||
* @return {String} - the value of the attribute.
|
||||
*/
|
||||
me.getAttributeValue = function (obj, attrName) {
|
||||
var attr = me.getAttributeByName(obj, attrName);
|
||||
|
||||
if (attr != null) {
|
||||
return attr.nodeValue;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Given an HTML or XML object, set the value of an attribute.
|
||||
*
|
||||
* @param {Object} obj - a DOM object.
|
||||
* @param {String} attrName - the name of an attribute inside the DOM object.
|
||||
* @param {String} attrValue - the value of the attribute.
|
||||
*/
|
||||
me.setAttributeValue = function (obj, attrName, attrValue) {
|
||||
var attr = me.getAttributeByName(obj, attrName);
|
||||
|
||||
if (attr != null) {
|
||||
attr.nodeValue = attrValue;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
me.getDefinedAttributes = function (obj) {
|
||||
|
||||
var attrs = obj.attributes;
|
||||
var r = new Array();
|
||||
|
||||
for (var i=0; i<attrs.length; i++) {
|
||||
attr = attrs[i];
|
||||
if (attr.specified) {
|
||||
r[attr.name] = attr.value;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
* HTML5 dataset
|
||||
*/
|
||||
me.getDataset = function (obj) {
|
||||
var r = new Array();
|
||||
|
||||
var attributes = me.getDefinedAttributes(obj);
|
||||
//jslog.debug('entered')
|
||||
for (var i=0; i<attributes.length; i++) {
|
||||
var attr = attributes[i];
|
||||
|
||||
if (attr.indexOf('data-') == 0) {
|
||||
//jslog.debug('adding ' + name)
|
||||
var name = attr.substring(5);
|
||||
//jslog.debug('adding ' + name)
|
||||
r[name] = attr.value;
|
||||
}
|
||||
}
|
||||
|
||||
//jslog.debug('dataset = ' + DebugHelpers.getProperties(r))
|
||||
return r;
|
||||
}
|
||||
|
||||
me.getDatasetItem = function (obj, name) {
|
||||
var r = me.getAttributeValue(obj, 'data-' + name);
|
||||
|
||||
if (!r) {
|
||||
r = me.getAttributeValue(obj, 'data-' + name.toLowerCase())
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
me.setDatasetItem = function (obj, name, value) {
|
||||
var attrName = 'data-' + name.toLowerCase();
|
||||
|
||||
var val = me.setAttributeValue(obj, attrName, value);
|
||||
|
||||
if (me.getAttributeValue(obj, attrName) == null) {
|
||||
obj[attrName] = value;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
892
itf/static/js/html5Forms.js/shared/js/html5Forms.js
Normal file
892
itf/static/js/html5Forms.js/shared/js/html5Forms.js
Normal file
|
@ -0,0 +1,892 @@
|
|||
var html5Forms = new function () {
|
||||
var me = this;
|
||||
|
||||
var scriptNode = null,
|
||||
scriptDir = null,
|
||||
isScriptCompressed = false,
|
||||
|
||||
// WebKit less than 534 doesn't show validation UI - we need to check for this (from http://stackoverflow.com/questions/6030522/html5-form-validation-modernizr-safari)
|
||||
hasNativeBubbles = navigator.userAgent.indexOf('WebKit') < 0 || parseInt(navigator.userAgent.match(/AppleWebKit\/([^ ]*)/)[1].split('.')[0]) > 534,
|
||||
hasBadValidationImplementation = !hasNativeBubbles; // making another var for this in case we have more criteria in the future.
|
||||
|
||||
|
||||
var globalEvent = document.addEventListener?document.createEvent("HTMLEvents"):null;
|
||||
|
||||
function getBrowserLanguage() {
|
||||
var r = navigator.language;
|
||||
if (!r) {
|
||||
r = navigator.browserLanguage;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
me.start = function () {
|
||||
|
||||
var split = navigator.userAgent.split('Firefox/');
|
||||
|
||||
//Firefox 3.6 gives a wierd error when using the Twitter API
|
||||
//unless you do this onload.
|
||||
if (split.length>=1 && parseFloat(split[1]) <= 3.6) {
|
||||
EventHelpers.addEvent(window, 'load', me.init);
|
||||
} else {
|
||||
me.init();
|
||||
}
|
||||
}
|
||||
|
||||
me.init = function () {
|
||||
var scriptNodes = document.getElementsByTagName('script');
|
||||
|
||||
for (var i=0; i<scriptNodes.length; i++) {
|
||||
scriptNode = scriptNodes[i];
|
||||
|
||||
if (scriptNode.src.match('html5Forms(_src|-p|)\.js$')) {
|
||||
scriptNode = scriptNode;
|
||||
scriptDir = getScriptDir();
|
||||
if (scriptNode.src.indexOf('html5Forms-p.js') >= 0) {
|
||||
isScriptCompressed = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (scriptNode) {
|
||||
if (window.yepnope) {
|
||||
var inputSupport = Modernizr.inputtypes;
|
||||
/* let's load the supporting scripts according to what is in data-webforms2-support */
|
||||
var supportArray = scriptNode.getAttribute('data-webforms2-support');
|
||||
me.forceJSValidation = (scriptNode.getAttribute('data-webforms2-force-js-validation') == 'true');
|
||||
me.turnOffValidation = (scriptNode.getAttribute('data-webforms2-turn-off-validation') == 'true');
|
||||
me.forceJSDatePicker = (scriptNode.getAttribute('data-webforms2-force-js-date-picker') == 'true');
|
||||
if (!supportArray) {
|
||||
return;
|
||||
} else if (trim(supportArray) == 'all') {
|
||||
supportArray="validation,number,color,date,ouput,range,placeholder";
|
||||
}
|
||||
|
||||
supportArray = supportArray.split(',');
|
||||
var toLoad = [];
|
||||
var toRunAfterLoad = [];
|
||||
var loadHTML5Widgets = false;
|
||||
|
||||
|
||||
for (var i=0; i<supportArray.length; i++) {
|
||||
var supportReq = trim(supportArray[i]);
|
||||
|
||||
switch(supportReq) {
|
||||
|
||||
case "validation":
|
||||
case "autofocus":
|
||||
if (me.turnOffValidation) {
|
||||
//me.turnOffNativeValidation();
|
||||
EventHelpers.addPageLoadEvent('html5Forms.turnOffNativeValidation')
|
||||
} else {
|
||||
|
||||
if (!Modernizr.input.required || hasBadValidationImplementation || me.forceJSValidation) {
|
||||
|
||||
if (isScriptCompressed) {
|
||||
toLoad = toLoad.concat([
|
||||
scriptDir + '../../shared/js/weston.ruter.net/webforms2/webforms2-p.js']);
|
||||
} else {
|
||||
toLoad = toLoad.concat([
|
||||
scriptDir + '../../shared/js/weston.ruter.net/webforms2/webforms2_src.js']);
|
||||
}
|
||||
|
||||
if (supportReq == 'autofocus') {
|
||||
loadHTML5Widgets = true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "number":
|
||||
if (!inputSupport.number) {
|
||||
toLoad = toLoad.concat([
|
||||
scriptDir + '../../shared/css/number.css']);
|
||||
loadHTML5Widgets = true;
|
||||
}
|
||||
break;
|
||||
case "color":
|
||||
if (!inputSupport.color) {
|
||||
|
||||
toLoad = toLoad.concat([ scriptDir + '../../shared/js/jscolor/jscolor.js']);
|
||||
|
||||
loadHTML5Widgets = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case "datetime":
|
||||
case "date":
|
||||
var lang = scriptNode.getAttribute('data-lang');
|
||||
|
||||
|
||||
/* If data-lang is not set, or is set to an unsupported language, use English by default. */
|
||||
if (!lang ||
|
||||
!lang.match(/^(af|al|bg|big5|br|ca|cn|cs|da|de|du|el|en|es|fi|fr|he|hr|hu|it|jp|ko|ko|lt|lt|lv|nl|no|pl|pl|pt|ro|ru|si|sk|sp|sv|tr|zh)$/)){
|
||||
|
||||
|
||||
lang = getBrowserLanguage().split('-')[0];
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!inputSupport.date || me.forceJSDatePicker) {
|
||||
toLoad = toLoad.concat([
|
||||
scriptDir + '../../shared/js/jscalendar-1.0/calendar-win2k-1.css',
|
||||
scriptDir + '../../shared/js/jscalendar-1.0/calendar.js',
|
||||
scriptDir + '../../shared/js/jscalendar-1.0/lang/calendar-' + lang + '.js',
|
||||
scriptDir + '../../shared/js/jscalendar-1.0/calendar-setup.js']);
|
||||
loadHTML5Widgets = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case "output":
|
||||
if(!supportsOutput()) {
|
||||
|
||||
loadHTML5Widgets = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case "range":
|
||||
/* yepnope({
|
||||
load: ['ie6!' + scriptDir + '../../shared/css/slider.css']
|
||||
}); */
|
||||
|
||||
if(!inputSupport.range) {
|
||||
toLoad = toLoad.concat([ scriptDir + '../../shared/css/slider.css',
|
||||
scriptDir + '../../shared/js/frequency-decoder.com/slider.js']);
|
||||
|
||||
|
||||
loadHTML5Widgets = true;
|
||||
toRunAfterLoad.push('fdSliderController.redrawAll');
|
||||
|
||||
}
|
||||
break;
|
||||
case "placeholder":
|
||||
case "autofocus":
|
||||
if (!Modernizr.input[supportReq]) {
|
||||
loadHTML5Widgets = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (toLoad.length == 0) {
|
||||
loadWidgets();
|
||||
|
||||
// allow browsers that don't need webforms2 to handle custom error messages populated
|
||||
// in the data-errormessage attribute
|
||||
if (document.addEventListener) {
|
||||
document.addEventListener('DOMContentLoaded', setupExtraFeatures, false);
|
||||
}
|
||||
} else {
|
||||
yepnope({
|
||||
load: toLoad,
|
||||
complete: function (){
|
||||
loadWidgets();
|
||||
setupExtraFeatures();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function loadWidgets() {
|
||||
|
||||
yepnope({
|
||||
test: loadHTML5Widgets,
|
||||
yep: scriptDir + '../../shared/js/html5Widgets.js',
|
||||
complete: function () {
|
||||
if (loadHTML5Widgets) {
|
||||
for (var i=0; i<toRunAfterLoad.length; i++) {
|
||||
eval(toRunAfterLoad[i] + '()');
|
||||
}
|
||||
EventHelpers.init();
|
||||
html5Widgets.init();
|
||||
//toRunAfterLoad.push('html5Widgets.init');
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* This should work even when webforms2 is not loaded.
|
||||
* It sets up extra features for HTML5Forms like:
|
||||
* 1) Setting custom error messages on form elements.
|
||||
* 2) setting up isBlank and isBlurred classes.
|
||||
* 3) settung up form.wf2_submitAttempted
|
||||
*/
|
||||
function setupExtraFeatures() {
|
||||
var nodeNames = ["input", "select", "textarea"];
|
||||
for (var i=0; i<nodeNames.length; i++) {
|
||||
var nodes = document.getElementsByTagName(nodeNames[i]);
|
||||
|
||||
for (var j=0; j<nodes.length; j++) {
|
||||
var node = nodes[j];
|
||||
setErrorMessageEvents(node);
|
||||
setCustomClassesEvents(node);
|
||||
setNodeClasses(node, true);
|
||||
}
|
||||
|
||||
if (i==0 && node.type=="submit") {
|
||||
EventHelpers.addEvent(node, 'click', submitClickEvent);
|
||||
}
|
||||
}
|
||||
|
||||
var forms = document.getElementsByTagName('form');
|
||||
for (var i=0; i<forms.length; i++) {
|
||||
EventHelpers.addEvent(forms[i], 'submit', submitEvent);
|
||||
EventHelpers.addEvent(forms[i], 'reset', resetEvent);
|
||||
}
|
||||
}
|
||||
|
||||
function submitEvent(e) {
|
||||
var target = EventHelpers.getEventTarget(e);
|
||||
markSubmitAttempt(target);
|
||||
}
|
||||
|
||||
function resetEvent(e) {
|
||||
var target = EventHelpers.getEventTarget(e);
|
||||
|
||||
resetForm(target);
|
||||
}
|
||||
function submitClickEvent(e) {
|
||||
var target = EventHelpers.getEventTarget(e);
|
||||
markSubmitAttempt(target.form);
|
||||
}
|
||||
|
||||
function markSubmitAttempt(form) {
|
||||
me.css.addClass(form, 'wf2_submitAttempted');
|
||||
}
|
||||
|
||||
function removeSubmitAttempt(form) {
|
||||
me.css.removeClass(form, 'wf2_submitAttempted');
|
||||
}
|
||||
|
||||
function resetForm(form) {
|
||||
removeSubmitAttempt(form);
|
||||
var nodeNames = ["input", "select", "textarea"];
|
||||
for (var i=0; i<nodeNames.length; i++) {
|
||||
var nodes = form.getElementsByTagName(nodeNames[i]);
|
||||
|
||||
for (var j=0; j<nodes.length; j++) {
|
||||
var node = nodes[j];
|
||||
|
||||
me.css.removeClass(node, 'wf2_lostFocus');
|
||||
me.css.removeClass(node, 'wf2_notBlank');
|
||||
me.css.addClass(node, 'wf2_isBlank');
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function setCustomClassesEvents(node) {
|
||||
EventHelpers.addEvent(node, 'keyup', nodeChangeEvent);
|
||||
EventHelpers.addEvent(node, 'change', nodeChangeEvent);
|
||||
EventHelpers.addEvent(node, 'blur', nodeBlurEvent);
|
||||
}
|
||||
|
||||
function nodeChangeEvent(e) {
|
||||
var node = EventHelpers.getEventTarget(e);
|
||||
setNodeClasses(node);
|
||||
}
|
||||
|
||||
function setNodeClasses(node, isLoadEvent) {
|
||||
if (node.value === '') {
|
||||
|
||||
me.css.addClass(node, 'wf2_isBlank');
|
||||
me.css.removeClass(node, 'wf2_notBlank');
|
||||
} else {
|
||||
me.css.addClass(node, 'wf2_notBlank');
|
||||
me.css.removeClass(node, 'wf2_isBlank');
|
||||
}
|
||||
|
||||
if (isLoadEvent && node.nodeName == 'SELECT') {
|
||||
node.setAttribute('data-wf2-initialvalue', node.value)
|
||||
}
|
||||
|
||||
if ((node.nodeName == 'SELECT' && me.getAttributeValue(node, 'data-wf2-initialvalue') != node.value)
|
||||
|| (node.nodeName != 'SELECT' && me.getAttributeValue(node, 'value') != node.value)) {
|
||||
me.css.removeClass(node, 'wf2_defaultValue');
|
||||
me.css.addClass(node, 'wf2_notDefaultValue');
|
||||
} else {
|
||||
me.css.addClass(node, 'wf2_defaultValue');
|
||||
me.css.removeClass(node, 'wf2_notDefaultValue');
|
||||
}
|
||||
}
|
||||
|
||||
function nodeBlurEvent(e) {
|
||||
var node = EventHelpers.getEventTarget(e);
|
||||
|
||||
me.css.addClass(node, 'wf2_lostFocus');
|
||||
}
|
||||
|
||||
function setErrorMessageEvents(node) {
|
||||
var message = me.getAttributeValue(node, 'data-errormessage');
|
||||
if (message) {
|
||||
if(document.addEventListener){
|
||||
node.addEventListener('invalid', showCustomMessageEvent, false);
|
||||
node.addEventListener('focus', showCustomMessageEvent, false);
|
||||
|
||||
// Opera doesn't work well with this.
|
||||
if (!window.opera) {
|
||||
node.addEventListener('keypress', clearMessageIfValidEvent, false);
|
||||
}
|
||||
|
||||
node.addEventListener('input', clearMessageIfValidEvent, false);
|
||||
|
||||
if (node.nodeName == 'SELECT') {
|
||||
node.addEventListener('change', clearMessageIfValidEvent, false);
|
||||
node.addEventListener('click', clearMessageIfValidEvent, false);
|
||||
}
|
||||
} else {
|
||||
var invalidEvent = ' this.setCustomValidity("' + message + '");';
|
||||
if (node.oninvalid) {
|
||||
node.oninvalid += invalidEvent;
|
||||
} else {
|
||||
node.oninvalid = invalidEvent;
|
||||
}
|
||||
node.oninvalid = new Function('event', node.oninvalid);
|
||||
|
||||
// IE freaks a little on keypress here, so change to keydown.
|
||||
node.attachEvent('onkeydown', clearMessageIfValidEvent);
|
||||
node.attachEvent('oninput', clearMessageIfValidEvent);
|
||||
|
||||
if (node.nodeName == 'SELECT') {
|
||||
node.attachEvent('change', clearMessageIfValidEvent, false);
|
||||
node.attachEvent('click', clearMessageIfValidEvent, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
clearMessageIfValid(node);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function showCustomMessageEvent(event) {
|
||||
var node = event.currentTarget || event.srcElement;
|
||||
showCustomMessage(node);
|
||||
}
|
||||
|
||||
function showCustomMessage(node) {
|
||||
if (node.validity.valid) {
|
||||
return;
|
||||
}
|
||||
var message = me.getAttributeValue(node, 'data-errormessage');
|
||||
node.setCustomValidity(message)
|
||||
//console.log('set custom validity')
|
||||
}
|
||||
|
||||
function clearMessageIfValidEvent (event) {
|
||||
//console.log(event.type)
|
||||
var node = event.currentTarget || event.srcElement;
|
||||
clearMessageIfValid(node);
|
||||
}
|
||||
|
||||
function clearMessageIfValid(node) {
|
||||
if (!node.setCustomValidity) {
|
||||
// this happens when webforms2 is not loaded yet. Bail.
|
||||
return;
|
||||
}
|
||||
|
||||
node.setCustomValidity('');
|
||||
if (!node.checkValidity()) {
|
||||
showCustomMessage(node);
|
||||
//console.log('invalid')
|
||||
if (document.addEventListener) {
|
||||
globalEvent.initEvent('invalid', true, true); // event type,bubbling,cancelable
|
||||
node.dispatchEvent(globalEvent);
|
||||
}
|
||||
} else {
|
||||
//console.log('valid')
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
me.turnOffNativeValidation = function () {
|
||||
|
||||
var formNodes = document.getElementsByTagName('form');
|
||||
for (var i=0; i<formNodes.length; i++) {
|
||||
formNodes[i].setAttribute('novalidate', 'novalidate');
|
||||
}
|
||||
}
|
||||
|
||||
var supportsOutput = function () {
|
||||
var outputEl = document.createElement('output');
|
||||
return (outputEl.value != undefined && (outputEl.onforminput !== undefined || outputEl.oninput !== undefined));
|
||||
|
||||
}
|
||||
|
||||
var getScriptDir = function () {
|
||||
var arr = scriptNode.src.split('/');
|
||||
arr.pop();
|
||||
|
||||
return arr.join('/') + '/';
|
||||
}
|
||||
|
||||
me.getAttributeByName = function (obj, attrName) {
|
||||
var i;
|
||||
|
||||
var attributes = obj.attributes;
|
||||
for (var i=0; i<attributes.length; i++) {
|
||||
var attr = attributes[i]
|
||||
if (attr.nodeName == attrName && attr.specified) {
|
||||
return attr;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
me.getAttributeValue = function (obj, attrName) {
|
||||
var attr = me.getAttributeByName(obj, attrName);
|
||||
|
||||
if (attr != null) {
|
||||
return attr.nodeValue;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
var initWhitespaceRe = /^\s\s*/;
|
||||
var endWhitespaceRe = /\s\s*$/;
|
||||
|
||||
function trim(str) {
|
||||
return str.replace(initWhitespaceRe, '')
|
||||
.replace(endWhitespaceRe, '');
|
||||
}
|
||||
|
||||
me.css = new function () {
|
||||
var me = this;
|
||||
|
||||
var blankRe = new RegExp('\\s');
|
||||
|
||||
/**
|
||||
* Generates a regular expression string that can be used to detect a class name
|
||||
* in a tag's class attribute. It is used by a few methods, so I
|
||||
* centralized it.
|
||||
*
|
||||
* @param {String} className - a name of a CSS class.
|
||||
*/
|
||||
|
||||
function getClassReString(className) {
|
||||
return '\\s'+className+'\\s|^' + className + '\\s|\\s' + className + '$|' + '^' + className +'$';
|
||||
}
|
||||
|
||||
function getClassPrefixReString(className) {
|
||||
return '\\s'+className+'-[0-9a-zA-Z_]+\\s|^' + className + '[0-9a-zA-Z_]+\\s|\\s' + className + '[0-9a-zA-Z_]+$|' + '^' + className +'[0-9a-zA-Z_]+$';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Make an HTML object be a member of a certain class.
|
||||
*
|
||||
* @param {Object} obj - an HTML object
|
||||
* @param {String} className - a CSS class name.
|
||||
*/
|
||||
me.addClass = function (obj, className) {
|
||||
|
||||
if (blankRe.test(className)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// only add class if the object is not a member of it yet.
|
||||
if (!me.isMemberOfClass(obj, className)) {
|
||||
obj.className += " " + className;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Make an HTML object *not* be a member of a certain class.
|
||||
*
|
||||
* @param {Object} obj - an HTML object
|
||||
* @param {Object} className - a CSS class name.
|
||||
*/
|
||||
me.removeClass = function (obj, className) {
|
||||
|
||||
if (blankRe.test(className)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var re = new RegExp(getClassReString(className) , "g");
|
||||
|
||||
var oldClassName = obj.className;
|
||||
|
||||
|
||||
if (obj.className) {
|
||||
obj.className = oldClassName.replace(re, ' ');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if an HTML object is a member of a specific class.
|
||||
* @param {Object} obj - an HTML object.
|
||||
* @param {Object} className - the CSS class name.
|
||||
*/
|
||||
me.isMemberOfClass = function (obj, className) {
|
||||
|
||||
if (blankRe.test(className))
|
||||
return false;
|
||||
|
||||
var re = new RegExp(getClassReString(className) , "g");
|
||||
|
||||
return (re.test(obj.className));
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* This notice must be untouched at all times.
|
||||
*
|
||||
* This javascript library contains helper routines to assist with event
|
||||
* handling consistently among browsers
|
||||
*
|
||||
* EventHelpers.js v.1.4 available at http://www.useragentman.com/
|
||||
*
|
||||
* released under the MIT License:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
*
|
||||
* Chagelog: 1.4: fix fireEvent to work correctly for IE9.
|
||||
*
|
||||
*******************************************************************************/
|
||||
var EventHelpers = new function(){
|
||||
var me = this;
|
||||
|
||||
var safariTimer;
|
||||
var isSafari = /WebKit/i.test(navigator.userAgent);
|
||||
var isIEPolling = false;
|
||||
var globalEvent;
|
||||
var safariVer = navigator.userAgent.match(/Version\/([^\s]*)/);
|
||||
|
||||
if (safariVer != null && safariVer.length == 2) {
|
||||
safariVer = parseFloat(safariVer[1]);
|
||||
}
|
||||
|
||||
|
||||
me.init = function () {
|
||||
if (me.hasPageLoadHappened(arguments)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* This is for fireEvent */
|
||||
if (document.createEvent) {
|
||||
globalEvent = document.createEvent("HTMLEvents");
|
||||
} else if (document.createEventObject){
|
||||
// dispatch for IE8 and lower.
|
||||
globalEvent = document.createEventObject();
|
||||
}
|
||||
|
||||
me.docIsLoaded = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an event to the document. Examples of usage:
|
||||
* me.addEvent(window, "load", myFunction);
|
||||
* me.addEvent(docunent, "keydown", keyPressedFunc);
|
||||
* me.addEvent(document, "keyup", keyPressFunc);
|
||||
*
|
||||
* @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events
|
||||
* @author John Resig - http://ejohn.org/projects/flexible-javascript-events/
|
||||
* @param {Object} obj - a javascript object.
|
||||
* @param {String} evType - an event to attach to the object.
|
||||
* @param {Function} fn - the function that is attached to the event.
|
||||
*/
|
||||
me.addEvent = function(obj, evType, fn){
|
||||
|
||||
if (obj.addEventListener) {
|
||||
obj.addEventListener(evType, fn, false);
|
||||
} else if (obj.attachEvent) {
|
||||
obj['e' + evType + fn] = fn;
|
||||
obj[evType + fn] = function(){
|
||||
obj["e" + evType + fn](self.event);
|
||||
}
|
||||
obj.attachEvent("on" + evType, obj[evType + fn]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Removes an event that is attached to a javascript object.
|
||||
*
|
||||
* @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events
|
||||
* @author John Resig - http://ejohn.org/projects/flexible-javascript-events/ * @param {Object} obj - a javascript object.
|
||||
* @param {String} evType - an event attached to the object.
|
||||
* @param {Function} fn - the function that is called when the event fires.
|
||||
*/
|
||||
me.removeEvent = function(obj, evType, fn){
|
||||
|
||||
if (obj.removeEventListener) {
|
||||
obj.removeEventListener(evType, fn, false);
|
||||
} else if (obj.detachEvent) {
|
||||
try {
|
||||
obj.detachEvent("on" + evType, obj[evType + fn]);
|
||||
obj[evType + fn] = null;
|
||||
obj["e" + evType + fn] = null;
|
||||
}
|
||||
catch (ex) {
|
||||
// do nothing;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Find the HTML object that fired an Event.
|
||||
*
|
||||
* @param {Object} e - an HTML object
|
||||
* @return {Object} - the HTML object that fired the event.
|
||||
*/
|
||||
me.getEventTarget = function(e){
|
||||
// first, IE method for mouse events(also supported by Safari and Opera)
|
||||
if (e.toElement) {
|
||||
return e.toElement;
|
||||
// W3C
|
||||
} else if (e.currentTarget) {
|
||||
return e.currentTarget;
|
||||
|
||||
// MS way
|
||||
} else if (e.srcElement) {
|
||||
return e.srcElement;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Given an event fired by the keyboard, find the key associated with that event.
|
||||
*
|
||||
* @param {Object} e - an event object.
|
||||
* @return {String} - the ASCII character code representing the key associated with the event.
|
||||
*/
|
||||
me.getKey = function(e){
|
||||
if (e.keyCode) {
|
||||
return e.keyCode;
|
||||
} else if (e.event && e.event.keyCode) {
|
||||
return window.event.keyCode;
|
||||
} else if (e.which) {
|
||||
return e.which;
|
||||
}
|
||||
}
|
||||
|
||||
function mylog(s) {
|
||||
if (window.console && window.console.log) {
|
||||
console.log(s);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* Will execute a function when the page's DOM has fully loaded (and before all attached images, iframes,
|
||||
* etc., are).
|
||||
*
|
||||
* Usage:
|
||||
*
|
||||
* EventHelpers.addPageLoadEvent('init');
|
||||
*
|
||||
* where the function init() has this code at the beginning:
|
||||
*
|
||||
* function init() {
|
||||
*
|
||||
* if (EventHelpers.hasPageLoadHappened(arguments)) return;
|
||||
*
|
||||
* // rest of code
|
||||
* ....
|
||||
* }
|
||||
*
|
||||
* @author This code is based off of code from http://dean.edwards.name/weblog/2005/09/busted/ by Dean
|
||||
* Edwards, with a modification by me.
|
||||
*
|
||||
* @param {String} funcName - a string containing the function to be called.
|
||||
*/
|
||||
me.addPageLoadEvent = function(funcName, timerForIE){
|
||||
|
||||
var func = eval(funcName);
|
||||
|
||||
// for Internet Explorer < 9 (using conditional comments)
|
||||
/*@cc_on @*/
|
||||
/*@if (@_win32 && @_jscript_version < 10)
|
||||
if (timerForIE) {
|
||||
isIEPolling = true;
|
||||
} else {
|
||||
pageLoadEventArray.push(func);
|
||||
return;
|
||||
}
|
||||
/*@end @*/
|
||||
|
||||
// if document is already loaded, then just execute.
|
||||
if (!isIEPolling && /loaded|complete|interactive/.test(document.readyState)) {
|
||||
mylog('execute immediately')
|
||||
func();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if ((isSafari && safariVer < 3.1) || isIEPolling) { // sniff
|
||||
mylog('polling')
|
||||
pageLoadEventArray.push(func);
|
||||
|
||||
if (!safariTimer) {
|
||||
|
||||
safariTimer = setInterval(function(){
|
||||
if (/loaded|complete/.test(document.readyState)) {
|
||||
clearInterval(safariTimer);
|
||||
|
||||
/*
|
||||
* call the onload handler
|
||||
* func();
|
||||
*/
|
||||
me.runPageLoadEvents();
|
||||
return;
|
||||
}
|
||||
set = true;
|
||||
}, 10);
|
||||
}
|
||||
/* for Mozilla */
|
||||
} else if (document.addEventListener) {
|
||||
|
||||
document.addEventListener("DOMContentLoaded", func, null);
|
||||
mylog("DOMContentLoaded " + document.readyState);
|
||||
/* Others */
|
||||
} else {
|
||||
mylog('window.load')
|
||||
me.addEvent(window, 'load', func);
|
||||
}
|
||||
}
|
||||
|
||||
var pageLoadEventArray = new Array();
|
||||
|
||||
me.runPageLoadEvents = function(e){
|
||||
if (isSafari || isIEPolling || e.srcElement.readyState == "complete") {
|
||||
|
||||
for (var i = 0; i < pageLoadEventArray.length; i++) {
|
||||
pageLoadEventArray[i]();
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Determines if either addPageLoadEvent('funcName') or addEvent(window, 'load', funcName)
|
||||
* has been executed.
|
||||
*
|
||||
* @see addPageLoadEvent
|
||||
* @param {Function} funcArgs - the arguments of the containing. function
|
||||
*/
|
||||
me.hasPageLoadHappened = function(funcArgs){
|
||||
// If the function already been called, return true;
|
||||
if (funcArgs.callee.done)
|
||||
return true;
|
||||
|
||||
// flag this function so we don't do the same thing twice
|
||||
funcArgs.callee.done = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Used in an event method/function to indicate that the default behaviour of the event
|
||||
* should *not* happen.
|
||||
*
|
||||
* @param {Object} e - an event object.
|
||||
* @return {Boolean} - always false
|
||||
*/
|
||||
me.preventDefault = function(e){
|
||||
|
||||
if (e.preventDefault) {
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
try {
|
||||
e.returnValue = false;
|
||||
}
|
||||
catch (ex) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Fires an event manually.
|
||||
* @author Scott Andrew - http://www.scottandrew.com/weblog/articles/cbs-events
|
||||
* @author John Resig - http://ejohn.org/projects/flexible-javascript-events/
|
||||
* @param {Object} obj - a javascript object.
|
||||
* @param {String} evType - an event attached to the object.
|
||||
* @param {Function} fn - the function that is called when the event fires.
|
||||
*
|
||||
*/
|
||||
me.fireEvent = function (element,event, options){
|
||||
|
||||
if(!element) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (element.dispatchEvent) {
|
||||
// dispatch for firefox + ie9 + others
|
||||
globalEvent.initEvent(event, true, true); // event type,bubbling,cancelable
|
||||
return !element.dispatchEvent(globalEvent);
|
||||
} else if (document.createEventObject){
|
||||
return element.fireEvent('on' + event, globalEvent)
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Detects whether the event "eventName" is supported on a tag with name
|
||||
* "nodeName". Based on code from
|
||||
* http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
|
||||
*/
|
||||
me.isSupported = function (eventName, nodeName) {
|
||||
var el = document.createElement(nodeName);
|
||||
eventName = 'on' + eventName;
|
||||
var isSupported = (eventName in el);
|
||||
if (!isSupported) {
|
||||
el.setAttribute(eventName, 'return;');
|
||||
isSupported = typeof el[eventName] == 'function';
|
||||
}
|
||||
el = null;
|
||||
return isSupported;
|
||||
}
|
||||
|
||||
|
||||
/* EventHelpers.init () */
|
||||
function init(){
|
||||
// Conditional comment alert: Do not remove comments. Leave intact.
|
||||
// The detection if the page is secure or not is important. If
|
||||
// this logic is removed, Internet Explorer will give security
|
||||
// alerts.
|
||||
/*@cc_on @*/
|
||||
/*@if (@_win32)
|
||||
|
||||
document.write('<script id="__ie_onload" defer src="' +
|
||||
|
||||
((location.protocol == 'https:') ? '//0' : 'javascript:void(0)') + '"><\/script>');
|
||||
|
||||
var script = document.getElementById("__ie_onload");
|
||||
|
||||
me.addEvent(script, 'readystatechange', me.runPageLoadEvents);
|
||||
|
||||
/*@end @*/
|
||||
|
||||
}
|
||||
if (!window.html5Forms) {
|
||||
init();
|
||||
}
|
||||
}
|
||||
|
||||
html5Forms.start();
|
1417
itf/static/js/html5Forms.js/shared/js/html5Widgets.js
Normal file
1417
itf/static/js/html5Forms.js/shared/js/html5Widgets.js
Normal file
File diff suppressed because it is too large
Load Diff
BIN
itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/.DS_Store
vendored
Normal file
BIN
itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/.DS_Store
vendored
Normal file
Binary file not shown.
761
itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/ChangeLog
Normal file
761
itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/ChangeLog
Normal 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
itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/README
Normal file
33
itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/README
Normal 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
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
<!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" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>calendar test</title>
|
||||
<link type="text/css" rel="stylesheet" href="calendar-system.css" />
|
||||
<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" src="calendar-handler.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<form action="http://www.useragentman.com/testForm.php" method="get">
|
||||
<div>
|
||||
<input type="hidden" id="f_date" name="date" />
|
||||
<button type="reset" class="submit button" id="f_date_trigger">...</button>
|
||||
|
||||
<span id="f_date_show">click the button for a calendar</span>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
|
@ -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 action="http://www.useragentman.com/testForm.php">
|
||||
<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 <select>, 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 <select>, 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>
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
var DateDisabled = {
|
||||
0 : [ 21, 25, 28, 29, 30 ],
|
||||
1 : [ 15, 16, 17, 19 ]
|
||||
};
|
||||
|
||||
var CDate = {};
|
||||
(function (date) {
|
||||
CDate = {
|
||||
w: date.getDay(),
|
||||
d: date.getDate(),
|
||||
m: date.getMonth(),
|
||||
y: date.getFullYear(),
|
||||
date: date,
|
||||
};
|
||||
})(new Date);
|
||||
|
||||
function dateStatus (date, y, m, d) {
|
||||
var diff = date - CDate.date;
|
||||
if (diff < 172800000 || diff > 5356800000) return true;
|
||||
|
||||
if (DateDisabled && DateDisabled[m]) {
|
||||
for (var i in DateDisabled[m])
|
||||
if (DateDisabled[m][i] == d)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
window.onload = function () {
|
||||
Calendar.setup({
|
||||
inputField: 'f_date',
|
||||
ifFormat: '%u, %e, %m, %Y',
|
||||
displayArea: 'f_date_show',
|
||||
daFormat: '%A, %B %e, %Y',
|
||||
button: 'f_date_trigger',
|
||||
firstDay: 1,
|
||||
weekNumbers: false,
|
||||
range: [CDate.y, CDate.y],
|
||||
dateStatusFunc: dateStatus
|
||||
});
|
||||
};
|
|
@ -0,0 +1 @@
|
|||
var DateDisabled={0:[21,25,28,29,30],1:[15,16,17,19]};var CDate={};(function(date){CDate={w:date.getDay(),d:date.getDate(),m:date.getMonth(),y:date.getFullYear(),date:date,};})(new Date);function dateStatus(date,y,m,d){var diff=date-CDate.date;if(diff<172800000||diff>5356800000)return true;if(DateDisabled&&DateDisabled[m]){for(var i in DateDisabled[m])if(DateDisabled[m][i]==d)return true;}return false;};window.onload=function(){Calendar.setup({inputField:'f_date',ifFormat:'%u, %e, %m, %Y',displayArea:'f_date_show',daFormat:'%A, %B %e, %Y',button:'f_date_trigger',firstDay:1,weekNumbers:false,range:[CDate.y,CDate.y],dateStatusFunc:dateStatus});};
|
1843
itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-old.js
Normal file
1843
itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar-old.js
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,203 @@
|
|||
/* 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.1 2010-06-01 04:29:24 tv 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: 1 (it was 2 ... have no idea why)
|
||||
* 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("dateTooltipFunc", null);
|
||||
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", 1);
|
||||
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.setDateToolTipHandler(params.dateTooltipFunc);
|
||||
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.setDateToolTipHandler(params.dateTooltipFunc);
|
||||
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;
|
||||
};
|
|
@ -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("dateTooltipFunc",null);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.setDateToolTipHandler(params.dateTooltipFunc);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&¶ms.cache)){window.calendar=cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect,params.onClose||function(cal){cal.hide();});cal.setDateToolTipHandler(params.dateTooltipFunc);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;};
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
1853
itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar.js
Normal file
1853
itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/calendar.js
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,124 @@
|
|||
<?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(), $output = true) {
|
||||
$result = "";
|
||||
$id = $this->_gen_id();
|
||||
$attrstr = $this->_make_html_attr(array_merge($field_attributes,
|
||||
array('id' => $this->_field_id($id),
|
||||
'type' => 'text')));
|
||||
$result.= '<input ' . $attrstr .'/>';
|
||||
$result.= '<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)));
|
||||
$result.= $this->_make_calendar($options);
|
||||
|
||||
if ($output)
|
||||
echo $output;
|
||||
return $output;
|
||||
}
|
||||
|
||||
/// 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
|
@ -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 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'> </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 |
|
@ -0,0 +1,195 @@
|
|||
|
||||
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;
|
||||
margin-top: 2.8em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
tt i {
|
||||
font-family: serif;
|
||||
}
|
||||
|
||||
.verbatim em {
|
||||
font-family: serif;
|
||||
}
|
||||
|
||||
/*
|
||||
.verbatim {
|
||||
color: #4d0000;
|
||||
}
|
||||
*/
|
||||
|
||||
.scheme em {
|
||||
color: black;
|
||||
font-family: serif;
|
||||
}
|
||||
|
||||
.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%;
|
||||
font-style: italic;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.colophon a {
|
||||
color: gray;
|
||||
}
|
||||
|
|
@ -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
itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/img.gif
Normal file
BIN
itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/img.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 223 B |
333
itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/index.html
Normal file
333
itf/static/js/html5Forms.js/shared/js/jscalendar-1.0/index.html
Normal file
|
@ -0,0 +1,333 @@
|
|||
<?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.1 2010-06-01 04:29:22 tv 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="skins/tiger/theme.css" title="Tiger" />
|
||||
<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, 'Tiger');">Tiger</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="http://www.useragentman.com/testForm.php">
|
||||
<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">←</span> , <span class="key">→</span> ,
|
||||
<span class="key">↑</span> , <span class="key">↓</span> -- select date</li>
|
||||
<li><span class="key">CTRL</span> + <span class="key">←</span> ,
|
||||
<span class="key">→</span> -- select month</li>
|
||||
<li><span class="key">CTRL</span> + <span class="key">↑</span> ,
|
||||
<span class="key">↓</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"> </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>
|
||||
© <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>
|
|
@ -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";
|
|
@ -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:";
|
||||
|
|
@ -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"] = "×àñ:";
|
|
@ -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:";
|
|
@ -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:";
|
|
@ -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:";
|
||||
|
|
@ -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:";
|
|
@ -0,0 +1,123 @@
|
|||
// ** I18N
|
||||
|
||||
// Calendar EN language
|
||||
// Author: Mihai Bazon, <mishoo@infoiasi.ro>
|
||||
// Encoding: any
|
||||
// Translator : Niko <nikoused@gmail.com>
|
||||
// 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
|
||||
("\u5468\u65e5",//\u5468\u65e5
|
||||
"\u5468\u4e00",//\u5468\u4e00
|
||||
"\u5468\u4e8c",//\u5468\u4e8c
|
||||
"\u5468\u4e09",//\u5468\u4e09
|
||||
"\u5468\u56db",//\u5468\u56db
|
||||
"\u5468\u4e94",//\u5468\u4e94
|
||||
"\u5468\u516d",//\u5468\u516d
|
||||
"\u5468\u65e5");//\u5468\u65e5
|
||||
|
||||
// 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
|
||||
("\u5468\u65e5",
|
||||
"\u5468\u4e00",
|
||||
"\u5468\u4e8c",
|
||||
"\u5468\u4e09",
|
||||
"\u5468\u56db",
|
||||
"\u5468\u4e94",
|
||||
"\u5468\u516d",
|
||||
"\u5468\u65e5");
|
||||
|
||||
// full month names
|
||||
Calendar._MN = new Array
|
||||
("\u4e00\u6708",
|
||||
"\u4e8c\u6708",
|
||||
"\u4e09\u6708",
|
||||
"\u56db\u6708",
|
||||
"\u4e94\u6708",
|
||||
"\u516d\u6708",
|
||||
"\u4e03\u6708",
|
||||
"\u516b\u6708",
|
||||
"\u4e5d\u6708",
|
||||
"\u5341\u6708",
|
||||
"\u5341\u4e00\u6708",
|
||||
"\u5341\u4e8c\u6708");
|
||||
|
||||
// short month names
|
||||
Calendar._SMN = new Array
|
||||
("\u4e00\u6708",
|
||||
"\u4e8c\u6708",
|
||||
"\u4e09\u6708",
|
||||
"\u56db\u6708",
|
||||
"\u4e94\u6708",
|
||||
"\u516d\u6708",
|
||||
"\u4e03\u6708",
|
||||
"\u516b\u6708",
|
||||
"\u4e5d\u6708",
|
||||
"\u5341\u6708",
|
||||
"\u5341\u4e00\u6708",
|
||||
"\u5341\u4e8c\u6708");
|
||||
|
||||
// tooltips
|
||||
Calendar._TT = {};
|
||||
Calendar._TT["INFO"] = "\u5173\u4e8e";
|
||||
|
||||
Calendar._TT["ABOUT"] =
|
||||
" DHTML \u65e5\u8d77/\u65f6\u95f4\u9009\u62e9\u63a7\u4ef6\n" +
|
||||
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
|
||||
"For latest version visit: \u6700\u65b0\u7248\u672c\u8bf7\u767b\u9646http://www.dynarch.com/projects/calendar/\u5bdf\u770b\n" +
|
||||
"\u9075\u5faaGNU LGPL. \u7ec6\u8282\u53c2\u9605 http://gnu.org/licenses/lgpl.html" +
|
||||
"\n\n" +
|
||||
"\u65e5\u671f\u9009\u62e9:\n" +
|
||||
"- \u70b9\u51fb\xab(\xbb)\u6309\u94ae\u9009\u62e9\u4e0a(\u4e0b)\u4e00\u5e74\u5ea6.\n" +
|
||||
"- \u70b9\u51fb" + String.fromCharCode(0x2039) + "(" + String.fromCharCode(0x203a) + ")\u6309\u94ae\u9009\u62e9\u4e0a(\u4e0b)\u4e2a\u6708\u4efd.\n" +
|
||||
"- \u957f\u65f6\u95f4\u6309\u7740\u6309\u94ae\u5c06\u51fa\u73b0\u66f4\u591a\u9009\u62e9\u9879.";
|
||||
Calendar._TT["ABOUT_TIME"] = "\n\n" +
|
||||
"\u65f6\u95f4\u9009\u62e9:\n" +
|
||||
"-\u5728\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\u4e0a\u5355\u51fb\u9f20\u6807\u5de6\u952e\u6765\u589e\u52a0\u5f53\u524d\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\n" +
|
||||
"-\u5728\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\u4e0a\u6309\u4f4fShift\u952e\u540e\u5355\u51fb\u9f20\u6807\u5de6\u952e\u6765\u51cf\u5c11\u5f53\u524d\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2).";
|
||||
|
||||
Calendar._TT["PREV_YEAR"] = "\u4e0a\u4e00\u5e74";
|
||||
Calendar._TT["PREV_MONTH"] = "\u4e0a\u4e2a\u6708";
|
||||
Calendar._TT["GO_TODAY"] = "\u5230\u4eca\u5929";
|
||||
Calendar._TT["NEXT_MONTH"] = "\u4e0b\u4e2a\u6708";
|
||||
Calendar._TT["NEXT_YEAR"] = "\u4e0b\u4e00\u5e74";
|
||||
Calendar._TT["SEL_DATE"] = "\u9009\u62e9\u65e5\u671f";
|
||||
Calendar._TT["DRAG_TO_MOVE"] = "\u62d6\u52a8";
|
||||
Calendar._TT["PART_TODAY"] = " (\u4eca\u5929)";
|
||||
|
||||
// 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\u4e3a\u8fd9\u5468\u7684\u7b2c\u4e00\u5929";
|
||||
|
||||
// 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"] = "\u5173\u95ed";
|
||||
Calendar._TT["TODAY"] = "\u4eca\u5929";
|
||||
Calendar._TT["TIME_PART"] = "(\u6309\u7740Shift\u952e)\u5355\u51fb\u6216\u62d6\u52a8\u6539\u53d8\u503c";
|
||||
|
||||
// date formats
|
||||
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
|
||||
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e\u65e5";
|
||||
|
||||
Calendar._TT["WK"] = "\u5468";
|
||||
Calendar._TT["TIME"] = "\u65f6\u95f4:";
|
|
@ -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:";
|
|
@ -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:";
|
|
@ -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:";
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user