From 89fe26b8a299588d972d598db84de94ee9cd1ea0 Mon Sep 17 00:00:00 2001 From: Ricky Zhou Date: Wed, 8 Aug 2007 23:28:41 -0400 Subject: [PATCH] * Add fedoraGroupDesc (short description field) * Include current LDIF files * Rename editAccount and editGroup to viewAccount and viewGroup * Separate account editing into different form * Setup base for editGroup implentation * Misc template fixes * Temporarily remove any javascript-dependent features for now --- fas/dev.cfg | 5 +- fas/fas/controllers.py | 260 +- fas/fas/fasLDAP.py | 15 +- fas/fas/feeds.py | 2 +- fas/fas/static/css/draggable.css | 28 - fas/fas/static/css/fas.css | 354 - fas/fas/static/css/sortable_tables.css | 66 - fas/fas/static/css/static/images/favicon.ico | Bin 1081 -> 0 bytes .../css/static/images/header-icon_account.png | Bin 1296 -> 0 bytes .../static/css/static/images/header_inner.png | Bin 37537 -> 0 bytes fas/fas/static/css/static/images/hr.png | Bin 193 -> 0 bytes .../css/static/images/icon_tool-item.png | Bin 272 -> 0 bytes .../static/css/static/images/icon_warning.png | Bin 573 -> 0 bytes fas/fas/static/css/static/images/info.png | Bin 2889 -> 0 bytes fas/fas/static/css/static/images/ok.png | Bin 25753 -> 0 bytes .../css/static/images/status_approved.png | Bin 427 -> 0 bytes .../css/static/images/status_incomplete.png | Bin 215 -> 0 bytes .../css/static/images/status_rejected.png | Bin 435 -> 0 bytes .../css/static/images/tg_under_the_hood.png | Bin 4010 -> 0 bytes .../css/static/images/under_the_hood_blue.png | Bin 2667 -> 0 bytes fas/fas/static/css/style.css | 69 +- fas/fas/static/javascript/DragAndDrop.js | 774 --- fas/fas/static/javascript/MochiKit.js | 5773 ----------------- fas/fas/static/javascript/New.js | 366 -- fas/fas/static/javascript/Sortable.js | 531 -- fas/fas/static/javascript/color.js | 57 - fas/fas/static/javascript/draggable.js | 120 - fas/fas/static/javascript/forms.js | 35 - fas/fas/static/javascript/signal.js | 13 - fas/fas/static/javascript/sortable_tables.js | 203 - fas/fas/static/javascript/style.js | 67 - fas/fas/templates/edit.kid | 19 - fas/fas/templates/editAccount.kid | 234 +- fas/fas/templates/editGroup.kid | 86 +- fas/fas/templates/groupList.kid | 79 +- fas/fas/templates/home.kid | 22 +- fas/fas/templates/invite.kid | 19 +- fas/fas/templates/login.kid | 144 +- fas/fas/templates/master.kid | 114 +- fas/fas/templates/resetPassword.kid | 54 +- fas/fas/templates/signUp.kid | 26 +- fas/fas/templates/userList.kid | 49 +- fas/ldap/52fc-fedora-person.ldif | 12 +- fas/ldap/53fc-fedora-group.ldif | 3 +- 44 files changed, 450 insertions(+), 9149 deletions(-) delete mode 100644 fas/fas/static/css/draggable.css delete mode 100644 fas/fas/static/css/fas.css delete mode 100644 fas/fas/static/css/sortable_tables.css delete mode 100644 fas/fas/static/css/static/images/favicon.ico delete mode 100644 fas/fas/static/css/static/images/header-icon_account.png delete mode 100644 fas/fas/static/css/static/images/header_inner.png delete mode 100644 fas/fas/static/css/static/images/hr.png delete mode 100644 fas/fas/static/css/static/images/icon_tool-item.png delete mode 100644 fas/fas/static/css/static/images/icon_warning.png delete mode 100644 fas/fas/static/css/static/images/info.png delete mode 100644 fas/fas/static/css/static/images/ok.png delete mode 100644 fas/fas/static/css/static/images/status_approved.png delete mode 100644 fas/fas/static/css/static/images/status_incomplete.png delete mode 100644 fas/fas/static/css/static/images/status_rejected.png delete mode 100644 fas/fas/static/css/static/images/tg_under_the_hood.png delete mode 100644 fas/fas/static/css/static/images/under_the_hood_blue.png delete mode 100644 fas/fas/static/javascript/DragAndDrop.js delete mode 100644 fas/fas/static/javascript/MochiKit.js delete mode 100644 fas/fas/static/javascript/New.js delete mode 100644 fas/fas/static/javascript/Sortable.js delete mode 100644 fas/fas/static/javascript/color.js delete mode 100644 fas/fas/static/javascript/draggable.js delete mode 100644 fas/fas/static/javascript/forms.js delete mode 100644 fas/fas/static/javascript/signal.js delete mode 100644 fas/fas/static/javascript/sortable_tables.js delete mode 100644 fas/fas/static/javascript/style.js delete mode 100644 fas/fas/templates/edit.kid diff --git a/fas/dev.cfg b/fas/dev.cfg index 9cf0337..5818aa6 100644 --- a/fas/dev.cfg +++ b/fas/dev.cfg @@ -4,8 +4,9 @@ # (such as template engine, encodings, etc.) all go in # fas/config/app.cfg mail.on = True -mail.server = 'bastion.fedora.phx.redhat.com' -base_url_filter.base_url = "http://192.168.2.101:8080" +#mail.server = 'bastion.fedora.phx.redhat.com' +#base_url_filter.base_url = "http://192.168.2.101:8080" +mail.server = 'localhost' base_url_filter.use_x_forwarded_host = True # DATABASE diff --git a/fas/fas/controllers.py b/fas/fas/controllers.py index ffff527..cc5c22e 100644 --- a/fas/fas/controllers.py +++ b/fas/fas/controllers.py @@ -21,7 +21,23 @@ class knownUser(validators.FancyValidator): def validate_python(self, value, state): p = Person.byUserName(value) if p.cn: - raise validators.Invalid("'%s' already axists" % value, value, state) + raise validators.Invalid("'%s' already exists" % value, value, state) + +class unknownUser(validators.FancyValidator): + def _to_python(self, value, state): + return value.strip() + def validate_python(self, value, state): + p = Person.byUserName(value) + if not p.cn: + raise validators.Invalid("'%s' does not exist" % value, value, state) + +class unknownGroup(validators.FancyValidator): + def _to_python(self, value, state): + return value.strip() + def validate_python(self, value, state): + g = Groups.groups(groupName) + if not g: + raise validators.Invalid("'%s' does not exist" % value, value, state) class newPerson(widgets.WidgetsList): @@ -32,14 +48,38 @@ class newPerson(widgets.WidgetsList): telephoneNumber = widgets.TextField(label='Telephone Number', validator=validators.PhoneNumber(not_empty=True)) postalAddress = widgets.TextArea(label='Postal Address', validator=validators.NotEmpty) -newPersonForm = widgets.TableForm(fields=newPerson(), submit_text='Sign Up') +newPersonForm = widgets.ListForm(fields=newPerson(), submit_text='Sign Up') + +class editPerson(widgets.WidgetsList): +# cn = widgets.TextField(label='Username', validator=validators.PlainText(not_empty=True, max=10)) + userName = widgets.HiddenField(validator=validators.All(unknownUser(not_empty=True, max=10), validators.String(max=32, min=3))) + givenName = widgets.TextField(label='Full Name', validator=validators.String(not_empty=True, max=42)) + mail = widgets.TextField(label='Email', validator=validators.Email(not_empty=True, strip=True)) + fedoraPersonBugzillaMail = widgets.TextField(label='Bugzilla Email', validator=validators.Email(not_empty=True, strip=True)) + fedoraPersonIrcNick = widgets.TextField(label='IRC Nick') + fedoraPersonKeyId = widgets.TextField(label='PGP Key') + telephoneNumber = widgets.TextField(label='Telephone Number', validator=validators.PhoneNumber(not_empty=True)) + postalAddress = widgets.TextArea(label='Postal Address', validator=validators.NotEmpty) + description = widgets.TextArea(label='Description') + +editPersonForm = widgets.ListForm(fields=editPerson(), submit_text='Update') + +class editGroup(widgets.WidgetsList): + groupName = widgets.HiddenField(validator=validators.All(unknownGroup(not_empty=True, max=10), validators.String(max=32, min=3))) + fedoraGroupDesc = widgets.TextField(label='Description', validator=validators.NotEmpty) + fedoraGroupOwner = widgets.TextField(label='Group Owner', validator=validators.All(knownUser(not_empty=True, max=10), validators.String(max=32, min=3))) + fedoraGroupNeedsSponsor = widgets.CheckBox(label='Needs Sponsor') + fedoraGroupUserCanRemove = widgets.CheckBox(label='Self Removal') + fedoraGroupJoinMsg = widgets.TextField(label='Group Join Message') + +editGroupForm = widgets.ListForm(fields=editPerson(), submit_text='Update') class findUser(widgets.WidgetsList): userName = widgets.AutoCompleteField(label='Username', search_controller='search', search_param='userName', result_name='people') action = widgets.HiddenField(label='action', default='apply', validator=validators.String(not_empty=True)) groupName = widgets.HiddenField(label='groupName', validator=validators.String(not_empty=True)) -searchUserForm = widgets.TableForm(fields=findUser(), submit_text='Invite') +searchUserForm = widgets.ListForm(fields=findUser(), submit_text='Invite') class Root(controllers.RootController): @@ -75,6 +115,7 @@ class Root(controllers.RootController): if not identity.current.anonymous \ and identity.was_login_attempted() \ and not identity.get_identity_errors(): + turbogears.flash('Welcome, %s' % Person.byUserName(turbogears.identity.current.user_name).givenName) raise redirect(forward_url) forward_url=None @@ -98,35 +139,67 @@ class Root(controllers.RootController): @expose() def logout(self): identity.current.logout() + turbogears.flash('You have successfully logged out.') raise redirect("/") + @expose(template="fas.templates.viewAccount") + @identity.require(identity.not_anonymous()) + def viewAccount(self,userName=None, action=None): + if not userName: + userName = turbogears.identity.current.user_name + if turbogears.identity.current.user_name == userName: + personal = True + else: + personal = False + try: + Groups.byUserName(turbogears.identity.current.user_name)['accounts'].cn + admin = True + except KeyError: + admin = False + user = Person.byUserName(userName) + groups = Groups.byUserName(userName) + groupsPending = Groups.byUserName(userName, unapprovedOnly=True) + groupdata={} + for g in groups: + groupdata[g] = Groups.groups(g)[g] + for g in groupsPending: + groupdata[g] = Groups.groups(g)[g] + try: + groups['cla_done'] + claDone=True + except KeyError: + claDone=None + return dict(user=user, groups=groups, groupsPending=groupsPending, action=action, groupdata=groupdata, claDone=claDone, personal=personal, admin=admin) + @expose(template="fas.templates.editAccount") @identity.require(identity.not_anonymous()) - def editAccount(self,userName=None, action=None): + def editAccount(self, userName=None, action=None): if userName: try: Groups.byUserName(turbogears.identity.current.user_name)['accounts'].cn if not userName: userName = turbogears.identity.current.user_name except KeyError: - turbogears.flash('You cannot view %s' % userName ) + turbogears.flash('You cannot edit %s' % userName ) userName = turbogears.identity.current.user_name else: userName = turbogears.identity.current.user_name user = Person.byUserName(userName) - groups = Groups.byUserName(userName) - groupsPending = Groups.byUserName(userName, unapprovedOnly=True) - try: - groups['cla_done'] - claDone=True - except KeyError: - claDone=None - return dict(user=user, groups=groups, groupsPending=groupsPending, action=action, claDone=claDone) + value = {'userName' : userName, + 'givenName' : user.givenName, + 'mail' : user.mail, + 'fedoraPersonBugzillaMail' : user.fedoraPersonBugzillaMail, + 'fedoraPersonIrcNick' : user.fedoraPersonIrcNick, + 'fedoraPersonKeyId' : user.fedoraPersonKeyId, + 'telephoneNumber' : user.telephoneNumber, + 'postalAddress' : user.postalAddress, + 'description' : user.description, } + return dict(form=editPersonForm, value=value) - @expose(template="fas.templates.editGroup") + @expose(template="fas.templates.viewGroup") @exception_handler(errorMessage,rules="isinstance(tg_exceptions,ValueError)") @identity.require(identity.not_anonymous()) - def editGroup(self, groupName): + def viewGroup(self, groupName): try: groups = Groups.byGroupName(groupName, includeUnapproved=True) except KeyError, e: @@ -152,6 +225,32 @@ class Root(controllers.RootController): value = {'groupName' : group.cn} return dict(groups=groups, group=group, me=me, searchUserForm=searchUserForm, value=value) + @expose(template="fas.templates.editGroup") + @identity.require(identity.not_anonymous()) + def editGroup(self, groupName, action=None): + pass + userName = turbogears.identity.current.user_name + try: + Groups.byUserName(userName)['accounts'].cn + except KeyError: + try: + Groups.byUserName(userName)[groupName] + if Groups.byUserName(userName)[groupName].fedoraRoleType.lower() != 'administrator': + raise KeyError + except KeyError: + turbogears.flash('You cannot edit %s' % groupName) + turbogears.redirect('viewGroup?groupName=%s' % groupName) + group = Groups.groups(groupName)[groupName] + #value = {'givenName' : user.givenName, + # 'mail' : user.mail, + # 'fedoraPersonBugzillaMail' : user.fedoraPersonBugzillaMail, + # 'fedoraPersonIrcNick' : user.fedoraPersonIrcNick, + # 'fedoraPersonKeyId' : user.fedoraPersonKeyId, + # 'telephoneNumber' : user.telephoneNumber, + # 'postalAddress' : user.postalAddress, + # 'description' : user.description, } + return dict(form=editGroupForm, value=value) + @expose(template="fas.templates.groupList") @exception_handler(errorMessage,rules="isinstance(tg_exceptions,ValueError)") @identity.require(identity.not_anonymous()) @@ -208,7 +307,7 @@ class Root(controllers.RootController): if turbogears.identity.current.user_name: turbogears.flash("Password Changed") - turbogears.redirect("editAccount") + turbogears.redirect("viewAccount") else: turbogears.flash('Your password has been emailed to you') return dict() @@ -223,34 +322,18 @@ class Root(controllers.RootController): except: turbogears.flash("No users found matching '%s'" % search) users = [] - return dict(printList=users, search=search) + cla_done = Groups.byGroupName('cla_done') + claDone = {} + for u in users: + try: + cla_done[u] + claDone[u] = True + except KeyError: + claDone[u] = False + return dict(users=users, claDone=claDone, search=search) listUsers = listUser - @expose(template='fas.templates.edit') - @exception_handler(errorMessage,rules="isinstance(tg_exceptions,ValueError)") - @identity.require(identity.not_anonymous()) - def editUserAttribute(self, attribute, value, userName=None): - try: - Groups.byUserName(turbogears.identity.current.user_name)['accounts'].cn - if not userName: - userName = turbogears.identity.current.user_name - except KeyError: - turbogears.flash('You cannot view %s' % userName ) - userName = turbogears.identity.current.user_name - - attribute = attribute.encode('utf8') - value = value.encode('utf8') - if attribute and value: - p = Person.byUserName(userName) - p.__setattr__(attribute, value) - turbogears.flash("'%s' Updated to %s" % (attribute, value)) - if userName == turbogears.identity.current.user_name: - turbogears.redirect('editAccount') - else: - turbogears.redirect('editAccount?userName=%s' % userName) - return dict(userName=userName, attribute=attribute, value=value) - # @expose(template='fas.templates.apply') # @exception_handler(errorMessage, rules="isinstance(tg_exceptions,ValueError)") # @identity.require(identity.not_anonymous()) @@ -258,9 +341,9 @@ class Root(controllers.RootController): # # This doesn't work # turbogears.identity.current.user_name=userName # turbogears.flash('Sudoed to %s' % userName) -# turbogears.recirect('editAccount') +# turbogears.recirect('viewAccount') -# @error_handler(editGroup) +# @error_handler(viewGroup) # @validate(form=newPersonForm) @expose(template='fas.templates.apply') @identity.require(identity.not_anonymous()) @@ -276,14 +359,14 @@ class Root(controllers.RootController): group = Groups.groups(groupName)[groupName] except KeyError, e: turbogears.flash('Group Error: %s does not exist - %s' % (groupName, e)) - turbogears.redirect('editGroup?groupName=%s' % group.cn) + turbogears.redirect('viewGroup?groupName=%s' % group.cn) try: p = Person.byUserName(userName) if not p.cn: raise KeyError, 'User %s, just not there' % userName except KeyError, e: turbogears.flash('User Error: %s does not exist - %s' % (userName, e)) - turbogears.redirect('editGroup?groupName=%s' % group.cn) + turbogears.redirect('viewGroup?groupName=%s' % group.cn) g = Groups.byGroupName(groupName, includeUnapproved=True) @@ -293,14 +376,14 @@ class Root(controllers.RootController): Groups.apply(groupName, userName) except ldap.ALREADY_EXISTS: turbogears.flash('%s Already in group!' % p.cn) - turbogears.redirect('editGroup?groupName=%s' % group.cn) + turbogears.redirect('viewGroup?groupName=%s' % group.cn) else: turbogears.flash('%s Applied!' % p.cn) - turbogears.redirect('editGroup?groupName=%s' % group.cn) + turbogears.redirect('viewGroup?groupName=%s' % group.cn) # Some error checking for the sponsors if g[userName].fedoraRoleType.lower() == 'administrator' and g[sponsor].fedoraRoleType.lower() == 'sponsor': - raise ValueError, 'Sponsors cannot alter administrators. End of story' + raise ValueError, 'Sponsors cannot alter administrators. End of story.' try: userGroup = Groups.byGroupName(groupName)[userName] @@ -315,10 +398,10 @@ class Root(controllers.RootController): Groups.remove(group.cn, p.cn) except TypeError: turbogears.flash('%s could not be removed from %s!' % (p.cn, group.cn)) - turbogears.redirect('editGroup?groupName=%s' % group.cn) + turbogears.redirect('viewGroup?groupName=%s' % group.cn) else: turbogears.flash('%s removed from %s!' % (p.cn, group.cn)) - turbogears.redirect('editGroup?groupName=%s' % group.cn) + turbogears.redirect('viewGroup?groupName=%s' % group.cn) return dict() # Upgrade user in a group @@ -329,9 +412,9 @@ class Root(controllers.RootController): p.upgrade(groupName) except TypeError, e: turbogears.flash('Cannot upgrade %s - %s!' % (p.cn, e)) - turbogears.redirect('editGroup?groupName=%s' % group.cn) + turbogears.redirect('viewGroup?groupName=%s' % group.cn) turbogears.flash('%s Upgraded!' % p.cn) - turbogears.redirect('editGroup?groupName=%s' % group.cn) + turbogears.redirect('viewGroup?groupName=%s' % group.cn) # Downgrade user in a group @@ -342,18 +425,18 @@ class Root(controllers.RootController): p.downgrade(groupName) except TypeError, e: turbogears.flash('Cannot downgrade %s - %s!' % (p.cn, e)) - turbogears.redirect('editGroup?groupName=%s' % group.cn) + turbogears.redirect('viewGroup?groupName=%s' % group.cn) turbogears.flash('%s Downgraded!' % p.cn) - turbogears.redirect('editGroup?groupName=%s' % group.cn) + turbogears.redirect('viewGroup?groupName=%s' % group.cn) # Sponsor / Approve User elif action == 'sponsor' or action == 'apply': p.sponsor(groupName, sponsor) turbogears.flash('%s has been sponsored!' % p.cn) - turbogears.redirect('editGroup?groupName=%s' % group.cn) + turbogears.redirect('viewGroup?groupName=%s' % group.cn) turbogears.flash('Invalid action: %s' % action) - turbogears.redirect('editGroup?groupName=%s' % group.cn) + turbogears.redirect('viewGroup?groupName=%s' % group.cn) return dict() @expose(template='fas.templates.inviteMember') @@ -380,27 +463,27 @@ class Root(controllers.RootController): turbogears.flash('Application sent for %s' % user.cn) except ldap.ALREADY_EXISTS, e: turbogears.flash('Application Denied: %s' % e[0]['desc']) - turbogears.redirect('editGroup?groupName=%s' % group.cn) + turbogears.redirect('viewGroup?groupName=%s' % group.cn) if action == 'Remove' and group.fedoraGroupUserCanRemove == 'TRUE': try: Groups.remove(group.cn, user.cn) except TypeError: turbogears.flash('%s could not be removed from %s!' % (user.cn, group.cn)) - turbogears.redirect('editGroup?groupName=%s' % group.cn) + turbogears.redirect('viewGroup?groupName=%s' % group.cn) else: turbogears.flash('%s removed from %s!' % (user.cn, group.cn)) - turbogears.redirect('editGroup?groupName=%s' % group.cn) + turbogears.redirect('viewGroup?groupName=%s' % group.cn) else: turbogears.flash('%s does not allow self removal' % group.cn) - turbogears.redirect('editGroup?groupName=%s' % group.cn) + turbogears.redirect('viewGroup?groupName=%s' % group.cn) return dict() @expose(template='fas.templates.signUp') def signUp(self): if turbogears.identity.not_anonymous(): turbogears.flash('No need to sign up, You have an account!') - turbogears.redirect('editAccount') + turbogears.redirect('viewAccount') return dict(form=newPersonForm) @validate(form=newPersonForm) @@ -424,38 +507,41 @@ class Root(controllers.RootController): turbogears.redirect('signUp') return dict() + @validate(form=editPersonForm) + @error_handler(editAccount) + @expose(template='fas.templates.editAccount') + def editAccountSubmit(self, givenName, mail, fedoraPersonBugzillaMail, telephoneNumber, postalAddress, userName=None, fedoraPersonIrcNick='', fedoraPersonKeyId='', description=''): + if userName: + try: + Groups.byUserName(turbogears.identity.current.user_name)['accounts'].cn + if not userName: + userName = turbogears.identity.current.user_name + except KeyError: + turbogears.flash('You cannot view %s' % userName) + userName = turbogears.identity.current.user_name + turbogears.redirect("editAccount") + return dict() + else: + userName = turbogears.identity.current.user_name + user = Person.byUserName(userName) + user.__setattr__('givenName', givenName.encode('utf8')) + user.__setattr__('mail', mail.encode('utf8')) + user.__setattr__('fedoraPersonBugzillaMail', fedoraPersonBugzillaMail.encode('utf8')) + user.__setattr__('fedoraPersonIrcNick', fedoraPersonIrcNick.encode('utf8')) + user.__setattr__('fedoraPersonKeyId', fedoraPersonKeyId.encode('utf8')) + user.__setattr__('telephoneNumber', telephoneNumber.encode('utf8')) + user.__setattr__('postalAddress', postalAddress.encode('utf8')) + user.__setattr__('description', description.encode('utf8')) + turbogears.flash('Your account has been updated.') + turbogears.redirect("viewAccount?userName=%s" % userName) + return dict() + @expose(format="json") def search(self, userName=None, groupName=None): people = Person.users('%s*' % userName) return dict(people= filter(lambda item: userName in item.lower(), people)) - @expose(format="json") - def help(self, helpID='Unknown'): - messages = { - 'Unknown' : ''' Unknown: If you know what help should be here, please email accounts@fedoraproject.org and tell them.''', - 'postalAddress' : ''' Postal Address: Your local mailing address. It could be a work address or a home address.''', - 'cn' : ''' Account Name: A unique identifier for each user. This is your 'username' for many parts of fedora. This will also be your @fedoraproject.org email alias.''', - 'givenName' : ''' Real Name: This is your full name, often Firstname Lastname.''', - 'mail' : ''' Email Address: This is your primary email address. Notifications, aliases, password resets all get sent to this address. Other email addresses can be added (like bugzilla address)''', - 'fedoraPersonBugzillaMail' : ''' Bugzilla Email: For most this is the same address as as their primary email address.''', - 'fedoraPersonIrcNick' : ''' IRC Nick: Many fedora developers can be found on freenode.net. Make sure your nick is registered so no one else takes it. After you have registered, let the rest of fedora know what your nick is.''', - 'fedoraPersonKeyId' : ''' PGP Key: PGP key's are required to verify your identity to others and to encrypt messages. It is required in order to sign the CLA and, as such, is required to be a contributor. In order to create and upload your key please see our howto at: http://fedoraproject.org/wiki/DocsProject/UsingGpg/CreatingKeys ''', - 'telephoneNumber' : ''' Telephone Number: Please include a country code if outside of the united states. ''', - 'description' : ''' Description: Just a brief comment on yourself. Could include your website or blog. ''', - 'password' : ''' Password: Used to access fedora resources. Resources that don't require your password may require ssh keys ''', - 'accountStatus' : ''' Account Status: Some accounts may be disabled because of misconduct or password expiration. If your account is not active and you are not sure why, please contact irc.freenode.net ''', - 'cla' : ''' Contributor License Agreement: This agreement is required in order to be a Fedora contributor. The CLA can be found at: http://fedoraproject.org/wiki/Legal/Licenses/CLA ''', - 'inviteToGroup' : ''' This will add a user to the following group. They will initially be unapproved, just as if they had applied themselves. An email notification will be sent. ''' - } - try: - messages[helpID] - except KeyError: - helpID='Unknown' - return dict(help=messages[helpID]) - #filter(lambda item: userName in item.lower(), people)) - - @expose(template='fas.templates.invite') @exception_handler(errorMessage,rules="isinstance(tg_exceptions,ValueError)") diff --git a/fas/fas/fasLDAP.py b/fas/fas/fasLDAP.py index b0b3e8c..5aa0e56 100644 --- a/fas/fas/fasLDAP.py +++ b/fas/fas/fasLDAP.py @@ -20,8 +20,9 @@ class Group: __filter = '' __cn = '' - def __init__(self, cn, fedoraGroupOwner, fedoraGroupType, fedoraGroupNeedsSponsor, fedoraGroupUserCanRemove, fedoraGroupJoinMsg): + def __init__(self, cn, fedoraGroupDesc, fedoraGroupOwner, fedoraGroupType, fedoraGroupNeedsSponsor, fedoraGroupUserCanRemove, fedoraGroupJoinMsg): self.cn = cn + self.fedoraGroupDesc = fedoraGroupDesc self.fedoraGroupOwner = fedoraGroupOwner self.fedoraGroupType = fedoraGroupType self.fedoraGroupNeedsSponsor = fedoraGroupNeedsSponsor @@ -59,10 +60,11 @@ class Group: # modify(base, attr, value, self.__getattr__(attr)) @classmethod - def newGroup(self, cn, fedoraGroupOwner, fedoraGroupNeedsSponsor, fedoraGroupUserCanRemove, fedoraGroupJoinMsg): + def newGroup(self, cn, fedoraGroupDesc, fedoraGroupOwner, fedoraGroupNeedsSponsor, fedoraGroupUserCanRemove, fedoraGroupJoinMsg): ''' Create a new group ''' attributes = { 'cn' : cn, 'objectClass' : ('fedoraGroup'), + 'fedoraGroupDesc' : fedoraGroupDesc, 'fedoraGroupOwner' : fedoraGroupOwner, 'fedoraGroupType' : '1', 'fedoraGroupNeedsSponsor' : fedoraGroupNeedsSponsor, @@ -151,6 +153,7 @@ class Groups: print group groups[name] = Group( cn = group[0][1]['cn'][0], + fedoraGroupDesc = group[0][1]['fedoraGroupDesc'][0], fedoraGroupOwner = group[0][1]['fedoraGroupOwner'][0], fedoraGroupType = group[0][1]['fedoraGroupType'][0], fedoraGroupNeedsSponsor = group[0][1]['fedoraGroupNeedsSponsor'][0], @@ -452,7 +455,7 @@ def delete(base, ldapServer=None): s = Server() ldapServer = s.ldapConn - ldapServer.simple_bind_s('cn=directory manager', 'test') + ldapServer.simple_bind_s('cn=directory manager', 'fedoraproject') print "Deleteing %s " % base ldapServer.delete_s(base) @@ -463,7 +466,7 @@ def add(base, attributes, ldapServer=None): ldapServer = s.ldapConn attributes=[ (k,v) for k,v in attributes.items() ] - ldapServer.simple_bind_s('cn=directory manager', 'test') + ldapServer.simple_bind_s('cn=directory manager', 'fedoraproject') ldapServer.add_s(base, attributes) def modify(base, attribute, new, old=None, ldapServer=None): @@ -476,7 +479,7 @@ def modify(base, attribute, new, old=None, ldapServer=None): ldapServer = s.ldapConn from ldap import modlist - ldapServer.simple_bind_s('cn=directory manager', 'test') + ldapServer.simple_bind_s('cn=directory manager', 'fedoraproject') if old == None: old = 'None' @@ -500,7 +503,7 @@ def search(base, filter, attributes=None, ldapServer=None): scope = ldap.SCOPE_SUBTREE count = 0 timeout = 2 - ldapServer.simple_bind_s('cn=directory manager', 'test') + ldapServer.simple_bind_s('cn=directory manager', 'fedoraproject') result_set = [] try: result_id = ldapServer.search(base, scope, filter, attributes) diff --git a/fas/fas/feeds.py b/fas/fas/feeds.py index 93a64c8..f758bdb 100644 --- a/fas/fas/feeds.py +++ b/fas/fas/feeds.py @@ -3,7 +3,7 @@ from xml.dom import minidom class Koji: - def __init__(self, userName, url='http://publictest8/koji/recentbuilds?user='): + def __init__(self, userName, url='http://publictest8.fedora.redhat.com/koji/recentbuilds?user='): buildFeed = minidom.parse(urllib.urlopen(url + userName)) try: self.userLink = buildFeed.getElementsByTagName('link')[0].childNodes[0].data diff --git a/fas/fas/static/css/draggable.css b/fas/fas/static/css/draggable.css deleted file mode 100644 index 2627b5c..0000000 --- a/fas/fas/static/css/draggable.css +++ /dev/null @@ -1,28 +0,0 @@ -h1 { - font-size: 2em; - color: #4B4545; - text-align: center; -} - -.draggable -{ - color: white; - cursor: move; - font-size: 20px; -// height: 100px; -// line-height: 100px; - position: absolute; - text-align: center; - top: 200px; - width: 100px; -} - -.blue { background: blue; } -.green { background: green; } -.red { background: red; } -.white -{ - background: white; - border: 1px solid black; - color: black; -} diff --git a/fas/fas/static/css/fas.css b/fas/fas/static/css/fas.css deleted file mode 100644 index 9fd029b..0000000 --- a/fas/fas/static/css/fas.css +++ /dev/null @@ -1,354 +0,0 @@ -* -{ - margin: 0; - padding: 0; -} - -body -{ - font-size: 76%; -} - -a -{ - text-decoration: none; -} - -#wrapper -{ - font: normal 2ex/1.5 sans-serif; -} - -#head -{ - overflow: hidden; - margin-top: 35px; - height: 70px; - line-height: 70px; - background: url(images/head.png) 0 0 repeat-x; -} - -#head h1 -{ - width: 250px; - float: left; - text-indent: -9999px; - overflow: hidden; - background: url(images/logo.png) 1ex 50% no-repeat; -} - -#searchbox -{ - width: 36ex; - float: right; - text-align: right; - margin-right: 2ex; -} - -#searchbox label -{ - display: none; -} - -#searchbox input -{ - display: inline; - border: 1px solid #CCCCCC; -} - -#searchbox #q -{ - width: 20ex; -} - -#topnav -{ - height: 30px; - line-height: 30px; - background: url(images/topnav.png) 0 0 repeat-x; - font-size: 1.6ex; -} - -#topnav ul -{ - list-style: none; - text-align: center; -} - -#topnav ul li -{ - display: inline; - background: url(images/topnav-separator.png) 0 50% no-repeat; - padding-left: 3px; -} - -#topnav ul li.first -{ - background: none; -} - -#topnav a -{ - color: #445566; - margin: 0 2ex; -} - -#topnav a:hover -{ - color: #000000; -} - -#infobar -{ - position: absolute; - top: 0; - left: 0; - right: 0; - height: 35px; - line-height: 35px; - background: url(images/infobar.png) 0 0 repeat-x; - font-size: 1.6ex; -} - -#authstatus -{ - width: 40ex; - float: left; - color: #FFFFFF; - padding-left: 1.5ex; -} - -#authstatus strong -{ - color: #DED6A1; -} - -#control -{ - width: 40ex; - float: right; - margin-right: 1ex; -} - -#control ul -{ - list-style: none; - text-align: right; -} - -#control ul li -{ - display: inline; - background: url(images/control-separator.png) 0 50% no-repeat; -} - -#control a -{ - color: #DED6A1; - margin: 0 1.5ex; -} - -#main -{ - background: url(images/shadow.png) 0 0 repeat-x; -} - -#sidebar -{ - width: 22ex; - float: left; - background: #335F9D url(images/sidebar.png) 0 0 repeat-x; - border: 1px solid #112233; -} - -#sidebar ul -{ - list-style: none; -} - -#sidebar li -{ - border-top: 1px solid #CCCCCC; -} - -#sidebar li.first -{ - border-top: none; -} - -#sidebar a -{ - display: block; - text-align: center; - color: #FFFFFF; - padding: 0.5ex 0; -} - -#sidebar a:hover -{ - background: #082C59; -} - -#content -{ - margin-left: 22ex; - padding: 2ex 4ex; -} - -#content h2 -{ - /* header icon */ -} - -#content a -{ - color: #0C6ED0; -} - -.userbox -{ -} - -.userbox dt -{ - width: 23ex; - float: left; - text-align: right; -} - -.userbox dd -{ - margin-left: 25ex; -} - -.account -{ - padding-left: 30px; - background: url(images/account.png) 0 68% no-repeat; -} - -.approved -{ - padding-left: 20px; - background: url(images/approved.png) 0 68% no-repeat; -} - -.unapproved -{ - padding-left: 20px; - background: url(images/unapproved.png) 0 68% no-repeat; -} - -.attn -{ - padding-left: 20px; - background: url(images/attn.png) 0 68% no-repeat; -} - -.roleslist -{ - list-style: none; -} - -.roleslist li -{ - margin-left: 0.5ex; -} - -.actions -{ - margin-top: 1.5ex; - list-style: none; -} - -.actions li -{ - display: inline; -} - -#rolespanel -{ - list-style: none; -} - -#rolespanel li.role -{ - border-top: 2px solid #EEEEEE; - margin-top: 1ex; - padding-top: 1ex; - padding-left: 22px; - background: url(images/arrow.png) 0 1.6ex no-repeat; -} - -#rolespanel h4 -{ - display: inline; -} - -#rolespanel dt -{ - width: 10ex; - float: left; - text-align: right; - margin-bottom: 1ex; -} - -#rolespanel dd -{ - margin-left: 12ex; - margin-bottom: 1ex; -} - -#rolespanel .tools, #rolespanel .queue -{ - list-style: none; -} - -#rolespanel .tools li -{ - padding-left: 22px; - background: url(images/tools.png) 0 50% no-repeat; -} - -#rolespanel .queue li -{ - padding-left: 22px; - background: url(images/queue.png) 0 50% no-repeat; -} - -#footer -{ - font-size: 1.6ex; - clear: both; - text-align: center; - padding: 15px 0 2.5ex; - background: url(images/footer-top.png) 0 0 repeat-x; -} - -#footlinks -{ - padding-top: 3px; - padding-bottom: 18px; - background: #EEEEEE url(images/footer-bottom.png) 0 100% repeat-x; - list-style: none; -} - -#footlinks li -{ - display: inline; - border-left: 1px solid #CCCCCC; - padding-left: 1px; -} - -#footlinks li.first -{ - padding-left: 0; - border-left: none; -} - -#footlinks a -{ - margin: 0 2ex; - color: #3465A4; -} - diff --git a/fas/fas/static/css/sortable_tables.css b/fas/fas/static/css/sortable_tables.css deleted file mode 100644 index 3620868..0000000 --- a/fas/fas/static/css/sortable_tables.css +++ /dev/null @@ -1,66 +0,0 @@ -h1 { - font-size: 2em; - color: #4B4545; - text-align: center; -} - -table.datagrid { -/* width: 100%; */ - border-collapse: collapse; -} - -table.datagrid thead th { - text-align: left; - background-color: #4B4545; - background-repeat: no-repeat; - background-position: right center; - color: white; - font-weight: bold; - padding: .3em .7em; - font-size: .9em; - padding-right: 5px; - background-repeat: no-repeat; - background-position: 95% right; -} - -table.datagrid thead th a { - color: white; - text-decoration: none; - font-size: 1.0em; - background-repeat: no-repeat; - background-position: center right; - padding-right: 15px; -} - -table.datagrid thead th.over { - background-color: #746B6B; - cursor: pointer; -} - -table.datagrid tbody th { - font-weight: bold; -} - -table.datagrid tbody td, table.datagrid tbody th { - text-align: left; - padding: .3em .7em; - border-bottom: 1px solid #eee; -} - -table.datagrid tbody tr.alternate td, table.datagrid tbody tr.alternate th { - background-color: #f1f1f1; -} - -table.datagrid tfoot td, table.datagrid tfoot th { - background-color: #FFFEE3; - color: #4B4545; - padding: .5em; - font-weight: bold; - border-top: 2px solid #4B4545; -} - -table.datagrid tfoot th { text-align: left; } - -table.datagrid tfoot td { } - -.invisible { display: none; } diff --git a/fas/fas/static/css/static/images/favicon.ico b/fas/fas/static/css/static/images/favicon.ico deleted file mode 100644 index 332557bc307647601389c14939be0671c62efcd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1081 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 a%@fuZJML2-Po<`T1U+5-T-G@yGywpY!!y|c diff --git a/fas/fas/static/css/static/images/icon_tool-item.png b/fas/fas/static/css/static/images/icon_tool-item.png deleted file mode 100644 index c54189c7318d4b65970ca96cb431985f1ab4556a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4wWz`#)S`biA~0|QI3lV=DA2M0$DM@k0+0|RG) zM`SSr1MhVZW^~e+UBSS>AX(xXQ4*Y=R#Ki=l*&+EUaps!mtCBkSdglhUz9%kosAR& z14FN;i(`n!#JQIY`5YZZS|9QYddFVdQ&MBb@0F$_72><{9 diff --git a/fas/fas/static/css/static/images/icon_warning.png b/fas/fas/static/css/static/images/icon_warning.png deleted file mode 100644 index d7f3f55bbd23ebb9d39ef656aa2d0dcec874bc8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 573 zcmV-D0>b@?P)tb+rD3;vpxnpVRf7#y3=e<-iG34~5#p`;T(~}m-#E^X6O95Mvwq09aR8@7QQ1FOf z?;(#jvJCO-JqiU6RaIA9TVK2*9*5EJ{W5ZR1fu~@pCkZo`e=Y09^v1F*SHPu_HxZM zO=B)=FmZJNfHpJ5=iL`*GgAOeTpci%H84%n0BQiTYwKx6QR>y|DzVW%hyZ|2_ku59 zztibnjFSzBjrOTlS5XwD?%H}<2Htz#a%wtx31J%~1tf)DKj70&mtH^kJ0ol}oxH^J zmQ%n7sZ`8;Yc`wDCMV+&FONnL{H9W=^d!g9D!@lT`END+1m64sIf>k^RH>IX00000 LNkvXXu0mjfr)u(z diff --git a/fas/fas/static/css/static/images/info.png b/fas/fas/static/css/static/images/info.png deleted file mode 100644 index 329c523fddbede33dbdd99a5754f31b991c1a3f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2889 zcmV-P3%2x$P)D>@;encFk`^LM|Cv@;Ama*V;@5pua4xvYnj5QaX1@3XWp z&-~0~LchYdo_mh5(Xrny0pAaJ#a`EEZ%v}8`-+1;}4o@Eb%@Mft?z?>N z2misusWaq@1AMShBcIVskLBnsSb#xbS~@qzU;twviZ#EODN$)e{QlAXR4Wx;d--2@ z`YT`I#PQ?1Ca~))G&?uT*_U5p^7M0rs)w1y8jl_F_`TyrdJ7f;jT8ncMe9^bqNG4d zu$AQaXfHw-Uj6wUDv{u8-~4mVzWfribF-f;fhdZ2;l&pjn)*YOQ($>BVcWaPj> zZZFsQ+>tD~i~uwO0|KN3DFjLhR7yrkfj}T->Inh;T^aJ8O~$dfcx{p2{qzyK2KMpe z3l}~a0#Oum?)*6pop_4bRiDWbkAb3vF)_xZl1VMElq7+il6e5QN+o40Nipw`aTI9y z@9T>^`^R7B-1#?%qPX(}Zr-{{_nr|@SvIRpM)uffqtV8&U6WLL(E_d#u-jg+(pXUG zcimZ+jAP+B7Ry@=Vg%!pQ{23Dv-1QlUA|1$-~=1hh+IbFIuPp!A!u11KuUp-+nSfi z^xl0B-H(x28(d4_ISSWS%#~_P9XrmY_ulI~fjf8Z($hc0RxPBzTM_Fx-9V%sNP&y{ z+6U5D5H0B_ncUm{t>;*{w!*U&E1NaO4(#Xd?A;v`*l{mZtCexREMZ(lN`=-MWhMNR zER%qjBGtYGDI`LI(I60LV?Zj?tXD$> z1t67&kco7*(`RaNOzI&e0E09FgTWXw8E3lMcVXa1r?7sD70#d2%B9;)hq{LFm_r9+|2wY2HTN1}gQmSK1x-vF3 zKfudmcM5Cg1O^5MsgzgAdlK7{tZoI=f(R+^r%r)DlEi`#GEJQVAq8;^exN}l?S!Qs z0I!lgdkP+#g@y)Cy?78=4Z zCW;IggG-fy+QhLWmP`m(Rzj%YIV{Z2^Qps=ohL9gb(GTlO?o}ZxK@(mg`iw-va;#Z z2sJ_q275gE3JObTq-hd21B4E+g-(vrSHJw#-9Xy?`@pxp@lCG$+aKOxd~}?t zPfa}xl!qT|4Gs?CI4*v5Gp*DKiAuFbqfr6UVwPIFT;3!I!q$C3(pJCu<~dG3ar$9l zv^SZ1Z2CA$iwk&m(o!HG){^zr<)m#eNo5v7u(&XXWjP6WvE9LHi~-N{9vVYilew|c zFlj*hc; zaEKe%|Cef|&f&vH+IoIRW~2Y`kKbW!!|;SzX;=V|{~0qsGC5 zgKU&+jGo~9TW@p%fBPQD=Zoy$Kh3RMKFabi2DFAaj=^a9`nuV_e}JLAeMqUO)_m?Q zl^7l#?*#t#36#qv?k!#A$Pt&}q0iFSdyHk&Aw&W9f2kH3c^ zptUB7B8<^EPKGC+{5G$@{!c6|UuN-MmHi`+Qs^pDuZ5J$W!Bb8luDaa%4Oze=UG@- z<>{yY7Ns2O^;$A^S1KhUu`FxHbD>>T;y8|pq6n>%HI8HAI7aK3rKP)ExpIN4SAW9F z$}G8@N4>s*6>rp6B5> zE{@}*1gsYDWKBMQ+_B@?=*OK=6wz#k1VPeH7mNMma(Ui)=N(R-JV_KqT)un-*Y&V% zmuj_w=XsdaZrj@59$yNP>??#wSB){|W8Yp(~-2lc+w476(k4+7b?B)Bar8)MK~x30mo n$cS{{yKT`2b-x?HzkK{3=n2FH@v-j&00000NkvXXu0mjfk8hO? diff --git a/fas/fas/static/css/static/images/ok.png b/fas/fas/static/css/static/images/ok.png deleted file mode 100644 index fee6751c3dd915e55da53ed6a1e7b5809cc76b63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25753 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 diff --git a/fas/fas/static/css/static/images/status_approved.png b/fas/fas/static/css/static/images/status_approved.png deleted file mode 100644 index 62b254be86b79763776b2acbcb4d4a7cd8eb6c68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 427 zcmV;c0aX5pP)Rd?TmPVc(4hT+#)f`C&`?c9HV7K%RCzVM-{*IlQY3HCJ09MbbDndK0*d@YE`W#} znVyzEjZR!CrAjV<>1jEC+f-5Jk50&0?oRq0q7;Oh(nFa*Yfcxs0K}rq##$~P%hZ}J zM4;S!84lEgFO0SQ!1Zg5>Sv1?Kfy^MPkwTB0Byx`asQ0z3A@V~7AMBJtu}}$#o^i# zp6d+Y0UDh;(|&@=d%)FG1wZa$MJQyFB*(m=QDXopZ;s=Q6%O(_6wuZN&vn?zrhl;w zL9fqFu{ECpU^|<}kB?qrQA9+W&}tLfpxdO=v|#fTCj5YbYS%?%!Dq VeZw8#Y0&@x002ovPDHLkV1gvmutfj> diff --git a/fas/fas/static/css/static/images/status_incomplete.png b/fas/fas/static/css/static/images/status_incomplete.png deleted file mode 100644 index 3169e1d8c53a5a097b64533373a3580dc8c87950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215 zcmeAS@N?(olHy`uVBq!ia0y~yVBi5^4mJh`hOp9@=L`%CEX7WqAsieW95oy%9SjT% zoCO|{#S9F**Fl)kNn>^e0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa|XA)YRdAsQ3kPCCfh5WwRcpYvUa<#>Umth2zK*VC&6`s?1@E%#GU5!?`TfYGS9 zGvlW4teq;kd;%9gS(Ja}xon|+AfWTJ^u9+0{hz-4X`9LIAhN!YvGK diff --git a/fas/fas/static/css/static/images/status_rejected.png b/fas/fas/static/css/static/images/status_rejected.png deleted file mode 100644 index bedcaea4bf02ea438b1f1418f48590461ff83dc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 435 zcmV;k0ZjghP)AJd|`ly7!ISn)O<~`nw0Pff$bbv4nZ#V08_}`!= zr4T~g>j0beI(#XW#Gun5lg*NG900c4Ev;sg_vw_IZZ}j608g&V=VHOzWWs8>=IW%NV>fXFxCyimYSrk@#!TJcb;5%@luuCoaOB~MDp>0gFcqrt~) z#(`yVU9EDQN~x`{gTbz(xM^}^+vLk-%w&>_Vv&sF5Hk#Avy!AqDK6XXox@%J$TcYi dfMCzp_yUeZVaL7qYC!-1002ovPDHLkV1oE{y7&M9 diff --git a/fas/fas/static/css/static/images/tg_under_the_hood.png b/fas/fas/static/css/static/images/tg_under_the_hood.png deleted file mode 100644 index bc9c79cc6141a67a21edaffc9a068ebd0899eb46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4010 zcmV;b4^{AqP)*YDvbIYV`E zcS*)_N8;Vt-{0T4i*l)rclP%7^78WR?CkR9;P$YDnnM-rm~X_Hf?6gCgI!D3*xIvn zQ{CO&=H}+Sp@`Jf)V8Uj(#^}_=IZF^=*z;rmu*C&dQ{-x;HiUM_4)eK$-?jO@apR7 z4`B0d{{=xteoB8;=Pe*n1FP(i(`00 zCd0L>(Y~|l?(u6oA$UtP`27CBuA8AxB)zPixrJ$+S~$(6kGzasu$G0tl6vUv@2XQK zfQ>0ljtdM-Vqm#KFMX+T796(dp~%*3;2vD+#Qelyox?%EiL-_V~t;T(y5=&(hTV{{OkB zo72X-v!k2Uw4&C#tI^Wbv{xzOdCvVzK(S3?e5yiz@JVdkvR$b{r=6)&)weN*q>+N;^X!7@z~DD_xk&9Kqikt z9OvrnwqG-EM=`>±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 for documentation, downloads, license, etc. - -Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) - Mochi-ized By Thomas Herve (_firstname_@nimail.org) - -***/ - -if (typeof(dojo) != 'undefined') { - dojo.provide('MochiKit.DragAndDrop'); - dojo.require('MochiKit.Base'); - dojo.require('MochiKit.DOM'); - dojo.require('MochiKit.Iter'); - dojo.require('MochiKit.Visual'); - dojo.require('MochiKit.Signal'); -} - -if (typeof(JSAN) != 'undefined') { - JSAN.use("MochiKit.Base", []); - JSAN.use("MochiKit.DOM", []); - JSAN.use("MochiKit.Visual", []); - JSAN.use("MochiKit.Iter", []); - JSAN.use("MochiKit.Signal", []); -} - -try { - if (typeof(MochiKit.Base) == 'undefined' || - typeof(MochiKit.DOM) == 'undefined' || - typeof(MochiKit.Visual) == 'undefined' || - typeof(MochiKit.Signal) == 'undefined' || - typeof(MochiKit.Iter) == 'undefined') { - throw ""; - } -} catch (e) { - throw "MochiKit.DragAndDrop depends on MochiKit.Base, MochiKit.DOM, MochiKit.Visual, MochiKit.Signal and MochiKit.Iter!"; -} - -if (typeof(MochiKit.DragAndDrop) == 'undefined') { - MochiKit.DragAndDrop = {}; -} - -MochiKit.DragAndDrop.NAME = 'MochiKit.DragAndDrop'; -MochiKit.DragAndDrop.VERSION = '1.4'; - -MochiKit.DragAndDrop.__repr__ = function () { - return '[' + this.NAME + ' ' + this.VERSION + ']'; -}; - -MochiKit.DragAndDrop.toString = function () { - return this.__repr__(); -}; - -MochiKit.DragAndDrop.EXPORT = [ - "Droppable", - "Draggable" -]; - -MochiKit.DragAndDrop.EXPORT_OK = [ - "Droppables", - "Draggables" -]; - -MochiKit.DragAndDrop.Droppables = { - /*** - - Manage all droppables. Shouldn't be used, use the Droppable object instead. - - ***/ - drops: [], - - remove: function (element) { - this.drops = MochiKit.Base.filter(function (d) { - return d.element != MochiKit.DOM.getElement(element) - }, this.drops); - }, - - register: function (drop) { - this.drops.push(drop); - }, - - unregister: function (drop) { - this.drops = MochiKit.Base.filter(function (d) { - return d != drop; - }, this.drops); - }, - - prepare: function (element) { - MochiKit.Base.map(function (drop) { - if (drop.isAccepted(element)) { - if (drop.options.activeclass) { - MochiKit.DOM.addElementClass(drop.element, - drop.options.activeclass); - } - drop.options.onactive(drop.element, element); - } - }, this.drops); - }, - - findDeepestChild: function (drops) { - deepest = drops[0]; - - for (i = 1; i < drops.length; ++i) { - if (MochiKit.DOM.isParent(drops[i].element, deepest.element)) { - deepest = drops[i]; - } - } - return deepest; - }, - - show: function (point, element) { - if (!this.drops.length) { - return; - } - var affected = []; - - if (this.last_active) { - this.last_active.deactivate(); - } - MochiKit.Iter.forEach(this.drops, function (drop) { - if (drop.isAffected(point, element)) { - affected.push(drop); - } - }); - if (affected.length > 0) { - drop = this.findDeepestChild(affected); - MochiKit.Position.within(drop.element, point.page.x, point.page.y); - drop.options.onhover(element, drop.element, - MochiKit.Position.overlap(drop.options.overlap, drop.element)); - drop.activate(); - } - }, - - fire: function (event, element) { - if (!this.last_active) { - return; - } - MochiKit.Position.prepare(); - - if (this.last_active.isAffected(event.mouse(), element)) { - this.last_active.options.ondrop(element, - this.last_active.element, event); - } - }, - - reset: function (element) { - MochiKit.Base.map(function (drop) { - if (drop.options.activeclass) { - MochiKit.DOM.removeElementClass(drop.element, - drop.options.activeclass); - } - drop.options.ondesactive(drop.element, element); - }, this.drops); - if (this.last_active) { - this.last_active.deactivate(); - } - } -}; - -MochiKit.DragAndDrop.Droppable = function (element, options) { - this.__init__(element, options); -}; - -MochiKit.DragAndDrop.Droppable.prototype = { - /*** - - A droppable object. Simple use is to create giving an element: - - new MochiKit.DragAndDrop.Droppable('myelement'); - - Generally you'll want to define the 'ondrop' function and maybe the - 'accept' option to filter draggables. - - ***/ - __class__: MochiKit.DragAndDrop.Droppable, - - __init__: function (element, /* optional */options) { - var d = MochiKit.DOM; - var b = MochiKit.Base; - this.element = d.getElement(element); - this.options = b.update({ - greedy: true, - hoverclass: null, - activeclass: null, - hoverfunc: b.noop, - accept: null, - onactive: b.noop, - ondesactive: b.noop, - onhover: b.noop, - ondrop: b.noop, - containment: [], - tree: false - }, options || {}); - - // cache containers - this.options._containers = []; - b.map(MochiKit.Base.bind(function (c) { - this.options._containers.push(d.getElement(c)); - }, this), this.options.containment); - - d.makePositioned(this.element); // fix IE - - MochiKit.DragAndDrop.Droppables.register(this); - }, - - isContained: function (element) { - if (this._containers) { - var containmentNode; - if (this.options.tree) { - containmentNode = element.treeNode; - } else { - containmentNode = element.parentNode; - } - return MochiKit.Iter.some(this._containers, function (c) { - return containmentNode == c; - }); - } else { - return true; - } - }, - - isAccepted: function (element) { - return ((!this.options.accept) || MochiKit.Iter.some( - this.options.accept, function (c) { - return MochiKit.DOM.hasElementClass(element, c); - })); - }, - - isAffected: function (point, element) { - return ((this.element != element) && - this.isContained(element) && - this.isAccepted(element) && - MochiKit.Position.within(this.element, point.page.x, - point.page.y)); - }, - - deactivate: function () { - /*** - - A droppable is deactivate when a draggable has been over it and left. - - ***/ - if (this.options.hoverclass) { - MochiKit.DOM.removeElementClass(this.element, - this.options.hoverclass); - } - this.options.hoverfunc(this.element, false); - MochiKit.DragAndDrop.Droppables.last_active = null; - }, - - activate: function () { - /*** - - A droppable is active when a draggable is over it. - - ***/ - if (this.options.hoverclass) { - MochiKit.DOM.addElementClass(this.element, this.options.hoverclass); - } - this.options.hoverfunc(this.element, true); - MochiKit.DragAndDrop.Droppables.last_active = this; - }, - - destroy: function () { - /*** - - Delete this droppable. - - ***/ - MochiKit.DragAndDrop.Droppables.unregister(this); - }, - - repr: function () { - return '[' + this.__class__.NAME + ", options:" + MochiKit.Base.repr(this.options) + "]"; - } -}; - -MochiKit.DragAndDrop.Draggables = { - /*** - - Manage draggables elements. Not intended to direct use. - - ***/ - drags: [], - - observers: [], - - register: function (draggable) { - if (this.drags.length === 0) { - var conn = MochiKit.Signal.connect; - this.eventMouseUp = conn(document, 'onmouseup', this, this.endDrag); - this.eventMouseMove = conn(document, 'onmousemove', this, - this.updateDrag); - this.eventKeypress = conn(document, 'onkeypress', this, - this.keyPress); - } - this.drags.push(draggable); - }, - - unregister: function (draggable) { - this.drags = MochiKit.Base.filter(function (d) { - return d != draggable; - }, this.drags); - if (this.drags.length === 0) { - var disc = MochiKit.Signal.disconnect - disc(this.eventMouseUp); - disc(this.eventMouseMove); - disc(this.eventKeypress); - } - }, - - activate: function (draggable) { - // allows keypress events if window is not currently focused - // fails for Safari - window.focus(); - this.activeDraggable = draggable; - }, - - deactivate: function () { - this.activeDraggable = null; - }, - - updateDrag: function (event) { - if (!this.activeDraggable) { - return; - } - var pointer = event.mouse(); - // Mozilla-based browsers fire successive mousemove events with - // the same coordinates, prevent needless redrawing (moz bug?) - if (this._lastPointer && (MochiKit.Base.repr(this._lastPointer.page) == - MochiKit.Base.repr(pointer.page))) { - return; - } - this._lastPointer = pointer; - this.activeDraggable.updateDrag(event, pointer); - }, - - endDrag: function (event) { - if (!this.activeDraggable) { - return; - } - this._lastPointer = null; - this.activeDraggable.endDrag(event); - this.activeDraggable = null; - }, - - keyPress: function (event) { - if (this.activeDraggable) { - this.activeDraggable.keyPress(event); - } - }, - - addObserver: function (observer) { - this.observers.push(observer); - this._cacheObserverCallbacks(); - }, - - removeObserver: function (element) { - // element instead of observer fixes mem leaks - this.observers = MochiKit.Base.filter(function (o) { - return o.element != element; - }, this.observers); - this._cacheObserverCallbacks(); - }, - - notify: function (eventName, draggable, event) { - // 'onStart', 'onEnd', 'onDrag' - if (this[eventName + 'Count'] > 0) { - MochiKit.Base.map(function (o) { - if (o[eventName]) { - o[eventName](eventName, draggable, event); - } - }, this.observers); - } - }, - - _cacheObserverCallbacks: function () { - var b = MochiKit.Base; - var self = MochiKit.DragAndDrop.Draggables; - b.map(function (eventName) { - self[eventName + 'Count'] = b.filter(function (o) { - return o[eventName]; - }, self.observers).length; - }, ['onStart', 'onEnd', 'onDrag']); - } -}; - -MochiKit.DragAndDrop.Draggable = function (element, options) { - this.__init__(element, options); -}; - -MochiKit.DragAndDrop.Draggable.prototype = { - /*** - - A draggable object. Simple instantiate : - - new MochiKit.DragAndDrop.Draggable('myelement'); - - ***/ - __class__ : MochiKit.DragAndDrop.Draggable, - - __init__: function (element, /* optional */options) { - var v = MochiKit.Visual; - var b = MochiKit.Base; - options = b.update({ - handle: false, - starteffect: function (innerelement) { - this._savedOpacity = MochiKit.DOM.getOpacity(innerelement) || 1.0; - new v.Opacity(innerelement, {duration:0.2, from:this._savedOpacity, to:0.7}); - }, - reverteffect: function (innerelement, top_offset, left_offset) { - var dur = Math.sqrt(Math.abs(top_offset^2) + - Math.abs(left_offset^2))*0.02; - return new v.Move(innerelement, - {x: -left_offset, y: -top_offset, duration: dur}); - }, - endeffect: function (innerelement) { - new v.Opacity(innerelement, {duration:0.2, from:0.7, to:this._savedOpacity}); - }, - onchange: b.noop, - zindex: 1000, - revert: false, - scroll: false, - scrollSensitivity: 20, - scrollSpeed: 15, - // false, or xy or [x, y] or function (x, y){return [x, y];} - snap: false - }, options || {}); - - var d = MochiKit.DOM; - this.element = d.getElement(element); - - if (options.handle && (typeof(options.handle) == 'string')) { - this.handle = d.getFirstElementByTagAndClassName(null, - options.handle, this.element); - } - if (!this.handle) { - this.handle = d.getElement(options.handle); - } - if (!this.handle) { - this.handle = this.element; - } - - if (options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) { - options.scroll = d.getElement(options.scroll); - } - - d.makePositioned(this.element); // fix IE - - this.delta = this.currentDelta(); - this.options = options; - this.dragging = false; - - this.eventMouseDown = MochiKit.Signal.connect(this.handle, - 'onmousedown', this, this.initDrag); - MochiKit.DragAndDrop.Draggables.register(this); - }, - - destroy: function () { - MochiKit.Signal.disconnect(this.eventMouseDown); - MochiKit.DragAndDrop.Draggables.unregister(this); - }, - - currentDelta: function () { - var s = MochiKit.DOM.getStyle; - return [ - parseInt(s(this.element, 'left') || '0'), - parseInt(s(this.element, 'top') || '0')]; - }, - - initDrag: function (event) { - if (!event.mouse().button.left) { - return; - } - // abort on form elements, fixes a Firefox issue - var src = event.target; - if (src.tagName && ( - src.tagName == 'INPUT' || src.tagName == 'SELECT' || - src.tagName == 'OPTION' || src.tagName == 'BUTTON' || - src.tagName == 'TEXTAREA')) { - return; - } - - if (this._revert) { - this._revert.cancel(); - this._revert = null; - } - - var pointer = event.mouse(); - var pos = MochiKit.Position.cumulativeOffset(this.element); - this.offset = [pointer.page.x - pos.x, pointer.page.y - pos.y] - - MochiKit.DragAndDrop.Draggables.activate(this); - event.stop(); - }, - - startDrag: function (event) { - this.dragging = true; - if (this.options.selectclass) { - MochiKit.DOM.addElementClass(this.element, - this.options.selectclass); - } - if (this.options.zindex) { - this.originalZ = parseInt(MochiKit.DOM.getStyle(this.element, - 'z-index') || '0'); - this.element.style.zIndex = this.options.zindex; - } - - if (this.options.ghosting) { - this._clone = this.element.cloneNode(true); - this.ghostPosition = MochiKit.Position.absolutize(this.element); - this.element.parentNode.insertBefore(this._clone, this.element); - } - - if (this.options.scroll) { - if (this.options.scroll == window) { - var where = this._getWindowScroll(this.options.scroll); - this.originalScrollLeft = where.left; - this.originalScrollTop = where.top; - } else { - this.originalScrollLeft = this.options.scroll.scrollLeft; - this.originalScrollTop = this.options.scroll.scrollTop; - } - } - - MochiKit.DragAndDrop.Droppables.prepare(this.element); - MochiKit.DragAndDrop.Draggables.notify('onStart', this, event); - if (this.options.starteffect) { - this.options.starteffect(this.element); - } - }, - - updateDrag: function (event, pointer) { - if (!this.dragging) { - this.startDrag(event); - } - MochiKit.Position.prepare(); - MochiKit.DragAndDrop.Droppables.show(pointer, this.element); - MochiKit.DragAndDrop.Draggables.notify('onDrag', this, event); - this.draw(pointer); - this.options.onchange(this); - - if (this.options.scroll) { - this.stopScrolling(); - var p, q; - if (this.options.scroll == window) { - var s = this._getWindowScroll(this.options.scroll); - p = new MochiKit.Style.Coordinates(s.left, s.top); - q = new MochiKit.Style.Coordinates(s.left + s.width, - s.top + s.height); - } else { - p = MochiKit.Position.page(this.options.scroll); - p.x += this.options.scroll.scrollLeft; - p.y += this.options.scroll.scrollTop; - q = new MochiKit.Style.Coordinates(p.x + this.options.scroll.offsetWidth, - p.y + this.options.scroll.offsetHeight); - } - var speed = [0, 0]; - if (pointer.page.x > (q.x - this.options.scrollSensitivity)) { - speed[0] = pointer.page.x - (q.x - this.options.scrollSensitivity); - } else if (pointer.page.x < (p.x + this.options.scrollSensitivity)) { - speed[0] = pointer.page.x - (p.x + this.options.scrollSensitivity); - } - if (pointer.page.y > (q.y - this.options.scrollSensitivity)) { - speed[1] = pointer.page.y - (q.y - this.options.scrollSensitivity); - } else if (pointer.page.y < (p.y + this.options.scrollSensitivity)) { - speed[1] = pointer.page.y - (p.y + this.options.scrollSensitivity); - } - this.startScrolling(speed); - } - - // fix AppleWebKit rendering - if (MochiKit.Base.isSafari()) { - window.scrollBy(0, 0); - } - event.stop(); - }, - - finishDrag: function (event, success) { - var dr = MochiKit.DragAndDrop; - this.dragging = false; - if (this.options.selectclass) { - MochiKit.DOM.removeElementClass(this.element, - this.options.selectclass); - } - - if (this.options.ghosting) { - // XXX: from a user point of view, it would be better to remove - // the node only *after* the MochiKit.Visual.Move end when used - // with revert. - MochiKit.Position.relativize(this.element, this.ghostPosition); - MochiKit.DOM.removeElement(this._clone); - this._clone = null; - } - - if (success) { - dr.Droppables.fire(event, this.element); - } - dr.Draggables.notify('onEnd', this, event); - - var revert = this.options.revert; - if (revert && typeof(revert) == 'function') { - revert = revert(this.element); - } - - var d = this.currentDelta(); - if (revert && this.options.reverteffect) { - this._revert = this.options.reverteffect(this.element, - d[1] - this.delta[1], d[0] - this.delta[0]); - } else { - this.delta = d; - } - - if (this.options.zindex) { - this.element.style.zIndex = this.originalZ; - } - - if (this.options.endeffect) { - this.options.endeffect(this.element); - } - - dr.Draggables.deactivate(); - dr.Droppables.reset(this.element); - }, - - keyPress: function (event) { - if (event.keyString != "KEY_ESCAPE") { - return; - } - this.finishDrag(event, false); - event.stop(); - }, - - endDrag: function (event) { - if (!this.dragging) { - return; - } - this.stopScrolling(); - this.finishDrag(event, true); - event.stop(); - }, - - draw: function (point) { - var pos = MochiKit.Position.cumulativeOffset(this.element); - var d = this.currentDelta(); - pos.x -= d[0]; - pos.y -= d[1]; - - if (this.options.scroll && !this.options.scroll.scrollTo) { - pos.x -= this.options.scroll.scrollLeft - this.originalScrollLeft; - pos.y -= this.options.scroll.scrollTop - this.originalScrollTop; - } - - var p = [point.page.x - pos.x - this.offset[0], - point.page.y - pos.y - this.offset[1]] - - if (this.options.snap) { - if (typeof(this.options.snap) == 'function') { - p = this.options.snap(p[0], p[1]); - } else { - if (this.options.snap instanceof Array) { - var i = -1; - p = MochiKit.Base.map(MochiKit.Base.bind(function (v) { - i += 1; - return Math.round(v/this.options.snap[i]) * - this.options.snap[i] - }, this), p) - } else { - p = MochiKit.Base.map(MochiKit.Base.bind(function (v) { - return Math.round(v/this.options.snap) * - this.options.snap - }, this), p) - } - } - } - var style = this.element.style; - if ((!this.options.constraint) || - (this.options.constraint == 'horizontal')) { - style.left = p[0] + 'px'; - } - if ((!this.options.constraint) || - (this.options.constraint == 'vertical')) { - style.top = p[1] + 'px'; - } - if (style.visibility == 'hidden') { - style.visibility = ''; // fix gecko rendering - } - }, - - stopScrolling: function () { - if (this.scrollInterval) { - clearInterval(this.scrollInterval); - this.scrollInterval = null; - } - }, - - startScrolling: function (speed) { - if (!speed[0] || !speed[1]) { - return; - } - this.scrollSpeed = [speed[0] * this.options.scrollSpeed, - speed[1] * this.options.scrollSpeed]; - this.lastScrolled = new Date(); - this.scrollInterval = setInterval(MochiKit.Base.bind(this.scroll, this), 10); - }, - - scroll: function () { - var current = new Date(); - var delta = current - this.lastScrolled; - this.lastScrolled = current; - - if (this.options.scroll == window) { - var s = this._getWindowScroll(this.options.scroll); - if (this.scrollSpeed[0] || this.scrollSpeed[1]) { - var d = delta / 1000; - this.options.scroll.scrollTo(s.left + d * this.scrollSpeed[0], - s.top + d * this.scrollSpeed[1]); - } - } else { - this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000; - this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000; - } - - var d = MochiKit.DragAndDrop; - - MochiKit.Position.prepare(); - d.Droppables.show(d.Draggables._lastPointer, this.element); - this.draw(d.Draggables._lastPointer); - this.options.onchange(this); - }, - - _getWindowScroll: function (w) { - var T, L, W, H; - with (w.document) { - if (w.document.documentElement && documentElement.scrollTop) { - T = documentElement.scrollTop; - L = documentElement.scrollLeft; - } else if (w.document.body) { - T = body.scrollTop; - L = body.scrollLeft; - } - if (w.innerWidth) { - W = w.innerWidth; - H = w.innerHeight; - } else if (w.document.documentElement && documentElement.clientWidth) { - W = documentElement.clientWidth; - H = documentElement.clientHeight; - } else { - W = body.offsetWidth; - H = body.offsetHeight - } - } - return {top: T, left: L, width: W, height: H}; - }, - - repr: function () { - return '[' + this.__class__.NAME + ", options:" + MochiKit.Base.repr(this.options) + "]"; - } -}; - -MochiKit.DragAndDrop.__new__ = function () { - MochiKit.Base.nameFunctions(this); - - this.EXPORT_TAGS = { - ":common": this.EXPORT, - ":all": MochiKit.Base.concat(this.EXPORT, this.EXPORT_OK) - }; -}; - -MochiKit.DragAndDrop.__new__(); - -MochiKit.Base._exportSymbols(this, MochiKit.DragAndDrop); - diff --git a/fas/fas/static/javascript/MochiKit.js b/fas/fas/static/javascript/MochiKit.js deleted file mode 100644 index e0be5a6..0000000 --- a/fas/fas/static/javascript/MochiKit.js +++ /dev/null @@ -1,5773 +0,0 @@ -/*** - - MochiKit.MochiKit 1.4 : PACKED VERSION - - THIS FILE IS AUTOMATICALLY GENERATED. If creating patches, please - diff against the source tree, not this file. - - See for documentation, downloads, license, etc. - - (c) 2005 Bob Ippolito. All rights Reserved. - -***/ - -if(typeof (dojo)!="undefined"){ -dojo.provide("MochiKit.Base"); -} -if(typeof (MochiKit)=="undefined"){ -MochiKit={}; -} -if(typeof (MochiKit.Base)=="undefined"){ -MochiKit.Base={}; -} -MochiKit.Base.VERSION="1.4"; -MochiKit.Base.NAME="MochiKit.Base"; -MochiKit.Base.update=function(_1,_2){ -if(_1===null){ -_1={}; -} -for(var i=1;i=0;i--){ -_15.unshift(o[i]); -} -}else{ -res.push(o); -} -} -return res; -},extend:function(_16,obj,_17){ -if(!_17){ -_17=0; -} -if(obj){ -var l=obj.length; -if(typeof (l)!="number"){ -if(typeof (MochiKit.Iter)!="undefined"){ -obj=MochiKit.Iter.list(obj); -l=obj.length; -}else{ -throw new TypeError("Argument not an array-like and MochiKit.Iter not present"); -} -} -if(!_16){ -_16=[]; -} -for(var i=_17;i>b; -},zrshift:function(a,b){ -return a>>>b; -},eq:function(a,b){ -return a==b; -},ne:function(a,b){ -return a!=b; -},gt:function(a,b){ -return a>b; -},ge:function(a,b){ -return a>=b; -},lt:function(a,b){ -return al){ -_42=l; -} -} -_41=[]; -for(i=0;i<_42;i++){ -var _43=[]; -for(var j=1;j=0;i--){ -_57=[_56[i].apply(this,_57)]; -} -return _57[0]; -}; -},bind:function(_58,_59){ -if(typeof (_58)=="string"){ -_58=_59[_58]; -} -var _60=_58.im_func; -var _61=_58.im_preargs; -var _62=_58.im_self; -var m=MochiKit.Base; -if(typeof (_58)=="function"&&typeof (_58.apply)=="undefined"){ -_58=m._wrapDumbFunction(_58); -} -if(typeof (_60)!="function"){ -_60=_58; -} -if(typeof (_59)!="undefined"){ -_62=_59; -} -if(typeof (_61)=="undefined"){ -_61=[]; -}else{ -_61=_61.slice(); -} -m.extend(_61,arguments,2); -var _63=function(){ -var _64=arguments; -var me=arguments.callee; -if(me.im_preargs.length>0){ -_64=m.concat(me.im_preargs,_64); -} -var _59=me.im_self; -if(!_59){ -_59=this; -} -return me.im_func.apply(_59,_64); -}; -_63.im_self=_62; -_63.im_func=_60; -_63.im_preargs=_61; -return _63; -},bindMethods:function(_65){ -var _66=MochiKit.Base.bind; -for(var k in _65){ -var _67=_65[k]; -if(typeof (_67)=="function"){ -_65[k]=_66(_67,_65); -} -} -},registerComparator:function(_68,_69,_70,_71){ -MochiKit.Base.comparatorRegistry.register(_68,_69,_70,_71); -},_primitives:{"boolean":true,"string":true,"number":true},compare:function(a,b){ -if(a==b){ -return 0; -} -var _72=(typeof (a)=="undefined"||a===null); -var _73=(typeof (b)=="undefined"||b===null); -if(_72&&_73){ -return 0; -}else{ -if(_72){ -return -1; -}else{ -if(_73){ -return 1; -} -} -} -var m=MochiKit.Base; -var _74=m._primitives; -if(!(typeof (a) in _74&&typeof (b) in _74)){ -try{ -return m.comparatorRegistry.match(a,b); -} -catch(e){ -if(e!=m.NotFound){ -throw e; -} -} -} -if(ab){ -return 1; -} -} -var _75=m.repr; -throw new TypeError(_75(a)+" and "+_75(b)+" can not be compared"); -},compareDateLike:function(a,b){ -return MochiKit.Base.compare(a.getTime(),b.getTime()); -},compareArrayLike:function(a,b){ -var _76=MochiKit.Base.compare; -var _77=a.length; -var _78=0; -if(_77>b.length){ -_78=1; -_77=b.length; -}else{ -if(_770))){ -var kv=MochiKit.DOM.formContents(_120); -_120=kv[0]; -_121=kv[1]; -}else{ -if(arguments.length==1){ -var o=_120; -_120=[]; -_121=[]; -for(var k in o){ -var v=o[k]; -if(typeof (v)!="function"){ -_120.push(k); -_121.push(v); -} -} -} -} -var rval=[]; -var len=Math.min(_120.length,_121.length); -var _124=MochiKit.Base.urlEncode; -for(var i=0;i=stop){ -throw self.StopIteration; -} -_153+=step; -return rval; -}}; -},imap:function(fun,p,q){ -var m=MochiKit.Base; -var self=MochiKit.Iter; -var _157=m.map(self.iter,m.extend(null,arguments,1)); -var map=m.map; -var next=self.next; -return {repr:function(){ -return "imap(...)"; -},toString:m.forwardCall("repr"),next:function(){ -return fun.apply(this,map(next,_157)); -}}; -},applymap:function(fun,seq,self){ -seq=MochiKit.Iter.iter(seq); -var m=MochiKit.Base; -return {repr:function(){ -return "applymap(...)"; -},toString:m.forwardCall("repr"),next:function(){ -return fun.apply(self,seq.next()); -}}; -},chain:function(p,q){ -var self=MochiKit.Iter; -var m=MochiKit.Base; -if(arguments.length==1){ -return self.iter(arguments[0]); -} -var _159=m.map(self.iter,arguments); -return {repr:function(){ -return "chain(...)"; -},toString:m.forwardCall("repr"),next:function(){ -while(_159.length>1){ -try{ -return _159[0].next(); -} -catch(e){ -if(e!=self.StopIteration){ -throw e; -} -_159.shift(); -} -} -if(_159.length==1){ -var arg=_159.shift(); -this.next=m.bind("next",arg); -return this.next(); -} -throw self.StopIteration; -}}; -},takewhile:function(pred,seq){ -var self=MochiKit.Iter; -seq=self.iter(seq); -return {repr:function(){ -return "takewhile(...)"; -},toString:MochiKit.Base.forwardCall("repr"),next:function(){ -var rval=seq.next(); -if(!pred(rval)){ -this.next=function(){ -throw self.StopIteration; -}; -this.next(); -} -return rval; -}}; -},dropwhile:function(pred,seq){ -seq=MochiKit.Iter.iter(seq); -var m=MochiKit.Base; -var bind=m.bind; -return {"repr":function(){ -return "dropwhile(...)"; -},"toString":m.forwardCall("repr"),"next":function(){ -while(true){ -var rval=seq.next(); -if(!pred(rval)){ -break; -} -} -this.next=bind("next",seq); -return rval; -}}; -},_tee:function(_161,sync,_163){ -sync.pos[_161]=-1; -var m=MochiKit.Base; -var _164=m.listMin; -return {repr:function(){ -return "tee("+_161+", ...)"; -},toString:m.forwardCall("repr"),next:function(){ -var rval; -var i=sync.pos[_161]; -if(i==sync.max){ -rval=_163.next(); -sync.deque.push(rval); -sync.max+=1; -sync.pos[_161]+=1; -}else{ -rval=sync.deque[i-sync.min]; -sync.pos[_161]+=1; -if(i==sync.min&&_164(sync.pos)!=sync.min){ -sync.min+=1; -sync.deque.shift(); -} -} -return rval; -}}; -},tee:function(_165,n){ -var rval=[]; -var sync={"pos":[],"deque":[],"max":-1,"min":-1}; -if(arguments.length==1||typeof (n)=="undefined"||n===null){ -n=2; -} -var self=MochiKit.Iter; -_165=self.iter(_165); -var _tee=self._tee; -for(var i=0;i0&&_171>=stop)||(step<0&&_171<=stop)){ -throw MochiKit.Iter.StopIteration; -} -var rval=_171; -_171+=step; -return rval; -},repr:function(){ -return "range("+[_171,stop,step].join(", ")+")"; -},toString:MochiKit.Base.forwardCall("repr")}; -},sum:function(_172,_173){ -if(typeof (_173)=="undefined"||_173===null){ -_173=0; -} -var x=_173; -var self=MochiKit.Iter; -_172=self.iter(_172); -try{ -while(true){ -x+=_172.next(); -} -} -catch(e){ -if(e!=self.StopIteration){ -throw e; -} -} -return x; -},exhaust:function(_174){ -var self=MochiKit.Iter; -_174=self.iter(_174); -try{ -while(true){ -_174.next(); -} -} -catch(e){ -if(e!=self.StopIteration){ -throw e; -} -} -},forEach:function(_175,func,self){ -var m=MochiKit.Base; -if(arguments.length>2){ -func=m.bind(func,self); -} -if(m.isArrayLike(_175)){ -try{ -for(var i=0;i<_175.length;i++){ -func(_175[i]); -} -} -catch(e){ -if(e!=MochiKit.Iter.StopIteration){ -throw e; -} -} -}else{ -self=MochiKit.Iter; -self.exhaust(self.imap(func,_175)); -} -},every:function(_176,func){ -var self=MochiKit.Iter; -try{ -self.ifilterfalse(func,_176).next(); -return false; -} -catch(e){ -if(e!=self.StopIteration){ -throw e; -} -return true; -} -},sorted:function(_177,cmp){ -var rval=MochiKit.Iter.list(_177); -if(arguments.length==1){ -cmp=MochiKit.Base.compare; -} -rval.sort(cmp); -return rval; -},reversed:function(_178){ -var rval=MochiKit.Iter.list(_178); -rval.reverse(); -return rval; -},some:function(_179,func){ -var self=MochiKit.Iter; -try{ -self.ifilter(func,_179).next(); -return true; -} -catch(e){ -if(e!=self.StopIteration){ -throw e; -} -return false; -} -},iextend:function(lst,_180){ -if(MochiKit.Base.isArrayLike(_180)){ -for(var i=0;i<_180.length;i++){ -lst.push(_180[i]); -} -}else{ -var self=MochiKit.Iter; -_180=self.iter(_180); -try{ -while(true){ -lst.push(_180.next()); -} -} -catch(e){ -if(e!=self.StopIteration){ -throw e; -} -} -} -return lst; -},groupby:function(_181,_182){ -var m=MochiKit.Base; -var self=MochiKit.Iter; -if(arguments.length<2){ -_182=m.operator.identity; -} -_181=self.iter(_181); -var pk=undefined; -var k=undefined; -var v; -function fetch(){ -v=_181.next(); -k=_182(v); -} -function eat(){ -var ret=v; -v=undefined; -return ret; -} -var _185=true; -return {repr:function(){ -return "groupby(...)"; -},next:function(){ -while(k==pk){ -fetch(); -if(_185){ -_185=false; -break; -} -} -pk=k; -return [k,{next:function(){ -if(v==undefined){ -fetch(); -} -if(k!=pk){ -throw self.StopIteration; -} -return eat(); -}}]; -}}; -},groupby_as_array:function(_186,_187){ -var m=MochiKit.Base; -var self=MochiKit.Iter; -if(arguments.length<2){ -_187=m.operator.identity; -} -_186=self.iter(_186); -var _188=[]; -var _189=true; -var _190; -while(true){ -try{ -var _191=_186.next(); -var key=_187(_191); -} -catch(e){ -if(e==self.StopIteration){ -break; -} -throw e; -} -if(_189||key!=_190){ -var _192=[]; -_188.push([key,_192]); -} -_192.push(_191); -_189=false; -_190=key; -} -return _188; -},arrayLikeIter:function(_193){ -var i=0; -return {repr:function(){ -return "arrayLikeIter(...)"; -},toString:MochiKit.Base.forwardCall("repr"),next:function(){ -if(i>=_193.length){ -throw MochiKit.Iter.StopIteration; -} -return _193[i++]; -}}; -},hasIterateNext:function(_194){ -return (_194&&typeof (_194.iterateNext)=="function"); -},iterateNextIter:function(_195){ -return {repr:function(){ -return "iterateNextIter(...)"; -},toString:MochiKit.Base.forwardCall("repr"),next:function(){ -var rval=_195.iterateNext(); -if(rval===null||rval===undefined){ -throw MochiKit.Iter.StopIteration; -} -return rval; -}}; -}}); -MochiKit.Iter.EXPORT_OK=["iteratorRegistry","arrayLikeIter","hasIterateNext","iterateNextIter",]; -MochiKit.Iter.EXPORT=["StopIteration","registerIteratorFactory","iter","count","cycle","repeat","next","izip","ifilter","ifilterfalse","islice","imap","applymap","chain","takewhile","dropwhile","tee","list","reduce","range","sum","exhaust","forEach","every","sorted","reversed","some","iextend","groupby","groupby_as_array"]; -MochiKit.Iter.__new__=function(){ -var m=MochiKit.Base; -if(typeof (StopIteration)!="undefined"){ -this.StopIteration=StopIteration; -}else{ -this.StopIteration=new m.NamedError("StopIteration"); -} -this.iteratorRegistry=new m.AdapterRegistry(); -this.registerIteratorFactory("arrayLike",m.isArrayLike,this.arrayLikeIter); -this.registerIteratorFactory("iterateNext",this.hasIterateNext,this.iterateNextIter); -this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; -m.nameFunctions(this); -}; -MochiKit.Iter.__new__(); -if(MochiKit.__export__){ -reduce=MochiKit.Iter.reduce; -} -MochiKit.Base._exportSymbols(this,MochiKit.Iter); -if(typeof (dojo)!="undefined"){ -dojo.provide("MochiKit.Logging"); -dojo.require("MochiKit.Base"); -} -if(typeof (JSAN)!="undefined"){ -JSAN.use("MochiKit.Base",[]); -} -try{ -if(typeof (MochiKit.Base)=="undefined"){ -throw ""; -} -} -catch(e){ -throw "MochiKit.Logging depends on MochiKit.Base!"; -} -if(typeof (MochiKit.Logging)=="undefined"){ -MochiKit.Logging={}; -} -MochiKit.Logging.NAME="MochiKit.Logging"; -MochiKit.Logging.VERSION="1.4"; -MochiKit.Logging.__repr__=function(){ -return "["+this.NAME+" "+this.VERSION+"]"; -}; -MochiKit.Logging.toString=function(){ -return this.__repr__(); -}; -MochiKit.Logging.EXPORT=["LogLevel","LogMessage","Logger","alertListener","logger","log","logError","logDebug","logFatal","logWarning"]; -MochiKit.Logging.EXPORT_OK=["logLevelAtLeast","isLogMessage","compareLogMessage"]; -MochiKit.Logging.LogMessage=function(num,_197,info){ -this.num=num; -this.level=_197; -this.info=info; -this.timestamp=new Date(); -}; -MochiKit.Logging.LogMessage.prototype={repr:function(){ -var m=MochiKit.Base; -return "LogMessage("+m.map(m.repr,[this.num,this.level,this.info]).join(", ")+")"; -},toString:MochiKit.Base.forwardCall("repr")}; -MochiKit.Base.update(MochiKit.Logging,{logLevelAtLeast:function(_199){ -var self=MochiKit.Logging; -if(typeof (_199)=="string"){ -_199=self.LogLevel[_199]; -} -return function(msg){ -var _201=msg.level; -if(typeof (_201)=="string"){ -_201=self.LogLevel[_201]; -} -return _201>=_199; -}; -},isLogMessage:function(){ -var _202=MochiKit.Logging.LogMessage; -for(var i=0;i=0&&this._messages.length>this.maxSize){ -this._messages.shift(); -} -},getMessages:function(_211){ -var _212=0; -if(!(typeof (_211)=="undefined"||_211===null)){ -_212=Math.max(0,this._messages.length-_211); -} -return this._messages.slice(_212); -},getMessageText:function(_213){ -if(typeof (_213)=="undefined"||_213===null){ -_213=30; -} -var _214=this.getMessages(_213); -if(_214.length){ -var lst=map(function(m){ -return "\n ["+m.num+"] "+m.level+": "+m.info.join(" "); -},_214); -lst.unshift("LAST "+_214.length+" MESSAGES:"); -return lst.join(""); -} -return ""; -},debuggingBookmarklet:function(_215){ -if(typeof (MochiKit.LoggingPane)=="undefined"){ -alert(this.getMessageText()); -}else{ -MochiKit.LoggingPane.createLoggingPane(_215||false); -} -}}; -MochiKit.Logging.__new__=function(){ -this.LogLevel={ERROR:40,FATAL:50,WARNING:30,INFO:20,DEBUG:10}; -var m=MochiKit.Base; -m.registerComparator("LogMessage",this.isLogMessage,this.compareLogMessage); -var _216=m.partial; -var _217=this.Logger; -var _218=_217.prototype.baseLog; -m.update(this.Logger.prototype,{debug:_216(_218,"DEBUG"),log:_216(_218,"INFO"),error:_216(_218,"ERROR"),fatal:_216(_218,"FATAL"),warning:_216(_218,"WARNING")}); -var self=this; -var _219=function(name){ -return function(){ -self.logger[name].apply(self.logger,arguments); -}; -}; -this.log=_219("log"); -this.logError=_219("error"); -this.logDebug=_219("debug"); -this.logFatal=_219("fatal"); -this.logWarning=_219("warning"); -this.logger=new _217(); -this.logger.useNativeConsole=true; -this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; -m.nameFunctions(this); -}; -if(typeof (printfire)=="undefined"&&typeof (document)!="undefined"&&document.createEvent&&typeof (dispatchEvent)!="undefined"){ -printfire=function(){ -printfire.args=arguments; -var ev=document.createEvent("Events"); -ev.initEvent("printfire",false,true); -dispatchEvent(ev); -}; -} -MochiKit.Logging.__new__(); -MochiKit.Base._exportSymbols(this,MochiKit.Logging); -if(typeof (dojo)!="undefined"){ -dojo.provide("MochiKit.DateTime"); -} -if(typeof (MochiKit)=="undefined"){ -MochiKit={}; -} -if(typeof (MochiKit.DateTime)=="undefined"){ -MochiKit.DateTime={}; -} -MochiKit.DateTime.NAME="MochiKit.DateTime"; -MochiKit.DateTime.VERSION="1.4"; -MochiKit.DateTime.__repr__=function(){ -return "["+this.NAME+" "+this.VERSION+"]"; -}; -MochiKit.DateTime.toString=function(){ -return this.__repr__(); -}; -MochiKit.DateTime.isoDate=function(str){ -str=str+""; -if(typeof (str)!="string"||str.length===0){ -return null; -} -var iso=str.split("-"); -if(iso.length===0){ -return null; -} -return new Date(iso[0],iso[1]-1,iso[2]); -}; -MochiKit.DateTime._isoRegexp=/(\d{4,})(?:-(\d{1,2})(?:-(\d{1,2})(?:[T ](\d{1,2}):(\d{1,2})(?::(\d{1,2})(?:\.(\d+))?)?(?:(Z)|([+-])(\d{1,2})(?::(\d{1,2}))?)?)?)?)?/; -MochiKit.DateTime.isoTimestamp=function(str){ -str=str+""; -if(typeof (str)!="string"||str.length===0){ -return null; -} -var res=str.match(MochiKit.DateTime._isoRegexp); -if(typeof (res)=="undefined"||res===null){ -return null; -} -var year,month,day,hour,min,sec,msec; -year=parseInt(res[1],10); -if(typeof (res[2])=="undefined"||res[2]===""){ -return new Date(year); -} -month=parseInt(res[2],10)-1; -day=parseInt(res[3],10); -if(typeof (res[4])=="undefined"||res[4]===""){ -return new Date(year,month,day); -} -hour=parseInt(res[4],10); -min=parseInt(res[5],10); -sec=(typeof (res[6])!="undefined"&&res[6]!=="")?parseInt(res[6],10):0; -if(typeof (res[7])!="undefined"&&res[7]!==""){ -msec=Math.round(1000*parseFloat("0."+res[7])); -}else{ -msec=0; -} -if((typeof (res[8])=="undefined"||res[8]==="")&&(typeof (res[9])=="undefined"||res[9]==="")){ -return new Date(year,month,day,hour,min,sec,msec); -} -var ofs; -if(typeof (res[9])!="undefined"&&res[9]!==""){ -ofs=parseInt(res[10],10)*3600000; -if(typeof (res[11])!="undefined"&&res[11]!==""){ -ofs+=parseInt(res[11],10)*60000; -} -if(res[9]=="-"){ -ofs=-ofs; -} -}else{ -ofs=0; -} -return new Date(Date.UTC(year,month,day,hour,min,sec,msec)-ofs); -}; -MochiKit.DateTime.toISOTime=function(date,_226){ -if(typeof (date)=="undefined"||date===null){ -return null; -} -var hh=date.getHours(); -var mm=date.getMinutes(); -var ss=date.getSeconds(); -var lst=[((_226&&(hh<10))?"0"+hh:hh),((mm<10)?"0"+mm:mm),((ss<10)?"0"+ss:ss)]; -return lst.join(":"); -}; -MochiKit.DateTime.toISOTimestamp=function(date,_230){ -if(typeof (date)=="undefined"||date===null){ -return null; -} -var sep=_230?"T":" "; -var foot=_230?"Z":""; -if(_230){ -date=new Date(date.getTime()+(date.getTimezoneOffset()*60000)); -} -return MochiKit.DateTime.toISODate(date)+sep+MochiKit.DateTime.toISOTime(date,_230)+foot; -}; -MochiKit.DateTime.toISODate=function(date){ -if(typeof (date)=="undefined"||date===null){ -return null; -} -var _233=MochiKit.DateTime._padTwo; -return [date.getFullYear(),_233(date.getMonth()+1),_233(date.getDate())].join("-"); -}; -MochiKit.DateTime.americanDate=function(d){ -d=d+""; -if(typeof (d)!="string"||d.length===0){ -return null; -} -var a=d.split("/"); -return new Date(a[2],a[0]-1,a[1]); -}; -MochiKit.DateTime._padTwo=function(n){ -return (n>9)?n:"0"+n; -}; -MochiKit.DateTime.toPaddedAmericanDate=function(d){ -if(typeof (d)=="undefined"||d===null){ -return null; -} -var _235=MochiKit.DateTime._padTwo; -return [_235(d.getMonth()+1),_235(d.getDate()),d.getFullYear()].join("/"); -}; -MochiKit.DateTime.toAmericanDate=function(d){ -if(typeof (d)=="undefined"||d===null){ -return null; -} -return [d.getMonth()+1,d.getDate(),d.getFullYear()].join("/"); -}; -MochiKit.DateTime.EXPORT=["isoDate","isoTimestamp","toISOTime","toISOTimestamp","toISODate","americanDate","toPaddedAmericanDate","toAmericanDate"]; -MochiKit.DateTime.EXPORT_OK=[]; -MochiKit.DateTime.EXPORT_TAGS={":common":MochiKit.DateTime.EXPORT,":all":MochiKit.DateTime.EXPORT}; -MochiKit.DateTime.__new__=function(){ -var base=this.NAME+"."; -for(var k in this){ -var o=this[k]; -if(typeof (o)=="function"&&typeof (o.NAME)=="undefined"){ -try{ -o.NAME=base+k; -} -catch(e){ -} -} -} -}; -MochiKit.DateTime.__new__(); -if(typeof (MochiKit.Base)!="undefined"){ -MochiKit.Base._exportSymbols(this,MochiKit.DateTime); -}else{ -(function(_236,_237){ -if((typeof (JSAN)=="undefined"&&typeof (dojo)=="undefined")||(MochiKit.__export__===false)){ -var all=_237.EXPORT_TAGS[":all"]; -for(var i=0;i_245){ -var i=_251.length-_245; -res=fmt.separator+_251.substring(i,_251.length)+res; -_251=_251.substring(0,i); -} -} -res=_251+res; -if(_243>0){ -while(frac.length<_246){ -frac=frac+"0"; -} -res=res+fmt.decimal+frac; -} -return _247+res+_248; -}; -}; -MochiKit.Format.numberFormatter=function(_253,_254,_255){ -if(typeof (_254)=="undefined"){ -_254=""; -} -var _256=_253.match(/((?:[0#]+,)?[0#]+)(?:\.([0#]+))?(%)?/); -if(!_256){ -throw TypeError("Invalid pattern"); -} -var _257=_253.substr(0,_256.index); -var _258=_253.substr(_256.index+_256[0].length); -if(_257.search(/-/)==-1){ -_257=_257+"-"; -} -var _259=_256[1]; -var frac=(typeof (_256[2])=="string"&&_256[2]!="")?_256[2]:""; -var _260=(typeof (_256[3])=="string"&&_256[3]!=""); -var tmp=_259.split(/,/); -var _262; -if(typeof (_255)=="undefined"){ -_255="default"; -} -if(tmp.length==1){ -_262=null; -}else{ -_262=tmp[1].length; -} -var _263=_259.length-_259.replace(/0/g,"").length; -var _264=frac.length-frac.replace(/0/g,"").length; -var _265=frac.length; -var rval=MochiKit.Format._numberFormatter(_254,_257,_258,_255,_260,_265,_263,_262,_264); -var m=MochiKit.Base; -if(m){ -var fn=arguments.callee; -var args=m.concat(arguments); -rval.repr=function(){ -return [self.NAME,"(",map(m.repr,args).join(", "),")"].join(""); -}; -} -return rval; -}; -MochiKit.Format.formatLocale=function(_267){ -if(typeof (_267)=="undefined"||_267===null){ -_267="default"; -} -if(typeof (_267)=="string"){ -var rval=MochiKit.Format.LOCALE[_267]; -if(typeof (rval)=="string"){ -rval=arguments.callee(rval); -MochiKit.Format.LOCALE[_267]=rval; -} -return rval; -}else{ -return _267; -} -}; -MochiKit.Format.twoDigitAverage=function(_268,_269){ -if(_269){ -var res=_268/_269; -if(!isNaN(res)){ -return MochiKit.Format.twoDigitFloat(_268/_269); -} -} -return "0"; -}; -MochiKit.Format.twoDigitFloat=function(_270){ -var sign=(_270<0?"-":""); -var s=Math.floor(Math.abs(_270)*100).toString(); -if(s=="0"){ -return s; -} -if(s.length<3){ -while(s.charAt(s.length-1)=="0"){ -s=s.substring(0,s.length-1); -} -return sign+"0."+s; -} -var head=sign+s.substring(0,s.length-2); -var tail=s.substring(s.length-2,s.length); -if(tail=="00"){ -return head; -}else{ -if(tail.charAt(1)=="0"){ -return head+"."+tail.charAt(0); -}else{ -return head+"."+tail; -} -} -}; -MochiKit.Format.lstrip=function(str,_275){ -str=str+""; -if(typeof (str)!="string"){ -return null; -} -if(!_275){ -return str.replace(/^\s+/,""); -}else{ -return str.replace(new RegExp("^["+_275+"]+"),""); -} -}; -MochiKit.Format.rstrip=function(str,_276){ -str=str+""; -if(typeof (str)!="string"){ -return null; -} -if(!_276){ -return str.replace(/\s+$/,""); -}else{ -return str.replace(new RegExp("["+_276+"]+$"),""); -} -}; -MochiKit.Format.strip=function(str,_277){ -var self=MochiKit.Format; -return self.rstrip(self.lstrip(str,_277),_277); -}; -MochiKit.Format.truncToFixed=function(_278,_279){ -_278=Math.floor(_278*Math.pow(10,_279)); -var res=(_278*Math.pow(10,-_279)).toFixed(_279); -if(res.charAt(0)=="."){ -res="0"+res; -} -return res; -}; -MochiKit.Format.roundToFixed=function(_280,_281){ -return MochiKit.Format.truncToFixed(_280+0.5*Math.pow(10,-_281),_281); -}; -MochiKit.Format.percentFormat=function(_282){ -return MochiKit.Format.twoDigitFloat(100*_282)+"%"; -}; -MochiKit.Format.EXPORT=["truncToFixed","roundToFixed","numberFormatter","formatLocale","twoDigitAverage","twoDigitFloat","percentFormat","lstrip","rstrip","strip"]; -MochiKit.Format.LOCALE={en_US:{separator:",",decimal:".",percent:"%"},de_DE:{separator:".",decimal:",",percent:"%"},fr_FR:{separator:" ",decimal:",",percent:"%"},"default":"en_US"}; -MochiKit.Format.EXPORT_OK=[]; -MochiKit.Format.EXPORT_TAGS={":all":MochiKit.Format.EXPORT,":common":MochiKit.Format.EXPORT}; -MochiKit.Format.__new__=function(){ -var base=this.NAME+"."; -var k,v,o; -for(k in this.LOCALE){ -o=this.LOCALE[k]; -if(typeof (o)=="object"){ -o.repr=function(){ -return this.NAME; -}; -o.NAME=base+"LOCALE."+k; -} -} -for(k in this){ -o=this[k]; -if(typeof (o)=="function"&&typeof (o.NAME)=="undefined"){ -try{ -o.NAME=base+k; -} -catch(e){ -} -} -} -}; -MochiKit.Format.__new__(); -if(typeof (MochiKit.Base)!="undefined"){ -MochiKit.Base._exportSymbols(this,MochiKit.Format); -}else{ -(function(_283,_284){ -if((typeof (JSAN)=="undefined"&&typeof (dojo)=="undefined")||(MochiKit.__export__===false)){ -var all=_284.EXPORT_TAGS[":all"]; -for(var i=0;i1){ -fn=MochiKit.Base.partial.apply(null,arguments); -} -return this.addCallbacks(fn,fn); -},addCallback:function(fn){ -if(arguments.length>1){ -fn=MochiKit.Base.partial.apply(null,arguments); -} -return this.addCallbacks(fn,null); -},addErrback:function(fn){ -if(arguments.length>1){ -fn=MochiKit.Base.partial.apply(null,arguments); -} -return this.addCallbacks(null,fn); -},addCallbacks:function(cb,eb){ -if(this.chained){ -throw new Error("Chained Deferreds can not be re-used"); -} -this.chain.push([cb,eb]); -if(this.fired>=0){ -this._fire(); -} -return this; -},_fire:function(){ -var _289=this.chain; -var _290=this.fired; -var res=this.results[_290]; -var self=this; -var cb=null; -while(_289.length>0&&this.paused===0){ -var pair=_289.shift(); -var f=pair[_290]; -if(f===null){ -continue; -} -try{ -res=f(res); -_290=((res instanceof Error)?1:0); -if(res instanceof MochiKit.Async.Deferred){ -cb=function(res){ -self._resback(res); -self.paused--; -if((self.paused===0)&&(self.fired>=0)){ -self._fire(); -} -}; -this.paused++; -} -} -catch(err){ -_290=1; -if(!(err instanceof Error)){ -err=new MochiKit.Async.GenericError(err); -} -res=err; -} -} -this.fired=_290; -this.results[_290]=res; -if(cb&&this.paused){ -res.addBoth(cb); -res.chained=true; -} -}}; -MochiKit.Base.update(MochiKit.Async,{evalJSONRequest:function(){ -return eval("("+arguments[0].responseText+")"); -},succeed:function(_292){ -var d=new MochiKit.Async.Deferred(); -d.callback.apply(d,arguments); -return d; -},fail:function(_293){ -var d=new MochiKit.Async.Deferred(); -d.errback.apply(d,arguments); -return d; -},getXMLHttpRequest:function(){ -var self=arguments.callee; -if(!self.XMLHttpRequest){ -var _294=[function(){ -return new XMLHttpRequest(); -},function(){ -return new ActiveXObject("Msxml2.XMLHTTP"); -},function(){ -return new ActiveXObject("Microsoft.XMLHTTP"); -},function(){ -return new ActiveXObject("Msxml2.XMLHTTP.4.0"); -},function(){ -throw new MochiKit.Async.BrowserComplianceError("Browser does not support XMLHttpRequest"); -}]; -for(var i=0;i<_294.length;i++){ -var func=_294[i]; -try{ -self.XMLHttpRequest=func; -return func(); -} -catch(e){ -} -} -} -return self.XMLHttpRequest(); -},_xhr_onreadystatechange:function(d){ -var m=MochiKit.Base; -if(this.readyState==4){ -try{ -this.onreadystatechange=null; -} -catch(e){ -try{ -this.onreadystatechange=m.noop; -} -catch(e){ -} -} -var _295=null; -try{ -_295=this.status; -if(!_295&&m.isNotEmpty(this.responseText)){ -_295=304; -} -} -catch(e){ -} -if(_295==200||_295==304){ -d.callback(this); -}else{ -var err=new MochiKit.Async.XMLHttpRequestError(this,"Request failed"); -if(err.number){ -d.errback(err); -}else{ -d.errback(err); -} -} -} -},_xhr_canceller:function(req){ -try{ -req.onreadystatechange=null; -} -catch(e){ -try{ -req.onreadystatechange=MochiKit.Base.noop; -} -catch(e){ -} -} -req.abort(); -},sendXMLHttpRequest:function(req,_298){ -if(typeof (_298)=="undefined"||_298===null){ -_298=""; -} -var m=MochiKit.Base; -var self=MochiKit.Async; -var d=new self.Deferred(m.partial(self._xhr_canceller,req)); -try{ -req.onreadystatechange=m.bind(self._xhr_onreadystatechange,req,d); -req.send(_298); -} -catch(e){ -try{ -req.onreadystatechange=null; -} -catch(ignore){ -} -d.errback(e); -} -return d; -},doSimpleXMLHttpRequest:function(url){ -var self=MochiKit.Async; -var req=self.getXMLHttpRequest(); -if(arguments.length>1){ -var m=MochiKit.Base; -var qs=m.queryString.apply(null,m.extend(null,arguments,1)); -if(qs){ -url+="?"+qs; -} -} -req.open("GET",url,true); -return self.sendXMLHttpRequest(req); -},loadJSONDoc:function(url){ -var self=MochiKit.Async; -var d=self.doSimpleXMLHttpRequest.apply(self,arguments); -d=d.addCallback(self.evalJSONRequest); -return d; -},wait:function(_301,_302){ -var d=new MochiKit.Async.Deferred(); -var m=MochiKit.Base; -if(typeof (_302)!="undefined"){ -d.addCallback(function(){ -return _302; -}); -} -var _303=setTimeout(m.bind("callback",d),Math.floor(_301*1000)); -d.canceller=function(){ -try{ -clearTimeout(_303); -} -catch(e){ -} -}; -return d; -},callLater:function(_304,func){ -var m=MochiKit.Base; -var _305=m.partial.apply(m,m.extend(null,arguments,1)); -return MochiKit.Async.wait(_304).addCallback(function(res){ -return _305(); -}); -}}); -MochiKit.Async.DeferredLock=function(){ -this.waiting=[]; -this.locked=false; -this.id=this._nextId(); -}; -MochiKit.Async.DeferredLock.prototype={__class__:MochiKit.Async.DeferredLock,acquire:function(){ -d=new MochiKit.Async.Deferred(); -if(this.locked){ -this.waiting.push(d); -}else{ -this.locked=true; -d.callback(this); -} -return d; -},release:function(){ -if(!this.locked){ -throw TypeError("Tried to release an unlocked DeferredLock"); -} -this.locked=false; -if(this.waiting.length>0){ -this.locked=true; -this.waiting.shift().callback(this); -} -},_nextId:MochiKit.Base.counter(),repr:function(){ -var _306; -if(this.locked){ -_306="locked, "+this.waiting.length+" waiting"; -}else{ -_306="unlocked"; -} -return "DeferredLock("+this.id+", "+_306+")"; -},toString:MochiKit.Base.forwardCall("repr")}; -MochiKit.Async.DeferredList=function(list,_308,_309,_310,_311){ -MochiKit.Async.Deferred.apply(this,[_311]); -this.list=list; -var _312=[]; -this.resultList=_312; -this.finishedCount=0; -this.fireOnOneCallback=_308; -this.fireOnOneErrback=_309; -this.consumeErrors=_310; -var cb=MochiKit.Base.bind(this._cbDeferred,this); -for(var i=0;i=0){ -var opt=elem.options[elem.selectedIndex]; -_326.push(name); -_327.push((opt.value)?opt.value:opt.text); -return null; -} -_326.push(name); -_327.push(""); -return null; -}else{ -var opts=elem.options; -if(!opts.length){ -_326.push(name); -_327.push(""); -return null; -} -for(var i=0;i0){ -return node; -} -if(typeof (node)=="number"||typeof (node)=="boolean"){ -node=node.toString(); -} -if(typeof (node)=="string"){ -return self._document.createTextNode(node); -} -if(typeof (node.__dom__)=="function"){ -node=node.__dom__(ctx); -continue; -} -if(typeof (node.dom)=="function"){ -node=node.dom(ctx); -continue; -} -if(typeof (node)=="function"){ -node=node.apply(ctx,[ctx]); -continue; -} -if(im){ -var _342=null; -try{ -_342=iter(node); -} -catch(e){ -} -if(_342){ -return map(_340,_342,_338(ctx)); -} -} -try{ -node=_339.match(node,ctx); -continue; -} -catch(e){ -if(e!=_341){ -throw e; -} -} -return self._document.createTextNode(node.toString()); -} -return undefined; -},setNodeAttribute:function(node,attr,_344){ -var o={}; -o[attr]=_344; -try{ -return MochiKit.DOM.updateNodeAttributes(node,o); -} -catch(e){ -} -return null; -},getNodeAttribute:function(node,attr){ -var self=MochiKit.DOM; -var _345=self.attributeArray.renames[attr]; -node=self.getElement(node); -try{ -if(_345){ -return node[_345]; -} -return node.getAttribute(attr); -} -catch(e){ -} -return null; -},updateNodeAttributes:function(node,_346){ -var elem=node; -var self=MochiKit.DOM; -if(typeof (node)=="string"){ -elem=self.getElement(node); -} -if(_346){ -var _347=MochiKit.Base.updatetree; -if(self.attributeArray.compliant){ -for(var k in _346){ -var v=_346[k]; -if(typeof (v)=="object"&&typeof (elem[k])=="object"){ -_347(elem[k],v); -}else{ -if(k.substring(0,2)=="on"){ -if(typeof (v)=="string"){ -v=new Function(v); -} -elem[k]=v; -}else{ -elem.setAttribute(k,v); -} -} -} -}else{ -var _348=self.attributeArray.renames; -for(k in _346){ -v=_346[k]; -var _349=_348[k]; -if(k=="style"&&typeof (v)=="string"){ -elem.style.cssText=v; -}else{ -if(typeof (_349)=="string"){ -elem[_349]=v; -}else{ -if(typeof (elem[k])=="object"&&typeof (v)=="object"){ -_347(elem[k],v); -}else{ -if(k.substring(0,2)=="on"){ -if(typeof (v)=="string"){ -v=new Function(v); -} -elem[k]=v; -}else{ -elem.setAttribute(k,v); -} -} -} -} -} -} -} -return elem; -},appendChildNodes:function(node){ -var elem=node; -var self=MochiKit.DOM; -if(typeof (node)=="string"){ -elem=self.getElement(node); -} -var _350=[self.coerceToDOM(MochiKit.Base.extend(null,arguments,1),elem)]; -var _351=MochiKit.Base.concat; -while(_350.length){ -var n=_350.shift(); -if(typeof (n)=="undefined"||n===null){ -}else{ -if(typeof (n.nodeType)=="number"){ -elem.appendChild(n); -}else{ -_350=_351(n,_350); -} -} -} -return elem; -},replaceChildNodes:function(node){ -var elem=node; -var self=MochiKit.DOM; -if(typeof (node)=="string"){ -elem=self.getElement(node); -arguments[0]=elem; -} -var _352; -while((_352=elem.firstChild)){ -elem.removeChild(_352); -} -if(arguments.length<2){ -return elem; -}else{ -return self.appendChildNodes.apply(this,arguments); -} -},createDOM:function(name,_353){ -var elem; -var self=MochiKit.DOM; -var m=MochiKit.Base; -if(typeof (_353)=="string"||typeof (_353)=="number"){ -var args=m.extend([name,null],arguments,1); -return arguments.callee.apply(this,args); -} -if(typeof (name)=="string"){ -if(_353&&!self.attributeArray.compliant){ -var _354=""; -if("name" in _353){ -_354+=" name=\""+self.escapeHTML(_353.name)+"\""; -} -if(name=="input"&&"type" in _353){ -_354+=" type=\""+self.escapeHTML(_353.type)+"\""; -} -if(_354){ -name="<"+name+_354+">"; -} -} -elem=self._document.createElement(name); -}else{ -elem=name; -} -if(_353){ -self.updateNodeAttributes(elem,_353); -} -if(arguments.length<=2){ -return elem; -}else{ -var args=m.extend([elem],arguments,2); -return self.appendChildNodes.apply(this,args); -} -},createDOMFunc:function(){ -var m=MochiKit.Base; -return m.partial.apply(this,m.extend([MochiKit.DOM.createDOM],arguments)); -},removeElement:function(elem){ -var e=MochiKit.DOM.getElement(elem); -e.parentNode.removeChild(e); -return e; -},swapDOM:function(dest,src){ -var self=MochiKit.DOM; -dest=self.getElement(dest); -var _357=dest.parentNode; -if(src){ -src=self.getElement(src); -_357.replaceChild(src,dest); -}else{ -_357.removeChild(dest); -} -return src; -},getElement:function(id){ -var self=MochiKit.DOM; -if(arguments.length==1){ -return ((typeof (id)=="string")?self._document.getElementById(id):id); -}else{ -return MochiKit.Base.map(self.getElement,arguments); -} -},getElementsByTagAndClassName:function(_359,_360,_361){ -var self=MochiKit.DOM; -if(typeof (_359)=="undefined"||_359===null){ -_359="*"; -} -if(typeof (_361)=="undefined"||_361===null){ -_361=self._document; -} -_361=self.getElement(_361); -var _362=(_361.getElementsByTagName(_359)||self._document.all); -if(typeof (_360)=="undefined"||_360===null){ -return MochiKit.Base.extend(null,_362); -} -var _363=[]; -for(var i=0;i<_362.length;i++){ -var _364=_362[i]; -var _365=_364.className.split(" "); -for(var j=0;j<_365.length;j++){ -if(_365[j]==_360){ -_363.push(_364); -break; -} -} -} -return _363; -},_newCallStack:function(path,once){ -var rval=function(){ -var _368=arguments.callee.callStack; -for(var i=0;i<_368.length;i++){ -if(_368[i].apply(this,arguments)===false){ -break; -} -} -if(once){ -try{ -this[path]=null; -} -catch(e){ -} -} -}; -rval.callStack=[]; -return rval; -},addToCallStack:function(_369,path,func,once){ -var self=MochiKit.DOM; -var _370=_369[path]; -var _371=_370; -if(!(typeof (_370)=="function"&&typeof (_370.callStack)=="object"&&_370.callStack!==null)){ -_371=self._newCallStack(path,once); -if(typeof (_370)=="function"){ -_371.callStack.push(_370); -} -_369[path]=_371; -} -_371.callStack.push(func); -},addLoadEvent:function(func){ -var self=MochiKit.DOM; -self.addToCallStack(self._window,"onload",func,true); -},focusOnLoad:function(_372){ -var self=MochiKit.DOM; -self.addLoadEvent(function(){ -_372=self.getElement(_372); -if(_372){ -_372.focus(); -} -}); -},setElementClass:function(_373,_374){ -var self=MochiKit.DOM; -var obj=self.getElement(_373); -if(self.attributeArray.compliant){ -obj.setAttribute("class",_374); -}else{ -obj.setAttribute("className",_374); -} -},toggleElementClass:function(_375){ -var self=MochiKit.DOM; -for(var i=1;i/g,">"); -},toHTML:function(dom){ -return MochiKit.DOM.emitHTML(dom).join(""); -},emitHTML:function(dom,lst){ -if(typeof (lst)=="undefined"||lst===null){ -lst=[]; -} -var _391=[dom]; -var self=MochiKit.DOM; -var _392=self.escapeHTML; -var _393=self.attributeArray; -while(_391.length){ -dom=_391.pop(); -if(typeof (dom)=="string"){ -lst.push(dom); -}else{ -if(dom.nodeType==1){ -lst.push("<"+dom.nodeName.toLowerCase()); -var _394=[]; -var _395=_393(dom); -for(var i=0;i<_395.length;i++){ -var a=_395[i]; -_394.push([" ",a.name,"=\"",_392(a.value),"\""]); -} -_394.sort(); -for(i=0;i<_394.length;i++){ -var _396=_394[i]; -for(var j=0;j<_396.length;j++){ -lst.push(_396[j]); -} -} -if(dom.hasChildNodes()){ -lst.push(">"); -_391.push(""); -var _397=dom.childNodes; -for(i=_397.length-1;i>=0;i--){ -_391.push(_397[i]); -} -}else{ -lst.push("/>"); -} -}else{ -if(dom.nodeType==3){ -lst.push(_392(dom.nodeValue)); -} -} -} -} -return lst; -},scrapeText:function(node,_398){ -var rval=[]; -(function(node){ -var cn=node.childNodes; -if(cn){ -for(var i=0;i0){ -var _404=m.filter; -_403=function(node){ -return _404(_403.ignoreAttrFilter,node.attributes); -}; -_403.ignoreAttr={}; -var _405=_402.attributes; -var _406=_403.ignoreAttr; -for(var i=0;i<_405.length;i++){ -var a=_405[i]; -_406[a.name]=a.value; -} -_403.ignoreAttrFilter=function(a){ -return (_403.ignoreAttr[a.name]!=a.value); -}; -_403.compliant=false; -_403.renames={"class":"className","checked":"defaultChecked","usemap":"useMap","for":"htmlFor","readonly":"readOnly"}; -}else{ -_403=function(node){ -return node.attributes; -}; -_403.compliant=true; -_403.renames={}; -} -this.attributeArray=_403; -var _407=function(_408,arr){ -var _409=arr[1].split("."); -var str=""; -var obj={}; -str+="if (!MochiKit."+_409[1]+") { throw new Error(\""; -str+="This function has been deprecated and depends on MochiKit."; -str+=_409[1]+".\");}"; -str+="return MochiKit."+_409[1]+"."+arr[0]; -str+=".apply(this, arguments);"; -obj[_409[2]]=new Function(str); -MochiKit.Base.update(MochiKit[_408],obj); -}; -for(var i;i<&-]/g,"_"); -var name=uid+"_"+url; -var nwin=win.open("",name,"dependent,resizable,height=200"); -if(!nwin){ -alert("Not able to open debugging window due to pop-up blocking."); -return undefined; -} -nwin.document.write(""+"[MochiKit.LoggingPane]"+""); -nwin.document.close(); -nwin.document.title+=" "+win.document.title; -win=nwin; -} -var doc=win.document; -this.doc=doc; -var _444=doc.getElementById(uid); -var _445=!!_444; -if(_444&&typeof (_444.loggingPane)!="undefined"){ -_444.loggingPane.logger=this.logger; -_444.loggingPane.buildAndApplyFilter(); -return _444.loggingPane; -} -if(_445){ -var _446; -while((_446=_444.firstChild)){ -_444.removeChild(_446); -} -}else{ -_444=doc.createElement("div"); -_444.id=uid; -} -_444.loggingPane=this; -var _447=doc.createElement("input"); -var _448=doc.createElement("input"); -var _449=doc.createElement("button"); -var _450=doc.createElement("button"); -var _451=doc.createElement("button"); -var _452=doc.createElement("button"); -var _453=doc.createElement("div"); -var _454=doc.createElement("div"); -var _455=uid+"_Listener"; -this.colorTable=_441(this.colorTable); -var _456=[]; -var _457=null; -var _458=function(msg){ -var _459=msg.level; -if(typeof (_459)=="number"){ -_459=MochiKit.Logging.LogLevel[_459]; -} -return _459; -}; -var _460=function(msg){ -return msg.info.join(" "); -}; -var _461=bind(function(msg){ -var _462=_458(msg); -var text=_460(msg); -var c=this.colorTable[_462]; -var p=doc.createElement("span"); -p.className="MochiKit-LogMessage MochiKit-LogLevel-"+_462; -p.style.cssText="margin: 0px; white-space: -moz-pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; white-space: pre-line; word-wrap: break-word; wrap-option: emergency; color: "+c; -p.appendChild(doc.createTextNode(_462+": "+text)); -_454.appendChild(p); -_454.appendChild(doc.createElement("br")); -if(_453.offsetHeight>_453.scrollHeight){ -_453.scrollTop=0; -}else{ -_453.scrollTop=_453.scrollHeight; -} -},this); -var _464=function(msg){ -_456[_456.length]=msg; -_461(msg); -}; -var _465=function(){ -var _466,infore; -try{ -_466=new RegExp(_447.value); -infore=new RegExp(_448.value); -} -catch(e){ -logDebug("Error in filter regex: "+e.message); -return null; -} -return function(msg){ -return (_466.test(_458(msg))&&infore.test(_460(msg))); -}; -}; -var _467=function(){ -while(_454.firstChild){ -_454.removeChild(_454.firstChild); -} -}; -var _468=function(){ -_456=[]; -_467(); -}; -var _469=bind(function(){ -if(this.closed){ -return; -} -this.closed=true; -if(MochiKit.LoggingPane._loggingPane==this){ -MochiKit.LoggingPane._loggingPane=null; -} -this.logger.removeListener(_455); -_444.loggingPane=null; -if(_437){ -_444.parentNode.removeChild(_444); -}else{ -this.win.close(); -} -},this); -var _470=function(){ -_467(); -for(var i=0;i<_456.length;i++){ -var msg=_456[i]; -if(_457===null||_457(msg)){ -_461(msg); -} -} -}; -this.buildAndApplyFilter=function(){ -_457=_465(); -_470(); -this.logger.removeListener(_455); -this.logger.addListener(_455,_457,_464); -}; -var _471=bind(function(){ -_456=this.logger.getMessages(); -_470(); -},this); -var _472=bind(function(_473){ -_473=_473||window.event; -key=_473.which||_473.keyCode; -if(key==13){ -this.buildAndApplyFilter(); -} -},this); -var _474="display: block; z-index: 1000; left: 0px; bottom: 0px; position: fixed; width: 100%; background-color: white; font: "+this.logFont; -if(_437){ -_474+="; height: 10em; border-top: 2px solid black"; -}else{ -_474+="; height: 100%;"; -} -_444.style.cssText=_474; -if(!_445){ -doc.body.appendChild(_444); -} -_474={"cssText":"width: 33%; display: inline; font: "+this.logFont}; -_440(_447,{"value":"FATAL|ERROR|WARNING|INFO|DEBUG","onkeypress":_472,"style":_474}); -_444.appendChild(_447); -_440(_448,{"value":".*","onkeypress":_472,"style":_474}); -_444.appendChild(_448); -_474="width: 8%; display:inline; font: "+this.logFont; -_449.appendChild(doc.createTextNode("Filter")); -_449.onclick=bind("buildAndApplyFilter",this); -_449.style.cssText=_474; -_444.appendChild(_449); -_450.appendChild(doc.createTextNode("Load")); -_450.onclick=_471; -_450.style.cssText=_474; -_444.appendChild(_450); -_451.appendChild(doc.createTextNode("Clear")); -_451.onclick=_468; -_451.style.cssText=_474; -_444.appendChild(_451); -_452.appendChild(doc.createTextNode("Close")); -_452.onclick=_469; -_452.style.cssText=_474; -_444.appendChild(_452); -_453.style.cssText="overflow: auto; width: 100%"; -_454.style.cssText="width: 100%; height: "+(_437?"8em":"100%"); -_453.appendChild(_454); -_444.appendChild(_453); -this.buildAndApplyFilter(); -_471(); -if(_437){ -this.win=undefined; -}else{ -this.win=win; -} -this.inline=_437; -this.closePane=_469; -this.closed=false; -return this; -}; -MochiKit.LoggingPane.LoggingPane.prototype={"logFont":"8pt Verdana,sans-serif","colorTable":{"ERROR":"red","FATAL":"darkred","WARNING":"blue","INFO":"black","DEBUG":"green"}}; -MochiKit.LoggingPane.EXPORT_OK=["LoggingPane"]; -MochiKit.LoggingPane.EXPORT=["createLoggingPane"]; -MochiKit.LoggingPane.__new__=function(){ -this.EXPORT_TAGS={":common":this.EXPORT,":all":MochiKit.Base.concat(this.EXPORT,this.EXPORT_OK)}; -MochiKit.Base.nameFunctions(this); -MochiKit.LoggingPane._loggingPane=null; -}; -MochiKit.LoggingPane.__new__(); -MochiKit.Base._exportSymbols(this,MochiKit.LoggingPane); -if(typeof (dojo)!="undefined"){ -dojo.provide("MochiKit.Color"); -dojo.require("MochiKit.Base"); -dojo.require("MochiKit.DOM"); -dojo.require("MochiKit.Style"); -} -if(typeof (JSAN)!="undefined"){ -JSAN.use("MochiKit.Base",[]); -JSAN.use("MochiKit.DOM",[]); -JSAN.use("MochiKit.Style",[]); -} -try{ -if(typeof (MochiKit.Base)=="undefined"){ -throw ""; -} -} -catch(e){ -throw "MochiKit.Color depends on MochiKit.Base"; -} -try{ -if(typeof (MochiKit.Base)=="undefined"){ -throw ""; -} -} -catch(e){ -throw "MochiKit.Color depends on MochiKit.DOM"; -} -try{ -if(typeof (MochiKit.Base)=="undefined"){ -throw ""; -} -} -catch(e){ -throw "MochiKit.Color depends on MochiKit.Style"; -} -if(typeof (MochiKit.Color)=="undefined"){ -MochiKit.Color={}; -} -MochiKit.Color.NAME="MochiKit.Color"; -MochiKit.Color.VERSION="1.4"; -MochiKit.Color.__repr__=function(){ -return "["+this.NAME+" "+this.VERSION+"]"; -}; -MochiKit.Color.toString=function(){ -return this.__repr__(); -}; -MochiKit.Color.Color=function(red,_476,blue,_478){ -if(typeof (_478)=="undefined"||_478===null){ -_478=1; -} -this.rgb={r:red,g:_476,b:blue,a:_478}; -}; -MochiKit.Color.Color.prototype={__class__:MochiKit.Color.Color,colorWithAlpha:function(_479){ -var rgb=this.rgb; -var m=MochiKit.Color; -return m.Color.fromRGB(rgb.r,rgb.g,rgb.b,_479); -},colorWithHue:function(hue){ -var hsl=this.asHSL(); -hsl.h=hue; -var m=MochiKit.Color; -return m.Color.fromHSL(hsl); -},colorWithSaturation:function(_483){ -var hsl=this.asHSL(); -hsl.s=_483; -var m=MochiKit.Color; -return m.Color.fromHSL(hsl); -},colorWithLightness:function(_484){ -var hsl=this.asHSL(); -hsl.l=_484; -var m=MochiKit.Color; -return m.Color.fromHSL(hsl); -},darkerColorWithLevel:function(_485){ -var hsl=this.asHSL(); -hsl.l=Math.max(hsl.l-_485,0); -var m=MochiKit.Color; -return m.Color.fromHSL(hsl); -},lighterColorWithLevel:function(_486){ -var hsl=this.asHSL(); -hsl.l=Math.min(hsl.l+_486,1); -var m=MochiKit.Color; -return m.Color.fromHSL(hsl); -},blendedColor:function(_487,_488){ -if(typeof (_488)=="undefined"||_488===null){ -_488=0.5; -} -var sf=1-_488; -var s=this.rgb; -var d=_487.rgb; -var df=_488; -return MochiKit.Color.Color.fromRGB((s.r*sf)+(d.r*df),(s.g*sf)+(d.g*df),(s.b*sf)+(d.b*df),(s.a*sf)+(d.a*df)); -},compareRGB:function(_491){ -var a=this.asRGB(); -var b=_491.asRGB(); -return MochiKit.Base.compare([a.r,a.g,a.b,a.a],[b.r,b.g,b.b,b.a]); -},isLight:function(){ -return this.asHSL().b>0.5; -},isDark:function(){ -return (!this.isLight()); -},toHSLString:function(){ -var c=this.asHSL(); -var ccc=MochiKit.Color.clampColorComponent; -var rval=this._hslString; -if(!rval){ -var mid=(ccc(c.h,360).toFixed(0)+","+ccc(c.s,100).toPrecision(4)+"%"+","+ccc(c.l,100).toPrecision(4)+"%"); -var a=c.a; -if(a>=1){ -a=1; -rval="hsl("+mid+")"; -}else{ -if(a<=0){ -a=0; -} -rval="hsla("+mid+","+a+")"; -} -this._hslString=rval; -} -return rval; -},toRGBString:function(){ -var c=this.rgb; -var ccc=MochiKit.Color.clampColorComponent; -var rval=this._rgbString; -if(!rval){ -var mid=(ccc(c.r,255).toFixed(0)+","+ccc(c.g,255).toFixed(0)+","+ccc(c.b,255).toFixed(0)); -if(c.a!=1){ -rval="rgba("+mid+","+c.a+")"; -}else{ -rval="rgb("+mid+")"; -} -this._rgbString=rval; -} -return rval; -},asRGB:function(){ -return MochiKit.Base.clone(this.rgb); -},toHexString:function(){ -var m=MochiKit.Color; -var c=this.rgb; -var ccc=MochiKit.Color.clampColorComponent; -var rval=this._hexString; -if(!rval){ -rval=("#"+m.toColorPart(ccc(c.r,255))+m.toColorPart(ccc(c.g,255))+m.toColorPart(ccc(c.b,255))); -this._hexString=rval; -} -return rval; -},asHSV:function(){ -var hsv=this.hsv; -var c=this.rgb; -if(typeof (hsv)=="undefined"||hsv===null){ -hsv=MochiKit.Color.rgbToHSV(this.rgb); -this.hsv=hsv; -} -return MochiKit.Base.clone(hsv); -},asHSL:function(){ -var hsl=this.hsl; -var c=this.rgb; -if(typeof (hsl)=="undefined"||hsl===null){ -hsl=MochiKit.Color.rgbToHSL(this.rgb); -this.hsl=hsl; -} -return MochiKit.Base.clone(hsl); -},toString:function(){ -return this.toRGBString(); -},repr:function(){ -var c=this.rgb; -var col=[c.r,c.g,c.b,c.a]; -return this.__class__.NAME+"("+col.join(", ")+")"; -}}; -MochiKit.Base.update(MochiKit.Color.Color,{fromRGB:function(red,_496,blue,_497){ -var _498=MochiKit.Color.Color; -if(arguments.length==1){ -var rgb=red; -red=rgb.r; -_496=rgb.g; -blue=rgb.b; -if(typeof (rgb.a)=="undefined"){ -_497=undefined; -}else{ -_497=rgb.a; -} -} -return new _498(red,_496,blue,_497); -},fromHSL:function(hue,_499,_500,_501){ -var m=MochiKit.Color; -return m.Color.fromRGB(m.hslToRGB.apply(m,arguments)); -},fromHSV:function(hue,_502,_503,_504){ -var m=MochiKit.Color; -return m.Color.fromRGB(m.hsvToRGB.apply(m,arguments)); -},fromName:function(name){ -var _505=MochiKit.Color.Color; -if(name.charAt(0)=="\""){ -name=name.substr(1,name.length-2); -} -var _506=_505._namedColors[name.toLowerCase()]; -if(typeof (_506)=="string"){ -return _505.fromHexString(_506); -}else{ -if(name=="transparent"){ -return _505.transparentColor(); -} -} -return null; -},fromString:function(_507){ -var self=MochiKit.Color.Color; -var _508=_507.substr(0,3); -if(_508=="rgb"){ -return self.fromRGBString(_507); -}else{ -if(_508=="hsl"){ -return self.fromHSLString(_507); -}else{ -if(_507.charAt(0)=="#"){ -return self.fromHexString(_507); -} -} -} -return self.fromName(_507); -},fromHexString:function(_509){ -if(_509.charAt(0)=="#"){ -_509=_509.substring(1); -} -var _510=[]; -var i,hex; -if(_509.length==3){ -for(i=0;i<3;i++){ -hex=_509.substr(i,1); -_510.push(parseInt(hex+hex,16)/255); -} -}else{ -for(i=0;i<6;i+=2){ -hex=_509.substr(i,2); -_510.push(parseInt(hex,16)/255); -} -} -var _511=MochiKit.Color.Color; -return _511.fromRGB.apply(_511,_510); -},_fromColorString:function(pre,_513,_514,_515){ -if(_515.indexOf(pre)===0){ -_515=_515.substring(_515.indexOf("(",3)+1,_515.length-1); -} -var _516=_515.split(/\s*,\s*/); -var _517=[]; -for(var i=0;i<_516.length;i++){ -var c=_516[i]; -var val; -var _518=c.substring(c.length-3); -if(c.charAt(c.length-1)=="%"){ -val=0.01*parseFloat(c.substring(0,c.length-1)); -}else{ -if(_518=="deg"){ -val=parseFloat(c)/360; -}else{ -if(_518=="rad"){ -val=parseFloat(c)/(Math.PI*2); -}else{ -val=_514[i]*parseFloat(c); -} -} -} -_517.push(val); -} -return this[_513].apply(this,_517); -},fromComputedStyle:function(elem,_519){ -var d=MochiKit.DOM; -var cls=MochiKit.Color.Color; -for(elem=d.getElement(elem);elem;elem=elem.parentNode){ -var _520=MochiKit.Style.computedStyle.apply(d,arguments); -if(!_520){ -continue; -} -var _521=cls.fromString(_520); -if(!_521){ -break; -} -if(_521.asRGB().a>0){ -return _521; -} -} -return null; -},fromBackground:function(elem){ -var cls=MochiKit.Color.Color; -return cls.fromComputedStyle(elem,"backgroundColor","background-color")||cls.whiteColor(); -},fromText:function(elem){ -var cls=MochiKit.Color.Color; -return cls.fromComputedStyle(elem,"color","color")||cls.blackColor(); -},namedColors:function(){ -return MochiKit.Base.clone(MochiKit.Color.Color._namedColors); -}}); -MochiKit.Base.update(MochiKit.Color,{clampColorComponent:function(v,_522){ -v*=_522; -if(v<0){ -return 0; -}else{ -if(v>_522){ -return _522; -}else{ -return v; -} -} -},_hslValue:function(n1,n2,hue){ -if(hue>6){ -hue-=6; -}else{ -if(hue<0){ -hue+=6; -} -} -var val; -if(hue<1){ -val=n1+(n2-n1)*hue; -}else{ -if(hue<3){ -val=n2; -}else{ -if(hue<4){ -val=n1+(n2-n1)*(4-hue); -}else{ -val=n1; -} -} -} -return val; -},hsvToRGB:function(hue,_525,_526,_527){ -if(arguments.length==1){ -var hsv=hue; -hue=hsv.h; -_525=hsv.s; -_526=hsv.v; -_527=hsv.a; -} -var red; -var _528; -var blue; -if(_525===0){ -red=0; -_528=0; -blue=0; -}else{ -var i=Math.floor(hue*6); -var f=(hue*6)-i; -var p=_526*(1-_525); -var q=_526*(1-(_525*f)); -var t=_526*(1-(_525*(1-f))); -switch(i){ -case 1: -red=q; -_528=_526; -blue=p; -break; -case 2: -red=p; -_528=_526; -blue=t; -break; -case 3: -red=p; -_528=q; -blue=_526; -break; -case 4: -red=t; -_528=p; -blue=_526; -break; -case 5: -red=_526; -_528=p; -blue=q; -break; -case 6: -case 0: -red=_526; -_528=t; -blue=p; -break; -} -} -return {r:red,g:_528,b:blue,a:_527}; -},hslToRGB:function(hue,_530,_531,_532){ -if(arguments.length==1){ -var hsl=hue; -hue=hsl.h; -_530=hsl.s; -_531=hsl.l; -_532=hsl.a; -} -var red; -var _533; -var blue; -if(_530===0){ -red=_531; -_533=_531; -blue=_531; -}else{ -var m2; -if(_531<=0.5){ -m2=_531*(1+_530); -}else{ -m2=_531+_530-(_531*_530); -} -var m1=(2*_531)-m2; -var f=MochiKit.Color._hslValue; -var h6=hue*6; -red=f(m1,m2,h6+2); -_533=f(m1,m2,h6); -blue=f(m1,m2,h6-2); -} -return {r:red,g:_533,b:blue,a:_532}; -},rgbToHSV:function(red,_537,blue,_538){ -if(arguments.length==1){ -var rgb=red; -red=rgb.r; -_537=rgb.g; -blue=rgb.b; -_538=rgb.a; -} -var max=Math.max(Math.max(red,_537),blue); -var min=Math.min(Math.min(red,_537),blue); -var hue; -var _541; -var _542=max; -if(min==max){ -hue=0; -_541=0; -}else{ -var _543=(max-min); -_541=_543/max; -if(red==max){ -hue=(_537-blue)/_543; -}else{ -if(_537==max){ -hue=2+((blue-red)/_543); -}else{ -hue=4+((red-_537)/_543); -} -} -hue/=6; -if(hue<0){ -hue+=1; -} -if(hue>1){ -hue-=1; -} -} -return {h:hue,s:_541,v:_542,a:_538}; -},rgbToHSL:function(red,_544,blue,_545){ -if(arguments.length==1){ -var rgb=red; -red=rgb.r; -_544=rgb.g; -blue=rgb.b; -_545=rgb.a; -} -var max=Math.max(red,Math.max(_544,blue)); -var min=Math.min(red,Math.min(_544,blue)); -var hue; -var _546; -var _547=(max+min)/2; -var _548=max-min; -if(_548===0){ -hue=0; -_546=0; -}else{ -if(_547<=0.5){ -_546=_548/(max+min); -}else{ -_546=_548/(2-max-min); -} -if(red==max){ -hue=(_544-blue)/_548; -}else{ -if(_544==max){ -hue=2+((blue-red)/_548); -}else{ -hue=4+((red-_544)/_548); -} -} -hue/=6; -if(hue<0){ -hue+=1; -} -if(hue>1){ -hue-=1; -} -} -return {h:hue,s:_546,l:_547,a:_545}; -},toColorPart:function(num){ -num=Math.round(num); -var _549=num.toString(16); -if(num<16){ -return "0"+_549; -} -return _549; -},__new__:function(){ -var m=MochiKit.Base; -this.Color.fromRGBString=m.bind(this.Color._fromColorString,this.Color,"rgb","fromRGB",[1/255,1/255,1/255,1]); -this.Color.fromHSLString=m.bind(this.Color._fromColorString,this.Color,"hsl","fromHSL",[1/360,0.01,0.01,1]); -var _550=1/3; -var _551={black:[0,0,0],blue:[0,0,1],brown:[0.6,0.4,0.2],cyan:[0,1,1],darkGray:[_550,_550,_550],gray:[0.5,0.5,0.5],green:[0,1,0],lightGray:[2*_550,2*_550,2*_550],magenta:[1,0,1],orange:[1,0.5,0],purple:[0.5,0,0.5],red:[1,0,0],transparent:[0,0,0,0],white:[1,1,1],yellow:[1,1,0]}; -var _552=function(name,r,g,b,a){ -var rval=this.fromRGB(r,g,b,a); -this[name]=function(){ -return rval; -}; -return rval; -}; -for(var k in _551){ -var name=k+"Color"; -var _554=m.concat([_552,this.Color,name],_551[k]); -this.Color[name]=m.bind.apply(null,_554); -} -var _555=function(){ -for(var i=0;i1){ -var src=MochiKit.DOM.getElement(arguments[0]); -var sig=arguments[1]; -var obj=arguments[2]; -var func=arguments[3]; -for(var i=_571.length-1;i>=0;i--){ -var o=_571[i]; -if(o[0]===src&&o[1]===sig&&o[4]===obj&&o[5]===func){ -self._disconnect(o); -_571.splice(i,1); -return true; -} -} -}else{ -var idx=m.findIdentical(_571,_570); -if(idx>=0){ -self._disconnect(_570); -_571.splice(idx,1); -return true; -} -} -return false; -},disconnectAll:function(src,sig){ -src=MochiKit.DOM.getElement(src); -var m=MochiKit.Base; -var _572=m.flattenArguments(m.extend(null,arguments,1)); -var self=MochiKit.Signal; -var _573=self._disconnect; -var _574=self._observers; -if(_572.length===0){ -for(var i=_574.length-1;i>=0;i--){ -var _575=_574[i]; -if(_575[0]===src){ -_573(_575); -_574.splice(i,1); -} -} -}else{ -var sigs={}; -for(var i=0;i<_572.length;i++){ -sigs[_572[i]]=true; -} -for(var i=_574.length-1;i>=0;i--){ -var _575=_574[i]; -if(_575[0]===src&&_575[1] in sigs){ -_573(_575); -_574.splice(i,1); -} -} -} -},signal:function(src,sig){ -var _577=MochiKit.Signal._observers; -src=MochiKit.DOM.getElement(src); -var args=MochiKit.Base.extend(null,arguments,2); -var _578=[]; -for(var i=0;i<_577.length;i++){ -var _579=_577[i]; -if(_579[0]===src&&_579[1]===sig){ -try{ -_579[2].apply(src,args); -} -catch(e){ -_578.push(e); -} -} -} -if(_578.length==1){ -throw _578[0]; -}else{ -if(_578.length>1){ -var e=new Error("Multiple errors thrown in handling 'sig', see errors property"); -e.errors=_578; -throw e; -} -} -}}); -MochiKit.Signal.EXPORT_OK=[]; -MochiKit.Signal.EXPORT=["connect","disconnect","signal","disconnectAll"]; -MochiKit.Signal.__new__=function(win){ -var m=MochiKit.Base; -this._document=document; -this._window=win; -try{ -this.connect(window,"onunload",this._unloadCache); -} -catch(e){ -} -this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; -m.nameFunctions(this); -}; -MochiKit.Signal.__new__(this); -if(MochiKit.__export__){ -connect=MochiKit.Signal.connect; -disconnect=MochiKit.Signal.disconnect; -disconnectAll=MochiKit.Signal.disconnectAll; -signal=MochiKit.Signal.signal; -} -MochiKit.Base._exportSymbols(this,MochiKit.Signal); -if(typeof (dojo)!="undefined"){ -dojo.provide("MochiKit.Visual"); -dojo.require("MochiKit.Base"); -dojo.require("MochiKit.DOM"); -dojo.require("MochiKit.Style"); -dojo.require("MochiKit.Color"); -dojo.require("MochiKit.Iter"); -} -if(typeof (JSAN)!="undefined"){ -JSAN.use("MochiKit.Base",[]); -JSAN.use("MochiKit.DOM",[]); -JSAN.use("MochiKit.Style",[]); -JSAN.use("MochiKit.Color",[]); -JSAN.use("MochiKit.Iter",[]); -} -try{ -if(typeof (MochiKit.Base)==="undefined"||typeof (MochiKit.DOM)==="undefined"||typeof (MochiKit.Style)==="undefined"||typeof (MochiKit.Color)==="undefined"||typeof (MochiKit.Iter)==="undefined"){ -throw ""; -} -} -catch(e){ -throw "MochiKit.Visual depends on MochiKit.Base, MochiKit.DOM, MochiKit.Style, MochiKit.Color and MochiKit.Iter!"; -} -if(typeof (MochiKit.Visual)=="undefined"){ -MochiKit.Visual={}; -} -MochiKit.Visual.NAME="MochiKit.Visual"; -MochiKit.Visual.VERSION="1.4"; -MochiKit.Visual.__repr__=function(){ -return "["+this.NAME+" "+this.VERSION+"]"; -}; -MochiKit.Visual.toString=function(){ -return this.__repr__(); -}; -MochiKit.Visual._RoundCorners=function(e,_580){ -e=MochiKit.DOM.getElement(e); -this._setOptions(_580); -if(this.options.__unstable__wrapElement){ -e=this._doWrap(e); -} -var _581=this.options.color; -var C=MochiKit.Color.Color; -if(this.options.color==="fromElement"){ -_581=C.fromBackground(e); -}else{ -if(!(_581 instanceof C)){ -_581=C.fromString(_581); -} -} -this.isTransparent=(_581.asRGB().a<=0); -var _583=this.options.bgColor; -if(this.options.bgColor==="fromParent"){ -_583=C.fromBackground(e.offsetParent); -}else{ -if(!(_583 instanceof C)){ -_583=C.fromString(_583); -} -} -this._roundCornersImpl(e,_581,_583); -}; -MochiKit.Visual._RoundCorners.prototype={_doWrap:function(e){ -var _584=e.parentNode; -var doc=MochiKit.DOM.currentDocument(); -if(typeof (doc.defaultView)==="undefined"||doc.defaultView===null){ -return e; -} -var _585=doc.defaultView.getComputedStyle(e,null); -if(typeof (_585)==="undefined"||_585===null){ -return e; -} -var _586=MochiKit.DOM.DIV({"style":{display:"block",marginTop:_585.getPropertyValue("padding-top"),marginRight:_585.getPropertyValue("padding-right"),marginBottom:_585.getPropertyValue("padding-bottom"),marginLeft:_585.getPropertyValue("padding-left"),padding:"0px"}}); -_586.innerHTML=e.innerHTML; -e.innerHTML=""; -e.appendChild(_586); -return e; -},_roundCornersImpl:function(e,_587,_588){ -if(this.options.border){ -this._renderBorder(e,_588); -} -if(this._isTopRounded()){ -this._roundTopCorners(e,_587,_588); -} -if(this._isBottomRounded()){ -this._roundBottomCorners(e,_587,_588); -} -},_renderBorder:function(el,_590){ -var _591="1px solid "+this._borderColor(_590); -var _592="border-left: "+_591; -var _593="border-right: "+_591; -var _594="style='"+_592+";"+_593+"'"; -el.innerHTML="
"+el.innerHTML+"
"; -},_roundTopCorners:function(el,_595,_596){ -var _597=this._createCorner(_596); -for(var i=0;i=0;i--){ -_600.appendChild(this._createCornerSlice(_598,_599,i,"bottom")); -} -el.style.paddingBottom=0; -el.appendChild(_600); -},_createCorner:function(_601){ -var dom=MochiKit.DOM; -return dom.DIV({style:{backgroundColor:_601.toString()}}); -},_createCornerSlice:function(_602,_603,n,_604){ -var _605=MochiKit.DOM.SPAN(); -var _606=_605.style; -_606.backgroundColor=_602.toString(); -_606.display="block"; -_606.height="1px"; -_606.overflow="hidden"; -_606.fontSize="1px"; -var _607=this._borderColor(_602,_603); -if(this.options.border&&n===0){ -_606.borderTopStyle="solid"; -_606.borderTopWidth="1px"; -_606.borderLeftWidth="0px"; -_606.borderRightWidth="0px"; -_606.borderBottomWidth="0px"; -_606.height="0px"; -_606.borderColor=_607.toString(); -}else{ -if(_607){ -_606.borderColor=_607.toString(); -_606.borderStyle="solid"; -_606.borderWidth="0px 1px"; -} -} -if(!this.options.compact&&(n==(this.options.numSlices-1))){ -_606.height="2px"; -} -this._setMargin(_605,n,_604); -this._setBorder(_605,n,_604); -return _605; -},_setOptions:function(_608){ -this.options={corners:"all",color:"fromElement",bgColor:"fromParent",blend:true,border:false,compact:false,__unstable__wrapElement:false}; -MochiKit.Base.update(this.options,_608); -this.options.numSlices=(this.options.compact?2:4); -},_whichSideTop:function(){ -var _609=this.options.corners; -if(this._hasString(_609,"all","top")){ -return ""; -} -var _610=(_609.indexOf("tl")!=-1); -var _611=(_609.indexOf("tr")!=-1); -if(_610&&_611){ -return ""; -} -if(_610){ -return "left"; -} -if(_611){ -return "right"; -} -return ""; -},_whichSideBottom:function(){ -var _612=this.options.corners; -if(this._hasString(_612,"all","bottom")){ -return ""; -} -var _613=(_612.indexOf("bl")!=-1); -var _614=(_612.indexOf("br")!=-1); -if(_613&&_614){ -return ""; -} -if(_613){ -return "left"; -} -if(_614){ -return "right"; -} -return ""; -},_borderColor:function(_615,_616){ -if(_615=="transparent"){ -return _616; -}else{ -if(this.options.border){ -return this.options.border; -}else{ -if(this.options.blend){ -return _616.blendedColor(_615); -} -} -} -return ""; -},_setMargin:function(el,n,_617){ -var _618=this._marginSize(n)+"px"; -var _619=(_617=="top"?this._whichSideTop():this._whichSideBottom()); -var _620=el.style; -if(_619=="left"){ -_620.marginLeft=_618; -_620.marginRight="0px"; -}else{ -if(_619=="right"){ -_620.marginRight=_618; -_620.marginLeft="0px"; -}else{ -_620.marginLeft=_618; -_620.marginRight=_618; -} -} -},_setBorder:function(el,n,_621){ -var _622=this._borderSize(n)+"px"; -var _623=(_621=="top"?this._whichSideTop():this._whichSideBottom()); -var _624=el.style; -if(_623=="left"){ -_624.borderLeftWidth=_622; -_624.borderRightWidth="0px"; -}else{ -if(_623=="right"){ -_624.borderRightWidth=_622; -_624.borderLeftWidth="0px"; -}else{ -_624.borderLeftWidth=_622; -_624.borderRightWidth=_622; -} -} -},_marginSize:function(n){ -if(this.isTransparent){ -return 0; -} -var o=this.options; -if(o.compact&&o.blend){ -var _625=[1,0]; -return _625[n]; -}else{ -if(o.compact){ -var _626=[2,1]; -return _626[n]; -}else{ -if(o.blend){ -var _627=[3,2,1,0]; -return _627[n]; -}else{ -var _628=[5,3,2,1]; -return _628[n]; -} -} -} -},_borderSize:function(n){ -var o=this.options; -var _629; -if(o.compact&&(o.blend||this.isTransparent)){ -return 1; -}else{ -if(o.compact){ -_629=[1,0]; -}else{ -if(o.blend){ -_629=[2,1,1,1]; -}else{ -if(o.border){ -_629=[0,2,0,0]; -}else{ -if(this.isTransparent){ -_629=[5,3,2,1]; -}else{ -return 0; -} -} -} -} -} -return _629[n]; -},_hasString:function(str){ -for(var i=1;i=(_654||i)){ -_654=i; -} -}); -_652=_654||_652; -break; -} -_651.startOn+=_652; -_651.finishOn+=_652; -if(!_651.options.queue.limit||this.effects.length<_651.options.queue.limit){ -this.effects.push(_651); -} -if(!this.interval){ -this.interval=setInterval(MochiKit.Base.bind(this.loop,this),40); -} -},remove:function(_655){ -this.effects=MochiKit.Base.filter(function(e){ -return e!=_655; -},this.effects); -if(this.effects.length==0){ -clearInterval(this.interval); -this.interval=null; -} -},loop:function(){ -var _656=new Date().getTime(); -MochiKit.Iter.forEach(this.effects,function(_657){ -_657.loop(_656); -}); -}}); -MochiKit.Visual.Queues={instances:{},get:function(_658){ -if(typeof (_658)!="string"){ -return _658; -} -if(!this.instances[_658]){ -this.instances[_658]=new MochiKit.Visual.ScopedQueue(); -} -return this.instances[_658]; -}}; -MochiKit.Visual.Queue=MochiKit.Visual.Queues.get("global"); -MochiKit.Visual.DefaultOptions={transition:MochiKit.Visual.Transitions.sinoidal,duration:1,fps:25,sync:false,from:0,to:1,delay:0,queue:"parallel"}; -MochiKit.Visual.Base=function(){ -}; -MochiKit.Visual.Base.prototype={__class__:MochiKit.Visual.Base,start:function(_659){ -var v=MochiKit.Visual; -this.options=MochiKit.Base.setdefault(_659||{},v.DefaultOptions); -this.currentFrame=0; -this.state="idle"; -this.startOn=this.options.delay*1000; -this.finishOn=this.startOn+(this.options.duration*1000); -this.event("beforeStart"); -if(!this.options.sync){ -v.Queues.get(typeof (this.options.queue)=="string"?"global":this.options.queue.scope).add(this); -} -},loop:function(_660){ -if(_660>=this.startOn){ -if(_660>=this.finishOn){ -this.render(1); -this.cancel(); -this.event("beforeFinish"); -this.finish(); -this.event("afterFinish"); -return; -} -var pos=(_660-this.startOn)/(this.finishOn-this.startOn); -var _661=Math.round(pos*this.options.fps*this.options.duration); -if(_661>this.currentFrame){ -this.render(pos); -this.currentFrame=_661; -} -} -},render:function(pos){ -if(this.state=="idle"){ -this.state="running"; -this.event("beforeSetup"); -this.setup(); -this.event("afterSetup"); -} -if(this.state=="running"){ -if(this.options.transition){ -pos=this.options.transition(pos); -} -pos*=(this.options.to-this.options.from); -pos+=this.options.from; -this.event("beforeUpdate"); -this.update(pos); -this.event("afterUpdate"); -} -},cancel:function(){ -if(!this.options.sync){ -MochiKit.Visual.Queues.get(typeof (this.options.queue)=="string"?"global":this.options.queue.scope).remove(this); -} -this.state="finished"; -},setup:function(){ -},finish:function(){ -},update:function(_662){ -},event:function(_663){ -if(this.options[_663+"Internal"]){ -this.options[_663+"Internal"](this); -} -if(this.options[_663]){ -this.options[_663](this); -} -},repr:function(){ -return "["+this.__class__.NAME+", options:"+MochiKit.Base.repr(this.options)+"]"; -}}; -MochiKit.Visual.Parallel=function(_664,_665){ -this.__init__(_664,_665); -}; -MochiKit.Visual.Parallel.prototype=new MochiKit.Visual.Base(); -MochiKit.Base.update(MochiKit.Visual.Parallel.prototype,{__init__:function(_666,_667){ -this.effects=_666||[]; -this.start(_667); -},update:function(_668){ -MochiKit.Iter.forEach(this.effects,function(_669){ -_669.render(_668); -}); -},finish:function(){ -MochiKit.Iter.forEach(this.effects,function(_670){ -_670.render(1); -_670.cancel(); -_670.event("beforeFinish"); -_670.finish(); -_670.event("afterFinish"); -}); -}}); -MochiKit.Visual.Opacity=function(_671,_672){ -this.__init__(_671,_672); -}; -MochiKit.Visual.Opacity.prototype=new MochiKit.Visual.Base(); -MochiKit.Base.update(MochiKit.Visual.Opacity.prototype,{__init__:function(_673,_674){ -var b=MochiKit.Base; -var d=MochiKit.DOM; -this.element=d.getElement(_673); -if(b.isIE()&&(!this.element.currentStyle.hasLayout)){ -d.setStyle(this.element,{zoom:1}); -} -_674=b.update({from:d.getOpacity(this.element)||0,to:1},_674||{}); -this.start(_674); -},update:function(_675){ -MochiKit.DOM.setOpacity(this.element,_675); -}}); -MochiKit.Visual.Move=function(_676,_677){ -this.__init__(_676,_677); -}; -MochiKit.Visual.Move.prototype=new MochiKit.Visual.Base(); -MochiKit.Base.update(MochiKit.Visual.Move.prototype,{__init__:function(_678,_679){ -this.element=MochiKit.DOM.getElement(_678); -_679=MochiKit.Base.update({x:0,y:0,mode:"relative"},_679||{}); -this.start(_679); -},setup:function(){ -var d=MochiKit.DOM; -d.makePositioned(this.element); -var s=this.element.style; -var _680=s.visibility; -var _681=s.display; -if(_681=="none"){ -s.visibility="hidden"; -s.display=""; -} -this.originalLeft=parseFloat(d.getStyle(this.element,"left")||"0"); -this.originalTop=parseFloat(d.getStyle(this.element,"top")||"0"); -if(this.options.mode=="absolute"){ -this.options.x-=this.originalLeft; -this.options.y-=this.originalTop; -} -if(_681=="none"){ -s.visibility=_680; -s.display=_681; -} -},update:function(_682){ -MochiKit.DOM.setStyle(this.element,{left:this.options.x*_682+this.originalLeft+"px",top:this.options.y*_682+this.originalTop+"px"}); -}}); -MochiKit.Visual.Scale=function(_683,_684,_685){ -this.__init__(_683,_684,_685); -}; -MochiKit.Visual.Scale.prototype=new MochiKit.Visual.Base(); -MochiKit.Base.update(MochiKit.Visual.Scale.prototype,{__init__:function(_686,_687,_688){ -this.element=MochiKit.DOM.getElement(_686); -_688=MochiKit.Base.update({scaleX:true,scaleY:true,scaleContent:true,scaleFromCenter:false,scaleMode:"box",scaleFrom:100,scaleTo:_687},_688||{}); -this.start(_688); -},setup:function(){ -this.restoreAfterFinish=this.options.restoreAfterFinish||false; -this.elementPositioning=MochiKit.DOM.getStyle(this.element,"position"); -var fe=MochiKit.Iter.forEach; -var b=MochiKit.Base.bind; -this.originalStyle={}; -fe(["top","left","width","height","fontSize"],b(function(k){ -this.originalStyle[k]=this.element.style[k]; -},this)); -this.originalTop=this.element.offsetTop; -this.originalLeft=this.element.offsetLeft; -var _689=MochiKit.DOM.getStyle(this.element,"font-size")||"100%"; -fe(["em","px","%"],b(function(_690){ -if(_689.indexOf(_690)>0){ -this.fontSize=parseFloat(_689); -this.fontSizeType=_690; -} -},this)); -this.factor=(this.options.scaleTo-this.options.scaleFrom)/100; -if(/^content/.test(this.options.scaleMode)){ -this.dims=[this.element.scrollHeight,this.element.scrollWidth]; -}else{ -if(this.options.scaleMode=="box"){ -this.dims=[this.element.offsetHeight,this.element.offsetWidth]; -}else{ -this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth]; -} -} -},update:function(_691){ -var _692=(this.options.scaleFrom/100)+(this.factor*_691); -if(this.options.scaleContent&&this.fontSize){ -MochiKit.DOM.setStyle(this.element,{fontSize:this.fontSize*_692+this.fontSizeType}); -} -this.setDimensions(this.dims[0]*_692,this.dims[1]*_692); -},finish:function(){ -if(this.restoreAfterFinish){ -MochiKit.DOM.setStyle(this.element,this.originalStyle); -} -},setDimensions:function(_693,_694){ -var d={}; -if(this.options.scaleX){ -d.width=_694+"px"; -} -if(this.options.scaleY){ -d.height=_693+"px"; -} -if(this.options.scaleFromCenter){ -var topd=(_693-this.dims[0])/2; -var _696=(_694-this.dims[1])/2; -if(this.elementPositioning=="absolute"){ -if(this.options.scaleY){ -d.top=this.originalTop-topd+"px"; -} -if(this.options.scaleX){ -d.left=this.originalLeft-_696+"px"; -} -}else{ -if(this.options.scaleY){ -d.top=-topd+"px"; -} -if(this.options.scaleX){ -d.left=-_696+"px"; -} -} -} -MochiKit.DOM.setStyle(this.element,d); -}}); -MochiKit.Visual.Highlight=function(_697,_698){ -this.__init__(_697,_698); -}; -MochiKit.Visual.Highlight.prototype=new MochiKit.Visual.Base(); -MochiKit.Base.update(MochiKit.Visual.Highlight.prototype,{__init__:function(_699,_700){ -this.element=MochiKit.DOM.getElement(_699); -_700=MochiKit.Base.update({startcolor:"#ffff99"},_700||{}); -this.start(_700); -},setup:function(){ -var d=MochiKit.DOM; -var b=MochiKit.Base; -if(d.getStyle(this.element,"display")=="none"){ -this.cancel(); -return; -} -this.oldStyle={backgroundImage:d.getStyle(this.element,"background-image")}; -d.setStyle(this.element,{backgroundImage:"none"}); -if(!this.options.endcolor){ -this.options.endcolor=MochiKit.Color.Color.fromBackground(this.element).toHexString(); -} -if(!this.options.restorecolor){ -this.options.restorecolor=d.getStyle(this.element,"background-color"); -} -this._base=b.map(b.bind(function(i){ -return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16); -},this),[0,1,2]); -this._delta=b.map(b.bind(function(i){ -return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]; -},this),[0,1,2]); -},update:function(_701){ -var m="#"; -MochiKit.Iter.forEach([0,1,2],MochiKit.Base.bind(function(i){ -m+=MochiKit.Color.toColorPart(Math.round(this._base[i]+this._delta[i]*_701)); -},this)); -MochiKit.DOM.setStyle(this.element,{backgroundColor:m}); -},finish:function(){ -MochiKit.DOM.setStyle(this.element,MochiKit.Base.update(this.oldStyle,{backgroundColor:this.options.endcolor})); -}}); -MochiKit.Visual.ScrollTo=function(_702,_703){ -this.__init__(_702,_703); -}; -MochiKit.Visual.ScrollTo.prototype=new MochiKit.Visual.Base(); -MochiKit.Base.update(MochiKit.Visual.ScrollTo.prototype,{__init__:function(_704,_705){ -this.element=MochiKit.DOM.getElement(_704); -this.start(_705||{}); -},setup:function(){ -var p=MochiKit.Position; -p.prepare(); -var _706=p.cumulativeOffset(this.element); -if(this.options.offset){ -_706.y+=this.options.offset; -} -var max; -if(window.innerHeight){ -max=window.innerHeight-window.height; -}else{ -if(document.documentElement&&document.documentElement.clientHeight){ -max=document.documentElement.clientHeight-document.body.scrollHeight; -}else{ -if(document.body){ -max=document.body.clientHeight-document.body.scrollHeight; -} -} -} -this.scrollStart=p.windowOffset.y; -this.delta=(_706.y>max?max:_706.y)-this.scrollStart; -},update:function(_707){ -var p=MochiKit.Position; -p.prepare(); -window.scrollTo(p.windowOffset.x,this.scrollStart+(_707*this.delta)); -}}); -MochiKit.Visual.fade=function(_708,_709){ -var d=MochiKit.DOM; -var _710=d.getInlineOpacity(_708); -_709=MochiKit.Base.update({from:d.getOpacity(_708)||1,to:0,afterFinishInternal:function(_711){ -if(_711.options.to!==0){ -return; -} -MochiKit.Style.hideElement(_711.element); -d.setStyle(_711.element,{opacity:_710}); -}},_709||{}); -return new MochiKit.Visual.Opacity(_708,_709); -}; -MochiKit.Visual.appear=function(_712,_713){ -var d=MochiKit.DOM; -var v=MochiKit.Visual; -_713=MochiKit.Base.update({from:(d.getStyle(_712,"display")=="none"?0:d.getOpacity(_712)||0),to:1,afterFinishInternal:function(_714){ -v.forceRerendering(_714.element); -},beforeSetupInternal:function(_715){ -d.setOpacity(_715.element,_715.options.from); -MochiKit.Style.showElement(_715.element); -}},_713||{}); -return new v.Opacity(_712,_713); -}; -MochiKit.Visual.puff=function(_716,_717){ -var d=MochiKit.DOM; -var v=MochiKit.Visual; -_716=d.getElement(_716); -var _718={opacity:d.getInlineOpacity(_716),position:d.getStyle(_716,"position")}; -_717=MochiKit.Base.update({beforeSetupInternal:function(_719){ -d.setStyle(_719.effects[0].element,{position:"absolute"}); -},afterFinishInternal:function(_720){ -MochiKit.Style.hideElement(_720.effects[0].element); -d.setStyle(_720.effects[0].element,_718); -}},_717||{}); -return new v.Parallel([new v.Scale(_716,200,{sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}),new v.Opacity(_716,{sync:true,to:0})],_717); -}; -MochiKit.Visual.blindUp=function(_721,_722){ -var d=MochiKit.DOM; -_721=d.getElement(_721); -d.makeClipping(_721); -_722=MochiKit.Base.update({scaleContent:false,scaleX:false,restoreAfterFinish:true,afterFinishInternal:function(_723){ -MochiKit.Style.hideElement(_723.element); -d.undoClipping(_723.element); -}},_722||{}); -return new MochiKit.Visual.Scale(_721,0,_722); -}; -MochiKit.Visual.blindDown=function(_724,_725){ -var d=MochiKit.DOM; -_724=d.getElement(_724); -var _726=MochiKit.Style.getElementDimensions(_724); -_725=MochiKit.Base.update({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:_726.h,originalWidth:_726.w},restoreAfterFinish:true,afterSetupInternal:function(_727){ -d.makeClipping(_727.element); -d.setStyle(_727.element,{height:"0px"}); -MochiKit.Style.showElement(_727.element); -},afterFinishInternal:function(_728){ -d.undoClipping(_728.element); -}},_725||{}); -return new MochiKit.Visual.Scale(_724,100,_725); -}; -MochiKit.Visual.switchOff=function(_729,_730){ -var d=MochiKit.DOM; -_729=d.getElement(_729); -var _731=d.getInlineOpacity(_729); -var _730=MochiKit.Base.update({duration:0.3,scaleFromCenter:true,scaleX:false,scaleContent:false,restoreAfterFinish:true,beforeSetupInternal:function(_732){ -d.makePositioned(_732.element); -d.makeClipping(_732.element); -},afterFinishInternal:function(_733){ -MochiKit.Style.hideElement(_733.element); -d.undoClipping(_733.element); -d.undoPositioned(_733.element); -d.setStyle(_733.element,{opacity:_731}); -}},_730||{}); -var v=MochiKit.Visual; -return new v.appear(_729,{duration:0.4,from:0,transition:v.Transitions.flicker,afterFinishInternal:function(_734){ -new v.Scale(_734.element,1,_730); -}}); -}; -MochiKit.Visual.dropOut=function(_735,_736){ -var d=MochiKit.DOM; -_735=d.getElement(_735); -var _737={top:d.getStyle(_735,"top"),left:d.getStyle(_735,"left"),opacity:d.getInlineOpacity(_735)}; -_736=MochiKit.Base.update({duration:0.5,beforeSetupInternal:function(_738){ -d.makePositioned(_738.effects[0].element); -},afterFinishInternal:function(_739){ -MochiKit.Style.hideElement(_739.effects[0].element); -d.undoPositioned(_739.effects[0].element); -d.setStyle(_739.effects[0].element,_737); -}},_736||{}); -var v=MochiKit.Visual; -return new v.Parallel([new v.Move(_735,{x:0,y:100,sync:true}),new v.Opacity(_735,{sync:true,to:0})],_736); -}; -MochiKit.Visual.shake=function(_740,_741){ -var d=MochiKit.DOM; -var v=MochiKit.Visual; -_740=d.getElement(_740); -_741=MochiKit.Base.update({x:-20,y:0,duration:0.05,afterFinishInternal:function(_742){ -d.undoPositioned(_742.element); -d.setStyle(_742.element,oldStyle); -}},_741||{}); -var _743={top:d.getStyle(_740,"top"),left:d.getStyle(_740,"left")}; -return new v.Move(_740,{x:20,y:0,duration:0.05,afterFinishInternal:function(_744){ -new v.Move(_744.element,{x:-40,y:0,duration:0.1,afterFinishInternal:function(_744){ -new v.Move(_744.element,{x:40,y:0,duration:0.1,afterFinishInternal:function(_744){ -new v.Move(_744.element,{x:-40,y:0,duration:0.1,afterFinishInternal:function(_744){ -new v.Move(_744.element,{x:40,y:0,duration:0.1,afterFinishInternal:function(_744){ -new v.Move(_744.element,_741); -}}); -}}); -}}); -}}); -}}); -}; -MochiKit.Visual.slideDown=function(_745,_746){ -var d=MochiKit.DOM; -var b=MochiKit.Base; -_745=d.getElement(_745); -if(!_745.firstChild){ -throw "MochiKit.Visual.slideDown must be used on a element with a child"; -} -d.removeEmptyTextNodes(_745); -var _747=d.getStyle(_745.firstChild,"bottom")||0; -var _748=MochiKit.Style.getElementDimensions(_745); -_746=b.update({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:_748.h,originalWidth:_748.w},restoreAfterFinish:true,afterSetupInternal:function(_749){ -d.makePositioned(_749.element); -d.makePositioned(_749.element.firstChild); -if(b.isOpera()){ -d.setStyle(_749.element,{top:""}); -} -d.makeClipping(_749.element); -d.setStyle(_749.element,{height:"0px"}); -MochiKit.Style.showElement(_745); -},afterUpdateInternal:function(_750){ -d.setStyle(_750.element.firstChild,{bottom:(_750.dims[0]-_750.element.clientHeight)+"px"}); -},afterFinishInternal:function(_751){ -d.undoClipping(_751.element); -if(b.isIE()){ -d.undoPositioned(_751.element); -d.undoPositioned(_751.element.firstChild); -}else{ -d.undoPositioned(_751.element.firstChild); -d.undoPositioned(_751.element); -} -d.setStyle(_751.element.firstChild,{bottom:_747}); -}},_746||{}); -return new MochiKit.Visual.Scale(_745,100,_746); -}; -MochiKit.Visual.slideUp=function(_752,_753){ -var d=MochiKit.DOM; -var b=MochiKit.Base; -_752=d.getElement(_752); -if(!_752.firstChild){ -throw "MochiKit.Visual.slideUp must be used on a element with a child"; -} -d.removeEmptyTextNodes(_752); -var _754=d.getStyle(_752.firstChild,"bottom"); -_753=b.update({scaleContent:false,scaleX:false,scaleMode:"box",scaleFrom:100,restoreAfterFinish:true,beforeStartInternal:function(_755){ -d.makePositioned(_755.element); -d.makePositioned(_755.element.firstChild); -if(b.isOpera()){ -d.setStyle(_755.element,{top:""}); -} -d.makeClipping(_755.element); -MochiKit.Style.showElement(_752); -},afterUpdateInternal:function(_756){ -d.setStyle(_756.element.firstChild,{bottom:(_756.dims[0]-_756.element.clientHeight)+"px"}); -},afterFinishInternal:function(_757){ -MochiKit.Style.hideElement(_757.element); -d.undoClipping(_757.element); -d.undoPositioned(_757.element.firstChild); -d.undoPositioned(_757.element); -d.setStyle(_757.element.firstChild,{bottom:_754}); -}},_753||{}); -return new MochiKit.Visual.Scale(_752,0,_753); -}; -MochiKit.Visual.squish=function(_758,_759){ -var d=MochiKit.DOM; -var b=MochiKit.Base; -_759=b.update({restoreAfterFinish:true,beforeSetupInternal:function(_760){ -d.makeClipping(_760.element); -},afterFinishInternal:function(_761){ -MochiKit.Style.hideElement(_761.element); -d.undoClipping(_761.element); -}},_759||{}); -return new MochiKit.Visual.Scale(_758,b.isOpera()?1:0,_759); -}; -MochiKit.Visual.grow=function(_762,_763){ -var d=MochiKit.DOM; -var v=MochiKit.Visual; -_762=d.getElement(_762); -_763=MochiKit.Base.update({direction:"center",moveTransition:v.Transitions.sinoidal,scaleTransition:v.Transitions.sinoidal,opacityTransition:v.Transitions.full},_763||{}); -var _764={top:_762.style.top,left:_762.style.left,height:_762.style.height,width:_762.style.width,opacity:d.getInlineOpacity(_762)}; -var dims=MochiKit.Style.getElementDimensions(_762); -var _766,initialMoveY; -var _767,moveY; -switch(_763.direction){ -case "top-left": -_766=initialMoveY=_767=moveY=0; -break; -case "top-right": -_766=dims.w; -initialMoveY=moveY=0; -_767=-dims.w; -break; -case "bottom-left": -_766=_767=0; -initialMoveY=dims.h; -moveY=-dims.h; -break; -case "bottom-right": -_766=dims.w; -initialMoveY=dims.h; -_767=-dims.w; -moveY=-dims.h; -break; -case "center": -_766=dims.w/2; -initialMoveY=dims.h/2; -_767=-dims.w/2; -moveY=-dims.h/2; -break; -} -var _768=MochiKit.Base.update({beforeSetupInternal:function(_769){ -d.setStyle(_769.effects[0].element,{height:"0px"}); -MochiKit.Style.showElement(_769.effects[0].element); -},afterFinishInternal:function(_770){ -d.undoClipping(_770.effects[0].element); -d.undoPositioned(_770.effects[0].element); -d.setStyle(_770.effects[0].element,_764); -}},_763||{}); -return new v.Move(_762,{x:_766,y:initialMoveY,duration:0.01,beforeSetupInternal:function(_771){ -MochiKit.Style.hideElement(_771.element); -d.makeClipping(_771.element); -d.makePositioned(_771.element); -},afterFinishInternal:function(_772){ -new v.Parallel([new v.Opacity(_772.element,{sync:true,to:1,from:0,transition:_763.opacityTransition}),new v.Move(_772.element,{x:_767,y:moveY,sync:true,transition:_763.moveTransition}),new v.Scale(_772.element,100,{scaleMode:{originalHeight:dims.h,originalWidth:dims.w},sync:true,scaleFrom:MochiKit.Base.isOpera()?1:0,transition:_763.scaleTransition,restoreAfterFinish:true})],_768); -}}); -}; -MochiKit.Visual.shrink=function(_773,_774){ -var d=MochiKit.DOM; -var v=MochiKit.Visual; -_773=d.getElement(_773); -_774=MochiKit.Base.update({direction:"center",moveTransition:v.Transitions.sinoidal,scaleTransition:v.Transitions.sinoidal,opacityTransition:v.Transitions.none},_774||{}); -var _775={top:_773.style.top,left:_773.style.left,height:_773.style.height,width:_773.style.width,opacity:d.getInlineOpacity(_773)}; -var dims=MochiKit.Style.getElementDimensions(_773); -var _776,moveY; -switch(_774.direction){ -case "top-left": -_776=moveY=0; -break; -case "top-right": -_776=dims.w; -moveY=0; -break; -case "bottom-left": -_776=0; -moveY=dims.h; -break; -case "bottom-right": -_776=dims.w; -moveY=dims.h; -break; -case "center": -_776=dims.w/2; -moveY=dims.h/2; -break; -} -var _777=MochiKit.Base.update({beforeStartInternal:function(_778){ -d.makePositioned(_778.effects[0].element); -d.makeClipping(_778.effects[0].element); -},afterFinishInternal:function(_779){ -MochiKit.Style.hideElement(_779.effects[0].element); -d.undoClipping(_779.effects[0].element); -d.undoPositioned(_779.effects[0].element); -d.setStyle(_779.effects[0].element,_775); -}},_774||{}); -return new v.Parallel([new v.Opacity(_773,{sync:true,to:0,from:1,transition:_774.opacityTransition}),new v.Scale(_773,MochiKit.Base.isOpera()?1:0,{sync:true,transition:_774.scaleTransition,restoreAfterFinish:true}),new v.Move(_773,{x:_776,y:moveY,sync:true,transition:_774.moveTransition})],_777); -}; -MochiKit.Visual.pulsate=function(_780,_781){ -var d=MochiKit.DOM; -var v=MochiKit.Visual; -var b=MochiKit.Base; -_780=d.getElement(_780); -var _782=d.getInlineOpacity(_780); -_781=b.update({duration:3,from:0,afterFinishInternal:function(_783){ -d.setStyle(_783.element,{opacity:_782}); -}},_781||{}); -var _784=_781.transition||v.Transitions.sinoidal; -var _785=b.bind(function(pos){ -return _784(1-v.Transitions.pulse(pos)); -},_784); -b.bind(_785,_784); -return new v.Opacity(_780,b.update({transition:_785},_781)); -}; -MochiKit.Visual.fold=function(_786,_787){ -var d=MochiKit.DOM; -var v=MochiKit.Visual; -_786=d.getElement(_786); -var _788={top:_786.style.top,left:_786.style.left,width:_786.style.width,height:_786.style.height}; -d.makeClipping(_786); -_787=MochiKit.Base.update({scaleContent:false,scaleX:false,afterFinishInternal:function(_789){ -new v.Scale(_786,1,{scaleContent:false,scaleY:false,afterFinishInternal:function(_789){ -MochiKit.Style.hideElement(_789.element); -d.undoClipping(_789.element); -d.setStyle(_789.element,_788); -}}); -}},_787||{}); -return new v.Scale(_786,5,_787); -}; -MochiKit.Visual.Color=MochiKit.Color.Color; -MochiKit.Visual.getElementsComputedStyle=MochiKit.DOM.computedStyle; -MochiKit.Visual.__new__=function(){ -var m=MochiKit.Base; -m.nameFunctions(this); -this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)}; -}; -MochiKit.Visual.EXPORT=["roundElement","roundClass","tagifyText","multiple","toggle","Base","Parallel","Opacity","Move","Scale","Highlight","ScrollTo","fade","appear","puff","blindUp","blindDown","switchOff","dropOut","shake","slideDown","slideUp","squish","grow","shrink","pulsate","fold"]; -MochiKit.Visual.EXPORT_OK=["PAIRS"]; -MochiKit.Visual.__new__(); -MochiKit.Base._exportSymbols(this,MochiKit.Visual); -if(typeof (MochiKit)=="undefined"){ -MochiKit={}; -} -if(typeof (MochiKit.MochiKit)=="undefined"){ -MochiKit.MochiKit={}; -} -MochiKit.MochiKit.NAME="MochiKit.MochiKit"; -MochiKit.MochiKit.VERSION="1.4"; -MochiKit.MochiKit.__repr__=function(){ -return "["+this.NAME+" "+this.VERSION+"]"; -}; -MochiKit.MochiKit.toString=function(){ -return this.__repr__(); -}; -MochiKit.MochiKit.SUBMODULES=["Base","Iter","Logging","DateTime","Format","Async","DOM","Style","LoggingPane","Color","Signal","Visual"]; -if(typeof (JSAN)!="undefined"||typeof (dojo)!="undefined"){ -if(typeof (dojo)!="undefined"){ -dojo.provide("MochiKit.MochiKit"); -dojo.require("MochiKit.*"); -} -if(typeof (JSAN)!="undefined"){ -(function(lst){ -for(var i=0;i"); -} -} -})(); -} - - diff --git a/fas/fas/static/javascript/New.js b/fas/fas/static/javascript/New.js deleted file mode 100644 index 5fe951a..0000000 --- a/fas/fas/static/javascript/New.js +++ /dev/null @@ -1,366 +0,0 @@ - -MochiKit.Base.update(MochiKit.Base, { - isIE: function () { - return /MSIE/.test(navigator.userAgent); - }, - - isGecko: function () { - return /Gecko/.test(navigator.userAgent); - }, - - isKHTML: function () { - return /Konqueror|Safari|KHTML/.test(navigator.userAgent) - }, - - isSafari: function () { - return navigator.appVersion.indexOf('AppleWebKit') > 0; - }, - - isOpera: function () { - return navigator.userAgent.indexOf('Opera') > 0; - } -}); - -MochiKit.Base.update(MochiKit.DOM, { - getStyle: function (element, style) { - element = MochiKit.DOM.getElement(element); - var value = element.style[MochiKit.Base.camelize(style)]; - if (!value) { - if (document.defaultView && document.defaultView.getComputedStyle) { - var css = document.defaultView.getComputedStyle(element, null); - value = css ? css.getPropertyValue(style) : null; - } else if (element.currentStyle) { - value = element.currentStyle[MochiKit.Base.camelize(style)]; - } - } - - if (MochiKit.Base.isOpera() && (MochiKit.Base.find(['left', 'top', 'right', 'bottom'], style))) { - if (MochiKit.DOM.getStyle(element, 'position') == 'static') { - value = 'auto'; - } - } - - return value == 'auto' ? null : value; - }, - - setStyle: function (element, style) { - element = MochiKit.DOM.getElement(element); - for (name in style) { - element.style[MochiKit.Base.camelize(name)] = style[name]; - } - }, - - getOpacity: function (element) { - var opacity; - if (opacity = MochiKit.DOM.getStyle(element, 'opacity')) { - return parseFloat(opacity); - } - if (opacity = (MochiKit.DOM.getStyle(element, 'filter') || '').match(/alpha\(opacity=(.*)\)/)) { - if (opacity[1]) { - return parseFloat(opacity[1]) / 100; - } - } - return 1.0; - }, - - getInlineOpacity: function (element) { - return MochiKit.DOM.getElement(element).style.opacity || ''; - }, - - setOpacity: function (element, value) { - element = MochiKit.DOM.getElement(element); - if (value == 1) { - MochiKit.DOM.setStyle(element, {opacity: - (MochiKit.Base.isGecko() && !MochiKit.Base.isKHTML()) ? - 0.999999 : null}); - if (MochiKit.Base.isIE()) - MochiKit.DOM.setStyle(element, {filter: - MochiKit.DOM.getStyle(element, 'filter').replace(/alpha\([^\)]*\)/gi, '')}); - } else { - if (value < 0.00001) { - value = 0; - } - MochiKit.DOM.setStyle(element, {opacity: value}); - if (MochiKit.Base.isIE()) { - MochiKit.DOM.setStyle(element, - {filter: MochiKit.DOM.getStyle(element, 'filter').replace(/alpha\([^\)]*\)/gi, '') + 'alpha(opacity=' + value * 100 + ')' }); - } - } - }, - - isVisible: function (element) { - return MochiKit.DOM.getElement(element).style.display != 'none'; - }, - - makeClipping: function (element) { - element = MochiKit.DOM.getElement(element); - if (element._overflow) { - return; - } - element._overflow = element.style.overflow; - if ((MochiKit.DOM.getStyle(element, 'overflow') || 'visible') != 'hidden') { - element.style.overflow = 'hidden'; - } - }, - - undoClipping: function (element) { - element = MochiKit.DOM.getElement(element); - if (!element._overflow) { - return; - } - element.style.overflow = element._overflow; - element._overflow = undefined; - }, - - makePositioned: function (element) { - element = MochiKit.DOM.getElement(element); - /*if (!element.style) { - alert(element); - }*/ - var pos = MochiKit.DOM.getStyle(element, 'position'); - if ((pos == 'static' || !pos) && !element._madePositioned) { - element._madePositioned = true; - element.style.position = 'relative'; - // Opera returns the offset relative to the positioning context, - // when an element is position relative but top and left have - // not been defined - if (MochiKit.Base.isOpera()) { - element.style.top = 0; - element.style.left = 0; - } - } - }, - - undoPositioned: function (element) { - element = MochiKit.DOM.getElement(element); - if (element._madePositioned) { - element._madePositioned = undefined; - element.style.position = element.style.top = element.style.left = element.style.bottom = element.style.right = ''; - } - }, - - getFirstElementByTagAndClassName: function (tagName, className, - /* optional */parent) { - var self = MochiKit.DOM; - if (typeof(tagName) == 'undefined' || tagName === null) { - tagName = '*'; - } - if (typeof(parent) == 'undefined' || parent === null) { - parent = self._document; - } - parent = self.getElement(parent); - var children = (parent.getElementsByTagName(tagName) - || self._document.all); - if (typeof(className) == 'undefined' || className === null) { - return MochiKit.Base.extend(null, children); - } - - for (var i = 0; i < children.length; i++) { - var child = children[i]; - var classNames = child.className.split(' '); - for (var j = 0; j < classNames.length; j++) { - if (classNames[j] == className) { - return child; - } - } - } - }, - - isParent: function (child, element) { - if (!child.parentNode || child == element) { - return false; - } - - if (child.parentNode == element) { - return true; - } - - return MochiKit.DOM.isParent(child.parentNode, element); - } -}); - -MochiKit.Position = { - // set to true if needed, warning: firefox performance problems - // NOT neeeded for page scrolling, only if draggable contained in - // scrollable elements - includeScrollOffsets: false, - - prepare: function () { - var deltaX = window.pageXOffset - || document.documentElement.scrollLeft - || document.body.scrollLeft - || 0; - var deltaY = window.pageYOffset - || document.documentElement.scrollTop - || document.body.scrollTop - || 0; - this.windowOffset = new MochiKit.Style.Coordinates(deltaX, deltaY); - }, - - cumulativeOffset: function (element) { - var valueT = 0; - var valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - element = element.offsetParent; - } while (element); - return new MochiKit.Style.Coordinates(valueL, valueT); - }, - - realOffset: function (element) { - var valueT = 0; - var valueL = 0; - do { - valueT += element.scrollTop || 0; - valueL += element.scrollLeft || 0; - element = element.parentNode; - } while (element); - return new MochiKit.Style.Coordinates(valueL, valueT); - }, - - within: function (element, x, y) { - if (this.includeScrollOffsets) { - return this.withinIncludingScrolloffsets(element, x, y); - } - this.xcomp = x; - this.ycomp = y; - this.offset = this.cumulativeOffset(element); - if (element.style.position == "fixed") { - this.offset.x += this.windowOffset.x; - this.offset.y += this.windowOffset.y; - } - - return (y >= this.offset.y && - y < this.offset.y + element.offsetHeight && - x >= this.offset.x && - x < this.offset.x + element.offsetWidth); - }, - - withinIncludingScrolloffsets: function (element, x, y) { - var offsetcache = this.realOffset(element); - - this.xcomp = x + offsetcache.x - this.windowOffset.x; - this.ycomp = y + offsetcache.y - this.windowOffset.y; - this.offset = this.cumulativeOffset(element); - - return (this.ycomp >= this.offset.y && - this.ycomp < this.offset.y + element.offsetHeight && - this.xcomp >= this.offset.x && - this.xcomp < this.offset.x + element.offsetWidth); - }, - - // within must be called directly before - overlap: function (mode, element) { - if (!mode) { - return 0; - } - if (mode == 'vertical') { - return ((this.offset.y + element.offsetHeight) - this.ycomp) / - element.offsetHeight; - } - if (mode == 'horizontal') { - return ((this.offset.x + element.offsetWidth) - this.xcomp) / - element.offsetWidth; - } - }, - - absolutize: function (element) { - element = MochiKit.DOM.getElement(element); - if (element.style.position == 'absolute') { - return; - } - MochiKit.Position.prepare(); - - var offsets = MochiKit.Position.positionedOffset(element); - var width = element.clientWidth; - var height = element.clientHeight; - - var oldStyle = { - 'position': element.style.position, - 'left': offsets.x - parseFloat(element.style.left || 0), - 'top': offsets.y - parseFloat(element.style.top || 0), - 'width': element.style.width, - 'height': element.style.height - }; - - element.style.position = 'absolute'; - element.style.top = offsets.y + 'px'; - element.style.left = offsets.x + 'px'; - element.style.width = width + 'px'; - element.style.height = height + 'px'; - - return oldStyle; - }, - - positionedOffset: function (element) { - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - element = element.offsetParent; - if (element) { - p = MochiKit.DOM.getStyle(element, 'position'); - if (p == 'relative' || p == 'absolute') { - break; - } - } - } while (element); - return new MochiKit.Style.Coordinates(valueL, valueT); - }, - - relativize: function (element, oldPos) { - element = MochiKit.DOM.getElement(element); - if (element.style.position == 'relative') { - return; - } - MochiKit.Position.prepare(); - - var top = parseFloat(element.style.top || 0) - - (oldPos['top'] || 0); - var left = parseFloat(element.style.left || 0) - - (oldPos['left'] || 0); - - element.style.position = oldPos['position']; - element.style.top = top + 'px'; - element.style.left = left + 'px'; - element.style.width = oldPos['width']; - element.style.height = oldPos['height']; - }, - - clone: function (source, target) { - source = MochiKit.DOM.getElement(source); - target = MochiKit.DOM.getElement(target); - target.style.position = 'absolute'; - var offsets = this.cumulativeOffset(source); - target.style.top = offsets.y + 'px'; - target.style.left = offsets.x + 'px'; - target.style.width = source.offsetWidth + 'px'; - target.style.height = source.offsetHeight + 'px'; - }, - - page: function (forElement) { - var valueT = 0; - var valueL = 0; - - var element = forElement; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - - // Safari fix - if (element.offsetParent == document.body && MochiKit.DOM.getStyle(element, 'position') == 'absolute') { - break; - } - } while (element = element.offsetParent); - - element = forElement; - do { - valueT -= element.scrollTop || 0; - valueL -= element.scrollLeft || 0; - } while (element = element.parentNode); - - return new MochiKit.Style.Coordinates(valueL, valueT); - } -}; - diff --git a/fas/fas/static/javascript/Sortable.js b/fas/fas/static/javascript/Sortable.js deleted file mode 100644 index de70455..0000000 --- a/fas/fas/static/javascript/Sortable.js +++ /dev/null @@ -1,531 +0,0 @@ -/*** -Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) - Mochi-ized By Thomas Herve (_firstname_@nimail.org) - -See scriptaculous.js for full license. - -***/ - -if (typeof(dojo) != 'undefined') { - dojo.provide('MochiKit.DragAndDrop'); - dojo.require('MochiKit.Base'); - dojo.require('MochiKit.DOM'); - dojo.require('MochiKit.Iter'); -} - -if (typeof(JSAN) != 'undefined') { - JSAN.use("MochiKit.Base", []); - JSAN.use("MochiKit.DOM", []); - JSAN.use("MochiKit.Iter", []); -} - -try { - if (typeof(MochiKit.Base) == 'undefined' || - typeof(MochiKit.DOM) == 'undefined' || - typeof(MochiKit.Iter) == 'undefined') { - throw ""; - } -} catch (e) { - throw "MochiKit.DragAndDrop depends on MochiKit.Base, MochiKit.DOM and MochiKit.Iter!"; -} - -if (typeof(MochiKit.Sortable) == 'undefined') { - MochiKit.Sortable = {}; -} - -MochiKit.Sortable.NAME = 'MochiKit.Sortable'; -MochiKit.Sortable.VERSION = '1.4'; - -MochiKit.Sortable.__repr__ = function () { - return '[' + this.NAME + ' ' + this.VERSION + ']'; -}; - -MochiKit.Sortable.toString = function () { - return this.__repr__(); -}; - -MochiKit.Sortable.EXPORT = [ - "SortableObserver" -]; - -MochiKit.DragAndDrop.EXPORT_OK = [ - "Sortable" -]; - -MochiKit.Sortable.SortableObserver = function (element, observer) { - this.__init__(element, observer); -}; - -MochiKit.Sortable.SortableObserver.prototype = { - /*** - - Observe events of drag and drop sortables. - - ***/ - __init__: function (element, observer) { - this.element = MochiKit.DOM.getElement(element); - this.observer = observer; - this.lastValue = MochiKit.Sortable.Sortable.serialize(this.element); - }, - - onStart: function () { - this.lastValue = MochiKit.Sortable.Sortable.serialize(this.element); - }, - - onEnd: function () { - MochiKit.Sortable.Sortable.unmark(); - if (this.lastValue != MochiKit.Sortable.Sortable.serialize(this.element)) { - this.observer(this.element) - } - } -}; - -MochiKit.Sortable.Sortable = { - /*** - - Manage sortables. Mainly use the create function to add a sortable. - - ***/ - sortables: {}, - - _findRootElement: function (element) { - while (element.tagName != "BODY") { - if (element.id && MochiKit.Sortable.Sortable.sortables[element.id]) { - return element; - } - element = element.parentNode; - } - }, - - options: function (element) { - element = MochiKit.Sortable.Sortable._findRootElement(MochiKit.DOM.getElement(element)); - if (!element) { - return; - } - return MochiKit.Sortable.Sortable.sortables[element.id]; - }, - - destroy: function (element){ - var s = MochiKit.Sortable.Sortable.options(element); - var b = MochiKit.Base; - var d = MochiKit.DragAndDrop; - - if (s) { - d.Draggables.removeObserver(s.element); - b.map(function (dr) { - d.Droppables.remove(dr); - }, s.droppables); - b.map(function (dr) { - dr.destroy(); - }, s.draggables); - - delete MochiKit.Sortable.Sortable.sortables[s.element.id]; - } - }, - - create: function (element, options) { - element = MochiKit.DOM.getElement(element); - var self = MochiKit.Sortable.Sortable; - options = MochiKit.Base.update({ - element: element, - tag: 'li', // assumes li children, override with tag: 'tagname' - dropOnEmpty: false, - tree: false, - treeTag: 'ul', - overlap: 'vertical', // one of 'vertical', 'horizontal' - constraint: 'vertical', // one of 'vertical', 'horizontal', false - // also takes array of elements (or ids); or false - containment: [element], - handle: false, // or a CSS class - only: false, - hoverclass: null, - ghosting: false, - scroll: false, - scrollSensitivity: 20, - scrollSpeed: 15, - format: /^[^_]*_(.*)$/, - onChange: MochiKit.Base.noop, - onUpdate: MochiKit.Base.noop, - accept: null - }, options); - - // clear any old sortable with same element - self.destroy(element); - - // build options for the draggables - var options_for_draggable = { - revert: true, - ghosting: options.ghosting, - scroll: options.scroll, - scrollSensitivity: options.scrollSensitivity, - scrollSpeed: options.scrollSpeed, - constraint: options.constraint, - handle: options.handle - }; - - if (options.starteffect) { - options_for_draggable.starteffect = options.starteffect; - } - - if (options.reverteffect) { - options_for_draggable.reverteffect = options.reverteffect; - } else if (options.ghosting) { - options_for_draggable.reverteffect = function (innerelement) { - innerelement.style.top = 0; - innerelement.style.left = 0; - }; - } - - if (options.endeffect) { - options_for_draggable.endeffect = options.endeffect; - } - - if (options.zindex) { - options_for_draggable.zindex = options.zindex; - } - - // build options for the droppables - var options_for_droppable = { - overlap: options.overlap, - containment: options.containment, - hoverclass: options.hoverclass, - onhover: self.onHover, - tree: options.tree, - accept: options.accept - } - - var options_for_tree = { - onhover: self.onEmptyHover, - overlap: options.overlap, - containment: options.containment, - hoverclass: options.hoverclass, - accept: options.accept - } - - // fix for gecko engine - MochiKit.DOM.removeEmptyTextNodes(element); - - options.draggables = []; - options.droppables = []; - - // drop on empty handling - if (options.dropOnEmpty || options.tree) { - new MochiKit.DragAndDrop.Droppable(element, options_for_tree); - options.droppables.push(element); - } - MochiKit.Base.map(function (e) { - // handles are per-draggable - var handle = options.handle ? - MochiKit.DOM.getFirstElementByTagAndClassName(null, - options.handle, e) : e; - options.draggables.push( - new MochiKit.DragAndDrop.Draggable(e, - MochiKit.Base.update(options_for_draggable, - {handle: handle}))); - new MochiKit.DragAndDrop.Droppable(e, options_for_droppable); - if (options.tree) { - e.treeNode = element; - } - options.droppables.push(e); - }, (self.findElements(element, options) || [])); - - if (options.tree) { - MochiKit.Base.map(function (e) { - new MochiKit.DragAndDrop.Droppable(e, options_for_tree); - e.treeNode = element; - options.droppables.push(e); - }, (self.findTreeElements(element, options) || [])); - } - - // keep reference - self.sortables[element.id] = options; - - // for onupdate - MochiKit.DragAndDrop.Draggables.addObserver( - new MochiKit.Sortable.SortableObserver(element, options.onUpdate)); - }, - - // return all suitable-for-sortable elements in a guaranteed order - findElements: function (element, options) { - return MochiKit.Sortable.Sortable.findChildren( - element, options.only, options.tree ? true : false, options.tag); - }, - - findTreeElements: function (element, options) { - return MochiKit.Sortable.Sortable.findChildren( - element, options.only, options.tree ? true : false, options.treeTag); - }, - - findChildren: function (element, only, recursive, tagName) { - if (!element.hasChildNodes()) { - return null; - } - tagName = tagName.toUpperCase(); - if (only) { - only = MochiKit.Base.flattenArray([only]); - } - var elements = []; - MochiKit.Base.map(function (e) { - if (e.tagName && - e.tagName.toUpperCase() == tagName && - (!only || - MochiKit.Iter.some(only, function (c) { - return MochiKit.DOM.hasElementClass(e, c); - }))) { - elements.push(e); - } - if (recursive) { - var grandchildren = MochiKit.Sortable.Sortable.findChildren(e, only, recursive, tagName); - if (grandchildren && grandchildren.length > 0) { - elements = elements.concat(grandchildren); - } - } - }, element.childNodes); - return elements; - }, - - onHover: function (element, dropon, overlap) { - if (MochiKit.DOM.isParent(dropon, element)) { - return; - } - var self = MochiKit.Sortable.Sortable; - - if (overlap > .33 && overlap < .66 && self.options(dropon).tree) { - return; - } else if (overlap > 0.5) { - self.mark(dropon, 'before'); - if (dropon.previousSibling != element) { - var oldParentNode = element.parentNode; - element.style.visibility = 'hidden'; // fix gecko rendering - dropon.parentNode.insertBefore(element, dropon); - if (dropon.parentNode != oldParentNode) { - self.options(oldParentNode).onChange(element); - } - self.options(dropon.parentNode).onChange(element); - } - } else { - self.mark(dropon, 'after'); - var nextElement = dropon.nextSibling || null; - if (nextElement != element) { - var oldParentNode = element.parentNode; - element.style.visibility = 'hidden'; // fix gecko rendering - dropon.parentNode.insertBefore(element, nextElement); - if (dropon.parentNode != oldParentNode) { - self.options(oldParentNode).onChange(element); - } - self.options(dropon.parentNode).onChange(element); - } - } - }, - - _offsetSize: function (element, type) { - if (type == 'vertical' || type == 'height') { - return element.offsetHeight; - } else { - return element.offsetWidth; - } - }, - - onEmptyHover: function (element, dropon, overlap) { - var oldParentNode = element.parentNode; - var self = MochiKit.Sortable.Sortable; - var droponOptions = self.options(dropon); - - if (!MochiKit.DOM.isParent(dropon, element)) { - var index; - - var children = self.findElements(dropon, {tag: droponOptions.tag, - only: droponOptions.only}); - var child = null; - - if (children) { - var offset = self._offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap); - - for (index = 0; index < children.length; index += 1) { - if (offset - self._offsetSize(children[index], droponOptions.overlap) >= 0) { - offset -= self._offsetSize(children[index], droponOptions.overlap); - } else if (offset - (self._offsetSize (children[index], droponOptions.overlap) / 2) >= 0) { - child = index + 1 < children.length ? children[index + 1] : null; - break; - } else { - child = children[index]; - break; - } - } - } - - dropon.insertBefore(element, child); - - self.options(oldParentNode).onChange(element); - droponOptions.onChange(element); - } - }, - - unmark: function () { - var m = MochiKit.Sortable.Sortable._marker; - if (m) { - MochiKit.Style.hideElement(m); - } - }, - - mark: function (dropon, position) { - // mark on ghosting only - var d = MochiKit.DOM; - var self = MochiKit.Sortable.Sortable; - var sortable = self.options(dropon.parentNode); - if (sortable && !sortable.ghosting) { - return; - } - - if (!self._marker) { - self._marker = d.getElement('dropmarker') || - document.createElement('DIV'); - MochiKit.Style.hideElement(self._marker); - d.addElementClass(self._marker, 'dropmarker'); - self._marker.style.position = 'absolute'; - document.getElementsByTagName('body').item(0).appendChild(self._marker); - } - var offsets = MochiKit.Position.cumulativeOffset(dropon); - self._marker.style.left = offsets.x + 'px'; - self._marker.style.top = offsets.y + 'px'; - - if (position == 'after') { - if (sortable.overlap == 'horizontal') { - self._marker.style.left = (offsets.x + dropon.clientWidth) + 'px'; - } else { - self._marker.style.top = (offsets.y + dropon.clientHeight) + 'px'; - } - } - MochiKit.Style.showElement(self._marker); - }, - - _tree: function (element, options, parent) { - var self = MochiKit.Sortable.Sortable; - var children = self.findElements(element, options) || []; - - for (var i = 0; i < children.length; ++i) { - var match = children[i].id.match(options.format); - - if (!match) { - continue; - } - - var child = { - id: encodeURIComponent(match ? match[1] : null), - element: element, - parent: parent, - children: [], - position: parent.children.length, - container: self._findChildrenElement(children[i], options.treeTag.toUpperCase()) - } - - /* Get the element containing the children and recurse over it */ - if (child.container) { - self._tree(child.container, options, child) - } - - parent.children.push (child); - } - - return parent; - }, - - /* Finds the first element of the given tag type within a parent element. - Used for finding the first LI[ST] within a L[IST]I[TEM].*/ - _findChildrenElement: function (element, containerTag) { - if (element && element.hasChildNodes) { - for (var i = 0; i < element.childNodes.length; ++i) { - if (element.childNodes[i].tagName == containerTag) { - return element.childNodes[i]; - } - } - } - return null; - }, - - tree: function (element, options) { - element = MochiKit.DOM.getElement(element); - var sortableOptions = MochiKit.Sortable.Sortable.options(element); - options = MochiKit.Base.update({ - tag: sortableOptions.tag, - treeTag: sortableOptions.treeTag, - only: sortableOptions.only, - name: element.id, - format: sortableOptions.format - }, options || {}); - - var root = { - id: null, - parent: null, - children: new Array, - container: element, - position: 0 - } - - return MochiKit.Sortable.Sortable._tree(element, options, root); - }, - - setSequence: function (element, newSequence, options) { - var self = MochiKit.Sortable.Sortable; - var b = MochiKit.Base; - element = MochiKit.DOM.getElement(element); - options = b.update(self.options(element), options || {}); - - var nodeMap = {}; - b.map(function (n) { - var m = n.id.match(options.format); - if (m) { - nodeMap[m[1]] = [n, n.parentNode]; - } - n.parentNode.removeChild(n); - }, self.findElements(element, options)); - - b.map(function (ident) { - var n = nodeMap[ident]; - if (n) { - n[1].appendChild(n[0]); - delete nodeMap[ident]; - } - }, newSequence); - }, - - /* Construct a [i] index for a particular node */ - _constructIndex: function (node) { - var index = ''; - do { - if (node.id) { - index = '[' + node.position + ']' + index; - } - } while ((node = node.parent) != null); - return index; - }, - - sequence: function (element, options) { - element = MochiKit.DOM.getElement(element); - var self = MochiKit.Sortable.Sortable; - var options = MochiKit.Base.update(self.options(element), options || {}); - - return MochiKit.Base.map(function (item) { - return item.id.match(options.format) ? item.id.match(options.format)[1] : ''; - }, MochiKit.DOM.getElement(self.findElements(element, options) || [])); - }, - - serialize: function (element, options) { - element = MochiKit.DOM.getElement(element); - var self = MochiKit.Sortable.Sortable; - options = MochiKit.Base.update(self.options(element), options || {}); - var name = encodeURIComponent(options.name || element.id); - - if (options.tree) { - return MochiKit.Base.flattenArray(MochiKit.Base.map(function (item) { - return [name + self._constructIndex(item) + "[id]=" + - encodeURIComponent(item.id)].concat(item.children.map(arguments.callee)); - }, self.tree(element, options).children)).join('&'); - } else { - return MochiKit.Base.map(function (item) { - return name + "[]=" + encodeURIComponent(item); - }, self.sequence(element, options)).join('&'); - } - } -}; - diff --git a/fas/fas/static/javascript/color.js b/fas/fas/static/javascript/color.js deleted file mode 100644 index bd6c3c1..0000000 --- a/fas/fas/static/javascript/color.js +++ /dev/null @@ -1,57 +0,0 @@ -function getSelected() { - return getElement("foreback").value; -} - -function updateDisplay() { - var textbox = getElement("as_string"); - var current = getSelected(); - - if (current == "Foreground") { - textbox.value = Color.fromText("sample").toString(); - } else { - textbox.value = Color.fromBackground("sample").toString(); - } -} - -function setSampleFromElement(elem, toSet) { - var elem = getElement(elem); - var samplediv = getElement("sample"); - var color = Color.fromString(elem.value); - if (color == null) { - alert("Unknown color string"); - return; - } - samplediv.style[toSet] = color; - updateDisplay(); -} - -function setColor() { - var current = getSelected(); - if (current == "Foreground") { - setSampleFromElement("as_string", "color"); - } else { - setSampleFromElement("as_string", "background"); - } -} - -function setForeground() { - setSampleFromElement("foreground", "color"); -} - -function setBackground() { - setSampleFromElement("background", "background"); -} - -function cloneColor() { - var samplediv = getElement("sample"); - var current = getSelected(); - - if (current == "Foreground") { - samplediv.style.color = Color.fromText("header"); - } else { - samplediv.style.background = Color.fromBackground("header"); - } - - updateDisplay(); - -} diff --git a/fas/fas/static/javascript/draggable.js b/fas/fas/static/javascript/draggable.js deleted file mode 100644 index 67c08ab..0000000 --- a/fas/fas/static/javascript/draggable.js +++ /dev/null @@ -1,120 +0,0 @@ -/* - - Drag: A Really Simple Drag Handler - -*/ - - var nextInChain = []; - - RollingSign = function(element, newstring, options) { - this.__init__(element, newstring, options); - } - - RollingSign.prototype = new Base(); - - update(RollingSign.prototype, { - - __init__ : function(element, newstring, options) { - this.element = getElement(element); - - options = update( - { - charSpaceSize: 26, - startingChar: 65 - }, options || {}); - - this.newstring = newstring; - this.oldstring = this.element.innerHTML; - - this.start(options); - }, - - update: function(position) { - curchar = this.newstring.length * position; - toMake = this.newstring.length - curchar; - - ending = ""; - for (i = 0; i < toMake; i++) { - ending += String.fromCharCode( - Math.random() * this.options.charSpaceSize + - this.options.startingChar); - } - - this.element.innerHTML = this.newstring.substr(0, curchar) + - ending; - }, - - finish: function() { - this.element.innerHTML = this.newstring; - } - } - ); - -Drag = { - _move: null, - _down: null, - - start: function(e) { - e.stop(); - - // We need to remember what we're dragging. - Drag._target = e.target(); - - /* - There's no cross-browser way to get offsetX and offsetY, so we - have to do it ourselves. For performance, we do this once and - cache it. - */ - Drag._offset = Drag._diff( - e.mouse().page, - getElementPosition(Drag._target)); - - Drag._move = connect(document, 'onmousemove', Drag._drag); - Drag._down = connect(document, 'onmouseup', Drag._stop); - }, - - _offset: null, - _target: null, - - _diff: function(lhs, rhs) { - return new MochiKit.Style.Coordinates(lhs.x - rhs.x, lhs.y - rhs.y); - }, - - _drag: function(e) { - e.stop(); - setElementPosition( - Drag._target, - Drag._diff(e.mouse().page, Drag._offset)); - }, - - _stop: function(e) { - disconnect(Drag._move); - disconnect(Drag._down); - } -}; - -connect(window, 'onload', - function() { - /* - Find all DIVs tagged with the draggable class, and connect them to - the Drag handler. - */ - var d = getElementsByTagAndClassName('DIV', 'draggable'); - forEach(d, - function(elem) { - connect(elem, 'onmousedown', Drag.start); - }); - - }); - -connect(window, 'onload', - function() { - var elems = getElementsByTagAndClassName("A", "view-source"); - var page = "draggable/"; - for (var i = 0; i < elems.length; i++) { - var elem = elems[i]; - var href = elem.href.split(/\//).pop(); - elem.target = "_blank"; - elem.href = "../view-source/view-source.html#" + page + href; - } - }); diff --git a/fas/fas/static/javascript/forms.js b/fas/fas/static/javascript/forms.js deleted file mode 100644 index 4356840..0000000 --- a/fas/fas/static/javascript/forms.js +++ /dev/null @@ -1,35 +0,0 @@ -function cancelEdit(element) { - switchOff(element + 'Form') - appear(element) -} - -function formEdit(element) { - var elements = Array("givenName", "mail", "fedoraPersonBugzillaMail", "fedoraPersonIrcNick", "fedoraPersonKeyId", "telephoneNumber", "postalAddress", "description") - for(var i = 0; i != elements.length; i++) { - if (elements[i] != element) { - var form = document.getElementById(elements[i] + 'Form'); - if ( form.style.display != 'none') { - new Highlight(elements[i] + 'Form'); - return false; - } - } - } - switchOff(element); - appear(element + 'Form'); -} - -function displayHelp(helpID) { - grow('helpMessageMain'); - getElement('helpMessage').innerHTML = 'Please Wait...'; - //d = MochiKit.Async.doSimpleXMLHttpRequest('/fas/help', {}); - var d = loadJSONDoc('/fas/help', {helpID: helpID}); - var gotMetadata = function (meta) { - getElement('helpMessage').innerHTML = meta.help - }; - //getElement('helpMessage').innerHTML = d.help; - var metadataFetchFailed = function (err) { - getElement('helpMessage').innerHTML = 'Could not fetch help message!' - }; - d.addCallbacks(gotMetadata, metadataFetchFailed) - return false; -} \ No newline at end of file diff --git a/fas/fas/static/javascript/signal.js b/fas/fas/static/javascript/signal.js deleted file mode 100644 index 3540fc3..0000000 --- a/fas/fas/static/javascript/signal.js +++ /dev/null @@ -1,13 +0,0 @@ -var currentSelected = null; - -function changeSelected(e) { - if (currentSelected != null) { - logDebug("Disconnecting " + currentSelected); - disconnectAll(currentSelected); - } - var es = getElement("elemselect"); - currentSelected = es.value; - var ev = getElement("eventselect").value; - logDebug("Connecting " + currentSelected + " for event " + ev); - connect(currentSelected, ev, log); -} diff --git a/fas/fas/static/javascript/sortable_tables.js b/fas/fas/static/javascript/sortable_tables.js deleted file mode 100644 index 2466f90..0000000 --- a/fas/fas/static/javascript/sortable_tables.js +++ /dev/null @@ -1,203 +0,0 @@ -/* - -On page load, the SortableManager: - -- Finds the table by its id (sortable_table). -- Parses its thead for columns with a "mochi:format" attribute. -- Parses the data out of the tbody based upon information given in the - "mochi:format" attribute, and clones the tr elements for later re-use. -- Clones the column header th elements for use as a template when drawing - sort arrow columns. -- Stores away a reference to the tbody, as it will be replaced on each sort. -- Performs the first sort. - - -On sort request: - -- Sorts the data based on the given key and direction -- Creates a new tbody from the rows in the new ordering -- Replaces the column header th elements with clickable versions, adding an - indicator (↑ or ↓) to the most recently sorted column. - -*/ - -SortableManager = function () { - this.thead = null; - this.tbody = null; - this.columns = []; - this.rows = []; - this.sortState = {}; - this.sortkey = 0; -}; - -mouseOverFunc = function () { - addElementClass(this, "over"); -}; - -mouseOutFunc = function () { - removeElementClass(this, "over"); -}; - -ignoreEvent = function (ev) { - if (ev && ev.preventDefault) { - ev.preventDefault(); - ev.stopPropagation(); - } else if (typeof(event) != 'undefined') { - event.cancelBubble = false; - event.returnValue = false; - } -}; - - -update(SortableManager.prototype, { - - "initWithTable": function (table) { - /*** - - Initialize the SortableManager with a table object - - ***/ - // Ensure that it's a DOM element - table = getElement(table); - // Find the thead - this.thead = table.getElementsByTagName('thead')[0]; - // get the mochi:format key and contents for each column header - var cols = this.thead.getElementsByTagName('th'); - for (var i = 0; i < cols.length; i++) { - var node = cols[i]; - var attr = null; - try { - attr = node.getAttribute("mochi:format"); - } catch (err) { - // pass - } - var o = node.childNodes; - this.columns.push({ - "format": attr, - "element": node, - "proto": node.cloneNode(true) - }); - } - // scrape the tbody for data - this.tbody = table.getElementsByTagName('tbody')[0]; - // every row - var rows = this.tbody.getElementsByTagName('tr'); - for (var i = 0; i < rows.length; i++) { - // every cell - var row = rows[i]; - var cols = row.getElementsByTagName('td'); - var rowData = []; - for (var j = 0; j < cols.length; j++) { - // scrape the text and build the appropriate object out of it - var cell = cols[j]; - var obj = scrapeText(cell); - switch (this.columns[j].format) { - case 'isodate': - obj = isoDate(obj); - break; - case 'str': - break; - case 'istr': - obj = obj.toLowerCase(); - break; - // cases for numbers, etc. could be here - default: - break; - } - rowData.push(obj); - } - // stow away a reference to the TR and save it - rowData.row = row.cloneNode(true); - this.rows.push(rowData); - - } - - // do initial sort on first column - this.drawSortedRows(this.sortkey, true, false); - - }, - - "onSortClick": function (name) { - /*** - - Return a sort function for click events - - ***/ - return method(this, function () { - log('onSortClick', name); - var order = this.sortState[name]; - if (order == null) { - order = true; - } else if (name == this.sortkey) { - order = !order; - } - this.drawSortedRows(name, order, true); - }); - }, - - "drawSortedRows": function (key, forward, clicked) { - /*** - - Draw the new sorted table body, and modify the column headers - if appropriate - - ***/ - log('drawSortedRows', key, forward); - this.sortkey = key; - // sort based on the state given (forward or reverse) - var cmp = (forward ? keyComparator : reverseKeyComparator); - this.rows.sort(cmp(key)); - // save it so we can flip next time - this.sortState[key] = forward; - // get every "row" element from this.rows and make a new tbody - var newBody = TBODY(null, map(itemgetter("row"), this.rows)); - // swap in the new tbody - this.tbody = swapDOM(this.tbody, newBody); - for (var i = 0; i < this.columns.length; i++) { - var col = this.columns[i]; - var node = col.proto.cloneNode(true); - // remove the existing events to minimize IE leaks - col.element.onclick = null; - col.element.onmousedown = null; - col.element.onmouseover = null; - col.element.onmouseout = null; - // set new events for the new node - node.onclick = this.onSortClick(i); - node.onmousedown = ignoreEvent; - node.onmouseover = mouseOverFunc; - node.onmouseout = mouseOutFunc; - // if this is the sorted column - if (key == i) { - // \u2193 is down arrow, \u2191 is up arrow - // forward sorts mean the rows get bigger going down - var arrow = (forward ? "\u2193" : "\u2191"); - // add the character to the column header - node.appendChild(SPAN(null, arrow)); - if (clicked) { - node.onmouseover(); - } - } - - // swap in the new th - col.element = swapDOM(col.element, node); - } - } -}); - -sortableManager = new SortableManager(); - -addLoadEvent(function () { - sortableManager.initWithTable('sortable_table'); -}); - -// rewrite the view-source links -addLoadEvent(function () { - var elems = getElementsByTagAndClassName("A", "view-source"); - var page = "sortable_tables/"; - for (var i = 0; i < elems.length; i++) { - var elem = elems[i]; - var href = elem.href.split(/\//).pop(); - elem.target = "_blank"; - elem.href = "../view-source/view-source.html#" + page + href; - } -}); diff --git a/fas/fas/static/javascript/style.js b/fas/fas/static/javascript/style.js deleted file mode 100644 index 2b28806..0000000 --- a/fas/fas/static/javascript/style.js +++ /dev/null @@ -1,67 +0,0 @@ -// getElementDimensions, getElementPosition - -function updateStatus() { - var e = getElement("thetestelem"); - - var dim = getElementDimensions(e); - var pos = getElementPosition(e); - - getElement("dimensions").innerHTML = repr(dim); - getElement("coordinates").innerHTML = repr(pos); - - getElement("width").value = dim.w; - getElement("height").value = dim.h; - - getElement("x").value = pos.x; - getElement("y").value = pos.y; -} - -// showElement and hideElement - -function hideTheTestElem() { - // Toggles our guinea testelem element - - var button = getElement("hidebutton"); - if (button.value == "Hide Element") { - hideElement("thetestelem"); - button.value = "Show Element"; - } else { - showElement("thetestelem"); - button.value = "Hide Element"; - } - updateStatus(); -} - -// setElementDimensions - -function setTestElemDimensions() { - var e = getElement("thetestelem"); - var dim = new Dimensions(getElement("width").value, - getElement("height").value); - setElementDimensions(e, dim); - updateStatus(); -} - -// setElementPosition - -function setTestElemPosition() { - var e = getElement("thetestelem"); - var pos = new Coordinates(getElement("x").value, - getElement("y").value); - setElementPosition(e, pos); - updateStatus(); -} - -// setOpacity - -function setTestElemOpacity() { - setOpacity("thetestelem", getElement("opacity").value); -} - -// computedStyle - -function getTestElemStyle() { - var prop = getElement("testelemprop").value; - var style = computedStyle("thetestelem", prop); - getElement("testelemstyle").innerHTML = style; -} \ No newline at end of file diff --git a/fas/fas/templates/edit.kid b/fas/fas/templates/edit.kid deleted file mode 100644 index 34b4352..0000000 --- a/fas/fas/templates/edit.kid +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - -
-
- - - - - -
- - diff --git a/fas/fas/templates/editAccount.kid b/fas/fas/templates/editAccount.kid index b2a315f..1330592 100644 --- a/fas/fas/templates/editAccount.kid +++ b/fas/fas/templates/editAccount.kid @@ -1,236 +1,10 @@ - - + - + Edit Account - - - - -

