See ChangeLog

Monotone-Parent: 25a398b968eb4c84157efcd698facc74c5738e07
Monotone-Revision: a9d5ad1c7b8fa6de9db2b7b205864f5cd9d96b3b

Monotone-Author: ludovic@Sophos.ca
Monotone-Date: 2009-10-09T21:54:07
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Ludovic Marcotte
2009-10-09 21:54:07 +00:00
parent 2eb62a573e
commit b81ed3b2fe
20 changed files with 4 additions and 873 deletions

View File

@@ -5,6 +5,8 @@
SOGoForwardEnabled defaults. One Sieve right now is
support and we assume the Sieve server is the same
as the IMAP server, running on port 2000.
* Cleaned up everything related to the old Sieve stuff
which was now useless with our new implementation.
2009-10-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>

View File

@@ -7,7 +7,6 @@ SUBPROJECTS = \
SOGo \
Appointments \
Contacts \
Mailer \
# Sieve \
Mailer
include $(GNUSTEP_MAKEFILES)/aggregate.make

View File

@@ -1,21 +0,0 @@
# GNUstep makefile
include ../common.make
BUNDLE_NAME = Sieve
Sieve_PRINCIPAL_CLASS = SOGoSieveProduct
Sieve_OBJC_FILES += \
Product.m \
SOGoSieveBaseObject.m \
SOGoSieveScriptsFolder.m\
SOGoSieveScriptObject.m \
Sieve_RESOURCE_FILES += \
Version \
product.plist \
-include GNUmakefile.preamble
include $(GNUSTEP_MAKEFILES)/bundle.make
-include GNUmakefile.postamble

View File

@@ -1,3 +0,0 @@
# compilation settings
ADDITIONAL_INCLUDE_DIRS += -I../Mailer

View File

@@ -1,32 +0,0 @@
/*
Copyright (C) 2004 SKYRIX Software AG
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
OGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#import <Foundation/NSObject.h>
@interface SOGoSieveProduct : NSObject
{
}
@end
@implementation SOGoSieveProduct
@end /* SOGoSieveProduct */

View File

@@ -1,8 +0,0 @@
# README for Sieve SoObjects
Class Overview
==============
Defaults
========

View File

@@ -1,60 +0,0 @@
/*
Copyright (C) 2004-2005 SKYRIX Software AG
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
OGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#ifndef __Sieve_SOGoSieveBaseObject_H__
#define __Sieve_SOGoSieveBaseObject_H__
#include <SOGo/SOGoObject.h>
/*
SOGoSieveBaseObject
Common base class for Sieve SoObjects.
*/
@class NSString, NSArray, NSURL;
@class NGSieveClient;
@class NGImap4ConnectionManager;
@class SOGoMailAccount;
@interface SOGoSieveBaseObject : SOGoObject
{
NGSieveClient *sieveClient;
}
/* hierarchy */
- (SOGoMailAccount *)mailAccountFolder;
/* IMAP4 */
- (NGImap4ConnectionManager *)mailManager;
- (NSURL *)imap4URL;
- (NSString *)imap4Password;
- (void)flushMailCaches;
/* Sieve */
- (NGSieveClient *)sieveClient;
@end
#endif /* __Sieve_SOGoSieveBaseObject_H__ */

View File

