Add even more of the source
This should be about everything needed to build so far?
8281
WebAdmin/WebAdminHtml/MapUTF.pl
Normal file
76
WebAdmin/WebAdminHtml/access_log.html
Normal file
|
@ -0,0 +1,76 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<style type="text/css">
|
||||
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
|
||||
.large { font-weight: bold; font-size: 14px }
|
||||
.small { font-size: 10px }
|
||||
.white { color: #FFFFFF }
|
||||
.header { font-size: 18px; color:#666699 }
|
||||
input { font-size: 12px }
|
||||
</style>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif">
|
||||
<qtssobject type=form param="_self">
|
||||
<input type=hidden name=filename value="general_settings.html">
|
||||
<input type=hidden name=action value="SaveGeneralSettings">
|
||||
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=620>
|
||||
<tr>
|
||||
<td align=left valign=top width=20>
|
||||
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
|
||||
</td>
|
||||
<td valign=top align=center>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td align=left nowrap class=header>
|
||||
<qtssstring name="AccessHistHeader"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<img src="images/divider.gif" width="100%" height=1 align=middle alt="">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=380>
|
||||
<tr>
|
||||
<td align=left valign=top width="100%">
|
||||
<table border=0 cellspacing=0 cellpadding=4 width="100%" height=14>
|
||||
<tr>
|
||||
<td align=left nowrap bgcolor="#8C94AD" class=white>
|
||||
<b><qtssstring name="AccessHistFilesReqHeader"/></b>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table border=0 bgcolor="#FFFFFF" cellspacing=1 cellpadding=4 width="100%">
|
||||
<tr>
|
||||
<td align=left nowrap bgcolor="#C6C6D6" class=small>
|
||||
<b class=grey><qtssstring name="AccessHistFileReq"/></b>
|
||||
</td>
|
||||
<td nowrap width="47%" bgcolor="#C6C6D6" align=right class=small>
|
||||
<b class=grey><qtssstring name="AccessHistReqCount"/></b>
|
||||
</td>
|
||||
</tr>
|
||||
<qtssrepeater name=accesslog/><tr>
|
||||
<td align=left nowrap bgcolor="#EFEFF7" class=small>
|
||||
<qtssobject name="qtssAccessURI"/>
|
||||
</td>
|
||||
<td nowrap width="47%" bgcolor="#EFEFF7" class=small align=right>
|
||||
<qtssobject name="qtssAccessCount"/>
|
||||
</td>
|
||||
</tr></qtssrepeater>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
</qtssobject></body>
|
||||
</html>
|
1770
WebAdmin/WebAdminHtml/adminprotocol-lib.pl
Normal file
738
WebAdmin/WebAdminHtml/broadcaster_lib.pl
Normal file
|
@ -0,0 +1,738 @@
|
|||
#!/usr/bin/perl
|
||||
#
|
||||
# @APPLE_LICENSE_HEADER_START@
|
||||
#
|
||||
#
|
||||
# Copyright (c) 1999-2008 Apple Inc. All Rights Reserved.
|
||||
#
|
||||
# This file contains Original Code and/or Modifications of Original Code
|
||||
# as defined in and that are subject to the Apple Public Source License
|
||||
# Version 2.0 (the 'License'). You may not use this file except in
|
||||
# compliance with the License. Please obtain a copy of the License at
|
||||
# http://www.opensource.apple.com/apsl/ and read it before using this
|
||||
# file.
|
||||
#
|
||||
# The Original Code and all software distributed under the License are
|
||||
# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
# Please see the License for the specific language governing rights and
|
||||
# limitations under the License.
|
||||
#
|
||||
# @APPLE_LICENSE_HEADER_END@
|
||||
#
|
||||
|
||||
package broadcasterlib;
|
||||
use Foundation;
|
||||
|
||||
# ServerExists()
|
||||
# Returns 1 if the app is installed, 0 if it's not.
|
||||
sub ServerExists
|
||||
{
|
||||
my $loc = NSString->stringWithCString_("/Applications/QuickTime Broadcaster.app");
|
||||
if (NSFileManager->defaultManager->fileExistsAtPath_($loc)) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
# GetServerUsername()
|
||||
# Returns the username under which QTBroadcaster is running,
|
||||
# or an empty string if QTBroadcaster isn't active.
|
||||
sub GetServerUsername
|
||||
{
|
||||
my $ps = `/bin/ps -auwx`;
|
||||
my @splitps = split(/\n/, $ps);
|
||||
my $username = '';
|
||||
|
||||
for ($i = 0; $i < scalar(@splitps); $i++) {
|
||||
my $current = $splitps[$i];
|
||||
if ($current =~ /QuickTime Broadcaster/) {
|
||||
$current =~ /^([^\s]+)/;
|
||||
$username = $1;
|
||||
}
|
||||
}
|
||||
|
||||
return $username;
|
||||
}
|
||||
|
||||
# CountServers
|
||||
# Returns a count of other broadcasters.
|
||||
sub CountServers
|
||||
{
|
||||
my $ps = `/bin/ps -auwx`;
|
||||
my @splitps = split(/\n/, $ps);
|
||||
my $pid = (-1);
|
||||
my $count = 0;
|
||||
|
||||
for ($i = 0; $i < scalar(@splitps); $i++) {
|
||||
my $current = $splitps[$i];
|
||||
my @splitcurrent = split(/\s+/, $current);
|
||||
if ($current =~ /QuickTime Broadcaster/) {
|
||||
$count = $count + 1;
|
||||
}
|
||||
}
|
||||
return $count;
|
||||
}
|
||||
|
||||
# KillServer(signal)
|
||||
# Finds the pid for the broadcaster and kills it.
|
||||
sub KillServer
|
||||
{
|
||||
my $signal = $_[0];
|
||||
my $ps = `/bin/ps -auwx`;
|
||||
my @splitps = split(/\n/, $ps);
|
||||
my $pid = (-1);
|
||||
|
||||
for ($i = 0; $i < scalar(@splitps); $i++) {
|
||||
my $current = $splitps[$i];
|
||||
my @splitcurrent = split(/\s+/, $current);
|
||||
if ($current =~ /QuickTime Broadcaster/) {
|
||||
$pid = $splitcurrent[1];
|
||||
kill $signal, $pid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# GetPrefDictionaryLoc()
|
||||
# Returns the location of the current pref dictionary.
|
||||
sub GetPrefDictionaryLoc
|
||||
{
|
||||
$username = GetServerUsername();
|
||||
$locstr = "~$username/Library/Preferences/com.apple.QuickTime Broadcaster.plist";
|
||||
$loc = NSString->stringWithCString_($locstr);
|
||||
$loc = $loc->stringByExpandingTildeInPath;
|
||||
return $loc->cString;
|
||||
}
|
||||
|
||||
# GetPrefDictionary()
|
||||
# Returns the pref dictionary for the currently running broadcaster user
|
||||
# in NSDictionary format
|
||||
sub GetPrefDictionary
|
||||
{
|
||||
my $locstr = GetPrefDictionaryLoc();
|
||||
my $loc = NSString->stringWithCString_($locstr);
|
||||
return NSDictionary->dictionaryWithContentsOfFile_($loc);
|
||||
}
|
||||
|
||||
# GetPresetDictionaryLoc(presetName, presetType)
|
||||
# Returns the location of the selected preset name
|
||||
sub GetPresetDictionaryLoc
|
||||
{
|
||||
my $presetName = $_[0];
|
||||
my $presetType = $_[1];
|
||||
|
||||
if ($presetType == 0) {
|
||||
$presetDir = "Audio";
|
||||
}
|
||||
elsif ($presetType == 1) {
|
||||
$presetDir = "Video";
|
||||
}
|
||||
else {
|
||||
$presetDir = "Network";
|
||||
}
|
||||
|
||||
my $username = GetServerUsername();
|
||||
my $locstr = "~$username/Library/QuickTime Broadcaster Presets/$presetDir/$presetName.xml";
|
||||
my $loc = NSString->stringWithCString_($locstr);
|
||||
return $loc->stringByExpandingTildeInPath->cString;
|
||||
}
|
||||
|
||||
# GetPresetDictionary(presetName, presetType)
|
||||
# Returns the root dictionary for the given preset.
|
||||
sub GetPresetDictionary
|
||||
{
|
||||
my $presetName = $_[0];
|
||||
my $presetType = $_[1];
|
||||
|
||||
my $loc = GetPresetDictionaryLoc($presetName, 2);
|
||||
return NSDictionary->dictionaryWithContentsOfFile_(NSString->stringWithCString_($loc));
|
||||
}
|
||||
|
||||
# GetPresetSettingsDictionary(presetName, presetType)
|
||||
# Returns an NSDictionary with the settings from the given preset name and type.
|
||||
sub GetPresetSettingsDictionary
|
||||
{
|
||||
my $presetName = $_[0];
|
||||
my $presetType = $_[1];
|
||||
|
||||
my $dict = GetPresetDictionary($presetName, 2);
|
||||
$dict = $dict->objectForKey_(NSString->stringWithCString_("settings"));
|
||||
return $dict;
|
||||
}
|
||||
|
||||
# GetSettingsFileNetworkDictionary
|
||||
# Returns an NSDictionary with the network settings for the QTSS settings file.
|
||||
sub GetSettingsFileNetworkDictionary
|
||||
{
|
||||
my $fileLoc = NSString->stringWithCString_("/Library/QuickTimeStreaming/Config/BroadcasterSettings.qtbr");
|
||||
my $rootDict = NSDictionary->dictionaryWithContentsOfFile_($fileLoc);
|
||||
return $rootDict->objectForKey_(NSString->stringWithCString_("network"));
|
||||
}
|
||||
|
||||
# GetDefaultDict()
|
||||
# Returns the default dictionary for the settings file.
|
||||
sub GetDefaultDict
|
||||
{
|
||||
my $fileLoc = NSString->stringWithCString_("/Library/QuickTimeStreaming/Config/BroadcasterSettings.qtbr");
|
||||
my $rootDict = NSMutableDictionary->dictionary;
|
||||
my $settingsDict = NSMutableDictionary->dictionary;
|
||||
|
||||
$rootDict->setObject_forKey_(NSNumber->numberWithInt_(1), NSString->stringWithCString_("version"));
|
||||
my $settingsDict = NSMutableDictionary->dictionary;
|
||||
$settingsDict->setObject_forKey_(NSString->stringWithCString_(""), NSString->stringWithCString_("author"));
|
||||
$settingsDict->setObject_forKey_(NSString->stringWithCString_("0"), NSString->stringWithCString_("bufferDelay"));
|
||||
$settingsDict->setObject_forKey_(NSString->stringWithCString_(""), NSString->stringWithCString_("copyright"));
|
||||
$settingsDict->setObject_forKey_(NSString->stringWithCString_("mystream"), NSString->stringWithCString_("fileName"));
|
||||
$settingsDict->setObject_forKey_(NSString->stringWithCString_("127.0.0.1"), NSString->stringWithCString_("hostName"));
|
||||
$settingsDict->setObject_forKey_(NSString->stringWithCString_(""), NSString->stringWithCString_("info"));
|
||||
$settingsDict->setObject_forKey_(NSNumber->numberWithBool_(0), NSString->stringWithCString_("overTCP"));
|
||||
$settingsDict->setObject_forKey_(NSString->stringWithCString_(""), NSString->stringWithCString_("password"));
|
||||
$settingsDict->setObject_forKey_(NSString->stringWithCString_(""), NSString->stringWithCString_("title"));
|
||||
$settingsDict->setObject_forKey_(NSString->stringWithCString_("unicastAnnounce"), NSString->stringWithCString_("transmissionType"));
|
||||
$settingsDict->setObject_forKey_(NSString->stringWithCString_(""), NSString->stringWithCString_("userName"));
|
||||
$settingsDict->setObject_forKey_(NSNumber->numberWithInt_(1), NSString->stringWithCString_("version"));
|
||||
$rootDict->setObject_forKey_($settingsDict, NSString->stringWithCString_("network"));
|
||||
|
||||
return $rootDict;
|
||||
}
|
||||
|
||||
# CheckForStreamingServerSettingsFile()
|
||||
# Creates a streaming server settings file if necessary.
|
||||
sub CheckForStreamingServerSettingsFile
|
||||
{
|
||||
my $fileLoc = NSString->stringWithCString_("/Library/QuickTimeStreaming/Config/BroadcasterSettings.qtbr");
|
||||
|
||||
if (!NSFileManager->defaultManager->fileExistsAtPath_($fileLoc)) {
|
||||
if (-e '/Library/QuickTimeStreaming/Config/Broadcaster Presets/current.plist') {
|
||||
unlink '/Library/QuickTimeStreaming/Config/Broadcaster Presets/current.plist';
|
||||
}
|
||||
my $rootDict = GetDefaultDict();
|
||||
$rootDict->writeToFile_atomically_($fileLoc, 1);
|
||||
}
|
||||
|
||||
# check for the broadcaster settings dir
|
||||
if (!(-e '/Library/QuickTimeStreaming/Config/Broadcaster Presets')) {
|
||||
mkdir '/Library/QuickTimeStreaming/Config/Broadcaster Presets';
|
||||
chmod 0775, '/Library/QuickTimeStreaming/Config/Broadcaster Presets';
|
||||
}
|
||||
}
|
||||
|
||||
# RereadSettingsFile(connection)
|
||||
# Sent after we start the server.
|
||||
sub RereadSettingsFile
|
||||
{
|
||||
my $server = $_[0];
|
||||
my $fileLoc = NSString->stringWithCString_("/Library/QuickTimeStreaming/Config/BroadcasterSettings.qtbr");
|
||||
my $tmpFolder = "/tmp/qtss-qtbroadcaster-tmp";
|
||||
my $tmpFolderLoc = NSString->stringWithCString_($tmpFolder);
|
||||
my $otherFileLoc = NSString->stringWithCString_("/tmp/qtss-qtbroadcaster-tmp/qtss-qtbroadcaster-settings-tmp.qtbr");
|
||||
my $audioEnabled = GetStreamEnabledForType($server, 0);
|
||||
my $videoEnabled = GetStreamEnabledForType($server, 1);
|
||||
my $recordingEnabled = IsRecording($server);
|
||||
my $rootDict = GetDefaultDict();
|
||||
|
||||
if (!(-e $tmpFolder)) {
|
||||
mkdir $tmpFolder, 0700;
|
||||
}
|
||||
|
||||
$rootDict->writeToFile_atomically_($otherFileLoc, 1);
|
||||
|
||||
$server->setBroadcastSettingsFile_($otherFileLoc);
|
||||
$server->setBroadcastSettingsFile_($fileLoc);
|
||||
SetStreamEnabledForType($server, 0, $audioEnabled);
|
||||
SetStreamEnabledForType($server, 1, $videoEnabled);
|
||||
SetRecording($server, $recordingEnabled);
|
||||
|
||||
unlink "/tmp/qtss-qtbroadcaster-tmp/qtss-qtbroadcaster-settings-tmp.qtbr";
|
||||
rmdir $tmpFolder;
|
||||
}
|
||||
|
||||
# GetServerConnection(autostart)
|
||||
# Returns a connection to the server.
|
||||
sub GetServerConnection
|
||||
{
|
||||
my $autostart = $_[0];
|
||||
my $serverName = NSString->stringWithCString_("QuickTimeBroadcasterRemoteAdmin");
|
||||
my $server = NSConnection->rootProxyForConnectionWithRegisteredName_host_($serverName, 0);
|
||||
if ((!$server || !$$server) && (GetServerUsername() eq '') && ($autostart == 1)) {
|
||||
CheckForStreamingServerSettingsFile();
|
||||
if (fork()) {
|
||||
exec "/Applications/QuickTime Broadcaster.app/Contents/MacOS/QuickTime Broadcaster", "-noui" or print STDERR "couldn't exec: $!";
|
||||
}
|
||||
}
|
||||
if (!(!$server || !$$server)) {
|
||||
$server->retain();
|
||||
}
|
||||
return $server;
|
||||
}
|
||||
|
||||
# CurrentState(connection, messageHash)
|
||||
# Returns a string with the current server state.
|
||||
sub CurrentState
|
||||
{
|
||||
my $server = $_[0];
|
||||
my $messageHashRef = $_[1];
|
||||
my %messageHash = %$messageHashRef;
|
||||
my $state = $server->state;
|
||||
if ($state == 0) {
|
||||
return $messageHash{'QTBStateSetup'};
|
||||
}
|
||||
elsif ($state == 1) {
|
||||
return $messageHash{'QTBStateStartingBroadcast'};
|
||||
}
|
||||
elsif ($state == 2) {
|
||||
return $messageHash{'QTBStatePrerolling'};
|
||||
}
|
||||
elsif ($state == 3) {
|
||||
return $messageHash{'QTBStateBroadcasting'};
|
||||
}
|
||||
elsif ($state == 4) {
|
||||
return $messageHash{'QTBStateStoppingBroadcast'};
|
||||
}
|
||||
# this should never happen
|
||||
return 'Unknown';
|
||||
}
|
||||
|
||||
# StartStopButtonText(connection, messageHash)
|
||||
# Returns a string for the start/stop button.
|
||||
sub StartStopButtonText
|
||||
{
|
||||
my $server = $_[0];
|
||||
my $messageHashRef = $_[1];
|
||||
my %messageHash = %$messageHashRef;
|
||||
|
||||
if ($server->state == 0) {
|
||||
return $messageHash{'QTBStartButton'};
|
||||
}
|
||||
return $messageHash{'QTBStopButton'};
|
||||
}
|
||||
|
||||
# GetBroadcasterStateID(connection)
|
||||
# Returns the state integer.
|
||||
sub GetBroadcasterStateID
|
||||
{
|
||||
my $server = $_[0];
|
||||
return $server->state;
|
||||
}
|
||||
|
||||
# IsRecording(connection)
|
||||
# Returns 0 or 1 to denote whether the given server is set to record.
|
||||
sub IsRecording
|
||||
{
|
||||
my $server = $_[0];
|
||||
if ($server->recording()) {
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
# SetRecording(connection, record)
|
||||
# Set to 1 to record, or 0 to not record.
|
||||
sub SetRecording
|
||||
{
|
||||
my $server = $_[0];
|
||||
my $record = $_[1];
|
||||
$server->setRecording_($record);
|
||||
}
|
||||
|
||||
# GetRecordingPath(connection)
|
||||
# Gets the recording path for the given server.
|
||||
sub GetRecordingPath
|
||||
{
|
||||
my $server = $_[0];
|
||||
return $server->recordingPath->cString;
|
||||
}
|
||||
|
||||
# SetRecordingPath(connection, path)
|
||||
# Sets the recording path.
|
||||
sub SetRecordingPath
|
||||
{
|
||||
my $server = $_[0];
|
||||
my $path = $_[1];
|
||||
$server->setRecordingPath_(NSString->stringWithCString_($path));
|
||||
}
|
||||
|
||||
# GetStreamEnabledForType(connection, type)
|
||||
# Returns 1 if enabled, 0 if not.
|
||||
sub GetStreamEnabledForType
|
||||
{
|
||||
my $server = $_[0];
|
||||
my $type = $_[1];
|
||||
|
||||
if ($type == 0) {
|
||||
$typeStr = NSString->stringWithCString_("audio");
|
||||
}
|
||||
else {
|
||||
$typeStr = NSString->stringWithCString_("video");
|
||||
}
|
||||
|
||||
my $enabled = $server->streamEnabled_($typeStr);
|
||||
|
||||
return "$enabled";
|
||||
}
|
||||
|
||||
# SetStreamEnabledForType(connection, type, enabled)
|
||||
# Set to 0 to disable, 1 to enable
|
||||
sub SetStreamEnabledForType
|
||||
{
|
||||
my $server = $_[0];
|
||||
my $type = $_[1];
|
||||
my $enabled = $_[2];
|
||||
|
||||
if ($type == 0) {
|
||||
$typeStr = NSString->stringWithCString_("audio");
|
||||
}
|
||||
else {
|
||||
$typeStr = NSString->stringWithCString_("video");
|
||||
}
|
||||
|
||||
$server->setStreamEnabled_ofType_(($enabled == 1), $typeStr);
|
||||
}
|
||||
|
||||
# GetPresetsForType(connection, type)
|
||||
# Returns an array ref of preset names.
|
||||
# Pass it 0 for audio, 1 for audio, and 2 for network.
|
||||
sub GetPresetsForType
|
||||
{
|
||||
my $server = $_[0];
|
||||
my $type = $_[1];
|
||||
@presets = ('');
|
||||
my $i;
|
||||
my $currentPreset;
|
||||
my $sharedPresetsFolder = '/Library/QuickTimeStreaming/Config/Broadcaster Presets';
|
||||
my $presetFolderLoc;
|
||||
|
||||
if ($type == 0) {
|
||||
$presetFolderLoc = NSString->stringWithCString_("$sharedPresetsFolder/Audio");
|
||||
}
|
||||
elsif ($type == 1) {
|
||||
$presetFolderLoc = NSString->stringWithCString_("$sharedPresetsFolder/Video");
|
||||
}
|
||||
elsif ($type == 2) {
|
||||
$presetFolderLoc = NSString->stringWithCString_("$sharedPresetsFolder/Network");
|
||||
}
|
||||
|
||||
if (-e $presetFolderLoc->cString) {
|
||||
my $folderContents = NSFileManager->defaultManager->directoryContentsAtPath_($presetFolderLoc);
|
||||
if (!(!$folderContents || !$$folderContents)) {
|
||||
for ($i = 0; $i < $folderContents->count; $i++) {
|
||||
$currentPreset = $folderContents->objectAtIndex_($i);
|
||||
push(@presets, $currentPreset->stringByDeletingPathExtension->cString);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
my $presetsArrayObj = $server->presetNameList_($type);
|
||||
|
||||
for ($i = 0; $i < $presetsArrayObj->count; $i++) {
|
||||
$currentPreset = $presetsArrayObj->objectAtIndex_($i);
|
||||
if ((!$folderContents || !$$folderContents) || (!$folderContents->containsObject_($currentPreset))) {
|
||||
push(@presets, $currentPreset->cString);
|
||||
}
|
||||
}
|
||||
|
||||
return \@presets;
|
||||
}
|
||||
|
||||
# GetStringForType(type)
|
||||
# Gets the preference dictionary name for a preset type.
|
||||
sub GetStringForType
|
||||
{
|
||||
my $type = $_[0];
|
||||
|
||||
if ($type == 0) {
|
||||
return "audio";
|
||||
}
|
||||
elsif ($type == 1) {
|
||||
return "video";
|
||||
}
|
||||
return "network";
|
||||
}
|
||||
|
||||
# GetCurrentPresetForType(connection, type)
|
||||
# Gets the current preset name.
|
||||
sub GetCurrentPresetForType
|
||||
{
|
||||
my $connection = $_[0];
|
||||
my $type = $_[1];
|
||||
my $locObj = NSString->stringWithCString_("/Library/QuickTimeStreaming/Config/Broadcaster Presets/current.plist");
|
||||
my $valueAsObj;
|
||||
|
||||
if (NSFileManager->defaultManager->fileExistsAtPath_($locObj)) {
|
||||
my $dict = NSDictionary->dictionaryWithContentsOfFile_($locObj);
|
||||
if (!$dict or !$$dict) {
|
||||
return '';
|
||||
}
|
||||
$valueAsObj = $dict->objectForKey_(NSString->stringWithString_(GetStringForType($type)));
|
||||
if (!(!$valueAsObj or !$$valueAsObj)) {
|
||||
return $valueAsObj->cString;
|
||||
}
|
||||
}
|
||||
$valueAsObj = $connection->currentPresetName_($type);
|
||||
if (!$valueAsObj or !$$valueAsObj) {
|
||||
return '';
|
||||
}
|
||||
return $valueAsObj->cString;
|
||||
}
|
||||
|
||||
# SetCurrentPresetForType(connection, type, value)
|
||||
# Sets the preset to the selected one.
|
||||
sub SetCurrentPresetForType
|
||||
{
|
||||
my $connection = $_[0];
|
||||
my $type = $_[1];
|
||||
my $value = $_[2];
|
||||
my $valueStr = NSString->stringWithCString_($value);
|
||||
my $sharedPresetsFolder = '/Library/QuickTimeStreaming/Config/Broadcaster Presets';
|
||||
|
||||
if ($type == 0) {
|
||||
$presetFolderLoc = NSString->stringWithCString_("$sharedPresetsFolder/Audio");
|
||||
}
|
||||
elsif ($type == 1) {
|
||||
$presetFolderLoc = NSString->stringWithCString_("$sharedPresetsFolder/Video");
|
||||
}
|
||||
elsif ($type == 2) {
|
||||
$presetFolderLoc = NSString->stringWithCString_("$sharedPresetsFolder/Network");
|
||||
}
|
||||
|
||||
my $locObj = $presetFolderLoc->stringByAppendingPathComponent_($valueStr);
|
||||
my $locObj = $locObj->stringByAppendingPathExtension_(NSString->stringWithCString_("xml"));
|
||||
my $saveLocObj = NSString->stringWithCString_("/Library/QuickTimeStreaming/Config/BroadcasterSettings.qtbr");
|
||||
my $mutableDict = NSMutableDictionary->dictionaryWithContentsOfFile_($saveLocObj);
|
||||
|
||||
if (NSFileManager->defaultManager->fileExistsAtPath_($locObj)) {
|
||||
my $dict = NSDictionary->dictionaryWithContentsOfFile_($locObj);
|
||||
$dict = $dict->objectForKey_(NSString->stringWithCString_("settings"));
|
||||
|
||||
# turn audio preview off, if applicable
|
||||
if ($type == 0) {
|
||||
my $mutableAudioSettingsDict = NSMutableDictionary->dictionaryWithDictionary_($dict);
|
||||
my $sourceSettingsDict = $mutableAudioSettingsDict->objectForKey_(NSString->stringWithCString_("source"));
|
||||
if (!(!$sourceSettingsDict || !$$sourceSettingsDict)) {
|
||||
my $mutableSourceSettingsDict = NSMutableDictionary->dictionaryWithDictionary_($sourceSettingsDict);
|
||||
$mutableSourceSettingsDict->setObject_forKey_(NSNumber->numberWithBool_(0), NSString->stringWithCString_("preview"));
|
||||
$sourceSettingsDict = NSDictionary->dictionaryWithDictionary_($mutableSourceSettingsDict);
|
||||
$mutableAudioSettingsDict->setObject_forKey_($sourceSettingsDict, NSString->stringWithCString_("source"));
|
||||
$dict = NSDictionary->dictionaryWithDictionary_($mutableAudioSettingsDict);
|
||||
}
|
||||
}
|
||||
|
||||
my $typestr = GetStringForType($type);
|
||||
my $typeobj = NSString->stringWithCString_($typestr);
|
||||
$mutableDict->setObject_forKey_($dict, $typeobj);
|
||||
$connection->setCurrentPresetName_ofType_($valueStr, $type);
|
||||
}
|
||||
else {
|
||||
$connection->setCurrentPresetName_ofType_($valueStr, $type);
|
||||
$mutableDict->removeObjectForKey_(NSString->stringWithCString_(GetStringForType($type)));
|
||||
}
|
||||
|
||||
$mutableDict->writeToFile_atomically_($saveLocObj, 1);
|
||||
|
||||
my $statusLocObj = NSString->stringWithCString_("/Library/QuickTimeStreaming/Config/Broadcaster Presets/current.plist");
|
||||
my $statusDict = NSMutableDictionary->dictionaryWithContentsOfFile_($statusLocObj);
|
||||
if (!$statusDict or !$$statusDict) {
|
||||
$statusDict = NSMutableDictionary->dictionary;
|
||||
}
|
||||
$statusDict->setObject_forKey_(NSString->stringWithCString_($value), NSString->stringWithCString_(GetStringForType($type)));
|
||||
$statusDict->writeToFile_atomically_($statusLocObj, 1);
|
||||
}
|
||||
|
||||
# SetNetworkSetting(settingName, valueObj)
|
||||
sub SetNetworkSetting
|
||||
{
|
||||
my $settingName = $_[0];
|
||||
my $valueObj = $_[1];
|
||||
my $settingNameObj = NSString->stringWithCString_($settingName);
|
||||
my $locObj = NSString->stringWithCString_("/Library/QuickTimeStreaming/Config/BroadcasterSettings.qtbr");
|
||||
my $mutableDict = NSMutableDictionary->dictionaryWithContentsOfFile_($locObj);
|
||||
my $settingsDict = $mutableDict->objectForKey_(NSString->stringWithCString_("network"));
|
||||
my $mutableSettingsDict = NSMutableDictionary->dictionaryWithDictionary_($settingsDict);
|
||||
|
||||
$mutableSettingsDict->setObject_forKey_($valueObj, $settingNameObj);
|
||||
$mutableDict->setObject_forKey_($mutableSettingsDict, NSString->stringWithCString_("network"));
|
||||
$mutableDict->writeToFile_atomically_($locObj, 1);
|
||||
}
|
||||
|
||||
# IsExternalHost()
|
||||
# Returns 0 if localhost, 1 if not.
|
||||
sub IsExternalHost
|
||||
{
|
||||
my $hostName = GetNetworkHostname();
|
||||
if ($hostName eq '') {
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
# GetNetworkHostname()
|
||||
# Returns the hostname from the "QuickTime Streaming Server" network preset.
|
||||
sub GetNetworkHostname
|
||||
{
|
||||
my $dict = GetSettingsFileNetworkDictionary();
|
||||
my $hostName = $dict->objectForKey_(NSString->stringWithCString_("hostName"));
|
||||
if ($hostName->isEqualToString_(NSString->stringWithCString_("127.0.0.1"))) {
|
||||
return '';
|
||||
}
|
||||
return $hostName->cString;
|
||||
}
|
||||
|
||||
# SetNetworkHostname(hostName)
|
||||
# Sets the hostname for the "QuickTime Streaming Server" network preset to the given hostname.
|
||||
sub SetNetworkHostname
|
||||
{
|
||||
my $hostName = $_[0];
|
||||
SetNetworkSetting("hostName", NSString->stringWithCString_($hostName));
|
||||
}
|
||||
|
||||
# GetNetworkFilepath()
|
||||
# Returns the SDP filepath. This differs from the other method in that it
|
||||
# only searches the "QuickTime Streaming Server" preset.
|
||||
sub GetNetworkFilepath
|
||||
{
|
||||
my $dict = GetSettingsFileNetworkDictionary();
|
||||
my $fileName = $dict->objectForKey_(NSString->stringWithCString_("fileName"));
|
||||
return $fileName->cString . ".sdp";
|
||||
}
|
||||
|
||||
# SetNetworkFilepath(fileName)
|
||||
# Sets the filepath for the "QuickTime Streaming Server" network preset to the given filepath.
|
||||
sub SetNetworkFilepath
|
||||
{
|
||||
my $fileName = $_[0];
|
||||
$fileName =~ s/.sdp$//;
|
||||
SetNetworkSetting("fileName", NSString->stringWithCString_($fileName));
|
||||
}
|
||||
|
||||
# GetBufferDelay()
|
||||
# Returns the buffer delay.
|
||||
sub GetBufferDelay
|
||||
{
|
||||
my $dict = GetSettingsFileNetworkDictionary();
|
||||
my $bufferDelay = $dict->objectForKey_(NSString->stringWithCString_("bufferDelay"));
|
||||
return $bufferDelay->cString;
|
||||
}
|
||||
|
||||
# SetBufferDelay(delay)
|
||||
# Sets the buffer delay.
|
||||
sub SetBufferDelay
|
||||
{
|
||||
my $delay = $_[0];
|
||||
SetNetworkSetting("bufferDelay", NSString->stringWithCString_($delay));
|
||||
}
|
||||
|
||||
# GetNetworkUsername()
|
||||
# Returns the username for the current broadcast.
|
||||
sub GetNetworkUsername
|
||||
{
|
||||
my $dict = GetSettingsFileNetworkDictionary();
|
||||
my $username = $dict->objectForKey_(NSString->stringWithCString_("userName"));
|
||||
return $username->cString;
|
||||
}
|
||||
|
||||
# SetNetworkUsername(username)
|
||||
# Sets the username for the current broadcast.
|
||||
sub SetNetworkUsername
|
||||
{
|
||||
$username = $_[0];
|
||||
SetNetworkSetting("userName", NSString->stringWithCString_($username));
|
||||
}
|
||||
|
||||
# GetNetworkPassword()
|
||||
# Returns the Password for the current broadcast.
|
||||
sub GetNetworkPassword
|
||||
{
|
||||
my $dict = GetSettingsFileNetworkDictionary();
|
||||
my $password = $dict->objectForKey_(NSString->stringWithCString_("password"));
|
||||
return $password->cString;
|
||||
}
|
||||
|
||||
# SetNetworkPassword(password)
|
||||
# Sets the password for the current broadcast.
|
||||
sub SetNetworkPassword
|
||||
{
|
||||
$password = $_[0];
|
||||
SetNetworkSetting("password", NSString->stringWithCString_($password));
|
||||
}
|
||||
|
||||
# GetBroadcastNetworkType()
|
||||
# Returns 0 for UDP and 1 for TCP.
|
||||
sub GetBroadcastNetworkType
|
||||
{
|
||||
my $dict = GetSettingsFileNetworkDictionary();
|
||||
if ($dict->objectForKey_(NSString->stringWithCString_("overTCP"))->boolValue == 0) {
|
||||
return 0;
|
||||
}
|
||||
if (GetNetworkHostname() eq '') {
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
# SetBroadcastNetworkType(type)
|
||||
# Use 0 for UDP and 1 for TCP.
|
||||
sub SetBroadcastNetworkType
|
||||
{
|
||||
my $type = $_[0];
|
||||
SetNetworkSetting("overTCP", NSNumber->numberWithBool_($type));
|
||||
}
|
||||
|
||||
# WriteRefMovie(defaultDNSName)
|
||||
# Writes out the ref movie for the broadcast.
|
||||
sub WriteRefMovie
|
||||
{
|
||||
my $defaultDNSName = $_[0];
|
||||
my $serverRoot = NSString->stringWithUTF8String_($ENV{"SERVER_ROOT"});
|
||||
my $refMovieFilename = NSString->stringWithUTF8String_("view_broadcast.mov");
|
||||
|
||||
$refMovieFilename = $serverRoot->stringByAppendingPathComponent_($refMovieFilename);
|
||||
|
||||
my $networkFilepath = GetNetworkFilepath();
|
||||
my $refMovieText = NSString->stringWithUTF8String_("rtsptext\rrtsp://$defaultDNSName/$networkFilepath");
|
||||
|
||||
$refMovieText->writeToFile_atomically_($refMovieFilename, 1);
|
||||
}
|
||||
|
||||
# StartStopBroadcast(connection)
|
||||
# Toggles the broadcast state, and returns a message.
|
||||
sub StartStopBroadcast
|
||||
{
|
||||
my $server = $_[0];
|
||||
|
||||
if ($server->state != 3) {
|
||||
# check to see if either audio or video stream is enabled
|
||||
if ((GetStreamEnabledForType($server, 0) != 1) && (GetStreamEnabledForType($server, 1) != 1)) {
|
||||
return '';
|
||||
}
|
||||
$server->startBroadcast;
|
||||
return 'QTBConfStarted';
|
||||
}
|
||||
else {
|
||||
$server->stopBroadcast;
|
||||
return 'QTBConfStopped';
|
||||
}
|
||||
}
|
||||
|
||||
# StopBroadcast(connection)
|
||||
# Stops the broadcast.
|
||||
sub StopBroadcast
|
||||
{
|
||||
my $server = $_[0];
|
||||
$server->stopBroadcast;
|
||||
}
|
||||
|
||||
# QuitBroadcaster(connection)
|
||||
# Tells the broadcaster to quit. Necessary to re-read prefs files.
|
||||
sub QuitBroadcaster
|
||||
{
|
||||
my $server = $_[0];
|
||||
|
||||
$server->quit;
|
||||
}
|
||||
|
||||
1;
|
218
WebAdmin/WebAdminHtml/broadcaster_settings.html
Normal file
|
@ -0,0 +1,218 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
|
||||
<style type="text/css">
|
||||
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
|
||||
.large { font-weight: bold; font-size: 14px }
|
||||
.small { font-size: 10px }
|
||||
.white { color: #FFFFFF }
|
||||
.header { font-size: 18px; color:#666699 }
|
||||
input { font-size: 12px }
|
||||
</style>
|
||||
<script src="includes/encode_unicode.js" type="text/javascript" language="Javascript" charset="utf-8"></script>
|
||||
<script type="text/javascript" language="Javascript">
|
||||
|
||||
function showConfirmMessage() {
|
||||
if ("<qtssobject name=confirmMessage/>" == "<qtssstring name=QTBErrBroadcastSettings/>")
|
||||
entityAlert("<qtssobject name=confirmMessage/>");
|
||||
else if ("<qtssobject name=confirmMessage/>" != "") {
|
||||
if (parent.frames['top'].showConfirmMessage) {
|
||||
parent.frames['top'].showConfirmMessage("<qtssobject name=confirmMessage/>");
|
||||
}
|
||||
else if (parent.parent.frames[0].showConfirmMessage) {
|
||||
parent.parent.frames[0].showConfirmMessage("<qtssobject name=confirmMessage/>");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function setPopupToStringVal(thePopup, theString) {
|
||||
for (var i = 0; i < thePopup.options.length; i++) {
|
||||
if (thePopup.options[i].value == theString)
|
||||
thePopup.options[i].selected = true;
|
||||
}
|
||||
}
|
||||
|
||||
function setPresetVals() {
|
||||
setPopupToStringVal(document.forms[0].elements['qtbCurrentAudioPreset'], document.forms[0].elements['qtbCurrentAudioPreset_shadow'].value);
|
||||
setPopupToStringVal(document.forms[0].elements['qtbCurrentVideoPreset'], document.forms[0].elements['qtbCurrentVideoPreset_shadow'].value);
|
||||
}
|
||||
|
||||
function fixSDPField() {
|
||||
if ((document.forms[0].elements['qtbNetworkPresetSDPFilename'].value.indexOf('.sdp') < 0) && (document.forms[0].elements['qtbNetworkPresetSDPFilename'].value != '')) {
|
||||
document.forms[0].elements['qtbNetworkPresetSDPFilename'].value = document.forms[0].elements['qtbNetworkPresetSDPFilename'].value + '.sdp';
|
||||
}
|
||||
}
|
||||
|
||||
function fixBufferDelayField() {
|
||||
if (document.forms[0].elements['qtbBufferDelay'].value.match('[^0-9]') != null) {
|
||||
document.forms[0].elements['qtbBufferDelay'].value = document.forms[0].elements['qtbBufferDelay_shadow'].value
|
||||
}
|
||||
}
|
||||
|
||||
function clickedTestButton() {
|
||||
var sdpFilename = document.forms[0].elements['qtbNetworkPresetSDPFilename'].value;
|
||||
window.open('/parse_xml.cgi?filename=content_ondemand.html&action=TestOnDemandContent&curmoviepath=/' + sdpFilename, 'OnDemandContent', 'width=510,height=390,scrollbars=yes,resizable=yes');
|
||||
}
|
||||
|
||||
function clickedViewButton() {
|
||||
location.href = '/view_broadcast.mov';
|
||||
}
|
||||
|
||||
function clickedQuitButton() {
|
||||
document.forms[0].elements['action'].value = 'QuitBroadcaster';
|
||||
document.forms[0].elements['filename'].value = 'welcome.html';
|
||||
document.forms[0].submit();
|
||||
}
|
||||
|
||||
function clickedStartStopButton() {
|
||||
fixSDPField();
|
||||
document.forms[0].elements['action'].value = 'StartStopBroadcast';
|
||||
document.forms[0].submit();
|
||||
}
|
||||
|
||||
function validateFormData() {
|
||||
fixSDPField();
|
||||
fixBufferDelayField();
|
||||
var sdpFieldValue = document.forms[0].elements['qtbNetworkPresetSDPFilename'].value
|
||||
if ((sdpFieldValue == '') || (sdpFieldValue == '.sdp')) {
|
||||
entityAlert('<qtssstring name=PLErrMountPointCannotBeBlank>');
|
||||
document.forms[0].elements['qtbNetworkPresetSDPFilename'].focus();
|
||||
document.forms[0].elements['qtbNetworkPresetSDPFilename'].select();
|
||||
return false;
|
||||
}
|
||||
if (document.forms[0].elements['qtbStateID'].value != '0') {
|
||||
return confirm("The broadcast will need to be restarted in order to change settings. Restart the broadcast now?");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="showConfirmMessage();setPresetVals()">
|
||||
<qtssobject type=validatedform>
|
||||
<qtssobject name="qtssSvrDefaultDNSName" type=hidden/>
|
||||
<qtssobject name="qtbStateID" type=hidden/>
|
||||
<qtssobject name="qtbHostname" type=hidden/>
|
||||
<input type="hidden" name="action" value="SaveBroadcasterSettings">
|
||||
<input type="hidden" name="filename" value="broadcaster_settings.html">
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=620>
|
||||
<tr>
|
||||
<td align=left valign=top nowrap width=20>
|
||||
<p>
|
||||
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
|
||||
</p>
|
||||
</td>
|
||||
<td valign=top align=center>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td align=left nowrap class=header>
|
||||
<qtssstring name="QTBTitle"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=0>
|
||||
<tr>
|
||||
<td align=left valign=top>
|
||||
<table border=0 cellspacing=4 cellpadding=0>
|
||||
<tr>
|
||||
<td align=right>
|
||||
<b><qtssstring name="QTBCurrentStatus"/>:</b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject name="qtbStatus"/><qtssobject name="qtbStatus" type=hidden/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=right>
|
||||
<b><qtssstring name="QTBAudioPreset"/>:</b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject type="select" name="qtbCurrentAudioPreset"><qtssrepeater name="audiopresets">
|
||||
<option value="<qtssobject name=qtbAudioPresetNames>"><qtssobject name="qtbAudioPresetNames"/></option>
|
||||
</qtssrepeater></qtssobject></select> <qtssobject name="qtbAudioStreamEnabled" format="checkbox" param="1"/><qtssstring name="Enabled"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=right>
|
||||
<b><qtssstring name="QTBVideoPreset"/>:</b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject type="select" name="qtbCurrentVideoPreset"><qtssrepeater name="videopresets">
|
||||
<option value="<qtssobject name=qtbVideoPresetNames>"><qtssobject name="qtbVideoPresetNames"/></option>
|
||||
</qtssrepeater></qtssobject></select> <qtssobject name="qtbVideoStreamEnabled" format="checkbox" param="1"/><qtssstring name="Enabled"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=right><b><qtssstring name="MountPoint"/></b></td>
|
||||
<td align=left><qtssobject type="text" name="qtbNetworkPresetSDPFilename" param=" size=30 onchange=fixSDPField()"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=right><b><qtssstring name="QTBBufferDelay"/>:</b></td>
|
||||
<td align=left><qtssobject type="text" name="qtbBufferDelay" param=" size=3 onchange=fixBufferDelayField()"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan=2> </td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=0 width="100%">
|
||||
<tr>
|
||||
<td align=left valign=top>
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td><a href="javascript:clickedStartStopButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
|
||||
<td><a href="javascript:clickedStartStopButton()"><qtssobject name="qtbStartStopButtonText"/></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<qtssrepeater name="broadcasting"><br>
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td><a href="javascript:clickedViewButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
|
||||
<td><a href="javascript:clickedViewButton()"><qtssstring name="QTBViewBroadcast"/></a></td>
|
||||
</tr>
|
||||
</table></qtssrepeater>
|
||||
<br>
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td><a href="javascript:clickedQuitButton();"><img src="images/link.gif" width=28 height=24 border=0></a></td>
|
||||
<td><a href="javascript:clickedQuitButton();"><qtssstring name="QTBQuitBroadcasterButton"/></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td align=left valign=top colspan=2>
|
||||
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left valign=top>
|
||||
<br>
|
||||
</td>
|
||||
<td align=right valign=top>
|
||||
<br>
|
||||
<input type=submit name="Submit" value="<qtssstring name=SubmitButtonTitle/>">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</qtssobject></form></body>
|
||||
</html>
|
207
WebAdmin/WebAdminHtml/cgi-lib.pl
Normal file
|
@ -0,0 +1,207 @@
|
|||
# cgi-lib.pl
|
||||
# Common functions for writing http headers
|
||||
#----------------------------------------------------------
|
||||
#
|
||||
# @APPLE_LICENSE_HEADER_START@
|
||||
#
|
||||
#
|
||||
# Copyright (c) 1999-2008 Apple Inc. All Rights Reserved.
|
||||
#
|
||||
# This file contains Original Code and/or Modifications of Original Code
|
||||
# as defined in and that are subject to the Apple Public Source License
|
||||
# Version 2.0 (the 'License'). You may not use this file except in
|
||||
# compliance with the License. Please obtain a copy of the License at
|
||||
# http://www.opensource.apple.com/apsl/ and read it before using this
|
||||
# file.
|
||||
#
|
||||
# The Original Code and all software distributed under the License are
|
||||
# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
# Please see the License for the specific language governing rights and
|
||||
# limitations under the License.
|
||||
#
|
||||
# @APPLE_LICENSE_HEADER_END@
|
||||
#
|
||||
#
|
||||
#---------------------------------------------------------
|
||||
|
||||
package cgilib;
|
||||
# init days and months
|
||||
|
||||
my $ssl = $ENV{"HTTPS"};
|
||||
|
||||
@weekday = ( "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" );
|
||||
@month = ( "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" );
|
||||
|
||||
%status = ( '200' => "OK",
|
||||
'302' => "Temporarily Unavailable",
|
||||
'401' => "Unauthorized",
|
||||
'403' => "Forbidden",
|
||||
'404' => "File Not Found",
|
||||
);
|
||||
|
||||
|
||||
# PrintOKTextHeader(servername, cookie)
|
||||
# changed 7/25/01 by JAA to add support for cookies
|
||||
sub PrintOKTextHeader {
|
||||
my $datestr = HttpDate(time());
|
||||
my $charsetstr = '';
|
||||
|
||||
if($ENV{"LANGUAGE"} eq "ja") {
|
||||
$charsetstr = ';charset=Shift_JIS';
|
||||
}
|
||||
|
||||
my $headerstr = "HTTP/1.0 200 OK\r\nServer: $_[0]\r\nContent-Type: text/html$charsetstr\r\nConnection:close\r\n";
|
||||
|
||||
$headerstr .= "Set-Cookie: $_[1]\r\n" if ($_[1] ne "");
|
||||
|
||||
# Safari cache control
|
||||
$headerstr .= "Expires: Mon, 26 Jul 1997 05:00:00 GMT\r\n";
|
||||
$headerstr .= "Last-Modified: $datestr\r\n";
|
||||
$headerstr .= "Cache-Control: no-store, no-cache, must-revalidate\r\n";
|
||||
$headerstr .= "Cache-Control: post-check=0, pre-check=0, false\r\n";
|
||||
$headerstr .= "Pragma: no-cache\r\n";
|
||||
|
||||
$headerstr .= "\r\n";
|
||||
print $headerstr;
|
||||
}
|
||||
|
||||
# PrintFileDownloadHeader(servername)
|
||||
# added 4/25/02 by JAA to allow content downloads
|
||||
sub PrintFileDownloadHeader {
|
||||
my $datestr = HttpDate(time());
|
||||
my $charsetstr = '';
|
||||
|
||||
if($ENV{"LANGUAGE"} eq "ja") {
|
||||
$charsetstr = ';charset=Shift_JIS';
|
||||
}
|
||||
|
||||
my $headerstr = "HTTP/1.0 200 OK\r\nDate: $datestr\r\nServer: $_[0]\r\nContent-Type: application/octet-stream\r\nConnection:close\r\n";
|
||||
print $headerstr;
|
||||
}
|
||||
|
||||
# PrintRedirectHeader(servername, redirectpath)
|
||||
# changed from PrintRedirectHeader(servername, serverip, serverport, redirectpage)
|
||||
sub PrintRedirectHeader {
|
||||
my $datestr = HttpDate(time());
|
||||
print "HTTP/1.0 302 Temporarily Unavailable\r\nDate: $datestr\r\nServer: $_[0]\r\n"
|
||||
. "Location: $_[1]\r\nConnection:close\r\n\r\n";
|
||||
}
|
||||
|
||||
|
||||
# PrintChallengeHeader(servername, challengeheader)
|
||||
sub PrintChallengeHeader {
|
||||
my $datestr = HttpDate(time());
|
||||
print "HTTP/1.0 401 Unauthorized\r\nDate: $datestr\r\nServer: $_[0]\r\n"
|
||||
. "Content-Type: text/html\r\nConnection:close\r\n$_[1]\r\n\r\n";
|
||||
}
|
||||
|
||||
# PrintChallengeResponse(servername, challengeheader, messageHash)
|
||||
sub PrintChallengeResponse {
|
||||
PrintChallengeHeader($_[0], $_[1]);
|
||||
PrintUnauthorizedHtml($_[2]);
|
||||
}
|
||||
|
||||
# PrintForbiddenHeader(servername)
|
||||
sub PrintForbiddenHeader {
|
||||
my $datestr = HttpDate(time());
|
||||
print "HTTP/1.0 403 Forbidden\r\nDate: $datestr\r\nServer: $_[0]\r\nContent-Type: text/html\r\nConnection:close\r\n\r\n";
|
||||
}
|
||||
|
||||
# PrintForbiddenResponse(servername, filename, messageHash)
|
||||
sub PrintForbiddenResponse {
|
||||
PrintForbiddenHeader($_[0]);
|
||||
PrintForbiddenHtml($_[1], $_[2]);
|
||||
}
|
||||
|
||||
# PrintForbiddenHtml(filename, messageHash)
|
||||
sub PrintForbiddenHtml {
|
||||
my $messHash = $_[1];
|
||||
my %messages = %$messHash;
|
||||
|
||||
print "<HTML><HEAD><TITLE>$messages{'Http403Status'}</TITLE></HEAD>"
|
||||
. "<BODY><H1>$messages{'Http403Status'}</H1><P>$messages{'Http403Body'} : $_[0]</P></BODY></HTML>";
|
||||
}
|
||||
|
||||
# PrintNotFoundHeader(servername)
|
||||
sub PrintNotFoundHeader {
|
||||
my $datestr = HttpDate(time());
|
||||
print "HTTP/1.0 404 File Not Found\r\nDate: $datestr\r\nServer: $_[0]\r\nContent-Type: text/html\r\nConnection:close\r\n\r\n";
|
||||
}
|
||||
|
||||
# PrintNotFoundResponse(servername, filename, messageHash)
|
||||
sub PrintNotFoundResponse {
|
||||
PrintNotFoundHeader($_[0]);
|
||||
PrintNotFoundHtml($_[1], $_[2]);
|
||||
}
|
||||
|
||||
# PrintNotFoundHtml(filename, messageHash)
|
||||
sub PrintNotFoundHtml {
|
||||
my $messHash = $_[1];
|
||||
my %messages = %$messHash;
|
||||
print "<HTML><HEAD><TITLE>$messages{'Http404Status'}</TITLE></HEAD>"
|
||||
. "<BODY><H1>$messages{'Http404Status'}</H1><P>$messages{'Http404Body'} : $_[0]</P></BODY></HTML>";
|
||||
}
|
||||
|
||||
# PrintStatusLine(num)
|
||||
sub PrintStatusLine {
|
||||
print "HTTP/1.0 $_[0] $status{$_[0]}\r\n";
|
||||
}
|
||||
|
||||
# PrintDateAndServerStr(server)
|
||||
sub PrintDateAndServerStr {
|
||||
my $datestr = HttpDate(time());
|
||||
print "Date: $datestr\r\nServer: $_[0]\r\n";
|
||||
}
|
||||
|
||||
# PrintTextTypeAndCloseStr()
|
||||
sub PrintTextTypeAndCloseStr {
|
||||
print "Content-Type: text/html\r\nConnection: close\r\n\r\n";
|
||||
}
|
||||
|
||||
# PrintUnauthorizedHeader(servername, realm)
|
||||
sub PrintUnauthorizedHeader {
|
||||
my $datestr = HttpDate(time());
|
||||
print "HTTP/1.0 401 Unauthorized\r\nServer:$_[0]\r\nDate: $datestr\r\n"
|
||||
. "WWW-authenticate: Basic realm=\"$_[1]\"\r\n"
|
||||
. "Content-Type: text/html\r\nConnection: close\r\n\r\n";
|
||||
}
|
||||
|
||||
# PrintServerNotRunningHtml(messageHash)
|
||||
sub PrintServerNotRunningHtml {
|
||||
my $messHash = $_[0];
|
||||
my %messages = %$messHash;
|
||||
print "<HTML><HEAD><TITLE>$messages{'ServerNotRunningMessage'}</TITLE></HEAD>"
|
||||
. "<BODY><BR><H3> $messages{'StartServerMessage'}</H3>"
|
||||
. "</BODY></HTML>";
|
||||
}
|
||||
|
||||
# PrintUnauthorizedHtml(messageHash)
|
||||
sub PrintUnauthorizedHtml {
|
||||
my $messHash = $_[0];
|
||||
my %messages = %$messHash;
|
||||
print "<HTML><HEAD><TITLE> $messages{'Http401Status'}</TITLE></HEAD>"
|
||||
. "<BODY><H1> $messages{'Http401Status'}</H1><P> $messages{'Http401Body'}.\n"
|
||||
. "</P></BODY></HTML>";
|
||||
}
|
||||
|
||||
# PrintUnauthorizedResponse(servername, realm, messageHash)
|
||||
sub PrintUnauthorizedResponse {
|
||||
PrintUnauthorizedHeader($_[0], $_[1]);
|
||||
PrintUnauthorizedHtml($_[2]);
|
||||
}
|
||||
|
||||
# HttpDate(timeinsecfrom1970)
|
||||
sub HttpDate {
|
||||
local @tm = gmtime($_[0]);
|
||||
return sprintf "%s, %d %s %d %2.2d:%2.2d:%2.2d GMT",
|
||||
$weekday[$tm[6]], $tm[3], $month[$tm[4]], $tm[5]+1900,
|
||||
$tm[2], $tm[1], $tm[0];
|
||||
}
|
||||
|
||||
1; #return true
|
||||
|
||||
|
||||
|
150
WebAdmin/WebAdminHtml/change_broadcast_password.html
Normal file
|
@ -0,0 +1,150 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="BBEdit Prerelease">
|
||||
<style type="text/css">
|
||||
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
|
||||
.large { font-weight: bold; font-size: 14px }
|
||||
.small { font-size: 10px }
|
||||
.white { color: #FFFFFF }
|
||||
.header { font-size: 18px; color:#666699 }
|
||||
input { font-size: 12px }
|
||||
</style>
|
||||
<script src="includes/encode_unicode.js" type="text/javascript" language="Javascript" charset="utf-8"></script>
|
||||
<qtssobject name=scriptTag>
|
||||
//<script language=javascript>
|
||||
|
||||
function checkStringForHighBitChars(theString) {
|
||||
var foundHighBitChar = false;
|
||||
|
||||
for (var i = 0; i < theString.length; i++) {
|
||||
if (theString.charCodeAt(i) >= 128) {
|
||||
foundHighBitChar = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return foundHighBitChar;
|
||||
}
|
||||
|
||||
function validateFormData() {
|
||||
if ((document.forms[0].elements['new_user'].value != '') && (document.forms[0].elements['new_password1'].value == '')) {
|
||||
entityAlert("<qtssstring name=ChPassMustEnterPasswdString/>");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (document.forms[0].elements['new_user'].value.indexOf(':') >= 0) {
|
||||
entityAlert("<qtssstring name=ChPassUsernameCannotHaveColonText/>");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (document.forms[0].elements['new_user'].value.indexOf(' ') > 0) {
|
||||
entityAlert("<qtssstring name=ChPassCannotContainSpacesText/>");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (document.forms[0].elements['new_user'].value == document.forms[0].elements['qtssAdminUsername'].value) {
|
||||
entityAlert("<qtssstring name=ChBoradcastPassCannotBeAdminUser/>");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (document.forms[0].elements['new_password1'].value != document.forms[0].elements['new_password2'].value) {
|
||||
entityAlert("<qtssstring name=ChPassNoMatchText>");
|
||||
return false;
|
||||
}
|
||||
|
||||
for (var i = 0; i < 7; i++) {
|
||||
if ((document.forms[0].elements[i].value) && (checkStringForHighBitChars(document.forms[0].elements[i].value))) {
|
||||
entityAlert("<qtssstring name=ChPassNoHighBitStr/>");
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="document.getElementById('new_user').focus()">
|
||||
<qtssobject type=validatedform>
|
||||
<input type=hidden name=filename value="general_settings.html"> <input type=hidden name=action value="ChangeBroadcastPassword">
|
||||
<qtssobject type=hidden name=qtssAdminUsername/>
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=620>
|
||||
<tr>
|
||||
<td align=left valign=top width=20><img src="images/spacer.gif" width=20 height=20 align=top alt="" hspace=0 vspace=0></td>
|
||||
<td valign=top align=center>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=500>
|
||||
<tr>
|
||||
<td align=left><img src="images/dialog_top.gif" width=500 height=20 align=bottom alt="" hspace=0 vspace=0></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left background="images/dialog_middle.gif">
|
||||
<table border=0 cellspacing=0 cellpadding=4 width="98%">
|
||||
<tr>
|
||||
<td valign=top width=110 align=center>
|
||||
<img src="images/dialog_qtss.gif" width=64 height=64 align=bottom alt="">
|
||||
</td>
|
||||
<td align=left valign=top class=large>
|
||||
<b><qtssstring name="ChBroadcastPassHeader"/></b>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<table border=0 cellspacing=4 cellpadding=0>
|
||||
<tr>
|
||||
<td colspan=2> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<b><qtssstring name="ChPassNewUser"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<input type=text name="new_user" id="new_user" value="" size=25>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<b><qtssstring name="ChPassNewPasswd"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<input type=password name="new_password1" value="" size=25>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<font face="Arial"><b><qtssstring name="ChPassReenterPasswd"/></b></font>
|
||||
</td>
|
||||
<td align=left>
|
||||
<input type=password name="new_password2" value="" size=25>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table border=0 cellspacing=0 cellpadding=0 width="100%">
|
||||
<tr>
|
||||
<td valign=top align=right>
|
||||
<br>
|
||||
<input type=button name="ChangePass" value="<qtssstring name=CancelButtonTitle/>" onclick="this.form.elements['action'].value='';this.form.elements['filename'].value='general_settings.html';this.form.submit()"><span class=white>....</span><input type=submit name=ok value="<qtssstring name=ChPassChangePasswdButton/>"><span class=white>........</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<img src="images/dialog_bottom.gif" width=500 height=20 align=bottom alt="">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</qtssobject>
|
||||
</body>
|
||||
</html>
|
136
WebAdmin/WebAdminHtml/change_mp3_password.html
Normal file
|
@ -0,0 +1,136 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="BBEdit Prerelease">
|
||||
<style type="text/css">
|
||||
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
|
||||
.large { font-weight: bold; font-size: 14px }
|
||||
.small { font-size: 10px }
|
||||
.white { color: #FFFFFF }
|
||||
.header { font-size: 18px; color:#666699 }
|
||||
input { font-size: 12px }
|
||||
</style>
|
||||
<script src="includes/encode_unicode.js" type="text/javascript" language="Javascript" charset="utf-8"></script>
|
||||
<qtssobject name=scriptTag>
|
||||
//<script language=javascript>
|
||||
|
||||
function checkStringForHighBitChars(theString) {
|
||||
var foundHighBitChar = false;
|
||||
|
||||
for (var i = 0; i < theString.length; i++) {
|
||||
if (theString.charCodeAt(i) >= 128) {
|
||||
foundHighBitChar = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return foundHighBitChar;
|
||||
}
|
||||
|
||||
function onLoadScript() {
|
||||
document.forms[0].elements['new_password1'].focus();
|
||||
}
|
||||
|
||||
function validateFormData() {
|
||||
if (document.forms[0].elements['new_password1'].value.indexOf('"') >= 0) {
|
||||
entityAlert("<qtssstring name=ChMP3PassErrorNoQuotes/>");
|
||||
return false;
|
||||
}
|
||||
if (document.forms[0].elements['new_password1'].value.indexOf('&') >= 0) {
|
||||
entityAlert("<qtssstring name=ChMP3PassNoAmpersands/>");
|
||||
return false;
|
||||
}
|
||||
if (document.forms[0].elements['new_password1'].value.indexOf(' ') >= 0) {
|
||||
entityAlert("<qtssstring name=ChMP3PassErrorNoSpaces/>");
|
||||
return false;
|
||||
}
|
||||
if ((document.forms[0].elements['new_password1'].value.indexOf('<') >= 0) || (document.forms[0].elements['new_password1'].value.indexOf('>') >= 0)) {
|
||||
entityAlert("<qtssstring name=ChMP3PassNoBrackets/>");
|
||||
return false;
|
||||
}
|
||||
if (document.forms[0].elements['new_password1'].value != document.forms[0].elements['new_password2'].value) {
|
||||
entityAlert("<qtssstring name=ChMP3PassNoMatchText/>");
|
||||
return false;
|
||||
}
|
||||
if (checkStringForHighBitChars(document.forms[0].elements['new_password1'].value)) {
|
||||
entityAlert("<qtssstring name=ChMP3PassNoHighBitStr/>");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="onLoadScript()">
|
||||
<qtssobject type=validatedform>
|
||||
<input type=hidden name=filename value="confirm.html"> <input type=hidden name=action value="ChangeMP3Password">
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=620>
|
||||
<tr>
|
||||
<td align=left valign=top width=20>
|
||||
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
|
||||
</td>
|
||||
<td valign=top align=center>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=500>
|
||||
<tr>
|
||||
<td align=left><img src="images/dialog_top.gif" width=500 height=20 align=bottom alt=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left background="images/dialog_middle.gif">
|
||||
<table border=0 cellspacing=0 cellpadding=4 width="98%">
|
||||
<tr>
|
||||
<td valign=top width=110 align=center>
|
||||
<img src="images/dialog_qtss.gif" width=64 height=64 align=bottom alt="">
|
||||
</td>
|
||||
<td align=left valign=top class=large>
|
||||
<b><qtssstring name="ChMP3PassHeader"/></b>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<table border=0 cellspacing=4 cellpadding=0>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<b><qtssstring name="ChMP3PassNewPasswd"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<input type=password name="new_password1" value="" size=25>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<font face="Arial"><b><qtssstring name="ChMP3PassReenterPasswd"/></b></font>
|
||||
</td>
|
||||
<td align=left>
|
||||
<input type=password name="new_password2" value="" size=25>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table border=0 cellspacing=0 cellpadding=0 width="100%">
|
||||
<tr>
|
||||
<td valign=top align=right>
|
||||
<br>
|
||||
<input type=button name="ChangePass" value="<qtssstring name=CancelButtonTitle/>" onclick="this.form.elements['action'].value='';this.form.elements['filename'].value='general_settings.html';this.form.submit()"><span class=white>....</span><input type=submit name=ok value="<qtssstring name=ChMP3PassChangePasswdButton/>"><span class=white>........</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<img src="images/dialog_bottom.gif" width=500 height=20 align=bottom alt="">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</qtssobject>
|
||||
</body>
|
||||
</html>
|
170
WebAdmin/WebAdminHtml/change_password.html
Normal file
|
@ -0,0 +1,170 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="BBEdit Prerelease">
|
||||
<style type="text/css">
|
||||
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
|
||||
.large { font-weight: bold; font-size: 14px }
|
||||
.small { font-size: 10px }
|
||||
.white { color: #FFFFFF }
|
||||
.header { font-size: 18px; color:#666699 }
|
||||
input { font-size: 12px }
|
||||
</style>
|
||||
<script src="includes/encode_unicode.js" type="text/javascript" language="Javascript" charset="utf-8"></script>
|
||||
<qtssobject name=scriptTag>
|
||||
//<script language=javascript>
|
||||
|
||||
function checkStringForHighBitChars(theString) {
|
||||
var foundHighBitChar = false;
|
||||
|
||||
for (var i = 0; i < theString.length; i++) {
|
||||
if (theString.charCodeAt(i) >= 128) {
|
||||
foundHighBitChar = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return foundHighBitChar;
|
||||
}
|
||||
|
||||
function onLoadScript() {
|
||||
document.forms[0].elements['old_username'].focus();
|
||||
}
|
||||
|
||||
function validateFormData() {
|
||||
if ((document.forms[0].elements['new_user'].value != '') && (document.forms[0].elements['new_user'].value == document.forms[0].elements['qtssBroadcastUsername'].value)) {
|
||||
entityAlert("<qtssstring name=ChBoradcastPassCannotBeAdminUser/>");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (document.forms[0].elements['new_user'].value.indexOf(' ') >= 0) {
|
||||
entityAlert("<qtssstring name=ChPassCannotContainSpacesText/>");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (document.forms[0].elements['new_user'].value.indexOf(':') >= 0) {
|
||||
entityAlert("<qtssstring name=ChPassUsernameCannotHaveColonText/>");
|
||||
return false;
|
||||
}
|
||||
|
||||
for (var i = 0; i < 7; i++) {
|
||||
if ((document.forms[0].elements[i].value) && (checkStringForHighBitChars(document.forms[0].elements[i].value))) {
|
||||
entityAlert("<qtssstring name=ChPassNoHighBitStr/>");
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="onLoadScript()">
|
||||
<qtssobject type=validatedform>
|
||||
<qtssobject type=hidden name=qtssBroadcastUsername/>
|
||||
<input type=hidden name=filename value="confirm.html"> <input type=hidden name=action value="ChangePassword">
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=620>
|
||||
<tr>
|
||||
<td align=left valign=top width=20>
|
||||
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
|
||||
</td>
|
||||
<td valign=top align=center>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=500>
|
||||
<tr>
|
||||
<td align=left><img src="images/dialog_top.gif" width=500 height=20 align=bottom alt=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left background="images/dialog_middle.gif">
|
||||
<table border=0 cellspacing=0 cellpadding=4 width="98%">
|
||||
<tr>
|
||||
<td valign=top width=110 align=center>
|
||||
<img src="images/dialog_qtss.gif" width=64 height=64 align=bottom alt="">
|
||||
</td>
|
||||
<td align=left valign=top class=large>
|
||||
<b><qtssstring name="ChPassHeader"/></b>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<table border=0 cellspacing=4 cellpadding=0>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<b><qtssstring name="ChPassCurrentUser"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<input type=text name="old_username" value="" size=25>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<b><qtssstring name="ChPassCurrentPasswd"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<input type=password name="old_password" value="" size=25>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p>
|
||||
<br>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<b><qtssstring name="ChPassNewUser"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<input type=text name="new_user" value="" size=25>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<b><qtssstring name="ChPassNewPasswd"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<input type=password name="new_password1" value="" size=25>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<font face="Arial"><b><qtssstring name="ChPassReenterPasswd"/></b></font>
|
||||
</td>
|
||||
<td align=left>
|
||||
<input type=password name="new_password2" value="" size=25>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table border=0 cellspacing=0 cellpadding=0 width="100%">
|
||||
<tr>
|
||||
<td valign=top align=right>
|
||||
<br>
|
||||
<input type=button name="ChangePass" value="<qtssstring name=CancelButtonTitle/>" onclick="this.form.elements['action'].value='';this.form.elements['filename'].value='general_settings.html';this.form.submit()"><span class=white>....</span><input type=submit name=ok value="<qtssstring name=ChPassChangePasswdButton/>"><span class=white>........</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<img src="images/dialog_bottom.gif" width=500 height=20 align=bottom alt="">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</qtssobject>
|
||||
</body>
|
||||
</html>
|
1
WebAdmin/WebAdminHtml/change_password_redirect.html
Normal file
|
@ -0,0 +1 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta name="generator" content="BBEdit 6.5">
</head>
<body onload="document.forms[0].submit()"><qtssobject type=getform>
<input type="hidden" name="filename" value="general_settings.html">
<input type="hidden" name="action" value="ConfirmPassChanged">
</qtssobject></body>
</html>
|
78
WebAdmin/WebAdminHtml/confirm.html
Normal file
|
@ -0,0 +1,78 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<style type="text/css">
|
||||
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
|
||||
.large { font-weight: bold; font-size: 14px }
|
||||
</style>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif">
|
||||
<qtssobject type="form"><qtssobject name="nextFilename"/>
|
||||
<qtssrepeater name=queryparams>
|
||||
<qtssobject name=passthrough/>
|
||||
</qtssrepeater>
|
||||
<table border="0" cellspacing="0" cellpadding="0" width="620">
|
||||
<tr>
|
||||
<td align=left valign="top" nowrap width="20">
|
||||
<img src="images/spacer.gif" width="20" height="20" align="top" alt="">
|
||||
</td>
|
||||
<td valign="top" align="center">
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<table border="0" cellspacing="0" cellpadding="0" width="400">
|
||||
<tr>
|
||||
<td align=left>
|
||||
<img src="images/dialog_top_sm.gif" width="400" height="20" align="bottom" alt="">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left background="images/dialog_middle_sm.gif">
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td align=left width="20">
|
||||
<img src="images/spacer.gif" width="20" height="20" align="bottom" alt="">
|
||||
</td>
|
||||
<td valign="top" width="64" align="center">
|
||||
<img src="images/dialog_alert.gif" width=90 height=60 align=bottom alt="">
|
||||
</td>
|
||||
<td align=left width="20">
|
||||
<img src="images/spacer.gif" width="20" height="20" align="bottom" alt="">
|
||||
</td>
|
||||
<td align=left>
|
||||
<span class="large"><b><qtssobject name=dialogHeader/></b> </span>
|
||||
<br>
|
||||
<br>
|
||||
<qtssobject name=dialogText/>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<table border="0" cellspacing="0" cellpadding="0" width="100%">
|
||||
<tr>
|
||||
<td valign="top" align="right">
|
||||
<input type="submit" value=" <qtssstring name=OKButtonTitle/> ">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td align=left width="20">
|
||||
<img src="images/spacer.gif" width="20" height="20" align="bottom" alt="">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<img src="images/dialog_bottom_sm.gif" width="400" height="20" align="bottom" alt="">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</qtssobject>
|
||||
</body>
|
||||
</html>
|
182
WebAdmin/WebAdminHtml/connected.html
Normal file
|
@ -0,0 +1,182 @@
|
|||
<html>
|
||||
<head>
|
||||
<qtssobject name=pageRefreshTag />
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
|
||||
<style type="text/css">
|
||||
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
|
||||
.large { font-weight: bold; font-size: 14px }
|
||||
.small { font-size: 10px }
|
||||
.header { font-size: 18px; color:#666699 }
|
||||
.white { color: #FFFFFF }
|
||||
.columnheader { color: #333333; font-size: 10px; }
|
||||
</style>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif">
|
||||
<qtssobject type=getform>
|
||||
<input type=hidden name="filename" value=connected.html> <input type=hidden name="action" value=setrefresh>
|
||||
<p>
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=600>
|
||||
<tr>
|
||||
<td align=left valign=top nowrap width=20>
|
||||
<img src="images/spacer.gif" width="20" height="20" align="top" alt="">
|
||||
</td>
|
||||
<td align=left valign=top>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td align=left nowrap class=header>
|
||||
<qtssstring name="ConnUserHeader" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left nowrap>
|
||||
<img src="images/divider.gif" width="600" height="1" align="middle" alt="">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table border=0 cellspacing=4 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td align=center>
|
||||
<b><qtssstring name="ConnUserDisplay" /></b>
|
||||
<qtssobject name=displayCount type=submitselect>
|
||||
<qtssobject name=displayCount param=20>
|
||||
20
|
||||
</qtssobject>
|
||||
<qtssobject name=displayCount param=50>
|
||||
50
|
||||
</qtssobject>
|
||||
<qtssobject name=displayCount param=100>
|
||||
100
|
||||
</qtssobject>
|
||||
<qtssobject name=displayCount param=200>
|
||||
200
|
||||
</qtssobject>
|
||||
<qtssobject name=displayCount param=all>
|
||||
<qtssstring name="ConnUserAllEntries"/>
|
||||
</qtssobject>
|
||||
</qtssobject>
|
||||
<b><qtssstring name="ConnUserEntries" /></b>
|
||||
</td>
|
||||
<td align=center>
|
||||
<b><qtssstring name="ConnUserPageRefreshInterval" />:</b>
|
||||
<qtssobject name=pageRefreshInterval type=submitselect>
|
||||
<qtssobject name=pageRefreshInterval param=5>
|
||||
5
|
||||
<qtssstring name="ConnUserSeconds" />
|
||||
</qtssobject>
|
||||
<qtssobject name=pageRefreshInterval param=10>
|
||||
10
|
||||
<qtssstring name="ConnUserSeconds" />
|
||||
</qtssobject>
|
||||
<qtssobject name=pageRefreshInterval param=60>
|
||||
1
|
||||
<qtssstring name="ConnUserMinute" />
|
||||
</qtssobject>
|
||||
<qtssobject name=pageRefreshInterval param=300>
|
||||
5
|
||||
<qtssstring name="ConnUserMinutes" />
|
||||
</qtssobject>
|
||||
<qtssobject name=pageRefreshInterval param=1800>
|
||||
30
|
||||
<qtssstring name="ConnUserMinutes" />
|
||||
</qtssobject>
|
||||
<qtssobject name=pageRefreshInterval param=3600>
|
||||
1
|
||||
<qtssstring name="ConnUserHour" />
|
||||
</qtssobject>
|
||||
<qtssobject name=pageRefreshInterval param=never>
|
||||
<qtssstring name="ConnUserNever" />
|
||||
</qtssobject>
|
||||
</qtssobject>
|
||||
</td>
|
||||
</tr>
|
||||
</table><br>
|
||||
<table border=0 cellspacing=0 cellpadding=0 width="100%">
|
||||
<tr>
|
||||
<td><table border=0 cellspacing=0 cellpadding=4 width="100%" height=10>
|
||||
<tr>
|
||||
<td align=left nowrap>
|
||||
<b><qtssstring name="ConnUserHeader"/></b>
|
||||
</td>
|
||||
<td align=right nowrap width=210 class=small>
|
||||
<qtssobject name=qtssSvrCurrentTimeMilliseconds/>
|
||||
</td>
|
||||
</tr>
|
||||
</table></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#EAEAEA">
|
||||
<tr height=1>
|
||||
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
<td bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
<td bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
<td bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
<td bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
<td bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
<td bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
<td bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
</tr>
|
||||
<tr height=20>
|
||||
<td width=1 height=20 bgcolor="#8C93AD"><spacer type=block width=1 height=20></td>
|
||||
<qtssobject name="connUserSort" format=connusercolumnheader param="ConnUserConnType"/>
|
||||
<td width=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1 height=20></td>
|
||||
<qtssobject name="connUserSort" format=connusercolumnheader param="ConnUserIPAddress"/>
|
||||
<td width=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1 height=20></td>
|
||||
<qtssobject name="connUserSort" format=connusercolumnheader param="ConnUserBitRate"/>
|
||||
<td width=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1 height=20></td>
|
||||
<qtssobject name="connUserSort" format=connusercolumnheader param="ConnUserBytesSent"/>
|
||||
<td width=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1 height=20></td>
|
||||
<qtssobject name="connUserSort" format=connusercolumnheader param="ConnUserPercPacketLoss"/>
|
||||
<td width=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1 height=20></td>
|
||||
<qtssobject name="connUserSort" format=connusercolumnheader param="ConnUserTimeConnected"/>
|
||||
<td width=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1 height=20></td>
|
||||
<qtssobject name="connUserSort" format=connusercolumnheader param="ConnUserConnectedTo"/>
|
||||
<td width=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1 height=20></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan=15 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
</tr>
|
||||
<qtssrepeater name=connectedUsers>
|
||||
<tr height=20>
|
||||
<td width=1 height=20 bgcolor="#8C93AD"><spacer type=block width=1 height=20></td>
|
||||
<qtssobject name="connUserSort" type=customtablecell param="ConnUserConnType" format=sortedtablecell><img src="images/<qtssobject name=qtssCliSesCurrentConnType />" width=16 height=16></qtssobject>
|
||||
<td width=1><spacer type=block width=1 height=1 height=20></td>
|
||||
<qtssobject name="connUserSort" type=customtablecell param="ConnUserIPAddress" format=sortedtablecell><qtssobject name=qtssCliRTSPSessRemoteAddrStr /></qtssobject>
|
||||
<td width=1><spacer type=block width=1 height=1 height=20></td>
|
||||
<qtssobject name="connUserSort" type=customtablecell param="ConnUserBitRate" format=sortedtablecell><qtssobject name=qtssCliSesCurrentBitRate format=bps /></qtssobject>
|
||||
<td width=1><spacer type=block width=1 height=1 height=20></td>
|
||||
<qtssobject name="connUserSort" type=customtablecell param="ConnUserBytesSent" format=sortedtablecell><qtssobject name=qtssCliSesRTPBytesSent format=bytes /></qtssobject>
|
||||
<td width=1><spacer type=block width=1 height=1 height=20></td>
|
||||
<qtssobject name="connUserSort" type=customtablecell param="ConnUserPercPacketLoss" format=sortedtablecell><qtssobject name=qtssCliSesPacketLossPercent format=float />%</qtssobject>
|
||||
<td width=1><spacer type=block width=1 height=1 height=20></td>
|
||||
<qtssobject name="connUserSort" type=customtablecell param="ConnUserTimeConnected" format=sortedtablecell><qtssobject name=qtssCliSesTimeConnectedinMsec format=time /></qtssobject>
|
||||
<td width=1><spacer type=block width=1 height=1 height=20></td>
|
||||
<qtssobject name="connUserSort" type=customtablecell param="ConnUserConnectedTo" format=sortedtablecell><qtssobject name=qtssCliSesPresentationURL /></qtssobject>
|
||||
<td width=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1 height=20></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
<td colspan=13 height=1><spacer type=block width=1 height=1></td>
|
||||
<td width=1 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
</tr>
|
||||
</qtssrepeater>
|
||||
<tr>
|
||||
<td colspan=15 height=1 bgcolor="#8C93AD"><spacer type=block width=1 height=1></td>
|
||||
</tr>
|
||||
</table></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</qtssobject>
|
||||
</body>
|
||||
</html>
|
80
WebAdmin/WebAdminHtml/error_log.html
Normal file
|
@ -0,0 +1,80 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<style type="text/css">
|
||||
.button { font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
|
||||
.logheader { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-weight: bold; font-size: 14px }
|
||||
.header { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 18px; color:#666699 }
|
||||
.green { color: #009900 }
|
||||
.red { color: #CC0000 }
|
||||
</style>
|
||||
<qtssobject name=scriptTag>
|
||||
//<script language=javascript>
|
||||
function showConfirmMessage() {
|
||||
if ('<qtssobject name=confirmMessage/>' != '') {
|
||||
if (parent.frames['top'].showConfirmMessage) {
|
||||
parent.frames['top'].showConfirmMessage('<qtssobject name=confirmMessage/>');
|
||||
}
|
||||
else if (parent.parent.frames[0].showConfirmMessage) {
|
||||
parent.parent.frames[0].showConfirmMessage('<qtssobject name=confirmMessage/>');
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="showConfirmMessage()">
|
||||
<qtssobject type=form>
|
||||
<input type=hidden name=filename value="error_log.html">
|
||||
<input type=hidden name=action value="ResetErrorLog">
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=620>
|
||||
<tr>
|
||||
<td align=left valign=top nowrap width=20>
|
||||
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
|
||||
</td>
|
||||
<td valign=top align=center>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td align=left nowrap class=header>
|
||||
<qtssstring name="ErrorLogHeader"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p></p>
|
||||
<table border=0 cellspacing=0 cellpadding=20>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<qtssobject name="qtssErrorLog"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p></p>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td align=left>
|
||||
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<br>
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td class=button><a href="javascript:document.forms[0].submit()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
|
||||
<td class=button><a href="javascript:document.forms[0].submit()"><qtssstring name="ErrorLogReset" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</qtssobject>
|
||||
</body>
|
||||
</html>
|
1
WebAdmin/WebAdminHtml/format.html
Normal file
24
WebAdmin/WebAdminHtml/frameset.html
Normal file
|
@ -0,0 +1,24 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title><qtssstring name=ServerName/>: <qtssobject name=qtssSvrDefaultDNSName/></title>
|
||||
<script type="text/javascript" language=javascript>
|
||||
|
||||
if (parent.frames.length > 0) {
|
||||
parent.location = '/parse_xml.cgi';
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<frameset rows="40,100%" border=0 frameborder=0>
|
||||
<noframes><body bgcolor="#FFFFFF">
|
||||
<p>Please load this page in a 4.0 or higher browser.</p>
|
||||
</body>
|
||||
</noframes>
|
||||
<frame src="/parse_xml.cgi?filename=top.html" name="top" noresize scrolling=no marginwidth=0 marginheight=0 frameborder=0>
|
||||
<frameset cols="150,50*" frameborder=0>
|
||||
<frame src="/parse_xml.cgi?filename=nav.html" name="nav" noresize scrolling=no marginwidth=0 marginheight=0 frameborder=0>
|
||||
<frame src="/parse_xml.cgi?filename=welcome.html" name="content" marginwidth=0 marginheight=0 frameborder=0>
|
||||
</frameset>
|
||||
</frameset>
|
||||
</html>
|
241
WebAdmin/WebAdminHtml/general_settings.html
Normal file
|
@ -0,0 +1,241 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
|
||||
<style type="text/css">
|
||||
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
|
||||
.large { font-weight: bold; font-size: 14px }
|
||||
.small { font-size: 10px }
|
||||
.white { color: #FFFFFF }
|
||||
.header { font-size: 18px; color:#666699 }
|
||||
input { font-size: 12px }
|
||||
</style>
|
||||
<script src="includes/encode_unicode.js" type="text/javascript" language="Javascript" charset="utf-8"></script>
|
||||
<qtssobject name=scriptTag>
|
||||
//<script language=javascript>
|
||||
|
||||
function onLoadScript() {
|
||||
showConfirmMessage();
|
||||
document.forms[0].elements['qtssMovieFolder'].focus();
|
||||
}
|
||||
|
||||
function showConfirmMessage() {
|
||||
if ('<qtssobject name=confirmMessage/>' != '') {
|
||||
if (parent.frames['top'].showConfirmMessage) {
|
||||
parent.frames['top'].showConfirmMessage('<qtssobject name=confirmMessage/>');
|
||||
}
|
||||
else if (parent.parent.frames[0].showConfirmMessage) {
|
||||
parent.parent.frames[0].showConfirmMessage('<qtssobject name=confirmMessage/>');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function validateFormData() {
|
||||
var wasInvalid = false;
|
||||
if (document.forms[0].elements['qtssMovieFolder'].value == '') {
|
||||
entityAlert("<qtssstring name=GenSetErrorMediaDirCannotBeBlank/>");
|
||||
document.forms[0].elements['qtssMovieFolder'].value = document.forms[0].elements['qtssMovieFolder_shadow'].value;
|
||||
return false;
|
||||
}
|
||||
if (document.forms[0].elements['qtssMaxConn'].value == '') {
|
||||
entityAlert("<qtssstring name=GenSetErrorMaxConnCannotBeBlank/>");
|
||||
wasInvalid = true; // trigger the form to cancel
|
||||
}
|
||||
if ((document.forms[0].elements['qtssMaxConn'].value.match('[^0-9]') != null) || (document.forms[0].elements['qtssMaxConn'].value < 0)) {
|
||||
entityAlert("<qtssstring name=GenSetErrorMaxConnMustBeNum/>");
|
||||
wasInvalid = true; // trigger the form to cancel
|
||||
}
|
||||
if (wasInvalid) { // set because qtssMaxConn is invalid
|
||||
document.forms[0].elements['qtssMaxConn'].value = document.forms[0].elements['qtssMaxConn_shadow'].value;
|
||||
return false;
|
||||
}
|
||||
if (document.forms[0].elements['bpsinput'].value == '') {
|
||||
entityAlert("<qtssstring name=GenSetErrorMaxThroughCannotBeBlank/>");
|
||||
wasInvalid = true; // trigger the form to cancel
|
||||
}
|
||||
if ((document.forms[0].elements['bpsinput'].value.match('[^0-9]') != null) || (document.forms[0].elements['bpsinput'].value < 0)) {
|
||||
entityAlert("<qtssstring name=GenSetErrorMaxThroughMustBeNum/>");
|
||||
wasInvalid = true; // trigger the form to cancel
|
||||
}
|
||||
if (wasInvalid) { // set because bpsinput was invalid
|
||||
document.forms[0].elements['bpsinput'].value = Math.floor(document.forms[0].elements['bpsinput_shadow'].value);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="onLoadScript()">
|
||||
<qtssobject type=validatedform>
|
||||
<input type=hidden name=filename value="general_settings.html">
|
||||
<input type=hidden name=action value="SaveGeneralSettings">
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=620>
|
||||
<tr>
|
||||
<td align=left valign=top nowrap width=20>
|
||||
<p>
|
||||
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
|
||||
</p>
|
||||
</td>
|
||||
<td valign=top align=center>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td align=left nowrap class=header>
|
||||
<qtssstring name="GenSetHeader"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=0>
|
||||
<tr>
|
||||
<td align=left valign=top>
|
||||
<table border=0 cellspacing=4 cellpadding=0>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<b><qtssstring name="GenSetMediaDir"/></b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<qtssobject name=qtssMovieFolder type=string param=" size=64 onchange=validateFormData()"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left class=small>
|
||||
<qtssstring name="GenSetMediaDirExp"/>
|
||||
<br>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table border=0 cellspacing=4 cellpadding=0>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p></p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<b><qtssstring name="GenSetMaxConn"/> </b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject name=qtssMaxConn type=string param=" size=6 maxlength=4 onchange=validateFormData()"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<b><qtssstring name="GenSetMaxThroughput"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject name=qtssMaxThroughput param=" size=6 maxlength=4 onchange=validateFormData()"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p></p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<b><qtssstring name="GenSetDefaultAuthScheme"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject name="qtssAuthScheme" type=select>
|
||||
<qtssobject name="qtssAuthScheme" type=option format=option param=basic>
|
||||
<qtssstring name="GenSetBasicAuth"/>
|
||||
</qtssobject>
|
||||
<qtssobject name="qtssAuthScheme" type=option format=option param=digest>
|
||||
<qtssstring name="GenSetDigestAuth"/>
|
||||
</qtssobject>
|
||||
</qtssobject>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=0 width="100%">
|
||||
<tr>
|
||||
<td align=left valign=top>
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td><a href="/parse_xml.cgi?action=&filename=change_password.html"><img src="images/link.gif" width=28 height=24 border=0></a></td>
|
||||
<td><a href="/parse_xml.cgi?action=&filename=change_password.html"><qtssstring name=GenSetChangeAdminPass/></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td><a href="/parse_xml.cgi?action=&filename=change_broadcast_password.html"><img src="images/link.gif" width=28 height=24 border=0></a></td>
|
||||
<td><a href="/parse_xml.cgi?action=&filename=change_broadcast_password.html"><qtssstring name=GenSetChangeBroadcastPass/></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td><a href="/parse_xml.cgi?action=&filename=change_mp3_password.html"><img src="images/link.gif" width=28 height=24 border=0></a></td>
|
||||
<td><a href="/parse_xml.cgi?action=&filename=change_mp3_password.html"><qtssstring name=GenSetChangeMP3Pass/></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td align=left valign=top colspan=2>
|
||||
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left valign=top>
|
||||
<br>
|
||||
<!--[[a href="#" onclick="showHelp()"]][[img src="images/help.gif" width=20 height=20 border=0]][[/a]]-->
|
||||
</td>
|
||||
<td align=right valign=top>
|
||||
<br>
|
||||
<input type=submit name="Submit" value="<qtssstring name=SubmitButtonTitle/>">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</qtssobject></body>
|
||||
</html>
|
125
WebAdmin/WebAdminHtml/html_en/genres
Normal file
|
@ -0,0 +1,125 @@
|
|||
A capella
|
||||
Acid
|
||||
Acid Jazz
|
||||
Acid Punk
|
||||
Acoustic
|
||||
Alternative
|
||||
AlternRock
|
||||
Ambient
|
||||
Avantgarde
|
||||
Ballad
|
||||
Bass
|
||||
Bebop
|
||||
Big Band
|
||||
Bluegrass
|
||||
Blues
|
||||
Booty Bass
|
||||
Cabaret
|
||||
Celtic
|
||||
Chamber Music
|
||||
Chanson
|
||||
Chorus
|
||||
Christian Rap
|
||||
Classic Rock
|
||||
Classical
|
||||
Club
|
||||
Comedy
|
||||
Country
|
||||
Cult
|
||||
Dance
|
||||
Dance Hall
|
||||
Darkwave
|
||||
Death Metal
|
||||
Disco
|
||||
Dream
|
||||
Drum Solo
|
||||
Duet
|
||||
Easy Listening
|
||||
Electronic
|
||||
Ethnic
|
||||
Euro-House
|
||||
Euro-Techno
|
||||
Eurodance
|
||||
Fast Fusion
|
||||
Folk
|
||||
Folk-Rock
|
||||
Folklore
|
||||
Freestyle
|
||||
Funk
|
||||
Fusion
|
||||
Game
|
||||
Gangsta
|
||||
Gospel
|
||||
Gothic
|
||||
Gothic Rock
|
||||
Grunge
|
||||
Hard Rock
|
||||
Hip-Hop
|
||||
House
|
||||
Humour
|
||||
Industrial
|
||||
Instrumental
|
||||
Instrumental Pop
|
||||
Instrumental Rock
|
||||
Jazz
|
||||
Jazz+Funk
|
||||
Jungle
|
||||
Latin
|
||||
Lo-Fi
|
||||
Meditative
|
||||
Metal
|
||||
Musical
|
||||
National Folk
|
||||
Native American
|
||||
New Age
|
||||
New Wave
|
||||
Noise
|
||||
Oldies
|
||||
Opera
|
||||
Other
|
||||
Polka
|
||||
Pop
|
||||
Pop-Folk
|
||||
Pop/Funk
|
||||
Power Ballad
|
||||
Pranks
|
||||
Primus
|
||||
Progressive Rock
|
||||
Psychadelic
|
||||
Psychedelic Rock
|
||||
Punk
|
||||
Punk Rock
|
||||
R&B
|
||||
Rap
|
||||
Rave
|
||||
Reggae
|
||||
Retro
|
||||
Revival
|
||||
Rhythmic Soul
|
||||
Rock
|
||||
Rock & Roll
|
||||
Samba
|
||||
Satire
|
||||
Showtunes
|
||||
Ska
|
||||
Slow Jam
|
||||
Slow Rock
|
||||
Sonata
|
||||
Soul
|
||||
Sound Clip
|
||||
Soundtrack
|
||||
Southern Rock
|
||||
Space
|
||||
Speech
|
||||
Swing
|
||||
Symphonic Rock
|
||||
Symphony
|
||||
Tango
|
||||
Techno
|
||||
Techno-Industrial
|
||||
Top 40
|
||||
Trailer
|
||||
Trance
|
||||
Tribal
|
||||
Trip-Hop
|
||||
Vocal
|
438
WebAdmin/WebAdminHtml/html_en/messages
Normal file
|
@ -0,0 +1,438 @@
|
|||
# Text messages, errors and warnings
|
||||
# Keyword ########################## Message ##########
|
||||
# The strings in double quotes are to be localized ####
|
||||
#######################################################
|
||||
|
||||
# Messages used in cgi-lib.pl
|
||||
# Http header and body messages
|
||||
Http200Status "OK"
|
||||
Http302Status "Temporarily Unavailable"
|
||||
Http401Status "Unauthorized"
|
||||
Http403Status "Forbidden"
|
||||
Http404Status "File Not Found"
|
||||
Http401Body "A password is required to administer this Streaming Server. Please Try Again."
|
||||
Http403Body "Access to the requested file is denied."
|
||||
Http404Body "The requested file was not found."
|
||||
|
||||
# Server status messages
|
||||
ServerNotRunningMessage "Streaming Server is not Running"
|
||||
StartServerMessage "Click on 'Start Server Now' to start the server."
|
||||
|
||||
# Messages used in adminprotocol-lib.pl
|
||||
# Socket errors
|
||||
NoHostError "No Host"
|
||||
SocketFailedError "Socket Failed"
|
||||
ConnectFailedError "Connect Failed"
|
||||
SendFailedError "Send failed"
|
||||
|
||||
# File errors
|
||||
FileOpenError "Can't open file"
|
||||
|
||||
# Time strings
|
||||
DaysStr "days"
|
||||
HoursStr "hrs"
|
||||
MinutesStr "min"
|
||||
SecondsStr "sec"
|
||||
|
||||
# Day strings
|
||||
MonStr "Mon"
|
||||
TueStr "Tue"
|
||||
WedStr "Wed"
|
||||
ThuStr "Thu"
|
||||
FriStr "Fri"
|
||||
SatStr "Sat"
|
||||
SunStr "Sun"
|
||||
|
||||
# Month strings
|
||||
JanStr "Jan"
|
||||
FebStr "Feb"
|
||||
MarStr "Mar"
|
||||
AprStr "Apr"
|
||||
MayStr "May"
|
||||
JunStr "Jun"
|
||||
JulStr "Jul"
|
||||
AugStr "Aug"
|
||||
SepStr "Sep"
|
||||
OctStr "Oct"
|
||||
NovStr "Nov"
|
||||
DecStr "Dec"
|
||||
|
||||
# Japanese date suffix strings
|
||||
YearSuffix ""
|
||||
DaySuffix ""
|
||||
|
||||
# Server State strings
|
||||
ServerServerIs "Server is"
|
||||
ServerStartingUpStr "Starting Up"
|
||||
ServerRunningStr "Running"
|
||||
ServerNotRunningStr "Not Running"
|
||||
ServerRefusingConnectionsStr "Refusing Connections"
|
||||
ServerInFatalErrorStateStr "In Fatal Error State"
|
||||
ServerShuttingDownStr "Shutting Down"
|
||||
ServerIdleStr "Idle"
|
||||
|
||||
# Start/Stop Server Buttons
|
||||
StartServerButton "Enable Server"
|
||||
StopServerButton "Disable Server"
|
||||
|
||||
# Units
|
||||
BytesStr "Bytes"
|
||||
KiloBytesStr "KB"
|
||||
MegaBytesStr "MB"
|
||||
GigaBytesStr "GB"
|
||||
BitsPerSecStr "bps"
|
||||
KilobitsPerSecStr "Kbps"
|
||||
MegabitsPerSecStr "Mbps"
|
||||
|
||||
# Time in seconds for confirmation messages to disappear
|
||||
ConfirmSecs "5"
|
||||
|
||||
# Confirmation colors - hex values
|
||||
ConfirmColor "#006600"
|
||||
|
||||
# Messages used in playlist-lib.pl
|
||||
# labels used in playlist tables
|
||||
PLMovie "Movie"
|
||||
PLDirectory "Directory"
|
||||
PLState_0 "stopped"
|
||||
PLState_1 "playing"
|
||||
PLState_2 "error"
|
||||
|
||||
# Globals
|
||||
ServerName "Darwin Streaming Server"
|
||||
QTServerName "QuickTime Streaming Server"
|
||||
MountPoint "Mount Point:"
|
||||
Username "User Name:"
|
||||
Password "Password:"
|
||||
of "of"
|
||||
|
||||
# Server Startup messages
|
||||
ServerStartupExpText "The server is currently not running.<br>Please start it before attempting to administer it."
|
||||
|
||||
# Login/logout messages
|
||||
LoginTitle "Log In to Darwin Streaming Server"
|
||||
QTLoginTitle "Log In to QuickTime Streaming Server"
|
||||
LoginPleaseLogin "Log in with an administrative username and password."
|
||||
LoginUsername "User Name:"
|
||||
LoginPassword "Password:"
|
||||
LoginButton "Log In"
|
||||
|
||||
# Standard dialog stuff
|
||||
CancelButtonTitle "Cancel"
|
||||
OKButtonTitle "OK"
|
||||
SubmitButtonTitle "Save Changes"
|
||||
Enabled "Enabled"
|
||||
Disabled "Disabled"
|
||||
|
||||
# Central nav links
|
||||
NavMain "Main"
|
||||
NavBroadcaster "Broadcaster"
|
||||
NavConnectedUsers "Connected Users"
|
||||
NavRelayStatus "Relay Status"
|
||||
NavGeneralSettings "General Settings"
|
||||
NavPortSettings "Port Settings"
|
||||
NavRelaySettings "Relay Settings"
|
||||
NavLogSettings "Log Settings"
|
||||
NavPlaylists "Playlists"
|
||||
NavErrorLog "Error Log"
|
||||
NavAccessHistory "Access History"
|
||||
NavLogOut "Log Out"
|
||||
|
||||
# Server Snapshot messages
|
||||
SnapshotHeader "Server Snapshot"
|
||||
SnapshotServer "Server:"
|
||||
SnapshotStatus "Status:"
|
||||
SnapshotStarted "Started"
|
||||
SnapshotCurrentTimeOnServer "Current Time On Server:"
|
||||
SnapshotUptime "Up Time:"
|
||||
SnapshotDNSName "DNS Name (default):"
|
||||
SnapshotServerVersion "Server Version:"
|
||||
SnapshotServerAPIVersion "Server API Version:"
|
||||
SnapshotCPULoad "CPU Load:"
|
||||
SnapshotCurrentConnectionCount "Current # of Connections:"
|
||||
SnapshotCurrentThroughput "Current Throughput:"
|
||||
SnapshotTotalBytesServed "Total Bytes Served:"
|
||||
SnapshotTotalConnectionsServed "Total Connections Served:"
|
||||
|
||||
# General Settings messages
|
||||
GenSetHeader "General Settings"
|
||||
GenSetMediaDir "Media Directory:"
|
||||
GenSetMediaDirExp "This is the master directory where all of your media is stored."
|
||||
GenSetSSL "Secure Administration (SSL):"
|
||||
GenSetMaxConn "Max. Number of Connections:"
|
||||
GenSetMaxThroughput "Max. Throughput:"
|
||||
GenSetDefaultAuthScheme "Default Authentication Scheme:"
|
||||
GenSetBasicAuth "Basic"
|
||||
GenSetDigestAuth "Digest"
|
||||
GenSetOSXAutoStart "Start Server at System Startup:"
|
||||
GenSetChangeAdminPass "Change Admin Username/Password..."
|
||||
GenSetChangeBroadcastPass "Change Movie Broadcast Password..."
|
||||
GenSetChangeMP3Pass "Change MP3 Broadcast Password..."
|
||||
GenSetSettingsSavedText "Your settings have been saved."
|
||||
GenSetErrorMediaDirCannotBeBlank "The media directory cannot be blank."
|
||||
GenSetErrorMaxConnCannotBeBlank "The maximum connections setting cannot be blank."
|
||||
GenSetErrorMaxConnMustBeNum "The maximum connections setting must be a positive integer."
|
||||
GenSetErrorMaxThroughCannotBeBlank "The maximum throughput setting cannot be blank."
|
||||
GenSetErrorMaxThroughMustBeNum "The maximum throughput setting must be a positive integer."
|
||||
GenSetErrorSSLNotAvail "SSL is not available on this computer. Please make sure that the Net::SSLeay perl module, OpenSSL, and a signed SSL certificate are installed."
|
||||
|
||||
# Connected Users messages
|
||||
ConnUserHeader "Connected Users"
|
||||
ConnUserDisplay "Display"
|
||||
ConnUserAllEntries "all"
|
||||
ConnUserEntries "entries"
|
||||
ConnUserPageRefreshInterval "Page Refresh Interval"
|
||||
ConnUserSeconds "seconds"
|
||||
ConnUserMinute "minute"
|
||||
ConnUserMinutes "minutes"
|
||||
ConnUserHour "hour"
|
||||
ConnUserNever "Never"
|
||||
ConnUserIPAddress "IP Address"
|
||||
ConnUserConnType "Type"
|
||||
ConnUserBitRate "Bit Rate"
|
||||
ConnUserBytesSent "Bytes Sent"
|
||||
ConnUserPercPacketLoss "% Packet Loss"
|
||||
ConnUserTimeConnected "Time Connected"
|
||||
ConnUserConnectedTo "Connected To"
|
||||
|
||||
# Relay Status messages
|
||||
RelayStatHeader "Relay Status"
|
||||
RelayStatConnRelays "Connected Relays"
|
||||
RelayStatRelayName "Relay Name"
|
||||
RelayStatSource "Source"
|
||||
RelayStatDestination "Destination"
|
||||
RelayStatBitrate "Bit Rate"
|
||||
RelayStatBytesRelayed "Bytes Relayed"
|
||||
|
||||
# Port Settings messages
|
||||
PortSetHeader "Port Settings"
|
||||
PortSetStreaming80Title "Streaming on Port 80:"
|
||||
PortSetDesc1 "Streaming on port 80 will allow you to get through some restrictive firewalls, but may interfere with Apache or other web servers running on the same machine."
|
||||
PortSetDesc2 ""
|
||||
PortSetSavedText "Your port settings have been saved."
|
||||
PortServerNotBound80Message "The server is currently not bound to port 80."
|
||||
PortChangeRestartServerConfirm "In order for this change to take effect, you must restart the server. This will interrupt any current streams. Restart now?"
|
||||
|
||||
# Change Password messages
|
||||
ChPassHeader "Change Administrator Username/Password"
|
||||
ChPassCurrentUser "Current User Name:"
|
||||
ChPassCurrentPasswd "Current Password:"
|
||||
ChPassNewUser "New User Name:"
|
||||
ChPassNewPasswd "New Password:"
|
||||
ChPassReenterPasswd "Re-enter New Password:"
|
||||
ChPassChangePasswdButton "Change Password"
|
||||
ChPassSavedText "Your new password has been saved."
|
||||
ChPassOldPasswdWrongHeader "Incorrect Password"
|
||||
ChPassOldPasswdWrongText "The old password was entered incorrectly. Please try again."
|
||||
ChPassNoMatchHeader "Passwords don't match"
|
||||
ChPassNoMatchText "The two passwords you entered don't match. Please try again."
|
||||
ChPassErrorHeader "Error"
|
||||
ChPassErrorText "An error occurred while changing your password."
|
||||
ChPassNotLongerThan80Header "Password too long"
|
||||
ChPassNotLongerThan80Text "Your password cannot be longer than 80 characters."
|
||||
ChPassUsernameNotLongerThan255Header "Username longer than 255 characters"
|
||||
ChPassUsernameNotLongerThan255Text "Your username cannot be longer than 255 characters."
|
||||
ChPassUsernameCannotHaveColonHeader "Username has : character"
|
||||
ChPassUsernameCannotHaveColonText "Your username cannot have the colon (:) character."
|
||||
ChPassCannotHaveQuotesHeader "Username/Password has a quote character"
|
||||
ChPassCannotContainSpacesText "Your administrator name cannot contain spaces."
|
||||
ChPassCannotHaveQuotesText "Your username/password cannot quote characters (either single or double)."
|
||||
ChPassNoHighBitStr "Your username/password cannot have high-bit characters."
|
||||
ChPassMustEnterPasswdString "You must enter a password."
|
||||
|
||||
# Change Broadcast Password messages
|
||||
ChBroadcastPassHeader "Change Broadcast Username/Password"
|
||||
ChBroadcastPassAllowUnrestricted "Allow unrestricted broadcasting"
|
||||
ChBroadcastPassSpacesText "Your broadcast username cannot contain spaces."
|
||||
ChBoradcastPassCannotBeAdminUser "Your broadcast username cannot be the same as your administrator username."
|
||||
|
||||
# Change MP3 Password messages
|
||||
ChMP3PassHeader "Change MP3 Broadcast Password"
|
||||
ChMP3PassCurrentPasswd "Current Password:"
|
||||
ChMP3PassNewPasswd "New Password:"
|
||||
ChMP3PassReenterPasswd "Re-enter New Password:"
|
||||
ChMP3PassChangePasswdButton "Change Broadcast Password"
|
||||
ChMP3PassSavedText "Your new broadcast password has been saved."
|
||||
ChMP3PassOldPasswdWrongHeader "Incorrect Password"
|
||||
ChMP3PassOldPasswdWrongText "The old password was entered incorrectly. Please try again."
|
||||
ChMP3PassNoMatchHeader "Passwords don't match"
|
||||
ChMP3PassNoMatchText "The two passwords you entered don't match. Please try again."
|
||||
ChMP3PassErrorHeader "Error"
|
||||
ChMP3PassErrorText "An error occurred while changing your password."
|
||||
ChMP3PassErrorNoQuotes "Your MP3 password cannot contain quotation marks."
|
||||
ChMP3PassErrorNoSpaces "Your MP3 password cannot contain spaces."
|
||||
ChMP3PassNoHighBitStr "Your MP3 password cannot have high-bit characters."
|
||||
ChMP3PassNoBrackets "Your MP3 password cannot contain < or > symbols."
|
||||
ChMP3PassNoAmpersands "Your MP3 password cannot contain ampersands."
|
||||
ChMP3PassNoPercentageMarks "Your MP3 password cannot contain % symbols."
|
||||
|
||||
# Log Settings messages
|
||||
LogSetHeader "Log Settings"
|
||||
LogSetErrorLogHeader "Error Log"
|
||||
LogSetErrorLogging "Logging:"
|
||||
LogSetEvery "every"
|
||||
LogSetDays "days"
|
||||
LogSetRollErrorLog "Roll log:"
|
||||
LogSetAccessLog "Access Log"
|
||||
LogSetAccessLogging "Logging:"
|
||||
LogSetRollAccessLog "Roll log:"
|
||||
LogSetSavedHeader "Log Settings Saved"
|
||||
LogSetSavedText "Your settings have been saved."
|
||||
LogSetErrorValidationError "All of the settings on this screen must be positive integers."
|
||||
|
||||
# Error Log messages
|
||||
ErrorLogHeader "Error Log"
|
||||
ErrorLogReset "Reset Error Log"
|
||||
ErrorLogResetConf "The error log has been reset successfully."
|
||||
|
||||
# Access History messages
|
||||
AccessHistHeader "Access History"
|
||||
AccessHistFilesReqHeader "Files Requested Since Last Reset"
|
||||
AccessHistFileReq "File Requested"
|
||||
AccessHistReqCount "Requests"
|
||||
|
||||
# Playlist messages
|
||||
PLHeader "Playlists"
|
||||
PLAvailablePlaylists "Available Playlists:"
|
||||
PLNewMP3 "New MP3 Playlist"
|
||||
PLNewMovie "New Media Playlist"
|
||||
PLDeleteButton "Delete Playlist"
|
||||
PLEditButton "Edit Playlist"
|
||||
PLChangedHeader "Playlist Status(es) Changed"
|
||||
PLChangedText "The status of your playlist has been changed."
|
||||
PLErrorHeader "Error"
|
||||
PLErrorText "An error occurred while starting or stopping your playlist."
|
||||
PLErrorLogHeader "Playlist Error Log"
|
||||
PLCreatedText "Your playlist was saved successfully."
|
||||
PLCreateErrorHeader "Error"
|
||||
PLCreateErrorText "An error occurred while creating your playlist."
|
||||
PLDeleteText "Your playlist was deleted successfully."
|
||||
PLErrNameCannotBeBlank "The playlist name cannot be blank."
|
||||
PLErrMountPointCannotBeBlank "The mount point cannot be blank."
|
||||
PLErrMountPointCannotContainSpaces "The mount point cannot contain spaces."
|
||||
PLErrRepetitionTooLarge "The repetition value for weighted random playlists cannot be higher than the number of songs in the playlist."
|
||||
PLDeleteErrorHeader "Error"
|
||||
PLDeleteErrorText "An error occurred while deleting your playlist."
|
||||
PLMP3PlaylistDetails "MP3 Playlist Details"
|
||||
PLMoviePlaylistDetails "Media Playlist Details"
|
||||
PLGenre "Genre:"
|
||||
PLDefaultGenre "Pop"
|
||||
PLName "Name:"
|
||||
PLPlayMode "Play Mode:"
|
||||
PLPlayModeWeightedRandom "Weighted Random"
|
||||
PLPlayModeSequentialLooped "Sequential Looped"
|
||||
PLPlayModeSequential "Sequential"
|
||||
PLRepetition "Repetition:"
|
||||
PLItemsRepeatAfter "Items only repeat after"
|
||||
PLItemsHavePlayed "other items have played"
|
||||
PLInstructions "Click and drag files from the left to the right to add to your playlist."
|
||||
PLAvailableMedia "Available Content:"
|
||||
PLItemsInPlaylist "Items in This Playlist:"
|
||||
PLReorderInstructions "Drag items in your playlist up or down to reorder them."
|
||||
PLOpenFolderButton "Open Folder"
|
||||
PLRemoveItemButton "Remove Item"
|
||||
PLOrderHeader "Order"
|
||||
PLTitleHeader "Title"
|
||||
PLWeightHeader "Weight"
|
||||
PLLogging "Log this playlist's activity"
|
||||
PLRelayToExternal "Send this playlist to a broadcast server"
|
||||
PLStarted "Playing"
|
||||
PLStopped "Stopped"
|
||||
PLSetBroadcastPasswordConfirm "You must set an MP3 Broadcast Password before starting a playlist. Set a password now?"
|
||||
PLStartBeforeTestingConfirm "This playlist must be started before viewing its publishing info. Start the playlist now?"
|
||||
PLDeleteConfirm "Are you sure you want to delete the selected playlist?"
|
||||
PLErrNameConflict "A playlist with this name already exists. Please choose a different name."
|
||||
# Defaults for playlists... please do not include high-bit characters here.
|
||||
PLDefaultPlaylistName "untitled"
|
||||
PLDefaultMoviePlaylistSDP "untitled.sdp"
|
||||
PLDefaultMP3PlaylistMountPoint "/untitled"
|
||||
|
||||
# Relay messages
|
||||
RelayNameHeader "Name"
|
||||
RelayStatusHeader "Status"
|
||||
RelaySources "Other Relays:"
|
||||
RelayNewSourceButton "New Relay"
|
||||
RelayDeleteSourceButton "Delete Relay"
|
||||
RelayEditSourceButton "Edit Relay"
|
||||
RelayEditDefaultSourceButton "Edit Default Relay"
|
||||
RelayStatusEnabled "Enabled"
|
||||
RelayStatusDisabled "Disabled"
|
||||
RelayDefaultRelayHeader "Default Relay:"
|
||||
RelayDefaultRelayName "Default Relay"
|
||||
rtsp_source "Push"
|
||||
announced_source "Pull"
|
||||
RelayDeleteText "Your relay was deleted successfully."
|
||||
RelayDetailsHeader "Relay Details"
|
||||
RelayDetailsRelayName "Relay Name:"
|
||||
RelayDetailsStatus "Status:"
|
||||
RelayDetailsSourceSettingsHeader "Source Settings"
|
||||
RelayDetailsSourceHostname "Source Hostname or IP Address:"
|
||||
RelayDetailsSourceRequestStream "Request incoming stream"
|
||||
RelayDetailsSourceWait "Wait for announced stream(s)"
|
||||
RelayDetailsDestinationHeader "Destination Settings"
|
||||
RelayDetailsDestAnnounced "Announced UDP"
|
||||
RelayDetailsDestUDP "Unannounced UDP"
|
||||
RelayDetailsDestBasePort "Base Port:"
|
||||
RelayDetailsDestMulticastTTL "Multicast TTL:"
|
||||
RelayDetailsDestHostname "Hostname or IP Address:"
|
||||
RelayDetailsDeleteDestination "Remove Destination"
|
||||
RelayDetailsAddDestination "Add Destination"
|
||||
RelaySaveText "Your relay was saved successfully."
|
||||
RelayErrNoName "You must enter a relay name."
|
||||
RelayErrNoSourceIP "You must enter a source IP address or hostname."
|
||||
RelayErrMulticastTTLIncorrect "The Multicast TTL must be a number between 1 and 255."
|
||||
RelayErrNoDestType "One of your relay destinations has no type. Please pick one (announced or unnanounced)."
|
||||
RelayErrNoDestMountpoint "One of your announced relay destinations has no mount point. Please specify one before saving."
|
||||
RelayErrNoDestBasePort "One of your unannounced relay destinations has no base port. Please specify one before saving."
|
||||
RelayErrNameConflict "A relay with this name already exists. Please choose a different name."
|
||||
RelayDeleteConfirm "Are you sure you want to delete the selected relay?"
|
||||
|
||||
# QuickTime Broadcaster Admin (Mac OS X Only)
|
||||
QTBTitle "Broadcaster Settings"
|
||||
QTBErrAlreadyRunningTitle "Restart Broadcaster?"
|
||||
QTBErrAlreadyRunningText "The broadcaster cannot be remotely administered after it's launched from the Finder. Restart the broadcaster now?"
|
||||
QTBErrNotRunningTitle "Start broadcaster?"
|
||||
QTBErrNotRunningText "The broadcaster is not currently running. Start it now?"
|
||||
QTBCurrentStatus "Current Status"
|
||||
QTBAudioPreset "Audio"
|
||||
QTBVideoPreset "Video"
|
||||
QTBSDPFile "SDP File"
|
||||
QTBBufferDelay "Buffer Delay"
|
||||
QTBViewBroadcast "View Broadcast"
|
||||
QTBStateSetup "Setup"
|
||||
QTBStateStartingBroadcast "Starting Broadcast"
|
||||
QTBStatePrerolling "Prerolling"
|
||||
QTBStateBroadcasting "Broadcasting"
|
||||
QTBStateStoppingBroadcast "Stopping Broadcast"
|
||||
QTBConfStarted "The broadcast has been started."
|
||||
QTBConfStopped "The broadcast has been stopped."
|
||||
QTBStartButton "Start Broadcast"
|
||||
QTBStopButton "Stop Broadcast"
|
||||
QTBQuitBroadcasterButton "Quit Broadcaster"
|
||||
QTBConfQuit "The broadcaster application is no longer running."
|
||||
QTBErrBroadcastSettings "The brodcast could not be started, because an error occurred."
|
||||
QTBConfSaved "Your broadcaster settings have been saved."
|
||||
QTBErrNotInstalledText "QuickTime Broadcaster is not installed in the /Applications folder."
|
||||
|
||||
# Setup Assistant
|
||||
SetupAssistTitle "Setup Assistant"
|
||||
SetupAssistStep1 "Assign Username/Password"
|
||||
SetupAssistNoUsernameHeader "Invalid Username/Password"
|
||||
SetupAssistNoUsername "You must enter a valid username and password."
|
||||
SetupAssistSetPasswordButton "Set Password"
|
||||
SetupAssistNextButton "Next"
|
||||
SetupAssistPrevButton "Prev"
|
||||
SetupAssistFinishButton "Finish"
|
||||
SetupAssistPassExp "This is the password used to administer the server."
|
||||
SetupAssistSkipButton "Cancel"
|
||||
SetupAssistStep2 "MP3 Broadcast Password"
|
||||
SetupAssistMP3PassExp "The MP3 Broadcast password is required in order to receive MP3 broadcast streams."
|
||||
SetupAssistStep3 "Secure Administration"
|
||||
SetupAssistSSLExp "This will enable encryption between the administration server and the web client. This feature requires that you have a valid streaming server SSL certificate installed."
|
||||
SetupAssistSSLLabel "Secure Administration (SSL)"
|
||||
SetupAssistStep4 "Media Folder"
|
||||
SetupAssistFolderExp "This is the folder or directory in which your media is stored."
|
||||
SetupAssistMediaFolder "Media Folder:"
|
||||
SetupAssistStep5 "Streaming on Port 80"
|
||||
SetupAssist80Exp "This allows you to stream through firewalls."
|
||||
SetupAssist80Label "Streaming on Port 80"
|
BIN
WebAdmin/WebAdminHtml/images/LB_arrow_dn.gif
Normal file
After Width: | Height: | Size: 80 B |
BIN
WebAdmin/WebAdminHtml/images/LB_arrow_up.gif
Normal file
After Width: | Height: | Size: 80 B |
BIN
WebAdmin/WebAdminHtml/images/apple_logo.gif
Normal file
After Width: | Height: | Size: 997 B |
BIN
WebAdmin/WebAdminHtml/images/arrow_down.gif
Normal file
After Width: | Height: | Size: 127 B |
BIN
WebAdmin/WebAdminHtml/images/back.gif
Normal file
After Width: | Height: | Size: 281 B |
BIN
WebAdmin/WebAdminHtml/images/blackpixel.gif
Normal file
After Width: | Height: | Size: 43 B |
BIN
WebAdmin/WebAdminHtml/images/clearpixel.gif
Normal file
After Width: | Height: | Size: 43 B |
BIN
WebAdmin/WebAdminHtml/images/dialog_alert.gif
Normal file
After Width: | Height: | Size: 3 KiB |
BIN
WebAdmin/WebAdminHtml/images/dialog_bottom.gif
Normal file
After Width: | Height: | Size: 402 B |
BIN
WebAdmin/WebAdminHtml/images/dialog_bottom_sm.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
WebAdmin/WebAdminHtml/images/dialog_middle.gif
Normal file
After Width: | Height: | Size: 996 B |
BIN
WebAdmin/WebAdminHtml/images/dialog_middle_sm.gif
Normal file
After Width: | Height: | Size: 979 B |
BIN
WebAdmin/WebAdminHtml/images/dialog_qtss.gif
Normal file
After Width: | Height: | Size: 110 B |
BIN
WebAdmin/WebAdminHtml/images/dialog_side.gif
Normal file
After Width: | Height: | Size: 43 B |
BIN
WebAdmin/WebAdminHtml/images/dialog_top.gif
Normal file
After Width: | Height: | Size: 400 B |
BIN
WebAdmin/WebAdminHtml/images/dialog_top_sm.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
WebAdmin/WebAdminHtml/images/divider.gif
Normal file
After Width: | Height: | Size: 837 B |
BIN
WebAdmin/WebAdminHtml/images/divider_vert.gif
Normal file
After Width: | Height: | Size: 82 B |
BIN
WebAdmin/WebAdminHtml/images/dot.gif
Normal file
After Width: | Height: | Size: 807 B |
BIN
WebAdmin/WebAdminHtml/images/folder.gif
Normal file
After Width: | Height: | Size: 635 B |
BIN
WebAdmin/WebAdminHtml/images/greypixel.gif
Normal file
After Width: | Height: | Size: 35 B |
BIN
WebAdmin/WebAdminHtml/images/headerpixel.gif
Normal file
After Width: | Height: | Size: 43 B |
BIN
WebAdmin/WebAdminHtml/images/help.gif
Normal file
After Width: | Height: | Size: 317 B |
BIN
WebAdmin/WebAdminHtml/images/highlight.gif
Normal file
After Width: | Height: | Size: 94 B |
BIN
WebAdmin/WebAdminHtml/images/horz_line.gif
Normal file
After Width: | Height: | Size: 50 B |
BIN
WebAdmin/WebAdminHtml/images/icon_alert.gif
Normal file
After Width: | Height: | Size: 221 B |
BIN
WebAdmin/WebAdminHtml/images/icon_doc.gif
Normal file
After Width: | Height: | Size: 90 B |
BIN
WebAdmin/WebAdminHtml/images/icon_error.gif
Normal file
After Width: | Height: | Size: 104 B |
BIN
WebAdmin/WebAdminHtml/images/icon_folder.gif
Normal file
After Width: | Height: | Size: 136 B |
BIN
WebAdmin/WebAdminHtml/images/icon_generic.gif
Normal file
After Width: | Height: | Size: 240 B |
BIN
WebAdmin/WebAdminHtml/images/icon_group.gif
Normal file
After Width: | Height: | Size: 84 B |
BIN
WebAdmin/WebAdminHtml/images/icon_movie.gif
Normal file
After Width: | Height: | Size: 114 B |
BIN
WebAdmin/WebAdminHtml/images/icon_movie_off.gif
Normal file
After Width: | Height: | Size: 114 B |
BIN
WebAdmin/WebAdminHtml/images/icon_playlist.gif
Normal file
After Width: | Height: | Size: 150 B |
BIN
WebAdmin/WebAdminHtml/images/icon_playlist_off.gif
Normal file
After Width: | Height: | Size: 150 B |
BIN
WebAdmin/WebAdminHtml/images/icon_start_playlist.gif
Normal file
After Width: | Height: | Size: 146 B |
BIN
WebAdmin/WebAdminHtml/images/icon_stop_playlist.gif
Normal file
After Width: | Height: | Size: 111 B |
BIN
WebAdmin/WebAdminHtml/images/icon_user.gif
Normal file
After Width: | Height: | Size: 730 B |
BIN
WebAdmin/WebAdminHtml/images/invis_dragcover.gif
Normal file
After Width: | Height: | Size: 118 B |
BIN
WebAdmin/WebAdminHtml/images/line.gif
Normal file
After Width: | Height: | Size: 46 B |
BIN
WebAdmin/WebAdminHtml/images/link.gif
Normal file
After Width: | Height: | Size: 523 B |
BIN
WebAdmin/WebAdminHtml/images/link_disabled.gif
Normal file
After Width: | Height: | Size: 519 B |
BIN
WebAdmin/WebAdminHtml/images/mp3_file.gif
Normal file
After Width: | Height: | Size: 635 B |
BIN
WebAdmin/WebAdminHtml/images/nav_help.gif
Normal file
After Width: | Height: | Size: 317 B |
BIN
WebAdmin/WebAdminHtml/images/nav_logo.gif
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
WebAdmin/WebAdminHtml/images/nav_logo_small.gif
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
WebAdmin/WebAdminHtml/images/pixel.gif
Normal file
After Width: | Height: | Size: 43 B |
BIN
WebAdmin/WebAdminHtml/images/scroll_arrow_down.gif
Normal file
After Width: | Height: | Size: 109 B |
BIN
WebAdmin/WebAdminHtml/images/scroll_arrow_up.gif
Normal file
After Width: | Height: | Size: 111 B |
BIN
WebAdmin/WebAdminHtml/images/scroll_bg.gif
Normal file
After Width: | Height: | Size: 70 B |
BIN
WebAdmin/WebAdminHtml/images/scroll_bg_inactive.gif
Normal file
After Width: | Height: | Size: 70 B |
BIN
WebAdmin/WebAdminHtml/images/scroll_thumb.gif
Normal file
After Width: | Height: | Size: 112 B |
BIN
WebAdmin/WebAdminHtml/images/sort_arrow.gif
Normal file
After Width: | Height: | Size: 74 B |
BIN
WebAdmin/WebAdminHtml/images/sort_arrow_desc.gif
Normal file
After Width: | Height: | Size: 80 B |
BIN
WebAdmin/WebAdminHtml/images/spacer.gif
Normal file
After Width: | Height: | Size: 807 B |
BIN
WebAdmin/WebAdminHtml/images/stripes_gray.gif
Normal file
After Width: | Height: | Size: 855 B |
BIN
WebAdmin/WebAdminHtml/images/stripes_gray_dark.gif
Normal file
After Width: | Height: | Size: 855 B |
BIN
WebAdmin/WebAdminHtml/images/trashcan.gif
Normal file
After Width: | Height: | Size: 185 B |
BIN
WebAdmin/WebAdminHtml/images/vert_line.gif
Normal file
After Width: | Height: | Size: 45 B |
BIN
WebAdmin/WebAdminHtml/images/weight_up_arrow.gif
Normal file
After Width: | Height: | Size: 48 B |
BIN
WebAdmin/WebAdminHtml/images/whitepixel.gif
Normal file
After Width: | Height: | Size: 43 B |
BIN
WebAdmin/WebAdminHtml/images/wieght_down_arrow.gif
Normal file
After Width: | Height: | Size: 49 B |
136
WebAdmin/WebAdminHtml/includes/DarwinDragWidget.js
Normal file
|
@ -0,0 +1,136 @@
|
|||
// Constants
|
||||
var offsetX = 12;
|
||||
var offsetY = 0;
|
||||
var tolerance = 6;
|
||||
|
||||
// Globals
|
||||
var darwinOriginalDragX = 0;
|
||||
var darwinOriginalDrayY = 0;
|
||||
var currentDragBox = null;
|
||||
|
||||
// Constructor for the DarwinDragWidget class.
|
||||
function DarwinDragWidget(window, multipleSelectedString) {
|
||||
// Remember some arguments for later.
|
||||
this.window = window;
|
||||
this.id = 'darwinDragWidget';
|
||||
this.body = '';
|
||||
this.multipleSelectedString = multipleSelectedString;
|
||||
// Output a CSS-P style sheet for this document.
|
||||
var d = window.document;
|
||||
d.writeln('<style type="text/css">');
|
||||
d.write('#darwinDragWidget { position: absolute; ');
|
||||
d.write('left: 0px; top: 0px; ');
|
||||
d.write('visibility: hidden; ');
|
||||
d.writeln('}');
|
||||
d.write('#darwinInvisibleCover { position: absolute; ');
|
||||
d.write('left: 0px; top: 0px; ');
|
||||
d.write('width: 4px; height: 4px; ');
|
||||
d.write('visibility: hidden; ');
|
||||
d.writeln('}');
|
||||
d.writeln('<' + '/style>');
|
||||
}
|
||||
|
||||
// This will output the initial HTML
|
||||
DarwinDragWidget.prototype.output = function() {
|
||||
var d = this.window.document;
|
||||
|
||||
d.writeln('<div id="' + this.id + '" class=line-item>');
|
||||
d.writeln(this.body);
|
||||
d.writeln('<' + '/div>');
|
||||
|
||||
d.writeln('<div id="darwinInvisibleCover" onmouseout="SetStyleVisible(\'darwinInvisibleCover\', false)">');
|
||||
d.writeln('<img src="images/invis_dragcover.gif" width=4 height=4>');
|
||||
d.writeln('<' + '/div>');
|
||||
|
||||
// save references to the element
|
||||
this.element = d.getElementById(this.id);
|
||||
this.style = this.element.style;
|
||||
this.window.darwinDragWidget = this;
|
||||
this.element.object = this;
|
||||
}
|
||||
|
||||
DarwinDragWidget.prototype.draw = function() {
|
||||
if (this.contents) {
|
||||
if (this.contents.length == 1)
|
||||
this.element.innerHTML = this.contents[0].draw();
|
||||
else
|
||||
this.element.innerHTML = this.multipleSelectedString;
|
||||
|
||||
this.style.visibility = 'hidden';
|
||||
this.offsetX = this.style.pixelWidth / 2;
|
||||
this.offsetY = this.style.pixelHeight / 2;
|
||||
}
|
||||
}
|
||||
|
||||
function GetScrollPos(d) {
|
||||
|
||||
if ((document.documentElement) && (document.documentElement.scrollTop)) {
|
||||
if (d == 0)
|
||||
return document.body.scrollLeft + document.documentElement.scrollLeft;
|
||||
else
|
||||
return document.body.scrollTop + document.documentElement.scrollTop;
|
||||
}
|
||||
|
||||
else {
|
||||
if (d == 0)
|
||||
return document.body.scrollLeft;
|
||||
else
|
||||
return document.body.scrollTop;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function darwinHandleMouseMove(e) {
|
||||
if (e) {
|
||||
var currentX = e.pageX;
|
||||
var currentY = e.pageY;
|
||||
}
|
||||
else {
|
||||
var currentX = event.clientX + GetScrollPos(0);
|
||||
var currentY = event.clientY + GetScrollPos(1);
|
||||
}
|
||||
if ((Math.abs(currentX - darwinOriginalDragX) > tolerance) || (Math.abs(currentY - darwinOriginalDrayY) > tolerance)) {
|
||||
SetStylePos('darwinDragWidget', 0, currentX + offsetX);
|
||||
SetStylePos('darwinDragWidget', 1, currentY + offsetY);
|
||||
darwinDragWidget.style.visibility = 'visible';
|
||||
if (IsNS6()) {
|
||||
currentDragBox = null;
|
||||
for (i = 0; i < dragRegionBoxes.length; i++) {
|
||||
var g = dragRegionBoxes[i];
|
||||
var regionEndX = g.locationX + g.sizeX;
|
||||
var regionEndY = g.locationY + g.sizeY;
|
||||
if ((currentX > g.locationX) && (currentX < regionEndX) && (currentY > g.locationY) && (currentY < regionEndY)) {
|
||||
g.element.style.backgroundColor = g.highlightcolor;
|
||||
currentDragBox = g;
|
||||
}
|
||||
else {
|
||||
if (currentDragBox == g)
|
||||
currentDragBox = null;
|
||||
g.element.style.backgroundColor = '#FFFFFF';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function darwinHandleMouseUp(e) {
|
||||
var d = darwinDragWidget.window.document;
|
||||
var str = '';
|
||||
darwinDragWidget.style.visibility = 'hidden';
|
||||
// stop tracking events
|
||||
d.onmousemove = null;
|
||||
d.onmouseup = null;
|
||||
if (currentDragBox) {
|
||||
for (i = 0; i < dragRegionBoxes.length; i++) {
|
||||
var g = dragRegionBoxes[i];
|
||||
g.element.style.backgroundColor = '#FFFFFF';
|
||||
}
|
||||
var allElements = currentDragBox.element.getElementsByTagName('div');
|
||||
if (allElements.length > 0) {
|
||||
var lastElement = allElements[allElements.length-1];
|
||||
lastElement.scrollIntoView();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
153
WebAdmin/WebAdminHtml/includes/DarwinListbox.js
Normal file
|
@ -0,0 +1,153 @@
|
|||
var dragRegionBoxes = new Array();
|
||||
var testCount = 0;
|
||||
|
||||
// Constructor for DarwinListbox class.
|
||||
function DarwinListbox(window, id, locationX, locationY, width, height, background, bordercolor, highlightcolor, allowMultipleSelect, allowDrag, allowDrop, allowRearrange) {
|
||||
// Remember some arguments for later.
|
||||
this.window = window;
|
||||
this.id = id;
|
||||
this.body = '';
|
||||
this.contents = new Array();
|
||||
this.highlightcolor = highlightcolor;
|
||||
this.mousedown = false;
|
||||
this.allowMultipleSelect = allowMultipleSelect;
|
||||
this.allowDrag = allowDrag;
|
||||
this.allowDrop = allowDrop;
|
||||
this.locationX = locationX;
|
||||
this.locationY = locationY;
|
||||
this.sizeX = width;
|
||||
this.sizeY = height;
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.bordercolor = bordercolor;
|
||||
// If this is droppable, add it to the list of droppable regions.
|
||||
if (allowDrop)
|
||||
dragRegionBoxes[dragRegionBoxes.length] = this;
|
||||
this.allowRearrange = allowRearrange;
|
||||
// Output a CSS-P style sheet for this document.
|
||||
var d = window.document;
|
||||
d.writeln('<style type="text/css">');
|
||||
d.write('#' + id + ' { ');
|
||||
width += 17;
|
||||
d.write('overflow: scroll; ');
|
||||
d.write('border-style: solid; ');
|
||||
d.write('border-width: 1px; ');
|
||||
d.write('border-color: ' + bordercolor + '; ');
|
||||
d.write('background: ' + background + '; ');
|
||||
if (width) d.write('width: ' + width + 'px; ');
|
||||
if (height) d.write('height: ' + width + 'px; ');
|
||||
d.writeln('}');
|
||||
d.writeln('<' + '/style>');
|
||||
}
|
||||
|
||||
// This will output the initial HTML
|
||||
DarwinListbox.prototype.output = function() {
|
||||
var d = this.window.document;
|
||||
|
||||
d.writeln('<div id="' + this.id + '">');
|
||||
d.writeln(this.body);
|
||||
d.writeln('<' + '/div>');
|
||||
|
||||
// save references to the element
|
||||
this.element = d.getElementById(this.id);
|
||||
this.style = this.element.style;
|
||||
|
||||
// set the document's events
|
||||
if (document.captureEvents)
|
||||
document.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN|Event.MOUSEMOVE);
|
||||
}
|
||||
|
||||
DarwinListbox.prototype.draw = function() {
|
||||
var str = '';
|
||||
|
||||
for (var i in this.contents) {
|
||||
str += '<div id="' + this.id + i + '" class="line-item" onmouseover="this.parent.handleMouseOver(this)" onmouseout="this.parent.handleMouseOut(this)" onselectstart="return false" onmousemove="this.parent.handleMouseOver(this)">';
|
||||
this.contents[i].parent = this;
|
||||
str += this.contents[i].draw();
|
||||
str += '<' + '/div>';
|
||||
}
|
||||
|
||||
this.element.innerHTML = str;
|
||||
|
||||
for (var i in this.contents) {
|
||||
this.window.document.getElementById(this.id + i).parent = this;
|
||||
}
|
||||
}
|
||||
|
||||
DarwinListbox.prototype.selectOne = function(obj) {
|
||||
var itemClicked = obj.id.replace(this.id, '');
|
||||
|
||||
// if the item is already selected, do nothing
|
||||
if (!this.contents[itemClicked].selected) {
|
||||
// deselect everything
|
||||
for (var i in this.contents) {
|
||||
this.window.document.getElementById(this.id + i).style.background = 'inherit';
|
||||
this.contents[i].selected = false;
|
||||
}
|
||||
// select the clicked item
|
||||
obj.style.background = this.highlightcolor;
|
||||
this.contents[itemClicked].selected = true;
|
||||
|
||||
// send it a callback message so it can handle any UI changes
|
||||
this.contents[itemClicked].onupdate();
|
||||
}
|
||||
else {
|
||||
}
|
||||
// set the last item clicked in case they shift-click next time
|
||||
this.lastItemClicked = itemClicked;
|
||||
}
|
||||
|
||||
DarwinListbox.prototype.handleMouseOver = function(obj) {
|
||||
var d = this.window.document;
|
||||
this.window.status = obj.id;
|
||||
this.window.currentDarwinObj = obj;
|
||||
if (d.onmousemove == darwinHandleMouseMove) {
|
||||
if (this.allowDrop)
|
||||
this.selectOne(obj);
|
||||
}
|
||||
else {
|
||||
d.onmousedown = darwinHandleMouseDown;
|
||||
}
|
||||
}
|
||||
|
||||
// this gets called when the user mouses out of a list item
|
||||
DarwinListbox.prototype.handleMouseOut = function(obj) {
|
||||
if (this.window.document.onmousemove == darwinHandleMouseMove) {
|
||||
this.window.currentDarwinObj = null;
|
||||
this.window.document.onmousedown = null;
|
||||
}
|
||||
}
|
||||
|
||||
// this should get called when the user drops something onto the listbox
|
||||
DarwinListbox.prototype.handleDrop = function(obj) {
|
||||
|
||||
}
|
||||
|
||||
function darwinHandleMouseDown(e) {
|
||||
if (e) {
|
||||
var currentX = e.pageX;
|
||||
var currentY = e.pageY;
|
||||
}
|
||||
else {
|
||||
var currentX = event.clientX + GetScrollPos(0);
|
||||
var currentY = event.clientY + GetScrollPos(1);
|
||||
e = window.event;
|
||||
}
|
||||
var itemClicked = window.currentDarwinObj.id.replace(window.currentDarwinObj.parent.id, '');
|
||||
window.currentDarwinObj.parent.selectOne(window.currentDarwinObj);
|
||||
|
||||
// set up the drag widget, and send mouse move and up events to it
|
||||
if (darwinDragWidget) {
|
||||
var g = darwinDragWidget;
|
||||
var d = window.document;
|
||||
darwinOriginalDragX = currentX;
|
||||
darwinOriginalDrayY = currentY;
|
||||
g.contents = new Array(window.currentDarwinObj.parent.contents[itemClicked]);
|
||||
g.draw();
|
||||
d.onmousemove = darwinHandleMouseMove;
|
||||
d.onmouseup = darwinHandleMouseUp;
|
||||
}
|
||||
|
||||
this.mousedown = true;
|
||||
return false;
|
||||
}
|
185
WebAdmin/WebAdminHtml/includes/draglib.js
Normal file
|
@ -0,0 +1,185 @@
|
|||
var browserYOffset = 0;
|
||||
var browserButtonYOffset = 0;
|
||||
|
||||
// calculate offsets
|
||||
|
||||
if (browserName.indexOf('MSIE 5.0; Mac') > 0) {
|
||||
browserYOffset = 18;
|
||||
browserButtonYOffset = 20;
|
||||
}
|
||||
|
||||
function clearPreinsert() {
|
||||
var newArray = new Array();
|
||||
for (var i = 0; i < playlistFiles.length; i++) {
|
||||
if (playlistFiles[i] != "") {
|
||||
newArray[newArray.length] = playlistFiles[i];
|
||||
}
|
||||
}
|
||||
delete playlistFiles;
|
||||
playlistFiles = newArray;
|
||||
}
|
||||
|
||||
function preInsert(thePos) {
|
||||
var newArray = new Array();
|
||||
for (var i = 0; i < playlistFiles.length; i++) {
|
||||
if (i == thePos) newArray[newArray.length] = "";
|
||||
if (playlistFiles[i] != "") {
|
||||
newArray[newArray.length] = playlistFiles[i];
|
||||
}
|
||||
}
|
||||
delete playlistFiles;
|
||||
playlistFiles = newArray;
|
||||
}
|
||||
|
||||
function doInsert(theItem) {
|
||||
for (var i = 0; i < playlistFiles.length; i++) {
|
||||
if (playlistFiles[i] == "") {
|
||||
playlistFiles[i] = theItem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function buildLibrary() {
|
||||
for (var i = scrollPos1; i <= GetMin(directoryListing.length - 1, scrollPos1+gNumLayersVisible-1); i++) {
|
||||
generateLayerText('library'+i, directoryListing[i]);
|
||||
}
|
||||
}
|
||||
|
||||
function buildPlaylist() {
|
||||
for (var i = scrollPos2; i <= GetMin(playlistFiles.length - 1, scrollPos2+gNumLayersVisible-1); i++) {
|
||||
generateLayerText('playlist'+i, playlistFiles[i]);
|
||||
}
|
||||
}
|
||||
|
||||
function buildLists() {
|
||||
buildLibrary();
|
||||
buildPlaylist();
|
||||
}
|
||||
|
||||
function stageCall(s) {
|
||||
currentStepNumber++;
|
||||
if ((currentStepNumber == gNumberOfSteps) || ((GetStylePos(s, 0) == xFinalValue) && (GetStylePos(s, 1) == yFinalValue))) {
|
||||
SetStylePos(s, 0, xFinalValue);
|
||||
SetStylePos(s, 1, yFinalValue);
|
||||
SetStyleVisible("draglayer", false);
|
||||
}
|
||||
else {
|
||||
SetStylePos(s, 0, (GetStylePos(s, 0) - xStepValue));
|
||||
SetStylePos(s, 1, (GetStylePos(s, 1) - yStepValue));
|
||||
var currentTimer = setTimeout('stageCall("' + s + '")', gStepTiming);
|
||||
}
|
||||
}
|
||||
|
||||
function moveInStages(s, xVal, yVal) {
|
||||
currentStepNumber = 0;
|
||||
xStepValue = ((GetStylePos(s, 0) - xVal) / gNumberOfSteps);
|
||||
yStepValue = ((GetStylePos(s, 1) - yVal) / gNumberOfSteps);
|
||||
xFinalValue = xVal;
|
||||
yFinalValue = yVal;
|
||||
var currentTimer = setTimeout('stageCall("' + s + '")', gStepTiming);
|
||||
}
|
||||
|
||||
function handleMouseDown(e) {
|
||||
if (IsIE()) var theTarget = window.event.srcElement;
|
||||
else var theTarget = e.target;
|
||||
if (IsIE()) var theButton = event.button;
|
||||
else var theButton = e.which;
|
||||
|
||||
layerClicked = "";
|
||||
movingStatus = "";
|
||||
|
||||
if (IsIE()) {
|
||||
oldX = window.event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
|
||||
oldY = window.event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
|
||||
offsetX = window.event.offsetX;
|
||||
offsetY = window.event.offsetY;
|
||||
}
|
||||
else {
|
||||
oldX = e.pageX
|
||||
oldY = e.pageY
|
||||
}
|
||||
|
||||
for (var i=0; i<=(Math.min(gNumLayersVisible-1,directoryListing.length-1)); i++) {
|
||||
if ((oldX >= GetStylePos('library'+i, 0)) && (oldX <= (GetStylePos('library'+i, 0) + gLayerWidth)) && (oldY >= GetStylePos('library'+i, 1) + browserYOffset) && (oldY <= (GetStylePos('library'+i, 1) + gLayerHeight) + browserYOffset)) {
|
||||
SetStylePos("highlight", 0, GetStylePos('library'+i, 0));
|
||||
SetStylePos("highlight", 1, GetStylePos('library'+i, 1) + browserYOffset);
|
||||
SetStyleVisible("highlight", true);
|
||||
SetButtonsEnabled(true);
|
||||
SetStylePos('draglayer', 0, GetStylePos('library'+i, 0));
|
||||
SetStylePos('draglayer', 1, GetStylePos('library'+i, 1) + browserYOffset);
|
||||
itemDragged = i;
|
||||
generateLayerText('draglayer',directoryListing[i]);
|
||||
layerClicked = 'draglayer';
|
||||
}
|
||||
}
|
||||
|
||||
if (layerClicked == "") {
|
||||
if (allowDeselect) {
|
||||
SetStyleVisible("highlight", false);
|
||||
SetButtonsEnabled(false);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if ((layerClicked != "") && (allowDrag)) {
|
||||
if (theButton == 1) {
|
||||
movingStatus = "drag";
|
||||
origX = GetStylePos(layerClicked, 0);
|
||||
origY = GetStylePos(layerClicked, 1);
|
||||
}
|
||||
|
||||
if (!IsIE()) {
|
||||
document.captureEvents(Event.MOUSEMOVE);
|
||||
}
|
||||
document.onmousemove = handleDrag;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function handleMouseUp(e) {
|
||||
if (movingStatus == "drag") {
|
||||
movingStatus = "false";
|
||||
if (!IsIE()) document.releaseEvents(Event.MOUSEMOVE);
|
||||
|
||||
if (GetStyleVisible("inserthere")) {
|
||||
SetStyleVisible(layerClicked, false);
|
||||
SetStyleVisible("inserthere", false);
|
||||
playlistFiles[playlistFiles.length] = directoryListing[itemDragged];
|
||||
// doInsert();
|
||||
buildLists();
|
||||
}
|
||||
else moveInStages(layerClicked, origX, origY);
|
||||
}
|
||||
}
|
||||
|
||||
function handleDrag(e) {
|
||||
if (movingStatus == "drag") {
|
||||
SetStylePos(layerClicked, 0, window.event.clientX - offsetX);
|
||||
SetStylePos(layerClicked, 1, window.event.clientY - offsetY);
|
||||
var didHighlight = false;
|
||||
for (var i = 0; i <= (gNumLayersVisible-1); i++) {
|
||||
if ((window.event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft >= GetStylePos('playlist'+i, 0)) && (window.event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft <= (GetStylePos('playlist'+i, 0) + gLayerWidth)) && (window.event.clientY + document.body.scrollTop + document.documentElement.scrollTop >= GetStylePos('playlist'+i, 1)) && (window.event.clientY + document.body.scrollTop + document.documentElement.scrollTop <= (GetStylePos('playlist'+i, 1) + gLayerHeight))) {
|
||||
SetStylePos("inserthere", 0, GetStylePos('playlist'+i, 0));
|
||||
SetStylePos("inserthere", 1, GetStylePos('playlist'+GetMin(i,playlistFiles.length), 1));
|
||||
SetStyleVisible("inserthere", true);
|
||||
//preInsert(0);
|
||||
//buildPlaylist();
|
||||
didHighlight = true;
|
||||
}
|
||||
}
|
||||
if ((!didHighlight) && (GetStyleVisible("inserthere"))) {
|
||||
SetStyleVisible("inserthere", false);
|
||||
//clearPreinsert();
|
||||
buildPlaylist();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// re-route events to handlers
|
||||
|
||||
if (!IsIE()) document.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN);
|
||||
|
||||
document.onmousedown = handleMouseDown;
|
||||
document.onmouseup = handleMouseUp;
|
45
WebAdmin/WebAdminHtml/includes/encode_unicode.js
Normal file
|
@ -0,0 +1,45 @@
|
|||
entities = new Array();
|
||||
chars = new Array();
|
||||
|
||||
entities[entities.length] = 'ô';
|
||||
chars[chars.length] = "ô";
|
||||
entities[entities.length] = 'é';
|
||||
chars[chars.length] = "é";
|
||||
entities[entities.length] = 'ê';
|
||||
chars[chars.length] = "ê";
|
||||
entities[entities.length] = 'à';
|
||||
chars[chars.length] = "à";
|
||||
entities[entities.length] = 'ô';
|
||||
chars[chars.length] = "ô";
|
||||
entities[entities.length] = 'Ê';
|
||||
chars[chars.length] = "Ê";
|
||||
entities[entities.length] = 'û';
|
||||
chars[chars.length] = "û";
|
||||
entities[entities.length] = 'ü';
|
||||
chars[chars.length] = "ü";
|
||||
entities[entities.length] = 'Ä';
|
||||
chars[chars.length] = "Ä";
|
||||
entities[entities.length] = 'ä';
|
||||
chars[chars.length] = "ä";
|
||||
entities[entities.length] = 'ö';
|
||||
chars[chars.length] = "ö";
|
||||
entities[entities.length] = 'ß';
|
||||
chars[chars.length] = "ß";
|
||||
|
||||
|
||||
function replaceEntities(theString) {
|
||||
for (var i = 0; i < chars.length; i++) {
|
||||
theString = eval('theString.replace(/' + entities[i] + '/g, chars[i])');
|
||||
}
|
||||
return theString
|
||||
}
|
||||
|
||||
function entityAlert(theString) {
|
||||
theString = replaceEntities(theString);
|
||||
alert(theString);
|
||||
}
|
||||
|
||||
function entityConfirm(theString) {
|
||||
theString = replaceEntities(theString);
|
||||
return confirm(theString)
|
||||
}
|
268
WebAdmin/WebAdminHtml/includes/standardNav.js
Normal file
|
@ -0,0 +1,268 @@
|
|||
isMoving = false
|
||||
// browserName = "OmniWeb/4";
|
||||
// try {
|
||||
// tempVal = window.location.href.indexOf('lucy');
|
||||
browserName = window.navigator.userAgent
|
||||
// }
|
||||
// catch(theErr) {
|
||||
// browserName = "OmniWeb/4";
|
||||
// }
|
||||
browserVersion = parseInt(browserName.charAt(browserName.indexOf("/")+1),10)
|
||||
gMakeVisibleAfter = ""
|
||||
gIsVisible = false
|
||||
prevVisible = ""
|
||||
openDrawer = ""
|
||||
mainNav = new Array("hrweblogo","benefits","money","staffing","training","records","policies","manager","appledir","searchbox"); // jaa
|
||||
defaultPos = new Array(0,93,114,135,156,185,206,228,306,344); // jaa
|
||||
baseLoc = "/areas/hrweb/employee/"
|
||||
maxY = 490
|
||||
menuBGColor = "#336633"
|
||||
menuLineColor = "#669966"
|
||||
|
||||
// standard subroutines
|
||||
|
||||
function popUp(URL,w,h,s) {
|
||||
eval("window.open(URL, 'AppleHelp', 'width="+w+",height="+h+",scrollbars="+s+"');");
|
||||
}
|
||||
|
||||
|
||||
function browserAlert() {
|
||||
if (browserVersion < 4) alert("This web site only works with Netscape and Internet Explorer version 4.0 or higher.")
|
||||
}
|
||||
|
||||
|
||||
function FindStyleInArray(theStyle) {
|
||||
for (var i = 0; i < (mainNav.length); i++) if (mainNav[i] == theStyle) return i
|
||||
|
||||
return (-1)
|
||||
}
|
||||
|
||||
|
||||
function closeAllDrawers() {
|
||||
ridLayers(1)
|
||||
for (var i = 0; i < (mainNav.length); i++) SetStylePos(mainNav[i], 1, defaultPos[i])
|
||||
}
|
||||
|
||||
|
||||
function IsIE() {
|
||||
return browserName.indexOf("MSIE") > 0
|
||||
}
|
||||
|
||||
|
||||
function IsNS6() {
|
||||
return ((browserName.indexOf("Netscape6") > 0) ||
|
||||
(browserName.indexOf("Gecko") > 0));
|
||||
}
|
||||
|
||||
|
||||
function IsWin32() {
|
||||
return browserName.indexOf("Win") > 0
|
||||
}
|
||||
|
||||
|
||||
function GetIEStyle(s) {
|
||||
// return document.all.tags("div") [s].style
|
||||
return document.all[s].style
|
||||
}
|
||||
|
||||
|
||||
function GetNSStyle(s) {
|
||||
if (IsNS6()) return document.getElementById(s).style
|
||||
else return document.layers[s]
|
||||
}
|
||||
|
||||
|
||||
function GetIEScrollPos(d) {
|
||||
|
||||
if ((document.documentElement) && (document.documentElement.scrollTop)) {
|
||||
if (d == 0)
|
||||
return document.body.scrollLeft + document.documentElement.scrollLeft;
|
||||
else
|
||||
return document.body.scrollTop + document.documentElement.scrollTop;
|
||||
}
|
||||
|
||||
else {
|
||||
if (d == 0)
|
||||
return document.body.scrollLeft;
|
||||
else
|
||||
return document.body.scrollTop;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function GetStyle(s) {
|
||||
if (IsIE()) return GetIEStyle(s)
|
||||
else return GetNSStyle(s)
|
||||
}
|
||||
|
||||
|
||||
function GetMin(x, y) {
|
||||
return Math.min(x, y)
|
||||
}
|
||||
|
||||
|
||||
function GetMax(x, y) {
|
||||
return Math.max(x, y)
|
||||
}
|
||||
|
||||
|
||||
function SetStylePos(s, d, p) {
|
||||
if (IsIE()) {
|
||||
if (d == 0) GetIEStyle(s).posLeft = p
|
||||
else GetIEStyle(s).posTop = p
|
||||
}
|
||||
else {
|
||||
if (d == 0) return GetNSStyle(s).left = p
|
||||
else GetNSStyle(s).top = p
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
function GetStyleVisible(s) {
|
||||
if (IsIE()) return (GetIEStyle(s).visibility == "visible")
|
||||
else {
|
||||
if (IsNS6()) return (document.getElementById(s).style.visibility == "visible")
|
||||
else return (GetNSStyle(s).visibility == "show")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function SetStyleVisible(s, whichOne) {
|
||||
if (IsIE()) {
|
||||
GetIEStyle(s).visibility = whichOne ? "visible" : "hidden"
|
||||
}
|
||||
else {
|
||||
if (IsNS6()) {
|
||||
document.getElementById(s).style.visibility = whichOne ? "visible" : "hidden"
|
||||
}
|
||||
else GetNSStyle(s).visibility = whichOne ? "show" : "hide"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function findObj(n, d) { //v3.0 (thanks Austin!)
|
||||
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
|
||||
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
|
||||
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
|
||||
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=findObj(n,d.layers[i].document); return x;
|
||||
}
|
||||
|
||||
|
||||
function SetStyleText(s, theText) { // sets to contents of divText var
|
||||
if (IsIE() || IsNS6()) {
|
||||
document.getElementById(s).innerHTML = theText;
|
||||
}
|
||||
else {
|
||||
GetStyle(s).document.write(theText);
|
||||
GetStyle(s).document.close();
|
||||
}
|
||||
SetStyleVisible(s, true)
|
||||
}
|
||||
|
||||
|
||||
function clearSearchbox() {
|
||||
document.searchbox.document.Search.elements['queryText'].value=''
|
||||
document.searchbox.document.Search.elements['queryText'].blur()
|
||||
SetStyleVisible('searchbox', false)
|
||||
}
|
||||
|
||||
|
||||
function SetMenu(menuLevel, whichMenu, top) {
|
||||
var s = "menu"+menuLevel+"text"
|
||||
if (!(GetStyleVisible(s) && (GetStylePos(s, 1) == top))) {
|
||||
var s2 = "menu"+menuLevel+"bg"
|
||||
var myHeight = (eval('navarray'+menuLevel)[whichMenu].length/2)*15
|
||||
var theLink = ""
|
||||
if ((top+myHeight>maxY) && ((top-myHeight+15)>0)) {
|
||||
top = top-myHeight+15
|
||||
}
|
||||
var posSoFar = top
|
||||
SetStylePos(s,1,top)
|
||||
SetStylePos(s2,1,top)
|
||||
var theText="<table width=140 height="+String(myHeight)+" cellpadding=0 cellspacing=0 border=0 bgcolor=\"" + menuBGColor + "\">\r"
|
||||
theText+=" <tr><td><spacer type=\"block\" width=138 height="+String(myHeight-2)+"> </td></tr>\r"
|
||||
theText+="</table></div>\r"
|
||||
SetStyleText(s2, theText)
|
||||
theText = "<table width=140 border=0 cellspacing=0 cellpadding=0>\r"
|
||||
theText+=" <tr>\r"
|
||||
theText+=" <td width=122 height=1><spacer type=\"block\" width=122 height=1></td>\r"
|
||||
theText+=" <td width=12 height=1><spacer type=\"block\" width=12 height=1></td>\r"
|
||||
theText+=" </tr>\r"
|
||||
var isMenuItem = false
|
||||
var theURL = ""
|
||||
for (var i = 0; i<eval('navarray'+menuLevel)[whichMenu].length; i=i+2) {
|
||||
isMenuItem = (typeof(eval('navarray'+menuLevel)[whichMenu][i+1]) == 'string')
|
||||
theText+=" <tr>\r"
|
||||
theText+=" <td class=\"leftnav\" width=122 height=14"
|
||||
if (isMenuItem) theText+=" colspan=2"
|
||||
theText+="><a class=\"leftnav\" href=\""
|
||||
theURL = String(eval('navarray'+menuLevel)[whichMenu][i+1])
|
||||
if ((theURL.indexOf("http") != 0) && isMenuItem) theText+=baseLoc
|
||||
if (isMenuItem) theText+=theURL+"\" onmouseover=\"moveBar("+menuLevel+", "+posSoFar+", "+(menuLevel+1)+")\""
|
||||
else theText+="#\" onmouseover=\"moveBar("+menuLevel+", "+posSoFar+", "+(menuLevel+1)+"); SetMenu("+String(menuLevel+1)+", "+eval('navarray'+menuLevel)[whichMenu][i+1]+", "+posSoFar+")\""
|
||||
theText+=" onmouseout=\"ridLater("+String(ridOnTimeout)+")"
|
||||
var newItemText = eval('navarray'+menuLevel)[whichMenu][i]
|
||||
if (IsIE()) var numChars = (24-newItemText.length)*0.7
|
||||
else var numChars = (24-newItemText.length)*1.69
|
||||
if (numChars >= 1) for (var j = 1; j<=numChars; j++) newItemText += " "
|
||||
theText+="\"> " + newItemText + "</a></td>\r"
|
||||
if (!isMenuItem) theText+="<td align=right><b><a class=\"leftnav\" href=\"#\" onmouseover=\"moveBar("+menuLevel+", "+posSoFar+", "+(menuLevel+1)+"); SetMenu("+String(menuLevel+1)+", "+eval('navarray'+menuLevel)[whichMenu][i+1]+", "+posSoFar+")\" onmouseout=\"ridLater("+String(ridOnTimeout)+")\">></a></td>"
|
||||
theText+=" </tr>\r"
|
||||
if (i+2<eval('navarray'+menuLevel)[whichMenu].length) theText+="<tr>\r <td colspan=2 height=1 bgcolor=\"" + menuLineColor + "\"><spacer type=\"block\" width=140 height=1></td>\r </tr>\r"
|
||||
posSoFar+=15
|
||||
}
|
||||
theText+="</table>\r"
|
||||
SetStyleText(s, theText)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function GetStylePos(s, d) {
|
||||
if (IsIE()) {
|
||||
if (d == 0) return GetIEStyle(s).posLeft
|
||||
else return GetIEStyle(s).posTop
|
||||
}
|
||||
else {
|
||||
if (d == 0) return GetNSStyle(s).left
|
||||
else return GetNSStyle(s).top
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function slideLayer(s, d, p, makeVisibleAfter) {
|
||||
var theDifference = 0
|
||||
var isInArray = FindStyleInArray(s) + 1
|
||||
SetStyleVisible(s, true)
|
||||
if (isInArray > 0) {
|
||||
closeAllDrawers()
|
||||
}
|
||||
var currentPos = GetStylePos(s, d)
|
||||
|
||||
var theDifference = p - currentPos
|
||||
if (!((isInArray > 0) & (makeVisibleAfter == openDrawer))) {
|
||||
SetStylePos(s, d, currentPos + theDifference)
|
||||
if (isInArray > 0) for (var i = isInArray; i<mainNav.length; i++) {
|
||||
SetStylePos(mainNav[i], d, GetStylePos(mainNav[i],d) + theDifference)
|
||||
}
|
||||
if ((makeVisibleAfter != "") & (isInArray > 0)) {
|
||||
if (currentPos == defaultPos[isInArray-1]) {
|
||||
// activateMenu(makeVisibleAfter, 1)
|
||||
|
||||
var menuTop = defaultPos[isInArray-1]
|
||||
if (makeVisibleAfter=='manager') menuTop -= 49
|
||||
|
||||
SetMenu(1,isInArray-2,menuTop)
|
||||
|
||||
if (openDrawer != "") restoreImage(openDrawer)
|
||||
openDrawer = mainNav[isInArray-2]
|
||||
exciteImage(makeVisibleAfter)
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
openDrawer = ""
|
||||
ridLayers(0)
|
||||
}
|
||||
}
|
15
WebAdmin/WebAdminHtml/index.html
Normal file
|
@ -0,0 +1,15 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Setup Assistant</title>
|
||||
<meta name="generator" content="BBEdit Prerelease">
|
||||
<meta http-equiv=refresh content="2; URL=parse_xml.cgi?filename=setup_assistant2.html">
|
||||
<meta http-equiv=pragma content=no-cache>
|
||||
<meta http-equiv=expires content="Fri, 21 Ag 1998 12:00:00 GMT">
|
||||
<script type="text/javascript" language=javascript>
|
||||
location.href='/parse_xml.cgi?filename=setup_assistant2.html';
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
100
WebAdmin/WebAdminHtml/listbox.html
Normal file
|
@ -0,0 +1,100 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>listbox test</title>
|
||||
<meta name="generator" content="BBEdit 6.5.2">
|
||||
<script type="text/javascript" src="includes/DarwinDragWidget.js"></script>
|
||||
<script type="text/javascript" src="includes/DarwinListbox.js"></script>
|
||||
<script type="text/javascript" src="includes/standardNav.js"></script>
|
||||
|
||||
<style type="text/css">
|
||||
|
||||
.line-item
|
||||
{
|
||||
display: block;
|
||||
width: 236px;
|
||||
font-family: Monaco, monospace;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<script type="text/javascript" language="Javascript">
|
||||
|
||||
darwinDragWidget = new DarwinDragWidget(window, 'Multiple Items Selected');
|
||||
libraryControl = new DarwinListbox(window, 'library', 0, 0, 236, 320, '#FFFFFF', '#8C93AD', '#D7D7E6', true, true, false, false);
|
||||
playlistControl = new DarwinListbox(window, 'playlist', 287, 12, 236, 320, '#FFFFFF', '#8C93AD', '#D7D7E6', true, true, true, true);
|
||||
|
||||
// class for plain strings
|
||||
function ImageAndStringListboxItem(imagename, description) {
|
||||
this.imagename = imagename;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
// method to draw plain string... return the HTML
|
||||
ImageAndStringListboxItem.prototype.draw = function() {
|
||||
var str = '<img src="images/' + this.imagename + '" width="16" height="16" hspace="2" vspace="2" align="middle">';
|
||||
str = str + this.description;
|
||||
return str;
|
||||
}
|
||||
|
||||
function populateListbox() {
|
||||
var contents = new Array();
|
||||
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'one');
|
||||
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'two');
|
||||
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'three');
|
||||
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'four');
|
||||
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'five');
|
||||
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'six');
|
||||
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'seven');
|
||||
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'eight');
|
||||
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'nine');
|
||||
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'ten');
|
||||
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'eleven');
|
||||
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'twelve');
|
||||
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'thirteen');
|
||||
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'fourteen');
|
||||
contents[contents.length] = new ImageAndStringListboxItem('mp3_file.gif', 'fifteen');
|
||||
libraryControl.contents = contents;
|
||||
libraryControl.draw();
|
||||
playlistControl.contents = contents;
|
||||
playlistControl.draw();
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="populateListbox()">
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><script type="text/javascript">libraryControl.output();</script></td>
|
||||
<td> </td>
|
||||
<td><script type="text/javascript">playlistControl.output();</script></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<script type="text/javascript" language="Javascript">
|
||||
|
||||
darwinDragWidget.output();
|
||||
|
||||
var str = '';
|
||||
var s = playlistControl.style
|
||||
var count = 0;
|
||||
var totalCount = 0;
|
||||
|
||||
for (var i in s) {
|
||||
totalCount++;
|
||||
str += i;
|
||||
if ((totalCount < 40) || totalCount > 50)
|
||||
str += ":" + s[i];
|
||||
str += "\n";
|
||||
if (++count == 20) {
|
||||
count = 0;
|
||||
str = '';
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
35
WebAdmin/WebAdminHtml/listbox2.html
Normal file
|
@ -0,0 +1,35 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>new listbox test</title>
|
||||
<meta name="generator" content="BBEdit 6.5.2">
|
||||
<style type="text/css">
|
||||
|
||||
.list-item
|
||||
{
|
||||
display: block;
|
||||
width: 236px;
|
||||
font-family: Monaco, monospace;
|
||||
font-size: 10px;
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body background="images/stripes_gray.gif">
|
||||
|
||||
<table border="0" cellspacing="0" cellpadding="2" bgcolor="#8C93AD">
|
||||
<tr>
|
||||
<td><table border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF">
|
||||
<tr>
|
||||
<td class=list-item onmousedown="this.style.background = '#D7D7E6'"><img src="images/mp3_file.gif" width="16" height="16" hspace="2" vspace="2" align="middle">one</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class=list-item onmousedown="this.style.background = '#D7D7E6'"><img src="images/mp3_file.gif" width="16" height="16" hspace="2" vspace="1" align="middle">two</td>
|
||||
</tr>
|
||||
</table></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
</html>
|
214
WebAdmin/WebAdminHtml/log_settings.html
Normal file
|
@ -0,0 +1,214 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="BBEdit Prerelease">
|
||||
<style type="text/css">
|
||||
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
|
||||
.large { font-weight: bold; font-size: 14px }
|
||||
.small { font-size: 10px }
|
||||
.white { color: #FFFFFF }
|
||||
.header { font-size: 18px; color:#666699 }
|
||||
input { font-size: 12px }
|
||||
</style>
|
||||
<script src="includes/standardNav.js" type="text/javascript" language="Javascript"></script>
|
||||
<qtssobject name=scriptTag>
|
||||
//<script language=javascript>
|
||||
|
||||
function showConfirmMessage() {
|
||||
if ('<qtssobject name=confirmMessage/>' != '') {
|
||||
if (parent.frames['top'].showConfirmMessage) {
|
||||
parent.frames['top'].showConfirmMessage('<qtssobject name=confirmMessage/>');
|
||||
}
|
||||
else if (parent.parent.frames[0].showConfirmMessage) {
|
||||
parent.parent.frames[0].showConfirmMessage('<qtssobject name=confirmMessage/>');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function validateFormData() {
|
||||
var wasInvalid = false;
|
||||
if (document.forms[0].elements['qtssErrorLogInterval'].value == '') {
|
||||
alert("qtssstring name=LogSetErrorValidationError/>");
|
||||
wasInvalid = true;
|
||||
}
|
||||
if ((document.forms[0].elements['qtssErrorLogInterval'].value.match('[^0-9]') != null) || (document.forms[0].elements['qtssErrorLogInterval'].value < 0)) {
|
||||
alert("qtssstring name=LogSetErrorValidationError/>");
|
||||
wasInvalid = true;
|
||||
}
|
||||
if (wasInvalid) { // set because qtssErrorLogInterval was invalid
|
||||
document.forms[0].elements['qtssErrorLogInterval'].value = document.forms[0].elements['qtssErrorLogInterval_shadow'].value;
|
||||
return false;
|
||||
}
|
||||
if (document.forms[0].elements['qtssErrorLogSize'].value == '') {
|
||||
alert("qtssstring name=LogSetErrorValidationError/>");
|
||||
wasInvalid = true;
|
||||
}
|
||||
if ((document.forms[0].elements['qtssErrorLogSize'].value.match('[^0-9]') != null) || (document.forms[0].elements['qtssErrorLogSize'].value < 0)) {
|
||||
alert("qtssstring name=LogSetErrorValidationError/>");
|
||||
wasInvalid = true;
|
||||
}
|
||||
if (wasInvalid) { // set because qtssErrorLogSize was invalid
|
||||
document.forms[0].elements['qtssErrorLogSize'].value = document.forms[0].elements['qtssErrorLogSize_shadow'].value;
|
||||
return false;
|
||||
}
|
||||
if (document.forms[0].elements['qtssRequestLogInterval'].value == '') {
|
||||
alert("qtssstring name=LogSetErrorValidationError/>");
|
||||
wasInvalid = true;
|
||||
}
|
||||
if ((document.forms[0].elements['qtssRequestLogInterval'].value.match('[^0-9]') != null) || (document.forms[0].elements['qtssRequestLogInterval'].value < 0)) {
|
||||
alert("qtssstring name=LogSetErrorValidationError/>");
|
||||
wasInvalid = true;
|
||||
}
|
||||
if (wasInvalid) { // set because qtssRequestLogInterval was invalid
|
||||
document.forms[0].elements['qtssRequestLogInterval'].value == document.forms[0].elements['qtssRequestLogInterval_shadow'].value;
|
||||
return false;
|
||||
}
|
||||
if (document.forms[0].elements['qtssRequestLogSize'].value == '') {
|
||||
alert("qtssstring name=LogSetErrorValidationError/>");
|
||||
wasInvalid = true;
|
||||
}
|
||||
if ((document.forms[0].elements['qtssRequestLogSize'].value.match('[^0-9]') != null) || (document.forms[0].elements['qtssRequestLogSize'].value < 0)) {
|
||||
alert("qtssstring name=LogSetErrorValidationError/>");
|
||||
wasInvalid = true;
|
||||
}
|
||||
if (wasInvalid) { // set because qtssRequestLogSize was invalid
|
||||
document.forms[0].elements['qtssRequestLogSize'].value == document.forms[0].elements['qtssRequestLogSize_shadow'].value;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="showConfirmMessage()">
|
||||
<qtssobject type=validatedform>
|
||||
<input type=hidden name=filename value="confirm.html"> <input type=hidden name=action value="SaveLogSettings">
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=620>
|
||||
<tr>
|
||||
<td align=left valign=top width=20>
|
||||
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
|
||||
</td>
|
||||
<td valign=top align=center>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td align=left nowrap class=header>
|
||||
<qtssstring name="LogSetHeader"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=0>
|
||||
<tr>
|
||||
<td align=left valign=top>
|
||||
<b class=large><qtssstring name="LogSetErrorLogHeader"/></b>
|
||||
<br> <br>
|
||||
<table border=0 cellspacing=4 cellpadding=0>
|
||||
<tr>
|
||||
<td align=left valign=top rowspan=2 nowrap>
|
||||
<b><qtssstring name="LogSetErrorLogging"/></b>
|
||||
</td>
|
||||
<td align=left nowrap>
|
||||
<qtssobject name="qtssErrorLogging" format=checkbox param=true/><qtssstring name="Enabled"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p>
|
||||
<br>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left valign=top rowspan=2 nowrap>
|
||||
<b><qtssstring name="LogSetRollErrorLog"/></b>
|
||||
</td>
|
||||
<td align=left nowrap>
|
||||
<qtssstring name="LogSetEvery"/> <qtssobject name="qtssErrorLogInterval" type=string param=" size=3 maxlength=3 onchange=validateFormData()"/> <qtssstring name="LogSetDays"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left nowrap>
|
||||
<qtssstring name="LogSetEvery"/> <qtssobject name="qtssErrorLogSize" type=string format=div1024 param=" size=9 maxlength=9 onchange=validateFormData()"/> <qtssstring name="KiloBytesStr"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td align=left width=30>
|
||||
<img src="images/divider_vert.gif" width=30 height="100%" align=middle alt="">
|
||||
</td>
|
||||
<td align=left valign=top nowrap>
|
||||
<b class=large><qtssstring name="LogSetAccessLog"/></b>
|
||||
<br> <br>
|
||||
<table border=0 cellspacing=4 cellpadding=0>
|
||||
<tr>
|
||||
<td align=left valign=top rowspan=2 nowrap>
|
||||
<b><qtssstring name="LogSetAccessLogging"/></b>
|
||||
</td>
|
||||
<td align=left nowrap>
|
||||
<qtssobject name="qtssRequestLogging" format=checkbox param=true/><qtssstring name="Enabled"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p>
|
||||
<br>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left valign=top rowspan=2>
|
||||
<b><qtssstring name="LogSetRollAccessLog"/></b>
|
||||
</td>
|
||||
<td align=left nowrap>
|
||||
<qtssstring name="LogSetEvery"/> <qtssobject name="qtssRequestLogInterval" type=string param=" size=3 maxlength=3 onchange=validateFormData()"/> <qtssstring name="LogSetDays"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left nowrap>
|
||||
<qtssstring name="LogSetEvery"/> <qtssobject name="qtssRequestLogSize" type=string format=div1024 param=" size=9 maxlength=9 onchange=validateFormData()"/> <qtssstring name="KiloBytesStr"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td align=left valign=top colspan=2>
|
||||
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left valign=top>
|
||||
<br>
|
||||
<!--[[a href="#" onclick="showHelp()"]][[img src="images/help.gif" width=20 height=20 border=0]][[/a]]-->
|
||||
</td>
|
||||
<td align=right valign=top>
|
||||
<br>
|
||||
<input type=submit name=Submit value="<qtssstring name=SubmitButtonTitle/>">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</qtssobject>
|
||||
</body>
|
||||
</html>
|
74
WebAdmin/WebAdminHtml/login.html
Normal file
|
@ -0,0 +1,74 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title><qtssstring name="ServerName"/></title>
|
||||
<meta name="generator" content="BBEdit Prerelease">
|
||||
<style type="text/css">
|
||||
td { font-family: <qtssobject name=fontFaceCSS/>; font-size: 12px }
|
||||
.large { font-weight: bold; font-size: 14px }
|
||||
.white { color: #FFFFFF }
|
||||
input { font-size: 12px }
|
||||
</style>
|
||||
<qtssobject name=scriptTag>
|
||||
//<script language=javascript>
|
||||
|
||||
function onLoadScript() {
|
||||
if ((document.forms[0]) && (document.forms[0].elements) && (document.forms[0].elements['qtssusername'])) {
|
||||
document.forms[0].elements['qtssusername'].focus();
|
||||
|
||||
if (document.forms[0].elements['filename'].value.indexOf('setup') != 0)
|
||||
document.forms[0].elements['filename'].value = '';
|
||||
}
|
||||
}
|
||||
|
||||
if (parent.frames.length > 0) {
|
||||
parent.location = '/parse_xml.cgi';
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="onLoadScript()"><qtssobject type=form param="_top">
|
||||
<input type="hidden" name="action" value="login">
|
||||
<qtssobject name=filename type=hidden/>
|
||||
<qtssobject name=treatedFilename type=hidden/>
|
||||
<table border="0" width="100%" height="90%" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle"><table border=0 cellspacing=0 cellpadding=0>
|
||||
<tr>
|
||||
<td colspan=3 valign=middle align=left><img src="images/dialog_top.gif" width=500 height=20></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td background="images/dialog_side.gif" width=1><img src="images/dialog_side.gif" width="1" height="20"></td>
|
||||
<td valign=middle align=left bgcolor="#FFFFFF" width=498><table border=0 width="98%" cellspacing=0 cellpadding=4>
|
||||
<tr>
|
||||
<td align=center width=110 valign=top><img src="images/nav_logo.gif" width="82" height="105" hspace=21 vspace=5></td>
|
||||
<td valign=middle align=left><p class=large><qtssstring name=LoginTitle/></p>
|
||||
<p><qtssstring name=LoginPleaseLogin/></p>
|
||||
</td>
|
||||
<tr>
|
||||
<td valign=middle align=left></td>
|
||||
<td valign=middle align=center><table border=0 cellspacing=4 cellpadding=0>
|
||||
<tr>
|
||||
<td valign=middle align=right><b><qtssstring name=LoginUsername/></b></td>
|
||||
<td valign=middle align=left><input type=text name="qtssusername"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign=middle align=right><b><qtssstring name=LoginPassword/></b></td>
|
||||
<td valign=middle align=left><input type="password" name="qtsspassword"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign=middle align=left></td>
|
||||
<td valign=middle align=left> <br> <br><input type=submit value=" <qtssstring name=LoginButton/> "/></td>
|
||||
</tr>
|
||||
</table></td>
|
||||
<tr>
|
||||
</table></td>
|
||||
<td background="images/dialog_side.gif" width=1><img src="images/dialog_side.gif" width="1" height="20"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan=3 valign=middle align=left><img src="images/dialog_bottom.gif" width="500" height="20" hspace=0 vspace=0></td>
|
||||
</tr>
|
||||
</table></td>
|
||||
</tr>
|
||||
</table></qtssobject></body>
|
||||
</html>
|
42
WebAdmin/WebAdminHtml/nav.html
Normal file
|
@ -0,0 +1,42 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="BBEdit 6.1.1">
|
||||
<style type="text/css">
|
||||
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
|
||||
</style>
|
||||
<script type="text/javascript" language="Javascript">
|
||||
|
||||
function showHelp() {
|
||||
window.open('<qtssobject name=helpurl/>', 'Help', 'width=600,height=430,scrollbars=yes,resizable=yes')
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray_dark.gif">
|
||||
<table border=0 width="100%" cellspacing=0 cellpadding=0>
|
||||
<tr>
|
||||
<td align=center><img src="images/nav_logo_small.gif" width="60" height="77" vspace="20"><br>
|
||||
<table border=0 cellspacing=1 width=140>
|
||||
<tr>
|
||||
<td align=left width=10> </td>
|
||||
<td align=left>
|
||||
<p><a href="/parse_xml.cgi?filename=welcome.html" target=content><qtssstring name="NavMain"/></a></p>
|
||||
<qtssrepeater name="broadcasteravailable"><p><a href="/parse_xml.cgi?filename=broadcaster_settings.html" target=content><qtssstring name="NavBroadcaster"/></a></p></qtssrepeater>
|
||||
<p><a href="/parse_xml.cgi?filename=connected.html" target=content><qtssstring name="NavConnectedUsers"/></a><br>
|
||||
<a href="/parse_xml.cgi?filename=relay_status.html" target=content><qtssstring name="NavRelayStatus"/></a></p>
|
||||
<p><a href="/parse_xml.cgi?filename=general_settings.html" target=content><qtssstring name="NavGeneralSettings"/></a><br>
|
||||
<a href="/parse_xml.cgi?filename=ports.html" target=content><qtssstring name="NavPortSettings"/></a><br>
|
||||
<a href="/parse_xml.cgi?filename=relay.html" target=content><qtssstring name="NavRelaySettings"/></a><br>
|
||||
<a href="/parse_xml.cgi?filename=log_settings.html" target=content><qtssstring name="NavLogSettings"/></a></p>
|
||||
<p><a href="/parse_xml.cgi?filename=playlists.html" target=content><qtssstring name="NavPlaylists"/></a></p>
|
||||
<p><a href="/parse_xml.cgi?filename=error_log.html" target=content><qtssstring name="NavErrorLog"/></a><br>
|
||||
<a href="/parse_xml.cgi?filename=access_log.html" target=content><qtssstring name="NavAccessHistory"/></a></p>
|
||||
<p><a href="/parse_xml.cgi?filename=login.html&action=logout"><qtssstring name=NavLogOut/></a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table><br> <br><a href="<qtssobject name=helpurl/>" onclick="showHelp(); return false" target="Help"><img src="images/nav_help.gif" width="20" height="20" border="0"></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
1808
WebAdmin/WebAdminHtml/parse_xml.cgi
Normal file
340
WebAdmin/WebAdminHtml/password-utils.pl
Normal file
|
@ -0,0 +1,340 @@
|
|||
# password-utils.pl
|
||||
# Common functions for talking to the admin module of QTSS
|
||||
#----------------------------------------------------------
|
||||
#
|
||||
# @APPLE_LICENSE_HEADER_START@
|
||||
#
|
||||
#
|
||||
# Copyright (c) 1999-2008 Apple Inc. All Rights Reserved.
|
||||
#
|
||||
# This file contains Original Code and/or Modifications of Original Code
|
||||
# as defined in and that are subject to the Apple Public Source License
|
||||
# Version 2.0 (the 'License'). You may not use this file except in
|
||||
# compliance with the License. Please obtain a copy of the License at
|
||||
# http://www.opensource.apple.com/apsl/ and read it before using this
|
||||
# file.
|
||||
#
|
||||
# The Original Code and all software distributed under the License are
|
||||
# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
# Please see the License for the specific language governing rights and
|
||||
# limitations under the License.
|
||||
#
|
||||
# @APPLE_LICENSE_HEADER_END@
|
||||
#
|
||||
#
|
||||
#---------------------------------------------------------
|
||||
|
||||
require('adminprotocol-lib.pl');
|
||||
|
||||
package passwordutils;
|
||||
|
||||
# GetLineEndingChar
|
||||
# Returns the line ending character for the current platform.
|
||||
sub GetLineEndingChar
|
||||
{
|
||||
my $lineEnding = "\n";
|
||||
if ($^O ne "MSWin32") {
|
||||
$lineEnding = "\r\n";
|
||||
}
|
||||
return $lineEnding;
|
||||
}
|
||||
|
||||
# GetUserList(usersFilepath, groupsFilePath)
|
||||
# Given the path to the qtusers file, returns an array ref of users.
|
||||
sub GetUserList
|
||||
{
|
||||
my $usersFilepath = $_[0];
|
||||
my $groupsFilePath = $_[1];
|
||||
my %usersList = ();
|
||||
my $line;
|
||||
my @splitItem = ();
|
||||
|
||||
if (open(USERFILE, $usersFilepath)) {
|
||||
while ($line = <USERFILE>) {
|
||||
if ($line =~ /:/o) { # not a realm statement
|
||||
@splitItem = split(/:/, $line);
|
||||
$line = $splitItem[0];
|
||||
$usersList{$line} = 'user';
|
||||
}
|
||||
}
|
||||
close(USERFILE);
|
||||
}
|
||||
|
||||
if (open(GROUPSFILE, $groupsFilePath)) {
|
||||
while ($line = <GROUPSFILE>) {
|
||||
if ($line =~ /:/o) { # a valid line
|
||||
@splitItem = split(/:/, $line);
|
||||
$line = $splitItem[0];
|
||||
$usersList{$line} = 'group';
|
||||
}
|
||||
}
|
||||
close(GROUPSFILE);
|
||||
}
|
||||
|
||||
return \%usersList;
|
||||
}
|
||||
|
||||
# GetBroadcastRestrictionsFromFile(filepath)
|
||||
# Given a path to a qtaccess file, returns the type and an array
|
||||
sub GetBroadcastRestrictionsFromFile {
|
||||
my $filepath = $_[0];
|
||||
my $line;
|
||||
my @splitText = ();
|
||||
my $restrictionType = '';
|
||||
my @userList = ();
|
||||
my $addToList = 0;
|
||||
|
||||
if (open(ACCESSFILE, $filepath)) {
|
||||
while ($line = <ACCESSFILE>) {
|
||||
if ($addToList == 1) {
|
||||
if ($line =~ /<\/limit>/i) {
|
||||
$addToList = 0;
|
||||
}
|
||||
else {
|
||||
if ($line =~ /^require/i) {
|
||||
$line =~ s/[\r\n]+//s;
|
||||
push(@splitText, $line);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ($line =~ /<limit write>/i) {
|
||||
$addToList = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
close(ACCESSFILE);
|
||||
if (scalar(@splitText) > 0) {
|
||||
@userList = split /\s+/, $splitText[0];
|
||||
}
|
||||
}
|
||||
|
||||
return \@userList;
|
||||
}
|
||||
|
||||
# GetViewingRestrictionsFromFile(filepath)
|
||||
# Given a path to a qtaccess file, returns the type and an array
|
||||
sub GetViewingRestrictionsFromFile {
|
||||
my $filepath = $_[0];
|
||||
my $line;
|
||||
my @splitText = ();
|
||||
my $restrictionType = '';
|
||||
my @userList = ();
|
||||
my $addToList = 0;
|
||||
|
||||
if (open(ACCESSFILE, $filepath)) {
|
||||
while ($line = <ACCESSFILE>) {
|
||||
if ($addToList == 1) {
|
||||
if ($line =~ /<limit write>/i) {
|
||||
$addToList = 0;
|
||||
}
|
||||
else {
|
||||
if ($line =~ /^require/i) {
|
||||
$line =~ s/[\r\n]+//s;
|
||||
push(@splitText, $line);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ($line =~ /<\/limit>/i) {
|
||||
$addToList = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
close(ACCESSFILE);
|
||||
if (scalar(@splitText) > 0) {
|
||||
@userList = split /\s+/, $splitText[0];
|
||||
}
|
||||
}
|
||||
|
||||
return \@userList;
|
||||
}
|
||||
|
||||
# WriteRestrictionsToFile(filepath, broadcastRestrictionString, viewingRestrictionString)
|
||||
# Given a path to a qtaccess file and a reference to an array,
|
||||
# write the access data to the specified file.
|
||||
sub WriteRestrictionsToFile {
|
||||
my $filepath = $_[0];
|
||||
my $broadcastRestrictionString = $_[1];
|
||||
my $viewingRestrictionString = $_[2];
|
||||
my $lineEnding = GetLineEndingChar();
|
||||
|
||||
|
||||
if (open(ACCESSFILE, ">$filepath")) {
|
||||
if ($broadcastRestrictionString ne '') {
|
||||
print ACCESSFILE "<Limit WRITE>$lineEnding";
|
||||
print ACCESSFILE $broadcastRestrictionString;
|
||||
print ACCESSFILE "$lineEnding</Limit>$lineEnding";
|
||||
}
|
||||
if ($viewingRestrictionString eq '') {
|
||||
$viewingRestrictionString = 'require any-user';
|
||||
}
|
||||
print ACCESSFILE "$viewingRestrictionString$lineEnding";
|
||||
close ACCESSFILE;
|
||||
}
|
||||
}
|
||||
|
||||
sub RemoveRestrictionsFile {
|
||||
my $filepath = $_[0];
|
||||
my $newPath = "$filepath.1";
|
||||
rename $filepath, $newPath;
|
||||
}
|
||||
|
||||
|
||||
# ParseGroupsFile(groupsfilepath)
|
||||
# Returns a ref to a hash table
|
||||
# each entry contains a string-delimited list of usernames.
|
||||
sub ParseGroupsFile {
|
||||
my $groupsfilepath = $_[0];
|
||||
my %groups = ();
|
||||
my $line;
|
||||
my $lineUsernames;
|
||||
|
||||
if (open(GROUPSFILE), $groupsfilepath) {
|
||||
while ($line = <GROUPSFILE>) {
|
||||
if ($line =~ /([^:]*):(.*)/) {
|
||||
$lineUsernames = $2;
|
||||
$lineUsernames =~ s/^\s+//; # remove leading white space
|
||||
$groups{$1} = $lineUsernames;
|
||||
}
|
||||
}
|
||||
}
|
||||
return \%groups;
|
||||
}
|
||||
|
||||
# SaveGroupsFile(groupsfilepath, groupshashref)
|
||||
sub SaveGroupsFile {
|
||||
my $groupsfilepath = $_[0];
|
||||
my $groupshashref = $_[1];
|
||||
my %groups = %$groupshashref;
|
||||
my $selectedGroup;
|
||||
|
||||
if (open(GROUPSFILE, ">$groupsfilepath")) {
|
||||
foreach $selectedGroup (keys %groups) {
|
||||
print GROUPSFILE "$selectedGroup: " . $groups{$selectedGroup};
|
||||
}
|
||||
close(GROUPSFILE);
|
||||
}
|
||||
}
|
||||
|
||||
# RemoveUserFromGroup(groupsfilepath, username, groupname)
|
||||
# Remove the specified user from the specified group.
|
||||
# If groupname is an empty string, remove from all groups.
|
||||
sub RemoveUserFromGroup {
|
||||
my $groupsfilepath = $_[0];
|
||||
my $username = $_[1];
|
||||
my $groupname = $_[2];
|
||||
my %groupsRef = ParseGroupsFile($groupsfilepath);
|
||||
my %groups = %$groupsRef;
|
||||
my $selectedGroup;
|
||||
my $selectedUser;
|
||||
my @usernames;
|
||||
my @newUsernames;
|
||||
|
||||
foreach $selectedGroup (keys %groups) {
|
||||
if (($groupname eq '') || ($selectedGroup eq $groupname)) {
|
||||
@newUsernames = ();
|
||||
@usernames = split(/\s/, $groups{$selectedGroup});
|
||||
foreach $selectedUser (@usernames) {
|
||||
if ($selectedUser ne $username) {
|
||||
push(@newUsernames, $selectedUser);
|
||||
}
|
||||
}
|
||||
$groups{$selectedGroup} = join(' ', @newUsernames);
|
||||
}
|
||||
}
|
||||
SaveGroupsFile(groupsfilepath, \%groups);
|
||||
}
|
||||
|
||||
# DeleteUser(qtpasswdpath, userfilepath, groupsfilepath, username)
|
||||
sub DeleteUser {
|
||||
my $qtpasswdpath = $_[0];
|
||||
my $userfilepath = $_[1];
|
||||
my $groupsfilepath = $_[2];
|
||||
my $username = $_[3];
|
||||
|
||||
RemoveUserFromGroup($groupsfilepath, $username, '');
|
||||
|
||||
if ($^O eq "MSWin32")
|
||||
{
|
||||
my $programArgs = "\"$qtpasswdpath\" -f \"$userfilepath\" -F -d \"$username\"";
|
||||
$progName = qq($qtpasswdpath);
|
||||
eval "require Win32::Process";
|
||||
if(!$@) {
|
||||
Win32::Process::Create(
|
||||
$processObj,
|
||||
$progName,
|
||||
$programArgs,
|
||||
1,
|
||||
DETACHED_PROCESS,
|
||||
".") || return $code;
|
||||
|
||||
$processObj->SetPriorityClass(NORMAL_PRIORITY_CLASS);
|
||||
$processObj->Wait(0);
|
||||
sleep(2);
|
||||
$code = 200;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
my $programArgs = "\"$qtpasswdpath\" -f \"$userfilepath\" -F -d \'$username\'";
|
||||
if(system($programArgs) == 0) {
|
||||
$code = 200;
|
||||
}
|
||||
else {
|
||||
$code = 500;
|
||||
return $code;
|
||||
}
|
||||
}
|
||||
return $code;
|
||||
}
|
||||
|
||||
# AddOrEditBroadcastUser(qtpasswdpath, userfilepath, username, password)
|
||||
sub AddOrEditBroadcastUser {
|
||||
my $qtpasswdpath = $_[0];
|
||||
my $userfilepath = $_[1];
|
||||
my $username = $_[2];
|
||||
my $password = $_[3];
|
||||
|
||||
if ($^O eq "MSWin32")
|
||||
{
|
||||
my $programArgs = "\"$qtpasswdpath\" -f \"$userfilepath\" -p \"$password\" \"$username\"";
|
||||
$progName = qq($qtpasswdpath);
|
||||
eval "require Win32::Process";
|
||||
if(!$@) {
|
||||
Win32::Process::Create(
|
||||
$processObj,
|
||||
$progName,
|
||||
$programArgs,
|
||||
1,
|
||||
DETACHED_PROCESS,
|
||||
".") || return $code;
|
||||
|
||||
$processObj->SetPriorityClass(NORMAL_PRIORITY_CLASS);
|
||||
$processObj->Wait(0);
|
||||
sleep(2);
|
||||
$code = 200;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
my $initArgs = "\"$qtpasswdpath\" -f \"$userfilepath\" -R broadcaster ";
|
||||
system($initArgs);
|
||||
|
||||
my $programArgs = "\"$qtpasswdpath\" -f \"$userfilepath\" -p \'$password\' -A broadcaster \'$username\'";
|
||||
if(system($programArgs) == 0) {
|
||||
$code = 200;
|
||||
}
|
||||
else {
|
||||
$code = 500;
|
||||
$_[0] = "Error running password application.";
|
||||
return $code;
|
||||
}
|
||||
$_[0] = "";
|
||||
}
|
||||
return $code;
|
||||
}
|
1286
WebAdmin/WebAdminHtml/playlist-lib.pl
Normal file
1571
WebAdmin/WebAdminHtml/playlist_detail.html
Normal file
1
WebAdmin/WebAdminHtml/playlist_error_log.html
Normal file
|
@ -0,0 +1 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<style type="text/css">
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
.large { font-weight: bold; font-size: 14px }
.small { font-size: 10px }
.white { color: #FFFFFF }
.header { font-size: 18px; color:#666699 }
input { font-size: 12px }
</style>
</head>
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif">
<qtssobject type=form param="_self">
<input type=hidden name=filename value="general_settings.html">
<input type=hidden name=action value="SaveGeneralSettings">
<table border=0 cellspacing=0 cellpadding=0 width=620>
<tr>
<td align=left valign=top width=20>
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
</td>
<td valign=top align=center>
<br>
<table border=0 cellspacing=0 cellpadding=2 width="100%">
<tr>
<td align=left nowrap class=header>
<qtssstring name="PLErrorLogHeader"/>
</td>
</tr>
<tr>
<td align=left>
<img src="images/divider.gif" width="100%" height=1 align=middle alt="">
</td>
</tr>
<tr>
<td align=left><qtssobject name=playlistErrorLogText/>
</tr>
</table>
</td>
</tr>
</table>
|
807
WebAdmin/WebAdminHtml/playlists.html
Normal file
|
@ -0,0 +1,807 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="BBEdit 6.1.1">
|
||||
<meta http-equiv="imagetoolbar" content="no">
|
||||
<style type="text/css">
|
||||
td
|
||||
{
|
||||
font-family: Arial, Helvetica, Geneva, Swiss, sans-serif;
|
||||
font-size: 12px;
|
||||
}
|
||||
.normal
|
||||
{
|
||||
font-family: Arial, Helvetica, Geneva, Swiss, sans-serif;
|
||||
font-size: 12px;
|
||||
}
|
||||
.large
|
||||
{
|
||||
font-weight: bold;
|
||||
font-size: 14px;
|
||||
}
|
||||
.small { font-size: 10px }
|
||||
.reallysmall
|
||||
{
|
||||
font-size: 10px;
|
||||
color: #333;
|
||||
}
|
||||
.header
|
||||
{
|
||||
font-size: 18px;
|
||||
color: #669;
|
||||
}
|
||||
.white { color: #FFFFFF }
|
||||
#availpllabel
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 71px;
|
||||
left: 78px;
|
||||
height: 19px;
|
||||
visibility: visible;
|
||||
}
|
||||
#newMP3Button
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 93px;
|
||||
left: 430px;
|
||||
width: 120px;
|
||||
height: 284px;
|
||||
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
|
||||
visibility: visible;
|
||||
}
|
||||
#newMovieButton
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 124px;
|
||||
left: 430px;
|
||||
width: 120px;
|
||||
height: 284px;
|
||||
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
|
||||
visibility: visible;
|
||||
}
|
||||
#editButton
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 5;
|
||||
top: 167px;
|
||||
left: 430px;
|
||||
width: 120px;
|
||||
height: 284px;
|
||||
color: #999999;
|
||||
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
|
||||
visibility: hidden;
|
||||
}
|
||||
#editButtonDisabled
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 5;
|
||||
top: 167px;
|
||||
left: 430px;
|
||||
width: 120px;
|
||||
height: 284px;
|
||||
color: #999999;
|
||||
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
|
||||
visibility: visible;
|
||||
}
|
||||
#deleteButton
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 7;
|
||||
top: 210px;
|
||||
left: 430px;
|
||||
width: 120px;
|
||||
height: 284px;
|
||||
color: #999999;
|
||||
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
|
||||
visibility: hidden;
|
||||
}
|
||||
#deleteButtonDisabled
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 7;
|
||||
top: 210px;
|
||||
left: 430px;
|
||||
width: 120px;
|
||||
height: 284px;
|
||||
color: #999999;
|
||||
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
|
||||
visibility: visible;
|
||||
}
|
||||
#libbackground
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 93px;
|
||||
left: 78px;
|
||||
width: 324px;
|
||||
height: 284px;
|
||||
visibility: visible;
|
||||
}
|
||||
#libfiles
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 108px;
|
||||
left: 80px;
|
||||
width: 216px;
|
||||
line-height: 18px;
|
||||
<qtssobject name=monospaceIfNotJapanese/>visibility: visible;
|
||||
}
|
||||
#libstatus
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 108px;
|
||||
left: 302px;
|
||||
width: 84px;
|
||||
line-height: 18px;
|
||||
<qtssobject name=monospaceIfNotJapanese/>visibility: visible;
|
||||
}
|
||||
#libcontrols
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 108px;
|
||||
left: 383px;
|
||||
width: 56px;
|
||||
line-height: 18px;
|
||||
visibility: visible;
|
||||
}
|
||||
#libscrollbar
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 107px;
|
||||
left: 404px;
|
||||
width: 16px;
|
||||
visibility: hidden;
|
||||
}
|
||||
#libscrollbardisabled
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 107px;
|
||||
left: 404px;
|
||||
width: 16px;
|
||||
visibility: visible;
|
||||
}
|
||||
#libscrollthumb
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 4;
|
||||
top: 122px;
|
||||
left: 404px;
|
||||
width: 14px;
|
||||
height: 16px;
|
||||
visibility: hidden;
|
||||
}
|
||||
#libhighlight
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
top: 94px;
|
||||
left: 79px;
|
||||
width: 322px;
|
||||
height: 20px;
|
||||
visibility: hidden;
|
||||
}
|
||||
</style>
|
||||
<script src="includes/encode_unicode.js" type="text/javascript" language="Javascript" charset="utf-8"></script>
|
||||
<script src="includes/standardNav.js" type="text/javascript" language="javascript"></script>
|
||||
<qtssobject name=scriptTag>
|
||||
//<script language=javascript>
|
||||
|
||||
var gLibBasePosX = 79;
|
||||
var gLibBasePosY = 108;
|
||||
var gLibItemWidth = 325;
|
||||
var gLibClickWidth = 266;
|
||||
var gLibItemHeight = 20;
|
||||
var gLibNumItems = 14;
|
||||
var gLibMaxChars = 29;
|
||||
var gDefaultImage = 'images/mp3_file.gif';
|
||||
var gDragThreshold = 6;
|
||||
var gNumberOfSteps = 4;
|
||||
var gStepTiming = 35;
|
||||
var gTextSpacerImg = '<img src="images/spacer.gif" width=3 height=20 align=middle>';
|
||||
var gThumbRangeTop = 122;
|
||||
var gThumbRangeBottom = 360;
|
||||
var gThumbHeight = 16;
|
||||
var gScrollArrowWidth = 16;
|
||||
var gScrollArrowHeight = 16;
|
||||
var gDirScrollbarLeft = 404;
|
||||
var gScrollUpArrowTop = 107;
|
||||
var gScrollDownArrowTop = 375;
|
||||
var gScrollBy = 6;
|
||||
var dblClickDelay = 300;
|
||||
var gScrollDelay = 200;
|
||||
|
||||
|
||||
var libHighlightStart = (-1);
|
||||
var libHighlightEnd = (-1);
|
||||
var libScrollPos = 0;
|
||||
var dragStatus = 'false';
|
||||
var directoryListing = new Array();
|
||||
var playlists = new Array();
|
||||
var playlistPaths = new Array();
|
||||
var startArray = new Array();
|
||||
var iconImages = new Array();
|
||||
var doContiguousSelection = false;
|
||||
var insertPos = (-1);
|
||||
var removeOldItem = (-1);
|
||||
var showedAlert = false;
|
||||
|
||||
var isDblClick = false;
|
||||
var dblClickTimer;
|
||||
|
||||
var scrollTimer;
|
||||
var scrollBy = 1; // -1=scroll up, 1=scroll down
|
||||
var scrollWhich = 0; // 0=library, 1=playlist contents
|
||||
|
||||
var broadcastPasswordIsSet = <qtssobject name=plbroadcastpasswordisset/>;
|
||||
|
||||
function DoScroll() {
|
||||
if (dragStatus == 'timedscroll') {
|
||||
if (scrollWhich == 0) {
|
||||
var dataHeight = directoryListing.length - gLibNumItems;
|
||||
libScrollPos = Math.max(Math.min(libScrollPos+scrollBy, dataHeight), 0);
|
||||
BuildLibrary();
|
||||
libSetThumbPos();
|
||||
}
|
||||
else {
|
||||
var dataHeight = playlistFiles.length - gPLNumItems;
|
||||
plScrollPos = Math.max(Math.min(plScrollPos+scrollBy, dataHeight), 0);
|
||||
BuildPlaylist();
|
||||
PLSetThumbPos();
|
||||
}
|
||||
SetScrollTimer();
|
||||
}
|
||||
else {
|
||||
clearInterval(scrollTimer);
|
||||
scrollTimer = null;
|
||||
}
|
||||
}
|
||||
|
||||
function SetScrollTimer() {
|
||||
if (scrollTimer == null) {
|
||||
scrollTimer = setInterval("DoScroll()", gScrollDelay)
|
||||
}
|
||||
}
|
||||
|
||||
function BuildLibrary() {
|
||||
var filesLayerText = '<span class=small>';
|
||||
var statusLayerText = '<span class=small>';
|
||||
var controlsLayerText = '<span class=small>';
|
||||
for (var i=libScrollPos; i < Math.min((libScrollPos+gLibNumItems), directoryListing.length); i++) {
|
||||
var itemText = directoryListing[i];
|
||||
var itemName = playlists[i];
|
||||
var isMP3 = (iconImages[i] == 'images/mp3_file.gif') ? 'true' : 'false';
|
||||
if (itemText.length > gLibMaxChars) {
|
||||
itemText = itemText.substr(0, gLibMaxChars) + "…";
|
||||
}
|
||||
itemText = itemText.replace('<', '<');
|
||||
itemText = itemText.replace('>', '>');
|
||||
filesLayerText = filesLayerText + '<div style="width:216px; height:20px;">';
|
||||
filesLayerText = filesLayerText + '<img src="' + iconImages[i] + '" width=16 height=16 align=middle vspace=2>';
|
||||
filesLayerText = filesLayerText + gTextSpacerImg + itemText + '<' + '/div>';
|
||||
statusLayerText = statusLayerText + '<div style="width:84px; height:20px;">';
|
||||
if ((startArray[i] == 2) || (startArray[i] == 3)) { // error
|
||||
statusLayerText = statusLayerText + '<a href="javascript:ViewErrors(\'' + itemName + '\')">';
|
||||
if (startArray[i] == 2) {
|
||||
statusLayerText = statusLayerText + '<img src="images/icon_error.gif" width=16 height=16 hspace=1 vspace=2 border=0 align=middle><' + '/a>';
|
||||
}
|
||||
else {
|
||||
statusLayerText = statusLayerText + '<img src="images/icon_alert.gif" width=16 height=16 hspace=1 vspace=2 border=0 align=middle><' + '/a>';
|
||||
}
|
||||
}
|
||||
else {
|
||||
statusLayerText = statusLayerText + '<img src="images/spacer.gif" width=16 height=16 hspace=1 vspace=2 border=0 align=middle>';
|
||||
}
|
||||
controlsLayerText = controlsLayerText + '<div style="width:56px; height:20px;">';
|
||||
if ((startArray[i] == 0) || (startArray[i] == 2)) { // stopped
|
||||
statusLayerText = statusLayerText + '<qtssstring name=PLStopped>';
|
||||
controlsLayerText = controlsLayerText + '<a href="javascript:StartPlaylist(\'' + itemName + '\', ' + isMP3 + ')">';
|
||||
controlsLayerText = controlsLayerText + '<img src="images/icon_start_playlist.gif" width=16 height=16 hspace=1 vspace=2 border=0><' + '/a>';
|
||||
}
|
||||
else { // started
|
||||
statusLayerText = statusLayerText + '<qtssstring name=PLStarted>';
|
||||
controlsLayerText = controlsLayerText + '<a href="javascript:StopPlaylist(\'' + itemName + '\', ' + isMP3 + ')">';
|
||||
controlsLayerText = controlsLayerText + '<img src="images/icon_stop_playlist.gif" width=16 height=16 hspace=1 vspace=2 border=0><' + '/a>';
|
||||
}
|
||||
statusLayerText = statusLayerText + '<' + '/div>';
|
||||
controlsLayerText = controlsLayerText + '<' + '/div>';
|
||||
}
|
||||
filesLayerText = filesLayerText;
|
||||
SetStyleText('libfiles', filesLayerText + '<' + '/span>');
|
||||
SetStyleText('libstatus', statusLayerText + '<' + '/span>');
|
||||
SetStyleText('libcontrols', controlsLayerText + '<' + '/span>');
|
||||
SetLibHighlightBar();
|
||||
if (directoryListing.length > gLibNumItems) {
|
||||
SetStyleVisible('libscrollbardisabled', false);
|
||||
SetStyleVisible('libscrollbar', true);
|
||||
SetStyleVisible('libscrollthumb', true);
|
||||
}
|
||||
else {
|
||||
SetStyleVisible('libscrollbardisabled', true);
|
||||
SetStyleVisible('libscrollbar', false);
|
||||
SetStyleVisible('libscrollthumb', false);
|
||||
}
|
||||
}
|
||||
|
||||
function clickedEditButton() {
|
||||
document.forms[0].elements['action'].value='GetPlaylist';
|
||||
document.forms[0].elements['curplaylist'].value=playlists[libHighlightStart];
|
||||
document.forms[0].elements['filename'].value='playlist_detail.html';
|
||||
document.forms[0].submit();
|
||||
}
|
||||
|
||||
function clickedDeleteButton() {
|
||||
if (entityConfirm("<qtssstring name=PLDeleteConfirm>")) {
|
||||
document.forms[0].elements['action'].value='DeletePlaylist';
|
||||
document.forms[0].elements['filename'].value='playlists.html';
|
||||
document.forms[0].elements['curplaylist'].value=playlists[libHighlightStart];
|
||||
document.forms[0].submit();
|
||||
}
|
||||
}
|
||||
|
||||
function clickedNewMP3Button() {
|
||||
document.forms[0].elements['action'].value='NewMP3Playlist';
|
||||
document.forms[0].elements['filename'].value='playlist_detail.html';
|
||||
document.forms[0].submit();
|
||||
}
|
||||
|
||||
function clickedNewMovieButton() {
|
||||
document.forms[0].elements['action'].value='NewMoviePlaylist';
|
||||
document.forms[0].elements['filename'].value='playlist_detail.html';
|
||||
document.forms[0].submit();
|
||||
}
|
||||
|
||||
function handleLibDblClick() {
|
||||
ClearDblClickTimer();
|
||||
clickedEditButton();
|
||||
}
|
||||
|
||||
function SetDblClickTimer() {
|
||||
isDblClick = true;
|
||||
currentTooltipTimer = setTimeout("ClearDblClickTimer()", dblClickDelay);
|
||||
}
|
||||
|
||||
function ClearDblClickTimer() {
|
||||
isDblClick = false;
|
||||
dblClickTimer = null;
|
||||
}
|
||||
|
||||
function StartPlaylist(plname, isMP3) {
|
||||
if ((!isMP3) || (broadcastPasswordIsSet == 1)) {
|
||||
document.forms[0].elements['action'].value='StartPlaylist';
|
||||
document.forms[0].elements['curplaylist'].value=plname;
|
||||
document.forms[0].elements['filename'].value='playlists.html';
|
||||
document.forms[0].submit();
|
||||
}
|
||||
else {
|
||||
if (confirm('<qtssstring name=PLSetBroadcastPasswordConfirm>')) {
|
||||
document.forms[0].elements['action'].value = '';
|
||||
document.forms[0].elements['filename'].value = 'change_mp3_password.html';
|
||||
document.forms[0].submit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function StopPlaylist(plname) {
|
||||
document.forms[0].elements['action'].value='StopPlaylist';
|
||||
document.forms[0].elements['curplaylist'].value=plname;
|
||||
document.forms[0].elements['filename'].value='playlists.html';
|
||||
document.forms[0].submit();
|
||||
}
|
||||
|
||||
function ViewErrors(plname) {
|
||||
document.forms[0].elements['action'].value='ShowPlaylistLog';
|
||||
document.forms[0].elements['curplaylist'].value=plname;
|
||||
document.forms[0].elements['filename'].value='playlist_error_log.html';
|
||||
document.forms[0].submit();
|
||||
}
|
||||
|
||||
function libScrollDown() {
|
||||
var dataHeight = directoryListing.length - gLibNumItems;
|
||||
if (libScrollPos < dataHeight) {
|
||||
libScrollPos = Math.min(libScrollPos+gScrollBy, dataHeight);
|
||||
BuildLibrary();
|
||||
libSetThumbPos();
|
||||
}
|
||||
}
|
||||
|
||||
function libScrollUp() {
|
||||
if (libScrollPos > 0) {
|
||||
libScrollPos = Math.max(libScrollPos-gScrollBy, 0);
|
||||
BuildLibrary();
|
||||
libSetThumbPos();
|
||||
}
|
||||
}
|
||||
|
||||
function libSetThumbPos() {
|
||||
var scrollbarHeight = gThumbRangeBottom - gThumbRangeTop;
|
||||
var dataHeight = directoryListing.length - gLibNumItems;
|
||||
if (dataHeight > 1) {
|
||||
var scrollRatio = libScrollPos / dataHeight;
|
||||
SetStylePos('libscrollthumb', 1, (gThumbRangeTop + (scrollRatio * scrollbarHeight)));
|
||||
}
|
||||
}
|
||||
|
||||
function libGetThumbPos() {
|
||||
var scrollbarHeight = gThumbRangeBottom - gThumbRangeTop;
|
||||
var dataHeight = directoryListing.length - gLibNumItems;
|
||||
if (dataHeight > 1) {
|
||||
var scrollRatio = (GetStylePos('libscrollthumb', 1) - gThumbRangeTop) / scrollbarHeight;
|
||||
libScrollPos = Math.round(scrollRatio * (directoryListing.length - gLibNumItems));
|
||||
BuildLibrary();
|
||||
libSetThumbPos();
|
||||
}
|
||||
}
|
||||
|
||||
function SetLibHighlightBar() {
|
||||
if (libHighlightEnd < libScrollPos) {
|
||||
SetStyleVisible('libhighlight', false);
|
||||
}
|
||||
else {
|
||||
var displayHighlightStart = Math.max(libHighlightStart - libScrollPos, 0);
|
||||
var displayHighlightEnd = Math.min(libHighlightEnd - libScrollPos, libScrollPos + gLibNumItems - 1);
|
||||
var highlightHeight = (displayHighlightEnd - displayHighlightStart + 1) * gLibItemHeight;
|
||||
var startPos = (displayHighlightStart * gLibItemHeight) + gLibBasePosY;
|
||||
SetStyleText('libhighlight', '<img src="images/highlight.gif" width=' + gLibItemWidth + ' height=' + highlightHeight + '>');
|
||||
SetStylePos('libhighlight', 1, startPos);
|
||||
SetStyleVisible('libhighlight', true);
|
||||
}
|
||||
}
|
||||
|
||||
function SetButtonsEnabled(isEnabled) {
|
||||
SetStyleVisible('deleteButtonDisabled', !isEnabled);
|
||||
SetStyleVisible('deleteButton', isEnabled);
|
||||
SetStyleVisible('editButtonDisabled', !isEnabled);
|
||||
SetStyleVisible('editButton', isEnabled);
|
||||
}
|
||||
|
||||
function handleMouseDown(e) {
|
||||
var continueClick = true;
|
||||
if (IsIE()) var theTarget = window.event.srcElement;
|
||||
else var theTarget = e.target;
|
||||
if (IsIE()) var theButton = event.button;
|
||||
else var theButton = e.which;
|
||||
if (IsIE()) doContiguousSelection = window.event.shiftKey;
|
||||
else doContiguousSelection = (e.modifiers == 4);
|
||||
if (IsIE()) {
|
||||
oldX = event.clientX + GetIEScrollPos(0);
|
||||
oldY = event.clientY + GetIEScrollPos(1);
|
||||
}
|
||||
else {
|
||||
oldX = e.pageX
|
||||
oldY = e.pageY
|
||||
}
|
||||
|
||||
removeOldItem = (-1);
|
||||
|
||||
if ((oldX >= gDirScrollbarLeft) && (oldX <= (gDirScrollbarLeft + gScrollArrowWidth)) && (oldY >= gScrollUpArrowTop) && (oldY <= (gScrollUpArrowTop + gScrollArrowHeight))) { // dir up scroll
|
||||
dragStatus = 'timedscroll';
|
||||
scrollWhich = 0;
|
||||
scrollBy = (-1);
|
||||
DoScroll();
|
||||
continueClick = false;
|
||||
}
|
||||
|
||||
if ((oldX >= gDirScrollbarLeft) && (oldX <= (gDirScrollbarLeft + gScrollArrowWidth)) && (oldY > (gScrollUpArrowTop + gScrollArrowHeight)) && (oldY < GetStylePos('libscrollthumb', 1))) { // jump up
|
||||
dragStatus = 'timedscroll';
|
||||
scrollWhich = 0;
|
||||
scrollBy = ((-1) * (gLibNumItems - 1));
|
||||
DoScroll();
|
||||
continueClick = false;
|
||||
}
|
||||
|
||||
if ((oldX >= gDirScrollbarLeft) && (oldX <= (gDirScrollbarLeft + gScrollArrowWidth)) && (oldY >= GetStylePos('libscrollthumb', 1)) && (oldY <= (GetStylePos('libscrollthumb', 1) + gThumbHeight))) { // dir scroll thumb
|
||||
layerClicked = 'libscrollthumb';
|
||||
dragStatus = 'scrolling';
|
||||
continueClick = false;
|
||||
}
|
||||
|
||||
if ((oldX >= gDirScrollbarLeft) && (oldX <= (gDirScrollbarLeft + gScrollArrowWidth)) && (oldY > (GetStylePos('libscrollthumb', 1) + gThumbHeight)) && (oldY < gScrollDownArrowTop)) { // jump down
|
||||
dragStatus = 'timedscroll';
|
||||
scrollWhich = 0;
|
||||
scrollBy = gLibNumItems - 1;
|
||||
DoScroll();
|
||||
continueClick = false;
|
||||
}
|
||||
|
||||
if ((oldX >= gDirScrollbarLeft) && (oldX <= (gDirScrollbarLeft + gScrollArrowWidth)) && (oldY >= gScrollDownArrowTop) && (oldY <= (gScrollDownArrowTop + gScrollArrowHeight))) { // dir up scroll
|
||||
dragStatus = 'timedscroll';
|
||||
scrollWhich = 0;
|
||||
scrollBy = 1;
|
||||
DoScroll();
|
||||
continueClick = false;
|
||||
}
|
||||
|
||||
if ((oldX >= gLibBasePosX) && (oldX <= gLibBasePosX+gLibClickWidth) && (oldY >= gLibBasePosY) && (oldY <= gLibBasePosY+(gLibNumItems*gLibItemHeight))) {
|
||||
var itemClicked = (oldY - gLibBasePosY) / gLibItemHeight;
|
||||
itemClicked = Math.floor(itemClicked);
|
||||
itemClicked = itemClicked + libScrollPos;
|
||||
if (itemClicked > (directoryListing.length - 1)) {
|
||||
return false;
|
||||
}
|
||||
offsetX = oldX - gLibBasePosX;
|
||||
offsetY = oldY - (gLibBasePosY + ((itemClicked - libScrollPos) * gLibItemHeight));
|
||||
if ((itemClicked < libHighlightStart) || (itemClicked > libHighlightEnd)) {
|
||||
libHighlightStart = itemClicked;
|
||||
libHighlightEnd = itemClicked;
|
||||
SetLibHighlightBar();
|
||||
}
|
||||
dragStatus = 'click';
|
||||
SetButtonsEnabled(true);
|
||||
continueClick = false;
|
||||
if (isDblClick) { // double-click; handle
|
||||
handleLibDblClick()
|
||||
}
|
||||
else { // first click; set isDblClick to true and set a timer to set it to false after the delay
|
||||
SetDblClickTimer();
|
||||
}
|
||||
}
|
||||
|
||||
if (continueClick) return;
|
||||
else return continueClick;
|
||||
}
|
||||
|
||||
function handleDrag(e) {
|
||||
status = '';
|
||||
if (IsIE()) {
|
||||
currentX = event.clientX + GetIEScrollPos(0);
|
||||
currentY = event.clientY + GetIEScrollPos(1);
|
||||
}
|
||||
else {
|
||||
currentX = e.pageX
|
||||
currentY = e.pageY
|
||||
}
|
||||
if (dragStatus == 'scrolling') {
|
||||
SetStylePos(layerClicked, 1, Math.max(Math.min(currentY, gThumbRangeBottom), gThumbRangeTop));
|
||||
}
|
||||
var maxPos = directoryListing.length;
|
||||
if ((currentX >= gLibBasePosX) && (currentX <= gLibBasePosX+gLibItemWidth) && (currentY >= gLibBasePosY) && (currentY <= gLibBasePosY+(gLibNumItems*gLibItemHeight))) {
|
||||
// check to see if we've switched positions
|
||||
tooltipPosY = Math.min(Math.floor((currentY - gLibBasePosY) / gLibItemHeight), maxPos);
|
||||
if (tooltipPosY < directoryListing.length) {
|
||||
if (status != playlistPaths[tooltipPosY]) {
|
||||
status = playlistPaths[tooltipPosY];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function handleMouseUp() {
|
||||
var continueClick = true;
|
||||
if (!IsIE()) document.releaseEvents(Event.MOUSEMOVE);
|
||||
if (dragStatus == 'scrolling') {
|
||||
dragStatus = 'false';
|
||||
if (layerClicked == 'libscrollthumb') libGetThumbPos();
|
||||
else PLGetThumbPos();
|
||||
continueClick = false;
|
||||
}
|
||||
dragStatus = 'false';
|
||||
if (continueClick) return;
|
||||
else return continueClick;
|
||||
}
|
||||
|
||||
function UpdateHiddenFields() {
|
||||
var myString = '';
|
||||
var myString2 = '';
|
||||
for (var i = 0; i < directoryListing.length; i++) {
|
||||
myString = myString + directoryListing[i];
|
||||
myString2 = myString2 + startArray[i];
|
||||
if (i < (startArray.length - 1)) {
|
||||
myString = myString + "\t";
|
||||
myString2 = myString2 + "\t";
|
||||
}
|
||||
}
|
||||
document.forms[0].submitplaylistnames.value = myString;
|
||||
document.forms[0].submitstartstop.value = myString2;
|
||||
}
|
||||
|
||||
function showConfirmMessage() {
|
||||
if ('<qtssobject name=confirmMessage/>' != '') {
|
||||
if (parent.frames['top'].showConfirmMessage) {
|
||||
parent.frames['top'].showConfirmMessage('<qtssobject name=confirmMessage/>');
|
||||
}
|
||||
else if (parent.parent.frames[0].showConfirmMessage) {
|
||||
parent.parent.frames[0].showConfirmMessage('<qtssobject name=confirmMessage/>');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// re-route events to handlers
|
||||
|
||||
if (!IsIE()) document.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN|Event.MOUSEMOVE);
|
||||
|
||||
document.onmousedown = handleMouseDown;
|
||||
document.onmouseup = handleMouseUp;
|
||||
document.onmousemove = handleDrag
|
||||
|
||||
// populate array from QTSS
|
||||
|
||||
<qtssrepeater name=playlists>
|
||||
directoryListing[directoryListing.length] = '<qtssobject name=qtssPlaylistTitles format=nosinglequotes/>';
|
||||
playlists[playlists.length] = '<qtssobject name=qtssPlaylistNames format=nosinglequotes/>';
|
||||
playlistPaths[playlistPaths.length] = '<qtssobject name=qtssPlaylistPaths format=nosinglequotes/>';
|
||||
startArray[startArray.length] = '<qtssobject name=qtssPlaylistStatuses format=nosinglequotes/>';
|
||||
iconImages[iconImages.length] = 'images/<qtssobject name=qtssPlaylistImages format=nosinglequotes/>';
|
||||
</qtssrepeater>
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="showConfirmMessage();BuildLibrary()">
|
||||
<qtssobject type=getform>
|
||||
<input type=hidden name=filename value="confirm.html"><input type="hidden" name="submitplaylistnames" value=""><input type="hidden" name="submitstartstop" value="">
|
||||
<input type=hidden name=action value="">
|
||||
<input type="hidden" name="curplaylist" value="">
|
||||
<qtssobject name="qtssSvrDefaultDNSName" type=hidden/>
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=620>
|
||||
<tr>
|
||||
<td align=left valign=top nowrap width=20>
|
||||
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
|
||||
</td>
|
||||
<td valign=top align=center>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td align=left nowrap class=header>
|
||||
<qtssstring name="PLHeader"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="availpllabel" class=large>
|
||||
<qtssstring name="PLAvailablePlaylists"/>
|
||||
</div>
|
||||
<div id="libbackground">
|
||||
<table border=0 cellspacing=0 cellpadding=0>
|
||||
<tr>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
<td width=238 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=238 height=1 alt=""></td>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
<td width=62 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=62 height=1 alt=""></td>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
<td width=38 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=38 height=1 alt=""></td>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width=1 height=13><img src="images/greypixel.gif" width=1 height=13 alt=""></td>
|
||||
<td width=238 height=13 nowrap bgcolor="#c6c6d6" class=reallysmall><img src="images/headerpixel.gif" width=2 height=1 alt=""><qtssstring name="RelayNameHeader" /></td>
|
||||
<td width=1 height=13><img src="images/greypixel.gif" width=1 height=13 alt=""></td>
|
||||
<td width=62 height=1 nowrap bgcolor="#c6c6d6" class=reallysmall><img src="images/headerpixel.gif" width=2 height=1 alt=""><qtssstring name="RelayStatusHeader" /></td>
|
||||
<td width=1 height=13><img src="images/greypixel.gif" width=1 height=13 alt=""></td>
|
||||
<td width=38 height=1 nowrap bgcolor="#c6c6d6" class=reallysmall><img src="images/headerpixel.gif" width=2 height=1 alt=""> </td>
|
||||
<td width=1 height=13><img src="images/greypixel.gif" width=1 height=13 alt=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
<td width=238 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=238 height=1 alt=""></td>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
<td width=62 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=62 height=1 alt=""></td>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
<td width=38 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=38 height=1 alt=""></td>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width=1 height=282 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=1 height=282 alt=""></td>
|
||||
<td width=238 height=282 bgcolor="#FFFFFF"><img src="images/whitepixel.gif" width=238 height=282 alt=""></td>
|
||||
<td width=1 height=282 bgcolor="#8c93ad"><img src="images/whitepixel.gif" width=1 height=282 alt=""></td>
|
||||
<td width=62 height=282 bgcolor="#FFFFFF"><img src="images/whitepixel.gif" width=62 height=282 alt=""></td>
|
||||
<td width=1 height=282 bgcolor="#8c93ad"><img src="images/whitepixel.gif" width=1 height=282 alt=""></td>
|
||||
<td width=38 height=282 bgcolor="#FFFFFF"><img src="images/whitepixel.gif" width=38 height=282 alt=""></td>
|
||||
<td width=1 height=282 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=1 height=282 alt=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
<td width=238 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=238 height=1 alt=""></td>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
<td width=62 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=62 height=1 alt=""></td>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
<td width=38 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=38 height=1 alt=""></td>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="libfiles">
|
||||
<!--placeholder ~~ will be populated dynamically-->
|
||||
</div>
|
||||
<div id="libstatus">
|
||||
<!--placeholder ~~ will be populated dynamically-->
|
||||
</div>
|
||||
<div id="libcontrols">
|
||||
<!--placeholder ~~ will be populated dynamically-->
|
||||
</div>
|
||||
<div id="libhighlight">
|
||||
<!--placeholder ~~ will be populated dynamically-->
|
||||
</div>
|
||||
<div id="libscrollbar">
|
||||
<table border=0 cellspacing=0 cellpadding=0>
|
||||
<tr>
|
||||
<td><img src="images/scroll_arrow_up.gif" width=16 height=16></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td background="images/scroll_bg.gif" height=252><img src="images/scroll_bg.gif" width=16 height=252></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="images/scroll_arrow_down.gif" width=16 height=16></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="libscrollbardisabled">
|
||||
<table border=0 cellspacing=0 cellpadding=0>
|
||||
<tr>
|
||||
<td background="images/scroll_bg_inactive.gif" width=16 height=1><img src="images/greypixel.gif" width="16" height="1"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td background="images/scroll_bg_inactive.gif" height=282><img src="images/scroll_bg_inactive.gif" width="16" height="282"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td background="images/scroll_bg_inactive.gif" width=16 height=1><img src="images/greypixel.gif" width="16" height="1"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="libscrollthumb">
|
||||
<img src="images/scroll_thumb.gif" width=16 height=16>
|
||||
</div>
|
||||
<div id="newMP3Button">
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td align=left><a href="javascript:clickedNewMP3Button()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
|
||||
<td align=left nowrap><a href="javascript:clickedNewMP3Button()"><qtssstring name="PLNewMP3" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="newMovieButton">
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td align=left><a href="javascript:clickedNewMovieButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
|
||||
<td align=left nowrap><a href="javascript:clickedNewMovieButton()"><qtssstring name="PLNewMovie" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="deleteButton">
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td align=left><a href="javascript:clickedDeleteButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
|
||||
<td align=left nowrap><a href="javascript:clickedDeleteButton()"><qtssstring name="PLDeleteButton" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="deleteButtonDisabled">
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td align=left><img src="images/link_disabled.gif" width=28 height=24></td>
|
||||
<td align=left nowrap><qtssstring name="PLDeleteButton" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="editButton">
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td align=left><a href="javascript:clickedEditButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
|
||||
<td align=left nowrap><a href="javascript:clickedEditButton()"><qtssstring name="PLEditButton" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="editButtonDisabled">
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td align=left><img src="images/link_disabled.gif" width=28 height=24></td>
|
||||
<td align=left nowrap><qtssstring name="PLEditButton" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</qtssobject>
|
||||
</body>
|
||||
</html>
|
109
WebAdmin/WebAdminHtml/ports.html
Normal file
|
@ -0,0 +1,109 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="BBEdit Prerelease">
|
||||
<style type="text/css">
|
||||
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
|
||||
.large { font-weight: bold; font-size: 14px }
|
||||
.small { font-size: 10px }
|
||||
.white { color: #FFFFFF }
|
||||
.header { font-size: 18px; color:#666699 }
|
||||
input { font-size: 12px }
|
||||
</style>
|
||||
<qtssobject name=scriptTag>
|
||||
//<script language=javascript>
|
||||
|
||||
function showConfirmMessage() {
|
||||
if ('<qtssobject name=confirmMessage/>' != '') {
|
||||
if (parent.frames['top'].showConfirmMessage) {
|
||||
parent.frames['top'].showConfirmMessage('<qtssobject name=confirmMessage/>');
|
||||
}
|
||||
else if (parent.parent.frames[0].showConfirmMessage) {
|
||||
parent.parent.frames[0].showConfirmMessage('<qtssobject name=confirmMessage/>');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function validateFormData() {
|
||||
if (document.forms[0].elements['qtssIsStreamingOn80'].checked) {
|
||||
return confirm("<qtssstring name=PortChangeRestartServerConfirm>");
|
||||
}
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="showConfirmMessage()">
|
||||
<qtssobject type=validatedform param=_self>
|
||||
<input type=hidden name="filename" value=ports.html> <input type=hidden name="action" value="SavePortSettings">
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=620>
|
||||
<tr>
|
||||
<td align=left valign=top nowrap width=20>
|
||||
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
|
||||
</td>
|
||||
<td valign=top align=center>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td align=left nowrap class=header>
|
||||
<qtssstring name="PortSetHeader"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left nowrap>
|
||||
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table border=0 cellspacing=4 cellpadding=0 width="90%">
|
||||
<tr>
|
||||
<td valign=top nowrap align=right>
|
||||
<b><qtssstring name="PortSetStreaming80Title"/></b>
|
||||
</td>
|
||||
<td align=left valign=top nowrap>
|
||||
<qtssobject name="qtssIsStreamingOn80" format=checkbox param=true/> <qtssstring name="Enabled"/>
|
||||
</td>
|
||||
<td align=left>
|
||||
<img src="images/spacer.gif" width=30 height=30 align=middle alt="">
|
||||
</td>
|
||||
<td align=left valign=top class=small>
|
||||
<p>
|
||||
<qtssstring name="PortSetDesc1"/>
|
||||
</p>
|
||||
<p>
|
||||
<qtssstring name="PortSetDesc2"/>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan=3></td>
|
||||
<td><b><qtssobject name="getNotBoundPort80Msg"/></b></td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td align=left valign=top colspan=2>
|
||||
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left valign=top>
|
||||
<br>
|
||||
<!--[[a href="#" onclick="showHelp()"]][[img src="images/help.gif" width=20 height=20 border=0]][[/a]]-->
|
||||
</td>
|
||||
<td align=right valign=top>
|
||||
<br>
|
||||
<input type=submit name="Submit" value="<qtssstring name=SubmitButtonTitle/>">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</qtssobject>
|
||||
</body>
|
||||
</html>
|
656
WebAdmin/WebAdminHtml/relay.html
Normal file
|
@ -0,0 +1,656 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<meta name="generator" content="BBEdit 6.1.1">
|
||||
<meta http-equiv="imagetoolbar" content="no">
|
||||
<style type="text/css">
|
||||
td
|
||||
{
|
||||
font-family: Arial, Helvetica, Geneva, Swiss, sans-serif;
|
||||
font-size: 12px;
|
||||
}
|
||||
.normal
|
||||
{
|
||||
font-family: Arial, Helvetica, Geneva, Swiss, sans-serif;
|
||||
font-size: 12px;
|
||||
}
|
||||
.large
|
||||
{
|
||||
font-weight: bold;
|
||||
font-size: 14px;
|
||||
}
|
||||
.small { font-size: 10px; }
|
||||
.reallysmall
|
||||
{
|
||||
font-size: 10px;
|
||||
color: #333;
|
||||
}
|
||||
.header
|
||||
{
|
||||
font-size: 18px;
|
||||
color: #669;
|
||||
}
|
||||
.white { color: #FFF; }
|
||||
#RelayDefaultRelayHeader
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 56px;
|
||||
left: 50px;
|
||||
}
|
||||
#RelayDefaultStatus
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 76px;
|
||||
left: 60px;
|
||||
}
|
||||
#editDefaultButton
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 66px;
|
||||
left: 320px;
|
||||
}
|
||||
#divider
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 107px;
|
||||
left: 50px;
|
||||
}
|
||||
#RelaySources
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 126px;
|
||||
left: 50px;
|
||||
}
|
||||
#newButton
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 147px;
|
||||
left: 320px;
|
||||
width: 380px;
|
||||
height: 284px;
|
||||
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
|
||||
visibility: visible;
|
||||
}
|
||||
#deleteButtonDisabled
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 4;
|
||||
top: 215px;
|
||||
left: 320px;
|
||||
width: 380px;
|
||||
height: 284px;
|
||||
color: #999;
|
||||
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
|
||||
visibility: visible;
|
||||
}
|
||||
#deleteButton
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 4;
|
||||
top: 215px;
|
||||
left: 320px;
|
||||
width: 380px;
|
||||
height: 284px;
|
||||
color: #999;
|
||||
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
|
||||
visibility: hidden;
|
||||
}
|
||||
#editButtonDisabled
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 181px;
|
||||
left: 320px;
|
||||
width: 380px;
|
||||
height: 284px;
|
||||
color: #999;
|
||||
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
|
||||
visibility: visible;
|
||||
}
|
||||
#editButton
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 181px;
|
||||
left: 320px;
|
||||
width: 380px;
|
||||
height: 284px;
|
||||
color: #999;
|
||||
font-family: Lucida Grande, Arial, Helvetica, Geneva, Swiss, sans-serif;
|
||||
visibility: hidden;
|
||||
}
|
||||
#libbackground
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 147px;
|
||||
left: 49px;
|
||||
visibility: visible;
|
||||
}
|
||||
#libfiles
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 162px;
|
||||
left: 50px;
|
||||
width: 188px;
|
||||
line-height: 18px;
|
||||
<qtssobject name=monospaceIfNotJapanese/>visibility: visible;
|
||||
}
|
||||
#libfilestatuses
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 162px;
|
||||
left: 238px;
|
||||
width: 54px;
|
||||
line-height: 18px;
|
||||
<qtssobject name=monospaceIfNotJapanese/>visibility: visible;
|
||||
}
|
||||
#libscrollbar
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 161px;
|
||||
left: 294px;
|
||||
width: 16px;
|
||||
visibility: hidden;
|
||||
}
|
||||
#libscrollbardisabled
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 161px;
|
||||
left: 294px;
|
||||
width: 16px;
|
||||
visibility: visible;
|
||||
}
|
||||
#libscrollthumb
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 4;
|
||||
top: 176px;
|
||||
left: 294px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
visibility: hidden;
|
||||
}
|
||||
#libhighlight
|
||||
{
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
top: 164px;
|
||||
left: 50px;
|
||||
width: 243px;
|
||||
height: 20px;
|
||||
visibility: hidden;
|
||||
}
|
||||
</style>
|
||||
<script src="includes/standardNav.js" type="text/javascript" language="javascript"></script>
|
||||
<script src="includes/encode_unicode.js" type="text/javascript" language="Javascript" charset="utf-8"></script>
|
||||
<qtssobject name=scriptTag>
|
||||
//<script language=javascript>
|
||||
|
||||
var gLibBasePosX = 50;
|
||||
var gLibBasePosY = 162;
|
||||
var gLibItemWidth = 244;
|
||||
var gLibItemHeight = 20;
|
||||
var gLibNumItems = 14;
|
||||
var gLibMaxChars = 29;
|
||||
var gDragThreshold = 6;
|
||||
var gNumberOfSteps = 4;
|
||||
var gStepTiming = 35;
|
||||
var gTextSpacerImg = '<img src="images/spacer.gif" width=3 height=20 align=middle>';
|
||||
var gThumbRangeTop = 176;
|
||||
var gThumbRangeBottom = 412;
|
||||
var gThumbHeight = 16;
|
||||
var gScrollArrowWidth = 16;
|
||||
var gScrollArrowHeight = 16;
|
||||
var gDirScrollbarLeft = 294;
|
||||
var gScrollUpArrowTop = 161;
|
||||
var gScrollDownArrowTop = 427;
|
||||
var gScrollBy = 6;
|
||||
var dblClickDelay = 300;
|
||||
|
||||
|
||||
var libHighlightStart = (-1);
|
||||
var libHighlightEnd = (-1);
|
||||
var libScrollPos = 0;
|
||||
var dragStatus = 'false';
|
||||
var directoryListing = new Array();
|
||||
var statusArray = new Array();
|
||||
var doContiguousSelection = false;
|
||||
var insertPos = (-1);
|
||||
var removeOldItem = (-1);
|
||||
var showedAlert = false;
|
||||
|
||||
var isDblClick = false;
|
||||
var dblClickTimer;
|
||||
|
||||
function BuildLibrary() {
|
||||
var filesLayerText = '<span class=small>';
|
||||
var statusesLayerText = '<span class=small>';
|
||||
for (var i=libScrollPos; i < Math.min((libScrollPos+gLibNumItems), directoryListing.length); i++) {
|
||||
var itemText = directoryListing[i];
|
||||
itemText = itemText.replace('<', '<');
|
||||
itemText = itemText.replace('>', '>');
|
||||
filesLayerText = filesLayerText + '<div style="width:188px; height:20px;">';
|
||||
filesLayerText = filesLayerText + gTextSpacerImg + itemText + '<' + '/div>';
|
||||
statusesLayerText = statusesLayerText + '<div style="width:54px; height:20px;">';
|
||||
statusesLayerText = statusesLayerText + gTextSpacerImg + statusArray[i] + '<' + '/div>';
|
||||
}
|
||||
filesLayerText = filesLayerText;
|
||||
SetStyleText('libfiles', filesLayerText + '<' + '/span>');
|
||||
SetStyleText('libfilestatuses', statusesLayerText + '<' + '/span>');
|
||||
SetLibHighlightBar();
|
||||
if (directoryListing.length > gLibNumItems) {
|
||||
SetStyleVisible('libscrollbardisabled', false);
|
||||
SetStyleVisible('libscrollbar', true);
|
||||
SetStyleVisible('libscrollthumb', true);
|
||||
}
|
||||
else {
|
||||
SetStyleVisible('libscrollbardisabled', true);
|
||||
SetStyleVisible('libscrollbar', false);
|
||||
SetStyleVisible('libscrollthumb', false);
|
||||
}
|
||||
}
|
||||
|
||||
function clickedEditButton() {
|
||||
document.forms[0].elements['action'].value='getValsForRelay';
|
||||
document.forms[0].elements['currentRelay'].value=directoryListing[libHighlightStart];
|
||||
document.forms[0].submit();
|
||||
}
|
||||
|
||||
function clickedNewButton() {
|
||||
document.forms[0].elements['action'].value='getNewRelay';
|
||||
document.forms[0].elements['currentRelay'].value='';
|
||||
document.forms[0].elements['filename'].value='relay_details.html';
|
||||
document.forms[0].submit();
|
||||
}
|
||||
|
||||
function clickedDeleteButton() {
|
||||
if (entityConfirm("<qtssstring name=RelayDeleteConfirm>")) {
|
||||
document.forms[0].elements['action'].value='DeleteRelay';
|
||||
document.forms[0].elements['currentRelay'].value=directoryListing[libHighlightStart];
|
||||
document.forms[0].elements['filename'].value='relay.html';
|
||||
document.forms[0].submit();
|
||||
}
|
||||
}
|
||||
|
||||
function handleLibDblClick() {
|
||||
ClearDblClickTimer();
|
||||
clickedEditButton();
|
||||
}
|
||||
|
||||
function SetDblClickTimer() {
|
||||
isDblClick = true;
|
||||
currentTooltipTimer = setTimeout("ClearDblClickTimer()", dblClickDelay);
|
||||
}
|
||||
|
||||
function ClearDblClickTimer() {
|
||||
isDblClick = false;
|
||||
dblClickTimer = null;
|
||||
}
|
||||
|
||||
function SetButtonsEnabled(isEnabled) {
|
||||
SetStyleVisible('deleteButtonDisabled', !isEnabled);
|
||||
SetStyleVisible('deleteButton', isEnabled);
|
||||
SetStyleVisible('editButtonDisabled', !isEnabled);
|
||||
SetStyleVisible('editButton', isEnabled);
|
||||
}
|
||||
|
||||
function clickedEditDefaultButton() {
|
||||
document.forms[0].elements['action'].value='getValsForRelay';
|
||||
document.forms[0].elements['currentRelay'].value='***qtssDefaultRelay***';
|
||||
document.forms[0].elements['filename'].value = 'relay_details_default.html';
|
||||
document.forms[0].submit();
|
||||
}
|
||||
|
||||
function libScrollDown() {
|
||||
var dataHeight = directoryListing.length - gLibNumItems;
|
||||
if (libScrollPos < dataHeight) {
|
||||
libScrollPos = Math.min(libScrollPos+gScrollBy, dataHeight);
|
||||
BuildLibrary();
|
||||
libSetThumbPos();
|
||||
}
|
||||
}
|
||||
|
||||
function libScrollUp() {
|
||||
if (libScrollPos > 0) {
|
||||
libScrollPos = Math.max(libScrollPos-gScrollBy, 0);
|
||||
BuildLibrary();
|
||||
libSetThumbPos();
|
||||
}
|
||||
}
|
||||
|
||||
function libSetThumbPos() {
|
||||
var scrollbarHeight = gThumbRangeBottom - gThumbRangeTop;
|
||||
var dataHeight = directoryListing.length - gLibNumItems;
|
||||
if (dataHeight > 1) {
|
||||
var scrollRatio = libScrollPos / dataHeight;
|
||||
SetStylePos('libscrollthumb', 1, (gThumbRangeTop + (scrollRatio * scrollbarHeight)));
|
||||
}
|
||||
}
|
||||
|
||||
function libGetThumbPos() {
|
||||
var scrollbarHeight = gThumbRangeBottom - gThumbRangeTop;
|
||||
var dataHeight = directoryListing.length - gLibNumItems;
|
||||
if (dataHeight > 1) {
|
||||
var scrollRatio = (GetStylePos('libscrollthumb', 1) - gThumbRangeTop) / scrollbarHeight;
|
||||
libScrollPos = Math.round(scrollRatio * (directoryListing.length - gLibNumItems));
|
||||
BuildLibrary();
|
||||
libSetThumbPos();
|
||||
}
|
||||
}
|
||||
|
||||
function SetLibHighlightBar() {
|
||||
if (libHighlightEnd < libScrollPos) {
|
||||
SetStyleVisible('libhighlight', false);
|
||||
}
|
||||
else {
|
||||
var displayHighlightStart = Math.max(libHighlightStart - libScrollPos, 0);
|
||||
var displayHighlightEnd = Math.min(libHighlightEnd - libScrollPos, libScrollPos + gLibNumItems - 1);
|
||||
var highlightHeight = (displayHighlightEnd - displayHighlightStart + 1) * gLibItemHeight;
|
||||
var startPos = (displayHighlightStart * gLibItemHeight) + gLibBasePosY;
|
||||
SetStyleText('libhighlight', '<img src="images/highlight.gif" width=' + gLibItemWidth + ' height=' + highlightHeight + '>');
|
||||
SetStylePos('libhighlight', 1, startPos);
|
||||
SetStyleVisible('libhighlight', true);
|
||||
}
|
||||
}
|
||||
|
||||
function handleMouseDown(e) {
|
||||
var continueClick = true;
|
||||
if (IsIE()) var theTarget = window.event.srcElement;
|
||||
else var theTarget = e.target;
|
||||
if (IsIE()) var theButton = event.button;
|
||||
else var theButton = e.which;
|
||||
if (IsIE()) doContiguousSelection = window.event.shiftKey;
|
||||
else doContiguousSelection = (e.modifiers == 4);
|
||||
if (IsIE()) {
|
||||
oldX = event.clientX + GetIEScrollPos(0);
|
||||
oldY = event.clientY + GetIEScrollPos(1);
|
||||
}
|
||||
else {
|
||||
oldX = e.pageX
|
||||
oldY = e.pageY
|
||||
}
|
||||
|
||||
removeOldItem = (-1);
|
||||
|
||||
if ((oldX >= gDirScrollbarLeft) && (oldX <= (gDirScrollbarLeft + gScrollArrowWidth)) && (oldY >= gScrollDownArrowTop) && (oldY <= (gScrollDownArrowTop + gScrollArrowHeight))) { // dir up scroll
|
||||
libScrollDown();
|
||||
continueClick = false;
|
||||
}
|
||||
|
||||
if ((oldX >= gDirScrollbarLeft) && (oldX <= (gDirScrollbarLeft + gScrollArrowWidth)) && (oldY >= gScrollUpArrowTop) && (oldY <= (gScrollUpArrowTop + gScrollArrowHeight))) { // dir up scroll
|
||||
libScrollUp();
|
||||
continueClick = false;
|
||||
}
|
||||
|
||||
if ((oldX >= gDirScrollbarLeft) && (oldX <= (gDirScrollbarLeft + gScrollArrowWidth)) && (oldY >= GetStylePos('libscrollthumb', 1)) && (oldY <= (GetStylePos('libscrollthumb', 1) + gThumbHeight))) { // dir scroll thumb
|
||||
layerClicked = 'libscrollthumb';
|
||||
dragStatus = 'scrolling';
|
||||
continueClick = false;
|
||||
}
|
||||
|
||||
if ((oldX >= gLibBasePosX) && (oldX <= gLibBasePosX+gLibItemWidth) && (oldY >= gLibBasePosY) && (oldY <= gLibBasePosY+(gLibNumItems*gLibItemHeight))) {
|
||||
var itemClicked = (oldY - gLibBasePosY) / gLibItemHeight;
|
||||
itemClicked = Math.floor(itemClicked);
|
||||
itemClicked = itemClicked + libScrollPos;
|
||||
if (itemClicked > (directoryListing.length - 1)) {
|
||||
return false;
|
||||
}
|
||||
offsetX = oldX - gLibBasePosX;
|
||||
offsetY = oldY - (gLibBasePosY + ((itemClicked - libScrollPos) * gLibItemHeight));
|
||||
if ((itemClicked < libHighlightStart) || (itemClicked > libHighlightEnd)) {
|
||||
libHighlightStart = itemClicked;
|
||||
libHighlightEnd = itemClicked;
|
||||
SetLibHighlightBar();
|
||||
}
|
||||
dragStatus = 'click';
|
||||
SetButtonsEnabled(true);
|
||||
continueClick = false;
|
||||
if (isDblClick) { // double-click; handle
|
||||
handleLibDblClick()
|
||||
}
|
||||
else { // first click; set isDblClick to true and set a timer to set it to false after the delay
|
||||
SetDblClickTimer();
|
||||
}
|
||||
}
|
||||
|
||||
if (continueClick) return;
|
||||
else return continueClick;
|
||||
}
|
||||
|
||||
function handleDrag(e) {
|
||||
if (IsIE()) {
|
||||
currentX = event.clientX + GetIEScrollPos(0);
|
||||
currentY = event.clientY + GetIEScrollPos(1);
|
||||
}
|
||||
else {
|
||||
currentX = e.pageX
|
||||
currentY = e.pageY
|
||||
}
|
||||
if (dragStatus == 'scrolling') {
|
||||
SetStylePos(layerClicked, 1, Math.max(Math.min(currentY, gThumbRangeBottom), gThumbRangeTop));
|
||||
}
|
||||
}
|
||||
|
||||
function handleMouseUp() {
|
||||
var continueClick = true;
|
||||
if (!IsIE()) document.releaseEvents(Event.MOUSEMOVE);
|
||||
if (dragStatus == 'scrolling') {
|
||||
dragStatus = 'false';
|
||||
if (layerClicked == 'libscrollthumb') libGetThumbPos();
|
||||
else PLGetThumbPos();
|
||||
continueClick = false;
|
||||
}
|
||||
dragStatus = 'false';
|
||||
if (continueClick) return;
|
||||
else return continueClick;
|
||||
}
|
||||
|
||||
function showConfirmMessage() {
|
||||
if ('<qtssobject name=confirmMessage/>' != '') {
|
||||
if (parent.frames['top'].showConfirmMessage) {
|
||||
parent.frames['top'].showConfirmMessage('<qtssobject name=confirmMessage/>');
|
||||
}
|
||||
else if (parent.parent.frames[0].showConfirmMessage) {
|
||||
parent.parent.frames[0].showConfirmMessage('<qtssobject name=confirmMessage/>');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// re-route events to handlers
|
||||
|
||||
if (!IsIE()) document.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN|Event.MOUSEMOVE);
|
||||
|
||||
document.onmousedown = handleMouseDown;
|
||||
document.onmouseup = handleMouseUp;
|
||||
document.onmousemove = handleDrag
|
||||
|
||||
// populate array from QTSS
|
||||
|
||||
<qtssrepeater name=relaynames>
|
||||
directoryListing[directoryListing.length] = '<qtssobject name=qtssRelayName/>';
|
||||
statusArray[statusArray.length] = '<qtssobject name=qtssRelayStatus/>';
|
||||
</qtssrepeater>
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif" onload="BuildLibrary(); showConfirmMessage()">
|
||||
<qtssobject type=getform>
|
||||
<qtssobject type=hidden name="qtssSvrDefaultDNSName"/>
|
||||
<input type=hidden name="filename" value=relay_details.html> <input type=hidden name="action" value=""> <input type=hidden name="currentRelay" value="">
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=620>
|
||||
<tr>
|
||||
<td valign=top nowrap width=20>
|
||||
<img src="images/spacer.gif" width=20 height=20 align=top alt="">
|
||||
</td>
|
||||
<td valign=top align=center>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td nowrap class=header>
|
||||
<qtssstring name="NavRelaySettings"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="RelayDefaultRelayHeader" class="normal">
|
||||
<b><qtssstring name="RelayDefaultRelayHeader"/></b>
|
||||
</div>
|
||||
<div id="RelayDefaultStatus" class="normal">
|
||||
<qtssstring name="RelayDetailsStatus"/> <qtssobject name="defaultRelayStatus"/>
|
||||
</div>
|
||||
<div id="editDefaultButton">
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td><a href="javascript:clickedEditDefaultButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
|
||||
<td><a href="javascript:clickedEditDefaultButton()"><qtssstring name="RelayEditDefaultSourceButton" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="divider">
|
||||
<img src="images/divider.gif" width="500" height="1" alt="">
|
||||
</div>
|
||||
<div id="RelaySources" class="normal">
|
||||
<b><qtssstring name="RelaySources"/></b>
|
||||
</div>
|
||||
<div id="libbackground">
|
||||
<table border=0 cellspacing=0 cellpadding=0>
|
||||
<tr>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
<td width=188 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=188 height=1 alt=""></td>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
<td width=70 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=70 height=1 alt=""></td>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width=1 height=13><img src="images/greypixel.gif" width=1 height=13 alt=""></td>
|
||||
<td width=188 height=13 nowrap bgcolor="#c6c6d6" class=reallysmall><img src="images/headerpixel.gif" width=2 height=1 alt=""><qtssstring name="RelayNameHeader" /></td>
|
||||
<td width=1 height=13><img src="images/greypixel.gif" width=1 height=13 alt=""></td>
|
||||
<td width=70 height=1 nowrap bgcolor="#c6c6d6" class=reallysmall><img src="images/headerpixel.gif" width=2 height=1 alt=""><qtssstring name="RelayStatusHeader" /></td>
|
||||
<td width=1 height=13><img src="images/greypixel.gif" width=1 height=13 alt=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
<td width=188 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=188 height=1 alt=""></td>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
<td width=70 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=70 height=1 alt=""></td>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width=1 height=280 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=1 height=280 alt=""></td>
|
||||
<td width=188 height=280 bgcolor="#FFFFFF"><img src="images/whitepixel.gif" width=188 height=280 alt=""></td>
|
||||
<td width=1 height=280 bgcolor="#8c93ad"><img src="images/whitepixel.gif" width=1 height=280 alt=""></td>
|
||||
<td width=70 height=280 bgcolor="#FFFFFF"><img src="images/whitepixel.gif" width=70 height=280 alt=""></td>
|
||||
<td width=1 height=280 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=1 height=280 alt=""></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
<td width=188 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=188 height=1 alt=""></td>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
<td width=70 height=1 bgcolor="#8c93ad"><img src="images/greypixel.gif" width=70 height=1 alt=""></td>
|
||||
<td width=1 height=1><img src="images/greypixel.gif" width=1 height=1 alt=""></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="libfiles">
|
||||
<!--placeholder ~~ will be populated dynamically-->
|
||||
</div>
|
||||
<div id="libfilestatuses">
|
||||
<!--placeholder ~~ will be populated dynamically-->
|
||||
</div>
|
||||
<div id="libcontrols">
|
||||
<!--placeholder ~~ will be populated dynamically-->
|
||||
</div>
|
||||
<div id="libhighlight">
|
||||
<img src="images/highlight.gif" width=218 height=20>
|
||||
</div>
|
||||
<div id="libscrollbar">
|
||||
<table border=0 cellspacing=0 cellpadding=0>
|
||||
<tr>
|
||||
<td><img src="images/scroll_arrow_up.gif" width=16 height=16></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td background="images/scroll_bg.gif" height=250><img src="images/scroll_bg.gif" width=16 height=250></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="images/scroll_arrow_down.gif" width=16 height=16></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="libscrollbardisabled">
|
||||
<table border=0 cellspacing=0 cellpadding=0>
|
||||
<tr>
|
||||
<td background="images/scroll_bg_inactive.gif" width=16 height=1><img src="images/greypixel.gif" width="16" height="1"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td background="images/scroll_bg_inactive.gif" height=280><img src="images/scroll_bg_inactive.gif" width="16" height="280"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td background="images/scroll_bg_inactive.gif" width=16 height=1><img src="images/greypixel.gif" width="16" height="1"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="libscrollthumb">
|
||||
<img src="images/scroll_thumb.gif" width=16 height=16>
|
||||
</div>
|
||||
<div id="newButton">
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td><a href="javascript:clickedNewButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
|
||||
<td><a href="javascript:clickedNewButton()"><qtssstring name="RelayNewSourceButton" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="deleteButton">
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td><a href="javascript:clickedDeleteButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
|
||||
<td><a href="javascript:clickedDeleteButton()"><qtssstring name="RelayDeleteSourceButton" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="deleteButtonDisabled">
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td><img src="images/link_disabled.gif" width=28 height=24></td>
|
||||
<td><qtssstring name="RelayDeleteSourceButton" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="editButton">
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td><a href="javascript:clickedEditButton()"><img src="images/link.gif" width=28 height=24 border=0></a></td>
|
||||
<td><a href="javascript:clickedEditButton()"><qtssstring name="RelayEditSourceButton" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="editButtonDisabled">
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td><img src="images/link_disabled.gif" width=28 height=24></td>
|
||||
<td><qtssstring name="RelayEditSourceButton" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</qtssobject>
|
||||
</body>
|
||||
</html>
|
459
WebAdmin/WebAdminHtml/relay_details.html
Normal file
|
@ -0,0 +1,459 @@
|
|||
<html>
|
||||
<head>
|
||||
<style type="text/css">
|
||||
td { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
|
||||
div { font-family: Arial, Helvetica, Geneva, Swiss, sans-serif; font-size: 12px }
|
||||
.large { font-weight: bold; font-size: 14px }
|
||||
.small { font-size: 10px }
|
||||
.header { font-size: 18px; color:#666699 }
|
||||
.white { color: #FFFFFF }
|
||||
input { font-size: 12px }
|
||||
</style>
|
||||
<script src="includes/encode_unicode.js" type="text/javascript" language="Javascript" charset="utf-8"></script>
|
||||
<qtssobject name=scriptTag>
|
||||
//<script language=javascript>
|
||||
|
||||
var allRelays = new Array();
|
||||
|
||||
function clickedDeleteRelayDest(relayToDelete) {
|
||||
document.forms[0].elements['action'].value = 'DeleteRelayDest';
|
||||
document.forms[0].elements['currentDest'].value = relayToDelete;
|
||||
document.forms[0].elements['filename'].value = 'relay_details.html';
|
||||
document.forms[0].submit();
|
||||
}
|
||||
|
||||
function clickedSaveButton() {
|
||||
document.forms[0].elements['action'].value = 'SaveRelay';
|
||||
document.forms[0].elements['filename'].value = 'relay.html';
|
||||
}
|
||||
|
||||
function clickedAddDestButton() {
|
||||
document.forms[0].elements['action'].value = 'AddRelayDestination';
|
||||
document.forms[0].elements['filename'].value = 'relay_details.html';
|
||||
document.forms[0].submit();
|
||||
}
|
||||
|
||||
function fixMountPoints() {
|
||||
for (var i=0; i < document.forms[0].elements['relayDestCount'].value; i++) {
|
||||
if ((document.forms[0].elements['relayDestMountPoint'+i].value.indexOf('.sdp') < 0) && (document.forms[0].elements['relayDestMountPoint'+i].value != '')) {
|
||||
document.forms[0].elements['relayDestMountPoint'+i].value = document.forms[0].elements['relayDestMountPoint'+i].value + '.sdp';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function validateFormData() {
|
||||
var relayNameOK = true;
|
||||
if (document.forms[0].elements['currentRelay'].value != document.forms[0].elements['currentRelay_shadow'].value) {
|
||||
for (var i = 0; i < allRelays.length; i++) {
|
||||
if (allRelays[i] == document.forms[0].elements['currentRelay'].value) relayNameOK = false;
|
||||
}
|
||||
}
|
||||
if (!relayNameOK) {
|
||||
entityAlert("<qtssstring name=RelayErrNameConflict/>");
|
||||
document.forms[0].elements['currentRelay'].value = document.forms[0].elements['currentRelay_shadow'].value;
|
||||
return false;
|
||||
}
|
||||
if (document.forms[0].elements['currentRelay'].value == '') {
|
||||
entityAlert("<qtssstring name=RelayErrNoName/>");
|
||||
document.forms[0].elements['currentRelay'].value = document.forms[0].elements['currentRelay_shadow'].value;
|
||||
return false;
|
||||
}
|
||||
if (document.forms[0].elements['relaySourceHostname'].value == '') {
|
||||
entityAlert("<qtssstring name=RelayErrNoSourceIP/>");
|
||||
document.forms[0].elements['relaySourceHostname'].value = document.forms[0].elements['relaySourceHostname_shadow'].value;
|
||||
return false;
|
||||
}
|
||||
for (var i = 0; i < document.forms[0].elements['relayDestCount'].value; i++) {
|
||||
// check to see that TTL is a number (if it's filled in)
|
||||
var fieldValue = document.forms[0].elements['relayDestTTL'+i].value;
|
||||
if ((fieldValue != '') && ((fieldValue < 1) || (fieldValue > 255) || (fieldValue.match('[^0-9]') != null))) {
|
||||
entityAlert("<qtssstring name=RelayErrMulticastTTLIncorrect/>");
|
||||
document.forms[0].elements['relayDestTTL'+i].value = document.forms[0].elements['relayDestTTL'+i+'_shadow'].value
|
||||
return false;
|
||||
}
|
||||
// check the destinations for empty fields based on dest type
|
||||
var currentRelayDestTypeRadios = document.forms[0].elements['relayDestType'+i];
|
||||
if (currentRelayDestTypeRadios[0].checked) { // announced
|
||||
if (document.forms[0].elements['relayDestMountPoint'+i].value == '') {
|
||||
entityAlert("<qtssstring name=RelayErrNoDestMountpoint />");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (currentRelayDestTypeRadios[1].checked) { // unannounced
|
||||
if (document.forms[0].elements['relayDestPort'+i].value == '') {
|
||||
entityAlert("<qtssstring name=RelayErrNoDestBasePort />");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else { // no type selected
|
||||
entityAlert("<qtssstring name=RelayErrNoDestType />");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
<qtssrepeater name=relaynames>
|
||||
allRelays[allRelays.length] = '<qtssobject name=qtssRelayName/>';
|
||||
</qtssrepeater>
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body bgcolor="#FFFFFF" background="images/stripes_gray.gif">
|
||||
<qtssobject type=validatedform>
|
||||
<qtssobject type=hidden name="relayDestCount"/>
|
||||
<qtssobject type=hidden name="qtssSvrDefaultDNSName"/>
|
||||
<qtssobject type=hidden name="relayIsNew"/>
|
||||
<input type=hidden name=action value="">
|
||||
<input type=hidden name=filename value="relay.html">
|
||||
<input type=hidden name="currentDest" value="">
|
||||
<table border=0 cellspacing=0 cellpadding=0 width=620>
|
||||
<tr>
|
||||
<td align=left valign=top nowrap width=20>
|
||||
<img src="images/spacer.gif" width=20 height=20 align=top>
|
||||
</td>
|
||||
<td valign=top align=center>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td align=left nowrap class=header>
|
||||
<qtssstring name="RelayDetailsHeader"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<img src="images/divider.gif" width=600 height=1 align=middle>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=0 width="90%">
|
||||
<tr>
|
||||
<td valign=top nowrap align=center>
|
||||
<table border=0 cellspacing=4 cellpadding=0>
|
||||
<tr>
|
||||
<td align=right>
|
||||
<b><qtssstring name="RelayDetailsRelayName"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject name="currentRelay" type="text" param=" size=60">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=right>
|
||||
<b><qtssstring name="RelayDetailsStatus"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject name="relayEnabled" format=checkbox param="1"> <qtssstring name="Enabled"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left valign=top>
|
||||
<p class=large>
|
||||
<img src="images/divider.gif" width="100%" height=1 align=middle>
|
||||
<br>
|
||||
<b><qtssstring name="RelayDetailsSourceSettingsHeader"/></b>
|
||||
<br>
|
||||
</p>
|
||||
<table border=0 cellspacing=4 cellpadding=0 align=center>
|
||||
<tr>
|
||||
<td colspan=2 align=right>
|
||||
<b><qtssstring name="RelayDetailsSourceHostname"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p>
|
||||
<qtssobject name="relaySourceHostname" type=text param=" size=32"/>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan=2 align=right>
|
||||
<b><qtssstring name="MountPoint"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject name="relaySourceMountPoint" type=text param=" size=32"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p>
|
||||
<br>
|
||||
</p>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=right>
|
||||
<qtssobject name="relayType" format="radio" param="rtsp_source" />
|
||||
</td>
|
||||
<td align=left colspan=2>
|
||||
<b><qtssstring name="RelayDetailsSourceRequestStream"/></b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=right>
|
||||
<b><qtssstring name="Username"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject name="relaySourceUsername" type=text param=" size=32"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=right>
|
||||
<b><qtssstring name="Password"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject name="relaySourcePassword" type=password param=" size=32"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p>
|
||||
<br>
|
||||
</p>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=right>
|
||||
<qtssobject name="relayType" format="radio" param="announced_source" />
|
||||
</td>
|
||||
<td align=left colspan=2>
|
||||
<b><qtssstring name="RelayDetailsSourceWait"/></b>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<br>
|
||||
</td>
|
||||
</tr>
|
||||
<qtssrepeater name="relaydests">
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p class=large>
|
||||
<img src="images/divider.gif" width="100%" height=1 align=middle>
|
||||
<br>
|
||||
<b><qtssstring name="RelayDetailsDestinationHeader"/> (<qtssobject name=iteration/> <qtssstring name="of"/> <qtssobject name="relayDestCount"/>)</b>
|
||||
<br>
|
||||
</p>
|
||||
<table border=0 cellspacing=4 cellpadding=0 align=center>
|
||||
<tr>
|
||||
<td colspan=2 align=right>
|
||||
<b><qtssstring name="RelayDetailsDestHostname"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject name="relayDestHostname" type=text param=" size=32"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p>
|
||||
<br>
|
||||
</p>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=right>
|
||||
<qtssobject name="relayDestType" format=radio param="announced_destination"/>
|
||||
</td>
|
||||
<td align=left colspan=2>
|
||||
<b><qtssstring name="RelayDetailsDestAnnounced"/></b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=right>
|
||||
<b><qtssstring name="MountPoint"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject name="relayDestMountPoint" type=text param=" size=32 onchange=fixMountPoints()"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=right>
|
||||
<b><qtssstring name="Username"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject name="relayDestUsername" type=text param=" size=32"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=right>
|
||||
<b><qtssstring name="Password"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject name="relayDestPassword" type=password param=" size=32"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p>
|
||||
<br>
|
||||
</p>
|
||||
</td>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=right>
|
||||
<qtssobject name="relayDestType" format=radio param="udp_destination"/>
|
||||
</td>
|
||||
<td align=left colspan=2>
|
||||
<b><qtssstring name="RelayDetailsDestUDP"/></b>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=right>
|
||||
<b><qtssstring name="RelayDetailsDestBasePort"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject name="relayDestPort" type=text param=" size=6"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
</p>
|
||||
</td>
|
||||
<td align=right>
|
||||
<b><qtssstring name="RelayDetailsDestMulticastTTL"/></b>
|
||||
</td>
|
||||
<td align=left>
|
||||
<qtssobject name="relayDestTTL" type=text param=" size=3"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<a href="#" onclick="clickedDeleteRelayDest(<qtssobject name=iteration/>)">
|
||||
<img src="images/link.gif" width=28 height=24 border=0>
|
||||
</a>
|
||||
</td>
|
||||
<td align=left>
|
||||
<a href="#" onclick="clickedDeleteRelayDest(<qtssobject name=iteration/>)">
|
||||
<qtssstring name="RelayDetailsDeleteDestination" />
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</qtssrepeater>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<p>
|
||||
<img src="images/divider.gif" width="100%" height=1 align=middle>
|
||||
<br>
|
||||
<br>
|
||||
<table border=0 cellpadding=0 cellspacing=0>
|
||||
<tr>
|
||||
<td align=left>
|
||||
<a href="#" onclick="clickedAddDestButton()">
|
||||
<img src="images/link.gif" width=28 height=24 border=0>
|
||||
</a>
|
||||
</td>
|
||||
<td align=left>
|
||||
<a href="#" onclick="clickedAddDestButton()">
|
||||
<qtssstring name="RelayDetailsAddDestination" />
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<br>
|
||||
<table border=0 cellspacing=0 cellpadding=2 width="100%">
|
||||
<tr>
|
||||
<td align=left valign=top colspan=2>
|
||||
<img src="images/divider.gif" width=600 height=1 align=middle alt="">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align=left valign=top>
|
||||
<br>
|
||||
<!--[[a href="#" onclick="showHelp()"]][[img src="images/help.gif" width=20 height=20 border=0]][[/a]]-->
|
||||
</td>
|
||||
<td align=right valign=top>
|
||||
<br>
|
||||
<input type=submit name=Submit value="<qtssstring name=SubmitButtonTitle/>" onclick="clickedSaveButton()">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</qtssobject>
|
||||
</body>
|
||||
</html>
|