diff --git a/3rd_party_apps/filetransfers/__init__.py b/3rd_party_apps/filetransfers/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/3rd_party_apps/filetransfers/api.py b/3rd_party_apps/filetransfers/api.py new file mode 100644 index 0000000000..87fbe56095 --- /dev/null +++ b/3rd_party_apps/filetransfers/api.py @@ -0,0 +1,43 @@ +from django.conf import settings +from django.utils.importlib import import_module +import mimetypes + +PREPARE_UPLOAD_BACKEND = getattr(settings, + 'PREPARE_UPLOAD_BACKEND', + 'filetransfers.backends.default.prepare_upload') +SERVE_FILE_BACKEND = getattr(settings, + 'SERVE_FILE_BACKEND', + 'filetransfers.backends.default.serve_file') +PUBLIC_DOWNLOAD_URL_BACKEND = getattr(settings, + 'PUBLIC_DOWNLOAD_URL_BACKEND', + 'filetransfers.backends.default.public_download_url') + +_backends_cache = {} + +# Public API +def prepare_upload(request, url, private=False, backend=None): + handler = _load_backend(backend, PREPARE_UPLOAD_BACKEND) + return handler(request, url, private=private) + +def serve_file(request, file, backend=None, save_as=False, content_type=None): + # Backends are responsible for handling range requests. + handler = _load_backend(backend, SERVE_FILE_BACKEND) + filename = file.name.rsplit('/')[-1] + if save_as is True: + save_as = filename + if not content_type: + content_type = mimetypes.guess_type(filename)[0] + return handler(request, file, save_as=save_as, content_type=content_type) + +def public_download_url(file, backend=None): + handler = _load_backend(backend, PUBLIC_DOWNLOAD_URL_BACKEND) + return handler(file) + +# Internal utilities +def _load_backend(backend, default_backend): + if backend is None: + backend = default_backend + if backend not in _backends_cache: + module_name, func_name = backend.rsplit('.', 1) + _backends_cache[backend] = getattr(import_module(module_name), func_name) + return _backends_cache[backend] diff --git a/3rd_party_apps/filetransfers/backends/__init__.py b/3rd_party_apps/filetransfers/backends/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/3rd_party_apps/filetransfers/backends/base_url.py b/3rd_party_apps/filetransfers/backends/base_url.py new file mode 100644 index 0000000000..ec0a3f2a8c --- /dev/null +++ b/3rd_party_apps/filetransfers/backends/base_url.py @@ -0,0 +1,7 @@ +from django.conf import settings + +def public_download_url(file, **kwargs): + """ + Directs downloads to a handler at settings.PUBLIC_DOWNLOADS_URL_BASE + """ + return settings.PUBLIC_DOWNLOADS_URL_BASE + file.name diff --git a/3rd_party_apps/filetransfers/backends/default.py b/3rd_party_apps/filetransfers/backends/default.py new file mode 100644 index 0000000000..3c360d6120 --- /dev/null +++ b/3rd_party_apps/filetransfers/backends/default.py @@ -0,0 +1,30 @@ +from django.http import HttpResponse +from django.utils.encoding import smart_str + +def prepare_upload(request, url, **kwargs): + """Directly uploads to the given URL""" + return url, {} + +def serve_file(request, file, save_as, content_type, **kwargs): + """ + Serves the file in chunks for efficiency reasons, but the transfer still + goes through Django itself, so it's much worse than using the web server, + but at least it works with all configurations. + """ + response = HttpResponse(ChunkedFile(file), content_type=content_type) + if save_as: + response['Content-Disposition'] = smart_str(u'attachment; filename=%s' % save_as) + if file.size is not None: + response['Content-Length'] = file.size + return response + +def public_download_url(file, **kwargs): + """No public download URL""" + return None + +class ChunkedFile(object): + def __init__(self, file): + self.file = file + + def __iter__(self): + return self.file.chunks() diff --git a/3rd_party_apps/filetransfers/backends/delegate.py b/3rd_party_apps/filetransfers/backends/delegate.py new file mode 100644 index 0000000000..6f052d34ce --- /dev/null +++ b/3rd_party_apps/filetransfers/backends/delegate.py @@ -0,0 +1,11 @@ +from django.conf import settings + +from filetransfers.api import prepare_upload as delegate + +def prepare_upload(*args, **kwargs): + """Delegates uploads to other backends based on private=False or True""" + if kwargs['private']: + kwargs['backend'] = settings.PRIVATE_PREPARE_UPLOAD_BACKEND + else: + kwargs['backend'] = settings.PUBLIC_PREPARE_UPLOAD_BACKEND + return delegate(*args, **kwargs) diff --git a/3rd_party_apps/filetransfers/backends/url.py b/3rd_party_apps/filetransfers/backends/url.py new file mode 100644 index 0000000000..dce9a04221 --- /dev/null +++ b/3rd_party_apps/filetransfers/backends/url.py @@ -0,0 +1,10 @@ +from django.http import HttpResponseRedirect +from django.utils.encoding import smart_str + +def serve_file(request, file, **kwargs): + """Serves files by redirecting to file.url (e.g., useful for Amazon S3)""" + return HttpResponseRedirect(smart_str(file.url)) + +def public_download_url(file, **kwargs): + """Directs downloads to file.url (useful for normal file system storage)""" + return file.url diff --git a/3rd_party_apps/filetransfers/backends/xsendfile.py b/3rd_party_apps/filetransfers/backends/xsendfile.py new file mode 100644 index 0000000000..db2f30a334 --- /dev/null +++ b/3rd_party_apps/filetransfers/backends/xsendfile.py @@ -0,0 +1,12 @@ +from django.http import HttpResponse +from django.utils.encoding import smart_str + +def serve_file(request, file, save_as, content_type, **kwargs): + """Lets the web server serve the file using the X-Sendfile extension""" + response = HttpResponse(content_type=content_type) + response['X-Sendfile'] = file.path + if save_as: + response['Content-Disposition'] = smart_str(u'attachment; filename=%s' % save_as) + if file.size is not None: + response['Content-Length'] = file.size + return response diff --git a/3rd_party_apps/filetransfers/templatetags/__init__.py b/3rd_party_apps/filetransfers/templatetags/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/3rd_party_apps/filetransfers/templatetags/filetransfers.py b/3rd_party_apps/filetransfers/templatetags/filetransfers.py new file mode 100644 index 0000000000..545a2936c8 --- /dev/null +++ b/3rd_party_apps/filetransfers/templatetags/filetransfers.py @@ -0,0 +1,17 @@ +from django.template import Library +from django.utils.safestring import mark_safe + +from ..api import public_download_url + +register = Library() + +_hidden_data_field = '' + +@register.simple_tag +def render_upload_data(data): + inputs = ''.join(_hidden_data_field % item for item in data.items()) + if inputs: + return mark_safe('
%s
' % inputs) + return '' + +register.filter(public_download_url) diff --git a/README.md b/README.md index 2d99b3bfff..3012b25ce2 100644 --- a/README.md +++ b/README.md @@ -17,19 +17,36 @@ Features * Local file or server side staging file uploads * Batch upload many documents with the same metadata * User defined document checksum algorithm +* Previews for a great deal of image formats, including PDF +* Document OCR and searching Requirements --- +Python: + * Django - A high-level Python Web framework that encourages rapid development and clean, pragmatic design. * django-pagination +* django-filetransfers - File upload/download abstraction Or execute pip install -r requirements/production.txt to install the dependencies automatically. +Executables: + +* ImageMagick - Convert, Edit, Or Compose Bitmap Images +* tesseract-ocr - An OCR Engine that was developed at HP Labs between 1985 and 1995... and now at Google. + +License +------- +See docs/LICENSE file + Author ------ Roberto Rosario - [Twitter](http://twitter.com/#siloraptor) [E-mail](roberto.rosario.gonzalez at gmail) +Credits +------- +See docs/CREDITS file diff --git a/apps/common/templates/generic_list.html b/apps/common/templates/generic_list.html index b6acb740ae..713205dcfd 100755 --- a/apps/common/templates/generic_list.html +++ b/apps/common/templates/generic_list.html @@ -5,4 +5,22 @@ {% block content %} {% include 'generic_list_subtemplate.html' %} + + {% for subtemplate in subtemplates_dict %} + {% with subtemplate.title as title %} + {% with subtemplate.object_list as object_list %} + {% with subtemplate.extra_columns as extra_columns %} + {% with subtemplate.hide_object as hide_object %} + {% with subtemplate.main_object as main_object %} + {% with subtemplate.hide_link as hide_link %} + {% include subtemplate.name %} + {% endwith %} + {% endwith %} + {% endwith %} + {% endwith %} + {% endwith %} + {% endwith %} + {% endfor %} + {% endblock %} + diff --git a/apps/common/templates/generic_navigation.html b/apps/common/templates/generic_navigation.html index 6829cde23c..b7c86dd7cf 100755 --- a/apps/common/templates/generic_navigation.html +++ b/apps/common/templates/generic_navigation.html @@ -2,6 +2,6 @@ {% for link in object_navigation_links %} {% if as_li %}
  • {% endif %} - {% if link.famfam %}{% endif %}{{ link.text|capfirst }}{% if link.error %} - {{ link.error }}{% endif %}{% if link.active %}{% endif %}{% if horizontal %}{% if not forloop.last %} | {% endif %}{% endif %} + {% if link.famfam %}{% endif %}{{ link.text|capfirst }}{% if link.error %} - {{ link.error }}{% endif %}{% if link.active %}{% endif %}{% if horizontal %}{% if not forloop.last %} | {% endif %}{% endif %} {% if as_li %}
  • {% endif %} {% endfor %} diff --git a/apps/common/templatetags/navigation.py b/apps/common/templatetags/navigation.py index 8b778662c6..22458f166a 100644 --- a/apps/common/templatetags/navigation.py +++ b/apps/common/templatetags/navigation.py @@ -1,4 +1,5 @@ import types +import copy from django.conf import settings from django.core.urlresolvers import reverse, NoReverseMatch @@ -137,26 +138,30 @@ def resolve_arguments(context, src_args): def resolve_links(context, links, current_view, current_path): context_links = [] for link in links: + new_link = copy.copy(link) args, kwargs = resolve_arguments(context, link.get('args', {})) if 'view' in link: - link['active'] = link['view'] == current_view + new_link['active'] = link['view'] == current_view args, kwargs = resolve_arguments(context, link.get('args', {})) try: if kwargs: - link['url'] = reverse(link['view'], kwargs=kwargs) + new_link['url'] = reverse(link['view'], kwargs=kwargs) else: - link['url'] = reverse(link['view'], args=args) + new_link['url'] = reverse(link['view'], args=args) except NoReverseMatch, err: - link['url'] = '#' - link['error'] = err + new_link['url'] = '#' + new_link['error'] = err elif 'url' in link: - link['active'] = link['url'] == current_path + new_link['active'] = link['url'] == current_path + if kwargs: + new_link['url'] = link['url'] % kwargs + else: + new_link['url'] = link['url'] % args else: - link['active'] = False - context_links.append(link) - + new_link['active'] = False + context_links.append(new_link) return context_links def _get_object_navigation_links(context, menu_name=None): diff --git a/apps/common/utils.py b/apps/common/utils.py index 7e41ae160d..b86074ef03 100644 --- a/apps/common/utils.py +++ b/apps/common/utils.py @@ -64,3 +64,14 @@ def return_attrib(obj, attrib, arguments={}): return "Attribute error: %s; %s" % (attrib, err) else: pass + + +#http://snippets.dzone.com/posts/show/5434 +#http://snippets.dzone.com/user/jakob +def pretty_size(size): + suffixes = [("B",2**10), ("K",2**20), ("M",2**30), ("G",2**40), ("T",2**50)] + for suf, lim in suffixes: + if size > lim: + continue + else: + return round(size/float(lim/2**10),2).__str__()+suf diff --git a/apps/converter/__init__.py b/apps/converter/__init__.py new file mode 100644 index 0000000000..e5c4e1ea01 --- /dev/null +++ b/apps/converter/__init__.py @@ -0,0 +1,5 @@ +import tempfile + +from documents.conf import settings as documents_settings + +TEMPORARY_DIRECTORY = documents_settings.TEMPORARY_DIRECTORY if documents_settings.TEMPORARY_DIRECTORY else tempfile.mkdtemp() diff --git a/apps/converter/api.py b/apps/converter/api.py new file mode 100644 index 0000000000..0c339bb55f --- /dev/null +++ b/apps/converter/api.py @@ -0,0 +1,92 @@ +import os +import shlex +import subprocess +import tempfile + +from documents.utils import from_descriptor_to_tempfile + +from converter.conf.settings import CONVERT_PATH +from converter.conf.settings import OCR_OPTIONS + +from converter import TEMPORARY_DIRECTORY + + +class ConvertError(Exception): + def __init__(self, status, message): + self.status = status + self.message = message + + +def get_errors(error_string): + ''' + returns all lines in the error_string that start with the string "error" + + ''' + + lines = error_string.splitlines() + return lines[0] + #error_lines = (line for line in lines if line.find('error') >= 0) + #return '\n'.join(error_lines) + + +def execute_convert(input_filepath, arguments, output_filepath): + command = [CONVERT_PATH, input_filepath] + command.extend(shlex.split(str(arguments))) + command.append(output_filepath) + + proc = subprocess.Popen(command, stderr=subprocess.PIPE) + return (proc.wait(), proc.stderr.read()) + + +def in_cache(input_filepath, size, page=0, format='jpg'): + #temp_directory = TEMPORARY_DIRECTORY if TEMPORARY_DIRECTORY else tempfile.mkdtemp() + temp_filename, separator = os.path.splitext(os.path.basename(input_filepath)) + temp_path = os.path.join(TEMPORARY_DIRECTORY, temp_filename) + output_arg = '%s_%s%s%s' % (temp_path, size, os.extsep, format) + input_arg = '%s[%s]' % (input_filepath, page) + if os.path.exists(output_arg): + return output_arg + else: + return None + + +def convert(input_filepath, size, cache=True, page=0, format='jpg'): + #temp_directory = TEMPORARY_DIRECTORY if TEMPORARY_DIRECTORY else tempfile.mkdtemp() + #TODO: generate output file using lightweight hash function on + #file name or file content + temp_filename, separator = os.path.splitext(os.path.basename(input_filepath)) + temp_path = os.path.join(TEMPORARY_DIRECTORY, temp_filename) + output_arg = '%s_%s%s%s' % (temp_path, size, os.extsep, format) + input_arg = '%s[%s]' % (input_filepath, page) + if os.path.exists(output_arg): + return output_arg + + #TODO: Check mimetype and use corresponding utility + convert = subprocess.Popen([CONVERT_PATH, input_arg, '-resize', size, output_arg]) + return_code = convert.wait() + if return_code: + raise Exception + #TODO: check return code & messages + #TODO: Timeout & kill child + return output_arg + + +#TODO: slugify OCR_OPTIONS and add to file name to cache +def convert_document_for_ocr(document, page=0, format='tif'): + #Extract document file + document.file.open() + desc = document.file.storage.open(document.file.path) + input_filepath = from_descriptor_to_tempfile(desc, document.uuid) + + #Convert for OCR + temp_filename, separator = os.path.splitext(os.path.basename(input_filepath)) + temp_path = os.path.join(TEMPORARY_DIRECTORY, temp_filename) + output_arg = '%s_ocr%s%s%s' % (temp_path, page, os.extsep, format) + input_arg = '%s[%s]' % (input_filepath, page) + try: + status, error_string = execute_convert(input_arg, OCR_OPTIONS, output_arg) + if status: + errors = get_errors(error_string) + raise ConvertError(status, errors) + finally: + return output_arg diff --git a/apps/converter/conf/__init__.py b/apps/converter/conf/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/converter/conf/settings.py b/apps/converter/conf/settings.py new file mode 100644 index 0000000000..28ac04f8cb --- /dev/null +++ b/apps/converter/conf/settings.py @@ -0,0 +1,4 @@ +from django.conf import settings + +CONVERT_PATH = getattr(settings, 'CONVERTER_CONVERT_PATH', u'/usr/bin/convert') +OCR_OPTIONS = getattr(settings, 'CONVERTER_OCR_OPTIONS', u'-colorspace Gray -depth 8 -resample 200x200') diff --git a/apps/converter/models.py b/apps/converter/models.py new file mode 100644 index 0000000000..71a8362390 --- /dev/null +++ b/apps/converter/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/apps/converter/tests.py b/apps/converter/tests.py new file mode 100644 index 0000000000..2247054b35 --- /dev/null +++ b/apps/converter/tests.py @@ -0,0 +1,23 @@ +""" +This file demonstrates two different styles of tests (one doctest and one +unittest). These will both pass when you run "manage.py test". + +Replace these with more appropriate tests for your application. +""" + +from django.test import TestCase + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.failUnlessEqual(1 + 1, 2) + +__test__ = {"doctest": """ +Another way to test that 1 + 1 is equal to 2. + +>>> 1 + 1 == 2 +True +"""} + diff --git a/apps/converter/views.py b/apps/converter/views.py new file mode 100644 index 0000000000..60f00ef0ef --- /dev/null +++ b/apps/converter/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index e527a75f54..6ed79ffa1b 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -1,3 +1,5 @@ +import tempfile + from django.utils.translation import ugettext_lazy as _ from common.api import register_links, register_menu @@ -5,20 +7,30 @@ from common.api import register_links, register_menu from models import Document from staging import StagingFile +from documents.conf import settings as documents_settings + + document_list = {'text':_(u'documents list'), 'view':'document_list', 'famfam':'page'} document_create = {'text':_('upload a document'), 'view':'document_create', 'famfam':'page_add'} document_create_multiple = {'text':_('upload multiple documents'), 'view':'document_create_multiple', 'famfam':'page_add'} document_view = {'text':_('details'), 'view':'document_view', 'args':'object.id', 'famfam':'page'} document_delete = {'text':_('delete'), 'view':'document_delete', 'args':'object.id', 'famfam':'page_delete'} document_edit = {'text':_('edit'), 'view':'document_edit', 'args':'object.id', 'famfam':'page_edit'} +document_preview = {'text':_('preview'), 'class':'fancybox', 'view':'document_preview', 'args':'object.id', 'famfam':'magnifier'} +document_download = {'text':_('download'), 'view':'document_download', 'args':'object.id', 'famfam':'page_save'} -register_links(Document, [document_view, document_edit, document_delete]) -register_links(Document, [document_list, document_create, document_create_multiple], menu_name='sidebar') +staging_file_preview = {'text':_('preview'), 'class':'fancybox', 'view':'staging_file_preview', 'args':'object.id', 'famfam':'drive_magnify'} + +register_links(Document, [document_edit, document_delete, document_preview, document_download]) +register_links(Document, [document_list, document_create, document_create_multiple, document_view], menu_name='sidebar') register_links(['document_list', 'document_create', 'document_create_multiple', 'upload_document_with_type', 'upload_multiple_documents_with_type'], [document_list, document_create, document_create_multiple], menu_name='sidebar') +register_links(StagingFile, [staging_file_preview]) + register_menu([ {'text':_('documents'), 'view':'document_list', 'links':[ document_list ],'famfam':'page','position':4}]) +TEMPORARY_DIRECTORY = documents_settings.TEMPORARY_DIRECTORY if documents_settings.TEMPORARY_DIRECTORY else tempfile.mkdtemp() diff --git a/apps/documents/admin.py b/apps/documents/admin.py index 660d8b781b..3347d39e8d 100644 --- a/apps/documents/admin.py +++ b/apps/documents/admin.py @@ -2,7 +2,7 @@ from django.contrib import admin from models import MetadataType, DocumentType, Document, \ DocumentTypeMetadataType, DocumentMetadata, DocumentTypeFilename, \ - MetadataIndex, DocumentMetadataIndex + MetadataIndex, DocumentMetadataIndex, DocumentPage class MetadataTypeAdmin(admin.ModelAdmin): @@ -49,9 +49,15 @@ class DocumentMetadataIndexInline(admin.StackedInline): allow_add = True readonly_fields = ('metadata_index', 'filename') +class DocumentPageInline(admin.StackedInline): + model = DocumentPage + extra = 1 + classes = ('collapse-open',) + allow_add = True + class DocumentAdmin(admin.ModelAdmin): - inlines = [DocumentMetadataInline, DocumentMetadataIndexInline] + inlines = [DocumentMetadataInline, DocumentMetadataIndexInline, DocumentPageInline] list_display = ('uuid', 'file_filename', 'file_extension') diff --git a/apps/documents/conf/settings.py b/apps/documents/conf/settings.py index 9f353c7d42..27fc6575d2 100644 --- a/apps/documents/conf/settings.py +++ b/apps/documents/conf/settings.py @@ -22,6 +22,7 @@ AVAILABLE_MODELS = getattr(settings, 'DOCUMENTS_METADATA_AVAILABLE_MODELS', defa USE_STAGING_DIRECTORY = getattr(settings, 'DOCUMENTS_USE_STAGING_DIRECTORY', False) STAGING_DIRECTORY = getattr(settings, 'DOCUMENTS_STAGING_DIRECTORY', u'/tmp/mayan/staging') DELETE_STAGING_FILE_AFTER_UPLOAD = getattr(settings, 'DOCUMENTS_DELETE_STAGING_FILE_AFTER_UPLOAD', False) +STAGING_FILES_PREVIEW_SIZE = getattr(settings, 'DOCUMENTS_STAGING_FILES_PREVIEW_SIZE', '640x480') DELETE_LOCAL_ORIGINAL = getattr(settings, 'DOCUMENTS_DELETE_LOCAL_ORIGINAL', False) # Saving CHECKSUM_FUNCTION = getattr(settings, 'DOCUMENTS_CHECKSUM_FUNCTION', lambda x: hashlib.sha256(x).hexdigest()) @@ -29,8 +30,15 @@ UUID_FUNCTION = getattr(settings, 'DOCUMENTS_UUID_FUNTION', lambda:unicode(uuid. # Storage STORAGE_BACKEND = getattr(settings, 'DOCUMENTS_STORAGE_BACKEND', DocumentStorage) STORAGE_DIRECTORY_NAME = getattr(settings, 'DOCUMENTS_STORAGE_DIRECTORY_NAME', 'documents') +# Usage +PREVIEW_SIZE = getattr(settings, 'DOCUMENTS_PREVIEW_SIZE', '640x480') +THUMBNAIL_SIZE = getattr(settings, 'DOCUMENTS_THUMBNAIL_SIZE', '50x50') # Serving FILESYSTEM_FILESERVING_ENABLE = getattr(settings, 'DOCUMENTS_FILESYSTEM_FILESERVING_ENABLE', True) FILESYSTEM_FILESERVING_PATH = getattr(settings, 'DOCUMENTS_FILESERVING_PATH', u'/tmp/mayan/documents') FILESYSTEM_SLUGIFY_PATHS = getattr(settings, 'DOCUMENTS_SLUGIFY_PATHS', False) FILESYSTEM_MAX_RENAME_COUNT = getattr(settings, 'DOCUMENTS_FILESYSTEM_MAX_RENAME_COUNT', 200) +#misc +TEMPORARY_DIRECTORY = getattr(settings, 'DOCUMENTS_TEMPORARY_DIRECTORY', u'/tmp') + + diff --git a/apps/documents/forms.py b/apps/documents/forms.py index c63a0edf7d..3ca7498305 100644 --- a/apps/documents/forms.py +++ b/apps/documents/forms.py @@ -35,6 +35,7 @@ class DocumentForm(forms.ModelForm): class Meta: model = Document + exclude = ('description',) class DocumentForm_view(DetailForm): diff --git a/apps/documents/models.py b/apps/documents/models.py index 0e8e837a74..a9479c7de0 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -65,6 +65,7 @@ class Document(models.Model): date_added = models.DateTimeField(verbose_name=_(u'added'), auto_now_add=True) date_updated = models.DateTimeField(verbose_name=_(u'updated'), auto_now=True) checksum = models.TextField(blank=True, null=True, verbose_name=_(u'checksum'), editable=False) + description = models.TextField(blank=True, null=True, verbose_name=_(u'description')) class Meta: verbose_name = _(u'document') @@ -73,6 +74,9 @@ class Document(models.Model): def __unicode__(self): return '%s.%s' % (self.file_filename, self.file_extension) + + def get_fullname(self): + return os.extsep.join([self.file_filename, self.file_extension]) @models.permalink def get_absolute_url(self): @@ -95,7 +99,7 @@ class Document(models.Model): #topics/db/queries.html#topics-db-queries-delete self.delete_fs_links() super(Document, self).delete(*args, **kwargs) - + def create_fs_links(self): if FILESYSTEM_FILESERVING_ENABLE: metadata_dict = {'document':self} @@ -289,6 +293,20 @@ class DocumentTypeFilename(models.Model): ordering = ['filename'] verbose_name = _(u'document type filename') verbose_name_plural = _(u'document types filenames') - -register(Document, _(u'document'), ['document_type__name', 'file_mimetype', 'file_filename', 'file_extension', 'documentmetadata__value']) + +class DocumentPage(models.Model): + document = models.ForeignKey(Document, verbose_name=_(u'document')) + content = models.TextField(blank=True, null=True, verbose_name=_(u'content')) + page_label = models.CharField(max_length=32, blank=True, null=True, verbose_name=_(u'page label')) + page_number = models.PositiveIntegerField(default=0, verbose_name=_(u'page number')) + + def __unicode__(self): + return '%s - %s' % (self.page_number, self.page_label) + + class Meta: + verbose_name = _(u'document page') + verbose_name_plural = _(u'document pages') + + +register(Document, _(u'document'), ['document_type__name', 'file_mimetype', 'file_filename', 'file_extension', 'documentmetadata__value', 'documentpage__content']) diff --git a/apps/documents/templates/fancybox.html b/apps/documents/templates/fancybox.html new file mode 100644 index 0000000000..fc93cfc122 --- /dev/null +++ b/apps/documents/templates/fancybox.html @@ -0,0 +1,15 @@ + + + + diff --git a/apps/documents/urls.py b/apps/documents/urls.py index 163ee75be4..9b21f175fa 100644 --- a/apps/documents/urls.py +++ b/apps/documents/urls.py @@ -12,4 +12,11 @@ urlpatterns = patterns('documents.views', url(r'^document/(?P\d+)/$', 'document_view', (), 'document_view'), url(r'^document/(?P\d+)/delete/$', 'document_delete', (), 'document_delete'), url(r'^document/(?P\d+)/edit/$', 'document_edit', (), 'document_edit'), + url(r'^document/(?P\d+)/preview/$', 'document_preview', (), 'document_preview'), + url(r'^document/(?P\d+)/thumbnail/$', 'document_thumbnail', (), 'document_thumbnail'), + url(r'^document/(?P\d+)/download/$', 'document_download', (), 'document_download'), + + url(r'^staging_file/(?P\w+)/preview/$', 'staging_file_preview', (), 'staging_file_preview'), + + ) diff --git a/apps/documents/utils.py b/apps/documents/utils.py new file mode 100644 index 0000000000..3d61962159 --- /dev/null +++ b/apps/documents/utils.py @@ -0,0 +1,61 @@ +import os +import tempfile + +from documents import TEMPORARY_DIRECTORY + + +#http://stackoverflow.com/questions/123198/how-do-i-copy-a-file-in-python +def copyfile(source, dest, buffer_size=1024*1024): + """ + Copy a file from source to dest. source and dest + can either be strings or any object with a read or + write method, like StringIO for example. + """ + if not hasattr(source, 'read'): + source = open(source, 'rb') + if not hasattr(dest, 'write'): + dest = open(dest, 'wb') + + while 1: + copy_buffer = source.read(buffer_size) + if copy_buffer: + dest.write(copy_buffer) + else: + break + + source.close() + dest.close() + + +def from_descriptor_to_tempfile(input_descriptor, filename, buffer_size=1024*1024): + path = os.path.join(TEMPORARY_DIRECTORY, filename) + + output_descriptor = open(path, 'wb') + + while 1: + copy_buffer = input_descriptor.read(buffer_size) + if copy_buffer: + output_descriptor.write(copy_buffer) + else: + break + + input_descriptor.close() + output_descriptor.close() + return path + + + +def from_descriptor_to_new_tempfile(input_descriptor, buffer_size=1024*1024): + output_descriptor, tmp_filename = tempfile.mkstemp() + + while 1: + copy_buffer = input_descriptor.read(buffer_size) + if copy_buffer: + #output_descriptor.write(copy_buffer) + os.write(output_descriptor, copy_buffer) + else: + break + + input_descriptor.close() + os.close(output_descriptor) + return tmp_filename diff --git a/apps/documents/views.py b/apps/documents/views.py index eee4c4351f..7969fdb6cd 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -1,4 +1,3 @@ -from urlparse import urlparse from urllib import unquote_plus from django.utils.translation import ugettext as _ @@ -10,6 +9,15 @@ from django.views.generic.list_detail import object_detail, object_list from django.core.urlresolvers import reverse from django.views.generic.create_update import create_object, delete_object, update_object from django.forms.formsets import formset_factory +from django.core.files.base import File +from django.conf import settings + + +from filetransfers.api import serve_file +from converter.api import convert, in_cache +from common.utils import pretty_size + +from utils import from_descriptor_to_tempfile from models import Document, DocumentMetadata, DocumentType, MetadataType from forms import DocumentTypeSelectForm, DocumentCreateWizard, \ @@ -21,7 +29,9 @@ from staging import StagingFile from documents.conf.settings import DELETE_STAGING_FILE_AFTER_UPLOAD from documents.conf.settings import USE_STAGING_DIRECTORY from documents.conf.settings import FILESYSTEM_FILESERVING_ENABLE - +from documents.conf.settings import STAGING_FILES_PREVIEW_SIZE +from documents.conf.settings import PREVIEW_SIZE +from documents.conf.settings import THUMBNAIL_SIZE def document_list(request): return object_list( @@ -33,11 +43,13 @@ def document_list(request): 'extra_columns':[ {'name':_(u'mimetype'), 'attribute':'file_mimetype'}, {'name':_(u'added'), 'attribute':lambda x: x.date_added.date()}, + {'name':_(u'file size'), 'attribute':lambda x: pretty_size(x.file.storage.size(x.file.path)) if x.exists() else '-'}, + {'name':_(u'thumbnail'), 'attribute': + lambda x: '' % reverse('document_thumbnail', args=[x.id])}, ], }, ) - def document_create(request, multiple=True): MetadataFormSet = formset_factory(MetadataForm, extra=0) wizard = DocumentCreateWizard(form_list=[DocumentTypeSelectForm, MetadataFormSet], multiple=multiple) @@ -158,10 +170,10 @@ def upload_document_with_type(request, document_type_id, multiple=True): context.update({ 'subtemplates_dict':[ { - 'name':'generic_list_subtemplate.html', - 'title':_(u'files in staging'), - 'object_list':filelist, - 'hide_link':True, + 'name':'generic_list_subtemplate.html', + 'title':_(u'files in staging'), + 'object_list':filelist, + 'hide_link':True, }, ], }) @@ -182,11 +194,12 @@ def document_view(request, document_id): {'label':_(u'Filename'), 'field':'file_filename'}, {'label':_(u'File extension'), 'field':'file_extension'}, {'label':_(u'File mimetype'), 'field':'file_mimetype'}, + {'label':_(u'File size'), 'field':lambda x: pretty_size(x.file.storage.size(x.file.path)) if x.exists() else '-'}, + {'label':_(u'Exists in storage'), 'field':'exists'}, {'label':_(u'Date added'), 'field':lambda x: x.date_added.date()}, {'label':_(u'Time added'), 'field':lambda x: unicode(x.date_added.time()).split('.')[0]}, {'label':_(u'Checksum'), 'field':'checksum'}, {'label':_(u'UUID'), 'field':'uuid'}, - {'label':_(u'Exists in storage'), 'field':'exists'} ]) subtemplates_dict = [ @@ -264,3 +277,55 @@ def document_edit(request, document_id): 'object':document, }, context_instance=RequestContext(request)) + + +def get_document_image(request, document_id, size=PREVIEW_SIZE): + document = get_object_or_404(Document, pk=document_id) + + filepath = in_cache(document.uuid, size) + + if filepath: + return serve_file(request, File(file=open(filepath, 'r'))) + else: + try: + document.file.open() + desc = document.file.storage.open(document.file.path) + filepath = from_descriptor_to_tempfile(desc, document.uuid) + output_file = convert(filepath, size) + return serve_file(request, File(file=open(output_file, 'r'))) + except Exception, e: + if size == THUMBNAIL_SIZE: + return serve_file(request, File(file=open('%simages/picture_error.png' % settings.MEDIA_ROOT, 'r'))) + else: + return serve_file(request, File(file=open('%simages/1297211435_error.png' % settings.MEDIA_ROOT, 'r'))) + #messages.error(request, e) + #return HttpResponse(e) + + +def document_thumbnail(request, document_id): + return get_document_image(request, document_id, THUMBNAIL_SIZE) + + +def document_preview(request, document_id): + return get_document_image(request, document_id, PREVIEW_SIZE) + + +def document_download(request, document_id): + document = get_object_or_404(Document, pk=document_id) + try: + #Test permissions and trigger exception + document.file.open() + return serve_file(request, document.file, save_as=document.get_fullname()) + except Exception, e: + messages.error(request, e) + return HttpResponseRedirect(request.META['HTTP_REFERER']) + + +def staging_file_preview(request, staging_file_id): + try: + filepath = StagingFile.get(staging_file_id).filepath + output_file = convert(filepath, STAGING_FILES_PREVIEW_SIZE) + return serve_file(request, File(file=open(output_file, 'r'))) + except Exception, e: + return serve_file(request, File(file=open('%simages/1297211435_error.png' % settings.MEDIA_ROOT, 'r'))) + diff --git a/apps/main/templates/about.html b/apps/main/templates/about.html index 921ea4640c..60ebfd00fd 100755 --- a/apps/main/templates/about.html +++ b/apps/main/templates/about.html @@ -7,7 +7,7 @@

    {% project_name %}

    - {% trans 'Django based document manager with custom metadata indexing and file serving integration' %}

    + {% trans 'Open source, Django based document manager with custom metadata indexing, file serving integration and OCR capabilities' %}

    http://www.github.com/rosarior/mayan/

    diff --git a/apps/main/templates/base.html b/apps/main/templates/base.html index 317d89d834..e0285c1d30 100755 --- a/apps/main/templates/base.html +++ b/apps/main/templates/base.html @@ -11,6 +11,7 @@ {% block web_theme_stylesheets %} + {% block stylesheets %}{% endblock %} {% endblock %} @@ -20,6 +21,21 @@ $("input:text:visible:not(#livesearch):not([readonly]):enabled:first").focus(); }); + + + + {% block javascript %}{% endblock %} {% endblock %} diff --git a/apps/ocr/__init__.py b/apps/ocr/__init__.py new file mode 100644 index 0000000000..d0dd088682 --- /dev/null +++ b/apps/ocr/__init__.py @@ -0,0 +1,15 @@ +from django.utils.translation import ugettext_lazy as _ + +from common.api import register_links, register_menu + +from documents.models import Document + + +submit_document = {'text':_('submit to ocr'), 'view':'submit_document', 'args':'object.id', 'famfam':'page_lightning'} + +register_links(Document, [submit_document]) + +#register_menu([ +# {'text':_('OCR'), 'view':'ocr_queue', 'links':[ +# ocr_queue +# ],'famfam':'hourglass','position':5}]) diff --git a/apps/ocr/api.py b/apps/ocr/api.py new file mode 100644 index 0000000000..dcf6dda2c1 --- /dev/null +++ b/apps/ocr/api.py @@ -0,0 +1,66 @@ +#Some code from http://wiki.github.com/hoffstaetter/python-tesseract + +import os + +import subprocess +import tempfile + +from django.utils.translation import ugettext as _ + +from documents.models import DocumentPage +from documents.conf.settings import TEMPORARY_DIRECTORY +from converter.api import convert_document_for_ocr + +from ocr.conf.settings import TESSERACT_PATH + + +def cleanup(filename): + ''' tries to remove the given filename. Ignores non-existent files ''' + try: + os.remove(filename) + except OSError: + pass + +class TesseractError(Exception): + def __init__(self, status, message): + self.status = status + self.message = message + + +def run_tesseract(input_filename, output_filename_base, lang=None): + command = [TESSERACT_PATH, input_filename, output_filename_base] + if lang is not None: + command += ['-l', lang] + + proc = subprocess.Popen(command, stderr=subprocess.PIPE) + return (proc.wait(), proc.stderr.read()) + + +def ocr_document(document): + total_pages = 1 + page = 0 + while page < total_pages: + imagefile = convert_document_for_ocr(document, page=page) + desc, filepath = tempfile.mkstemp() + try: + status, error_string = run_tesseract(imagefile, filepath) + if status: + errors = get_errors(error_string) + raise TesseractError(status, errors) + finally: + ocr_output = os.extsep.join([filepath, 'txt']) + f = file(ocr_output) + try: + document_page, created = DocumentPage.objects.get_or_create(document=document, + page_number=page) + document_page.content = f.read().strip() + document_page.page_label = _(u'Text from OCR') + document_page.save() + finally: + f.close() + cleanup(filepath) + cleanup(ocr_output) + cleanup(imagefile) + + page += 1 + diff --git a/apps/ocr/conf/__init__.py b/apps/ocr/conf/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/ocr/conf/settings.py b/apps/ocr/conf/settings.py new file mode 100644 index 0000000000..de3c3980da --- /dev/null +++ b/apps/ocr/conf/settings.py @@ -0,0 +1,3 @@ +from django.conf import settings + +TESSERACT_PATH = getattr(settings, 'OCR_TESSERACT_PATH', u'/usr/bin/tesseract') diff --git a/apps/ocr/models.py b/apps/ocr/models.py new file mode 100644 index 0000000000..71a8362390 --- /dev/null +++ b/apps/ocr/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/apps/ocr/tests.py b/apps/ocr/tests.py new file mode 100644 index 0000000000..2247054b35 --- /dev/null +++ b/apps/ocr/tests.py @@ -0,0 +1,23 @@ +""" +This file demonstrates two different styles of tests (one doctest and one +unittest). These will both pass when you run "manage.py test". + +Replace these with more appropriate tests for your application. +""" + +from django.test import TestCase + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.failUnlessEqual(1 + 1, 2) + +__test__ = {"doctest": """ +Another way to test that 1 + 1 is equal to 2. + +>>> 1 + 1 == 2 +True +"""} + diff --git a/apps/ocr/urls.py b/apps/ocr/urls.py new file mode 100644 index 0000000000..39dc2a35ad --- /dev/null +++ b/apps/ocr/urls.py @@ -0,0 +1,6 @@ +from django.conf.urls.defaults import * +from django.utils.translation import ugettext_lazy as _ + +urlpatterns = patterns('ocr.views', + url(r'^(?P\d+)/submit/$', 'submit_document', (), 'submit_document'), +) diff --git a/apps/ocr/views.py b/apps/ocr/views.py new file mode 100644 index 0000000000..f1ec3e3838 --- /dev/null +++ b/apps/ocr/views.py @@ -0,0 +1,27 @@ +from django.http import HttpResponse, HttpResponseRedirect +from django.shortcuts import render_to_response, get_object_or_404, redirect +from django.template import RequestContext +from django.contrib import messages +from django.views.generic.list_detail import object_detail, object_list +from django.core.urlresolvers import reverse +#from django.views.generic.create_update import create_object, delete_object, update_object +from django.conf import settings +from django.utils.translation import ugettext as _ + + +from documents.models import Document + + +from api import ocr_document + +def submit_document(request, document_id): + document = get_object_or_404(Document, pk=document_id) + + try: + result = ocr_document(document) + except Exception, e: + messages.error(request, e.message) + return HttpResponseRedirect(request.META['HTTP_REFERER']) + + messages.success(request, _(u'Document OCR was successful.')) + return HttpResponseRedirect(request.META['HTTP_REFERER']) diff --git a/docs/CREDITS b/docs/CREDITS new file mode 100644 index 0000000000..3fd579a2bf --- /dev/null +++ b/docs/CREDITS @@ -0,0 +1,61 @@ +Python + Copyright (c) 2001-2010 Python Software Foundation. + Copyright (c) 2000 BeOpen.com. + Copyright (c) 1995-2001 Corporation for National Research Initiatives. + Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam. + +Django - A high-level Python Web framework that encourages rapid development and clean, pragmatic design. + Copyright Django Software Foundation + http://www.djangoproject.com/ + +django-pagination + Copyright Eric Florenzano (floguy@gmail.com) + http://django-pagination.googlecode.com/ + +Web App Theme + Copyright Andrea Franz (http://gravityblast.com) + git://github.com/pilu/web-app-theme.git + +Imagemagick - Convert, Edit, Or Compose Bitmap Images + Copyright 1999-2011 ImageMagick Studio LLC + http://www.imagemagick.org/script/index.php + +FAMFAMFAM Silk icons + Copyright Mark James (http://www.twitter.com/markjames) + http://www.famfamfam.com/lab/icons/silk/ + +3 state FAMFAMFAM Silk icon sets: discrete images and CSS sprite palette + Copyright Sky Sanders + skysanders.net/subtext + +django-extensions - Extensions for Django + Copyright Bas van Oostveen (v.oostveen@gmail.com) + http://code.google.com/p/django-command-extensions/ + +django-rosetta - A Django application that eases the translation of Django projects + Copyright Marco Bonetti (mbonetti@gmail.com) + http://code.google.com/p/django-rosetta/ + +Werkzeug - The Swiss Army knife of Python web development + Copyright Armin Ronacher (armin.ronacher@active-4.com) + http://werkzeug.pocoo.org/ + +BoundFormWizard - A subclass of Django's FormWizard that handled FormSets. + Matthew Flanagan (http://www.blogger.com/profile/15093905875465763876) + http://code.google.com/p/wadofstuff/ + +django-filetransfers - File upload/download abstraction + Waldemar Kornewald + http://www.allbuttonspressed.com/projects/django-filetransfers + +tesseract - An OCR Engine that was developed at HP Labs between 1985 and 1995... and now at Google. + http://code.google.com/p/tesseract-ocr/ + +Image file 1068504_92921456 "Mayan piramid" (Stock Exchange) + Andres Ojeda (http://www.sxc.hu/profile/andres_ol) + +Image 1297211435_error + http://kde-look.org/usermanager/search.php?username=InFeRnODeMoN + +Fat cow icon set + http://www.fatcow.com/free-icons diff --git a/docs/TODO b/docs/TODO deleted file mode 100644 index adb36ffcd4..0000000000 --- a/docs/TODO +++ /dev/null @@ -1,46 +0,0 @@ -* Fix repeated search results - DONE -* File renaming dropdown - DONE -* Create indexing filesystem folders from document type metadata type - DONE -* Document detail to view document metadata - DONE -* Add file checksums (hashlib) - DONE -* Delete symlinks when document is deleted - DONE -* Handle NULL mimetypes during model save - DONE -* Raise exception instead of returning error msg - DONE -* Option to delete source staging file after upload - DONE -* Jquery upload document upload form with ajax widget - NOT NEEDED (commit: b0f31f2a8f82ff0daca081005f2fcae3f5573df5) -* Rename dropbox from document edit view - DONE -* Ability to rename staging file during upload - DONE -* Implement single sign on or LDAP for intranets - DEFERRED, provided by Django AuthBackends -* Database storage backend (sql, nosql: [mongodb]) - DEFERRED, provided by https://bitbucket.org/david/django-storages/wiki/Home -* Document list filtering by metadata -* Filterform date filtering widget -* Validate GET data before saving file -* Integrate with http://code.google.com/p/pytesser/ -* Update symlinks when document or metadata changed - ALMOST -* Check duplicated files using checksum -* If theres only one document type on db skip step 1 of wizard -* Show last 5 recent metadata setups for easy switch -* Change to use model signals -* Allow document type to be changed in document edit view -* Encrypting storage backend -* Indicate in generic list which document don't exist in storage backend -* Add css grids -* Document previews -* Recognize multi-page documents -* Staging file previews -* Autodelete empty fs directories -* Auto check and delete dead sym links -* Document model's delete method might not get called when deleting in bulk - from a queryset -* Allow metadata entry form to mix required and non required metadata -* Link to delete and recreate all document links -* MuliThreading deferred OCR -* Document previews on demand w/ imagemagick -* Versioning support -* Generic document anotations using layer overlays -* Permissions -* Roles -* Workflows -* Scheduled maintenance (cleanup, deferred OCR's) -* Show document metadata in document list -* Show abbreviated uuid in document list diff --git a/misc/mayan.geany b/misc/mayan.geany index 3b8642b117..3926653426 100644 --- a/misc/mayan.geany +++ b/misc/mayan.geany @@ -16,7 +16,33 @@ long_line_behaviour=1 long_line_column=72 [files] -current_page=2 -FILE_NAME_0=4811;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/settings.py;0 -FILE_NAME_1=0;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/urls.py;0 -FILE_NAME_2=1086;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/documents/models.py;0 +current_page=12 +FILE_NAME_0=5757;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/settings.py;0 +FILE_NAME_1=275;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/urls.py;0 +FILE_NAME_2=0;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/documents/models.py;0 +FILE_NAME_3=1180;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/documents/admin.py;0 +FILE_NAME_4=1085;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/documents/urls.py;0 +FILE_NAME_5=117;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/main/urls.py;0 +FILE_NAME_6=111;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/main/views.py;0 +FILE_NAME_7=416;HTML;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/main/templates/about.html;0 +FILE_NAME_8=102;HTML;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/main/templates/base.html;0 +FILE_NAME_9=248;HTML;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/main/templates/home.html;0 +FILE_NAME_10=284;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/main/__init__.py;0 +FILE_NAME_11=419;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/documents/__init__.py;0 +FILE_NAME_12=4876;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/documents/views.py;0 +FILE_NAME_13=0;HTML;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/common/templates/generic_list.html;0 +FILE_NAME_14=38;HTML;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/common/templates/generic_list_subtemplate.html;0 +FILE_NAME_15=245;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/common/templatetags/attribute_tags.py;0 +FILE_NAME_16=2916;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/documents/forms.py;0 +FILE_NAME_17=234;None;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/docs/TODO;0 +FILE_NAME_18=0;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/common/forms.py;0 +FILE_NAME_19=245;HTML;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/common/templates/generic_wizard.html;0 +FILE_NAME_20=0;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/common/utils.py;0 +FILE_NAME_21=929;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/documents/conf/settings.py;0 +FILE_NAME_22=671;None;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/wsgi/dispatch.wsgi;0 +FILE_NAME_23=785;HTML;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/common/templates/generic_form.html;0 +FILE_NAME_24=0;HTML;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/common/templates/generic_form_instance.html;0 +FILE_NAME_25=0;HTML;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/common/templates/generic_form_subtemplate.html;0 +FILE_NAME_26=1166;HTML;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/common/templates/generic_detail.html;0 +FILE_NAME_27=1672;Python;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/apps/documents/staging.py;0 +FILE_NAME_28=372;Markdown;0;16;0;1;0;/home/rosarior/development/git/mayan/mayan/README.md;0 diff --git a/settings.py b/settings.py index db1b85bb02..6bd8198272 100644 --- a/settings.py +++ b/settings.py @@ -123,6 +123,9 @@ INSTALLED_APPS = ( 'documents', 'pagination', 'dynamic_search', + 'filetransfers', + 'converter', + 'ocr', ) TEMPLATE_CONTEXT_PROCESSORS = ( @@ -172,16 +175,24 @@ LOGIN_EXEMPT_URLS = ( #DOCUMENTS_USE_STAGING_DIRECTORY = False #DOCUMENTS_STAGING_DIRECTORY = u'/tmp/mayan/staging' #DOCUMENTS_DELETE_STAGING_FILE_AFTER_UPLOAD = False +#DOCUMENTS_STAGING_FILES_PREVIEW_SIZE = '640x480' + # Saving #DOCUMENTS_CHECKSUM_FUNCTION = lambda x: hashlib.sha256(x).hexdigest()) #DOCUMENTS_UUID_FUNCTION = lambda:unicode(uuid.uuid4()) # Storage #DOCUMENTS_STORAGE_DIRECTORY_NAME = 'documents' +# Usage +#DOCUMENTS_PREVIEW_SIZE = '640x480' +#DOCUMENTS_THUMBNAIL_SIZE = '50x50' # Serving #DOCUMENTS_FILESYSTEM_FILESERVING_ENABLE = True #DOCUMENTS_FILESYSTEM_FILESERVING_PATH = u'/tmp/mayan/documents' #DOCUMENTS_FILESYSTEM_SLUGIFY_PATHS = False #DOCUMENTS_FILESYSTEM_MAX_RENAME_COUNT = 200 +# Misc +#DOCUMENTS_TEMPORARY_DIRECTORY = u'/tmp' +#CONVERTER_CONVERT_PATH = u'/usr/bin/convert' #======== End of configuration options ======= try: diff --git a/site_media/images/1297211435_error.png b/site_media/images/1297211435_error.png new file mode 100644 index 0000000000..439ef61b71 Binary files /dev/null and b/site_media/images/1297211435_error.png differ diff --git a/site_media/images/picture_error.png b/site_media/images/picture_error.png new file mode 100644 index 0000000000..5fc148d52d Binary files /dev/null and b/site_media/images/picture_error.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/ajax.txt b/site_media/packages/jquery.fancybox-1.3.4/ajax.txt new file mode 100644 index 0000000000..6e278935b3 --- /dev/null +++ b/site_media/packages/jquery.fancybox-1.3.4/ajax.txt @@ -0,0 +1,6 @@ +
    +

    This comes from ajax request

    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean non velit. Donec pharetra, felis ut tristique adipiscing, diam magna rhoncus neque, sit amet convallis nibh nibh vel libero. Nulla facilisi. In eleifend nisl quis lorem. Duis semper fringilla justo. Proin imperdiet sapien sed lectus. Integer quis nisl et est elementum tempor. Morbi quis tellus nec turpis suscipit molestie. Praesent sed pede. Pellentesque ac orci. Sed sit amet urna eget tellus hendrerit aliquet. Nulla consectetur, pede aliquam ornare placerat, nunc augue commodo leo, sit amet elementum dolor est eleifend magna. +

    +
    \ No newline at end of file diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/10_b.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/10_b.jpg new file mode 100644 index 0000000000..9a070ddde9 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/10_b.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/10_s.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/10_s.jpg new file mode 100644 index 0000000000..8a1c644fcd Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/10_s.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/11_b.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/11_b.jpg new file mode 100644 index 0000000000..ea3eb0dd9d Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/11_b.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/11_s.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/11_s.jpg new file mode 100644 index 0000000000..0d071eff34 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/11_s.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/12_b.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/12_b.jpg new file mode 100644 index 0000000000..3e620e083e Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/12_b.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/12_s.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/12_s.jpg new file mode 100644 index 0000000000..3d47f7c2f7 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/12_s.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/1_b.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/1_b.jpg new file mode 100644 index 0000000000..93ae239855 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/1_b.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/1_s.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/1_s.jpg new file mode 100644 index 0000000000..97fdad2053 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/1_s.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/2_b.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/2_b.jpg new file mode 100644 index 0000000000..6975516c1a Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/2_b.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/2_s.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/2_s.jpg new file mode 100644 index 0000000000..b293db4f8e Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/2_s.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/3_b.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/3_b.jpg new file mode 100644 index 0000000000..5e16847871 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/3_b.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/3_s.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/3_s.jpg new file mode 100644 index 0000000000..0459e3557d Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/3_s.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/4_b.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/4_b.jpg new file mode 100644 index 0000000000..5a26b6bbbf Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/4_b.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/4_s.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/4_s.jpg new file mode 100644 index 0000000000..e52d80356b Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/4_s.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/5_b.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/5_b.jpg new file mode 100644 index 0000000000..82662e31bb Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/5_b.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/5_s.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/5_s.jpg new file mode 100644 index 0000000000..c4ae36a51b Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/5_s.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/6_b.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/6_b.jpg new file mode 100644 index 0000000000..6fcc1e7264 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/6_b.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/6_s.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/6_s.jpg new file mode 100644 index 0000000000..729dadd8eb Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/6_s.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/7_b.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/7_b.jpg new file mode 100644 index 0000000000..fab6b7fb2a Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/7_b.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/7_s.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/7_s.jpg new file mode 100644 index 0000000000..4fa27b11f2 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/7_s.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/8_b.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/8_b.jpg new file mode 100644 index 0000000000..6d8328747b Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/8_b.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/8_s.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/8_s.jpg new file mode 100644 index 0000000000..4014046fd5 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/8_s.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/9_b.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/9_b.jpg new file mode 100644 index 0000000000..84d428179c Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/9_b.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/example/9_s.jpg b/site_media/packages/jquery.fancybox-1.3.4/example/9_s.jpg new file mode 100644 index 0000000000..146e0df207 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/example/9_s.jpg differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/blank.gif b/site_media/packages/jquery.fancybox-1.3.4/fancybox/blank.gif new file mode 100644 index 0000000000..35d42e808f Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/blank.gif differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_close.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_close.png new file mode 100644 index 0000000000..07035307ad Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_close.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_loading.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_loading.png new file mode 100644 index 0000000000..2503017960 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_loading.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_nav_left.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_nav_left.png new file mode 100644 index 0000000000..ebaa6a4fd3 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_nav_left.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_nav_right.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_nav_right.png new file mode 100644 index 0000000000..873294e969 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_nav_right.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_e.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_e.png new file mode 100644 index 0000000000..2eda089364 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_e.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_n.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_n.png new file mode 100644 index 0000000000..69aa10e233 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_n.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_ne.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_ne.png new file mode 100644 index 0000000000..79f6980a3b Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_ne.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_nw.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_nw.png new file mode 100644 index 0000000000..7182cd938a Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_nw.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_s.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_s.png new file mode 100644 index 0000000000..d8858bfb78 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_s.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_se.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_se.png new file mode 100644 index 0000000000..541e3ffd3e Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_se.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_sw.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_sw.png new file mode 100644 index 0000000000..b451689fa7 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_sw.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_w.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_w.png new file mode 100644 index 0000000000..8a4e4a887f Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_shadow_w.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_title_left.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_title_left.png new file mode 100644 index 0000000000..6049223d1e Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_title_left.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_title_main.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_title_main.png new file mode 100644 index 0000000000..8044271f29 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_title_main.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_title_over.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_title_over.png new file mode 100644 index 0000000000..d9f458f4bb Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_title_over.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_title_right.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_title_right.png new file mode 100644 index 0000000000..e36d9db2a7 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancy_title_right.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancybox-x.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancybox-x.png new file mode 100644 index 0000000000..c2130f8698 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancybox-x.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancybox-y.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancybox-y.png new file mode 100644 index 0000000000..7ef399b990 Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancybox-y.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancybox.png b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancybox.png new file mode 100644 index 0000000000..65e14f68fd Binary files /dev/null and b/site_media/packages/jquery.fancybox-1.3.4/fancybox/fancybox.png differ diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/jquery.easing-1.3.pack.js b/site_media/packages/jquery.fancybox-1.3.4/fancybox/jquery.easing-1.3.pack.js new file mode 100644 index 0000000000..9028179e7b --- /dev/null +++ b/site_media/packages/jquery.fancybox-1.3.4/fancybox/jquery.easing-1.3.pack.js @@ -0,0 +1,72 @@ +/* + * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ + * + * Uses the built in easing capabilities added In jQuery 1.1 + * to offer multiple easing options + * + * TERMS OF USE - jQuery Easing + * + * Open source under the BSD License. + * + * Copyright © 2008 George McGinley Smith + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +// t: current time, b: begInnIng value, c: change In value, d: duration +eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('h.i[\'1a\']=h.i[\'z\'];h.O(h.i,{y:\'D\',z:9(x,t,b,c,d){6 h.i[h.i.y](x,t,b,c,d)},17:9(x,t,b,c,d){6 c*(t/=d)*t+b},D:9(x,t,b,c,d){6-c*(t/=d)*(t-2)+b},13:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t+b;6-c/2*((--t)*(t-2)-1)+b},X:9(x,t,b,c,d){6 c*(t/=d)*t*t+b},U:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t+1)+b},R:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t+b;6 c/2*((t-=2)*t*t+2)+b},N:9(x,t,b,c,d){6 c*(t/=d)*t*t*t+b},M:9(x,t,b,c,d){6-c*((t=t/d-1)*t*t*t-1)+b},L:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t+b;6-c/2*((t-=2)*t*t*t-2)+b},K:9(x,t,b,c,d){6 c*(t/=d)*t*t*t*t+b},J:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t*t*t+1)+b},I:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t*t+b;6 c/2*((t-=2)*t*t*t*t+2)+b},G:9(x,t,b,c,d){6-c*8.C(t/d*(8.g/2))+c+b},15:9(x,t,b,c,d){6 c*8.n(t/d*(8.g/2))+b},12:9(x,t,b,c,d){6-c/2*(8.C(8.g*t/d)-1)+b},Z:9(x,t,b,c,d){6(t==0)?b:c*8.j(2,10*(t/d-1))+b},Y:9(x,t,b,c,d){6(t==d)?b+c:c*(-8.j(2,-10*t/d)+1)+b},W:9(x,t,b,c,d){e(t==0)6 b;e(t==d)6 b+c;e((t/=d/2)<1)6 c/2*8.j(2,10*(t-1))+b;6 c/2*(-8.j(2,-10*--t)+2)+b},V:9(x,t,b,c,d){6-c*(8.o(1-(t/=d)*t)-1)+b},S:9(x,t,b,c,d){6 c*8.o(1-(t=t/d-1)*t)+b},Q:9(x,t,b,c,d){e((t/=d/2)<1)6-c/2*(8.o(1-t*t)-1)+b;6 c/2*(8.o(1-(t-=2)*t)+1)+b},P:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6-(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b},H:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6 a*8.j(2,-10*t)*8.n((t*d-s)*(2*8.g)/p)+c+b},T:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d/2)==2)6 b+c;e(!p)p=d*(.3*1.5);e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);e(t<1)6-.5*(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b;6 a*8.j(2,-10*(t-=1))*8.n((t*d-s)*(2*8.g)/p)*.5+c+b},F:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*(t/=d)*t*((s+1)*t-s)+b},E:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},16:9(x,t,b,c,d,s){e(s==u)s=1.l;e((t/=d/2)<1)6 c/2*(t*t*(((s*=(1.B))+1)*t-s))+b;6 c/2*((t-=2)*t*(((s*=(1.B))+1)*t+s)+2)+b},A:9(x,t,b,c,d){6 c-h.i.v(x,d-t,0,c,d)+b},v:9(x,t,b,c,d){e((t/=d)<(1/2.k)){6 c*(7.q*t*t)+b}m e(t<(2/2.k)){6 c*(7.q*(t-=(1.5/2.k))*t+.k)+b}m e(t<(2.5/2.k)){6 c*(7.q*(t-=(2.14/2.k))*t+.11)+b}m{6 c*(7.q*(t-=(2.18/2.k))*t+.19)+b}},1b:9(x,t,b,c,d){e(t')[0], { prop: 0 }), + + isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest, + + /* + * Private methods + */ + + _abort = function() { + loading.hide(); + + imgPreloader.onerror = imgPreloader.onload = null; + + if (ajaxLoader) { + ajaxLoader.abort(); + } + + tmp.empty(); + }, + + _error = function() { + if (false === selectedOpts.onError(selectedArray, selectedIndex, selectedOpts)) { + loading.hide(); + busy = false; + return; + } + + selectedOpts.titleShow = false; + + selectedOpts.width = 'auto'; + selectedOpts.height = 'auto'; + + tmp.html( '

    The requested content cannot be loaded.
    Please try again later.

    ' ); + + _process_inline(); + }, + + _start = function() { + var obj = selectedArray[ selectedIndex ], + href, + type, + title, + str, + emb, + ret; + + _abort(); + + selectedOpts = $.extend({}, $.fn.fancybox.defaults, (typeof $(obj).data('fancybox') == 'undefined' ? selectedOpts : $(obj).data('fancybox'))); + + ret = selectedOpts.onStart(selectedArray, selectedIndex, selectedOpts); + + if (ret === false) { + busy = false; + return; + } else if (typeof ret == 'object') { + selectedOpts = $.extend(selectedOpts, ret); + } + + title = selectedOpts.title || (obj.nodeName ? $(obj).attr('title') : obj.title) || ''; + + if (obj.nodeName && !selectedOpts.orig) { + selectedOpts.orig = $(obj).children("img:first").length ? $(obj).children("img:first") : $(obj); + } + + if (title === '' && selectedOpts.orig && selectedOpts.titleFromAlt) { + title = selectedOpts.orig.attr('alt'); + } + + href = selectedOpts.href || (obj.nodeName ? $(obj).attr('href') : obj.href) || null; + + if ((/^(?:javascript)/i).test(href) || href == '#') { + href = null; + } + + if (selectedOpts.type) { + type = selectedOpts.type; + + if (!href) { + href = selectedOpts.content; + } + + } else if (selectedOpts.content) { + type = 'html'; + + } else if (href) { + if (href.match(imgRegExp)) { + type = 'image'; + + } else if (href.match(swfRegExp)) { + type = 'swf'; + + } else if ($(obj).hasClass("iframe")) { + type = 'iframe'; + + } else if (href.indexOf("#") === 0) { + type = 'inline'; + + } else { + type = 'ajax'; + } + } + + if (!type) { + _error(); + return; + } + + if (type == 'inline') { + obj = href.substr(href.indexOf("#")); + type = $(obj).length > 0 ? 'inline' : 'ajax'; + } + + selectedOpts.type = type; + selectedOpts.href = href; + selectedOpts.title = title; + + if (selectedOpts.autoDimensions) { + if (selectedOpts.type == 'html' || selectedOpts.type == 'inline' || selectedOpts.type == 'ajax') { + selectedOpts.width = 'auto'; + selectedOpts.height = 'auto'; + } else { + selectedOpts.autoDimensions = false; + } + } + + if (selectedOpts.modal) { + selectedOpts.overlayShow = true; + selectedOpts.hideOnOverlayClick = false; + selectedOpts.hideOnContentClick = false; + selectedOpts.enableEscapeButton = false; + selectedOpts.showCloseButton = false; + } + + selectedOpts.padding = parseInt(selectedOpts.padding, 10); + selectedOpts.margin = parseInt(selectedOpts.margin, 10); + + tmp.css('padding', (selectedOpts.padding + selectedOpts.margin)); + + $('.fancybox-inline-tmp').unbind('fancybox-cancel').bind('fancybox-change', function() { + $(this).replaceWith(content.children()); + }); + + switch (type) { + case 'html' : + tmp.html( selectedOpts.content ); + _process_inline(); + break; + + case 'inline' : + if ( $(obj).parent().is('#fancybox-content') === true) { + busy = false; + return; + } + + $('
    ') + .hide() + .insertBefore( $(obj) ) + .bind('fancybox-cleanup', function() { + $(this).replaceWith(content.children()); + }).bind('fancybox-cancel', function() { + $(this).replaceWith(tmp.children()); + }); + + $(obj).appendTo(tmp); + + _process_inline(); + break; + + case 'image': + busy = false; + + $.fancybox.showActivity(); + + imgPreloader = new Image(); + + imgPreloader.onerror = function() { + _error(); + }; + + imgPreloader.onload = function() { + busy = true; + + imgPreloader.onerror = imgPreloader.onload = null; + + _process_image(); + }; + + imgPreloader.src = href; + break; + + case 'swf': + selectedOpts.scrolling = 'no'; + + str = ''; + emb = ''; + + $.each(selectedOpts.swf, function(name, val) { + str += ''; + emb += ' ' + name + '="' + val + '"'; + }); + + str += ''; + + tmp.html(str); + + _process_inline(); + break; + + case 'ajax': + busy = false; + + $.fancybox.showActivity(); + + selectedOpts.ajax.win = selectedOpts.ajax.success; + + ajaxLoader = $.ajax($.extend({}, selectedOpts.ajax, { + url : href, + data : selectedOpts.ajax.data || {}, + error : function(XMLHttpRequest, textStatus, errorThrown) { + if ( XMLHttpRequest.status > 0 ) { + _error(); + } + }, + success : function(data, textStatus, XMLHttpRequest) { + var o = typeof XMLHttpRequest == 'object' ? XMLHttpRequest : ajaxLoader; + if (o.status == 200) { + if ( typeof selectedOpts.ajax.win == 'function' ) { + ret = selectedOpts.ajax.win(href, data, textStatus, XMLHttpRequest); + + if (ret === false) { + loading.hide(); + return; + } else if (typeof ret == 'string' || typeof ret == 'object') { + data = ret; + } + } + + tmp.html( data ); + _process_inline(); + } + } + })); + + break; + + case 'iframe': + _show(); + break; + } + }, + + _process_inline = function() { + var + w = selectedOpts.width, + h = selectedOpts.height; + + if (w.toString().indexOf('%') > -1) { + w = parseInt( ($(window).width() - (selectedOpts.margin * 2)) * parseFloat(w) / 100, 10) + 'px'; + + } else { + w = w == 'auto' ? 'auto' : w + 'px'; + } + + if (h.toString().indexOf('%') > -1) { + h = parseInt( ($(window).height() - (selectedOpts.margin * 2)) * parseFloat(h) / 100, 10) + 'px'; + + } else { + h = h == 'auto' ? 'auto' : h + 'px'; + } + + tmp.wrapInner('
    '); + + selectedOpts.width = tmp.width(); + selectedOpts.height = tmp.height(); + + _show(); + }, + + _process_image = function() { + selectedOpts.width = imgPreloader.width; + selectedOpts.height = imgPreloader.height; + + $("").attr({ + 'id' : 'fancybox-img', + 'src' : imgPreloader.src, + 'alt' : selectedOpts.title + }).appendTo( tmp ); + + _show(); + }, + + _show = function() { + var pos, equal; + + loading.hide(); + + if (wrap.is(":visible") && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { + $.event.trigger('fancybox-cancel'); + + busy = false; + return; + } + + busy = true; + + $(content.add( overlay )).unbind(); + + $(window).unbind("resize.fb scroll.fb"); + $(document).unbind('keydown.fb'); + + if (wrap.is(":visible") && currentOpts.titlePosition !== 'outside') { + wrap.css('height', wrap.height()); + } + + currentArray = selectedArray; + currentIndex = selectedIndex; + currentOpts = selectedOpts; + + if (currentOpts.overlayShow) { + overlay.css({ + 'background-color' : currentOpts.overlayColor, + 'opacity' : currentOpts.overlayOpacity, + 'cursor' : currentOpts.hideOnOverlayClick ? 'pointer' : 'auto', + 'height' : $(document).height() + }); + + if (!overlay.is(':visible')) { + if (isIE6) { + $('select:not(#fancybox-tmp select)').filter(function() { + return this.style.visibility !== 'hidden'; + }).css({'visibility' : 'hidden'}).one('fancybox-cleanup', function() { + this.style.visibility = 'inherit'; + }); + } + + overlay.show(); + } + } else { + overlay.hide(); + } + + final_pos = _get_zoom_to(); + + _process_title(); + + if (wrap.is(":visible")) { + $( close.add( nav_left ).add( nav_right ) ).hide(); + + pos = wrap.position(), + + start_pos = { + top : pos.top, + left : pos.left, + width : wrap.width(), + height : wrap.height() + }; + + equal = (start_pos.width == final_pos.width && start_pos.height == final_pos.height); + + content.fadeTo(currentOpts.changeFade, 0.3, function() { + var finish_resizing = function() { + content.html( tmp.contents() ).fadeTo(currentOpts.changeFade, 1, _finish); + }; + + $.event.trigger('fancybox-change'); + + content + .empty() + .removeAttr('filter') + .css({ + 'border-width' : currentOpts.padding, + 'width' : final_pos.width - currentOpts.padding * 2, + 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2 + }); + + if (equal) { + finish_resizing(); + + } else { + fx.prop = 0; + + $(fx).animate({prop: 1}, { + duration : currentOpts.changeSpeed, + easing : currentOpts.easingChange, + step : _draw, + complete : finish_resizing + }); + } + }); + + return; + } + + wrap.removeAttr("style"); + + content.css('border-width', currentOpts.padding); + + if (currentOpts.transitionIn == 'elastic') { + start_pos = _get_zoom_from(); + + content.html( tmp.contents() ); + + wrap.show(); + + if (currentOpts.opacity) { + final_pos.opacity = 0; + } + + fx.prop = 0; + + $(fx).animate({prop: 1}, { + duration : currentOpts.speedIn, + easing : currentOpts.easingIn, + step : _draw, + complete : _finish + }); + + return; + } + + if (currentOpts.titlePosition == 'inside' && titleHeight > 0) { + title.show(); + } + + content + .css({ + 'width' : final_pos.width - currentOpts.padding * 2, + 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2 + }) + .html( tmp.contents() ); + + wrap + .css(final_pos) + .fadeIn( currentOpts.transitionIn == 'none' ? 0 : currentOpts.speedIn, _finish ); + }, + + _format_title = function(title) { + if (title && title.length) { + if (currentOpts.titlePosition == 'float') { + return '
    ' + title + '
    '; + } + + return '
    ' + title + '
    '; + } + + return false; + }, + + _process_title = function() { + titleStr = currentOpts.title || ''; + titleHeight = 0; + + title + .empty() + .removeAttr('style') + .removeClass(); + + if (currentOpts.titleShow === false) { + title.hide(); + return; + } + + titleStr = $.isFunction(currentOpts.titleFormat) ? currentOpts.titleFormat(titleStr, currentArray, currentIndex, currentOpts) : _format_title(titleStr); + + if (!titleStr || titleStr === '') { + title.hide(); + return; + } + + title + .addClass('fancybox-title-' + currentOpts.titlePosition) + .html( titleStr ) + .appendTo( 'body' ) + .show(); + + switch (currentOpts.titlePosition) { + case 'inside': + title + .css({ + 'width' : final_pos.width - (currentOpts.padding * 2), + 'marginLeft' : currentOpts.padding, + 'marginRight' : currentOpts.padding + }); + + titleHeight = title.outerHeight(true); + + title.appendTo( outer ); + + final_pos.height += titleHeight; + break; + + case 'over': + title + .css({ + 'marginLeft' : currentOpts.padding, + 'width' : final_pos.width - (currentOpts.padding * 2), + 'bottom' : currentOpts.padding + }) + .appendTo( outer ); + break; + + case 'float': + title + .css('left', parseInt((title.width() - final_pos.width - 40)/ 2, 10) * -1) + .appendTo( wrap ); + break; + + default: + title + .css({ + 'width' : final_pos.width - (currentOpts.padding * 2), + 'paddingLeft' : currentOpts.padding, + 'paddingRight' : currentOpts.padding + }) + .appendTo( wrap ); + break; + } + + title.hide(); + }, + + _set_navigation = function() { + if (currentOpts.enableEscapeButton || currentOpts.enableKeyboardNav) { + $(document).bind('keydown.fb', function(e) { + if (e.keyCode == 27 && currentOpts.enableEscapeButton) { + e.preventDefault(); + $.fancybox.close(); + + } else if ((e.keyCode == 37 || e.keyCode == 39) && currentOpts.enableKeyboardNav && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') { + e.preventDefault(); + $.fancybox[ e.keyCode == 37 ? 'prev' : 'next'](); + } + }); + } + + if (!currentOpts.showNavArrows) { + nav_left.hide(); + nav_right.hide(); + return; + } + + if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex !== 0) { + nav_left.show(); + } + + if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex != (currentArray.length -1)) { + nav_right.show(); + } + }, + + _finish = function () { + if (!$.support.opacity) { + content.get(0).style.removeAttribute('filter'); + wrap.get(0).style.removeAttribute('filter'); + } + + if (selectedOpts.autoDimensions) { + content.css('height', 'auto'); + } + + wrap.css('height', 'auto'); + + if (titleStr && titleStr.length) { + title.show(); + } + + if (currentOpts.showCloseButton) { + close.show(); + } + + _set_navigation(); + + if (currentOpts.hideOnContentClick) { + content.bind('click', $.fancybox.close); + } + + if (currentOpts.hideOnOverlayClick) { + overlay.bind('click', $.fancybox.close); + } + + $(window).bind("resize.fb", $.fancybox.resize); + + if (currentOpts.centerOnScroll) { + $(window).bind("scroll.fb", $.fancybox.center); + } + + if (currentOpts.type == 'iframe') { + $('').appendTo(content); + } + + wrap.show(); + + busy = false; + + $.fancybox.center(); + + currentOpts.onComplete(currentArray, currentIndex, currentOpts); + + _preload_images(); + }, + + _preload_images = function() { + var href, + objNext; + + if ((currentArray.length -1) > currentIndex) { + href = currentArray[ currentIndex + 1 ].href; + + if (typeof href !== 'undefined' && href.match(imgRegExp)) { + objNext = new Image(); + objNext.src = href; + } + } + + if (currentIndex > 0) { + href = currentArray[ currentIndex - 1 ].href; + + if (typeof href !== 'undefined' && href.match(imgRegExp)) { + objNext = new Image(); + objNext.src = href; + } + } + }, + + _draw = function(pos) { + var dim = { + width : parseInt(start_pos.width + (final_pos.width - start_pos.width) * pos, 10), + height : parseInt(start_pos.height + (final_pos.height - start_pos.height) * pos, 10), + + top : parseInt(start_pos.top + (final_pos.top - start_pos.top) * pos, 10), + left : parseInt(start_pos.left + (final_pos.left - start_pos.left) * pos, 10) + }; + + if (typeof final_pos.opacity !== 'undefined') { + dim.opacity = pos < 0.5 ? 0.5 : pos; + } + + wrap.css(dim); + + content.css({ + 'width' : dim.width - currentOpts.padding * 2, + 'height' : dim.height - (titleHeight * pos) - currentOpts.padding * 2 + }); + }, + + _get_viewport = function() { + return [ + $(window).width() - (currentOpts.margin * 2), + $(window).height() - (currentOpts.margin * 2), + $(document).scrollLeft() + currentOpts.margin, + $(document).scrollTop() + currentOpts.margin + ]; + }, + + _get_zoom_to = function () { + var view = _get_viewport(), + to = {}, + resize = currentOpts.autoScale, + double_padding = currentOpts.padding * 2, + ratio; + + if (currentOpts.width.toString().indexOf('%') > -1) { + to.width = parseInt((view[0] * parseFloat(currentOpts.width)) / 100, 10); + } else { + to.width = currentOpts.width + double_padding; + } + + if (currentOpts.height.toString().indexOf('%') > -1) { + to.height = parseInt((view[1] * parseFloat(currentOpts.height)) / 100, 10); + } else { + to.height = currentOpts.height + double_padding; + } + + if (resize && (to.width > view[0] || to.height > view[1])) { + if (selectedOpts.type == 'image' || selectedOpts.type == 'swf') { + ratio = (currentOpts.width ) / (currentOpts.height ); + + if ((to.width ) > view[0]) { + to.width = view[0]; + to.height = parseInt(((to.width - double_padding) / ratio) + double_padding, 10); + } + + if ((to.height) > view[1]) { + to.height = view[1]; + to.width = parseInt(((to.height - double_padding) * ratio) + double_padding, 10); + } + + } else { + to.width = Math.min(to.width, view[0]); + to.height = Math.min(to.height, view[1]); + } + } + + to.top = parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - to.height - 40) * 0.5)), 10); + to.left = parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - to.width - 40) * 0.5)), 10); + + return to; + }, + + _get_obj_pos = function(obj) { + var pos = obj.offset(); + + pos.top += parseInt( obj.css('paddingTop'), 10 ) || 0; + pos.left += parseInt( obj.css('paddingLeft'), 10 ) || 0; + + pos.top += parseInt( obj.css('border-top-width'), 10 ) || 0; + pos.left += parseInt( obj.css('border-left-width'), 10 ) || 0; + + pos.width = obj.width(); + pos.height = obj.height(); + + return pos; + }, + + _get_zoom_from = function() { + var orig = selectedOpts.orig ? $(selectedOpts.orig) : false, + from = {}, + pos, + view; + + if (orig && orig.length) { + pos = _get_obj_pos(orig); + + from = { + width : pos.width + (currentOpts.padding * 2), + height : pos.height + (currentOpts.padding * 2), + top : pos.top - currentOpts.padding - 20, + left : pos.left - currentOpts.padding - 20 + }; + + } else { + view = _get_viewport(); + + from = { + width : currentOpts.padding * 2, + height : currentOpts.padding * 2, + top : parseInt(view[3] + view[1] * 0.5, 10), + left : parseInt(view[2] + view[0] * 0.5, 10) + }; + } + + return from; + }, + + _animate_loading = function() { + if (!loading.is(':visible')){ + clearInterval(loadingTimer); + return; + } + + $('div', loading).css('top', (loadingFrame * -40) + 'px'); + + loadingFrame = (loadingFrame + 1) % 12; + }; + + /* + * Public methods + */ + + $.fn.fancybox = function(options) { + if (!$(this).length) { + return this; + } + + $(this) + .data('fancybox', $.extend({}, options, ($.metadata ? $(this).metadata() : {}))) + .unbind('click.fb') + .bind('click.fb', function(e) { + e.preventDefault(); + + if (busy) { + return; + } + + busy = true; + + $(this).blur(); + + selectedArray = []; + selectedIndex = 0; + + var rel = $(this).attr('rel') || ''; + + if (!rel || rel == '' || rel === 'nofollow') { + selectedArray.push(this); + + } else { + selectedArray = $("a[rel=" + rel + "], area[rel=" + rel + "]"); + selectedIndex = selectedArray.index( this ); + } + + _start(); + + return; + }); + + return this; + }; + + $.fancybox = function(obj) { + var opts; + + if (busy) { + return; + } + + busy = true; + opts = typeof arguments[1] !== 'undefined' ? arguments[1] : {}; + + selectedArray = []; + selectedIndex = parseInt(opts.index, 10) || 0; + + if ($.isArray(obj)) { + for (var i = 0, j = obj.length; i < j; i++) { + if (typeof obj[i] == 'object') { + $(obj[i]).data('fancybox', $.extend({}, opts, obj[i])); + } else { + obj[i] = $({}).data('fancybox', $.extend({content : obj[i]}, opts)); + } + } + + selectedArray = jQuery.merge(selectedArray, obj); + + } else { + if (typeof obj == 'object') { + $(obj).data('fancybox', $.extend({}, opts, obj)); + } else { + obj = $({}).data('fancybox', $.extend({content : obj}, opts)); + } + + selectedArray.push(obj); + } + + if (selectedIndex > selectedArray.length || selectedIndex < 0) { + selectedIndex = 0; + } + + _start(); + }; + + $.fancybox.showActivity = function() { + clearInterval(loadingTimer); + + loading.show(); + loadingTimer = setInterval(_animate_loading, 66); + }; + + $.fancybox.hideActivity = function() { + loading.hide(); + }; + + $.fancybox.next = function() { + return $.fancybox.pos( currentIndex + 1); + }; + + $.fancybox.prev = function() { + return $.fancybox.pos( currentIndex - 1); + }; + + $.fancybox.pos = function(pos) { + if (busy) { + return; + } + + pos = parseInt(pos); + + selectedArray = currentArray; + + if (pos > -1 && pos < currentArray.length) { + selectedIndex = pos; + _start(); + + } else if (currentOpts.cyclic && currentArray.length > 1) { + selectedIndex = pos >= currentArray.length ? 0 : currentArray.length - 1; + _start(); + } + + return; + }; + + $.fancybox.cancel = function() { + if (busy) { + return; + } + + busy = true; + + $.event.trigger('fancybox-cancel'); + + _abort(); + + selectedOpts.onCancel(selectedArray, selectedIndex, selectedOpts); + + busy = false; + }; + + // Note: within an iframe use - parent.$.fancybox.close(); + $.fancybox.close = function() { + if (busy || wrap.is(':hidden')) { + return; + } + + busy = true; + + if (currentOpts && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { + busy = false; + return; + } + + _abort(); + + $(close.add( nav_left ).add( nav_right )).hide(); + + $(content.add( overlay )).unbind(); + + $(window).unbind("resize.fb scroll.fb"); + $(document).unbind('keydown.fb'); + + content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank'); + + if (currentOpts.titlePosition !== 'inside') { + title.empty(); + } + + wrap.stop(); + + function _cleanup() { + overlay.fadeOut('fast'); + + title.empty().hide(); + wrap.hide(); + + $.event.trigger('fancybox-cleanup'); + + content.empty(); + + currentOpts.onClosed(currentArray, currentIndex, currentOpts); + + currentArray = selectedOpts = []; + currentIndex = selectedIndex = 0; + currentOpts = selectedOpts = {}; + + busy = false; + } + + if (currentOpts.transitionOut == 'elastic') { + start_pos = _get_zoom_from(); + + var pos = wrap.position(); + + final_pos = { + top : pos.top , + left : pos.left, + width : wrap.width(), + height : wrap.height() + }; + + if (currentOpts.opacity) { + final_pos.opacity = 1; + } + + title.empty().hide(); + + fx.prop = 1; + + $(fx).animate({ prop: 0 }, { + duration : currentOpts.speedOut, + easing : currentOpts.easingOut, + step : _draw, + complete : _cleanup + }); + + } else { + wrap.fadeOut( currentOpts.transitionOut == 'none' ? 0 : currentOpts.speedOut, _cleanup); + } + }; + + $.fancybox.resize = function() { + if (overlay.is(':visible')) { + overlay.css('height', $(document).height()); + } + + $.fancybox.center(true); + }; + + $.fancybox.center = function() { + var view, align; + + if (busy) { + return; + } + + align = arguments[0] === true ? 1 : 0; + view = _get_viewport(); + + if (!align && (wrap.width() > view[0] || wrap.height() > view[1])) { + return; + } + + wrap + .stop() + .animate({ + 'top' : parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - content.height() - 40) * 0.5) - currentOpts.padding)), + 'left' : parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - content.width() - 40) * 0.5) - currentOpts.padding)) + }, typeof arguments[0] == 'number' ? arguments[0] : 200); + }; + + $.fancybox.init = function() { + if ($("#fancybox-wrap").length) { + return; + } + + $('body').append( + tmp = $('
    '), + loading = $('
    '), + overlay = $('
    '), + wrap = $('
    ') + ); + + outer = $('
    ') + .append('
    ') + .appendTo( wrap ); + + outer.append( + content = $('
    '), + close = $(''), + title = $('
    '), + + nav_left = $(''), + nav_right = $('') + ); + + close.click($.fancybox.close); + loading.click($.fancybox.cancel); + + nav_left.click(function(e) { + e.preventDefault(); + $.fancybox.prev(); + }); + + nav_right.click(function(e) { + e.preventDefault(); + $.fancybox.next(); + }); + + if ($.fn.mousewheel) { + wrap.bind('mousewheel.fb', function(e, delta) { + if (busy) { + e.preventDefault(); + + } else if ($(e.target).get(0).clientHeight == 0 || $(e.target).get(0).scrollHeight === $(e.target).get(0).clientHeight) { + e.preventDefault(); + $.fancybox[ delta > 0 ? 'prev' : 'next'](); + } + }); + } + + if (!$.support.opacity) { + wrap.addClass('fancybox-ie'); + } + + if (isIE6) { + loading.addClass('fancybox-ie6'); + wrap.addClass('fancybox-ie6'); + + $('').prependTo(outer); + } + }; + + $.fn.fancybox.defaults = { + padding : 10, + margin : 40, + opacity : false, + modal : false, + cyclic : false, + scrolling : 'auto', // 'auto', 'yes' or 'no' + + width : 560, + height : 340, + + autoScale : true, + autoDimensions : true, + centerOnScroll : false, + + ajax : {}, + swf : { wmode: 'transparent' }, + + hideOnOverlayClick : true, + hideOnContentClick : false, + + overlayShow : true, + overlayOpacity : 0.7, + overlayColor : '#777', + + titleShow : true, + titlePosition : 'float', // 'float', 'outside', 'inside' or 'over' + titleFormat : null, + titleFromAlt : false, + + transitionIn : 'fade', // 'elastic', 'fade' or 'none' + transitionOut : 'fade', // 'elastic', 'fade' or 'none' + + speedIn : 300, + speedOut : 300, + + changeSpeed : 300, + changeFade : 'fast', + + easingIn : 'swing', + easingOut : 'swing', + + showCloseButton : true, + showNavArrows : true, + enableEscapeButton : true, + enableKeyboardNav : true, + + onStart : function(){}, + onCancel : function(){}, + onComplete : function(){}, + onCleanup : function(){}, + onClosed : function(){}, + onError : function(){} + }; + + $(document).ready(function() { + $.fancybox.init(); + }); + +})(jQuery); \ No newline at end of file diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/jquery.fancybox-1.3.4.pack.js b/site_media/packages/jquery.fancybox-1.3.4/fancybox/jquery.fancybox-1.3.4.pack.js new file mode 100644 index 0000000000..1373ed0838 --- /dev/null +++ b/site_media/packages/jquery.fancybox-1.3.4/fancybox/jquery.fancybox-1.3.4.pack.js @@ -0,0 +1,46 @@ +/* + * FancyBox - jQuery Plugin + * Simple and fancy lightbox alternative + * + * Examples and documentation at: http://fancybox.net + * + * Copyright (c) 2008 - 2010 Janis Skarnelis + * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. + * + * Version: 1.3.4 (11/11/2010) + * Requires: jQuery v1.3+ + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ + +;(function(b){var m,t,u,f,D,j,E,n,z,A,q=0,e={},o=[],p=0,d={},l=[],G=null,v=new Image,J=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,W=/[^\.]\.(swf)\s*$/i,K,L=1,y=0,s="",r,i,h=false,B=b.extend(b("
    ")[0],{prop:0}),M=b.browser.msie&&b.browser.version<7&&!window.XMLHttpRequest,N=function(){t.hide();v.onerror=v.onload=null;G&&G.abort();m.empty()},O=function(){if(false===e.onError(o,q,e)){t.hide();h=false}else{e.titleShow=false;e.width="auto";e.height="auto";m.html('

    The requested content cannot be loaded.
    Please try again later.

    '); +F()}},I=function(){var a=o[q],c,g,k,C,P,w;N();e=b.extend({},b.fn.fancybox.defaults,typeof b(a).data("fancybox")=="undefined"?e:b(a).data("fancybox"));w=e.onStart(o,q,e);if(w===false)h=false;else{if(typeof w=="object")e=b.extend(e,w);k=e.title||(a.nodeName?b(a).attr("title"):a.title)||"";if(a.nodeName&&!e.orig)e.orig=b(a).children("img:first").length?b(a).children("img:first"):b(a);if(k===""&&e.orig&&e.titleFromAlt)k=e.orig.attr("alt");c=e.href||(a.nodeName?b(a).attr("href"):a.href)||null;if(/^(?:javascript)/i.test(c)|| +c=="#")c=null;if(e.type){g=e.type;if(!c)c=e.content}else if(e.content)g="html";else if(c)g=c.match(J)?"image":c.match(W)?"swf":b(a).hasClass("iframe")?"iframe":c.indexOf("#")===0?"inline":"ajax";if(g){if(g=="inline"){a=c.substr(c.indexOf("#"));g=b(a).length>0?"inline":"ajax"}e.type=g;e.href=c;e.title=k;if(e.autoDimensions)if(e.type=="html"||e.type=="inline"||e.type=="ajax"){e.width="auto";e.height="auto"}else e.autoDimensions=false;if(e.modal){e.overlayShow=true;e.hideOnOverlayClick=false;e.hideOnContentClick= +false;e.enableEscapeButton=false;e.showCloseButton=false}e.padding=parseInt(e.padding,10);e.margin=parseInt(e.margin,10);m.css("padding",e.padding+e.margin);b(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){b(this).replaceWith(j.children())});switch(g){case "html":m.html(e.content);F();break;case "inline":if(b(a).parent().is("#fancybox-content")===true){h=false;break}b('
    ').hide().insertBefore(b(a)).bind("fancybox-cleanup",function(){b(this).replaceWith(j.children())}).bind("fancybox-cancel", +function(){b(this).replaceWith(m.children())});b(a).appendTo(m);F();break;case "image":h=false;b.fancybox.showActivity();v=new Image;v.onerror=function(){O()};v.onload=function(){h=true;v.onerror=v.onload=null;e.width=v.width;e.height=v.height;b("").attr({id:"fancybox-img",src:v.src,alt:e.title}).appendTo(m);Q()};v.src=c;break;case "swf":e.scrolling="no";C='';P="";b.each(e.swf,function(x,H){C+='';P+=" "+x+'="'+H+'"'});C+='";m.html(C);F();break;case "ajax":h=false;b.fancybox.showActivity();e.ajax.win=e.ajax.success;G=b.ajax(b.extend({},e.ajax,{url:c,data:e.ajax.data||{},error:function(x){x.status>0&&O()},success:function(x,H,R){if((typeof R=="object"?R:G).status==200){if(typeof e.ajax.win== +"function"){w=e.ajax.win(c,x,H,R);if(w===false){t.hide();return}else if(typeof w=="string"||typeof w=="object")x=w}m.html(x);F()}}}));break;case "iframe":Q()}}else O()}},F=function(){var a=e.width,c=e.height;a=a.toString().indexOf("%")>-1?parseInt((b(window).width()-e.margin*2)*parseFloat(a)/100,10)+"px":a=="auto"?"auto":a+"px";c=c.toString().indexOf("%")>-1?parseInt((b(window).height()-e.margin*2)*parseFloat(c)/100,10)+"px":c=="auto"?"auto":c+"px";m.wrapInner('
    ');e.width=m.width();e.height=m.height();Q()},Q=function(){var a,c;t.hide();if(f.is(":visible")&&false===d.onCleanup(l,p,d)){b.event.trigger("fancybox-cancel");h=false}else{h=true;b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");f.is(":visible")&&d.titlePosition!=="outside"&&f.css("height",f.height());l=o;p=q;d=e;if(d.overlayShow){u.css({"background-color":d.overlayColor, +opacity:d.overlayOpacity,cursor:d.hideOnOverlayClick?"pointer":"auto",height:b(document).height()});if(!u.is(":visible")){M&&b("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"});u.show()}}else u.hide();i=X();s=d.title||"";y=0;n.empty().removeAttr("style").removeClass();if(d.titleShow!==false){if(b.isFunction(d.titleFormat))a=d.titleFormat(s,l,p,d);else a=s&&s.length? +d.titlePosition=="float"?'
    '+s+'
    ':'
    '+s+"
    ":false;s=a;if(!(!s||s==="")){n.addClass("fancybox-title-"+d.titlePosition).html(s).appendTo("body").show();switch(d.titlePosition){case "inside":n.css({width:i.width-d.padding*2,marginLeft:d.padding,marginRight:d.padding}); +y=n.outerHeight(true);n.appendTo(D);i.height+=y;break;case "over":n.css({marginLeft:d.padding,width:i.width-d.padding*2,bottom:d.padding}).appendTo(D);break;case "float":n.css("left",parseInt((n.width()-i.width-40)/2,10)*-1).appendTo(f);break;default:n.css({width:i.width-d.padding*2,paddingLeft:d.padding,paddingRight:d.padding}).appendTo(f)}}}n.hide();if(f.is(":visible")){b(E.add(z).add(A)).hide();a=f.position();r={top:a.top,left:a.left,width:f.width(),height:f.height()};c=r.width==i.width&&r.height== +i.height;j.fadeTo(d.changeFade,0.3,function(){var g=function(){j.html(m.contents()).fadeTo(d.changeFade,1,S)};b.event.trigger("fancybox-change");j.empty().removeAttr("filter").css({"border-width":d.padding,width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2});if(c)g();else{B.prop=0;b(B).animate({prop:1},{duration:d.changeSpeed,easing:d.easingChange,step:T,complete:g})}})}else{f.removeAttr("style");j.css("border-width",d.padding);if(d.transitionIn=="elastic"){r=V();j.html(m.contents()); +f.show();if(d.opacity)i.opacity=0;B.prop=0;b(B).animate({prop:1},{duration:d.speedIn,easing:d.easingIn,step:T,complete:S})}else{d.titlePosition=="inside"&&y>0&&n.show();j.css({width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2}).html(m.contents());f.css(i).fadeIn(d.transitionIn=="none"?0:d.speedIn,S)}}}},Y=function(){if(d.enableEscapeButton||d.enableKeyboardNav)b(document).bind("keydown.fb",function(a){if(a.keyCode==27&&d.enableEscapeButton){a.preventDefault();b.fancybox.close()}else if((a.keyCode== +37||a.keyCode==39)&&d.enableKeyboardNav&&a.target.tagName!=="INPUT"&&a.target.tagName!=="TEXTAREA"&&a.target.tagName!=="SELECT"){a.preventDefault();b.fancybox[a.keyCode==37?"prev":"next"]()}});if(d.showNavArrows){if(d.cyclic&&l.length>1||p!==0)z.show();if(d.cyclic&&l.length>1||p!=l.length-1)A.show()}else{z.hide();A.hide()}},S=function(){if(!b.support.opacity){j.get(0).style.removeAttribute("filter");f.get(0).style.removeAttribute("filter")}e.autoDimensions&&j.css("height","auto");f.css("height","auto"); +s&&s.length&&n.show();d.showCloseButton&&E.show();Y();d.hideOnContentClick&&j.bind("click",b.fancybox.close);d.hideOnOverlayClick&&u.bind("click",b.fancybox.close);b(window).bind("resize.fb",b.fancybox.resize);d.centerOnScroll&&b(window).bind("scroll.fb",b.fancybox.center);if(d.type=="iframe")b('').appendTo(j); +f.show();h=false;b.fancybox.center();d.onComplete(l,p,d);var a,c;if(l.length-1>p){a=l[p+1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}if(p>0){a=l[p-1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}},T=function(a){var c={width:parseInt(r.width+(i.width-r.width)*a,10),height:parseInt(r.height+(i.height-r.height)*a,10),top:parseInt(r.top+(i.top-r.top)*a,10),left:parseInt(r.left+(i.left-r.left)*a,10)};if(typeof i.opacity!=="undefined")c.opacity=a<0.5?0.5:a;f.css(c); +j.css({width:c.width-d.padding*2,height:c.height-y*a-d.padding*2})},U=function(){return[b(window).width()-d.margin*2,b(window).height()-d.margin*2,b(document).scrollLeft()+d.margin,b(document).scrollTop()+d.margin]},X=function(){var a=U(),c={},g=d.autoScale,k=d.padding*2;c.width=d.width.toString().indexOf("%")>-1?parseInt(a[0]*parseFloat(d.width)/100,10):d.width+k;c.height=d.height.toString().indexOf("%")>-1?parseInt(a[1]*parseFloat(d.height)/100,10):d.height+k;if(g&&(c.width>a[0]||c.height>a[1]))if(e.type== +"image"||e.type=="swf"){g=d.width/d.height;if(c.width>a[0]){c.width=a[0];c.height=parseInt((c.width-k)/g+k,10)}if(c.height>a[1]){c.height=a[1];c.width=parseInt((c.height-k)*g+k,10)}}else{c.width=Math.min(c.width,a[0]);c.height=Math.min(c.height,a[1])}c.top=parseInt(Math.max(a[3]-20,a[3]+(a[1]-c.height-40)*0.5),10);c.left=parseInt(Math.max(a[2]-20,a[2]+(a[0]-c.width-40)*0.5),10);return c},V=function(){var a=e.orig?b(e.orig):false,c={};if(a&&a.length){c=a.offset();c.top+=parseInt(a.css("paddingTop"), +10)||0;c.left+=parseInt(a.css("paddingLeft"),10)||0;c.top+=parseInt(a.css("border-top-width"),10)||0;c.left+=parseInt(a.css("border-left-width"),10)||0;c.width=a.width();c.height=a.height();c={width:c.width+d.padding*2,height:c.height+d.padding*2,top:c.top-d.padding-20,left:c.left-d.padding-20}}else{a=U();c={width:d.padding*2,height:d.padding*2,top:parseInt(a[3]+a[1]*0.5,10),left:parseInt(a[2]+a[0]*0.5,10)}}return c},Z=function(){if(t.is(":visible")){b("div",t).css("top",L*-40+"px");L=(L+1)%12}else clearInterval(K)}; +b.fn.fancybox=function(a){if(!b(this).length)return this;b(this).data("fancybox",b.extend({},a,b.metadata?b(this).metadata():{})).unbind("click.fb").bind("click.fb",function(c){c.preventDefault();if(!h){h=true;b(this).blur();o=[];q=0;c=b(this).attr("rel")||"";if(!c||c==""||c==="nofollow")o.push(this);else{o=b("a[rel="+c+"], area[rel="+c+"]");q=o.index(this)}I()}});return this};b.fancybox=function(a,c){var g;if(!h){h=true;g=typeof c!=="undefined"?c:{};o=[];q=parseInt(g.index,10)||0;if(b.isArray(a)){for(var k= +0,C=a.length;ko.length||q<0)q=0;I()}};b.fancybox.showActivity=function(){clearInterval(K);t.show();K=setInterval(Z,66)};b.fancybox.hideActivity=function(){t.hide()};b.fancybox.next=function(){return b.fancybox.pos(p+ +1)};b.fancybox.prev=function(){return b.fancybox.pos(p-1)};b.fancybox.pos=function(a){if(!h){a=parseInt(a);o=l;if(a>-1&&a1){q=a>=l.length?0:l.length-1;I()}}};b.fancybox.cancel=function(){if(!h){h=true;b.event.trigger("fancybox-cancel");N();e.onCancel(o,q,e);h=false}};b.fancybox.close=function(){function a(){u.fadeOut("fast");n.empty().hide();f.hide();b.event.trigger("fancybox-cleanup");j.empty();d.onClosed(l,p,d);l=e=[];p=q=0;d=e={};h=false}if(!(h||f.is(":hidden"))){h= +true;if(d&&false===d.onCleanup(l,p,d))h=false;else{N();b(E.add(z).add(A)).hide();b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");j.find("iframe").attr("src",M&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank");d.titlePosition!=="inside"&&n.empty();f.stop();if(d.transitionOut=="elastic"){r=V();var c=f.position();i={top:c.top,left:c.left,width:f.width(),height:f.height()};if(d.opacity)i.opacity=1;n.empty().hide();B.prop=1; +b(B).animate({prop:0},{duration:d.speedOut,easing:d.easingOut,step:T,complete:a})}else f.fadeOut(d.transitionOut=="none"?0:d.speedOut,a)}}};b.fancybox.resize=function(){u.is(":visible")&&u.css("height",b(document).height());b.fancybox.center(true)};b.fancybox.center=function(a){var c,g;if(!h){g=a===true?1:0;c=U();!g&&(f.width()>c[0]||f.height()>c[1])||f.stop().animate({top:parseInt(Math.max(c[3]-20,c[3]+(c[1]-j.height()-40)*0.5-d.padding)),left:parseInt(Math.max(c[2]-20,c[2]+(c[0]-j.width()-40)*0.5- +d.padding))},typeof a=="number"?a:200)}};b.fancybox.init=function(){if(!b("#fancybox-wrap").length){b("body").append(m=b('
    '),t=b('
    '),u=b('
    '),f=b('
    '));D=b('
    ').append('
    ').appendTo(f); +D.append(j=b('
    '),E=b(''),n=b('
    '),z=b(''),A=b(''));E.click(b.fancybox.close);t.click(b.fancybox.cancel);z.click(function(a){a.preventDefault();b.fancybox.prev()});A.click(function(a){a.preventDefault();b.fancybox.next()}); +b.fn.mousewheel&&f.bind("mousewheel.fb",function(a,c){if(h)a.preventDefault();else if(b(a.target).get(0).clientHeight==0||b(a.target).get(0).scrollHeight===b(a.target).get(0).clientHeight){a.preventDefault();b.fancybox[c>0?"prev":"next"]()}});b.support.opacity||f.addClass("fancybox-ie");if(M){t.addClass("fancybox-ie6");f.addClass("fancybox-ie6");b('').prependTo(D)}}}; +b.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing", +easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};b(document).ready(function(){b.fancybox.init()})})(jQuery); \ No newline at end of file diff --git a/site_media/packages/jquery.fancybox-1.3.4/fancybox/jquery.mousewheel-3.0.4.pack.js b/site_media/packages/jquery.fancybox-1.3.4/fancybox/jquery.mousewheel-3.0.4.pack.js new file mode 100644 index 0000000000..cb66588e29 --- /dev/null +++ b/site_media/packages/jquery.fancybox-1.3.4/fancybox/jquery.mousewheel-3.0.4.pack.js @@ -0,0 +1,14 @@ +/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) +* Licensed under the MIT License (LICENSE.txt). +* +* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. +* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. +* Thanks to: Seamus Leahy for adding deltaX and deltaY +* +* Version: 3.0.4 +* +* Requires: 1.2.2+ +*/ + +(function(d){function g(a){var b=a||window.event,i=[].slice.call(arguments,1),c=0,h=0,e=0;a=d.event.fix(b);a.type="mousewheel";if(a.wheelDelta)c=a.wheelDelta/120;if(a.detail)c=-a.detail/3;e=c;if(b.axis!==undefined&&b.axis===b.HORIZONTAL_AXIS){e=0;h=-1*c}if(b.wheelDeltaY!==undefined)e=b.wheelDeltaY/120;if(b.wheelDeltaX!==undefined)h=-1*b.wheelDeltaX/120;i.unshift(a,c,h,e);return d.event.handle.apply(this,i)}var f=["DOMMouseScroll","mousewheel"];d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a= +f.length;a;)this.addEventListener(f[--a],g,false);else this.onmousewheel=g},teardown:function(){if(this.removeEventListener)for(var a=f.length;a;)this.removeEventListener(f[--a],g,false);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery); \ No newline at end of file diff --git a/site_media/packages/jquery.fancybox-1.3.4/index.html b/site_media/packages/jquery.fancybox-1.3.4/index.html new file mode 100644 index 0000000000..6b10a21e8b --- /dev/null +++ b/site_media/packages/jquery.fancybox-1.3.4/index.html @@ -0,0 +1,165 @@ + + + + + + FancyBox 1.3.4 | Demonstration + + + + + + + + + +
    +

    fancybox v1.3.4

    + +

    This is a demonstration. Home page

    + +
    + +

    + Different animations
    + + example1 + + example2 + + example3 + + example4 +

    + +

    + Different title positions
    + + example4 + + example5 + + example6 + + example7 +

    + +

    + Image gallery (ps, try using mouse scroll wheel)
    + + + + + + + + +

    + +

    + Various examples +

    + + + +
    +
    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis mi eu elit tempor facilisis id et neque. Nulla sit amet sem sapien. Vestibulum imperdiet porta ante ac ornare. Nulla et lorem eu nibh adipiscing ultricies nec at lacus. Cras laoreet ultricies sem, at blandit mi eleifend aliquam. Nunc enim ipsum, vehicula non pretium varius, cursus ac tortor. Vivamus fringilla congue laoreet. Quisque ultrices sodales orci, quis rhoncus justo auctor in. Phasellus dui eros, bibendum eu feugiat ornare, faucibus eu mi. Nunc aliquet tempus sem, id aliquam diam varius ac. Maecenas nisl nunc, molestie vitae eleifend vel, iaculis sed magna. Aenean tempus lacus vitae orci posuere porttitor eget non felis. Donec lectus elit, aliquam nec eleifend sit amet, vestibulum sed nunc. +
    +
    + +

    + Ajax example will not run from your local computer and requires a server to run. +

    +

    + Photo Credit: Katie Harris +

    +
    + + \ No newline at end of file diff --git a/site_media/packages/jquery.fancybox-1.3.4/jquery-1.4.3.min.js b/site_media/packages/jquery.fancybox-1.3.4/jquery-1.4.3.min.js new file mode 100644 index 0000000000..c941a5f7a9 --- /dev/null +++ b/site_media/packages/jquery.fancybox-1.3.4/jquery-1.4.3.min.js @@ -0,0 +1,166 @@ +/*! + * jQuery JavaScript Library v1.4.3 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu Oct 14 23:10:06 2010 -0400 + */ +(function(E,A){function U(){return false}function ba(){return true}function ja(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ga(a){var b,d,e=[],f=[],h,k,l,n,s,v,B,D;k=c.data(this,this.nodeType?"events":"__events__");if(typeof k==="function")k=k.events;if(!(a.liveFired===this||!k||!k.live||a.button&&a.type==="click")){if(a.namespace)D=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var H=k.live.slice(0);for(n=0;nd)break;a.currentTarget=f.elem;a.data=f.handleObj.data; +a.handleObj=f.handleObj;D=f.handleObj.origHandler.apply(f.elem,arguments);if(D===false||a.isPropagationStopped()){d=f.level;if(D===false)b=false}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(Ha,"`").replace(Ia,"&")}function ka(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Ja.test(b))return c.filter(b, +e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function la(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var k in e[h])c.event.add(this,h,e[h][k],e[h][k].data)}}})}function Ka(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)} +function ma(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?La:Ma,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function ca(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Na.test(a)?e(a,h):ca(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)? +e(a,""):c.each(b,function(f,h){ca(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(na.concat.apply([],na.slice(0,b)),function(){d[this]=a});return d}function oa(a){if(!da[a]){var b=c("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";da[a]=d}return da[a]}function ea(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var u=E.document,c=function(){function a(){if(!b.isReady){try{u.documentElement.doScroll("left")}catch(i){setTimeout(a, +1);return}b.ready()}}var b=function(i,r){return new b.fn.init(i,r)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,k=/\S/,l=/^\s+/,n=/\s+$/,s=/\W/,v=/\d/,B=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,D=/^[\],:{}\s]*$/,H=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,G=/(?:^|:|,)(?:\s*\[)+/g,M=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,j=/(msie) ([\w.]+)/,o=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false, +q=[],t,x=Object.prototype.toString,C=Object.prototype.hasOwnProperty,P=Array.prototype.push,N=Array.prototype.slice,R=String.prototype.trim,Q=Array.prototype.indexOf,L={};b.fn=b.prototype={init:function(i,r){var y,z,F;if(!i)return this;if(i.nodeType){this.context=this[0]=i;this.length=1;return this}if(i==="body"&&!r&&u.body){this.context=u;this[0]=u.body;this.selector="body";this.length=1;return this}if(typeof i==="string")if((y=h.exec(i))&&(y[1]||!r))if(y[1]){F=r?r.ownerDocument||r:u;if(z=B.exec(i))if(b.isPlainObject(r)){i= +[u.createElement(z[1])];b.fn.attr.call(i,r,true)}else i=[F.createElement(z[1])];else{z=b.buildFragment([y[1]],[F]);i=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,i)}else{if((z=u.getElementById(y[2]))&&z.parentNode){if(z.id!==y[2])return f.find(i);this.length=1;this[0]=z}this.context=u;this.selector=i;return this}else if(!r&&!s.test(i)){this.selector=i;this.context=u;i=u.getElementsByTagName(i);return b.merge(this,i)}else return!r||r.jquery?(r||f).find(i):b(r).find(i); +else if(b.isFunction(i))return f.ready(i);if(i.selector!==A){this.selector=i.selector;this.context=i.context}return b.makeArray(i,this)},selector:"",jquery:"1.4.3",length:0,size:function(){return this.length},toArray:function(){return N.call(this,0)},get:function(i){return i==null?this.toArray():i<0?this.slice(i)[0]:this[i]},pushStack:function(i,r,y){var z=b();b.isArray(i)?P.apply(z,i):b.merge(z,i);z.prevObject=this;z.context=this.context;if(r==="find")z.selector=this.selector+(this.selector?" ": +"")+y;else if(r)z.selector=this.selector+"."+r+"("+y+")";return z},each:function(i,r){return b.each(this,i,r)},ready:function(i){b.bindReady();if(b.isReady)i.call(u,b);else q&&q.push(i);return this},eq:function(i){return i===-1?this.slice(i):this.slice(i,+i+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(i){return this.pushStack(b.map(this,function(r,y){return i.call(r, +y,r)}))},end:function(){return this.prevObject||b(null)},push:P,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var i=arguments[0]||{},r=1,y=arguments.length,z=false,F,I,K,J,fa;if(typeof i==="boolean"){z=i;i=arguments[1]||{};r=2}if(typeof i!=="object"&&!b.isFunction(i))i={};if(y===r){i=this;--r}for(;r0)){if(q){for(var r=0;i=q[r++];)i.call(u,b);q=null}b.fn.triggerHandler&&b(u).triggerHandler("ready")}}},bindReady:function(){if(!p){p=true;if(u.readyState==="complete")return setTimeout(b.ready, +1);if(u.addEventListener){u.addEventListener("DOMContentLoaded",t,false);E.addEventListener("load",b.ready,false)}else if(u.attachEvent){u.attachEvent("onreadystatechange",t);E.attachEvent("onload",b.ready);var i=false;try{i=E.frameElement==null}catch(r){}u.documentElement.doScroll&&i&&a()}}},isFunction:function(i){return b.type(i)==="function"},isArray:Array.isArray||function(i){return b.type(i)==="array"},isWindow:function(i){return i&&typeof i==="object"&&"setInterval"in i},isNaN:function(i){return i== +null||!v.test(i)||isNaN(i)},type:function(i){return i==null?String(i):L[x.call(i)]||"object"},isPlainObject:function(i){if(!i||b.type(i)!=="object"||i.nodeType||b.isWindow(i))return false;if(i.constructor&&!C.call(i,"constructor")&&!C.call(i.constructor.prototype,"isPrototypeOf"))return false;for(var r in i);return r===A||C.call(i,r)},isEmptyObject:function(i){for(var r in i)return false;return true},error:function(i){throw i;},parseJSON:function(i){if(typeof i!=="string"||!i)return null;i=b.trim(i); +if(D.test(i.replace(H,"@").replace(w,"]").replace(G,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(i):(new Function("return "+i))();else b.error("Invalid JSON: "+i)},noop:function(){},globalEval:function(i){if(i&&k.test(i)){var r=u.getElementsByTagName("head")[0]||u.documentElement,y=u.createElement("script");y.type="text/javascript";if(b.support.scriptEval)y.appendChild(u.createTextNode(i));else y.text=i;r.insertBefore(y,r.firstChild);r.removeChild(y)}},nodeName:function(i,r){return i.nodeName&&i.nodeName.toUpperCase()=== +r.toUpperCase()},each:function(i,r,y){var z,F=0,I=i.length,K=I===A||b.isFunction(i);if(y)if(K)for(z in i){if(r.apply(i[z],y)===false)break}else for(;F";a=u.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var s=u.createElement("div"); +s.style.width=s.style.paddingLeft="1px";u.body.appendChild(s);c.boxModel=c.support.boxModel=s.offsetWidth===2;if("zoom"in s.style){s.style.display="inline";s.style.zoom=1;c.support.inlineBlockNeedsLayout=s.offsetWidth===2;s.style.display="";s.innerHTML="
    ";c.support.shrinkWrapBlocks=s.offsetWidth!==2}s.innerHTML="
    t
    ";var v=s.getElementsByTagName("td");c.support.reliableHiddenOffsets=v[0].offsetHeight=== +0;v[0].style.display="";v[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&v[0].offsetHeight===0;s.innerHTML="";u.body.removeChild(s).style.display="none"});a=function(s){var v=u.createElement("div");s="on"+s;var B=s in v;if(!B){v.setAttribute(s,"return;");B=typeof v[s]==="function"}return B};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength", +cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var pa={},Oa=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?pa:a;var e=a.nodeType,f=e?a[c.expando]:null,h=c.cache;if(!(e&&!f&&typeof b==="string"&&d===A)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]= +c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==A)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?pa:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);else if(d)delete f[e];else for(var k in a)delete a[k]}},acceptData:function(a){if(a.nodeName){var b= +c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){if(typeof a==="undefined")return this.length?c.data(this[0]):null;else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===A){var e=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(e===A&&this.length){e=c.data(this[0],a);if(e===A&&this[0].nodeType===1){e=this[0].getAttribute("data-"+a);if(typeof e=== +"string")try{e=e==="true"?true:e==="false"?false:e==="null"?null:!c.isNaN(e)?parseFloat(e):Oa.test(e)?c.parseJSON(e):e}catch(f){}else e=A}}return e===A&&d[1]?this.data(d[0]):e}else return this.each(function(){var h=c(this),k=[d[0],b];h.triggerHandler("setData"+d[1]+"!",k);c.data(this,a,b);h.triggerHandler("changeData"+d[1]+"!",k)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=c.data(a,b);if(!d)return e|| +[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===A)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this, +a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var qa=/[\n\t]/g,ga=/\s+/,Pa=/\r/g,Qa=/^(?:href|src|style)$/,Ra=/^(?:button|input)$/i,Sa=/^(?:button|input|object|select|textarea)$/i,Ta=/^a(?:rea)?$/i,ra=/^(?:radio|checkbox)$/i;c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this, +a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(s){var v=c(this);v.addClass(a.call(this,s,v.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ga),d=0,e=this.length;d-1)return true;return false}, +val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h=0;else if(c.nodeName(this,"select")){var B=c.makeArray(v);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),B)>=0});if(!B.length)this.selectedIndex=-1}else this.value=v}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return A;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==A;b=e&&c.props[b]||b;if(a.nodeType===1){var h=Qa.test(b);if((b in a||a[b]!==A)&&e&&!h){if(f){b==="type"&&Ra.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:Sa.test(a.nodeName)||Ta.test(a.nodeName)&&a.href?0:A;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return A;a=!c.support.hrefNormalized&&e&& +h?a.getAttribute(b,2):a.getAttribute(b);return a===null?A:a}}});var X=/\.(.*)$/,ha=/^(?:textarea|input|select)$/i,Ha=/\./g,Ia=/ /g,Ua=/[^\w\s.|`]/g,Va=function(a){return a.replace(Ua,"\\$&")},sa={focusin:0,focusout:0};c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var k=a.nodeType?"events":"__events__",l=h[k],n=h.handle;if(typeof l=== +"function"){n=l.handle;l=l.events}else if(!l){a.nodeType||(h[k]=h=function(){});h.events=l={}}if(!n)h.handle=n=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(n.elem,arguments):A};n.elem=a;b=b.split(" ");for(var s=0,v;k=b[s++];){h=f?c.extend({},f):{handler:d,data:e};if(k.indexOf(".")>-1){v=k.split(".");k=v.shift();h.namespace=v.slice(0).sort().join(".")}else{v=[];h.namespace=""}h.type=k;if(!h.guid)h.guid=d.guid;var B=l[k],D=c.event.special[k]||{};if(!B){B=l[k]=[]; +if(!D.setup||D.setup.call(a,e,v,n)===false)if(a.addEventListener)a.addEventListener(k,n,false);else a.attachEvent&&a.attachEvent("on"+k,n)}if(D.add){D.add.call(a,h);if(!h.handler.guid)h.handler.guid=d.guid}B.push(h);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,k=0,l,n,s,v,B,D,H=a.nodeType?"events":"__events__",w=c.data(a),G=w&&w[H];if(w&&G){if(typeof G==="function"){w=G;G=G.events}if(b&&b.type){d=b.handler;b=b.type}if(!b|| +typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in G)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[k++];){v=f;l=f.indexOf(".")<0;n=[];if(!l){n=f.split(".");f=n.shift();s=RegExp("(^|\\.)"+c.map(n.slice(0).sort(),Va).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(B=G[f])if(d){v=c.event.special[f]||{};for(h=e||0;h=0){a.type= +f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return A;a.result=A;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)=== +false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){e=a.target;var k,l=f.replace(X,""),n=c.nodeName(e,"a")&&l==="click",s=c.event.special[l]||{};if((!s._default||s._default.call(d,a)===false)&&!n&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[l]){if(k=e["on"+l])e["on"+l]=null;c.event.triggered=true;e[l]()}}catch(v){}if(k)e["on"+l]=k;c.event.triggered=false}}},handle:function(a){var b,d,e; +d=[];var f,h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var k=d.length;f-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ha.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=va(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===A||f===e))if(e!=null||f){a.type="change";a.liveFired= +A;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",va(a))}},setup:function(){if(this.type=== +"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ha.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ha.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}u.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){sa[b]++===0&&u.addEventListener(a,d,true)},teardown:function(){--sa[b]=== +0&&u.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=A}var k=b==="one"?c.proxy(f,function(n){c(this).unbind(n,k);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var l=this.length;h0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}}); +(function(){function a(g,j,o,m,p,q){p=0;for(var t=m.length;p0){C=x;break}}x=x[g]}m[p]=C}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,k=true;[0,0].sort(function(){k=false;return 0});var l=function(g,j,o,m){o=o||[];var p=j=j||u;if(j.nodeType!==1&&j.nodeType!==9)return[];if(!g||typeof g!=="string")return o;var q=[],t,x,C,P,N=true,R=l.isXML(j),Q=g,L;do{d.exec("");if(t=d.exec(Q)){Q=t[3];q.push(t[1]);if(t[2]){P=t[3]; +break}}}while(t);if(q.length>1&&s.exec(g))if(q.length===2&&n.relative[q[0]])x=M(q[0]+q[1],j);else for(x=n.relative[q[0]]?[j]:l(q.shift(),j);q.length;){g=q.shift();if(n.relative[g])g+=q.shift();x=M(g,x)}else{if(!m&&q.length>1&&j.nodeType===9&&!R&&n.match.ID.test(q[0])&&!n.match.ID.test(q[q.length-1])){t=l.find(q.shift(),j,R);j=t.expr?l.filter(t.expr,t.set)[0]:t.set[0]}if(j){t=m?{expr:q.pop(),set:D(m)}:l.find(q.pop(),q.length===1&&(q[0]==="~"||q[0]==="+")&&j.parentNode?j.parentNode:j,R);x=t.expr?l.filter(t.expr, +t.set):t.set;if(q.length>0)C=D(x);else N=false;for(;q.length;){t=L=q.pop();if(n.relative[L])t=q.pop();else L="";if(t==null)t=j;n.relative[L](C,t,R)}}else C=[]}C||(C=x);C||l.error(L||g);if(f.call(C)==="[object Array]")if(N)if(j&&j.nodeType===1)for(g=0;C[g]!=null;g++){if(C[g]&&(C[g]===true||C[g].nodeType===1&&l.contains(j,C[g])))o.push(x[g])}else for(g=0;C[g]!=null;g++)C[g]&&C[g].nodeType===1&&o.push(x[g]);else o.push.apply(o,C);else D(C,o);if(P){l(P,p,o,m);l.uniqueSort(o)}return o};l.uniqueSort=function(g){if(w){h= +k;g.sort(w);if(h)for(var j=1;j0};l.find=function(g,j,o){var m;if(!g)return[];for(var p=0,q=n.order.length;p":function(g,j){var o=typeof j==="string",m,p=0,q=g.length;if(o&&!/\W/.test(j))for(j=j.toLowerCase();p=0))o||m.push(t);else if(o)j[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var j=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=j[1]+(j[2]||1)-0;g[3]=j[3]-0}g[0]=e++;return g},ATTR:function(g,j,o, +m,p,q){j=g[1].replace(/\\/g,"");if(!q&&n.attrMap[j])g[1]=n.attrMap[j];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,j,o,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=l(g[3],null,null,j);else{g=l.filter(g[3],j,o,true^p);o||m.push.apply(m,g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled=== +true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,j,o){return!!l(o[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"=== +g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,j){return j===0},last:function(g,j,o,m){return j===m.length-1},even:function(g,j){return j%2===0},odd:function(g,j){return j%2===1},lt:function(g,j,o){return jo[3]-0},nth:function(g,j,o){return o[3]- +0===j},eq:function(g,j,o){return o[3]-0===j}},filter:{PSEUDO:function(g,j,o,m){var p=j[1],q=n.filters[p];if(q)return q(g,o,j,m);else if(p==="contains")return(g.textContent||g.innerText||l.getText([g])||"").indexOf(j[3])>=0;else if(p==="not"){j=j[3];o=0;for(m=j.length;o=0}},ID:function(g,j){return g.nodeType===1&&g.getAttribute("id")===j},TAG:function(g,j){return j==="*"&&g.nodeType===1||g.nodeName.toLowerCase()=== +j},CLASS:function(g,j){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(j)>-1},ATTR:function(g,j){var o=j[1];o=n.attrHandle[o]?n.attrHandle[o](g):g[o]!=null?g[o]:g.getAttribute(o);var m=o+"",p=j[2],q=j[4];return o==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&o!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,j,o,m){var p=n.setFilters[j[2]]; +if(p)return p(g,o,j,m)}}},s=n.match.POS,v=function(g,j){return"\\"+(j-0+1)},B;for(B in n.match){n.match[B]=RegExp(n.match[B].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[B]=RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[B].source.replace(/\\(\d+)/g,v))}var D=function(g,j){g=Array.prototype.slice.call(g,0);if(j){j.push.apply(j,g);return j}return g};try{Array.prototype.slice.call(u.documentElement.childNodes,0)}catch(H){D=function(g,j){var o=j||[],m=0;if(f.call(g)==="[object Array]")Array.prototype.push.apply(o, +g);else if(typeof g.length==="number")for(var p=g.length;m";var o=u.documentElement;o.insertBefore(g,o.firstChild);if(u.getElementById(j)){n.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:A:[]};n.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}o.removeChild(g); +o=g=null})();(function(){var g=u.createElement("div");g.appendChild(u.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(j,o){var m=o.getElementsByTagName(j[1]);if(j[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(j){return j.getAttribute("href",2)};g=null})();u.querySelectorAll&& +function(){var g=l,j=u.createElement("div");j.innerHTML="

    ";if(!(j.querySelectorAll&&j.querySelectorAll(".TEST").length===0)){l=function(m,p,q,t){p=p||u;if(!t&&!l.isXML(p))if(p.nodeType===9)try{return D(p.querySelectorAll(m),q)}catch(x){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var C=p.id,P=p.id="__sizzle__";try{return D(p.querySelectorAll("#"+P+" "+m),q)}catch(N){}finally{if(C)p.id=C;else p.removeAttribute("id")}}return g(m,p,q,t)};for(var o in g)l[o]=g[o]; +j=null}}();(function(){var g=u.documentElement,j=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,o=false;try{j.call(u.documentElement,":sizzle")}catch(m){o=true}if(j)l.matchesSelector=function(p,q){try{if(o||!n.match.PSEUDO.test(q))return j.call(p,q)}catch(t){}return l(q,null,null,[p]).length>0}})();(function(){var g=u.createElement("div");g.innerHTML="
    ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length=== +0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(j,o,m){if(typeof o.getElementsByClassName!=="undefined"&&!m)return o.getElementsByClassName(j[1])};g=null}}})();l.contains=u.documentElement.contains?function(g,j){return g!==j&&(g.contains?g.contains(j):true)}:function(g,j){return!!(g.compareDocumentPosition(j)&16)};l.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var M=function(g, +j){for(var o=[],m="",p,q=j.nodeType?[j]:j;p=n.match.PSEUDO.exec(g);){m+=p[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;p=0;for(var t=q.length;p0)for(var h=d;h0},closest:function(a, +b){var d=[],e,f,h=this[0];if(c.isArray(a)){var k={},l,n=1;if(h&&a.length){e=0;for(f=a.length;e-1:c(h).is(e))d.push({selector:l,elem:h,level:n})}h=h.parentNode;n++}}return d}k=$a.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h|| +!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}}); +c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling", +d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Wa.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||Ya.test(e))&&Xa.test(a))f=f.reverse();return this.pushStack(f,a,Za.call(arguments).join(","))}}); +c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===A||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var xa=/ jQuery\d+="(?:\d+|null)"/g, +$=/^\s+/,ya=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,za=/<([\w:]+)/,ab=/\s]+\/)>/g,O={option:[1,""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "], +area:[1,"",""],_default:[0,"",""]};O.optgroup=O.option;O.tbody=O.tfoot=O.colgroup=O.caption=O.thead;O.th=O.td;if(!c.support.htmlSerialize)O._default=[1,"div
    ","
    "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==A)return this.empty().append((this[0]&&this[0].ownerDocument||u).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this, +d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})}, +unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a= +c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*")); +c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(xa,"").replace(cb,'="$1">').replace($, +"")],e)[0]}else return this.cloneNode(true)});if(a===true){la(this,b);la(this.find("*"),b.find("*"))}return b},html:function(a){if(a===A)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(xa,""):null;else if(typeof a==="string"&&!Aa.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!O[(za.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ya,"<$1>");try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?l.cloneNode(true):l)}k.length&&c.each(k,Ka)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:u;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===u&&!Aa.test(a[0])&&(c.support.checkClone|| +!Ba.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h= +d.length;f0?this.clone(true):this).get();c(d[f])[b](k);e=e.concat(k)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||u;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||u;for(var f=[],h=0,k;(k=a[h])!=null;h++){if(typeof k==="number")k+="";if(k){if(typeof k==="string"&&!bb.test(k))k=b.createTextNode(k);else if(typeof k==="string"){k=k.replace(ya,"<$1>");var l=(za.exec(k)||["",""])[1].toLowerCase(),n=O[l]||O._default, +s=n[0],v=b.createElement("div");for(v.innerHTML=n[1]+k+n[2];s--;)v=v.lastChild;if(!c.support.tbody){s=ab.test(k);l=l==="table"&&!s?v.firstChild&&v.firstChild.childNodes:n[1]===""&&!s?v.childNodes:[];for(n=l.length-1;n>=0;--n)c.nodeName(l[n],"tbody")&&!l[n].childNodes.length&&l[n].parentNode.removeChild(l[n])}!c.support.leadingWhitespace&&$.test(k)&&v.insertBefore(b.createTextNode($.exec(k)[0]),v.firstChild);k=v.childNodes}if(k.nodeType)f.push(k);else f=c.merge(f,k)}}if(d)for(h=0;f[h];h++)if(e&& +c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,k=0,l;(l=a[k])!=null;k++)if(!(l.nodeName&&c.noData[l.nodeName.toLowerCase()]))if(d=l[c.expando]){if((b=e[d])&&b.events)for(var n in b.events)f[n]? +c.event.remove(l,n):c.removeEvent(l,n,b.handle);if(h)delete l[c.expando];else l.removeAttribute&&l.removeAttribute(c.expando);delete e[d]}}});var Ca=/alpha\([^)]*\)/i,db=/opacity=([^)]*)/,eb=/-([a-z])/ig,fb=/([A-Z])/g,Da=/^-?\d+(?:px)?$/i,gb=/^-?\d/,hb={position:"absolute",visibility:"hidden",display:"block"},La=["Left","Right"],Ma=["Top","Bottom"],W,ib=u.defaultView&&u.defaultView.getComputedStyle,jb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===A)return this; +return c.access(this,a,b,true,function(d,e,f){return f!==A?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),k=a.style,l=c.cssHooks[h];b=c.cssProps[h]|| +h;if(d!==A){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!l||!("set"in l)||(d=l.set(a,d))!==A)try{k[b]=d}catch(n){}}}else{if(l&&"get"in l&&(f=l.get(a,false,e))!==A)return f;return k[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==A)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]= +e[f]},camelCase:function(a){return a.replace(eb,jb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=ma(d,b,f);else c.swap(d,hb,function(){h=ma(d,b,f)});return h+"px"}},set:function(d,e){if(Da.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return db.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"": +b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=d.filter||"";d.filter=Ca.test(f)?f.replace(Ca,e):d.filter+" "+e}};if(ib)W=function(a,b,d){var e;d=d.replace(fb,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return A;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};else if(u.documentElement.currentStyle)W=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b], +h=a.style;if(!Da.test(f)&&gb.test(f)){d=h.left;e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f};if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var kb=c.now(),lb=/)<[^<]*)*<\/script>/gi, +mb=/^(?:select|textarea)/i,nb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ob=/^(?:GET|HEAD|DELETE)$/,Na=/\[\]$/,T=/\=\?(&|$)/,ia=/\?/,pb=/([?&])_=[^&]*/,qb=/^(\w+:)?\/\/([^\/?#]+)/,rb=/%20/g,sb=/#.*$/,Ea=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ea)return Ea.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d= +b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(k,l){if(l==="success"||l==="notmodified")h.html(f?c("
    ").append(k.responseText.replace(lb,"")).find(f):k.responseText);d&&h.each(d,[k.responseText,l,k])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&& +!this.disabled&&(this.checked||mb.test(this.nodeName)||nb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})}, +getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html", +script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),k=ob.test(h);b.url=b.url.replace(sb,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ia.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data|| +!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+kb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var l=E[d];E[d]=function(m){f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);if(c.isFunction(l))l(m);else{E[d]=A;try{delete E[d]}catch(p){}}v&&v.removeChild(B)}}if(b.dataType==="script"&&b.cache===null)b.cache= +false;if(b.cache===false&&h==="GET"){var n=c.now(),s=b.url.replace(pb,"$1_="+n);b.url=s+(s===b.url?(ia.test(b.url)?"&":"?")+"_="+n:"")}if(b.data&&h==="GET")b.url+=(ia.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");n=(n=qb.exec(b.url))&&(n[1]&&n[1]!==location.protocol||n[2]!==location.host);if(b.dataType==="script"&&h==="GET"&&n){var v=u.getElementsByTagName("head")[0]||u.documentElement,B=u.createElement("script");if(b.scriptCharset)B.charset=b.scriptCharset;B.src= +b.url;if(!d){var D=false;B.onload=B.onreadystatechange=function(){if(!D&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){D=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);B.onload=B.onreadystatechange=null;v&&B.parentNode&&v.removeChild(B)}}}v.insertBefore(B,v.firstChild);return A}var H=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!k||a&&a.contentType)w.setRequestHeader("Content-Type", +b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}n||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(G){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&& +c.triggerGlobal(b,"ajaxSend",[w,b]);var M=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){H||c.handleComplete(b,w,e,f);H=true;if(w)w.onreadystatechange=c.noop}else if(!H&&w&&(w.readyState===4||m==="timeout")){H=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d|| +c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&g.call&&g.call(w);M("abort")}}catch(j){}b.async&&b.timeout>0&&setTimeout(function(){w&&!H&&M("timeout")},b.timeout);try{w.send(k||b.data==null?null:b.data)}catch(o){c.handleError(b,w,null,o);c.handleComplete(b,w,e,f)}b.async||M();return w}},param:function(a,b){var d=[],e=function(h,k){k=c.isFunction(k)?k():k;d[d.length]=encodeURIComponent(h)+ +"="+encodeURIComponent(k)};if(b===A)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)ca(f,a[f],b,e);return d.join("&").replace(rb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",[b,a])},handleComplete:function(a, +b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),e=a.getResponseHeader("Etag"); +if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});if(E.ActiveXObject)c.ajaxSettings.xhr= +function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var da={},tb=/^(?:toggle|show|hide)$/,ub=/^([+\-]=)?([\d+.\-]+)(.*)$/,aa,na=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",3),a,b,d);else{a= +0;for(b=this.length;a=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b, +d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a* +Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(h){return f.step(h)} +this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;var f=this;a=c.fx;e.elem=this.elem;if(e()&&c.timers.push(e)&&!aa)aa=setInterval(a.tick,a.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true; +this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(l,n){f.style["overflow"+n]=h.overflow[l]})}this.options.hide&&c(this.elem).hide();if(this.options.hide|| +this.options.show)for(var k in this.options.curAnim)c.style(this.elem,k,this.options.orig[k]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a= +c.timers,b=0;b-1;e={};var s={};if(n)s=f.position();k=n?s.top:parseInt(k,10)||0;l=n?s.left:parseInt(l,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+k;if(b.left!=null)e.left=b.left-h.left+l;"using"in b?b.using.call(a, +e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Fa.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||u.body;a&&!Fa.test(a.nodeName)&& +c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==A)return this.each(function(){if(h=ea(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=ea(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase(); +c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(h){var k=c(this);k[d](e.call(this,h,k[d]()))});return c.isWindow(f)?f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b]:f.nodeType===9?Math.max(f.documentElement["client"+ +b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]):e===A?parseFloat(c.css(f,d)):this.css(d,typeof e==="string"?e:e+"px")}})})(window); diff --git a/site_media/packages/jquery.fancybox-1.3.4/style.css b/site_media/packages/jquery.fancybox-1.3.4/style.css new file mode 100644 index 0000000000..e11a5122ce --- /dev/null +++ b/site_media/packages/jquery.fancybox-1.3.4/style.css @@ -0,0 +1,65 @@ +html, body, div, ul { + margin: 0; + padding: 0; +} + +body { + color: #262626; + background: #f4f4f4; + font: normal 12px/18px Verdana, sans-serif; +} + +#content { + width: 400px; + margin: 40px auto 0 auto; + padding: 0 60px 30px 60px; + border: solid 1px #cbcbcb; + background: #fafafa; + -moz-box-shadow: 0px 0px 10px #cbcbcb; + -webkit-box-shadow: 0px 0px 10px #cbcbcb; +} + +h1 { + margin: 30px 0 15px 0; + font-size: 30px; + font-weight: bold; + font-family: Arial; +} + +h1 span { + font-size: 50%; + letter-spacing: -0.05em; +} + +hr { + border: none; + height: 1px; line-height: 1px; + background: #E5E5E5; + margin-bottom: 20px; + padding: 0; +} + +p { + margin: 0; + padding: 7px 0; +} + +a { + outline: none; +} + +a img { + border: 1px solid #BBB; + padding: 2px; + margin: 10px 20px 10px 0; + vertical-align: top; +} + +a img.last { + margin-right: 0; +} + +ul { + margin-bottom: 24px; + padding-left: 30px; +} diff --git a/urls.py b/urls.py index e3a9d4662a..9ba2632073 100644 --- a/urls.py +++ b/urls.py @@ -9,6 +9,7 @@ urlpatterns = patterns('', (r'^', include('main.urls')), (r'^documents/', include('documents.urls')), (r'^search/', include('dynamic_search.urls')), + (r'^ocr/', include('ocr.urls')), (r'^admin/doc/', include('django.contrib.admindocs.urls')), (r'^admin/', include(admin.site.urls)), )