@@ -1,117 +0,0 @@
/*
Copyright (C) 2004-2005 SKYRIX Software AG
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
OGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#include "SOGoSieveBaseObject.h"
#include <Mailer/SOGoMailManager.h>
#include <Mailer/SOGoMailAccount.h>
#include "common.h"
#include <NGImap4/NGSieveClient.h>
#include <NGObjWeb/SoObject+SoDAV.h>
#include <NGObjWeb/SoHTTPAuthenticator.h>
#include <NGExtensions/NSURL+misc.h>
@implementation SOGoSieveBaseObject
- (void)dealloc {
[self->sieveClient release];
[super dealloc];
}
/* hierarchy */
- (SOGoMailAccount *)mailAccountFolder {
if (![[self container] respondsToSelector:_cmd]) {
[self logWithFormat:@"WARNING: weird container of mailfolder: %@",
[self container]];
return nil;
}
return [[self container] mailAccountFolder];
}
/* IMAP4 */
- (NGImap4ConnectionManager *)mailManager {
return [[self mailAccountFolder] mailManager];
}
- (NSURL *)imap4URL {
return [[self mailAccountFolder] imap4URL];
}
- (NSString *)imap4Password {
return [[self mailAccountFolder] imap4Password];
}
- (void)flushMailCaches {
}
/* Sieve */
- (NGSieveClient *)sieveClient {
id res;
if (self->sieveClient != nil)
return self->sieveClient;
/* check container */
res = [self container];
if ([res respondsToSelector:_cmd]) {
if ((res = [res sieveClient]) != nil) {
self->sieveClient = [res retain];
return self->sieveClient;
}
}
/* create client */
self->sieveClient =
[[NGSieveClient alloc] initWithHost:[[self imap4URL] host]];
if (self->sieveClient == nil)
return nil;
/* login */
res = [self->sieveClient
login:[[self imap4URL] user]
password:[self imap4Password]];
if (![[res valueForKey:@"result"] boolValue]) {
[self logWithFormat:
@"ERROR: could not login '%@'(%@) into Sieve server: %@: %@",
[[self imap4URL] user], [self imap4Password],
self->sieveClient, res];
[self->sieveClient release]; self->sieveClient = nil;
return nil;
}
return self->sieveClient;
}
/* debugging */
- (NSString *)loggingPrefix {
/* improve perf ... */
return [NSString stringWithFormat:@"<0x%08X[%@]:%@>",
self, NSStringFromClass([self class]),
[self nameInContainer]];
}
@end /* SOGoSieveBaseObject */

View File

@@ -1,50 +0,0 @@
/*
Copyright (C) 2004-2005 SKYRIX Software AG
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
OGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#ifndef __Sieve_SOGoSieveScriptObject_H__
#define __Sieve_SOGoSieveScriptObject_H__
#include "SOGoSieveBaseObject.h"
/*
SOGoSieveScriptObject
Parent object: SOGoSieveScriptsFolder
Child objects: none
The SOGoSieveScriptObject represents a single sieve script on a Cyrus folder.
*/
@class NSData, NSString, NSException;
@interface SOGoSieveScriptObject : SOGoSieveBaseObject
{
}
/* content */
- (NSString *)contentAsString;
- (NSData *)content;
- (NSException *)writeContent:(id)_content;
@end
#endif /* __Sieve_SOGoSieveScriptObject_H__ */

View File

