Compare commits

..

166 Commits

Author SHA1 Message Date
Stéphane Charette e035fe57e6 update for 3.2.4 release
svn: r15963
2010-10-10 22:55:05 +00:00
Stéphane Charette 985e42abe2 updated gramps.pot
svn: r15960
2010-10-10 14:05:43 +00:00
Peter Landgren 8bd6a16cf0 Some conversions are not needed for gramps on win with non latin username.
svn: r15958
2010-10-08 13:53:49 +00:00
Peter Landgren 16f468654a Minor update of Swedish translation, took trunk, should be bransch.
svn: r15956
2010-10-06 14:16:54 +00:00
Peter Landgren 6aef60a421 Updates to allow for Family Tree names, with non latin characters in Windows, in -l/-L commands.
svn: r15942
2010-09-30 14:25:25 +00:00
Peter Landgren ec50af2785 Final fix of 4164, problems with cairo: out of memory for mult pages in Grapviz output.
svn: r15940
2010-09-30 13:04:32 +00:00
Peter Landgren c0f2ed96b2 Updates to allow for user names with non latin characters in Windows.
svn: r15939
2010-09-30 10:02:41 +00:00
Jérôme Rapinat 8b7e7aed4e minor clean-up
svn: r15936
2010-09-29 14:43:51 +00:00
Jérôme Rapinat c5e1ee690d bugs 2488 and 4251: spacing on families
svn: r15935
2010-09-28 16:54:07 +00:00
Peter Landgren f08d4825e7 Minor update of Swedish translation.
svn: r15933
2010-09-27 18:03:56 +00:00
Peter Landgren c414e34ceb Consistent use of OS detection and host added to Win users.
svn: r15931
2010-09-27 17:53:57 +00:00
Doug Blank 3fb1e0fd4a Two more fixes for protecting None.property when using Do Not Include Unlinked records
svn: r15929
2010-09-25 11:00:25 +00:00
Jérôme Rapinat ae8ba555eb 4241: ignore Residence events on Addresse page for non-english locales
svn: r15925
2010-09-24 14:37:07 +00:00
Benny Malengier 479e70f835 3969: [NarWeb] Narrated Web Site: Newlines and white space are not preserved in note text
Patch of Tim Lyons and  Benny Malengier


svn: r15922
2010-09-23 21:03:02 +00:00
Jérôme Rapinat c796db53c5 #4242: NarWeb ignores Calendar for sorting Dates on Event groups
svn: r15919
2010-09-21 14:32:10 +00:00
Nick Hall 84898abaaf 4250: Bookmark menu does not redraw when bookmarks are re-ordered
svn: r15916
2010-09-20 23:47:06 +00:00
Espen Berg 2f983fade2 Revised Norwegian bokmål and nynorsk (Sigmund Lorentzen) translations
svn: r15915
2010-09-19 17:59:36 +00:00
Jérôme Rapinat f6a8fd888a typo
svn: r15908
2010-09-16 18:06:42 +00:00
Peter Landgren 1c1da5a8ea Issue 4235.
svn: r15906
2010-09-16 12:36:59 +00:00
Peter Landgren 4679718cc2 Fixed indent errors.
svn: r15904
2010-09-16 12:30:14 +00:00
Peter Landgren a52072d79e Issue 4212, Win problems with media path/file name with non latin.
svn: r15903
2010-09-16 12:23:16 +00:00
Doug Blank c8a48b4b0e 4203: [NarWeb] 'Exclude living' option can lead to error
svn: r15898
2010-09-13 23:57:05 +00:00
Rob G. Healey f479381bfd NarrativeWeb: bug#4079 -- siblings, pedigree, and children are all sorted if birthorder option is chosen.
svn: r15897
2010-09-13 22:14:02 +00:00
Benny Malengier 33de80e6fd 3519: Wrong 'Group as' value (Given instead of Surname) is used for custom display name
svn: r15895
2010-09-13 19:55:13 +00:00
Benny Malengier 46c9eb079c 4192: [NarWeb] media is out of order in Places
svn: r15894
2010-09-13 19:22:54 +00:00
Benny Malengier 1df64c2609 4192: [NarWeb] media is out of order in Places
svn: r15892
2010-09-13 18:55:20 +00:00
Benny Malengier 9aa00be403 3875: [NarWeb] no more caption text for images in Source gallery
svn: r15891
2010-09-13 18:11:21 +00:00
Julio Sánchez 3096db842c Minor translation update
svn: r15889
2010-09-13 11:15:06 +00:00
Benny Malengier 86474a1cf6 3870: [NarWeb] Reference name to Source incorrectly displayed as "unknown"
svn: r15887
2010-09-13 09:34:49 +00:00
Julio Sánchez fa246bc681 Minor translation update
svn: r15886
2010-09-13 06:03:19 +00:00
Erik De Richter 546e39d530 updated nl translation
svn: r15880
2010-09-12 09:31:29 +00:00
Jérôme Rapinat 3b24bfc971 update Slovak translation (by Lubo Vasko)
svn: r15879
2010-09-12 08:48:36 +00:00
Benny Malengier 3e6fa30d60 3944: [NarWeb] Alternate Locations on places site in web report vers. 3.2.2
svn: r15875
2010-09-11 15:17:04 +00:00
Benny Malengier c1137c79e5 3894: [NarWeb] Narrated Website does not show Gramps-ID for sources and events
svn: r15874
2010-09-11 11:35:38 +00:00
Doug Blank e7749890f7 Typo, but only when self._LOG_ALL flag is set, which I don't know how to set
svn: r15873
2010-09-11 06:53:57 +00:00
Rob G. Healey 8a03b75b27 Stylesheet: Fixed text color on WebCal. Could not see non hyperlinked text.
svn: r15872
2010-09-11 03:12:42 +00:00
Arturas Sleinius bf9a7efe37 Updated Lithuanian translation
svn: r15871
2010-09-10 09:00:23 +00:00
Boril Gourinov 4e4a95926a Update of Bulgarian translation
svn: r15870
2010-09-09 20:08:45 +00:00
Mirko Leonhäuser 09069234d4 updated german translation
svn: r15869
2010-09-09 19:12:17 +00:00
Jérôme Rapinat 2cba6ed51c update french translation
svn: r15867
2010-09-09 17:26:29 +00:00
Peter Landgren ab0ed284f1 Swedish translation update.
svn: r15863
2010-09-09 14:17:56 +00:00
Peter Landgren 8b24f681cb Two strings made translatable.
svn: r15862
2010-09-09 14:16:42 +00:00
Benny Malengier 1ac68fb63d 0004131: [NarWeb] No clickable link in referenced region in the photo, if person has no name
svn: r15861
2010-09-09 11:15:33 +00:00
Peter Landgren 531f089f10 Issue 3960, warn button disappears too soon on long GEDCOM import with errors.
svn: r15858
2010-09-06 15:18:28 +00:00
Benny Malengier aff081d139 4196: Error by using special filter in person view
svn: r15856
2010-09-03 22:56:33 +00:00
Rob G. Healey 4f821bc75c Style Sheets: There has been so many problems with the Ancestors Tree, I have removed the elements from the individual sheets, and create one sheet instead.
svn: r15854
2010-09-03 00:44:18 +00:00
Rob G. Healey 6eb47e400c Nebraska: fixed a footer background color issue.
svn: r15853
2010-09-03 00:05:45 +00:00
Rob G. Healey 80a748109a Stylesheets: I hope that these style sheet corrections will correct the layout and style problems that have been plaquing NarrativeWeb. If you have any problems, please let me know.
svn: r15852
2010-09-02 23:55:27 +00:00
Benny Malengier 140ce8077d 2953: wrong handling of gramps id's on individual report. I44 and I440 I441 etc are all included when only I44 should be
svn: r15850
2010-09-02 21:03:53 +00:00
Rob G. Healey 81aaf690f3 NarWeb: Fixed siblings not displaying in birth year order; Bug#4079. Thanks kulath for the patch file.
svn: r15847
2010-09-01 21:12:23 +00:00
Peter Landgren 65ac980dae Date part of issue 4160. Use of option Use full dates instead of full year works again.
svn: r15846
2010-09-01 16:18:06 +00:00
Peter Landgren 6bb686ec2d Date part of issue 4160. Use of option Use full dates instead of full year works again.
svn: r15845
2010-09-01 16:17:36 +00:00
Rob G. Healey 0894288476 Stylesheet: Fixed the overrun of colors.
svn: r15842
2010-08-31 16:50:09 +00:00
Benny Malengier 8cf2831c51 bug #2402 : Line spacing for text not correct in CairoDoc
svn: r15838
2010-08-31 07:45:44 +00:00
Gerald Britton e52db3c15d Bug 0003785: Unhandled exception - Undo History - ValueError: invalid tree path
svn: r15833
2010-08-30 16:37:20 +00:00
Rob G. Healey 8edf5690a4 NarrativeWeb: Bug fix for #4203.
svn: r15827
2010-08-29 03:39:43 +00:00
Luigi Toscano 37697f48a0 Translation updates.
svn: r15826
2010-08-28 18:42:09 +00:00
Erik De Richter 9c15d167b4 updated nl translation
svn: r15823
2010-08-27 07:00:23 +00:00
Rob G. Healey bf4295b5b3 Web_Mainz.css: Fixed problem with the backgrounds not showing as they were intended. Thanks Jason Simanek.
svn: r15822
2010-08-26 23:08:26 +00:00
Doug Blank 1eb50ff295 Removed yields while cursor is open
svn: r15814
2010-08-25 04:25:08 +00:00
Jérôme Rapinat 0698a42f8e Update french translation
svn: r15809
2010-08-23 16:09:17 +00:00
Doug Blank b3929af419 Fixes to allow log cleanup
svn: r15803
2010-08-22 16:12:05 +00:00
Doug Blank 32f9ff1863 4190: Gedcom import: All my internet addresses are missing...
svn: r15797
2010-08-22 13:38:31 +00:00
Doug Blank 777c929f88 4180: Error occurred while attempting to EXPORT a GEDCOM file
svn: r15792
2010-08-22 02:08:29 +00:00
Doug Blank e39dedb453 4187: Error on GEDCOM file import
svn: r15791
2010-08-22 01:50:58 +00:00
Benny Malengier fc3ed649f1 better fix for #4166, #3955
svn: r15770
2010-08-18 21:15:49 +00:00
Jérôme Rapinat dce76ae6fe update Slovenian translation (by Bernard Banko) - What about date and rel handlers (rev15752)?
svn: r15753
2010-08-16 12:27:54 +00:00
Benny Malengier 285c5e429c 4166: Export Assistant crashes when closing or cancelling using the mouse
svn: r15739
2010-08-15 12:00:46 +00:00
Peter Landgren 724e09dfc9 Issue 4164, correction.
svn: r15722
2010-08-13 11:21:10 +00:00
Peter Landgren c09f8e4950 Issue 4164, Graphviz version=2.26.3
svn: r15716
2010-08-12 18:03:21 +00:00
Peter Landgren 4bbc5c08f3 Issue 4162, correction of box width.
svn: r15703
2010-08-11 07:02:14 +00:00
Peter Landgren a31d95bd28 Found some untranlated strings.
svn: r15695
2010-08-09 18:01:11 +00:00
Doug Blank 02dc2ce868 Name Format strings can have XML in them; now escaped- prevented valid XML from being written
svn: r15692
2010-08-09 13:17:38 +00:00
Nick Hall 3d19491f40 Sort by "surname" instead of "group as" in flat person view
svn: r15686
2010-08-08 18:33:21 +00:00
Espen Berg c7d490f469 Revised Norwegian bokmål
svn: r15676
2010-08-01 18:38:55 +00:00
Jérôme Rapinat 4690a03256 4089: 5 caracters for short months
svn: r15661
2010-07-29 08:50:10 +00:00
Jérôme Rapinat a35db4f70a 3526:Documentation for relationship module
svn: r15660
2010-07-29 08:24:05 +00:00
Jérôme Rapinat 42f5c62154 4089: Month names for Finnish (validated by Peter)
svn: r15640
2010-07-20 12:40:38 +00:00
Rob G. Healey 7e456e996c NarrativeWeb: Fix for bug #4098. Place name not retrurning proper answer.
svn: r15628
2010-07-08 22:56:11 +00:00
Nick Hall e0b02e80af Fix marker colours in Family and Note views
svn: r15614
2010-07-03 18:20:38 +00:00
Peter Landgren 51a9075613 Some unnecessary unicode conversion cleanup after fix of issue 4078.
svn: r15609
2010-06-30 07:37:55 +00:00
Peter Landgren 51abf16ddb Some unnecessary unicode conversion cleanup after fix of issue 4078.
svn: r15608
2010-06-30 07:37:09 +00:00
Peter Landgren 945f6e5b9f Some unnecessary unicode conversion cleanup after fix of issue 4078.
svn: r15607
2010-06-30 07:36:11 +00:00
Peter Landgren e7edfbdc0a Fix of issue 4078, note.get() unicode now.
svn: r15596
2010-06-28 07:28:16 +00:00
Peter Landgren 3e81d9dd88 Fix of issue 4078, note.get() unicode now.
svn: r15595
2010-06-28 07:27:24 +00:00
Peter Landgren cfbb494612 Issue 4078, notes not in utf-8.
svn: r15592
2010-06-24 07:49:14 +00:00
Nick Hall 52d5fbd042 Change sort order from D.D8 to ISO-DMS
svn: r15582
2010-06-19 23:43:59 +00:00
Nick Hall f0e156a112 4076: Fix sort order when different latitude/longitude formats are used
svn: r15580
2010-06-19 17:39:56 +00:00
Espen Berg 839b2ee4de Revised Norwegian bokmål translation
svn: r15573
2010-06-15 21:02:02 +00:00
Espen Berg 4beb29464a Revised Norwegian Nynorsk translation, by Sigmund Lorentsen
svn: r15572
2010-06-15 21:00:16 +00:00
Espen Berg c3ffffd943 Revised Norwegian bokmål translation
svn: r15571
2010-06-15 20:59:25 +00:00
Peter Landgren 15fc4fdf0f Fix of 4071 so that substitutioins variables /%N, /%s, /%S follow the spec in the manual.
svn: r15568
2010-06-15 06:32:41 +00:00
Mirko Leonhäuser 90c1f95ac5 Updated German translation
svn: r15564
2010-06-13 13:16:31 +00:00
Doug Blank 713344f2f8 Use Today for living filter date, and use basedb for determining living status
svn: r15556
2010-06-11 00:39:15 +00:00
Doug Blank 1f17db49c2 Removed some subtle checks in probably_alive to make more protective when restricting on alive status
svn: r15555
2010-06-11 00:36:49 +00:00
Peter Landgren 9e40603988 Fix of issue 4059, event type begins with non latin char.
svn: r15549
2010-06-09 20:59:16 +00:00
Peter Landgren 44f970baa8 Fix of issue 4058, list index out of range.
svn: r15548
2010-06-09 20:30:20 +00:00
Serge Noiraud dceb900362 Open Document : Issue 4018 and 4017 : random page break + top and bottom margin for paragraphs.
svn: r15543
2010-06-08 18:39:45 +00:00
Mirko Leonhäuser 1110c18ae1 Updated German translation
svn: r15537
2010-06-07 00:03:58 +00:00
Peter Landgren e3f9f97864 Fixed coding error when looking at issue 4034.
svn: r15534
2010-06-06 17:15:53 +00:00
Igal Shapira 10bd447ed5 Add 200 more hebrew translations.
svn: r15531
2010-06-05 09:28:40 +00:00
Jérôme Rapinat bc9cdd3896 #4044 #2855 #2762 fix on half relations (contribution by reinhard)
svn: r15529
2010-06-05 06:25:46 +00:00
Doug Blank a36690aa26 4036: svn15488 de.po from Branch crashes
svn: r15515
2010-05-30 14:43:08 +00:00
Peter Landgren 1db7cd2051 Final fix of issue 3935, coding problem in Windows.
svn: r15492
2010-05-28 13:18:48 +00:00
Mirko Leonhäuser 2ff12bdbcf Updated German translation
svn: r15488
2010-05-27 17:29:32 +00:00
Peter Landgren 904cb8cf16 Added info about DB version.
svn: r15486
2010-05-27 11:01:20 +00:00
Doug Blank d0d8fd4af1 4015: Addition of option of 'Page Break before Endnotes' on DDR and DAR reports
svn: r15483
2010-05-25 21:23:33 +00:00
Doug Blank 102189d77a 4012: Improvement for "What's next" report
svn: r15478
2010-05-25 13:20:33 +00:00
Doug Blank bbaec4b5ed 4012: Improvement for "What's next" report
svn: r15476
2010-05-25 10:08:51 +00:00
Rob G. Healey 2cfa9299d4 Adjusted the menus to have a little bigger font.
svn: r15474
2010-05-25 05:59:18 +00:00
Rob G. Healey 515b9525dd Bug#3932: Fixed events doubling up in class EventListPage.
svn: r15473
2010-05-25 05:57:18 +00:00
Doug Blank a393d793fc 4004, 3983, 3861, 3758: initialize_options missing argument
svn: r15468
2010-05-24 01:41:21 +00:00
Rob G. Healey aa8e6754c5 Bug#4005: Fixes the marriage/ divorce issue in anniversaries.
svn: r15450
2010-05-23 04:24:49 +00:00
Rob G. Healey bd937a1842 Bug#4001; Text in WebCal of birthday and anniversaries were being doubled up. Thanks Doug S. Blank for the patch.
svn: r15449
2010-05-23 04:06:16 +00:00
Serge Noiraud a40d4c4482 GeoView : bug #4002 console message: undefined @1: ReferenceError: Can't find variable: addcrosshair
svn: r15447
2010-05-22 07:39:22 +00:00
Rob G. Healey 7376843595 #3992: Fixed missing menus elements in stylesheet if using Web_Basic-Blue.css or Web_Visually.css. Menu elements were removed so that the user could choose between horizontal or Vertical menus.
svn: r15445
2010-05-21 23:51:51 +00:00
Rob G. Healey 8a40eeafe6 #3989: Fixed the problem of showing primary person twice in family events.
svn: r15444
2010-05-21 22:56:27 +00:00
Peter Landgren 42138f0c2e Added version info about the database.
svn: r15440
2010-05-21 14:16:13 +00:00
Igal Shapira bdfce6bf1b Updated he.po with 5 more percents - total 62.78% PO covarge
svn: r15437
2010-05-21 11:48:20 +00:00
Peter Landgren 8b463b8aae Fixed problem with non unicode path name.
svn: r15435
2010-05-21 06:23:53 +00:00
Serge Noiraud 2d8dab099b GeoView : bug #3973 ignore buttons_have_icons which avoid set_image() to change the image of a button.
gnome => 2.26 now set this to false