Your Fedora Account

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Your Roles

- -

Pending

-
- -
- -
- -

Approved

- - - -

Misc

- - - - - - - - - - - - - - - - +

Edit Account

+ ${form(action='editAccountSubmit', method='post', value=value)} diff --git a/fas/fas/templates/editGroup.kid b/fas/fas/templates/editGroup.kid index 20b2789..3bbab33 100644 --- a/fas/fas/templates/editGroup.kid +++ b/fas/fas/templates/editGroup.kid @@ -1,88 +1,10 @@ - - + - + Edit Group - -

My Status: ${me.fedoraRoleStatus}

-
- - - -
-Remove me - - -

${group.cn}

- - - - - - - - -
Name${group.cn}
Owner${group.fedoraGroupOwner}
Type${group.fedoraGroupType}
Needs Sponsor${group.fedoraGroupNeedsSponsor}
Self Removal${group.fedoraGroupUserCanRemove}
fedoraGroupJoinMsg${group.fedoraGroupJoinMsg}
- -

Invite (?)

-${searchUserForm(action='modifyGroup', value=value, method='get')} - - -

Members

- - - - - - - - - - - - - - - - - - - - - - -
UsernameSponsorDate AddedDate ApprovedApprovalRole TypeAction
${user}${groups[user].fedoraRoleSponsor}${groups[user].fedoraRoleSponsor}${groups[user].fedoraRoleCreationDate}${groups[user].fedoraRoleApprovalDate}${groups[user].fedoraRoleStatus}${groups[user].fedoraRoleType} - Sponsor - Approve - Delete - Upgrade - Downgrade Suspend - - Sponsor - Approve - Delete - Upgrade - Downgrade Suspend -
-- Error!
-
- +