@@ -1,139 +0,0 @@
/*
Copyright (C) 2004-2005 SKYRIX Software AG
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
OGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#include "SOGoSieveScriptObject.h"
#include "SOGoSieveScriptsFolder.h"
#include "common.h"
#include <NGImap4/NGSieveClient.h>
@implementation SOGoSieveScriptObject
/* script */
- (NSString *)fetchScript {
NGSieveClient *client;
if ((client = [self sieveClient]) == nil)
return nil;
return [client getScript:[self nameInContainer]];
}
/* content */
- (NSString *)contentAsString {
return [self fetchScript];
}
- (NSData *)content {
return [[self contentAsString] dataUsingEncoding:NSUTF8StringEncoding];
}
- (NSException *)exceptionForFailedPutResult:(NSDictionary *)_result {
NSString *reason;
/* Note: valueForKey:@"reason" does not work?! */
reason = [(NSDictionary *)[_result valueForKey:@"RawResponse"]
objectForKey:@"reason"];
if (![reason isNotNull])
reason = @"Failed to upload Sieve script.";
return [NSException exceptionWithHTTPStatus:500 /* Server Error */
reason:reason];
}
- (NSException *)writeContent:(id)_content {
NGSieveClient *client;
NSDictionary *result;
if (_content == nil) {
return [NSException exceptionWithHTTPStatus:400 /* Bad Request */
reason:@"Missing content to write!"];
}
if ((client = [self sieveClient]) == nil) {
return [NSException exceptionWithHTTPStatus:500 /* Server Error */
reason:@"Failed to create NGSieveClient object"];
}
result = [client putScript:[self nameInContainer] script:_content];
if (![[result valueForKey:@"result"] boolValue])
return [self exceptionForFailedPutResult:result];
return nil; /* everything is great */
}
/* operations */
- (NSException *)delete {
NSDictionary *res;
NSString *r;
res = [[self sieveClient] deleteScript:[self nameInContainer]];
if ([[res valueForKey:@"result"] boolValue])
return nil;
// TODO: make it a debug log
[self logWithFormat:@"sieve delete failed: %@", res];
r = [@"Sieve delete failed: " stringByAppendingString:[res description]];
return [NSException exceptionWithHTTPStatus:500 /* Server Error */
reason:r];
}
- (NSException *)activate {
return [[self container] activateScript:[self nameInContainer]];
}
/* name lookup */
- (id)lookupName:(NSString *)_key inContext:(id)_ctx acquire:(BOOL)_flag {
id obj;
/* first check attributes directly bound to the object */
if ((obj = [super lookupName:_key inContext:_ctx acquire:NO]))
return obj;
/* return 404 to stop acquisition */
return [NSException exceptionWithHTTPStatus:404 /* Not Found */];
}
/* operations */
- (id)PUTAction:(id)_context {
NSException *e;
NSString *content;
content = [[(WOContext *)_context request] contentAsString];
if ((e = [self writeContent:content]))
return e;
return self;
}
/* message type */
- (NSString *)outlookMessageClass {
return @"IPM.Filter";
}
@end /* SOGoSieveScriptObject */

View File

@@ -1,50 +0,0 @@
/*
Copyright (C) 2004 SKYRIX Software AG
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
OGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#ifndef __Sieve_SOGoSieveScriptsFolder_H__
#define __Sieve_SOGoSieveScriptsFolder_H__
#include "SOGoSieveBaseObject.h"
/*
SOGoSieveScriptsFolder
Parent object: the SOGoMailAccount
Child objects: SOGoSieveScriptObject
The SOGoSieveScriptsFolder represents a list of sieve scripts on a Cyrus
server.
*/
@class NSString, NSException, NSDictionary;
@interface SOGoSieveScriptsFolder : SOGoSieveBaseObject
{
NSDictionary *listedScripts;
}
/* operations */
- (NSException *)activateScript:(NSString *)_name;
@end
#endif /* __Sieve_SOGoSieveScriptsFolder_H__ */

View File

@@ -1,98 +0,0 @@
/*
Copyright (C) 2004 SKYRIX Software AG
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
OGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#include "SOGoSieveScriptsFolder.h"
#include <NGImap4/NGSieveClient.h>
#include "common.h"
@implementation SOGoSieveScriptsFolder
- (void)dealloc {
[self->listedScripts release];
[super dealloc];
}
/* listing */
- (NSDictionary *)fetchScripts {
if (self->listedScripts != nil)
return self->listedScripts;
self->listedScripts = [[[self sieveClient] listScripts] copy];
return self->listedScripts;
}
/* standard methods */
- (NSArray *)toOneRelationshipKeys {
return [[self fetchScripts] allKeys];
}
/* operations */
- (NSException *)activateScript:(NSString *)_name {
NSDictionary *res;
NSString *r;
res = [[self sieveClient] setActiveScript:_name];
if ([[res valueForKey:@"result"] boolValue])
return nil;
// TODO: make it a debug log
[self logWithFormat:@"sieve activate failed: %@", res];
r = [@"Script activation failed: "
stringByAppendingString:[res description]];
return [NSException exceptionWithHTTPStatus:500 /* Server Error */
reason:r];
}
/* name lookup */
- (NSString *)lookupScript:(NSString *)_key inContext:(id)_ctx {
Class clazz;
clazz = NSClassFromString(@"SOGoSieveScriptObject");
return [[[clazz alloc] initWithName:_key inContainer:self] autorelease];
}
- (id)lookupName:(NSString *)_key inContext:(id)_ctx acquire:(BOOL)_flag {
id obj;
/* first check attributes directly bound to the object */
if ((obj = [super lookupName:_key inContext:_ctx acquire:NO]))
return obj;
/* lookup script */
if ((obj = [self lookupScript:_key inContext:_ctx]))
return obj;
/* return 404 to stop acquisition */
return [NSException exceptionWithHTTPStatus:404 /* Not Found */];
}
/* folder type */
- (NSString *)outlookFolderClass {
return @"IPF.Filter";
}
@end /* SOGoSieveScriptsFolder */

