From b51b7882371a140acae43a3290649eb1445d3d57 Mon Sep 17 00:00:00 2001 From: yomguy Date: Fri, 9 Mar 2012 16:28:21 +0100 Subject: [PATCH] cleanup --- telecaster/AUTHORS | 1 - telecaster/__init__.py | 0 telecaster/admin.py | 9 - telecaster/export/api.py | 87 - telecaster/export/core.py | 179 - telecaster/export/mp3.py | 155 - telecaster/export/ogg.py | 135 - telecaster/export/tools.py | 96 - telecaster/favicon.ico | Bin 585 -> 0 bytes telecaster/forms.py | 16 - telecaster/htdocs/css/telecaster.css | 256 - telecaster/htdocs/images/accept.png | Bin 781 -> 0 bytes telecaster/htdocs/images/arrow_refresh.png | Bin 685 -> 0 bytes telecaster/htdocs/images/bin.png | Bin 476 -> 0 bytes telecaster/htdocs/images/cancel.png | Bin 587 -> 0 bytes .../htdocs/images/control_pause_blue.png | Bin 721 -> 0 bytes .../htdocs/images/control_play_blue.png | Bin 717 -> 0 bytes telecaster/htdocs/images/control_stop.png | Bin 403 -> 0 bytes .../htdocs/images/control_stop_blue.png | Bin 695 -> 0 bytes .../apps/preferences-desktop-rotate.png | Bin 10467 -> 0 bytes .../16x16/apps/preferences-desktop-rotate.png | Bin 1035 -> 0 bytes .../22x22/apps/preferences-desktop-rotate.png | Bin 1508 -> 0 bytes .../32x32/apps/preferences-desktop-rotate.png | Bin 2231 -> 0 bytes .../48x48/apps/preferences-desktop-rotate.png | Bin 3506 -> 0 bytes .../64x64/apps/preferences-desktop-rotate.png | Bin 5181 -> 0 bytes .../8x8/apps/preferences-desktop-rotate.png | Bin 545 -> 0 bytes telecaster/htdocs/images/drive_add.png | Bin 623 -> 0 bytes telecaster/htdocs/images/drive_burn.png | Bin 608 -> 0 bytes telecaster/htdocs/images/drive_delete.png | Bin 628 -> 0 bytes telecaster/htdocs/images/drive_error.png | Bin 705 -> 0 bytes telecaster/htdocs/images/folder_go.png | Bin 694 -> 0 bytes telecaster/htdocs/images/folder_link.png | Bin 785 -> 0 bytes telecaster/htdocs/images/ipod_cast.png | Bin 711 -> 0 bytes .../htdocs/images/logo_telecaster_wh.png | Bin 1334 -> 0 bytes .../htdocs/images/rotate_desktop.desktop | 10 - telecaster/htdocs/images/stop.png | Bin 700 -> 0 bytes telecaster/htdocs/images/tick.png | Bin 537 -> 0 bytes telecaster/htdocs/images/transmit.png | Bin 749 -> 0 bytes telecaster/htdocs/images/transmit_add.png | Bin 803 -> 0 bytes telecaster/htdocs/images/transmit_blue.png | Bin 814 -> 0 bytes telecaster/htdocs/images/transmit_delete.png | Bin 827 -> 0 bytes telecaster/htdocs/images/transmit_edit.png | Bin 848 -> 0 bytes telecaster/htdocs/images/transmit_error.png | Bin 883 -> 0 bytes telecaster/htdocs/images/transmit_go.png | Bin 842 -> 0 bytes telecaster/htdocs/images/tux.png | Bin 696 -> 0 bytes telecaster/htdocs/js/application.js | 173 - telecaster/htdocs/js/jquery-1.6.min.js | 16 - telecaster/htdocs/video-js/LGPLv3-LICENSE.txt | 165 - telecaster/htdocs/video-js/README.md | 153 - telecaster/htdocs/video-js/demo.html | 23 - telecaster/htdocs/video-js/video-js.css | 427 - telecaster/htdocs/video-js/video-js.min.css | 1 - telecaster/htdocs/video-js/video-js.png | Bin 7460 -> 0 bytes telecaster/htdocs/video-js/video-js.swf | Bin 9612 -> 0 bytes telecaster/htdocs/video-js/video.js | 3888 --- telecaster/htdocs/video-js/video.min.js | 21 - telecaster/install.py | 139 - telecaster/jack/jack.py | 66 - telecaster/js/rssajax.js | 275 - telecaster/migrations/0001_initial.py | 144 - ...tion__chg_field_department_description_.py | 117 - .../migrations/0003_auto__add_record.py | 82 - ...or__chg_field_station_session__chg_fiel.py | 94 - ...or__chg_field_station_session__chg_fiel.py | 94 - ...nce__chg_field_station_professor__chg_f.py | 100 - ..._auto__chg_field_station_datetime_start.py | 76 - ..._auto__chg_field_station_datetime_start.py | 76 - ..._auto__add_field_station_professor_free.py | 79 - .../0010_auto__chg_field_station_comment.py | 80 - telecaster/migrations/__init__.py | 0 telecaster/models.py | 332 - telecaster/old/station.py | 228 - telecaster/telecaster_old.py | 150 - telecaster/templates/telecaster/base.html | 72 - telecaster/templates/telecaster/start.html | 46 - telecaster/templates/telecaster/stop.html | 42 - telecaster/templatetags/__init__.py | 0 telecaster/templatetags/telecaster_utils.py | 22 - telecaster/tests.py | 23 - telecaster/tools/PyRSS2Gen.py | 443 - telecaster/tools/__init__.py | 8 - telecaster/tools/acpi.py | 557 - telecaster/tools/logger.py | 22 - .../tools/scripts/ffmpeg_dv_jack_fifo_fw | 37 - .../tools/scripts/ffmpeg_dv_jack_fifo_shout | 37 - .../tools/scripts/ffmpeg_dv_jack_fifo_usb | 37 - .../tools/scripts/ffmpeg_dv_jack_fifo_usb_gst | 23 - .../tools/scripts/ffmpeg_usb_jack_fifo_shout | 37 - telecaster/tools/scripts/gst_dv_jack_shout | 7 - .../tools/scripts/gst_video_double_shout | 12 - .../tools/scripts/gst_video_jack_fifo_shout | 24 - telecaster/tools/scripts/gst_video_jack_shout | 24 - telecaster/tools/scripts/gst_video_simple_ogg | 11 - .../tools/scripts/gst_video_simple_ogg_jack | 9 - .../tools/scripts/gst_video_triple_shout | 11 - telecaster/tools/status.py | 102 - telecaster/tools/tools.py | 167 - telecaster/tools/xmltodict.py | 76 - telecaster/urls.py | 70 - telecaster/vendor/edcast-jack/Makefile.am | 17 - telecaster/vendor/edcast-jack/Makefile.in | 720 - telecaster/vendor/edcast-jack/aclocal.m4 | 7340 ----- telecaster/vendor/edcast-jack/conf/sample.cfg | 46 - telecaster/vendor/edcast-jack/config.guess | 1500 - telecaster/vendor/edcast-jack/config.sub | 1616 -- telecaster/vendor/edcast-jack/configure | 22548 ---------------- telecaster/vendor/edcast-jack/configure.in | 212 - telecaster/vendor/edcast-jack/depcomp | 584 - telecaster/vendor/edcast-jack/edcast.cpp | 572 - telecaster/vendor/edcast-jack/install-sh | 507 - .../vendor/edcast-jack/libedcast/Makefile | 558 - .../vendor/edcast-jack/libedcast/Makefile.am | 21 - .../vendor/edcast-jack/libedcast/Makefile.in | 558 - .../vendor/edcast-jack/libedcast/Socket.cpp | 234 - .../vendor/edcast-jack/libedcast/cbuffer.c | 198 - .../vendor/edcast-jack/libedcast/cbuffer.h | 38 - .../vendor/edcast-jack/libedcast/enc_if.h | 44 - .../edcast-jack/libedcast/libedcast.cpp | 3712 --- .../edcast-jack/libedcast/libedcast.dsp | 132 - .../vendor/edcast-jack/libedcast/libedcast.h | 495 - .../libedcast/libedcast_resample.h | 110 - .../edcast-jack/libedcast/libedcast_socket.h | 74 - .../vendor/edcast-jack/libedcast/resample.c | 457 - telecaster/vendor/edcast-jack/ltmain.sh | 6871 ----- telecaster/vendor/edcast-jack/m4/lame.m4 | 107 - telecaster/vendor/edcast-jack/m4/mad.m4 | 97 - telecaster/vendor/edcast-jack/m4/ogg.m4 | 62 - telecaster/vendor/edcast-jack/m4/vorbis.m4 | 87 - telecaster/vendor/edcast-jack/missing | 367 - telecaster/views.py | 119 - telecaster/webview.py | 318 - 131 files changed, 60183 deletions(-) delete mode 100644 telecaster/AUTHORS delete mode 100644 telecaster/__init__.py delete mode 100644 telecaster/admin.py delete mode 100644 telecaster/export/api.py delete mode 100644 telecaster/export/core.py delete mode 100644 telecaster/export/mp3.py delete mode 100644 telecaster/export/ogg.py delete mode 100644 telecaster/export/tools.py delete mode 100644 telecaster/favicon.ico delete mode 100644 telecaster/forms.py delete mode 100644 telecaster/htdocs/css/telecaster.css delete mode 100644 telecaster/htdocs/images/accept.png delete mode 100644 telecaster/htdocs/images/arrow_refresh.png delete mode 100644 telecaster/htdocs/images/bin.png delete mode 100644 telecaster/htdocs/images/cancel.png delete mode 100644 telecaster/htdocs/images/control_pause_blue.png delete mode 100644 telecaster/htdocs/images/control_play_blue.png delete mode 100644 telecaster/htdocs/images/control_stop.png delete mode 100644 telecaster/htdocs/images/control_stop_blue.png delete mode 100644 telecaster/htdocs/images/desktop/128x128/apps/preferences-desktop-rotate.png delete mode 100644 telecaster/htdocs/images/desktop/16x16/apps/preferences-desktop-rotate.png delete mode 100644 telecaster/htdocs/images/desktop/22x22/apps/preferences-desktop-rotate.png delete mode 100644 telecaster/htdocs/images/desktop/32x32/apps/preferences-desktop-rotate.png delete mode 100644 telecaster/htdocs/images/desktop/48x48/apps/preferences-desktop-rotate.png delete mode 100644 telecaster/htdocs/images/desktop/64x64/apps/preferences-desktop-rotate.png delete mode 100644 telecaster/htdocs/images/desktop/8x8/apps/preferences-desktop-rotate.png delete mode 100644 telecaster/htdocs/images/drive_add.png delete mode 100644 telecaster/htdocs/images/drive_burn.png delete mode 100644 telecaster/htdocs/images/drive_delete.png delete mode 100644 telecaster/htdocs/images/drive_error.png delete mode 100644 telecaster/htdocs/images/folder_go.png delete mode 100644 telecaster/htdocs/images/folder_link.png delete mode 100644 telecaster/htdocs/images/ipod_cast.png delete mode 100644 telecaster/htdocs/images/logo_telecaster_wh.png delete mode 100644 telecaster/htdocs/images/rotate_desktop.desktop delete mode 100644 telecaster/htdocs/images/stop.png delete mode 100644 telecaster/htdocs/images/tick.png delete mode 100644 telecaster/htdocs/images/transmit.png delete mode 100644 telecaster/htdocs/images/transmit_add.png delete mode 100644 telecaster/htdocs/images/transmit_blue.png delete mode 100644 telecaster/htdocs/images/transmit_delete.png delete mode 100644 telecaster/htdocs/images/transmit_edit.png delete mode 100644 telecaster/htdocs/images/transmit_error.png delete mode 100644 telecaster/htdocs/images/transmit_go.png delete mode 100644 telecaster/htdocs/images/tux.png delete mode 100644 telecaster/htdocs/js/application.js delete mode 100644 telecaster/htdocs/js/jquery-1.6.min.js delete mode 100644 telecaster/htdocs/video-js/LGPLv3-LICENSE.txt delete mode 100644 telecaster/htdocs/video-js/README.md delete mode 100644 telecaster/htdocs/video-js/demo.html delete mode 100644 telecaster/htdocs/video-js/video-js.css delete mode 100644 telecaster/htdocs/video-js/video-js.min.css delete mode 100644 telecaster/htdocs/video-js/video-js.png delete mode 100644 telecaster/htdocs/video-js/video-js.swf delete mode 100644 telecaster/htdocs/video-js/video.js delete mode 100644 telecaster/htdocs/video-js/video.min.js delete mode 100644 telecaster/install.py delete mode 100644 telecaster/jack/jack.py delete mode 100644 telecaster/js/rssajax.js delete mode 100644 telecaster/migrations/0001_initial.py delete mode 100644 telecaster/migrations/0002_auto__chg_field_session_description__chg_field_department_description_.py delete mode 100644 telecaster/migrations/0003_auto__add_record.py delete mode 100644 telecaster/migrations/0004_auto__chg_field_station_professor__chg_field_station_session__chg_fiel.py delete mode 100644 telecaster/migrations/0005_auto__chg_field_station_professor__chg_field_station_session__chg_fiel.py delete mode 100644 telecaster/migrations/0006_auto__chg_field_station_conference__chg_field_station_professor__chg_f.py delete mode 100644 telecaster/migrations/0007_auto__chg_field_station_datetime_start.py delete mode 100644 telecaster/migrations/0008_auto__chg_field_station_datetime_start.py delete mode 100644 telecaster/migrations/0009_auto__add_field_station_professor_free.py delete mode 100644 telecaster/migrations/0010_auto__chg_field_station_comment.py delete mode 100644 telecaster/migrations/__init__.py delete mode 100644 telecaster/models.py delete mode 100644 telecaster/old/station.py delete mode 100755 telecaster/telecaster_old.py delete mode 100644 telecaster/templates/telecaster/base.html delete mode 100644 telecaster/templates/telecaster/start.html delete mode 100644 telecaster/templates/telecaster/stop.html delete mode 100644 telecaster/templatetags/__init__.py delete mode 100644 telecaster/templatetags/telecaster_utils.py delete mode 100644 telecaster/tests.py delete mode 100644 telecaster/tools/PyRSS2Gen.py delete mode 100644 telecaster/tools/__init__.py delete mode 100644 telecaster/tools/acpi.py delete mode 100644 telecaster/tools/logger.py delete mode 100755 telecaster/tools/scripts/ffmpeg_dv_jack_fifo_fw delete mode 100755 telecaster/tools/scripts/ffmpeg_dv_jack_fifo_shout delete mode 100755 telecaster/tools/scripts/ffmpeg_dv_jack_fifo_usb delete mode 100755 telecaster/tools/scripts/ffmpeg_dv_jack_fifo_usb_gst delete mode 100755 telecaster/tools/scripts/ffmpeg_usb_jack_fifo_shout delete mode 100755 telecaster/tools/scripts/gst_dv_jack_shout delete mode 100755 telecaster/tools/scripts/gst_video_double_shout delete mode 100755 telecaster/tools/scripts/gst_video_jack_fifo_shout delete mode 100755 telecaster/tools/scripts/gst_video_jack_shout delete mode 100755 telecaster/tools/scripts/gst_video_simple_ogg delete mode 100755 telecaster/tools/scripts/gst_video_simple_ogg_jack delete mode 100755 telecaster/tools/scripts/gst_video_triple_shout delete mode 100644 telecaster/tools/status.py delete mode 100644 telecaster/tools/tools.py delete mode 100644 telecaster/tools/xmltodict.py delete mode 100644 telecaster/urls.py delete mode 100644 telecaster/vendor/edcast-jack/Makefile.am delete mode 100644 telecaster/vendor/edcast-jack/Makefile.in delete mode 100644 telecaster/vendor/edcast-jack/aclocal.m4 delete mode 100644 telecaster/vendor/edcast-jack/conf/sample.cfg delete mode 100644 telecaster/vendor/edcast-jack/config.guess delete mode 100644 telecaster/vendor/edcast-jack/config.sub delete mode 100755 telecaster/vendor/edcast-jack/configure delete mode 100644 telecaster/vendor/edcast-jack/configure.in delete mode 100644 telecaster/vendor/edcast-jack/depcomp delete mode 100644 telecaster/vendor/edcast-jack/edcast.cpp delete mode 100644 telecaster/vendor/edcast-jack/install-sh delete mode 100644 telecaster/vendor/edcast-jack/libedcast/Makefile delete mode 100644 telecaster/vendor/edcast-jack/libedcast/Makefile.am delete mode 100644 telecaster/vendor/edcast-jack/libedcast/Makefile.in delete mode 100644 telecaster/vendor/edcast-jack/libedcast/Socket.cpp delete mode 100644 telecaster/vendor/edcast-jack/libedcast/cbuffer.c delete mode 100644 telecaster/vendor/edcast-jack/libedcast/cbuffer.h delete mode 100644 telecaster/vendor/edcast-jack/libedcast/enc_if.h delete mode 100644 telecaster/vendor/edcast-jack/libedcast/libedcast.cpp delete mode 100644 telecaster/vendor/edcast-jack/libedcast/libedcast.dsp delete mode 100644 telecaster/vendor/edcast-jack/libedcast/libedcast.h delete mode 100644 telecaster/vendor/edcast-jack/libedcast/libedcast_resample.h delete mode 100644 telecaster/vendor/edcast-jack/libedcast/libedcast_socket.h delete mode 100644 telecaster/vendor/edcast-jack/libedcast/resample.c delete mode 100644 telecaster/vendor/edcast-jack/ltmain.sh delete mode 100644 telecaster/vendor/edcast-jack/m4/lame.m4 delete mode 100644 telecaster/vendor/edcast-jack/m4/mad.m4 delete mode 100644 telecaster/vendor/edcast-jack/m4/ogg.m4 delete mode 100644 telecaster/vendor/edcast-jack/m4/vorbis.m4 delete mode 100644 telecaster/vendor/edcast-jack/missing delete mode 100644 telecaster/views.py delete mode 100644 telecaster/webview.py diff --git a/telecaster/AUTHORS b/telecaster/AUTHORS deleted file mode 100644 index 6b192a7..0000000 --- a/telecaster/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -Guillaume Pellerin diff --git a/telecaster/__init__.py b/telecaster/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/telecaster/admin.py b/telecaster/admin.py deleted file mode 100644 index 33bb98e..0000000 --- a/telecaster/admin.py +++ /dev/null @@ -1,9 +0,0 @@ -from models import * -from django.contrib import admin - -admin.site.register(Organization) -admin.site.register(Conference) -admin.site.register(Department) -admin.site.register(Professor) -admin.site.register(Session) -admin.site.register(Station) diff --git a/telecaster/export/api.py b/telecaster/export/api.py deleted file mode 100644 index 16f53bc..0000000 --- a/telecaster/export/api.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2007 Parisson SARL -# Copyright (c) 2007 Olivier Guilyardi -# Copyright (c) 2007 Guillaume Pellerin -# All rights reserved. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at http://svn.parisson.org/telemeta/TelemetaLicense. -# -# Author: Olivier Guilyardi -# Guillaume Pellerin - -#from telemeta.core import Interface, TelemetaError - - -class IExporter(Interface): - """Export driver interface""" - - # Remark: the method prototypes do not include any self or cls argument - # because an interface is meant to show what methods a class must expose - # from the caller's point of view. However, when implementing the class - # you'll obviously want to include this extra argument. - - def get_format(): - """Return the export/encoding format as a short string - Example: "MP3", "OGG", "AVI", ... - """ - - def get_description(): - """Return a string describing what this export format provides, is good - for, etc... The description is meant to help the end user decide what - format is good for him/her - """ - - def get_file_extension(): - """Return the filename extension corresponding to this export format""" - - def get_mime_type(): - """Return the mime type corresponding to this export format""" - - def set_cache_dir(path): - """Set the directory where cached files should be stored. Does nothing - if the exporter doesn't support caching. - - The driver shouldn't assume that this method will always get called. A - temporary directory should be used if that's not the case. - """ - - def process(item_id, source, metadata, options=None): - """Perform the exporting process and return the absolute path - to the resulting file. - - item_id is the media item id that uniquely identifies this audio/video - resource - - source is the audio/video source file absolute path. For audio that - should be a WAV file - - metadata is a dictionary - - The returned file path is not meant to be permanent in any way, it - should be considered temporary/volatile by the caller. - - It is highly recommended that export drivers implement some sort of - cache instead of re-encoding each time process() is called. - - It should be possible to make subsequent calls to process() with - different items, using the same driver instance. - """ - -class ExportProcessError: - - def __init__(self, message, command, subprocess): - self.message = message - self.command = str(command) - self.subprocess = subprocess - - def __str__(self): - if self.subprocess.stderr != None: - error = self.subprocess.stderr.read() - else: - error = '' - return "%s ; command: %s; error: %s" % (self.message, - self.command, - error) diff --git a/telecaster/export/core.py b/telecaster/export/core.py deleted file mode 100644 index 6454079..0000000 --- a/telecaster/export/core.py +++ /dev/null @@ -1,179 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2007 Parisson SARL -# Copyright (c) 2006-2007 Guillaume Pellerin -# All rights reserved. -# -# This software is licensed as described in the file COPYING, which -# yo"u should have received as part of this distribution. The terms -# are also available at http://svn.parisson.org/telemeta/TelemetaLicense. -# -# Author: Guillaume Pellerin - -import os -import re -import string -import subprocess -import mutagen -import export -import xml.dom.minidom -import xml.dom.ext - -#from telemeta.core import * -from export import * -from tools import * - -class ExporterCore: - """Defines the main parts of the exporting tools : - paths, formats, metadata...""" - - def __init__(self): - self.source = '' - self.collection = '' - self.verbose = '' - self.dest = '' - self.metadata = [] - self.cache_dir = 'cache' - self.buffer_size = 0xFFFF - - def set_cache_dir(self,path): - self.cache_dir = path - - def normalize(self): - """ Normalize the source and return its path """ - args = '' - if self.verbose == '0': - args = '-q' - try: - os.system('normalize-audio '+args+' "'+self.source+'"') - return self.source - except IOError: - return 'Exporter error: Cannot normalize, path does not exist.' - - def check_md5_key(self): - """ Check if the md5 key is OK and return a boolean """ - try: - md5_log = os.popen4('md5sum -c "'+self.dest+ \ - '" "'+self.dest+'.md5"') - return 'OK' in md5_log.split(':') - except IOError: - return 'Exporter error: Cannot check the md5 key...' - - def get_file_info(self): - """ Return the list of informations of the dest """ - return self.export.get_file_info() - - def get_wav_length_sec(self) : - """ Return the length of the audio source file in seconds """ - try: - file1, file2 = os.popen4('wavinfo "'+self.source+ \ - '" | grep wavDataSize') - for line in file2.readlines(): - line_split = line.split(':') - value = int(int(line_split[1])/(4*44100)) - return value - except IOError: - return 'Exporter error: Cannot get the wav length...' - - def compare_md5_key(self): - """ Compare 2 files wih md5 method """ - in1, in2 = os.popen4('md5sum -b "'+self.source+'"') - out1, out2 = os.popen4('md5sum -b "'+self.dest+'"') - for line in in2.readlines(): - line1 = line.split('*')[0] - for line in out2.readlines(): - line2 = line.split('*')[0] - return line1 == line2 - - def write_metadata_xml(self,path): - doc = xml.dom.minidom.Document() - root = doc.createElement('telemeta') - doc.appendChild(root) - for tag in self.metadata.keys() : - value = self.metadata[tag] - node = doc.createElement(tag) - node.setAttribute('value', str(value)) - #node.setAttribute('type', get_type(value)) - root.appendChild(node) - xml_file = open(path, "w") - xml.dom.ext.PrettyPrint(doc, xml_file) - xml_file.close() - - def pre_process(self, item_id, source, metadata, ext, - cache_dir, options=None): - """ Pre processing : prepare the export path and return it""" - self.item_id = str(item_id) - self.source = source - file_name = get_file_name(self.source) - file_name_wo_ext, file_ext = split_file_name(file_name) - self.cache_dir = cache_dir - self.metadata = metadata - #self.collection = self.metadata['Collection'] - #self.artist = self.metadata['Artist'] - #self.title = self.metadata['Title'] - - # Normalize if demanded - if not options is None: - self.options = options - if 'normalize' in self.options and \ - self.options['normalize'] == True: - self.normalize() - - # Define the export directory - self.ext = self.get_file_extension() - export_dir = os.path.join(self.cache_dir,self.ext) - - if not os.path.exists(export_dir): - export_dir_split = export_dir.split(os.sep) - path = os.sep + export_dir_split[0] - for _dir in export_dir_split[1:]: - path = os.path.join(path,_dir) - if not os.path.exists(path): - os.mkdir(path) - else: - path = export_dir - - # Set the target file - target_file = self.item_id+'.'+self.ext - dest = os.path.join(path,target_file) - return dest - - def core_process(self, command, buffer_size, dest): - """Encode and stream audio data through a generator""" - - __chunk = 0 - file_out = open(dest,'w') - - try: - proc = subprocess.Popen(command, - shell = True, - bufsize = buffer_size, - stdin = subprocess.PIPE, - stdout = subprocess.PIPE, - close_fds = True) - except: - raise ExportProcessError('Command failure:', command, proc) - - - # Core processing - while True: - __chunk = proc.stdout.read(buffer_size) - status = proc.poll() - if status != None and status != 0: - raise ExportProcessError('Command failure:', command, proc) - if len(__chunk) == 0: - break - yield __chunk - file_out.write(__chunk) - - file_out.close() - - def post_process(self, item_id, source, metadata, ext, - cache_dir, options=None): - """ Post processing : write tags, print infos, etc...""" - self.write_tags() - if not options is None: - if 'verbose' in self.options and self.options['verbose'] != '0': - print self.dest - print self.get_file_info() - diff --git a/telecaster/export/mp3.py b/telecaster/export/mp3.py deleted file mode 100644 index c83344c..0000000 --- a/telecaster/export/mp3.py +++ /dev/null @@ -1,155 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2007 Parisson SARL -# Copyright (c) 2006-2007 Guillaume Pellerin -# All rights reserved. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at http://svn.parisson.org/telemeta/TelemetaLicense. -# -# Author: Guillaume Pellerin - -import os -import string -import subprocess - -from telemeta.export.core import * -from telemeta.export.api import IExporter -#from mutagen.id3 import * - - -class Mp3Exporter(ExporterCore): - """Defines methods to export to MP3""" - - implements(IExporter) - - def __init__(self): - self.item_id = '' - self.metadata = {} - self.description = '' - self.info = [] - self.source = '' - self.dest = '' - self.options = {} - self.bitrate_default = '192' - self.buffer_size = 0xFFFF - self.dub2id3_dict = {'title': 'TIT2', #title2 - 'creator': 'TCOM', #composer - 'creator': 'TPE1', #lead - 'identifier': 'UFID', #Unique ID... - 'identifier': 'TALB', #album - 'type': 'TCON', #genre - 'publisher': 'TPUB', #comment - #'date': 'TYER', #year - } - self.dub2args_dict = {'title': 'tt', #title2 - 'creator': 'ta', #composer - 'relation': 'tl', #album - #'type': 'tg', #genre - 'publisher': 'tc', #comment - 'date': 'ty', #year - } - def get_format(self): - return 'MP3' - - def get_file_extension(self): - return 'mp3' - - def get_mime_type(self): - return 'audio/mpeg' - - def get_description(self): - return "FIXME" - - def set_cache_dir(self,path): - self.cache_dir = path - - def get_file_info(self): - try: - file_out1, file_out2 = os.popen4('mp3info "'+self.dest+'"') - info = [] - for line in file_out2.readlines(): - info.append(clean_word(line[:-1])) - self.info = info - return self.info - except IOError: - return 'Exporter error [1]: file does not exist.' - - def decode(self): - try: - os.system('sox "'+self.source+'" -w -r 44100 -t wav "' \ - +self.cache_dir+os.sep+self.item_id+'"') - return self.cache_dir+os.sep+self.item_id+'.wav' - except IOError: - return 'ExporterError [2]: decoder not compatible.' - - def write_tags(self): - """Write all ID3v2.4 tags by mapping dub2id3_dict dictionnary with the - respect of mutagen classes and methods""" - from mutagen import id3 - id3 = id3.ID3(self.dest) - for tag in self.metadata.keys(): - if tag in self.dub2id3_dict.keys(): - frame_text = self.dub2id3_dict[tag] - value = self.metadata[tag] - frame = mutagen.id3.Frames[frame_text](3,value) - id3.add(frame) - id3.save() - - def get_args(self, options=None): - """Get process options and return arguments for the encoder""" - args = [] - if not options is None: - self.options = options - if not ( 'verbose' in self.options and self.options['verbose'] != '0' ): - args.append('-S') - if 'mp3_bitrate' in self.options: - args.append('-b ' + self.options['mp3_bitrate']) - else: - args.append('-b '+self.bitrate_default) - #Copyrights, etc.. - args.append('-c -o') - else: - args.append('-S -c -o') - - for tag in self.metadata.keys(): - if tag in self.dub2args_dict.keys(): - arg = self.dub2args_dict[tag] - value = clean_word(self.metadata[tag]) - args.append('--' + arg) - args.append('"' + value + '"') - - return args - - def process(self, item_id, source, metadata, options=None): - self.item_id = item_id - self.source = source - self.metadata = metadata - self.args = self.get_args(options) - self.ext = self.get_file_extension() - self.args = ' '.join(self.args) - self.command = 'sox "%s" -q -w -r 44100 -t wav -c2 - | lame %s -' \ - % (self.source,self.args) - - # Pre-proccessing - self.dest = self.pre_process(self.item_id, - self.source, - self.metadata, - self.ext, - self.cache_dir, - self.options) - - # Processing (streaming + cache writing) - stream = self.core_process(self.command,self.buffer_size,self.dest) - for chunk in stream: - yield chunk - - # Post-proccessing - self.post_process(self.item_id, - self.source, - self.metadata, - self.ext, - self.cache_dir, - self.options) - diff --git a/telecaster/export/ogg.py b/telecaster/export/ogg.py deleted file mode 100644 index ea64182..0000000 --- a/telecaster/export/ogg.py +++ /dev/null @@ -1,135 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2007 Parisson SARL -# Copyright (c) 2006-2007 Guillaume Pellerin -# All rights reserved. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at http://svn.parisson.org/telemeta/TelemetaLicense. -# -# Author: Guillaume Pellerin - -import os -import string -import subprocess - -from telemeta.export.core import * -from telemeta.export.api import IExporter -from mutagen.oggvorbis import OggVorbis - -class OggExporter(ExporterCore): - """Defines methods to export to OGG Vorbis""" - - implements(IExporter) - - def __init__(self): - self.item_id = '' - self.metadata = {} - self.description = '' - self.info = [] - self.source = '' - self.dest = '' - self.options = {} - self.bitrate_default = '192' - self.buffer_size = 0xFFFF - self.dub2args_dict = {'creator': 'artist', - 'relation': 'album' - } - - def get_format(self): - return 'OGG' - - def get_file_extension(self): - return 'ogg' - - def get_mime_type(self): - return 'application/ogg' - - def get_description(self): - return 'FIXME' - - def get_file_info(self): - try: - file_out1, file_out2 = os.popen4('ogginfo "'+self.dest+'"') - info = [] - for line in file_out2.readlines(): - info.append(clean_word(line[:-1])) - self.info = info - return self.info - except IOError: - return 'Exporter error [1]: file does not exist.' - - def set_cache_dir(self,path): - self.cache_dir = path - - def decode(self): - try: - os.system('oggdec -o "'+self.cache_dir+os.sep+self.item_id+ - '.wav" "'+self.source+'"') - return self.cache_dir+os.sep+self.item_id+'.wav' - except IOError: - return 'ExporterError [2]: decoder not compatible.' - - def write_tags(self): - media = OggVorbis(self.dest) - for tag in self.metadata.keys(): - media[tag] = str(self.metadata[tag]) - media.save() - - def get_args(self,options=None): - """Get process options and return arguments for the encoder""" - args = [] - if not options is None: - self.options = options - if not ('verbose' in self.options and self.options['verbose'] != '0'): - args.append('-Q ') - if 'ogg_bitrate' in self.options: - args.append('-b '+self.options['ogg_bitrate']) - elif 'ogg_quality' in self.options: - args.append('-q '+self.options['ogg_quality']) - else: - args.append('-b '+self.bitrate_default) - else: - args.append('-Q -b '+self.bitrate_default) - - for tag in self.metadata.keys(): - value = clean_word(self.metadata[tag]) - args.append('-c %s="%s"' % (tag, value)) - if tag in self.dub2args_dict.keys(): - arg = self.dub2args_dict[tag] - args.append('-c %s="%s"' % (arg, value)) - - return args - - def process(self, item_id, source, metadata, options=None): - self.item_id = item_id - self.source = source - self.metadata = metadata - self.args = self.get_args(options) - self.ext = self.get_file_extension() - self.args = ' '.join(self.args) - self.command = 'sox "%s" -q -w -r 44100 -t wav -c2 - | oggenc %s -' \ - % (self.source,self.args) - - # Pre-proccessing - self.dest = self.pre_process(self.item_id, - self.source, - self.metadata, - self.ext, - self.cache_dir, - self.options) - - # Processing (streaming + cache writing) - stream = self.core_process(self.command,self.buffer_size,self.dest) - for chunk in stream: - yield chunk - - # Post-proccessing - self.post_process(self.item_id, - self.source, - self.metadata, - self.ext, - self.cache_dir, - self.options) - diff --git a/telecaster/export/tools.py b/telecaster/export/tools.py deleted file mode 100644 index 0a57c45..0000000 --- a/telecaster/export/tools.py +++ /dev/null @@ -1,96 +0,0 @@ - -# External functions - -def get_type(value): - """ Return a String with the type of value """ - types = {bool : 'bool', int : 'int', str : 'str'} - # 'bool' type must be placed *before* 'int' type, otherwise booleans are - # detected as integers - for type in types.keys(): - if isinstance(value, type) : - return types[type] - raise TypeError, str(value) + ' has an unsupported type' - -def get_cast(value, type) : - """ Return value, casted into type """ - if type == 'bool' : - if value == 'True' : - return True - return False - elif type == 'int' : - return int(value) - elif type == 'str' : - return str(value) - raise TypeError, type + ' is an unsupported type' - -def get_file_mime_type(path): - """ Return the mime type of a file """ - try: - file_out1, file_out2 = os.popen4('file -i "'+path+'"') - for line in file_out2.readlines(): - line_split = line.split(': ') - mime = line_split[len(line_split)-1] - return mime[:len(mime)-1] - except IOError: - return 'Exporter error [1]: path does not exist.' - -def get_file_type_desc(path): - """ Return the type of a file given by the 'file' command """ - try: - file_out1, file_out2 = os.popen4('file "'+path+'"') - for line in file_out2.readlines(): - description = line.split(': ') - description = description[1].split(', ') - return description - except IOError: - return 'Exporter error [1]: path does not exist.' - -def iswav(path): - """ Tell if path is a WAV """ - try: - mime = get_file_mime_type(path) - return mime == 'audio/x-wav' - except IOError: - return 'Exporter error [1]: path does not exist.' - -def iswav16(path): - """ Tell if path is a 16 bit WAV """ - try: - file_type_desc = get_file_type_desc(path) - return iswav(path) and '16 bit' in file_type_desc - except IOError: - return 'Exporter error [1]: path does not exist.' - -def get_file_name(path): - """ Return the file name targeted in the path """ - return os.path.split(path)[1] - -def split_file_name(file): - """ Return main file name and its extension """ - try: - return os.path.splitext(file) - except IOError: - return 'Exporter error [1]: path does not exist.' - -def clean_word(word) : - """ Return the word without excessive blank spaces, underscores and - characters causing problem to exporters""" - word = re.sub("^[^\w]+","",word) #trim the beginning - word = re.sub("[^\w]+$","",word) #trim the end - word = re.sub("_+","_",word) #squeeze continuous _ to one _ - word = re.sub("^[^\w]+","",word) #trim the beginning _ - #word = string.replace(word,' ','_') - #word = string.capitalize(word) - dict = '&[];"*:,' - for letter in dict: - word = string.replace(word,letter,'_') - return word - -def recover_par_key(path): - """ Recover a file with par2 key """ - os.system('par2 r "'+path+'"') - -def verify_par_key(path): - """ Verify a par2 key """ - os.system('par2 v "'+path+'.par2"') - diff --git a/telecaster/favicon.ico b/telecaster/favicon.ico deleted file mode 100644 index 859b21cd65ce1e7c8d86ba214691eb16bb0b6bab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmZ?wbhEHb6krfwI2OtP1dNP~OiWD7%*O-;?s&8@AiZEbDs?d`q2y^|(QnmTpr z^y$-Q&YU@K-n{wq=dW0?V&%$}TeoiAv17;1ojZ5!+O>Q4?mc_TOXx^?UJ?c4Y6-Fxuh!Q;n|pFDZ;{Q2`2FJ8QQ_3GWbckkc7 z|M20%*RNl{ef##~$B$pXe*OOa`|sbs{|6c<{$yd~VyI`(0mTF;P8isiHPkmXdF!gE zsj65t_tfiYc?PaL)&J3 zcd@Okj2zactljl0zRat&gWUu<*cfD*)NNM_gx)k+Equj(HFxk$!_}fqDgo@PrCcm{ zRx30aIZ1B)#^l(nT6pO?~ Mi;vqkGB8*J0Qp2iA^-pY diff --git a/telecaster/forms.py b/telecaster/forms.py deleted file mode 100644 index 8078fb8..0000000 --- a/telecaster/forms.py +++ /dev/null @@ -1,16 +0,0 @@ - -from models import * - - -class StationForm(ModelForm): - class Meta: - model = Station - - def __init__(self, *args, **kwds): - super(StationForm, self).__init__(*args, **kwds) - self.fields['organization'].queryset = Organization.objects.order_by('name') - self.fields['conference'].queryset = Conference.objects.order_by('title') - self.fields['session'].queryset = Session.objects.order_by('name') - self.fields['professor'].queryset = Professor.objects.order_by('name') - - diff --git a/telecaster/htdocs/css/telecaster.css b/telecaster/htdocs/css/telecaster.css deleted file mode 100644 index 666cf28..0000000 --- a/telecaster/htdocs/css/telecaster.css +++ /dev/null @@ -1,256 +0,0 @@ -body { - margin: 0.5em; -} - -div.header { - background-color: #030250; - color: #FFFFFF; - padding: 0.5em; - height: 42px; - font: 0.8125em/1em Verdana, sans-serif; - -moz-border-radius: 25px 25px 5px 5px; - -webkit-border-radius: 25px 25px 5px 5px; - border-radius: 25px 25px 5px 5px; -} - -div.title_main { - margin-left:42px; - margin-top:-26px; - padding: 0em; - font-size: 1.5em; - /*text-decoration: underline;*/ -} - -div.bg { background-color: #FFFFFF; - color: #FFFFFF; - margin: 0em; -} - -div.main { - clear: both; - width: 50%; - display: block; - background-color: transparent; - color: #000033; - padding: 1em; - position: relative; - font: 1em/1em Verdana, sans-serif; -} - - -div.tools { background-color: #030250; - color: #FFFFFF; - padding:0.8em; - font: 1em/1em Verdana, sans-serif; - -moz-border-radius: 5px 5px 25px 5px; - -webkit-border-radius: 5px 5px 25px 5px; - border-radius: 5px 5px 25px 5px; -} - -div.colophon { background-color: transparent; - color: #000000; - font-size: 80%; - float: right; - padding: 0.5em 0px 0px 1em; - font: 0.8125em/1em Verdana, sans-serif; -} - -div.colophon a { color: #000000; -} - -div.title { - background-color: #030250; - color: #FFFFFF; - padding: 0.5em; - line-height: 10px; - font: 1em/1em Verdana, sans-serif; -} - -div.hardware { - clear: both; - font: 0.8125em Verdana, sans-serif; - color: #000000; - position: absolute; - right: 1em; - text-align: left; - margin-top: 10px; - border: 1px dotted #999; - padding: 6px; - background-color: #eee; - display: block; -} - -div.form { background-color: #FFFFFF; - float: left; - color: #000033; - padding:1em; - margin: 1em; -} - -/* TABLE */ - -table.form { - border: 0px; - border-collapse: separate; - border-spacing: 8px; -} - -table.form label{ - font-weight: bold; -} - -table.form select,input,textarea { - font: 0.9em Verdana, sans-serif; -} - -table.hardware { - border: 0px; - border-collapse: separate; - border-spacing: 2px -} - -.warning { - color: red; - font-weight: bold; -} -.default { - color: green; - } - - - -/*--------BUTTONS---------------*/ - -.component, .component_icon, .component:hover, .component_icon:hover, .component:visited, .component_icon:visited{ - background-position: 1ex .5ex; - -moz-border-radius: 1ex 1ex 1ex 1ex; - -webkit-border-radius: 1ex 1ex 1ex 1ex; - border-radius: 1ex 1ex 1ex 1ex; - padding:.7ex .7ex .7ex .7ex; - background-color: #f9f9f9; /*#626262;*/ - color:#444; - text-decoration: none; - margin:0; -} -.component + .component, .component + .component_icon, .component_icon + .component , -.component_icon + .component_icon{ - margin-left: .1ex; -} - -.component_icon, .component_icon:hover, .component_icon:visited{ - background-repeat: no-repeat; - background-position: 1ex .5ex; - padding:4px 8px 4px 26px; /*top right bottom left - last value depends on the icon size (default=16)*/ -} - -.button, .button:visited, .button:hover{ - font-weight: bold; - border: 1px solid #e1e1e1; - white-space:nowrap; - /* border-top: 1px solid #e1e1e1 !important; - border-left: 1px solid #e1e1e1 !important; - border-right: 1px solid #e1e1e1 !important; - border-bottom: 1px solid #e1e1e1 !important;*/ -} - -.button:hover{ - border-top: 1px solid #f9f9f9 !important; - border-left: 1px solid #f9f9f9 !important; - border-bottom: 1px solid #999 !important; - border-right: 1px solid #999 !important; - background-color: #f4f4f4; /*#e9e9d9;*/ - color: #000; /*#6A0307;*/ -} - - -.list_item, .list_item:visited, .list_item:hover{ - display:block; - color:#6A0307; -} - -.list_item:hover{ - font-weight: bold; -} - -.icon_edit{ - background-image: url('../images/edit_page.png'); -} -.icon_copy{ - background-image: url('../images/copy_page.png'); -} -.icon_previous{ - background-image: url('../images/previous.png'); -} -.icon_next{ - background-image: url('../images/next.png'); -} -.icon_dublin_core{ - background-image: url('../images/dublin_core.png'); -} -.icon_cancel{ - background-image: url('../images/cancel.png'); -} -.icon_save{ - background-image: url('../images/save.png'); -} -.icon_add{ - background-image: url('../images/add.png'); -} -.icon_add_to_playlist{ - background-image: url('../images/add_to_playlist.png'); -} -.icon_login{ - background-image: url('../images/password.png'); -} -.icon_search{ - background-image: url('../images/find.png'); -} -.icon_ok{ - background-image: url('../images/ok.png'); -} -.icon_csv{ - background-image: url('../images/csv.png'); -} -.icon_playlist{ - background-image: url('../images/playlist.png'); -} -.icon_filter{ - background-image: url('../images/filter.png'); -} -.icon_delete{ - background-image: url('../images/delete.png'); -} -.icon_rss,.icon_rss:hover{ - background: url('../images/feed-icon-14x14.png') no-repeat; - background-position: 0ex .8ex; - padding:.0ex 0ex .8ex .7ex; - text-decoration: none; -} - -.icon_record{ - background-image: url('../images/stop.png'); -} -.icon_refresh{ - background-image: url('../images/arrow_refresh.png'); -} -.icon_play{ - background-image: url('../images/control_play_blue.png'); -} -.icon_archives{ - background-image: url('../images/folder_go.png'); -} -.icon_trash{ - background-image: url('../images/bin.png'); -} -.icon_stop{ - background-image: url('../images/control_stop.png'); - } - -.video { - float: left; -} - -.status { - float: right; - padding: 5px; - } diff --git a/telecaster/htdocs/images/accept.png b/telecaster/htdocs/images/accept.png deleted file mode 100644 index 89c8129a490b329f3165f32fa0781701aab417ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 781 zcmV+o1M>WdP)4-QibtN)VXQDpczE`xXAkUjh%RI>;okxb7K@0kpyQ1k_Y(|Oe7$m(^ zNYX>mI||sUbmn+c3<&FnE=4u#()KBS^SH8e)Qs5i!#lY=$-1gbH6VluzU=m=EP78&5vQ z-?+fFP-G2l&l_QzYealK$;1Rl?FkzXR&Jv@fBPNjCr#AYRyJ7UJQ0v#?)7Ott=>3`#-pV!7>9}>Q1jL)H6h&gkP@3nI=+F3nA~M>u#(n* z8T!#8oEw&-mED4!h4s!N@Jo3S7N&Q6%6l3}nlcd~X@>;uelvPsSkXIgg~e+^T1zSf z3SNj(5%jK~i8@b;C`!iy8(2_#ButL^3%VaH2WCpD^U)OZxp@C)2#hU)y+@T%ZNzJigNk%37 zz-WYJwT%teVfiEI+B*@v4ey@58(ld4VY_&5-ox`e@AKg+0U-I`y79bmuw_~y6+4rZ zBG5EdFDS+@M0OSE`>d7SUDOzKZ&h*4eB1iX7tOd9RiYtW2mQ--bUahxr1`i{RG@dM zL#}_X=DDO1{;UI$pFu=dLYT_=5d8WC-sLfjr7UO-HKMAwa=!>)kEhvuwre zuW3yF@ZxFCkI*+ad|5kOX%5zu8IQjhan)UqgSrFGA_0nQFn@Z08DSEUToCSz4Z1ls z&fDbq$T&7|6iq$_uDI$@q1_kQ@dfqk*0>{SDL6V)94@)ete)j++*>bIc9sj}Y;R1o z#OpH+Yt-^4wfv{nern^iVag8!P6q=I0_iwCeRuEs-nY*ui2wlBo{da&-rimXk_dpOx8l9Y2eXq^TiLre{gv0N zh@vQpp3E(_zQv8WAB*@mevb>S`MD?sAf3NIKIx==eZ#Jr9#7|~0H2e>)YKJ;10yn{ zb~SBXr^1(^@_cc&7(P~SnNU?q95~@CRVtL1isxZE)U%{&!=XelB6GnODxd1btErjO zj_6poZCs)d1RVpU;qKVX8HX|rHyyQURHCLW%8}-eFWR-IYhR*iQ-E&#nFI_$K^_5DwQb0QR_*>mIH#Cqd99N2l)Z|DPKCCbQ(9lp- zvu47Wa~kew3p-R8Jp8%booy=RR$@JQDF}+Z*eRMM5iCB+Uxaqp3-6bf0D%9FS^-G}e*;M)Q6>s#cP zI`Y#S($G6W`W@NI5g|L-MKl0Zmu$m^(0~^Lwo5OO~d#(vPfz%qypxm=P~KCwUk1<-E^%&v%&sfQfOPbAd^dMUz$2)JWFR zn(5E_apM_H=DRN?Tj1j{9obJa2Z=)=&L)N3y%h6eCr3~F>o%;x+TQ>p^I2c0Y>yvi zIld-=tn@%V9S}8IT_{!R5Z+_Ch0UxTYjubYFr%4GeU;lC74TEKeW=Sl5HvMAeX=Gi zUD%DrWY78$Ld*n!b75@ktedM+7b-uxz>7nb#SWC}9Rsqt73OZQ@HmbM0hR#sjmFrz z`Qn2R+;S%k^W^LfTz4f%8vIhZ??Cw@GT3qQ2$+f;Bm~?nEIi6bESWz7m0cmx39em$$Y&@l88-}q`@)p_|Tj# z*1_TN$urdYuZuK(mFK)s`?7zHi^MWe;3cvrICC;Dz(yzzbJPMi?R@k1RUUs#H=pHg zvrjkZN3JD?ns*D2owV@K;bCSR0s0c1`uAh{pXdA&89xkjaU%7W00000NkvXXu0mjf DW6MO* diff --git a/telecaster/htdocs/images/control_play_blue.png b/telecaster/htdocs/images/control_play_blue.png deleted file mode 100644 index f8c8ec683edd6a974eacc253332f903d643dbe41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 zcmV;;0y6!HP)*bxx-)TO!p6i!Q&%N5)kR|pVJuNho7M&@5o@ZpsgYXg z6pCpqAEgW*0v6~{n89ISU>M4A&V?DNy7MOQX68Ka`MBqf0l?U(ZY+X9l}VLZ)#Om- z;Wxvd@uT21RmKNz1dH$Bj0zp6>Db9B7mX*l{i7uPYA;7kd3g)QVC)rxA$;8vC|jea zS%$3%AWB_OF8f4{mJFo|55c22v$T`7VytGO85j|cC%=pBjskcjxd*)11x{77(<9$R zNrwG!M09PX(8Nd#urDkdGiz{FkfHKZhPUAguyq;A^$wKyj&8EE8)WXSvDl6Q4NN}z z2Zd#i!U*1a7=Vq#3W3jRZ6Z9$+&MVBAqrVEFbBV-XzUqFMNrFnb9RsDb%-T!q1pza zrNBj9g5~vhG_q(g8Ht^6IILQuOJK}cdY)autaf$;u_Hxz{;liNSF+ zP7JVo4aPtM&mF+{jGz3=veK}ME-bIS)D6sEz9#6p*nx(m=)Gd##2kGE&YZW%&7_NU zaJbxh3nsTeLlsIj==Xtu`3s4ZJ3jM?zzC+xEl8DG(CzhM_b>rg=Lda=hWnnX#UBVW zoG_R&W`Q?ax-3JI?gr8ns1oY(%Y_9|I!G4+85=MXv^z2{WgQJlI?w zaoVxP)O;^z5vZ zY!uIB*x&E}vNJj4{?GTJBigE^o7UKdzE#&EBXnfjM2N9qUNJ=7T*(!I*v$dVF@wV! zPcbfCO)dpCHwm6#49koVc}1IZ;f0opGWdxBx;Rl@XzG}46S&UgQ6wI6lQE987w+r= zQ{sp)?}bM^PSu zImdUlKjSCCE4u7+Z)8{a(f*WH^6Vt$sa4Pdn>Gm|hqxOd&DgzL7wR=Ny zr>K3{Pb3xpRu)a{!~pxkvN5v>H{?FlfAoQu4ArC_RK=cUva=WC?yvFKjtvbQVdguH zW&aC4ZFY(9WQu1%h2k`_XyA-}%`(_CmTH1G9&H+WxB<7lEP>07F324X&LtI=*Ebks z(O^1xbS&VonymqWF(ZPe(4cg#Lb0wAqrP?lYk_qESz>U=ricNSk8nlkTJZI`2;B0p zP~cS}qly76ue`DhoFBiW8A<6uOVzAiF)Myh40}1zPD8j{)c_{NT znF;osE(x$5WnrFL;%2<>{$AzD&vfr)$@TcfHvM#Qg`uALgat1xJn{IMSx=b0LuW4k dO#kzpe*)_`5%$M*g6RMN002ovPDHLkV1l_FIQ#$r diff --git a/telecaster/htdocs/images/desktop/128x128/apps/preferences-desktop-rotate.png b/telecaster/htdocs/images/desktop/128x128/apps/preferences-desktop-rotate.png deleted file mode 100644 index bfb895a03ca6e2977cd9a7ab5cd655e84904655d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10467 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 We+&sv+V@ZlfZ_`^xk?$+kpBaO%~zTL diff --git a/telecaster/htdocs/images/desktop/16x16/apps/preferences-desktop-rotate.png b/telecaster/htdocs/images/desktop/16x16/apps/preferences-desktop-rotate.png deleted file mode 100644 index 9462513e60fc57ee531fbb5c4f61fd5b0438e09f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1035 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvY3HEdOZj;#z{?-0ST5BIHm(>utOMPj;%e+z`*p{)5S5w z;rV264R%pUJnnq+joUaBMC2fBy1!C3k)A zYOGY;xFo8#O+d@j*&|EA!ePdzuQC{ zxT1Rx_wMidY{AZu*0yTlvK3m(yfjrl9sBa7Ke4|4|L5iB|NW>+tZaSt!os3lblp11 z6_Q!sqL$3rerryi{ljyo+{JcfO5M8K^Xt>`p7Uo6=gAviu5a{WY&e|QAZVep|Ma|l zuK)M5J>S3nvhQU97Z$;#x5H1gM5mvh@y)XNVWp6?!L6G|vzN47da?aS`4eNdkE^=6 zgj~3|1TXnqoOjW_x^=#X#Jcmrn>-4Cso#44fM-+AtTjtcI0y=IX>zRUk}Ubb&HC{$pK_MES}i?-Nyy z^VYhaSf;tl_Ys4MR1k-2pg@w$gl|<_f)uArIjC@asr|&gKUE`tPVh?Y2>NMv@^pS+ zb$`u*43VUsC$5eLpxg6IC?H`*=T?=L*FnpE#FPkNfPQg}5- zmRlT$xU6f)kJ1mEZ=bupbnWx+E0DXuIw8Npu8QB#ptJ+1L}U8tAl?b@|Msl!DUQ&( z_~HG7y@xCN_uriA_*?Z|2LH)hAeg{hqwE z{C}q<3rcTRg*^Ev|9sAI%Y5NyhyLWQy!uRTf1GtrULMmFCl2{lujWcT{wwj=Yt}M` z{b$dev-6wu#4}K&o_W)jEi4W@#6q-0{rvoot9m*b|Tx{Hg8zrKC@ z_V2G%f2AHTV>yAsYHc_rC&aVDNPHb6Mw<&;$TZYrjJP diff --git a/telecaster/htdocs/images/desktop/22x22/apps/preferences-desktop-rotate.png b/telecaster/htdocs/images/desktop/22x22/apps/preferences-desktop-rotate.png deleted file mode 100644 index 5fe835eb23be5ccdb0992a4331d924318a927cc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1508 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 DMAZch diff --git a/telecaster/htdocs/images/desktop/48x48/apps/preferences-desktop-rotate.png b/telecaster/htdocs/images/desktop/48x48/apps/preferences-desktop-rotate.png deleted file mode 100644 index 5e909be53ee77dd52ca1ebab79a64b1d73860c90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3506 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 JPDHLkV1g!V6x{#- diff --git a/telecaster/htdocs/images/drive_burn.png b/telecaster/htdocs/images/drive_burn.png deleted file mode 100644 index 80fd79f982e772844d58a90c9fdcf751c0181120..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608 zcmV-m0-ybfP)tfHeA#B@4EsZ>I@+pVj_wGl1!`;fAZ@BPyc*{%{DQ6l*Sduq6YK_q`$aad3fgM z_ekw|u=PEl%wY6A95^RJ9cwfir`*e7?3P6{#i4zSea*qf&Ng&+6F8!a!yEs&#rMg> zOSbMY{eHn3+8ew!u><|u0$y@(gU6WP*mpM{*FPp7qvaX!cXz}sg}~)M{7V417_C?E um_6W6ZUPfY#aDvu>=s~f6Xp diff --git a/telecaster/htdocs/images/drive_delete.png b/telecaster/htdocs/images/drive_delete.png deleted file mode 100644 index e6eb186651560bfda194ec72b52e1b48dea31a2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n2LP)_P+#g$MH7vfLQmHX~h5`qmw zX%SqwFr*kv!PKM2!+a za=FeGc#O|esT54pL?jaNK|vs`yWK95$s}}LC(;csU1yC(gR`g8X;_wZPA-i?K*ktk zS?27CL;|r`4Ap8C?RLAU5IaeyS*b`>Rqld4sD$ElI>l%-LO!2Iv)SBGh-o++qTlcH z0}@4am=wicfoP;@8n4S{vxF%q#7eW0(+6^D zK*hm7u-N;I^p71#?@ZXq1st#5=VS8*0!W}-F6T=oFy*6rAF+f3tUP>zh<*#FUu)Rg z*}{#Z=vf2$17g0QT){rre2<%@$58hTVEZNJ=2N(?Eo0^T7bxC|Rx6dtTHu!XQTW>L zL#T^7aPR5gEBs;!^Y+QvP5htL?kGQ3*B@Mq9elv})WnIGJGNwe+ehz0k7@48)wj)0 z+s?016qX#q(SV`dW3EU2nqBlc@2+dlhJ(XLvdflTdDin#Z|>HdSAPI_FMg8I(Y~ty O0000;h;AU9E{Nf?}n4dHXi&Fj3?{Kq#TSk zQPapp!o`EsHbz1ei)l$XP&pV;1eRsjdDDQc;nqpMyxGls@B7|+Gt9Cq9A`;5=2AwR zYPI@yI2F7lgTWZOu8-00_bC=KnM{g!j7s3-%XYiH7z_r*q5s$6GHo^+ip3)8 z^?E9s%@%|Mu6SS5G&Gw{I2?{K=`fM@jYb1ruNRR>ghZG5?*c2A%R=4n_oLlzAF)fN z5RowkS(b&m$K!#^Dd%^s_SSPi%=8=Zns;wqy$M)q7NeRl7wYR zI+*ZTt&TwA61=AtG4<&g?3h7!7(h52CQec!RjQRh2}YoAm9-Ie?!gn#Fl@iV>4iJ+ z>01~Y`gp`5!H7hbW3d>b(I{qTBbX1hFf)Gx=xw9)bPaB;3$^Q8Kog(@ zqtOZc`T|X#g2(rVtMBq|^1l4uL}ck628C6eoK6duESJl@;k8^lbjvW%ySU)n#6s#e zRNH%)dgI_SFdJl70{c4>)?aR5v+2*XNsnp!@zUME-1SGHb55>W;*NA|z4(kodJarJ z0XVPX!;_WomT6v@n4t9VVk3TQEi6lWu#6vc8;-m`*?AuOm5=!P`oVK$(hD>Cy1KoZ n?ph}A1#i|rSmOwamKFL7N2-X}^&G=H00000NkvXXu0mjf#EU~5 diff --git a/telecaster/htdocs/images/folder_go.png b/telecaster/htdocs/images/folder_go.png deleted file mode 100644 index 34a736f70261338c9bca98c38b78193740fa83a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 694 zcmV;n0!jUeP)N@Zw27r|iugjyK_i?%mf=ZN1k*q&Uedp~2B7g_+fS`hk+Nr1A{hI)z0`VHB6Nndl zX$Di6C%-U4JXr@~z-vS-U`e(1B@n-FV+JTmdRsylL39C=TOrljOR~Cct>JYCvg#mK z1ulqf0!%<`#~!NMu5Ba=9u&fmP-Zhc6E?!yaAE01t20W#1|(JmqlC- zu^GHsMqCzbhR}vI*0gbTWQ<2wA~0LlNQ8*Dc(aJuEaI~Cy?zX0(B7i0rEb>&+G>xJ z3k&o-xX8WohAjXsqHu`)jo1ugGgz-V-_eT`kMj#kXL{&TC&D=t zDS)urCatsVt!&16hZE0Sc81**wR}pC@@4w{a?#MB{`E|khgw{yHQH-JtJz=E5u9kb zz}UaL6K`V-vR#JLK(X*jEKVNlbHxH0QOXN4CTjfvGt40I|M#Ku+)Yiq8d z;L28c;TGg(*&-*FfRgVFU3!q0bKn5y+w&YMOEeLrM3go2};w-m?^(jqeZAz2= zL*$E|+nBzw5`1~&d{HnejR`pp>Gc7meprxN9t68G0wK!~R}w-lLD(()XLo=+p9zi1 z=86KRES~3g$*>K{#fON0>%{i-Rcw831>-k@nY{~UrUN@)b%g6=XPXGQk0pwNVJV+w zqhRK2*zxsX)1w8u`H8F=|Ghf>#)>;2#|sV1xT0X_I4_<*pC+(CE+r1;*Z|TI8@M$i z*d-lO3zv}$G$5CpN9eh9kKmasBji}*;vbP^#=-v_K_>cy4EBLtz6Ex%6{+9_B)^|S z!hagM#0)}%dj*eV={z3?zdeTC)u(vt>V&z^2#3Rg-flhS-!~vKtwevfR?M0Edok2? zHY=CQ4-^D8DJSp@k{b>@wzk4zu^<|aA{-9Gfx%$lO768pBDvDi(!x+d zeSQ6SO-&82P$*DWS0_Sanxi!;puHu6!{kw^RP$!DnQ=Ou+itfTcDo&IZEa|8Zx>^l zqcz$?drJi6<>mXTtE;POYipO9nwpXtjfNv+)M|Aj;S`DEG)HT+hxYyg@Y?10VPWjL P00000NkvXXu0mjfBPD6B diff --git a/telecaster/htdocs/images/ipod_cast.png b/telecaster/htdocs/images/ipod_cast.png deleted file mode 100644 index 6f6d3406cb1062c517d384639dd27c4cc22eb48d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 711 zcmV;&0yzDNP)D!zG=Q}^X1IIGPP@%!z!@w<+I){Owi4hXU{7EgS}yl zc|){1MO6fra^Nn5rN9@UeQ+WWuYp1y7AD>y#AR;0_H6)^>LFI00w6c8@D^I}-8gM` zEiQFih+>?Dsa7V36-q&PdkRr}vYO!I%cG!&i0^b*o=}v$gIIDN>EFi$7uFJdKzL74 zejS1MNqwV3W=NrfrVz^SBARq4&VpBJM+=FO--#s~DCEJhAym^$G2e+0XHb4Svt#|# z?RS_S>9SGY>fMDo2;46OrQ3vSisXLvu{6^{KHI|dk3QnNipbJ+lsm}cv?RI>+)^rp za2votPy%0wkv(lWOY8B)+VdS+>rSN`i*4Im0{)d?5lAKy2@;9KM)=}? t0ZOTKI-PD)O4XNtV67Ik)}J@}{{WOyO8m_F|55+|002ovPDHLkV1m*nKHUHS diff --git a/telecaster/htdocs/images/logo_telecaster_wh.png b/telecaster/htdocs/images/logo_telecaster_wh.png deleted file mode 100644 index d39bc682c347ab1dcddc62e0d8b0ff75f99e530b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1334 zcmV-61Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01Ybu01Ybvm~rf@00007bV*G`2igJ% z0V)~F$KbgD00g#4L_t(o!@Zb)NS$RA$G`V_y?0S7ZEd+9^@p1>H*5w8Ljs4ySgW9t zs6`OV*~Be}g0x@@MAHndp%}CoMYW*eU)4WB-(JZJl}HyfKrqqNxLO&mvpbB)sogo3P`#vX~g_JE$ItM zS5w&};1l3_Nv}#Om$XjOB?DkY(wG@Y+F(Ymq(>y(E~!t_DM=qnn)AFP;AN}^-UeoX z3&1Ntp2xYFz%JkfFa=x!o&y42=6l)TSzsFY6?g#%dIaV+?g5Sgv%vR2Zn8N`9dU-F zHzn0cIx4AEQq19#C26Omd`WA~n3Xgt>58NuB%N`Ymn-SGq-~O(l62PZ5w8Tk2L1*f zb=ZQyi@-O)JjrDe_y~B&u}%m$ZocMgevUW@d=5l`O%B`Rz)z$m7H|s4lk}i%%^qVb z@(QrU1oKu$pua~Nq^YTC&bID;AZC)z(-(XmSO9k0bgO{VX#z)l-RkOUEX%ThYOh&* zmx-67HeDDvn+|Y|jg5=o4jw#6EEc1xstP~XOfxV7tgz|cPY1Y$hK5BT6%`f4VlgT! zD;IT=ijo0b3;Y9AI_|$^OKWTEOXQ>Zn)ZphK3j)AD3lW>gwupb7@Wlu--i2ab=z#P%|?#)YsQXb8>PvN>VTwR6#+( zhMu0D0jKZq@G#xo-HDbup9tWmz{ymOcY1o7!otG3IBj!|!-o$)jPbO#3qwXm=-mCUcby?xpTWB z^u*~yhjF-dhU*=q=VW%%ZuskH2pwcpw$9guWH(mM&L*!@ei--ab!U)Bxj z;lJ1iT=m--P1o@1m~Aq7)*R~*KY_lS;kSvtQPRtjo|d#p(s@Zg8Xh-dN{6{LK7r@_ s0<_BmrhU8BboAFt`a{ygX#}|UUkd_MPe3rfBLDyZ07*qoM6N<$f{7_`)&Kwi diff --git a/telecaster/htdocs/images/rotate_desktop.desktop b/telecaster/htdocs/images/rotate_desktop.desktop deleted file mode 100644 index 4182a90..0000000 --- a/telecaster/htdocs/images/rotate_desktop.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=Rotate Desktop -Exec=~/bin/rotate_desktop -Icon=preferences-desktop-rotate -Type=Application -Comment=Rotate Desktop for 180 degrees with the touchscreen -GenericName=Rotate Desktop -Categories=Utility;Accessibility; -Terminal=false - diff --git a/telecaster/htdocs/images/stop.png b/telecaster/htdocs/images/stop.png deleted file mode 100644 index 0cfd585963d255190b8855a7689e8da1c4d7cf6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 700 zcmV;t0z>_YP)*?Fk0YVb%?UEFajs1S?+YtYiPrjx0+ z+4YbyJXwz!SX#yqTlhtNQ%Ku9=RNm$j)&+(}lZ!UGGp|@|O z09YA#-dR#rIaGe;MBLe!ht*}!c?U}6YT!dfHDO%~>xtx&Klk-^WB==sC_vP4ddg4L z#GN10u$+QGf$!(i3&8VpF6O6+ef~&gQ#>AVqCJH_utvKMAuOeG%3%mn<<%9)yb~#4 zHc70e5sYyQ03$?zFUko7D1Bg1=6jXvg#bUm1b(pVKuC*}koEKGdj<=zdM#RWsl+kfRf;OU^G_BQh+Fc$z&F_AHuQYu(b)aq=H_Fx idDl8IBmWBc*Z2i=4uSP&;Q8VJ0000pHs{AQG2a)rMyf zFQK~pm1x3+7!nu%-M`k}``c>^00{o_1pjWJUTfl8mg=3qGEl8H@}^@w`VUx0_$uy4 z2FhRqKX}xI*?Tv1DJd8z#F#0c%*~rM30HE1@2o5m~}ZyoWhqv>ql{V z1ZGE0lgcoK^lx+eqc*rAX1Ky;Xx3U%u#zG!m-;eD1Qsn@kf3|F9qz~|95=&g3(7!X zB}JAT>RU;a%vaNOGnJ%e1=K6eAh43c(QN8RQ6~GP%O}Jju$~Ld*%`mO1pIO@l#-%@K+Q7zAyIUxr7=;KLsPe99&9Qy zmp_aWYb=E&ic)qE1ceaTL3I)s3+v0Pdzpnl)xpCDFYk3f*Ymue2{3J{X-|sELAYmu z=`Mqi(_pe~fr(oVM(R_x-rovW3XC#01TV%_L0BAvr#_hKf!+|yzTW7{?3 zIuq0Vz);x1M>XE7-^4 zB)oZq-|zSSd<|RjL3Q0FaG93$Sb#=w6_iQ0NQ>FM@oa+ksPjrN7+e#)=Jk5tx!vxB zO+TG2$)d_PZTpo~g1ZG9e0&b?=MikQx3}AOy1Ns6Sn&5>og;!Hg4gVJ`{#y+hUEVS z2o4GUBDiwY}B+wa2=)lh*=g2T3C=Dq fF3wcNZJhl8^(M*LyGLEt00000NkvXXu0mjfpmtoM diff --git a/telecaster/htdocs/images/transmit_add.png b/telecaster/htdocs/images/transmit_add.png deleted file mode 100644 index b7fd4e685f6069f24879e9f0e381bc410832a85d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 803 zcmV+;1Kj+HP)}axRi;}=4r+) z3SP6qaP>4p4@~rygl|5-8O{?hz+@M^a!I*irXQX=V9WwN`2n1{d0PXGsKiQ-wk!bGP`tWfAL4Wq9pM0Aa!>!&@_k3G$ZH8})ZLKqDf z6r6I4DxE^*iAW72CNsV^(KD;Mdin}N>CT(uX*qP|LT8q|Z-X^{j{38qRO|H;0hg7sWIJD9oKUIFk%LU;cqpfyM$l1 z?95f0L82SLaSPGaO-)V3`Fy@e(bdrq3*|=wlpYMCC;~ciBw*hUjp#1ndnAiVSGTLh znyBi2qswqg;NM=a_ZLkGXGHfC_oATSfR@7jt5+-DyP%Qne&BIFq8kw1V9||Hw=1xN znPK?o!Rd6`4UNgghQ_3y8MPNlHR_f-OQY2Qxq>y>Ai5c{m>p|Bo4`9|@`Bs#UKV({ z+*&YS)}6|eSqn2?Jk*V3kysZ+sv&ehv*oWWC2*6#3g2JC*D0=7p2qdYjO$%J>Qm!Q zr_OtmquIL_w}TG}{70Q^x7&R-o6UE=D4N09R@OfQuPti8*69L!1zr@mb**Qa%46BP h1FE*vy!x&7{{lR##&^9e`^EqO002ovPDHLkV1lG4b!Y$p diff --git a/telecaster/htdocs/images/transmit_blue.png b/telecaster/htdocs/images/transmit_blue.png deleted file mode 100644 index 7b1142fc70adfd598ce6eac581421d7e6295f370..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 814 zcmV+}1JV46P)^~)@W#UgN8qC(979%Vy9NAeJn`# zSw2!>g&{fNR2$Okoji4(4lt5P$>r&q16P0#(CAS`X1XUkTWj$WH+~m^i1nA!c54U2@ zzUeSE3@r(@mOzU7Ss)3zO6X49?eVdR`>f= zD(&<}w=25V_BpD%QfK~{4*0vpV)<6BAI*U7!YSn(9anIo^h$1Lw4>$RCWGxdm8_qj z8-Z>jbWcRL3)o3FSHo3#4@0T!b!F!4__T7a7X3qJoMEqHkXET~kf2YcP!3qAt)$FI)g zfX4xE%Ve@IB_$;X{~G{!1n^hDt+6w}2Edy|MMdmC0|1`~><4@={vu#`et!O#R4P65 s*8sp^b=iB(8ZE$Cxw*NSsD#+rPu4uZkAluh`2YX_07*qoM6N<$g1stv`v3p{ diff --git a/telecaster/htdocs/images/transmit_delete.png b/telecaster/htdocs/images/transmit_delete.png deleted file mode 100644 index 3d72be2a385aa6afa5b281c13484cf3d90b31509..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 827 zcmV-B1H}A^P)ekg)Uh$P6M7p$3e-P5^%^+?xyvUjfULliT5YM76F4isfFHVDK9*4g2!%XFN6B*Af7DCpQ@vNCUc%g&VBcXI4QMNi;bDnJ*DdLIMWZQy5shaeM7Kb6JE_U+#I?VGid_*n zlNM1Lui=p?icA`X8&)XXx7ksvMbED5nrXDor_Rzx%SEWof?J2=eGDoR`zYBypJKCF zLg2<8C|GS%ME4b)HKViDpD>DU9p3YZu7}E06W0<=qU*t(E?r~mC|Ymi!WzU3a-v@- zqB~5dY}u2g9~wkAh&uz(H3b5J1XWd6h^~p!IJmerNd8I#XO_dwBNDLqt0KC?s8zC< zgZg%jRHW#-1JoYfDDZE;-~Ws9q-~=6j=UJKE;W*~WOTH%QG<$X_cgb(5#6BZhKp{j zzFmRcJomwydw4t^mzuipR7XPO2fsNi)E*bE^<^y317w7XT}MSXT^18L_SpoUEu9Cw zUT;X?koVlaZ@tIY4G*>02)(?^k6H_X!!aX0$up~!Nx!m`z~usKeCmOZ0a|v>At*2< zvVH3;xE#f&qD}ZV8~Ub#R|!0#cXqj4s?+II{pRU}o;L9R^CfRC`Z$vU1ojI&B=C)~ zvz8q*e|)bx00R9ysqk6qU4{YQ7DN9;I8NYxfzSSb{wQT$eplMEkq_1=22M}sZQ3** z#D{5jw-|E91qfUzaKco3QBxM2y0dl0M_pSwzt>^?{0|*1#N18>$qoPj002ovPDHLk FV1iAqe^3Ab diff --git a/telecaster/htdocs/images/transmit_edit.png b/telecaster/htdocs/images/transmit_edit.png deleted file mode 100644 index eb9a3dd593055d8fd4fde39679d2845bfc27f857..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 848 zcmV-W1F!svP)k7R5;6p zl3h%jWf+FPgoK2|WJfztW3~|@Mx95@cm$)1#$hld8v!Mv87aty5y)6sfdT;niq)#r zvI=Zz3&F1AXGM^(Rah9KN){MD5xql~|FQAII6~;OxZW!%=>vrfjgR4NrnVY}6 zV89wq|G6H99dOenn=Q~?gG_~v5@^#wrvW@4L%SZnOzXjt9R5#%$6~@OaHycSHXxuz zbR!;2YCaW#O{>{-Bn79NQ<>?kVzluU#>~&93v52fx1R+VZjp)A0XoX|(O&eJ=vIpE z5RU92Y$qz0x}H9S9ME1)$O zT28X%N?~=PWZVDiWtRJEQODZ|%nvegUi*h4y3-6f?w!qbIzn_W;x31#bSKu-xK-z& zg4K!Q?Vvh{`cn?Kzk81#>={fpq@x;Mm{CO6&yd`*Q>Hnx!$eob{w|z59yi%{s(f|) zEJ5E5wr1bPw~)sAl%9nzVo@(>K_9uMh_0W(MzCu`w;Mry3e+d9-25cQu>8I5KAev4 zmpA!+qKH|uX5D9a=C7ksd|*S7+nwQ30ivr?mlTdEA-22X@ncipoDK%nYxw3exV!Kc zYhp5EK5}>V!xy6jT%;x@R4}Pf|Hk{Go5|;idqPjvko{D~WVfEN9ute+WVYtgxIJ3P zk9F}Y)5ez~A3SaGfjCLBvh!;?KR5#G^GsWhkvG=Kg@Cwq(1yx_Yy;v^46G1u2L325a7Vma8=h!7E11fLnJkQeeBl z8-<01ZU0-~cDrA5I-QF)o2_`~MuE%n^78s~a&lh&&jNw10>A#SvxXvYVpdjGf+Xzk awLby|YpCk5}c2Js~YM`9qo4TXYEl}>_8GtDHExt)FXIcM+fLqIzDV7;yNufj-%8896dxBf(rBK;5UT)oM+zt>(+FuO&~Y*I!aB_-5bY^12z~1tpDBqa5h1r2Wl0lEc{9ojPl~QfenCC?-TFN z02VR5X~-XHx5$FE0h8^nMJnVU7z6G={;ELGVwl#>ViVbU6^nM z6`Vwej}b`F@*JLc4=cQ#K>owPJr2c-3LWl^q5NaSdmX%+AiYDFAR-E{(AArvu>!UQ zvDALN)uTxHC{iAxd~Jr!I~ z{X({JY(!&`@}D3Y0@+gdjRTDT)IYm@Z2X~3|HhK?vXkiRLDkRFH+&qa%}L|v5{vTy zi!r?BDMVEe$ZvS%YyjkDXJ zV~l_O2^;Wzf09O_tG_2sqSr&!uY=L3=6NzBC#=FRlkd!L8F+Z#t8)!|WAV()%#bgd zugKDMFzsPFqPX}|f!rKuyrXoJ!E|Iix8XboB`w8j{7$A9B{rVyOPF>n9?002ov JPDHLkV1m^Io}B;y diff --git a/telecaster/htdocs/images/transmit_go.png b/telecaster/htdocs/images/transmit_go.png deleted file mode 100644 index 10137e55cada13d8591c84070a0998b4ae2c2bef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 842 zcmV-Q1GW5#P)L|NP$Peb4zTfbw6BwM9vp8L_@# ztVP3P(Rf(@g5fJ>`Y%Q;Jiibw5O9WPy)ZQ-<%ZXTFyVmF7I0mdLCr5%95B|VWAw%_ zlil#jC5NqWzZU5VgXPd)1Va~LWeNZzpG- z9($&dj&u!|ggJ7-vfn%(Fw(M#CruiYJ<_p8W3VEEfzoB7TP?aix^sQlGpey2U&f83 z2(BO0P-TibgGTMnjS7#=7Q7vzX9?;W87K;;uV9*cRnVIcJ!j;39&CrFY1$V~z0oKk za4QX}W6X-^zQfl&KbxyiFS>oWFC)4tZO05WA2x`tiX%(9#`RGbtEX}cVg@BqZxqp; z#V1=<^Mfx#M0W;94x(%D`~8VtuXm&98j9?(WOl|t#pV!7*Msw{1g!a@i0&-jc3Dhj zaJzbJDM8&&^qO`H{L|y{{Gc@{;aq!6;IjJ!DK>#i*3OSs7Wq|??SA0y1w?m7bakQ| z7u>GNxd&5sEV=e=WVA=ml?^1L`Wq?iJ48amO6F>}1_NXS+i{cVX31j0{(Ls+ygbjb zgTYs=+n8|?L4uy_jTdRj-0b1&O#LbX6y z3il~0?`2~fuOjXCZq{8=W|xAa-EMav_2vfdJh$MSG}Gm)qhq30Le5|vuO!QvKxDb{ zHoRETFA5OYqpIrnBi1!@`x?Uo@eL~iyXwQ{(mQw3I#xl3V=ocq%G9c2C3Mkc68M0? zAMJK~*}~w>Rl08{yW&|}68c_X-IBLa;5LC1m)eUce_mZ0!s(ohgW1{HA%EWg0w992 U9AQtx`2YX_07*qoM6N<$g6IB+8vpa8B{-MRO+d-q3;Nq=BQ5k|pUEm)WqMHu)e1HsCoBnZl&D2fWC zaQI+^Ypcj~qlqjN+KQ~b2pMEyMH{Ql+1>s2yE7NkMta~2=N!)coZtD~5&$KI!t?Ad z$MG3K5aJfgx?{!872ITuZRI#lqksTdtyb{7RJQ~`I$^U_K{Co%zhNU}Spi{>7Y)dA z2T(yWOq>p(RuxZ;w1ML7gxm{mzWemI`nN(<|yr*`feZQuYV#H)Ari z1=G>vINi|>i=~44z?}aDs8rU})cijABZaAtpP*_$DD;f_AnVU~YcQ}?MFF~@lnxDf zyNq(_WL&)Po|mVtd(wFiQob0&DT1hhg-xfS-QxYqH-fm1@dyFt8i e#x0i4_uw}&{+U-AleQoL0000l0ldN diff --git a/telecaster/htdocs/js/application.js b/telecaster/htdocs/js/application.js deleted file mode 100644 index 14b4d10..0000000 --- a/telecaster/htdocs/js/application.js +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright (C) 2007-2011 Parisson - * Copyright (c) 2011 Riccardo Zaccarelli - * - * This file is part of Telecaster. - * - * TimeSide is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * TimeSide is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with TimeSide. If not, see . - * - * Authors: Riccardo Zaccarelli - * Olivier Guilyardi - */ - -/** - * Class for telemeta global functions. - * Note that the dollar sign is a reserved keyword in some browsers - * (see http://davidwalsh.name/dollar-functions) - * which might be in conflict with jQuery dollar sign. - */ - - -/**GLOBAL VARIABLE DICTATING THE REFRESH DELAY, IN MILLISECONDS:*/ -var _REFRESH_TIME_INTERVAL = 5000; - -/***************************************************************************** - * json(param, method, onSuccesFcn(data, textStatus, jqXHR), onErrorFcn(jqXHR, textStatus, errorThrown)) - * global function to senbd/retrieve data with the server - * - * param: the data to be sent or retrieved. - * param will be converted to string, escaping quotes newlines and backslashes if necessary. - * param can be a javascript string, boolean, number, dictionary and array. - * If dictionary or array, it must contain only the above mentioned recognized types. - * So, eg, {[" a string"]} is fine, {[/asd/]} not - * - * method: the json method, eg "telemeta.update_marker". See base.py - * - * onSuccesFcn(data, textStatus, jqXHR) OPTIONAL --IF MISSING, NOTHING HAPPENS -- - * A function to be called if the request succeeds with the same syntax of jQuery's ajax onSuccess function. - * The function gets passed three arguments - * The data returned from the server, formatted according to the dataType parameter; - * a string describing the status; - * and the jqXHR (in jQuery 1.4.x, XMLHttpRequest) object - * - * onErrorFcn(jqXHR, textStatus, errorThrown) OPTIONAL. --IF MISSING, THE DEFAULT ERROR DIALOG IS SHOWN-- - * A function to be called if the request fails with the same syntax of jQuery ajax onError function.. - * The function receives three arguments: - * The jqXHR (in jQuery 1.4.x, XMLHttpRequest) object, - * a string describing the type of error that occurred and - * an optional exception object, if one occurred. - * Possible values for the second argument (besides null) are "timeout", "error", "abort", and "parsererror". - * ****************************************************************************/ - -var json = function(param,method,onSuccessFcn,onErrorFcn){ - //this function converts a javascript object to a string - var toString_ = function(string){ - if(typeof string == "string"){ - //escapes newlines quotes and backslashes - string = string.replace(/\\/g,"\\\\") - .replace(/\n/g,"\\n") - .replace(/"/g,"\\\""); - } - var array; //used for arrays and objects (see below) - if(typeof string == "boolean" || typeof string== "number" || typeof string == "string"){ - string = '"'+string+'"'; - }else if(string instanceof Array){ - array = []; - for(var i = 0;i :'+line.value+'\n'; - } - s += '' - var wrapper = doc.getElementById('server_status_table_wrapper'); - wrapper.innerHTML = s; - }, - function(){ - var doc = document; - var wrapper = doc.getElementById('server_status_table_wrapper'); - s = 'NOT connected'; - wrapper.innerHTML = s; - } - ); - }; - refresh(); - setInterval(refresh,d); -}; diff --git a/telecaster/htdocs/js/jquery-1.6.min.js b/telecaster/htdocs/js/jquery-1.6.min.js deleted file mode 100644 index c72011d..0000000 --- a/telecaster/htdocs/js/jquery-1.6.min.js +++ /dev/null @@ -1,16 +0,0 @@ -/*! - * jQuery JavaScript Library v1.6 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Mon May 2 13:50:00 2011 -0400 - */ -(function(a,b){function cw(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function ct(a){if(!ch[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ci||(ci=c.createElement("iframe"),ci.frameBorder=ci.width=ci.height=0),c.body.appendChild(ci);if(!cj||!ci.createElement)cj=(ci.contentWindow||ci.contentDocument).document,cj.write("");b=cj.createElement(a),cj.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ci)}ch[a]=d}return ch[a]}function cs(a,b){var c={};f.each(cn.concat.apply([],cn.slice(0,b)),function(){c[this]=a});return c}function cr(){co=b}function cq(){setTimeout(cr,0);return co=f.now()}function cg(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cf(){try{return new a.XMLHttpRequest}catch(b){}}function b_(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){name="data-"+c.replace(j,"$1-$2").toLowerCase(),d=a.getAttribute(name);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(e){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?g=[null,a,null]:g=i.exec(a);if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
a",b=a.getElementsByTagName("*"),d=a.getElementsByTagName("a")[0];if(!b||!b.length||!d)return{};e=c.createElement("select"),f=e.appendChild(c.createElement("option")),g=a.getElementsByTagName("input")[0],i={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.55$/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:g.value==="on",optSelected:f.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},g.checked=!0,i.noCloneChecked=g.cloneNode(!0).checked,e.disabled=!0,i.optDisabled=!f.disabled;try{delete a.test}catch(r){i.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function click(){i.noCloneEvent=!1,a.detachEvent("onclick",click)}),a.cloneNode(!0).fireEvent("onclick")),g=c.createElement("input"),g.value="t",g.setAttribute("type","radio"),i.radioValue=g.value==="t",g.setAttribute("checked","checked"),a.appendChild(g),j=c.createDocumentFragment(),j.appendChild(a.firstChild),i.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",k=c.createElement("body"),l={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(p in l)k.style[p]=l[p];k.appendChild(a),c.documentElement.appendChild(k),i.appendChecked=g.checked,i.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,i.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
",i.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
t
",m=a.getElementsByTagName("td"),q=m[0].offsetHeight===0,m[0].style.display="",m[1].style.display="none",i.reliableHiddenOffsets=q&&m[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(h=c.createElement("div"),h.style.width="0",h.style.marginRight="0",a.appendChild(h),i.reliableMarginRight=(parseInt(c.defaultView.getComputedStyle(h,null).marginRight,10)||0)===0),k.innerHTML="",c.documentElement.removeChild(k);if(a.attachEvent)for(p in{submit:1,change:1,focusin:1})o="on"+p,q=o in a,q||(a.setAttribute(o,"return;"),q=typeof a[o]=="function"),i[p+"Bubbles"]=q;return i}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[c]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||"set"in c&&c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b=a.selectedIndex,c=[],d=a.options,e=a.type==="select-one";if(b<0)return null;for(var g=e?b:0,h=e?b+1:d.length;g=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex",readonly:"readOnly"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c]||(v&&(f.nodeName(a,"form")||u.test(c))?v:b);if(d!==b){if(d===null||d===!1&&!t.test(c)){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;d===!0&&!t.test(c)&&(d=c),a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.getAttribute("value");a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),f.support.getSetAttribute||(f.attrFix=f.extend(f.attrFix,{"for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder"}),v=f.attrHooks.name=f.attrHooks.value=f.valHooks.button={get:function(a,c){var d;if(c==="value"&&!f.nodeName(a,"button"))return a.getAttribute(c);d=a.getAttributeNode(c);return d&&d.specified?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=Object.prototype.hasOwnProperty,x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function J(a){var c=a.target,d,e;if(!!y.test(c.nodeName)&&!c.readOnly){d=f._data(c,"_change_data"),e=I(c),(a.type!=="focusout"||c.type!=="radio")&&f._data(c,"_change_data",e);if(d===b||e===d)return;if(d!=null||e)a.type="change",a.liveFired=b,f.event.trigger(a,arguments[1],c)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){return a.nodeName.toLowerCase()==="input"&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(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,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!be[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[];for(var i=0,j;(j=a[i])!=null;i++){typeof j=="number"&&(j+="");if(!j)continue;if(typeof j=="string")if(!ba.test(j))j=b.createTextNode(j);else{j=j.replace(Z,"<$1>");var k=($.exec(j)||["",""])[1].toLowerCase(),l=be[k]||be._default,m=l[0],n=b.createElement("div");n.innerHTML=l[1]+j+l[2];while(m--)n=n.lastChild;if(!f.support.tbody){var o=_.test(j),p=k==="table"&&!o?n.firstChild&&n.firstChild.childNodes:l[1]===""&&!o?n.childNodes:[];for(var q=p.length-1;q>=0;--q)f.nodeName(p[q],"tbody")&&!p[q].childNodes.length&&p[q].parentNode.removeChild(p[q])}!f.support.leadingWhitespace&&Y.test(j)&&n.insertBefore(b.createTextNode(Y.exec(j)[0]),n.firstChild),j=n.childNodes}var r;if(!f.support.appendChecked)if(j[0]&&typeof (r=j.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV;try{bU=e.href}catch(bW){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bX(bS),ajaxTransport:bX(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?b$(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b_(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bY(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bY(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bZ(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var ca=f.now(),cb=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+ca++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cb.test(b.url)||e&&cb.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cb,l),b.url===j&&(e&&(k=k.replace(cb,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cc=a.ActiveXObject?function(){for(var a in ce)ce[a](0,1)}:!1,cd=0,ce;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cf()||cg()}:cf,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cc&&delete ce[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cd,cc&&(ce||(ce={},f(a).unload(cc)),ce[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ch={},ci,cj,ck=/^(?:toggle|show|hide)$/,cl=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cm,cn=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],co,cp=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cs("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a=f.timers,b=a.length;while(b--)a[b]()||a.splice(b,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cm),cm=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cu=/^t(?:able|d|h)$/i,cv=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cw(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cu.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="
";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cv.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cv.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cw(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cw(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/telecaster/htdocs/video-js/LGPLv3-LICENSE.txt b/telecaster/htdocs/video-js/LGPLv3-LICENSE.txt deleted file mode 100644 index 65c5ca8..0000000 --- a/telecaster/htdocs/video-js/LGPLv3-LICENSE.txt +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/telecaster/htdocs/video-js/README.md b/telecaster/htdocs/video-js/README.md deleted file mode 100644 index f3bacb2..0000000 --- a/telecaster/htdocs/video-js/README.md +++ /dev/null @@ -1,153 +0,0 @@ -Video.js - [HTML5 Video Player](http://videojs.com) -================================================== -Version 3.0 - ---- -Version 3 is almost a complete rewrite of the previous versions of Video.js. New features includes: - - - HTML/CSS Controls and API now work for both the HTML5 and Flash versions. - - Custom Super-lightweight Flash Fallback - - Embed Code is much simpler. - - No more "vjs-box" div required, just use the video tag. - - No more embedding of Flash fallback within the video tag HTML. - ---- - -View [videojs.com](http://videojs.com) for a demo and overview. - -Video.js is an HTML5 video player that uses the HTML5 video tag built into modern browsers, and uses javascript to add custom controls, new functionality, and to fix cross browser bugs. For browsers that don't support HTML5, it will fallback to a Flash player. - -View demo.html for an example of how to use it. - -Originally based on [this tutorial](http://blog.steveheffernan.com/2010/04/how-to-build-an-html5-video-player/). - -Contributors (Github Username) ------------------------------- -heff, dz0ny, sentientbit, tvdeyen, brandonarbini, gordonbrander, Shraymonks, albertogasparin, sandaru1, nicholasbs, majornista, Fredust85, @wonderboymusic, ellis-, emirpprime, eirikb, mbrubeck - - -Getting Started ---------------- - -### Step 1: Include the Video.js Javascript and CSS files in the head of your page. -Change the file urls to point to the files on your server. - - - - - -### Step 2: Add an HTML5 video tag to your page. -Use the video tag as normal, with a few extra pieces for Video.js: - - 1. The 'data-setup' attribute tells Video.js to automatically set up the video when the page is ready, and read any options (in JSON format) from the attribute. - 2. The 'id' Attribute: Should be used and unique for every video on the same page. - 3. The 'class' attribute contains two classes: - - 'video-js' applies styles that are required for Video.js functionality, like fullscreen and subtitles. - - 'vjs-default-skin' applies the default skin to the HTML controls, and can be removed or overridden to create your own controls design. - -Otherwise include/exclude attributes, settings, sources, and tracks exactly as you would for HTML5 video. - - - - -### Step 3: Nada! -That's all it take to get started. See the [docs](http://videojs.com/docs/) for more advanced uses. - - -Changelog ---------- -3.0 - -- Complete rewrite -- HTML/CSS Controls and API now work for both the HTML5 and Flash versions -- Custom Super-lightweight Flash Fallback -- Embed Code is much simpler. - - No more "vjs-box" div required, just use the video tag. - - No more embedding of Flash fallback within the video tag HTML. - -2.0.3 - -- Feature: Made returning to the start at the end of the movie an option ("returnToStart"). -- Feature: Added loop option to loop movie ("loop"). -- Feature: Reorganized player API and listeners. -- Feature: Added option to disable controls. controlsEnabled: false -- Feature: Setup method now has a callback, so you can more easily work with the player after setup -- Feature: Added listeners for enter/exit full screen/window. -- Feature: Added a VideoJS.player(id) function for getting the player for a video ID -- Changes: setupAllWhenReady is now just setupAll (backward compatible) -- Fix: Check for Android browser now excludes firefox and opera - -2.0.2 (2010-12-10) - -- Feature: Rewrote and optimized subtitle code. -- Feature: Protecting against volume ranges outside of 1 and 0. -- Fix: Bug in Safari for Mac OS 10.5 (Leopard) that was breaking fullscreen. - -2.0.1 (2010-11-22) - -- Fix: Issue with big play button when multiple videos are on the page. -- Fix: Optimized play progress tracking. -- Fix: Optimized buffer progress checking. -- Fix: Firefox not showing Flash fallback object. - -2.0.0 (2010-11-21) - -- Feature: Created "behaviors" concept for adding behaviors to elements -- Feature: Switched back to divs for controls, for more portable styles -- Feature: Created playerFallbackOrder array option. ["html5", "flash", "links"] -- Feature: Created playerType concept, for initializing different platforms -- Feature: Added play button for Android -- Feature: Added spinner for iPad (non-fullscreen) -- Feature: Split into multiple files for easier development -- Feature: Combined VideoJS & _V_ into the same variable to reduce confusion -- Fix: Checking for m3u8 files (Apple HTTP Streaming) -- Fix: Catching error on localStorage full that safari seems to randomly throw -- Fix: Scrubbing to end doesn't trigger onEnded - -1.1.5 (2010-11-09) - -- Feature: Switched to track method for setting subtitles. Now works like spec. -- Feature: Created "players" concept for defining fallbacks and fallback order -- Fix: Android playback bug. -- Fix: Massive reorganization of code to make easier to navigate - -1.1.4 (2010-11-06) - -- Feature: Added loading spinner. -- Feature: Improved styles loaded checking. -- Feature: Added volume() function to get and set volume through the player. -- Fix: Fix issue where FF would loop video in background when ended. -- Fix: Bug in Chrome that shows poster & plays audio if you set currentTime too quickly. -- Fix: Bug in Safari where waiting is triggered and shows spinner when not needed -- Fix: Updated to show links if only unplayable sources and no Flash. -- Fix: Issue where if play button was loaded after play, it wouldn't hide. - -1.1.3 (2010-10-19) - -- Feature: Width/Height functions for resizing the player -- Feature: Made initial click & hold trigger new value on progress and volume -- Feature: Made controls not hide when hovering over them -- Feature: Added big play button as default starting control. -- Fix: Removed trailing comma that was breaking IE7 -- Fix: Removed some vars from global scope -- Fix: Changed a document.onmousemove to an eventListener to prevent conflicts -- Fix: Added a unique ID to FlowPlayer demo object to fix a FlowPlayer bug. Thanks @emirpprime. -- Fix: Safari error on unloaded video - -1.1.2 (2010-09-20) - -- Added a fix for the poster bug in iPad/iPhone -- Added more specificity to styles - -1.1.1 (2010-09-14) - -- First Formally Versioned Release - -1.0.0 (2010-05-18) - -- First released diff --git a/telecaster/htdocs/video-js/demo.html b/telecaster/htdocs/video-js/demo.html deleted file mode 100644 index a8393af..0000000 --- a/telecaster/htdocs/video-js/demo.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - Video.js | HTML5 Video Player - - - - - - - - - - - - - diff --git a/telecaster/htdocs/video-js/video-js.css b/telecaster/htdocs/video-js/video-js.css deleted file mode 100644 index c2ac1bc..0000000 --- a/telecaster/htdocs/video-js/video-js.css +++ /dev/null @@ -1,427 +0,0 @@ -/* -VideoJS Default Styles (http://videojs.com) -Version GENERATED_AT_BUILD -*/ - -/* -REQUIRED STYLES (be careful overriding) -================================================================================ */ -/* When loading the player, the video tag is replaced with a DIV, - that will hold the video tag or object tag for other playback methods. - The div contains the video playback element (Flash or HTML5) and controls, and sets the width and height of the video. - - ** If you want to add some kind of border/padding (e.g. a frame), or special positioning, use another containing element. - Otherwise you risk messing up control positioning and full window mode. ** -*/ -.video-js { - background-color: #000; position: relative; padding: 0; - - /* Start with 10px for base font size so other dimensions can be em based and easily calculable. */ - font-size: 10px; - - /* Allow poster to be vertially aligned. */ - vertical-align: middle; - /* display: table-cell; */ /*This works in Safari but not Firefox.*/ -} - -/* Playback technology elements expand to the width/height of the containing div.