Edit Group

+ ${form(action='editGroupSubmit', method='post', value=value)} diff --git a/fas/fas/templates/groupList.kid b/fas/fas/templates/groupList.kid index 85535ae..092253d 100644 --- a/fas/fas/templates/groupList.kid +++ b/fas/fas/templates/groupList.kid @@ -1,44 +1,49 @@ + py:extends="'master.kid'"> + + Groups List + - - - - + +

List (${search})

- -

List (${search})

+

Search Groups

+
+

"*" is a wildcard (Ex: "cvs*")

+
+ + +
+
-
- Search (Ex: "cvs*") -
+

Results

+ - - - - - -
- ${letter} - All
- - - - - - - - -
GroupStatus
${groups[group].cn} (edit) - (info) - - -
- - + + + + + + + + + + + + +
GroupDescriptionStatus
${group.cn}${group.fedoraGroupDesc} + + Approved + Unapproved + + Not a Member +
+ diff --git a/fas/fas/templates/home.kid b/fas/fas/templates/home.kid index e49e550..e2adeb5 100644 --- a/fas/fas/templates/home.kid +++ b/fas/fas/templates/home.kid @@ -1,28 +1,20 @@ - + - + Fedora Accounts System - - -

Recent Builds (Koji)

- +

Recent Builds (Koji)

