# HG changeset patch # User Stephanie Marcu # Date 1291904821 -3600 # Node ID 36ed2bf7ad3d1e551347a184230e5d4cf53bad49 # Parent 24bf6f181d0e4b6715f46448b1a0d676d5c2cd95 [#615712] replace calendar views with views using fullcalendar jquery plugin (remove old_calendar) diff -r 24bf6f181d0e -r 36ed2bf7ad3d i18n/de.po --- a/i18n/de.po Wed Dec 01 17:11:35 2010 +0100 +++ b/i18n/de.po Thu Dec 09 15:27:01 2010 +0100 @@ -8,10 +8,10 @@ "PO-Revision-Date: 2010-09-15 14:55+0200\n" "Last-Translator: Dr. Leo \n" "Language-Team: English \n" -"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: de\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -27,8 +27,8 @@ "url: %(url)s\n" msgstr "" "\n" -"%(user)s hat den Zustand geändert von <%(previous_state)s> in <" -"%(current_state)s> für die Entität\n" +"%(user)s hat den Zustand geändert von <%(previous_state)s> in <%" +"(current_state)s> für die Entität\n" "'%(title)s'\n" "\n" "%(comment)s\n" @@ -392,8 +392,8 @@ "Can't restore relation %(rtype)s, %(role)s entity %(eid)s doesn't exist " "anymore." msgstr "" -"Kann die Relation %(rtype)s nicht wieder herstellen, die Entität %(role)s " -"%(eid)s existiert nicht mehr." +"Kann die Relation %(rtype)s nicht wieder herstellen, die Entität %(role)s %" +"(eid)s existiert nicht mehr." #, python-format msgid "" @@ -439,10 +439,10 @@ msgid "Download schema as OWL" msgstr "Herunterladen des Schemas im OWL-Format" +msgctxt "inlined:CWUser.use_email.subject" msgid "EmailAddress" msgstr "Email-Adresse" -msgctxt "inlined:CWUser.use_email.subject" msgid "EmailAddress" msgstr "Email-Adresse" @@ -1051,9 +1051,6 @@ msgid "add_permission" msgstr "Berechtigung hinzufügen" -msgid "add_permission_object" -msgstr "hat die Berechtigung zum Hinzufügen" - msgctxt "CWGroup" msgid "add_permission_object" msgstr "kann hinzufügen" @@ -1062,6 +1059,9 @@ msgid "add_permission_object" msgstr "benutzt, um die Hinzufüge-Berechtigung zu festzulegen für" +msgid "add_permission_object" +msgstr "hat die Berechtigung zum Hinzufügen" + msgid "add_relation" msgstr "hinzufügen" @@ -1071,11 +1071,11 @@ #, python-format msgid "" -"added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #" -"%(eidto)s" +"added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%" +"(eidto)s" msgstr "" -"Die Relation %(rtype)s von %(frometype)s #%(eidfrom)s zu %(toetype)s #" -"%(eidto)s wurde hinzugefügt." +"Die Relation %(rtype)s von %(frometype)s #%(eidfrom)s zu %(toetype)s #%" +"(eidto)s wurde hinzugefügt." msgid "addrelated" msgstr "hinzufügen" @@ -1107,9 +1107,6 @@ msgid "allowed_transition" msgstr "erlaubter Übergang" -msgid "allowed_transition_object" -msgstr "ausstehende Zustände" - msgctxt "BaseTransition" msgid "allowed_transition_object" msgstr "ausstehende Zustände" @@ -1122,6 +1119,9 @@ msgid "allowed_transition_object" msgstr "ausstehende Zustände" +msgid "allowed_transition_object" +msgstr "ausstehende Zustände" + msgid "am/pm calendar (month)" msgstr "am/pm Kalender (Monat)" @@ -1216,13 +1216,13 @@ msgid "bookmarked_by" msgstr "Lesezeichen angelegt durch" -msgid "bookmarked_by_object" -msgstr "hat Lesezeichen" - msgctxt "CWUser" msgid "bookmarked_by_object" msgstr "verwendet Lesezeichen" +msgid "bookmarked_by_object" +msgstr "hat Lesezeichen" + msgid "bookmarks" msgstr "Lesezeichen" @@ -1260,9 +1260,6 @@ msgid "by_transition" msgstr "je Übergang" -msgid "by_transition_object" -msgstr "Übergangsinformation" - msgctxt "BaseTransition" msgid "by_transition_object" msgstr "Übergangsinformation" @@ -1275,6 +1272,9 @@ msgid "by_transition_object" msgstr "Übergangsinformation" +msgid "by_transition_object" +msgstr "Übergangsinformation" + msgid "calendar" msgstr "Kalender anzeigen" @@ -1429,10 +1429,10 @@ msgid "condition" msgstr "Bedingung" +msgctxt "RQLExpression" msgid "condition_object" msgstr "Bedingung von" -msgctxt "RQLExpression" msgid "condition_object" msgstr "Bedingung von" @@ -1442,11 +1442,11 @@ msgid "config" msgstr "" -msgctxt "CWSource" +msgctxt "CWSourceHostConfig" msgid "config" msgstr "" -msgctxt "CWSourceHostConfig" +msgctxt "CWSource" msgid "config" msgstr "" @@ -1470,10 +1470,10 @@ msgid "constrained_by" msgstr "eingeschränkt durch" +msgctxt "CWConstraint" msgid "constrained_by_object" msgstr "Einschränkungen" -msgctxt "CWConstraint" msgid "constrained_by_object" msgstr "Einschränkungen" @@ -1487,10 +1487,10 @@ msgid "constraint_of" msgstr "" +msgctxt "CWEType" msgid "constraint_of_object" msgstr "" -msgctxt "CWEType" msgid "constraint_of_object" msgstr "" @@ -1582,8 +1582,8 @@ msgstr "Erstelle Relation %(linkto)s" msgid "" -"creating CWSourceHostConfig (CWSourceHostConfig cw_host_config_of CWSource " -"%(linkto)s)" +"creating CWSourceHostConfig (CWSourceHostConfig cw_host_config_of CWSource %" +"(linkto)s)" msgstr "" msgid "" @@ -1672,8 +1672,8 @@ msgstr "Erstelle Workflow-Übergang, der zum Zustand %(linkto)s führt." msgid "" -"creating WorkflowTransition (WorkflowTransition transition_of Workflow " -"%(linkto)s)" +"creating WorkflowTransition (WorkflowTransition transition_of Workflow %" +"(linkto)s)" msgstr "Erstelle Workflow-Übergang des Workflows %(linkto)s" msgid "creation" @@ -1695,13 +1695,13 @@ msgid "cstrtype" msgstr "Einschränkungstyp" -msgid "cstrtype_object" -msgstr "benutzt von" - msgctxt "CWConstraintType" msgid "cstrtype_object" msgstr "Einschränkungstyp von" +msgid "cstrtype_object" +msgstr "benutzt von" + msgid "csv entities export" msgstr "CSV-Export von Entitäten" @@ -1717,6 +1717,12 @@ msgid "ctxcomponents_anonuserlink_description" msgstr "" +msgid "ctxcomponents_appliname" +msgstr "" + +msgid "ctxcomponents_appliname_description" +msgstr "" + msgid "ctxcomponents_bookmarks_box" msgstr "Lesezeichen-Box" @@ -1820,10 +1826,10 @@ msgid "cw_dont_cross" msgstr "" +msgctxt "CWRType" msgid "cw_dont_cross_object" msgstr "" -msgctxt "CWRType" msgid "cw_dont_cross_object" msgstr "" @@ -1834,10 +1840,10 @@ msgid "cw_host_config_of" msgstr "" +msgctxt "CWSource" msgid "cw_host_config_of_object" msgstr "" -msgctxt "CWSource" msgid "cw_host_config_of_object" msgstr "" @@ -1848,10 +1854,10 @@ msgid "cw_may_cross" msgstr "" +msgctxt "CWRType" msgid "cw_may_cross_object" msgstr "" -msgctxt "CWRType" msgid "cw_may_cross_object" msgstr "" @@ -1868,9 +1874,6 @@ msgid "cw_support" msgstr "" -msgid "cw_support_object" -msgstr "" - msgctxt "CWEType" msgid "cw_support_object" msgstr "" @@ -1879,6 +1882,9 @@ msgid "cw_support_object" msgstr "" +msgid "cw_support_object" +msgstr "" + msgid "cwetype-box" msgstr "Box-Ansicht" @@ -1915,6 +1921,9 @@ msgid "date" msgstr "Datum" +msgid "day" +msgstr "" + msgid "deactivate" msgstr "deaktivieren" @@ -1946,10 +1955,10 @@ msgid "default_workflow" msgstr "Standard-Workflow" +msgctxt "Workflow" msgid "default_workflow_object" msgstr "Standard-Workflow von" -msgctxt "Workflow" msgid "default_workflow_object" msgstr "Standard-Workflow von" @@ -2029,9 +2038,6 @@ msgid "delete_permission" msgstr "Lösch-Berechtigung" -msgid "delete_permission_object" -msgstr "hat Lösch-Berechtigung" - msgctxt "CWGroup" msgid "delete_permission_object" msgstr "hat Lösch-Berechtigung für" @@ -2040,14 +2046,17 @@ msgid "delete_permission_object" msgstr "hat die Berechtigung, zu löschen" +msgid "delete_permission_object" +msgstr "hat Lösch-Berechtigung" + #, python-format msgid "deleted %(etype)s #%(eid)s (%(title)s)" msgstr "Löschen der Entität %(etype)s #%(eid)s (%(title)s)" #, python-format msgid "" -"deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #" -"%(eidto)s" +"deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%" +"(eidto)s" msgstr "" "Relation %(rtype)s von %(frometype)s #%(eidfrom)s zu %(toetype)s #%(eidto)s " "gelöscht" @@ -2058,7 +2067,15 @@ msgid "description" msgstr "Beschreibung" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "description" +msgstr "Beschreibung" + +msgctxt "CWRelation" +msgid "description" +msgstr "Beschreibung" + +msgctxt "Workflow" msgid "description" msgstr "Beschreibung" @@ -2066,38 +2083,38 @@ msgid "description" msgstr "Beschreibung" -msgctxt "CWEType" -msgid "description" -msgstr "Beschreibung" - -msgctxt "CWRType" -msgid "description" -msgstr "Beschreibung" - -msgctxt "CWRelation" -msgid "description" -msgstr "Beschreibung" - -msgctxt "State" -msgid "description" -msgstr "Beschreibung" - msgctxt "Transition" msgid "description" msgstr "Beschreibung" -msgctxt "Workflow" -msgid "description" -msgstr "Beschreibung" - msgctxt "WorkflowTransition" msgid "description" msgstr "Beschreibung" +msgctxt "State" +msgid "description" +msgstr "Beschreibung" + +msgctxt "CWRType" +msgid "description" +msgstr "Beschreibung" + +msgctxt "BaseTransition" +msgid "description" +msgstr "Beschreibung" + msgid "description_format" msgstr "Format" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "description_format" +msgstr "Format" + +msgctxt "CWRelation" +msgid "description_format" +msgstr "Format" + +msgctxt "Workflow" msgid "description_format" msgstr "Format" @@ -2105,7 +2122,15 @@ msgid "description_format" msgstr "Format" -msgctxt "CWEType" +msgctxt "Transition" +msgid "description_format" +msgstr "Format" + +msgctxt "WorkflowTransition" +msgid "description_format" +msgstr "Format" + +msgctxt "State" msgid "description_format" msgstr "Format" @@ -2113,23 +2138,7 @@ msgid "description_format" msgstr "Format" -msgctxt "CWRelation" -msgid "description_format" -msgstr "Format" - -msgctxt "State" -msgid "description_format" -msgstr "Format" - -msgctxt "Transition" -msgid "description_format" -msgstr "Format" - -msgctxt "Workflow" -msgid "description_format" -msgstr "Format" - -msgctxt "WorkflowTransition" +msgctxt "BaseTransition" msgid "description_format" msgstr "Format" @@ -2152,18 +2161,18 @@ msgid "destination_state" msgstr "Zielzustand" +msgctxt "Transition" +msgid "destination_state" +msgstr "Zielzustand" + msgctxt "SubWorkflowExitPoint" msgid "destination_state" msgstr "Zielzustand" -msgctxt "Transition" -msgid "destination_state" -msgstr "Zielzustand" - +msgctxt "State" msgid "destination_state_object" msgstr "Ziel von" -msgctxt "State" msgid "destination_state_object" msgstr "Ziel von" @@ -2427,13 +2436,13 @@ msgid "for_user" msgstr "für Nutzer" -msgid "for_user_object" -msgstr "hat als Eigenschaft" - msgctxt "CWUser" msgid "for_user_object" msgstr "verwendet die Eigenschaften" +msgid "for_user_object" +msgstr "hat als Eigenschaft" + msgid "friday" msgstr "Freitag" @@ -2455,13 +2464,13 @@ msgid "from_entity" msgstr "Relation der Entität" -msgid "from_entity_object" -msgstr "der Entität" - msgctxt "CWEType" msgid "from_entity_object" msgstr "Subjektrelation" +msgid "from_entity_object" +msgstr "der Entität" + msgid "from_interval_start" msgstr "Von" @@ -2472,13 +2481,13 @@ msgid "from_state" msgstr "Anfangszustand" -msgid "from_state_object" -msgstr "Übergänge aus diesem Zustand" - msgctxt "State" msgid "from_state_object" msgstr "Anfangszustand von" +msgid "from_state_object" +msgstr "Übergänge aus diesem Zustand" + msgid "full text or RQL query" msgstr "Volltextsuche oder RQL-Anfrage" @@ -2524,16 +2533,16 @@ "graphical representation of the %(etype)s entity type from %(appid)s data " "model" msgstr "" -"graphische Darstellung des Datenmodells des Entitätstyps (etype)s von " -"%(appid)s" +"graphische Darstellung des Datenmodells des Entitätstyps (etype)s von %" +"(appid)s" #, python-format msgid "" "graphical representation of the %(rtype)s relation type from %(appid)s data " "model" msgstr "" -"graphische Darstellung des Datenmodells des Relationstyps %(rtype)s von " -"%(appid)s" +"graphische Darstellung des Datenmodells des Relationstyps %(rtype)s von %" +"(appid)s" msgid "group in which a user should be to be allowed to pass this transition" msgstr "" @@ -2563,6 +2572,9 @@ msgid "header-right" msgstr "" +msgid "help" +msgstr "" + msgid "hide filter form" msgstr "Filter verbergen" @@ -2651,13 +2663,13 @@ msgid "in_group" msgstr "gehört zu der Gruppe" -msgid "in_group_object" -msgstr "Mitglieder" - msgctxt "CWGroup" msgid "in_group_object" msgstr "enthält die Nutzer" +msgid "in_group_object" +msgstr "Mitglieder" + msgid "in_state" msgstr "Zustand" @@ -2711,10 +2723,10 @@ msgid "initial_state" msgstr "Anfangszustand" +msgctxt "State" msgid "initial_state_object" msgstr "Anfangszustand von" -msgctxt "State" msgid "initial_state_object" msgstr "Anfangszustand von" @@ -2983,6 +2995,9 @@ msgid "monday" msgstr "Montag" +msgid "month" +msgstr "" + msgid "more actions" msgstr "weitere Aktionen" @@ -2998,11 +3013,23 @@ msgid "name" msgstr "Name" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "name" +msgstr "Name" + +msgctxt "Transition" msgid "name" msgstr "Name" -msgctxt "CWCache" +msgctxt "CWSource" +msgid "name" +msgstr "" + +msgctxt "Workflow" +msgid "name" +msgstr "Name" + +msgctxt "CWGroup" msgid "name" msgstr "Name" @@ -3010,11 +3037,11 @@ msgid "name" msgstr "Name" -msgctxt "CWEType" +msgctxt "WorkflowTransition" msgid "name" msgstr "Name" -msgctxt "CWGroup" +msgctxt "State" msgid "name" msgstr "Name" @@ -3026,23 +3053,11 @@ msgid "name" msgstr "Name" -msgctxt "CWSource" -msgid "name" -msgstr "" - -msgctxt "State" +msgctxt "BaseTransition" msgid "name" msgstr "Name" -msgctxt "Transition" -msgid "name" -msgstr "Name" - -msgctxt "Workflow" -msgid "name" -msgstr "Name" - -msgctxt "WorkflowTransition" +msgctxt "CWCache" msgid "name" msgstr "Name" @@ -3260,13 +3275,13 @@ msgid "prefered_form" msgstr "bevorzugte form" -msgid "prefered_form_object" -msgstr "bevorzugte form vor" - msgctxt "EmailAddress" msgid "prefered_form_object" msgstr "bevorzugte form von" +msgid "prefered_form_object" +msgstr "bevorzugte form vor" + msgid "preferences" msgstr "Einstellungen" @@ -3283,13 +3298,13 @@ msgid "primary_email" msgstr "primäre E-Mail-Adresse" -msgid "primary_email_object" -msgstr "Objekt der primären E-Mail-Adresse" - msgctxt "EmailAddress" msgid "primary_email_object" msgstr "primäre E-Mail-Adresse von" +msgid "primary_email_object" +msgstr "Objekt der primären E-Mail-Adresse" + msgid "profile" msgstr "Profil" @@ -3314,11 +3329,11 @@ msgid "read_permission" msgstr "Leseberechtigung" -msgctxt "CWAttribute" +msgctxt "CWEType" msgid "read_permission" msgstr "Leseberechtigung" -msgctxt "CWEType" +msgctxt "CWAttribute" msgid "read_permission" msgstr "Leseberechtigung" @@ -3326,9 +3341,6 @@ msgid "read_permission" msgstr "Leseberechtigung" -msgid "read_permission_object" -msgstr "hat eine Leseberechtigung" - msgctxt "CWGroup" msgid "read_permission_object" msgstr "kann lesen" @@ -3337,6 +3349,9 @@ msgid "read_permission_object" msgstr "kann lesen" +msgid "read_permission_object" +msgstr "hat eine Leseberechtigung" + msgid "regexp matching host(s) to which this config applies" msgstr "" @@ -3373,13 +3388,13 @@ msgid "relation_type" msgstr "Relationstyp" -msgid "relation_type_object" -msgstr "Definition" - msgctxt "CWRType" msgid "relation_type_object" msgstr "definition" +msgid "relation_type_object" +msgstr "Definition" + msgid "relations" msgstr "Relationen" @@ -3390,9 +3405,6 @@ msgid "relations deleted" msgstr "Relationen entfernt" -msgid "relations_object" -msgstr "Relationen von" - msgctxt "CWAttribute" msgid "relations_object" msgstr "eingeschränkt durch" @@ -3401,6 +3413,9 @@ msgid "relations_object" msgstr "eingeschränkt durch" +msgid "relations_object" +msgstr "Relationen von" + msgid "relative url of the bookmarked page" msgstr "URL relativ zu der Seite" @@ -3414,11 +3429,11 @@ msgid "require_group" msgstr "auf Gruppe beschränkt" -msgctxt "CWPermission" +msgctxt "Transition" msgid "require_group" msgstr "auf Gruppe beschränkt" -msgctxt "Transition" +msgctxt "CWPermission" msgid "require_group" msgstr "auf Gruppe beschränkt" @@ -3426,10 +3441,10 @@ msgid "require_group" msgstr "auf Gruppe beschränkt" +msgctxt "CWGroup" msgid "require_group_object" msgstr "hat die Rechte" -msgctxt "CWGroup" msgid "require_group_object" msgstr "hat die Rechte" @@ -3640,10 +3655,10 @@ msgid "specializes" msgstr "spezialisiert" +msgctxt "CWEType" msgid "specializes_object" msgstr "Vorgänger von" -msgctxt "CWEType" msgid "specializes_object" msgstr "Vorgänger von" @@ -3682,13 +3697,13 @@ msgid "state_of" msgstr "Zustand von" -msgid "state_of_object" -msgstr "hat als Zustand" - msgctxt "Workflow" msgid "state_of_object" msgstr "enthält die Zustände" +msgid "state_of_object" +msgstr "hat als Zustand" + msgid "status change" msgstr "Zustand ändern" @@ -3731,20 +3746,20 @@ msgid "subworkflow_exit" msgstr "Ende des Subworkflows" -msgid "subworkflow_exit_object" -msgstr "Endzustand" - msgctxt "SubWorkflowExitPoint" msgid "subworkflow_exit_object" msgstr "Endzustände" -msgid "subworkflow_object" -msgstr "verwendet vom Übergang" +msgid "subworkflow_exit_object" +msgstr "Endzustand" msgctxt "Workflow" msgid "subworkflow_object" msgstr "Subworkflow von" +msgid "subworkflow_object" +msgstr "verwendet vom Übergang" + msgid "subworkflow_state" msgstr "Zustand des Subworkflows" @@ -3752,10 +3767,10 @@ msgid "subworkflow_state" msgstr "Zustand" +msgctxt "State" msgid "subworkflow_state_object" msgstr "Endzustand von" -msgctxt "State" msgid "subworkflow_state_object" msgstr "Endzustand von" @@ -3870,10 +3885,10 @@ msgid "to_entity" msgstr "für die Entität" +msgctxt "CWEType" msgid "to_entity_object" msgstr "Objekt der Relation" -msgctxt "CWEType" msgid "to_entity_object" msgstr "Objekt der Relation" @@ -3887,13 +3902,16 @@ msgid "to_state" msgstr "Zielstatus" -msgid "to_state_object" -msgstr "Übergänge zu dem Zustand" - msgctxt "State" msgid "to_state_object" msgstr "Übergang zu diesem Zustand" +msgid "to_state_object" +msgstr "Übergänge zu dem Zustand" + +msgid "today" +msgstr "" + msgid "todo_by" msgstr "zu erledigen bis" @@ -3931,10 +3949,10 @@ msgid "transition_of" msgstr "Übergang des/der" +msgctxt "Workflow" msgid "transition_of_object" msgstr "hat als Übergang" -msgctxt "Workflow" msgid "transition_of_object" msgstr "hat als Übergang" @@ -3951,10 +3969,6 @@ msgid "type" msgstr "Typ" -msgctxt "CWSource" -msgid "type" -msgstr "" - msgctxt "Transition" msgid "type" msgstr "Typ" @@ -3963,6 +3977,10 @@ msgid "type" msgstr "Typ" +msgctxt "CWSource" +msgid "type" +msgstr "" + msgid "type here a sparql query" msgstr "Geben sie eine sparql-Anfrage ein" @@ -4043,17 +4061,14 @@ msgid "update_permission" msgstr "Änderungsrecht" +msgctxt "CWEType" +msgid "update_permission" +msgstr "Änderungsrecht" + msgctxt "CWAttribute" msgid "update_permission" msgstr "Änderungsrecht" -msgctxt "CWEType" -msgid "update_permission" -msgstr "Änderungsrecht" - -msgid "update_permission_object" -msgstr "hat die Änderungsberechtigung" - msgctxt "CWGroup" msgid "update_permission_object" msgstr "kann ändern" @@ -4062,6 +4077,9 @@ msgid "update_permission_object" msgstr "kann ändern" +msgid "update_permission_object" +msgstr "hat die Änderungsberechtigung" + msgid "update_relation" msgstr "aktualisieren" @@ -4098,13 +4116,13 @@ msgid "use_email" msgstr "verwendet die E-Mail-Adresse" -msgid "use_email_object" -msgstr "Adresse verwendet von" - msgctxt "EmailAddress" msgid "use_email_object" msgstr "verwendet von" +msgid "use_email_object" +msgstr "Adresse verwendet von" + msgid "use_template_format" msgstr "Benutzung des 'cubicweb template'-Formats" @@ -4294,10 +4312,10 @@ msgid "workflow_of" msgstr "Workflow von" +msgctxt "CWEType" msgid "workflow_of_object" msgstr "hat als Workflow" -msgctxt "CWEType" msgid "workflow_of_object" msgstr "hat als Workflow" diff -r 24bf6f181d0e -r 36ed2bf7ad3d i18n/en.po --- a/i18n/en.po Wed Dec 01 17:11:35 2010 +0100 +++ b/i18n/en.po Thu Dec 09 15:27:01 2010 +0100 @@ -8,10 +8,10 @@ "PO-Revision-Date: 2010-09-15 14:55+0200\n" "Last-Translator: Sylvain Thenault \n" "Language-Team: English \n" -"Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: en\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" @@ -415,10 +415,10 @@ msgid "Download schema as OWL" msgstr "" +msgctxt "inlined:CWUser.use_email.subject" msgid "EmailAddress" msgstr "Email address" -msgctxt "inlined:CWUser.use_email.subject" msgid "EmailAddress" msgstr "Email address" @@ -1011,9 +1011,6 @@ msgid "add_permission" msgstr "add permission" -msgid "add_permission_object" -msgstr "has permission to add" - msgctxt "CWGroup" msgid "add_permission_object" msgstr "can add" @@ -1022,6 +1019,9 @@ msgid "add_permission_object" msgstr "used to define add permission on" +msgid "add_permission_object" +msgstr "has permission to add" + msgid "add_relation" msgstr "add" @@ -1031,8 +1031,8 @@ #, python-format msgid "" -"added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #" -"%(eidto)s" +"added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%" +"(eidto)s" msgstr "" msgid "addrelated" @@ -1065,9 +1065,6 @@ msgid "allowed_transition" msgstr "allowed transition" -msgid "allowed_transition_object" -msgstr "incoming states" - msgctxt "BaseTransition" msgid "allowed_transition_object" msgstr "incoming states" @@ -1080,6 +1077,9 @@ msgid "allowed_transition_object" msgstr "incoming states" +msgid "allowed_transition_object" +msgstr "incoming states" + msgid "am/pm calendar (month)" msgstr "" @@ -1171,13 +1171,13 @@ msgid "bookmarked_by" msgstr "bookmarked by" -msgid "bookmarked_by_object" -msgstr "has bookmarks" - msgctxt "CWUser" msgid "bookmarked_by_object" msgstr "uses bookmarks" +msgid "bookmarked_by_object" +msgstr "has bookmarks" + msgid "bookmarks" msgstr "" @@ -1215,9 +1215,6 @@ msgid "by_transition" msgstr "by transition" -msgid "by_transition_object" -msgstr "transition information" - msgctxt "BaseTransition" msgid "by_transition_object" msgstr "transition information" @@ -1230,6 +1227,9 @@ msgid "by_transition_object" msgstr "transition information" +msgid "by_transition_object" +msgstr "transition information" + msgid "calendar" msgstr "" @@ -1381,10 +1381,10 @@ msgid "condition" msgstr "condition" +msgctxt "RQLExpression" msgid "condition_object" msgstr "condition of" -msgctxt "RQLExpression" msgid "condition_object" msgstr "condition of" @@ -1394,11 +1394,11 @@ msgid "config" msgstr "" -msgctxt "CWSource" +msgctxt "CWSourceHostConfig" msgid "config" msgstr "" -msgctxt "CWSourceHostConfig" +msgctxt "CWSource" msgid "config" msgstr "" @@ -1422,10 +1422,10 @@ msgid "constrained_by" msgstr "constrained by" +msgctxt "CWConstraint" msgid "constrained_by_object" msgstr "constraints" -msgctxt "CWConstraint" msgid "constrained_by_object" msgstr "constraints" @@ -1439,10 +1439,10 @@ msgid "constraint_of" msgstr "" +msgctxt "CWEType" msgid "constraint_of_object" msgstr "" -msgctxt "CWEType" msgid "constraint_of_object" msgstr "" @@ -1533,8 +1533,8 @@ msgstr "creating relation %(linkto)s" msgid "" -"creating CWSourceHostConfig (CWSourceHostConfig cw_host_config_of CWSource " -"%(linkto)s)" +"creating CWSourceHostConfig (CWSourceHostConfig cw_host_config_of CWSource %" +"(linkto)s)" msgstr "creating host configuration for source %(linkto)s" msgid "" @@ -1623,8 +1623,8 @@ msgstr "creating workflow-transition leading to state %(linkto)s" msgid "" -"creating WorkflowTransition (WorkflowTransition transition_of Workflow " -"%(linkto)s)" +"creating WorkflowTransition (WorkflowTransition transition_of Workflow %" +"(linkto)s)" msgstr "creating workflow-transition of workflow %(linkto)s" msgid "creation" @@ -1646,13 +1646,13 @@ msgid "cstrtype" msgstr "constraint type" -msgid "cstrtype_object" -msgstr "used by" - msgctxt "CWConstraintType" msgid "cstrtype_object" msgstr "constraint type of" +msgid "cstrtype_object" +msgstr "used by" + msgid "csv entities export" msgstr "" @@ -1779,10 +1779,10 @@ msgid "cw_dont_cross" msgstr "" +msgctxt "CWRType" msgid "cw_dont_cross_object" msgstr "" -msgctxt "CWRType" msgid "cw_dont_cross_object" msgstr "" @@ -1793,10 +1793,10 @@ msgid "cw_host_config_of" msgstr "" +msgctxt "CWSource" msgid "cw_host_config_of_object" msgstr "" -msgctxt "CWSource" msgid "cw_host_config_of_object" msgstr "" @@ -1807,10 +1807,10 @@ msgid "cw_may_cross" msgstr "" +msgctxt "CWRType" msgid "cw_may_cross_object" msgstr "" -msgctxt "CWRType" msgid "cw_may_cross_object" msgstr "" @@ -1827,9 +1827,6 @@ msgid "cw_support" msgstr "" -msgid "cw_support_object" -msgstr "" - msgctxt "CWEType" msgid "cw_support_object" msgstr "" @@ -1838,6 +1835,9 @@ msgid "cw_support_object" msgstr "" +msgid "cw_support_object" +msgstr "" + msgid "cwetype-box" msgstr "\"box\" view" @@ -1874,6 +1874,9 @@ msgid "date" msgstr "" +msgid "day" +msgstr "" + msgid "deactivate" msgstr "" @@ -1905,10 +1908,10 @@ msgid "default_workflow" msgstr "default workflow" +msgctxt "Workflow" msgid "default_workflow_object" msgstr "default workflow of" -msgctxt "Workflow" msgid "default_workflow_object" msgstr "default workflow of" @@ -1984,9 +1987,6 @@ msgid "delete_permission" msgstr "delete_permission" -msgid "delete_permission_object" -msgstr "has permission to delete" - msgctxt "CWGroup" msgid "delete_permission_object" msgstr "has permission to delete" @@ -1995,14 +1995,17 @@ msgid "delete_permission_object" msgstr "has permission to delete" +msgid "delete_permission_object" +msgstr "has permission to delete" + #, python-format msgid "deleted %(etype)s #%(eid)s (%(title)s)" msgstr "" #, python-format msgid "" -"deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #" -"%(eidto)s" +"deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%" +"(eidto)s" msgstr "" msgid "depends on the constraint type" @@ -2011,7 +2014,15 @@ msgid "description" msgstr "description" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "description" +msgstr "description" + +msgctxt "CWRelation" +msgid "description" +msgstr "description" + +msgctxt "Workflow" msgid "description" msgstr "description" @@ -2019,38 +2030,38 @@ msgid "description" msgstr "description" -msgctxt "CWEType" -msgid "description" -msgstr "description" - -msgctxt "CWRType" -msgid "description" -msgstr "description" - -msgctxt "CWRelation" -msgid "description" -msgstr "description" - -msgctxt "State" -msgid "description" -msgstr "description" - msgctxt "Transition" msgid "description" msgstr "description" -msgctxt "Workflow" -msgid "description" -msgstr "description" - msgctxt "WorkflowTransition" msgid "description" msgstr "description" +msgctxt "State" +msgid "description" +msgstr "description" + +msgctxt "CWRType" +msgid "description" +msgstr "description" + +msgctxt "BaseTransition" +msgid "description" +msgstr "description" + msgid "description_format" msgstr "format" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "description_format" +msgstr "format" + +msgctxt "CWRelation" +msgid "description_format" +msgstr "format" + +msgctxt "Workflow" msgid "description_format" msgstr "format" @@ -2058,7 +2069,15 @@ msgid "description_format" msgstr "format" -msgctxt "CWEType" +msgctxt "Transition" +msgid "description_format" +msgstr "format" + +msgctxt "WorkflowTransition" +msgid "description_format" +msgstr "format" + +msgctxt "State" msgid "description_format" msgstr "format" @@ -2066,23 +2085,7 @@ msgid "description_format" msgstr "format" -msgctxt "CWRelation" -msgid "description_format" -msgstr "format" - -msgctxt "State" -msgid "description_format" -msgstr "format" - -msgctxt "Transition" -msgid "description_format" -msgstr "format" - -msgctxt "Workflow" -msgid "description_format" -msgstr "format" - -msgctxt "WorkflowTransition" +msgctxt "BaseTransition" msgid "description_format" msgstr "format" @@ -2103,18 +2106,18 @@ msgid "destination_state" msgstr "destination state" +msgctxt "Transition" +msgid "destination_state" +msgstr "destination state" + msgctxt "SubWorkflowExitPoint" msgid "destination_state" msgstr "destination state" -msgctxt "Transition" -msgid "destination_state" -msgstr "destination state" - +msgctxt "State" msgid "destination_state_object" msgstr "destination of" -msgctxt "State" msgid "destination_state_object" msgstr "destination of" @@ -2373,13 +2376,13 @@ msgid "for_user" msgstr "for user" -msgid "for_user_object" -msgstr "use properties" - msgctxt "CWUser" msgid "for_user_object" msgstr "property of" +msgid "for_user_object" +msgstr "use properties" + msgid "friday" msgstr "" @@ -2401,13 +2404,13 @@ msgid "from_entity" msgstr "from entity" -msgid "from_entity_object" -msgstr "subjet relation" - msgctxt "CWEType" msgid "from_entity_object" msgstr "subjec relation" +msgid "from_entity_object" +msgstr "subjet relation" + msgid "from_interval_start" msgstr "from" @@ -2418,10 +2421,10 @@ msgid "from_state" msgstr "from state" +msgctxt "State" msgid "from_state_object" msgstr "transitions from this state" -msgctxt "State" msgid "from_state_object" msgstr "transitions from this state" @@ -2502,6 +2505,9 @@ msgid "header-right" msgstr "header (right)" +msgid "help" +msgstr "" + msgid "hide filter form" msgstr "" @@ -2582,10 +2588,10 @@ msgid "in_group" msgstr "in group" +msgctxt "CWGroup" msgid "in_group_object" msgstr "contains" -msgctxt "CWGroup" msgid "in_group_object" msgstr "contains" @@ -2640,10 +2646,10 @@ msgid "initial_state" msgstr "initial state" +msgctxt "State" msgid "initial_state_object" msgstr "initial state of" -msgctxt "State" msgid "initial_state_object" msgstr "initial state of" @@ -2900,6 +2906,9 @@ msgid "monday" msgstr "" +msgid "month" +msgstr "" + msgid "more actions" msgstr "" @@ -2915,19 +2924,19 @@ msgid "name" msgstr "" -msgctxt "BaseTransition" +msgctxt "CWEType" msgid "name" -msgstr "name" - -msgctxt "CWCache" +msgstr "" + +msgctxt "Transition" msgid "name" -msgstr "name" - -msgctxt "CWConstraintType" +msgstr "" + +msgctxt "CWSource" msgid "name" msgstr "" -msgctxt "CWEType" +msgctxt "Workflow" msgid "name" msgstr "" @@ -2935,6 +2944,18 @@ msgid "name" msgstr "" +msgctxt "CWConstraintType" +msgid "name" +msgstr "" + +msgctxt "WorkflowTransition" +msgid "name" +msgstr "" + +msgctxt "State" +msgid "name" +msgstr "name" + msgctxt "CWPermission" msgid "name" msgstr "name" @@ -2943,25 +2964,13 @@ msgid "name" msgstr "name" -msgctxt "CWSource" -msgid "name" -msgstr "" - -msgctxt "State" +msgctxt "BaseTransition" msgid "name" msgstr "name" -msgctxt "Transition" -msgid "name" -msgstr "" - -msgctxt "Workflow" +msgctxt "CWCache" msgid "name" -msgstr "" - -msgctxt "WorkflowTransition" -msgid "name" -msgstr "" +msgstr "name" msgid "name of the cache" msgstr "" @@ -3174,10 +3183,10 @@ msgid "prefered_form" msgstr "prefered form" +msgctxt "EmailAddress" msgid "prefered_form_object" msgstr "prefered over" -msgctxt "EmailAddress" msgid "prefered_form_object" msgstr "prefered over" @@ -3197,10 +3206,10 @@ msgid "primary_email" msgstr "primary email" +msgctxt "EmailAddress" msgid "primary_email_object" msgstr "primary email of" -msgctxt "EmailAddress" msgid "primary_email_object" msgstr "primary email of" @@ -3228,11 +3237,11 @@ msgid "read_permission" msgstr "can be read by" -msgctxt "CWAttribute" +msgctxt "CWEType" msgid "read_permission" msgstr "read permission" -msgctxt "CWEType" +msgctxt "CWAttribute" msgid "read_permission" msgstr "read permission" @@ -3240,9 +3249,6 @@ msgid "read_permission" msgstr "read permission" -msgid "read_permission_object" -msgstr "has permission to read" - msgctxt "CWGroup" msgid "read_permission_object" msgstr "can be read by" @@ -3251,6 +3257,9 @@ msgid "read_permission_object" msgstr "can be read by" +msgid "read_permission_object" +msgstr "has permission to read" + msgid "regexp matching host(s) to which this config applies" msgstr "" @@ -3287,10 +3296,10 @@ msgid "relation_type" msgstr "relation type" +msgctxt "CWRType" msgid "relation_type_object" msgstr "relation definitions" -msgctxt "CWRType" msgid "relation_type_object" msgstr "relation definitions" @@ -3304,9 +3313,6 @@ msgid "relations deleted" msgstr "" -msgid "relations_object" -msgstr "" - msgctxt "CWAttribute" msgid "relations_object" msgstr "" @@ -3315,6 +3321,9 @@ msgid "relations_object" msgstr "" +msgid "relations_object" +msgstr "" + msgid "relative url of the bookmarked page" msgstr "" @@ -3328,11 +3337,11 @@ msgid "require_group" msgstr "require group" -msgctxt "CWPermission" +msgctxt "Transition" msgid "require_group" msgstr "require group" -msgctxt "Transition" +msgctxt "CWPermission" msgid "require_group" msgstr "require group" @@ -3340,10 +3349,10 @@ msgid "require_group" msgstr "require group" +msgctxt "CWGroup" msgid "require_group_object" msgstr "required by" -msgctxt "CWGroup" msgid "require_group_object" msgstr "required by" @@ -3544,10 +3553,10 @@ msgid "specializes" msgstr "specializes" +msgctxt "CWEType" msgid "specializes_object" msgstr "specialized by" -msgctxt "CWEType" msgid "specializes_object" msgstr "specialized by" @@ -3584,10 +3593,10 @@ msgid "state_of" msgstr "state of" +msgctxt "Workflow" msgid "state_of_object" msgstr "use states" -msgctxt "Workflow" msgid "state_of_object" msgstr "use states" @@ -3631,17 +3640,17 @@ msgid "subworkflow_exit" msgstr "subworkflow exit" -msgid "subworkflow_exit_object" -msgstr "subworkflow exit of" - msgctxt "SubWorkflowExitPoint" msgid "subworkflow_exit_object" msgstr "subworkflow exit of" +msgid "subworkflow_exit_object" +msgstr "subworkflow exit of" + +msgctxt "Workflow" msgid "subworkflow_object" msgstr "subworkflow of" -msgctxt "Workflow" msgid "subworkflow_object" msgstr "subworkflow of" @@ -3652,10 +3661,10 @@ msgid "subworkflow_state" msgstr "subworkflow state" +msgctxt "State" msgid "subworkflow_state_object" msgstr "exit point" -msgctxt "State" msgid "subworkflow_state_object" msgstr "exit point" @@ -3769,10 +3778,10 @@ msgid "to_entity" msgstr "to entity" +msgctxt "CWEType" msgid "to_entity_object" msgstr "object relations" -msgctxt "CWEType" msgid "to_entity_object" msgstr "object relations" @@ -3786,13 +3795,16 @@ msgid "to_state" msgstr "to state" -msgid "to_state_object" -msgstr "transitions to this state" - msgctxt "State" msgid "to_state_object" msgstr "transitions to this state" +msgid "to_state_object" +msgstr "transitions to this state" + +msgid "today" +msgstr "" + msgid "todo_by" msgstr "to do by" @@ -3830,10 +3842,10 @@ msgid "transition_of" msgstr "transition of" +msgctxt "Workflow" msgid "transition_of_object" msgstr "use transitions" -msgctxt "Workflow" msgid "transition_of_object" msgstr "use transitions" @@ -3850,10 +3862,6 @@ msgid "type" msgstr "type" -msgctxt "CWSource" -msgid "type" -msgstr "" - msgctxt "Transition" msgid "type" msgstr "type" @@ -3862,6 +3870,10 @@ msgid "type" msgstr "type" +msgctxt "CWSource" +msgid "type" +msgstr "" + msgid "type here a sparql query" msgstr "" @@ -3942,17 +3954,14 @@ msgid "update_permission" msgstr "can be updated by" +msgctxt "CWEType" +msgid "update_permission" +msgstr "can be updated by" + msgctxt "CWAttribute" msgid "update_permission" msgstr "can be updated by" -msgctxt "CWEType" -msgid "update_permission" -msgstr "can be updated by" - -msgid "update_permission_object" -msgstr "has permission to update" - msgctxt "CWGroup" msgid "update_permission_object" msgstr "has permission to update" @@ -3961,6 +3970,9 @@ msgid "update_permission_object" msgstr "has permission to update" +msgid "update_permission_object" +msgstr "has permission to update" + msgid "update_relation" msgstr "update" @@ -3994,10 +4006,10 @@ msgid "use_email" msgstr "use email" +msgctxt "EmailAddress" msgid "use_email_object" msgstr "used by" -msgctxt "EmailAddress" msgid "use_email_object" msgstr "used by" @@ -4180,10 +4192,10 @@ msgid "workflow_of" msgstr "workflow of" +msgctxt "CWEType" msgid "workflow_of_object" msgstr "may use workflow" -msgctxt "CWEType" msgid "workflow_of_object" msgstr "may use workflow" diff -r 24bf6f181d0e -r 36ed2bf7ad3d i18n/es.po --- a/i18n/es.po Wed Dec 01 17:11:35 2010 +0100 +++ b/i18n/es.po Thu Dec 09 15:27:01 2010 +0100 @@ -8,10 +8,10 @@ "Last-Translator: Celso Flores, Carlos Balderas " "\n" "Language-Team: es \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" #, python-format msgid "" @@ -25,8 +25,8 @@ "url: %(url)s\n" msgstr "" "\n" -"%(user)s ha cambiado su estado de <%(previous_state)s> hacia <" -"%(current_state)s> por la entidad\n" +"%(user)s ha cambiado su estado de <%(previous_state)s> hacia <%" +"(current_state)s> por la entidad\n" "'%(title)s'\n" "\n" "%(comment)s\n" @@ -436,10 +436,10 @@ msgid "Download schema as OWL" msgstr "Descargar el esquema en formato OWL" +msgctxt "inlined:CWUser.use_email.subject" msgid "EmailAddress" msgstr "Correo Electrónico" -msgctxt "inlined:CWUser.use_email.subject" msgid "EmailAddress" msgstr "Correo Electrónico" @@ -1053,9 +1053,6 @@ msgid "add_permission" msgstr "Permiso de agregar" -msgid "add_permission_object" -msgstr "tiene permiso de agregar" - msgctxt "CWGroup" msgid "add_permission_object" msgstr "tiene permiso de agregar" @@ -1064,6 +1061,9 @@ msgid "add_permission_object" msgstr "tiene permiso de agregar" +msgid "add_permission_object" +msgstr "tiene permiso de agregar" + msgid "add_relation" msgstr "agregar" @@ -1073,8 +1073,8 @@ #, python-format msgid "" -"added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #" -"%(eidto)s" +"added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%" +"(eidto)s" msgstr "" "la relación %(rtype)s de %(frometype)s #%(eidfrom)s a %(toetype)s #%(eidto)s " "ha sido agregada" @@ -1109,9 +1109,6 @@ msgid "allowed_transition" msgstr "transiciones autorizadas" -msgid "allowed_transition_object" -msgstr "Estados de entrada" - msgctxt "BaseTransition" msgid "allowed_transition_object" msgstr "transición autorizada de" @@ -1124,6 +1121,9 @@ msgid "allowed_transition_object" msgstr "transición autorizada de" +msgid "allowed_transition_object" +msgstr "Estados de entrada" + msgid "am/pm calendar (month)" msgstr "calendario am/pm (mes)" @@ -1217,10 +1217,10 @@ msgid "bookmarked_by" msgstr "está en los Favoritos de" +msgctxt "CWUser" msgid "bookmarked_by_object" msgstr "tiene como Favoritos" -msgctxt "CWUser" msgid "bookmarked_by_object" msgstr "tiene como Favoritos" @@ -1261,9 +1261,6 @@ msgid "by_transition" msgstr "transición" -msgid "by_transition_object" -msgstr "cambio de estados" - msgctxt "BaseTransition" msgid "by_transition_object" msgstr "tiene como información" @@ -1276,6 +1273,9 @@ msgid "by_transition_object" msgstr "tiene como información" +msgid "by_transition_object" +msgstr "cambio de estados" + msgid "calendar" msgstr "mostrar un calendario" @@ -1431,10 +1431,10 @@ msgid "condition" msgstr "condición" +msgctxt "RQLExpression" msgid "condition_object" msgstr "condición de" -msgctxt "RQLExpression" msgid "condition_object" msgstr "condición de" @@ -1444,11 +1444,11 @@ msgid "config" msgstr "" -msgctxt "CWSource" +msgctxt "CWSourceHostConfig" msgid "config" msgstr "" -msgctxt "CWSourceHostConfig" +msgctxt "CWSource" msgid "config" msgstr "" @@ -1472,10 +1472,10 @@ msgid "constrained_by" msgstr "Restricción impuesta por" +msgctxt "CWConstraint" msgid "constrained_by_object" msgstr "Restricción de" -msgctxt "CWConstraint" msgid "constrained_by_object" msgstr "Restricción de" @@ -1489,10 +1489,10 @@ msgid "constraint_of" msgstr "" +msgctxt "CWEType" msgid "constraint_of_object" msgstr "" -msgctxt "CWEType" msgid "constraint_of_object" msgstr "" @@ -1590,8 +1590,8 @@ msgstr "Creación de la relación %(linkto)s" msgid "" -"creating CWSourceHostConfig (CWSourceHostConfig cw_host_config_of CWSource " -"%(linkto)s)" +"creating CWSourceHostConfig (CWSourceHostConfig cw_host_config_of CWSource %" +"(linkto)s)" msgstr "" msgid "" @@ -1684,8 +1684,8 @@ "Creación de una Transición Workflow permitida desde el estado %(linkto)s" msgid "" -"creating WorkflowTransition (WorkflowTransition transition_of Workflow " -"%(linkto)s)" +"creating WorkflowTransition (WorkflowTransition transition_of Workflow %" +"(linkto)s)" msgstr "Creación de una Transición Workflow del Workflow %(linkto)s" msgid "creation" @@ -1707,13 +1707,13 @@ msgid "cstrtype" msgstr "Tipo" -msgid "cstrtype_object" -msgstr "utilizado por" - msgctxt "CWConstraintType" msgid "cstrtype_object" msgstr "Tipo de restricciones" +msgid "cstrtype_object" +msgstr "utilizado por" + msgid "csv entities export" msgstr "Exportar entidades en csv" @@ -1843,10 +1843,10 @@ msgid "cw_dont_cross" msgstr "" +msgctxt "CWRType" msgid "cw_dont_cross_object" msgstr "" -msgctxt "CWRType" msgid "cw_dont_cross_object" msgstr "" @@ -1857,10 +1857,10 @@ msgid "cw_host_config_of" msgstr "" +msgctxt "CWSource" msgid "cw_host_config_of_object" msgstr "" -msgctxt "CWSource" msgid "cw_host_config_of_object" msgstr "" @@ -1871,10 +1871,10 @@ msgid "cw_may_cross" msgstr "" +msgctxt "CWRType" msgid "cw_may_cross_object" msgstr "" -msgctxt "CWRType" msgid "cw_may_cross_object" msgstr "" @@ -1891,9 +1891,6 @@ msgid "cw_support" msgstr "" -msgid "cw_support_object" -msgstr "" - msgctxt "CWEType" msgid "cw_support_object" msgstr "" @@ -1902,6 +1899,9 @@ msgid "cw_support_object" msgstr "" +msgid "cw_support_object" +msgstr "" + msgid "cwetype-box" msgstr "Vista \"caja\"" @@ -1938,6 +1938,9 @@ msgid "date" msgstr "Fecha" +msgid "day" +msgstr "" + msgid "deactivate" msgstr "Desactivar" @@ -1970,10 +1973,10 @@ msgid "default_workflow" msgstr "Workflow por defecto" +msgctxt "Workflow" msgid "default_workflow_object" msgstr "Workflow por defecto de" -msgctxt "Workflow" msgid "default_workflow_object" msgstr "Workflow por defecto de" @@ -2059,9 +2062,6 @@ msgid "delete_permission" msgstr "Permiso de eliminar" -msgid "delete_permission_object" -msgstr "posee permiso para eliminar" - msgctxt "CWGroup" msgid "delete_permission_object" msgstr "puede eliminar" @@ -2070,14 +2070,17 @@ msgid "delete_permission_object" msgstr "puede eliminar" +msgid "delete_permission_object" +msgstr "posee permiso para eliminar" + #, python-format msgid "deleted %(etype)s #%(eid)s (%(title)s)" msgstr "Eliminación de la entidad %(etype)s #%(eid)s (%(title)s)" #, python-format msgid "" -"deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #" -"%(eidto)s" +"deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%" +"(eidto)s" msgstr "" "La relación %(rtype)s de %(frometype)s #%(eidfrom)s a %(toetype)s #%(eidto)s " "ha sido suprimida." @@ -2088,7 +2091,15 @@ msgid "description" msgstr "Descripción" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "description" +msgstr "Descripción" + +msgctxt "CWRelation" +msgid "description" +msgstr "Descripción" + +msgctxt "Workflow" msgid "description" msgstr "Descripción" @@ -2096,38 +2107,38 @@ msgid "description" msgstr "Descripción" -msgctxt "CWEType" -msgid "description" -msgstr "Descripción" - -msgctxt "CWRType" -msgid "description" -msgstr "Descripción" - -msgctxt "CWRelation" -msgid "description" -msgstr "Descripción" - -msgctxt "State" -msgid "description" -msgstr "Descripción" - msgctxt "Transition" msgid "description" msgstr "Descripción" -msgctxt "Workflow" -msgid "description" -msgstr "Descripción" - msgctxt "WorkflowTransition" msgid "description" msgstr "Descripción" +msgctxt "State" +msgid "description" +msgstr "Descripción" + +msgctxt "CWRType" +msgid "description" +msgstr "Descripción" + +msgctxt "BaseTransition" +msgid "description" +msgstr "Descripción" + msgid "description_format" msgstr "Formato" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "description_format" +msgstr "Formato" + +msgctxt "CWRelation" +msgid "description_format" +msgstr "Formato" + +msgctxt "Workflow" msgid "description_format" msgstr "Formato" @@ -2135,7 +2146,15 @@ msgid "description_format" msgstr "Formato" -msgctxt "CWEType" +msgctxt "Transition" +msgid "description_format" +msgstr "Formato" + +msgctxt "WorkflowTransition" +msgid "description_format" +msgstr "Formato" + +msgctxt "State" msgid "description_format" msgstr "Formato" @@ -2143,23 +2162,7 @@ msgid "description_format" msgstr "Formato" -msgctxt "CWRelation" -msgid "description_format" -msgstr "Formato" - -msgctxt "State" -msgid "description_format" -msgstr "Formato" - -msgctxt "Transition" -msgid "description_format" -msgstr "Formato" - -msgctxt "Workflow" -msgid "description_format" -msgstr "Formato" - -msgctxt "WorkflowTransition" +msgctxt "BaseTransition" msgid "description_format" msgstr "Formato" @@ -2185,21 +2188,21 @@ msgid "destination_state" msgstr "Estado destino" +msgctxt "Transition" +msgid "destination_state" +msgstr "Estado destino" + msgctxt "SubWorkflowExitPoint" msgid "destination_state" msgstr "Estado destino" -msgctxt "Transition" -msgid "destination_state" -msgstr "Estado destino" - -msgid "destination_state_object" -msgstr "Destino de" - msgctxt "State" msgid "destination_state_object" msgstr "Estado final de" +msgid "destination_state_object" +msgstr "Destino de" + msgid "detach attached file" msgstr "soltar el archivo existente" @@ -2462,13 +2465,13 @@ msgid "for_user" msgstr "Propiedad del Usuario" -msgid "for_user_object" -msgstr "Utiliza las propiedades" - msgctxt "CWUser" msgid "for_user_object" msgstr "Tiene como preferencia" +msgid "for_user_object" +msgstr "Utiliza las propiedades" + msgid "friday" msgstr "Viernes" @@ -2490,13 +2493,13 @@ msgid "from_entity" msgstr "Relación de la entidad" -msgid "from_entity_object" -msgstr "Relación sujeto" - msgctxt "CWEType" msgid "from_entity_object" msgstr "Entidad de" +msgid "from_entity_object" +msgstr "Relación sujeto" + msgid "from_interval_start" msgstr "De" @@ -2507,13 +2510,13 @@ msgid "from_state" msgstr "Estado de Inicio" -msgid "from_state_object" -msgstr "Transiciones desde este estado" - msgctxt "State" msgid "from_state_object" msgstr "Estado de Inicio de" +msgid "from_state_object" +msgstr "Transiciones desde este estado" + msgid "full text or RQL query" msgstr "Texto de búsqueda o demanda RQL" @@ -2567,8 +2570,8 @@ "graphical representation of the %(rtype)s relation type from %(appid)s data " "model" msgstr "" -"Representación gráfica del modelo de datos para el tipo de relación " -"%(rtype)s de %(appid)s" +"Representación gráfica del modelo de datos para el tipo de relación %(rtype)" +"s de %(appid)s" msgid "group in which a user should be to be allowed to pass this transition" msgstr "Grupo en el cual el usuario debe estar lograr la transición" @@ -2597,6 +2600,9 @@ msgid "header-right" msgstr "" +msgid "help" +msgstr "" + msgid "hide filter form" msgstr "Esconder el filtro" @@ -2686,13 +2692,13 @@ msgid "in_group" msgstr "Forma parte del grupo" -msgid "in_group_object" -msgstr "Miembros" - msgctxt "CWGroup" msgid "in_group_object" msgstr "Contiene los usuarios" +msgid "in_group_object" +msgstr "Miembros" + msgid "in_state" msgstr "Estado" @@ -2745,10 +2751,10 @@ msgid "initial_state" msgstr "Estado inicial" +msgctxt "State" msgid "initial_state_object" msgstr "Estado inicial de" -msgctxt "State" msgid "initial_state_object" msgstr "Estado inicial de" @@ -3014,6 +3020,9 @@ msgid "monday" msgstr "Lunes" +msgid "month" +msgstr "" + msgid "more actions" msgstr "Más acciones" @@ -3029,11 +3038,23 @@ msgid "name" msgstr "Nombre" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "name" +msgstr "Nombre" + +msgctxt "Transition" msgid "name" msgstr "Nombre" -msgctxt "CWCache" +msgctxt "CWSource" +msgid "name" +msgstr "" + +msgctxt "Workflow" +msgid "name" +msgstr "Nombre" + +msgctxt "CWGroup" msgid "name" msgstr "Nombre" @@ -3041,11 +3062,11 @@ msgid "name" msgstr "Nombre" -msgctxt "CWEType" +msgctxt "WorkflowTransition" msgid "name" msgstr "Nombre" -msgctxt "CWGroup" +msgctxt "State" msgid "name" msgstr "Nombre" @@ -3057,23 +3078,11 @@ msgid "name" msgstr "Nombre" -msgctxt "CWSource" -msgid "name" -msgstr "" - -msgctxt "State" +msgctxt "BaseTransition" msgid "name" msgstr "Nombre" -msgctxt "Transition" -msgid "name" -msgstr "Nombre" - -msgctxt "Workflow" -msgid "name" -msgstr "Nombre" - -msgctxt "WorkflowTransition" +msgctxt "CWCache" msgid "name" msgstr "Nombre" @@ -3289,13 +3298,13 @@ msgid "prefered_form" msgstr "Email principal" -msgid "prefered_form_object" -msgstr "Formato preferido sobre" - msgctxt "EmailAddress" msgid "prefered_form_object" msgstr "Email principal de" +msgid "prefered_form_object" +msgstr "Formato preferido sobre" + msgid "preferences" msgstr "Preferencias" @@ -3312,13 +3321,13 @@ msgid "primary_email" msgstr "Dirección principal de correo electrónico" -msgid "primary_email_object" -msgstr "Dirección de email principal (objeto)" - msgctxt "EmailAddress" msgid "primary_email_object" msgstr "Dirección principal de correo electrónico de" +msgid "primary_email_object" +msgstr "Dirección de email principal (objeto)" + msgid "profile" msgstr "" @@ -3343,11 +3352,11 @@ msgid "read_permission" msgstr "Permiso de lectura" -msgctxt "CWAttribute" +msgctxt "CWEType" msgid "read_permission" msgstr "Permiso de Lectura" -msgctxt "CWEType" +msgctxt "CWAttribute" msgid "read_permission" msgstr "Permiso de Lectura" @@ -3355,9 +3364,6 @@ msgid "read_permission" msgstr "Permiso de Lectura" -msgid "read_permission_object" -msgstr "Tiene acceso de lectura a" - msgctxt "CWGroup" msgid "read_permission_object" msgstr "Puede leer" @@ -3366,6 +3372,9 @@ msgid "read_permission_object" msgstr "Puede leer" +msgid "read_permission_object" +msgstr "Tiene acceso de lectura a" + msgid "regexp matching host(s) to which this config applies" msgstr "" @@ -3402,10 +3411,10 @@ msgid "relation_type" msgstr "Tipo de Relación" +msgctxt "CWRType" msgid "relation_type_object" msgstr "Definición de Relaciones" -msgctxt "CWRType" msgid "relation_type_object" msgstr "Definición de Relaciones" @@ -3419,9 +3428,6 @@ msgid "relations deleted" msgstr "Relaciones Eliminadas" -msgid "relations_object" -msgstr "" - msgctxt "CWAttribute" msgid "relations_object" msgstr "" @@ -3430,6 +3436,9 @@ msgid "relations_object" msgstr "" +msgid "relations_object" +msgstr "" + msgid "relative url of the bookmarked page" msgstr "Url relativa de la página" @@ -3443,11 +3452,11 @@ msgid "require_group" msgstr "Restringida al Grupo" -msgctxt "CWPermission" +msgctxt "Transition" msgid "require_group" msgstr "Restringida al Grupo" -msgctxt "Transition" +msgctxt "CWPermission" msgid "require_group" msgstr "Restringida al Grupo" @@ -3455,10 +3464,10 @@ msgid "require_group" msgstr "Restringida al Grupo" +msgctxt "CWGroup" msgid "require_group_object" msgstr "Posee derechos sobre" -msgctxt "CWGroup" msgid "require_group_object" msgstr "Posee derechos sobre" @@ -3668,10 +3677,10 @@ msgid "specializes" msgstr "Especializa" +msgctxt "CWEType" msgid "specializes_object" msgstr "Especializado por" -msgctxt "CWEType" msgid "specializes_object" msgstr "Especializado por" @@ -3710,10 +3719,10 @@ msgid "state_of" msgstr "Estado de" +msgctxt "Workflow" msgid "state_of_object" msgstr "Tiene por Estado" -msgctxt "Workflow" msgid "state_of_object" msgstr "Tiene por Estado" @@ -3759,17 +3768,17 @@ msgid "subworkflow_exit" msgstr "Salida del Sub-Workflow" -msgid "subworkflow_exit_object" -msgstr "Salida Sub-Workflow de" - msgctxt "SubWorkflowExitPoint" msgid "subworkflow_exit_object" msgstr "Salida Sub-Workflow de" +msgid "subworkflow_exit_object" +msgstr "Salida Sub-Workflow de" + +msgctxt "Workflow" msgid "subworkflow_object" msgstr "Sub-Workflow de" -msgctxt "Workflow" msgid "subworkflow_object" msgstr "Sub-Workflow de" @@ -3780,10 +3789,10 @@ msgid "subworkflow_state" msgstr "Estado de Sub-Workflow" +msgctxt "State" msgid "subworkflow_state_object" msgstr "Estado de Salida de" -msgctxt "State" msgid "subworkflow_state_object" msgstr "Estado de Salida de" @@ -3897,10 +3906,10 @@ msgid "to_entity" msgstr "Por la entidad" +msgctxt "CWEType" msgid "to_entity_object" msgstr "Objeto de la Relación" -msgctxt "CWEType" msgid "to_entity_object" msgstr "Objeto de la Relación" @@ -3914,13 +3923,16 @@ msgid "to_state" msgstr "Hacia el Estado" -msgid "to_state_object" -msgstr "Transición hacia este Estado" - msgctxt "State" msgid "to_state_object" msgstr "Transición hacia este Estado" +msgid "to_state_object" +msgstr "Transición hacia este Estado" + +msgid "today" +msgstr "" + msgid "todo_by" msgstr "Asignada a" @@ -3958,10 +3970,10 @@ msgid "transition_of" msgstr "Transición de" +msgctxt "Workflow" msgid "transition_of_object" msgstr "Utiliza las transiciones" -msgctxt "Workflow" msgid "transition_of_object" msgstr "Utiliza las transiciones" @@ -3978,10 +3990,6 @@ msgid "type" msgstr "Tipo" -msgctxt "CWSource" -msgid "type" -msgstr "" - msgctxt "Transition" msgid "type" msgstr "Tipo" @@ -3990,6 +3998,10 @@ msgid "type" msgstr "Tipo" +msgctxt "CWSource" +msgid "type" +msgstr "" + msgid "type here a sparql query" msgstr "Escriba aquí su consulta en Sparql" @@ -4070,17 +4082,14 @@ msgid "update_permission" msgstr "Puede ser modificado por" +msgctxt "CWEType" +msgid "update_permission" +msgstr "Puede ser modificado por" + msgctxt "CWAttribute" msgid "update_permission" msgstr "Puede ser modificado por" -msgctxt "CWEType" -msgid "update_permission" -msgstr "Puede ser modificado por" - -msgid "update_permission_object" -msgstr "Tiene permiso de modificar" - msgctxt "CWGroup" msgid "update_permission_object" msgstr "Puede modificar" @@ -4089,6 +4098,9 @@ msgid "update_permission_object" msgstr "Puede modificar" +msgid "update_permission_object" +msgstr "Tiene permiso de modificar" + msgid "update_relation" msgstr "Modificar" @@ -4125,13 +4137,13 @@ msgid "use_email" msgstr "Usa el Correo Electrónico" -msgid "use_email_object" -msgstr "Email utilizado por" - msgctxt "EmailAddress" msgid "use_email_object" msgstr "Utilizado por" +msgid "use_email_object" +msgstr "Email utilizado por" + msgid "use_template_format" msgstr "Utilización del formato 'cubicweb template'" @@ -4320,10 +4332,10 @@ msgid "workflow_of" msgstr "Workflow de" +msgctxt "CWEType" msgid "workflow_of_object" msgstr "Utiliza el Workflow" -msgctxt "CWEType" msgid "workflow_of_object" msgstr "Utiliza el Workflow" diff -r 24bf6f181d0e -r 36ed2bf7ad3d i18n/fr.po --- a/i18n/fr.po Wed Dec 01 17:11:35 2010 +0100 +++ b/i18n/fr.po Thu Dec 09 15:27:01 2010 +0100 @@ -7,10 +7,10 @@ "PO-Revision-Date: 2010-09-15 15:12+0200\n" "Last-Translator: Logilab Team \n" "Language-Team: fr \n" -"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: \n" #, python-format msgid "" @@ -434,10 +434,10 @@ msgid "Download schema as OWL" msgstr "Télécharger le schéma au format OWL" +msgctxt "inlined:CWUser.use_email.subject" msgid "EmailAddress" msgstr "Adresse électronique" -msgctxt "inlined:CWUser.use_email.subject" msgid "EmailAddress" msgstr "Adresse électronique" @@ -1054,9 +1054,6 @@ msgid "add_permission" msgstr "permission d'ajout" -msgid "add_permission_object" -msgstr "a la permission d'ajouter" - msgctxt "CWGroup" msgid "add_permission_object" msgstr "a la permission d'ajouter" @@ -1065,6 +1062,9 @@ msgid "add_permission_object" msgstr "a la permission d'ajouter" +msgid "add_permission_object" +msgstr "a la permission d'ajouter" + msgid "add_relation" msgstr "ajouter" @@ -1074,11 +1074,11 @@ #, python-format msgid "" -"added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #" -"%(eidto)s" +"added relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%" +"(eidto)s" msgstr "" -"la relation %(rtype)s de %(frometype)s #%(eidfrom)s vers %(toetype)s #" -"%(eidto)s a été ajoutée" +"la relation %(rtype)s de %(frometype)s #%(eidfrom)s vers %(toetype)s #%" +"(eidto)s a été ajoutée" msgid "addrelated" msgstr "ajouter" @@ -1110,9 +1110,6 @@ msgid "allowed_transition" msgstr "transitions autorisées" -msgid "allowed_transition_object" -msgstr "états en entrée" - msgctxt "BaseTransition" msgid "allowed_transition_object" msgstr "transition autorisée de" @@ -1125,6 +1122,9 @@ msgid "allowed_transition_object" msgstr "transition autorisée de" +msgid "allowed_transition_object" +msgstr "états en entrée" + msgid "am/pm calendar (month)" msgstr "calendrier am/pm (mois)" @@ -1218,10 +1218,10 @@ msgid "bookmarked_by" msgstr "utilisé par" +msgctxt "CWUser" msgid "bookmarked_by_object" msgstr "utilise le(s) signet(s)" -msgctxt "CWUser" msgid "bookmarked_by_object" msgstr "utilise le(s) signet(s)" @@ -1263,9 +1263,6 @@ msgid "by_transition" msgstr "transition" -msgid "by_transition_object" -msgstr "changement d'états" - msgctxt "BaseTransition" msgid "by_transition_object" msgstr "a pour information" @@ -1278,6 +1275,9 @@ msgid "by_transition_object" msgstr "a pour information" +msgid "by_transition_object" +msgstr "changement d'états" + msgid "calendar" msgstr "afficher un calendrier" @@ -1433,10 +1433,10 @@ msgid "condition" msgstr "condition" +msgctxt "RQLExpression" msgid "condition_object" msgstr "condition de" -msgctxt "RQLExpression" msgid "condition_object" msgstr "condition de" @@ -1446,11 +1446,11 @@ msgid "config" msgstr "configuration" -msgctxt "CWSource" +msgctxt "CWSourceHostConfig" msgid "config" msgstr "configuration" -msgctxt "CWSourceHostConfig" +msgctxt "CWSource" msgid "config" msgstr "configuration" @@ -1474,10 +1474,10 @@ msgid "constrained_by" msgstr "contraint par" +msgctxt "CWConstraint" msgid "constrained_by_object" msgstr "contrainte de" -msgctxt "CWConstraint" msgid "constrained_by_object" msgstr "contrainte de" @@ -1491,10 +1491,10 @@ msgid "constraint_of" msgstr "contrainte de" +msgctxt "CWEType" msgid "constraint_of_object" msgstr "contraint par" -msgctxt "CWEType" msgid "constraint_of_object" msgstr "contraint par" @@ -1593,8 +1593,8 @@ msgstr "création relation %(linkto)s" msgid "" -"creating CWSourceHostConfig (CWSourceHostConfig cw_host_config_of CWSource " -"%(linkto)s)" +"creating CWSourceHostConfig (CWSourceHostConfig cw_host_config_of CWSource %" +"(linkto)s)" msgstr "création d'une configuration d'hôte pour la source %(linkto)s" msgid "" @@ -1687,8 +1687,8 @@ msgstr "création d'une transition workflow autorisée depuis l'état %(linkto)s" msgid "" -"creating WorkflowTransition (WorkflowTransition transition_of Workflow " -"%(linkto)s)" +"creating WorkflowTransition (WorkflowTransition transition_of Workflow %" +"(linkto)s)" msgstr "création d'une transition workflow du workflow %(linkto)s" msgid "creation" @@ -1710,13 +1710,13 @@ msgid "cstrtype" msgstr "type" -msgid "cstrtype_object" -msgstr "utilisé par" - msgctxt "CWConstraintType" msgid "cstrtype_object" msgstr "type des contraintes" +msgid "cstrtype_object" +msgstr "utilisé par" + msgid "csv entities export" msgstr "export d'entités en CSV" @@ -1849,10 +1849,10 @@ msgid "cw_dont_cross" msgstr "don't cross" +msgctxt "CWRType" msgid "cw_dont_cross_object" msgstr "can't be crossed with" -msgctxt "CWRType" msgid "cw_dont_cross_object" msgstr "can't be crossed with" @@ -1863,10 +1863,10 @@ msgid "cw_host_config_of" msgstr "host configuration of" +msgctxt "CWSource" msgid "cw_host_config_of_object" msgstr "has host configuration" -msgctxt "CWSource" msgid "cw_host_config_of_object" msgstr "has host configuration" @@ -1877,10 +1877,10 @@ msgid "cw_may_cross" msgstr "may cross" +msgctxt "CWRType" msgid "cw_may_cross_object" msgstr "may be crossed with" -msgctxt "CWRType" msgid "cw_may_cross_object" msgstr "may be crossed with" @@ -1897,9 +1897,6 @@ msgid "cw_support" msgstr "support" -msgid "cw_support_object" -msgstr "supported by" - msgctxt "CWEType" msgid "cw_support_object" msgstr "supported by" @@ -1908,6 +1905,9 @@ msgid "cw_support_object" msgstr "supported by" +msgid "cw_support_object" +msgstr "supported by" + msgid "cwetype-box" msgstr "vue \"boîte\"" @@ -1944,6 +1944,9 @@ msgid "date" msgstr "date" +msgid "day" +msgstr "jour" + msgid "deactivate" msgstr "désactiver" @@ -1975,10 +1978,10 @@ msgid "default_workflow" msgstr "workflow par défaut" +msgctxt "Workflow" msgid "default_workflow_object" msgstr "workflow par défaut de" -msgctxt "Workflow" msgid "default_workflow_object" msgstr "workflow par défaut de" @@ -2061,9 +2064,6 @@ msgid "delete_permission" msgstr "permission de supprimer" -msgid "delete_permission_object" -msgstr "a la permission de supprimer" - msgctxt "CWGroup" msgid "delete_permission_object" msgstr "peut supprimer" @@ -2072,14 +2072,17 @@ msgid "delete_permission_object" msgstr "peut supprimer" +msgid "delete_permission_object" +msgstr "a la permission de supprimer" + #, python-format msgid "deleted %(etype)s #%(eid)s (%(title)s)" msgstr "suppression de l'entité %(etype)s #%(eid)s (%(title)s)" #, python-format msgid "" -"deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #" -"%(eidto)s" +"deleted relation %(rtype)s from %(frometype)s #%(eidfrom)s to %(toetype)s #%" +"(eidto)s" msgstr "" "relation %(rtype)s de %(frometype)s #%(eidfrom)s vers %(toetype)s #%(eidto)s " "supprimée" @@ -2090,7 +2093,15 @@ msgid "description" msgstr "description" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "description" +msgstr "description" + +msgctxt "CWRelation" +msgid "description" +msgstr "description" + +msgctxt "Workflow" msgid "description" msgstr "description" @@ -2098,38 +2109,38 @@ msgid "description" msgstr "description" -msgctxt "CWEType" -msgid "description" -msgstr "description" - -msgctxt "CWRType" -msgid "description" -msgstr "description" - -msgctxt "CWRelation" -msgid "description" -msgstr "description" - -msgctxt "State" -msgid "description" -msgstr "description" - msgctxt "Transition" msgid "description" msgstr "description" -msgctxt "Workflow" -msgid "description" -msgstr "description" - msgctxt "WorkflowTransition" msgid "description" msgstr "description" +msgctxt "State" +msgid "description" +msgstr "description" + +msgctxt "CWRType" +msgid "description" +msgstr "description" + +msgctxt "BaseTransition" +msgid "description" +msgstr "description" + msgid "description_format" msgstr "format" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "description_format" +msgstr "format" + +msgctxt "CWRelation" +msgid "description_format" +msgstr "format" + +msgctxt "Workflow" msgid "description_format" msgstr "format" @@ -2137,7 +2148,15 @@ msgid "description_format" msgstr "format" -msgctxt "CWEType" +msgctxt "Transition" +msgid "description_format" +msgstr "format" + +msgctxt "WorkflowTransition" +msgid "description_format" +msgstr "format" + +msgctxt "State" msgid "description_format" msgstr "format" @@ -2145,23 +2164,7 @@ msgid "description_format" msgstr "format" -msgctxt "CWRelation" -msgid "description_format" -msgstr "format" - -msgctxt "State" -msgid "description_format" -msgstr "format" - -msgctxt "Transition" -msgid "description_format" -msgstr "format" - -msgctxt "Workflow" -msgid "description_format" -msgstr "format" - -msgctxt "WorkflowTransition" +msgctxt "BaseTransition" msgid "description_format" msgstr "format" @@ -2187,21 +2190,21 @@ msgid "destination_state" msgstr "état de destination" +msgctxt "Transition" +msgid "destination_state" +msgstr "état de destination" + msgctxt "SubWorkflowExitPoint" msgid "destination_state" msgstr "état de destination" -msgctxt "Transition" -msgid "destination_state" -msgstr "état de destination" - -msgid "destination_state_object" -msgstr "destination de" - msgctxt "State" msgid "destination_state_object" msgstr "état final de" +msgid "destination_state_object" +msgstr "destination de" + msgid "detach attached file" msgstr "détacher le fichier existant" @@ -2463,13 +2466,13 @@ msgid "for_user" msgstr "propriété de l'utilisateur" -msgid "for_user_object" -msgstr "utilise les propriétés" - msgctxt "CWUser" msgid "for_user_object" msgstr "a pour préférence" +msgid "for_user_object" +msgstr "utilise les propriétés" + msgid "friday" msgstr "vendredi" @@ -2491,13 +2494,13 @@ msgid "from_entity" msgstr "relation de l'entité" -msgid "from_entity_object" -msgstr "relation sujet" - msgctxt "CWEType" msgid "from_entity_object" msgstr "entité de" +msgid "from_entity_object" +msgstr "relation sujet" + msgid "from_interval_start" msgstr "De" @@ -2508,13 +2511,13 @@ msgid "from_state" msgstr "état de départ" -msgid "from_state_object" -msgstr "transitions depuis cet état" - msgctxt "State" msgid "from_state_object" msgstr "état de départ de" +msgid "from_state_object" +msgstr "transitions depuis cet état" + msgid "full text or RQL query" msgstr "texte à rechercher ou requête RQL" @@ -2560,16 +2563,16 @@ "graphical representation of the %(etype)s entity type from %(appid)s data " "model" msgstr "" -"réprésentation graphique du modèle de données pour le type d'entité " -"%(etype)s de %(appid)s" +"réprésentation graphique du modèle de données pour le type d'entité %(etype)" +"s de %(appid)s" #, python-format msgid "" "graphical representation of the %(rtype)s relation type from %(appid)s data " "model" msgstr "" -"réprésentation graphique du modèle de données pour le type de relation " -"%(rtype)s de %(appid)s" +"réprésentation graphique du modèle de données pour le type de relation %" +"(rtype)s de %(appid)s" msgid "group in which a user should be to be allowed to pass this transition" msgstr "" @@ -2599,6 +2602,9 @@ msgid "header-right" msgstr "en-tête (droite)" +msgid "help" +msgstr "" + msgid "hide filter form" msgstr "cacher le filtre" @@ -2687,13 +2693,13 @@ msgid "in_group" msgstr "fait partie du groupe" -msgid "in_group_object" -msgstr "membres" - msgctxt "CWGroup" msgid "in_group_object" msgstr "contient les utilisateurs" +msgid "in_group_object" +msgstr "membres" + msgid "in_state" msgstr "état" @@ -2746,10 +2752,10 @@ msgid "initial_state" msgstr "état initial" +msgctxt "State" msgid "initial_state_object" msgstr "état initial de" -msgctxt "State" msgid "initial_state_object" msgstr "état initial de" @@ -3016,6 +3022,9 @@ msgid "monday" msgstr "lundi" +msgid "month" +msgstr "mois" + msgid "more actions" msgstr "plus d'actions" @@ -3031,11 +3040,23 @@ msgid "name" msgstr "nom" -msgctxt "BaseTransition" +msgctxt "CWEType" +msgid "name" +msgstr "nom" + +msgctxt "Transition" msgid "name" msgstr "nom" -msgctxt "CWCache" +msgctxt "CWSource" +msgid "name" +msgstr "nom" + +msgctxt "Workflow" +msgid "name" +msgstr "nom" + +msgctxt "CWGroup" msgid "name" msgstr "nom" @@ -3043,11 +3064,11 @@ msgid "name" msgstr "nom" -msgctxt "CWEType" +msgctxt "WorkflowTransition" msgid "name" msgstr "nom" -msgctxt "CWGroup" +msgctxt "State" msgid "name" msgstr "nom" @@ -3059,23 +3080,11 @@ msgid "name" msgstr "nom" -msgctxt "CWSource" -msgid "name" -msgstr "nom" - -msgctxt "State" +msgctxt "BaseTransition" msgid "name" msgstr "nom" -msgctxt "Transition" -msgid "name" -msgstr "nom" - -msgctxt "Workflow" -msgid "name" -msgstr "nom" - -msgctxt "WorkflowTransition" +msgctxt "CWCache" msgid "name" msgstr "nom" @@ -3293,13 +3302,13 @@ msgid "prefered_form" msgstr "forme préférée" -msgid "prefered_form_object" -msgstr "forme préférée à" - msgctxt "EmailAddress" msgid "prefered_form_object" msgstr "forme préférée de" +msgid "prefered_form_object" +msgstr "forme préférée à" + msgid "preferences" msgstr "préférences" @@ -3316,13 +3325,13 @@ msgid "primary_email" msgstr "email principal" -msgid "primary_email_object" -msgstr "adresse email principale (object)" - msgctxt "EmailAddress" msgid "primary_email_object" msgstr "adresse principale de" +msgid "primary_email_object" +msgstr "adresse email principale (object)" + msgid "profile" msgstr "profil" @@ -3347,11 +3356,11 @@ msgid "read_permission" msgstr "permission de lire" -msgctxt "CWAttribute" +msgctxt "CWEType" msgid "read_permission" msgstr "permission de lire" -msgctxt "CWEType" +msgctxt "CWAttribute" msgid "read_permission" msgstr "permission de lire" @@ -3359,9 +3368,6 @@ msgid "read_permission" msgstr "permission de lire" -msgid "read_permission_object" -msgstr "a la permission de lire" - msgctxt "CWGroup" msgid "read_permission_object" msgstr "peut lire" @@ -3370,6 +3376,9 @@ msgid "read_permission_object" msgstr "peut lire" +msgid "read_permission_object" +msgstr "a la permission de lire" + msgid "regexp matching host(s) to which this config applies" msgstr "" "expression régulière des noms d'hôtes auxquels cette configuration s'applique" @@ -3407,10 +3416,10 @@ msgid "relation_type" msgstr "type de relation" +msgctxt "CWRType" msgid "relation_type_object" msgstr "définition" -msgctxt "CWRType" msgid "relation_type_object" msgstr "définition" @@ -3424,9 +3433,6 @@ msgid "relations deleted" msgstr "relations supprimées" -msgid "relations_object" -msgstr "relations de" - msgctxt "CWAttribute" msgid "relations_object" msgstr "contraint par" @@ -3435,6 +3441,9 @@ msgid "relations_object" msgstr "contraint par" +msgid "relations_object" +msgstr "relations de" + msgid "relative url of the bookmarked page" msgstr "url relative de la page" @@ -3448,11 +3457,11 @@ msgid "require_group" msgstr "restreinte au groupe" -msgctxt "CWPermission" +msgctxt "Transition" msgid "require_group" msgstr "restreinte au groupe" -msgctxt "Transition" +msgctxt "CWPermission" msgid "require_group" msgstr "restreinte au groupe" @@ -3460,10 +3469,10 @@ msgid "require_group" msgstr "restreinte au groupe" +msgctxt "CWGroup" msgid "require_group_object" msgstr "a les droits" -msgctxt "CWGroup" msgid "require_group_object" msgstr "a les droits" @@ -3676,10 +3685,10 @@ msgid "specializes" msgstr "spécialise" +msgctxt "CWEType" msgid "specializes_object" msgstr "parent de" -msgctxt "CWEType" msgid "specializes_object" msgstr "parent de" @@ -3718,13 +3727,13 @@ msgid "state_of" msgstr "état de" -msgid "state_of_object" -msgstr "a pour état" - msgctxt "Workflow" msgid "state_of_object" msgstr "contient les états" +msgid "state_of_object" +msgstr "a pour état" + msgid "status change" msgstr "changer l'état" @@ -3767,20 +3776,20 @@ msgid "subworkflow_exit" msgstr "sortie du sous-workflow" -msgid "subworkflow_exit_object" -msgstr "états de sortie" - msgctxt "SubWorkflowExitPoint" msgid "subworkflow_exit_object" msgstr "états de sortie" -msgid "subworkflow_object" -msgstr "utilisé par la transition" +msgid "subworkflow_exit_object" +msgstr "états de sortie" msgctxt "Workflow" msgid "subworkflow_object" msgstr "sous workflow de" +msgid "subworkflow_object" +msgstr "utilisé par la transition" + msgid "subworkflow_state" msgstr "état du sous-workflow" @@ -3788,10 +3797,10 @@ msgid "subworkflow_state" msgstr "état" +msgctxt "State" msgid "subworkflow_state_object" msgstr "état de sortie de" -msgctxt "State" msgid "subworkflow_state_object" msgstr "état de sortie de" @@ -3906,10 +3915,10 @@ msgid "to_entity" msgstr "pour l'entité" +msgctxt "CWEType" msgid "to_entity_object" msgstr "objet de la relation" -msgctxt "CWEType" msgid "to_entity_object" msgstr "objet de la relation" @@ -3923,13 +3932,16 @@ msgid "to_state" msgstr "état de destination" -msgid "to_state_object" -msgstr "transitions vers cet état" - msgctxt "State" msgid "to_state_object" msgstr "transition vers cet état" +msgid "to_state_object" +msgstr "transitions vers cet état" + +msgid "today" +msgstr "aujourd'hui" + msgid "todo_by" msgstr "à faire par" @@ -3967,10 +3979,10 @@ msgid "transition_of" msgstr "transition de" +msgctxt "Workflow" msgid "transition_of_object" msgstr "a pour transition" -msgctxt "Workflow" msgid "transition_of_object" msgstr "a pour transition" @@ -3987,10 +3999,6 @@ msgid "type" msgstr "type" -msgctxt "CWSource" -msgid "type" -msgstr "type" - msgctxt "Transition" msgid "type" msgstr "type" @@ -3999,6 +4007,10 @@ msgid "type" msgstr "type" +msgctxt "CWSource" +msgid "type" +msgstr "type" + msgid "type here a sparql query" msgstr "Tapez une requête sparql" @@ -4079,17 +4091,14 @@ msgid "update_permission" msgstr "permission de modification" +msgctxt "CWEType" +msgid "update_permission" +msgstr "permission de modifier" + msgctxt "CWAttribute" msgid "update_permission" msgstr "permission de modifier" -msgctxt "CWEType" -msgid "update_permission" -msgstr "permission de modifier" - -msgid "update_permission_object" -msgstr "a la permission de modifier" - msgctxt "CWGroup" msgid "update_permission_object" msgstr "peut modifier" @@ -4098,6 +4107,9 @@ msgid "update_permission_object" msgstr "peut modifier" +msgid "update_permission_object" +msgstr "a la permission de modifier" + msgid "update_relation" msgstr "modifier" @@ -4134,13 +4146,13 @@ msgid "use_email" msgstr "utilise l'adresse électronique" -msgid "use_email_object" -msgstr "adresse utilisée par" - msgctxt "EmailAddress" msgid "use_email_object" msgstr "utilisée par" +msgid "use_email_object" +msgstr "adresse utilisée par" + msgid "use_template_format" msgstr "utilisation du format 'cubicweb template'" @@ -4266,7 +4278,7 @@ msgstr "mercredi" msgid "week" -msgstr "sem." +msgstr "semaine" #, python-format msgid "welcome %s !" @@ -4328,10 +4340,10 @@ msgid "workflow_of" msgstr "workflow de" +msgctxt "CWEType" msgid "workflow_of_object" msgstr "a pour workflow" -msgctxt "CWEType" msgid "workflow_of_object" msgstr "a pour workflow" diff -r 24bf6f181d0e -r 36ed2bf7ad3d web/data/cubicweb.calendar.css --- a/web/data/cubicweb.calendar.css Wed Dec 01 17:11:35 2010 +0100 +++ b/web/data/cubicweb.calendar.css Thu Dec 09 15:27:01 2010 +0100 @@ -336,3 +336,48 @@ td.next { text-align: right; } + +/* ------------------------- */ +/* tooltips for fullcalendar */ + +div.calevent div.tooltip { + display: none; /* tooltip hidden */ +} + +div.calevent:hover { + z-index: auto !important; /* in order that the tooltip from the above .calevent div can be put over this div*/ +} + +div.calevent a{ + display: inline; + font-size: none; + font-weight: bold; +} + +div.calevent:hover div.tooltip{ + display: block; + position: absolute; + z-index: 10; + color: black; + border:1px solid black; + background: white; + padding: 5px; + overflow: visible; + width: 200px; +} + +div.tooltip a{ + border: none; + background: none; + color: #2952A3; + text-decoration: none; + } + +div.tooltip a:hover{ + text-decoration: underline; + } + + +div.fc-view{ + overflow: visible; +} \ No newline at end of file diff -r 24bf6f181d0e -r 36ed2bf7ad3d web/data/fullcalendar.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/data/fullcalendar.css Thu Dec 09 15:27:01 2010 +0100 @@ -0,0 +1,586 @@ +/* + * FullCalendar v1.4.8 Stylesheet + * + * Feel free to edit this file to customize the look of FullCalendar. + * When upgrading to newer versions, please upgrade this file as well, + * porting over any customizations afterwards. + * + * Date: Sat Oct 16 17:10:03 2010 -0700 + * + */ + + +/* TODO: make font sizes look the same in all doctypes */ + + +.fc, +.fc .fc-header, +.fc .fc-content { + font-size: 1em; + } + +.fc { + direction: ltr; + text-align: left; + } + +.fc table { + border-collapse: collapse; + border-spacing: 0; + } + +.fc td, .fc th { + padding: 0; + vertical-align: top; + } + + + +/* Header +------------------------------------------------------------------------*/ + +table.fc-header { + width: 100%; + } + +.fc-header-left { + width: 25%; + } + +.fc-header-left table { + float: left; + } + +.fc-header-center { + width: 50%; + text-align: center; + } + +.fc-header-center table { + margin: 0 auto; + } + +.fc-header-right { + width: 25%; + } + +.fc-header-right table { + float: right; + } + +.fc-header-title { + margin-top: 0; + white-space: nowrap; + } + +.fc-header-space { + padding-left: 10px; + } + +/* right-to-left */ + +.fc-rtl .fc-header-title { + direction: rtl; + } + + + +/* Buttons +------------------------------------------------------------------------*/ + +.fc-header .fc-state-default, +.fc-header .ui-state-default { + margin-bottom: 1em; + cursor: pointer; + } + +.fc-header .fc-state-default { + border-width: 1px 0; + padding: 0 1px; + } + +.fc-header .fc-state-default, +.fc-header .fc-state-default a { + border-style: solid; + } + +.fc-header .fc-state-default a { + display: block; + border-width: 0 1px; + margin: 0 -1px; + width: 100%; + text-decoration: none; + } + +.fc-header .fc-state-default span { + display: block; + border-style: solid; + border-width: 1px 0 1px 1px; + padding: 3px 5px; + } + +.fc-header .ui-state-default { + padding: 4px 6px; + } + +.fc-header .fc-state-default span, +.fc-header .ui-state-default span { + white-space: nowrap; + } + +/* for adjacent buttons */ + +.fc-header .fc-no-right { + padding-right: 0; + } + +.fc-header .fc-no-right a { + margin-right: 0; + border-right: 0; + } + +.fc-header .ui-no-right { + border-right: 0; + } + +/* for fake rounded corners */ + +.fc-header .fc-corner-left { + margin-left: 1px; + padding-left: 0; + } + +.fc-header .fc-corner-right { + margin-right: 1px; + padding-right: 0; + } + +/* DEFAULT button COLORS */ + +.fc-header .fc-state-default, +.fc-header .fc-state-default a { + border-color: #777; /* outer border */ + color: #333; + } + +.fc-header .fc-state-default span { + border-color: #fff #fff #d1d1d1; /* inner border */ + background: #e8e8e8; + } + +/* PRESSED button COLORS (down and active) */ + +.fc-header .fc-state-active a { + color: #fff; + } + +.fc-header .fc-state-down span, +.fc-header .fc-state-active span { + background: #888; + border-color: #808080 #808080 #909090; /* inner border */ + } + +/* DISABLED button COLORS */ + +.fc-header .fc-state-disabled a { + color: #999; + } + +.fc-header .fc-state-disabled, +.fc-header .fc-state-disabled a { + border-color: #ccc; /* outer border */ + } + +.fc-header .fc-state-disabled span { + border-color: #fff #fff #f0f0f0; /* inner border */ + background: #f0f0f0; + } + + + +/* Content Area & Global Cell Styles +------------------------------------------------------------------------*/ + +.fc-widget-content { + border: 1px solid #ccc; /* outer border color */ + } + +.fc-content { + clear: both; + } + +.fc-content .fc-state-default { + border-style: solid; + border-color: #ccc; /* inner border color */ + } + +.fc-content .fc-state-highlight { /* today */ + background: #ffc; + } + +.fc-content .fc-not-today { /* override jq-ui highlight (TODO: ui-widget-content) */ + background: none; + } + +.fc-cell-overlay { /* semi-transparent rectangle while dragging */ + background: #9cf; + opacity: .2; + filter: alpha(opacity=20); /* for IE */ + } + +.fc-view { /* prevents dragging outside of widget */ + width: 100%; + overflow: hidden; + } + + + + + +/* Global Event Styles +------------------------------------------------------------------------*/ + +.fc-event, +.fc-agenda .fc-event-time, +.fc-event a { + border-style: solid; + border-color: #36c; /* default BORDER color (probably the same as background-color) */ + background-color: #36c; /* default BACKGROUND color */ + color: #fff; /* default TEXT color */ + } + + /* Use the 'className' CalEvent property and the following + * example CSS to change event color on a per-event basis: + * + * .myclass, + * .fc-agenda .myclass .fc-event-time, + * .myclass a { + * background-color: black; + * border-color: black; + * color: red; + * } + */ + +.fc-event { + text-align: left; + } + +.fc-event a { + overflow: hidden; + font-size: .85em; + text-decoration: none; + cursor: pointer; + } + +.fc-event-editable { + cursor: pointer; + } + +.fc-event-time, +.fc-event-title { + padding: 0 1px; + } + +/* for fake rounded corners */ + +.fc-event a { + display: block; + position: relative; + width: 100%; + height: 100%; + } + +/* right-to-left */ + +.fc-rtl .fc-event a { + text-align: right; + } + +/* resizable */ + +.fc .ui-resizable-handle { + display: block; + position: absolute; + z-index: 99999; + border: 0 !important; /* important overrides pre jquery ui 1.7 styles */ + background: url(data:image/gif;base64,AAAA) !important; /* hover fix for IE */ + } + + + +/* Horizontal Events +------------------------------------------------------------------------*/ + +.fc-event-hori { + border-width: 1px 0; + margin-bottom: 1px; + } + +.fc-event-hori a { + border-width: 0; + } + +/* for fake rounded corners */ + +.fc-content .fc-corner-left { + margin-left: 1px; + } + +.fc-content .fc-corner-left a { + margin-left: -1px; + border-left-width: 1px; + } + +.fc-content .fc-corner-right { + margin-right: 1px; + } + +.fc-content .fc-corner-right a { + margin-right: -1px; + border-right-width: 1px; + } + +/* resizable */ + +.fc-event-hori .ui-resizable-e { + top: 0 !important; /* importants override pre jquery ui 1.7 styles */ + right: -3px !important; + width: 7px !important; + height: 100% !important; + cursor: e-resize; + } + +.fc-event-hori .ui-resizable-w { + top: 0 !important; + left: -3px !important; + width: 7px !important; + height: 100% !important; + cursor: w-resize; + } + +.fc-event-hori .ui-resizable-handle { + _padding-bottom: 14px; /* IE6 had 0 height */ + } + + + + +/* Month View, Basic Week View, Basic Day View +------------------------------------------------------------------------*/ + +.fc-grid table { + width: 100%; + } + +.fc .fc-grid th { + border-width: 0 0 0 1px; + text-align: center; + } + +.fc .fc-grid td { + border-width: 1px 0 0 1px; + } + +.fc-grid th.fc-leftmost, +.fc-grid td.fc-leftmost { + border-left: 0; + } + +.fc-grid .fc-day-number { + float: right; + padding: 0 2px; + } + +.fc-grid .fc-other-month .fc-day-number { + opacity: 0.3; + filter: alpha(opacity=30); /* for IE */ + /* opacity with small font can sometimes look too faded + might want to set the 'color' property instead + making day-numbers bold also fixes the problem */ + } + +.fc-grid .fc-day-content { + clear: both; + padding: 2px 2px 0; /* distance between events and day edges */ + } + +/* event styles */ + +.fc-grid .fc-event-time { + font-weight: bold; + } + +/* right-to-left */ + +.fc-rtl .fc-grid { + direction: rtl; + } + +.fc-rtl .fc-grid .fc-day-number { + float: left; + } + +.fc-rtl .fc-grid .fc-event-time { + float: right; + } + +/* Agenda Week View, Agenda Day View +------------------------------------------------------------------------*/ + +.fc .fc-agenda th, +.fc .fc-agenda td { + border-width: 1px 0 0 1px; + } + +.fc .fc-agenda .fc-leftmost { + border-left: 0; + } + +.fc-agenda tr.fc-first th, +.fc-agenda tr.fc-first td { + border-top: 0; + } + +.fc-agenda-head tr.fc-last th { + border-bottom-width: 1px; + } + +.fc .fc-agenda-head td, +.fc .fc-agenda-body td { + background: none; + } + +.fc-agenda-head th { + text-align: center; + } + +/* the time axis running down the left side */ + +.fc-agenda .fc-axis { + width: 50px; + padding: 0 4px; + vertical-align: middle; + white-space: nowrap; + text-align: right; + font-weight: normal; + } + +/* all-day event cells at top */ + +.fc-agenda-head tr.fc-all-day th { + height: 35px; + } + +.fc-agenda-head td { + padding-bottom: 10px; + } + +.fc .fc-divider div { + font-size: 1px; /* for IE6/7 */ + height: 2px; + } + +.fc .fc-divider .fc-state-default { + background: #eee; /* color for divider between all-day and time-slot events */ + } + +/* body styles */ + +.fc .fc-agenda-body td div { + height: 20px; /* slot height */ + } + +.fc .fc-agenda-body tr.fc-minor th, +.fc .fc-agenda-body tr.fc-minor td { + border-top-style: dotted; + } + +.fc-agenda .fc-day-content { + padding: 2px 2px 0; /* distance between events and day edges */ + } + +/* vertical background columns */ + +.fc .fc-agenda-bg .ui-state-highlight { + background-image: none; /* tall column, don't want repeating background image */ + } + + + +/* Vertical Events +------------------------------------------------------------------------*/ + +.fc-event-vert { + border-width: 0 1px; + } + +.fc-event-vert a { + border-width: 0; + } + +/* for fake rounded corners */ + +.fc-content .fc-corner-top { + margin-top: 1px; + } + +.fc-content .fc-corner-top a { + margin-top: -1px; + border-top-width: 1px; + } + +.fc-content .fc-corner-bottom { + margin-bottom: 1px; + } + +.fc-content .fc-corner-bottom a { + margin-bottom: -1px; + border-bottom-width: 1px; + } + +/* event content */ + +.fc-event-vert span { + display: block; + position: relative; + z-index: 2; + } + +.fc-event-vert span.fc-event-time { + white-space: nowrap; + _white-space: normal; + overflow: hidden; + border: 0; + font-size: 10px; + } + +.fc-event-vert span.fc-event-title { + line-height: 13px; + } + +.fc-event-vert span.fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay */ + position: absolute; + z-index: 1; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #fff; + opacity: .3; + filter: alpha(opacity=30); /* for IE */ + } + +/* resizable */ + +.fc-event-vert .ui-resizable-s { + bottom: 0 !important; /* importants override pre jquery ui 1.7 styles */ + width: 100% !important; + height: 8px !important; + line-height: 8px !important; + font-size: 11px !important; + font-family: monospace; + text-align: center; + cursor: s-resize; + } + + diff -r 24bf6f181d0e -r 36ed2bf7ad3d web/data/fullcalendar.min.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/data/fullcalendar.min.js Thu Dec 09 15:27:01 2010 +0100 @@ -0,0 +1,108 @@ +/* + + FullCalendar v1.4.8 + http://arshaw.com/fullcalendar/ + + Use fullcalendar.css for basic styling. + For event drag & drop, requires jQuery UI draggable. + For event resizing, requires jQuery UI resizable. + + Copyright (c) 2010 Adam Shaw + Dual licensed under the MIT and GPL licenses, located in + MIT-LICENSE.txt and GPL-LICENSE.txt respectively. + + Date: Sat Oct 16 17:10:03 2010 -0700 + +*/ +(function(m,Z){function fb(a){m.extend(true,Pa,a)}function Bb(a,b,f){function h(e){if(qa){E();ea();M();H(e)}else i()}function i(){ya=b.theme?"ui":"fc";a.addClass("fc");b.isRTL&&a.addClass("fc-rtl");b.theme&&a.addClass("ui-widget");qa=m("
").prependTo(a);pa=new Cb(p,b);(ta=pa.render())&&a.prepend(ta);w(b.defaultView);m(window).resize(y);t()||s()}function s(){setTimeout(function(){!F.start&&t()&&H()},0)}function j(){m(window).unbind("resize", +y);pa.destroy();qa.remove();a.removeClass("fc fc-rtl fc-ui-widget")}function l(){return ca.offsetWidth!==0}function t(){return m("body")[0].offsetWidth!==0}function w(e){if(!F||e!=F.name){g++;N();var q=F,J;if(q){if(q.eventsChanged){M();q.eventDirty=q.eventsChanged=false}(q.beforeHide||gb)();Ra(qa,qa.height());q.element.hide()}else Ra(qa,1);qa.css("overflow","hidden");if(F=ka[e])F.element.show();else F=ka[e]=new Ha[e](J=ua=m("
").appendTo(qa), +p);q&&pa.deactivateButton(q.name);pa.activateButton(e);H();qa.css("overflow","");q&&Ra(qa,1);J||(F.afterShow||gb)();g--}}function H(e){if(l()){g++;N();ma===Z&&E();if(!F.start||e||n=F.end){F.render(n,e||0);K(true);!b.lazyFetching||fa()?X():F.renderEvents(Y())}else if(F.sizeDirty||F.eventsDirty||!b.lazyFetching){F.clearEvents();F.sizeDirty&&K();!b.lazyFetching||fa()?X():F.renderEvents(Y())}ia=a.outerWidth();F.sizeDirty=false;F.eventsDirty=false;pa.updateTitle(F.title);e=new Date;e>=F.start&& +e").append(m("").append(m("").append(i(y.left))).append(m("").append(i(y.center))).append(m("").append(i(y.right))))}function h(){E.remove()}function i(y){if(y){var P=m("");m.each(y.split(" "), +function(ea){ea>0&&P.append("");var S;m.each(this.split(","),function(M,X){if(X=="title"){P.append("

 

");S&&S.addClass(K+"-corner-right");S=null}else{var ga;if(a[X])ga=a[X];else if(Ha[X])ga=function(){N.removeClass(K+"-state-hover");a.changeView(X)};if(ga){S&&S.addClass(K+"-no-right");var N;M=b.theme?Wa(b.buttonIcons,X):null;var U=Wa(b.buttonText,X);if(M)N=m("
");else if(U)N=m("");if(N){N.click(function(){N.hasClass(K+"-state-disabled")||ga()}).mousedown(function(){N.not("."+K+"-state-active").not("."+K+"-state-disabled").addClass(K+"-state-down")}).mouseup(function(){N.removeClass(K+"-state-down")}).hover(function(){N.not("."+K+"-state-active").not("."+K+"-state-disabled").addClass(K+"-state-hover")},function(){N.removeClass(K+"-state-hover").removeClass(K+ +"-state-down")}).appendTo(m("").appendTo(P));S?S.addClass(K+"-no-right"):N.addClass(K+"-corner-left");S=N}}}});S&&S.addClass(K+"-corner-right")});return m("").append(P)}}function s(y){E.find("h2.fc-header-title").html(y)}function j(y){E.find("div.fc-button-"+y).addClass(K+"-state-active")}function l(y){E.find("div.fc-button-"+y).removeClass(K+"-state-active")}function t(y){E.find("div.fc-button-"+y).addClass(K+"-state-disabled")}function w(y){E.find("div.fc-button-"+y).removeClass(K+ +"-state-disabled")}var H=this;H.render=f;H.destroy=h;H.updateTitle=s;H.activateButton=j;H.deactivateButton=l;H.disableButton=t;H.enableButton=w;var E=m([]),K}function Db(a,b){function f(c){b.push(c);l(c,N)}function h(c){b=m.grep(b,function(A){return A!=c});G=m.grep(G,function(A){return A.source!=c});N()}function i(c){G=[];s(b,c)}function s(c,A){function C($,fa){var Y=X();if(r!=Y)r.eventsDirty=true;if(I==U&&u<=Y.visStart&&B>=Y.visEnd){if(m.inArray($,b)!=-1){for(Y=0;YB}function H(c){var A,C=G.length,I,V=X().defaultEventEnd,r=c.start-c._start,p=c.end?c.end-(c._end||V(c)):0;for(A=0;Ag){d="";for(g=g;g";for(R=0;R"+(n?"
":"")+"
 
";O(Q,1);fa&&va(Q)}d+=""}F.append(d)}j(F.find("td.fc-new").removeClass("fc-new"));Q=x(u.visStart);F.find("td").each(function(){var ha=m(this);if(Y>1)Q.getMonth()== +q?ha.removeClass("fc-other-month"):ha.addClass("fc-other-month");+Q==+J?ha.removeClass("fc-not-today").addClass("fc-today").addClass(z+"-state-highlight"):ha.addClass("fc-not-today").removeClass("fc-today").removeClass(z+"-state-highlight");ha.find("div.fc-day-number").text(Q.getDate());O(Q,1);fa&&va(Q)});if(Y==1){Q=x(u.visStart);ya.find("th").each(function(ha,da){m(da).text(I(Q,e));da.className=da.className.replace(/^fc-\w+(?= )/,"fc-"+Da[Q.getDay()]);O(Q,1);fa&&va(Q)});Q=x(u.visStart);F.find("td").each(function(ha, +da){da.className=da.className.replace(/^fc-\w+(?= )/,"fc-"+Da[Q.getDay()]);O(Q,1);fa&&va(Q)})}}else{var ba=m("
").appendTo(a);d="";for(g=0;g"+I(Q,e)+"";O(Q,1);fa&&va(Q)}ya=m(d+"").appendTo(ba);d="";Q=x(u.visStart);for(g=0;g";for(R=0;R"+(n?"
"+Q.getDate()+"
":"")+"
 
";O(Q,1);fa&&va(Q)}d+=""}F=m(d+"
").appendTo(ba);j(F.find("td"));ka=m("
").appendTo(a)}}function i(d){qa=d;d=F.find("tr td:first-child");var g=qa-ya.height(),n;if(B("weekMode")=="variable")n= +g=Math.floor(g/(Y==1?2:6));else{n=Math.floor(g/Y);g=g-n*(Y-1)}if(Za===Z){var z=F.find("tr:first").find("td:first");z.height(n);Za=n!=z.height()}if(Za){d.slice(0,-1).height(n);d.slice(-1).height(g)}else{Qa(d.slice(0,-1),n);Qa(d.slice(-1),g)}}function s(d){ta=d;ua.clear();pa=Math.floor(ta/ca);Ka(ya.find("th").slice(0,-1),pa)}function j(d){d.click(l).mousedown(C)}function l(d){if(!B("selectable")){var g=parseInt(this.className.match(/fc\-day(\d+)/)[1]);g=O(x(u.visStart),Math.floor(g/ca)*7+g%ca);G("dayClick", +this,g,true,d)}}function t(d,g,n){n&&ia.build();n=x(u.visStart);for(var z=O(x(n),ca),e=0;e
";for(W=0;W"+F(v,L)+"";O(v,aa);da&&va(v,aa)}oa+=""; +if(p("allDaySlot"))oa+="";oa+="
  
"+p("allDayText")+"
 
 
";ka=m(oa).appendTo(a);w(ka.find("td"));sb=m("
").appendTo(ka); +v=tb();var cb=sa(x(v),ja);sa(v,na);oa="";for(W=0;v";sa(v,p("slotMinutes"));n++}oa+="
"+(!Fa||!wa?F(v,p("axisFormat")):" ")+"
 
";ia=m("
").append(ma=m("
").append(ua= +m(oa))).appendTo(a);H(ia.find("td"));ub=m("
").appendTo(ma);v=x(o);oa="
";for(W=0;W
 
";O(v,aa);da&&va(v,aa)}oa+="
"; +d=m(oa).appendTo(a)}}function i(o,v){if(o===Z)o=R;R=o;Aa={};o=o-ka.height();o=Math.min(o,ua.height());ia.height(o);q=ia.find("tr:first div").height()+1;v&&j()}function s(o){J=o;Ba.clear();ia.width(o).css("overflow","auto");ua.width("");var v=ka.find("tr:first th"),D=ka.find("tr.fc-all-day th:last"),L=d.find("td"),W=ia[0].clientWidth;ua.width(W);W=ia[0].clientWidth;ua.width(W);z=0;Ka(ka.find("tr:lt(2) th:first").add(ia.find("tr:first th")).width(1).each(function(){z=Math.max(z,m(this).outerWidth())}), +z);e=Math.floor((W-z)/g);Ka(L.slice(0,-1),e);Ka(v.slice(1,-2),e);if(o!=W){Ka(v.slice(-2,-1),W-z-e*(g-1));v.slice(-1).show();D.show()}else{ia.css("overflow","hidden");v.slice(-2,-1).width("");v.slice(-1).hide();D.hide()}d.css({top:ka.find("tr").height(),left:z,width:W-z,height:R})}function j(){var o=tb(),v=x(o);v.setHours(p("firstHour"));var D=X(o,v)+1;o=function(){ia.scrollTop(D)};o();setTimeout(o,0)}function l(){Q=ia.scrollTop()}function t(){ia.scrollTop(Q)}function w(o){o.click(E).mousedown(qa)} +function H(o){o.click(E).mousedown(C)}function E(o){if(!p("selectable")){var v=Math.min(g-1,Math.floor((o.pageX-d.offset().left)/e));v=O(x(r.visStart),v*aa+T);var D=this.className.match(/fc-slot(\d+)/);if(D){D=parseInt(D[1])*p("slotMinutes");var L=Math.floor(D/60);v.setHours(L);v.setMinutes(D%60+na);$("dayClick",this,v,false,o)}else $("dayClick",this,v,true,o)}}function K(o,v,D){D&&la.build();var L=x(r.visStart);if(ra){D=Ea(v,L)*aa+T+1;o=Ea(o,L)*aa+T+1}else{D=Ea(o,L);o=Ea(v,L)}D=Math.max(0,D);o=Math.min(g, +o);D=sa(x(o),ja))return ma.height();o=p("slotMinutes");v=v.getHours()*60+v.getMinutes()-na;var D=Math.floor(v/o),L=Aa[D];if(L===Z)L=Aa[D]=ia.find("tr:eq("+D+") td div")[0].offsetTop;return Math.max(0,Math.round(L-1+q*(v%o/o)))}function ga(o){var v=O(x(r.visStart),o.col*aa+T);o=o.row;p("allDaySlot")&&o--;o>=0&&sa(v,na+o*p("slotMinutes"));return v}function N(o){return p("allDaySlot")&&!o.row}function U(){return{left:z,right:J}}function u(){return ka.find("tr.fc-all-day")}function B(o){var v=x(o.start); +if(o.allDay)return v;return sa(v,p("defaultEventMinutes"))}function G(o,v){if(v)return x(o);return sa(x(o),p("slotMinutes"))}function k(o,v,D){if(D)p("allDaySlot")&&K(o,O(x(v),1),true);else c(o,v)}function c(o,v){var D=p("selectHelper");la.build();if(D){var L=Ea(o,r.visStart)*aa+T;if(L>=0&&LW){L.top=W;L.height=wa-W;L.left+=2;L.width-=5;if(m.isFunction(D)){if(o=D(o,v)){L.position="absolute";L.zIndex=8;za=m(o).css(L).appendTo(ma)}}else{za=m(ya({title:"", +start:o,end:v,className:[],editable:false},L,"fc-event fc-event-vert fc-corner-top fc-corner-bottom "));m.browser.msie&&za.find("span.fc-event-bg").hide();za.css("opacity",p("dragOpacity"))}if(za){H(za);ma.append(za);Ka(za,L.width,true);Qa(za,L.height,true)}}}}else P(o,v)}function A(){ca();if(za){za.remove();za=null}}function C(o){if(o.which==1&&p("selectable")){ta(o);var v=this,D;Ca.start(function(L,W){A();if(L&&L.col==W.col&&!N(L)){W=ga(W);L=ga(L);D=[W,sa(x(W),p("slotMinutes")),L,sa(x(L),p("slotMinutes"))].sort(vb); +c(D[0],D[3])}else D=null},o);m(document).one("mouseup",function(L){Ca.stop();if(D){+D[0]==+D[1]&&$("dayClick",v,D[0],false,L);pa(D[0],D[3],false,L)}})}}function I(o,v){Ca.start(function(D){ca();if(D)if(N(D))y(D.row,D.col,D.row,D.col);else{D=ga(D);var L=sa(x(D),p("defaultEventMinutes"));P(D,L)}},v)}function V(o,v,D){var L=Ca.stop();ca();L&&$("drop",o,ga(L),N(L),v,D)}var r=this;r.renderAgenda=h;r.setWidth=s;r.setHeight=i;r.beforeHide=l;r.afterShow=t;r.defaultEventEnd=B;r.timePosition=X;r.dayOfWeekCol= +M;r.cellDate=ga;r.cellIsAllDay=N;r.allDayTR=u;r.allDayBounds=U;r.getHoverListener=function(){return Ca};r.colContentLeft=ea;r.colContentRight=S;r.getDaySegmentContainer=function(){return sb};r.getSlotSegmentContainer=function(){return ub};r.getMinMinute=function(){return na};r.getMaxMinute=function(){return ja};r.getBodyContent=function(){return ma};r.getRowCnt=function(){return 1};r.getColCnt=function(){return g};r.getColWidth=function(){return e};r.getSlotHeight=function(){return q};r.defaultSelectionEnd= +G;r.renderDayOverlay=K;r.renderSelection=k;r.clearSelection=A;r.dragStart=I;r.dragStop=V;jb.call(r,a,b,f);kb.call(r);lb.call(r);Lb.call(r);var p=r.opt,$=r.trigger,fa=r.clearEvents,Y=r.renderOverlay,ca=r.clearOverlays,pa=r.reportSelection,ta=r.unselect,qa=r.daySelectionMousedown,ya=r.slotSegHtml,F=b.formatDate,ka,ia,ma,ua,d,g,n=0,z,e,q,J,R,Q,ba,ha,da,ra,aa,T,na,ja,la,Ca,Ba,Aa={},za,sb,ub;mb(a.addClass("fc-agenda"));la=new nb(function(o,v){function D(xa){return Math.max(oa,Math.min(cb,xa))}var L,W, +wa;d.find("td").each(function(xa,Mb){L=m(Mb);W=L.offset().left;if(xa)wa[1]=W;wa=[W];v[xa]=wa});wa[1]=W+L.outerWidth();if(p("allDaySlot")){L=ka.find("td");W=L.offset().top;o[0]=[W,W+L.outerHeight()]}for(var Fa=ma.offset().top,oa=ia.offset().top,cb=oa+ia.outerHeight(),La=0;La"+Ma(ma(d.start,d.end,P("timeFormat")))+""+Ma(d.title)+""+((d.editable||d.editable===Z&&P("editable"))&&!P("disableResizing")&&m.fn.resizable?"
=
":"")+"
"} +function t(d,g,n){ga(d,g);if(d.editable||d.editable===Z&&P("editable")){H(d,g,n.isStart);n.isEnd&&V(d,g,p())}}function w(d,g,n){ga(d,g);if(d.editable||d.editable===Z&&P("editable")){var z=g.find("span.fc-event-time");E(d,g,z);n.isEnd&&K(d,g,z)}}function H(d,g,n){if(!P("disableDragging")&&g.draggable){var z,e=true,q,J=P("isRTL")?-1:1,R=B(),Q=p(),ba=$(),ha=k();g.draggable({zIndex:9,opacity:P("dragOpacity","month"),revertDuration:P("dragRevertDuration"),start:function(ra,aa){ea("eventDragStart",g,d, +ra,aa);pa(d,g);z=g.width();R.start(function(T,na,ja,la){g.draggable("option","revert",!T||!ja&&!la);F();if(T){q=la*J;if(T.row){if(n&&e){Qa(g.width(Q-10),ba*Math.round((d.end?(d.end-d.start)/Ob:P("defaultEventMinutes"))/P("slotMinutes")));g.draggable("option","grid",[Q,1]);e=false}}else{ya(O(x(d.start),q),O(Oa(d),q));da()}}},ra,"drag")},stop:function(ra,aa){var T=R.stop();F();ea("eventDragStop",g,d,ra,aa);if(T&&(!e||q)){g.find("a").removeAttr("href");T=0;e||(T=Math.round((g.offset().top-fa().offset().top)/ +ba)*P("slotMinutes")+ha-(d.start.getHours()*60+d.start.getMinutes()));ta(this,d,q,T,e,ra,aa)}else{da();m.browser.msie&&g.css("filter","");ca(d,g)}}});function da(){if(!e){g.width(z).height("").draggable("option","grid",null);e=true}}}}function E(d,g,n){if(!P("disableDragging")&&g.draggable){var z,e=false,q,J,R,Q=P("isRTL")?-1:1,ba=B(),ha=r(),da=p(),ra=$();g.draggable({zIndex:9,scroll:false,grid:[da,ra],axis:ha==1?"y":false,opacity:P("dragOpacity"),revertDuration:P("dragRevertDuration"),start:function(na, +ja){ea("eventDragStart",g,d,na,ja);pa(d,g);m.browser.msie&&g.find("span.fc-event-bg").hide();z=g.position();J=R=0;ba.start(function(la,Ca,Ba,Aa){g.draggable("option","revert",!la);F();if(la){q=Aa*Q;if(P("allDaySlot")&&!la.row){if(!e){e=true;n.hide();g.draggable("option","grid",null)}ya(O(x(d.start),q),O(Oa(d),q))}else T()}},na,"drag")},drag:function(na,ja){J=Math.round((ja.position.top-z.top)/ra)*P("slotMinutes");if(J!=R){e||aa(J);R=J}},stop:function(na,ja){var la=ba.stop();F();ea("eventDragStop", +g,d,na,ja);if(la&&(q||J||e))ta(this,d,q,e?0:J,e,na,ja);else{T();g.css(z);aa(0);m.browser.msie&&g.css("filter","").find("span.fc-event-bg").css("display","");ca(d,g)}}});function aa(na){var ja=sa(x(d.start),na),la;if(d.end)la=sa(x(d.end),na);n.text(ma(ja,la,P("timeFormat")))}function T(){if(e){n.css("display","");g.draggable("option","grid",[da,ra]);e=false}}}}function K(d,g,n){if(!P("disableResizing")&&g.resizable){var z,e,q=$();g.resizable({handles:{s:"div.ui-resizable-s"},grid:q,start:function(J, +R){z=e=0;pa(d,g);m.browser.msie&&m.browser.version=="6.0"&&g.css("overflow","hidden");g.css("z-index",9);ea("eventResizeStart",this,d,J,R)},resize:function(J,R){z=Math.round((Math.max(q,g.height())-R.originalSize.height)/q);if(z!=e){n.text(ma(d.start,!z&&!d.end?null:sa(S(d),P("slotMinutes")*z),P("timeFormat")));e=z}},stop:function(J,R){ea("eventResizeStop",this,d,J,R);if(z)qa(this,d,0,P("slotMinutes")*z,J,R);else{g.css("z-index",8);ca(d,g)}}})}}var y=this;y.renderEvents=a;y.rerenderEvents=b;y.clearEvents= +f;y.slotSegHtml=l;y.bindDaySeg=t;qb.call(y);var P=y.opt,ea=y.trigger,S=y.eventEnd,M=y.reportEvents,X=y.clearEventData,ga=y.eventElementHandlers,N=y.setHeight,U=y.getDaySegmentContainer,u=y.getSlotSegmentContainer,B=y.getHoverListener,G=y.getMaxMinute,k=y.getMinMinute,c=y.timePosition,A=y.colContentLeft,C=y.colContentRight,I=y.renderDaySegs,V=y.resizableDayEvent,r=y.getColCnt,p=y.getColWidth,$=y.getSlotHeight,fa=y.getBodyContent,Y=y.reportEventElement,ca=y.showEvents,pa=y.hideEvents,ta=y.eventDrop, +qa=y.eventResize,ya=y.renderDayOverlay,F=y.clearOverlays,ka=y.calendar,ia=ka.formatDate,ma=ka.formatDates,ua=[]}function Nb(a){var b,f,h,i,s,j;for(b=a.length-1;b>0;b--){i=a[b];for(f=0;f"+(!c.allDay&&k.isStart?""+Ma(ga(c.start,c.end,h("timeFormat")))+"":"")+""+Ma(c.title)+""+((c.editable||c.editable===Z&&h("editable"))&&!h("disableResizing")&&m.fn.resizable?"
":"")+"
";k.left=C;k.outerWidth=I-C}ta[0].innerHTML=V;V=ta.children();for(B=0;B div").height($+c)}for(p=0;p"));l[0].parentNode!=j[0]&&l.appendTo(j);h.push(l.css(s).show());return l}function b(){for(var s;s=h.shift();)i.push(s.hide().unbind())}var f=this;f.renderOverlay=a;f.clearOverlays=b;var h=[],i=[]}function nb(a){var b=this,f,h;b.build=function(){f=[];h=[];a(f,h)};b.cell=function(i,s){var j=f.length,l=h.length,t,w=-1,H=-1;for(t=0;t=f[t][0]&&s=h[t][0]&&i=0&&H>=0?{row:w,col:H}:null};b.rect=function(i,s,j,l,t){t=t.offset();return{top:f[i][0]-t.top,left:h[s][0]-t.left,width:h[l][1]-h[s][0],height:f[j][1]-f[i][0]}}}function ob(a){function b(l){l=a.cell(l.pageX,l.pageY);if(!l!=!j||l&&(l.row!=j.row||l.col!=j.col)){if(l){s||(s=l);i(l,s,l.row-s.row,l.col-s.col)}else i(l,s);j=l}}var f=this,h,i,s,j;f.start=function(l,t,w){i=l;s=j=null;a.build();b(t);h=w||"mousemove";m(document).bind(h,b)};f.stop=function(){m(document).unbind(h,b);return j}} +function pb(a){function b(j){return h[j]=h[j]||a(j)}var f=this,h={},i={},s={};f.left=function(j){return i[j]=i[j]===Z?b(j).position().left:i[j]};f.right=function(j){return s[j]=s[j]===Z?f.left(j)+b(j).width():s[j]};f.clear=function(){h={};i={};s={}}}function Ta(a,b,f){a.setFullYear(a.getFullYear()+b);f||Ia(a);return a}function Ua(a,b,f){if(+a){b=a.getMonth()+b;var h=x(a);h.setDate(1);h.setMonth(b);a.setMonth(b);for(f||Ia(a);a.getMonth()!=h.getMonth();)a.setDate(a.getDate()+(aj;w--)if(H= +Qb[f.substring(j,w)]){if(i)E+=H(i,h);j=w-1;break}if(w==j)if(i)E+=t}}return E}function Oa(a){return a.end?Rb(a.end,a.allDay):O(x(a.start),1)}function Rb(a,b){a=x(a);return b||a.getHours()||a.getMinutes()?O(a,1):Ia(a)}function Sb(a,b){return(b.msLength-a.msLength)*100+(a.event.start-b.event.start)}function yb(a,b){return a.end>b.start&&a.startf&&t +h){w=x(h);E=false}else{w=w;E=true}i.push({event:l,start:t,end:w,isStart:H,isEnd:E,msLength:w-t})}}return i.sort(Sb)}function $a(a){var b=[],f,h=a.length,i,s,j,l;for(f=0;f=0;f--){h=a[b[f].toLowerCase()];if(h!==Z)return h}return a[""]}function Ma(a){return a.replace(/&/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""").replace(/\n/g,"
")}function xb(a){return a.id+"/"+a.className+"/"+a.style.cssText.replace(/(^|;)\s*(top|left|width|height)\s*:[^;]*/ig, +"")}function mb(a){a.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})}var Pa={defaultView:"month",aspectRatio:1.35,header:{left:"title",center:"",right:"today prev,next"},weekends:true,allDayDefault:true,ignoreTimezone:true,lazyFetching:true,startParam:"start",endParam:"end",titleFormat:{month:"MMMM yyyy",week:"MMM d[ yyyy]{ '—'[ MMM] d yyyy}",day:"dddd, MMM d, yyyy"},columnFormat:{month:"ddd",week:"ddd M/d",day:"dddd M/d"},timeFormat:{"":"h(:mm)t"}, +isRTL:false,firstDay:0,monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],buttonText:{prev:" ◄ ",next:" ► ",prevYear:" << ",nextYear:" >> ", +today:"today",month:"month",week:"week",day:"day"},theme:false,buttonIcons:{prev:"circle-triangle-w",next:"circle-triangle-e"},unselectAuto:true,dropAccept:"*"},Ub={header:{left:"next,prev today",center:"",right:"title"},buttonText:{prev:" ► ",next:" ◄ ",prevYear:" >> ",nextYear:" << "},buttonIcons:{prev:"circle-triangle-e",next:"circle-triangle-w"}},Ga=m.fullCalendar={version:"1.4.8"},Ha=Ga.views={};m.fn.fullCalendar=function(a){if(typeof a== +"string"){var b=Array.prototype.slice.call(arguments,1),f;this.each(function(){var i=m.data(this,"fullCalendar");if(i&&m.isFunction(i[a])){i=i[a].apply(i,b);if(f===Z)f=i;a=="destroy"&&m.removeData(this,"fullCalendar")}});if(f!==Z)return f;return this}var h=a.eventSources||[];delete a.eventSources;if(a.events){h.push(a.events);delete a.events}a=m.extend(true,{},Pa,a.isRTL||a.isRTL===Z&&Pa.isRTL?Ub:{},a);this.each(function(i,s){i=m(s);s=new Bb(i,a,h);i.data("fullCalendar",s);s.render()});return this}; +var Eb=1;Ha.month=Fb;Ha.basicWeek=Gb;Ha.basicDay=Hb;var Za;fb({weekMode:"fixed"});Ha.agendaWeek=Jb;Ha.agendaDay=Kb;fb({allDaySlot:true,allDayText:"all-day",firstHour:6,slotMinutes:30,defaultEventMinutes:120,axisFormat:"h(:mm)tt",timeFormat:{agenda:"h:mm{ - h:mm}"},dragOpacity:{agenda:0.5},minTime:0,maxTime:24});Ga.addDays=O;Ga.cloneDate=x;Ga.parseDate=Xa;Ga.parseISO8601=Ab;Ga.parseTime=bb;Ga.formatDate=Ja;Ga.formatDates=Va;var Da=["sun","mon","tue","wed","thu","fri","sat"],ib=864E5,Pb=36E5,Ob=6E4, +Qb={s:function(a){return a.getSeconds()},ss:function(a){return Na(a.getSeconds())},m:function(a){return a.getMinutes()},mm:function(a){return Na(a.getMinutes())},h:function(a){return a.getHours()%12||12},hh:function(a){return Na(a.getHours()%12||12)},H:function(a){return a.getHours()},HH:function(a){return Na(a.getHours())},d:function(a){return a.getDate()},dd:function(a){return Na(a.getDate())},ddd:function(a,b){return b.dayNamesShort[a.getDay()]},dddd:function(a,b){return b.dayNames[a.getDay()]}, +M:function(a){return a.getMonth()+1},MM:function(a){return Na(a.getMonth()+1)},MMM:function(a,b){return b.monthNamesShort[a.getMonth()]},MMMM:function(a,b){return b.monthNames[a.getMonth()]},yy:function(a){return(a.getFullYear()+"").substring(2)},yyyy:function(a){return a.getFullYear()},t:function(a){return a.getHours()<12?"a":"p"},tt:function(a){return a.getHours()<12?"am":"pm"},T:function(a){return a.getHours()<12?"A":"P"},TT:function(a){return a.getHours()<12?"AM":"PM"},u:function(a){return Ja(a, +"yyyy-MM-dd'T'HH:mm:ss'Z'")},S:function(a){a=a.getDate();if(a>10&&a<20)return"th";return["st","nd","rd"][a%10-1]||"th"}}})(jQuery); diff -r 24bf6f181d0e -r 36ed2bf7ad3d web/views/calendar.py --- a/web/views/calendar.py Wed Dec 01 17:11:35 2010 +0100 +++ b/web/views/calendar.py Thu Dec 09 15:27:01 2010 +0100 @@ -20,15 +20,28 @@ __docformat__ = "restructuredtext en" _ = unicode -from datetime import datetime, date, timedelta +import copy +from datetime import timedelta from logilab.mtconverter import xml_escape -from logilab.common.date import ONEDAY, strptime, date_range, todate, todatetime +from logilab.common.date import todatetime +from cubicweb.utils import json_dumps from cubicweb.interfaces import ICalendarable from cubicweb.selectors import implements, adaptable from cubicweb.view import EntityView, EntityAdapter, implements_adapter_compat +# useful constants & functions ################################################ + +ONEDAY = timedelta(1) + +WEEKDAYS = (_("monday"), _("tuesday"), _("wednesday"), _("thursday"), + _("friday"), _("saturday"), _("sunday")) +MONTHNAMES = ( _('january'), _('february'), _('march'), _('april'), _('may'), + _('june'), _('july'), _('august'), _('september'), _('october'), + _('november'), _('december') + ) + class ICalendarableAdapter(EntityAdapter): __regid__ = 'ICalendarable' @@ -43,21 +56,10 @@ @property @implements_adapter_compat('ICalendarable') def stop(self): - """return stop state""" + """return stop date""" raise NotImplementedError -# useful constants & functions ################################################ - -ONEDAY = timedelta(1) - -WEEKDAYS = (_("monday"), _("tuesday"), _("wednesday"), _("thursday"), - _("friday"), _("saturday"), _("sunday")) -MONTHNAMES = ( _('january'), _('february'), _('march'), _('april'), _('may'), - _('june'), _('july'), _('august'), _('september'), _('october'), - _('november'), _('december') - ) - # Calendar views ############################################################## try: @@ -145,9 +147,6 @@ self.w('
%s'%self._cw.format_date(icalendarable.start or icalendarable.stop)) -class CalendarLargeItemView(CalendarItemView): - __regid__ = 'calendarlargeitem' - class _TaskEntry(object): def __init__(self, task, color, index=0): @@ -169,413 +168,91 @@ return self.start and self.stop and self.start.isocalendar() == self.stop.isocalendar() -class OneMonthCal(EntityView): - """At some point, this view will probably replace ampm calendars""" - __regid__ = 'onemonthcal' - __select__ = adaptable('ICalendarable') - - paginable = False - title = _('one month') - - def call(self): - self._cw.add_js('cubicweb.ajax.js') - self._cw.add_css('cubicweb.calendar.css') - # XXX: restrict courses directy with RQL - _today = datetime.today() - - if 'year' in self._cw.form: - year = int(self._cw.form['year']) - else: - year = _today.year - if 'month' in self._cw.form: - month = int(self._cw.form['month']) - else: - month = _today.month - - first_day_of_month = date(year, month, 1) - firstday = first_day_of_month - timedelta(first_day_of_month.weekday()) - if month >= 12: - last_day_of_month = date(year + 1, 1, 1) - timedelta(1) - else: - last_day_of_month = date(year, month + 1, 1) - timedelta(1) - # date range exclude last day so we should at least add one day, hence - # the 7 - lastday = last_day_of_month + timedelta(7 - last_day_of_month.weekday()) - month_dates = list(date_range(firstday, lastday)) - dates = {} - task_max = 0 - for row in xrange(self.cw_rset.rowcount): - task = self.cw_rset.get_entity(row, 0) - if len(self.cw_rset[row]) > 1 and self.cw_rset.description[row][1] == 'CWUser': - user = self.cw_rset.get_entity(row, 1) - else: - user = None - the_dates = [] - icalendarable = task.cw_adapt_to('ICalendarable') - tstart = icalendarable.start - if tstart: - tstart = todate(icalendarable.start) - if tstart > lastday: - continue - the_dates = [tstart] - tstop = icalendarable.stop - if tstop: - tstop = todate(tstop) - if tstop < firstday: - continue - the_dates = [tstop] - if tstart and tstop: - if tstart.isocalendar() == tstop.isocalendar(): - if firstday <= tstart <= lastday: - the_dates = [tstart] - else: - the_dates = date_range(max(tstart, firstday), - min(tstop + ONEDAY, lastday)) - if not the_dates: - continue - - for d in the_dates: - d_tasks = dates.setdefault((d.year, d.month, d.day), {}) - t_users = d_tasks.setdefault(task, set()) - t_users.add( user ) - if len(d_tasks) > task_max: - task_max = len(d_tasks) - - days = [] - nrows = max(3, task_max) - # colors here are class names defined in cubicweb.css - colors = [ "col%x" % i for i in range(12) ] - next_color_index = 0 - - visited_tasks = {} # holds a description of a task - task_colors = {} # remember a color assigned to a task - for mdate in month_dates: - d_tasks = dates.get((mdate.year, mdate.month, mdate.day), {}) - rows = [None] * nrows - # every task that is "visited" for the first time - # require a special treatment, so we put them in - # 'postpone' - postpone = [] - for task in d_tasks: - if task in visited_tasks: - task_descr = visited_tasks[ task ] - rows[task_descr.index] = task_descr - else: - postpone.append(task) - for task in postpone: - # to every 'new' task we must affect a color - # (which must be the same for every user concerned - # by the task) - for i, t in enumerate(rows): - if t is None: - if task in task_colors: - color = task_colors[task] - else: - color = colors[next_color_index] - next_color_index = (next_color_index+1)%len(colors) - task_colors[task] = color - task_descr = _TaskEntry(task, color, i) - rows[i] = task_descr - visited_tasks[task] = task_descr - break - else: - raise RuntimeError("is it possible we got it wrong?") - - days.append( rows ) - - curdate = first_day_of_month - self.w(u'
') - # build schedule - self.w(u'') - prevlink, nextlink = self._prevnext_links(curdate) # XXX - self.w(u'' - u'' % - (xml_escape(prevlink), self._cw._(curdate.strftime('%B').lower()), - curdate.year, xml_escape(nextlink))) - - # output header - self.w(u'' % - tuple(self._cw._(day) for day in WEEKDAYS)) - # build calendar - for mdate, task_rows in zip(month_dates, days): - if mdate.weekday() == 0: - self.w(u'') - self._build_calendar_cell(mdate, task_rows, curdate) - if mdate.weekday() == 6: - self.w(u'') - self.w(u'
<<%s %s>>
%s%s%s%s%s%s%s
') - - def _prevnext_links(self, curdate): - prevdate = curdate - timedelta(31) - nextdate = curdate + timedelta(31) - rql = self.cw_rset.printable_rql() - prevlink = self._cw.ajax_replace_url('onemonthcalid', rql=rql, - vid='onemonthcal', - year=prevdate.year, - month=prevdate.month) - nextlink = self._cw.ajax_replace_url('onemonthcalid', rql=rql, - vid='onemonthcal', - year=nextdate.year, - month=nextdate.month) - return prevlink, nextlink - - def _build_calendar_cell(self, celldate, rows, curdate): - curmonth = curdate.month - classes = "" - if celldate.month != curmonth: - classes += " outOfRange" - if celldate == date.today(): - classes += " today" - self.w(u'' % classes) - self.w(u'
' % classes) - self.w(u'
%s
' % celldate.day) - - if len(self.cw_rset.column_types(0)) == 1: - etype = list(self.cw_rset.column_types(0))[0] - url = self._cw.build_url(vid='creation', etype=etype, - schedule=True, - start=self._cw.format_date(celldate), stop=self._cw.format_date(celldate), - __redirectrql=self.cw_rset.printable_rql(), - __redirectparams=self._cw.build_url_params(year=curdate.year, month=curmonth), - __redirectvid=self.__regid__ - ) - self.w(u'' % (xml_escape(url), self._cw._(u'add'))) - self.w(u' ') - self.w(u'
') - self.w(u'
') - for task_descr in rows: - if task_descr: - task = task_descr.task - self.w(u'
' % task_descr.color) - task.view('calendaritem', w=self.w ) - url = task.absolute_url(vid='edition', - __redirectrql=self.cw_rset.printable_rql(), - __redirectparams=self._cw.build_url_params(year=curdate.year, month=curmonth), - __redirectvid=self.__regid__ - ) - - self.w(u'
' % xml_escape(url)) - task.view('tooltip', w=self.w ) - self.w(u'
') - else: - self.w(u'
') - self.w(u" ") - self.w(u'
') - self.w(u'
') - self.w(u'') - - -class OneWeekCal(EntityView): - """At some point, this view will probably replace ampm calendars""" - __regid__ = 'oneweekcal' +class CalendarView(EntityView): + __regid__ = 'calendar' __select__ = adaptable('ICalendarable') paginable = False - title = _('one week') + title = _('calendar') + + fullcalendar_options = { + 'firstDay': 1, + 'header': {'left': 'prev,next today', + 'center': 'title', + 'right': 'month,agendaWeek,agendaDay', + }, + 'editable': True, + 'defaultView': 'month', + 'timeFormat': {'month': '', + '': 'H:mm'}, + 'firstHour': 8, + 'axisFormat': 'H:mm', + 'columnFormat': {'month': 'dddd', + 'agendaWeek': 'dddd yyyy/M/dd', + 'agendaDay': 'dddd yyyy/M/dd'} + } + def call(self): - self._cw.add_js( ('cubicweb.ajax.js', 'cubicweb.calendar.js') ) - self._cw.add_css('cubicweb.calendar.css') - # XXX: restrict directly with RQL - _today = datetime.today() - if 'year' in self._cw.form: - year = int(self._cw.form['year']) - else: - year = _today.year - if 'week' in self._cw.form: - week = int(self._cw.form['week']) - else: - week = _today.isocalendar()[1] - # week - 1 since we get week number > 0 while we want it to start from 0 - first_day_of_week = todate(strptime('%s-%s-1' % (year, week - 1), '%Y-%U-%w')) - lastday = first_day_of_week + timedelta(6) - firstday = first_day_of_week - dates = [[] for i in range(7)] - task_colors = {} # remember a color assigned to a task - # colors here are class names defined in cubicweb.css - colors = [ "col%x" % i for i in range(12) ] - next_color_index = 0 - done_tasks = set() - for row in xrange(self.cw_rset.rowcount): - task = self.cw_rset.get_entity(row, 0) - if task.eid in done_tasks: - continue - done_tasks.add(task.eid) - the_dates = [] - icalendarable = task.cw_adapt_to('ICalendarable') - tstart = icalendarable.start - tstop = icalendarable.stop - if tstart: - tstart = todate(tstart) - if tstart > lastday: - continue - the_dates = [tstart] - if tstop: - tstop = todate(tstop) - if tstop < firstday: - continue - the_dates = [tstop] - if tstart and tstop: - the_dates = date_range(max(tstart, firstday), - min(tstop + ONEDAY, lastday)) - if not the_dates: - continue + self._cw.demote_to_html() + self._cw.add_css(('fullcalendar.css', 'cubicweb.calendar.css')) + self._cw.add_js(('jquery.ui.js', 'fullcalendar.min.js', 'jquery.qtip.min.js')) + self.add_onload() + # write calendar div to load jquery fullcalendar object + self.w(u'
') - if task not in task_colors: - task_colors[task] = colors[next_color_index] - next_color_index = (next_color_index+1) % len(colors) - - for d in the_dates: - day = d.weekday() - task_descr = _TaskEntry(task, task_colors[task]) - dates[day].append(task_descr) - - self.w(u'
') - # build schedule - self.w(u'') - prevlink, nextlink = self._prevnext_links(first_day_of_week) # XXX - self.w(u'') - self.w(u'' - u'' % - (xml_escape(prevlink), first_day_of_week.year, - self._cw._(u'week'), first_day_of_week.isocalendar()[1], - xml_escape(nextlink))) - - # output header - self.w(u'') - self.w(u'') # column for hours - _today = date.today() - for i, day in enumerate(WEEKDAYS): - wdate = first_day_of_week + timedelta(i) - if wdate.isocalendar() == _today.isocalendar(): - self.w(u'' % (self._cw._(day), self._cw.format_date(wdate))) - else: - self.w(u'' % (self._cw._(day), self._cw.format_date(wdate))) - self.w(u'') - - # build week calendar - self.w(u'') - self.w(u'') - for i, day in enumerate(WEEKDAYS): - wdate = first_day_of_week + timedelta(i) - classes = "" - if wdate.isocalendar() == _today.isocalendar(): - classes = " today" - self.w(u'') - self.w(u'') - self.w(u'
<<%s %s %s>>
%s
%s
%s
%s
') # column for hours - extra = "" - for h in range(8, 20): - self.w(u'
'%extra) - self.w(u'%02d:00'%h) - self.w(u'
') - self.w(u'
' % (classes, day)) - if len(self.cw_rset.column_types(0)) == 1: - etype = list(self.cw_rset.column_types(0))[0] - url = self._cw.build_url(vid='creation', etype=etype, - schedule=True, - __redirectrql=self.cw_rset.printable_rql(), - __redirectparams=self._cw.build_url_params(year=year, week=week), - __redirectvid=self.__regid__ - ) - extra = ' ondblclick="addCalendarItem(event, hmin=8, hmax=20, year=%s, month=%s, day=%s, duration=2, baseurl=\'%s\')"' % ( - wdate.year, wdate.month, wdate.day, xml_escape(url)) - else: - extra = "" - self.w(u'
'% extra) - for h in range(8, 20): - self.w(u'
'%((h-7)*8)) - self.w(u'
') - if dates[i]: - self._build_calendar_cell(wdate, dates[i]) - self.w(u'
') - self.w(u'
') - self.w(u'
') - self.w(u'
 
') - - def _build_calendar_cell(self, date, task_descrs): - inday_tasks = [t for t in task_descrs if t.is_one_day_task() and t.in_working_hours()] - wholeday_tasks = [t for t in task_descrs if not t.is_one_day_task()] - inday_tasks.sort(key=lambda t:t.start) - sorted_tasks = [] - for i, t in enumerate(wholeday_tasks): - t.index = i - ncols = len(wholeday_tasks) - while inday_tasks: - t = inday_tasks.pop(0) - for i, c in enumerate(sorted_tasks): - if not c or c[-1].stop <= t.start: - c.append(t) - t.index = i+ncols - break - else: - t.index = len(sorted_tasks) + ncols - sorted_tasks.append([t]) - ncols += len(sorted_tasks) - if ncols == 0: - return - - inday_tasks = [] - for tasklist in sorted_tasks: - inday_tasks += tasklist - width = 100.0/ncols - for task_desc in wholeday_tasks + inday_tasks: - task = task_desc.task - start_hour = 8 - start_min = 0 - stop_hour = 20 - stop_min = 0 - if task_desc.start: - if date < todate(task_desc.start) < date + ONEDAY: - start_hour = max(8, task_desc.start.hour) - start_min = task_desc.start.minute - if task_desc.stop: - if date < todate(task_desc.stop) < date + ONEDAY: - stop_hour = min(20, task_desc.stop.hour) - if stop_hour < 20: - stop_min = task_desc.stop.minute - - height = 100.0*(stop_hour+stop_min/60.0-start_hour-start_min/60.0)/(20-8) - top = 100.0*(start_hour+start_min/60.0-8)/(20-8) - left = width*task_desc.index - style = "height: %s%%; width: %s%%; top: %s%%; left: %s%%; " % \ - (height, width, top, left) - self.w(u'
' % \ - (task_desc.color, style)) - task.view('calendaritem', dates=False, w=self.w) - url = task.absolute_url(vid='edition', - __redirectrql=self.cw_rset.printable_rql(), - __redirectparams=self._cw.build_url_params(year=date.year, week=date.isocalendar()[1]), - __redirectvid=self.__regid__ - ) - - self.w(u'
' % xml_escape(url)) - task.view('tooltip', w=self.w) - self.w(u'
') - if task_desc.start is None: - self.w(u'
') - self.w(u'
') - self.w(u'
') - self.w(u'
') - self.w(u'
') - self.w(u'
') - self.w(u'end') - self.w(u'
') - self.w(u'
') - self.w(u'
') + def add_onload(self): + fullcalendar_options = self.fullcalendar_options.copy() + fullcalendar_options['events'] = self.get_events() + fullcalendar_options['buttonText'] = {'today': self._cw._('today'), + 'month': self._cw._('month'), + 'week': self._cw._('week'), + 'day': self._cw._('day')} + # js callback to add a tooltip and to put html in event's title + js = """ + var options = %s; + options.eventRender = function(event, $element) { + // add a tooltip for each event + var div = '
'+ event.description+ '
'; + $element.append(div); + // allow to have html tags in event's title + $element.find('span.fc-event-title').html($element.find('span.fc-event-title').text()); + }; + $("#calendar").fullCalendar(options); + """ #" + self._cw.add_onload(js % json_dumps(fullcalendar_options)) - def _prevnext_links(self, curdate): - prevdate = curdate - timedelta(7) - nextdate = curdate + timedelta(7) - rql = self.cw_rset.printable_rql() - prevlink = self._cw.ajax_replace_url('oneweekcalid', rql=rql, - vid='oneweekcal', - year=prevdate.year, - week=prevdate.isocalendar()[1]) - nextlink = self._cw.ajax_replace_url('oneweekcalid', rql=rql, - vid='oneweekcal', - year=nextdate.year, - week=nextdate.isocalendar()[1]) - return prevlink, nextlink + def get_events(self): + events = [] + for entity in self.cw_rset.entities(): + icalendarable = entity.cw_adapt_to('ICalendarable') + event = {'eid': entity.eid, + 'title': entity.view('calendaritem'), + 'url': xml_escape(entity.absolute_url()), + 'className': 'calevent', + 'description': entity.view('tooltip'), + } + start_date = icalendarable.start + if not start_date: + start_date = icalendarable.stop + event['start'] = start_date.strftime('%Y-%m-%dT%H:%M') + event['allDay'] = True + if icalendarable.stop: + event['end'] = icalendarable.stop.strftime('%Y-%m-%dT%H:%M') + event['allDay'] = False + events.append(event) + return events + +class OneMonthCal(CalendarView): + __regid__ = 'onemonthcal' + + title = _('one month') + +class OneWeekCal(CalendarView): + __regid__ = 'oneweekcal' + + title = _('one week') + fullcalendar_options = CalendarView.fullcalendar_options.copy() + fullcalendar_options['defaultView'] = 'agendaWeek' diff -r 24bf6f181d0e -r 36ed2bf7ad3d web/views/old_calendar.py --- a/web/views/old_calendar.py Wed Dec 01 17:11:35 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,574 +0,0 @@ -# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved. -# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr -# -# This file is part of CubicWeb. -# -# CubicWeb is free software: you can redistribute it and/or modify it under the -# terms of the GNU Lesser General Public License as published by the Free -# Software Foundation, either version 2.1 of the License, or (at your option) -# any later version. -# -# CubicWeb is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more -# details. -# -# You should have received a copy of the GNU Lesser General Public License along -# with CubicWeb. If not, see . -"""html calendar views""" - -__docformat__ = "restructuredtext en" -_ = unicode - -from datetime import date, time, timedelta - -from logilab.mtconverter import xml_escape -from logilab.common.date import (ONEDAY, ONEWEEK, days_in_month, previous_month, - next_month, first_day, last_day, date_range) - -from cubicweb.interfaces import ICalendarViews -from cubicweb.selectors import implements, adaptable -from cubicweb.view import EntityView, EntityAdapter, implements_adapter_compat - -class ICalendarViewsAdapter(EntityAdapter): - """calendar views interface""" - __regid__ = 'ICalendarViews' - __select__ = implements(ICalendarViews, warn=False) # XXX for bw compat, should be abstract - - @implements_adapter_compat('ICalendarViews') - def matching_dates(self, begin, end): - """ - :param begin: day considered as begin of the range (`DateTime`) - :param end: day considered as end of the range (`DateTime`) - - :return: - a list of dates (`DateTime`) in the range [`begin`, `end`] on which - this entity apply - """ - raise NotImplementedError - - -# used by i18n tools -WEEKDAYS = [_("monday"), _("tuesday"), _("wednesday"), _("thursday"), - _("friday"), _("saturday"), _("sunday")] -MONTHNAMES = [ _('january'), _('february'), _('march'), _('april'), _('may'), - _('june'), _('july'), _('august'), _('september'), _('october'), - _('november'), _('december') - ] - -class _CalendarView(EntityView): - """base calendar view containing helpful methods to build calendar views""" - __select__ = adaptable('ICalendarViews') - paginable = False - - # Navigation building methods / views #################################### - - PREV = u'<<  <' - NEXT = u'>  >>' - NAV_HEADER = u""" - -
%s%s
-""" % (PREV, NEXT) - - def nav_header(self, date, smallshift=3, bigshift=9): - """prints shortcut links to go to previous/next steps (month|week)""" - prev1 = previous_month(date, smallshift) - next1 = next_month(date, smallshift) - prev2 = previous_month(date, bigshift) - next2 = next_month(date, bigshift) - rql = self.cw_rset.printable_rql() - return self.NAV_HEADER % ( - xml_escape(self._cw.build_url(rql=rql, vid=self.__regid__, year=prev2.year, - month=prev2.month)), - xml_escape(self._cw.build_url(rql=rql, vid=self.__regid__, year=prev1.year, - month=prev1.month)), - xml_escape(self._cw.build_url(rql=rql, vid=self.__regid__, year=next1.year, - month=next1.month)), - xml_escape(self._cw.build_url(rql=rql, vid=self.__regid__, year=next2.year, - month=next2.month))) - - - # Calendar building methods ############################################## - - def build_calendars(self, schedule, begin, end): - """build several HTML calendars at once, one for each month - between begin and end - """ - return [self.build_calendar(schedule, date) - for date in date_range(begin, end, incmonth=1)] - - def build_calendar(self, schedule, first_day): - """method responsible for building *one* HTML calendar""" - # FIXME iterates between [first_day-first_day.day_of_week ; - # last_day+6-last_day.day_of_week] - umonth = self._cw.format_date(first_day, '%B %Y') # localized month name - rows = [] - current_row = [NO_CELL] * first_day.weekday() - for daynum in xrange(0, days_in_month(first_day)): - # build cell day - day = first_day + timedelta(daynum) - events = schedule.get(day) - if events: - events = [u'\n'.join(event) for event in events.values()] - current_row.append(CELL % (daynum+1, '\n'.join(events))) - else: - current_row.append(EMPTY_CELL % (daynum+1)) - # store & reset current row on Sundays - if day.weekday() == 6: - rows.append(u'%s%s' % (WEEKNUM_CELL % day.isocalendar()[1], ''.join(current_row))) - current_row = [] - current_row.extend([NO_CELL] * (6-day.weekday())) - rql = self.cw_rset.printable_rql() - if day.weekday() != 6: - rows.append(u'%s%s' % (WEEKNUM_CELL % day.isocalendar()[1], ''.join(current_row))) - url = self._cw.build_url(rql=rql, vid='calendarmonth', - year=first_day.year, month=first_day.month) - monthlink = u'%s' % (xml_escape(url), umonth) - return CALENDAR(self._cw) % (monthlink, '\n'.join(rows)) - - def _mk_schedule(self, begin, end, itemvid='calendaritem'): - """private method that gathers information from resultset - and builds calendars according to it - - :param begin: begin of date range - :param end: end of date rangs - :param itemvid: which view to call to render elements in cells - - returns { day1 : { hour : [views] }, - day2 : { hour : [views] } ... } - """ - # put this here since all sub views are calling this method - self._cw.add_css('cubicweb.calendar.css') - schedule = {} - for row in xrange(len(self.cw_rset.rows)): - entity = self.cw_rset.get_entity(row, 0) - infos = u'
' - infos += self._cw.view(itemvid, self.cw_rset, row=row) - infos += u'
' - for date_ in entity.cw_adapt_to('ICalendarViews').matching_dates(begin, end): - day = date(date_.year, date_.month, date_.day) - try: - dt = time(date_.hour, date_.minute, date_.second) - except AttributeError: - # date instance - dt = time(0, 0, 0) - schedule.setdefault(day, {}) - schedule[day].setdefault(dt, []).append(infos) - return schedule - - - @staticmethod - def get_date_range(day, shift=4): - """returns a couple (begin, end) - - is the first day of current_month - shift - is the last day of current_month + (shift+1) - """ - begin = first_day(previous_month(day, shift)) - end = last_day(next_month(day, shift)) - return begin, end - - def _build_ampm_cells(self, events): - """create a view without any hourly details. - - :param events: dictionnary with all events classified by hours - """ - # split events according am/pm - am_events = [event for e_time, e_list in events.iteritems() - if 0 <= e_time.hour < 12 - for event in e_list] - pm_events = [event for e_time, e_list in events.iteritems() - if 12 <= e_time.hour < 24 - for event in e_list] - # format each am/pm cell - if am_events: - am_content = AMPM_CONTENT % ("amCell", "am", '\n'.join(am_events)) - else: - am_content = AMPM_EMPTY % ("amCell", "am") - if pm_events: - pm_content = AMPM_CONTENT % ("pmCell", "pm", '\n'.join(pm_events)) - else: - pm_content = AMPM_EMPTY % ("pmCell", "pm") - return am_content, pm_content - - - -class YearCalendarView(_CalendarView): - __regid__ = 'calendaryear' - title = _('calendar (year)') - - def call(self, year=None, month=None): - """this view renders a 3x3 calendars' table""" - year = year or int(self._cw.form.get('year', date.today().year)) - month = month or int(self._cw.form.get('month', date.today().month)) - center_date = date(year, month, 1) - begin, end = self.get_date_range(day=center_date) - schedule = self._mk_schedule(begin, end) - self.w(self.nav_header(center_date)) - calendars = tuple(self.build_calendars(schedule, begin, end)) - self.w(SMALL_CALENDARS_PAGE % calendars) - - -class SemesterCalendarView(_CalendarView): - """this view renders three semesters as three rows of six columns, - one column per month - """ - __regid__ = 'calendarsemester' - title = _('calendar (semester)') - - def call(self, year=None, month=None): - year = year or int(self._cw.form.get('year', date.today().year)) - month = month or int(self._cw.form.get('month', date.today().month)) - begin = previous_month(date(year, month, 1), 2) - end = next_month(date(year, month, 1), 3) - schedule = self._mk_schedule(begin, end) - self.w(self.nav_header(date(year, month, 1), 1, 6)) - self.w(u'') - self.build_calendars(schedule, begin, end) - self.w(u'
') - self.w(self.nav_header(date(year, month, 1), 1, 6)) - - def build_calendars(self, schedule, begin, end): - self.w(u'') - rql = self.cw_rset.printable_rql() - for cur_month in date_range(begin, end, incmonth=1): - umonth = u'%s %s' % (self._cw.format_date(cur_month, '%B'), cur_month.year) - url = self._cw.build_url(rql=rql, vid=self.__regid__, - year=cur_month.year, month=cur_month.month) - self.w(u'%s' % (xml_escape(url), - umonth)) - self.w(u'') - _ = self._cw._ - for day_num in xrange(31): - self.w(u'') - for cur_month in date_range(begin, end, incmonth=1): - if day_num >= days_in_month(cur_month): - self.w(u'%s%s' % (NO_CELL, NO_CELL)) - else: - day = date(cur_month.year, cur_month.month, day_num+1) - events = schedule.get(day) - self.w(u'%s %s\n' % (_(WEEKDAYS[day.weekday()])[0].upper(), day_num+1)) - self.format_day_events(day, events) - self.w(u'') - - def format_day_events(self, day, events): - if events: - events = ['\n'.join(event) for event in events.values()] - self.w(WEEK_CELL % '\n'.join(events)) - else: - self.w(WEEK_EMPTY_CELL) - - -class MonthCalendarView(_CalendarView): - """this view renders a 3x1 calendars' table""" - __regid__ = 'calendarmonth' - title = _('calendar (month)') - - def call(self, year=None, month=None): - year = year or int(self._cw.form.get('year', date.today().year)) - month = month or int(self._cw.form.get('month', date.today().month)) - center_date = date(year, month, 1) - begin, end = self.get_date_range(day=center_date, shift=1) - schedule = self._mk_schedule(begin, end) - calendars = self.build_calendars(schedule, begin, end) - self.w(self.nav_header(center_date, 1, 3)) - self.w(BIG_CALENDARS_PAGE % tuple(calendars)) - self.w(self.nav_header(center_date, 1, 3)) - - -class WeekCalendarView(_CalendarView): - """this view renders a calendar for week events""" - __regid__ = 'calendarweek' - title = _('calendar (week)') - - def call(self, year=None, week=None): - year = year or int(self._cw.form.get('year', date.today().year)) - week = week or int(self._cw.form.get('week', date.today().isocalendar()[1])) - day0 = date(year, 1, 1) - first_day_of_week = day0 - day0.weekday()*ONEDAY + ONEWEEK - begin, end = first_day_of_week- ONEWEEK, first_day_of_week + 2*ONEWEEK - schedule = self._mk_schedule(begin, end, itemvid='calendarlargeitem') - self.w(self.nav_header(first_day_of_week)) - self.w(u'') - _weeks = [(first_day_of_week-ONEWEEK, first_day_of_week-ONEDAY), - (first_day_of_week, first_day_of_week+6*ONEDAY), - (first_day_of_week+ONEWEEK, first_day_of_week+13*ONEDAY)] - self.build_calendar(schedule, _weeks) - self.w(u'
') - self.w(self.nav_header(first_day_of_week)) - - def build_calendar(self, schedule, weeks): - rql = self.cw_rset.printable_rql() - _ = self._cw._ - for monday, sunday in weeks: - umonth = self._cw.format_date(monday, '%B %Y') - url = self._cw.build_url(rql=rql, vid='calendarmonth', - year=monday.year, month=monday.month) - monthlink = '%s' % (xml_escape(url), umonth) - self.w(u'%s %s (%s)' \ - % (_('week'), monday.isocalendar()[1], monthlink)) - for day in date_range(monday, sunday+ONEDAY): - self.w(u'') - self.w(u'%s' % _(WEEKDAYS[day.weekday()])) - self.w(u'%s' % (day.strftime('%Y-%m-%d'))) - events = schedule.get(day) - if events: - events = ['\n'.join(event) for event in events.values()] - self.w(WEEK_CELL % '\n'.join(events)) - else: - self.w(WEEK_EMPTY_CELL) - self.w(u'') - - def nav_header(self, date, smallshift=1, bigshift=3): - """prints shortcut links to go to previous/next steps (month|week)""" - prev1 = date - ONEWEEK * smallshift - prev2 = date - ONEWEEK * bigshift - next1 = date + ONEWEEK * smallshift - next2 = date + ONEWEEK * bigshift - rql = self.cw_rset.printable_rql() - return self.NAV_HEADER % ( - xml_escape(self._cw.build_url(rql=rql, vid=self.__regid__, year=prev2.year, week=prev2.isocalendar()[1])), - xml_escape(self._cw.build_url(rql=rql, vid=self.__regid__, year=prev1.year, week=prev1.isocalendar()[1])), - xml_escape(self._cw.build_url(rql=rql, vid=self.__regid__, year=next1.year, week=next1.isocalendar()[1])), - xml_escape(self._cw.build_url(rql=rql, vid=self.__regid__, year=next2.year, week=next2.isocalendar()[1]))) - - - -class AMPMYearCalendarView(YearCalendarView): - __regid__ = 'ampmcalendaryear' - title = _('am/pm calendar (year)') - - def build_calendar(self, schedule, first_day): - """method responsible for building *one* HTML calendar""" - umonth = self._cw.format_date(first_day, '%B %Y') # localized month name - rows = [] # each row is: (am,pm), (am,pm) ... week_title - current_row = [(NO_CELL, NO_CELL, NO_CELL)] * first_day.weekday() - rql = self.cw_rset.printable_rql() - for daynum in xrange(0, days_in_month(first_day)): - # build cells day - day = first_day + timedelta(daynum) - events = schedule.get(day) - if events: - current_row.append((AMPM_DAY % (daynum+1),) + self._build_ampm_cells(events)) - else: - current_row.append((AMPM_DAY % (daynum+1), - AMPM_EMPTY % ("amCell", "am"), - AMPM_EMPTY % ("pmCell", "pm"))) - # store & reset current row on Sundays - if day.weekday() == 6: - url = self._cw.build_url(rql=rql, vid='ampmcalendarweek', - year=day.year, week=day.isocalendar()[1]) - weeklink = '%s' % (xml_escape(url), - day.isocalendar()[1]) - current_row.append(WEEKNUM_CELL % weeklink) - rows.append(current_row) - current_row = [] - current_row.extend([(NO_CELL, NO_CELL, NO_CELL)] * (6-day.weekday())) - url = self._cw.build_url(rql=rql, vid='ampmcalendarweek', - year=day.year, week=day.isocalendar()[1]) - weeklink = '%s' % (xml_escape(url), day.isocalendar()[1]) - current_row.append(WEEKNUM_CELL % weeklink) - rows.append(current_row) - # build two rows for each week: am & pm - formatted_rows = [] - for row in rows: - week_title = row.pop() - day_row = [day for day, am, pm in row] - am_row = [am for day, am, pm in row] - pm_row = [pm for day, am, pm in row] - formatted_rows.append('%s%s'% (week_title, '\n'.join(day_row))) - formatted_rows.append(' %s'% '\n'.join(am_row)) - formatted_rows.append(' %s'% '\n'.join(pm_row)) - # tigh everything together - url = self._cw.build_url(rql=rql, vid='ampmcalendarmonth', - year=first_day.year, month=first_day.month) - monthlink = '%s' % (xml_escape(url), umonth) - return CALENDAR(self._cw) % (monthlink, '\n'.join(formatted_rows)) - - - -class AMPMSemesterCalendarView(SemesterCalendarView): - """this view renders a 3x1 calendars' table""" - __regid__ = 'ampmcalendarsemester' - title = _('am/pm calendar (semester)') - - def build_calendars(self, schedule, begin, end): - self.w(u'') - rql = self.cw_rset.printable_rql() - for cur_month in date_range(begin, end, incmonth=1): - umonth = u'%s %s' % (self._cw.format_date(cur_month, '%B'), cur_month.year) - url = self._cw.build_url(rql=rql, vid=self.__regid__, - year=cur_month.year, month=cur_month.month) - self.w(u'%s' % (xml_escape(url), - umonth)) - self.w(u'') - _ = self._cw._ - for day_num in xrange(31): - self.w(u'') - for cur_month in date_range(begin, end, incmonth=1): - if day_num >= days_in_month(cur_month): - self.w(u'%s%s%s' % (NO_CELL, NO_CELL, NO_CELL)) - else: - day = date(cur_month.year, cur_month.month, day_num+1) - events = schedule.get(day) - self.w(u'%s %s\n' % (_(WEEKDAYS[day.weekday()])[0].upper(), - day_num+1)) - self.format_day_events(day, events) - self.w(u'') - - def format_day_events(self, day, events): - if events: - self.w(u'\n'.join(self._build_ampm_cells(events))) - else: - self.w(u'%s %s'% (AMPM_EMPTY % ("amCell", "am"), - AMPM_EMPTY % ("pmCell", "pm"))) - - -class AMPMMonthCalendarView(MonthCalendarView): - """this view renders a 3x1 calendars' table""" - __regid__ = 'ampmcalendarmonth' - title = _('am/pm calendar (month)') - - def build_calendar(self, schedule, first_day): - """method responsible for building *one* HTML calendar""" - umonth = self._cw.format_date(first_day, '%B %Y') # localized month name - rows = [] # each row is: (am,pm), (am,pm) ... week_title - current_row = [(NO_CELL, NO_CELL, NO_CELL)] * first_day.weekday() - rql = self.cw_rset.printable_rql() - for daynum in xrange(0, days_in_month(first_day)): - # build cells day - day = first_day + timedelta(daynum) - events = schedule.get(day) - if events: - current_row.append((AMPM_DAY % (daynum+1),) + self._build_ampm_cells(events)) - else: - current_row.append((AMPM_DAY % (daynum+1), - AMPM_EMPTY % ("amCell", "am"), - AMPM_EMPTY % ("pmCell", "pm"))) - # store & reset current row on Sundays - if day.weekday() == 6: - url = self._cw.build_url(rql=rql, vid='ampmcalendarweek', - year=day.year, week=day.isocalendar()[1]) - weeklink = '%s' % (xml_escape(url), - day.isocalendar()[1]) - current_row.append(WEEKNUM_CELL % weeklink) - rows.append(current_row) - current_row = [] - current_row.extend([(NO_CELL, NO_CELL, NO_CELL)] * (6-day.weekday())) - url = self._cw.build_url(rql=rql, vid='ampmcalendarweek', - year=day.year, week=day.isocalendar()[1]) - weeklink = '%s' % (xml_escape(url), - day.isocalendar()[1]) - current_row.append(WEEKNUM_CELL % weeklink) - rows.append(current_row) - # build two rows for each week: am & pm - formatted_rows = [] - for row in rows: - week_title = row.pop() - day_row = [day for day, am, pm in row] - am_row = [am for day, am, pm in row] - pm_row = [pm for day, am, pm in row] - formatted_rows.append('%s%s'% (week_title, '\n'.join(day_row))) - formatted_rows.append(' %s'% '\n'.join(am_row)) - formatted_rows.append(' %s'% '\n'.join(pm_row)) - # tigh everything together - url = self._cw.build_url(rql=rql, vid='ampmcalendarmonth', - year=first_day.year, month=first_day.month) - monthlink = '%s' % (xml_escape(url), - umonth) - return CALENDAR(self._cw) % (monthlink, '\n'.join(formatted_rows)) - - - -class AMPMWeekCalendarView(WeekCalendarView): - """this view renders a 3x1 calendars' table""" - __regid__ = 'ampmcalendarweek' - title = _('am/pm calendar (week)') - - def build_calendar(self, schedule, weeks): - rql = self.cw_rset.printable_rql() - w = self.w - _ = self._cw._ - for monday, sunday in weeks: - umonth = self._cw.format_date(monday, '%B %Y') - url = self._cw.build_url(rql=rql, vid='ampmcalendarmonth', - year=monday.year, month=monday.month) - monthlink = '%s' % (xml_escape(url), umonth) - w(u'%s' % ( - WEEK_TITLE % (_('week'), monday.isocalendar()[1], monthlink))) - w(u'%s '% _(u'Date')) - for day in date_range(monday, sunday+ONEDAY): - events = schedule.get(day) - style = day.weekday() % 2 and "even" or "odd" - w(u'' % style) - if events: - hours = events.keys() - hours.sort() - w(AMPM_DAYWEEK % ( - len(hours), _(WEEKDAYS[day.weekday()]), - self._cw.format_date(day))) - w(AMPM_WEEK_CELL % ( - hours[0].hour, hours[0].minute, - '\n'.join(events[hours[0]]))) - w(u'') - for hour in hours[1:]: - w(u'%s'% ( - style, AMPM_WEEK_CELL % (hour.hour, hour.minute, - '\n'.join(events[hour])))) - else: - w(AMPM_DAYWEEK_EMPTY % ( - _(WEEKDAYS[day.weekday()]), - self._cw.format_date(day))) - w(WEEK_EMPTY_CELL) - w(u'') - - -SMALL_CALENDARS_PAGE = u""" - - - -
%s%s%s
%s%s%s
%s%s%s
-""" - -BIG_CALENDARS_PAGE = u""" - - - -
%s
%s
%s
-""" - -WEEKNUM_CELL = u'%s' - -def CALENDAR(req): - _ = req._ - WEEKNUM_HEADER = u'%s' % _('week') - CAL_HEADER = WEEKNUM_HEADER + u' \n'.join([u'%s' % _(day)[0].upper() - for day in WEEKDAYS]) - return u""" - - - %s - -%%s -
%%s
-""" % (CAL_HEADER,) - - -DAY_TEMPLATE = """%(daylabel)s%(dmydate)s%(dayschedule)s -""" - -NO_CELL = u'' -EMPTY_CELL = u'%s' -CELL = u'%s
%s
' - -AMPM_DAY = u'%d' -AMPM_EMPTY = u'%s' -AMPM_CONTENT = u'%s
%s
' - -WEEK_TITLE = u'%s %s (%s)' -WEEK_EMPTY_CELL = u' ' -WEEK_CELL = u'
%s
' - -AMPM_DAYWEEK_EMPTY = u'%s %s' -AMPM_DAYWEEK = u'%s %s' -AMPM_WEEK_CELL = u'
%02d:%02d - %s
'