View File

@@ -1,7 +0,0 @@
# Version file
SUBMINOR_VERSION:=11
# v0.9.9 requires libNGMime v4.5.223
# v0.9.6 requires libNGMime v4.5.207
# v0.9.1 requires libNGMime v4.3.194

View File

@@ -1,36 +0,0 @@
/*
Copyright (C) 2002-2005 SKYRIX Software AG
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
OGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#import <Foundation/Foundation.h>
#import <Foundation/NSObjCRuntime.h>
#if NeXT_Foundation_LIBRARY || COCOA_Foundation_LIBRARY
# include <NGExtensions/NGObjectMacros.h>
# include <NGExtensions/NSString+Ext.h>
#endif
#include <NGExtensions/NGExtensions.h>
#include <NGObjWeb/NGObjWeb.h>
#include <NGObjWeb/SoObjects.h>
#include <NGImap4/NGImap4Client.h>
#warning importing common.h is baaad

View File

@@ -1,23 +0,0 @@
{
requires = ( MAIN, Mailer );
publicResources = (
);
factories = {
};
classes = {
SOGoSieveBaseObject = {
superclass = "SOGoObject";
};
SOGoSieveScriptsFolder = {
superclass = "SOGoSieveBaseObject";
};
SOGoSieveScriptObject = {
superclass = "SOGoSieveBaseObject";
};
};
}

View File

@@ -36,8 +36,6 @@ MailerUI_OBJC_FILES += \
# UIxMailReplyAction.m \
# UIxMailForwardAction.m \
# UIxFilterList.m \
# \
# UIxSieveEditor.m
MailerUI_RESOURCE_FILES += \
Version \

View File

@@ -40,7 +40,6 @@ Class Hierarchy
UIxMailToolbar
UIxMailTree
UIxMailView
UIxSieveEditor
UIxMailSortableTableHeader
UIxMailEditorAttach.m
UIxMailFilterPanel

View File

@@ -1,115 +0,0 @@
/*
Copyright (C) 2004 SKYRIX Software AG
This file is part of OpenGroupware.org.
OGo is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
OGo is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public
License along with OGo; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#include <SOGoUI/UIxComponent.h>
/*
UIxSieveEditor
An editor component which works on SOGoSieveScriptObject's.
*/
@class NSArray, NSString;
@interface UIxSieveEditor : UIxComponent
{
NSString *scriptName;
NSString *scriptText;
}
@end
#include <SoObjects/Sieve/SOGoSieveScriptObject.h>
#include "common.h"
@implementation UIxSieveEditor
- (void)dealloc {
[self->scriptText release];
[self->scriptName release];
[super dealloc];
}
/* accessors */
- (void)setScriptName:(NSString *)_value {
ASSIGNCOPY(self->scriptName, _value);
}
- (NSString *)scriptName {
return self->scriptName ? self->scriptName : @"";
}
- (void)setScriptText:(NSString *)_value {
ASSIGNCOPY(self->scriptText, _value);
}
- (NSString *)scriptText {
return [self->scriptText isNotNull] ? self->scriptText : @"";
}
- (NSString *)panelTitle {
return [self labelForKey:@"Edit Mail Filter"];
}
/* requests */
- (BOOL)shouldTakeValuesFromRequest:(WORequest *)_rq inContext:(WOContext*)_c {
return YES;
}
/* actions */
- (id)defaultAction {
return [self redirectToLocation:@"edit"];
}
- (id)editAction {
#if 0
[self logWithFormat:@"edit action, load content from: %@",
[self clientObject]];
#endif
[self setScriptName:[[self clientObject] nameInContainer]];
[self setScriptText:[[self clientObject] contentAsString]];
return self;
}
- (id)saveAction {
NSException *error;
NSString *text;
text = [self scriptText];
if ((error = [[self clientObject] writeContent:text]) != nil)
return error;
return self;
}
- (id)deleteAction {
NSException *error;
if ((error = [[self clientObject] delete]) != nil)
return error;
return nil;
}
@end /* UIxSieveEditor */