+
- + diff --git a/fas/fas/templates/invite.kid b/fas/fas/templates/invite.kid index bcf29ce..a266c33 100644 --- a/fas/fas/templates/invite.kid +++ b/fas/fas/templates/invite.kid @@ -9,15 +9,16 @@ -

Invite a new community member!

+

Invite a new community member!

- - To email:
- From: ${user.mail}
- Subject: Invitation to join the Fedora Team!
- Message: Please come up with a better more inviting message.
+ +
+To email:
+From: ${user.mail}
+Subject: Invitation to join the Fedora Team!
+Message:
-${user.givenName} ≤${user.mail}≥ has invited you to join the Fedora
+${user.givenName} <${user.mail}> has invited you to join the Fedora
 Project!  We are a community of users and developers who produce a
 complete operating system from entirely free and open source software
 (FOSS).  ${user.givenName} thinks that you have knowledge and skills
@@ -33,8 +34,8 @@ very smart and talented people.
 
 Fedora and FOSS are changing the world -- come be a part of it!
 
- + +
- diff --git a/fas/fas/templates/login.kid b/fas/fas/templates/login.kid index e3254e8..22e7655 100644 --- a/fas/fas/templates/login.kid +++ b/fas/fas/templates/login.kid @@ -1,118 +1,36 @@ - +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + - - - Login - - #loginBox p - { - position: relative; - top: -1.5em; - padding-left: 4em; - font-size: 12px; - margin: 0; - color: #666; - } - - #loginBox table - { - table-layout: fixed; - border-spacing: 0; - width: 100%; - } - - #loginBox td.label - { - width: 33%; - text-align: right; - } - - #loginBox td.field - { - width: 66%; - } - - #loginBox td.field input - { - width: 100%; - } - - #loginBox td.buttons - { - text-align: right; - } - - - - - -
-