svn: r15432
2010-05-20 20:58:44 +00:00
Rob G. Healey 5cba134809 Fixed bug #3988; ColumnPerson on EventPages is blackened out.
svn: r15431
2010-05-20 20:56:44 +00:00
Stéphane Charette 1f41eddfea bump version number to 3.2.4
svn: r15423
2010-05-17 05:51:39 +00:00
Stéphane Charette 38c9e2800c update for 3.2.3 release
svn: r15419
2010-05-17 05:29:02 +00:00
Jérôme Rapinat eea4d3e0c9 update month names (by Łukasz Rymarczyk)
svn: r15417
2010-05-16 15:48:00 +00:00
Mirko Leonhäuser 4442a74690 Updated german translation
svn: r15415
2010-05-16 12:16:51 +00:00
Julio Sánchez 5688c351f1 Update
svn: r15414
2010-05-16 07:02:12 +00:00
Jérôme Rapinat cbc5b831b7 improvement on short sentences (narrative)
svn: r15413
2010-05-15 07:49:18 +00:00
Jérôme Rapinat c69eba2e4e typo (thanks to Bruno Coudoin)
svn: r15412
2010-05-15 07:36:16 +00:00
Nick Hall 9c6d5ea86b 3970: Append space to paragraph leader in ascii docgen
svn: r15408
2010-05-13 18:45:46 +00:00
Igal Shapira d323b5013f Adding he translations and also some previous typos fixes
svn: r15407
2010-05-13 18:17:04 +00:00
Jérôme Rapinat 953a0ac8b5 update Slovak translation (by Lubo Vasko)
svn: r15405
2010-05-13 17:46:37 +00:00
Doug Blank 1019617d0f 3958: Extremely slow gedcom import
svn: r15399
2010-05-13 11:07:38 +00:00
Jérôme Rapinat 6c1b155953 Removed some commented lines
svn: r15395
2010-05-12 17:16:32 +00:00
Erik De Richter 6a1d059e53 update nl translation
svn: r15394
2010-05-12 16:05:26 +00:00
Espen Berg 5f318a93b3 Removed some commented lines in Norwegian translation
svn: r15393
2010-05-12 08:22:58 +00:00
Stéphane Charette 03e1ef85fc update pot to get ready for 3.2.3
svn: r15387
2010-05-11 20:44:44 +00:00
Jérôme Rapinat b931b9aa9b update Polish translation (by Łukasz Rymarczyk)
svn: r15385
2010-05-11 17:33:41 +00:00
Doug Blank ff0cf470c5 svn ignore some gramps-connect files
svn: r15384
2010-05-10 00:22:25 +00:00
Doug Blank 18cebd92dd 3878: Private option and filter on Exporter
svn: r15382
2010-05-09 23:59:22 +00:00
Doug Blank 3430c34988 Protection from crashing on unknown (new) markup
svn: r15381
2010-05-09 23:51:29 +00:00
Espen Berg 380490c6a2 merged 15378 from trunk. issues 3915, 3950 and 3951 (and perhaps some more?) due to a change in pygtk appears to be fixed with this patch.
svn: r15379
2010-05-09 18:49:15 +00:00
Jérôme Rapinat 4a25ab7a25 minor improvement on unit test
svn: r15376
2010-05-09 16:44:13 +00:00
Doug Blank 8812e82f49 3943: Crashed whilst exporting to data.gramps using a person filter 'Public'; fixed many filter rules for people
svn: r15375
2010-05-09 15:19:07 +00:00
Doug Blank 96471a964b 3943: Crashed whilst exporting to data.gramps using a person filter 'Public'; fixed many filter rules for people
svn: r15373
2010-05-09 15:09:05 +00:00
Doug Blank 29ff7a386b 3640: Truncated FILE media path on Gedcom export; extended line for file to 255 characters
svn: r15371
2010-05-09 13:55:15 +00:00
Doug Blank 2c7e58e187 3943: Crashed whilst exporting to data.gramps using a person filter 'Public'; fixed many filter rules for people
svn: r15368
2010-05-09 13:42:33 +00:00
Doug Blank 1ff33d6377 3640: Truncated FILE media path on Gedcom export; extended line for file to 255 characters
svn: r15367
2010-05-09 12:57:33 +00:00
Peter Landgren 5ff5769845 Fix of issue 3935. Wrong encoding in Windows.
svn: r15359
2010-05-08 14:29:16 +00:00
Doug Blank 997cd04fe2 Fixing issues with get_privacy on non-existent objects which were probably filted out by a living proxy
svn: r15353
2010-05-07 23:45:28 +00:00
Jérôme Rapinat 45be6866ad #3936: months not localized (by maple)
svn: r15341
2010-05-06 18:39:01 +00:00
Boril Gourinov a5ac1da9fd Update of Bulgarian translation
svn: r15339
2010-05-06 15:38:27 +00:00
Peter Landgren d67271a2cf Fixed two minor spelling issues.
svn: r15335
2010-05-06 06:45:19 +00:00
Doug Blank 2fb7a5e048 3896: Narrated web fail: display_additional_images_as_gallery, not in list
svn: r15334
2010-05-06 04:46:28 +00:00
Doug Blank 5f69c64971 Ignore (and remove) style tags this version of gramps doesn't know about, rather than crash
svn: r15331
2010-05-05 23:15:22 +00:00
Jérôme Rapinat 602aa8c1bd #3918: months not localized (by jcreus)
svn: r15329
2010-05-05 16:51:29 +00:00
Doug Blank 0c270f4862 3911: Crash because of syntax error in name format; fixed having to escape double-quotes, and removed them if empty
svn: r15324
2010-05-05 03:56:18 +00:00
Peter Landgren 053efc5f75 Deleted test string.
svn: r15318
2010-05-04 11:57:12 +00:00
Peter Landgren ff705565a4 Issue 3915, error in error message.
svn: r15316
2010-05-04 11:53:48 +00:00
Peter Landgren b41598c645 Issue 3904, dirname and filename swapped.
svn: r15315
2010-05-04 11:51:59 +00:00
Jason Simanek b1d2ca5dc4 bug #0003908: fixed NarWeb footer height problem
svn: r15304
2010-05-03 12:17:47 +00:00
Doug Blank 4a8414e5c8 Protect views with no histories
svn: r15301
2010-05-02 13:48:49 +00:00
Doug Blank 6bfe45f079 3900: Export to Gedcom
svn: r15296
2010-05-01 18:38:13 +00:00
Doug Blank 38d8332970 Two fixes to address issues with living proxy and GEDCOM export
svn: r15295
2010-05-01 14:29:52 +00:00
Joan Creus 97eff89616 Updating Catalan translation
svn: r15291
2010-04-25 14:38:33 +00:00
Stéphane Charette 2ae3583c3a bump version to 3.2.3; remove libgconf as a build dependency
svn: r15288
2010-04-25 07:57:05 +00:00
146 changed files with 39198 additions and 38388 deletions
+21
View File
@@ -1,3 +1,24 @@
Version 3.2.4 -- the "Tententen" bug fix release.
* fix a crash on newer distro's after an export is finished
* styled notes cleanup and consistency improvement (nar web behaves like the pdf/html output of reports)
* newlines in styled notes are written as newlines so users can make simple lists
* many NarrativeWeb fixes
* gedcom output fixes
* non latin character fixes (mainly for windows)
* recursive filter fixes
* undo fixes
* many translation updates
Version 3.2.3 -- the "I used to eat there. Really good noodles." release.
* Bug fixes:
-> several GLADE fixes
-> several GEDCOM fixes (both export and import)
-> several crash fixes
-> encoding fix (Windows only)
-> privacy/living fixes
-> updates to NarrativeWeb and the css stylsheets
* Translation updates: bg, ca, de, es, fr, he, nb, nl, pl, sk, sv
Version 3.2.2 -- the "Mea navis aëricumbens anguillis abundat" release.
* This release is a quick fix to a problem introduced by NarrativeWeb in the previous release.
* Also includes a few small fixes and translation updates to hr and it.
+1 -1
View File
@@ -5,7 +5,7 @@ dnl May need to run automake && aclocal first
AC_PREREQ(2.57)
dnl NOTE: arg to macro below becomes the "VERSION"
AC_INIT(gramps, 3.2.2, [gramps-bugs@lists.sourceforge.net])
AC_INIT(gramps, 3.2.4, [gramps-bugs@lists.sourceforge.net])
AC_CONFIG_SRCDIR(configure.in)
AM_INIT_AUTOMAKE([1.6.3 foreign])
+1 -1
View File
@@ -2,7 +2,7 @@ Source: gramps
Section: gnome
Priority: optional
Maintainer: Stéphane Charette <stephanecharette@gmail.com>
Build-Depends-Indep: libxml-parser-perl, python-gtk2, gettext, libgconf2-dev, python-central (>= 0.5.6), python, intltool
Build-Depends-Indep: libxml-parser-perl, python-gtk2, gettext, python-central (>= 0.5.6), python, intltool
Build-Depends: debhelper (>= 7)
Standards-Version: 3.8.3
Homepage: http://www.gramps-project.org/
+11
View File
@@ -0,0 +1,11 @@
#########################################
The :class:`RelationshipCalculator` Class
#########################################
Contents:
.. automodule:: Relationship
.. autoclass:: RelationshipCalculator
:members:
:undoc-members:
:show-inheritance:
+1023 -971
View File
File diff suppressed because it is too large Load Diff
+1081 -988
View File
File diff suppressed because it is too large Load Diff
+1059 -1054
View File
File diff suppressed because it is too large Load Diff
+5283 -2627
View File
File diff suppressed because it is too large Load Diff
+895 -880
View File
File diff suppressed because it is too large Load Diff
+1160 -1144
View File
File diff suppressed because it is too large Load Diff
+959 -882
View File
File diff suppressed because it is too large Load Diff
+1331 -1314
View File
File diff suppressed because it is too large Load Diff
+2118 -2143
View File
File diff suppressed because it is too large Load Diff
+879 -861
View File
File diff suppressed because it is too large Load Diff
+902 -877
View File
File diff suppressed because it is too large Load Diff
+3209 -3486
View File
File diff suppressed because it is too large Load Diff
+2075 -1455
View File
File diff suppressed because it is too large Load Diff
+4240 -2090
View File
File diff suppressed because it is too large Load Diff
+8538 -10513
View File
File diff suppressed because it is too large Load Diff
+1150 -1116
View File
File diff suppressed because it is too large Load Diff
+6 -16
View File
@@ -22,28 +22,14 @@
""" Unittest for testing POTFILES.in and Makefile contents """
# PYTHONPATH=/../src python po_test.py
import unittest
import os
import glob
from test import test_util
test_util.path_append_parent()
excluded_files = ["src/DataViews/_MapView.py",
"src/plugins/PHPGedViewConnector.py",
"src/plugins/phpgedview.glade",
"src/plugins/Ancestors.py",
"src/plugins/DesGraph.py",
"src/plugins/FtmStyleAncestors.py",
"src/plugins/FtmStyleDescendants.py",
"src/plugins/IndivSummary.py",
"src/date_test.py",
"src/plugins/CmdRef.py",
"src/plugins/DumpGenderStats.py",
"src/plugins/Eval.py",
"src/plugins/Leak.py",
"src/plugins/TestcaseGenerator.py"
]
def get_potfile(filename):
fp = open(filename, "r")
retvals = []
@@ -53,6 +39,10 @@ def get_potfile(filename):
fp.close()
return retvals
# POTFILES.skip
excluded_files = get_potfile("../POTFILES.skip")
class TestPOT(unittest.TestCase):
potfiles = get_potfile("../POTFILES.in")
count = 1
+1
View File
@@ -126,6 +126,7 @@ class Bookmarks :
self.uistate.uimanager.remove_ui(self.active)
self.uistate.uimanager.remove_action_group(self.action_group)
self.action_group = gtk.ActionGroup('Bookmarks')
self.uistate.uimanager.ensure_update()
self.active = DISABLED
def redraw_and_report_change(self):
+6 -7
View File
@@ -116,18 +116,17 @@ class DateDisplayCA(DateDisplay):
"""
Catalan language date display class.
"""
# TODO: Translate these month strings:
long_months = ( u"", u"January", u"February", u"March", u"April", u"May",
u"June", u"July", u"August", u"September", u"October",
u"November", u"December" )
long_months = ( u"", u"Gener", u"Febrer", u"Març", u"Abril", u"Maig",
u"Juny", u"Juliol", u"Agost", u"Setembre", u"Octubre",
u"Novembre", u"Desembre" )
short_months = ( u"", u"Jan", u"Feb", u"Mar", u"Apr", u"May", u"Jun",
u"Jul", u"Aug", u"Sep", u"Oct", u"Nov", u"Dec" )
short_months = ( u"", u"Gen", u"Feb", u"Mar", u"Abr", u"Mai", u"Jun",
u"Jul", u"Ago", u"Set", u"Oct", u"Nov", u"Des" )
calendar = (
"", u"Julià", u"Hebreu",
u"Revolucionari", u"Persa", u"Islàmic",
u"Swedish"
u"Suec"
)
_mod_str = ("", u"abans de ", u"després de ", u"cap a ", "", "", "")
+6 -7
View File
@@ -102,18 +102,17 @@ class DateDisplayCZ(DateDisplay):
"""
Czech language date display class.
"""
# TODO: Translate these month strings:
long_months = ( u"", u"January", u"February", u"March", u"April", u"May",
u"June", u"July", u"August", u"September", u"October",
u"November", u"December" )
long_months = ( u"", u"Leden", u"Únor", u"Březen", u"Duben", u"Květen",
u"Červen", u"červenec", u"Srpen", u"Září", u"Říjen",
u"Listopad", u"Prosinec" )
short_months = ( u"", u"Jan", u"Feb", u"Mar", u"Apr", u"May", u"Jun",
u"Jul", u"Aug", u"Sep", u"Oct", u"Nov", u"Dec" )
short_months = ( u"", u"Led", u"Úno", u"Bře", u"Dub", u"Kvě", u"čer",
u"Čvc", u"Srp", u"Zář", u"Říj", u"Lis", u"Pro" )
calendar = (
"", u"juliánský", u"hebrejský",
u"republikánský", u"perský", u"islámský",
u"swedish"
u"švédský"
)
_mod_str = ("", u"před ", u"po ", u"kolem ", "", "", "")
+6 -6
View File
@@ -116,13 +116,13 @@ class DateDisplayFI(DateDisplay):
"""
Finnish language date display class.
"""
# TODO: Translate these month strings:
long_months = ( u"", u"January", u"February", u"March", u"April", u"May",
u"June", u"July", u"August", u"September", u"October",
u"November", u"December" )
long_months = (u"", u"Tammikuu", u"Helmikuu", u"Maaliskuu", u"Huhtikuu",
u"Toukokuu", u"Kesäkuu", u"Heinäkuu", u"Elokuu",
u"Syyskuu", u"Lokakuu", u"Marraskuu", u"Joulukuu")
short_months = ( u"", u"Jan", u"Feb", u"Mar", u"Apr", u"May", u"Jun",
u"Jul", u"Aug", u"Sep", u"Oct", u"Nov", u"Dec" )
short_months = (u"", u"Tammi", u"Helmi", u"Maali", u"Huhti", u"Touko",
u"Kesäk", u"Heinä", u"Eloku", u"Syysk", u"Lokak", u"Marra",
u"Joulu")
calendar = ("",
u"juliaaninen",
+6 -6
View File
@@ -101,13 +101,13 @@ class DateDisplayLT(DateDisplay):
"""
Lithuanian language date display class.
"""
# TODO: Translate these month strings:
long_months = ( u"", u"January", u"February", u"March", u"April", u"May",
u"June", u"July", u"August", u"September", u"October",
u"November", u"December" )
long_months = ( u"", u"Sausis", u"Vasaris", u"Kovas", u"Balandis", u"Gegužė",
u"Birželis", u"Liepa", u"Rugpjūtis", u"Rugsejis", u"Spalis",
u"Lapkritis", u"Gruodis" )
short_months = ( u"", u"Jan", u"Feb", u"Mar", u"Apr", u"May", u"Jun",
u"Jul", u"Aug", u"Sep", u"Oct", u"Nov", u"Dec" )
short_months = ( u"", u"Sau", u"Vas", u"Kov", u"Bal", u"Geg", u"Bir",
u"Lie", u"Rgp", u"Rgs", u"Spa", u"Lap", u"Grd" )
calendar = (
u"", u"julijaus",
+51 -17
View File
@@ -20,6 +20,7 @@
#
# Polish version 2007 by Piotr Czubaszek
# Updated in 2010 by Łukasz Rymarczyk
"""
Polish-specific classes for parsing and displaying dates.
@@ -85,7 +86,31 @@ class DateParserPL(DateParser):
month_to_int[u"grudzień"] = 12
month_to_int[u"gru"] = 12
month_to_int[u"XII"] = 12
# Alternative forms: declined nouns
month_to_int[u"stycznia"] = 1
month_to_int[u"lutego"] = 2
month_to_int[u"marca"] = 3
month_to_int[u"kwietnia"] = 4
month_to_int[u"maja"] = 5
month_to_int[u"czerwca"] = 6
month_to_int[u"lipca"] = 7
month_to_int[u"sierpnia"] = 8
month_to_int[u"września"] = 9
month_to_int[u"października"] = 10
month_to_int[u"listopada"] = 11
month_to_int[u"grudnia"] = 12
# Alternative forms: nouns without polish accent letters
# (misspellings sometimes used in emails)
month_to_int[u"styczen"] = 1
month_to_int[u"kwiecien"] = 4
month_to_int[u"sierpien"] = 8
month_to_int[u"wrzesien"] = 9
month_to_int[u"pazdziernik"] = 10
month_to_int[u"grudzien"] = 12
month_to_int[u"wrzesnia"] = 9
month_to_int[u"pazdziernika"] = 10
month_to_int[u"paz"] = 10
modifier_to_int = {
u'przed' : Date.MOD_BEFORE,
u'po' : Date.MOD_AFTER,
@@ -93,26 +118,34 @@ class DateParserPL(DateParser):
u'ok.' : Date.MOD_ABOUT,
u'circa' : Date.MOD_ABOUT,
u'ca.' : Date.MOD_ABOUT,
# Alternative forms: misspellings sometimes used in emails
u'okolo' : Date.MOD_ABOUT,
u'ok' : Date.MOD_ABOUT,
}
calendar_to_int = {
u'gregoriański' : Date.CAL_GREGORIAN,
u'gregoriański' : Date.CAL_GREGORIAN,
u'greg.' : Date.CAL_GREGORIAN,
u'juliański' : Date.CAL_JULIAN,
u'juliański' : Date.CAL_JULIAN,
u'jul.' : Date.CAL_JULIAN,
u'hebrajski' : Date.CAL_HEBREW,
u'hebr.' : Date.CAL_HEBREW,
u'islamski' : Date.CAL_ISLAMIC,
u'islamski' : Date.CAL_ISLAMIC,
u'isl.' : Date.CAL_ISLAMIC,
u'francuski republikański': Date.CAL_FRENCH,
u'franc.' : Date.CAL_FRENCH,
u'perski' : Date.CAL_PERSIAN,
u'swedish' : Date.CAL_SWEDISH,
u's' : Date.CAL_SWEDISH,
u'perski' : Date.CAL_PERSIAN,
u'szwedzki' : Date.CAL_SWEDISH,
u's' : Date.CAL_SWEDISH,
# Alternative forms: nouns without polish accent letters
# (misspellings sometimes used in emails)
u'gregorianski' : Date.CAL_GREGORIAN,
u'julianski' : Date.CAL_JULIAN,
u'francuski republikanski': Date.CAL_FRENCH,
}
quality_to_int = {
u'szacowany' : Date.QUAL_ESTIMATED,
u'szacowany' : Date.QUAL_ESTIMATED,
u'szac.' : Date.QUAL_ESTIMATED,
u'obliczony' : Date.QUAL_CALCULATED,
u'obl.' : Date.QUAL_CALCULATED,
@@ -123,11 +156,12 @@ class DateParserPL(DateParser):
def init_strings(self):
DateParser.init_strings(self)
self._span = re.compile("(od)\s+(?P<start>.+)\s+(do)\s+(?P<stop>.+)",re.IGNORECASE)
self._range = re.compile(u"(między)\s+(?P<start>.+)\s+(a)\s+(?P<stop>.+)", re.IGNORECASE)
self._span = re.compile("(od)\s+(?P<start>.+)\s+(do)\s+(?P<stop>.+)", re.IGNORECASE)
# Also handle a common mistakes
self._range = re.compile(u"((?:po)?mi(?:ę|e)dzy)\s+(?P<start>.+)\s+(a)\s+(?P<stop>.+)", re.IGNORECASE)
self._text2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._mon_str,
re.IGNORECASE)
self._jtext2= re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._jmon_str,
self._jtext2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._jmon_str,
re.IGNORECASE)
#-------------------------------------------------------------------------
@@ -139,13 +173,13 @@ class DateDisplayPL(DateDisplay):
"""
Polish language date display class.
"""
# TODO: Translate these month strings:
long_months = ( u"", u"January", u"February", u"March", u"April", u"May",
u"June", u"July", u"August", u"September", u"October",
u"November", u"December" )
long_months = ( u"", u"Styczeń", u"Luty", u"Marzec", u"Kwiecień", u"Maj",
u"Czerwiec", u"Lipiec", u"Sierpień", u"Wrzesień", u"Październik",
u"Listopad", u"Grudzień" )
short_months = ( u"", u"Jan", u"Feb", u"Mar", u"Apr", u"May", u"Jun",
u"Jul", u"Aug", u"Sep", u"Oct", u"Nov", u"Dec" )
short_months = ( u"", u"Sty", u"Lut", u"Mar", u"Kwi", u"Maj", u"Cze",
u"Lip", u"Sie", u"Wrz", u"Paź", u"Lis", u"Gru" )
calendar = (
"", u"juliański", u"hebrajski",
+18 -7
View File
@@ -307,19 +307,30 @@ class WarnHandler(RotateHandler):
self.button = button
button.on_clicked(self.display)
self.timer = None
self.last_line = '-1'
def emit(self, record):
if self.timer:
gobject.source_remove(self.timer)
gobject.timeout_add(180*1000, self._clear)
if self.timer is None:
#check every 3 minutes if warn button can disappear
self.timer = gobject.timeout_add(3*60*1000, self._check_clear)
RotateHandler.emit(self, record)
self.button.show()
def _check_clear(self):
new_last_line = self.get_buffer()[-1]
if self.last_line == new_last_line:
#buffer has not changed for 3 minutes, let's clear it:
self._clear()
return False
else:
self.last_line = new_last_line
return True
def _clear(self):
self.button.hide()
self.set_capacity(self._capacity)
self.last_line = '-1'
self.timer = None
return False
def display(self, obj):
obj.hide()
@@ -329,7 +340,6 @@ class WarnHandler(RotateHandler):
buf = msg.get_buffer()
for i in self.get_formatted_log():
buf.insert_at_cursor(i + '\n')
self.set_capacity(self._capacity)
top.run()
top.destroy()
@@ -413,7 +423,7 @@ class DisplayState(gen.utils.Callback):
navigation type and group.
"""
history = self.get_history(nav_type, nav_group)
return history.present()
return history.present() if history else None
def set_active(self, handle, nav_type, nav_group=0):
"""
@@ -421,7 +431,8 @@ class DisplayState(gen.utils.Callback):
the given handle.
"""
history = self.get_history(nav_type, nav_group)
history.push(handle)
if history:
history.push(handle)
def set_sensitive(self, state):
self.window.set_sensitive(state)
+26 -12
View File
@@ -3,6 +3,7 @@
#
# Copyright (C) 2004-2007 Donald N. Allingham
# Copyright (C) 2008 Brian G. Matherly
# Copyright (C) 2008 Benny Malengier
# Contribution 2009 by Brad Crittenden <brad [AT] bradcrittenden.net>
#
# This program is free software; you can redistribute it and/or modify
@@ -92,6 +93,7 @@ class ExportAssistant(gtk.Assistant, ManagedWindow.ManagedWindow) :
"""
#override predefined do_xxx signal handlers
__gsignals__ = {"apply": "override", "cancel": "override",
"close": "override", "prepare": "override"}
@@ -164,6 +166,22 @@ class ExportAssistant(gtk.Assistant, ManagedWindow.ManagedWindow) :
if isinstance(arg, gtk.Button) and arg.get_label() == 'gtk-go-forward':
self.forward_button = arg
def get_cancel_button(self, arg):
if isinstance(arg, gtk.HBox):
arg.forall(self._cancel_btn)
def _cancel_btn(self, arg):
if isinstance(arg, gtk.Button) and arg.get_label() == 'gtk-cancel':
self.cancel_button = arg
def get_close_button(self, arg):
if isinstance(arg, gtk.HBox):
arg.forall(self._close_btn)
def _close_btn(self, arg):
if isinstance(arg, gtk.Button) and arg.get_label() == 'gtk-close':
self.close_button = arg
def build_menu_names(self, obj):
"""Override ManagedWindow method."""
return (self.top_title, None)
@@ -382,22 +400,18 @@ class ExportAssistant(gtk.Assistant, ManagedWindow.ManagedWindow) :
self.set_page_complete(page, False)
self.set_page_type(page, gtk.ASSISTANT_PAGE_SUMMARY)
def do_apply(self):
pass
def do_cancel(self):
if self.writestarted :
return True
else :
self.close()
def do_close(self):
if self.writestarted :
return True
else :
pass
else :
self.close()
def do_cancel(self):
self.do_close()
def do_prepare(self, page):
"""
The "prepare" signal is emitted when a new page is set as the
@@ -462,7 +476,7 @@ class ExportAssistant(gtk.Assistant, ManagedWindow.ManagedWindow) :
#Allow for exotic error: file is still not correct
self.check_fileselect(self.chooser, show=False)
if self.get_page_complete(self.chooser) :
filename = Utils.get_unicode_path(self.chooser.get_filename())
filename = Utils.get_unicode_path_from_file_chooser(self.chooser.get_filename())
name = os.path.split(filename)[1]
folder = os.path.split(filename)[0]
confirm_text = _(
@@ -536,7 +550,7 @@ class ExportAssistant(gtk.Assistant, ManagedWindow.ManagedWindow) :
def close(self, *obj) :
#clean up ManagedWindow menu, then destroy window, bring forward parent
gtk.Assistant.destroy(self)
ManagedWindow.ManagedWindow.close(self,*obj)
def get_intro_text(self):
@@ -596,7 +610,7 @@ class ExportAssistant(gtk.Assistant, ManagedWindow.ManagedWindow) :
hasattr(self.option_box_instance, "no_fileselect")):
filename = ""
else:
filename = Utils.get_unicode_path(self.chooser.get_filename())
filename = Utils.get_unicode_path_from_file_chooser(self.chooser.get_filename())
config.set('paths.recent-export-dir', os.path.split(filename)[0])
ix = self.get_selected_format_index()
config.set('behavior.recent-export-type', ix)
+1 -1
View File
@@ -57,7 +57,7 @@ class MatchesRegexpOf(Rule):
def apply(self, db, note):
""" Apply the filter """
text = unicode(note.get())
text = note.get()
if self.match.match(text) is not None:
return True
return False
@@ -49,7 +49,7 @@ class MatchesSubstringOf(Rule):
def apply(self, db, note):
""" Apply the filter """
text = unicode(note.get())
text = note.get()
if text.upper().find(self.list[0].upper()) != -1:
return True
return False
@@ -46,10 +46,10 @@ def filter_database(db, progress, filter_name):
"""Returns a list of person handles"""
filt = MatchesFilter([filter_name])
progress.set_header('Preparing sub-filter')
filt.prepare(db)
progress.set_header(_('Preparing sub-filter'))
filt.requestprepare(db)
progress.set_header('Retrieving all sub-filter matches')
progress.set_header(_('Retrieving all sub-filter matches'))
matches = []
for handle in db.iter_person_handles():
person = db.get_person_from_handle(handle)
@@ -57,7 +57,7 @@ def filter_database(db, progress, filter_name):
matches.append(handle)
progress.step()
filt.reset()
filt.requestreset()
return matches
@@ -75,7 +75,8 @@ def get_family_handle_people(db, exclude_handle, family_handle):
possibly_add_handle(family.get_mother_handle())
for child_ref in family.get_child_ref_list():
possibly_add_handle(child_ref.get_reference_handle())
if child_ref:
possibly_add_handle(child_ref.get_reference_handle())
return people
@@ -132,7 +133,7 @@ class DeepRelationshipPathBetween(Rule):
root_person = db.get_person_from_gramps_id(root_person_id)
progress = ProgressMeter(_('Finding relationship paths'))
progress.set_pass(header=_('Evaluating people'), mode=ProgressMeter.MODE_ACTIVITY)
progress.set_pass(header=_('Evaluating people'), mode=ProgressMeter.MODE_ACTIVITY)
filter_name = self.list[1]
target_people = filter_database(db, progress, filter_name)
@@ -48,11 +48,12 @@ class FamilyWithIncompleteEvent(Rule):
def apply(self,db,person):
for family_handle in person.get_family_handle_list():
family = db.get_family_from_handle(family_handle)
for event_ref in family.get_event_ref_list():
if event_ref:
event = db.get_event_from_handle(event_ref.ref)
if not event.get_place_handle():
return True
if not event.get_date_object():
return True
if family:
for event_ref in family.get_event_ref_list():
if event_ref:
event = db.get_event_from_handle(event_ref.ref)
if not event.get_place_handle():
return True
if not event.get_date_object():
return True
return False
+3 -1
View File
@@ -58,7 +58,9 @@ class HasBirth(Rule):
def apply(self,db,person):
for event_ref in person.get_event_ref_list():
if event_ref.role != EventRoleType.PRIMARY:
if not event_ref:
continue
elif event_ref.role != EventRoleType.PRIMARY:
# Only match primaries, no witnesses
continue
event = db.get_event_from_handle(event_ref.ref)
@@ -68,14 +68,15 @@ class HasCommonAncestorWith(Rule):
for fam_handle in person.get_parent_family_handle_list():
fam = db.get_family_from_handle(fam_handle)
for par_handle in (fam.get_father_handle(), fam.get_mother_handle()):
if par_handle:
par = db.get_person_from_handle(par_handle)
if par and par.handle not in self.ancestor_cache:
self.add_ancs(db, par)
if par:
self.ancestor_cache[person.handle].add(par)
self.ancestor_cache[person.handle] |= self.ancestor_cache[par.handle]
if fam:
for par_handle in (fam.get_father_handle(), fam.get_mother_handle()):
if par_handle:
par = db.get_person_from_handle(par_handle)
if par and par.handle not in self.ancestor_cache:
self.add_ancs(db, par)
if par:
self.ancestor_cache[person.handle].add(par)
self.ancestor_cache[person.handle] |= self.ancestor_cache[par.handle]
def reset(self):
self.ancestor_cache = {}
@@ -41,7 +41,7 @@ from _MatchesFilter import MatchesFilter
# HasCommonAncestorWithFilterMatch
#
#-------------------------------------------------------------------------
class HasCommonAncestorWithFilterMatch(HasCommonAncestorWith,MatchesFilter):
class HasCommonAncestorWithFilterMatch(HasCommonAncestorWith):
"""Rule that checks for a person that has a common ancestor with
someone matching a filter"""
@@ -64,7 +64,7 @@ class HasCommonAncestorWithFilterMatch(HasCommonAncestorWith,MatchesFilter):
self.ancestor_cache = {}
self.with_people = []
filt = MatchesFilter(self.list)
filt.prepare(db)
filt.requestprepare(db)
for handle in db.iter_person_handles():
person = db.get_person_from_handle(handle)
if filt.apply (db, person):
@@ -73,4 +73,4 @@ class HasCommonAncestorWithFilterMatch(HasCommonAncestorWith,MatchesFilter):
#fill list of ancestor of person if not present yet
if handle not in self.ancestor_cache:
self.add_ancs(db, person)
filt.reset()
filt.requestreset()
+3 -1
View File
@@ -58,7 +58,9 @@ class HasDeath(Rule):
def apply(self,db,person):
for event_ref in person.get_event_ref_list():
if event_ref.role != EventRoleType.PRIMARY:
if not event_ref:
continue
elif event_ref.role != EventRoleType.PRIMARY:
# Only match primaries, no witnesses
continue
event = db.get_event_from_handle(event_ref.ref)
@@ -53,10 +53,13 @@ class HasFamilyAttribute(Rule):
return False
for f_id in person.get_family_handle_list():
f = db.get_family_from_handle(f_id)
if not f:
continue
for attr in f.get_attribute_list():
name_match = self.list[0] == attr.get_type()
value_match = \
attr.get_value().upper().find(self.list[1].upper()) != -1
if name_match and value_match:
return True
if attr:
name_match = self.list[0] == attr.get_type()
value_match = \
attr.get_value().upper().find(self.list[1].upper()) != -1
if name_match and value_match:
return True
return False
@@ -64,6 +64,8 @@ class HasFamilyEvent(Rule):
def apply(self,db,person):
for f_id in person.get_family_handle_list():
f = db.get_family_from_handle(f_id)
if not f:
continue
for event_ref in f.get_event_ref_list():
if not event_ref:
continue
+4 -3
View File
@@ -61,9 +61,10 @@ class HasRelationship(Rule):
# count children and look for a relationship type match
for f_id in person.get_family_handle_list():
f = db.get_family_from_handle(f_id)
cnt = cnt + len(f.get_child_ref_list())
if self.list[1] and specified_type == f.get_relationship():
rel_type = 1
if f:
cnt = cnt + len(f.get_child_ref_list())
if self.list[1] and specified_type == f.get_relationship():
rel_type = 1
# if number of relations specified
if self.list[0]:
@@ -171,7 +171,7 @@ class HasTextMatchingSubstringOf(Rule):
self.repo_map.update(
repo.handle for repo in self.db.iter_repositories()
if self.match_object(repo)
if repo and self.match_object(repo)
)
+6 -5
View File
@@ -48,9 +48,10 @@ class HaveAltFamilies(Rule):
def apply(self,db,person):
for fhandle in person.get_parent_family_handle_list():
family = db.get_family_from_handle(fhandle)
ref = [ ref for ref in family.get_child_ref_list() \
if ref.ref == person.handle]
if ref[0].get_father_relation() == ChildRefType.ADOPTED \
or ref[0].get_mother_relation() == ChildRefType.ADOPTED:
return True
if family:
ref = [ ref for ref in family.get_child_ref_list() \
if ref.ref == person.handle]
if ref[0].get_father_relation() == ChildRefType.ADOPTED \
or ref[0].get_mother_relation() == ChildRefType.ADOPTED:
return True
return False
+1 -1
View File
@@ -47,4 +47,4 @@ class HaveChildren(Rule):
def apply(self,db,person):
for family_handle in person.get_family_handle_list():
family = db.get_family_from_handle(family_handle)
return len(family.get_child_ref_list()) > 0
return (family is not None) and len(family.get_child_ref_list()) > 0
@@ -40,7 +40,7 @@ from _MatchesFilter import MatchesFilter
# IsAncestorOfFilterMatch
#
#-------------------------------------------------------------------------
class IsAncestorOfFilterMatch(IsAncestorOf,MatchesFilter):
class IsAncestorOfFilterMatch(IsAncestorOf):
"""Rule that checks for a person that is an ancestor of
someone matched by a filter"""
@@ -66,11 +66,11 @@ class IsAncestorOfFilterMatch(IsAncestorOf,MatchesFilter):
first = 1
filt = MatchesFilter(self.list[0:1])
filt.prepare(db)
filt.requestprepare(db)
for person in db.iter_people():
if filt.apply(db, person):
self.init_ancestor_list(db, person, first)
filt.reset()
filt.requestreset()
def reset(self):
self.map.clear()
@@ -32,6 +32,7 @@ from gen.ggettext import gettext as _
# GRAMPS modules
#
#-------------------------------------------------------------------------
from Filters.Rules import Rule
from _MatchesFilter import MatchesFilter
#-------------------------------------------------------------------------
@@ -39,7 +40,7 @@ from _MatchesFilter import MatchesFilter
# IsChildOfFilterMatch
#
#-------------------------------------------------------------------------
class IsChildOfFilterMatch(MatchesFilter):
class IsChildOfFilterMatch(Rule):
"""Rule that checks for a person that is a child
of someone matched by a filter"""
@@ -52,11 +53,11 @@ class IsChildOfFilterMatch(MatchesFilter):
self.db = db
self.map = set()
filt = MatchesFilter(self.list)
filt.prepare(db)
filt.requestprepare(db)
for person in db.iter_people():
if filt.apply(db, person):
self.init_list(person)
filt.reset()
filt.requestreset()
def reset(self):
self.map.clear()
@@ -69,5 +70,6 @@ class IsChildOfFilterMatch(MatchesFilter):
return
for fam_id in person.get_family_handle_list():
fam = self.db.get_family_from_handle(fam_id)
self.map.update(child_ref.ref
for child_ref in fam.get_child_ref_list())
if fam:
self.map.update(child_ref.ref
for child_ref in fam.get_child_ref_list())
@@ -83,17 +83,18 @@ class IsDescendantFamilyOf(Rule):
for family_handle in person.get_family_handle_list():
family = self.db.get_family_from_handle(family_handle)
if family:
# Add every child recursively
for child_ref in family.get_child_ref_list():
if child_ref:
self.add_matches(self.db.get_person_from_handle(child_ref.ref))
# Add every child recursively
for child_ref in family.get_child_ref_list():
self.add_matches(self.db.get_person_from_handle(child_ref.ref))
# Add spouse
if person.handle == family.get_father_handle():
spouse_handle = family.get_mother_handle()
else:
spouse_handle = family.get_father_handle()
self.matches.add(spouse_handle)
# Add spouse
if person.handle == family.get_father_handle():
spouse_handle = family.get_mother_handle()
else:
spouse_handle = family.get_father_handle()
self.matches.add(spouse_handle)
def exclude(self):
# This removes root person and his/her spouses from the matches set
@@ -101,8 +102,9 @@ class IsDescendantFamilyOf(Rule):
self.matches.remove(self.root_person.handle)
for family_handle in self.root_person.get_family_handle_list():
family = self.db.get_family_from_handle(family_handle)
if self.root_person.handle == family.get_father_handle():
spouse_handle = family.get_mother_handle()
else:
spouse_handle = family.get_father_handle()
self.matches.remove(spouse_handle)
if family:
if self.root_person.handle == family.get_father_handle():
spouse_handle = family.get_mother_handle()
else:
spouse_handle = family.get_father_handle()
self.matches.remove(spouse_handle)
@@ -40,7 +40,7 @@ from _MatchesFilter import MatchesFilter
# IsDescendantOfFilterMatch
#
#-------------------------------------------------------------------------
class IsDescendantOfFilterMatch(IsDescendantOf,MatchesFilter):
class IsDescendantOfFilterMatch(IsDescendantOf):
"""Rule that checks for a person that is a descendant
of someone matched by a filter"""
@@ -66,11 +66,11 @@ class IsDescendantOfFilterMatch(IsDescendantOf,MatchesFilter):
first = 1
filt = MatchesFilter(self.list[0:1])
filt.prepare(db)
filt.requestprepare(db)
for person in db.iter_people():
if filt.apply(db, person):
self.init_list(person, first)
filt.reset()
filt.requestreset()
def reset(self):
self.map.clear()
@@ -75,6 +75,7 @@ class IsLessThanNthGenerationDescendantOf(Rule):
for fam_id in person.get_family_handle_list():
fam = self.db.get_family_from_handle(fam_id)
for child_ref in fam.get_child_ref_list():
self.init_list(
self.db.get_person_from_handle(child_ref.ref), gen+1)
if fam:
for child_ref in fam.get_child_ref_list():
self.init_list(
self.db.get_person_from_handle(child_ref.ref), gen+1)
@@ -73,6 +73,7 @@ class IsMoreThanNthGenerationDescendantOf(Rule):
for fam_id in person.get_family_handle_list():
fam = self.db.get_family_from_handle(fam_id)
for child_ref in fam.get_child_ref_list():
self.init_list(
self.db.get_person_from_handle(child_ref.ref), gen+1)
if fam:
for child_ref in fam.get_child_ref_list():
self.init_list(
self.db.get_person_from_handle(child_ref.ref), gen+1)
@@ -32,6 +32,7 @@ from gen.ggettext import gettext as _
# GRAMPS modules
#
#-------------------------------------------------------------------------
from Filters.Rules import Rule
from _MatchesFilter import MatchesFilter
#-------------------------------------------------------------------------
@@ -39,7 +40,7 @@ from _MatchesFilter import MatchesFilter
# IsParentOfFilterMatch
#
#-------------------------------------------------------------------------
class IsParentOfFilterMatch(MatchesFilter):
class IsParentOfFilterMatch(Rule):
"""Rule that checks for a person that is a parent
of someone matched by a filter"""
@@ -52,11 +53,11 @@ class IsParentOfFilterMatch(MatchesFilter):
self.db = db
self.map = set()
filt = MatchesFilter(self.list)
filt.prepare(db)
filt.requestprepare(db)
for person in db.iter_people():
if filt.apply(db, person):
self.init_list(person)
filt.reset()
filt.requestreset()
def reset(self):
self.map.clear()
@@ -67,6 +68,9 @@ class IsParentOfFilterMatch(MatchesFilter):
def init_list(self,person):
for fam_id in person.get_parent_family_handle_list():
fam = self.db.get_family_from_handle(fam_id)
self.map.update(parent_id
for parent_id in [fam.get_father_handle(), fam.get_mother_handle()]
if parent_id)
if fam:
self.map.update(parent_id
for parent_id in [fam.get_father_handle(),
fam.get_mother_handle()]
if parent_id)
@@ -32,6 +32,7 @@ from gen.ggettext import gettext as _
# GRAMPS modules
#
#-------------------------------------------------------------------------
from Filters.Rules import Rule
from _MatchesFilter import MatchesFilter
#-------------------------------------------------------------------------
@@ -39,7 +40,7 @@ from _MatchesFilter import MatchesFilter
# IsSiblingOfFilterMatch
#
#-------------------------------------------------------------------------
class IsSiblingOfFilterMatch(MatchesFilter):
class IsSiblingOfFilterMatch(Rule):
"""Rule that checks for siblings of someone matched by a filter"""
labels = [ _('Filter name:') ]
@@ -51,11 +52,11 @@ class IsSiblingOfFilterMatch(MatchesFilter):
self.db = db
self.map = set()
filt = MatchesFilter(self.list)
filt.prepare(db)
filt.requestprepare(db)
for person in db.iter_people():
if filt.apply (db, person):
self.init_list (person)
filt.reset()
filt.requestreset()
def reset(self):
self.map.clear()
@@ -71,4 +72,4 @@ class IsSiblingOfFilterMatch(MatchesFilter):
if fam:
self.map.update(child_ref.ref
for child_ref in fam.get_child_ref_list()
if child_ref.ref != person.handle)
if child_ref and child_ref.ref != person.handle)
@@ -32,6 +32,7 @@ from gen.ggettext import gettext as _
# GRAMPS modules
#
#-------------------------------------------------------------------------
from Filters.Rules import Rule
from _MatchesFilter import MatchesFilter
#-------------------------------------------------------------------------
@@ -39,7 +40,7 @@ from _MatchesFilter import MatchesFilter
# IsSpouseOfFilterMatch
#
#-------------------------------------------------------------------------
class IsSpouseOfFilterMatch(MatchesFilter):
class IsSpouseOfFilterMatch(Rule):
"""Rule that checks for a person married to someone matching
a filter"""
@@ -50,16 +51,21 @@ class IsSpouseOfFilterMatch(MatchesFilter):
def prepare(self,db):
self.filt = MatchesFilter (self.list)
self.filt.prepare(db)
self.filt.requestprepare(db)
def apply(self,db,person):
for family_handle in person.get_family_handle_list ():
family = db.get_family_from_handle(family_handle)
for spouse_id in [family.get_father_handle (), family.get_mother_handle ()]:
if not spouse_id:
continue
if spouse_id == person.handle:
continue
if self.filt.apply (db, db.get_person_from_handle( spouse_id)):
return True
if family:
for spouse_id in [family.get_father_handle(),
family.get_mother_handle()]:
if not spouse_id:
continue
if spouse_id == person.handle:
continue
if self.filt.apply (db, db.get_person_from_handle( spouse_id)):
return True
return False
def reset(self):
self.filt.requestreset()
+1 -1
View File
@@ -48,7 +48,7 @@ class IsWitness(Rule):
def apply(self,db,person):
for event_ref in person.event_ref_list:
if event_ref.role == EventRoleType.WITNESS:
if event_ref and event_ref.role == EventRoleType.WITNESS:
# This is the witness.
# If event type was given, then check it.
if self.list[0]:
+7 -6
View File
@@ -53,10 +53,11 @@ class MissingParent(Rule):
return True
for family_handle in person.get_parent_family_handle_list():
family = db.get_family_from_handle(family_handle)
father_handle = family.get_father_handle()
mother_handle = family.get_mother_handle()
if not father_handle:
return True
if not mother_handle:
return True
if family:
father_handle = family.get_father_handle()
mother_handle = family.get_mother_handle()
if not father_handle:
return True
if not mother_handle:
return True
return False
+7 -2
View File
@@ -2,6 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2002-2006 Donald N. Allingham
# Copyright (C) 2010 Raphael Ackermann
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -40,7 +41,7 @@ from Filters.Rules import Rule
#
#-------------------------------------------------------------------------
class HasGrampsId(Rule):
"""Rule that checks for a person with a specific GRAMPS ID."""
"""Rule that checks for an object with a specific GRAMPS ID."""
labels = [ _('ID:') ]
name = _('Object with <Id>')
@@ -48,4 +49,8 @@ class HasGrampsId(Rule):
category = _('General filters')
def apply(self, db, obj):
return obj.gramps_id.find(self.list[0]) !=-1
"""
apply the rule on the obj.
return true if the rule passes, false otherwise.
"""
return obj.gramps_id == self.list[0]
+1 -1
View File
@@ -59,7 +59,7 @@ class HasNoteRegexBase(Rule):
notelist = person.get_note_list()
for notehandle in notelist:
note = db.get_note_from_handle(notehandle)
n = unicode(note.get())
n = note.get()
if self.match.match(n) is not None:
return True
return False
+1 -1
View File
@@ -50,7 +50,7 @@ class HasNoteSubstrBase(Rule):
notelist = person.get_note_list()
for notehandle in notelist:
note = db.get_note_from_handle(notehandle)
n = unicode(note.get())
n = note.get()
if n.upper().find(self.list[0].upper()) != -1:
return True
return False
+4 -20
View File
@@ -55,34 +55,22 @@ class MatchesFilterBase(Rule):
category = _('General filters')
def prepare(self, db):
#if Filters.SystemFilters:
#for filt in Filters.SystemFilters.get_filters(self.namespace):
#if filt.get_name() == self.list[0]:
#for rule in filt.flist:
#rule.prepare(db)
if Filters.CustomFilters:
for filt in Filters.CustomFilters.get_filters(self.namespace):
if filt.get_name() == self.list[0]:
for rule in filt.flist:
rule.prepare(db)
rule.requestprepare(db)
break
def reset(self):
#if Filters.SystemFilters:
#for filt in Filters.SystemFilters.get_filters(self.namespace):
#if filt.get_name() == self.list[0]:
#for rule in filt.flist:
#rule.reset()
if Filters.CustomFilters:
for filt in Filters.CustomFilters.get_filters(self.namespace):
if filt.get_name() == self.list[0]:
for rule in filt.flist:
rule.reset()
rule.requestreset()
break
def apply(self, db, obj):
#if Filters.SystemFilters:
#for filt in Filters.SystemFilters.get_filters(self.namespace):
#if filt.get_name() == self.list[0]:
#return filt.check(db, obj.handle)
if Filters.CustomFilters:
for filt in Filters.CustomFilters.get_filters(self.namespace):
if filt.get_name() == self.list[0]:
@@ -93,10 +81,6 @@ class MatchesFilterBase(Rule):
"""
Return the selected filter or None.
"""
#if Filters.SystemFilters:
#for filt in Filters.SystemFilters.get_filters(self.namespace):
#if filt.get_name() == self.list[0]:
#return filt
if Filters.CustomFilters:
for filt in Filters.CustomFilters.get_filters(self.namespace):
if filt.get_name() == self.list[0]:
+33
View File
@@ -43,14 +43,47 @@ class Rule(object):
def __init__(self, arg):
self.set_list(arg)
self.nrprepare = 0
def is_empty(self):
return False
def requestprepare(self, db):
"""
Request that the prepare method of the rule is executed if needed
Special: Custom Filters have fixed values, so only one instance needs to
exists during a search. It is stored in a FilterStore, and initialized
once.
As filters are can be grouped in a group
filter, we request a prepare. Only the first time prepare will be
called
"""
if self.nrprepare == 0:
self.prepare(db)
self.nrprepare += 1
def prepare(self, db):
"""prepare so the rule can be executed efficiently"""
pass
def requestreset(self):
"""
Request that the reset method of the rule is executed if possible
Special: Custom Filters have fixed values, so only one instance needs to
exists during a search. It is stored in a FilterStore, and initialized
once.
As filters are can be grouped in a group
filter, we request a reset. Only the last time reset will be
called
"""
self.nrprepare -= 1
if self.nrprepare == 0:
self.reset()
def reset(self):
"""remove no longer needed memory"""
pass
def set_list(self, arg):
+2 -2
View File
@@ -27,6 +27,7 @@
#-------------------------------------------------------------------------
from xml.sax import make_parser, SAXParseException
import os
import sys
#-------------------------------------------------------------------------
#
@@ -84,8 +85,7 @@ class FilterList(object):
return l.replace('"', '&quot;')
def save(self):
f = open(self.file.encode('utf-8'), 'w')
f = open(self.file.encode(sys.getfilesystemencoding()), 'w')
f.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
f.write('<filters>\n')
for namespace in self.filter_namespaces:
+2 -2
View File
@@ -227,10 +227,10 @@ class GenericFilter(object):
"""
m = self.get_check_func()
for rule in self.flist:
rule.prepare(db)
rule.requestprepare(db)
res = m(db, id_list, progress, tupleind)
for rule in self.flist:
rule.reset()
rule.requestreset()
return res
class GenericFamilyFilter(GenericFilter):
+6 -2
View File
@@ -30,6 +30,7 @@ Package providing filtering framework for GRAMPS.
#
#-------------------------------------------------------------------------
from Filters._GenericFilter import GenericFilter
from Errors import FilterError
#-------------------------------------------------------------------------
#
@@ -58,8 +59,11 @@ class ParamFilter(GenericFilter):
new_list[ix] = self.param_list[ix]
rule.set_list(new_list)
for rule in self.flist:
rule.prepare(db)
if rule.nrprepare > 0:
raise FilterError, 'Custom filters can not twice be used' \
' in a parameter filter'
rule.requestprepare(db)
result = GenericFilter.apply(self, db, id_list)
for rule in self.flist:
rule.reset()
rule.requestreset()
return result
+1 -1
View File
@@ -124,7 +124,7 @@ class GrampsAboutDialog(gtk.AboutDialog):
"Distribution: %s")
% (elipses(str(const.VERSION)),
elipses(str(sys.version).replace('\n','')),
elipses(str(bsddb.__version__)),
elipses(str(bsddb.__version__) + " " + str(bsddb.db.version())),
elipses(os.environ.get('LANG','')),
elipses(operatingsystem),
elipses(distribution)))
+1 -1
View File
@@ -119,7 +119,7 @@ class ErrorReportAssistant(object):
"gobject version: %s\n"\
"cairo version : %s"\
% (str(sys.version).replace('\n',''),
str(bsddb.__version__),
str(bsddb.__version__) + " " + str(bsddb.db.version()),
str(const.VERSION),
os.environ.get('LANG',''),
operatingsystem,
+8
View File
@@ -38,6 +38,13 @@ import tempfile
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#
# Gramps modules
#
#-------------------------------------------------------------------------
import Utils
#-------------------------------------------------------------------------
#
# resize_to_jpeg
@@ -111,6 +118,7 @@ def resize_to_jpeg_buffer(source, width, height):
img = gtk.gdk.pixbuf_new_from_file(source)
scaled = img.scale_simple(int(width), int(height), gtk.gdk.INTERP_BILINEAR)
os.close(filed)
dest = Utils.get_unicode_path_from_env_var(dest)
scaled.save(dest, 'jpeg')
ofile = open(dest, mode='rb')
data = ofile.read()
+2 -2
View File
@@ -437,8 +437,8 @@ class ManagedWindow(object):
if object is not None:
return object
raise ValueError, (
'ManagedWindow.get_widget: "%s" widget not found in "%s"' %
(name, self._gladeobj.get_name())
'ManagedWindow.get_widget: "%s" widget not found in "%s/%s"' %
(name, self._gladeobj.dirname, self._gladeobj.filename)
)
return object
+2 -4
View File
@@ -700,9 +700,7 @@ class GuiNoteOption(gtk.HBox):
"""
if note:
note_id = note.get_gramps_id()
txt = " ".join(note.get().split())
#String must be unicode for truncation to work for non ascii characters
txt = unicode(txt)
txt = u" ".join(note.get().split())
if len(txt) > 35:
txt = txt[:35] + "..."
txt = "%s [%s]" % (txt, note_id)
@@ -1277,7 +1275,7 @@ class GuiDestinationOption(gtk.HBox):
status = fcd.run()
if status == gtk.RESPONSE_OK:
path = Utils.get_unicode_path(fcd.get_filename())
path = Utils.get_unicode_path_from_file_chooser(fcd.get_filename())
if path:
if not self.__option.get_directory_entry() and \
not path.endswith(self.__option.get_extension()):
+2 -2
View File
@@ -601,7 +601,7 @@ class PluginStatus(ManagedWindow.ManagedWindow):
# But don't use converted filenames
# in the call to self.__pmgr.reg_plugins
# as that will break in reg_plugins.
u_gpr_file = unicode(gpr_file, sys.getfilesystemencoding())
u_gpr_file = Utils.get_unicode_path_from_file_chooser(gpr_file)
callback(" " + (_("Registered '%s'") % u_gpr_file) + "\n")
self.__pmgr.reg_plugins(gpr_file)
@@ -629,7 +629,7 @@ class PluginStatus(ManagedWindow.ManagedWindow):
status = fcd.run()
if status == gtk.RESPONSE_OK:
path = Utils.get_unicode_path(fcd.get_filename())
path = Utils.get_unicode_path_from_file_chooser(fcd.get_filename())
if path:
self.install_addon_path.set_text(path)
fcd.destroy()
+3 -2
View File
@@ -1330,6 +1330,7 @@ class RelationshipCalculator(object):
all_dist=True,
all_families=True, only_birth=False)
if not data[0][0] == -1:
data = self.collapse_relations(data)
for rel in data :
rel2 = rel[2]
rel4 = rel[4]
@@ -1360,13 +1361,13 @@ class RelationshipCalculator(object):
if not rel_str in relstrings:
relstrings.append(rel_str)
if rel1:
commons[rel_str] = [rel1]
commons[rel_str] = rel1
else:
#unknown parent eg
commons[rel_str] = []
else:
if rel1:
commons[rel_str].append(rel1)
commons[rel_str].extend(rel1)
#construct the return tupply, relstrings is ordered on rank automatic
common_list = []
for rel_str in relstrings:
+1 -1
View File
@@ -73,7 +73,7 @@ class FileEntry(gtk.HBox):
dialog.present()
status = dialog.run()
if status == gtk.RESPONSE_OK:
self.set_filename(Utils.get_unicode_path(dialog.get_filename()))
self.set_filename(Utils.get_unicode_path_from_file_chooser(dialog.get_filename()))
dialog.destroy()
def set_filename(self, path):
+42 -11
View File
@@ -34,6 +34,8 @@ import threading
import time
from types import ClassType, InstanceType
from gen.ggettext import gettext as _
from subprocess import Popen, PIPE
import sys
#-------------------------------------------------------------------------------
#
@@ -446,7 +448,16 @@ class GVPsDoc(GVDocBase):
# but the output is clipped, some margins have disappeared. I used 1 inch margins always.
# See bug tracker issue 2815
os.system( 'dot -Tps:cairo -o"%s" "%s"' % (self._filename, tmp_dot) )
# Covert filename to str using file system encoding.
fname = self._filename.encode(sys.getfilesystemencoding())
command = 'dot -Tps:cairo -o"%s" "%s"' % (fname, tmp_dot)
dotversion = Popen(['dot', '-V'], stderr=PIPE).communicate(input=None)[1]
# Problem with dot 2.26.3 and multiple pages, which gives "cairo: out of memory"
# If the :cairo is skipped for these cases it gives acceptable result.
if dotversion.find('2.26.3') != -1 and (self.vpages * self.hpages) > 1:
command=command.replace(':cairo','')
os.system(command)
# Delete the temporary dot file
os.remove(tmp_dot)
@@ -489,9 +500,11 @@ class GVSvgDoc(GVDocBase):
dotfile = os.fdopen(handle,"w")
dotfile.write(self._dot.getvalue())
dotfile.close()
# Covert filename to str using file system encoding.
fname = self._filename.encode(sys.getfilesystemencoding())
# Generate the SVG file.
os.system( 'dot -Tsvg -o"%s" "%s"' % (self._filename, tmp_dot) )
os.system( 'dot -Tsvg -o"%s" "%s"' % (fname, tmp_dot) )
# Delete the temporary dot file
os.remove(tmp_dot)
@@ -535,9 +548,11 @@ class GVSvgzDoc(GVDocBase):
dotfile = os.fdopen(handle,"w")
dotfile.write(self._dot.getvalue())
dotfile.close()
# Covert filename to str using file system encoding.
fname = self._filename.encode(sys.getfilesystemencoding())
# Generate the SVGZ file.
os.system( 'dot -Tsvgz -o"%s" "%s"' % (self._filename, tmp_dot) )
os.system( 'dot -Tsvgz -o"%s" "%s"' % (fname, tmp_dot) )
# Delete the temporary dot file
os.remove(tmp_dot)
@@ -581,9 +596,11 @@ class GVPngDoc(GVDocBase):
dotfile = os.fdopen(handle,"w")
dotfile.write(self._dot.getvalue())
dotfile.close()
# Covert filename to str using file system encoding.
fname = self._filename.encode(sys.getfilesystemencoding())
# Generate the PNG file.
os.system( 'dot -Tpng -o"%s" "%s"' % (self._filename, tmp_dot) )
os.system( 'dot -Tpng -o"%s" "%s"' % (fname, tmp_dot) )
# Delete the temporary dot file
os.remove(tmp_dot)
@@ -627,9 +644,11 @@ class GVJpegDoc(GVDocBase):
dotfile = os.fdopen(handle,"w")
dotfile.write(self._dot.getvalue())
dotfile.close()
# Covert filename to str using file system encoding.
fname = self._filename.encode(sys.getfilesystemencoding())
# Generate the JPEG file.
os.system( 'dot -Tjpg -o"%s" "%s"' % (self._filename, tmp_dot) )
os.system( 'dot -Tjpg -o"%s" "%s"' % (fname, tmp_dot) )
# Delete the temporary dot file
os.remove(tmp_dot)
@@ -673,9 +692,11 @@ class GVGifDoc(GVDocBase):
dotfile = os.fdopen(handle,"w")
dotfile.write(self._dot.getvalue())
dotfile.close()
# Covert filename to str using file system encoding.
fname = self._filename.encode(sys.getfilesystemencoding())
# Generate the GIF file.
os.system( 'dot -Tgif -o"%s" "%s"' % (self._filename, tmp_dot) )
os.system( 'dot -Tgif -o"%s" "%s"' % (fname, tmp_dot) )
# Delete the temporary dot file
os.remove(tmp_dot)
@@ -722,13 +743,16 @@ class GVPdfGvDoc(GVDocBase):
dotfile = os.fdopen(handle,"w")
dotfile.write(self._dot.getvalue())
dotfile.close()
# Covert filename to str using file system encoding.
fname = self._filename.encode(sys.getfilesystemencoding())
# Generate the PDF file.
os.system( 'dot -Tpdf -o"%s" "%s"' % (self._filename, tmp_dot) )
command = 'dot -Tpdf -o"%s" "%s"' % (fname, tmp_dot)
os.system( command )
# Delete the temporary dot file
os.remove(tmp_dot)
if self.open_req:
open_file_with_default_application(self._filename)
@@ -775,6 +799,11 @@ class GVPdfGsDoc(GVDocBase):
# Reason for using -Tps:cairo. Needed for Non Latin-1 letters
# See bug tracker issue 2815
command = 'dot -Tps:cairo -o"%s" "%s"' % ( tmp_ps, tmp_dot )
dotversion = Popen(['dot', '-V'], stderr=PIPE).communicate(input=None)[1]
# Problem with dot 2.26.3 and multiple pages, which gives "cairo: out of memory"
# If the :cairo is skipped for these cases it gives acceptable result.
if dotversion.find('2.26.3') != -1 and (self.vpages * self.hpages) > 1:
command=command.replace(':cairo','')
os.system(command)
# Add .5 to remove rounding errors.
@@ -783,9 +812,11 @@ class GVPdfGsDoc(GVDocBase):
height_pt = int( (paper_size.get_height_inches() * 72) + 0.5 )
# Convert to PDF using ghostscript
fname = self._filename.encode(sys.getfilesystemencoding())
command = '%s -q -sDEVICE=pdfwrite -dNOPAUSE -dDEVICEWIDTHPOINTS=%d' \
' -dDEVICEHEIGHTPOINTS=%d -sOutputFile="%s" "%s" -c quit' \
% ( _GS_CMD, width_pt, height_pt, self._filename, tmp_ps )
% ( _GS_CMD, width_pt, height_pt, fname, tmp_ps )
os.system(command)
os.remove(tmp_ps)
+2 -1
View File
@@ -57,6 +57,7 @@ from _StyleComboBox import StyleComboBox
from _StyleEditor import StyleListDisplay
from _FileEntry import FileEntry
from const import URL_MANUAL_PAGE
import Utils
#-------------------------------------------------------------------------
#
@@ -466,7 +467,7 @@ class ReportDialog(ManagedWindow.ManagedWindow):
to tell the calling routine to give up. This function also
saves the current directory so that any future reports will
default to the most recently used directory."""
self.target_path = self.target_fileentry.get_full_path(0)
self.target_path = Utils.get_unicode_path_from_file_chooser(self.target_fileentry.get_full_path(0))
if not self.target_path:
return None
+10 -5
View File
@@ -71,7 +71,8 @@ class SubstKeywords(object):
person = database.get_person_from_handle(person_handle)
self.n = person.get_primary_name().get_first_name() + " " + \
person.get_primary_name().get_surname() #Issue ID: 2878
self.N = name_displayer.sorted(person)
self.N = person.get_primary_name().get_surname() + ", " + \
person.get_primary_name().get_first_name()
self.b = ""
self.B = ""
self.d = ""
@@ -103,13 +104,17 @@ class SubstKeywords(object):
if father_handle == person_handle:
if mother_handle:
mother = database.get_person_from_handle(mother_handle)
self.s = name_displayer.display(mother)
self.S = name_displayer.sorted(mother)
self.s = mother.get_primary_name().get_first_name() + " " + \
mother.get_primary_name().get_surname() #Issue ID: 2878
self.S = mother.get_primary_name().get_surname() + ", " + \
mother.get_primary_name().get_first_name()
else:
if father_handle:
father = database.get_person_from_handle(father_handle)
self.s = name_displayer.display(father)
self.S = name_displayer.sorted(father)
self.s = father.get_primary_name().get_first_name() + " " + \
father.get_primary_name().get_surname() #Issue ID: 2878
self.S = father.get_primary_name().get_surname() + ", " + \
father.get_primary_name().get_first_name()
for e_ref in f.get_event_ref_list():
if not e_ref:
continue
+5
View File
@@ -226,6 +226,11 @@ def get_addon_translator(filename=None, domain="addon"):
gramps_translator = gettext.translation(LOCALEDOMAIN, LOCALEDIR,
fallback=True)
path = os.path.dirname(os.path.abspath(filename))
# Check if path is of type str. Do import and conversion if so.
# The import cannot be done at the top as that will conflict with the translation system.
if type(path) == str:
from Utils import get_unicode_path_from_env_var
path = get_unicode_path_from_env_var(path)
addon_translator = gettext.translation(domain, os.path.join(path,"locale"),
fallback=True)
gramps_translator.add_fallback(addon_translator)
+8 -6
View File
@@ -133,14 +133,16 @@ class UndoHistory(ManagedWindow.ManagedWindow):
def _paint_rows(self,start,end,selected=False):
if selected:
(fg,bg) = get_colors(self.tree,gtk.STATE_SELECTED)
(fg, bg) = get_colors(self.tree,gtk.STATE_SELECTED)
else:
fg = bg = None
for idx in range(start,end+1):
the_iter = self.model.get_iter( (idx,) )
self.model.set(the_iter,2,fg)
self.model.set(the_iter,3,bg)
try:
the_iter = self.model.get_iter( (idx,) )
self.model.set(the_iter, 2, fg)
self.model.set(the_iter, 3, bg)
except ValueError:
pass
def _response(self, obj,response_id):
if response_id == gtk.RESPONSE_CLOSE:
@@ -182,7 +184,7 @@ class UndoHistory(ManagedWindow.ManagedWindow):
def clear(self):
self.undodb.clear()
self.undodb.abort_possible = False
self.db.abort_possible = False
self.update()
if self.db.undo_callback:
self.db.undo_callback(None)
+51 -35
View File
@@ -37,6 +37,8 @@ import random
import time
import shutil
import uuid
import logging
LOG = logging.getLogger(".")
#-------------------------------------------------------------------------
#
@@ -322,20 +324,59 @@ def find_folder( filename):
# not found
return ''
def get_unicode_path(path):
def get_unicode_path_from_file_chooser(path):
"""
Return the Unicode version of a path string.
:type path: str
:param path: The path to be converted to Unicode
:rtype: unicode
:returns: The Unicode version of path.
:returns: The Unicode version of path.
"""
# Don't make unicode of unicode as this does not work
# with parameter for encoding.
if type(path) == type(u""):
# Don't make unicode of unicode
if isinstance(path, unicode):
return path
return unicode(path, sys.getfilesystemencoding())
if constfunc.win():
# in windows filechooser returns officially utf-8, not filesystemencoding
try:
return unicode(path)
except:
LOG.warn("Problem encountered converting string: %s." % path)
return unicode(path, sys.getfilesystemencoding(), errors='replace')
else:
try:
return unicode(path, sys.getfilesystemencoding())
except:
LOG.warn("Problem encountered converting string: %s." % path)
return unicode(path, sys.getfilesystemencoding(), errors='replace')
def get_unicode_path_from_env_var(path):
"""
Return the Unicode version of a path string.
:type path: str
:param path: The path to be converted to Unicode
:rtype: unicode
:returns: The Unicode version of path.
"""
if isinstance(path, unicode):
return path
if constfunc.win():
# In Windows path/filename returned from a emvironment variable is in filesystemencoding
try:
new_path = unicode(path, sys.getfilesystemencoding())
return new_path
except:
LOG.warn("Problem encountered converting string: %s." % path)
return unicode(path, sys.getfilesystemencoding(), errors='replace')
else:
try:
return unicode(path)
except:
LOG.warn("Problem encountered converting string: %s." % path)
return unicode(path, sys.getfilesystemencoding(), errors='replace')
#-------------------------------------------------------------------------
@@ -823,35 +864,9 @@ def probably_alive(person, db,
if not birth or not death:
# no evidence, must consider alive
return (True, None, None, _("no evidence"), None)
# must have est dates from here:
# SPECIAL CASE: Today and Future:
if current_date.match(gen.lib.date.Today(), ">="):
if person.get_death_ref():
# if death in the future: (impossible, unless guess)
# if return_range:
# return (True, birth, death, ("future death, ") + explain, relative)
# else:
# return True
if return_range:
return (False, birth, death, explain, relative)
else:
return False
# must have dates from here:
if limit:
death += limit # add these years to death
# if the current - birth is too big, not alive:
# FIXME: use match here:
if (current_date - birth)[0] > pb.MAX_AGE_PROB_ALIVE:
if return_range:
return (False, birth, death, explain, relative)
else:
return False
# FIXME: use match here:
# if the current_date is before birth, not alive:
if (birth - current_date)[0] > 0:
if return_range:
return (False, birth, death, explain, relative)
else:
return False
# Finally, check to see if current_date is between dates
result = (current_date.match(birth, ">=") and
current_date.match(death, "<="))
@@ -956,6 +971,7 @@ def get_empty_tempdir(dirname):
if os.path.isdir(dirpath):
shutil.rmtree(dirpath)
os.makedirs(dirpath)
dirpath = get_unicode_path_from_env_var(dirpath)
return dirpath
def rm_tempdir(path):
@@ -1351,10 +1367,10 @@ def navigation_label(db, nav_type, handle):
obj = db.get_note_from_handle(handle)
if obj:
label = obj.get()
label = " ".join(label.split())
# When strings are cut, make sure they are unicode
#otherwise you may end of with cutting within an utf-8 sequence
label = get_unicode_path(label)
label = unicode(label)
label = " ".join(label.split())
if len(label) > 40:
label = label[:40] + "..."
+1 -1
View File
@@ -287,7 +287,7 @@ class ArgHandler(object):
if self.list:
print 'List of known family trees in your database path\n'
for name, dirname in self.dbman.family_tree_list():
print dirname, ', with name ', name
print dirname, ', with name ', name.encode(sys.getfilesystemencoding())
sys.exit(0)
if self.list_more:
+5 -2
View File
@@ -156,7 +156,7 @@ class CLIDbManager(object):
else:
retval["Locked?"] = "no"
retval["DB version"] = version
retval["Family tree"] = name
retval["Family tree"] = name.encode(sys.getfilesystemencoding())
retval["Path"] = dirpath
retval["Last accessed"] = time.strftime('%x %X',
time.localtime(tval))
@@ -168,6 +168,7 @@ class CLIDbManager(object):
"""
# make the default directory if it does not exist
dbdir = os.path.expanduser(config.get('behavior.database-path'))
dbdir = dbdir.encode(sys.getfilesystemencoding())
make_dbdir(dbdir)
self.current_names = []
@@ -331,7 +332,8 @@ def make_dbdir(dbdir):
if not os.path.isdir(dbdir):
os.makedirs(dbdir)
except (IOError, OSError), msg:
LOG.error(_("Could not make database directory: ") + str(msg))
msg = unicode(str(msg), sys.getfilesystemencoding())
LOG.error(_("Could not make database directory: ") + msg)
def find_next_db_name(name_list):
"""
@@ -354,6 +356,7 @@ def find_next_db_dir():
while True:
base = "%x" % int(time.time())
dbdir = os.path.expanduser(config.get('behavior.database-path'))
dbdir = dbdir.encode(sys.getfilesystemencoding())
new_path = os.path.join(dbdir, base)
if not os.path.isdir(new_path):
break
+3 -6
View File
@@ -42,10 +42,10 @@ from gettext import gettext as _
#-------------------------------------------------------------------------
PROGRAM_NAME = "Gramps"
if "@VERSIONSTRING@" == "@" + "VERSIONSTRING" + "@":
VERSION = "3.2.2"
VERSION = "3.2.4"
else:
VERSION = "@VERSIONSTRING@"
VERSION_TUPLE = (3, 2, 2)
VERSION_TUPLE = (3, 2, 4)
#-------------------------------------------------------------------------
#
@@ -117,10 +117,7 @@ else:
# Conversion of USER_HOME to unicode was needed to have better
# support for non ASCII path names in Windows for the Gramps database.
USER_HOME = unicode(USER_HOME, sys.getfilesystemencoding())
# Tried also coversion of HOME_DIR, but that caused a lot of problems
# in Windows. Leave it unconverted for now.
#HOME_DIR = unicode(HOME_DIR, sys.getfilesystemencoding())
HOME_DIR = unicode(HOME_DIR, sys.getfilesystemencoding())
#-------------------------------------------------------------------------
#
+151 -496
View File
@@ -1,32 +1,38 @@
/*
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright 2008 Jason M. Simanek
# Copyright 2009 Stephane Charette
# Copyright (c) 2008-2010 Rob G. Healey <robhealey1@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
**************************************************************************************************
Copyright Holder and License
**************************************************************************************************
GRAMPS Cascading Style Sheet
Style Name: Basic-Ash Stylesheet
Style Author: Jason M. Simanek (2008)
Note: Adapted from GRAMPS original Modern Style stylesheet
**************************************************************************************************
This website was created with GRAMPS <http://www.gramps-project.org/>
--------------------------------------------------------------------------------------------------
GRAMPS is a Free Software Project for Genealogy, offering a professional
genealogy program, and a wiki open to all. It is a community project, created,
developed and governed by genealogists.
Go to <http://gramps-project.org/> to learn more!
--------------------------------------------------------------------------------------------------
Copyright 2008 Jason M. Simanek
Copyright 2009 Stephane Charette
This file is part of the GRAMPS program.
GRAMPS is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation, version 2 of the License.
GRAMPS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GRAMPS. If not, see <http://www.gnu.org/licenses/>.
--------------------------------------------------------------------------------------------------
Color Palette
--------------------------------------------------------------------------------------------------
@@ -39,17 +45,19 @@ gray very light #EEE
white #FFF
--------------------------------------------------------------------------------------------------
# $Id $
# $Id$
NarrativeWeb Styles
------------------------------------------------------------------------------------------------ */
------------------------------------------------------------------------------------------------
/* General Elements
General Elements
----------------------------------------------------- */
body {
font-family:sans-serif;
color:#000;
margin:0;
padding:0;
background-color:#FFF;
}
div {
@@ -155,7 +163,7 @@ a:visited {
/* Header
----------------------------------------------------- */
div#header {
#header {
padding:15px 15px 2px 15px;
margin:0;
background-color:#EEE;
@@ -164,73 +172,21 @@ div#header {
color:#333;
margin:0 0 3px 0;
}
div#header p {
#header p {
font-size:1em;
font-weight:bold;
color:#999;
margin:0;
}
/* Footer
----------------------------------------------------- */
div#footer {
height: 60px;
clear:both;
width:100%;
font-size:12px;
line-height:130%;
color:#333;
margin:0;
padding:15px 0 0 0;
background-color:#CCC;
border-top:solid 1px #333;
}
div#footer a, div#footer a:visited {
text-decoration:none;
color:#333;
}
div#footer a:hover {
text-decoration:underline;
}
div#footer img {
border:0;
margin:0 auto;
vertical-align:middle;
}
div#footer p#createdate {
float:left;
width:40%;
text-align:left;
margin-left:10px;
}
div#footer p#copyright {
float:right;
width:40%;
text-align:right;
margin-right:10px;
}
div#footer p#copyright img {
margin-right:10px;
}
#user_footer {
width:70%;
float:left;
margin:1em;
}
#user_footer p {
font:normal 1em/1.2em serif;
margin:0;
padding:0;
}
/* Navigation
----------------------------------------------------- */
div#navigation, div#subnavigation {
#navigation, #subnavigation {
margin:0;
padding:4px 0 0 0;
background-color:#EEE;
}
div#navigation ul, div#subnavigation ul {
#navigation ul, #subnavigation ul {
list-style:none;
min-width:770px;
height:22px;
@@ -238,12 +194,12 @@ div#navigation ul, div#subnavigation ul {
padding:0 0 0 12px;
border-bottom:1px solid #999;
}
div#navigation ul li, div#subnavigation ul li {
#navigation ul li, #subnavigation ul li {
margin:0;
padding:0;
float:left;
}
div#navigation ul li a, div#subnavigation ul li a {
#navigation ul li a, #subnavigation ul li a {
display:block;
font-size:12px;
line-height:100%;
@@ -253,11 +209,11 @@ div#navigation ul li a, div#subnavigation ul li a {
padding:5px 5px;
background-color:#EEE;
}
div#navigation ul li a:hover, div#subnavigation ul li a:hover {
#navigation ul li a:hover, #subnavigation ul li a:hover {
background-color:#CCC;
border-bottom:solid 1px #000;
}
div#navigation ul li.CurrentSection a, div#subnavigation ul li.CurrentSection a {
#navigation ul li.CurrentSection a, #subnavigation ul li.CurrentSection a {
padding-bottom:4px;
border-top:solid 1px #999;
border-right:solid 1px #999;
@@ -265,14 +221,14 @@ div#navigation ul li.CurrentSection a, div#subnavigation ul li.CurrentSection a
border-bottom:solid 1px #FFF;
background-color:#FFF;
}
div#navigation ul li.CurrentSection a:hover {
#navigation ul li.CurrentSection a:hover {
background-color:#FFF;
}
div#subnavigation ul li.CurrentSection a {
#subnavigation ul li.CurrentSection a {
border-width:0 0 1px 0;
}
/* Alphabet Navigation Bar
/* Alphabet Navigation
----------------------------------------------------- */
div#alphabet {
width: 100%;
@@ -297,7 +253,7 @@ div#alphabet ul li {
float:left;
}
div#alphabet ul li a {
display:block;
display: block;
padding: 4px 8px 4px 8px;
float:left;
font:bold 16px/100% sans;
@@ -314,7 +270,7 @@ div#alphabet ul li a:hover {
----------------------------------------------------- */
table {
font-size:14px;
margin:0;
margin:0 15px;
padding:0;
border:none;
border-collapse:collapse;
@@ -480,10 +436,23 @@ table.individuallist tbody tr td.ColumnName a {
table.individuallist tbody tr td.ColumnName a:hover {
background-color:#CCC;
}
#IndividualDetail div table.infolist tr td, #Individuals div table.infolist tr td p {
#Individuals div table.infolist tr td p {
vertical-align:top;
}
#IndividualDetail div table.infolist tr td a, #Individuals div table.infolist tr td p a {
#Individuals div table.infolist tr td p a {
display:inline;
}
/* IndividualDetail
------------------------------------------------------ */
#IndividualDetail {
background-color:#EEE;
}
#IndividualDetail div table.infolist tr td {
font:normal .9em/1.2em sans-serif;
vertical-align:top;
}
#IndividualDetail div table.infolist tr td a {
display:inline;
}
#IndividualDetail table.infolist tr td a:hover {
@@ -491,8 +460,10 @@ table.individuallist tbody tr td.ColumnName a:hover {
}
#IndividualDetail table.infolist tbody tr td.ColumnAttribute {
width:10%;
color:#999;
padding-left:5px;
color:#696969;
}
#IndividualDetail div.subsection table tr td:first-child {
padding-left:20px;
}
/* Sources
@@ -519,99 +490,6 @@ table.individuallist tbody tr td.ColumnName a:hover {
padding:.1em 10px .3em 10px;
}
/* EventList and EventDetail
----------------------------------------------------- */
div#EventList, div#EventDetail { }
div#events table.eventlist {
margin-top: .3cm;
}
table.eventlist tbody tr td {
border-bottom: dashed 1px #000;
}
table.eventlist tbody tr td.ColumnEvent {
width: 10%;
}
table.eventlist tbody tr td.ColumnDate {
width: 10%;
}
table.eventlist tbody tr td.ColumnPlace {
width: 20%;
}
table.eventlist tbody tr td.ColumnDescription {
width: 20%;
}
table.eventlist tbody tr td.ColumnNotes {
width: 35%;
}
table.eventlist tbody tr td.ColumnSources {
width: 5%;
}
table.eventlist tbody tr td.ColumnPerson {
width: 30%;
}
table.eventlist tbody tr td.ColumnPartner {
width: 35%;
}
div#EventList table.eventlist tbody tr.BeginName {
border-top: solid 1px #000;
}
div#EventList table.eventlist tbody tr td.ColumnEvent a,
div#EventList table.eventlist tbody tr td.ColumnPerson a,
div#EventList table.eventlist tbody tr td.ColumnPartner a {
display: block;
padding: .9em 10px;
}
div#EventList table.alphaevent {
padding: .3em 0 .3em 0;
margin: 0;
}
div#EventList table.alphaevent tbody tr.BeginEvent {
border-top: solid 1px #000;
}
div#EventList table.alphaevent tbody tr td {
border-bottom: dashed 1px #000;
}
div#EventList table.alphaevent tbody tr td.ColumnType {
width: 15%;
}
div#EventList table.alphaevent tbody tr td.ColumnType a:hover {
background: none;
}
div#EventList table.alphaevent tbody tr td.ColumnGRAMPSID {
width: 12%;
}
div#EventList table.alphaevent tbody tr td.ColumnDate {
width: 20%;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson {
width: 60%;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson span.father,
div#EventList table.alphaevent tbody tr td.ColumnPerson span.mother {
display:block;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson span.mother:before {
content:"+ ";
}
div#EventDetail h3 {
font-size: 1.4em;
}
div#EventDetail table.eventlist {
margin: .5cm 0 .3cm 1.5cm;
width: 800px;
}
div#EventDetail table.eventlist tbody tr td.ColumnAttribute {
border-top: solid 1px #000;
font-weight: bold;
text-transform: uppercase;
width: 20%;
}
div#EventDetail table.eventlist tbody tr td.ColumnEvent {
border-top: solid 1px #000;
}
/* Gallery
----------------------------------------------------- */
#Gallery table.infolist tbody tr td.ColumnRowLabel, #Gallery table.infolist tbody tr td.ColumnDate {
@@ -689,53 +567,6 @@ div#EventDetail table.eventlist tbody tr td.ColumnEvent {
border-color:#CCC;
}
/* Download
----------------------------------------------------- */
#Download {
margin: 0;
padding: .5em 0 .5em 0;
}
table.download {
padding: 0;
margin: .5em 0 .5em 0;
border: solid 1px #000;
width: 100%;
background-color: #CCC;
}
table.download img {
/* float:center; */
}
table.download tbody tr#Row02 {
border-bottom:solid 1px #000;
}
table.download tbody tr td {
border-style:solid;
border-color: #000;
border-width: 0px 2px 2px 2px;
text-align:left;
}
table.download td.ColumnFilename {
width:30%;
background-color: #FFF;
}
table.download td.ColumnFilename a {
display:block;
padding:10px;
font-weight:bold;
font-style: italic;
text-decoration:none;
}
table.download td.ColumnDescription {
width:45%;
}
table.download td.ColumnLicense {
width:6%;
}
table.download td.ColumnModified {
width:17%;
}
/* Contact
----------------------------------------------------- */
#Contact #summaryarea {
@@ -781,70 +612,61 @@ table.download td.ColumnModified {
text-decoration:underline;
}
/* Repositories
------------------------------------------------------ */
div#RepositoryList { }
div#RepositoryList table.repolist tbody tr td {
background-color: #CCC;
/* Download
----------------------------------------------------- */
#Download {
padding:1cm;
height:396px;
}
div#RepositoryList table.repolist tbody tr td a {
display: block;
padding: .3em 10px;
table.download {
border:solid 2px #000;
width:100%;
}
div#RepositoryList table.repolist tbody tr td.ColumnRowLabel {
width: 9%;
table.download img {
float:center;
}
div#RepositoryList table.repolist tbody tr td.ColumnType {
width: 15%;
table.download thead tr th {
text-align:center;
border:solid 2px #000;
color: #000;
text-transform:uppercase;
}
div#RepositoryList table.repolist tbody tr td.ColumnName {
background-color: #FFF;
table.download tbody tr#Row02 {
border-bottom:solid 2px #000;
}
/* Address Book
------------------------------------------------------ */
div#AddressBookList, AddressBookDetail {
margin: 0;
padding: 0;
table.download thead tr th, table.download tbody tr td {
padding-left:10px;
padding-top:20px;
border-style:solid;
border-color:#000;
border-width:0 2px 2px 2px;
text-align:left;
}
div#AddressBookList table.addressbook {
margin: .3em 0 .3em 0;
table.download td.Description {
width: 50%;
}
div#AddressBookList tble.addressbook tbody tr.Totals td {
text-align: left;
background-color: #EEE;
table.download td.License {
width:8%;
}
div#AddressBookList table.addressbook tbody tr td {
background-color: #CCC;
text-align: center;
border: solid 1px #000;
table.download td.Filename {
width:30%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnRowLabel {
width: 4%;
table.download td.Filename a {
font-weight:bold;
font-style: italic;
text-decoration:none;
}
div#AddressBookList table.addressbook tbody tr td.ColumnName {
background-color: #FFF;
text-align: left;
width: 70%;
table.download td.Filename a:hover {
text-decoration:underline;
}
div#AddressBookList table.addressbook tbody tr td.ColumnName a {
display: block;
padding: 6px 0px 6px 0px;
}
div#AddressBookList table.addressbook tbody tr td.ColumnAddress {
width: 8%;
}
div#AddressBookList table.adressbook tbody tr td.ColumnResidence {
width: 8%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnWebLinks {
width: 8%;
table.download td.Modified {
width:12%;
font-weight:bold;
}
/* Subsections
----------------------------------------------------- */
#Home, #Introduction, #Contact {
#Home, #Introduction, #Contact {
padding:1.5em 0 3em 0;
}
#Home p, #Introduction p, #Contact p {
@@ -979,46 +801,6 @@ div#addresses table.infolist tbody tr td.ColumnValue {
/* Subsections : Attributes
----------------------------------------------------- */
div#attributes {
margin: 0;
padding: 0;
}
table.attrlist {
width: 100%;
}
table.attrlist thead tr th.ColumnType {
border: none;
background: none;
}
table.attrlist thead tr th.ColumnAttribute {
border: none;
background: none;
}
table.attrlist tbody tr td {
background-color: #EEE;
border-bottom: dashed 1px #000;
}
table.attrlist tbody tr td.ColumnType {
border: none;
background: none;
}
table.attrlist tbody tr td.ColumnAttribute {
border: none;
background: none;
}
table.attrlist tbody tr td.ColumnAttrType {
width: 15%;
}
table.attrlist tbody tr td.ColumnAttrValue {
width: 15%;
}
table.attrlist tbody tr td.ColumnAttrNotes {
width: 45%;
}
table.attrlist tbody tr td.ColumnAttrSources {
background-color: #FFF;
width: 15%;
}
/* Subsections : Gallery
----------------------------------------------------- */
@@ -1080,25 +862,6 @@ div#sourcerefs ol li ol {
/* Subsections : Weblinks
----------------------------------------------------- */
div#WebLinks {
margin : 0 auto;
padding: 0;
}
table.weblinks tr td {
background-color: #EEE;
border-bottom: dashed 1px #000;
}
table.weblinks tr td.ColumnRowLabel {
width: 6%;
}
table.weblinks tr td.ColumnType {
width: 30%;
}
table.weblinks tr td.ColumnDescription {
background-color: #FFF;
width: 30%;
}
/* Subsections : Pedigree
----------------------------------------------------- */
@@ -1139,139 +902,55 @@ table.weblinks tr td.ColumnDescription {
font-weight:bold;
}
/* Subsections : Ancestors Tree
/* Footer
----------------------------------------------------- */
#tree {
page-break-before:always;
#footer {
clear:both;
width:100%;
font-size:12px;
line-height:130%;
color:#333;
margin:0;
padding:15px 0 0 0;
background-color:#CCC;
border-top:solid 1px #333;
}
#footer a, #footer a:visited {
text-decoration:none;
color:#333;
}
#footer a:hover {
text-decoration:underline;
}
#footer img {
border:0;
margin:0 auto;
vertical-align:middle;
}
#footer p#createdate {
float:left;
width:40%;
text-align:left;
margin-left:10px;
}
#footer p#copyright {
float:right;
width:40%;
text-align:right;
margin-right:10px;
}
#footer p#copyright img {
margin-right:10px;
}
#user_footer {
width:70%;
float:left;
margin:1em;
}
#user_footer p {
font:normal 1em/1.2em serif;
margin:0;
padding:0;
background:none;
}
#treeContainer {
position:relative;
z-index:1;
margin-bottom:1.4em;
}
#treeContainer div.boxbg {
position:absolute;
margin:0;
padding:0;
background:none;
}
#treeContainer div.boxbg a,
#treeContainer div.boxbg span.unlinked {
position:relative;
z-index:10;
display:block;
font:normal .8em/1.4em sans-serif;
text-align:center;
text-decoration:none;
color:#000;
width:118px;
padding:5px 20px 7px 20px;
margin-left:16px;
background-color:#EEE;
border:solid 1px #999;
}
#treeContainer div.boxbg a.noThumb,
#treeContainer div.AncCol3 a,
#treeContainer div.AncCol4 a,
#treeContainer div.AncCol3 span.unlinked,
#treeContainer div.AncCol4 span.unlinked {
margin-top:10px;
}
#treeContainer div.boxbg a:hover {
position:relative;
z-index:999;
font-size:1em;
text-decoration:none;
width:190px;
margin-left:-20px;
padding:10px 25px 12px 25px;
border:solid 2px #333;
}
#treeContainer div.boxbg a:hover, #treeContainer div.AncCol3 a:hover, #treeContainer div.AncCol4 a:hover {
margin-top:-44px;
}
#treeContainer div.boxbg a.noThumb:hover {
margin-top:0;
}
#treeContainer div.AncCol0 a:hover {
margin-left:12px;
}
#treeContainer div.AncCol4 a:hover {
margin-left:-60px;
}
#treeContainer div.boxbg span.thumbnail {
display:block;
max-width:80px;
max-height:65px;
margin:0 auto;
padding:4px 0;
}
#treeContainer div.boxbg span.thumbnail img {
max-width:80px;
max-height:65px;
margin:0 auto;
}
#treeContainer div.boxbg a:hover span.thumbnail, #treeContainer div.boxbg a:hover span.thumbnail img {
height:80px;
}
#treeContainer div.AncCol3 span.thumbnail, #treeContainer div.AncCol4 span.thumbnail {
display:none;
}
#treeContainer div.boxbg a:hover span.thumbnail {
display:block;
}
#treeContainer div.male a,
#treeContainer div.male span.unlinked,
#treeContainer div.female a ,
#treeContainer div.female span.unlinked {
background-position:top right;
background-repeat:no-repeat;
}
#treeContainer div.male a,
#treeContainer div.male span.unlinked {
background-image:url(../images/Web_Gender_Male.png);
}
#treeContainer div.female a,
#treeContainer div.female span.unlinked {
background-image:url(../images/Web_Gender_Female.png);
}
.shadow {
display:none;
}
#tree div div.bvline {
position:absolute;
z-index:2;
height:3px;
margin:0 0 0 16px;
padding:0;
background-color:#999;
}
#tree div div.bhline {
position:absolute;
z-index:2;
width:2px;
margin:0 0 0 16px;
padding:0;
background-color:#999;
}
#tree div div.gvline {
position:absolute;
z-index:1;
height:3px;
margin:0 0 0 14px;
padding:0;
background-color:#EEE;
}
#tree div div.ghline {
position:absolute;
z-index:1;
width:2px;
margin:0 0 0 14px;
padding:0;
background-color:#EEE;
}
/* Calendar Styles
@@ -1442,27 +1121,3 @@ body#fullyearlinked table.calendar thead tr th.monthName {
body#fullyearlinked table.calendar tbody tr td {
height:3em;
}
/* Calendar: OneDay
--------------------------------------------------------------------------------- */
body#OneDay h3 {
color: #000;
font-weight: bold;
text-align: center;
}
table.oneday {
margin: .3em 0 .3em 0;
padding: 0;
}
table.oneday tbody tr td {
border-bottom: dashed 1px #000;
}
table.oneday tbody tr td.ColumnRowLabel {
width: 5%;
}
table.oneday tbody tr td.ColumnText {
width: 85%;
}
table.oneday tbody tr td.ColumnEvent {
width: 10%;
}
+89 -69
View File
@@ -1,8 +1,8 @@
/*
/*
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright 2008-2010 Rob G. Healey <robhealey1@gmail.com>
# Copyright (C) 2008-2010 Rob G. Healey <robhealey1@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -48,34 +48,41 @@ Females Web_Gender_Female.png
NarrativeWeb Styles
-------------------------------------------------------------------------------------------- */
body {
background-color :#FFF;
color: #000;
background-color: #000;
color: #FFF;
}
div#alphabet, div#navigation, div#subnavigation {
border-top: solid 2px #000;
/* Menu Elements
-------------------------------------------------------------------------------------------- */
div#alphabet ul, div#navigation ul, div#subnavigation ul {
background-color: #000;
}
div#alphabet ul li, div#navigation ul li, div#subnavigation ul li {
border-color: #13A926;
}
div#alphabet ul li a {
color: #000;
}
div#navigation ul, div#subnavigation ul {
border-bottom: solid 2px #000;
color: #FFF;
font: normal 16px sans;
}
div#navigation ul li a, div#subnavigation ul li a {
color: #000;
color: #FFF;
font: normal 14px serif;
}
div#navigation ul li.CurrentSection a {
background-color: #00029D;
background-color: #13A926;
color: #FFF;
font-weight: bold;
font-style: italic;
}
div#navigation ul li.CurrentSection a:hover {
background-color: #BCEAF6;
color: #000;
}
div#subnavigation ul li.CurrentSection a {
font-weight: bold;
font-style: italic;
background-color: #BCEAF6;
color: #000;
font-weight: bold;
font-style: italic;
}
div#subnavigation ul li.CurrentSection a:hover {
background-color: #000;
@@ -109,6 +116,8 @@ img {
background:none;
}
.content {
background-color: #FFF;
color: #000;
overflow: auto;
width:965px;
margin:0 auto;
@@ -137,13 +146,20 @@ img {
clear:both;
}
/* Gramps Styled Notes
------------------------------------------------------- */
div#grampsstylednote a {
color: Navy;
text-decoration: underline;
}
/* General Text
----------------------------------------------------- */
h1 {
font:normal 2em/1.2em serif;
}
h2 {
font:bold 2em/1.2em sans;
display: none;
}
h3 {
font:normal 2em/1.2em serif;
@@ -225,6 +241,7 @@ div#header {
border-bottom: solid 8px #13A926;
height: 65px;
width: 100%;
overflow: hidden;
}
#SiteTitle {
margin:0;
@@ -245,15 +262,16 @@ p#user_header {
/* Footer
----------------------------------------------------- */
div#footer {
width: 100%;
clear:both;
overflow:hidden;
width:100%;
height: 60px;
overflow: auto;
clear: both;
font-size: 12px;
margin: 0;
color: #FFF;
background-color: #00029D;
border-top: solid 8px #13A926;
font-size:12px;
line-height:130%;
color:#FFF;
margin-top: 0.5cm;
background-color:#00029D;
border-top:solid 8px #13A926;
}
div#footer a, div#footer a:visited {
text-decoration: none;
@@ -323,7 +341,6 @@ table.infolist tr td {
font: normal 1.1em/1.4em serif;
vertical-align: middle;
border-bottom: dashed 1px #000;
background-color: #BCEAF6;
padding: 6px 0 6px 10px;
}
table.infolist tr td a {
@@ -503,13 +520,22 @@ div#Places {
padding: 0;
}
div#Places table.infolist tbody tr td.ColumnLetter {
background-color: #BCEAF6;
width: 6%;
}
div#Places table.infolist tbody tr td.ColumnLetter a:hover {
background: none;
}
div#Places table.infolist tbody tr td.ColumnName a {
padding:.1em 10px .3em 10px;
div#Places table.infolist tbody tr td.ColumnName {
width: 45%;
}
div#Places table.infolist tbody tr td.ColumnState {
width: 8%;
}
div#Places table.infolist tbody tr td.ColumnCountry {
width: 8%;
}
div#Places table.infolist tbody tr td.ColumnCoordinates {
width: 25%;
}
/* EventList and EventDetail
@@ -521,33 +547,33 @@ div#EventList, div#EventDetail {
div#events table.eventlist {
margin-top: .3cm;
}
div#events table.eventlist tbody tr td.ColumnEvent a {
padding: 2px 100px 2px 10px;
}
div#events table.eventlist tbody tr td.ColumnPlace a {
padding: 2px 70px 2px 0px;
}
table.eventlist tbody tr td.ColumnEvent {
width: 20%;
width: 10%;
}
table.eventlist tbody tr td.ColumnDate {
width: 16%;
width: 12%;
}
table.eventlist tbody tr td.ColumnPlace {
width: 35%;
width: 25%;
}
table.eventlist tbody tr td.ColumnSources {
width: 12%;
table.eventlist tbody tr td.ColumnDescription {
width: 15%;
}
table.eventlist tbody tr td.ColumnNotes {
width: 25%;
}
table.eventlist tbody tr td.ColumnSources {
width: 12%;
}
table.eventlist tbody tr td.ColumnPerson {
width: 35%;
}
table.eventlist tbody tr td.ColumnPartner {
width: 35%;
}
div#EventList table.infolist tbody tr td.ColumnLetter a:hover {
background: none;
}
div#EventList table.eventlist tbody tr.BeginName {
border-top: solid 1px #000;
}
@@ -596,15 +622,11 @@ div#EventDetail table.eventlist tbody tr {
border-top: dashed 1px #000;
}
div#EventDetail table.eventlist tbody tr td.ColumnAttribute {
text-transform: uppercase;
width: 20%;
}
div#EventDetail table.eventlist tbody tr td.ColumnDate {
border-top: solid 1px #000;
}
div#EventDetail table.eventlist tbody tr td.ColumnPerson {
background-color: #000;
}
/* Gallery
----------------------------------------------------- */
@@ -743,10 +765,9 @@ div#EventDetail table.eventlist tbody tr td.ColumnPerson {
/* Download
----------------------------------------------------- */
div#Download {
margin: 0;
padding: 0px 0px .5em 0px;
width: 100%;
}
div#Download table.download {
padding: 0;
@@ -754,9 +775,6 @@ div#Download table.download {
border: solid 1px #000;
width: 100%;
}
div#Download table.download img {
text-align: center;
}
div#Download table.download tbody tr#Row02 {
border-bottom: solid 2px #000;
}
@@ -764,23 +782,22 @@ div#Download table.download tbody tr td {
border: solid 1px #000;
text-align: left;
}
div#Download table.download td.Filename {
div#Download table.download td.ColumnFilename {
width: 30%;
}
div#Download table.download td.Filename a {
div#Download table.download td.ColumnFilename a {
font-weight: bold;
font-style: italic;
text-decoration: none;
}
div#Download table.download td.Description {
div#Download table.download td.ColumnDescription {
width: 45%;
}
div#Download table.download td.License {
width: 6%;
}
div#Download table.download td.Modified {
div#Download table.download td.ColumnModified {
width: 17%;
}
div#Download p#description a.copyright a img {
float: center;
}
/* Sources
----------------------------------------------------- */
@@ -866,7 +883,7 @@ div.subsection table, div.subsection ol, div.subsection p {
font-size:.9em;
}
div.subsection a {
text-decoration:none;
text-decoration:underline;
}
div.subsection a:hover {
text-decoration:underline;
@@ -896,7 +913,6 @@ div#events h4 {
font-weight:bold;
font-size:10px;
line-height:12px;
text-transform:uppercase;
color: #000;
padding:6px 0 4px 0;
background-color: #70B1ED;
@@ -960,9 +976,16 @@ table.attrlist tbody tr td.ColumnAttrSources {
/* Subsections : Parents
----------------------------------------------------- */
div#parents {
margin: 0;
padding: 0;
}
div#parents table.infolist {
margin-top:.5em;
}
div#parents table.infolist tbody tr td {
border: none;
}
div#parents table.infolist tbody tr td.ColumnAttribute {
width:19%;
}
@@ -981,18 +1004,15 @@ div#families {
margin: 0;
padding: 0;
}
div#families table.infolist {
margin: .3cm 0 .3cm 0;
}
div#families table.infolist tbody tr td.ColumnValue p {
margin-top:0;
margin-top: 0;
}
div#families table.infolist tbody tr td.ColumnValue ol {
margin:0;
padding-top:0;
margin: 0;
padding-top: 0;
}
div#families table.infolist tbody tr td.ColumnValue ol li {
padding-bottom:.2em;
padding-bottom: .2em;
}
/* Subsection: LDS Ordinance
@@ -1369,7 +1389,6 @@ div#pedigree {
width:100%;
font-size:2em;
line-height:100%;
text-transform:none;
color: #542;
padding:.3em 0 .2em 0;
background-color: #FFF;
@@ -1383,13 +1402,13 @@ div#pedigree {
color: #FFF;
}
#CreatorInfo a:hover {
color: #FFF;
text-decoration: underline;
}
.calendar thead tr th.weekend,
.calendar thead tr th.weekday {
font-style:italic;
color: #000;
background-color: #BCEAF6;
color: #FFF;
background-color: #00029D;
border: solid 2px #000;
}
.calendar tfoot tr td {
@@ -1456,11 +1475,12 @@ div#pedigree {
margin:0 4%;
padding:.2em 0 .3em 0;
border-top: dashed 1px #000;
color: #000;
font: normal .8em serif;
}
.calendar tbody tr td ul li:first-child {
border:none;
}
/* Calendar : Birthday, Anniversary, Highlight */
.calendar tbody tr td ul li em {
font-style:normal;
+94 -464
View File
@@ -1,32 +1,37 @@
/*
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright 2008 Jason M. Simanek
# Copyright 2009 Stephane Charette
# Copyright (c) 2008-2010 Rob G. Healey <robhealey1@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
**************************************************************************************************
Copyright Holder and License
**************************************************************************************************
GRAMPS Cascading Style Sheet
Style Name: Basic - Cypress
Style Author: Jason Simanek (2008)
Note: Adapted from GRAMPS original Modern Style stylesheet with colors from the original 'Tranquil' stylesheet
**************************************************************************************************
This website was created with GRAMPS <http://www.gramps-project.org/>
--------------------------------------------------------------------------------------------------
GRAMPS is a Free Software Project for Genealogy, offering a professional
genealogy program, and a wiki open to all. It is a community project, created,
developed and governed by genealogists.
Go to <http://gramps-project.org/> to learn more!
--------------------------------------------------------------------------------------------------
Copyright 2008 Jason M. Simanek
Copyright 2009 Stephane Charette
This file is part of the GRAMPS program.
GRAMPS is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation, version 2 of the License.
GRAMPS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GRAMPS. If not, see <http://www.gnu.org/licenses/>.
--------------------------------------------------------------------------------------------------
Color Palette
--------------------------------------------------------------------------------------------------
@@ -40,17 +45,16 @@ white #FFF
# $Id$
NarrativeWeb Styles
-------------------------------------------------------------------------------------------- */
body#NarrativeWeb {
font-family: sans-serif;
color: #000;
background-color: #FFF;
}
/* General Elements
General Elements
----------------------------------------------------- */
body {
font-family:sans-serif;
color:#000;
margin:0;
padding:0;
background-color:#FFF;
}
div {
margin:0;
padding:0;
@@ -63,7 +67,7 @@ img {
background:none;
}
.content {
padding-top: .5cm;
padding-top: 1cm;
background-color:#FFF;
}
.content div.snapshot {
@@ -152,18 +156,15 @@ a:visited {
/* Header
----------------------------------------------------- */
div#header {
#header {
padding:15px 15px 15px 15px;
margin:0;
background-color:#454;
}
div#header a {
color: #FFF;
height: 1cm;
}
#SiteTitle {
margin:0;
padding:.5em 0 0.5em 10px;
font-size: 40px;
color:#E0E6E0;
font-style: italic;
margin:0 0 3px 0;
}
#header p {
font-size:1em;
@@ -172,64 +173,14 @@ div#header a {
margin:0;
}
/* Footer
----------------------------------------------------- */
div#footer {
width: 100%;
font-size: 12px;
height: 60px;
color: #E8E6E8;
border-top: solid 1px #454;
background-color: #454;
}
#footer a, #footer a:visited {
text-decoration:none;
color:#E0E6E0;
}
#footer a:hover {
text-decoration:underline;
background:none;
}
#footer img {
border:0;
margin:0 auto;
vertical-align:middle;
}
#footer p#createdate {
float:left;
width:40%;
text-align:left;
margin-left:10px;
}
#footer p#copyright {
float:right;
width:40%;
text-align:right;
margin-right:10px;
}
#footer p#copyright img {
margin-right:10px;
}
#user_footer {
width:70%;
float:left;
margin:1em;
}
#user_footer p {
font:normal 1em/1.2em serif;
margin:0;
padding:0;
}
/* Navigation
----------------------------------------------------- */
#navigation {
#navigation, #subnavigation {
margin:0;
padding:4px 0 0 0;
background-color:#454;
}
#navigation ul {
#navigation ul, #subnavigation ul {
list-style:none;
min-width:770px;
height:22px;
@@ -237,12 +188,12 @@ div#footer {
padding:0 0 0 12px;
border-bottom:1px solid #7C8F7C;
}
#navigation ul li {
#navigation ul li, #subnavigation ul li {
margin:0;
padding:0;
float:left;
}
#navigation ul li a {
#navigation ul li a, #subnavigation ul li a {
display:block;
font-size:12px;
line-height:100%;
@@ -253,14 +204,14 @@ div#footer {
padding:5px 5px;
background-color:#454;
}
#navigation ul li a:hover {
#navigation ul li a:hover, #subnavigation ul li a:hover {
color:#FFF;
padding-top:4px;
background-color:#9DBF9D;
border-top:solid 1px #454;
border-bottom:solid 1px #000;
}
#navigation ul li.CurrentSection a {
#navigation ul li.CurrentSection a, #subnavigation ul li.CurrentSection a {
color:#454;
padding-bottom:4px;
border-top:solid 1px #7C8F7C;
@@ -269,7 +220,7 @@ div#footer {
border-bottom:solid 1px #FFF;
background-color:#FFF;
}
#navigation ul li.CurrentSection a:hover {
#navigation ul li.CurrentSection a:hover, #subnavigation ul li.CurrentSection a:hover {
padding-top:5px;
background-color:#FFF;
}
@@ -289,11 +240,10 @@ div#alphabet ul {
padding: 0px 0px 0px 16px;
border-width: 2px 0px 4px 0px;
border-style: solid;
border-color: #000;
border-color: #FFF;
}
div#alphabet ul li:after {
content:" |";
color: #FFF;
}
div#alphabet ul li {
margin:0;
@@ -317,7 +267,7 @@ div#alphabet ul li a:hover {
----------------------------------------------------- */
table {
font-size:14px;
margin:0;
margin:0 15px;
padding:0;
border:none;
border-collapse:collapse;
@@ -537,99 +487,6 @@ table.individuallist tbody tr td.ColumnName a:hover {
padding:.1em 10px .3em 10px;
}
/* EventList and EventDetail
----------------------------------------------------- */
div#EventList, div#EventDetail { }
div#events table.eventlist {
margin-top: .3cm;
}
table.eventlist tbody tr.BeginName {
border-bottom: solid 1px #000;
}
table.eventlist tbody tr td {
padding: 4px 0px 4px 0px;
border-bottom: dashed 1px #000;
}
table.eventlist tbody tr td.ColumnEvent {
width: 10%;
}
table.eventlist tbody tr td.ColumnDate {
width: 10%;
}
table.eventlist tbody tr td.ColumnPlace {
width: 20%;
}
table.eventlist tbody tr td.ColumnDescription {
width: 20%;
}
table.eventlist tbody tr td.ColumnNotes {
width: 35%;
}
table.eventlist tbody tr td.ColumnSources {
width: 5%;
}
table.eventlist tbody tr td.ColumnPerson {
width: 35%;
}
table.eventlist tbody tr td.ColumnPartner {
width: 35%;
}
div#EventList table.eventlist tbody tr td.ColumnEvent a,
div#EventList table.eventlist tbody tr td.ColumnPerson a,
div#EventList table.eventlist tbody tr td.ColumnPartner a {
display: block;
padding: .9em 10px;
}
div#EventList table.alphaevent {
padding: .3em 0 .3em 0;
margin: 0;
}
div#EventList table.alphaevent tbody tr.BeginEvent {
border-top: solid 1px #000;
}
div#EventList table.alphaevent tbody tr td {
border-bottom: dashed 1px #000;
}
div#EventList table.alphaevent tbody tr td.ColumnType {
width: 15%;
}
div#EventList table.alphaevent tbody tr td.ColumnType a:hover {
background: none;
}
div#EventList table.alphaevent tbody tr td.ColumnGRAMPSID {
width: 12%;
}
div#EventList table.alphaevent tbody tr td.ColumnDate {
width: 20%;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson {
width: 60%;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson span.father,
div#EventList table.alphaevent tbody tr td.ColumnPerson span.mother {
display:block;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson span.mother:before {
content:"+ ";
}
div#EventDetail h3 {
font-size: 1em;
}
div#EventDetail table.eventlist {
margin: .5cm 0 .3cm 1.5cm;
width: 800px;
}
div#EventDetail table.eventlist tbody tr td.ColumnAttribute {
border-top: solid 1px #000;
font-weight: bold;
text-transform: uppercase;
width: 20%;
}
div#EventDetail table.eventlist tbody tr td.ColumnEvent {
border-top: solid 1px #000;
}
/* Gallery
----------------------------------------------------- */
#Gallery table.infolist tbody tr td.ColumnRowLabel, #Gallery table.infolist tbody tr td.ColumnDate {
@@ -763,7 +620,7 @@ table.download {
width:100%;
}
table.download img {
text-align:center;
float:center;
}
table.download thead tr th {
text-align:center;
@@ -804,71 +661,9 @@ table.download td.Modified {
font-weight:bold;
}
/* Repositories
------------------------------------------------------ */
div#RepositoryList {
margin: 0;
padding: 0;
}
div#RepositoryList table.repolist tbody tr td {
}
div#RepositoryList table.repolist tbody tr td a {
display: block;
padding: .3em 10px;
}
div#RepositoryList table.repolist tbody tr td.ColumnRowLabel {
width: 9%;
}
div#RepositoryList table.repolist tbody tr td.ColumnType {
width: 15%;
}
div#RepositoryList table.repolist tbody tr td.ColumnName {
background-color: #FFF;
}
/* Address Book
------------------------------------------------------ */
div#AddressBookList, AddressBookDetail {
margin: 0;
padding: 0;
}
div#AddressBookList table.addressbook {
margin: .3em 0 .3em 0;
}
div#AddressBookList tble.addressbook tbody tr.Totals td {
text-align: left;
background-color: #E0E0E6;
}
div#AddressBookList table.addressbook tbody tr td {
background-color: #9DBF9D;
text-align: center;
border: solid 1px #000;
}
div#AddressBookList table.addressbook tbody tr td.ColumnRowLabel {
width: 4%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnName {
background-color: #FFF;
text-align: left;
width: 70%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnName a {
display: block;
padding: 6px 0px 6px 0px;
}
div#AddressBookList table.addressbook tbody tr td.ColumnAddress {
width: 8%;
}
div#AddressBookList table.adressbook tbody tr td.ColumnResidence {
width: 8%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnWebLinks {
width: 8%;
}
/* Subsections
----------------------------------------------------- */
#Home, #Introduction {
#Home, #Introduction, {
padding:1.5em 0 3em 0;
}
#Home p, #Introduction p, #Contact p {
@@ -1003,45 +798,6 @@ div#addresses table.infolist tbody tr td.ColumnValue {
/* Subsections : Attributes
----------------------------------------------------- */
div#attributes {
margin: 0;
padding: 0;
}
table.attrlist {
width: 100%;
}
table.attrlist thead tr th.ColumnType {
border: none;
background: none;
}
table.attrlist thead tr th.ColumnAttribute {
border: none;
background: none;
}
table.attrlist tbody tr td {
background-color: #E6E6E0;
border-bottom: dashed 1px #000;
}
table.attrlist tbody tr td.ColumnType {
border: none;
background: none;
}
table.attrlist tbody tr td.ColumnAttribute {
border: none;
background: none;
}
table.attrlist tbody tr td.ColumnAttrType {
width: 15%;
}
table.attrlist tbody tr td.ColumnAttrValue {
width: 15%;
}
table.attrlist tbody tr td.ColumnAttrNotes {
width: 45%;
}
table.attrlist tbody tr td.ColumnAttrSources {
width: 15%;
}
/* Subsections : Gallery
----------------------------------------------------- */
@@ -1103,25 +859,6 @@ div#sourcerefs ol li ol {
/* Subsections : Weblinks
----------------------------------------------------- */
div#WebLinks {
margin : 0 auto;
padding: 0;
}
table.weblinks tr td {
background-color: #E0E6E0;
border-bottom: dashed 1px #000;
}
table.weblinks tr td.ColumnRowLabel {
width: 5%;
}
table.weblinks tr td.ColumnType {
width: 30%;
}
table.weblinks tr td.ColumnDescription {
background-color: #FFF;
width: 30%;
}
/* Subsections : Pedigree
----------------------------------------------------- */
@@ -1162,139 +899,56 @@ table.weblinks tr td.ColumnDescription {
font-weight:bold;
}
/* Subsections : Ancestors Tree
/* Footer
----------------------------------------------------- */
#tree {
page-break-before:always;
#footer {
clear:both;
width:100%;
font-size:12px;
line-height:130%;
color:#E0E6E0;
margin:0;
padding:0;
background-color:#454;
border-top:solid 1px #454;
}
#footer a, #footer a:visited {
text-decoration:none;
color:#E0E6E0;
}
#footer a:hover {
text-decoration:underline;
background:none;
}
#treeContainer {
position:relative;
z-index:1;
margin-bottom:1.4em;
#footer img {
border:0;
margin:0 auto;
vertical-align:middle;
}
#treeContainer div.boxbg {
position:absolute;
#footer p#createdate {
float:left;
width:40%;
text-align:left;
margin-left:10px;
}
#footer p#copyright {
float:right;
width:40%;
text-align:right;
margin-right:10px;
}
#footer p#copyright img {
margin-right:10px;
}
#user_footer {
width:70%;
float:left;
margin:1em;
}
#user_footer p {
font:normal 1em/1.2em serif;
margin:0;
padding:0;
background:none;
}
#treeContainer div.boxbg a,
#treeContainer div.boxbg span.unlinked {
position:relative;
z-index:10;
display:block;
font:normal .8em/1.4em sans-serif;
text-align:center;
text-decoration:none;
color:#000;
width:118px;
padding:5px 20px 7px 20px;
margin-left:16px;
background-color:#E0E6E0;
border:solid 1px #7C8F7C;
}
#treeContainer div.boxbg a.noThumb,
#treeContainer div.AncCol3 a,
#treeContainer div.AncCol4 a,
#treeContainer div.AncCol3 span.unlinked,
#treeContainer div.AncCol4 span.unlinked {
margin-top:10px;
}
#treeContainer div.boxbg a:hover {
position:relative;
z-index:999;
font-size:1em;
text-decoration:none;
width:190px;
margin-left:-20px;
padding:10px 25px 12px 25px;
border:solid 2px #454;
}
#treeContainer div.boxbg a:hover, #treeContainer div.AncCol3 a:hover, #treeContainer div.AncCol4 a:hover {
margin-top:-44px;
}
#treeContainer div.boxbg a.noThumb:hover {
margin-top:0;
}
#treeContainer div.AncCol0 a:hover {
margin-left:12px;
}
#treeContainer div.AncCol4 a:hover {
margin-left:-60px;
}
#treeContainer div.boxbg span.thumbnail {
display:block;
max-width:80px;
max-height:65px;
margin:0 auto;
padding:4px 0;
}
#treeContainer div.boxbg span.thumbnail img {
max-width:80px;
max-height:65px;
margin:0 auto;
}
#treeContainer div.boxbg a:hover span.thumbnail, #treeContainer div.boxbg a:hover span.thumbnail img {
height:80px;
}
#treeContainer div.AncCol3 span.thumbnail, #treeContainer div.AncCol4 span.thumbnail {
display:none;
}
#treeContainer div.boxbg a:hover span.thumbnail {
display:block;
}
#treeContainer div.male a,
#treeContainer div.male span.unlinked,
#treeContainer div.female a ,
#treeContainer div.female span.unlinked {
background-position:top right;
background-repeat:no-repeat;
}
#treeContainer div.male a,
#treeContainer div.male span.unlinked {
background-image:url(../images/Web_Gender_Male.png);
}
#treeContainer div.female a,
#treeContainer div.female span.unlinked {
background-image:url(../images/Web_Gender_Female.png);
}
.shadow {
display:none;
}
#tree div div.bvline {
position:absolute;
z-index:2;
height:3px;
margin:0 0 0 16px;
padding:0;
background-color:#7C8F7C;
}
#tree div div.bhline {
position:absolute;
z-index:2;
width:2px;
margin:0 0 0 16px;
padding:0;
background-color:#7C8F7C;
}
#tree div div.gvline {
position:absolute;
z-index:1;
height:3px;
margin:0 0 0 14px;
padding:0;
background-color:#E0E6E0;
}
#tree div div.ghline {
position:absolute;
z-index:1;
width:2px;
margin:0 0 0 14px;
padding:0;
background-color:#E0E6E0;
}
/* Calendar Styles
@@ -1447,27 +1101,3 @@ body#WebCal #CreatorInfo a, body#WebCal #CreatorInfo a:hover {
color:#9DBF9D;
background-color:#E0E6E0;
}
/* Calendar: OneDay
--------------------------------------------------------------------------------- */
body#OneDay h3 {
color: #000;
font-weight: bold;
text-align: center;
}
table.oneday {
margin: .3em 0 .3em 0;
padding: 0;
}
table.oneday tbody tr td {
border-bottom: dashed 1px #000;
}
table.oneday tbody tr td.ColumnRowLabel {
width: 5%;
}
table.oneday tbody tr td.ColumnText {
width: 85%;
}
table.oneday tbody tr td.ColumnEvent {
width: 10%;
}
+33 -404
View File
@@ -1,32 +1,37 @@
/*
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright 2008 Jason M. Simanek
# Copyright 2009 Stephane Charette
# Copyright (c) 2008-2010 Rob G. Healey <robhealey1@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
**************************************************************************************************
Copyright Holder and License
**************************************************************************************************
GRAMPS Cascading Style Sheet
Style Name: Basic - Lilac
Style Author: Jason M. Simanek (2008)
Note: Adapted from GRAMPS original Modern Style stylesheet with colors from the original 'Business' stylesheet
**************************************************************************************************
This website was created with GRAMPS <http://www.gramps-project.org/>
--------------------------------------------------------------------------------------------------
GRAMPS is a Free Software Project for Genealogy, offering a professional
genealogy program, and a wiki open to all. It is a community project, created,
developed and governed by genealogists.
Go to <http://gramps-project.org/> to learn more!
--------------------------------------------------------------------------------------------------
Copyright 2008 Jason M. Simanek
Copyright 2009 Stephane Charette
This file is part of the GRAMPS program.
GRAMPS is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation, version 2 of the License.
GRAMPS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GRAMPS. If not, see <http://www.gnu.org/licenses/>.
--------------------------------------------------------------------------------------------------
Color Palette
--------------------------------------------------------------------------------------------------
@@ -65,7 +70,7 @@ img {
background:none;
}
.content {
padding-top: .5cm;
padding-top: 1cm;
background-color:#FAFAFF;
}
.content div.snapshot {
@@ -226,7 +231,7 @@ a:visited {
div#alphabet {
width: 100%;
margin: 0;
background-color: #E8E0F9;
background-color: #E0E0E9;
}
div#alphabet ul {
list-style:none;
@@ -263,7 +268,7 @@ div#alphabet ul li a:hover {
----------------------------------------------------- */
table {
font-size:14px;
margin:0;
margin:0 15px;
padding:0;
border:none;
border-collapse:collapse;
@@ -483,101 +488,6 @@ table.individuallist tbody tr td.ColumnName a:hover {
padding:.1em 10px .3em 10px;
}
/* EventList and EventDetail
----------------------------------------------------- */
div#EventList, div#EventDetail {
padding: 0;
margin: 0 auto;
}
div#events table.eventlist {
margin-top: .3cm;
}
table.eventlist tbody tr.BeginName {
border-bottom: solid 1px #5D835F;
}
table.eventlist tbody tr td {
padding: 4px 0px 4px 0px;
border-bottom: dashed 1px #000;
}
table.eventlist tbody tr td.ColumnEvent {
width: 10%;
}
table.eventlist tbody tr td.ColumnDate {
width: 10%;
}
table.eventlist tbody tr td.ColumnPlace {
width: 20%;
}
table.eventlist tbody tr td.ColumnDescription {
width: 20%;
}
table.eventlist tbody tr td.ColumnNotes {
width: 35%;
}
table.eventlist tbody tr td.ColumnSources {
width: 5%;
}
table.eventlist tbody tr td.ColumnPerson {
width: 35%;
}
table.eventlist tbody tr td.ColumnPartner {
width: 35%;
}
div#EventList table.eventlist tbody tr td.ColumnEvent a,
div#EventList table.eventlist tbody tr td.ColumnPerson a,
div#EventList table.eventlist tbody tr td.ColumnPartner a {
display: block;
padding: .9em 10px;
}
div#EventList table.alphaevent {
padding: .3em 0 .3em 0;
margin: 0;
}
div#EventList table.alphaevent tbody tr.BeginEvent {
border-top: solid 1px #000;
}
div#EventList table.alphaevent tbody tr td {
border-bottom: dashed 1px #000;
}
div#EventList table.alphaevent tbody tr td.ColumnType {
width: 15%;
}
div#EventList table.alphaevent tbody tr td.ColumnType a:hover {
background: none;
}
div#EventList table.alphaevent tbody tr td.ColumnGRAMPSID {
width: 12%;
}
div#EventList table.alphaevent tbody tr td.ColumnDate {
width: 20%;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson {
width: 60%;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson span.father,
div#EventList table.alphaevent tbody tr td.ColumnPerson span.mother {
display:block;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson span.mother:before {
content:"+ ";
}
div#EventDetail h3 {
font-size: 1em;
}
div#EventDetail table.eventlist {
margin: .5cm 0 .3cm 1.5cm;
width: 800px;
}
div#EventDetail table.eventlist tbody tr td.ColumnAttribute {
border-top: solid 1px #5D835F;
font-weight: bold;
text-transform: uppercase;
width: 20%;
}
div#EventDetail table.eventlist tbody tr td.ColumnEvent {
border-top: solid 1px #000;
}
/* Gallery
----------------------------------------------------- */
#Gallery table.infolist tbody tr td.ColumnRowLabel, #Gallery table.infolist tbody tr td.ColumnDate {
@@ -703,16 +613,15 @@ div#EventDetail table.eventlist tbody tr td.ColumnEvent {
/* Download
----------------------------------------------------- */
#Download {
padding: 1cm;
padding:1cm;
height:396px;
}
table.download {
padding-top: .5cm;
border:solid 1px #000;
border:solid 2px #000;
width:100%;
}
table.download img {
text-align:center;
float:center;
}
table.download thead tr th {
text-align:center;
@@ -753,69 +662,6 @@ table.download td.Modified {
font-weight:bold;
}
/* Repositories
------------------------------------------------------ */
div#RepositoryList {
margin: 0;
padding: 0;
}
div#RepositoryList table.repolist tbody tr td {
background-color: #D8F3D6;
}
div#RepositoryList table.repolist tbody tr td a {
display: block;
padding: .3em 10px;
}
div#RepositoryList table.repolist tbody tr td.ColumnRowLabel {
width: 9%;
}
div#RepositoryList table.repolist tbody tr td.ColumnType {
width: 15%;
}
div#RepositoryList table.repolist tbody tr td.ColumnName {
background-color: #FFF;
}
/* Address Book
------------------------------------------------------ */
div#AddressBookList, AddressBookDetail {
margin: 0;
padding: 0;
}
div#AddressBookList table.addressbook {
margin: .3em 0 .3em 0;
}
div#AddressBookList tble.addressbook tbody tr.Totals td {
text-align: left;
background-color: #E0E0E9;
}
div#AddressBookList table.addressbook tbody tr td {
background-color: #B4B4CB;
text-align: center;
border: solid 1px #000;
}
div#AddressBookList table.addressbook tbody tr td.ColumnRowLabel {
width: 4%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnName {
background-color: #FFF;
text-align: left;
width: 70%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnName a {
display: block;
padding: 6px 0px 6px 0px;
}
div#AddressBookList table.addressbook tbody tr td.ColumnAddress {
width: 8%;
}
div#AddressBookList table.adressbook tbody tr td.ColumnResidence {
width: 8%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnWebLinks {
width: 8%;
}
/* Subsections
----------------------------------------------------- */
#Home, #Introduction, #Contact {
@@ -953,45 +799,6 @@ div#addresses table.infolist tbody tr td.ColumnValue {
/* Subsections : Attributes
----------------------------------------------------- */
div#attributes {
margin: 0;
padding: 0;
}
table.attrlist {
width: 100%;
}
table.attrlist thead tr th.ColumnType {
border: none;
background: none;
}
table.attrlist thead tr th.ColumnAttribute {
border: none;
background: none;
}
table.attrlist tbody tr td {
background-color: #E0E0E9;
border-bottom: dashed 1px #000;
}
table.attrlist tbody tr td.ColumnType {
border: none;
background: none;
}
table.attrlist tbody tr td.ColumnAttribute {
border: none;
background: none;
}
table.attrlist tbody tr td.ColumnAttrType {
width: 15%;
}
table.attrlist tbody tr td.ColumnAttrValue {
width: 15%;
}
table.attrlist tbody tr td.ColumnAttrNotes {
width: 45%;
}
table.attrlist tbody tr td.ColumnAttrSources {
width: 15%;
}
/* Subsections : Gallery
----------------------------------------------------- */
@@ -1053,25 +860,6 @@ div#sourcerefs ol li ol {
/* Subsections : Weblinks
----------------------------------------------------- */
div#WebLinks {
margin : 0 auto;
padding: 0;
}
table.weblinks tr td {
background-color: #E6E0E9;
border-bottom: dashed 1px #000;
}
table.weblinks tr td.ColumnRowLabel {
width: 5%;
}
table.weblinks tr td.ColumnType {
width: 30%;
}
table.weblinks tr td.ColumnDescription {
background-color: #FFF;
width: 30%;
}
/* Subsections : Pedigree
----------------------------------------------------- */
@@ -1112,147 +900,12 @@ table.weblinks tr td.ColumnDescription {
font-weight:bold;
}
/* Subsections : Ancestors Tree
----------------------------------------------------- */
#tree {
page-break-before:always;
margin:0;
padding:0;
background:none;
}
#treeContainer {
position:relative;
z-index:1;
margin-bottom:1.4em;
}
#treeContainer div.boxbg {
position:absolute;
margin:0;
padding:0;
background:none;
}
#treeContainer div.boxbg a,
#treeContainer div.boxbg span.unlinked {
position:relative;
z-index:10;
display:block;
font:normal .8em/1.4em sans-serif;
text-align:center;
text-decoration:none;
color:#000;
width:118px;
padding:5px 20px 7px 20px;
margin-left:16px;
background-color:#E0E0E9;
border:solid 1px #669;
}
#treeContainer div.boxbg a.noThumb,
#treeContainer div.AncCol3 a,
#treeContainer div.AncCol4 a,
#treeContainer div.AncCol3 span.unlinked,
#treeContainer div.AncCol4 span.unlinked {
margin-top:10px;
}
#treeContainer div.boxbg a:hover {
position:relative;
z-index:999;
font-size:1em;
text-decoration:none;
width:190px;
margin-left:-20px;
padding:10px 25px 12px 25px;
border:solid 2px #2E2E61;
}
#treeContainer div.boxbg a:hover, #treeContainer div.AncCol3 a:hover, #treeContainer div.AncCol4 a:hover {
margin-top:-44px;
}
#treeContainer div.boxbg a.noThumb:hover {
margin-top:0;
}
#treeContainer div.AncCol0 a:hover {
margin-left:12px;
}
#treeContainer div.AncCol4 a:hover {
margin-left:-60px;
}
#treeContainer div.boxbg span.thumbnail {
display:block;
max-width:80px;
max-height:65px;
margin:0 auto;
padding:4px 0;
}
#treeContainer div.boxbg span.thumbnail img {
max-width:80px;
max-height:65px;
margin:0 auto;
}
#treeContainer div.boxbg a:hover span.thumbnail, #treeContainer div.boxbg a:hover span.thumbnail img {
height:80px;
}
#treeContainer div.AncCol3 span.thumbnail, #treeContainer div.AncCol4 span.thumbnail {
display:none;
}
#treeContainer div.boxbg a:hover span.thumbnail {
display:block;
}
#treeContainer div.male a,
#treeContainer div.male span.unlinked,
#treeContainer div.female a ,
#treeContainer div.female span.unlinked {
background-position:top right;
background-repeat:no-repeat;
}
#treeContainer div.male a,
#treeContainer div.male span.unlinked {
background-image:url(../images/Web_Gender_Male.png);
}
#treeContainer div.female a,
#treeContainer div.female span.unlinked {
background-image:url(../images/Web_Gender_Female.png);
}
.shadow {
display:none;
}
#tree div div.bvline {
position:absolute;
z-index:2;
height:3px;
margin:0 0 0 16px;
padding:0;
background-color:#669;
}
#tree div div.bhline {
position:absolute;
z-index:2;
width:2px;
margin:0 0 0 16px;
padding:0;
background-color:#669;
}
#tree div div.gvline {
position:absolute;
z-index:1;
height:3px;
margin:0 0 0 14px;
padding:0;
background-color:#E0E0E9;
}
#tree div div.ghline {
position:absolute;
z-index:1;
width:2px;
margin:0 0 0 14px;
padding:0;
background-color:#E0E0E9;
}
/* Footer
----------------------------------------------------- */
#footer {
clear:both;
width:100%;
height: 60px;
font-size:12px;
line-height:130%;
color:#2E2E61;
@@ -1467,27 +1120,3 @@ body#fullyearlinked table.calendar thead tr th.monthName {
body#fullyearlinked table.calendar tbody tr td {
height:3em;
}
/* Calendar: OneDay
--------------------------------------------------------------------------------- */
body#OneDay h3 {
color: #000;
font-weight: bold;
text-align: center;
}
table.oneday {
margin: .3em 0 .3em 0;
padding: 0;
}
table.oneday tbody tr td {
border-bottom: dashed 1px #000;
}
table.oneday tbody tr td.ColumnRowLabel {
width: 5%;
}
table.oneday tbody tr td.ColumnText {
width: 85%;
}
table.oneday tbody tr td.ColumnEvent {
width: 10%;
}
+29 -403
View File
@@ -1,27 +1,6 @@
/*
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright 2008 Jason M. Simanek
# Copyright 2009 Stephane Charette
# Copyright (c) 2008-2010 Rob G. Healey <robhealey1@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
**************************************************************************************************
Copyright Holder and License
**************************************************************************************************
GRAMPS Cascading Style Sheet
Style Name: Basic-Peach Stylesheet
@@ -29,7 +8,30 @@ Style Author: Jason M. Simanek (2008)
Note: Adapted from GRAMPS original Modern Style stylesheet with a new orange color scheme.
**************************************************************************************************
This website was created with GRAMPS <http://www.gramps-project.org/>
--------------------------------------------------------------------------------------------------
GRAMPS is a Free Software Project for Genealogy, offering a professional
genealogy program, and a wiki open to all. It is a community project, created,
developed and governed by genealogists.
Go to <http://gramps-project.org/> to learn more!
--------------------------------------------------------------------------------------------------
Copyright 2008 Jason M. Simanek
Copyright 2009 Stephane Charette
This file is part of the GRAMPS program.
GRAMPS is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation, version 2 of the License.
GRAMPS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GRAMPS. If not, see <http://www.gnu.org/licenses/>.
--------------------------------------------------------------------------------------------------
Color Palette
@@ -69,7 +71,7 @@ img {
background:none;
}
.content {
padding-top: .5cm;
padding-top: 1cm;
background-color:#FFFBE7;
}
.content div.snapshot {
@@ -163,7 +165,7 @@ a:visited {
#header {
padding:15px 15px 2px 15px;
margin:0;
background-color: #FFE09F;
background-color:#FFE09F;
}
#SiteTitle {
color:#EA8414;
@@ -267,7 +269,7 @@ div#alphabet ul li a:hover {
----------------------------------------------------- */
table {
font-size:14px;
margin:0;
margin:0 15px;
padding:0;
border:none;
border-collapse:collapse;
@@ -487,101 +489,6 @@ table.individuallist tbody tr td.ColumnName a:hover {
padding:.1em 10px .3em 10px;
}
/* EventList and EventDetail
----------------------------------------------------- */
div#EventList, div#EventDetail {
padding: 0;
margin: 0 auto;
}
div#events table.eventlist {
margin-top: .3cm;
}
table.eventlist tbody tr.BeginName {
border-bottom: solid 1px #000;
}
table.eventlist tbody tr td {
padding: 4px 0px 4px 0px;
border-bottom: dashed 1px #000;
}
table.eventlist tbody tr td.ColumnEvent {
width: 10%;
}
table.eventlist tbody tr td.ColumnDate {
width: 10%;
}
table.eventlist tbody tr td.ColumnPlace {
width: 20%;
}
table.eventlist tbody tr td.ColumnDescription {
width: 20%;
}
table.eventlist tbody tr td.ColumnNotes {
width: 35%;
}
table.eventlist tbody tr td.ColumnSources {
width: 5%;
}
table.eventlist tbody tr td.ColumnPerson {
width: 35%;
}
table.eventlist tbody tr td.ColumnPartner {
width: 35%;
}
div#EventList table.eventlist tbody tr td.ColumnEvent a,
div#EventList table.eventlist tbody tr td.ColumnPerson a,
div#EventList table.eventlist tbody tr td.ColumnPartner a {
display: block;
padding: .9em 10px;
}
div#EventList table.alphaevent {
padding: .3em 0 .3em 0;
margin: 0;
}
div#EventList table.alphaevent tbody tr.BeginEvent {
border-top: solid 1px #000;
}
div#EventList table.alphaevent tbody tr td {
border-bottom: dashed 1px #000;
}
div#EventList table.alphaevent tbody tr td.ColumnType {
width: 15%;
}
div#EventList table.alphaevent tbody tr td.ColumnType a:hover {
background: none;
}
div#EventList table.alphaevent tbody tr td.ColumnGRAMPSID {
width: 12%;
}
div#EventList table.alphaevent tbody tr td.ColumnDate {
width: 20%;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson {
width: 60%;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson span.father,
div#EventList table.alphaevent tbody tr td.ColumnPerson span.mother {
display:block;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson span.mother:before {
content:"+ ";
}
div#EventDetail h3 {
font-size: 1em;
}
div#EventDetail table.eventlist {
margin: .5cm 0 .3cm 1.5cm;
width: 800px;
}
div#EventDetail table.eventlist tbody tr td.ColumnAttribute {
border-top: solid 1px #000;
font-weight: bold;
text-transform: uppercase;
width: 20%;
}
div#EventDetail table.eventlist tbody tr td.ColumnEvent {
border-top: solid 1px #000;
}
/* Gallery
----------------------------------------------------- */
#Gallery table.infolist tbody tr td.ColumnRowLabel, #Gallery table.infolist tbody tr td.ColumnDate {
@@ -715,7 +622,7 @@ table.download {
width:100%;
}
table.download img {
text-align:center;
float:center;
}
table.download thead tr th {
text-align:center;
@@ -756,69 +663,6 @@ table.download td.Modified {
font-weight:bold;
}
/* Repositories
------------------------------------------------------ */
div#RepositoryList {
margin: 0;
padding: 0;
}
div#RepositoryList table.repolist tbody tr td {
background-color: #FFE09F;
}
div#RepositoryList table.repolist tbody tr td a {
display: block;
padding: .3em 10px;
}
div#RepositoryList table.repolist tbody tr td.ColumnRowLabel {
width: 9%;
}
div#RepositoryList table.repolist tbody tr td.ColumnType {
width: 15%;
}
div#RepositoryList table.repolist tbody tr td.ColumnName {
background-color: #FFF;
}
/* Address Book
------------------------------------------------------ */
div#AddressBookList, AddressBookDetail {
margin: 0;
padding: 0;
}
div#AddressBookList table.addressbook {
margin: .3em 0 .3em 0;
}
div#AddressBookList tble.addressbook tbody tr.Totals td {
text-align: left;
background-color: #FFE09F;
}
div#AddressBookList table.addressbook tbody tr td {
background-color: #FFE09F;
text-align: center;
border: solid 1px #000;
}
div#AddressBookList table.addressbook tbody tr td.ColumnRowLabel {
width: 4%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnName {
background-color: #FFF;
text-align: left;
width: 70%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnName a {
display: block;
padding: 6px 0px 6px 0px;
}
div#AddressBookList table.addressbook tbody tr td.ColumnAddress {
width: 8%;
}
div#AddressBookList table.adressbook tbody tr td.ColumnResidence {
width: 8%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnWebLinks {
width: 8%;
}
/* Subsections
----------------------------------------------------- */
#Home, #Introduction, #Contact {
@@ -956,45 +800,6 @@ div#addresses table.infolist tbody tr td.ColumnValue {
/* Subsections : Attributes
----------------------------------------------------- */
div#attributes {
margin: 0;
padding: 0;
}
table.attrlist {
width: 100%;
}
table.attrlist thead tr th.ColumnType {
border: none;
background: none;
}
table.attrlist thead tr th.ColumnAttribute {
border: none;
background: none;
}
table.attrlist tbody tr td {
background-color: #FFE09F;
border-bottom: dashed 1px #000;
}
table.attrlist tbody tr td.ColumnType {
border: none;
background: none;
}
table.attrlist tbody tr td.ColumnAttribute {
border: none;
background: none;
}
table.attrlist tbody tr td.ColumnAttrType {
width: 15%;
}
table.attrlist tbody tr td.ColumnAttrValue {
width: 15%;
}
table.attrlist tbody tr td.ColumnAttrNotes {
width: 45%;
}
table.attrlist tbody tr td.ColumnAttrSources {
width: 15%;
}
/* Subsections : Gallery
----------------------------------------------------- */
@@ -1056,25 +861,6 @@ div#sourcerefs ol li ol {
/* Subsections : Weblinks
----------------------------------------------------- */
div#WebLinks {
margin : 0 auto;
padding: 0;
}
table.weblinks tr td {
background-color: #FFE09F;
border-bottom: dashed 1px #000;
}
table.weblinks tr td.ColumnRowLabel {
width: 5%;
}
table.weblinks tr td.ColumnType {
width: 30%;
}
table.weblinks tr td.ColumnDescription {
background-color: #FFF;
width: 30%;
}
/* Subsections : Pedigree
----------------------------------------------------- */
@@ -1115,147 +901,11 @@ table.weblinks tr td.ColumnDescription {
font-weight:bold;
}
/* Subsections : Ancestors Tree
----------------------------------------------------- */
#tree {
page-break-before:always;
margin:0;
padding:0;
background:none;
}
#treeContainer {
position:relative;
z-index:1;
margin-bottom:1.4em;
}
#treeContainer div.boxbg {
position:absolute;
margin:0;
padding:0;
background:none;
}
#treeContainer div.boxbg a,
#treeContainer div.boxbg span.unlinked {
position:relative;
z-index:10;
display:block;
font:normal .8em/1.4em sans-serif;
text-align:center;
text-decoration:none;
color:#36220B;
width:118px;
padding:5px 20px 7px 20px;
margin-left:16px;
background-color:#FFE09F;
border:solid 1px #8C581C;
}
#treeContainer div.boxbg a.noThumb,
#treeContainer div.AncCol3 a,
#treeContainer div.AncCol4 a,
#treeContainer div.AncCol3 span.unlinked,
#treeContainer div.AncCol4 span.unlinked {
margin-top:10px;
}
#treeContainer div.boxbg a:hover {
position:relative;
z-index:999;
font-size:1em;
text-decoration:none;
width:190px;
margin-left:-20px;
padding:10px 25px 12px 25px;
border:solid 2px #8C581C;
}
#treeContainer div.boxbg a:hover, #treeContainer div.AncCol3 a:hover, #treeContainer div.AncCol4 a:hover {
margin-top:-44px;
}
#treeContainer div.boxbg a.noThumb:hover {
margin-top:0;
}
#treeContainer div.AncCol0 a:hover {
margin-left:12px;
}
#treeContainer div.AncCol4 a:hover {
margin-left:-60px;
}
#treeContainer div.boxbg span.thumbnail {
display:block;
max-width:80px;
max-height:65px;
margin:0 auto;
padding:4px 0;
}
#treeContainer div.boxbg span.thumbnail img {
max-width:80px;
max-height:65px;
margin:0 auto;
}
#treeContainer div.boxbg a:hover span.thumbnail, #treeContainer div.boxbg a:hover span.thumbnail img {
height:80px;
}
#treeContainer div.AncCol3 span.thumbnail, #treeContainer div.AncCol4 span.thumbnail {
display:none;
}
#treeContainer div.boxbg a:hover span.thumbnail {
display:block;
}
#treeContainer div.male a,
#treeContainer div.male span.unlinked,
#treeContainer div.female a ,
#treeContainer div.female span.unlinked {
background-position:top right;
background-repeat:no-repeat;
}
#treeContainer div.male a,
#treeContainer div.male span.unlinked {
background-image:url(../images/Web_Gender_Male.png);
}
#treeContainer div.female a,
#treeContainer div.female span.unlinked {
background-image:url(../images/Web_Gender_Female.png);
}
.shadow {
display:none;
}
#tree div div.bvline {
position:absolute;
z-index:2;
height:3px;
margin:0 0 0 16px;
padding:0;
background-color:#EA8414;
}
#tree div div.bhline {
position:absolute;
z-index:2;
width:2px;
margin:0 0 0 16px;
padding:0;
background-color:#EA8414;
}
#tree div div.gvline {
position:absolute;
z-index:1;
height:3px;
margin:0 0 0 14px;
padding:0;
background-color:#FFE09F;
}
#tree div div.ghline {
position:absolute;
z-index:1;
width:2px;
margin:0 0 0 14px;
padding:0;
background-color:#FFE09F;
}
/* Footer
----------------------------------------------------- */
#footer {
clear:both;
width:100%;
height: 60px;
font-size:12px;
line-height:130%;
color:#8C581C;
@@ -1470,27 +1120,3 @@ body#fullyearlinked table.calendar thead tr th.monthName {
body#fullyearlinked table.calendar tbody tr td {
height:3em;
}
/* Calendar: OneDay
--------------------------------------------------------------------------------- */
body#OneDay h3 {
color: #000;
font-weight: bold;
text-align: center;
}
table.oneday {
margin: .3em 0 .3em 0;
padding: 0;
}
table.oneday tbody tr td {
border-bottom: dashed 1px #000;
}
table.oneday tbody tr td.ColumnRowLabel {
width: 5%;
}
table.oneday tbody tr td.ColumnText {
width: 85%;
}
table.oneday tbody tr td.ColumnEvent {
width: 10%;
}
+32 -403
View File
@@ -1,33 +1,37 @@
/*
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright 2008 Jason M. Simanek
# Copyright 2009 Stephane Charette
# Copyright (c) 2008-2010 Rob G. Healey <robhealey1@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
**************************************************************************************************
Copyright Holder and License
**************************************************************************************************
GRAMPS Cascading Style Sheet
Style Name: Basic-Spruce Stylesheet
Style Author: Jason M. Simanek (2008)
Note: Adapted from GRAMPS original Modern Style stylesheet with a new blue color scheme.
**************************************************************************************************
**************************************************************************************************
This website was created with GRAMPS <http://www.gramps-project.org/>
--------------------------------------------------------------------------------------------------
GRAMPS is a Free Software Project for Genealogy, offering a professional
genealogy program, and a wiki open to all. It is a community project, created,
developed and governed by genealogists.
Go to <http://gramps-project.org/> to learn more!
--------------------------------------------------------------------------------------------------
Copyright 2008 Jason M. Simanek
Copyright 2009 Stephane Charette
This file is part of the GRAMPS program.
GRAMPS is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation, version 2 of the License.
GRAMPS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GRAMPS. If not, see <http://www.gnu.org/licenses/>.
--------------------------------------------------------------------------------------------------
Color Palette
@@ -67,7 +71,7 @@ img {
background:none;
}
.content {
padding-top: .5cm;
padding-top: 1cm;
background-color:#FFF;
}
.content div.snapshot {
@@ -228,7 +232,7 @@ a:visited {
div#alphabet {
width: 100%;
margin: 0;
background-color: #EAFFE4;
background-color: #EAFFF4;
}
div#alphabet ul {
list-style:none;
@@ -265,7 +269,7 @@ div#alphabet ul li a:hover {
----------------------------------------------------- */
table {
font-size:14px;
margin:0;
margin:0 15px;
padding:0;
border:none;
border-collapse:collapse;
@@ -485,101 +489,6 @@ table.individuallist tbody tr td.ColumnName a:hover {
padding:.1em 10px .3em 10px;
}
/* EventList and EventDetail
----------------------------------------------------- */
div#EventList, div#EventDetail {
padding: 0;
margin: 0 auto;
}
div#events table.eventlist {
margin-top: .3cm;
}
table.eventlist tbody tr.BeginName {
border-bottom: solid 1px #000;
}
table.eventlist tbody tr td {
padding: 4px 0px 4px 0px;
border-bottom: dashed 1px #000;
}
table.eventlist tbody tr td.ColumnEvent {
width: 10%;
}
table.eventlist tbody tr td.ColumnDate {
width: 10%;
}
table.eventlist tbody tr td.ColumnPlace {
width: 20%;
}
table.eventlist tbody tr td.ColumnDescription {
width: 20%;
}
table.eventlist tbody tr td.ColumnNotes {
width: 35%;
}
table.eventlist tbody tr td.ColumnSources {
width: 5%;
}
table.eventlist tbody tr td.ColumnPerson {
width: 35%;
}
table.eventlist tbody tr td.ColumnPartner {
width: 35%;
}
div#EventList table.eventlist tbody tr td.ColumnEvent a,
div#EventList table.eventlist tbody tr td.ColumnPerson a,
div#EventList table.eventlist tbody tr td.ColumnPartner a {
display: block;
padding: .9em 10px;
}
div#EventList table.alphaevent {
padding: .3em 0 .3em 0;
margin: 0;
}
div#EventList table.alphaevent tbody tr.BeginEvent {
border-top: solid 1px #000;
}
div#EventList table.alphaevent tbody tr td {
border-bottom: dashed 1px #000;
}
div#EventList table.alphaevent tbody tr td.ColumnType {
width: 15%;
}
div#EventList table.alphaevent tbody tr td.ColumnType a:hover {
background: none;
}
div#EventList table.alphaevent tbody tr td.ColumnGRAMPSID {
width: 12%;
}
div#EventList table.alphaevent tbody tr td.ColumnDate {
width: 20%;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson {
width: 60%;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson span.father,
div#EventList table.alphaevent tbody tr td.ColumnPerson span.mother {
display:block;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson span.mother:before {
content:"+ ";
}
div#EventDetail h3 {
font-size: 1em;
}
div#EventDetail table.eventlist {
margin: .5cm 0 .3cm 1.5cm;
width: 800px;
}
div#EventDetail table.eventlist tbody tr td.ColumnAttribute {
border-top: solid 1px #000;
font-weight: bold;
text-transform: uppercase;
width: 20%;
}
div#EventDetail table.eventlist tbody tr td.ColumnEvent {
border-top: solid 1px #000;
}
/* Gallery
----------------------------------------------------- */
#Gallery table.infolist tbody tr td.ColumnRowLabel, #Gallery table.infolist tbody tr td.ColumnDate {
@@ -713,7 +622,7 @@ table.download {
width:100%;
}
table.download img {
text-align:center;
float:center;
}
table.download thead tr th {
text-align:center;
@@ -754,69 +663,6 @@ table.download td.Modified {
font-weight:bold;
}
/* Repositories
------------------------------------------------------ */
div#RepositoryList {
margin: 0;
padding: 0;
}
div#RepositoryList table.repolist tbody tr td {
background-color: #EAFFE4;
}
div#RepositoryList table.repolist tbody tr td a {
display: block;
padding: .3em 10px;
}
div#RepositoryList table.repolist tbody tr td.ColumnRowLabel {
width: 9%;
}
div#RepositoryList table.repolist tbody tr td.ColumnType {
width: 15%;
}
div#RepositoryList table.repolist tbody tr td.ColumnName {
background-color: #FFF;
}
/* Address Book
------------------------------------------------------ */
div#AddressBookList, AddressBookDetail {
margin: 0;
padding: 0;
}
div#AddressBookList table.addressbook {
margin: .3em 0 .3em 0;
}
div#AddressBookList tble.addressbook tbody tr.Totals td {
text-align: left;
background-color: #BFD0EA;
}
div#AddressBookList table.addressbook tbody tr td {
background-color: #BFD0EA;
text-align: center;
border: solid 1px #000;
}
div#AddressBookList table.addressbook tbody tr td.ColumnRowLabel {
width: 4%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnName {
background-color: #FFF;
text-align: left;
width: 70%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnName a {
display: block;
padding: 6px 0px 6px 0px;
}
div#AddressBookList table.addressbook tbody tr td.ColumnAddress {
width: 8%;
}
div#AddressBookList table.adressbook tbody tr td.ColumnResidence {
width: 8%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnWebLinks {
width: 8%;
}
/* Subsections
----------------------------------------------------- */
#Home, #Introduction, #Contact {
@@ -954,45 +800,6 @@ div#addresses table.infolist tbody tr td.ColumnValue {
/* Subsections : Attributes
----------------------------------------------------- */
div#attributes {
margin: 0;
padding: 0;
}
table.attrlist {
width: 100%;
}
table.attrlist thead tr th.ColumnType {
border: none;
background: none;
}
table.attrlist thead tr th.ColumnAttribute {
border: none;
background: none;
}
table.attrlist tbody tr td {
background-color: #EAEEF4;
border-bottom: dashed 1px #000;
}
table.attrlist tbody tr td.ColumnType {
border: none;
background: none;
}
table.attrlist tbody tr td.ColumnAttribute {
border: none;
background: none;
}
table.attrlist tbody tr td.ColumnAttrType {
width: 15%;
}
table.attrlist tbody tr td.ColumnAttrValue {
width: 15%;
}
table.attrlist tbody tr td.ColumnAttrNotes {
width: 45%;
}
table.attrlist tbody tr td.ColumnAttrSources {
width: 15%;
}
/* Subsections : Gallery
----------------------------------------------------- */
@@ -1054,24 +861,6 @@ div#sourcerefs ol li ol {
/* Subsections : Weblinks
----------------------------------------------------- */
div#WebLinks {
margin : 0 auto;
padding: 0;
}
table.weblinks tr td {
border-bottom: dashed 1px #000;
}
table.weblinks tr td.ColumnRowLabel {
width: 5%;
}
table.weblinks tr td.ColumnType {
width: 30%;
}
table.weblinks tr td.ColumnDescription {
background-color: #FFF;
width: 30%;
}
/* Subsections : Pedigree
----------------------------------------------------- */
@@ -1112,153 +901,17 @@ table.weblinks tr td.ColumnDescription {
font-weight:bold;
}
/* Subsections : Ancestors Tree
----------------------------------------------------- */
#tree {
page-break-before:always;
margin:0;
padding:0;
background:none;
}
#treeContainer {
position:relative;
z-index:1;
margin-bottom:1.4em;
}
#treeContainer div.boxbg {
position:absolute;
margin:0;
padding:0;
background:none;
}
#treeContainer div.boxbg a,
#treeContainer div.boxbg span.unlinked {
position:relative;
z-index:10;
display:block;
font:normal .8em/1.4em sans-serif;
text-align:center;
text-decoration:none;
color:#000;
width:118px;
padding:5px 20px 7px 20px;
margin-left:16px;
background-color:#EAEEF4;
border:solid 1px #7CA3DD;
}
#treeContainer div.boxbg a.noThumb,
#treeContainer div.AncCol3 a,
#treeContainer div.AncCol4 a,
#treeContainer div.AncCol3 span.unlinked,
#treeContainer div.AncCol4 span.unlinked {
margin-top:10px;
}
#treeContainer div.boxbg a:hover {
position:relative;
z-index:999;
font-size:1em;
text-decoration:none;
width:190px;
margin-left:-20px;
padding:10px 25px 12px 25px;
border:solid 2px #204D91;
}
#treeContainer div.boxbg a:hover, #treeContainer div.AncCol3 a:hover, #treeContainer div.AncCol4 a:hover {
margin-top:-44px;
}
#treeContainer div.boxbg a.noThumb:hover {
margin-top:0;
}
#treeContainer div.AncCol0 a:hover {
margin-left:12px;
}
#treeContainer div.AncCol4 a:hover {
margin-left:-60px;
}
#treeContainer div.boxbg span.thumbnail {
display:block;
max-width:80px;
max-height:65px;
margin:0 auto;
padding:4px 0;
}
#treeContainer div.boxbg span.thumbnail img {
max-width:80px;
max-height:65px;
margin:0 auto;
}
#treeContainer div.boxbg a:hover span.thumbnail, #treeContainer div.boxbg a:hover span.thumbnail img {
height:80px;
}
#treeContainer div.AncCol3 span.thumbnail, #treeContainer div.AncCol4 span.thumbnail {
display:none;
}
#treeContainer div.boxbg a:hover span.thumbnail {
display:block;
}
#treeContainer div.male a,
#treeContainer div.male span.unlinked,
#treeContainer div.female a ,
#treeContainer div.female span.unlinked {
background-position:top right;
background-repeat:no-repeat;
}
#treeContainer div.male a,
#treeContainer div.male span.unlinked {
background-image:url(../images/Web_Gender_Male.png);
}
#treeContainer div.female a,
#treeContainer div.female span.unlinked {
background-image:url(../images/Web_Gender_Female.png);
}
.shadow {
display:none;
}
#tree div div.bvline {
position:absolute;
z-index:2;
height:3px;
margin:0 0 0 16px;
padding:0;
background-color:#7CA3DD;
}
#tree div div.bhline {
position:absolute;
z-index:2;
width:2px;
margin:0 0 0 16px;
padding:0;
background-color:#7CA3DD;
}
#tree div div.gvline {
position:absolute;
z-index:1;
height:3px;
margin:0 0 0 14px;
padding:0;
background-color:#EAEEF4;
}
#tree div div.ghline {
position:absolute;
z-index:1;
width:2px;
margin:0 0 0 14px;
padding:0;
background-color:#EAEEF4;
}
/* Footer
----------------------------------------------------- */
#footer {
clear:both;
width:100%;
height: 100px;
font-size:12px;
line-height:130%;
color:#204D91;
margin:0;
padding:15px 0 0 0;
background-color: #BFD0EA;
background-color:#BFD0EA;
border-top:solid 1px #204D91;
}
#footer a, #footer a:visited {
@@ -1467,27 +1120,3 @@ body#fullyearlinked table.calendar thead tr th.monthName {
body#fullyearlinked table.calendar tbody tr td {
height:3em;
}
/* Calendar: OneDay
--------------------------------------------------------------------------------- */
body#OneDay h3 {
color: #000;
font-weight: bold;
text-align: center;
}
table.oneday {
margin: .3em 0 .3em 0;
padding: 0;
}
table.oneday tbody tr td {
border-bottom: dashed 1px #000;
}
table.oneday tbody tr td.ColumnRowLabel {
width: 5%;
}
table.oneday tbody tr td.ColumnText {
width: 85%;
}
table.oneday tbody tr td.ColumnEvent {
width: 10%;
}
+65 -453
View File
@@ -1,33 +1,37 @@
/*
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright 2008 Jason M. Simanek
# Copyright 2009 Stephane Charette
# Copyright (c) 2008-2010 Rob G. healey <robhealey1@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
*******************************************************************************
----------------------------------------------------------------------------
GRAMPS Cascading Style Sheet
Style Name: Mainz
Style Author: Jason Simanek (2008)
*******************************************************************************
----------------------------------------------------------------------------
This website was created with GRAMPS
----------------------------------------------------------------------------
GRAMPS is a Free Software Project for Genealogy, offering a professional
genealogy program, and a wiki open to all. It is a community project, created,
developed and governed by genealogists.
Go to <http://gramps-project.org/> to learn more!
License
----------------------------------------------------------------------------
Copyright 2008 Jason M. Simanek
Copyright 2009 Stephane Charette
This file is part of the GRAMPS program.
GRAMPS is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation, version 2 of the License.
GRAMPS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GRAMPS. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------
Color Palette
----------------------------------------------------------------------------
@@ -60,11 +64,11 @@ body {
font-family:Georgia, serif;
color:#7D5925;
margin:0;
padding:0 14px 0 14px;
background:url(../images/Web_Mainz_Bkgd.png) #FFF2C6 repeat;
padding:0;
background:url(../images/Web_Mainz_Bkgd.png) #000 repeat;
}
div {
margin: 0;
margin:0;
padding:0;
}
img {
@@ -77,7 +81,7 @@ img {
.content {
width:965px;
margin:0 auto;
padding-bottom:.5em;
padding: 1cm 0px .5em 0px;
background:url(../images/Web_Mainz_Mid.png) #FFF2C6 repeat;
}
.content div.snapshot {
@@ -144,7 +148,7 @@ p {
margin:0;
}
p#description {
padding:10px 15px 10px 15px;
padding:0 15px 1em 15px;
}
p a:link {
text-decoration:underline;
@@ -177,7 +181,7 @@ a:visited {
/* Header
----------------------------------------------------- */
#header {
width: 965px;
width:965px;
margin:0 auto;
padding:5em 0 2px 0;
background:url(../images/Web_Mainz_Header.png) repeat-x top left;
@@ -194,27 +198,11 @@ a:visited {
margin:0 0 5px 50px;
}
#data {
background-color: white;
border-style: solid;
border-color: #7D5925;
border-width:1px 1px 1px 1px;
width: 30%;
}
table tr.even {
background-color: #FFF2C5;
}
table tr.odd {
background-color: #ffffe7;
}
/* Navigation
----------------------------------------------------- */
#navigation, #subnavigation {
font-family:sans-serif;
width: 965px;
width:965px;
margin:0 auto;
padding:0;
background:url(../images/Web_Mainz_MidLight.png) #FFF2C6;
@@ -268,9 +256,10 @@ table tr.odd {
div#alphabet {
width: 965px;
margin: 0;
background-color: #FFF2C5;
background-color: #FFF2C6;
}
div#alphabet ul {
padding: 0px 25px 0px 25px;
list-style:none;
min-width:770px;
height:24px;
@@ -305,7 +294,7 @@ div#alphabet ul li a:hover {
----------------------------------------------------- */
table {
font-size:14px;
margin:0;
margin:0 15px 1em 15px;
padding:0;
border:none;
border-collapse:collapse;
@@ -317,39 +306,13 @@ table tr th {
padding:.1em 10px;
border-bottom:double 4px #7D5925;
}
table.infolist tr th a {
text-decoration:none;
}
table tr td {
vertical-align:middle;
padding:.1em 10px;
}
table tr td.TableHeaderCell {
color: #7D5925;
background-color: #f8eec9;
font-weight: bold;
text-align: left;
font-size: 0.8em;
margin:0;
border-bottom:double 4px #7D5925;
border-left:solid 2px #7D5925;
border-right:solid 2px #7D5925;
border-top:solid 2px #7D5925;
}
table tr td.TableDataCell {
color: #7D5925;
background-color: white;
border:solid 2px #7D5925;
font-size: 0.8em;
}
table tr td.TableDataCell a {
display: block;
color: black;
text-decoration: none;
}
table.infolist tr th a {
text-decoration:none;
}
table.infolist tr td a {
display:block;
text-decoration:none;
@@ -515,9 +478,6 @@ table.individuallist tbody tr td.ColumnName a {
/* Sources
----------------------------------------------------- */
#Sources table.infolist tbody tr td {
border-bottom: dashed 1px #000;
}
#Sources table.infolist tbody tr td.ColumnRowLabel {
padding-bottom:0;
}
@@ -543,113 +503,8 @@ table.individuallist tbody tr td.ColumnName a {
padding:.1em 10px .3em 10px;
}
/* EventList and EventDetail
----------------------------------------------------- */
div#EventList, div#EventDetail {
padding: 0;
margin: 0 auto;
}
div#events table.eventlist {
margin-top: .3cm;
}
table.eventlist tbody tr.BeginName {
border-bottom: solid 1px #000;
}
table.eventlist tbody tr td {
padding: 4px 0px 4px 0px;
border-bottom: dashed 1px #000;
}
table.eventlist tbody tr td.ColumnEvent {
width: 10%;
}
table.eventlist tbody tr td.ColumnDate {
width: 10%;
}
table.eventlist tbody tr td.ColumnPlace {
width: 20%;
}
table.eventlist tbody tr td.ColumnDescription {
width: 20%;
}
table.eventlist tbody tr td.ColumnNotes {
width: 35%;
}
table.eventlist tbody tr td.ColumnSources {
width: 5%;
}
table.eventlist tbody tr td.ColumnPerson {
width: 35%;
}
table.eventlist tbody tr td.ColumnPartner {
width: 35%;
}
div#EventList table.eventlist tbody tr td.ColumnEvent a,
div#EventList table.eventlist tbody tr td.ColumnPerson a,
div#EventList table.eventlist tbody tr td.ColumnPartner a {
display: block;
padding: .9em 10px;
}
div#EventList table.alphaevent {
padding: .3em 0 .3em 0;
margin: 0;
}
div#EventList table.alphaevent tbody tr.BeginEvent {
border-top: solid 1px #000;
}
div#EventList table.alphaevent tbody tr td {
border-bottom: dashed 1px #000;
}
div#EventList table.alphaevent tbody tr td.ColumnType {
width: 15%;
}
div#EventList table.alphaevent tbody tr td.ColumnType a:hover {
background: none;
}
div#EventList table.alphaevent tbody tr td.ColumnGRAMPSID {
width: 12%;
}
div#EventList table.alphaevent tbody tr td.ColumnDate {
width: 20%;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson {
width: 60%;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson span.father,
div#EventList table.alphaevent tbody tr td.ColumnPerson span.mother {
display:block;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson span.mother:before {
content:"+ ";
}
div#EventDetail h3 {
font-size: large;
}
div#EventDetail h3:first-letter {
color: #000;
}
div#EventDetail table.eventlist {
margin: .5cm 0 .3cm 1.5cm;
width: 800px;
}
div#EventDetail table.eventlist tbody tr td.ColumnAttribute {
font-weight: bold;
text-transform: uppercase;
border-top: solid 1px #000;
width: 20%;
}
div#EventDetail table.eventlist tbody tr td.ColumnEvent {
border-top: solid 1px #000;
}
/* Gallery
----------------------------------------------------- */
#Gallery {
margin: auto;
padding: 0;
}
#Gallery table.infolist tbody tr td {
border-bottom: dashed 1px #000;
}
#Gallery table.infolist tbody tr td.ColumnRowLabel, #Gallery table.infolist tbody tr td.ColumnDate {
padding-bottom:0;
}
@@ -770,15 +625,15 @@ div#EventDetail table.eventlist tbody tr td.ColumnEvent {
/* Download
----------------------------------------------------- */
#Download {
padding: 0;
width: 965;
height: 350px;
padding:1cm;
height:396px;
}
table.download {
border:solid 2px #000;
width:100%;
}
table.download img {
text-align: center;
float:center;
}
table.download thead tr th {
text-align:center;
@@ -819,73 +674,13 @@ table.download td.Modified {
font-weight:bold;
}
/* Repositories
------------------------------------------------------ */
div#RepositoryList, div#RepositoryDetail {
margin: auto;
padding: 0;
}
div#RepositoryList table.repolist tbody tr td {
border-bottom: dashed 1px #000;
}
div#RepositoryList table.repolist tbody tr td a {
display: block;
padding: .3em 10px;
}
div#RepositoryList table.repolist tbody tr td.ColumnRowLabel {
width: 9%;
}
div#RepositoryList table.repolist tbody tr td.ColumnType {
width: 20%;
}
div#RepositoryList table.repolist tbody tr td.ColumnName {
width: 100%;
}
/* Address Book
------------------------------------------------------ */
div#AddressBookList, AddressBookDetail {
margin: auto;
padding: 0;
}
div#AddressBookList table.addressbook {
margin: .3em 0 .3em 0;
}
div#AddressBookList table.addressbook tbody tr td {
text-align: left;
border-bottom: dashed 1px #000;
}
div#AddressBookList table.addressbook tbody tr td.ColumnRowLabel {
width: 6%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnName {
text-align: left;
width: 70%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnName a {
display: block;
padding: 6px 0px 6px 0px;
}
div#AddressBookList table.addressbook tbody tr td.ColumnAddress {
text-align: center;
width: 8%;
}
div#AddressBookList table.adressbook tbody tr td.ColumnResidence {
text-align: center;
width: 8%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnWebLinks {
text-align: center;
width: 12%;
}
/* SubSection
----------------------------------------------------- */
#Home, #Introduction, #Contact {
min-height:500px;
padding:1.5em 0 3em 0;
}
#Home p, #Introduction p, #Surnames p, #Individuals p, #Sources p, #Places p, #Gallery p {
#Home p, #Introduction p, #Surnames p, #Individuals p, #Sources p, #Places p, #Gallery p, {
margin:0 20px 1em 20px;
padding-top:1em;
}
@@ -1008,46 +803,8 @@ div#addresses table.infolist tbody tr td.ColumnValue {
border-bottom:dashed 1px #D8C19F;
}
/* Subsections : Attributes
/* SubSection : Attributes
----------------------------------------------------- */
div#attributes {
margin: 0;
padding: 0;
}
table.attrlist {
width: 100%;
}
table.attrlist thead tr th.ColumnType {
border: none;
background: none;
}
table.attrlist thead tr th.ColumnAttribute {
border: none;
background: none;
}
table.attrlist tbody tr td {
border-bottom: dashed 1px #000;
}
table.attrlist tbody tr td.ColumnType {
border: none;
background: none;
}
table.attrlist tbody tr td.ColumnAttribute {
border: none;
background: none;
}
table.attrlist tbody tr td.ColumnAttrType {
width: 15%;
}
table.attrlist tbody tr td.ColumnAttrValue {
width: 15%;
}
table.attrlist tbody tr td.ColumnAttrNotes {
width: 45%;
}
table.attrlist tbody tr td.ColumnAttrSources {
width: 15%;
}
/* SubSection : Gallery
----------------------------------------------------- */
@@ -1109,22 +866,6 @@ div#sourcerefs ol li ol {
/* SubSection : Weblinks
----------------------------------------------------- */
div#WebLinks {
margin : 0 auto;
padding: 0;
}
table.weblinks tr td {
border-bottom: dashed 1px #000;
}
table.weblinks tr td.ColumnRowLabel {
width: 6%;
}
table.weblinks tr td.ColumnType {
width: 40%;
}
table.weblinks tr td.ColumnDescription {
width: 30%;
}
/* SubSection : Pedigree
----------------------------------------------------- */
@@ -1165,164 +906,39 @@ table.weblinks tr td.ColumnDescription {
font-weight:bold;
}
/* SubSection : Ancestors Tree
----------------------------------------------------- */
#tree {
page-break-before:always;
margin:0;
padding:0;
}
#treeContainer {
position:relative;
z-index:1;
padding-bottom:1.4em;
}
#treeContainer div.boxbg {
position:absolute;
margin:0;
padding:0;
background:none;
}
#treeContainer div.boxbg a,
#treeContainer div.boxbg span.unlinked {
position:relative;
z-index:10;
display:block;
font:normal .8em/1.4em sans-serif;
text-align:center;
text-decoration:none;
color:#7D5925;
width:118px;
padding:5px 20px 7px 20px;
margin-left:16px;
background-color:#FFFFE7;
border:dotted 2px #7D5925;
}
#treeContainer div.boxbg a.noThumb,
#treeContainer div.AncCol3 a,
#treeContainer div.AncCol4 a,
#treeContainer div.AncCol3 span.unlinked,
#treeContainer div.AncCol4 span.unlinked {
margin-top:10px;
}
#treeContainer div.boxbg a:hover {
position:relative;
z-index:999;
font-size:1em;
text-decoration:none;
color:#7D5925;
width:190px;
margin-left:-20px;
padding:10px 25px 12px 25px;
border:solid 2px #7D5925;
}
#treeContainer div.boxbg a:hover, #treeContainer div.AncCol3 a:hover, #treeContainer div.AncCol4 a:hover {
margin-top:-44px;
}
#treeContainer div.boxbg a.noThumb:hover {
margin-top:0;
}
#treeContainer div.AncCol0 a:hover {
margin-left:12px;
}
#treeContainer div.AncCol4 a:hover {
margin-left:-60px;
}
#treeContainer div.boxbg span.thumbnail {
display:block;
max-width:80px;
max-height:65px;
margin:0 auto;
padding:4px 0;
}
#treeContainer div.boxbg span.thumbnail img {
max-width:80px;
max-height:65px;
margin:0 auto;
}
#treeContainer div.boxbg a:hover span.thumbnail, #treeContainer div.boxbg a:hover span.thumbnail img {
height:80px;
}
#treeContainer div.AncCol3 span.thumbnail, #treeContainer div.AncCol4 span.thumbnail {
display:none;
}
#treeContainer div.boxbg a:hover span.thumbnail {
display:block;
}
#treeContainer div.male a,
#treeContainer div.male span.unlinked,
#treeContainer div.female a ,
#treeContainer div.female span.unlinked {
background-position:top right;
background-repeat:no-repeat;
}
#treeContainer div.male a,
#treeContainer div.male span.unlinked {
background-image:url(../images/Web_Gender_Male.png);
}
#treeContainer div.female a,
#treeContainer div.female span.unlinked {
background-image:url(../images/Web_Gender_Female.png);
}
.shadow {
display:none;
}
#tree div div.bvline {
position:absolute;
z-index:2;
height:2px;
margin:2px 0 0 16px;
padding:0;
background-color:#D8C19F;
}
#tree div div.bhline {
position:absolute;
z-index:2;
width:1px;
margin:2px 0 0 16px;
padding:0;
background-color:#D8C19F;
}
.ghline, .gvline {
display:none;
}
/* Footer
----------------------------------------------------- */
#footer {
clear: both;
width: 965px;
height: 80px;
font-size: 10px;
line-height: 130%;
font-family: sans-serif;
margin: 0 auto;
padding: 15px 0 0 0;
color: #000;
background:url(../images/Web_Mainz_MidLight.png) #FFF2C6 bottom left repeat;
clear:both;
width:965px;
font-size:12px;
line-height:130%;
font-family:sans-serif;
margin:0 auto;
padding:15px 0 0 0;
background:url(../images/Web_Mainz_MidLight.png) #FFF2C6;
border-top:dashed 1px #7D5925;
}
#footer a, #footer a:visited {
text-decoration:none;
color: #000;
}
#footer a:hover {
text-decoration:underline;
}
#footer img {
border: 0;
margin: 0 auto;
vertical-align: middle;
border:0;
margin:0 auto;
vertical-align:middle;
}
#footer p#createdate {
float: left;
width: 60%;
text-align: left;
margin-left: 10px;
float:left;
width:40%;
text-align:left;
margin-left:10px;
}
#footer p#copyright {
float:right;
width: 60%;
width:40%;
text-align:right;
margin-right:10px;
}
@@ -1455,9 +1071,8 @@ table.weblinks tr td.ColumnDescription {
.calendar tbody tr td ul li span.yearsmarried em {
color:#453619;
}
.calendar tbody tr td.highlight { }
.calendar tbody tr td.EmptyDays {
background-color: #FFF2C6;
.calendar tbody tr td.highlight {
}
.calendar tbody tr td.highlight div.date {
color:#767D25;
@@ -1497,6 +1112,3 @@ body#fullyearlinked table.calendar thead tr th.monthName {
body#fullyearlinked table.calendar tbody tr td {
height:3em;
}
body#OneDay {
background:url(../images/Web_Mainz_Mid.png) #FFF2C6 repeat;
}
+19 -19
View File
@@ -31,7 +31,7 @@ Style Name: Web_Navigation-Horizontal Stylesheet
----------------------------------------------------- */
body {
margin: 0 auto;
padding: 0 14px 0 14px;
padding: 0px 14px 0px 14px;
width: 965px;
}
@@ -47,54 +47,54 @@ div#alphabet ul {
height: 24px;
margin: 0;
padding: 0px 0px 0px 16px;
border-width: 2px 0px 4px 0px;
border-width: 2px 0px 2px 0px;
border-style: solid;
}
div#alphabet ul li:after {
content: " |";
}
div#alphabet ul li {
border-width: 0px 2px 0px 2px;
border-style: solid;
margin: 0;
float: left;
}
div#alphabet ul li:first-child {
margin-left: 4px;
border-left: none;
}
div#alphabet ul li a {
font: normal 16px sans;
display: block;
padding: 4px 8px 4px 8px;
float: left;
font: bold 16px/100% sans;
margin: 0;
text-decoration: none;
}
/* Navigation
/* Navigation/ Subnavigation
----------------------------------------------------- */
div#navigation, div#subnavigation {
width: 100%;
margin: 0;
padding: 0;
}
div#navigation ul, div#subnavigation ul {
list-style: none;
min-width: 900px;
height: 24px;
margin: 0;
padding: 0px 0px 0px 9px;
padding: 4px 0px 0px 14px;
border-width: 2px 0px 2px 0px;
border-style: solid;
}
div#navigation ul li, div#subnavigation ul li {
border-width: 0px 2px 0px 2px;
border-style: solid;
float: left;
padding: 2px 6px 4px 6px;
margin: 0;
}
div#navigation ul li:first-child, div#subnavigation ul li:first-child {
margin-left: 4px;
content: "| ";
}
div#navigation ul li:after, div#subnavigation ul li:after {
content: "| ";
border-left: none;
}
div#navigation ul li a, div#subnavigation ul li a {
display: block;
padding: 4px;
float: left;
font: .8em bold italic small-caps verdana, serif;
font: normal 12px serif;
text-decoration: none;
margin: 0;
}
+62 -426
View File
@@ -1,32 +1,36 @@
/*
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright 2008 Jason M. Simanek
# Copyright 2009 Stephane Charette
# Copyright (c) 2008-2010 Rob G. Healey <robhealey1@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
**************************************************************************************************
Copyright Holder and License
**************************************************************************************************
GRAMPS Cascading Style Sheet
Style Name: Nebraska Default Stylesheet
Style Author: Jason M. Simanek (2008)
**************************************************************************************************
**************************************************************************************************
This website was created with GRAMPS <http://www.gramps-project.org/>
--------------------------------------------------------------------------------------------------
GRAMPS is a Free Software Project for Genealogy, offering a professional
genealogy program, and a wiki open to all. It is a community project, created,
developed and governed by genealogists.
Go to <http://gramps-project.org/> to learn more!
--------------------------------------------------------------------------------------------------
Copyright 2008 Jason M. Simanek
Copyright 2009 Stephane Charette
This file is part of the GRAMPS program.
GRAMPS is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation, version 2 of the License.
GRAMPS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GRAMPS. If not, see <http://www.gnu.org/licenses/>.
--------------------------------------------------------------------------------------------------
Color Palette
@@ -79,6 +83,7 @@ img {
background:none;
}
.content {
padding-top: 1cm;
background-color:#FFF;
}
.content div.snapshot {
@@ -199,7 +204,7 @@ p#user_header {
background-color:#542;
}
/* Navigation / SubNavigation
/* Navigation
----------------------------------------------------- */
div#navigation, div#subnavigation {
width: 100%;
@@ -208,44 +213,44 @@ div#navigation, div#subnavigation {
}
div#navigation ul, div#subnavigation ul {
list-style:none;
height: 24px;
min-width: 900px;
height: 40px;
margin:0;
padding: 0px 0px 0px 9px;
border-bottom: solid 2px #000;
padding: 0px 0px 0px 16px;
border-bottom: solid 2px #5D835F;
}
div#navigation ul li, div#subnavigation ul li {
float: left;
}
div#navigation ul li:first-child, div#subnavigation ul li:first-child {
margin-left: 10px;
}
div#navigation ul li:after, div#subnavigation ul li:after {
content: "| ";
float:left;
}
div#navigation ul li a, div#subnavigation ul li a {
background-color: #A97;
display: block;
padding: 4px 8px 4px 8px;
float: left;
padding: 12px 16px 14px 1px;
float:left;
font: .8em bold italic small-caps verdana, serif;
color: #000;
text-decoration:none;
margin:0;
}
div#navigation ul li a:hover, div#subnavigation ul li a:hover {
background-color: #FFF;
color: #453619;
}
div#navigation ul li.CurrentSection a,
div#subnavigation ul li.CurrentSection a {
background-color: #C1B398;
color: #000;
}
div#navigation ul li.CurrentSection a:hover,
div#subnavigation ul li.CurrentSection a:hover {
background-color: #000;
color: #FFF;
#navigation ul li.CurrentSection a, #subnavigation ul li.CurrentSection a {
font-size:19px;
margin-top:-6px;
padding-top:11px;
padding-bottom:8px;
border-right:solid 1px #542;
border-left:solid 1px #542;
border-bottom:solid 1px #FFF;
background-color:#FFF;
}
#navigation ul li.CurrentSection a:hover {
background-color:#FFF;
}
#subnavigation ul li.CurrentSection a {
border-width:0 0 1px 0;
}
/* Alphabet Navigation
----------------------------------------------------- */
div#alphabet {
@@ -255,6 +260,7 @@ div#alphabet {
}
div#alphabet ul {
list-style:none;
min-width:770px;
height:24px;
margin:0;
padding: 0px 0px 0px 16px;
@@ -305,6 +311,7 @@ table.infolist tr th a:hover {
table.infolist tr td {
font:normal 1.1em/1.4em serif;
vertical-align:middle;
padding:.1em 10px;
}
table.infolist tr td a {
display:block;
@@ -337,12 +344,6 @@ table.infolist tbody tr td.ColumnType {
}
table.infolist tbody tr td.ColumnPartner {
font-size:.9em;
background-color:#FFF;
}
table.infolist tbody tr td.ColumnPartner a:hover {
display:block;
padding:15px;
background-color:#C1B398;
}
table.infolist tbody tr td.ColumnParents {
font-size:.9em;
@@ -495,7 +496,6 @@ table.individuallist tbody tr td.ColumnName a:hover {
}
#Sources table.infolist tbody tr td.ColumnName {
padding:0;
background-color:#FFF;
}
#Sources table.infolist tbody tr td.ColumnName a {
font-size:.9em;
@@ -513,7 +513,6 @@ table.individuallist tbody tr td.ColumnName a:hover {
#Places { }
#Places table.infolist tbody tr td.ColumnName {
padding:0;
background-color:#FFF;
}
#Places table.infolist tbody tr td.ColumnName a {
padding:.1em 10px .3em 10px;
@@ -522,101 +521,6 @@ table.individuallist tbody tr td.ColumnName a:hover {
background-color:#C1B398;
}
/* EventList and EventDetail
----------------------------------------------------- */
div#EventList, div#EventDetail {
padding: 0;
margin: 0 auto;
}
div#events table.eventlist {
margin-top: .3cm;
}
table.eventlist tbody tr.BeginName {
border-bottom: solid 1px #000;
}
table.eventlist tbody tr td {
padding: 4px 0px 4px 0px;
border-bottom: dashed 1px #000;
}
table.eventlist tbody tr td.ColumnEvent {
width: 10%;
}
table.eventlist tbody tr td.ColumnDate {
width: 10%;
}
table.eventlist tbody tr td.ColumnPlace {
width: 20%;
}
table.eventlist tbody tr td.ColumnDescription {
width: 20%;
}
table.eventlist tbody tr td.ColumnNotes {
width: 35%;
}
table.eventlist tbody tr td.ColumnSources {
width: 5%;
}
table.eventlist tbody tr td.ColumnPerson {
width: 35%;
}
table.eventlist tbody tr td.ColumnPartner {
width: 35%;
}
div#EventList table.eventlist tbody tr td.ColumnEvent a,
div#EventList table.eventlist tbody tr td.ColumnPerson a,
div#EventList table.eventlist tbody tr td.ColumnPartner a {
display: block;
padding: .9em 10px;
}
div#EventList table.alphaevent {
padding: .3em 0 .3em 0;
margin: 0;
}
div#EventList table.alphaevent tbody tr.BeginEvent {
border-top: solid 1px #000;
}
div#EventList table.alphaevent tbody tr td {
border-bottom: dashed 1px #000;
}
div#EventList table.alphaevent tbody tr td.ColumnType {
width: 15%;
}
div#EventList table.alphaevent tbody tr td.ColumnType a:hover {
background: none;
}
div#EventList table.alphaevent tbody tr td.ColumnGRAMPSID {
width: 12%;
}
div#EventList table.alphaevent tbody tr td.ColumnDate {
width: 20%;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson {
width: 60%;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson span.father,
div#EventList table.alphaevent tbody tr td.ColumnPerson span.mother {
display:block;
}
div#EventList table.alphaevent tbody tr td.ColumnPerson span.mother:before {
content:"+ ";
}
div#EventDetail h3 {
font-size: 1em;;
}
div#EventDetail table.eventlist {
margin: .5cm 0 .3cm 1.5cm;
width: 800px;
}
div#EventDetail table.eventlist tbody tr td.ColumnAttribute {
border-top: solid 1px #000;
font-weight: bold;
text-transform: uppercase;
width: 20%;
}
div#EventDetail table.eventlist tbody tr td.ColumnEvent {
border-top: solid 1px #000;
}
/* Gallery
----------------------------------------------------- */
#Gallery { }
@@ -625,7 +529,6 @@ div#EventDetail table.eventlist tbody tr td.ColumnEvent {
}
#Gallery table.infolist tbody tr td.ColumnName {
padding:0;
background-color:#FFF;
}
#Gallery table.infolist tbody tr td.ColumnName a {
padding:.1em 10px .3em 10px;
@@ -721,22 +624,22 @@ div#EventDetail table.eventlist tbody tr td.ColumnEvent {
margin-right:.4em;
}
#streetaddress {
width: 100%;
width:85%;
}
#city:after {
content: ",";
content:",";
}
#country {
clear: left;
clear:left;
}
#email {
clear: left;
clear:left;
}
#email a {
text-decoration: none;
text-decoration:none;
}
#email a:hover {
text-decoration: underline;
text-decoration:underline;
}
/* Download
@@ -750,7 +653,7 @@ table.download {
width:100%;
}
table.download img {
text-align:center;
float:center;
}
table.download thead tr th {
text-align:center;
@@ -791,69 +694,6 @@ table.download td.Modified {
font-weight:bold;
}
/* Repositories
------------------------------------------------------ */
div#RepositoryList {
margin: 0;
padding: 0;
}
div#RepositoryList table.repolist tbody tr td {
background-color: #C1B398;
}
div#RepositoryList table.repolist tbody tr td a {
display: block;
padding: .3em 10px;
}
div#RepositoryList table.repolist tbody tr td.ColumnRowLabel {
width: 9%;
}
div#RepositoryList table.repolist tbody tr td.ColumnType {
width: 15%;
}
div#RepositoryList table.repolist tbody tr td.ColumnName {
background-color: #FFF;
}
/* Address Book
------------------------------------------------------ */
div#AddressBookList, div#AddressBookDetail {
margin: 0;
padding: 0;
}
div#AddressBookList table.addressbook {
margin: .3em 0 .3em 0;
}
div#AddressBookList table.addressbook tbody tr.BeginName {
border-top: solid 1px #000;
}
div#AddressBookList table.addressbook tbody tr.Totals td {
background-color: #F6F2EE;
}
div#AddressBookList table.addressbook tbody tr td {
background-color: #FFF;
border-bottom: dashed 1px #000;
}
div#AddressBookList table.addressbook tbody tr td.ColumnRowLabel {
background-color: #F6F2EE;
width: 4%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnName {
width: 70%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnName a {
display: block;
padding: 6px 0px 6px 0px;
}
div#AddressBookList table.addressbook tbody tr td.ColumnAddress {
width: 8%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnResidence {
width: 8%;
}
div#AddressBookList table.addressbook tbody tr td.ColumnWebLinks {
width: 8%;
}
/* Subsections
----------------------------------------------------- */
#Home, #Introduction, #Contact {
@@ -932,45 +772,6 @@ table.infolist tbody tr td.ColumnValue p {
/* Subsections : Attributes
----------------------------------------------------- */
div#attributes {
margin: 0;
padding: 0;
}
table.attrlist {
width: 100%;
}
table.attrlist thead tr th.ColumnType {
border: none;
background: none;
}
table.attrlist thead tr th.ColumnAttribute {
border: none;
background: none;
}
table.attrlist tbody tr td {
background-color: #F6F2EE;
border-bottom: dashed 1px #000;
}
table.attrlist tbody tr td.ColumnType {
border: none;
background: none;
}
table.attrlist tbody tr td.ColumnAttribute {
border: none;
background: none;
}
table.attrlist tbody tr td.ColumnAttrType {
width: 15%;
}
table.attrlist tbody tr td.ColumnAttrValue {
width: 15%;
}
table.attrlist tbody tr td.ColumnAttrNotes {
width: 45%;
}
table.attrlist tbody tr td.ColumnAttrSources {
width: 15%;
}
/* Subsections : Parents
----------------------------------------------------- */
@@ -1102,25 +903,6 @@ div#summaryarea table.infolist tbody tr td.ColumnAttribute {
/* Subsections : Weblinks
----------------------------------------------------- */
div#WebLinks {
margin : 0 auto;
padding: 0;
}
table.weblinks tr td {
background-color: #F6F2EE;
border-bottom: dashed 1px #000;
}
table.weblinks tr td.ColumnRowLabel {
width: 5%;
}
table.weblinks tr td.ColumnType {
width: 30%;
}
table.weblinks tr td.ColumnDescription {
background-color: #FFF;
width: 30%;
}
/* Subsections : Pedigree
----------------------------------------------------- */
@@ -1168,134 +950,12 @@ div#pedigree {
font-weight:bold;
}
/* Subsections : Ancestors Tree
----------------------------------------------------- */
#tree {
page-break-before:always;
margin:0;
padding:0;
background-color: #FFF;
}
#treeContainer {
position:relative;
z-index:1;
}
#treeContainer div.boxbg {
position:absolute;
margin:0;
padding:0;
background:none;
}
#treeContainer div.boxbg a,
#treeContainer div.boxbg span.unlinked {
position:relative;
z-index:10;
display:block;
font:normal .7em/1.4em sans-serif;
text-align:center;
text-decoration:none;
color:#542;
width:118px;
padding:5px 20px 7px 20px;
margin-left:16px;
background-color:#F6F2EE;
border:solid 1px #542;
}
#treeContainer div.boxbg a.noThumb,
#treeContainer div.AncCol3 a,
#treeContainer div.AncCol4 a,
#treeContainer div.AncCol3 span.unlinked,
#treeContainer div.AncCol4 span.unlinked {
margin-top:10px;
}
#treeContainer div.boxbg a:hover {
position:relative;
z-index:999;
font-size:1em;
text-decoration:none;
color:#542;
width:190px;
margin-left:-20px;
padding:10px 25px 12px 25px;
border:solid 2px #542;
}
#treeContainer div.boxbg a:hover, #treeContainer div.AncCol3 a:hover, #treeContainer div.AncCol4 a:hover {
margin-top:-44px;
}
#treeContainer div.boxbg a.noThumb:hover {
margin-top:0;
}
#treeContainer div.AncCol0 a:hover {
margin-left:12px;
}
#treeContainer div.AncCol4 a:hover {
margin-left:-60px;
}
#treeContainer div.boxbg span.thumbnail {
display:block;
max-width:80px;
max-height:65px;
margin:0 auto;
padding:4px 0;
}
#treeContainer div.boxbg span.thumbnail img {
max-width:80px;
max-height:65px;
margin:0 auto;
}
#treeContainer div.boxbg a:hover span.thumbnail, #treeContainer div.boxbg a:hover span.thumbnail img {
height:80px;
}
#treeContainer div.AncCol3 span.thumbnail, #treeContainer div.AncCol4 span.thumbnail {
display:none;
}
#treeContainer div.boxbg a:hover span.thumbnail {
display:block;
}
#treeContainer div.male a,
#treeContainer div.male span.unlinked,
#treeContainer div.female a ,
#treeContainer div.female span.unlinked {
background-position:top right;
background-repeat:no-repeat;
}
#treeContainer div.male a,
#treeContainer div.male span.unlinked {
background-image:url(../images/Web_Gender_Male.png);
}
#treeContainer div.female a,
#treeContainer div.female span.unlinked {
background-image:url(../images/Web_Gender_Female.png);
}
.shadow {
display:none;
}
#tree div div.bvline {
position:absolute;
z-index:2;
height:1px;
margin:0 0 0 16px;
padding:0;
background-color:#453619;
}
#tree div div.bhline {
position:absolute;
z-index:2;
width:1px;
margin:0 0 0 16px;
padding:0;
background-color:#453619;
}
.ghline, .gvline {
display:none;
}
/* Footer
----------------------------------------------------- */
#footer {
overflow: hidden;
clear:both;
width:100%;
height: 60px;
font-size:12px;
line-height:130%;
font-family:sans-serif;
@@ -1508,27 +1168,3 @@ body#fullyearlinked table.calendar thead tr th.monthName {
body#fullyearlinked table.calendar tbody tr td {
height:3em;
}
/* Calendar: OneDay
--------------------------------------------------------------------------------- */
body#OneDay h3 {
color: #000;
font-weight: bold;
text-align: center;
}
table.oneday {
margin: .3em 0 .3em 0;
padding: 0;
}
table.oneday tbody tr td {
border-bottom: dashed 1px #000;
}
table.oneday tbody tr td.ColumnRowLabel {
width: 5%;
}
table.oneday tbody tr td.ColumnText {
width: 85%;
}
table.oneday tbody tr td.ColumnEvent {
width: 10%;
}
File diff suppressed because it is too large Load Diff
+441 -828
View File
File diff suppressed because it is too large Load Diff
+176
View File
@@ -0,0 +1,176 @@
/*
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2010 Rob G. Healey <robhealey1@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id: $
#
**************************************************************************************************
GRAMPS Cascading Style Sheet
Style Name: Combined Ancestor Tree Style Sheet
***************************************************************************************************
#
===== Ancestor Graph Color Scheme =====
Males #BCEAF6
Females #FFC0CB
Unknown #000
#
===== Web Graphics =====
Males Web_Gender_Male.png
Females Web_Gender_Female.png
# ------------------------------------------------------------------------------------------------- */
/* Subsections : Ancestors Tree
----------------------------------------------------- */
#tree {
page-break-before:always;
margin:0;
padding:0;
background:none;
}
#treeContainer {
position:relative;
z-index:1;
}
#treeContainer div.boxbg {
position:absolute;
margin:0;
padding:0;
background:none;
}
#treeContainer div.boxbg a,
#treeContainer div.boxbg span.unlinked {
position:relative;
z-index:10;
display:block;
font:normal .7em/1.4em sans-serif;
text-align:center;
text-decoration:none;
color: #00029D;
width:118px;
padding:5px 20px 7px 20px;
margin-left:16px;
background-color: #FFF;
border: solid 1px #000;
}
#treeContainer div.boxbg a.noThumb,
#treeContainer div.AncCol3 a,
#treeContainer div.AncCol4 a,
#treeContainer div.AncCol3 span.unlinked,
#treeContainer div.AncCol4 span.unlinked {
margin-top:10px;
}
#treeContainer div.boxbg a:hover {
position:relative;
z-index:999;
font-size:1em;
text-decoration:none;
color: #00029D;
width:190px;
margin-left:-20px;
padding:10px 25px 12px 25px;
border: solid 2px #000;
}
#treeContainer div.boxbg a:hover,
#treeContainer div.AncCol3 a:hover,
#treeContainer div.AncCol4 a:hover {
margin-top:-44px;
}
#treeContainer div.boxbg a.noThumb:hover {
margin-top:0;
}
#treeContainer div.AncCol0 a:hover {
margin-left:12px;
}
#treeContainer div.AncCol4 a:hover {
margin-left:-60px;
}
#treeContainer div.boxbg span.thumbnail {
display:block;
max-width:80px;
max-height:65px;
margin:0 auto;
padding:4px 0;
}
#treeContainer div.boxbg span.thumbnail img {
max-width:80px;
max-height:65px;
margin:0 auto;
}
#treeContainer div.boxbg a:hover span.thumbnail, #treeContainer div.boxbg a:hover span.thumbnail img {
height:80px;
}
#treeContainer div.AncCol3 span.thumbnail, #treeContainer div.AncCol4 span.thumbnail {
display:none;
}
#treeContainer div.boxbg a:hover span.thumbnail {
display:block;
}
#treeContainer div.boxbg span.fullname {
display: none;
}
#treeContainer div.boxbg span.shortname {
display: inline;
}
#treeContainer div.boxbg a:hover span.fullname {
display: inline;
}
#treeContainer div.boxbg a:hover span.shortname {
display: none;
}
#treeContainer div.male a,
#treeContainer div.male span.unlinked {
background:url(../images/Web_Gender_Male.png) #BCEAF6 no-repeat top right;
}
#treeContainer div.female a,
#treeContainer div.female span.unlinked {
background:url(../images/Web_Gender_Female.png) #FFC0CB no-repeat top right;
}
#treeContainer div.unknown a,
#treeContainer div.unknown span.unlinked {
background-color: #000;
color: #FFF;
}
.shadow {
display:none;
}
#tree div div.bvline {
position:absolute;
z-index:2;
height:1px;
margin:0 0 0 16px;
padding:0;
background-color: #00029D;
}
#tree div div.bhline {
position:absolute;
z-index:2;
width:1px;
margin:0 0 0 16px;
padding:0;
background-color: #00029D;
}
.ghline, .gvline {
display:none;
}
+24 -22
View File
@@ -1,29 +1,31 @@
/*
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright 2009 Stephane Charette and Jason Simanek
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
**************************************************************************************************
-------------------------------------------------------------------------------
GRAMPS cascading style sheet for common behaviour independant of styles
Style Name: n/a (used by many different styles)
Style Author: Stephane Charette and Jason Simanek
**************************************************************************************************
-------------------------------------------------------------------------------
GRAMPS is a Free Software Project for Genealogy, offering a professional
genealogy program, and a wiki open to all. It is a community project, created,
developed and governed by genealogists.
Go to <http://www.gramps-project.org/> to learn more!
License
-------------------------------------------------------------------------------
Copyright 2009 Stephane Charette and Jason Simanek
This file is part of the GRAMPS program.
GRAMPS is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation, version 2 of the License.
GRAMPS is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GRAMPS. If not, see <http://www.gnu.org/licenses/>.
-------------------------------------------------------------------------------
-------------
Image Gallery
+21 -12
View File
@@ -411,71 +411,80 @@ class DbBsddbRead(DbReadBase, Callback):
map_index += 1
index = prefix % map_index
map_index += 1
return index
return (map_index, index)
def find_next_person_gramps_id(self):
"""
Return the next available GRAMPS' ID for a Person object based off the
person ID prefix.
"""
return self.__find_next_gramps_id(self.person_prefix,
self.pmap_index, gid = self.__find_next_gramps_id(self.person_prefix,
self.pmap_index, self.id_trans)
return gid
def find_next_place_gramps_id(self):
"""
Return the next available GRAMPS' ID for a Place object based off the
place ID prefix.
"""
return self.__find_next_gramps_id(self.place_prefix,
self.lmap_index, gid = self.__find_next_gramps_id(self.place_prefix,
self.lmap_index, self.pid_trans)
return gid
def find_next_event_gramps_id(self):
"""
Return the next available GRAMPS' ID for a Event object based off the
event ID prefix.
"""
return self.__find_next_gramps_id(self.event_prefix,
self.emap_index, gid = self.__find_next_gramps_id(self.event_prefix,
self.emap_index, self.eid_trans)
return gid
def find_next_object_gramps_id(self):
"""
Return the next available GRAMPS' ID for a MediaObject object based
off the media object ID prefix.
"""
return self.__find_next_gramps_id(self.mediaobject_prefix,
self.omap_index, self.oid_trans)
self.omap_index, gid = self.__find_next_gramps_id(self.mediaobject_prefix,
self.omap_index, self.oid_trans)
return gid
def find_next_source_gramps_id(self):
"""
Return the next available GRAMPS' ID for a Source object based off the
source ID prefix.
"""
return self.__find_next_gramps_id(self.source_prefix,
self.smap_index, gid = self.__find_next_gramps_id(self.source_prefix,
self.smap_index, self.sid_trans)
return gid
def find_next_family_gramps_id(self):
"""
Return the next available GRAMPS' ID for a Family object based off the
family ID prefix.
"""
return self.__find_next_gramps_id(self.family_prefix,
self.fmap_index, gid = self.__find_next_gramps_id(self.family_prefix,
self.fmap_index, self.fid_trans)
return gid
def find_next_repository_gramps_id(self):
"""
Return the next available GRAMPS' ID for a Respository object based
off the repository ID prefix.
"""
return self.__find_next_gramps_id(self.repository_prefix,
self.rmap_index, self.rid_trans)
self.rmap_index, gid = self.__find_next_gramps_id(self.repository_prefix,
self.rmap_index, self.rid_trans)
return gid
def find_next_note_gramps_id(self):
"""
Return the next available GRAMPS' ID for a Note object based off the
note ID prefix.
"""
return self.__find_next_gramps_id(self.note_prefix,
self.nmap_index, self.nid_trans)
self.nmap_index, gid = self.__find_next_gramps_id(self.note_prefix,
self.nmap_index, self.nid_trans)
return gid
def get_from_handle(self, handle, class_type, data_map):
data = data_map.get(str(handle))
if data:
+2
View File
@@ -169,6 +169,8 @@ class DbTxn(defaultdict):
While the list is an arbitrary index of integers, it can be used
to indicate record numbers for a database.
"""
if self.first is None or self.last is None:
return []
if not reverse:
return xrange(self.first, self.last+1)
else:
+27 -24
View File
@@ -58,6 +58,7 @@ from gen.db.dbconst import *
from gen.utils.callback import Callback
from gen.updatecallback import UpdateCallback
import Errors
import constfunc
_LOG = logging.getLogger(DBLOGNAME)
_MINVERSION = 9
@@ -1586,8 +1587,8 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback):
@catch_db_error
def transaction_commit(self, transaction, msg):
if self._LOG_ALL:
LOG.debug("%s: Transaction commit '%s'\n"
% (self.__class__.__name__, str(msg)))
_LOG.debug("%s: Transaction commit '%s'\n"
% (self.__class__.__name__, str(msg)))
if self.readonly:
return
@@ -1659,25 +1660,20 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback):
"""
BSDDB change log settings using new method with renamed attributes
"""
if db.version() < (4, 7):
# by the book: old method with old attribute
self.env.set_flags(db.DB_LOG_AUTOREMOVE, 1)
else: # look at python interface
# TODO test with new version of pybsddb
try:
# try numeric compare, just first 2 digits
# this won't work with something like "4.10a", but
# hopefully they won't do that
old_version = map(int, db.__version__.split(".",2)[:2]) < (4, 7)
except:
# fallback, weak string compare
old_version = db.__version__ < "4.7"
if old_version:
# undocumented: old method with new attribute
self.env.set_flags(db.DB_LOG_AUTO_REMOVE, 1)
else:
# by the book: new method with new attribute
self.env.log_set_config(db.DB_LOG_AUTO_REMOVE, 1)
autoremove_flag = None
autoremove_method = None
for flag in ["DB_LOG_AUTO_REMOVE", "DB_LOG_AUTOREMOVE"]:
if hasattr(db, flag):
autoremove_flag = getattr(db, flag)
break
for method in ["log_set_config", "set_flags"]:
if hasattr(self.env, method):
autoremove_method = getattr(self.env, method)
break
if autoremove_method and autoremove_flag:
autoremove_method(autoremove_flag, 1)
else:
_LOG.debug("Failed to set autoremove flag")
def write_version(self, name):
"""Write version number for a newly created DB."""
@@ -1699,7 +1695,7 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback):
db.DB_INIT_LOG | db.DB_INIT_TXN | db.DB_THREAD
# As opposed to before, we always try recovery on databases
env_flags = env_flags | db.DB_RECOVER
env_flags |= db.DB_RECOVER
# Environment name is now based on the filename
env_name = name
@@ -1756,8 +1752,12 @@ def write_lock_file(name):
if not os.path.isdir(name):
os.mkdir(name)
f = open(os.path.join(name, DBLOCKFN), "w")
if os.name == 'nt':
text = os.environ['USERNAME']
if constfunc.win():
user = os.environ['USERNAME']
try:
host = os.environ['USERDOMAIN']
except:
host = ""
else:
host = os.uname()[1]
# An ugly workaround for os.getlogin() issue with Konsole
@@ -1765,7 +1765,10 @@ def write_lock_file(name):
user = os.getlogin()
except:
user = os.environ.get('USER')
if host:
text = "%s@%s" % (user, host)
else:
text = user
# Save only the username and host, so the massage can be
# printed with correct locale in DbManager.py when a lock is found
f.write(text)
+14 -7
View File
@@ -393,11 +393,14 @@ class NameDisplay(object):
]
format_str = format_str[1:]
else:
patterns = [",\W*\(%(" + ("|".join(codes)) + ")\)", # ,\W*(%s)
",\W*%(" + ("|".join(codes)) + ")", # ,\W*%s
"\(%(" + ("|".join(codes)) + ")\)", # (%s)
"%(" + ("|".join(codes)) + ")", # %s
]
patterns = [
",\W*\"%(" + ("|".join(codes)) + ")\"", # ,\W*"%s"
",\W*\(%(" + ("|".join(codes)) + ")\)", # ,\W*(%s)
",\W*%(" + ("|".join(codes)) + ")", # ,\W*%s
"\"%(" + ("|".join(codes)) + ")\"", # "%s"
"\(%(" + ("|".join(codes)) + ")\)", # (%s)
"%(" + ("|".join(codes)) + ")", # %s
]
new_fmt = format_str
# replace the specific format string flags with a
@@ -599,8 +602,10 @@ def fn(%s):
return db.get_name_group_mapping(pn.surname)
elif sv == Name.PTFN:
return db.get_name_group_mapping(pn.patronymic)
else:
elif sv == Name.FN:
return db.get_name_group_mapping(pn.first_name)
else:
return db.get_name_group_mapping(pn.surname)
def name_grouping_data(self, db, pn):
if pn[_GROUP]:
@@ -610,7 +615,9 @@ def fn(%s):
return db.get_name_group_mapping(pn[_SURNAME])
elif sv == Name.PTFN:
return db.get_name_group_mapping(pn[_PATRONYM])
else:
elif sv == Name.FN:
return db.get_name_group_mapping(pn[_FIRSTNAME])
else:
return db.get_name_group_mapping(pn[_SURNAME])
displayer = NameDisplay()
-2
View File
@@ -955,8 +955,6 @@ class PluginRegister(object):
lenpd = len(self.__plugindata)
full_filename = os.path.join(dir, filename)
local_gettext = get_addon_translator(full_filename).gettext
if type(full_filename) == str:
full_filename = unicode(full_filename, sys.getfilesystemencoding())
try:
#execfile(full_filename,
execfile(full_filename.encode(sys.getfilesystemencoding()),
+3 -1
View File
@@ -228,7 +228,9 @@ class DocBackend(object):
typeval = int(s_tag.name)
s_tagvalue = s_tag.value
tag_name = None
if tagtype.STYLE_TYPE[typeval] == bool:
if typeval not in tagtype.STYLE_TYPE:
return None
elif tagtype.STYLE_TYPE[typeval] == bool:
return self.STYLETAG_MARKUP[self.STYLETYPE_MAP[typeval]]
elif tagtype.STYLE_TYPE[typeval] == str:
tag_name = "%d %s" % (typeval, s_tagvalue)
+50 -35
View File
@@ -68,7 +68,8 @@ class FilterProxyDb(ProxyDbBase):
self.flist = set()
for handle in self.plist:
person = self.db.get_person_from_handle(handle)
self.flist.update(person.get_family_handle_list())
if person:
self.flist.update(person.get_family_handle_list())
def get_person_from_handle(self, handle):
"""
@@ -77,7 +78,8 @@ class FilterProxyDb(ProxyDbBase):
"""
if handle in self.plist:
person = self.db.get_person_from_handle(handle)
if person is None:
return None
person.set_person_ref_list(
[ ref for ref in person.get_person_ref_list()
if ref.ref in self.plist ])
@@ -129,6 +131,7 @@ class FilterProxyDb(ProxyDbBase):
"""
source = self.db.get_source_from_handle(handle)
# Filter notes out
self.sanitize_notebase(source)
return source
@@ -175,7 +178,8 @@ class FilterProxyDb(ProxyDbBase):
"""
if handle in self.flist:
family = self.db.get_family_from_handle(handle)
if family is None:
return None
eref_list = [ eref for eref in family.get_event_ref_list()
if eref.ref in self.elist ]
family.set_event_ref_list(eref_list)
@@ -224,7 +228,8 @@ class FilterProxyDb(ProxyDbBase):
If no such Person exists, None is returned.
"""
person = self.db.get_person_from_gramps_id(val)
return self.get_person_from_handle(person.get_handle())
if person:
return self.get_person_from_handle(person.get_handle())
def get_family_from_gramps_id(self, val):
"""
@@ -232,7 +237,8 @@ class FilterProxyDb(ProxyDbBase):
If no such Family exists, None is returned.
"""
family = self.db.get_family_from_gramps_id(val)
return self.get_family_from_handle(family.get_handle())
if family:
return self.get_family_from_handle(family.get_handle())
def get_event_from_gramps_id(self, val):
"""
@@ -240,7 +246,8 @@ class FilterProxyDb(ProxyDbBase):
If no such Event exists, None is returned.
"""
event = self.db.get_event_from_gramps_id(val)
return self.get_event_from_handle(event.get_handle())
if event:
return self.get_event_from_handle(event.get_handle())
def get_place_from_gramps_id(self, val):
"""
@@ -248,7 +255,8 @@ class FilterProxyDb(ProxyDbBase):
If no such Place exists, None is returned.
"""
place = self.db.get_place_from_gramps_id(val)
return self.get_place_from_handle(place.get_handle())
if place:
return self.get_place_from_handle(place.get_handle())
def get_source_from_gramps_id(self, val):
"""
@@ -256,7 +264,8 @@ class FilterProxyDb(ProxyDbBase):
If no such Source exists, None is returned.
"""
source = self.db.get_source_from_gramps_id(val)
return self.get_source_from_handle(source.get_handle())
if source:
return self.get_source_from_handle(source.get_handle())
def get_object_from_gramps_id(self, val):
"""
@@ -264,7 +273,8 @@ class FilterProxyDb(ProxyDbBase):
If no such MediaObject exists, None is returned.
"""
media = self.db.get_object_from_gramps_id(val)
return self.get_object_from_handle(media.get_handle())
if media:
return self.get_object_from_handle(media.get_handle())
def get_repository_from_gramps_id(self, val):
"""
@@ -272,7 +282,8 @@ class FilterProxyDb(ProxyDbBase):
If no such Repository exists, None is returned.
"""
repository = self.db.get_repository_from_gramps_id(val)
return self.get_repository_from_handle(repository.get_handle())
if repository:
return self.get_repository_from_handle(repository.get_handle())
def get_note_from_gramps_id(self, val):
"""
@@ -280,7 +291,8 @@ class FilterProxyDb(ProxyDbBase):
If no such Note exists, None is returned.
"""
note = self.db.get_note_from_gramps_id(val)
return self.get_note_from_handle(note.get_handle())
if note:
return self.get_note_from_handle(note.get_handle())
def get_person_handles(self, sort_handles=True):
"""
@@ -416,10 +428,10 @@ class FilterProxyDb(ProxyDbBase):
@param notebase: NoteBase object to clean
@type event: NoteBase
"""
note_list = notebase.get_note_list()
new_note_list = [ note for note in note_list if note in self.nlist ]
notebase.set_note_list(new_note_list)
if notebase:
note_list = notebase.get_note_list()
new_note_list = [ note for note in note_list if note in self.nlist ]
notebase.set_note_list(new_note_list)
def sanitize_sourcebase(self, sourcebase):
"""
@@ -427,15 +439,17 @@ class FilterProxyDb(ProxyDbBase):
@param event: SourceBase object to clean
@type event: SourceBase
"""
sources = sourcebase.get_source_references()
for source in sources:
self.sanitize_notebase(source)
if sourcebase:
sources = sourcebase.get_source_references()
for source in sources:
self.sanitize_notebase(source)
def sanitize_addressbase(self, addressbase):
addresses = addressbase.get_address_list()
for address in addresses:
self.sanitize_notebase(address)
self.sanitize_sourcebase(address)
if addressbase:
addresses = addressbase.get_address_list()
for address in addresses:
self.sanitize_notebase(address)
self.sanitize_sourcebase(address)
def sanitize_person(self, person):
"""
@@ -443,18 +457,19 @@ class FilterProxyDb(ProxyDbBase):
@param event: Person object to clean
@type event: Person
"""
# Filter note references
self.sanitize_notebase(person)
self.sanitize_sourcebase(person)
self.sanitize_addressbase(person)
name = person.get_primary_name()
self.sanitize_notebase(name)
self.sanitize_sourcebase(name)
altnames = person.get_alternate_names()
for name in altnames:
if person:
# Filter note references
self.sanitize_notebase(person)
self.sanitize_sourcebase(person)
self.sanitize_addressbase(person)
name = person.get_primary_name()
self.sanitize_notebase(name)
self.sanitize_sourcebase(name)
self.sanitize_addressbase(person)
altnames = person.get_alternate_names()
for name in altnames:
self.sanitize_notebase(name)
self.sanitize_sourcebase(name)
self.sanitize_addressbase(person)
+7 -7
View File
@@ -36,7 +36,8 @@ Proxy class for the GRAMPS databases. Filter out all living people.
#
#-------------------------------------------------------------------------
from proxybase import ProxyDbBase
from gen.lib import Date, Person, Name
from gen.lib import Person, Name
from gen.lib.date import Today
from Utils import probably_alive
import config
@@ -78,8 +79,7 @@ class LivingProxyDb(ProxyDbBase):
ProxyDbBase.__init__(self, dbase)
self.mode = mode
if current_year is not None:
self.current_date = Date()
self.current_date.set_year(current_year)
self.current_date = Today()
else:
self.current_date = None
self.years_after_death = years_after_death
@@ -192,7 +192,7 @@ class LivingProxyDb(ProxyDbBase):
Returns False if the person is not considered living.
"""
return probably_alive( person,
self.db,
self.basedb,
self.current_date,
self.years_after_death )
@@ -210,7 +210,7 @@ class LivingProxyDb(ProxyDbBase):
father_handle = family.get_father_handle()
if father_handle:
father = self.db.get_person_from_handle(father_handle)
if self.__is_living(father):
if father and self.__is_living(father):
parent_is_living = True
if self.mode == self.MODE_EXCLUDE_ALL:
family.set_father_handle(None)
@@ -218,7 +218,7 @@ class LivingProxyDb(ProxyDbBase):
mother_handle = family.get_mother_handle()
if mother_handle:
mother = self.db.get_person_from_handle(mother_handle)
if self.__is_living(mother):
if mother and self.__is_living(mother):
parent_is_living = True
if self.mode == self.MODE_EXCLUDE_ALL:
family.set_mother_handle(None)
@@ -231,7 +231,7 @@ class LivingProxyDb(ProxyDbBase):
for child_ref in family.get_child_ref_list():
child_handle = child_ref.get_reference_handle()
child = self.db.get_person_from_handle(child_handle)
if self.__is_living(child):
if child and self.__is_living(child):
family.remove_child_ref(child_ref)
return family

Some files were not shown because too many files have changed in this diff Show More