View File

@@ -1,5 +1,5 @@
{ /* -*-java-*- */
requires = ( MAIN, MainUI, CommonUI, Mailer, MailPartViewers ); /* , Sieve */
requires = ( MAIN, MainUI, CommonUI, Mailer, MailPartViewers );
publicResources = ("generic.js",
"UIxAppointmentEditor.js",
@@ -446,81 +446,6 @@
};
};
};
/* Sieve */
// SOGoSieveScriptsFolder = {
// slots = {
// toolbar = {
// protectedBy = "View";
// value = (
// (
// {
// link = "getMail";
// image = "tb-mail-getmail-flat-24x24.png";
// cssClass = "tbicon_getmail"; label = "Get Mail";
// },
// {
// link = "#"; // "compose"; // target = "_blank";
// onclick = "clickedNewFilter(this); return false";
// image = "tb-mail-write-flat-24x24.png";
// cssClass = "tbicon_compose"; label = "New Filter";
// },
// ),
// (
// { link = "#";
// cssClass = "tbicon_delete"; label = "Delete"; },
// ),
// );
// };
// };
// methods = {
// view = {
// protectedBy = "View";
// pageName = "UIxFilterList";
// };
// create = {
// protectedBy = "View";
// pageName = "UIxFilterList";
// actionName = "create";
// };
// };
// };
// SOGoSieveScriptObject = {
// slots = {
// toolbar = {
// protectedBy = "View";
// value = (
// ( { link = "#";
// onclick = "clickedEditorSave(this);return false;";
// image = "tb-mail-file-flat-24x24.png";
// cssClass = "tbicon_save"; label = "Save"; },
// { link = "#";
// onclick = "clickedEditorDelete(this);return false;";
// image = "tb-mail-delete-flat-24x24.png";
// cssClass = "tbicon_delete"; label = "Delete"; },
// )
// );
// };
// };
// methods = {
// edit = {
// protectedBy = "View";
// pageName = "UIxSieveEditor";
// actionName = "edit";
// };
// save = {
// protectedBy = "View";
// pageName = "UIxSieveEditor";
// actionName = "save";
// };
// delete = {
// protectedBy = "View";
// pageName = "UIxSieveEditor";
// actionName = "delete";
// };
// }
};
}

View File

@@ -1,33 +0,0 @@
<?xml version='1.0' standalone='yes'?>
<var:component
xmlns="http://www.w3.org/1999/xhtml"
xmlns:var="http://www.skyrix.com/od/binding"
xmlns:const="http://www.skyrix.com/od/constant"
xmlns:uix="OGo:uix"
xmlns:rsrc="OGo:url"
xmlns:label="OGo:label"
className="UIxPageFrame"
title="panelTitle"
const:hideFolderTree="1"
>
<div id="compose_panel">
<div id="compose_subject">
<table border="0" width="100%">
<tr>
<td class="compose_label" width="15%">
<!-- TODO: localize -->
<var:string label:value="Scriptname"/>:
</td>
<td width="85%"><input name="scriptName"
id="compose_subject_input" type="text"
var:value="scriptName" /></td>
</tr>
</table>
</div>
<!-- separator line -->
<div id="compose_text">
<textarea name="scriptContent" var:value="scriptText" />
</div>
</div>
</var:component>