Login

-

${message}

-
-
BuildBuild Date
BuildBuild Date
- ${builds.builds[build]['title']} - ${builds.builds[build]['title']} - (build) + ${builds.builds[build]['title']} + ${builds.builds[build]['title']} ${builds.builds[build]['pubDate']}
- - - - - - - - - - - - - - - - - -
- - - -
- - - -
- -
Forgot Password?
Sign Up
- - - - - - - + +

Login

+

${message}

+
+
    +
  • +
  • +
  • + + + +
  • +
+
+ + diff --git a/fas/fas/templates/master.kid b/fas/fas/templates/master.kid index 59005da..1fd3188 100644 --- a/fas/fas/templates/master.kid +++ b/fas/fas/templates/master.kid @@ -2,37 +2,21 @@ - - - Your title goes here + + Title + - - - - - + - +
@@ -49,74 +33,50 @@
- Logged in: ${tg.identity.user.user_name}. + Logged in: ${tg.identity.user.user_name}
- +
+
+ ${tg_flash} +
+
+
+ - - - - -
- - -
-
- -
- +
+ + diff --git a/fas/fas/templates/resetPassword.kid b/fas/fas/templates/resetPassword.kid index b653412..df0c53f 100644 --- a/fas/fas/templates/resetPassword.kid +++ b/fas/fas/templates/resetPassword.kid @@ -1,28 +1,30 @@ - - - - - - - -
- Username:
- Primary Email:
- -
-
- -
- New password for ${tg.identity.user.user_name}
- New Password:
- Verify Password: - -
-
- - + + + Reset Password + + +

Reset Password

+
+
+
    +
  • +
  • +
  • +
+
+
+
+

+ New password for ${tg.identity.user.user_name} +

+
+
    +
  • +
  • +
  • +
+
+
+ diff --git a/fas/fas/templates/signUp.kid b/fas/fas/templates/signUp.kid index 6ad6959..a90b3cd 100644 --- a/fas/fas/templates/signUp.kid +++ b/fas/fas/templates/signUp.kid @@ -1,28 +1,10 @@ - - + - + Sign up for a Fedora account - - - - -${form(action='newAccountSubmit', method='post')} +

Sign up for a Fedora account

+ ${form(action='newAccountSubmit', method='post')} diff --git a/fas/fas/templates/userList.kid b/fas/fas/templates/userList.kid index 84575cd..6342252 100644 --- a/fas/fas/templates/userList.kid +++ b/fas/fas/templates/userList.kid @@ -4,35 +4,44 @@ xmlns:mochi="MyUniqueMochiUri"> - + Users List - +

List (${search})

-

List (${search})

- -
- Search (Ex: "mmcg*") + +

"*" is a wildcard (Ex: "cvs*")

+
+ + +
+

Results

+ + - - - - -
- ${letter} - All
- - + + + + - - + + + + + +
Username
UsernameAccount Status
${item} (edit)
${user} + Done + Done +
diff --git a/fas/ldap/52fc-fedora-person.ldif b/fas/ldap/52fc-fedora-person.ldif index 788dcc3..e61c35d 100644 --- a/fas/ldap/52fc-fedora-person.ldif +++ b/fas/ldap/52fc-fedora-person.ldif @@ -2,12 +2,16 @@ #it is based on the inetOrgPerson shema, but has some spicific #attribues added onto it for use by the Account system #for now this is the contents -#sshkey bugzillaemail +#sshkey bugzillaemail ircNick approvalStatus creationDate dn: cn=schema -attributeTypes: ( 2.5.444.8 NAME 'sshkey' DESC 'ssh key for this member' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{50} ) -attributeTypes: ( 2.5.444.9 NAME 'bugzillaemail' DESC 'members preferred bugzilla email address' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) +attributeTypes: ( 2.5.444.8 NAME 'fedoraPersonSshKey' DESC 'ssh key for this member' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{4096} SINGLE-VALUE) +attributeTypes: ( 2.5.444.9 NAME 'fedoraPersonBugzillaMail' DESC 'members preferred bugzilla email address' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} ) +attributeTypes: ( 2.5.444.16 NAME 'fedoraPersonIrcNick' DESC 'irc nick of the user on freenode' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{100} ) +attributetypes: ( 2.5.444.17 NAME 'fedoraPersonCreationDate' DESC 'date entry was created' EQUALITY caseIgnoreIA5Match SUBSTR caseIgnoreIA5SubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) +attributeTypes: ( 2.5.444.18 NAME 'fedoraPersonApprovalStatus' DESC 'users approval status' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{50} ) +attributeTypes: ( 2.5.444.19 NAME 'fedoraPersonKeyId' DESC 'users GPG key ID' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{50} ) # fedoraPerson # The fedoraPerson represents people who are a member of the fedora project # in some way. It is a structural class and inherits # from the inetOrgPerson class -objectclasses: ( 2.5.555.1 NAME 'fedoraPerson' DESC 'A member of the fedoraproject group' SUP inetOrgPerson STRUCTURAL MUST ( sshkey $ bugzillaemail ) ) +objectClasses: ( 2.5.555.1 NAME 'fedoraPerson' DESC 'A member of the fedoraproject group' SUP inetOrgPerson STRUCTURAL MUST ( fedoraPersonSshKey $ mail $ fedoraPersonCreationDate ) MAY (fedoraPersonIrcNick $ fedoraPersonApprovalStatus $ fedoraPersonBugzillaMail $ fedoraPersonKeyId ) ) diff --git a/fas/ldap/53fc-fedora-group.ldif b/fas/ldap/53fc-fedora-group.ldif index 87ee867..4e32a55 100644 --- a/fas/ldap/53fc-fedora-group.ldif +++ b/fas/ldap/53fc-fedora-group.ldif @@ -12,5 +12,6 @@ attributeTypes: ( 2.5.444.11 NAME 'fedoraGroupType' DESC 'the type of group' EQU attributeTypes: ( 2.5.444.12 NAME 'fedoraGroupNeedsSponsor' DESC 'boolean indicating whether or not the group needs a sponsor' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 ) attributeTypes: ( 2.5.444.13 NAME 'fedoraGroupUserCanRemove' DESC 'boolean indicating whether or not the user can remove the group' EQUALITY booleanMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 ) attributeTypes: ( 2.5.444.14 NAME 'fedoraGroupJoinMsg' DESC 'message received upon joining the group' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1000} ) +attributeTypes: ( 2.5.444.21 NAME 'fedoraGroupDesc' DESC 'group description' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{100} ) attributeTypes: ( 2.5.444.20 NAME 'fedoraGroupRequires' DESC 'Requisites of this Group' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{50} ) -objectClasses: ( 2.5.555.3 NAME 'fedoraGroup' DESC 'A object describing a group entry' STRUCTURAL MUST ( cn $ fedoraGroupOwner ) MAY ( fedoraGroupJoinMsg $ fedoraGroupUsercanRemove $ fedoraGroupType $ fedoraGroupNeedsSponsor $ fedoraGroupUserCanRemove $ fedoraGroupRequires ) ) +objectClasses: ( 2.5.555.3 NAME 'fedoraGroup' DESC 'A object describing a group entry' STRUCTURAL MUST ( cn $ fedoraGroupDesc $ fedoraGroupOwner ) MAY ( fedoraGroupJoinMsg $ fedoraGroupUsercanRemove $ fedoraGroupType $ fedoraGroupNeedsSponsor $ fedoraGroupUserCanRemove $ fedoraGroupRequires ) )