Compare commits

...

1220 Commits

Author SHA1 Message Date
Doug Blank 7b60b140c0 Version 5.0.0-alpha1 2016-06-04 07:24:40 -04:00
Nick Hall 306f3abd01 More pylint improvements 2016-06-03 23:46:23 +01:00
Paul Franklin f049dca048 improve pylint score of FamilyLines report from 7.83 to 9.73 2016-06-03 12:28:02 -07:00
Paul Franklin 2d396891b8 improve pylint score of Detailed Descendant report from 7.80 to 9.70 2016-06-03 12:26:15 -07:00
Paul Franklin 99fbd648a0 improve pylint score of Descendant report from 7.91 to 9.71 2016-06-03 12:23:25 -07:00
Doug Blank 283ac0f8bb Moved LRU to gramps.gen.utils 2016-06-02 16:41:00 -04:00
Doug Blank 4913762d70 Remove import test from reports 2016-06-02 15:56:50 -04:00
Doug Blank c338aee30a test imports: added a function for nosetests 2016-06-02 15:39:07 -04:00
Doug Blank 9935654a22 Merge pull request #167 from prculley/bug9123
bug 9123 GEDCOM import with media files that have no path fails
2016-06-02 15:36:17 -04:00
Doug Blank 063533ab1e Merge pull request #166 from prculley/bug8729m
bug 8729 place names empty if Gedcom ADDR record contains no street
2016-06-02 15:35:00 -04:00
Doug Blank f165e04436 Merge pull request #159 from prculley/test_imports
Test imports
2016-06-02 14:39:45 -04:00
prculley 84e12210cc more pylint and uncompressed .gramps 2016-06-02 11:36:53 -05:00
Nick Hall 32ff947a87 More pylint improvements 2016-06-01 23:53:28 +01:00
Paul Franklin 5f1b719810 pylint improvements 2016-06-01 16:00:20 -07:00
Nick Hall 0801ef1b30 9472: Use first matching name when generating place titles 2016-05-30 23:05:17 +01:00
prculley 5182055c1f Merge remote-tracking branch 'upstream/master' into test_imports 2016-05-30 08:50:02 -05:00
prculley 4d60d19fd9 improving the pylint score 2016-05-30 08:49:05 -05:00
Paul Franklin 14dc963f3d add new C.I.R. strings to master's gramps.pot 2016-05-29 12:06:32 -07:00
prculley 9daf562e54 bug 9123 GEDCOM import with media files that have no path fails 2016-05-28 17:45:19 -05:00
Paul Franklin c39e6f3f5d increase Complete Individual Report pylint score to 9.76 2016-05-28 15:42:29 -07:00
Paul Franklin af2f29322e enable C.I.R. to include or exclude Person and Family Notes 2016-05-28 15:40:02 -07:00
Paul Franklin e84f09b55e 9464: [C.I.R.] add option to include or exclude census data 2016-05-28 15:37:09 -07:00
Paul Franklin 4dcd03f13c Switch to suppress and select more items in [C.I.] report 2016-05-28 15:27:52 -07:00
SNoiraud 2211fe947f 9474: [Geography] Geoclose and mother handle 2016-05-28 21:53:40 +02:00
prculley 6cb621c6a3 bug 8729 place names empty if Gedcom ADDR record contains no street 2016-05-28 11:57:21 -05:00
Nick Hall 3e04d97b8b Revert deprecated GObject ParamFlags update
The update required GLib 2.42 but users may still be using 2.38
or later.
2016-05-28 15:46:53 +01:00
Nick Hall dae9db51be Break some long lines 2016-05-28 00:35:00 +01:00
Nick Hall 3255904acc More pylint improvements 2016-05-28 00:28:50 +01:00
Nick Hall 3c7e357bd1 Remove redundant dialog title 2016-05-28 00:01:31 +01:00
Nick Hall ab50490617 pylint improvements 2016-05-27 23:53:08 +01:00
Nick Hall 75ffd7c41b Fix another file left open 2016-05-27 23:31:59 +01:00
Nick Hall 0b22891858 Resize grips have been removed 2016-05-27 22:58:15 +01:00
Nick Hall c4cab2e007 Ensure files are not left open 2016-05-27 22:50:05 +01:00
Nick Hall b66a7a93c2 Update deprecated GObject SignalFlags 2016-05-27 22:16:50 +01:00
Nick Hall 91b40c88bf Update deprecated priority constants 2016-05-27 22:15:27 +01:00
Nick Hall 363e8a0081 Update deprecated GObject ParamFlags 2016-05-27 22:10:33 +01:00
Nick Hall 9aa371617d Tidy up place configuration options 2016-05-27 19:33:19 +01:00
Paul Franklin e3f002179f 9449: LivingProxyDB leaves data in families when "[Living]" chosen 2016-05-27 09:32:23 -07:00
Paul Franklin 51d21522ce make report cope better with privacy proxy 2016-05-27 09:21:51 -07:00
Paul Franklin 43550a9a52 the three proxy invocations should be nearby, for ease of understanding 2016-05-27 09:20:20 -07:00
Paul Franklin c469240c65 9450: LivingProxyDB leaves data in when back references followed 2016-05-27 09:13:11 -07:00
Doug Blank ef0b2b8aea 9450: LivingProxyDB leaves data in when back references followed 2016-05-27 09:10:50 -07:00
Doug Blank 93803fb519 Merge pull request #164 from prculley/bug9475
Bug9475 GEDCOM import creates inconsistent source gramps IDs
2016-05-26 22:00:49 -04:00
Nick Hall a75dca13c9 Some minor pylint improvements 2016-05-26 20:53:22 +01:00
prculley edd9dda7ce changed 'print' to 'logging.info' 2016-05-26 14:04:15 -05:00
prculley 08c99f2929 Merge remote-tracking branch 'upstream/master' into test_imports 2016-05-26 14:02:18 -05:00
prculley 0cfc375a27 Merge remote-tracking branch 'upstream/master' into bug9475 2016-05-26 13:55:09 -05:00
prculley 3f32c012f2 but 9475 GEDCOM import creates inconsistent source gramps IDs 2016-05-26 13:54:20 -05:00
Nick Hall e2a5fe8e12 Use CSS to fade background colour in ValidatableMaskedEntry 2016-05-26 18:20:34 +01:00
Doug Blank 5ef38e2a57 Merge pull request #163 from gramps-project/use-cacheproxydb
Use CacheProxyDb on reports with LivingProxyDb
2016-05-26 12:32:17 -04:00
prculley 8cda91a377 moved test directory, tweaked tests, and fixes 2016-05-26 11:22:06 -05:00
Doug Blank 2596aba875 Use CacheProxyDb on reports with LivingProxyDb 2016-05-26 08:40:03 -04:00
Doug Blank 1611340dca CacheProxyDb: use getattr() 2016-05-26 08:36:27 -04:00
Doug Blank 6454b87672 Merge pull request #160 from gramps-project/cacheproxydb
CacheProxyDb: adds LRU cache for handle lookups
2016-05-26 06:58:36 -04:00
Doug Blank 898bfb4eae narrativeweb: proxies and filters may hide objects 2016-05-25 16:18:48 -04:00
Doug Blank 0820e70499 Additional fixes for narrativeweb 2016-05-25 15:43:01 -04:00
Paul Franklin ffd58ccd9f increase pylint score of fanchart report from 4.47 to 9.40 2016-05-25 12:29:44 -07:00
Doug Blank 3af7ff4e9b Spelling error 2016-05-25 14:41:07 -04:00
Doug Blank 758d63c0fa Remove trailing whitespace 2016-05-25 12:56:33 -04:00
Doug Blank 7649f03c70 CacheProxyDb: adds LRU cache for handle lookups 2016-05-25 12:39:48 -04:00
Nick Hall 7ea7850331 Tidy up whitespace 2016-05-25 17:27:23 +01:00
Doug Blank 5e89b0a417 NarrativeWebReport: media_ref handles need not be binary 2016-05-25 11:08:32 -04:00
prculley 7646d41774 Merge remote-tracking branch 'upstream/master' into test_imports 2016-05-24 14:44:08 -05:00
Ben Woods 7851d3bdfb Fix setup.py to remove the double '/' when building man pages
This was resulting in 'share/man//...' showing in the file list
generated for system packages.
2016-05-24 17:59:00 +01:00
Doug Blank 9a516b1058 Merge pull request #100 from SNoiraud/bug3068
3068: Wrong reference number for "same person as" in detdescendantreport
2016-05-24 12:20:40 -04:00
Doug Blank f92c35d797 Merge pull request #157 from prculley/bug7949
Bug 7949, crash on GEDCOM import with empty _AKA lines
2016-05-24 12:16:05 -04:00
Nick Hall 4413c7c88b Add extra unit test for IsEnclosedBy rule 2016-05-24 16:15:46 +01:00
Doug Blank e30f4e329b Merge pull request #156 from prculley/bug9459
bug 9459 GEDCOM import in CLI mode with .ged file containing ANSEL en…
2016-05-24 10:53:00 -04:00
prculley 7d2a7b71d0 bug 9459 GEDCOM import in CLI mode with .ged file containing ANSEL encoding tries to pop up gui 2016-05-24 08:56:19 -05:00
prculley 7a33b08185 Prototype of test imports module and associated tests 2016-05-23 15:36:52 -05:00
Nick Hall 23a0a492d4 9427: Add inclusive option to IsEnclosedBy rule 2016-05-23 15:36:52 -05:00
SNoiraud 50708d4097 9075: Saving/closing new person window with Alt-o does not find gender 2016-05-23 15:36:52 -05:00
Nick Hall ca1863984b Fix to allow deferred translation of place type 2016-05-23 15:36:52 -05:00
Nick Hall 9ab27bf83b 9466: Include all place types in place report 2016-05-23 15:36:52 -05:00
Nick Hall 3ea4b0d109 9314: Allow place selection both individually and by filter
Add the places selected individually to the list generated by
the filter.
2016-05-23 15:36:52 -05:00
Nick Hall 75d4f05185 8785: Expand tree in selectors automatically 2016-05-23 15:36:52 -05:00
Doug Blank 7f6803f9f6 8466: [Performance] Handling many Events on a person 2016-05-23 15:36:52 -05:00
Nick Hall 6c2eac9e05 9427: Add inclusive option to IsEnclosedBy rule 2016-05-23 15:20:37 +01:00
SNoiraud f5233fbe7c 9075: Saving/closing new person window with Alt-o does not find gender 2016-05-23 11:06:54 +02:00
Nick Hall 05ea21690d Fix to allow deferred translation of place type 2016-05-22 22:50:34 +01:00
Nick Hall 443043a8e2 9466: Include all place types in place report 2016-05-22 19:07:35 +01:00
Nick Hall 151677fb7e 9314: Allow place selection both individually and by filter
Add the places selected individually to the list generated by
the filter.
2016-05-22 18:27:58 +01:00
Nick Hall 10629b16b8 8785: Expand tree in selectors automatically 2016-05-22 18:01:46 +01:00
Doug Blank 7c45e78e95 8466: [Performance] Handling many Events on a person 2016-05-22 12:42:32 -04:00
Doug Blank 7ffb2403a2 2834: 'Complete Individual Report' is titled 'Summary of [name]' 2016-05-22 09:18:48 -04:00
Doug Blank 55d2141476 9465: DB-API: duplicate note ID 2016-05-22 07:25:23 -04:00
Nick Hall a70f7eb58f 9381: Fix Encloses gramplet to display correct place references 2016-05-21 18:55:06 +01:00
Paul Womack aed80fc725 Add 'Search for citations' to 'Remove unused objects' tool 2016-05-20 09:28:33 +10:00
Elliott Sales de Andrade ea4a4cd464 CI: Make trailing whitespace into a Travis error. 2016-05-18 20:38:35 -04:00
Elliott Sales de Andrade 28b722b92d Clean up trailing whitespace. 2016-05-18 20:31:49 -04:00
Nick Hall 15fcf1ed85 Remove Django specific references from docstrings 2016-05-18 15:47:57 +01:00
Nick Hall fe6c5895b2 Improve pylint score of some new files
The programming guidelines require that new files have a pylint
score of 9.0 or greater.
2016-05-17 22:36:40 +01:00
Nick Hall 7b22c6af1b Remove trailing whitespace 2016-05-16 21:17:11 +01:00
romjerome 82f60dcb2b Update template for appdata stuff 2016-05-16 12:09:30 +02:00
josip fc52d200a0 8429: Media Preview: wrong frame
fix signals
2016-05-16 11:51:07 +02:00
Paul Franklin 8921b1ad21 9408: UnboundLocalError on ODF doc backend 2016-05-16 11:49:09 +02:00
Sam Manzi b438b9789e Merge pull request #137 from sam-m888/MoreContextMgr4with
Convert a few more opens to use the with CM
2016-05-15 12:05:01 +10:00
Sam Manzi 28bbb019a1 Merge pull request #148 from prculley/bug9416m
Bug 9416 GEDCOM import PLAC:FORM in local mode doesn't work
2016-05-14 07:46:27 +10:00
Doug Blank dff65e6e91 9438: AttributeError: 'NoneType' object has no attribute 'db' 2016-05-13 13:03:01 -04:00
Doug Blank fcddb03ef1 DB-API: don't emit if in batch mode 2016-05-13 12:43:06 -04:00
Doug Blank 3b3c2e5d34 DB-API: move emit signals to transaction commit 2016-05-13 12:35:11 -04:00
prculley b2e0f437f4 bug 9416 merge conflict 2016-05-13 09:45:24 -05:00
Doug Blank 3831a02ede DB-API: updated obj.change date/time when editing 2016-05-13 09:09:37 -04:00
Doug Blank 471a6b42d0 Mysql: rename field 'long' 2016-05-12 23:43:43 -04:00
Sam Manzi 1e81d9d11f Convert a few more opens to use the with CM 2016-05-13 09:58:20 +10:00
Sam Manzi 05dcde4c8e Merge pull request #151 from prculley/bug9430m
Bug 9430 GEDCOM import PLAC or ADDR attached Notes etc. are lost
2016-05-13 09:08:47 +10:00
Sam Manzi 84e89b35ee Merge pull request #150 from prculley/bug9425m
Bug 9425 GEDCOM import some Place Names & Titles are blank
2016-05-13 09:07:01 +10:00
Sam Manzi dab835a646 Merge pull request #146 from prculley/bug9173
Bug 9173, fix broken GEDCOM import PLAC:FORM handling
2016-05-13 08:59:41 +10:00
Sam Manzi 7ade71945e Merge pull request #145 from prculley/bug9415
Bug 9415 Place Alt Names gets duplicated entries
2016-05-13 08:57:37 +10:00
Doug Blank aa9246dde4 DB-API: ensure that undo/redo operations are in a low-level db transaction 2016-05-12 16:33:52 -04:00
prculley 86f826a79b Bug 9430 GEDCOM import PLAC or ADDR attached Notes etc. are lost 2016-05-12 11:25:23 -05:00
prculley 878d9f08ca Bug 9425 GEDCOM import some Place Names & Titles are blank 2016-05-12 11:16:11 -05:00
prculley e3ddcad88e Bug 9416 GEDCOM import PLAC:FORM in local mode doesn't work 2016-05-12 10:27:01 -05:00
prculley dd7724eca2 Bug 9173, fix broken GEDCOM import PLAC:FORM handling 2016-05-12 09:55:59 -05:00
prculley df18fdebea Bug 9415 Place Alt Names gets duplicated entries 2016-05-12 09:36:28 -05:00
Doug Blank 636903bbc7 Merge pull request #141 from prculley/bug9414
Bug 9414 fix empty Place Alternate Names on import
2016-05-11 16:39:49 -04:00
Doug Blank 2763d925f0 Merge pull request #142 from prculley/bug9448
Bug 9448: Merge unit test for PlaceCheck not working correctly
2016-05-11 16:39:18 -04:00
prculley c7914367b7 Bug 9448: Merge unit test for PlaceCheck not working correctly 2016-05-11 10:18:27 -05:00
prculley e2b781a221 Bug 9414 fix empty Place Alternate Names on import 2016-05-11 09:50:07 -05:00
Doug Blank 9424539930 Person: add aliases for field names 2016-05-10 12:26:46 -04:00
Nick Hall e76a27ddd3 Remove trailing whitespace 2016-05-10 16:52:57 +01:00
Nick Hall f688a96e9a Tidy up class definitions
All python3 classes are new-style classes.  It is no longer
necessary to inherit from object.
2016-05-10 16:06:49 +01:00
Doug Blank 5a72efc387 Merge pull request #140 from tecknicaltom/fix-EditMedia
make EditPrimary, empty_object abstract
2016-05-10 06:56:31 -04:00
Zdeněk Hataš ad98b811b3 czech translation update 2016-05-10 10:26:38 +02:00
Tom Samstag ab79b26bec make EditPrimary, empty_object abstract
This makes EditPrimary an abstract class using abc.ABCMeta and marks
EditPrimary.empty_object as an abstract method. This moves the error
raised by forgetting to implement empty_object from when something
unsupported is done with its return (like .serialize()) to invocation
time, and provides a more obvious error.
2016-05-09 23:23:39 -07:00
Paul Franklin b308d97bed cope when import of GExiv2 gets a ValueError 2016-05-09 18:31:07 -07:00
Doug Blank 1a05aadca7 Date: add property year 2016-05-09 07:58:45 -04:00
Doug Blank 79362d7086 Merge pull request #136 from RossGammon/app2
Followup to PR 134
2016-05-08 13:50:15 -04:00
Ross Gammon d094925c42 Whoops - missed the trailing tag 2016-05-08 19:19:38 +02:00
Ross Gammon 84a5c369f6 Followup to Pull Request 134:
https://github.com/gramps-project/gramps/pull/134

Put the <p> tags back to <_p> so the description paragraphs
are translated again.
2016-05-08 18:58:13 +02:00
Doug Blank 3facab1e18 Merge pull request #134 from RossGammon/appstream
9443: Gramps not appearing in Gnome Software
2016-05-08 09:27:59 -04:00
Doug Blank 34c8cfdec4 Merge pull request #133 from RossGammon/gi_require_version
PyGIWarning: importing without specifiying a version first
2016-05-08 09:23:00 -04:00
Ross Gammon c4106617ba 9443: Gramps not appearing in Gnome Software
I updated the appdata.xml file to the latest version of the specification
(https://www.freedesktop.org/software/appstream/docs/index.html), adding
some new tags in the process.

I also installed the appdata.xml file to the latest location in the
specification.

The XML has bene validated by the appstreamcli validation tool, and the
patch applied in Debian (Gramps 4.2.3).

If it looks OK, it should probably be cherry-picked to the gramps42
maintenance branch.
2016-05-08 15:13:46 +02:00
Ross Gammon 25627dac07 PyGIWarning: importing without specifiying a version first
Follow-on from https://gramps-project.org/bugs/view.php?id=8981
This patch was applied in Debian (gramps 42 branch) due to warnings picked
up in the build log and from testing by running gramps from the command
line. I have rebased it on master, as it will probably be a while before the
warnings become errors.
2016-05-08 13:05:04 +02:00
SNoiraud e8636a1dcc Webcal : pylint (applied remarks on the last patch) 2016-05-08 11:45:51 +02:00
Doug Blank 0455cb90ce 9442: Windows SQLite database has indexes that Linux SQLite can't read 2016-05-07 14:40:36 -04:00
Doug Blank af487de69a 9441: DB-API with sqlite doesn't unlock the table when txn.batch = True 2016-05-07 13:46:29 -04:00
Doug Blank ac0fbecc4b Remove accidentally added code, 2 2016-05-07 13:09:47 -04:00
Doug Blank f266ad2a99 Remove accidentally added code 2016-05-07 13:06:50 -04:00
Doug Blank 3ce8c12ae6 Place schema: wrong type for alt_names 2016-05-07 12:28:20 -04:00
Doug Blank e2ae70a2dd Add sqlite info to error report assistant 2016-05-07 09:50:43 -04:00
Doug Blank 3e827c230e QuerySet: fix removing tag logic 2016-05-07 08:17:19 -04:00
Doug Blank f00a355110 sqlite: add version number 2016-05-07 06:43:33 -04:00
Ondrej Krc-Jediny d9154a75e1 7907 LDS ordinance statuses enhancement 2016-05-07 15:18:54 +10:00
SNoiraud 6e539f5000 4892: Webcal link : add an index file 2016-05-06 23:58:02 +02:00
SNoiraud c0203ec342 4892: Add a Webcal link to Narrative pages 2016-05-06 22:53:07 +02:00
SNoiraud f694f76b17 Webcal : pylint + cleanup. 2016-05-06 22:39:27 +02:00
Doug Blank a2f40fbf67 Bash completetions: a little cleaning up 2016-05-06 16:02:09 -04:00
Doug Blank 6d95cd5dd3 Where: work with methods, ala Rules 2016-05-06 10:04:24 -04:00
Doug Blank 61c2ed3240 QuerySet tag(): remove batch; allow tag removal; test 2016-05-06 08:14:54 -04:00
Leonhaeuser 1fa604645c update German translation 2016-05-05 21:48:50 +02:00
prculley e8caa9997b Bug 8809 Multiple GEDCOM imports creates duplicate event IDs 2016-05-05 14:08:03 -04:00
Doug Blank f3b57fda0a 9435: Attempting to export and empty BSDDB Family tree fails 2016-05-05 07:02:26 -04:00
Doug Blank 471aadc513 Family Tree Manager: reselect the default row 2016-05-04 20:34:33 -04:00
Doug Blank a0d5485088 ViewManager: no longer need to delay showing window; causes transient window issues 2016-05-04 20:06:54 -04:00
Doug Blank f83716b6bd Drag and drop on Family Tree Manager fixes 2016-05-04 17:28:25 -04:00
Paul Franklin 5b26bd6c03 change pylint score of TimeLine report from 4.74 to 9.54 2016-05-04 11:40:43 -07:00
Doug Blank 47cee7bb1e DbPythonError: adjust message regarding Python 2016-05-04 16:31:37 -04:00
Doug Blank bfe900f7cf 9429: Text metadata (i.e. *.txt files) implemented for DBAPI backends.
This saves and tests python and schema versions so that this code
won't load future versions of either.
2016-05-04 12:23:26 -04:00
SNoiraud 1272506afd 9417: The place page in webreport is complete mess 2016-05-04 17:44:24 +02:00
Doug Blank bd00f36ff1 9433: empty media path must be interpreted as /home/dblank in DB-API 2016-05-04 10:30:17 -04:00
SNoiraud 9a097d05da 7390: Gallery tab of Source view does not display .ods files 2016-05-04 12:07:21 +02:00
SNoiraud 56d98f2734 2882: Narrativeweb: Add option to Include all / unreferenced Media objects 2016-05-04 11:50:38 +02:00
Doug Blank c3874bdaed 4442: Add a Button to close the current database; refresh gramplets when no db 2016-05-03 20:31:20 -04:00
Doug Blank efe5323e1a 4442: Add a Button to close the current database; retitle main window 2016-05-03 20:15:18 -04:00
Doug Blank ba6921c91d CLI: command completions in bash, bash-like shells 2016-05-03 13:05:44 -04:00
Doug Blank 8a6d766b06 CLI: -l, -L, -t should match names with re patterns in them 2016-05-03 13:04:24 -04:00
Doug Blank 8350859c0c Stats Gramplet: remove sequential scan through person 2016-05-03 10:43:53 -04:00
Doug Blank 59bad09650 Two errors on transient parents 2016-05-03 10:41:55 -04:00
Doug Blank 032af37136 Family Tree Manager: add close button; fix convert GUI issue 2016-05-03 10:01:06 -04:00
Doug Blank 331e6d4668 Database: add reload method; re-expand fields before reindexing 2016-05-03 08:07:42 -04:00
SNoiraud 9ab7b6cfc1 5449: Pedigree view crashes if you happen to choose a child as ancestor 2016-05-03 13:25:23 +02:00
SNoiraud 099e88eef3 NarrativeWeb : use the common way to manage name format (cleanup). 2016-05-03 12:26:39 +02:00
SNoiraud 503eca8315 0373: Narrativeweb: relationship to central person on individual pages 2016-05-03 12:13:40 +02:00
romjerome bb6ce5dc64 typo
rebuild man file via 'rst2man' cmd
2016-05-03 11:38:27 +02:00
Paul Franklin d0e60f9201 increase pylint score from 6.17 to 9.20 2016-05-02 11:13:34 -07:00
Doug Blank 7e570b6724 Fixes for field-based schema and labels
* moved methods to TableObject from PrimaryObj (to include Tag)
* added missing scheme, labels to citation, place, repo, and source
* minor bug fixes
2016-05-02 14:32:50 -04:00
SNoiraud 0bbf52b4aa 8967: web reports: viewport line settings don't allow scaling 2016-05-02 15:25:50 +02:00
SNoiraud 8b5cad3c5a NarrativeWeb : use the common way to manage living people. 2016-05-02 11:36:18 +02:00
Doug Blank d4e8e21e50 Postgresql: fetchone when nothing to fetch, throws exception 2016-05-01 17:03:52 -04:00
Doug Blank c8f3c25d84 Fixed get_person_handles(sort_index=True)
Before did not include first_name in sorting (thanks Paul!)

Also added rebuilding all order_by fields when rebuilding
secondaries.
2016-05-01 16:47:58 -04:00
SNoiraud 780a4be62c Geography : pylint up to 9.2 for all modules. 2016-05-01 18:55:14 +02:00
Douglas Blank 9d5322103e Allow --database to work without installed bsddb3/sqlite3 2016-05-01 07:38:31 -04:00
romjerome 3c9cbb25b0 Add the new '--remove' entry on some templates (*.rst) for man files 2016-05-01 13:30:49 +02:00
romjerome 01fe16ccb9 French translation update 2016-05-01 13:19:15 +02:00
romjerome 949d620277 merge french translation from gramps42 branch 2016-05-01 12:36:27 +02:00
romjerome c7d957f26b Update translation strings template
$ intltool-update -m
2016-05-01 11:52:51 +02:00
Doug Blank fdadfbd836 testcasegenerator: allow to run from cli 2016-04-30 23:49:47 -04:00
Doug Blank a257311f5f Tests: added tools check and verify 2016-04-30 22:49:51 -04:00
Leonhaeuser f1644e48a6 update German translation 2016-05-01 03:50:51 +02:00
Doug Blank 0a0a450b45 DB-API: get_family_handles(sort_handles=True) now fixed 2016-04-30 16:48:11 -04:00
Paul Franklin 1c06a07156 increase DAR report pylint score from 7.29 to 9.77 2016-04-30 09:43:34 -07:00
Doug Blank 19e0bdeb3d 1954: Book report, Complete Individual Report part - missing sorting 2016-04-30 13:15:07 -04:00
Doug Blank db6cd7e318 Field name lookup: improve error message 2016-04-30 10:47:50 -04:00
Doug Blank 8f77d6db9f 1144: Auto backup at exit, but not when opening another database 2016-04-30 10:25:09 -04:00
Doug Blank 9690c20cbc InMemoryDB: provide None for dbname 2016-04-30 10:05:17 -04:00
Doug Blank cec4bd7a15 Merge pull request #124 from sam-m888/MissedWithOpen
Missed 'open' statements
2016-04-30 02:56:10 -04:00
Sam Manzi 820e981012 Check for non-existent files - remove try/except 2016-04-30 12:02:30 +10:00
Doug Blank e54b557f82 Family Tree Manager: set transient on Info window 2016-04-29 20:42:17 -04:00
Sam Manzi 1c0823bc23 Move Return out of block 2016-04-30 10:02:31 +10:00
Doug Blank 28e99008e0 9332: gramps_connect: Edit/Save Person 2016-04-29 17:20:19 -04:00
Doug Blank 3f329cbf24 Family Tree Manager: rearrange dialogs to handle cancel 2016-04-29 15:38:30 -04:00
Doug Blank 7368bc7127 Family Tree Manager: rearrange dialogs to handle cancel 2016-04-29 15:35:49 -04:00
Doug Blank 33f8aa4d3d 2092: Problems when no database is open 2016-04-28 21:06:43 -04:00
Doug Blank 235383e349 Tests: removed dot and addons 2016-04-28 18:50:32 -04:00
Doug Blank baa199cf63 Tests: refine reports 2016-04-28 18:32:05 -04:00
Doug Blank f460927a3b Tests: 9 more reports 2016-04-28 17:40:10 -04:00
Paul Franklin ed324676f0 add "living people" option to the Fan Chart report 2016-04-28 12:19:33 -07:00
Doug Blank 2f31096abd 9387: Crash on adding media 2016-04-28 14:07:27 -04:00
Paul Franklin af995ad48b tweak "living people" option (change option report output) 2016-04-28 09:22:08 -07:00
SNoiraud 94030eab5f NarrativeWeb : some cleanup + pylint score up to 9.5 2016-04-28 19:42:46 +02:00
Doug Blank d268ddcab2 Tests: add export tests 2016-04-28 13:39:22 -04:00
Doug Blank a9dfc6633e Test: export gedcom 2016-04-28 12:34:34 -04:00
Doug Blank aa69ffb174 Tests: added a generic cli test framework; testing gedcom imports 2016-04-28 11:38:44 -04:00
Doug Blank e9065f3b21 POTFILES typo 2016-04-28 11:34:03 -04:00
Paul Franklin 674571f3e3 tweak "living people" option (change choice strings) 2016-04-28 06:29:12 -07:00
Doug Blank b1617fa51e Travis: move temp dir to /tmp 2016-04-28 10:39:28 -04:00
Doug Blank 4bea2c098a Travis: os.remove crashes old nose 2016-04-28 10:27:22 -04:00
Doug Blank 45445609dc Travis: wrestling with old nose 2016-04-28 10:11:08 -04:00
Doug Blank e571a35e26 CI Tests: additional report testing 2016-04-28 09:08:50 -04:00
Paul Franklin 2ac7c5baa7 add deferred translation to "living people" option 2016-04-27 22:27:25 -07:00
Doug Blank 723d8ea1f6 Add Convert Button to Tree Manager: makes a dbapi from a bsddb 2016-04-28 00:09:03 -04:00
Sam Manzi b21eb6f693 Fix error Undefined variable name 'referenced' in __all__ 2016-04-28 11:45:43 +10:00
Sam Manzi eb4b4d083f Fixes for Missed 'open' statements 2016-04-28 10:34:22 +10:00
Eno 59793536ed Fixes for Missed 'open' statements 2016-04-28 08:23:21 +10:00
Sam Manzi af9baca35e Change Exportgedcoms open 2016-04-27 19:28:26 +10:00
Paul Franklin d40ce7f050 enable deferred translation for EnumeratedListOption items 2016-04-26 18:37:54 -07:00
Eno 35b160ca0b Fixes for Missed 'open' statements 2016-04-27 08:11:58 +10:00
Paul Franklin 1e3730b47b add the "living people" option to the Records report 2016-04-26 08:54:33 -07:00
Paul Franklin cfd322c5df another librecords tweak: check that a Person exists 2016-04-26 07:49:24 -07:00
Doug Blank 95c39a9e1d Export XML: don't crash when exporting filtered/proxied data 2016-04-26 11:44:36 -04:00
Doug Blank 761cf8f428 EditNote: don't crash if referenced item does not exist 2016-04-26 08:22:28 -04:00
Doug Blank 542dad0fc5 Merge pull request #121 from gramps-project/xml-compress
Add compression option on XML export
2016-04-26 08:05:30 -04:00
Doug Blank d4d0f5bdc2 Config: new database-backup-use-compression option 2016-04-26 07:52:47 -04:00
Doug Blank a577e5561e 9383: the Family Tree Manager dialog should show the database type 2016-04-26 07:11:44 -04:00
Paul Franklin d85bd534d3 make librecords play nice with proxy DBs 2016-04-25 21:31:08 -07:00
Dale Athanasias a9685a64ff Missed 'open' statements
From: Dale Athanasias <dalegrind@hotmail.com>
Mon, 25 Apr 2016 13:41:18 +1000
Subject: Missed 'open' statements

Hi Sam,
Here's a few files with missed 'open' statements:
gramps/gen/filters/_filterlist.py
gramps/plugins/export/exportftree.py
gramps/plugins/database/bsddb_support/write.py

And some older files which you probably left alone for a reason?
windows/nonAIO/builder/build_GrampsWin32.py
windows/nonAIO/check_gtk_install.py
windows/nonAIO/builder/make_launcher.py
windows/nonAIO/builder/check_gtk_install.py
windows/nonAIO/nsis/gcheck.py

Regards
-
Dale

Re: Prefer with to open files
https://github.com/gramps-project/gramps/pull/113
2016-04-26 14:29:40 +10:00
Doug Blank 344f953c0b 9411: Creating New DB-API family tree creates an extra __init__.py in the new database directory. 2016-04-25 21:43:32 -04:00
Doug Blank b526a41af1 Merge pull request #113 from sam-m888/useWithOpen
Prefer with to open files
2016-04-25 21:35:23 -04:00
Paul Franklin 5cd618152d 9410: the Records report crashes on family records 2016-04-25 16:45:41 -07:00
Paul Franklin 9d133576e4 add "living people" option to Tag report 2016-04-25 16:40:10 -07:00
Doug Blank 8d59facb60 Db Manager: Select Row of current Tree 2016-04-25 20:41:46 -04:00
Paul Franklin 6ec5de8a78 add "living people" option to the Place Report 2016-04-24 13:57:05 -07:00
Paul Franklin b269fc19d2 add "living people" option to the Kinship Report 2016-04-24 13:53:24 -07:00
Paul Franklin 585a2e046c add "living people" option to the EndOfLine Report 2016-04-24 13:49:39 -07:00
Paul Franklin b1fc20f5b9 add "living people" option to the Detailed Ancestor Report 2016-04-24 13:47:04 -07:00
SNoiraud 13b4f939a7 9405: Narrated Web report - Individual sort order not correct on the Surnames tab 2016-04-24 22:33:22 +02:00
Paul Franklin 74c32fcc23 Merge pull request #122 from daleathan/patch-1
Fix spelling devided > divided
2016-04-24 15:38:17 +00:00
Dale Athanasias 489c8c9afe Fix spelling devided > divided 2016-04-24 23:22:43 +10:00
Paul Franklin 3f7da0aee0 add "living people" option to Ancestor Report 2016-04-23 23:30:52 -07:00
Paul Franklin edf4274686 tidy up the title in the Timeline Report 2016-04-23 23:25:53 -07:00
Paul Franklin 3a590e7dec fix typo in Descendant Report 2016-04-23 23:21:44 -07:00
Paul Franklin 0b6cae988a tweak Birthday Report to use proxy DB always 2016-04-23 23:19:55 -07:00
Paul Franklin 52d414587f add "living people" option to Statistics Chart report 2016-04-23 23:11:26 -07:00
Doug Blank f0e89ef9d3 CLI: require exact re.match for -t 2016-04-23 20:35:37 -04:00
Sam Manzi 050e68e3e4 Spelling 2016-04-24 09:54:17 +10:00
Doug Blank 7e58e2254d CLI: make re match exactly for -l, -L 2016-04-23 18:34:10 -04:00
Doug Blank 5cfb8b1e17 Postgresql and Mysql limit/offset 2016-04-23 17:00:11 -04:00
Doug Blank 3ccc3a3512 DB-API: some SQL implementations need subqueries to be named 2016-04-23 16:07:27 -04:00
Doug Blank a925aa5cc8 DB-API: Show last backup time/date, and total backup counts 2016-04-23 15:54:42 -04:00
Doug Blank e4afbc98cd Postgresql and Mysql LIMIT fixes 2016-04-23 12:50:37 -04:00
Doug Blank cfd686ff59 Bring MySQL and Postgresql up to date 2016-04-23 11:46:22 -04:00
Sam Manzi 230c9d6bd0 8981 Specify required GtkSpell and GExiv2 version 2016-04-23 10:17:52 +10:00
Paul Franklin c27f663137 9383: the Family Tree Manager dialog should show the database type 2016-04-22 08:31:51 -07:00
Doug Blank 048151f447 9383: the Family Tree Manager dialog should show the database type 2016-04-22 07:52:34 -04:00
Paul Franklin 0a3b05f156 8171: Tool 'Rename Event Types' does not include custom types 2016-04-21 22:03:29 -07:00
Paul Franklin f270163c78 typo 2016-04-21 08:54:40 -07:00
SNoiraud 8725df9b03 9377: Narrated web report link to thumbnails is broken on certain pages 2016-04-21 08:52:32 +02:00
Paul Franklin fd8c8f5948 add "living people" option to Database Summary report 2016-04-20 19:11:35 -07:00
Paul Franklin e2b7935ace tweak changetypes tool 2016-04-20 19:08:04 -07:00
SNoiraud d01896788c 9389: Narrated Web report - Individual page sort order has changed 2016-04-20 16:46:43 +02:00
Doug Blank b9dec6b109 Merge pull request #120 from sam-m888/2066LinkeditorAddDropdownlist
2066 Add dropdown list to Link Editor
2016-04-20 07:45:24 -04:00
Doug Blank db7545ab89 Merge pull request #119 from sam-m888/renameMainInterfaceConfigKeys
Rename Main Interface Config keys[for PR-60]
2016-04-20 07:44:20 -04:00
Doug Blank af726ec808 Add compression option on XML export 2016-04-20 07:26:36 -04:00
Doug Blank d3328826ec get_family_handles with sort_handles 2016-04-20 07:18:30 -04:00
SNoiraud 605aab85fd Narrative web : beginning of cleanup. 2016-04-20 12:17:28 +02:00
Paul Franklin f26b793f49 add "living people" option to Ancestor Tree report 2016-04-20 00:28:02 -07:00
Sam Manzi 6a75555157 2066 Add dropdown list to Link Editor 2016-04-20 08:42:11 +10:00
Nick Hall 3c2503fc79 Enable REGEXP operator 2016-04-19 22:07:54 +01:00
Doug Blank 551edbb07a Tests: don't make home person the private person 2016-04-19 07:16:58 -04:00
Sam Manzi 919b91ba38 Rename Main Interface Config keys[for PR-60] 2016-04-19 10:15:05 +10:00
Sam Manzi 1d805510a7 Add back line as per QuLogic 2016-04-19 09:15:56 +10:00
Sam Manzi 3f86dd3e25 Editorial changes & Fixes from QuLogic 2016-04-19 09:15:05 +10:00
Sam Manzi 5dc5615bfd Prefer with context manager to open files 2016-04-19 09:08:21 +10:00
Doug Blank f093c8bd79 Remove Django-style WHERE; consider Python expressions 2016-04-17 16:54:55 -04:00
Doug Blank 3f7b441a54 Shortened names of backends 2016-04-17 15:41:09 -04:00
Doug Blank 4537895941 Add default_label to other implementations of prompt() 2016-04-17 14:27:50 -04:00
Doug Blank cef7bc9af5 Moved guiQML to its own project 2016-04-17 13:01:47 -04:00
Doug Blank 48e808965d Tests: remove more tests to avoid issues in Travis/nose proxy 2016-04-17 11:32:47 -04:00
Doug Blank d83a7eb16f Tests: remove svg/pdf looking for Travis segfault 2016-04-17 11:19:52 -04:00
Doug Blank dd73831343 Tests: call most of the reports 2016-04-17 11:11:54 -04:00
Josip 3a9949076b Fix Error Report Dialog appearance 2016-04-17 15:33:55 +02:00
Josip 121e81a733 Fix_Capitalization_of_Family_Names:
change keyword argument to non-key argument
2016-04-17 15:28:13 +02:00
Josip 02c239c402 8128: GtkDialog mapped without a transient parent
partial fix for:
"Change Event Types" and "Fix Capitalization of Family Names" plugins
2016-04-17 15:07:33 +02:00
Doug Blank 6a47c04228 Database Differences Report: typo 2016-04-17 08:37:47 -04:00
Doug Blank 42a14b6aae CLI prompt: don't default to yes for truly dangerous 2016-04-17 08:26:46 -04:00
Doug Blank bae1417021 Remove DictionaryDB 2016-04-17 07:46:20 -04:00
Doug Blank 2a93a1b023 Tree Manager: adjust column order, add tooltip text
* move database type column
* adjust sizes of columns to fit 800px
* add tooltip text on New to show backend type to create
2016-04-17 07:18:54 -04:00
Doug Blank cc650da616 InMemoryDB: load last, set has_changed = False 2016-04-17 00:31:05 -04:00
Paul Franklin 084830c743 Merge pull request #117 from sam-m888/moveHolidaysToData
7921 Move holidays.xml.in to data [refactor]
2016-04-17 04:01:50 +00:00
Doug Blank a605bf451f Replace dictionarydb with inmemorydb, a sqlite :memory: db 2016-04-16 23:47:29 -04:00
Doug Blank cd5905dfdb data.gramps: add mediapath 2016-04-16 23:04:39 -04:00
Doug Blank 12655fc22e 9386: Slow exit of Gramps GUI 2016-04-16 21:00:31 -04:00
Doug Blank f09c32181a DB-API: fix version 2016-04-16 18:25:46 -04:00
John Ralls 8fd4f7ff8e Bug 8563: Gramps reports that it can't find dictionaries.
Turns out it was really that enchant couldn't find its backend because
an environment variable wasn't set.
2016-04-16 15:08:24 -07:00
Doug Blank 1e228b2193 clidbman: restore accidently deleted code 2016-04-16 17:38:01 -04:00
Sam Manzi 001a95fcf8 Fix typo as per ~47490 2016-04-17 06:09:43 +10:00
Paul Franklin 7accf755d5 typo 2016-04-16 11:40:06 -07:00
Doug Blank eafe35e4af DbManager: add database type column 2016-04-16 14:38:38 -04:00
Paul Franklin 9c045c63c9 add the "living people" option to the three Graphviz reports 2016-04-16 10:54:26 -07:00
Paul Franklin 269f9e7626 8128: GtkDialog mapped without a transient parent -- partial 2016-04-16 10:48:48 -07:00
Leonhaeuser 5628198bb2 update German translation 2016-04-16 11:11:42 +02:00
Doug Blank 880588e635 Fixes for DictionaryDB and InMemoryDB 2016-04-16 04:13:27 -04:00
Doug Blank f0e27af884 DB-API: get_family_handles(sort_handles) add given to sort order 2016-04-16 03:53:16 -04:00
Doug Blank ac1ccfa2b4 9385: gramps -L changes Last Accessed time/date 2016-04-16 03:40:52 -04:00
Doug Blank 516bba4180 CLI: add regular expression patterns to -t, -l, and -L 2016-04-16 03:03:57 -04:00
Doug Blank 67a6e0cf79 gramps -r PATTERN: make no be the default 2016-04-16 02:53:36 -04:00
Sam Manzi 8694c7fcc7 7921 Move holidays.xml.in to data [refactor] 2016-04-16 16:38:43 +10:00
Doug Blank 887490ea5b DB-API: missing BEGIN TRANSACTION for batch mode 2016-04-16 02:32:02 -04:00
Sam Manzi 98ee53aa17 Remove duplicate import/rename method 2016-04-16 09:08:14 +10:00
Sam Manzi 4342b319e3 Merge pull request #102 from SNoiraud/bug5449
5449: Pedigree view crashes if you happen to choose a child as ancestor
2016-04-16 07:19:01 +10:00
Paul Franklin 284d907960 center the book report Available Books dialog 2016-04-15 10:30:34 -07:00
Doug Blank 91ab6e80ca DB-API in-memory replacement for DictionaryDB 2016-04-15 09:46:45 -04:00
Doug Blank 684788f2fd DictionaryDB: use backup on load from file, if available 2016-04-15 09:45:41 -04:00
Doug Blank ce33e7509c DB-API: separate dbapi init from sql init 2016-04-15 08:54:18 -04:00
SNoiraud 9a995b9e30 5449: Pedigree view crashes : changed the name and solved the notrelated glade problem. 2016-04-15 13:50:30 +02:00
Paul Franklin 29a5d9dbe7 add deferred translation to "living people" report option 2016-04-15 00:29:37 -07:00
Doug Blank 67b7805de3 Updated docstring for -t, -l, and -L 2016-04-14 21:03:38 -04:00
Doug Blank d71f9494b8 Move GRAMPS_RESOURCE default into grampsapp.main() 2016-04-14 20:58:27 -04:00
Doug Blank dd55b367ce Add optional list of trees to command-line args: -t -l -L 2016-04-14 20:42:40 -04:00
Doug Blank dbd00b2a32 Merge pull request #114 from sam-m888/pylint-invalid-all-object-E0604
Pylint (E0604) __all__, must contain only strings
2016-04-12 22:24:10 -04:00
Sam Manzi 8c1ebd8020 __all__, must contain only strings 2016-04-13 12:01:32 +10:00
Doug Blank dc486bc79f Merge pull request #112 from sam-m888/fixNonecomparisons
Don't use equality to check None
2016-04-12 20:04:06 -04:00
Sam Manzi 71ddd02459 Don't use equality to check None (2/2) 2016-04-13 09:54:23 +10:00
Sam Manzi 31b10acf97 Don't use equality to check None 2016-04-13 09:51:30 +10:00
Doug Blank 5842a0e10b Merge pull request #110 from sam-m888/FixImportDuplicates
Fix some duplicate imports etc...
2016-04-12 19:15:42 -04:00
Sam Manzi 289d3b9267 Fix some duplicate imports etc... 2016-04-13 08:42:19 +10:00
Ross Gammon b7ac194949 7763: Remove unused jhtmlarea Files 2016-04-13 07:48:20 +10:00
Ross Gammon decefda7e5 7763: Remove remaining Sourceless Javascript Files 2016-04-13 07:42:18 +10:00
Paul Franklin 7f41373f07 8649: Familygroup report: Add filter option 2016-04-11 19:22:37 -07:00
Douglas S. Blank 6b86b154fb add sorted family handles to DB-API 2016-04-11 19:13:49 -07:00
Doug Blank 7dc9379909 Merge pull request #109 from sam-m888/8153SupportCustomEventonGEDCOMexport
8153 GEDCOM 5.5.1 Support Custom Event on export
2016-04-11 20:28:54 -04:00
SNoiraud a472ec4e08 5449: Pedigree view crashes : add examples for testing loops. 2016-04-11 10:06:20 +02:00
Doug Blank 0cd4ee879a DictionaryDB: add missing items to make it completely implement API 2016-04-10 19:22:06 -04:00
SNoiraud 02d0e858c0 0005449: Pedigree view crashes ... : add help to glade file. 2016-04-10 22:22:28 +02:00
Paul Franklin 35c86d929d remove file added by accident, per Mirko 2016-04-10 12:25:23 -07:00
SNoiraud 9fe4820f4c 0005449: Pedigree view crashes ... : add help button + suppress CLI tool mode 2016-04-10 20:08:25 +02:00
SNoiraud 4525b87071 5449: Pedigree view crashes ... : remove last empty line. 2016-04-10 09:57:39 +02:00
SNoiraud 3fe0aaa88a 5449: Pedigree view crashes ... : trailing space and replace list() by set() 2016-04-10 09:55:50 +02:00
Enno Borgsteede 9fe3f6ad05 8153 GEDCOM 5.5.1 Support Custom Event on export 2016-04-10 14:13:39 +10:00
Paul Franklin 0c179a2a47 cope with None family in relview 2016-04-09 16:47:26 -07:00
Doug Blank 61eb2a04a0 Add missing properties to DictionaryDb 2016-04-09 17:34:58 -04:00
Paul Franklin 3bd585f7f8 8128: GtkDialog mapped without a transient parent -- partial 2016-04-09 09:40:37 -07:00
Paul Franklin f0e9078ee4 clarify default setting in report .gpr.py files 2016-04-09 09:31:59 -07:00
Paul Franklin ffbc57755e remove my personal email address from .mailcap file 2016-04-09 09:29:17 -07:00
Leonhaeuser ceaedd55cd Update German translation 2016-04-09 13:15:48 +02:00
Leonhaeuser 983ec7ed74 update German translation 2016-04-09 13:00:55 +02:00
SNoiraud 398f7f9ea7 9362: Attempting to select an "Available item" for the Book Report gives an error 2016-04-09 11:26:36 +02:00
Sam Manzi f73c41f9c0 9635 dbapi_support needs a package init file 2016-04-09 15:07:34 +10:00
Sam Manzi 8dd80a61a1 9635 Add dbapi_support folders to setup.py for installs 2016-04-09 12:36:35 +10:00
Doug Blank 0bab478da3 RelationshipCalc callback: not all signals pass handle_list 2016-04-08 07:38:39 -04:00
Doug Blank 324cea5dd3 9358: get_table_metadata(nav_type) anomaly 2016-04-08 07:30:02 -04:00
Doug Blank dd0f0c6f3e 9358: get_table_metadata(nav_type) anomaly; revert 2016-04-08 07:15:30 -04:00
Doug Blank d9ff7fede2 9358: get_table_metadata(nav_type) anomaly 2016-04-08 06:58:07 -04:00
Nick Hall 3d1643a84e Add some place rule unit tests 2016-04-07 20:48:19 +01:00
Nick Hall ea60555a9b Add some event rule unit tests 2016-04-07 19:21:11 +01:00
Paul Franklin 35626334e6 improve Statistics Chart pylint score from 6.75 to 8.94 2016-04-07 00:29:52 -07:00
Doug Blank e9d2aa9711 Rename duplicate test 2016-04-06 19:58:12 -04:00
Nick Hall f3c9a86545 Add more family rule unit tests 2016-04-06 23:20:45 +01:00
Nick Hall da3db4bc28 Remove deprecated locale flag
re.L is deprecated and re.U is now default.
2016-04-06 23:18:14 +01:00
Nick Hall 0dd79314b1 Check for missing father or mother in family rules 2016-04-06 23:17:10 +01:00
Nick Hall 9bd507d626 Add new family ancestor and descendant rules 2016-04-06 20:51:49 +01:00
SNoiraud f5f024af53 9352: TypeError: 'str' does not support the buffer interface (better solution) 2016-04-06 19:52:18 +02:00
Paul Franklin b620d6a039 tweak Place details gramplet for alternative names: show language 2016-04-05 12:13:40 -07:00
=Matt Keenan 7f4bc4785f 7035: Request for new "Replace All Names" in Export Options dialog 2016-04-05 11:45:36 -07:00
Paul Franklin 96e56d1e56 enhance place report: add place names if two or more 2016-04-04 21:17:41 -07:00
SNoiraud 7fa42f64fa 7793: Fanchart: Please increase limit on generations 2016-04-04 19:17:50 +02:00
SNoiraud 0eb6c18f9a 7074: Add Two related Features to Event and Media pages in the Narrated Web Site report 2016-04-03 09:44:22 +02:00
Paul Franklin d5b5ebbb63 have the Family Group report default be to show marriages 2016-04-01 19:16:36 -07:00
Paul Franklin 86570a0a50 8131: Family Group Report -- tweaks request (added family notes) 2016-04-01 12:05:59 -07:00
Paul Franklin 8be0a72ea9 better pylint score for Family Group report (7.99=>9.31) 2016-04-01 12:01:40 -07:00
Paul Franklin 80ec97baaa allow for more types in "living" proxy 2016-03-31 16:11:19 -07:00
Paul Franklin 2f608f67e6 fix "TypeError: 'tuple' object does not support item assignment" 2016-03-31 12:34:18 -07:00
Paul Franklin 3c9f9901e6 add "living people" option to TimeLine report 2016-03-31 12:10:15 -07:00
Paul Franklin 4136d22509 add "living people" option to Descendant Tree report 2016-03-31 12:08:42 -07:00
Paul Franklin 2c8feb372c 5176: add "living people" option to Family Group report 2016-03-31 09:08:38 -07:00
Paul Franklin 7177dc34db 5176: add "living people" option to Complete Individual report 2016-03-31 09:06:18 -07:00
SNoiraud 0de5324c07 9352: TypeError: 'str' does not support the buffer interface 2016-03-30 12:12:28 +02:00
Doug Blank afd32966f2 Merge pull request #108 from tecknicaltom/fix-dictionarydb-tags
fix the name map of tags in DictionaryDb
2016-03-29 13:23:05 -04:00
Tom Samstag ea78dff2f2 make tag name map fix more readable
I think this version of the fix is more readable
2016-03-29 09:03:24 -07:00
Tom Samstag 607d4889d6 fix the name map of tags in DictionaryDb
DictionaryDb had a bug where the same tag could end up in the name
mapping multiple times. This was most easily seen when loading a gramps
xml into a DictionaryDb, where an extra entry with the tag name of ''
would be created and would ultimately be referencing the last-created
Tag (also referenced by its proper tag name). This change makes sure
that when editing a tag, any existing references in the name mapping are
deleted before adding.
2016-03-29 08:32:18 -07:00
Josip 28b1db78e0 9335: Gramps has experienced an unexpected error 2016-03-28 14:52:58 -07:00
SNoiraud ba55d47143 9345: Error when trying to create narrative report (residence event) 2016-03-28 14:49:21 +02:00
SNoiraud f290814ea3 9347: Places index + Media index are incorrectly sorted 2016-03-28 14:47:40 +02:00
romjerome 105dfb9ad5 9315: [Regression]: Filter set by default on selector is ignored
'Show all' button status and first load
2016-03-28 09:24:10 +02:00
Sam Manzi 361634ecaa Merge pull request #107 from tecknicaltom/test_filters1
Initial batch of tests of filter rules
2016-03-28 16:19:11 +11:00
Tom Samstag ebbbe6b436 Initial batch of tests of filter rules
After finding a bug in a filter that caused it to return incomplete
results in master (not yet patched), I decided to develop tests for the
filter rules. This first batch is all listed person filter rules that
either take no parameters or take a single ID parameter. I originally
wanted to use the smaller data.gramps instead of example.gramps, but
there were more unrepresented edge cases that wouldn't allow for testing
all filters (e.g. disconnected individuals).

All test values are based on what Gramps currently returns, with some
efforts made to try to verify the results. If the example.gramps file
changes, these tests will likely have to be updated. I tried to
cross-version validate them with v4.1, but the implementation of
DictionaryDb is too incomplete and many tests fail for unrelated
reasons.
2016-03-27 14:11:49 -07:00
Doug Blank 162d26d4dc 9331: Empty handle, bsddb backend and place 2016-03-25 09:22:58 -04:00
Paul Franklin e787fac396 9321: Cannot exclude living people from descendant reports 2016-03-24 13:13:56 -07:00
Paul Franklin 8ed5a281d5 9321: Cannot exclude living people from descendant reports 2016-03-24 13:11:57 -07:00
Paul Franklin da0b478421 center the Book dialog (in the whole screen) 2016-03-24 12:16:15 -07:00
Paul Franklin 17b2fe1cba 5176: Reports ignore "Private" flag and "Living People" 2016-03-24 09:37:47 -07:00
Paul Franklin c23093d6f8 add a few more parents to a few more dialogs 2016-03-22 21:04:22 -07:00
Doug Blank 2b6a96afbd Merge pull request #106 from tecknicaltom/filtering_filters
add a filter to the tree of rule filters
2016-03-22 16:39:31 -04:00
Paul Franklin 7b33bb1718 remove unneeded Icelandic directives 2016-03-22 11:58:19 -07:00
Paul Franklin d2acfdf48e 9320: D.A.R. has ? for locations when [private data is excluded] 2016-03-21 16:52:50 -07:00
Paul Franklin 5032a1e189 add Windows Python header files for 32-bit and 64-bit machines 2016-03-20 23:04:23 -07:00
SNoiraud 0c67821171 8602: Age in the event family view column is wrong. better solution. 2016-03-20 13:38:39 +01:00
SNoiraud d414f33d01 9278: Crash when dragging multiple media items to clipboard 2016-03-19 23:46:00 +01:00
SNoiraud 32be137dd8 9316: Unable to build narrated web site 2016-03-19 23:13:14 +01:00
romjerome 6fabb04bbe 9151: [Regression] vCal Export File format invalid
Do not encode text anymore (patch by Serge)

Fix an invalid RRULE for annual recurence

TODO: maybe try to update to VCalendar 2.0 (iCal)?
2016-03-16 11:19:15 +01:00
Nemeséri Lajos 5eeda60b60 Update Hungarian translation 2016-03-16 11:10:53 +01:00
Paul Franklin cbc8cc38a9 9294: Error occurs for Complete Individual Report -- complete database 2016-03-14 17:24:07 -07:00
Tom Samstag b96645084a add a filter to the tree of rule filters
I can never remember which category filters are in when making a new
rule. This change adds a filter entry above the treeview. As you type,
filters that do not contain the search text (case insensitively) are
made not visible. Categories are always visible, but will no longer
expand if all of their child nodes are hidden.
2016-03-14 00:05:13 -07:00
Paul Franklin d7480aa0ff add standard Windows Python header file, for now 2016-03-08 07:57:12 -08:00
Doug Blank 096615a465 Merge pull request #105 from DaAwesomeP/master
Use new Travis container and Apt addon
2016-03-08 05:49:22 -06:00
֍ DaAwesomeP ֎ 8d3ab52904 Use new Travis container and Apt addon 2016-03-07 23:01:13 -06:00
Paul Franklin c007cdd82c clarify these old files are not for the current Windows AIO package 2016-03-07 14:53:43 -08:00
romjerome 6c1ba0f23f 9006 9111 9274: fix scrolling in persons view after typing some letter
TypeError: unsupported operand type(s) for +=: 'NoneType' and 'int'

Thank you schnitker for report, investigations and patch
2016-03-07 15:06:53 +01:00
romjerome 79c193f74b 9242: multiple lines on firstname can corrupt ODT file
fix gramps XML file via import/export but do not know the cause
2016-03-07 15:05:19 +01:00
SNoiraud 1cfd71001c 9293: Narrative Web report further stops in error. 2016-03-06 13:04:51 +01:00
SNoiraud 7f5d4fb10f Geography : 9207: geography view Location could not convert string to float. 2016-03-06 11:51:29 +01:00
Doug Blank 651aac6afa Merge pull request #104 from tecknicaltom/fix_export_preview
fix some crashes in export preview
2016-03-04 06:27:12 -06:00
Doug Blank c4fac4aad8 9288: Error still when creating a Narrative Website Report 2016-03-03 16:50:29 -06:00
Sam Manzi b1cf276104 Add pypi classifier for Natural Language :: Icelandic 2016-03-03 19:26:39 +11:00
Tom Samstag 4b32841dd4 fix some crashes in export preview
These issues were all found while trying to use the "Calculate Previews"
feature of the export wizard.

gen/proxy/referencedbyselection.py: ProxyDbBase need not define the
writable functions (add_*, commit_*, del_*) in its __tables. ProxyDbBase
doesn't have methods for add_person, etc, so this was causing an
AttributeError

gen/proxy/referencedbyselection.py: Add some handle checks to prevent
lookups on None handles

gen/proxy/proxybase.py: remove redundant test
2016-03-03 00:11:17 -08:00
Sam Manzi 4960f859ed 8294 Recognise Ghostscript on 64bit ms-windows 2016-03-03 15:28:38 +11:00
Doug Blank 8d08b62c8d 9284: Narrative Report with BSDDB, additional fixes and test 2016-03-02 09:13:35 -06:00
Doug Blank 7dca404669 9284: Narrative Report with BSDDB 2016-03-02 08:36:02 -06:00
Matti Niemelä f218ab0cd7 Update Finnish translation 2016-03-02 13:47:01 +01:00
Doug Blank 8c35de5642 Travis: python3-coverage does not exist 2016-03-01 07:33:48 -05:00
Doug Blank 70de5e8899 Travis: attempt to use coverage 2016-03-01 07:26:11 -05:00
Paul Franklin cc13810673 make setup.py typeout more accurate 2016-02-29 17:25:16 -08:00
Doug Blank d03d99ccce Travis: working, but without coverage 2016-02-28 18:32:21 -05:00
Doug Blank 40af708cab Travis: try to find right nosetests 2016-02-28 18:25:19 -05:00
Doug Blank 689eaf2603 Travis: cleanup, include pyicu 2016-02-28 18:20:37 -05:00
Doug Blank 14c65f8de6 Travis: use pip, which should be new pip 2016-02-28 18:06:17 -05:00
Doug Blank 7448e2f1e0 Travis: use python, which is 3.4 2016-02-28 18:02:06 -05:00
Doug Blank 6a9129c7b9 Travis: try Python 3.4 2016-02-28 17:55:37 -05:00
Doug Blank 400825207a Add pillow, coverage, pip3, and codecov via alternative methods 2016-02-28 17:51:45 -05:00
Doug Blank 89cb62f3e2 Add pillow, coverage, pip3, and codecov via alternative methods 2016-02-28 16:48:36 -05:00
Doug Blank f55c93508a Test framework for testing reports 2016-02-28 15:56:39 -05:00
Doug Blank ad3dcb8d13 Hide db._select(); Refactor db._tables; QuerySet; tests and bug fixes
db.select() has become db._select()

This commit refactors database._tables so that they can work properly
after a proxy or filter has been removed.

It adds abstract API called QuerySet which allows a variety of
selections and ordering of data.

Logging was added to sqlite to better see db access.

Additional fixes:

* clearing GenericDB._directory
* test_util_test off-by-one error
2016-02-28 15:40:16 -05:00
SNoiraud 0650bd8643 5449: Convert list to set 2016-02-25 11:01:11 +01:00
Doug Blank 0415ac8eab Merge pull request #94 from olaf-ka/newrelgraphoutput
New output options for Relationship Graph
2016-02-23 09:22:17 -05:00
Doug Blank 819223b2be Merge pull request #97 from sam-m888/9255AddCitationsSelectorToLinkEditor
9255 Add Citations Selector To Link Editor
2016-02-23 08:25:25 -05:00
SNoiraud e64737bb51 0743: Searching in people view when surnames are collapsed 2016-02-23 11:05:32 +01:00
SNoiraud 84f4ce3513 TreeBaseModel : str has no encode method. 2016-02-22 15:42:04 +01:00
SNoiraud 9bc91af2de 5449: Pedigree view crashes if you happen to choose a child as ancestor 2016-02-22 15:27:33 +01:00
Zdeněk Hataš 863a325e1d czech translation update 2016-02-22 09:02:09 +01:00
Sveinn í Felli 11562eba1d Update Icelandic translation 2016-02-21 14:31:45 +01:00
Sveinn í Felli cfd2c3f5a8 Add dates and relationships handlers for Icelandic 2016-02-21 14:29:07 +01:00
SNoiraud 78b5fba358 3068: Wrong reference number for "same person as" in detailed descendant report 2016-02-19 19:40:27 +01:00
SNoiraud e14cb98d66 8602: Age in the event family view column is wrong 2016-02-19 18:47:46 +01:00
Paul Franklin b22de39a25 correct indentation in books.xml 2016-02-19 03:10:55 -08:00
Paul Franklin 69eeca4c47 remove dead code 2016-02-19 02:57:33 -08:00
romjerome ca202ee3ed Merge Icelandic translation with last template 2016-02-17 16:33:38 +01:00
romjerome d658142432 update translation strings template 2016-02-17 16:32:05 +01:00
romjerome 1618e58176 $ intltool-update -m 2016-02-17 16:30:03 +01:00
Sveinn í Felli c214904bd4 Update Icelandic translation 2016-02-17 16:24:21 +01:00
Sam Manzi e7fafa3a86 9255 Add Citations Selector To Link Editor 2016-02-17 16:37:19 +11:00
Doug Blank ae260c189f Added codecov patch 2016-02-13 15:54:09 -05:00
Doug Blank 8a02c85bde Turn on coverage/codecov in Travis 2016-02-13 08:09:03 -05:00
Nick Hall 7237d9baa3 Fix error when changing database in new locations gramplets 2016-02-11 19:46:08 +00:00
SNoiraud b5e904be60 9094: Double-clicking on a source causes exception : better solution. 2016-02-10 17:49:24 +01:00
John Ralls cb58270bf6 Fix comment about getting the right encoding for stdout. 2016-02-09 11:19:45 -08:00
John Ralls bd27233cfc Bug 9178: Error loading Participants add-on in French locale
Restores setting the stdout encoding to sys.getdefaultencoding() in a
way that works with Python3 (thanks to Jack O'Connor on stackoverflow)
and in a place that sets it for the loggers, too.
2016-02-09 11:15:02 -08:00
John Ralls c11fbe8bfc Bug 9159: Date format does not match system.
Make US English a special-case locale with en_GB the default if the locale
is en_XX where XX != US.

Note that untranslated languages will still end up using the 'C' locale.
2016-02-08 13:13:16 -08:00
Nick Hall 524413f7c3 Enhance the Locations gramplet
Create a new "Encloses" gramplet to the display places that the
active place encloses. Rename existing gramplet to "Enclosed By".
2016-02-08 19:36:47 +00:00
Doug Blank 202e1f5594 Protection from null objects 2016-02-07 11:58:59 -05:00
Doug Blank 429b91d357 IsAncestorOf bug hidden by looking up null handle 2016-02-06 21:43:03 -05:00
SNoiraud e54ed1254a 7852: Rename family tree does not update the title of the parent window. 2016-02-02 10:34:52 +01:00
Doug Blank 72e897b44b Database.select(where=('','LIKE','')) in Python matches across lines 2016-01-31 21:47:37 -05:00
Doug Blank 18ac940566 Add labels to SytledText and Note 2016-01-31 09:17:35 -05:00
Doug Blank c4e7d0ec25 StyledText: don't crash if styles are corrupt 2016-01-31 09:17:01 -05:00
Doug Blank 403c87b887 DB-API and DbDictionary both use same binary handles as BSDDB 2016-01-31 09:15:52 -05:00
Doug Blank 2fb9a018c7 Remove unused code 2016-01-31 09:14:27 -05:00
SNoiraud 5e369b9f66 2060: Individuals with incomplete names, not updated when name completed 2016-01-31 12:15:18 +01:00
SNoiraud 3c20e4eeef 6873 : Children gramplet in Family view does not get updated when a birth/death events are added to a child 2016-01-31 11:31:41 +01:00
SNoiraud dfd1a596ab 5417 : Non-image media objects don't appear in the main window gallery. 2016-01-31 11:16:10 +01:00
Doug Blank abd69fbebd Added schema to Tag 2016-01-30 14:44:39 -05:00
Doug Blank 3b1ff1e30f Added schema to Note and StyledText 2016-01-30 14:25:51 -05:00
SNoiraud ae8572187e 9136: Pressing tab stops at element in gui places 2016-01-30 15:34:51 +01:00
Doug Blank 3b6a621635 Database selects/iters can order by any field 2016-01-29 09:53:51 -05:00
Doug Blank c28c49ba67 A version of touch() for Python3.2; use now as time 2016-01-28 16:57:06 -05:00
Doug Blank de07b9d4f1 A version of touch() for Python3.2 2016-01-28 16:53:06 -05:00
SNoiraud f144b4c425 9094: Double-clicking on a source in the citation gramplet causes exception 2016-01-28 19:54:52 +01:00
Doug Blank 80d710da48 Attempt to make Python 3.2 work with fd; typo 2016-01-28 07:59:50 -05:00
Doug Blank d1af8a615f Attempt to make Python 3.2 work with fd 2016-01-28 07:54:47 -05:00
Doug Blank 4b565fe7bc Attempt to make Python 3.2 work with fd 2016-01-28 07:50:49 -05:00
Doug Blank 7b0b23c6f1 Added database testing; fixed bugs in select
* WIP: Tests BSDDB and DBAPI databases
* testing select and get_field
* fixed a bug in primaryobj
2016-01-28 06:44:41 -05:00
Doug Blank eec418c192 DB-API: allow handles as secondary fields
* mother_handle is now secondary field
* fixed issues in join in primaryobj._follow_chain
* added logging to dbapi loading
* optimize rebuild, only what is needed
2016-01-27 07:18:12 -05:00
SNoiraud 78be94481d 9200: "Find text in record" filter crash 2016-01-27 13:13:58 +01:00
SNoiraud 9dc962be1f 9153 : vCard Export does not work 2016-01-27 10:57:05 +01:00
Doug Blank 2cf95cd866 DB-API: moved from github:gramps-project/addons-source 2016-01-26 18:07:12 -05:00
Doug Blank 64a3b6570d PrimaryObject.get_field(): ignore error on invalid list length 2016-01-26 14:14:12 -05:00
Doug Blank 84ed939e82 Object.get_field: two bugs, one in attr on list, and multiple results 2016-01-26 13:55:09 -05:00
Doug Blank 5e84b3b1d6 BSDDB: renamed filter to where; un hash result names 2016-01-25 21:58:01 -05:00
Doug Blank 4463d8850c BSDDB: adding missing iter methods; fixed a bug in iter by_order 2016-01-25 08:29:00 -05:00
SNoiraud a99b56e123 7619 : Notes used in the "To Do" gramplet are found by the Remove Unused Objects tool 2016-01-25 11:10:13 +01:00
Doug Blank 21869e4939 Missed object to media in libgedcom 2016-01-24 18:29:48 -05:00
Doug Blank c19f4b47a9 Rename database methods: _object to _media 2016-01-24 18:15:50 -05:00
Doug Blank b472d6a8b1 Family: define extra secondary fields, and indexes 2016-01-24 09:55:11 -05:00
Doug Blank 1de7bb5ebc iter_OBJECTS can take an order_by field list 2016-01-24 08:56:37 -05:00
Sebastian Schubert f7e8f04121 Finish translation: ending ";" in keywords of desktop entry
(cherry picked from commit 56ff535968)
2016-01-24 14:51:08 +01:00
Fedik 5a6b74ef75 Ukrainian translation: update translation, a bit 2016-01-24 15:49:54 +02:00
Fedik 36a10bb5ec Ukrainian translation: update from template 2016-01-24 15:41:38 +02:00
Doug Blank 157604b40e Rename *_media_object methods to *_media 2016-01-23 21:53:14 -05:00
Olaf 98a50dfd68 add option to output more than one occupation in relationship graph 2016-01-24 00:10:42 +00:00
Doug Blank 2eeda93617 Renamed get_object_from to get_media_from 2016-01-23 19:00:13 -05:00
Doug Blank 885bab26ef Merge pull request #93 from dsblank/master
7335: Cleanup code, filenames, and documentation
2016-01-23 18:50:11 -05:00
Doug Blank 32b8005e0e Fixed unnecessary comparisons 2016-01-23 18:45:54 -05:00
Doug Blank 74ab1ba874 Merge remote-tracking branch 'upstream/master' 2016-01-23 18:42:09 -05:00
Olaf 15e691ded9 Add another way of showing dates and places in relationship graph
This will display date and place of birth/death/marriage events next to each
other, one line for each event.
2016-01-23 23:14:34 +00:00
Doug Blank b131121072 Remove python3-icu in testing 2016-01-23 18:00:58 -05:00
Doug Blank feebedad65 Exclude user_test because of older version of mock; use python3-icu 2016-01-23 17:57:23 -05:00
Doug Blank 78f3b29b4c Exclude TestUser tests because of older version of mock 2016-01-23 17:50:27 -05:00
Doug Blank 44866a90f7 Use easy_install3 to install mock 2016-01-23 17:39:41 -05:00
Doug Blank 5efb313177 Get pip3 from python3-setuptools 2016-01-23 17:33:46 -05:00
Olaf 9d83cbbc52 clean up output of families from relationship graph 2016-01-23 22:24:19 +00:00
Doug Blank db6e70d24b Use built in python3 only, old version of mock 2016-01-23 17:20:23 -05:00
Doug Blank e3e32bcddf Use python rather than python3 2016-01-23 17:05:01 -05:00
Doug Blank 02818ac867 Use python3 and forget pip 2016-01-23 16:32:30 -05:00
Doug Blank 885af4271c Use python3.4 directly 2016-01-23 16:28:29 -05:00
Doug Blank 106cff20aa Get pip a different way 2016-01-23 16:24:09 -05:00
Doug Blank adecfe26cf Try using python3.4 specifically 2016-01-23 16:16:37 -05:00
Doug Blank 05eef13110 Try using python3-pip package 2016-01-23 16:06:42 -05:00
Doug Blank b9e5db3563 Try using downloaded pip3.4 2016-01-23 16:02:40 -05:00
Doug Blank 4394535139 Try using built in pip3.4 2016-01-23 15:56:08 -05:00
Doug Blank bc0562d9b3 Try using built in pip 2016-01-23 15:50:14 -05:00
Doug Blank ec5c8cccef Try using built in pip3 2016-01-23 15:44:25 -05:00
Doug Blank cb74c40afa Try using Python 3.4 2016-01-23 15:37:29 -05:00
Doug Blank ee05e0b451 7335: Cleanup code, filenames, and documentation
First part of cleanup, changes:

MediaObject -> Media
mediaobj -> media
mediaobject -> media
2016-01-23 14:22:41 -05:00
Marek Szuba 186c2bcfef Only consider the values of LC_ALL, LANG, and LANGUAGE, in that order, when choosing the default locale.
Default arguments of locale.getdefaultlocale() consider the value
of LC_CTYPE in addition to the three aforementioned all-category
variables, which under certain conditions (LC_CTYPE set, LC_ALL and
the rest of LC_FOO unset) would result in the locale set in LC_CTYPE
(which should only affect interpretation of byte sequences as
characters) spilling over to other locale categories handled by the
GrampsLocale object. The most visible effect of that spill was that
with LC_ALL, LANG, LANGUAGE and LC_MESSAGES unset but LC_CTYPE set,
Gramps would start using the wrong UI language.
2016-01-22 13:42:50 -08:00
John Ralls 65442c2da8 Bug 9191: Unable to select Unicode UTF-8 encoding on command line
Make the option descriptions line up when the value is shorter than 10
characters. Also make the value and description headings line up with the
list and put "Available values are:" first.
2016-01-22 13:39:37 -08:00
Ivan Komaritsyn a947bd3598 update Russian translation 2016-01-18 11:04:47 -08:00
John Ralls dbdec516b9 Fix err undefined exception. 2016-01-18 09:16:44 -08:00
Doug Blank b7444dd9b0 DB-API: Cut database access by 50% when iter by handles 2016-01-18 09:21:18 -05:00
Doug Blank 82d02c5c1b Fix error in NOT in select 2016-01-17 13:21:16 -05:00
Doug Blank dfc0808167 Add tests for Object.get_field
* tests for get_field, with and without join
* fix bug in Handle
* fix issues in get_field
2016-01-17 12:07:31 -05:00
Paul Franklin 1ced0ac405 typo 2016-01-16 15:43:35 -08:00
romjerome d509c44d69 9121 9146 9162: Cannot import gedcom generated by RootsMagic
custom place details ignoring PlaceName()
2016-01-16 15:18:35 +01:00
Doug Blank 8525397067 9166: People sorted by surname view now crashes
Fixed issue by surrounding gramplet load code in try/except.
2016-01-14 07:13:47 -05:00
SNoiraud ee0e343e1e 8950 : Narrative web : html elements emitted in different order 2016-01-14 10:04:29 +01:00
Doug Blank f9930c1bcf Revised db.select to be completely general 2016-01-13 08:20:50 -05:00
Doug Blank dc698782b9 db.select does a recursive compare when multi-values 2016-01-12 10:09:51 -05:00
Doug Blank 0c90679515 Added missing get_schema() to some objects 2016-01-11 21:46:10 -05:00
Doug Blank 2195c2e885 db.select(): added [NOT filter] 2016-01-11 17:43:53 -05:00
Doug Blank f45c75988c db.select: updated doc strings for filter format 2016-01-11 17:36:37 -05:00
Doug Blank 9d6d791e21 Made select use proper recursive expressions; some optimizations 2016-01-11 17:19:14 -05:00
Doug Blank 8902d8f5de Add Family field aliases 2016-01-11 07:28:28 -05:00
Doug Blank a3c0ff5c18 Add missing EventRef.get_schema() 2016-01-10 18:37:13 -05:00
Nick Hall e16e772057 Add .pylintrc file
Set maximum line length to 80 characters (previous default).
Allow "db" as a good variable name.
2016-01-10 16:41:44 +00:00
Doug Blank 22fa6ed63a Refinements in db.select; allow joins 2016-01-10 10:55:45 -05:00
Nick Hall 177e30ee62 Improve pylint score of gen modules to above 9 2016-01-10 15:40:52 +00:00
Nick Hall b8a38cd5e5 Improve pylint score to above 9 for most gen.lib objects 2016-01-09 15:34:59 +00:00
SNoiraud e013122afc 9163 : Narrative web : "errno: 1, operation is not permitted" when creating archive. 2016-01-09 10:23:50 +01:00
Josip 73b3ccbd0e 9122: Complete Report about person (whole database) - PDF - crash 2016-01-08 20:55:20 -08:00
Nick Hall 76d8c70b91 Remove redundant ignore list from attribute types 2016-01-09 00:50:49 +00:00
Nick Hall c3eab4e6e3 Further pylint improvements 2016-01-09 00:27:42 +00:00
Doug Blank 831330b6d0 Moved Django templates out of gramps 2016-01-08 18:54:25 -05:00
Doug Blank f26c9f7055 Added missing get_labels, get_schema 2016-01-08 18:44:38 -05:00
Nick Hall e64fa65552 Remove redundant objects
These were needed for database upgrades but are no longer
referenced anywhere.
2016-01-08 22:58:25 +00:00
Nick Hall 80f05956b4 Gramps type pylint improvements 2016-01-08 21:57:04 +00:00
Doug Blank 1654757c22 db.select() can now use filter; returns total count, and selection 2016-01-08 14:07:43 -05:00
Doug Blank cc00442e0b Added missing del_func to BSDDB._tables 2016-01-08 04:34:30 -05:00
Nick Hall e85af204dd More pylint improvements 2016-01-07 19:52:05 +00:00
Nick Hall 72d0d46535 Date object pylint improvements 2016-01-07 19:52:05 +00:00
Doug Blank eaf1649ef3 Remove remaining mentions of webapp 2016-01-07 13:05:53 -05:00
SNoiraud 22b5c7a14c Geography : change one place selection function by a method. 2016-01-07 09:53:57 +01:00
Doug Blank ecc8939840 Removed Django references 2016-01-06 15:43:13 -05:00
Doug Blank 7aa7f26bbb Removed webapp to django-webapp project 2016-01-06 15:24:27 -05:00
Doug Blank b39fd5b634 Added missing schema 2016-01-06 10:07:25 -05:00
Doug Blank 640e834c22 Refactor of labels/fields/schema 2016-01-06 10:06:47 -05:00
Doug Blank 5a8264f70e db.select/get_rows now returns a dictionary 2016-01-06 10:06:05 -05:00
Doug Blank ed0001ba0e 9155: proper fix 2016-01-06 15:39:46 +01:00
romjerome d6f3149a38 Fix previous commit [faaabc]
Do not create an additional database access
2016-01-06 15:25:39 +01:00
romjerome faaabcef3a 9155: Unhandled AttributeError when db.get_tag_from_handle returns None 2016-01-06 14:51:43 +01:00
Doug Blank 3cb64cdca8 Need to rebuild reference map if making changes in batch mode 2016-01-05 13:44:43 -05:00
Doug Blank 195fdc3cf8 Removed should_exit from tests 2016-01-05 13:17:11 -05:00
Doug Blank 5130269f31 Use db_is_open properly 2016-01-05 13:08:53 -05:00
Nick Hall c9b5830a37 Fix bug introduced in pylint tidy up 2016-01-05 18:03:33 +00:00
Doug Blank 27e79a3e76 CLI: if database is opened at end, then close it 2016-01-05 13:01:48 -05:00
Doug Blank d44673c260 Don't exit from arghandler, just return 2016-01-05 13:00:30 -05:00
Nick Hall 8717839809 Add validation to gender field 2016-01-01 19:22:53 +00:00
Paul Franklin 895f8a1cfc 9073: "Unknown" spouse uses hardcoded string [deferred translation] 2016-01-01 10:47:54 -08:00
Tom Samstag 4ff2cf30e2 fix handling of a None handle 2016-01-01 09:46:20 -08:00
Nick Hall 307f236771 Primary object pylint improvements 2015-12-31 23:06:16 +00:00
Nick Hall e82148677d Replace tabs with spaces 2015-12-31 21:17:49 +00:00
Nick Hall e67832d384 Merge pull request #86 from tecknicaltom/various_python_issues
Various python issues
2015-12-31 21:15:46 +00:00
Nick Hall 843795738d 8556: ValueError: underlying buffer has been detached
The expat parser requires a binary mode file object.
2015-12-31 18:30:02 +00:00
Doug Blank cc6b54c5d9 Object.get_label() now a class method. Fixed error in Name schema 2015-12-31 08:47:48 -05:00
romjerome b77aeb39e7 Year 2016 2015-12-31 11:19:10 +01:00
romjerome 937cd509d0 9114: mars month instead of Marzec (Polish) 2015-12-31 11:17:20 +01:00
Tom Samstag 92c2ddc33e remove unnecessary pass statements 2015-12-31 00:24:07 -08:00
Tom Samstag e9eedee5c6 change tabs to spaces 2015-12-31 00:08:42 -08:00
Tom Samstag 602ad1bc53 not x is None -> x is not None 2015-12-31 00:03:22 -08:00
Tom Samstag de8d8370e3 fixing else clauses on loops 2015-12-30 22:46:57 -08:00
Tom Samstag 4053d84a5f fix a raising of NotImplemented
It may not have caused any issues, but changing this from raising
NotImplemented to a NotImplementedError. Explanation about why this is
important at:
http://mouadino.appspot.com/notimpelementederror-vs-notimplemented-in-python/
2015-12-30 22:09:13 -08:00
Paul Franklin 76315be47d 8128: GtkDialog mapped without a transient parent 2015-12-30 21:43:31 -08:00
Doug Blank 85e4a29af4 Allow struct API to work on missing data 2015-12-30 15:11:27 -05:00
Doug Blank 0bfee44e9b Selection method added to database 2015-12-30 14:03:46 -05:00
Doug Blank 41f9e3cccc PrimaryObject.get_field can call methods 2015-12-30 11:06:11 -05:00
Doug Blank 895531c2e3 Having a method used by instance or class is a bad idea 2015-12-30 11:03:40 -05:00
Ivan Komaritsyn d1e11f4172 update Russian translation (with "master" gramps.pot) 2015-12-29 23:42:31 -08:00
Paul Franklin e473f9dc89 8128: GtkDialog mapped without a transient parent
The set of fixes was actually triggered by comments in
https://gramps-project.org/bugs/view.php?id=9122#c45895
https://gramps-project.org/bugs/view.php?id=9122#c45921

The project is ongoing, since it's needed for our Windows users.
2015-12-29 22:49:05 -08:00
Nick Hall a65e69cb53 Only check for changed data when cancel button clicked 2015-12-30 00:41:00 +00:00
Nick Hall be7e9ace36 Update docstrings for database get methods 2015-12-29 23:47:42 +00:00
Nick Hall 39c8d33169 Merge pull request #84 from tecknicaltom/more_None_handle_fixes
fixes for None handle errors: single-parent family
2015-12-29 23:32:34 +00:00
Nick Hall 5729db8f7f Avoid check for changed data when save button clicked 2015-12-29 20:00:40 +00:00
Nick Hall 40ca8a2da4 Store original object during editor initialisation 2015-12-29 19:54:18 +00:00
Tom Samstag 4ac6d346f4 fixes for None handle errors: single-parent family
Fixes for Person lookups with None handles, related to the use of a
single-parent family
2015-12-29 10:42:00 -08:00
Nick Hall 715277d9ac Fix handle errors in family lines graph 2015-12-29 18:23:14 +00:00
Doug Blank f4af5277e6 Struct.from_struct is also a classmethod 2015-12-29 13:09:49 -05:00
Paul Franklin 74f9fb1b8e 9137: Report Plugin [LaTeX backend] crashes 2015-12-28 12:02:15 -08:00
Zdeněk Hataš f0e2aa6cc9 czech translation update, fixed Places terminology 2015-12-28 20:29:57 +01:00
SNoiraud 60f4c76fa2 Geography : trying to solve possible gramps.gen.errors.HandleError: Handle is None 2015-12-27 23:10:13 +01:00
SNoiraud 2aca380484 Geography : add transient for progress bar in events view + change message. 2015-12-27 19:45:28 +01:00
SNoiraud 4a47edc39c Geography : add transient parent + change message 2015-12-27 19:08:57 +01:00
Nick Hall 33b9e80028 Fix place hierarchy creation during import 2015-12-27 17:19:41 +00:00
Doug Blank e0c6468c77 Moved translation funtion to get_label/get_labels 2015-12-27 09:37:01 -05:00
Doug Blank 57e349a280 Merge pull request #82 from tecknicaltom/relview_None_handle
Fix for a None handle lookup in relview
2015-12-27 07:53:50 -05:00
Doug Blank 84e484bb64 Struct moved to gen.lib 2015-12-27 07:46:05 -05:00
Tom Samstag c5daf38878 Fix for a None handle lookup in relview
If focusing on the relationship view with an empty tree loaded, an
uncaught exception was raised by attempting to call
get_person_from_handle with a None handle:

Traceback (most recent call last):
  File "dev/gramps/installed/lib64/python3.4/site-packages/gramps/gui/viewmanager.py", line 1011, in view_changed
    self.__change_page(page_num)
  File "dev/gramps/installed/lib64/python3.4/site-packages/gramps/gui/viewmanager.py", line 1024, in __change_page
    self.active_page.set_active()
  File "dev/gramps/installed/lib64/python3.4/site-packages/gramps/gui/views/navigationview.py", line 154, in set_active
    PageView.set_active(self)
  File "dev/gramps/installed/lib64/python3.4/site-packages/gramps/gui/views/pageview.py", line 304, in set_active
    self.build_tree()
  File "dev/gramps/installed/lib64/python3.4/site-packages/gramps/plugins/view/relview.py", line 205, in build_tree
    self.redraw()
  File "dev/gramps/installed/lib64/python3.4/site-packages/gramps/plugins/view/relview.py", line 465, in redraw
    self.change_person(None)
  File "dev/gramps/installed/lib64/python3.4/site-packages/gramps/plugins/view/relview.py", line 470, in change_person
    return self._change_person(obj)
  File "dev/gramps/installed/lib64/python3.4/site-packages/gramps/plugins/view/relview.py", line 500, in _change_person
    person = self.dbstate.db.get_person_from_handle(obj)
  File "dev/gramps/installed/lib64/python3.4/site-packages/gramps/plugins/database/bsddb_support/read.py", line 723, in get_person_from_handle
    return self.get_from_handle(handle, Person, self.person_map)
  File "dev/gramps/installed/lib64/python3.4/site-packages/gramps/plugins/database/bsddb_support/write.py", line 2113, in get_from_handle
    raise HandleError('Handle is None')
gramps.gen.errors.HandleError: Handle is None
2015-12-26 23:56:53 -08:00
Doug Blank 84fc198a6d Move struct-based API to gen.lib.struct 2015-12-26 21:00:37 -05:00
SNoiraud 664359e681 Geography : Use progress meter while selecting places or events. 2015-12-26 18:35:46 +01:00
SNoiraud 99c1cb5642 Geography : HandleError('Handle is None') 2015-12-26 17:30:38 +01:00
SNoiraud 822fa7c06c 9127 : Geography : performance issue due to bad initialization. 2015-12-26 17:18:05 +01:00
SNoiraud 04c39a72e0 9126 : Better place levels handling in geography view. 2015-12-26 17:09:02 +01:00
Doug Blank b793b9d068 Add labels to gen.lib object fields 2015-12-24 23:16:57 -05:00
SNoiraud 0ff9363d72 9127 : Geography : performance issue when selecting the events or places views. 2015-12-23 11:10:27 +01:00
Doug Blank ab67c786b0 Remove setuptools flag 2015-12-21 17:12:30 -05:00
Doug Blank cc97dcddbd Fixed classifiers in setup.py 2015-12-21 14:56:41 -05:00
Doug Blank bc7178ae2e Webapp: point to new github for import example 2015-12-20 09:37:39 -05:00
Ivan Komaritsyn d9ff065f4f update Russian translation 2015-12-18 21:35:51 -08:00
Doug Blank fd386c5bc6 Merge pull request #80 from tecknicaltom/add_db_to_package_core
add database plugins to package_core
2015-12-18 22:53:50 -05:00
Tom Samstag 62a95c936b add database plugins to package_core
Make sure the database addon and the bsddb_support code is installed.
Without this, Gramps crashes on startup.
2015-12-18 17:06:30 -08:00
Doug Blank 4d5c28ad3a CLI -r/--remove asks firsts, uses reg exp 2015-12-18 17:10:11 -05:00
Doug Blank fc55aba6b3 Use new test framework; remove Test db 2015-12-18 09:09:27 -05:00
Doug Blank 01ef775491 Use CLI test framework; fix bug in fake exit
* uses new Gramps() test framework in cli_test.py
* test_util.Gramps allows default exit code
2015-12-18 08:46:35 -05:00
Doug Blank d5aa7067ea Add framework for testing CLI commands
* can grab output, stderr for testing output
* can redirect input, via function
* doesn't test --show, but all other CLI flags
2015-12-18 07:32:44 -05:00
Doug Blank 72662bcf06 Adds -r, --remove FAMILY_TREE_NAME to command-line
* gives error if doesn't exist
* currently requires exact match
* doesn't ask for permission (yet)
2015-12-18 07:30:03 -05:00
Doug Blank 392e9eb399 Added clidbmanager.remove_database(), use in tests for cleanup
* clidbmanager.remove_database - removes database by name
* cli_test - clean up database created in tests
* cli_test - uses a better random name
2015-12-17 11:17:21 -05:00
Doug Blank 7eb8015aee Add tests to handle command-line arguments 2015-12-15 23:51:03 -05:00
Nick Hall bde4b1bf10 Fix handle errors in gramplets 2015-12-15 14:07:48 +00:00
SNoiraud 621bf1e1e9 Webcal : 8943 and 8947 : use 'until' instead of 'till' 2015-12-15 08:52:37 +01:00
Doug Blank 928a437f48 Merge pull request #78 from romjerome/maintenance/gramps42
9057: fix counter for filtered entries
2015-12-14 15:31:15 -05:00
SNoiraud 8bf8e92e3c 8943 and 8947 : finish the implementation and make the report nicer. 2015-12-14 09:56:37 +01:00
Doug Blank a0bf429b4c Merge pull request #77 from dsblank/master
8556: ValueError: underlying buffer has been detached
2015-12-13 15:10:43 -05:00
Nick Hall 0e8f335607 Check for empty handle when returning default person 2015-12-13 19:27:49 +00:00
Nick Hall 5fc7dd6874 Fix handle errors in reports
The find_spouse report utility function can return None.
2015-12-13 18:56:57 +00:00
Ivan Komaritsyn 997da5170d update Russian translation 2015-12-13 10:15:11 -08:00
Nick Hall f7c54e9b88 Fix handle errors in person and family editors 2015-12-13 17:34:15 +00:00
Doug Blank 03a72b8319 Prevent crash from exporting because of no default person.
Because of changes in [1], if self.get_default_handle() doesn't return a handle, we would have a crash.

https://github.com/gramps-project/gramps/commit/5c958bd7fbaea082df6f2ce427042ad0a642815e
2015-12-13 12:01:25 -05:00
Doug Blank 6faed565f4 8556: ValueError: underlying buffer has been detached (from Paul's patch) 2015-12-13 11:29:24 -05:00
Doug Blank decb51eac7 Remove encoding on stdout and stderr 2015-12-13 11:19:32 -05:00
Doug Blank 7710544936 gramps -L prints as it goes
Gramps -l now lists details as it goes, rather than after collecting details from all databases.
2015-12-13 10:49:47 -05:00
Nick Hall cff726a4bb More empty handle checks in proxies 2015-12-12 22:00:11 +00:00
SNoiraud 4e1b72ab60 8947 : Webcal: make it possible to easily move to the next day page having a birthday 2015-12-11 20:50:42 +01:00
Nick Hall ded6869a2a Check for empty handle in private proxy 2015-12-11 18:29:54 +00:00
Paul Franklin 4a0ce62361 use ngettext for proper plural forms use 2015-12-09 10:08:03 -08:00
SNoiraud 1021b6d178 8943 : Webcal: add an sign that somebody is not alive and make the report nicer 2015-12-08 18:23:00 +01:00
Nick Hall 31bcba8d5d Fix bug introduced in commit 8dffe66
The fix function can be passed a str or int.
2015-12-08 11:08:51 +00:00
Ivan Komaritsyn f4f5544060 update Russian translation 2015-12-07 16:54:30 -08:00
SNoiraud 0246d96e4c Narrativeweb : remove an unused import. 2015-12-07 15:43:32 +01:00
Sam Manzi 828cb1ac08 Merge pull request #75 from cicl06/master
Small fix in import script
2015-12-07 10:07:51 +11:00
SNoiraud 10ea4333c4 8946 : webcal : make the month name clickable in the year overview page 2015-12-06 18:46:02 +01:00
Nick Hall 332892266f Fix reference map unit test
A bad handle now rasies a HandleError rather than returning None.
2015-12-06 11:14:33 +00:00
SNoiraud e8a79a8cea 8950 : sort problem : TypeError: unorderable types: EventRef() < EventRef() 2015-12-06 11:29:15 +01:00
Paul Franklin 252aacee41 disambiguate "none" (for French)
from po/fr.po:
The same "none" is used for name, surname and date.
However, in French we say "aucun" for name and surname,
but we say "aucune" for date...
2015-12-05 21:03:34 -08:00
Paul Franklin 8ed9d8958d center export dialog on parent window 2015-12-05 20:22:21 -08:00
Paul Franklin 1000c1b5cb center report dialogs on parent window 2015-12-05 20:20:34 -08:00
Paul Franklin 89b3eb0a34 7276: translate some currently-untranslated punctuation marks
flag the quotation marks around a call name to be translated
2015-12-05 19:55:18 -08:00
Paul Franklin aaca511c75 7276: translate some currently-untranslated punctuation marks
slightly alter the comment near the translated punctuation
2015-12-05 19:50:43 -08:00
Nick Hall 5c958bd7fb Raise HandleError exception for bad handles 2015-12-05 21:17:56 +00:00
Nick Hall 5d7343f10a Remove handle2internal function 2015-12-05 18:14:16 +00:00
Nick Hall e813e1c5c2 Remove conv_dbstr_to_unicode function 2015-12-05 17:50:51 +00:00
Nick Hall 8dffe6639b Remove remaining conv_to_unicode calls 2015-12-05 16:57:05 +00:00
Robert Jacob Magyar 2f21e623af Merge branch 'master' of https://github.com/cicl06/gramps 2015-12-05 10:49:47 -06:00
J. Robert Magyar II 536cc48d85 x button now closes import file menu 2015-12-05 10:47:12 -06:00
J. Robert Magyar II 0e6db6397c x button now closes import file menu 2015-12-05 10:34:30 -06:00
romjerome 7f3cdb6d71 9041: Father/mother's age attributes are not translated on DA and DD reports 2015-12-05 11:59:36 +01:00
Nick Hall 6fa47010cf Unicode conversion of command line arguments no longer needed
Arguments are a list of str in python3.
2015-12-05 10:53:56 +00:00
SNoiraud 2e19025f9b 8048 : Narrative web report: add author to citations 2015-12-05 11:38:13 +01:00
SNoiraud 2e1a53e5a3 8950 : events list and family list are differents between two reports. 2015-12-05 10:57:10 +01:00
Doug Blank 65e570cdd8 Merge pull request #73 from RossGammon/missed_javascript
7763: Sourceless Javascript Files in release tarball
2015-12-04 07:57:23 -05:00
SNoiraud 714937ff5f 8950 : narrativeweb : change mtime at the bad place and made twice. 2015-12-04 11:40:55 +01:00
SNoiraud d4c923bef3 9016 : narrativeweb : refactor the previous patch using _pd.display_event() 2015-12-03 23:54:50 +01:00
Ross Gammon d8454fc826 7763: Sourceless Javascript Files in release tarball
This one removes the last hardcoded path to the local copy of jquery
and uses the online CDN provided by Google instead.
2015-12-03 21:57:37 +01:00
SNoiraud 79395f14c6 9650 : permission denied : change mtime to origin instead of destination. 2015-12-03 00:51:35 +01:00
SNoiraud 61b367ed84 9016 : narrativeweb: Place title based on current date not that of the event 2015-12-02 23:28:44 +01:00
Paul Franklin c5bbe7b04e 9041: remove temorary _DATAMAP entries (from [8fac92d])
not needed after [4c22713]
2015-12-02 08:52:19 -08:00
Nick Hall 8c66825e84 Remove redundant str conversion in tree models 2015-12-02 12:28:24 +00:00
Paul Franklin 4c22713a1a 9041: Father/mother's age attributes are not translated on reports 2015-11-30 21:49:34 -08:00
Paul Franklin 20601749e2 improve Russian date handler, and R. d.h. unittests 2015-11-29 20:13:35 -08:00
Ivan Komaritsyn 3e1e89147b improve Russian translation 2015-11-29 20:13:26 -08:00
romjerome 6a0182456b 9058: ReferencedBySelectionProxy can forget some referenced tags
Tag records list forgot tags linked with some primary objects

was on Gramps XML file format, not related to backup or tags on Person
2015-11-29 11:30:56 +01:00
romjerome 373a39ade3 Fix some punctuations 2015-11-29 11:08:56 +01:00
romjerome 8fac92d170 9041: Add missing 'Father/mother age' translation strings
temp workaround for mapping them via translation dict
2015-11-29 11:05:18 +01:00
Nick Hall b34b257d33 Unicode conversion not required for other Gtk methods 2015-11-29 00:01:05 +00:00
Nick Hall 415540e4a6 Unicode conversion not required for FileChooserDialog methods 2015-11-28 23:48:43 +00:00
Nick Hall 452fbfac80 Remove redundant unicode conversion of __file__ variable 2015-11-28 22:34:38 +00:00
Nick Hall d770c8a236 Remove unused constfunc imports 2015-11-28 22:00:51 +00:00
Nick Hall 2fad4320d6 9027: Put tag selection list in alphabetical order 2015-11-28 19:15:09 +00:00
Nick Hall 4eeebeb00a Remove redundant code 2015-11-28 18:49:22 +00:00
Nick Hall 0e59cc5f59 9079: Fix delete error in undoable entry widget 2015-11-28 18:34:16 +00:00
SNoiraud 4db9a7ff63 5905 : thumbnails html file missing in the narrative web. 2015-11-28 12:26:00 +01:00
Alan Strohm 3a39dfc81f Bug 9077: Don't check SSL certs on Mac when fetching addons. 2015-11-27 13:05:27 -08:00
SNoiraud 5180a376d6 8950 : Narrated: html elements emitted in different order with python 3 and date warning on windows 2015-11-27 21:37:34 +01:00
SNoiraud d8e7b6f801 7426 : unused *_init.jpg are created in the narrated website. 2015-11-27 21:19:33 +01:00
SNoiraud e278b66a62 7322: Some media files are not exported to the NAVWEB report. 2015-11-27 17:34:01 +01:00
SNoiraud c1c36b8ce0 8950 : forgot to remove an unused function. 2015-11-25 20:45:25 +01:00
SNoiraud 86bb86af16 8950 : Narrated Web Site Report: html elements emitted in different order 2015-11-25 19:34:09 +01:00
SNoiraud aa18f9c63a 9073 : 'Unknown' spouse uses an harcoded string name on Simple Descendants textual report 2015-11-25 17:47:18 +01:00
SNoiraud 092b26356c 9065 : Interactivesearch gives "TypeError: unorderable types: str() < NoneType()" 2015-11-25 14:52:45 +01:00
John Ralls 388aef3a92 Catch urlopen TypeError when context arg isn't supported.
Python changed the behavior and args for urllib.urlopen; the context
arg is needed to avoid cert checking in 3.4.3 and later, but isn't
supported before, where the default is to not check certs.
2015-11-14 12:19:28 -08:00
Matti Niemelä 7b6832eea7 9040: 'Narrative' word not translatable 2015-11-09 14:16:42 +01:00
Josip ba89c29c0b 8988: Name of user defined filter is not shown 2015-11-08 00:43:48 +01:00
Josip 4951f81d0d 9008: Faulty headline in start up screen 2015-11-08 00:40:35 +01:00
SNoiraud e1780c8819 9028 : Find is broken when used in the Family selector. 2015-11-02 17:04:18 +01:00
SNoiraud b3140d9bd9 0009014: "Show all" checkbox of "Select Family - Gramps" window not unchecked when the filter is cleared 2015-11-01 12:56:43 +01:00
Nick Hall 95062b7f46 Fix default selection in selectors 2015-10-27 21:38:30 +00:00
romjerome dd9984daee 9003: Locality data in address was not imported 2015-10-27 09:43:26 +01:00
John Ralls 1acd60d7f2 Fix undefined variable error. 2015-10-26 14:04:01 -07:00
John Ralls 93e3c62b99 Bug 8897 - Can not download new or updated add-ons
Apple provides a hacked OpenSSL that checks Keychain for certs after failing
to find them elsewhere (and normally there is no elsewhere). The versions
provided for OS X versions < 10.8 are obsolete, preventing building
osm-gps-maps's dependencies, so we provide our own but it can't be similarly
hacked to use Keychain because that is a private API to which Apple doesn't
provide headers.

This is at root a Python problem, see https://bugs.python.org/issue17128

To work around it, disable certificate verification for this one URL for
macs only. This does create the small security risk of a MITM attack injecting
malicious add-ons, but since the URL is user-editable a phishing attack is
more likely and there's nothing that SSL can do about that.
2015-10-25 15:06:27 -07:00
John Ralls d4c7950cc5 Bug 8929 - Installation from DMG (binary) file and port file fail.
Cause was a stray bytes qualifier in the split character.
2015-10-25 15:06:15 -07:00
Ivan Komaritsyn 29624713c4 Update Russian translation (P.R. 70) 2015-10-23 18:38:56 -07:00
Paul Franklin cd2db0b267 enable po/check_po to work on older machines 2015-10-23 18:13:15 -07:00
Nick Hall 19ab02a4f9 Merge pull request #69 from tomhughes/clipboard
Re-enable selection in the clipboard on a grab_broken event
2015-10-20 22:29:42 +01:00
Tom Hughes 201f4a5e51 Re-enable selection in MultiTreeView on a grab_broken event
As of GTK 3.18.0 a fake button release event is no longer sent when
a DnD completes:

  https://bugzilla.gnome.org/show_bug.cgi?id=749737

As a result we keep selection disabled which then means that the next
drag from the clipboard fails to select the dragged object and we wind
up trying to drop the old selection instead.
2015-10-20 22:10:42 +01:00
Paul Franklin 9e07b3e092 fix another deprecation warning (thanks to Tom Hughes) 2015-10-18 16:54:11 -07:00
Nick Hall e35b889f88 Merge pull request #68 from tomhughes/focus
Fix creation of focus change events
2015-10-18 23:50:34 +01:00
Nick Hall f7c6f61bf2 Merge pull request #67 from tomhughes/objclass
Handle citation objects in glocale.trans_objclass
2015-10-18 23:50:07 +01:00
Tom Hughes 14d314bf1a Fix creation of focus change events
This fixes a number of run time warnings of the form:

interactivesearchbox.py:195: TypeError: Passing arguments to gi.types.Boxed.__init__() is deprecated.
All arguments passed will be ignored.

Which appear to represent a genuine issue as the previous way
of creating events indeed doesn't set the type.
2015-10-18 19:27:38 +01:00
Tom Hughes 289b2df9a1 Handle citation objects in glocale.trans_objclass
Without this right clicking on a citation in the clipboard
gives options like "Make See Details active" which don't make
an awful lot of sense.
2015-10-18 19:25:50 +01:00
Nick Hall faee673b42 Check that gramplet is in notebook before setting tab label 2015-10-15 18:09:57 +01:00
SNoiraud 590621ea7f Geography : 8984 : Edit place from Geography creates duplicate in the "enclosed by" tab. 2015-10-12 17:15:27 +02:00
SNoiraud 81eda27f5d Geography : 0008982: Gobject Instrospection displays a warning and ask to set a version to load. 2015-10-12 14:59:09 +02:00
Nick Hall 78fef48559 Revert gramplet id changes
This partially reverts commit 80a9597.
2015-10-11 18:06:39 +01:00
Paul Franklin a2f2659ab1 8888: Gramps Help button User Manual wiki-links 2015-10-09 13:38:34 -07:00
Nick Hall c93e16c4af 8168: Sort custom place types in editors 2015-10-09 19:08:09 +01:00
Nick Hall 88743af243 Fix error converting color into string 2015-10-09 17:47:49 +01:00
romjerome f5598a2c0f [Geography] Ignore places without hierarchy
Cannot get value if there is no levels

See country = state = county set on self.get_location()
2015-10-08 17:18:00 +02:00
Doug Blank 448ddfd721 Holidays: added cmp() for Python3 2015-10-05 20:20:11 -04:00
Nick Hall a86890002f Remove redundant io imports 2015-10-05 19:20:08 +01:00
Nick Hall 41c17c3190 Tidy up xml parser file handling 2015-10-05 18:30:56 +01:00
Paul Franklin c97a254188 Fix countries selector on Reports
use strings comparison, avoid encoded Element names
2015-10-05 16:40:10 +02:00
Paul Franklin 90dd4afd06 handle case of no intltool when doing "python3 setup.py build"
I installed my development environment on a different machine
but for some reason didn't install intltool.  But it took me
a while to notice since I normally routinely divert the output
to a file.  So it was crashing but I didn't know.

But when I examined setup.py I saw that was tested for, at least
it was supposed to be tested for.  But on my particular machine
when the test was piped into more commands the whole piped command
was returning a zero status, even though there was no intltool
at all.  So I have added an explicit test for intltool and that
does indeed fail on my machine, without one.
2015-10-04 19:14:50 -07:00
=Vlada Perić db7255febc 8971: the easter method in libholiday.py isn't Python3-friendly 2015-10-04 16:25:13 -07:00
Paul Franklin f416756809 Suggestion:Use 'People and Events.'' instead of of an 'etc' 2015-10-02 13:26:32 +10:00
Sveinn Felli eee2ba4d69 [Tips] Typo's in gramps.pot 'prefered>preferred' 2015-10-01 08:05:10 +10:00
Doug Blank 463ea1fe7e if s_tagvalue is None: 2015-09-30 06:39:00 -04:00
SNoiraud 2df26a9076 bug 8799 : verification tool : Exception raised when used with the "Estimate missing or inexact dates" 2015-09-29 09:23:50 +02:00
Sam Manzi 651e03c697 8888 'baseselector's add help urls only 2015-09-29 16:29:02 +10:00
Sam Manzi 6aadb54c9f Revert "Usability:Update initial [interface] startup defaults for (height/width)"
This reverts commit c89ae3241b.
2015-09-28 10:24:43 +10:00
Detlef Wolz 6554f43114 3670: hourglass graph report - link missing in ancestor graph 2015-09-27 13:12:01 -07:00
Sam Manzi c89ae3241b Usability:Update initial [interface] startup defaults for (height/width)
- Fully show each Category sidebar filter without having to resize initially. eg:Citation Category sidebar filter is the largest!
2015-09-26 15:03:48 +10:00
Paul Franklin 23c2345258 8936: Descendants-detailed report crashes 2015-09-24 16:44:20 -07:00
Nick Hall 3cf0e7885f Remove trailing whitespace from new date handler 2015-09-24 15:38:36 +01:00
romjerome adb32a3457 8188: Problem with existing selection in media reference editor
like selection box disappears when scrollbar appears

Now, do not expand bottom section (Media Object fields) by default

Wonder if we should not do that on all Reference Editors?
2015-09-24 10:26:14 +02:00
romjerome 2e0bef5800 More accurate french translation
thanks to Ζήσης Λ. Παπαδόπουλος
2015-09-24 10:17:32 +02:00
Sam Manzi 9b5fb6504c 8888 'baseselector & reorder relationships' glade add help button only(1/3) 2015-09-24 10:13:41 +10:00
Sam Manzi a6f4c7993d 8888 'Family Tree(manager)' add help url & button 2015-09-23 14:36:35 +10:00
Josip a73c2e4738 8937: Unable to produce graph reports [in Greek locale] 2015-09-21 18:58:53 -07:00
Sam Manzi ee58b80110 8888 'Generate Testcases' add help url 2015-09-22 07:53:09 +10:00
Paul Franklin f9ecd4b622 allow for get_dbname() returning None 2015-09-21 10:54:20 -07:00
Sam Manzi cfa76465b5 8888 'References Gramplet' rename links from 'backlink>references' for consistency on wiki 2015-09-21 13:29:21 +10:00
Sam Manzi 097bb20005 8888 'Select a media object' add help url 2015-09-20 17:09:36 +10:00
Sam Manzi a0ae11f268 8888 'Undo History' add help button & url 2015-09-19 07:19:26 +10:00
Sam Manzi 4d87d2633c 8888 'Filter dialogs' add/update help urls 2015-09-18 09:20:43 +10:00
Sam Manzi 702d033bff 8888 'Tagging dialogs' update help urls after wiki section update 2015-09-18 08:38:10 +10:00
Sam Manzi 60ccf59ae5 8888#c44511 Fix AttributeError: 'EditMediaRef' object has no attribute 'glade' 2015-09-17 07:26:13 +10:00
Sam Manzi 516155c6ee 8888 'Place Name Editor' Add New wiki section & help link 2015-09-16 09:46:30 +10:00
Lajos Nemeséri 96efa177ba 5505: Need a date handler for Hungarian locale 2015-09-15 14:05:53 -07:00
Fabrice 5a5e7a21c4 6613: Add Occupation/Profession to Relationship Graph 2015-09-15 11:57:05 -07:00
romjerome 4288649573 8914: FanChartDescendants View should at least have 2 generations 2015-09-15 12:22:58 +02:00
Sam Manzi 041b58b942 8888 'Person Reference Editor' add Help link & wiki section stub 2015-09-15 10:10:18 +10:00
Paul Franklin 0d098f1901 8930: allow hyphenated gramps-id in Graphviz reports 2015-09-14 16:43:13 -07:00
Sam Manzi bbc1cbe2ff 8888 'Link Editor' add help url 2015-09-14 10:13:41 +10:00
Sam Manzi f666baabda Ignore Glade '.glade~' temp files 2015-09-13 10:51:28 +10:00
Sam Manzi c848744e28 8888 'Editors' continue updating broken wiki help links 2015-09-13 09:04:52 +10:00
Paul Franklin 30b8dcfb91 8889: Complete Individual Report fails to run 2015-09-12 15:46:17 -07:00
Sam Manzi 2d4ec91a5c 8888 more 'Editors' update broken wiki help links 2015-09-12 17:48:50 +10:00
Sam Manzi a34b5a81d2 8888 'Edit dialogs' update broken wiki help links 2015-09-12 09:10:35 +10:00
Sam Manzi a4d42cc47e 8888:'Error Report' dialog fix help url 2015-09-11 09:22:01 +10:00
Lajos Nemeséri 4d9ebb4f44 Update Hungarian translation 2015-09-10 16:14:45 +02:00
Sam Manzi ef199c8916 Spelling: occured > occurred 2015-09-10 14:41:12 +10:00
SNoiraud f63381fed3 NarrativeWeb and cms : best approach for use of css files and relative links. 2015-09-09 10:26:29 +02:00
Sam Manzi 65c272b347 8888 'Gramplets' update broken wiki help links 2015-09-09 08:05:23 +10:00
SNoiraud 54cd19ea0d Geography : bug 8902 : ValueError: Place.set_name(name) requires a PlaceName() 2015-09-08 21:13:02 +02:00
Sam Manzi 8b5d1709a2 8888 'Media Reference Editor' link help button in glade 2015-09-08 10:56:27 +10:00
Doug Blank 976f411e6f Merge pull request #62 from gramps-project/revert-61-revert-59-javascript
Revert "Revert "7763: Sourceless Javascript Files in release tarball""
2015-09-07 18:18:43 -04:00
Doug Blank a3a96eb0ec Revert "Revert "7763: Sourceless Javascript Files in release tarball"" 2015-09-07 18:12:25 -04:00
Nick Hall 2d92101438 Replace GRAMPS with Gramps in comments 2015-09-07 21:58:52 +01:00
Nick Hall d877d02187 Tidy up Gtk constructors 2015-09-07 21:43:13 +01:00
SNoiraud dee5d46be5 Narrative web and cms : links not present. 2015-09-07 10:19:19 +02:00
Sam Manzi 8fd1fab200 Update docstrings - spelling 2015-09-07 14:52:49 +10:00
Sam Manzi fda3aff955 Update .gitignore and remove Thumbs.db file 2015-09-06 14:24:12 +10:00
Sam Manzi 1fbfa95b3f 8888 Fix some links for Tools 2015-09-06 09:24:51 +10:00
Sam Manzi 21da8c7023 8888 Fix link for Tag Selection(Selector) 2015-09-06 09:03:36 +10:00
Nick Hall de3221ca69 8833: Set TextOption widget to expand vertically 2015-09-05 17:27:37 +01:00
Nick Hall ec9371d3b1 Revert workaround for bug #8833
This reverts commit 20a57037f7.
2015-09-05 17:26:44 +01:00
romjerome 11e31e85ac minor improvements, to avoid confusions or large string 2015-09-05 10:46:58 +02:00
romjerome 20a57037f7 8833: Workaround for displaying more lines on Text box via label's height 2015-09-05 10:43:58 +02:00
romjerome 51f8fd39c2 6684: Unused Object Dialog box too small 2015-09-05 10:40:05 +02:00
Sam Manzi f4745ff717 Update a few broken help URLs 2015-09-04 16:13:25 +10:00
Sam Manzi 38c01a138b 6824#c44102 Fix outdate tip. Soundex utility > Soundex Gramplet 2015-09-04 10:16:35 +10:00
Peter Landgren e6389a7956 Updated Swedish translation. 2015-09-03 16:13:53 +02:00
Sam Manzi a92ebe3e2c 8481 Update some Tips of the day 2015-09-03 15:39:08 +10:00
Sebastian Schubert 2630bebae0 8061: FeatureRequest: Add citation in citationtreeview: automatically select source 2015-09-03 15:01:25 +10:00
SNoiraud 3c1671d09f NarrativeWeb : feature request 5530 (include in CMS or MVS) 2015-09-02 23:07:11 +02:00
SNoiraud 2d92327fbc Geography : 8866 : placeselection : changeAttributeError: 'str' object has no attribute 'value' 2015-09-02 09:48:49 +02:00
Sam Manzi d2ca05978f bump version and fix spelling 2015-09-01 08:57:26 +10:00
romjerome 82db7fea55 Let display translation string on family label 2015-08-31 18:21:09 +02:00
Sam Manzi 0666614be7 Improved Pylint score on grampsapp.py 7.44/10 (previous run: 5.56/10, +1.88) 2015-08-31 11:47:17 +10:00
Sam Manzi 3cb078cbd5 Update URL to Gramps 4.2 page 2015-08-30 14:03:00 +10:00
Paul Franklin 4482d18e17 clarify book report dialog names 2015-08-29 13:08:49 -07:00
Sam Manzi 1f56b4f6f2 GRAMPS > Gramps 2015-08-29 11:23:07 +10:00
romjerome 2830bf2b48 [Debian] Fix name and version for suggested packages 2015-08-28 09:09:40 +02:00
Sam Manzi cd23d4897b Readme - fix list 2015-08-27 11:25:01 +10:00
Sam Manzi e6467ad077 Readme - be a bit more descriptive 2015-08-27 11:23:12 +10:00
Doug Blank bb3d5fdfcc 8863: Error when extracting place names 2015-08-25 06:40:22 -04:00
Sam Manzi e1cd505aad Mention it for for addons instead of just Graph View 2015-08-25 09:42:54 +10:00
Enno Borgsteede 8e341f96b7 7595 Custom filters for note text repaired 2015-08-24 08:48:15 +10:00
Nick Hall cdee00aca2 Remove trailing whitespace 2015-08-23 18:42:07 +01:00
Sam Manzi 59b0a9ff43 Readme reorder and add travis-ci build badge for developers 2015-08-23 14:38:21 +10:00
Doug Blank 719fdfe2ae Revert "Use DbTxn from database backend"
This reverts commit 92ca9d7571.
2015-08-22 21:44:52 -04:00
Doug Blank 0601324851 Revert "DbTxn: use no_magic explicitly"
This reverts commit ecc078b891.
2015-08-22 21:44:37 -04:00
Doug Blank 1f42fe835f Revert "DbTxn: pass db to generic DbTxn"
This reverts commit 8e89ceb395.
2015-08-22 21:44:17 -04:00
Doug Blank fa053d2754 Revert "DbTxn: pass db to generic DbTxn"
This reverts commit 6f5c7f7da7.
2015-08-22 21:44:02 -04:00
Doug Blank 6f5c7f7da7 DbTxn: pass db to generic DbTxn 2015-08-22 20:21:58 -04:00
Doug Blank 8e89ceb395 DbTxn: pass db to generic DbTxn 2015-08-22 20:17:24 -04:00
Doug Blank ecc078b891 DbTxn: use no_magic explicitly 2015-08-22 20:06:14 -04:00
Doug Blank 92ca9d7571 Use DbTxn from database backend 2015-08-22 18:17:22 -04:00
Sam Manzi a9401d21d7 Convert to README to .md format 2015-08-22 19:25:15 +10:00
Sam Manzi 43fae0c326 Embrace Github and use .md for README 2015-08-22 19:04:04 +10:00
Sam Manzi bad9d747e1 Update links to 4.2 user manual etc.. 2015-08-22 18:56:51 +10:00
Sam Manzi 57a846f40a Create a .mailmap file to map from the wrong email ids and / or names to the right ones 2015-08-22 11:53:57 +10:00
Sam Manzi d62c45712d Update outdated links for http://sphinx-doc.org/ 2015-08-22 10:28:08 +10:00
Doug Blank 322d90f43b Travis: create a temp Django database so we can test 2015-08-21 18:27:59 -04:00
Doug Blank 7ad5262678 Travis: changes for webapp to pass tests 2015-08-21 17:46:03 -04:00
Doug Blank e7a0c6c05b Webapp: updates for new interface 2015-08-21 17:34:20 -04:00
Doug Blank 4f4fe6c0de Webapp: changes for web portion to use new Django interface 2015-08-21 17:24:14 -04:00
Doug Blank a93872a0f3 Fix for exponential cost on treeviews; whitespace cleanup 2015-08-21 09:45:59 -04:00
Doug Blank e5d6be61f8 Return None if Object.create(None); white space cleanup 2015-08-21 08:14:22 -04:00
Doug Blank ccbed9cb95 Don't repeatedly check for existing records; whitespace cleanup 2015-08-21 08:14:11 -04:00
Hivernat Emmanuel 5bb4021b2a 8824 Fix Pedigreeview crash when selecting Compact view 2015-08-21 16:44:18 +10:00
Reinhard Mueller a5cad3488a 5625 Records report & Gramplet add biggest/smallest age difference for couples 2015-08-21 16:25:08 +10:00
Doug Blank f8d04b5cb8 Merge pull request #56 from belissent/master_test2
Environment variables in mediapath
2015-08-20 12:23:42 -04:00
belissent 82eb6e17ac Create a GRAMPS environment ENV for variables substitutions in paths 2015-08-20 14:04:21 +02:00
Sam Manzi b9ff5b1525 Replace hardcoded G R A M P S 3.4.0 string with Non-breaking space instead. 2015-08-20 11:46:00 +10:00
Pierre Bélissent 4bbae0e46a Fix for "Environment variables in mediapath" 2015-08-19 20:24:40 +02:00
Doug Blank cf03abcbc9 Merge pull request #55 from belissent/master_test
Remove useless 'git clone' in .travis.yml
2015-08-19 10:35:35 -04:00
belissent 5d654d402a Environment variables in mediapath
The mediapath could now be a relative path from database location,
or use variables ($GRAMPSHOME, $GRAMPS_RESOURCES, etc.)
2015-08-19 16:26:59 +02:00
belissent 51f66f1a6a Remove useless 'git clone' in .travis.yml 2015-08-19 15:32:57 +02:00
Doug Blank 65ff7340af Views: start with treeviews (grouped) as initial views
This makes the loading consistent (prior, either marked start
could be first), and also the grouped views are imagined to
be the faster loading views.
2015-08-18 13:45:59 -04:00
Doug Blank b601402ea5 8377: added sibling lookup cache 2015-08-18 11:44:06 -04:00
Doug Blank c1afa6513c Removed duplicate 'database-changed' signal, which was loading data in GUI twice 2015-08-18 07:55:44 -04:00
Sam Manzi fdb8704bac Update Sphinx files - includes make.bat for windows 2015-08-18 12:05:25 +10:00
Sam Manzi 31005bf939 Silence Sphinx warning for html_theme setting change default to classic to keep using the old default. 2015-08-18 10:53:26 +10:00
Sam Manzi 4bb1c0aa92 update comment to Note Link Report 2015-08-18 10:16:36 +10:00
Nick Hall d76757ddb4 8775: Avoid using person-centric date matching for places 2015-08-17 19:25:33 +01:00
Doug Blank 6980bb62d6 DB: New method, db.remove_instance(instance, transaction)
Delete an instance of a primary object from the database.
2015-08-17 13:42:14 -04:00
Doug Blank bc2d7167e6 Merge PLace: show place type next to merge names 2015-08-17 12:38:08 -04:00
Doug Blank 1fc5fb437b TreeModel path cache: clear path cache when data changes...
* Allow to disable by setting interface.treemodel-cache-size to 0
* Protection if mode/view gets different
2015-08-17 10:48:12 -04:00
Doug Blank 269a1ab6f5 Added config value interface.treemodel-cache-size to control size of cache
Default size set to 1k for paths and other items.
2015-08-17 08:02:53 -04:00
Doug Blank de61d7158b TreeBaseModel: protection from removed data 2015-08-17 07:09:30 -04:00
Doug Blank 4fcdd8c4a6 8377: cache path 2015-08-17 05:42:37 -04:00
Doug Blank 12e9764fdd Cut in half the time to load treeviews: people tree, place, and citation tree views 2015-08-16 17:19:59 -04:00
Doug Blank 9b93a812d3 8377: Slow scrolling in Gramps 4.X, on all platforms. 2015-08-16 10:23:44 -04:00
Doug Blank 91e8abf8a5 DictionaryDb: _repository_dict typo 2015-08-15 17:31:59 -04:00
Nick Hall 98dbe59e64 8789: Use place title as default name in GEDCOM import 2015-08-15 22:25:17 +01:00
Nick Hall 09b2e33e01 8810: Ensure place names are not empty after upgrade 2015-08-15 21:41:57 +01:00
Nick Hall 38a8c3e3b1 8842: Fix proxy to include all referenced place objects
The referenced by selection proxy needs to include places that
enclose referenced places.
2015-08-15 19:06:48 +01:00
Doug Blank cc83bbbfb9 FanChart: moved constants to const.py for reuse without GUI 2015-08-13 18:50:23 -04:00
Doug Blank 353725291a Narrative Web Report: use BasePlugMan instead of GuiPlugMan 2015-08-13 18:28:05 -04:00
Doug Blank 134ba5bf2e Moved gui.thumbnails to gen.utils: useful without gui 2015-08-13 17:57:19 -04:00
Doug Blank b4a5fc91f0 DjangoDb: load/save metadata details; commit details 2015-08-13 16:00:17 -04:00
Doug Blank 0e966f706e Django: documentation, added get_surname_list 2015-08-12 21:42:11 -04:00
Doug Blank f7afd1fa75 DjangoDb: now with new Metadata table 2015-08-12 20:36:43 -04:00
Doug Blank e45dc665c9 GenericDb: assign a temporary gramps_id, for those dbs that need a non-null value 2015-08-12 12:17:09 -04:00
Doug Blank f7d357e8fc GenericDb: need to force gramps_ids another way for Django 2015-08-12 12:04:49 -04:00
Doug Blank 3a64dd25f4 Databases: deal with TAG_KEY; assign gramps_id, if necessary 2015-08-12 11:21:37 -04:00
Doug Blank 0e866008b1 djangodb.py; added missing file 2015-08-12 09:15:27 -04:00
Doug Blank b1db247a63 DjangoDb: currently gramps.webapp contains copy of addon code 2015-08-12 08:37:53 -04:00
Doug Blank 32bbce8ccd Databases: removed prepare_import/commit_import; updated Django places 2015-08-12 07:42:19 -04:00
Doug Blank e5a77a60f6 OpenOrStdin/out: add encoding 2015-08-11 15:03:27 -04:00
Doug Blank dbb1644136 8823: New items in generic databases don't not get next gramps_id, but start from 0 2015-08-11 12:24:46 -04:00
Doug Blank a76fa8d0c7 DbManager and -L: show counts of all primary objects 2015-08-11 11:22:01 -04:00
Doug Blank b772d6e06a DbManager: make Info sorted by setting name 2015-08-11 08:50:22 -04:00
Doug Blank be27f43978 DbManager: make Info look better 2015-08-11 08:45:57 -04:00
Doug Blank 96241bd77b ViewManager: added Info button that shows -L info for db 2015-08-10 22:42:27 -04:00
Doug Blank d02640b6d1 DictionaryDb: genderStats needs to be dict of TUPLES 2015-08-10 19:36:49 -04:00
Craig J. Anderson 67ae0e5b1e Fix for error
https://gramps-project.org/bugs/view.php?id=2588
2015-08-09 20:15:34 -04:00
Doug Blank 46229b2e27 gen.db.base: protection from missing parent 2015-08-09 15:16:26 -04:00
Doug Blank ea591bfb17 GenericDB: fixed error in order_by_tag_key 2015-08-09 14:29:25 -04:00
Nick Hall c2e361e7e4 8517: Remove copy button from family tree manager 2015-08-09 18:36:36 +01:00
Nick Hall 6ff73c4e36 Suppress deprecation warnings in intltool-update 2015-08-08 21:31:10 +01:00
Doug Blank 91934419c0 BSDDB: don't count person twice 2015-08-08 10:11:36 -04:00
Doug Blank fe73500545 Database API: add common count_func to _tables 2015-08-08 09:51:31 -04:00
Doug Blank 044307661b 8112: Common means nick, call, or otherwise first of given 2015-08-08 00:27:07 -04:00
Doug Blank 8a2309ee37 Rearranged Name format codes to better read; changed Common 2015-08-08 00:25:52 -04:00
Doug Blank 1e7ab9f847 DictionaryDb: removed linear lookups 2015-08-07 21:45:45 -04:00
Doug Blank 1b71908bca clidbman and arghandler: use database-backend for CLI imports 2015-08-07 19:24:37 -04:00
Doug Blank 644fff5f18 ArgHandler: allow gramps -C create to use dbid database backend type 2015-08-07 18:22:24 -04:00
Doug Blank bc3dc4a516 DictionaryDb: rebuild all on load 2015-08-07 12:36:19 -04:00
Nick Hall 9147ce859b 8637: Use keyword arguments to initialise Adjustment widgets
This should prevent the value being set to zero or the minumum
limit incorrectly.
2015-08-07 16:12:20 +01:00
Doug Blank 8499a0f660 ImportCSV: remove debugging code 2015-08-07 11:10:29 -04:00
Doug Blank 482c2ae5b8 ImportCSV: allow person, family, and marriage to reference places with place_id columns 2015-08-07 09:56:06 -04:00
Doug Blank 7481e7d462 ImportCSV: removed duplicate entry; added 'enclosedby' 2015-08-07 08:05:19 -04:00
Sam Manzi 94955b5450 Merge pull request #53 from orner/bug8471
8471: Set "visable_window" in GtkEventBox to fix transparency.
2015-08-07 15:35:51 +10:00
Doug Blank 52bff9e90e Webapp: removed megabytes of unneeded sql (thanks Sam) 2015-08-07 00:38:44 -04:00
Doug Blank 2d217e17e6 Error in loading addon will now show in debug log 2015-08-07 00:37:28 -04:00
Doug Blank 975572e858 Removed private methods in GenericDb; fixed errors in DictionaryDb 2015-08-06 23:29:37 -04:00
Lance Orner 41903670ed 8471: Set "visable_window" in GtkEventBox to fix transparency.
Was showing transparent background in a Compiz environment without
this option "visable_window" being explicitly set.
2015-08-06 19:49:44 -07:00
Doug Blank 8bedb03d1d 6767: WIP, allow opening of database without using filesystem 2015-08-06 13:22:44 -04:00
Doug Blank f4553d967f DictionaryDb: use new gramps.gen.db.generic API 2015-08-06 12:59:15 -04:00
Doug Blank 90bf38e3c6 Added gramps.gen.db.generic for common non-bsddb database implementations 2015-08-06 09:25:10 -04:00
Sam Manzi a217f2e853 Merge pull request #52 from RossGammon/html_view
webkit dependency no longer required, HTML View removed
2015-08-05 10:38:39 +10:00
Ross Gammon 346722a391 webkit dependency no longer required, HTML View removed 2015-08-04 20:43:42 +02:00
Doug Blank d42fa602ed ExportCSV: allow lowercase matching of place type 2015-08-04 08:38:48 -04:00
Doug Blank 2c6a5a2abf Added Places to CSV import/export 2015-08-03 20:41:42 -04:00
Doug Blank c438b7d145 All sidebars with Types should show custom types in combo list 2015-08-03 12:01:20 -04:00
Jérôme Rapinat caa3dfd8eb 8774: Wrong italian sentence in tip of the day
patched by Daniele
2015-08-03 16:36:42 +02:00
Zdeněk Hataš 3c33baa69c czech translation update 2015-08-02 13:56:28 +02:00
Nick Hall 332c9e63cf Tidy up style editor layout 2015-08-01 21:13:00 +01:00
Nick Hall 82447881a5 Fix style name bug in style editor 2015-08-01 19:43:20 +01:00
Nick Hall 0f0763f86d 5693: Set some dialog response codes
The response codes are used to position the buttons in the dialog
action area.
2015-08-01 19:29:06 +01:00
Doug Blank ec6b6d98f2 7160 and 7403: property name needed in glade file; added hint on right-click 2015-08-01 10:27:48 -04:00
Doug Blank 37d2d7b809 Updated example/gramps/data.gramps with researcher info 2015-08-01 09:45:44 -04:00
Nick Hall 2c81ff26dc 8778: Avoid using place objects during database upgrade 2015-07-31 23:41:01 +01:00
Doug Blank ee1c98b8a0 8765: Incorrect date used for date arithmetic 2015-07-31 14:12:22 -04:00
Doug Blank f1cc01eb1a 8768: Gramps throws fatal error when trying to delete a family 2015-07-31 07:08:51 -04:00
Josip f7280f13d7 8766: GraphViz does not seem to like double-quotes in Given names 2015-07-31 00:41:35 +02:00
Josip 36404caad8 7403: Unexpected error with coping data between DB Owner and Preferences 2015-07-31 00:33:54 +02:00
Doug Blank 32f6024520 8772: Copy values from previous gramps.ini when upgrading; fixed typo 2015-07-30 12:32:50 -04:00
SNoiraud defdec493e Geography: 8375 : Must test if kml file exists. 2015-07-30 10:08:54 +02:00
Doug Blank 03f890f4ad 8772: Copy values from previous gramps.ini when upgrading 2015-07-29 21:23:55 -04:00
Jérôme Rapinat 0ffca35214 Fix some mismatching keys on translations 2015-07-29 20:51:03 +02:00
Nick Hall 170f7bf196 8701: GEDCOM version should be exported as 5.5.1 2015-07-29 19:02:55 +01:00
Nick Hall d190e4419b Increase minimum pygobject version required to 3.12 2015-07-29 14:22:36 +01:00
elderamevans c9e23628d7 Fix 'python' filename under Windows
executable named 'python.exe' whatever major python version (2 or 3)
2015-07-29 11:06:46 +02:00
Josip a6712e151a 8764: [Compare Individual Events :Tool ]
Selecting "Save" causes a UnicodeEncodeError error
2015-07-29 04:35:41 +02:00
Jérôme Rapinat ed6ffd03fa Revert temp workaround for el, vi, zh* translations 2015-07-28 21:00:15 +02:00
Jérôme Rapinat dc90fd866d 'update_po.py' should use python3
Revert temp workaround for el, vi, zh* translations
2015-07-28 20:56:23 +02:00
Richard Bos (radoeka) 40ed6ed31a Pull request #51: improvements for Dutch translation 2015-07-28 18:45:46 +02:00
Jérôme Rapinat bd578a1c0d Temp workaround for el, vi, zh_* 2015-07-27 10:25:34 +02:00
Jérôme Rapinat 173b630b2d Temp workaround for an ascii UnicodeEncodeError into console 2015-07-27 10:14:26 +02:00
Ondrej Krč-Jediný 792715f210 Pull request #49: update Slovak translation 2015-07-27 08:57:15 +02:00
Nick Hall a24e3f9360 Make place title in GEDCOM export date dependent 2015-07-25 23:10:31 +01:00
Doug Blank 00bd848ab4 Merge pull request #48 from sam-m888/7553GraphviznotGraphViz
7553 Change GraphViz to Graphviz
2015-07-25 09:33:20 -04:00
Josip 22c32f4c92 8745: cli_test.py needs OS specific path to find Python interpreter 2015-07-25 00:15:17 +02:00
Doug Blank 9ddc1cb487 7261: Import GEDCOM file from MyHeritage, added __str__ to Attribute 2015-07-21 10:18:25 -04:00
Doug Blank 4358bb9f94 8719: AttributeError: 'NoneType' object has no attribute 'set_cursor' 2015-07-20 07:55:10 -04:00
Doug Blank 6cc3ec2eff 8732: Media: Radiobox's Include label is missing from the Gramps XML Backup dialog 2015-07-20 07:27:29 -04:00
Doug Blank cb82d9f3f4 docbackend: protect from sytledtexttag with value is None 2015-07-20 07:18:24 -04:00
Doug Blank 946d020aff 8725: right-click on Citation in Clipboard 2015-07-19 18:53:43 -04:00
Doug Blank 5d6af8923f 8725: Create Filter from the [xxxxx] selected, in Clipboard (and add use_regex) 2015-07-19 11:32:37 -04:00
Doug Blank 6d1689467e Merge pull request #47 from sam-m888/8352changelessertoless
8352 Change "lesser than" to "less than"
2015-07-19 07:51:54 -04:00
Doug Blank 2bc697d1e3 8730: Error Report Assistant fails 2015-07-19 07:48:48 -04:00
Sam Manzi d3b7efa0a6 7553 Change GraphViz to Graphviz 2015-07-19 14:24:33 +10:00
Sam Manzi a40c865c1a 8352 Change lesser than to less than 2015-07-19 11:38:07 +10:00
Doug Blank addf9169f7 8730: Error Report Assistant fails 2015-07-18 21:17:40 -04:00
Doug Blank 7c40164022 Merge pull request #45 from cjmayo/docstring
Stop using concatenation to create docstring
2015-07-18 18:51:40 -04:00
Doug Blank feff543aaa Merge pull request #46 from sam-m888/fixwording4BsddbUpgradeRequiredError
8726:43320 Fix two different wordings on button for
2015-07-18 18:51:24 -04:00
Sam Manzi 878a1de804 8726:43320 Fix two different wordings on button for BsddbUpgradeRequiredError 2015-07-19 08:46:20 +10:00
Doug Blank f7e9a34a10 Gramps -L: cleanup, standardize 2015-07-18 17:59:46 -04:00
Chris Mayo 0725bfe33d Stop using concatenation to create docstring
Fixes gramps failing to start if file is byte-compiled and optimized
which sets __doc__ to None.
2015-07-18 20:43:43 +01:00
Doug Blank cf5d847c32 8727: Gramps -L leaves all BSDDB type trees locked
Don't even open if locked.
2015-07-18 14:34:02 -04:00
Paul Franklin 2fe71bfe4e 8728: Merge citations caused crash 2015-07-18 11:05:59 -07:00
Doug Blank b6999bb56f 8727: Gramps -L leaves all BSDDB type trees locked 2015-07-18 11:19:07 -04:00
Nick Hall 1488420292 Remove redundant code since Gtk 3.10 required 2015-07-15 19:53:48 +01:00
Paul Franklin e6a4b8dc45 fix check_po to work with lexemes in po files 2015-07-15 10:44:23 -07:00
Paul Franklin 32c53eba82 8572: gramps crashes if gtk < 3.10 2015-07-14 22:19:53 -07:00
Paul Franklin d5670b65b7 Revert "8572: gramps crashes if gtk < 3.10"
This reverts commit f2e6f0aa45.
2015-07-14 16:00:14 -07:00
Paul Franklin f2e6f0aa45 8572: gramps crashes if gtk < 3.10 2015-07-14 12:40:27 -07:00
Doug Blank 600db1596e Merge pull request #43 from sam-m888/8702UpdateMapServicelinksOpenStreetMap
8702 Update Map Service links for OpenStreetMap
2015-07-14 07:02:57 -04:00
Doug Blank ed2a5bcdff Merge pull request #41 from ennoborg/maintenance/gramps41
8663: add exception for UnicodeEncodeError.
2015-07-13 23:14:35 -04:00
Doug Blank 4f883d6c8c Merge pull request #44 from sam-m888/6908popupmenuclipboardgrampletfix
6908 partial for fix popup menu for clipboardgramplet
2015-07-13 21:25:23 -04:00
Sam Manzi 2cbfb7111a 6908 partial for fix popup menu for clipboardgramplet 2015-07-14 11:18:21 +10:00
Doug Blank 4ad90670ce Merge pull request #42 from sam-m888/fixissues2462linguist
Make Github recognise Gramps as a Python project
2015-07-13 20:53:48 -04:00
Sam Manzi a9a4b40a01 8702 Update Map Service links for OpenStreetMap 2015-07-14 10:51:10 +10:00
Sam Manzi 348189d100 Make Github recognise Gramps as a Python project 2015-07-14 10:19:04 +10:00
Doug Blank ad55a28e08 Dbstate: update docstring example on apply_proxy 2015-07-13 18:08:59 -04:00
Doug Blank ff36ddaa00 ProxyDb: return bytes(handle) like actual database 2015-07-13 17:18:18 -04:00
Doug Blank 85a000ce67 events gramplet: check for existing family 2015-07-13 13:19:59 -04:00
Doug Blank b0ca451c78 treebasemodel: removed spurious exception 2015-07-13 13:19:23 -04:00
Doug Blank 4942b84a56 children gramplet: protect from crash when no family 2015-07-13 11:21:17 -04:00
Jérôme Rapinat 911f9aa75e Debian: do not need to recommend devel package 2015-07-12 16:37:45 +02:00
Paul Franklin 667afeb861 4089: fix Lithuanian date parser (another y-m-d one) 2015-07-09 23:21:20 -07:00
Paul Franklin a65a35f011 fix date parser for y-m-d locales (e.g. Hungarian) 2015-07-08 10:12:08 -07:00
Jérôme Rapinat 00a547b2bd 8683: keep support for XML v1.7.0 2015-07-06 15:48:11 +02:00
Jérôme Rapinat 0f86d84dca 8683: Bump to Gramps XML 1.7.1 2015-07-06 15:06:10 +02:00
Paul Franklin e3b4abc1e0 8623: Detailed Descendant Report - only first family event output 2015-07-05 13:42:57 -07:00
Florian Preinstorfer aaa64bed8e Pull Request #38: install grampsxml.{dtd,rng} files. 2015-07-05 11:19:49 +02:00
Jérôme Rapinat 449a0d73a3 8683: Cover custom types on DTD and RNG files
Now, xmllint passes '--dtdvalid' and '--relaxng'
2015-07-05 11:12:04 +02:00
Jérôme Rapinat 84ee76afa7 8683: polish; remove old reference 2015-07-05 11:10:48 +02:00
Jérôme Rapinat 444c8f95e1 8683: fix duplicate <name> element on pre-1.7.0 XML version
XML: use <pname> tag into place hierarchy instead of duplicate <name>
2015-07-05 11:09:19 +02:00
Paul Franklin 223d41a99d cover pathological case (perhaps from privacy proxy) 2015-07-04 19:31:25 -07:00
Gerald Kunzmann 45a6c0c108 8648: Print Gramps IDs in familygroup report 2015-07-03 14:49:14 -07:00
Paul Franklin ef7e3964a1 8670: Crash when trying to create a book 2015-07-02 19:26:29 -07:00
Paul Franklin 3a9834bcfb 8666: statistics report does not run (filter?) 2015-07-01 21:45:55 -07:00
Paul Franklin 8ade35b5f2 8677: Narrated Web report failed 2015-07-01 17:19:39 -07:00
Paul Franklin c2d1ff911b 8666: statistics report does not run (filter?) 2015-06-30 08:23:52 -07:00
Jérôme Rapinat a8da5e869c 8572: gramps crashes if gtk < 3.10; workaround for debian (packaging) 2015-06-29 11:19:12 +02:00
Josip ed32c1fc86 8667: SVG Document output 2015-06-28 15:16:32 -07:00
Doug Blank 4162b123da 8577: Statistics Charts report crashes in Windows 4.1.3 AIO
Changed 0 to actual number of people in database.
2015-06-28 14:40:46 -04:00
Nick Hall 563f8e263d Replace "Title" with "Enclosed By" in place sidebar filter 2015-06-28 19:31:41 +01:00
Nick Hall 741d192f1f Fix IsEnclosedBy rule for non-existent places 2015-06-28 19:11:42 +01:00
Paul Franklin 640101c13a 8666: statistics report does not run (filter?) 2015-06-27 12:48:46 -07:00
Nick Hall 90872feeb4 8645: Use place displayer when sorting places in narrated web report 2015-06-27 19:34:49 +01:00
Jérôme Rapinat ef921f22c3 Update/Migrate 'data.gramps' 2015-06-27 15:01:21 +02:00
Jérôme Rapinat 62082a4737 Update/Migrate 'example.gramps' and XML schema files 2015-06-27 14:53:29 +02:00
Paul Franklin d81e18258c 8661: Errors producing Ancestor Tree (4.2.0beta1) 2015-06-26 11:03:24 -07:00
Jérôme Rapinat a37e3b1210 8645: add GobjectIntrospection dependency
Fix Lintian issue: 'python-script-but-no-python-dep'
2015-06-25 20:14:23 +02:00
Nick Hall 18aca697c9 8643: Workaround for excessive height of rule editor window
The height of the Gtk.Box containing the rule name and description
labels is calculated incorrectly.  The parent widget seems to
think that the label text is wrapped onto many lines.

This workaround sets a minimum label width which makes the problem
less apparent.
2015-06-24 22:05:46 +01:00
Nick Hall 842d1490be Tidy up and remove redundant code 2015-06-24 22:05:46 +01:00
Nick Hall 4aa97cff03 Merge pull request #39 from elderamevans/patch-1
Add Trujillo Peru to LDS temple codes
2015-06-24 21:35:48 +01:00
elderamevans 510916e1ee Trujillo Peru
https://github.com/FamilySearch/temple-codes/blob/master/temples.xml
https://github.com/FamilySearch/temple-codes/commit/e4150c986b6c83271fab531ad1b4f082d20d96fb
2015-06-24 10:49:36 -06:00
Fedik 254dffd0cd Update Ukrainian translation 2015-06-23 21:11:37 +03:00
Josip d0c8fd056b Set parent of ProgressMeter 2015-06-20 03:57:54 +02:00
Josip 97ced02208 set remove unused objects dialog transient parent 2015-06-20 01:47:41 +02:00
Jérôme Rapinat 63a0f4b27a Update DEBIAN stuff
For more recent environments; python3, pybuild
2015-06-19 16:19:27 +02:00
kulath c9d7b00c0c 0008537: Gedcom import crashes. Fix problem when matching places with
the same name which are enclosed by different places.
2015-06-18 22:54:45 +01:00
Leonhaeuser 2898d122cc update German translation 2015-06-18 21:46:47 +02:00
Enno Borgsteede 41cfe9f4c9 0008639: check buttons misaligned in remove unused objects dialog 2015-06-18 19:16:53 +01:00
Nick Hall 8d6ffbeaec Remove executable permission from gedcom file 2015-06-18 14:18:36 +01:00
Nick Hall 16870116e6 Remove executable permission from python code 2015-06-18 14:12:37 +01:00
Nick Hall 7e2e5a6ec0 Remove executable permission from png files 2015-06-18 13:42:13 +01:00
Doug Blank 933baf8d2e WIP webapp: largley working again
1. Changed personform.model.gender_type to personform.model.gender_type_id
(no idea why this was needed)

2. Take care of cache default, and Tag save
2015-06-17 11:29:38 -04:00
Doug Blank 87983a0aa7 WIP webapp: two changes to make work with Django 1.6:
1. Forms no longer allow and pass keywords to models. So, we catch
   the keyword (save_cache) set it to the instance, and use that.

2. In templates, apparently not able to pass form.model.item. Will
   need to be able to get access to it in render().
2015-06-17 09:03:32 -04:00
Doug Blank 11f294160d 8537: Gedcom import crashes; kulath patch 2015-06-17 08:00:39 -04:00
Doug Blank 92e084fcf7 8614: addresses pickleupgrade.txt issue, by kulath 2015-06-17 06:34:16 -04:00
Doug Blank f49bef24d6 webapp: removed legacy PNG code; update test runner for Django 1.7 2015-06-16 11:03:11 -04:00
Doug Blank 5a71d8f3bc 7603: tab font of gramplet 'details' not like other gramplets 2015-06-16 07:53:31 -04:00
Lajos Nemeséri ec020e8e3b Update Hungarian translation 2015-06-16 08:16:49 +02:00
Doug Blank 8797caa2db Merge pull request #35 from RossGammon/8047-resourcepath
8047 - Add new --resourcepath option to setup.py
2015-06-15 17:46:16 -04:00
Ross Gammon 602fa041d6 8047 - Update INSTALL file to document --resourcepath option 2015-06-15 22:35:32 +02:00
Ross Gammon 019c78285a 8047 - add resource path option to setup.py
With this additional option to setup.py, a path to where the
resource-path will be installed can be supplied. This is needed
when building Gramps out of the source tree, otherwise the temporary
location is stored in the resource-path file and Gramps cannot find
it resources.
2015-06-15 22:03:10 +02:00
Doug Blank 5950c7711a SimpleAccess: sort by surname; fixes crash in python3 2015-06-14 22:02:40 -04:00
Doug Blank f1984dad87 Merge pull request #34 from RossGammon/packagermode
Remove setup.py --enable-package-mode option text from INSTALL
2015-06-14 13:06:12 -04:00
Doug Blank 4c47a396a8 8634: DB-API Database backend doesn't compute inverse filters correctly 2015-06-14 09:56:58 -04:00
Doug Blank 8b4c5c4ebe undoredo: added missing item 2015-06-13 21:35:56 -04:00
Doug Blank 9eef80afb0 undoredo: changes to work with general backend 2015-06-13 19:33:57 -04:00
Nick Hall edae9faaec Validate place name language 2015-06-13 18:45:38 +01:00
Ross Gammon d82ce1e9a5 Remove setup.py --enable-package-mode option text from INSTALL
This option is not used anymore and reports an error if used.
2015-06-13 16:52:49 +02:00
Jérôme Rapinat 8058cea0ca Merge NEWS (releases on 41 branch) 2015-06-12 16:48:18 +02:00
Hivernat Emmanuel b346dce2b3 7347: fix a bug 'on mouse over' event 2015-06-12 16:36:49 +02:00
Josip 7ea583bedd 8625: Cannot open Citation references from Clip Board 2015-06-12 16:23:25 +02:00
Leonhaeuser 64c9c08744 update German translation 2015-06-10 23:05:58 +02:00
Doug Blank 156006567a DbState: added import_from_filename 2015-06-10 06:49:50 -04:00
Jérôme Rapinat 5e23fa5fcb Remove one remaining context argument 2015-06-08 19:28:43 +02:00
Zdeněk Hataš 80fb5916cd czech translation update 2015-06-07 22:13:40 +02:00
Jérôme Rapinat 6f3bec036e Remove context into glade file
Gramps (python) is not ready for supporting msgctxt for now
2015-06-07 20:22:00 +02:00
Jérôme Rapinat 2e214a1248 update template 2015-06-07 20:20:11 +02:00
Jérôme Rapinat c7afce1592 Update translation references 2015-06-07 20:17:26 +02:00
Jérôme Rapinat 123e376aba Remove some unicode stuff for python3 2015-06-07 19:45:47 +02:00
Jérôme Rapinat 6b3aee848d 2531: Short cut keys does not work in 'Change Event Types' dialog 2015-06-07 19:23:03 +02:00
Jérôme Rapinat 1195448f14 7476: letter as custom paper size generated a ValueError 2015-06-07 19:19:07 +02:00
Zdeněk Hataš 47cdc1e54d date handler fix 2015-06-07 10:54:21 +02:00
Zdeněk Hataš bfb7f1536b translation and dateparser fix 2015-06-07 10:39:50 +02:00
Doug Blank 2f0496d0a3 8621: Recursion Filter error 2015-06-06 19:56:34 -04:00
SNoiraud abf785be5e Geography : bug 8612 and 8616 : gtk 3.16 introspection problem and change for new place structure. 2015-06-06 19:04:17 +02:00
Zdeněk Hataš 2a7bf82cf5 czech translation update 2015-06-06 17:04:58 +02:00
Doug Blank af7348a987 Added config 'database-backend' preference; removed backend dialog 2015-06-06 10:23:27 -04:00
Doug Blank 3f48a504d4 bsddb: fixed unittests 2015-06-06 07:20:45 -04:00
Zdeněk Hataš b13c731aa5 czech translation fixes
inflection fixes
2015-06-06 11:04:50 +02:00
Sam Manzi 45673e847d Merge pull request #26 from gramps-project/geps/gep-032-database-backend
Geps/gep 032 database backend
2015-06-06 14:40:57 +10:00
Josip 05cbb506de Data Verify Tool: fix set transient parent 2015-06-05 12:34:16 +02:00
Josip 184c6821a7 Relationship Calculator: fix set transient parent 2015-06-05 12:30:32 +02:00
Doug Blank a309e858d3 Merge pull request #33 from sam-m888/master
country > county
2015-06-05 00:33:39 -04:00
Sam Manzi 7751be7308 Merge pull request #1 from sam-m888/sam-m888-patch-1
Correct spelling & stop duplicate key
2015-06-05 13:22:34 +10:00
Sam Manzi e34993ce31 Correct spelling & stop duplicate key 2015-06-05 12:24:33 +10:00
Josip ce6f6f8d1a 8619: Relationship Calculator - can't select person to relate to 2015-06-04 23:06:54 +02:00
Doug Blank 0060b078df Merge pull request #32 from gramps-project/sam-m888-patch-6
Hide unused code
2015-06-04 12:46:46 -04:00
Doug Blank 6e2d7fb591 Merge pull request #31 from gramps-project/sam-m888-patch-5
Remove duplicate line in dictionary
2015-06-04 12:46:27 -04:00
Doug Blank 7dc9530ddb Merge pull request #30 from gramps-project/sam-m888-patch-4
spelling correction to stop duplicate key
2015-06-04 12:46:12 -04:00
Doug Blank 30336981f2 Merge pull request #29 from gramps-project/sam-m888-patch-3
Spelling mistake inlae > inlaw
2015-06-04 12:45:59 -04:00
Doug Blank 93da88b588 Merge pull request #28 from gramps-project/sam-m888-patch-2
6366: Correct text on "Display tab"
2015-06-04 12:45:38 -04:00
Doug Blank 596f61dfd9 Merge pull request #27 from gramps-project/sam-m888-patch-1
Fix outdated "Tags" help link
2015-06-04 12:43:37 -04:00
Matti Niemelä 2e8bd59aa2 update Finnish translation 2015-06-04 16:54:22 +02:00
Sam Manzi 713758ebcc Hide unused code 2015-06-04 20:28:54 +10:00
Sam Manzi 88df89c508 Remove duplicate line in dictionary
'all families': _('Filtering_on|all families')
2015-06-04 20:22:27 +10:00
Doug Blank 195afaa5b9 Corrupted po/nl.po; replaced from gramps42 2015-06-04 06:11:49 -04:00
Sam Manzi bee797007d spelling correction to stop duplicate key
country > county
2015-06-04 19:52:15 +10:00
Sam Manzi aa8109903b Spelling mistake inlae > inlaw 2015-06-04 19:45:56 +10:00
Sam Manzi 90ac188e8b 6366: Correct text on "Display tab"
from "sidebar" to "Navigator"
2015-06-04 17:01:06 +10:00
Sam Manzi 5f1b4a792a Fix outdated "Tags" help link 2015-06-04 13:01:30 +10:00
Zdeněk Hataš fdd7aefc20 czech translation update 2015-06-03 17:33:36 +02:00
erikdrgm ef846ce384 Updated 150602 Dutch translation 2015-06-02 20:47:13 +02:00
erikdrgm 842b88d244 Updated 150602 Dutch translation 2015-06-02 20:39:09 +02:00
Doug Blank 7bcb629547 Updated backends to 5.0; moved Django and DBAPI to addons 2015-06-02 10:55:38 -04:00
Doug Blank 56796d57b4 Merge branch 'master' into geps/gep-032-database-backend 2015-06-02 10:45:51 -04:00
Doug Blank 4ee8ac2585 DB-API: Sped up get_tag_from_name 2015-06-01 21:13:38 -04:00
Doug Blank 71c790a261 Bump all version numbers to 5.0 2015-06-01 13:16:08 -04:00
Doug Blank 8317f579c2 Merge branch 'master' into geps/gep-032-database-backend 2015-06-01 07:29:37 -04:00
Doug Blank 0b2ad1df35 DB-API: only backup when changes; fixed has_changed 2015-05-30 08:19:13 -04:00
Doug Blank 5b2bc78108 DB-API: allow low-level map import 2015-05-30 07:54:59 -04:00
Doug Blank a213f92f0d DB-API: support dbdid 2015-05-30 07:22:30 -04:00
Doug Blank 07673be08c Merge branch 'master' into geps/gep-032-database-backend 2015-05-30 07:11:45 -04:00
erikdrgm 7022c9af5a Merge branch 'master' of github.com:gramps-project/gramps 2015-05-29 22:41:22 +02:00
erikdrgm 066bb30604 Updated 150528 Dutch translation 2015-05-28 22:14:02 +02:00
erikdrgm bdd0f5e1b6 Updated 150423 Dutch translation 2015-05-28 22:14:00 +02:00
erikdrgm b589411473 Updated 150331 Dutch translation 2015-05-28 22:13:57 +02:00
Doug Blank 6f671d8bff Merge branch 'master' into geps/gep-032-database-backend 2015-05-27 16:00:10 -04:00
Doug Blank 7355adfc04 Merge branch 'geps/gep-032-database-backend' of https://github.com/gramps-project/gramps into geps/gep-032-database-backend
Conflicts:
	gramps/plugins/database/bsddb_support/upgrade.py
2015-05-26 20:11:32 -04:00
Doug Blank 8551a0b071 DB-API: fixed error in find_initial_person 2015-05-26 20:08:57 -04:00
Doug Blank 1830e2b943 DB-API: sql clean up; some FIXME's still left 2015-05-26 20:08:57 -04:00
Doug Blank d38785740e DB-API: surname_list not working; added tag map support 2015-05-26 20:08:57 -04:00
Doug Blank 1c4f827bf8 DB-API: committing objects updates secondary items 2015-05-26 20:08:57 -04:00
Doug Blank 1b89239323 DB-API: added undo-redo infrastructure 2015-05-26 20:08:57 -04:00
Doug Blank d5c9c5114a All metadata functionality now implemented 2015-05-26 20:08:57 -04:00
Doug Blank dad21d1e2f Update backlinks 2015-05-26 20:08:57 -04:00
Doug Blank 800e8ebefb Added metadata table and setting/value 2015-05-26 20:08:57 -04:00
Doug Blank 9274d74dc1 WIP: name_group; clean up of SQL 2015-05-26 20:08:57 -04:00
Doug Blank 1871c6ced4 Basics for back references now work, although doesn't update with edits yet 2015-05-26 20:08:57 -04:00
Doug Blank a6f7093bae Added indices on order_by fields 2015-05-26 20:08:57 -04:00
Doug Blank 8be61709b8 Now using batch transactions 2015-05-26 20:08:57 -04:00
Doug Blank d69f8a6d3c Added support for sort_handles 2015-05-26 20:08:56 -04:00
Doug Blank 31fe15e782 DB-API 2.0 can now load/save from file; need to load/save metadata 2015-05-26 20:08:56 -04:00
Doug Blank 8babc69dc5 WIP: Added DB-API 2.0 interface; needs to load/save details from
dbdir; currently using sqlite :memory: database. But could use
any DB-API 2.0 compatible layers.
2015-05-26 20:08:56 -04:00
Doug Blank 8d92b5d634 Added DbState.open_database() for opening without DbManager 2015-05-26 20:08:56 -04:00
Doug Blank 8a657250b1 DictionaryDb: give handle in bytes, handle as str internally in dict 2015-05-26 20:08:56 -04:00
Doug Blank 8d3657f54a Diff: fixed import of DictionaryDb; removed mistaken tag.gramps_id
references in DictionartDb
2015-05-26 20:08:56 -04:00
Doug Blank 97fd387c34 Removed duplicate methods 2015-05-26 20:08:56 -04:00
Doug Blank 8a15aaffb7 Added missing function; allow failed plugin message to show 2015-05-26 20:08:56 -04:00
Doug Blank 4805c3c7f0 DjangoDb: force load when write_version/create to make work with reset modules 2015-05-26 20:08:56 -04:00
Doug Blank cfb33ec1a2 DjangoDb: typo, added logger 2015-05-26 20:08:56 -04:00
Doug Blank 576db27e9d Importers: added db.prepare_import/db.commit_import to wrap imports 2015-05-26 20:08:56 -04:00
Doug Blank b095c6b606 DjangoDb: always force a gramps_id; typo fix 2015-05-26 20:07:46 -04:00
Doug Blank 014f8e61f1 DictionaryDb: reworked internal reprs; updated gender stats, researcher 2015-05-26 20:07:46 -04:00
Doug Blank eeb150f1e3 Database API: expore name, full_name, and brief_name 2015-05-26 20:07:46 -04:00
Doug Blank c72d40aa07 bsddb backend: supply version details in get_summary 2015-05-26 20:07:46 -04:00
Doug Blank ea996cf6dd Database API, -L: database reports summary, if possible 2015-05-26 20:07:46 -04:00
Doug Blank 3c52f7016b Alternative DBs: touch meta_data.db to record last access time 2015-05-26 20:07:46 -04:00
Doug Blank 5171b3748d Added missing bookmark count methods to djangodb and dictionarydb 2015-05-26 20:07:45 -04:00
Doug Blank 11ac0f1551 Database plugin type support reset_system, to reset modules 2015-05-26 20:07:45 -04:00
Doug Blank 331a947ea4 Removed hardcoded database backend types 2015-05-26 20:07:45 -04:00
Doug Blank e4d05f301a Fixed About dialog to show proper BSDDB version 2015-05-26 20:07:45 -04:00
Doug Blank b2ed5d1cbb DjangoDb: send proper object-add signal on new objects 2015-05-26 20:07:45 -04:00
Doug Blank bf12a2bc67 Basic infrastructure for Undo/Redo 2015-05-26 20:07:45 -04:00
Doug Blank d6d5ecdf5d DictionaryDb: emit add after actually adding (fixed typo) 2015-05-26 20:07:45 -04:00
Doug Blank d72ed91f21 DictionaryDb: emit add after actually adding 2015-05-26 20:07:45 -04:00
Doug Blank 1118ce449c Reworked backend Cursors; don't emit changes when changing in batch mode 2015-05-26 20:07:45 -04:00
Doug Blank 6da7f78cba Hack to reset modules on subsequent uses of Django databases 2015-05-26 20:07:45 -04:00
Doug Blank 61ec1c1b48 Database backends: bsddb, django, and dictionary 2015-05-26 20:07:45 -04:00
Doug Blank 7ded76695a DictionaryDb: implement delete 2015-05-26 20:07:45 -04:00
Doug Blank 3489276fa1 Moved key maps to dbconst 2015-05-26 20:07:45 -04:00
Doug Blank 789158aca5 DictionaryDb: now reads/writes on open/close 2015-05-26 20:07:45 -04:00
Doug Blank 8a42966c1f DictionaryDb: adding missing functions, bringing up to date 2015-05-26 20:07:44 -04:00
Doug Blank beb8b8e3ab Loads tree based on id in database.txt 2015-05-26 20:07:44 -04:00
Doug Blank 337ba6b22a Added Django and Dictionary plugins, to be developed 2015-05-26 20:07:44 -04:00
Doug Blank c0f9559f8c Database backend writes its plugin id in database.txt 2015-05-26 20:07:44 -04:00
Doug Blank e7d62cf9b1 Only BSDDB plugin needs bsddb3; back/restore moved to db 2015-05-26 20:07:44 -04:00
Doug Blank 2d6a319c13 Moved make_database to DbState 2015-05-26 20:07:44 -04:00
Doug Blank b059bdec66 Database backend as a plugin: this set of changes moves most or
all of Bsddb from gramps.gen.db to gramps.plugins.database. The
id of the plugin is 'bsddb' which can be loaded using the
make_database(id, dbstate) API (for now).

Next step is to add an identifying text in the directory to
indicate which database backend to use.
2015-05-26 20:07:44 -04:00
Doug Blank c830311aca Merge branch 'master' into geps/gep-032-database-backend
Conflicts:
	gramps/plugins/importer/importcsv.py
2015-05-26 13:43:51 -04:00
Doug Blank 90488ce14b DB-API: fixed error in find_initial_person 2015-05-26 11:35:56 -04:00
Doug Blank 3cbc012f6f DB-API: sql clean up; some FIXME's still left 2015-05-25 22:31:36 -04:00
Doug Blank dce0b82155 Merge branch 'master' into geps/gep-032-database-backend 2015-05-25 21:07:32 -04:00
Doug Blank 54cc6cbff3 DB-API: surname_list not working; added tag map support 2015-05-25 21:06:44 -04:00
Doug Blank 986022cee1 DB-API: committing objects updates secondary items 2015-05-25 19:04:27 -04:00
Doug Blank 5e96f8a72e DB-API: added undo-redo infrastructure 2015-05-25 17:53:14 -04:00
Doug Blank 72cfc3f826 All metadata functionality now implemented 2015-05-25 13:33:04 -04:00
Doug Blank e0e3cee255 Merge branch 'master' into geps/gep-032-database-backend 2015-05-24 19:04:57 -04:00
Doug Blank 80b2b351e6 Update backlinks 2015-05-23 22:46:05 -04:00
Doug Blank e85b4be7d6 Added metadata table and setting/value 2015-05-23 21:27:51 -04:00
Doug Blank e4898df12d WIP: name_group; clean up of SQL 2015-05-23 20:25:04 -04:00
Doug Blank 56cf1b02ab Basics for back references now work, although doesn't update with edits yet 2015-05-23 14:52:43 -04:00
Doug Blank aa7928d35d Added indices on order_by fields 2015-05-23 10:27:49 -04:00
Doug Blank f275843556 Now using batch transactions 2015-05-23 10:07:57 -04:00
Doug Blank 3cd6622c8f Added support for sort_handles 2015-05-23 09:54:04 -04:00
Doug Blank beae0b9319 Merge branch 'master' into geps/gep-032-database-backend 2015-05-23 08:09:40 -04:00
Doug Blank 83c853726d DB-API 2.0 can now load/save from file; need to load/save metadata 2015-05-23 02:15:44 -04:00
Doug Blank 720664818f WIP: Added DB-API 2.0 interface; needs to load/save details from
dbdir; currently using sqlite :memory: database. But could use
any DB-API 2.0 compatible layers.
2015-05-23 01:34:16 -04:00
Doug Blank 0819f447e1 Merge branch 'master' into geps/gep-032-database-backend
Conflicts:
	gramps/plugins/database/dictionarydb.py
2015-05-22 14:38:40 -04:00
Doug Blank e1c33c4d3e Added DbState.open_database() for opening without DbManager 2015-05-21 10:51:36 -04:00
Doug Blank 69eed4f7f2 Merge branch 'master' into geps/gep-032-database-backend 2015-05-20 18:00:46 -04:00
Doug Blank a9b7b43ffb DictionaryDb: give handle in bytes, handle as str internally in dict 2015-05-17 19:01:21 -04:00
Doug Blank 92f435d45b Diff: fixed import of DictionaryDb; removed mistaken tag.gramps_id
references in DictionartDb
2015-05-17 11:40:25 -04:00
Doug Blank acc6a652eb Removed duplicate methods 2015-05-16 09:18:41 -04:00
Doug Blank 276052d231 Added missing function; allow failed plugin message to show 2015-05-16 02:15:02 -04:00
Doug Blank d3bd2b6692 DjangoDb: force load when write_version/create to make work with reset modules 2015-05-16 01:40:05 -04:00
Doug Blank bb9403e2b2 DjangoDb: typo, added logger 2015-05-16 00:46:22 -04:00
Doug Blank 2147f72176 Importers: added db.prepare_import/db.commit_import to wrap imports 2015-05-16 00:16:33 -04:00
Doug Blank d8346a705f DjangoDb: always force a gramps_id; typo fix 2015-05-15 23:26:22 -04:00
Doug Blank 87d2cfb301 DictionaryDb: reworked internal reprs; updated gender stats, researcher 2015-05-15 22:50:54 -04:00
Doug Blank a1d44d0246 Merge branch 'master' into geps/gep-032-database-backend 2015-05-15 18:22:25 -04:00
Doug Blank 1c05879f62 Database API: expore name, full_name, and brief_name 2015-05-15 10:48:14 -04:00
Doug Blank 16c2843073 bsddb backend: supply version details in get_summary 2015-05-15 09:12:21 -04:00
Doug Blank a36a8b72b8 Database API, -L: database reports summary, if possible 2015-05-15 07:32:03 -04:00
Doug Blank ae11d8b484 Alternative DBs: touch meta_data.db to record last access time 2015-05-15 06:42:13 -04:00
Doug Blank b1d07b8e70 Merge branch 'master' into geps/gep-032-database-backend 2015-05-15 06:20:18 -04:00
Doug Blank c2fb186edc Added missing bookmark count methods to djangodb and dictionarydb 2015-05-14 23:15:30 -04:00
Doug Blank b6fb46b760 Database plugin type support reset_system, to reset modules 2015-05-14 22:52:57 -04:00
Doug Blank c1345ca64c Removed hardcoded database backend types 2015-05-14 22:35:50 -04:00
Doug Blank 00d958aaed Merge branch 'master' into geps/gep-032-database-backend 2015-05-14 21:33:40 -04:00
Doug Blank d4688589d8 Merge branch 'master' into geps/gep-032-database-backend 2015-05-14 15:15:24 -04:00
Doug Blank 37e7ead1e2 Fixed About dialog to show proper BSDDB version 2015-05-14 12:48:55 -04:00
Doug Blank ad83d84778 DjangoDb: send proper object-add signal on new objects 2015-05-14 12:43:24 -04:00
Doug Blank 74330122bd Basic infrastructure for Undo/Redo 2015-05-14 12:30:30 -04:00
Doug Blank 6e0b8ccf86 DictionaryDb: emit add after actually adding (fixed typo) 2015-05-14 11:51:56 -04:00
Doug Blank 06d0db3b6a DictionaryDb: emit add after actually adding 2015-05-14 11:49:58 -04:00
Doug Blank c01e9860bf Merge branch 'master' into geps/gep-032-database-backend 2015-05-14 11:07:27 -04:00
Doug Blank 47a3a7ad0f Reworked backend Cursors; don't emit changes when changing in batch mode 2015-05-14 09:07:10 -04:00
Doug Blank 28c609d4c7 Hack to reset modules on subsequent uses of Django databases 2015-05-14 07:01:47 -04:00
Doug Blank ca88f37bb6 Database backends: bsddb, django, and dictionary 2015-05-14 06:31:59 -04:00
Doug Blank 73886e9232 DictionaryDb: implement delete 2015-05-13 22:55:23 -04:00
Doug Blank e7dc1a7bc4 Moved key maps to dbconst 2015-05-13 22:01:47 -04:00
Doug Blank 5115cd13e4 DictionaryDb: now reads/writes on open/close 2015-05-13 21:29:07 -04:00
Doug Blank fbbd9d9c6e DictionaryDb: adding missing functions, bringing up to date 2015-05-13 19:26:14 -04:00
Doug Blank 6bff90419e Loads tree based on id in database.txt 2015-05-13 12:36:17 -04:00
Doug Blank 16a5665e3e Added Django and Dictionary plugins, to be developed 2015-05-13 08:09:30 -04:00
Doug Blank f7474ddade Merge branch 'master' into geps/gep-032-database-backend 2015-05-13 07:41:26 -04:00
Doug Blank 81ebdd97cc Database backend writes its plugin id in database.txt 2015-05-12 23:08:54 -04:00
Doug Blank 7a7696224d Merge branch 'master' into geps/gep-032-database-backend 2015-05-12 22:18:17 -04:00
Doug Blank af0b308b1e Only BSDDB plugin needs bsddb3; back/restore moved to db 2015-05-12 22:03:10 -04:00
Doug Blank 432a05c64b Merge branch 'master' into geps/gep-032-database-backend 2015-05-12 19:16:34 -04:00
Doug Blank 2dd365f8bc Moved make_database to DbState 2015-05-12 19:09:17 -04:00
Doug Blank 242abf9f69 Database backend as a plugin: this set of changes moves most or
all of Bsddb from gramps.gen.db to gramps.plugins.database. The
id of the plugin is 'bsddb' which can be loaded using the
make_database(id, dbstate) API (for now).

Next step is to add an identifying text in the directory to
indicate which database backend to use.
2015-05-12 16:30:46 -04:00
1339 changed files with 131370 additions and 298946 deletions
+9
View File
@@ -0,0 +1,9 @@
# Make Github recognise Gramps as a Python project,
# by marking .sql files as text files!
# See: https://github.com/github/linguist/issues/2462
# https://github.com/github/linguist/blob/master/README.md
*.sql linguist-language=txt
# Have Github ignore js vendored files.
# https://github.com/gramps-project/gramps/tree/master/data/javascript
#data/javascript/*.js linguist-vendored
+8 -2
View File
@@ -8,7 +8,7 @@ dist/
# Gramps
data/tips.xml
gramps/plugins/lib/holidays.xml
data/holidays.xml
po/.intltool-merge-cache
docs/_build/
@@ -18,4 +18,10 @@ tags
# Testing
test/data
gramps/webapp/grampsdb/fixtures/initial_data.json
# Windows image file caches
Thumbs.db
ehthumbs.db
# Glade temp files
*~
+28
View File
@@ -0,0 +1,28 @@
<benny.malengier@gramps-project.org> <benny.malengier@gmail.com>
<doug.blank@gmail.com> <dsblank@bitbucket.org>
<doug.blank@gmail.com> <dblank@cs.brynmawr.edu>
<beernarrd@gmail.com> <beernarrd@users.sourceforge.net>
<igal.shapira@gmail.com> <igalshapira@users.sourceforge.net>
<romjerome@yahoo.fr> <romjerome@users.noreply.github.com>
<jralls@ceridwen.us> <john@aeolus.local>
<josip@pisoj.com> <bpisoj@gmail.com>
Josip Pisoj <josip@pisoj.com>
Mirko Leonhaeuser <mirko@leonhaeuser.de>
<martin.hawlisch@gmx.de> <loshawlos@users.sourceforge.net>
Matti Niemelä <matti.u.niemela@gmail.com>
<nick-h@gramps-project.org> <nick__hall@hotmail.com>
<nick-h@gramps-project.org> <Nick-Hall@users.noreply.github.com>
Ondrej Krč-Jediný <hou@centrum.sk>
<hou@centrum.sk> <ondrisko@users.sourceforge.com>
Pierre Bélissent <pierre.belissent@gmail.com>
Serge Noiraud <Serge.Noiraud@free.fr>
<Serge.Noiraud@free.fr> <serge.noiraud@free.fr>
<Serge.Noiraud@free.fr> <serge.noiraud@laposte.net>
Zdeněk Hataš <zdenek.hatas@gmail.com>
<zdenek.hatas@gmail.com> <zdenek.hatas@hp.com>
<zdenek.hatas@gmail.com> <zenhas@users.sourceforge.net>
<gerald@gkunzmann.de> <g.kunzmann@arcor.de>
Tim G L Lyons <tim.g.lyons@gmail.com>
<tim.g.lyons@gmail.com> <guy.linton@gmail.com>
Elder Evans <elderamevans@gmail.com>
+378
View File
@@ -0,0 +1,378 @@
[MASTER]
# Specify a configuration file.
#rcfile=
# Python code to execute, usually for sys.path manipulation such as
# pygtk.require().
#init-hook=
# Add files or directories to the blacklist. They should be base names, not
# paths.
ignore=CVS
# Pickle collected data for later comparisons.
persistent=yes
# List of plugins (as comma separated values of python modules names) to load,
# usually to register additional checkers.
load-plugins=
# Use multiple processes to speed up Pylint.
jobs=1
# Allow loading of arbitrary C extensions. Extensions are imported into the
# active Python interpreter and may run arbitrary code.
unsafe-load-any-extension=no
# A comma-separated list of package or module names from where C extensions may
# be loaded. Extensions are loading into the active Python interpreter and may
# run arbitrary code
extension-pkg-whitelist=
# Allow optimization of some AST trees. This will activate a peephole AST
# optimizer, which will apply various small optimizations. For instance, it can
# be used to obtain the result of joining multiple strings with the addition
# operator. Joining a lot of strings can lead to a maximum recursion error in
# Pylint and this flag can prevent that. It has one side effect, the resulting
# AST will be different than the one from reality.
optimize-ast=no
[MESSAGES CONTROL]
# Only show warnings with the listed confidence levels. Leave empty to show
# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED
confidence=
# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
# multiple time. See also the "--disable" option for examples.
#enable=
# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifiers separated by comma (,) or put this
# option multiple times (only on the command line, not in the configuration
# file where it should appear only once).You can also use "--disable=all" to
# disable everything first and then reenable specific checks. For example, if
# you want to run only the similarities checker, you can use "--disable=all
# --enable=similarities". If you want to run only the classes checker, but have
# no Warning level messages displayed, use"--disable=all --enable=classes
# --disable=W"
disable=suppressed-message,intern-builtin,round-builtin,unicode-builtin,range-builtin-not-iterating,long-builtin,basestring-builtin,setslice-method,print-statement,reload-builtin,metaclass-assignment,raising-string,next-method-called,import-star-module-level,xrange-builtin,getslice-method,zip-builtin-not-iterating,reduce-builtin,dict-iter-method,delslice-method,using-cmp-argument,hex-method,buffer-builtin,old-ne-operator,nonzero-method,backtick,parameter-unpacking,indexing-exception,file-builtin,filter-builtin-not-iterating,raw_input-builtin,execfile-builtin,oct-method,cmp-method,coerce-builtin,long-suffix,cmp-builtin,input-builtin,dict-view-method,standarderror-builtin,apply-builtin,old-raise-syntax,unichr-builtin,old-division,coerce-method,unpacking-in-except,useless-suppression,no-absolute-import,map-builtin-not-iterating,old-octal-literal
[REPORTS]
# Set the output format. Available formats are text, parseable, colorized, msvs
# (visual studio) and html. You can also give a reporter class, eg
# mypackage.mymodule.MyReporterClass.
output-format=text
# Put messages in a separate file for each module / package specified on the
# command line instead of printing them on stdout. Reports (if any) will be
# written in a file name "pylint_global.[txt|html]".
files-output=no
# Tells whether to display a full report or only the messages
reports=yes
# Python expression which should return a note less than 10 (10 is the highest
# note). You have access to the variables errors warning, statement which
# respectively contain the number of errors / warnings messages and the total
# number of statements analyzed. This is used by the global evaluation report
# (RP0004).
evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
# Template used to display messages. This is a python new-style format string
# used to format the message information. See doc for all details
#msg-template=
[BASIC]
# List of builtins function names that should not be used, separated by a comma
bad-functions=map,filter
# Good variable names which should always be accepted, separated by a comma
good-names=i,j,k,ex,Run,_,db
# Bad variable names which should always be refused, separated by a comma
bad-names=foo,bar,baz,toto,tutu,tata
# Colon-delimited sets of names that determine each other's naming style when
# the name regexes allow several styles.
name-group=
# Include a hint for the correct naming format with invalid-name
include-naming-hint=no
# Regular expression matching correct argument names
argument-rgx=[a-z_][a-z0-9_]{2,30}$
# Naming hint for argument names
argument-name-hint=[a-z_][a-z0-9_]{2,30}$
# Regular expression matching correct module names
module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
# Naming hint for module names
module-name-hint=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
# Regular expression matching correct class attribute names
class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
# Naming hint for class attribute names
class-attribute-name-hint=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
# Regular expression matching correct function names
function-rgx=[a-z_][a-z0-9_]{2,30}$
# Naming hint for function names
function-name-hint=[a-z_][a-z0-9_]{2,30}$
# Regular expression matching correct inline iteration names
inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
# Naming hint for inline iteration names
inlinevar-name-hint=[A-Za-z_][A-Za-z0-9_]*$
# Regular expression matching correct constant names
const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$
# Naming hint for constant names
const-name-hint=(([A-Z_][A-Z0-9_]*)|(__.*__))$
# Regular expression matching correct method names
method-rgx=[a-z_][a-z0-9_]{2,30}$
# Naming hint for method names
method-name-hint=[a-z_][a-z0-9_]{2,30}$
# Regular expression matching correct class names
class-rgx=[A-Z_][a-zA-Z0-9]+$
# Naming hint for class names
class-name-hint=[A-Z_][a-zA-Z0-9]+$
# Regular expression matching correct variable names
variable-rgx=[a-z_][a-z0-9_]{2,30}$
# Naming hint for variable names
variable-name-hint=[a-z_][a-z0-9_]{2,30}$
# Regular expression matching correct attribute names
attr-rgx=[a-z_][a-z0-9_]{2,30}$
# Naming hint for attribute names
attr-name-hint=[a-z_][a-z0-9_]{2,30}$
# Regular expression which should only match function or class names that do
# not require a docstring.
no-docstring-rgx=^_
# Minimum line length for functions/classes that require docstrings, shorter
# ones are exempt.
docstring-min-length=-1
[ELIF]
# Maximum number of nested blocks for function / method body
max-nested-blocks=5
[LOGGING]
# Logging modules to check that the string format arguments are in logging
# function parameter format
logging-modules=logging
[SPELLING]
# Spelling dictionary name. Available dictionaries: none. To make it working
# install python-enchant package.
spelling-dict=
# List of comma separated words that should not be checked.
spelling-ignore-words=
# A path to a file that contains private dictionary; one word per line.
spelling-private-dict-file=
# Tells whether to store unknown words to indicated private dictionary in
# --spelling-private-dict-file option instead of raising a message.
spelling-store-unknown-words=no
[MISCELLANEOUS]
# List of note tags to take in consideration, separated by a comma.
notes=FIXME,XXX,TODO
[TYPECHECK]
# Tells whether missing members accessed in mixin class should be ignored. A
# mixin class is detected if its name ends with "mixin" (case insensitive).
ignore-mixin-members=yes
# List of module names for which member attributes should not be checked
# (useful for modules/projects where namespaces are manipulated during runtime
# and thus existing member attributes cannot be deduced by static analysis. It
# supports qualified module names, as well as Unix pattern matching.
ignored-modules=
# List of classes names for which member attributes should not be checked
# (useful for classes with attributes dynamically set). This supports can work
# with qualified names.
ignored-classes=
# List of members which are set dynamically and missed by pylint inference
# system, and so shouldn't trigger E1101 when accessed. Python regular
# expressions are accepted.
generated-members=
[SIMILARITIES]
# Minimum lines number of a similarity.
min-similarity-lines=4
# Ignore comments when computing similarities.
ignore-comments=yes
# Ignore docstrings when computing similarities.
ignore-docstrings=yes
# Ignore imports when computing similarities.
ignore-imports=no
[FORMAT]
# Maximum number of characters on a single line.
max-line-length=80
# Regexp for a line that is allowed to be longer than the limit.
ignore-long-lines=^\s*(# )?<?https?://\S+>?$
# Allow the body of an if to be on the same line as the test if there is no
# else.
single-line-if-stmt=no
# List of optional constructs for which whitespace checking is disabled. `dict-
# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}.
# `trailing-comma` allows a space between comma and closing bracket: (a, ).
# `empty-line` allows space-only lines.
no-space-check=trailing-comma,dict-separator
# Maximum number of lines in a module
max-module-lines=1000
# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
# tab).
indent-string=' '
# Number of spaces of indent required inside a hanging or continued line.
indent-after-paren=4
# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
expected-line-ending-format=
[VARIABLES]
# Tells whether we should check for unused import in __init__ files.
init-import=no
# A regular expression matching the name of dummy variables (i.e. expectedly
# not used).
dummy-variables-rgx=_$|dummy
# List of additional names supposed to be defined in builtins. Remember that
# you should avoid to define new builtins when possible.
additional-builtins=
# List of strings which can identify a callback function by name. A callback
# name must start or end with one of those strings.
callbacks=cb_,_cb
[CLASSES]
# List of method names used to declare (i.e. assign) instance attributes.
defining-attr-methods=__init__,__new__,setUp
# List of valid names for the first argument in a class method.
valid-classmethod-first-arg=cls
# List of valid names for the first argument in a metaclass class method.
valid-metaclass-classmethod-first-arg=mcs
# List of member names, which should be excluded from the protected access
# warning.
exclude-protected=_asdict,_fields,_replace,_source,_make
[IMPORTS]
# Deprecated modules which should not be used, separated by a comma
deprecated-modules=optparse
# Create a graph of every (i.e. internal and external) dependencies in the
# given file (report RP0402 must not be disabled)
import-graph=
# Create a graph of external dependencies in the given file (report RP0402 must
# not be disabled)
ext-import-graph=
# Create a graph of internal dependencies in the given file (report RP0402 must
# not be disabled)
int-import-graph=
[DESIGN]
# Maximum number of arguments for function / method
max-args=5
# Argument names that match this expression will be ignored. Default to name
# with leading underscore
ignored-argument-names=_.*
# Maximum number of locals for function / method body
max-locals=15
# Maximum number of return / yield for function / method body
max-returns=6
# Maximum number of branch for function / method body
max-branches=12
# Maximum number of statements in function / method body
max-statements=50
# Maximum number of parents for a class (see R0901).
max-parents=7
# Maximum number of attributes for a class (see R0902).
max-attributes=7
# Minimum number of public methods for a class (see R0903).
min-public-methods=2
# Maximum number of public methods for a class (see R0904).
max-public-methods=20
# Maximum number of boolean expressions in a if statement
max-bool-expr=5
[EXCEPTIONS]
# Exceptions that will emit a warning when being caught. Defaults to
# "Exception"
overgeneral-exceptions=Exception
+45 -17
View File
@@ -1,29 +1,57 @@
# After changing this file, check it on:
# http://lint.travis-ci.org/
language: python
python:
- 3.4
sudo: false
cache: pip
addons:
apt:
packages:
- gir1.2-pango-1.0
- gir1.2-gtk-3.0
- xdg-utils
- librsvg2-common
- libglib2.0-dev
- intltool
# - python3-gobject Provided by python3-gi
- python3-gi
- python3-cairo
- python3-gi-cairo
- python3-bsddb3
- python3-dev
- python3-nose
- python3-mock
language: c
#python:
# - 3.3
# - 3.4
before_install:
- pip install --upgrade pip
- pip install --upgrade setuptools wheel nose coverage codecov
install:
- git clone --depth=50 --branch=master git://github.com/gramps-project/gramps.git gramps-project/gramps
- cd gramps-project/gramps
- time sudo apt-get update
- travis_retry sudo apt-get install gir1.2-pango gir1.2-gtk xdg-utils librsvg2-common libglib2.0-dev intltool
- travis_retry sudo apt-get install python3-gobject python3-gi python3-cairo python3-gi-cairo python3-bsddb3 python3-dev python3-nose
- travis_retry pip install --upgrade pillow
- travis_retry pip install pyicu==1.8
- travis_retry curl https://bootstrap.pypa.io/get-pip.py | sudo python3
- travis_retry sudo pip3 install Django==1.7
- travis_retry sudo pip3 install pyicu==1.8
- travis_retry sudo pip3 install mock
- python3 setup.py build
# - cd $TRAVIS_BUILD_DIR
# $TRAVIS_BUILD_DIR is set to the location of the cloned repository:
# for example: /home/travis/build/gramps-project/gramps
- git clone -b master https://github.com/srossross/meta
- python setup.py build
#before_script:
before_script:
# - sudo Xvfb :99 -ac &
# - export DISPLAY=:99
- mkdir -p ~/.gramps/grampsdb/
script:
- mkdir -p /home/travis/.gramps/grampsdb/
- DJANGO_SETTINGS_MODULE=gramps.webapp.settings nosetests3 --exclude=TestcaseGenerator --exclude=vcard --exclude=merge_ref_test gramps
# --exclude=TestUser because of older version of mock
# without configure_mock
- PYTHONPATH=meta GRAMPS_RESOURCES=. nosetests3 --nologcapture --with-coverage --cover-package=gramps --exclude=TestcaseGenerator --exclude=vcard --exclude=merge_ref_test --exclude=user_test gramps
- if git --no-pager grep --color -n --full-name '[ ]$' -- \*.py; then
echo "ERROR - Trailing whitespace found in source file(s)";
exit 1;
fi
after_success:
- codecov
+1 -1
View File
@@ -212,7 +212,7 @@ their own plugins which could be new reports, charts, or research tools.
18. In what formats can Gramps output its reports?
Text reports are available in HTML, PDF, ODT, LaTeX, and RTF formats. Graphical reports (charts and diagrams) are available in PostScript, PDF, SVG, ODS, and GraphViz formats.
Text reports are available in HTML, PDF, ODT, LaTeX, and RTF formats. Graphical reports (charts and diagrams) are available in PostScript, PDF, SVG, ODS, and Graphviz formats.
19. How can I change the default language in reports?
-2
View File
@@ -25,7 +25,5 @@ able to run gramps from the source directory without setting PYTHONPATH
From this position, import gramps works great
"""
import os
os.environ['GRAMPS_RESOURCES'] = os.path.dirname(os.path.abspath(__file__))
import gramps.grampsapp as app
app.main()
+6 -6
View File
@@ -91,12 +91,6 @@ alternative location on windows, supply the --root argument to setup.py
For example:
python setup.py install --root ~/test
or
python setup.py install --root ~/test --enable-packager-mode
The last option, --enable-packager-mode, is needed if you want to disable
execution of post-install mime processing. If you don't have root/admin
access, this will be needed
Packager's issues
------------------
@@ -104,3 +98,9 @@ There is a MANIFEST.in file to indicate the work needed.
To create a source distribution run:
python setup.py sdist
If Gramps is built outside of the source tree in a temporary location (e.g. when
packaging for a distribution), the --resourcepath option can be used to specify
the path to the installed location of the Gramps resources (e.g. /usr/share):
python setup.py install --resourcepath=/usr/share
+1 -3
View File
@@ -22,11 +22,9 @@ recursive-include windows *
# Remove files created in the build
exclude data/tips.xml
exclude gramps/plugins/lib/holidays.xml
exclude data/holidays.xml
exclude po/.intltool-merge-cache
global-exclude *.pyc
global-exclude *.pyo
# Remove directories which should not be included in the distribution
prune gramps/guiQML
#prune gramps/webapp
+188 -2
View File
@@ -1,3 +1,189 @@
2015-05-01
Version 4.1.3, "Thou shalt not count to five", a maintenance release.
* Fix db upgrade failure
* GtkDialog mapped without a transient parent
* [Gedcom} SUBN and SUBM record handling
* [Gedcom] Import/export round trip causes lost information
* [Gedcom] Entering a witness to an event such as marriage might be ignored
* [Gedcom] Gramps can't import estim. date period exported by itself
* [Gedcom] 1/4 and 1/2 ANSEL characters not supported on importing ANSEL
* [Gedcom] Importing file containing multibyte UTF-8 characters fails
* [Gedcom] Import fails for ANSI file under python 3
* [Gedcom] Failure importing ANSEL encoded gedcom file.
* [Gedcom] Characters ignored on a Gedcom encoded ANSI (cp1252 West Europe, USA)
* [Gedcom] NameError in importer
* [Gedcom] Event address is lost on import, i.e. disconnected from event
* Crash on geneweb export with python3
* GuiColorOption missing avail-changed event handler
* Bad generation of [timeline report] ODT files since 4.0.0
* Fix bad handle in explanation note for unknown event
* Fix spurious generation of empty 'Alternative Name' in place.merge()
* Support creating directories in various scenarios
* Attempting to add a bookmark causes an error
* Long series of "unhandled exception" popup boxes while doing a check & repair
* Crash when trying to link existing place as an enclosing place using P0001 number
* HTML view fails to load
* Relationship Graph crashes
* Python3 needs new_subpixbuf not subpixbuf
* Regression: running gramps from crontab fails
* tag_map is not initialized
* Some labels now fit better on citations sidebar filter
* Event columns in web narrative are too narrow
* Problem by start program (launcher)
* Translation string missing in Not Related tool for help and close button
* Date format month/year is not well reported at editing time [in Italian]
* Fix unknown gender relationships handler for the french locale
* Fix a handle type bug on sidebar filter
* Tidy up About dialog
* Cleanup on some man files
* Convert some remaining unicode literals
* Fix mac menubar setting
* Enable python3 to run po/update_po.py
* Updated translations: cs, de, fr, is, nl
2015-02-28
Version 4.1.2, "That's no ordinary rabbit", a maintenance release.
* Error converting python2 utf-8 strings to python3 str when loading data from database
* Removing a parent place from a place leaves a dangling reference
* Error during checking the database
* Stubborn blank space in database won't be removed, fix removing rows in flat list views
* Database upgrade fails if default media path is not set
* Error converting database after upgrade to Gramps 4.1.1
* Error in a single place within the places section
* Entries from the add-or-choose selector of Place/Source/Media/Note cannot be dragged
* Enclosing places tab should work like other similar tabs, new place reference editor
* Association editor refuses dropped persons
* Error on opening twice an object from clipboard
* Incorrect spacing in export assistant file chooser
* New Event types are saved as a disordered list
* Always display main participants
* Place titles can now be generated on-the-fly by a place displayer, default is still to use the place title field
* GEDCOM import of embedded notes attached to media does not work
* Crash on Ancestry.com .ged import; consistent.
* Errors handling owner/submitter information in GEDCOM files.
Only import researcher from GEDCOM or XML if the family tree was originally empty.
* GEDCOM export does not export media attached to citations.
* The fanchart view crashes if max generation is set to 1 away.
* Sidebar Filters do not match placetypes in new placeview, two new filter rules (HasTitle, HasData)
* Fix bug when family has no parents
* Fix bad handle in explanation note for unknown event
* Some labels now fit better on citations sidebar filter
* Views in Geography should not always use the last option set by the user
* Request for keyboard-controlled zoom on Geography view
* Error geography view - Displaying main menu
* Configure screen needs a file selector to select directory for "offline mode" files
* Filter panel on geography view displays improperly
* Detailed descendant report crashes, bibliography (citations)
* Can't disable box shadow in SVG descendant tree
* Descendant tree graphical report, syntax error in svg output
* Regression: Complete Individual report has partially-untranslated output
* Events Page in Narrative Report not working
* Gramps freeze after defining a report style with German cm values
* Various problems with docgen.TextDoc.add_media_object
* Report event attribute name is not translated
* Records Gramplet uses wrong text
* Closing detached gramplet causes python to crash
* Cannot reduce size of gramplets detached from a gramplet bar
* Gramplets don't fill window when detached from dashboard
* ImageMetadata doesn't show metadata
* typo on GLib call, used by an addon only
* Fix error setting gramplet tab label
* Check for active person in session log gramplet
* Spurious spaces in CLI List Family Trees, tab delimited output.
Print statements changed to assemble the whole line before output.
* Gtk3 warning and custom undoableentry widget, see bugzilla_id 644927
* Warnings: deprecated Gtk properties and errors loading theme icon.
Fix: database manager dialog is inconsistent for older gtk+3 versions.
Warnings: deprecated Gtk properties and errors loading theme icon.
Fix: Error loading theme icon 'gtk-apply'
* gramps fails to start with gtk+-3.13.3
* Places in data.gramps are not in the new Place hierarchy
* Upgrade the version of some dependencies for Mac OS and Windows OS.
* Keywords entry in gramps.desktop does not work
* 'Available Gramps Updates for Addons' window not on top
* Some text not translatable in context menu fancharts
* Fix for Unit test
* date inflections in _datehandler.py, update for Ukrainian, Russian, Croatian
* Better support for Serbian and Turkish locales
* New translation: Icelandic
* Re-enable Turkish support after a major review. Thank you Uğur.
* Updated translations: cs, de, eo, fi, fr, hr, hu, it, nb, nn, ru, sk, sr, sv, uk, zh_CN
2014-10-24
Version 4.1.1, "MachineThatGoes...Ping!", a maintenance release.
* Fix custom place types in the place editor
* Allow place type combobox to receive focus.
* Store custom place types in the metadata table
* Fix place type for places without a main location
* Fix bug adding parent places to a new place
* Prevent user creating a cycle in the place hierarchy
* Avoid infinite loop when place cycle encountered
* Prevent creation of a place cycle when merging
* Fix error when no place is selected
* Check that a place has been selected when saving.
* Use the standard place selection widget to be consistent.
* Add a new Top Level place through the Place Reference Editor
* Fix backlinks code in place report
* Backlinks for places can now also be places as well as events.
* Fix check and repair tool for empty placerefs
* Update location utilities to work with proxies
* Place report does not run
* Update place details gramplet
* Locations are now displayed in a new separate gramplet.
* Add check for empty handle in gramplets
* Check DB lock on the recent opened trees list
* Sidebarfilter gramplet does not fit well into People, Events or Media views
* Fix new event default type considering existing events with *default* role
* Rebuild secondary indexes after database upgrade
* Importing gedcom files containing multibyte UTF-8 characters fails
* Ahnentafel Report did not use Christening Date if no Birth Date
* [Narweb:] Missing webpage for media under some circumstances
* Fix narrated web report with gendex option enabled
* Tweak to "default" CSS choice for the narrated web report
* Invalid link for Merge citation Help button
* Fix 'todo' gramplet
* Fix path when using drag & drop to add media
* Limit the number of generations displayed in the ancestor gramplet
* Export of a subset of the tree failed
* Fix issues in python3, and bytes-string mismatch with ICU
* Fix url/uri handling with non-ascii characters under linux and mac
* Fix name format on graphical reports
* Fix name format on textual reports
* Better GUI support for embeded custom attributes list on media object
* Better keys for search under linux shells (.desktop file)
* 'Unknown' person in detailed ancestor report can not be translated
* Translations don't show in many labels
* Ensure python text domain gets the right encoding.
* Translate some punctuation marks
* Various fixes around Geography and osmgpsmap
* Allow gramplets to be displayed in the dashboard only
* Update FSF address
* Add Arabic-script, Islamic-date, Thai script, Married Name and more dates examples
* Fix on czech date handler for calculated and estimated dates
* Enhance Serbian date handler to handle Cyrillic dates
* Simplify Canadian Ash Wednesday holiday
* Re-enable Esperanto support (for non-Windows OS only) after a large review
* New translation: Serbian
* Various fixes in German and Czech
* Updated translations: ar, cs, de, fi, fr, it, sv
2014-06-15
Version 4.1.0, the "Name go in book", new major release.
* GEP 006: Better Place handling
* New Tags support on Event, Place, Repository, Source, and Citation
* Source/Citation Data becomes Attributes
* Add optional support for checksum on Media object
* New place hierarchies model
* By default, you can choose navigator modes with a drop down.
* New Place editor
* Enhanced MediaReference Editor
* Some debug tools move to new gramplets
* Full Python 3 support
* New functions and widgets related to Place and Media selections
* Enhancements on to_struct()
* New methods on Date handlers
* Better support on translation for inflection rules
2014-05-22
Version 4.0.4, "Not the comfy chair", a maintenance release.
* Upgrade to db version 17 fails in Python 3 due to use of iteritems
@@ -174,8 +360,8 @@ Version 3.4.3 of Gramps! "Whenever life gets you down, Mrs. Brown", a maintenanc
* GEDCOM Repositories not imported correctly from FTM for Windows and Heredis.
* Fixes to a number of errors in filtering notes.
* Fix some errors in determining whether someone is alive (e.g. for filtering out alive people).
* Make availability of GraphViz settings depend on output format
* Improve the descriptions and tooltip for GraphViz aspect ratio option
* Make availability of Graphviz settings depend on output format
* Improve the descriptions and tooltip for Graphviz aspect ratio option
* Fixed update problems with citation bottombar gramplet (bug #6336)
* Fixed Open Document Text output in Book report (bug #6457)
* A number of changes to Narrative Web:
-93
View File
@@ -1,93 +0,0 @@
Please read the COPYING file first.
Please read the INSTALL file if you intend to build from source.
Requirements
--------------------------------
The following packages *MUST* be installed in order for Gramps to work:
Python 3.2 or greater
GTK 3.10 or greater
pygobject 3.3.2 or greater
cairo, pango, pangocairo with introspection bindings (the gi packages)
librsvg2 (svg icon view)
xdg-utils
bsddb3
The following package is needed for full translation of the interface
to your language:
language-pack-gnome-xx
Translation of GTK elements to your language, with
xx your language code; e.g. for Dutch you need
language-pack-gnome-nl. The translation of the
Gramps strings is included with the gramps source.
The following packages are *STRONGLY RECOMMENDED* to be installed:
osmgpsmap Used to show maps in the geography view.
It may be osmgpsmap, osm-gps-map, or python-osmgpsmap,
but the Python bindings for this must also be present.
Without this the GeoView will not be active, see
http://gramps-project.org/wiki/index.php?title=Gramps_4.1_Wiki_Manual_-_Main_Window#Geography_Category
GraphViz Enable creation of graphs using GraphViz engine.
Without this, three reports cannot be run.
Obtain it from: http://www.graphviz.org
PyICU Improves localised sorting in Gramps. In particular, this
applies to sorting in the various views and in the
Narrative Web output. It is particularly helpful for
non-Latin characters, for non-English locales and on MS
Windows and Mac OS X platforms. If it is not available,
sorting is done through built-in libraries. PyICU is
fairly widely available through the package managers of
distributions. See http://pyicu.osafoundation.org/
(These are Python bindings for the ICU package.)
The following packages are optional
gtkspell Enable spell checking in the notes. Gtkspell depends on
enchant. A version of gtkspell with gobject introspection
is needed, so minimally version 3.0.0
rcs The GNU Revision Control System (RCS) can be used to manage
multiple revisions of your family trees. See info at
http://www.gramps-project.org/wiki/index.php?title=Gramps_4.1_Wiki_Manual_-_Manage_Family_Trees#Archiving_a_Family_Tree
Only rcs is needed, NO python bindings are required
PIL Python Image Library is needed to crop
images and also to convert non-JPG images to
JPG so as to include them in LaTeX output.
(For Python3 a different source may be needed,
python-imaging or python-pillow or python3-pillow)
GExiv2 Enables Gramps to manage Exif metadata embedded in your
media. Gramps needs version 0.5 or greater.
See http://www.gramps-project.org/wiki/index.php?title=GEPS_029:_GTK3-GObject_introspection_Conversion#GExiv2_for_Image_metadata
ttf-freefont More font support in the reports
gir-webkit Required for the (user-downloadable) HtmlView plugin
goocanvas2 Required for the (user-downloadable) GraphView plugin
No longer needed in 4.1:
?
No longer needed in 4.0:
pygoocanvas, pygtk, pyexiv2
No longer needed in 3.3:
python-enchant Enchant
No longer needed in 3.2:
python glade bindings
No longer needed in 3.1:
yelp Gnome help browser. No offline help is shipped see Gramps website for User manual
Documentation
---------------------------------
The User Manual is maintained on the Gramps website,
http://www.gramps-project.org/wiki/index.php?title=User_manual
--------------------------------
The Gramps Project
http://gramps-project.org
+140
View File
@@ -0,0 +1,140 @@
The Gramps Project ( https://gramps-project.org ) [![Build Status](https://travis-ci.org/gramps-project/gramps.svg?branch=master)](https://travis-ci.org/gramps-project/gramps)[![codecov.io](https://codecov.io/github/gramps-project/gramps/coverage.svg?branch=master)](https://codecov.io/github/gramps-project/gramps?branch=master)
===================
We strive to produce a genealogy program that is both intuitive for hobbyists and feature-complete for professional genealogists.
Please read the **COPYING** file first.
Please read the **INSTALL** file if you intend to build from source.
Requirements
============
The following packages **MUST** be installed in order for Gramps to work:
* **Python** 3.2 or greater - The programming language used by Gramps. https://www.python.org/
* **GTK** 3.10 or greater - A cross-platform widget toolkit for creating graphical user interfaces. http://www.gtk.org/
* **pygobject** 3.12 or greater - Python Bindings for GLib/GObject/GIO/GTK+ https://wiki.gnome.org/Projects/PyGObject
The following three packages with GObject Introspection bindings (the gi packages)
* **cairo** - a 2D graphics library with support for multiple output devices. http://cairographics.org/
* **pango** - a library for laying out and rendering of text, with an emphasis on internationalization. http://www.pango.org/
* **pangocairo** - Allows you to use Pango with Cairo http://www.pango.org/
* **librsvg2** - (SVG icon view) a library to render SVG files using cairo. http://live.gnome.org/LibRsvg
* **xdg-utils** - Desktop integration utilities from freedesktop.org
* **bsddb3** - Python bindings for Oracle Berkeley DB https://pypi.python.org/pypi/bsddb3/
The following package is needed for full translation of the interface
to your language:
* **language-pack-gnome-xx**
Translation of GTK elements to your language, with
xx your language code; e.g. for Dutch you need
language-pack-gnome-nl. The translation of the
Gramps strings is included with the gramps source.
The following packages are **STRONGLY RECOMMENDED** to be installed:
--------------------------------------------------------------------
* **osmgpsmap**
Used to show maps in the geography view.
It may be osmgpsmap, osm-gps-map, or python-osmgpsmap,
but the Python bindings for this must also be present.
Without this the GeoView will not be active, see
https://gramps-project.org/wiki/index.php?title=Gramps_4.2_Wiki_Manual_-_Categories#Geography_Category
* **Graphviz**
Enable creation of graphs using Graphviz engine.
Without this, three reports cannot be run.
Obtain it from: http://www.graphviz.org
* **PyICU**
Improves localised sorting in Gramps. In particular, this
applies to sorting in the various views and in the
Narrative Web output. It is particularly helpful for
non-Latin characters, for non-English locales and on MS
Windows and Mac OS X platforms. If it is not available,
sorting is done through built-in libraries. PyICU is
fairly widely available through the package managers of
distributions. See http://pyicu.osafoundation.org/
(These are Python bindings for the ICU package.
https://pypi.python.org/pypi/PyICU/)
The following packages are optional:
------------------------------------
* **gtkspell**
Enable spell checking in the notes. Gtkspell depends on
enchant. A version of gtkspell with gobject introspection
is needed, so minimally version 3.0.0
* **rcs**
The GNU Revision Control System (RCS) can be used to manage
multiple revisions of your family trees. See info at
https://gramps-project.org/wiki/index.php?title=Gramps_4.2_Wiki_Manual_-_Manage_Family_Trees#Archiving_a_Family_Tree
Only rcs is needed, NO python bindings are required
* **PIL**
Python Image Library is needed to crop
images and also to convert non-JPG images to
JPG so as to include them in LaTeX output.
(For Python3 a different source may be needed,
python-imaging or python-pillow or python3-pillow)
* **GExiv2**
Enables Gramps to manage Exif metadata embedded in your
media. Gramps needs version 0.5 or greater.
See https://www.gramps-project.org/wiki/index.php?title=GEPS_029:_GTK3-GObject_introspection_Conversion#GExiv2_for_Image_metadata
* **ttf-freefont**
More font support in the reports
Optional packages required by Third-party Addons
------------------------------------------------
**Third-party Addons are written by users and developers and unless stated are not officially part of Gramps.**
For more information about Addons see: https://gramps-project.org/wiki/index.php?title=Third-party_Plugins
Prerequistes required for the following Addons to work:
* **Family Sheet** - Requires: PIL (Python Imaging Library) or PILLOW.
( https://gramps-project.org/wiki/index.php?title=Family_Sheet )
* **Graph View** - Requires: PyGoocanvas and Goocanvas.
( https://gramps-project.org/wiki/index.php?title=Graph_View )
* **PedigreeChart** - Can optionally use - numpy if installed
( https://gramps-project.org/wiki/index.php?title=PedigreeChart )
No longer needed:
-----------------
* Since Gramps 4.2:
**gir-webkit**
* Since Gramps 4.0:
**pygoocanvas, pygtk, pyexiv2**
* Since Gramps 3.3:
**python-enchant Enchant**
* Since Gramps 3.2:
**python glade bindings**
* Since Gramps 3.1:
**yelp** - Gnome help browser. No offline help is shipped see Gramps website for User manual
Documentation
-------------
The User Manual is maintained on the Gramps website:
* https://www.gramps-project.org/wiki/index.php?title=User_manual
+23
View File
@@ -0,0 +1,23 @@
_gramps()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="--action --config --create --databases --debug --export --format --help --import --open --options --quiet --remove --show --usage --version --yes -? -C -L -O -a -b -c -d -e -f -i -l -p -q -r -s -t -u -v -y"
if [[ ${cur} == -* ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
elif [[ ${cur} == --open ]] ; then
local IFS=$'\n'
local names=($( gramps -l | grep \" | cut -d\ -f4- ))
COMPREPLY=( $(compgen --W "${names[*]}" -- ${cur}) )
return 0
else
local IFS=$'\n'
local names=($( gramps -l | grep \" | cut -d\ -f4- ))
COMPREPLY=( $(compgen -W "${names[*]}" -- ${cur}) )
return 0
fi
}
complete -F _gramps gramps
+31 -17
View File
@@ -1,18 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<application>
<id type="desktop">gramps.desktop</id>
<licence>CC0</licence>
<description>
<_p>Gramps is a genealogy program that is both intuitive for hobbyists and feature-complete for professional genealogists.</_p>
<_p>It gives you the ability to record the many details of the life of an individual as well as the complex relationships between various people, places and events.</_p>
<_p>All of your research is kept organized, searchable and as precise as you need it to be.</_p>
</description>
<url type="homepage">http://gramps-project.org/</url>
<screenshots>
<screenshot width="1226" height="740">http://www.gramps-project.org/wiki/images/5/5f/AppData1.png</screenshot>
<screenshot width="1226" height="740">http://www.gramps-project.org/wiki/images/6/68/AppData2.png</screenshot>
<screenshot type="default" width="1226" height="740">http://www.gramps-project.org/wiki/images/e/e9/AppData3.png</screenshot>
<screenshot width="1226" height="740">http://www.gramps-project.org/wiki/images/6/68/AppData4.png</screenshot>
<screenshot width="1226" height="740">http://www.gramps-project.org/wiki/images/5/50/AppData5.png</screenshot>
</screenshots>
</application>
<component type="desktop">
<id>gramps.desktop</id>
<metadata_license>CC0</metadata_license>
<name>Gramps</name>
<summary>Genealogical research program</summary>
<description>
<_p>Gramps is a genealogy program that is both intuitive for hobbyists and feature-complete for professional genealogists.</_p>
<_p>It gives you the ability to record the many details of the life of an individual as well as the complex relationships between various people, places and events.</_p>
<_p>All of your research is kept organized, searchable and as precise as you need it to be.</_p>
</description>
<url type="homepage">https://gramps-project.org/</url>
<url type="bugtracker">https://gramps-project.org/bugs/</url>
<url type="help">https://gramps-project.org/wiki/index.php?title=Main_page</url>
<project_license>GPL-2.0+</project_license>
<developer_name>Gramps Development Team</developer_name>
<screenshots>
<screenshot width="1226" height="740">http://www.gramps-project.org/wiki/images/5/5f/AppData1.png</screenshot>
<screenshot width="1226" height="740">http://www.gramps-project.org/wiki/images/6/68/AppData2.png</screenshot>
<screenshot type="default" width="1226" height="740">http://www.gramps-project.org/wiki/images/e/e9/AppData3.png</screenshot>
<screenshot width="1226" height="740">http://www.gramps-project.org/wiki/images/6/68/AppData4.png</screenshot>
<screenshot width="1226" height="740">http://www.gramps-project.org/wiki/images/5/50/AppData5.png</screenshot>
</screenshots>
<provides>
<binary>gramps</binary>
</provides>
</component>
+19 -10
View File
@@ -25,15 +25,15 @@
-->
<!--
This is the Document Type Definition file for v1.6.0
This is the Document Type Definition file for v1.7.1
of the GRAMPS XML genealogy data format.
Please use the following formal public identifier to identify it:
"-//GRAMPS//DTD GRAMPS XML V1.6.0//EN"
"-//GRAMPS//DTD GRAMPS XML V1.7.1//EN"
For example:
<!DOCTYPE database PUBLIC "-//GRAMPS//DTD GRAMPS XML V1.6.0//EN"
"http://gramps-project.org/xml/1.6.0/grampsxml.dtd"
<!DOCTYPE database PUBLIC "-//GRAMPS//DTD GRAMPS XML V1.7.1//EN"
"http://gramps-project.org/xml/1.7.1/grampsxml.dtd"
[...]>
-->
@@ -62,7 +62,7 @@ DATABASE
<!ELEMENT database (header, name-formats?, tags?, events?, people?, families?,
citations?, sources?, places?, objects?, repositories?,
notes?, bookmarks?, namemaps?)>
<!ATTLIST database xmlns CDATA #FIXED "http://gramps-project.org/xml/1.6.0/">
<!ATTLIST database xmlns CDATA #FIXED "http://gramps-project.org/xml/1.7.1/">
<!-- ************************************************************
@@ -122,6 +122,7 @@ GENDER has values of M, F, or U.
<!ELEMENT name (first?, call?, surname*, suffix?, title?, nick?, familynick?, group?,
(daterange|datespan|dateval|datestr)?, noteref*, citationref*)>
<!-- (Unknown|Also Know As|Birth Name|Married Name|Other Name) -->
<!ATTLIST name
alt (0|1) #IMPLIED
type CDATA #IMPLIED
@@ -138,6 +139,8 @@ GENDER has values of M, F, or U.
<!ELEMENT familynick (#PCDATA)>
<!ELEMENT group (#PCDATA)>
<!ELEMENT surname (#PCDATA)>
<!-- (Unknown|Inherited|Given|Taken|Patronymic|Matronymic|Feudal|
Pseudonym|Patrilineal|Matrilineal|Occupation|Location) -->
<!ATTLIST surname
prefix CDATA #IMPLIED
prim (1|0) #IMPLIED
@@ -196,12 +199,13 @@ FAMILY
<!ELEMENT mother EMPTY>
<!ATTLIST mother hlink IDREF #REQUIRED>
<!-- (None|Birth|Adopted|Stepchild|Sponsored|Foster|Other|Unknown) -->
<!ELEMENT childref (citationref*,noteref*)>
<!ATTLIST childref
hlink IDREF #REQUIRED
priv (0|1) #IMPLIED
mrel (None|Birth|Adopted|Stepchild|Sponsored|Foster|Other|Unknown) #IMPLIED
frel (None|Birth|Adopted|Stepchild|Sponsored|Foster|Other|Unknown) #IMPLIED
mrel CDATA #IMPLIED
frel CDATA #IMPLIED
>
<!ELEMENT type (#PCDATA)>
@@ -248,20 +252,25 @@ PLACES
<!ELEMENT places (placeobj)*>
<!ELEMENT placeobj (ptitle?, code?, alt_name*, coord?, placeref*, location*,
<!ELEMENT placeobj (ptitle?, pname+, code?, coord?, placeref*, location*,
objref*, url*, noteref*, citationref*, tagref*)>
<!ATTLIST placeobj
id CDATA #IMPLIED
handle ID #REQUIRED
priv (0|1) #IMPLIED
change CDATA #REQUIRED
name CDATA #REQUIRED
type CDATA #REQUIRED
>
<!ELEMENT pname (daterange|datespan|dateval|datestr)?>
<!ATTLIST pname
lang CDATA #IMPLIED
value CDATA #REQUIRED
>
<!ELEMENT ptitle (#PCDATA)>
<!ELEMENT code (#PCDATA)>
<!ELEMENT alt_name (#PCDATA)>
<!ELEMENT coord EMPTY>
<!ATTLIST coord
+14 -35
View File
@@ -25,13 +25,13 @@
-->
<!--
This is the RELAX NG schema for the Gramps XML genealogy data format.
This is the RELAX NG schema for the GRAMPS XML genealogy data format.
-->
<grammar
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
ns="http://gramps-project.org/xml/1.6.0/"
ns="http://gramps-project.org/xml/1.7.1/"
xmlns="http://relaxng.org/ns/structure/1.0">
<start><element name="database">
@@ -210,16 +210,7 @@
</define>
<define name="child-rel">
<choice>
<value>Birth</value>
<value>Adopted</value>
<value>Stepchild</value>
<value>Sponsored</value>
<value>Foster</value>
<value>None</value>
<value>Other</value>
<value>Unknown</value>
</choice>
<text/>
</define>
<define name="name-content">
@@ -230,13 +221,7 @@
<optional><attribute name="priv">
<ref name="priv-content"/>
</attribute></optional>
<optional><attribute name="type"><choice>
<value>Unknown</value>
<value>Also Known As</value>
<value>Birth Name</value>
<value>Married Name</value>
<value>Other Name</value>
</choice></attribute></optional>
<optional><attribute name="type"><text/></attribute></optional>
<optional><attribute name="sort"><text/></attribute></optional>
<optional><attribute name="display"><text/></attribute></optional>
<optional><element name="first"><text/></element></optional>
@@ -265,20 +250,7 @@
<value>1</value>
<value>0</value>
</choice></attribute></optional>
<optional><attribute name="derivation"><choice>
<value>Unknown</value>
<value>Inherited</value>
<value>Given</value>
<value>Taken</value>
<value>Patronymic</value>
<value>Matronymic</value>
<value>Feudal</value>
<value>Pseudonym</value>
<value>Patrilineal</value>
<value>Matrilineal</value>
<value>Occupation</value>
<value>Location</value>
</choice></attribute></optional>
<optional><attribute name="derivation"><text/></attribute></optional>
<optional><attribute name="connector"><text/></attribute></optional>
</define>
@@ -479,11 +451,12 @@
<define name="place-content">
<ref name="primary-object"/>
<attribute name="name"><text/></attribute>
<attribute name="type"><text/></attribute>
<optional><element name="ptitle"><text/></element></optional>
<oneOrMore><element name="pname">
<ref name="placename-content"/>
</element></oneOrMore>
<optional><element name="code"><text/></element></optional>
<zeroOrMore><element name="alt_name"><text/></element></zeroOrMore>
<optional><element name="coord">
<attribute name="long"><text/></attribute>
<attribute name="lat"><text/></attribute>
@@ -772,6 +745,12 @@
<text/>
</define>
<define name="placename-content">
<attribute name="value"><text/></attribute>
<optional><attribute name="lang"><text/></attribute></optional>
<optional><ref name="date-content"/></optional>
</define>
<define name="placeref-content">
<attribute name="hlink"><data type="IDREF"/></attribute>
<optional><ref name="date-content"/></optional>
@@ -48,7 +48,7 @@
<date name="Възнесение господне" value="2010/5/13" type="religious" />
<date name="Възнесение господне" value="2011/6/2" type="religious" />
<date name="Възнесение господне" value="2012/5/24" type="religious" />
</country>
</country>
<country _name="Canada">
<date name="New Year's Day" value="*/1/1" type="national" />
<date name="Groundhog Day" value="*/2/2" type="secular" />
@@ -117,14 +117,14 @@
<date name="Día de la Raza" value="*/10/12" type="national" />
<date name="Todos los Santos" value="*/11/1" type="religious" />
<date name="Inmaculada Concepción" value="*/12/8" type="religious" />
<date name="Navidad" value="*/12/25" type="national" />
<date name="Navidad" value="*/12/25" type="national" />
</country>
<country _name="China">
<date name="Chinese New Year" value="2006/1/29" type="national" />
</country>
<country _name="Croatia">
<date name="Nova godina" value="*/1/1" type="national" />
<date name="Sveta tri kralja" value="*/1/6" type="national" />
<date name="Sveta tri kralja" value="*/1/6" type="national" />
<date name="Uskrs" value="> easter(y)" type="national" />
<date name="Uskršnji ponedjeljak" value="> easter(y)" offset="1" type="national" />
<date name="Dan rada" value="*/5/1" type="national" />
@@ -404,7 +404,7 @@
<date name="Ash Wednesday" value="> easter(y)" type="religious" offset="-46" />
<date name="Mardi Gras" value="> easter(y)" type="religious" offset="-47" />
<date name="Daylight Saving begins" value="> dst(y)[0]" type="informational" />
<date name="Income Taxes due" value="*/4/15" type="national" if="date.weekday().__cmp__(4)-1" />
<date name="Income Taxes due" value="*/4/15" type="national" if="cmp(date.weekday(),4)-1"/>
<date name="Income Taxes due" value="*/4/16" type="national" if="date.weekday() == 0" />
<date name="Income Taxes due" value="*/4/17" type="national" if="date.weekday() == 0" />
<date name="Daylight Saving ends" value="> dst(y)[1]" type="informational" />
@@ -481,7 +481,7 @@
<date value="*/dec/26" type="national" name="Boxing Day"/>
<date value="*/dec/25" type="national" offset="+2" name="Christmas Day Holiday" if="dow(y, m, d) > 5"/>
<date value="*/dec/26" type="national" offset="+2" name="Boxing Day Holiday" if="dow(y, m, d) > 5"/>
</country>
</country>
<country _name="Ukraine">
<date value="*/1/1" type="national" name="Новий Рік"/>
<date value="*/1/6" type="religious" name="Святий Вечір"/>
File diff suppressed because one or more lines are too long
-9266
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-859
View File
@@ -1,859 +0,0 @@
/*!
* jQuery FlexBox $Version: 0.9.6 $
*
* Copyright (c) 2008-2010 Noah Heldman and Fairway Technologies (http://www.fairwaytech.com/flexbox)
* Licensed under Ms-PL (http://www.codeplex.com/flexbox/license)
*
* $Date: 2010-11-24 01:02:00 PM $
* $Rev: 0.9.6.1 $
*/
(function($) {
$.flexbox = function(div, o) {
// TODO: in straight type-ahead mode (showResults: false), if noMatchingResults, dropdown appears after new match
// TODO: consider having options.mode (select, which replaces html select; combobox; suggest; others?)
// TODO: on resize (at least when wrapping within a table), the arrow is pushed down to the next line
// TODO: check for boundary/value problems (such as minChars of -1) and alert them
// TODO: add options for advanced paging template
// TODO: general cleanup and refactoring, commenting
// TODO: detailed Exception handling, logging
// TODO: FF2, up arrow from bottom has erratic scroll behavior (if multiple flexboxes on page)
// TODO: FF2 (and maybe IE7): if maxVisibleRows == number of returned rows, height is a bit off (maybe set to auto?)
// TODO: escape key only works from input box (this might be okay)
// TODO: make .getJSON parameters (object and callback function) configurable (e.g. when calling yahoo image search)
// TODO: escape key reverts to previous value (FF only?) (is this a good thing?)
// TEST: highlightMatches uses the case of whatever you typed in to replace the match string, which can look funny
// TEST: handle pageDown and pageUp keys when scrolling through results
// TEST: allow client-side paging (return all data initially, set paging:{pageSize:#}, and ensure maxCacheBytes is > 0)
// TEST: accept json object as first parameter to flexbox instead of page source, and have it work like a combobox
// TEST: implement no results template
// TEST: implement noResultsText and class
// TEST: watermark color should be configurable (and so should default input color)
// TEST: exception handling and alerts for common mistakes
// TEST: first example should use defaults ONLY
// TEST: add property initialValue, so you can set it when the flexbox loads
// TEST: handle hidden input value for form submissions
// TEST: how can we allow programmatically setting the field value (and therefore hidden value). add jquery function?
// TEST: use pageSize parameter as threshold to switch from no paging to paging based on results
// TEST: if you type in an input value that matches the html, it might display html code (try typing "class" in the input box)
// TEST: don't require all paging subprops (let default override)
// TEST: when tabbing from one ffb to another, the previous ffb results flash...
// TEST: IE7: when two non-paging ffbs right after each other, with only a clear-both div between them, the bottom ffb jumps down when selecting a value, then jumps back up on mouseover
// TEST: FF2, make sure we scroll to top before showing results (maxVisibleRows only)
// TEST: if maxVisibleRows is hiding the value the user types in to the input, scroll to that value (is this even possible?)
// TEST: make sure caching supports multiple ffbs uniquely
// TEST: when entering a number in the paging input box, the results are displayed twice
var timeout = false, // hold timeout ID for suggestion results to appear
cache = [], // simple array with cacheData key values, MRU is the first element
cacheData = [], // associative array holding actual cached data
cacheSize = 0, // size of cache in bytes (cache up to o.maxCacheBytes bytes)
delim = '\u25CA', // use an obscure unicode character (lozenge) as the cache key delimiter
scrolling = false,
pageSize = o.paging && o.paging.pageSize ? o.paging.pageSize : 0,
retrievingRemoteData = false,
$div = $(div).css('position', 'relative').css('z-index', 0);
// The hiddenField MUST be appended to the div before the input, or IE7 does not shift the dropdown below the input field (it overlaps)
var $hdn = $('<input type="hidden"/>')
.attr('id', $div.attr('id') + '_hidden')
.attr('name', $div.attr('id'))
.val(o.initialId)
.appendTo($div);
var $input = $('<input/>')
.attr('id', $div.attr('id') + '_input')
.attr('autocomplete', 'off')
.addClass(o.inputClass)
.css('width', o.width + 'px')
.appendTo($div)
.click(function(e) {
if (o.watermark !== '' && this.value === o.watermark)
this.value = '';
else
this.select();
})
.focus(function(e) {
$(this).removeClass('watermark');
})
.blur(function(e) {
if (this.value === '') $hdn.val('');
setTimeout(function() { if (!$input.data('active')) hideResults(); }, 200);
})
.keydown(processKeyDown);
if (o.initialValue !== '')
$input.val(o.initialValue).removeClass('watermark');
else
$input.val(o.watermark).addClass('watermark');
var arrowWidth = 0;
if (o.showArrow && o.showResults) {
var arrowClick = function() {
if ($ctr.is(':visible')) {
hideResults();
}
else {
$input.focus();
if (o.watermark !== '' && $input.val() === o.watermark)
$input.val('');
else
$input.select();
if (timeout)
clearTimeout(timeout);
timeout = setTimeout(function() { flexbox(1, true, o.arrowQuery); }, o.queryDelay);
}
};
var $arrow = $('<span></span>')
.attr('id', $div.attr('id') + '_arrow')
.addClass(o.arrowClass)
.addClass('out')
.hover(function() {
$(this).removeClass('out').addClass('over');
}, function() {
$(this).removeClass('over').addClass('out');
})
.mousedown(function() {
$(this).removeClass('over').addClass('active');
})
.mouseup(function() {
$(this).removeClass('active').addClass('over');
})
.click(arrowClick)
.appendTo($div);
arrowWidth = $arrow.width();
$input.css('width', (o.width - arrowWidth) + 'px');
}
if (!o.allowInput) { o.selectFirstMatch = false; $input.click(arrowClick); } // simulate <select> behavior
// Handle presence of CSS Universal Selector (*) that defines padding by verifying what the browser thinks the outerHeight is.
// In FF, the outerHeight() will not pick up the correct input field padding
var inputPad = $input.outerHeight() - $input.height() - 2;
var inputWidth = $input.outerWidth() - 2;
var top = $input.outerHeight();
if (inputPad === 0) {
inputWidth += 4;
top += 4;
}
else if (inputPad !== 4) {
inputWidth += inputPad;
top += inputPad;
}
var $ctr = $('<div></div>')
.attr('id', $div.attr('id') + '_ctr')
.css('width', inputWidth + arrowWidth)
.css('top', top)
.css('left', 0)
.addClass(o.containerClass)
.appendTo($div)
.mousedown(function(e) {
$input.data('active', true);
})
.hide();
var $content = $('<div></div>')
.addClass(o.contentClass)
.appendTo($ctr)
.scroll(function() {
scrolling = true;
});
var $paging = $('<div></div>').appendTo($ctr);
$div.css('height', $input.outerHeight());
function processKeyDown(e) {
// handle modifiers
var mod = 0;
if (typeof (e.ctrlKey) !== 'undefined') {
if (e.ctrlKey) mod |= 1;
if (e.shiftKey) mod |= 2;
} else {
if (e.modifiers & Event.CONTROL_MASK) mod |= 1;
if (e.modifiers & Event.SHIFT_MASK) mod |= 2;
}
// if the keyCode is one of the modifiers, bail out (we'll catch it on the next keypress)
if (/16$|17$/.test(e.keyCode)) return; // 16 = Shift, 17 = Ctrl
var tab = e.keyCode === 9, esc = e.keyCode === 27;
var tabWithModifiers = e.keyCode === 9 && mod > 0;
var backspace = e.keyCode === 8; // we will end up extending the delay time for backspaces...
// tab is a special case, since we want to bubble events...
if (tab) if (getCurr()) selectCurr();
// handling up/down/escape/right arrow/left arrow requires results to be visible
// handling enter requires that AND a result to be selected
if ((/27$|38$|33$|34$/.test(e.keyCode) && $ctr.is(':visible')) ||
(/13$|40$/.test(e.keyCode)) || !o.allowInput) {
if (e.preventDefault) e.preventDefault();
if (e.stopPropagation) e.stopPropagation();
e.cancelBubble = true;
e.returnValue = false;
switch (e.keyCode) {
case 38: // up arrow
prevResult();
break;
case 40: // down arrow
if ($ctr.is(':visible')) nextResult();
else flexboxDelay(true);
break;
case 13: // enter
if (getCurr()) selectCurr();
else flexboxDelay(true);
break;
case 27: // escape
hideResults();
break;
case 34: // page down
if (!retrievingRemoteData) {
if (o.paging) $('#' + $div.attr('id') + 'n').click();
else nextPage();
}
break;
case 33: // page up
if (!retrievingRemoteData) {
if (o.paging) $('#' + $div.attr('id') + 'p').click();
else prevPage();
}
break;
default:
if (!o.allowInput) { return; }
}
} else if (!esc && !tab && !tabWithModifiers) { // skip esc and tab key and any modifiers
flexboxDelay(false, backspace);
}
}
function flexboxDelay(simulateArrowClick, increaseDelay) {
if (timeout) clearTimeout(timeout);
var delay = increaseDelay ? o.queryDelay * 5 : o.queryDelay;
timeout = setTimeout(function() { flexbox(1, simulateArrowClick, ''); }, delay);
}
function flexbox(p, arrowOrPagingClicked, prevQuery) {
if (arrowOrPagingClicked) prevQuery = '';
var q = prevQuery && prevQuery.length > 0 ? prevQuery : $.trim($input.val());
if (q.length >= o.minChars || arrowOrPagingClicked) {
// If we are getting data from the server, set the height of the content box so it doesn't shrink when navigating between pages, due to the $content.html('') below...
if ($content.outerHeight() > 0)
$content.css('height', $content.outerHeight());
$content.html('').attr('scrollTop', 0);
var cached = checkCache(q, p);
if (cached) {
$content.css('height', 'auto');
displayItems(cached.data, q);
showPaging(p, cached.t);
}
else {
var params = { q: q, p: p, s: pageSize, contentType: 'application/json; charset=utf-8' };
var callback = function(data, overrideQuery) {
if (overrideQuery === true) q = overrideQuery; // must compare to boolean because by default, the string value "success" is passed when the jQuery $.getJSON method's callback is called
var totalResults = parseInt(data[o.totalProperty]);
// Handle client-side paging, if any paging configuration options were specified
if (isNaN(totalResults) && o.paging) {
if (o.maxCacheBytes <= 0) alert('The "maxCacheBytes" configuration option must be greater\nthan zero when implementing client-side paging.');
totalResults = data[o.resultsProperty].length;
var pages = totalResults / pageSize;
if (totalResults % pageSize > 0) pages = parseInt(++pages);
for (var i = 1; i <= pages; i++) {
var pageData = {};
pageData[o.totalProperty] = totalResults;
pageData[o.resultsProperty] = data[o.resultsProperty].splice(0, pageSize);
if (i === 1) totalSize = displayItems(pageData, q);
updateCache(q, i, pageSize, totalResults, pageData, totalSize);
}
}
else {
var totalSize = displayItems(data, q);
updateCache(q, p, pageSize, totalResults, data, totalSize);
}
showPaging(p, totalResults);
$content.css('height', 'auto');
retrievingRemoteData = false;
};
if (typeof (o.source) === 'object') {
if (o.allowInput) callback(filter(o.source, params));
else callback(o.source);
}
else {
retrievingRemoteData = true;
if (o.method.toUpperCase() == 'POST') $.post(o.source, params, callback, 'json');
else $.getJSON(o.source, params, callback);
}
}
} else
hideResults();
}
function filter(data, params) {
var filtered = {};
filtered[o.resultsProperty] = [];
filtered[o.totalProperty] = 0;
var index = 0;
for (var i=0; i < data[o.resultsProperty].length; i++) {
var indexOfMatch = data[o.resultsProperty][i][o.displayValue].toLowerCase().indexOf(params.q.toLowerCase());
if ((o.matchAny && indexOfMatch !== -1) || (!o.matchAny && indexOfMatch === 0)) {
filtered[o.resultsProperty][index++] = data[o.resultsProperty][i];
filtered[o.totalProperty] += 1;
}
}
if (o.paging) {
var start = (params.p - 1) * params.s;
var howMany = (start + params.s) > filtered[o.totalProperty] ? filtered[o.totalProperty] - start : params.s;
filtered[o.resultsProperty] = filtered[o.resultsProperty].splice(start, howMany);
}
return filtered;
}
function showPaging(p, totalResults) {
$paging.html('').removeClass(o.paging.cssClass); // clear out for threshold scenarios
if (o.showResults && o.paging && totalResults > pageSize) {
var pages = totalResults / pageSize;
if (totalResults % pageSize > 0) pages = parseInt(++pages);
outputPagingLinks(pages, p, totalResults);
}
}
function handleKeyPress(e, page, totalPages) {
if (/^13$|^39$|^37$/.test(e.keyCode)) {
if (e.preventDefault)
e.preventDefault();
if (e.stopPropagation)
e.stopPropagation();
e.cancelBubble = true;
e.returnValue = false;
switch (e.keyCode) {
case 13: // Enter
if (/^\d+$/.test(page) && page > 0 && page <= totalPages)
flexbox(page, true);
else
alert('Please enter a page number between 1 and ' + totalPages);
// TODO: make this alert a function call, and a customizable parameter
break;
case 39: // right arrow
$('#' + $div.attr('id') + 'n').click();
break;
case 37: // left arrow
$('#' + $div.attr('id') + 'p').click();
break;
}
}
}
function handlePagingClick(e) {
flexbox(parseInt($(this).attr('page')), true, $input.attr('pq')); // pq == previous query
return false;
}
function outputPagingLinks(totalPages, currentPage, totalResults) {
// TODO: make these configurable images
var first = '&lt;&lt;',
prev = '&lt;',
next = '&gt;',
last = '&gt;&gt;',
more = '...';
$paging.addClass(o.paging.cssClass);
// set up our base page link element
var $link = $('<a/>')
.attr('href', '#')
.addClass('page')
.click(handlePagingClick),
$span = $('<span></span>').addClass('page'),
divId = $div.attr('id');
// show first page
if (currentPage > 1) {
$link.clone(true).attr('id', divId + 'f').attr('page', 1).html(first).appendTo($paging);
$link.clone(true).attr('id', divId + 'p').attr('page', currentPage - 1).html(prev).appendTo($paging);
}
else {
$span.clone(true).html(first).appendTo($paging);
$span.clone(true).html(prev).appendTo($paging);
}
if (o.paging.style === 'links') {
var maxPageLinks = o.paging.maxPageLinks;
// show page numbers
if (totalPages <= maxPageLinks) {
for (var i = 1; i <= totalPages; i++) {
if (i === currentPage) {
$span.clone(true).html(currentPage).appendTo($paging);
}
else {
$link.clone(true).attr('page', i).html(i).appendTo($paging);
}
}
}
else {
if ((currentPage + parseInt(maxPageLinks / 2)) > totalPages) {
startPage = totalPages - maxPageLinks + 1;
}
else {
startPage = currentPage - parseInt(maxPageLinks / 2);
}
if (startPage > 1) {
$link.clone(true).attr('page', startPage - 1).html(more).appendTo($paging);
}
else {
startPage = 1;
}
for (var i = startPage; i < startPage + maxPageLinks; i++) {
if (i === currentPage) {
$span.clone(true).html(i).appendTo($paging);
}
else {
$link.clone(true).attr('page', i).html(i).appendTo($paging);
}
}
if (totalPages > (startPage + maxPageLinks)) {
$link.clone(true).attr('page', i).html(more).appendTo($paging);
}
}
}
else if (o.paging.style === 'input') {
var $pagingBox = $('<input/>')
.addClass('box')
.click(function(e) {
this.select();
})
.keypress(function(e) {
return handleKeyPress(e, this.value, totalPages);
})
.val(currentPage)
.appendTo($paging);
}
if (currentPage < totalPages) {
$link.clone(true).attr('id', divId + 'n').attr('page', +currentPage + 1).html(next).appendTo($paging);
$link.clone(true).attr('id', divId + 'l').attr('page', totalPages).html(last).appendTo($paging);
}
else {
$span.clone(true).html(next).appendTo($paging);
$span.clone(true).html(last).appendTo($paging);
}
var startingResult = (currentPage - 1) * pageSize + 1;
var endingResult = (startingResult > (totalResults - pageSize)) ? totalResults : startingResult + pageSize - 1;
if (o.paging.showSummary) {
var summaryData = {
"start": startingResult,
"end": endingResult,
"total": totalResults,
"page": currentPage,
"pages": totalPages
};
var html = o.paging.summaryTemplate.applyTemplate(summaryData);
$('<br/>').appendTo($paging);
$('<span></span>')
.addClass(o.paging.summaryClass)
.html(html)
.appendTo($paging);
}
}
function checkCache(q, p) {
var key = q + delim + p; // use null character as delimiter
if (cacheData[key]) {
for (var i = 0; i < cache.length; i++) { // TODO: is it possible to not loop here?
if (cache[i] === key) {
// pull out the matching element (splice), and add it to the beginning of the array (unshift)
cache.unshift(cache.splice(i, 1)[0]);
return cacheData[key];
}
}
}
return false;
}
function updateCache(q, p, s, t, data, size) {
if (o.maxCacheBytes > 0) {
while (cache.length && (cacheSize + size > o.maxCacheBytes)) {
var cached = cache.pop();
cacheSize -= cached.size;
}
var key = q + delim + p; // use null character as delimiter
cacheData[key] = {
q: q,
p: p,
s: s,
t: t,
size: size,
data: data
}; // add the data to the cache at the hash key location
cache.push(key); // add the key to the MRU list
cacheSize += size;
}
}
function displayItems(d, q) {
var totalSize = 0, itemCount = 0;
if (!d)
return;
$hdn.val($input.val());
if (parseInt(d[o.totalProperty]) === 0 && o.noResultsText && o.noResultsText.length > 0) {
$content.addClass(o.noResultsClass).html(o.noResultsText);
$ctr.show();
return;
} else $content.removeClass(o.noResultsClass);
for (var i = 0; i < d[o.resultsProperty].length; i++) {
var data = d[o.resultsProperty][i],
result = o.resultTemplate.applyTemplate(data),
exactMatch = q === result,
selectedMatch = false,
hasHtmlTags = false,
match = data[o.displayValue];
if (!exactMatch && o.highlightMatches && q !== '') {
var pattern = q,
highlightStart = match.toLowerCase().indexOf(q.toLowerCase()),
replaceString = '<span class="' + o.matchClass + '">' + match.substr(highlightStart,q.length) + '</span>';
if (result.match('<(.|\n)*?>')) { // see if the content contains html tags
hasHtmlTags = true;
pattern = '(>)([^<]*?)(' + q + ')((.|\n)*?)(<)'; // TODO: look for a better way
replaceString = '$1$2<span class="' + o.matchClass + '">$3</span>$4$6';
}
result = result.replace(new RegExp(pattern.replace("[", "\\["), o.highlightMatchesRegExModifier), replaceString);
}
// write the value of the first match to the input box, and select the remainder,
// but only if autoCompleteFirstMatch is set, and there are no html tags in the response
if (o.autoCompleteFirstMatch && !hasHtmlTags && i === 0) {
if (q.length > 0 && match.toLowerCase().indexOf(q.toLowerCase()) === 0) {
$input.attr('pq', q); // pq == previous query
$hdn.val(data[o.hiddenValue]);
$input.val(data[o.displayValue]);
selectedMatch = selectRange(q.length, $input.val().length);
}
}
if (!o.showResults) return;
$row = $('<div></div>')
.attr('id', data[o.hiddenValue])
.attr('val', data[o.displayValue])
.addClass('row')
.html(result)
.appendTo($content);
if (exactMatch || (++itemCount == 1 && o.selectFirstMatch) || selectedMatch) {
$row.addClass(o.selectClass);
}
totalSize += result.length;
}
if (totalSize === 0) {
hideResults();
return;
}
$ctr.parent().css('z-index', 11000);
$ctr.show();
$content
.children('div')
.mouseover(function() {
$content.children('div').removeClass(o.selectClass);
$(this).addClass(o.selectClass);
})
.mouseup(function(e) {
e.preventDefault();
e.stopPropagation();
selectCurr();
});
if (o.maxVisibleRows > 0) {
var maxHeight = $row.outerHeight() * o.maxVisibleRows;
$content.css('max-height', maxHeight);
}
return totalSize;
}
function selectRange(s, l) {
var tb = $input[0];
if (tb.createTextRange) {
var r = tb.createTextRange();
r.moveStart('character', s);
r.moveEnd('character', l - tb.value.length);
r.select();
} else if (tb.setSelectionRange) {
tb.setSelectionRange(s, l);
}
tb.focus();
return true;
}
String.prototype.applyTemplate = function(d) {
try {
if (d === '') return this;
return this.replace(/{([^{}]*)}/g,
function(a, b) {
var r;
if (b.indexOf('.') !== -1) { // handle dot notation in {}, such as {Thumbnail.Url}
var ary = b.split('.');
var obj = d;
for (var i = 0; i < ary.length; i++)
obj = obj[ary[i]];
r = obj;
}
else
r = d[b];
if (typeof r === 'string' || typeof r === 'number') return r; else throw (a);
}
);
} catch (ex) {
alert('Invalid JSON property ' + ex + ' found when trying to apply resultTemplate or paging.summaryTemplate.\nPlease check your spelling and try again.');
}
};
function hideResults() {
$input.data('active', false); // for input blur
$div.css('z-index', 0);
$ctr.hide();
}
function getCurr() {
if (!$ctr.is(':visible'))
return false;
var $curr = $content.children('div.' + o.selectClass);
if (!$curr.length)
$curr = false;
return $curr;
}
function selectCurr() {
$curr = getCurr();
if ($curr) {
$hdn.val($curr.attr('id'));
$input.val($curr.attr('val')).focus();
hideResults();
if (o.onSelect) {
o.onSelect.apply($input[0]);
}
}
}
function supportsGetBoxObjectFor() {
try {
document.getBoxObjectFor(document.body);
return true;
}
catch (e) {
return false;
}
}
function supportsGetBoundingClientRect() {
try {
document.body.getBoundingClientRect();
return true;
}
catch (e) {
return false;
}
}
function nextPage() {
$curr = getCurr();
if ($curr && $curr.next().length > 0) {
$curr.removeClass(o.selectClass);
for (var i = 0; i < o.maxVisibleRows; i++) {
if ($curr.next().length > 0) {
$curr = $curr.next();
}
}
$curr.addClass(o.selectClass);
var scrollPos = $content.attr('scrollTop');
$content.attr('scrollTop', scrollPos + $content.height());
}
else if (!$curr)
$content.children('div:first-child').addClass(o.selectClass);
}
function prevPage() {
$curr = getCurr();
if ($curr && $curr.prev().length > 0) {
$curr.removeClass(o.selectClass);
for (var i = 0; i < o.maxVisibleRows; i++) {
if ($curr.prev().length > 0) {
$curr = $curr.prev();
}
}
$curr.addClass(o.selectClass);
var scrollPos = $content.attr('scrollTop');
$content.attr('scrollTop', scrollPos - $content.height());
}
else if (!$curr)
$content.children('div:last-child').addClass(o.selectClass);
}
function nextResult() {
$curr = getCurr();
if ($curr && $curr.next().length > 0) {
$curr.removeClass(o.selectClass).next().addClass(o.selectClass);
var scrollPos = $content.attr('scrollTop'),
curr = $curr[0], parentBottom, bottom, height;
if (supportsGetBoxObjectFor()) {
parentBottom = document.getBoxObjectFor($content[0]).y + $content.attr('offsetHeight');
bottom = document.getBoxObjectFor(curr).y + $curr.attr('offsetHeight');
height = document.getBoxObjectFor(curr).height;
}
else if (supportsGetBoundingClientRect()) {
parentBottom = $content[0].getBoundingClientRect().bottom;
var rect = curr.getBoundingClientRect();
bottom = rect.bottom;
height = bottom - rect.top;
}
if (bottom >= parentBottom)
$content.attr('scrollTop', scrollPos + height);
}
else if (!$curr)
$content.children('div:first-child').addClass(o.selectClass);
}
function prevResult() {
$curr = getCurr();
if ($curr && $curr.prev().length > 0) {
$curr.removeClass(o.selectClass).prev().addClass(o.selectClass);
var scrollPos = $content.attr('scrollTop'),
curr = $curr[0],
parent = $curr.parent()[0],
parentTop, top, height;
if (supportsGetBoxObjectFor()) {
height = document.getBoxObjectFor(curr).height;
parentTop = document.getBoxObjectFor($content[0]).y - (height * 2); // TODO: this is not working when i add another control...
top = document.getBoxObjectFor(curr).y - document.getBoxObjectFor($content[0]).y;
}
else if (supportsGetBoundingClientRect()) {
parentTop = parent.getBoundingClientRect().top;
var rect = curr.getBoundingClientRect();
top = rect.top;
height = rect.bottom - top;
}
if (top <= parentTop)
$content.attr('scrollTop', scrollPos - height);
}
else if (!$curr)
$content.children('div:last-child').addClass(o.selectClass);
}
};
$.fn.flexbox = function(source, options) {
if (!source)
return;
try {
var defaults = $.fn.flexbox.defaults;
var o = $.extend({}, defaults, options);
for (var prop in o) {
if (defaults[prop] === undefined) throw ('Invalid option specified: ' + prop + '\nPlease check your spelling and try again.');
}
o.source = source;
if (options) {
o.paging = (options.paging || options.paging == null) ? $.extend({}, defaults.paging, options.paging) : false;
for (var prop in o.paging) {
if (defaults.paging[prop] === undefined) throw ('Invalid option specified: ' + prop + '\nPlease check your spelling and try again.');
}
if (options.displayValue && !options.hiddenValue) {
o.hiddenValue = options.displayValue;
}
}
this.each(function() {
new $.flexbox(this, o);
});
return this;
} catch (ex) {
if (typeof ex === 'object') alert(ex.message); else alert(ex);
}
};
// plugin defaults - added as a property on our plugin function so they can be set independently
$.fn.flexbox.defaults = {
method: 'GET', // One of 'GET' or 'POST'
queryDelay: 100, // num of milliseconds before query is run.
allowInput: true, // set to false to disallow the user from typing in queries
containerClass: 'ffb',
contentClass: 'content',
selectClass: 'ffb-sel',
inputClass: 'ffb-input',
arrowClass: 'ffb-arrow',
matchClass: 'ffb-match',
noResultsText: 'No matching results', // text to show when no results match the query
noResultsClass: 'ffb-no-results', // class to apply to noResultsText
showResults: true, // whether to show results at all, or just typeahead
selectFirstMatch: true, // whether to highlight the first matching value
autoCompleteFirstMatch: false, // whether to complete the first matching value in the input box
highlightMatches: true, // whether all matches within the string should be highlighted with matchClass
highlightMatchesRegExModifier: 'i', // 'i' for case-insensitive, 'g' for global (all occurrences), or combine
matchAny: true, // for client-side filtering ONLY, match any occurrence of the search term in the result (e.g. "ar" would find "area" and "cart")
minChars: 1, // the minimum number of characters the user must enter before a search is executed
showArrow: true, // set to false to simulate google suggest
arrowQuery: '', // the query to run when the arrow is clicked
onSelect: false, // function to run when a result is selected
maxCacheBytes: 32768, // in bytes, 0 means caching is disabled
resultTemplate: '{name}', // html template for each row (put json properties in curly braces)
displayValue: 'name', // json element whose value is displayed on select
hiddenValue: 'id', // json element whose value is submitted when form is submitted
initialValue: '', // what should the value of the input field be when the form is loaded?
initialId: '', // what should the value of the hidden field be when the form is loaded?
watermark: '', // text that appears when flexbox is loaded, if no initialValue is specified. style with css class '.ffb-input.watermark'
width: 200, // total width of flexbox. auto-adjusts based on showArrow value
resultsProperty: 'results', // json property in response that references array of results
totalProperty: 'total', // json property in response that references the total results (for paging)
maxVisibleRows: 0, // default is 0, which means it is ignored. use either this, or paging.pageSize
paging: {
style: 'input', // or 'links'
cssClass: 'paging', // prefix with containerClass (e.g. .ffb .paging)
pageSize: 10, // acts as a threshold. if <= pageSize results, paging doesn't appear
maxPageLinks: 5, // used only if style is 'links'
showSummary: true, // whether to show 'displaying 1-10 of 200 results' text
summaryClass: 'summary', // class for 'displaying 1-10 of 200 results', prefix with containerClass
summaryTemplate: 'Displaying {start}-{end} of {total} results' // can use {page} and {pages} as well
}
};
$.fn.setValue = function(val) {
var id = '#' + this.attr('id');
$(id + '_hidden,' + id + '_input').val(val).removeClass('watermark');
};
})(jQuery);
File diff suppressed because one or more lines are too long
-36
View File
@@ -1,36 +0,0 @@
<%@ Page Language="VB" ValidateRequest="false" AutoEventWireup="false" CodeFile="AutoPostTest.aspx.vb" Inherits="PostTest" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<script type="text/javascript" src="scripts/jquery-1.3.2.js"></script>
<script type="text/javascript" src="scripts/jHtmlArea-0.7.0.js"></script>
<link rel="Stylesheet" type="text/css" href="style/jHtmlArea.css" />
<script type="text/javascript">
$(function() {
$("textarea").htmlarea(); // Initialize jHtmlArea's with all default values
//window.setTimeout(function() { $("form").submit(); }, 3000);
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager runat="server" ID="sm1"></asp:ScriptManager>
<asp:Literal runat="server" ID="litText"></asp:Literal><br />
<textarea runat="server" id="txtText" cols="50" rows="15"></textarea>
<input type="submit" value='manual submit' />
<br />
<asp:Button runat="server" ID="btnSubmit" Text="asp:Button" />
<asp:LinkButton runat="server" ID="lbSubmit" Text="asp:LinkButton"></asp:LinkButton>
</div>
</form>
</body>
</html>
-9
View File
@@ -1,9 +0,0 @@

Partial Class PostTest
Inherits System.Web.UI.Page
Public Sub PostTest_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
txtText.Value = Request("txtText")
litText.Text = txtText.Value
End Sub
End Class
-89
View File
@@ -1,89 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript" src="scripts/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="scripts/jHtmlArea-0.7.0.min.js"></script>
<link rel="Stylesheet" type="text/css" href="style/jHtmlArea.css" />
<script type="text/javascript" src="scripts/jHtmlArea.ColorPickerMenu-0.7.0.js"></script>
<link rel="Stylesheet" type="text/css" href="style/jHtmlArea.ColorPickerMenu.css" />
<style type="text/css">
div.jHtmlArea { border: solid 1px #ccc; }
</style>
</head>
<body>
<h3>jHtmlArea Live Demo - jHtmlAreaColorPickerMenu Example</h3>
<p>The jHtmlAreaColorPickerMenu plugin/extension allows you to show a simple Color Picker Menu when the user clicks on the "forecolor" Toolbar Button.</p>
<p>
<a href="http://jhtmlarea.codeplex.com">jHtmlArea Project Homepage</a>
&nbsp;|&nbsp;
<a href="http://jhtmlarea.codeplex.com/Release/ProjectReleases.aspx">Downloads</a>
&nbsp;|&nbsp;
<a href="http://jhtmlarea.codeplex.com/Thread/List.aspx">Discussions</a>
&nbsp;|&nbsp;
<a href="http://jhtmlarea.codeplex.com/WorkItem/List.aspx">Issue Tracker</a>
</p>
<script type="text/javascript">
//// You can also override the "default" colors option of the jHtmlAreaColorPickerMenu
//// to show only the specific colors you want.
// jHtmlAreaColorPickerMenu.defaultOptions.colors = ["red", "yellow", "blue", "green", "purple", "white", "black"];
// The followin creates a jHtmlArea and adds a custom list of toolbar buttons.
// Among the buttons is the "forecolor" button that will automatically take
// advantage of the jHtmlAreaColorPickerMenu plugin.
$(function() {
$("#Textarea1").htmlarea({
toolbar: ["html", "|",
"forecolor", // <-- Add the "forecolor" Toolbar Button
"|", "bold", "italic", "underline", "|", "p", "h1", "h2", "h3", "|", "link", "unlink"] // Overrides/Specifies the Toolbar buttons to show
});
});
</script>
<textarea id="Textarea1" cols="50" rows="15"><p><h3>Another TextArea</h3>This is some sample text to test out the <b>WYSIWYG Control</b>.</p></textarea>
<hr />
The jHtmlAreaColorPickerMenu object can also be reused for other purposes. For example clicking on the button below will allow you to change the background color of the page.
<br />
<input id="choosecolor" type="button" value="Choose Color..." />
<script type="text/javascript">
$(function() {
$("#choosecolor").click(function() {
jHtmlAreaColorPickerMenu(this, {
colorChosen: function(color) {
$(document.body).css('background-color', color);
}
});
});
});
</script>
<br /><br /><br /><br /><br />
<hr />
<div style="position: relative;border: solid 30px #cccccc;">
<h3>Editor within a "position: relative" DIV element.</h3>
<textarea id="txtInDiv" cols="50" rows="15">Some <b>Test</b> content.</textarea>
<script type="text/javascript">
$(function() {
$("#txtInDiv").htmlarea({
toolbar: ["html", "|",
"forecolor", // <-- Add the "forecolor" Toolbar Button
"|", "bold", "italic", "underline", "|", "p", "h1", "h2", "h3", "|", "link", "unlink"] // Overrides/Specifies the Toolbar buttons to show
});
});
</script>
</div>
</body>
</html>
-128
View File
@@ -1,128 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript" src="scripts/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="scripts/jquery-ui-1.7.2.custom.min.js"></script>
<link rel="Stylesheet" type="text/css" href="style/jqueryui/ui-lightness/jquery-ui-1.7.2.custom.css" />
<script type="text/javascript" src="scripts/jHtmlArea-0.7.0.js"></script>
<link rel="Stylesheet" type="text/css" href="style/jHtmlArea.css" />
<style type="text/css">
/* body { background: #ccc;} */
div.jHtmlArea .ToolBar ul li a.custom_disk_button
{
background: url(images/disk.png) no-repeat;
background-position: 0 0;
}
div.jHtmlArea { border: solid 1px #ccc; }
</style>
</head>
<body>
<script type="text/javascript">
// You can do this to perform a global override of any of the "default" options
// jHtmlArea.fn.defaultOptions.css = "jHtmlArea.Editor.css";
$(function() {
//$("textarea").htmlarea(); // Initialize all TextArea's as jHtmlArea's with default values
$("#txtDefaultHtmlArea").htmlarea(); // Initialize jHtmlArea's with all default values
$("#txtCustomHtmlArea").htmlarea({
// Override/Specify the Toolbar buttons to show
toolbar: [
["bold", "italic", "underline", "|", "forecolor"],
["p", "h1", "h2", "h3", "h4", "h5", "h6"],
["link", "unlink", "|", "image"],
[{
// This is how to add a completely custom Toolbar Button
css: "custom_disk_button",
text: "Save",
action: function(btn) {
// 'this' = jHtmlArea object
// 'btn' = jQuery object that represents the <A> "anchor" tag for the Toolbar Button
alert('SAVE!\n\n' + this.toHtmlString());
}
}]
],
// Override any of the toolbarText values - these are the Alt Text / Tooltips shown
// when the user hovers the mouse over the Toolbar Buttons
// Here are a couple translated to German, thanks to Google Translate.
toolbarText: $.extend({}, jHtmlArea.defaultOptions.toolbarText, {
"bold": "fett",
"italic": "kursiv",
"underline": "unterstreichen"
}),
// Specify a specific CSS file to use for the Editor
css: "style//jHtmlArea.Editor.css",
// Do something once the editor has finished loading
loaded: function() {
//// 'this' is equal to the jHtmlArea object
//alert("jHtmlArea has loaded!");
//this.showHTMLView(); // show the HTML view once the editor has finished loading
}
});
});
</script>
<textarea id="txtDefaultHtmlArea" cols="50" rows="15"><p><h3>Test H3</h3>This is some sample text to test out the <b>WYSIWYG Control</b>.</p></textarea>
<input type="button" value="Alert HTML" onclick="alert($('#txtDefaultHtmlArea').htmlarea('toHtmlString'));" />
<input type="button" value="Change Color to Blue" onclick="$('#txtDefaultHtmlArea').htmlarea('forecolor', 'blue');" />
<br /><hr /><br />
<textarea id="txtCustomHtmlArea" cols="50" rows="15"><p><h3>Another TextArea</h3>This is some sample text to test out the <b>WYSIWYG Control</b>.</p></textarea>
<input type="button" id="btnRemoveCustomHtmlArea" value="Remove jHtmlArea" />
<script type="text/javascript">
$(function() {
$("#btnRemoveCustomHtmlArea").click(function() {
$("#txtCustomHtmlArea").htmlarea("dispose");
});
});
</script>
<input type="button" id="btnResetCustomHtmlArea" value="Reset To Default Options" />
<script type="text/javascript">
$(function() {
$("#btnResetCustomHtmlArea").click(function() {
$("#txtCustomHtmlArea").htmlarea("dispose");
$("#txtCustomHtmlArea").htmlarea();
});
});
</script>
<br /><hr /><br />
<h3>Use jHtmlArea within jQuery UI Dialog</h3>
<script type="text/javascript">
$.ui.dialog.defaults.bgiframe = true;
$(function() {
$("#dialogShowButton").click(function() {
$("#dialog").dialog({width: 420});
$("#dialogEditor").htmlarea();
});
});
</script>
<input type="button" id="dialogShowButton" value="Show Dialog with jHtmlArea Editor" />
<div id="dialog" title="Basic dialog" style="display: none">
Basic jHtmlArea within jQuery UI Dialog
<br />
<textarea id="dialogEditor" rows="10" style="width: 400px">Some <b>Basic</b> text.</textarea>
</div>
<p>To see a "proper" example of the "Font Color" button, you'll want to see the "<a href="ColorPickerMenu.htm">jHtmlAreaColorPickerMenu</a>" in action here: <a href="ColorPickerMenu.htm">ColorPickerMenu.htm</a></p>
</body>
</html>
-117
View File
@@ -1,117 +0,0 @@
/* jHtmlArea - WYSIWYG Html Editor jQuery Plugin
* Copyright (c) 2009 Chris Pietschmann
* http://jhtmlarea.codeplex.com
* Licensed under the Microsoft Reciprocal License (Ms-RL)
* http://jhtmlarea.codeplex.com/license
*/
EXAMPLE USAGE:
-----------------------
See "Default.htm" for example usages.
Or, check out http://jhtmlarea.codeplex.com
CHANGE LOG
-----------------------
v0.7.0
- Fixed ColorPickerMenu positioning when placed within a "position: relative"
div element.
- Fixed ColorPickerMenu to auto-hide after a short delay (1 second) once the
user moves the mouse off the menu.
- Fixed Form Submit issue that caused the text to not be posted. Also fixed a
related issue with ASP.NET Postbacks.
- Added jHtmlArea.p method and "paragraph" functionality + toolbar button
This allows the user to change the formatting from <H1>, <H2>, etc. to <P>
- Added an "Automatic" color option to the ColorPickerMenu.
v0.6.0
- Hide All Toolbar buttons except the "html" button when entering
HTML Source view (via clicking "html" button or executing
jHtmlArea.showHTMLView). When toggling view back to the WYSIWYG editor
all other buttons will then be shown again.
- Added jHtmlArea.dispose method - Allows you to remove the WYSIWYG
editor, and go back to having a plain TextArea. Beware, there is a
memory leak when using this method; it's not too bad, but you want
to call this as few a number of times if you can. The memory leak
is due to the way the browsers handle removing DOM Elements.
- Added Indent and Outdent functionality - This includes toolbar buttons
and jHtmlArea.indent and jHtmlArea.outdent buttons.
- Added justifyLeft, justifyCenter, justifyRight functionality and toolbar
buttons.
- Added insertHorizontalRule functionality and toolbar button. This adds a
<hr> tag to the currently selected area.
- Added an "alias" method for jHtmlArea.execCommand named "ec" to help reduce the
file size of the script.
- Added increaseFontSize and decreaseFontSize functionality and toolbar buttons.
The increaseFontSize and decreaseFontSize doesn't currently work in Safari.
- Added forecolor functionality - Changes a font color for the selection or at the
insertion point. Requires a color value string to be passed in as a value argument.
- Fixed bug in jHtmlArea.toString method
- Added jHtmlArea.queryCommandValue method and it's alias "jHtmlArea.qc"
- Added the jHtmlAreaColorPickerMenu plugin/extension that resides within the
"jHtmlAreaColorPickerMenu.js" file. This file includes a somewhat generic color
picker menu that can be used for any purpose, plus it includes the code to wire
up and override the "stock" jHtmlColor.forecolor functionality and inject the new
Color Picker Menu functionality in it's place when you click on the "forecolor"
toolbar button.
- Changed the "execCommand" and "ec" second parameter to default to "false" if not
specified, and third parameter to default to "null" if not specified. This helps to
reduce the overall file size of the script.
- Added support for Toolbar Button Grouping, now with the additional buttons included
in this release, or even when any custom buttons are used, they will be able to display
nicely by "auto-wrapping" to the next line.
- Added a gradient background to the Toolbar Button Groups, with a slight reverse
gradient on the Buttons when the mouse is hovered over.
v0.5.0 - Initial Release
ICONS / IMAGES:
-----------------------
Some of the Icons within the jHtmlArea.png file are from the
Silk icon set at www.famfamfam.com.
They are licensed under the following license:
Silk icon set 1.3
_________________________________________
Mark James
http://www.famfamfam.com/lab/icons/silk/
_________________________________________
This work is licensed under a
Creative Commons Attribution 2.5 License.
[ http://creativecommons.org/licenses/by/2.5/ ]
This means you may use it for any purpose,
and make any changes you like.
All I ask is that you include a link back
to this page in your credits.
Are you using this icon set? Send me an email
(including a link or picture if available) to
mjames@gmail.com
Any other questions about this icon set please
contact mjames@gmail.com
Binary file not shown.

Before

Width:  |  Height:  |  Size: 620 B

-365
View File
@@ -1,365 +0,0 @@
/*
* This file has been commented to support Visual Studio Intellisense.
* You should not use this file at runtime inside the browser--it is only
* intended to be used only for design-time IntelliSense. Please use the
* standard jHtmlArea library for all production use.
*/
/*
* jHtmlArea 0.7.0 - WYSIWYG Html Editor jQuery Plugin
* Copyright (c) 2009 Chris Pietschmann
* http://jhtmlarea.codeplex.com
* Licensed under the Microsoft Reciprocal License (Ms-RL)
* http://jhtmlarea.codeplex.com/license
*/
(function($) {
$.fn.htmlarea = function(options) {
/// <summary>
/// 1: (options) - Convert all TextArea DOM Elements to be displayed as jHtmlArea WYSIWYG Editors.
/// 2: (string, arguments) - This function accepts a string containing the method name that you want to execute against the jHtmlArea object.
/// </summary>
/// <param name="options" type="Object">
/// 1: options - The custom options you want applied to the jHtmlArea's that are created.
/// 2: string - The name of the jHtmlArea object method to be executed. The results of the method call are then returned instead of the jQuery object.
/// </param>
};
var jHtmlArea = window.jHtmlArea = function(elem, options) {
/// <summary>
/// Converts the passed in TextArea DOM Element to a jHtmlArea WYSIWYG Editor.
/// </summary>
/// <param name="elem" type="TextArea DOM Element">
/// The TextArea DOM Element to be converted to a jHtmlArea WYSIWYG Editor. Required.
/// </param>
/// <param name="options" type="Object">
/// The custom options you want applied to the jHtmlArea that is created. Optional.
/// </param>
/// <field name="defaultOptions" Type="Object">
/// The Default Options that are used for configuring the jHtmlArea WYSIWYG Editor upon creation.
/// </field>
/// <returns type="jHtmlArea" />
};
jHtmlArea.fn = jHtmlArea.prototype = {
// The current version of jHtmlArea being used
jhtmlarea: "0.7.0",
init: function(elem, options) {
/// <summary>
/// Converts the passed in TextArea DOM Element to a jHtmlArea WYSIWYG Editor.
/// </summary>
/// <param name="elem" type="TextArea DOM Element">
/// Required. The TextArea DOM Element to be converted to a jHtmlArea WYSIWYG Editor.
/// </param>
/// <param name="options" type="Object">
/// Optional. The custom options you want applied to the jHtmlArea that is created.
/// </param>
/// <returns type="jHtmlArea" />
},
execCommand: function(a, b, c) {
/// <summary>
/// Executes a command on the current document, current selection, or the given range.
/// </summary>
/// <param name="a" type="String">
/// Required. String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
/// </param>
/// <param name="b" type="Boolean">
/// Optional. Boolean that specifies one of the following values:
/// "false" = Default. Do not display a user interface. Must be combined with vValue, if the command requires a value.
/// "true" = Display a user interface if the command supports one.
/// </param>
/// <param name="c" type="Object">
/// Optional. Variant that specifies the string, number, or other value to assign. Possible values depend on the command.
/// </param>
},
ec: function(a, b, c) {
/// <summary>
/// Executes a command on the current document, current selection, or the given range. An alias for the "execCommand" method.
/// </summary>
/// <param name="a" type="String">
/// Required. String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
/// </param>
/// <param name="b" type="Boolean">
/// Optional. Boolean that specifies one of the following values:
/// "false" = Default. Do not display a user interface. Must be combined with vValue, if the command requires a value.
/// "true" = Display a user interface if the command supports one.
/// </param>
/// <param name="c" type="Object">
/// Optional. Variant that specifies the string, number, or other value to assign. Possible values depend on the command.
/// </param>
},
queryCommandValue: function(a) {
/// <summary>
/// Returns the current value of the document, range, or current selection for the given command.
/// </summary>
/// <param name="a" type="String">
/// Required. String that specifies a command identifier.
/// </param>
/// <returns type="Variant" />
},
qc: function(a) {
/// <summary>
/// Returns the current value of the document, range, or current selection for the given command. An alias for the "queryCommandValue" method.
/// </summary>
/// <param name="a" type="String">
/// Required. String that specifies a command identifier.
/// </param>
/// <returns type="Variant" />
},
getSelectedHTML: function() {
/// <summary>
/// Returns the HTML that is currently selected within the editor.
/// </summary>
/// <returns type="String" />
},
getSelection: function() {
/// <summary>
/// Returns the Browser Selection object that represents the currently selected region of the editor.
/// </summary>
/// <returns type="Object" />
},
getRange: function() {
/// <summary>
/// Returns the Browser Range object that represents the currently selected region of the editor. (This uses the "getSelection" method internally.)
/// </summary>
/// <returns type="Object" />
},
html: function(v) {
/// <summary>
/// 1: () Returns the HTML text value contained within the editor. 2: (v) Sets the editors value to the HTML text passed in.
/// </summary>
/// <param name="v" type="String">
/// The HTML text to set the editors value to.
/// </param>
},
pasteHTML: function(html) {
/// <summary>
/// Pastes HTML text into the editor, replacing any currently selected text and HTML elements.
/// </summary>
/// <param name="html" type="String">
/// The HTML text to paste/insert.
/// </param>
},
cut: function() {
/// <summary>
/// Copies the current selection to the clipboard and then deletes it.
/// </summary>
},
copy: function() {
/// <summary>
/// Copies the current selection to the clipboard.
/// </summary>
},
paste: function() {
/// <summary>
/// Overwrites the contents of the clipboard on the current selection.
/// </summary>
},
bold: function() {
/// <summary>
/// Toggles the current selection between bold and nonbold.
/// </summary>
},
italic: function() {
/// <summary>
/// Toggles the current selection between italic and nonitalic.
/// </summary>
},
underline: function() {
/// <summary>
/// Toggles the current selection between underlined and not underlined.
/// </summary>
},
strikeThrough: function() {
/// <summary>
/// If there is a selection and all of the characters are already striked, the strikethrough will be removed. Otherwise, all selected characters will have a line drawn through them.
/// </summary>
},
image: function(url) {
/// <summary>
/// This command will insert an image (referenced by url) at the insertion point.
/// If no URL is specified, a prompt will be displayed to the user.
/// </summary>
/// <param name="url" type="String">
/// The URL to the Image to be inserted. If no URL is specified, a prompt will be shown.
/// </param>
},
removeFormat: function() {
/// <summary>
/// Removes the formatting tags from the current selection.
/// </summary>
},
link: function() {
/// <summary>
/// Inserts a hyperlink on the current selection, or displays a dialog box enabling the user to specify a URL to insert as a hyperlink on the current selection.
/// </summary>
},
unlink: function() {
/// <summary>
/// Removes any hyperlink from the current selection.
/// </summary>
},
orderedList: function() {
/// <summary>
/// Converts the text selection into an ordered list.
/// </summary>
},
unorderedList: function() {
/// <summary>
/// Converts the text selection into an unordered list.
/// </summary>
},
superscript: function() {
/// <summary>
/// If there is a selection and all of the characters are already superscripted, the superscript will be removed. Otherwise, all selected characters will be drawn slightly higher than normal text.
/// </summary>
},
subscript: function() {
/// <summary>
/// If there is a selection and all of the characters are already subscripted, the subscript will be removed. Otherwise, all selected characters will be drawn slightly lower than normal text.
/// </summary>
},
p: function() {
/// <summary>
/// Sets the current block format tag to <P>.
/// </summary>
},
h1: function() {
/// <summary>
/// Sets the current block format tag to <H1>.
/// </summary>
},
h2: function() {
/// <summary>
/// Sets the current block format tag to <H2>.
/// </summary>
},
h3: function() {
/// <summary>
/// Sets the current block format tag to <H3>.
/// </summary>
},
h4: function() {
/// <summary>
/// Sets the current block format tag to <H4>.
/// </summary>
},
h5: function() {
/// <summary>
/// Sets the current block format tag to <H5>.
/// </summary>
},
h6: function() {
/// <summary>
/// Sets the current block format tag to <H6>.
/// </summary>
},
heading: function(h) {
/// <summary>
/// Sets the current block format tag to <H?> tag.
/// Example: Calling jHtmlArea.heading(2) will be the same as calling jHtmlArea.h2()
/// </summary>
/// <param name="h" type="Number">
/// The Number of Header (<H?>) tag to format the current block with.
/// For Example: Passing a 2 or "2" will cause the current block to be formatted with a <H2> tag.
/// </param>
},
indent: function() {
/// <summary>
/// Indents the selection or insertion point.
/// </summary>
},
outdent: function() {
/// <summary>
/// Outdents the selection or insertion point.
/// </summary>
},
insertHorizontalRule: function() {
/// <summary>
/// Inserts a horizontal rule at the insertion point (deletes selection).
/// </summary>
},
justifyLeft: function() {
/// <summary>
/// Justifies the selection or insertion point to the left.
/// </summary>
},
justifyCenter: function() {
/// <summary>
/// Centers the selection or insertion point.
/// </summary>
},
justifyRight: function() {
/// <summary>
/// Right-justifies the selection or the insertion point.
/// </summary>
},
increaseFontSize: function() {
/// <summary>
/// Increases the Font Size around the selection or at the insertion point.
/// </summary>
},
decreaseFontSize: function() {
/// <summary>
/// Decreases the Font Size around the selection or at the insertion point.
/// </summary>
},
forecolor: function(c) {
/// <summary>
/// Changes a font color for the selection or at the insertion point. Requires a color value string to be passed in as a value argument.
/// </summary>
},
formatBlock: function(v) {
/// <summary>
/// Sets the current block format tag.
/// </summary>
},
showHTMLView: function() {
/// <summary>
/// Shows the HTML/Source View (TextArea DOM Element) within the Editor and hides the WYSIWYG interface.
/// </summary>
},
hideHTMLView: function() {
/// <summary>
/// Hides the HTML/Source View (TextArea DOM Element) within the Editor and displays the WYSIWYG interface.
/// </summary>
},
toggleHTMLView: function() {
/// <summary>
/// Toggles between HTML/Source View (TextArea DOM Element) and the WYSIWYG interface within the Editor.
/// </summary>
},
toHtmlString: function() {
/// <summary>
/// Returns the HTML text contained within the editor.
/// </summary>
/// <returns type="String" />
},
toString: function() {
/// <summary>
/// Return the Text contained within the editor, with all HTML tags removed.
/// </summary>
/// <returns type="String" />
},
updateTextArea: function() {
/// <summary>
/// Forces the TextArea DOM Element to by sync'd with the contents of the HTML WYSIWYG Editor.
/// </summary>
},
updateHtmlArea: function() {
/// <summary>
/// Forces the HTML WYSIWYG Editor to be sync'd with the contents of the TextArea DOM Element.
/// </summary>
}
};
jHtmlArea.fn.init.prototype = jHtmlArea.fn;
})(jQuery);
-403
View File
@@ -1,403 +0,0 @@
/*
* jHtmlArea 0.7.0 - WYSIWYG Html Editor jQuery Plugin
* Copyright (c) 2009 Chris Pietschmann
* http://jhtmlarea.codeplex.com
* Licensed under the Microsoft Reciprocal License (Ms-RL)
* http://jhtmlarea.codeplex.com/license
*/
(function($) {
$.fn.htmlarea = function(opts) {
if (opts && typeof (opts) === "string") {
var args = [];
for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); }
var htmlarea = jHtmlArea(this[0]);
var f = htmlarea[opts];
if (f) { return f.apply(htmlarea, args); }
}
return this.each(function() { jHtmlArea(this, opts); });
};
var jHtmlArea = window.jHtmlArea = function(elem, options) {
if (elem.jquery) {
return jHtmlArea(elem[0]);
}
if (elem.jhtmlareaObject) {
return elem.jhtmlareaObject;
} else {
return new jHtmlArea.fn.init(elem, options);
}
};
jHtmlArea.fn = jHtmlArea.prototype = {
// The current version of jHtmlArea being used
jhtmlarea: "0.7.0",
init: function(elem, options) {
if (elem.nodeName.toLowerCase() === "textarea") {
var opts = $.extend({}, jHtmlArea.defaultOptions, options);
elem.jhtmlareaObject = this;
var textarea = this.textarea = $(elem);
var container = this.container = $("<div/>").addClass("jHtmlArea").width(textarea.width()).insertAfter(textarea);
var toolbar = this.toolbar = $("<div/>").addClass("ToolBar").appendTo(container);
priv.initToolBar.call(this, opts);
var iframe = this.iframe = $("<iframe/>").height(textarea.height());
iframe.width(textarea.width() - ($.browser.msie ? 0 : 4));
var htmlarea = this.htmlarea = $("<div/>").append(iframe);
container.append(htmlarea).append(textarea.hide());
priv.initEditor.call(this, opts);
priv.attachEditorEvents.call(this);
// Fix total height to match TextArea
iframe.height(iframe.height() - toolbar.height());
toolbar.width(textarea.width() - 2);
if (opts.loaded) { opts.loaded.call(this); }
}
},
dispose: function() {
this.textarea.show().insertAfter(this.container);
this.container.remove();
this.textarea[0].jhtmlareaObject = null;
},
execCommand: function(a, b, c) {
this.iframe[0].contentWindow.focus();
this.editor.execCommand(a, b || false, c || null);
this.updateTextArea();
},
ec: function(a, b, c) {
this.execCommand(a, b, c);
},
queryCommandValue: function(a) {
this.iframe[0].contentWindow.focus();
return this.editor.queryCommandValue(a);
},
qc: function(a) {
return this.queryCommandValue(a);
},
getSelectedHTML: function() {
if ($.browser.msie) {
return this.getRange().htmlText;
} else {
var elem = this.getRange().cloneContents();
return $("<p/>").append($(elem)).html();
}
},
getSelection: function() {
if ($.browser.msie) {
//return (this.editor.parentWindow.getSelection) ? this.editor.parentWindow.getSelection() : this.editor.selection;
return this.editor.selection;
} else {
return this.iframe[0].contentDocument.defaultView.getSelection();
}
},
getRange: function() {
var s = this.getSelection();
if (!s) { return null; }
//return (s.rangeCount > 0) ? s.getRangeAt(0) : s.createRange();
return (s.getRangeAt) ? s.getRangeAt(0) : s.createRange();
},
html: function(v) {
if (v) {
this.pastHTML(v);
} else {
return toHtmlString();
}
},
pasteHTML: function(html) {
this.iframe[0].contentWindow.focus();
var r = this.getRange();
if ($.browser.msie) {
r.pasteHTML(html);
} else if ($.browser.mozilla) {
r.deleteContents();
r.insertNode($((html.indexOf("<") != 0) ? $("<span/>").append(html) : html)[0]);
} else { // Safari
r.deleteContents();
r.insertNode($(this.iframe[0].contentWindow.document.createElement("span")).append($((html.indexOf("<") != 0) ? "<span>" + html + "</span>" : html))[0]);
}
r.collapse(false);
r.select();
},
cut: function() {
this.ec("cut");
},
copy: function() {
this.ec("copy");
},
paste: function() {
this.ec("paste");
},
bold: function() { this.ec("bold"); },
italic: function() { this.ec("italic"); },
underline: function() { this.ec("underline"); },
strikeThrough: function() { this.ec("strikethrough"); },
image: function(url) {
if ($.browser.msie && !url) {
this.ec("insertImage", true);
} else {
this.ec("insertImage", false, (url || prompt("Image URL:", "http://")));
}
},
removeFormat: function() {
this.ec("removeFormat", false, []);
this.unlink();
},
link: function() {
if ($.browser.msie) {
this.ec("createLink", true);
} else {
this.ec("createLink", false, prompt("Link URL:", "http://"));
}
},
unlink: function() { this.ec("unlink", false, []); },
orderedList: function() { this.ec("insertorderedlist"); },
unorderedList: function() { this.ec("insertunorderedlist"); },
superscript: function() { this.ec("superscript"); },
subscript: function() { this.ec("subscript"); },
p: function() {
this.formatBlock("<p>");
},
h1: function() {
this.heading(1);
},
h2: function() {
this.heading(2);
},
h3: function() {
this.heading(3);
},
h4: function() {
this.heading(4);
},
h5: function() {
this.heading(5);
},
h6: function() {
this.heading(6);
},
heading: function(h) {
this.formatBlock($.browser.msie ? "Heading " + h : "h" + h);
},
indent: function() {
this.ec("indent");
},
outdent: function() {
this.ec("outdent");
},
insertHorizontalRule: function() {
this.ec("insertHorizontalRule", false, "ht");
},
justifyLeft: function() {
this.ec("justifyLeft");
},
justifyCenter: function() {
this.ec("justifyCenter");
},
justifyRight: function() {
this.ec("justifyRight");
},
increaseFontSize: function() {
if ($.browser.msie) {
this.ec("fontSize", false, this.qc("fontSize") + 1);
} else if ($.browser.safari) {
this.getRange().surroundContents($(this.iframe[0].contentWindow.document.createElement("span")).css("font-size", "larger")[0]);
} else {
this.ec("increaseFontSize", false, "big");
}
},
decreaseFontSize: function() {
if ($.browser.msie) {
this.ec("fontSize", false, this.qc("fontSize") - 1);
} else if ($.browser.safari) {
this.getRange().surroundContents($(this.iframe[0].contentWindow.document.createElement("span")).css("font-size", "smaller")[0]);
} else {
this.ec("decreaseFontSize", false, "small");
}
},
forecolor: function(c) {
this.ec("foreColor", false, c || prompt("Enter HTML Color:", "#"));
},
formatBlock: function(v) {
this.ec("formatblock", false, v || null);
},
showHTMLView: function() {
this.updateTextArea();
this.textarea.show();
this.htmlarea.hide();
$("ul li:not(li:has(a.html))", this.toolbar).hide();
$("ul:not(:has(:visible))", this.toolbar).hide();
$("ul li a.html", this.toolbar).addClass("highlighted");
},
hideHTMLView: function() {
this.updateHtmlArea();
this.textarea.hide();
this.htmlarea.show();
$("ul", this.toolbar).show();
$("ul li", this.toolbar).show().find("a.html").removeClass("highlighted");
},
toggleHTMLView: function() {
(this.textarea.is(":hidden")) ? this.showHTMLView() : this.hideHTMLView();
},
toHtmlString: function() {
return this.editor.body.innerHTML;
},
toString: function() {
return this.editor.body.innerText;
},
updateTextArea: function() {
this.textarea.val(this.toHtmlString());
},
updateHtmlArea: function() {
this.editor.body.innerHTML = this.textarea.val();
}
};
jHtmlArea.fn.init.prototype = jHtmlArea.fn;
jHtmlArea.defaultOptions = {
toolbar: [
["html"], ["bold", "italic", "underline", "strikethrough", "|", "subscript", "superscript"],
["increasefontsize", "decreasefontsize"],
["orderedlist", "unorderedlist"],
["indent", "outdent"],
["justifyleft", "justifycenter", "justifyright"],
["link", "unlink", "image", "horizontalrule"],
["p", "h1", "h2", "h3", "h4", "h5", "h6"],
["cut", "copy", "paste"]
],
css: null,
toolbarText: {
bold: "Bold", italic: "Italic", underline: "Underline", strikethrough: "Strike-Through",
cut: "Cut", copy: "Copy", paste: "Paste",
h1: "Heading 1", h2: "Heading 2", h3: "Heading 3", h4: "Heading 4", h5: "Heading 5", h6: "Heading 6", p: "Paragraph",
indent: "Indent", outdent: "Outdent", horizontalrule: "Insert Horizontal Rule",
justifyleft: "Left Justify", justifycenter: "Center Justify", justifyright: "Right Justify",
increasefontsize: "Increase Font Size", decreasefontsize: "Decrease Font Size", forecolor: "Text Color",
link: "Insert Link", unlink: "Remove Link", image: "Insert Image",
orderedlist: "Insert Ordered List", unorderedlist: "Insert Unordered List",
subscript: "Subscript", superscript: "Superscript",
html: "Show/Hide HTML Source View"
}
};
var priv = {
toolbarButtons: {
strikethrough: "strikeThrough", orderedlist: "orderedList", unorderedlist: "unorderedList",
horizontalrule: "insertHorizontalRule",
justifyleft: "justifyLeft", justifycenter: "justifyCenter", justifyright: "justifyRight",
increasefontsize: "increaseFontSize", decreasefontsize: "decreaseFontSize",
html: function(btn) {
this.toggleHTMLView();
}
},
initEditor: function(options) {
var edit = this.editor = this.iframe[0].contentWindow.document;
edit.designMode = 'on';
edit.open();
edit.write(this.textarea.val());
edit.close();
if (options.css) {
var e = edit.createElement('link'); e.rel = 'stylesheet'; e.type = 'text/css'; e.href = options.css; edit.getElementsByTagName('head')[0].appendChild(e);
}
},
initToolBar: function(options) {
var that = this;
var menuItem = function(className, altText, action) {
return $("<li/>").append($("<a href='javascript:void(0);'/>").addClass(className).attr("title", altText).click(function() { action.call(that, $(this)); }));
};
function addButtons(arr) {
var ul = $("<ul/>").appendTo(that.toolbar);
for (var i = 0; i < arr.length; i++) {
var e = arr[i];
if ((typeof (e)).toLowerCase() === "string") {
if (e === "|") {
ul.append($('<li class="separator"/>'));
} else {
var f = (function(e) {
// If button name exists in priv.toolbarButtons then call the "method" defined there, otherwise call the method with the same name
var m = priv.toolbarButtons[e] || e;
if ((typeof (m)).toLowerCase() === "function") {
return function(btn) { m.call(this, btn); };
} else {
return function() { this[m](); this.editor.body.focus(); };
}
})(e.toLowerCase());
var t = options.toolbarText[e.toLowerCase()];
ul.append(menuItem(e.toLowerCase(), t || e, f));
}
} else {
ul.append(menuItem(e.css, e.text, e.action));
}
}
};
if (options.toolbar.length !== 0 && priv.isArray(options.toolbar[0])) {
for (var i = 0; i < options.toolbar.length; i++) {
addButtons(options.toolbar[i]);
}
} else {
addButtons(options.toolbar);
}
},
attachEditorEvents: function() {
var t = this;
var fnHA = function() {
t.updateHtmlArea();
};
this.textarea.click(fnHA).
keyup(fnHA).
keydown(fnHA).
mousedown(fnHA).
blur(fnHA);
var fnTA = function() {
t.updateTextArea();
};
$(this.editor.body).click(fnTA).
keyup(fnTA).
keydown(fnTA).
mousedown(fnTA).
blur(fnTA);
$('form').submit(function() { t.toggleHTMLView(); t.toggleHTMLView(); });
//$(this.textarea[0].form).submit(function() { //this.textarea.closest("form").submit(function() {
// Fix for ASP.NET Postback Model
if (window.__doPostBack) {
var old__doPostBack = __doPostBack;
window.__doPostBack = function() {
if (t) {
if (t.toggleHTMLView) {
t.toggleHTMLView();
t.toggleHTMLView();
}
}
return old__doPostBack.apply(window, arguments);
};
}
},
isArray: function(v) {
return v && typeof v === 'object' && typeof v.length === 'number' && typeof v.splice === 'function' && !(v.propertyIsEnumerable('length'));
}
};
})(jQuery);
-357
View File
@@ -1,357 +0,0 @@
/*
* This file has been commented to support Visual Studio Intellisense.
* You should not use this file at runtime inside the browser--it is only
* intended to be used only for design-time IntelliSense. Please use the
* standard jHtmlArea library for all production use.
*/
/*
* jHtmlArea 0.7.0 - WYSIWYG Html Editor jQuery Plugin
* Copyright (c) 2009 Chris Pietschmann
* http://jhtmlarea.codeplex.com
* Licensed under the Microsoft Reciprocal License (Ms-RL)
* http://jhtmlarea.codeplex.com/license
*/
(function($) {
$.fn.htmlarea = function(options) {
/// <summary>
/// 1: (options) - Convert all TextArea DOM Elements to be displayed as jHtmlArea WYSIWYG Editors.
/// 2: (string, arguments) - This function accepts a string containing the method name that you want to execute against the jHtmlArea object.
/// </summary>
/// <param name="options" type="Object">
/// 1: options - The custom options you want applied to the jHtmlArea's that are created.
/// 2: string - The name of the jHtmlArea object method to be executed. The results of the method call are then returned instead of the jQuery object.
/// </param>
};
var jHtmlArea = window.jHtmlArea = function(elem, options) {
/// <summary>
/// Converts the passed in TextArea DOM Element to a jHtmlArea WYSIWYG Editor.
/// </summary>
/// <param name="elem" type="TextArea DOM Element">
/// The TextArea DOM Element to be converted to a jHtmlArea WYSIWYG Editor. Required.
/// </param>
/// <param name="options" type="Object">
/// The custom options you want applied to the jHtmlArea that is created. Optional.
/// </param>
/// <field name="defaultOptions" Type="Object">
/// The Default Options that are used for configuring the jHtmlArea WYSIWYG Editor upon creation.
/// </field>
/// <returns type="jHtmlArea" />
};
jHtmlArea.fn = jHtmlArea.prototype = {
// The current version of jHtmlArea being used
jhtmlarea: "0.7.0",
init: function(elem, options) {
/// <summary>
/// Converts the passed in TextArea DOM Element to a jHtmlArea WYSIWYG Editor.
/// </summary>
/// <param name="elem" type="TextArea DOM Element">
/// Required. The TextArea DOM Element to be converted to a jHtmlArea WYSIWYG Editor.
/// </param>
/// <param name="options" type="Object">
/// Optional. The custom options you want applied to the jHtmlArea that is created.
/// </param>
/// <returns type="jHtmlArea" />
},
execCommand: function(a, b, c) {
/// <summary>
/// Executes a command on the current document, current selection, or the given range.
/// </summary>
/// <param name="a" type="String">
/// Required. String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
/// </param>
/// <param name="b" type="Boolean">
/// Optional. Boolean that specifies one of the following values:
/// "false" = Default. Do not display a user interface. Must be combined with vValue, if the command requires a value.
/// "true" = Display a user interface if the command supports one.
/// </param>
/// <param name="c" type="Object">
/// Optional. Variant that specifies the string, number, or other value to assign. Possible values depend on the command.
/// </param>
},
ec: function(a, b, c) {
/// <summary>
/// Executes a command on the current document, current selection, or the given range. An alias for the "execCommand" method.
/// </summary>
/// <param name="a" type="String">
/// Required. String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
/// </param>
/// <param name="b" type="Boolean">
/// Optional. Boolean that specifies one of the following values:
/// "false" = Default. Do not display a user interface. Must be combined with vValue, if the command requires a value.
/// "true" = Display a user interface if the command supports one.
/// </param>
/// <param name="c" type="Object">
/// Optional. Variant that specifies the string, number, or other value to assign. Possible values depend on the command.
/// </param>
},
queryCommandValue: function(a) {
/// <summary>
/// Returns the current value of the document, range, or current selection for the given command.
/// </summary>
/// <param name="a" type="String">
/// Required. String that specifies a command identifier.
/// </param>
/// <returns type="Variant" />
},
qc: function(a) {
/// <summary>
/// Returns the current value of the document, range, or current selection for the given command. An alias for the "queryCommandValue" method.
/// </summary>
/// <param name="a" type="String">
/// Required. String that specifies a command identifier.
/// </param>
/// <returns type="Variant" />
},
getSelectedHTML: function() {
/// <summary>
/// Returns the HTML that is currently selected within the editor.
/// </summary>
/// <returns type="String" />
},
getSelection: function() {
/// <summary>
/// Returns the Browser Selection object that represents the currently selected region of the editor.
/// </summary>
/// <returns type="Object" />
},
getRange: function() {
/// <summary>
/// Returns the Browser Range object that represents the currently selected region of the editor. (This uses the "getSelection" method internally.)
/// </summary>
/// <returns type="Object" />
},
pasteHTML: function(html) {
/// <summary>
/// Pastes HTML text into the editor, replacing any currently selected text and HTML elements.
/// </summary>
/// <param name="html" type="String">
/// The HTML text to paste/insert.
/// </param>
},
cut: function() {
/// <summary>
/// Copies the current selection to the clipboard and then deletes it.
/// </summary>
},
copy: function() {
/// <summary>
/// Copies the current selection to the clipboard.
/// </summary>
},
paste: function() {
/// <summary>
/// Overwrites the contents of the clipboard on the current selection.
/// </summary>
},
bold: function() {
/// <summary>
/// Toggles the current selection between bold and nonbold.
/// </summary>
},
italic: function() {
/// <summary>
/// Toggles the current selection between italic and nonitalic.
/// </summary>
},
underline: function() {
/// <summary>
/// Toggles the current selection between underlined and not underlined.
/// </summary>
},
strikeThrough: function() {
/// <summary>
/// If there is a selection and all of the characters are already striked, the strikethrough will be removed. Otherwise, all selected characters will have a line drawn through them.
/// </summary>
},
image: function(url) {
/// <summary>
/// This command will insert an image (referenced by url) at the insertion point.
/// If no URL is specified, a prompt will be displayed to the user.
/// </summary>
/// <param name="url" type="String">
/// The URL to the Image to be inserted. If no URL is specified, a prompt will be shown.
/// </param>
},
removeFormat: function() {
/// <summary>
/// Removes the formatting tags from the current selection.
/// </summary>
},
link: function() {
/// <summary>
/// Inserts a hyperlink on the current selection, or displays a dialog box enabling the user to specify a URL to insert as a hyperlink on the current selection.
/// </summary>
},
unlink: function() {
/// <summary>
/// Removes any hyperlink from the current selection.
/// </summary>
},
orderedList: function() {
/// <summary>
/// Converts the text selection into an ordered list.
/// </summary>
},
unorderedList: function() {
/// <summary>
/// Converts the text selection into an unordered list.
/// </summary>
},
superscript: function() {
/// <summary>
/// If there is a selection and all of the characters are already superscripted, the superscript will be removed. Otherwise, all selected characters will be drawn slightly higher than normal text.
/// </summary>
},
subscript: function() {
/// <summary>
/// If there is a selection and all of the characters are already subscripted, the subscript will be removed. Otherwise, all selected characters will be drawn slightly lower than normal text.
/// </summary>
},
p: function() {
/// <summary>
/// Sets the current block format tag to <P>.
/// </summary>
},
h1: function() {
/// <summary>
/// Sets the current block format tag to <H1>.
/// </summary>
},
h2: function() {
/// <summary>
/// Sets the current block format tag to <H2>.
/// </summary>
},
h3: function() {
/// <summary>
/// Sets the current block format tag to <H3>.
/// </summary>
},
h4: function() {
/// <summary>
/// Sets the current block format tag to <H4>.
/// </summary>
},
h5: function() {
/// <summary>
/// Sets the current block format tag to <H5>.
/// </summary>
},
h6: function() {
/// <summary>
/// Sets the current block format tag to <H6>.
/// </summary>
},
heading: function(h) {
/// <summary>
/// Sets the current block format tag to <H?> tag.
/// Example: Calling jHtmlArea.heading(2) will be the same as calling jHtmlArea.h2()
/// </summary>
/// <param name="h" type="Number">
/// The Number of Header (<H?>) tag to format the current block with.
/// For Example: Passing a 2 or "2" will cause the current block to be formatted with a <H2> tag.
/// </param>
},
indent: function() {
/// <summary>
/// Indents the selection or insertion point.
/// </summary>
},
outdent: function() {
/// <summary>
/// Outdents the selection or insertion point.
/// </summary>
},
insertHorizontalRule: function() {
/// <summary>
/// Inserts a horizontal rule at the insertion point (deletes selection).
/// </summary>
},
justifyLeft: function() {
/// <summary>
/// Justifies the selection or insertion point to the left.
/// </summary>
},
justifyCenter: function() {
/// <summary>
/// Centers the selection or insertion point.
/// </summary>
},
justifyRight: function() {
/// <summary>
/// Right-justifies the selection or the insertion point.
/// </summary>
},
increaseFontSize: function() {
/// <summary>
/// Increases the Font Size around the selection or at the insertion point.
/// </summary>
},
decreaseFontSize: function() {
/// <summary>
/// Decreases the Font Size around the selection or at the insertion point.
/// </summary>
},
forecolor: function(c) {
/// <summary>
/// Changes a font color for the selection or at the insertion point. Requires a color value string to be passed in as a value argument.
/// </summary>
},
formatBlock: function(v) {
/// <summary>
/// Sets the current block format tag.
/// </summary>
},
showHTMLView: function() {
/// <summary>
/// Shows the HTML/Source View (TextArea DOM Element) within the Editor and hides the WYSIWYG interface.
/// </summary>
},
hideHTMLView: function() {
/// <summary>
/// Hides the HTML/Source View (TextArea DOM Element) within the Editor and displays the WYSIWYG interface.
/// </summary>
},
toggleHTMLView: function() {
/// <summary>
/// Toggles between HTML/Source View (TextArea DOM Element) and the WYSIWYG interface within the Editor.
/// </summary>
},
toHtmlString: function() {
/// <summary>
/// Returns the HTML text contained within the editor.
/// </summary>
/// <returns type="String" />
},
toString: function() {
/// <summary>
/// Return the Text contained within the editor, with all HTML tags removed.
/// </summary>
/// <returns type="String" />
},
updateTextArea: function() {
/// <summary>
/// Forces the TextArea DOM Element to by sync'd with the contents of the HTML WYSIWYG Editor.
/// </summary>
},
updateHtmlArea: function() {
/// <summary>
/// Forces the HTML WYSIWYG Editor to be sync'd with the contents of the TextArea DOM Element.
/// </summary>
}
};
jHtmlArea.fn.init.prototype = jHtmlArea.fn;
})(jQuery);
File diff suppressed because one or more lines are too long
@@ -1,189 +0,0 @@
/*
* jHtmlAreaColorPickerMenu 0.7.0 - A Color Picker Extension to jHtmlArea
* Part of the jHtmlArea Project
* Copyright (c) 2009 Chris Pietschmann
* http://jhtmlarea.codeplex.com
* Licensed under the Microsoft Reciprocal License (Ms-RL)
* http://jhtmlarea.codeplex.com/license
*/
(function($) {
if (jHtmlArea) {
var oldForecolor = jHtmlArea.fn.forecolor;
jHtmlArea.fn.forecolor = function(c) {
if (c) {
// If color is specified, then use the "default" method functionality
oldForecolor.call(this, c);
} else {
// If no color is specified, then display color picker ui
var that = this;
var rng = this.getRange();
jHtmlAreaColorPickerMenu($(".forecolor", this.toolbar), {
colorChosen: function(color) {
if ($.browser.msie) {
rng.execCommand("ForeColor", false, color);
} else {
that.forecolor(color);
}
}
});
}
};
}
var menu = window.jHtmlAreaColorPickerMenu = function(ownerElement, options) {
return new jHtmlAreaColorPickerMenu.fn.init(ownerElement, options);
};
menu.fn = menu.prototype = {
jhtmlareacolorpickermenu: "0.7.0",
init: function(ownerElement, options) {
var opts = $.extend({}, menu.defaultOptions, options);
var that = this;
var owner = this.owner = $(ownerElement);
var position = owner.position();
if (menu.instance) {
menu.instance.hide();
}
jHtmlAreaColorPickerMenu.instance = this;
var picker = this.picker = $("<div/>").css({
position: "absolute",
left: position.left + opts.offsetLeft,
top: position.top + owner.height() + opts.offsetTop,
"z-index": opts["z-index"]
}).addClass("jHtmlAreaColorPickerMenu");
for (var i = 0; i < opts.colors.length; i++) {
var c = opts.colors[i];
$("<div/>").css("background-color", c).appendTo(picker).click(
(function(color) {
return function() {
if (opts.colorChosen) {
opts.colorChosen.call(this, color);
}
that.hide();
};
})(c)
);
}
$("<div/>").html("<div></div>Automatic").addClass("automatic").appendTo(picker).click(
function() {
if (opts.colorChosen) {
opts.colorChosen.call(this, null);
}
that.hide();
}
);
var autoHide = false;
picker.appendTo(owner.parent()).
show().
mouseout(function() {
autoHide = true;
that.currentTimeout = window.setTimeout(function() { if (autoHide === true) { that.hide(); } }, 1000);
}).
mouseover(function() {
if (that.currentTimeout) {
window.clearTimeout(that.currentTimeout);
that.currentTimeout = null;
}
autoHide = false;
});
},
hide: function() {
this.picker.hide();
this.picker.remove();
}
};
menu.fn.init.prototype = menu.fn;
menu.defaultOptions = {
"z-index": 0,
offsetTop: 0,
offsetLeft: 0,
colors: [
"#ffffff",
"#cccccc",
"#c0c0c0",
"#999999",
"#666666",
"#333333",
"#000000",
"#ffcccc",
"#ff6666",
"#ff0000",
"#cc0000",
"#990000",
"#660000",
"#330000",
"#ffcc99",
"#ff9966",
"#ff9900",
"#ff6600",
"#cc6600",
"#993300",
"#663300",
"#ffff99",
"#ffff66",
"#ffcc66",
"#ffcc33",
"#cc9933",
"#996633",
"#663333",
"#ffffcc",
"#ffff33",
"#ffff00",
"#ffcc00",
"#999900",
"#666600",
"#333300",
"#99ff99",
"#66ff99",
"#33ff33",
"#33cc00",
"#009900",
"#006600",
"#003300",
"#99FFFF",
"#33FFFF",
"#66CCCC",
"#00CCCC",
"#339999",
"#336666",
"#003333",
"#CCFFFF",
"#66FFFF",
"#33CCFF",
"#3366FF",
"#3333FF",
"#000099",
"#000066",
"#CCCCFF",
"#9999FF",
"#6666CC",
"#6633FF",
"#6600CC",
"#333399",
"#330099",
"#FFCCFF",
"#FF99FF",
"#CC66CC",
"#CC33CC",
"#993399",
"#663366",
"#330033"
],
colorChosen: null
};
})(jQuery);
@@ -1,8 +0,0 @@
// jHtmlArea - http://jhtmlarea.codeplex.com - (c)2009 Chris Pietschmann
(function($){if(jHtmlArea){var oldForecolor=jHtmlArea.fn.forecolor;jHtmlArea.fn.forecolor=function(c){if(c){oldForecolor.call(this,c);}else{var that=this;var rng=this.getRange();jHtmlAreaColorPickerMenu($(".forecolor",this.toolbar),{colorChosen:function(color){if($.browser.msie){rng.execCommand("ForeColor",false,color);}else{that.forecolor(color);}}});}};}
var menu=window.jHtmlAreaColorPickerMenu=function(ownerElement,options){return new jHtmlAreaColorPickerMenu.fn.init(ownerElement,options);};menu.fn=menu.prototype={jhtmlareacolorpickermenu:"0.7.0",init:function(ownerElement,options){var opts=$.extend({},menu.defaultOptions,options);var that=this;var owner=this.owner=$(ownerElement);var position=owner.position();if(menu.instance){menu.instance.hide();}
jHtmlAreaColorPickerMenu.instance=this;var picker=this.picker=$("<div/>").css({position:"absolute",left:position.left+opts.offsetLeft,top:position.top+owner.height()+opts.offsetTop,"z-index":opts["z-index"]}).addClass("jHtmlAreaColorPickerMenu");for(var i=0;i<opts.colors.length;i++){var c=opts.colors[i];$("<div/>").css("background-color",c).appendTo(picker).click((function(color){return function(){if(opts.colorChosen){opts.colorChosen.call(this,color);}
that.hide();};})(c));}
$("<div/>").html("<div></div>Automatic").addClass("automatic").appendTo(picker).click(function(){if(opts.colorChosen){opts.colorChosen.call(this,null);}
that.hide();});var autoHide=false;picker.appendTo(owner.parent()).show().mouseout(function(){autoHide=true;that.currentTimeout=window.setTimeout(function(){if(autoHide===true){that.hide();}},1000);}).mouseover(function(){if(that.currentTimeout){window.clearTimeout(that.currentTimeout);that.currentTimeout=null;}
autoHide=false;});},hide:function(){this.picker.hide();this.picker.remove();}};menu.fn.init.prototype=menu.fn;menu.defaultOptions={"z-index":0,offsetTop:0,offsetLeft:0,colors:["#ffffff","#cccccc","#c0c0c0","#999999","#666666","#333333","#000000","#ffcccc","#ff6666","#ff0000","#cc0000","#990000","#660000","#330000","#ffcc99","#ff9966","#ff9900","#ff6600","#cc6600","#993300","#663300","#ffff99","#ffff66","#ffcc66","#ffcc33","#cc9933","#996633","#663333","#ffffcc","#ffff33","#ffff00","#ffcc00","#999900","#666600","#333300","#99ff99","#66ff99","#33ff33","#33cc00","#009900","#006600","#003300","#99FFFF","#33FFFF","#66CCCC","#00CCCC","#339999","#336666","#003333","#CCFFFF","#66FFFF","#33CCFF","#3366FF","#3333FF","#000099","#000066","#CCCCFF","#9999FF","#6666CC","#6633FF","#6600CC","#333399","#330099","#FFCCFF","#FF99FF","#CC66CC","#CC33CC","#993399","#663366","#330033"],colorChosen:null};})(jQuery);
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,6 +0,0 @@
div.jHtmlAreaColorPickerMenu {border: solid 1px #bbb; background-color: #ddd; width: 112px;}
div.jHtmlAreaColorPickerMenu div {float: left; margin: 2px; width: 12px; height: 14px;}
div.jHtmlAreaColorPickerMenu div:hover {margin: 0px; border: dotted 2px black;}
div.jHtmlAreaColorPickerMenu div.automatic { width: 104px; height: auto; padding: 2px;}
div.jHtmlAreaColorPickerMenu div.automatic div { margin: 2px; width: 12px; height: 14px; border: solid 1px black;}
@@ -1,6 +0,0 @@
body
{
background: #000;
color: #fff;
margin: 2px;
}
-48
View File
@@ -1,48 +0,0 @@
div.jHtmlArea { display: inline block; }
div.jHtmlArea div { padding: 0px; margin: 0px; }
div.jHtmlArea .ToolBar { }
div.jHtmlArea .ToolBar ul { border: solid 1px #ccc; margin: 1px; padding: 1px; float: left; background: #fff url(jHtmlArea_Toolbar_Group_BG.png) repeat-x;}
div.jHtmlArea .ToolBar ul li { list-style-type: none; float: left; border: none; padding: 1px; margin: 1px; }
div.jHtmlArea .ToolBar ul li:hover { border: solid 1px #ccc; background: #ddd url(jHtmlArea_Toolbar_Group__Btn_Select_BG.png); padding: 0; }
div.jHtmlArea .ToolBar ul li a { display: block; width: 16px; height: 16px; background: url(jHtmlArea.png) no-repeat -16px -500px; border: none; cursor: pointer; padding: 0px; }
div.jHtmlArea .ToolBar ul li a.highlighted { border: solid 1px #aaa; background-color: #bbb; padding: 0; }
div.jHtmlArea .ToolBar ul li.separator {height: 16px; margin: 0 2px 0 3px; border-left: 1px solid #ccc;}
div.jHtmlArea .ToolBar ul li.separator:hover { padding: 1px; background-color: #fff; border-top:none; border-bottom:none; border-right:none;}
div.jHtmlArea .ToolBar ul li a:hover { }
div.jHtmlArea .ToolBar ul li a.bold { background-position: 0 0; }
div.jHtmlArea .ToolBar ul li a.italic { background-position: -16px 0; }
div.jHtmlArea .ToolBar ul li a.underline { background-position: -32px 0; }
div.jHtmlArea .ToolBar ul li a.strikethrough { background-position: -48px 0; }
div.jHtmlArea .ToolBar ul li a.link { background-position: -64px 0; }
div.jHtmlArea .ToolBar ul li a.unlink { background-position: -80px 0; }
div.jHtmlArea .ToolBar ul li a.orderedlist { background-position: -96px 0; }
div.jHtmlArea .ToolBar ul li a.unorderedlist { background-position: -112px 0; }
div.jHtmlArea .ToolBar ul li a.image { background-position: -128px 0; }
div.jHtmlArea .ToolBar ul li a.cut { background-position: -144px 0; }
div.jHtmlArea .ToolBar ul li a.copy { background-position: -160px 0; }
div.jHtmlArea .ToolBar ul li a.paste { background-position: -176px 0; }
div.jHtmlArea .ToolBar ul li a.html { background-position: -192px 0; opacity:0.6; filter:alpha(opacity=60);}
div.jHtmlArea .ToolBar ul li a.html.highlighted { opacity:1.0; filter:alpha(opacity=100);}
div.jHtmlArea .ToolBar ul li a.h1 { background-position: 0 -16px;}
div.jHtmlArea .ToolBar ul li a.h2 { background-position: -16px -16px;}
div.jHtmlArea .ToolBar ul li a.h3 { background-position: -32px -16px;}
div.jHtmlArea .ToolBar ul li a.h4 { background-position: -48px -16px;}
div.jHtmlArea .ToolBar ul li a.h5 { background-position: -64px -16px;}
div.jHtmlArea .ToolBar ul li a.h6 { background-position: -80px -16px;}
div.jHtmlArea .ToolBar ul li a.subscript { background-position: -96px -16px;}
div.jHtmlArea .ToolBar ul li a.superscript { background-position: -112px -16px;}
div.jHtmlArea .ToolBar ul li a.indent { background-position: -128px -16px;}
div.jHtmlArea .ToolBar ul li a.outdent { background-position: -144px -16px;}
div.jHtmlArea .ToolBar ul li a.horizontalrule { background-position: -160px -16px;}
div.jHtmlArea .ToolBar ul li a.p { background-position: -176px -16px;}
div.jHtmlArea .ToolBar ul li a.justifyleft { background-position: 0 -32px;}
div.jHtmlArea .ToolBar ul li a.justifycenter { background-position: -16px -32px;}
div.jHtmlArea .ToolBar ul li a.justifyright { background-position: -32px -32px;}
div.jHtmlArea .ToolBar ul li a.increasefontsize { background-position: -48px -32px;}
div.jHtmlArea .ToolBar ul li a.decreasefontsize { background-position: -64px -32px;}
div.jHtmlArea .ToolBar ul li a.forecolor { background-position: -80px -32px;}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 964 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 942 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

@@ -1,406 +0,0 @@
/*
* jQuery UI CSS Framework
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
*/
/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
.ui-helper-clearfix { display: inline-block; }
/* required comment for clearfix to work in Opera \*/
* html .ui-helper-clearfix { height:1%; }
.ui-helper-clearfix { display:block; }
/* end clearfix */
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
/* Misc visuals
----------------------------------*/
/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
/*
* jQuery UI CSS Framework
* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
*/
/* Component containers
----------------------------------*/
.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
.ui-widget-content a { color: #333333; }
.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
.ui-widget-header a { color: #ffffff; }
/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; outline: none; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; outline: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; outline: none; }
.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; outline: none; }
.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; outline: none; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; outline: none; text-decoration: none; }
/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
.ui-state-error a, .ui-widget-content .ui-state-error a { color: #ffffff; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #ffffff; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
/* Icons
----------------------------------*/
/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-off { background-position: -96px -144px; }
.ui-icon-radio-on { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
/* Misc visuals
----------------------------------*/
/* Corner radius */
.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; }
.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; }
/* Overlays */
.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; }/* Accordion
----------------------------------*/
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
.ui-accordion .ui-accordion-li-fix { display: inline; }
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
----------------------------------*/
.ui-datepicker { width: 17em; padding: .2em .2em 0; }
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
.ui-datepicker .ui-datepicker-prev { left:2px; }
.ui-datepicker .ui-datepicker-next { right:2px; }
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year { width: 49%;}
.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
.ui-datepicker td { border: 0; padding: 1px; }
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi { width:auto; }
.ui-datepicker-multi .ui-datepicker-group { float:left; }
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
.ui-datepicker-row-break { clear:both; width:100%; }
/* RTL support */
.ui-datepicker-rtl { direction: rtl; }
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
.ui-datepicker-cover {
display: none; /*sorry for IE5*/
display/**/: block; /*sorry for IE5*/
position: absolute; /*must have*/
z-index: -1; /*must have*/
filter: mask(); /*must have*/
top: -4px; /*must have*/
left: -4px; /*must have*/
width: 200px; /*must have*/
height: 200px; /*must have*/
}/* Dialog
----------------------------------*/
.ui-dialog { position: relative; padding: .2em; width: 300px; }
.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative; }
.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; }
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
/* Progressbar
----------------------------------*/
.ui-progressbar { height:2em; text-align: left; }
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
----------------------------------*/
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider
----------------------------------*/
.ui-slider { position: relative; text-align: left; }
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
.ui-slider-horizontal { height: .8em; }
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
.ui-slider-vertical { width: .8em; height: 100px; }
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
----------------------------------*/
.ui-tabs { padding: .2em; zoom: 1; }
.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
.ui-tabs .ui-tabs-hide { display: none !important; }
+3
View File
@@ -474,6 +474,9 @@
<code>TORON</code>
<code>TORNO</code>
<code>TR</code>
<temple name="Trujillo, Peru">
<code>TRUJI</code>
</temple>
</temple>
<temple name="Tuxtla Gutierrez, Mexico">
<code>TGUTI</code>
+35 -35
View File
@@ -13,8 +13,8 @@ gramps(1) @VERSION@ gramps(1)
**SYNOPSIS**
**gramps** [**-?** | **--help**] [**--usage**] [**--version**]
[**-l**] [**-L**] [**-u** | **--force-unlock**] [**-O** | **--open=** *DATABASE*
[**-f** | **--format=** *FORMAT*]] [**-i** | **--import=** *FILE*
[**-f** | **--format=** *FORMAT*]] [**-i** | **--import=** *...*]
[**-f** | **--format=** *FORMAT*] [**-i** | **--import=** *FILE*
[**-f** | **--format=** *FORMAT*]] [**--remove=** *FAMILY_TREE_PATTERN*]
[**-e** | **--export=** *FILE* [**-f** | **--format=** *FORMAT*]]
[**-a** | **--action=** *ACTION*] [*-p* | **--options=** *OPTION
STRING*]] [*FILE*] [**--version**]
@@ -50,23 +50,23 @@ gramps(1) @VERSION@ gramps(1)
Formats available for export are **gramps-xml** (guessed if *FILE*
ends with **.gramps** ), **gedcom** (guessed if *FILE* ends with
**.ged** ), or any file export available through the Gramps plugin
**.ged** ), or any file export available through the Gramps plugin
system.
Formats available for import are **gramps-xml** , **gedcom** ,
**gramps-pkg** (guessed if *FILE* ends with **.gpkg** ),
and **geneweb** (guessed if *FILE* ends with **.gw** ).
Formats available for export are **gramps-xml** , **gedcom** ,
**gramps-pkg** , **wft** (guessed if *FILE* ends with **.wft** ),
Formats available for export are **gramps-xml** , **gedcom** ,
**gramps-pkg** , **wft** (guessed if *FILE* ends with **.wft** ),
**geneweb**.
**-l**
**-l**
Print a list of known family trees.
**-L**
**-L**
Print a detailed list of known family trees.
@@ -88,16 +88,16 @@ gramps(1) @VERSION@ gramps(1)
When more than one input file is given, each has to be preceded
by **-i** flag. The files are imported in the specified order, i.e.
**-i** *FILE1* **-i** *FILE2* and **-i** *FILE2* **-i** *FILE1*
**-i** *FILE1* **-i** *FILE2* and **-i** *FILE2* **-i** *FILE1*
might produce different gramps IDs in the resulting database.
**-e** , **--export=** *FICHIER*
Export data into *FILE* . For **gramps-xml** , **gedcom**
, **wft** , **gramps-pkg** , et **geneweb** , the *FILE* is the
Export data into *FILE* . For **gramps-xml** , **gedcom**
, **wft** , **gramps-pkg** , et **geneweb** , the *FILE* is the
name of the resulting file.
When more than one output file is given, each has to be preceded
When more than one output file is given, each has to be preceded
by **-e** flag. The files are written one by one, in the specified order.
@@ -165,7 +165,7 @@ gramps(1) @VERSION@ gramps(1)
With or without the **-O** flag, there could be multiple imports, exports,
and actions specified further on the command line by using **-i** ,
and actions specified further on the command line by using **-i** ,
**-e** , and **-a** flags.
@@ -194,46 +194,46 @@ gramps(1) @VERSION@ gramps(1)
**EXAMPLES**
To open an existing family tree and import an xml file into it, one
may type:
**gramps -O** *'My Family Tree'* **-i** *~/db3.gramps*
The above changes the opened family tree, to do the same, but import
both in a temporary family tree and start an interactive session, one
may type:
**gramps -i** *'My Family Tree'* **-i** *~/db3.gramps*
To import four databases (whose formats can be determined from their
names) and then check the resulting database for errors, one may type:
**gramps -i** *file1.ged* **-i** *file2.tgz* **-i** *~/db3.gramps*
**gramps -i** *file1.ged* **-i** *file2.tgz* **-i** *~/db3.gramps*
**-i** *file4.wft* **-a** *check*
To explicitly specify the formats in the above example, append file
names with appropriate **-f** options:
**gramps -i** *file1.ged* **-f** *gedcom* **-i** *file2.tgz* **-f**
**gramps -i** *file1.ged* **-f** *gedcom* **-i** *file2.tgz* **-f**
*gramps-pkg* **-i** *~/db3.gramps* **-f** *gramps-xml* **-i** *file4.wft*
**-f** *wft* **-a** *check*
To record the database resulting from all imports, supply **-e** flag (use
**-f** if the filename does not allow gramps to guess the format):
**gramps -i** *file1.ged* **-i** *file2.tgz* **-e** *~/new-package*
**-f** *gramps-pkg*
To import three databases and start interactive gramps session with the
result:
**gramps -i** *file1.ged* **-i** *file2.tgz* **-i** *~/db3.gramps*
To run the Verify tool from the commandline and output the result to
stdout:
**gramps -O** *'My Family Tree'* **-a** *tool* **-p name=** *verify*
Finally, to start normal interactive session type:
**gramps**
@@ -257,20 +257,20 @@ gramps(1) @VERSION@ gramps(1)
modification of the main program.
In addition to generating direct printer output, report generators also
target other systems, such as *LibreOffice.org* , *AbiWord* , *HTML*,
target other systems, such as *LibreOffice.org* , *AbiWord* , *HTML*,
or *LaTeX* to allow the users to modify the format to suit their needs.
**KNOWN BUGS AND LIMITATIONS**
**FILES**
*${PREFIX}/bin/gramps*
*${PREFIX}/lib/python/dist-packages/gramps/*
*${PREFIX}/lib/python3/dist-packages/gramps/*
*${PREFIX}/share/*
*${HOME}/.gramps*
@@ -290,8 +290,8 @@ gramps(1) @VERSION@ gramps(1)
The user documentation is available through standard web browser
in the form of Gramps Manual.
The developer documentation can be found on the
http://www.gramps-project.org/wiki/index.php?title=Portal:Developers
The developer documentation can be found on the
http://www.gramps-project.org/wiki/index.php?title=Portal:Developers
portal.
+31 -32
View File
@@ -13,11 +13,10 @@ gramps(1) @VERSION@ gramps(1)
**SYNOPSIS**
**gramps** [**-?** | **--help**] [**--usage**] [**--version**]
[**-l**] [**-L**] [**-u** | **--force-unlock**] [**-O** | **--open=** *BASE_DE_DONNEES*
[**-f** | **--format=** *FORMAT*]] [**-i** | **--import=** *FILE*
[**-f** | **--format=** *FORMAT*]] [**-i** | **--import=** *...*]
[**-e** | **--export=** *FICHIER* [**-f** | **--format=** *FORMAT*]]
[**-a** | **--action=** *ACTION*] [*-p* | **--options=** *CHAÎNE
[**-l**] [**-L**] [**-u** | **--force-unlock**] [**-O** | **--open=** *BASE_DE_DONNEES*]
[**-f** | **--format=** *FORMAT*] [**-i** | **--import=** *FICHIER*]
[**-e** | **--export=** *FICHIER*] [**--remove=** *FAMILY_TREE_PATTERN*]
[**-a** | **--action=** *ACTION* [*-p* | **--options=** *CHAÎNE
OPTION*]] [*FICHIER*] [**--version**]
@@ -61,7 +60,7 @@ gramps(1) @VERSION@ gramps(1)
**geneweb** .
**-l**
**-l**
Imprime une liste des arbres familiaux disponibles.
@@ -92,11 +91,11 @@ gramps(1) @VERSION@ gramps(1)
**-e** , **--export=** *FICHIER*
Exporter des données dans un *FICHIER* . Pour les fichiers **gramps-xml**
, **gedcom** , **wft** , **gramps-pkg** , et **geneweb** , le
Exporter des données dans un *FICHIER* . Pour les fichiers **gramps-xml**
, **gedcom** , **wft** , **gramps-pkg** , et **geneweb** , le
*FICHIER* est le nom du fichier de sortie.
Quand plus d'un fichier doit être exporté, chacun doit être
Quand plus d'un fichier doit être exporté, chacun doit être
précédé par la commande **-e** . Ces fichiers sont importés dans le
même ordre.
@@ -121,7 +120,7 @@ gramps(1) @VERSION@ gramps(1)
**name=name**
Cette option est obligatoire, elle détermine quel rapport ou
outil sera utilisé. Si le name saisi ne correspond à aucun
outil sera utilisé. Si le name saisi ne correspond à aucun
module disponible, un message d'erreur sera ajouté.
**show=all**
@@ -184,54 +183,54 @@ gramps(1) @VERSION@ gramps(1)
Les erreurs rencontrées lors d'importation, d'exportation, ou d'action, seront
mémorisées en *stdout* (si elles sont le fait de la manipulation par
gramps) ou en *stderr* (si elles ne sont pas le fait d'une manipulation).
Utilisez les shell de redirection de *stdout* et *stderr* pour sauver
Utilisez les shell de redirection de *stdout* et *stderr* pour sauver
les messages et les erreurs dans les fichiers.
**EXEMPLES**
Pour ouvrir un arbre familial et y importer un fichier XML, on peut
saisir:
**gramps -O** *'Mon Arbre Familial'* **-i** *~/db3.gramps*
Ceci ouvre un arbre familial, pour faire la même chose, mais importer
dans un arbre familial temporaire et démarrer une session interactive,
on peut saisir :
**gramps -i** *'Mon Arbre Familial'* **-i** *~/db3.gramps*
Lecture de quatre bases de données dont les formats peuvent être
devinés d'après les noms, puis vérification des données:
**gramps -i** *file1.ged* **-i** *file2.tgz* **-i** *~/db3.gramps*
**gramps -i** *file1.ged* **-i** *file2.tgz* **-i** *~/db3.gramps*
**-i** *file4.wft* **-a** *check*
Si vous voulez préciser lesformats de fichiers dans l'exemple ci-
dessus, complétez les noms de fichiers par les options -f appropriées:
**gramps -i** *file1.ged* **-f** *gedcom* **-i** *file2.tgz* **-f**
**gramps -i** *file1.ged* **-f** *gedcom* **-i** *file2.tgz* **-f**
*gramps-pkg* **-i** *~/db3.gramps* **-f** *gramps-xml* **-i** *file4.wft*
**-f** *wft* **-a** *check*
Pour enregistrer le résultat des lectures, donnez l'option **-e**
Pour enregistrer le résultat des lectures, donnez l'option **-e**
(utiliser -f si le nom de fichier ne permet pas à gramps de deviner le
format):
**gramps -i** *file1.ged* **-i** *file2.tgz* **-e** *~/new-package*
**-f** *gramps-pkg*
Pour lire trois ensembles de données puis lancer une session
Pour lire trois ensembles de données puis lancer une session
interactive de gramps sur le tout :
**gramps -i** *file1.ged* **-i** *file2.tgz* **-i** *~/db3.gramps*
Pour lancer l'outil de vérification de la base de données depuis la
ligne de commande et obtenir le résultat :
**gramps -O** *'My Family Tree'* **-a** *tool* **-p name=** *verify*
Enfin, pour lancer une session interactive normale, entrer :
Enfin, pour lancer une session interactive normale, entrer :
**gramps**
@@ -265,11 +264,11 @@ gramps(1) @VERSION@ gramps(1)
**FICHIERS**
*${PREFIX}/bin/gramps*
*${PREFIX}/lib/python/dist-packages/gramps/*
*${PREFIX}/lib/python3/dist-packages/gramps/*
*${PREFIX}/share/*
*${HOME}/.gramps*
+14 -20
View File
@@ -1,6 +1,8 @@
.TH "GRAMPS" "1" "09 March 2015" "4.2" "Gramps"
.\" Man page generated from reStructuredText.
.
.TH FRENCH "" "" ""
.SH NAME
gramps \- Gramps Documentation
French \-
.
.nr rst2man-indent-level 0
.
@@ -28,8 +30,6 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.\" Man page generated from reStructeredText.
.
.sp
gramps(1) @VERSION@ gramps(1)
.INDENT 0.0
@@ -42,11 +42,10 @@ données généalogiques)
.TP
.B \fBSYNOPSIS\fP
\fBgramps\fP [\fB\-?\fP | \fB\-\-help\fP] [\fB\-\-usage\fP] [\fB\-\-version\fP]
[\fB\-l\fP] [\fB\-L\fP] [\fB\-u\fP | \fB\-\-force\-unlock\fP] [\fB\-O\fP | \fB\-\-open=\fP \fIBASE_DE_DONNEES\fP
[\fB\-f\fP | \fB\-\-format=\fP \fIFORMAT\fP]] [\fB\-i\fP | \fB\-\-import=\fP \fIFILE\fP
[\fB\-f\fP | \fB\-\-format=\fP \fIFORMAT\fP]] [\fB\-i\fP | \fB\-\-import=\fP \fI...\fP]
[\fB\-e\fP | \fB\-\-export=\fP \fIFICHIER\fP [\fB\-f\fP | \fB\-\-format=\fP \fIFORMAT\fP]]
[\fB\-a\fP | \fB\-\-action=\fP \fIACTION\fP] [\fI\-p\fP | \fB\-\-options=\fP \fICHAÎNE
[\fB\-l\fP] [\fB\-L\fP] [\fB\-u\fP | \fB\-\-force\-unlock\fP] [\fB\-O\fP | \fB\-\-open=\fP \fIBASE_DE_DONNEES\fP]
[\fB\-f\fP | \fB\-\-format=\fP \fIFORMAT\fP] [\fB\-i\fP | \fB\-\-import=\fP \fIFICHIER\fP]
[\fB\-e\fP | \fB\-\-export=\fP \fIFICHIER\fP] [\fB\-\-remove=\fP \fIFAMILY_TREE_PATTERN\fP]
[\fB\-a\fP | \fB\-\-action=\fP \fIACTION\fP [\fI\-p\fP | \fB\-\-options=\fP \fICHAÎNE
OPTION\fP]] [\fIFICHIER\fP] [\fB\-\-version\fP]
.TP
.B \fBDESCRIPTION\fP
@@ -76,16 +75,16 @@ Le format spécifique du \fIFICHIER\fP est précédé par les arguments
alors le format sera celui de l\(aqextension ou du type\-MIME.
.sp
Les formats de sortie disponibles sont \fBgramps\-xml\fP (deviné si
\fIFICHIER\fP se termine par \fB.gramps\fP ), et \fBgedcom\fP (deviné si \fIFICHIER\fP se
termine par \fB.ged\fP ), ou tout autre fichier d\(aqexportation
\fIFICHIER\fP se termine par \fB\&.gramps\fP ), et \fBgedcom\fP (deviné si \fIFICHIER\fP se
termine par \fB\&.ged\fP ), ou tout autre fichier d\(aqexportation
disponible dans le système de plugin Gramps.
.sp
Les formats disponibles pour l\(aqimportation sont \fBgrdb\fP ,
\fBgramps\-xml\fP , \fBgedcom\fP , \fBgramps\-pkg\fP (deviné si \fIFICHIER\fP se termine par
\fB.gpkg\fP ), et \fBgeneweb\fP (deviné si \fIFICHIER\fP se termine par \fB.gw\fP ).
\fB\&.gpkg\fP ), et \fBgeneweb\fP (deviné si \fIFICHIER\fP se termine par \fB\&.gw\fP ).
.sp
Les formats disponibles pour l\(aqexportation sont \fBgramps\-xml\fP , \fBged
com\fP , \fBgramps\-pkg\fP , \fBwft\fP (deviné si \fIFICHIER\fP se termine par \fB.wft\fP ),
com\fP , \fBgramps\-pkg\fP , \fBwft\fP (deviné si \fIFICHIER\fP se termine par \fB\&.wft\fP ),
\fBgeneweb\fP .
.TP
.B \fB\-l\fP
@@ -193,7 +192,7 @@ fenêtre et demarrera avec une base vide, puisqu\(aqil n\(aqy a pas données.
.sp
Si aucune option \fB\-e\fP ou \fB\-a\fP n\(aqest donnée, gramps lancera sa propre
fenêtre et démarrera avec la base de données issue de tout les imports.
Cette base sera \fBimport_db.grdb\fP dans le répertoire \fB~/.gramps/import\fP.
Cette base sera \fBimport_db.grdb\fP dans le répertoire \fB~/.gramps/import\fP\&.
.sp
Les erreurs rencontrées lors d\(aqimportation, d\(aqexportation, ou d\(aqaction, seront
mémorisées en \fIstdout\fP (si elles sont le fait de la manipulation par
@@ -302,7 +301,7 @@ besoins
.INDENT 3.5
\fI${PREFIX}/bin/gramps\fP
.sp
\fI${PREFIX}/lib/python/dist\-packages/gramps/\fP
\fI${PREFIX}/lib/python3/dist\-packages/gramps/\fP
.sp
\fI${PREFIX}/share/\fP
.sp
@@ -334,10 +333,5 @@ La documentation pour développeur est disponible sur le site
.UNINDENT
.sp
gramps(1) @VERSION@ gramps(1)
.SH AUTHOR
Jerome Rapinat
.SH COPYRIGHT
2015, Gramps project
.\" Generated by docutils manpage writer.
.\"
.
+317 -314
View File
@@ -1,332 +1,335 @@
.TH gramps 1 "@VERSION@" "December 2012" "@VERSION@"
.\" Man page generated from reStructuredText.
.
.TH ENGLISH "" "" ""
.SH NAME
gramps \- Genealogical Research and Analysis Management Programming System.
.SH SYNOPSIS
.B gramps
.RB [ \-?|\-\^\-help ]
.RB [ \-\^\-usage ]
.RB [ \-\^\-version ]
.RB [ \-l ]
.RB [ \-u|\-\^\-force-unlock ]
.RB [ \-O|\-\^\-open=
.IR DATABASE
.RB [ \-f|\-\^\-format=
.IR FORMAT ]]
.RB [ \-i|\-\^\-import=
.IR FILE
.RB [ \-f|\-\^\-format=
.IR FORMAT ]]
.RB [ \-i|\-\^\-import=
.IR ... ]
.RB [ \-e|\-\^\-export=
.IR FILE
.RB [ \-f|\-\^\-format=
.IR FORMAT ]]
.RB [ \-a|\-\^\-action=
.IR ACTION ]
.RB [ \-p|\-\^\-options=
.IR OPTIONSTRING ]]
.RB [
.IR FILE
.RB ]
.if 0 .RB [ bonobo\ options ]
.if 0 .RB [ sound\ options ]
.RB [ \-\-version ]
.SH DESCRIPTION
.PP
\fIGramps\fP is a Free/OpenSource genealogy program. It is written in Python,
using the GTK+/GNOME interface.
Gramps should seem familiar to anyone who has used other genealogy programs
before such as \fIFamily Tree Maker (TM)\fR, \fIPersonal Ancestral
Files (TM)\fR, or the GNU Geneweb.
It supports importing of the ever popular GEDCOM format which is used world
wide by almost all other genealogy software.
.SH OPTIONS
.TP
.BI gramps " FILE"
When \fIFILE\fR is given (without any flags) as a family tree name or as
a family tree database directory, then it is opened and an interactive
session is started. If FILE is a file format understood by Gramps, an empty
family tree is created whose name is based on the \fIFILE\fP name
and the data is imported into it. The rest of the
options is ignored. This way of launching is suitable for using gramps
as a handler for genealogical data in e.g. web browsers. This invocation
can accept any data format native to gramps, see below.
.br
.TP
.BI \-f,\-\^\-format= " FORMAT"
Explicitly specify format of \fIFILE\fR given by preceding
.ig
\fB\-O\fR,
English \-
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
\fB\-i\fR, or
\fB\-e\fR option. If the \fB\-f\fR option is not given for any \fIFILE\fR,
the format of that file is guessed according to its extension or MIME-type.
.br
Formats
available for export are \fBgramps\-xml\fR (guessed if \fIFILE\fR ends with
\fB.gramps\fR), \fBgedcom\fR (guessed if \fIFILE\fR ends with \fB.ged\fR), or
any file export available through the Gramps plugin system.
.br
Formats
available for import are \fBgrdb\fR, \fBgramps\-xml\fR, \fBgedcom\fR,
\fBgramps\-pkg\fR (guessed if \fIFILE\fR ends with \fB.gpkg\fR), and
\fBgeneweb\fR (guessed if \fIFILE\fR ends with \fB.gw\fR).
.br
Formats available for export are
.ig
\fBgrdb\fR,
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
\fBgramps\-xml\fR, \fBgedcom\fR,
\fBgramps\-pkg\fR, \fBwft\fR (guessed if \fIFILE\fR ends with \fB.wft\fR),
\fBgeneweb\fR, and \fBiso\fR (never guessed, always specify with
\fB\-f\fR option).
.TP
.BI \-l
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.sp
gramps(1) @VERSION@ gramps(1)
.INDENT 0.0
.TP
.B \fBNAME\fP
gramps \- Genealogical Research and Analysis Management Programming Sys
tem.
.TP
.B \fBSYNOPSIS\fP
\fBgramps\fP [\fB\-?\fP | \fB\-\-help\fP] [\fB\-\-usage\fP] [\fB\-\-version\fP]
[\fB\-l\fP] [\fB\-L\fP] [\fB\-u\fP | \fB\-\-force\-unlock\fP] [\fB\-O\fP | \fB\-\-open=\fP \fIDATABASE\fP
[\fB\-f\fP | \fB\-\-format=\fP \fIFORMAT\fP] [\fB\-i\fP | \fB\-\-import=\fP \fIFILE\fP
[\fB\-f\fP | \fB\-\-format=\fP \fIFORMAT\fP]] [\fB\-\-remove=\fP \fIFAMILY_TREE_PATTERN\fP]
[\fB\-e\fP | \fB\-\-export=\fP \fIFILE\fP [\fB\-f\fP | \fB\-\-format=\fP \fIFORMAT\fP]]
[\fB\-a\fP | \fB\-\-action=\fP \fIACTION\fP] [\fI\-p\fP | \fB\-\-options=\fP \fIOPTION
STRING\fP]] [\fIFILE\fP] [\fB\-\-version\fP]
.TP
.B \fBDESCRIPTION\fP
Gramps is a Free/OpenSource genealogy program. It is written in Python,
using the GTK+/GNOME interface. Gramps should seem familiar to anyone
who has used other genealogy programs before such as Family Tree Maker
(TM), Personal Ancestral Files (TM), or the GNU Geneweb. It supports
importing of the ever popular GEDCOM format which is used world wide by
almost all other genealogy software.
.TP
.B \fBOPTIONS\fP
.INDENT 7.0
.TP
.B \fBgramps\fP \fIFILE\fP
When \fIFILE\fP is given (without any flags) as a family tree name or
as a family tree database directory, then it is opened and an
interactive session is started. If \fIFILE\fP is a file format under
stood by Gramps, an empty family tree is created whose name is
based on the \fIFILE\fP name and the data is imported into it. The
rest of the options is ignored. This way of launching is suit
able for using gramps as a handler for genealogical data in e.g.
web browsers. This invocation can accept any data format native
to gramps, see below.
.TP
.B \fB\-f\fP , \fB\-\-format=\fP \fIFORMAT\fP
Explicitly specify format of \fIFILE\fP given by preceding \fB\-i\fP ,
or \fB\-e\fP option. If the \fB\-f\fP option is not given for any
\fIFILE\fP , the format of that file is guessed according to its extension
or MIME\-type.
.sp
Formats available for export are \fBgramps\-xml\fP (guessed if \fIFILE\fP
ends with \fB\&.gramps\fP ), \fBgedcom\fP (guessed if \fIFILE\fP ends with
\fB\&.ged\fP ), or any file export available through the Gramps plugin
system.
.sp
Formats available for import are \fBgramps\-xml\fP , \fBgedcom\fP ,
\fBgramps\-pkg\fP (guessed if \fIFILE\fP ends with \fB\&.gpkg\fP ),
and \fBgeneweb\fP (guessed if \fIFILE\fP ends with \fB\&.gw\fP ).
.sp
Formats available for export are \fBgramps\-xml\fP , \fBgedcom\fP ,
\fBgramps\-pkg\fP , \fBwft\fP (guessed if \fIFILE\fP ends with \fB\&.wft\fP ),
\fBgeneweb\fP\&.
.TP
.B \fB\-l\fP
Print a list of known family trees.
.TP
.BI \-u,\-\^\-force-unlock
.B \fB\-L\fP
Print a detailed list of known family trees.
.TP
.B \fB\-u\fP , \fB\-\-force\-unlock\fP
Unlock a locked database.
.TP
.BI \-O,\-\^\-open= " DATABASE"
Open \fIDATABASE\fR which must be an existing database directory or existing family tree name.
If no action, import or export options are given on the command line then an interactive session is started using that database.
.TP
.BI \-i,\-\^\-import= " FILE"
Import data from \fIFILE\fR. If you haven't specified a database, then an empty database is created for you called Family Tree x (where x is an incrementing number).
.br
When more than one input file is given, each has to be preceded by \fB\-i\fR
flag. The files are imported in the specified order,
i.e. \fB\-i\fR \fIFILE1\fR \fB\-i\fR \fIFILE2\fR
and \fB\-i\fR \fIFILE2\fR \fB\-i\fR \fIFILE1\fR might produce different
gramps IDs in the resulting database.
.TP
.BI \-e,\-\^\-export= " FILE"
Export data into \fIFILE\fR. For \fBgramps\-xml\fR, \fBgedcom\fR,
\fBwft\fR, \fBgramps\-pkg\fR, and \fBgeneweb\fR, the \fIFILE\fR is
the name of the resulting file.
.br
When more than one output file is given, each has to be preceded
by \fB\-e\fR flag. The files are written one by one, in the specified order.
.TP
.BI \-a,\-\^\-action= " ACTION"
Perform \fIACTION\fR on the imported data. This is done after all imports
are successfully completed. Currently available actions are
\fBsummary\fR (same as Reports->View->Summary),
\fBcheck\fR (same as Tools->Database Processing->Check and Repair),
\fBreport\fR (generates report), and
\fBtool\fR (runs a plugin tool).
Both \fBreport\fR and \fBtool\fR need the \fIOPTIONSTRING\fR supplied by the
\fB\-p\fR flag).
.br
The \fIOPTIONSTRING\fR should satisfy the following conditions:
.br
It must not contain any spaces.
If some arguments need to include spaces, the string should
be enclosed with quotation marks, i.e., follow the shell syntax.
Option string is a list of pairs with name and value (separated by the
equality sign). The name and value pairs must be separated by commas.
.br
Most of the report or tools options are specific for each report or tool.
However, there are some common options.
.BI "name=name"
.br
This mandatory option determines which report or tool will be run.
If the supplied \fIname\fR does not correspond to any available report or
tool, an error message will be printed followed by the list of
available reports or tools (depending on the \fIACTION\fR).
.BI "show=all"
.br
This will produce the list of names for all options available for a given
report or tool.
.BI "show="optionname
.br
This will print the description of
the functionality supplied by \fIoptionname\fR, as well as what are the
acceptable types and values for this option.
.br
Use the above options to find out
everything about a given report.
.LP
When more than one output action is given, each has to be preceded
by \fB\-a\fR flag. The actions are performed one by one, in the specified order.
.TP
.BI \-d,\-\^\-debug= " LOGGER_NAME"
Enables debug logs for development and testing. Look at the source code for details
.TP
.BI \-\^\-version
.B \fB\-O\fP , \fB\-\-open=\fP \fIDATABASE\fP
Open \fIDATABASE\fP which must be an existing database directory or
existing family tree name. If no action, import or export
options are given on the command line then an interactive ses
sion is started using that database.
.TP
.B \fB\-i\fP , \fB\-\-import=\fP \fIFILE\fP
Import data from \fIFILE\fP . If you haven\(aqt specified a database, then
an empty database is created for you called Family Tree x
(where x is an incrementing number).
.sp
When more than one input file is given, each has to be preceded
by \fB\-i\fP flag. The files are imported in the specified order, i.e.
\fB\-i\fP \fIFILE1\fP \fB\-i\fP \fIFILE2\fP and \fB\-i\fP \fIFILE2\fP \fB\-i\fP \fIFILE1\fP
might produce different gramps IDs in the resulting database.
.TP
.B \fB\-e\fP , \fB\-\-export=\fP \fIFICHIER\fP
Export data into \fIFILE\fP . For \fBgramps\-xml\fP , \fBgedcom\fP
, \fBwft\fP , \fBgramps\-pkg\fP , et \fBgeneweb\fP , the \fIFILE\fP is the
name of the resulting file.
.sp
When more than one output file is given, each has to be preceded
by \fB\-e\fP flag. The files are written one by one, in the specified order.
.TP
.B \fB\-a\fP , \fB\-\-action=\fP \fIACTION\fP
Perform \fIACTION\fP on the imported data. This is done after all
imports are successfully completed. Currently available actions
are \fBsummary\fP (same as Reports\->View\->Summary), \fBcheck\fP (same as
Tools\->Database Processing\->Check and Repair), \fBreport\fP (generates
report), and tool (runs a plugin tool). Both \fBreport\fP and \fBtool\fP
need the \fIOPTIONSTRING\fP supplied by the \fB\-p\fP flag).
.sp
The \fIOPTIONSTRING\fP should satisfy the following conditions:
It must not contain any spaces. If some arguments need to
include spaces, the string should be enclosed with quotation
marks, i.e., follow the shell syntax. Option string is a list
of pairs with name and value (separated by the equality sign).
The name and value pairs must be separated by commas.
.sp
Most of the report or tools options are specific for each report
or tool. However, there are some common options.
.sp
\fBname=name\fP
This mandatory option determines which report or tool will be
run. If the supplied name does not correspond to any available
report or tool, an error message will be printed followed by the
list of available reports or tools (depending on the \fIACTION\fP ).
.sp
\fBshow=all\fP
This will produce the list of names for all options available
for a given report or tool.
.sp
\fBshow=optionname\fP
This will print the description of the functionality supplied by
\fIoptionname\fP, as well as what are the acceptable types and values
for this option.
.sp
Use the above options to find out everything about a given
report.
.UNINDENT
.sp
When more than one output action is given, each has to be preceded by
\fB\-a\fP flag. The actions are performed one by one, in the specified order.
.INDENT 7.0
.TP
.B \fB\-d\fP , \fB\-\-debug=\fP \fILOGGER_NAME\fP
Enables debug logs for development and testing. Look at the
source code for details
.TP
.B \fB\-\-version\fP
Prints the version number of gramps and then exits
\" change 0 to 1 to enable output of OAF options
.if 0 \{
.PP
The following options are used for Bonobo activation.
.TP
.BI \-\^\-oaf-ior-fd= "FD"
File descriptor to print the OAF IOR on
.TP
.BI \-\^\-oaf-activate-iid= " IID"
OAF IID to activate
.TP
.BI \-\^\-oaf-private
Prevent registering of server with OAF
\}
\" change 0 to 1 to enable output of Gnome sound options
.if 0 \{
.PP
The following options are used for controlling sound using the Gnome Library.
.UNINDENT
.TP
.BI \-\^\-disable-sound
Disable sound server usage
.B \fBOperation\fP
If the first argument on the command line does not start with dash
(i.e. no flag), gramps will attempt to open the file with the name
given by the first argument and start interactive session, ignoring the
rest of the command line arguments.
.sp
If the \fB\-O\fP flag is given, then gramps will try opening the supplied
database and then work with that data, as instructed by the further
command line parameters.
.sp
With or without the \fB\-O\fP flag, there could be multiple imports, exports,
and actions specified further on the command line by using \fB\-i\fP ,
\fB\-e\fP , and \fB\-a\fP flags.
.sp
The order of \fB\-i\fP , \fB\-e\fP , or \fB\-a\fP options does not matter. The actual order
always is: all imports (if any) \-> all actions (if any) \-> all exports
(if any). But opening must always be first!
.sp
If no \fB\-O\fP or \fB\-i\fP option is given, gramps will launch its main window and
start the usual interactive session with the empty database, since
there is no data to process, anyway.
.sp
If no \fB\-e\fP or \fB\-a\fP options are given, gramps will launch its main window
and start the usual interactive session with the database resulted from
all imports. This database resides in the \fBimport_db.grdb\fP under
\fB~/.gramps/import\fP directory.
.sp
The error encountered during import, export, or action, will be either
dumped to stdout (if these are exceptions handled by gramps) or to
\fIstderr\fP (if these are not handled). Use usual shell redirections of
\fIstdout\fP and \fIstderr\fP to save messages and errors in files.
.TP
.BI \-\^\-enable-sound
Enable sound server usage
.B \fBEXAMPLES\fP
To open an existing family tree and import an xml file into it, one
may type:
.INDENT 7.0
.INDENT 3.5
\fBgramps \-O\fP \fI\(aqMy Family Tree\(aq\fP \fB\-i\fP \fI~/db3.gramps\fP
.UNINDENT
.UNINDENT
.sp
The above changes the opened family tree, to do the same, but import
both in a temporary family tree and start an interactive session, one
may type:
.INDENT 7.0
.INDENT 3.5
\fBgramps \-i\fP \fI\(aqMy Family Tree\(aq\fP \fB\-i\fP \fI~/db3.gramps\fP
.UNINDENT
.UNINDENT
.sp
To import four databases (whose formats can be determined from their
names) and then check the resulting database for errors, one may type:
.INDENT 7.0
.INDENT 3.5
\fBgramps \-i\fP \fIfile1.ged\fP \fB\-i\fP \fIfile2.tgz\fP \fB\-i\fP \fI~/db3.gramps\fP
\fB\-i\fP \fIfile4.wft\fP \fB\-a\fP \fIcheck\fP
.UNINDENT
.UNINDENT
.sp
To explicitly specify the formats in the above example, append file
names with appropriate \fB\-f\fP options:
.INDENT 7.0
.INDENT 3.5
\fBgramps \-i\fP \fIfile1.ged\fP \fB\-f\fP \fIgedcom\fP \fB\-i\fP \fIfile2.tgz\fP \fB\-f\fP
\fIgramps\-pkg\fP \fB\-i\fP \fI~/db3.gramps\fP \fB\-f\fP \fIgramps\-xml\fP \fB\-i\fP \fIfile4.wft\fP
\fB\-f\fP \fIwft\fP \fB\-a\fP \fIcheck\fP
.UNINDENT
.UNINDENT
.sp
To record the database resulting from all imports, supply \fB\-e\fP flag (use
\fB\-f\fP if the filename does not allow gramps to guess the format):
.INDENT 7.0
.INDENT 3.5
\fBgramps \-i\fP \fIfile1.ged\fP \fB\-i\fP \fIfile2.tgz\fP \fB\-e\fP \fI~/new\-package\fP
\fB\-f\fP \fIgramps\-pkg\fP
.UNINDENT
.UNINDENT
.sp
To import three databases and start interactive gramps session with the
result:
.INDENT 7.0
.INDENT 3.5
\fBgramps \-i\fP \fIfile1.ged\fP \fB\-i\fP \fIfile2.tgz\fP \fB\-i\fP \fI~/db3.gramps\fP
.UNINDENT
.UNINDENT
.sp
To run the Verify tool from the commandline and output the result to
stdout:
.INDENT 7.0
.INDENT 3.5
\fBgramps \-O\fP \fI\(aqMy Family Tree\(aq\fP \fB\-a\fP \fItool\fP \fB\-p name=\fP \fIverify\fP
.UNINDENT
.UNINDENT
.sp
Finally, to start normal interactive session type:
.INDENT 7.0
.INDENT 3.5
\fBgramps\fP
.UNINDENT
.UNINDENT
.TP
.BI \-\^\-espeaker= " HOSTNAME:PORT"
Host:port on which the sound server to use is running
\}
.SH "Operation"
.br
If the first argument on the command line does not start with dash (i.e. no
flag), gramps will attempt to open the file with the name given by the first
argument and start interactive session, ignoring the rest of the command line
arguments.
.LP
If the \fB\-O\fR flag is given, then gramps will try opening
the supplied database and then work with that data, as instructed by the
further command line parameters.
.LP
With or without the \fB\-O\fR flag, there could be multiple imports,
exports, and actions specified further on the command line by using \fB\-i\fR,
\fB\-e\fR, and \fB\-a\fR flags.
.LP
The order of \fB\-i\fR, \fB\-e\fR, or \fB\-a\fR options does not matter. The
actual order always is: all imports (if any) -> all actions (if any)
-> all exports (if any). But opening must always be first!
.LP
If no \fB\-O\fR or \fB\-i\fR option is given, gramps will launch its main
window and start the usual interactive session with the empty database,
since there is no data to process, anyway.
.LP
If no \fB\-e\fR or \fB\-a\fR options are given, gramps will launch its main
window and start the usual interactive session with the database resulted
from all imports. This database resides in the \fBimport_db.grdb\fR
under \fB~/.gramps/import\fR directory.
.LP
The error encountered during import, export, or action, will be either
dumped to \fIstdout\fR (if these are exceptions handled by gramps) or
to \fIstderr\fR (if these are not handled). Use usual shell redirections
of \fIstdout\fR and \fIstderr\fR to save messages and errors in files.
.SH EXAMPLES
.TP
To open an existing family tree and import an xml file into it, one may type:
\fBgramps\fR \fB\-O\fR \fI'My Family Tree'\fR \fB\-i\fR \fI~/db3.gramps\fR
.TP
The above changes the opened family tree, to do the same, but import both in a temporary family tree and start an interactive session, one may type:
\fBgramps\fR \fB\-i\fR \fI'My Family Tree'\fR \fB\-i\fR \fI~/db3.gramps\fR
.TP
To import four databases (whose formats can be determined from their names) and then check the resulting database for errors, one may type:
\fBgramps\fR \fB\-i\fR \fIfile1.ged\fR \fB\-i\fR \fIfile2.tgz\fR \fB\-i\fR \fI~/db3.gramps\fR \fB\-i\fR \fIfile4.wft\fR \fB\-a\fR \fIcheck\fR
.TP
To explicitly specify the formats in the above example, append filenames with appropriate \fB\-f\fR options:
\fBgramps\fR \fB\-i\fR \fIfile1.ged\fR \fB\-f\fR \fIgedcom\fR \fB\-i\fR \fIfile2.tgz\fR \fB\-f\fR \fIgramps-pkg\fR \fB\-i\fR \fI~/db3.gramps\fR \fB\-f\fR \fIgramps-xml\fR \fB\-i\fR \fIfile4.wft\fR \fB\-f\fR \fIwft\fR \fB\-a\fR \fIcheck\fR
.TP
To record the database resulting from all imports, supply \fB\-e\fR flag (use \fB\-f\fR if the filename does not allow gramps to guess the format):
\fBgramps\fR \fB\-i\fR \fIfile1.ged\fR \fB\-i\fR \fIfile2.tgz\fR \fB\-e\fR \fI~/new-package\fR \fB\-f\fR \fIgramps-pkg\fR
.TP
To import three databases and start interactive gramps session with the result:
\fBgramps\fR \fB\-i\fR \fIfile1.ged\fR \fB\-i\fR \fIfile2.tgz\fR \fB\-i\fR \fI~/db3.gramps\fR
.TP
To run the Verify tool from the commandline and output the result to stdout:
\fBgramps\fR \fB\-O\fR \fI'My Family Tree'\fR \fB-a\fR \fItool\fR \fB-p\fR \fBname\fR=\fIverify\fR
.TP
Finally, to start normal interactive session type:
\fBgramps\fR
.SH ENVIRONMENT VARIABLES
.B \fBENVIRONMENT VARIABLES\fP
The program checks whether these environment variables are set:
\fBLANG\fR - describe, which language to use:
Ex.: for polish language this variable has to be set to pl_PL.UTF-8.
\fBGRAMPSHOME\fR - if set, force Gramps to use the specified directory to keep
program settings and databases there. By default, this variable is not set and
gramps assumes that the folder with all databases and profile settings
should be created within the user profile folder (described by environment
variable HOME for Linux or USERPROFILE for Windows 2000/XP).
.SH CONCEPTS
Supports a python\-based plugin system, allowing import and export writers,
report generators, tools, and display filters to be added without modification
of the main program.
.LP
In addition to generating direct printer output, report generators also
target other systems, such as \fIOpenOffice.org\fR, \fIAbiWord\fR, HTML,
or LaTeX to allow the users to modify the format to suit their needs.
.SH KNOWN BUGS AND LIMITATIONS
.SH FILES
.LP
.sp
\fBLANG\fP \- describe, which language to use: Ex.: for polish language this
variable has to be set to pl_PL.UTF\-8.
.sp
\fBGRAMPSHOME\fP \- if set, force Gramps to use the specified directory to
keep program settings and databases there. By default, this variable is
not set and gramps assumes that the folder with all databases and pro
file settings should be created within the user profile folder
(described by environment variable HOME for Linux or USERPROFILE for
Windows 2000/XP).
.TP
.B \fBCONCEPTS\fP
Supports a python\-based plugin system, allowing import and export writ
ers, report generators, tools, and display filters to be added without
modification of the main program.
.sp
In addition to generating direct printer output, report generators also
target other systems, such as \fILibreOffice.org\fP , \fIAbiWord\fP , \fIHTML\fP,
or \fILaTeX\fP to allow the users to modify the format to suit their needs.
.UNINDENT
.sp
\fBKNOWN BUGS AND LIMITATIONS\fP
.sp
\fBFILES\fP
.INDENT 0.0
.INDENT 3.5
\fI${PREFIX}/bin/gramps\fP
.br
\fI${PREFIX}/lib/python/dist\-packages/gramps/\fP
.br
.sp
\fI${PREFIX}/lib/python3/dist\-packages/gramps/\fP
.sp
\fI${PREFIX}/share/\fP
.br
\fI${HOME}/.gramps\fP
.SH AUTHORS
Donald Allingham \fI<don@gramps-project.org>\fR
.br
\fIhttp://gramps.sourceforge.net\fR
.LP
.sp
\fI${HOME}/.gramps\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B \fBAUTHORS\fP
Donald Allingham <\fI\%don@gramps\-project.org\fP>
\fI\%http://gramps\-project.org/\fP
.sp
This man page was originally written by:
.br
Brandon L. Griffith \fI<brandon@debian.org>\fR
.br
Brandon L. Griffith <\fI\%brandon@debian.org\fP>
for inclusion in the Debian GNU/Linux system.
.LP
.sp
This man page is currently maintained by:
.br
Gramps project \fI<xxx@gramps-project.org>\fR
.br
.SH DOCUMENTATION
The user documentation is available through standard GNOME Help browser
in the form of Gramps Manual. The manual is also available in XML format
as \fBgramps-manual.xml\fR under \fIdoc/gramps-manual/$LANG\fR in the official
source distribution.
.LP
Gramps project <\fI\%xxx@gramps\-project.org\fP>
.TP
.B \fBDOCUMENTATION\fP
The user documentation is available through standard web browser
in the form of Gramps Manual.
.sp
The developer documentation can be found on the
\fIhttp://developers.gramps-project.org\fR site.
\fI\%http://www.gramps\-project.org/wiki/index.php?title=Portal:Developers\fP
portal.
.UNINDENT
.sp
gramps(1) @VERSION@ gramps(1)
.\" Generated by docutils manpage writer.
.
+42 -42
View File
@@ -24,7 +24,7 @@
"""
update_man.py for command line documentation.
Examples:
Examples:
python update_man.py -t
Tests if 'sphinx' and 'python' are well configured.
@@ -43,13 +43,13 @@ except:
DOCUTILS = False
LANGUAGES = ['sv', 'nl', 'pl', 'cs', 'pt_BR', 'fr']
VERSION = '4.2.0'
VERSION = '5.0.0'
DATE = ''
# You can set these variables from the command line.
SPHINXBUILD = 'sphinx-build'
if sys.platform == 'win32':
if sys.platform == 'win32':
pythonCmd = os.path.join(sys.prefix, 'bin', 'python.exe')
sphinxCmd = os.path.join(sys.prefix, 'bin', 'sphinx-build.exe')
elif sys.platform in ['linux2', 'darwin', 'cygwin']:
@@ -70,13 +70,13 @@ def tests():
os.system('''%(program)s -V''' % {'program': pythonCmd})
except:
print ('Please, install python')
try:
print("\n=================='Shpinx-build'=============================\n")
print("\n=================='Sphinx-build'=============================\n")
os.system('''%(program)s''' % {'program': sphinxCmd})
except:
print ('Please, install sphinx')
if not DOCUTILS:
print('\nNo docutils support, cannot use -m/--man and -o/--odt arguments.')
@@ -85,49 +85,49 @@ def main():
The utility for handling documentation stuff.
What is need by Gramps, nothing more.
"""
parser = ArgumentParser(
description='This program aims to handle documentation'
' and realted translated versions.',
parser = ArgumentParser(
description='This program aims to handle documentation'
' and related translated versions.',
)
parser.add_argument("-t", "--test",
action="store_true", dest="test", default=True,
help="test if 'python' and 'sphinx' are properly installed")
parser.add_argument("-b", "--build",
action="store_true", dest="build", default=False,
help="build man documentation (via sphinx-build)")
parser.add_argument("-m", "--man",
action="store_true", dest="man", default=False,
help="build man documentation (via docutils)")
parser.add_argument("-o", "--odt",
action="store_true", dest="odt", default=False,
help="build odt documentation (via docutils)")
args = parser.parse_args()
if args.test:
tests()
if args.build:
build()
if args.man and DOCUTILS:
man()
if args.odt and DOCUTILS:
odt()
def build():
"""
Build documentation.
"""
# testing stage
os.system('''%(program)s -b html . _build/html''' % {'program': sphinxCmd})
os.system('''%(program)s -b htmlhelp . _build/htmlhelp''' % {'program': sphinxCmd})
if DOCUTILS:
@@ -136,48 +136,48 @@ def build():
os.system('''%(program)s -b changes . _build/changes''' % {'program': sphinxCmd})
#os.system('''%(program)s -b linkcheck . _build/linkcheck''' % {'program': sphinxCmd})
os.system('''%(program)s -b gettext . _build/gettext''' % {'program': sphinxCmd})
for lang in LANGUAGES:
os.system('''%(program)s -b html -D language="%(lang)s" master_doc="%(lang)s" %(lang)s %(lang)s'''
os.system('''%(program)s -b html -D language="%(lang)s" master_doc="%(lang)s" %(lang)s %(lang)s'''
% {'lang': lang, 'program': sphinxCmd})
os.system('''%(program)s -b htmlhelp -D language="%(lang)s" master_doc="%(lang)s" %(lang)s %(lang)s'''
os.system('''%(program)s -b htmlhelp -D language="%(lang)s" master_doc="%(lang)s" %(lang)s %(lang)s'''
% {'lang': lang, 'program': sphinxCmd})
if DOCUTILS:
os.system('''%(program)s -b man %(lang)s %(lang)s'''
os.system('''%(program)s -b man %(lang)s %(lang)s'''
% {'lang': lang, 'program': sphinxCmd})
os.system('''%(program)s -b text -D language="%(lang)s" master_doc="%(lang)s" %(lang)s %(lang)s'''
os.system('''%(program)s -b text -D language="%(lang)s" master_doc="%(lang)s" %(lang)s %(lang)s'''
% {'lang': lang, 'program': sphinxCmd})
# for update/migration
os.system('''%(program)s -b gettext -D language="%(lang)s" master_doc="%(lang)s" . _build/gettext/%(lang)s'''
os.system('''%(program)s -b gettext -D language="%(lang)s" master_doc="%(lang)s" . _build/gettext/%(lang)s'''
% {'lang': lang, 'program': sphinxCmd})
def man():
"""
man file generation via docutils (python)
from docutils.core import publish_cmdline, default_description
from docutils.writers import manpage
"""
os.system('''rst2man en.rst gramps.1''')
os.system('''rst2man en.rst gramps.1''')
for lang in LANGUAGES:
os.system('''rst2man %(lang)s/%(lang)s.rst -l %(lang)s %(lang)s/gramps.1'''
os.system('''rst2man %(lang)s/%(lang)s.rst -l %(lang)s %(lang)s/gramps.1'''
% {'lang': lang})
def odt():
"""
odt file generation via docutils (python)
from docutils.core import publish_cmdline_to_binary, default_description
from docutils.writers.odf_odt import Writer, Reader
"""
os.system('''rst2odt en.rst gramps.odt''')
os.system('''rst2odt en.rst gramps.odt''')
for lang in LANGUAGES:
os.system('''rst2odt %(lang)s/%(lang)s.rst -l %(lang)s %(lang)s/gramps.odt'''
os.system('''rst2odt %(lang)s/%(lang)s.rst -l %(lang)s %(lang)s/gramps.odt'''
% {'lang': lang})
if __name__ == "__main__":
main()
main()
-12
View File
@@ -1,12 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n %}
{% block title %}{% trans 'Page not found' %}{% endblock %}
{% block content %}
<h2>{% trans 'Page not found' %}</h2>
<p>{% trans "We're sorry, but the requested page could not be found." %}</p>
{% endblock %}
-12
View File
@@ -1,12 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n %}
{% block breadcrumbs %}<div class="breadcrumbs"><a href="/">{% trans "Home" %}</a> &rsaquo; {% trans "Server error" %}</div>{% endblock %}
{% block title %}{% trans 'Server error (500)' %}{% endblock %}
{% block content %}
<h1>{% trans 'Server Error <em>(500)</em>' %}</h1>
<p>{% trans "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience." %}</p>
{% endblock %}
-21
View File
@@ -1,21 +0,0 @@
{% extends "admin/base.html" %}
{% load i18n %}
{% block title %}{{ title }} | Adminstration{% endblock %}
{% block branding %}
<h1 id="site-name">Administration</h1>
{% endblock %}
{% block nav-global %}
{% if user.is_staff %}
<style type="text/css">
.ml {margin:0 10px 10px;display:block;float:left}
</style>
<a href="/" clas="ml">Home</a>
<a href="/admin/" class="ml">Administration home</a>
<a href="/admin/auth/user/?is_active__exact=0" class="ml">New Users</a>
<a href="/admin/auth/user/" class="ml">All Users</a>
{% endif %}
{% endblock %}
-30
View File
@@ -1,30 +0,0 @@
{% extends "gramps-base.html" %}
{% load my_tags %}
{% block title %}{{sitename}}{% endblock %}
{% block heading %}{{sitename}}{% endblock %}
{% block content %}
<p> &nbsp; </p>
<p id="description">
Database information:</p>
<table class="infolist surname">
<tr>
<th>Item</th>
<th>Count</th>
</tr>
{% for view in views %}
<tr class="{% cycle odd,even %}">
{% if view.2 %}
<td align="left"><a href="/{{view.1}}">{{view.0}}</a></td>
<td align="left"><a href="/{{view.1}}">{{view.1|table_count}}</td>
{% endif %}
</tr>
{% endfor %}
</table>
{% endblock %}
-12
View File
@@ -1,12 +0,0 @@
{% load my_tags %}
{% filter breadcrumb %}
{% format "/browse|Browse" %}||
{% format "/%s/%s|%s" view args tviews %}
{% if object.gramps_id %}
|| {% format "/%s/%s|%s [%s]" view object.handle tview object.gramps_id %}
{% else %}
{% if object.name %}
|| {% format "/%s/%s|%s [%s]" view object.handle tview object.name %}
{% endif %}
{% endif %}
{% endfilter %}
-399
View File
@@ -1,399 +0,0 @@
{% load my_tags %}
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<head>
<title>{% block title %}{{sitename}}{% endblock %}</title>
{% block meta %}
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="generator" content="Gramps 3.2.0-0.SVN12859M http://gramps-project.org/" />
<meta name="author" content="" />
{% endblock %}
<link href="/images/ped24.ico" type="image/x-icon" rel="shortcut icon" />
{% block css %}
<link media="screen" href="/styles/css/{{css_theme}}" type="text/css" rel="stylesheet" />
<link media="print" href="/styles/css/Web_Print-Default.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="/styles/javascript/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="/styles/javascript/jquery-ui-1.7.2.custom.min.js"></script>
<script type="text/javascript" src="/styles/jhtmlarea/scripts/jHtmlArea-0.7.0.js"></script>
<link rel="Stylesheet" type="text/css" href="/styles/jhtmlarea/style/jHtmlArea.css" />
<script type="text/javascript" src="/styles/javascript/jquery.flexbox.min.js"></script>
<link type="text/css" rel="stylesheet" href="/styles/css/jquery.flexbox.css" />
{% endblock %}
<style type="text/css">
table td {
vertical-align: middle;
}
div.content {
background: none;
}
.content {
padding: 0px 0px 10px;
}
.browsecell {
display: block;
}
#subtitle {
font-weight: bold;
font-style: italic;
border-top: 1px solid;
}
td.ColumnAttribute {
text-align: right;
}
#error {
color: red;
}
{% if action == "edit" or action == "add" %}
{% else %}
#rowspace {
height: 3px;
}
#data {
border: 1px solid;
background-color: white;
color: brown;
}
{% endif %}
/* Component containers */
.ui-widget {
font-family: Georgia,serif;
font-size: small;
}
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button {
font-family: Georgia,serif;
font-size: small;
}
.ui-widget-content {
border: 1px solid #7D5925;
color: #7D5925;
float: left;
width: 98%;
}
.ui-widget-content a {
color: #7D5925;
}
.ui-widget-header {
color: #ffffff;
}
.ui-widget-header a {
color: #7D5925;
}
/* Overlays */
.ui-widget-overlay {
background: #aaaaaa;
opacity: .30;
}
.ui-widget-shadow {
margin: -8px 0 0 -8px;
padding: 8px;
opacity: .30;
-webkit-border-radius: 8px;
}
/* Interaction states */
.ui-state-default {
border: 1px solid #7D5925;
background: #FFF2C6;
font-weight: normal;
color: #7D5925;
outline: none;
}
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited {
color: #7D5925;
text-decoration: none;
outline: none;
}
.ui-state-hover, .ui-state-focus {
border: 1px solid #f5ad66;
background: #f5f0e5;
font-weight: normal;
color: #a46313;
outline: none;
}
.ui-state-hover a, .ui-state-hover a:hover {
color: #a46313;
text-decoration: none;
outline: none;
}
.ui-state-active {
border: 1px solid #7D5925;
background: #f4f0ec;
font-weight: normal;
color: #b85700;
outline: none;
}
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited {
color: #b85700;
outline: none;
text-decoration: none;
}
/* Interaction Cues */
.ui-state-highlight {
border: 1px solid #d9bb73;
background: #f5f5b5;
color: #060200;
}
.ui-state-highlight a {
color: #060200;
}
.ui-state-error {
border: 1px solid #f8893f;
background: #fee4bd;
color: #dd4e2c;
}
.ui-state-error a {
color: #dd4e2c;
}
.ui-state-error-text {
color: #dd4e2c;
}
.ui-state-disabled {
opacity: .35;
background-image: none;
}
.ui-priority-primary {
font-weight: bold;
}
.ui-priority-secondary {
opacity: .7;
font-weight: normal;
}
/* Tabs */
.ui-tabs {
padding: .2em;
}
.ui-tabs .ui-tabs-nav {
list-style: none;
position: relative;
padding: .2em .2em 0;
}
.ui-tabs .ui-tabs-nav li {
position: relative;
float: left;
margin: .2em .2em -1px 0;
padding: 0;
}
.ui-tabs .ui-tabs-nav li a {
float: left;
text-decoration: none;
padding: .5em 1em;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-selected {
padding-bottom: 1px;
border-bottom-width: 0;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a {
cursor: text;
}
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a {
cursor: pointer;
} /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
.ui-tabs .ui-tabs-panel {
padding: 1em 1.4em;
display: block;
border-width: 0;
background: none;
}
.ui-tabs .ui-tabs-hide {
display: none !important;
}
</style>
<SCRIPT LANGUAGE="JavaScript">
<!--
var timerId=0 ;
function clearTimer() {
if (timerId!=0) {
clearTimeout(timerId); timerId=0; }}
function startTimer() {
clearTimer(); timerId=setTimeout('timerId=0;hideMenus()',200);
}
function showMenu(menuNum) {
clearTimer(); hideMenus();
document.getElementById('menu_'+menuNum).style.display="";
}
function hideMenus() {
document.getElementById('menu_browse').style.display="none";
}
function hiLite(theOption) {
clearTimer();
document.getElementById('opt_'+theOption).style.background='#9090FF';
}
function unLite(theOption) {
startTimer();
document.getElementById('opt_'+theOption).style.background='#D0D0FF';
}
function optClick(theOption) {
document.location.href=theOption;
}
function setHasData(classname, value) {
var elems = document.getElementsByTagName('*'), i;
for (i in elems) {
if((" " + elems[i].className + " ").indexOf(" " + classname + " ") > -1) {
if (value) {
elems[i].style.fontWeight = "bold";
elems[i].style.fontStyle = "italic";
} else {
elems[i].style.fontWeight = "";
elems[i].style.fontStyle = "";
}
}
}
}
function setReturnValues() {
var elems = document.getElementsByTagName('*'), i;
for (i in elems) {
if ((" " + elems[i].name + " ").indexOf("_return ") > -1) {
var pos = (" " + elems[i].name + " ").indexOf("_return ");
var s = elems[i].name.substring(0, pos - 1);
var v = document.getElementsByName(s)[0];
elems[i].value = v.value;
}
}
}
function buttonOver(button) {
button.style.backgroundColor = "white";
button.style.border = "1px solid gray";
}
function buttonOut(button) {
button.style.backgroundColor = "lightgray";
button.style.border = "1px solid lightgray";
}
//-->
</SCRIPT>
<STYLE TYPE="text/css">
<!--
.popupMenu {
// font-family : Verdana,Tahoma,Helvetica,sans-serif;
// font-size : 12px;
color : #111111;
position : absolute;
// top : 72px;
border : 1px;
padding : 3px;
z-index : 16;
background-color: #D0D0FF;
cursor : pointer; }
-->
</STYLE>
</head>
<body onclick="hideMenus()"
onload="if (document.getElementById('get_focus')) {document.getElementById('get_focus').focus();}"
>
<div id="header" style="padding-top: 1em; background-position:0px -32px;">
<h1 id="SiteTitle" style="margin-left: 0em;">{% block heading %}{{sitename}}{% endblock %}</h1>
</div>
<div class="wrapper" role="navigation" id="nav">
{% block navigation %}
<div class="container">
<ul class="menu" id="dropmenu">
<li {{ tview|currentSection:"home" }}><a href="/">Home</a></li>
{% for title in menu %}
{# (<Nice name>, /<path>/, <Model> | None, Need authentication ) #}
{% if title.3 %}
{% if user.is_authenticated %}
<li {{tview|currentSection:title.1 }}>
{% if title.1 %}
<a href="/{{title.1}}/">{{title.0}}</a>
</li>
{% else %}
<a href="/">{{title.0}}</a>
</li>
{% endif %}
{% else %}
{# don't show #}
{% endif %}
{% else %}
<li {{tview|currentSection:title.1 }}>
{% if title.1 %}
<a href="/{{title.1}}/"
onmouseover="showMenu('{{title.1}}')"
onmouseout="startTimer()"
style="cursor:pointer"
href="/browse/">{{title.0}}</a>
<DIV CLASS="popupMenu" ID="menu_browse" STYLE="display:none;">
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0">
<TR ID="opt_person"><TD><A ONMOUSEOVER="hiLite('person')" ONMOUSEOUT="unLite('person')" ONCLICK="optClick('/person/')">People</A></TD></TR>
<TR ID="opt_family"><TD><A ONMOUSEOVER="hiLite('family')" ONMOUSEOUT="unLite('family')" ONCLICK="optClick('/family/')">Families</A></TD></TR>
<TR ID="opt_event"><TD><A ONMOUSEOVER="hiLite('event')" ONMOUSEOUT="unLite('event')" ONCLICK="optClick('/event/')">Events</A></TD></TR>
<TR ID="opt_note"><TD><A ONMOUSEOVER="hiLite('note')" ONMOUSEOUT="unLite('note')" ONCLICK="optClick('/note/')">Note</A></TD></TR>
<TR ID="opt_media"><TD><A ONMOUSEOVER="hiLite('media')" ONMOUSEOUT="unLite('media')" ONCLICK="optClick('/media/')">Media</A></TD></TR>
<TR ID="opt_citation"><TD><A ONMOUSEOVER="hiLite('citation')" ONMOUSEOUT="unLite('citation')" ONCLICK="optClick('/citation/')">Citations</A></TD></TR>
<TR ID="opt_source"><TD><A ONMOUSEOVER="hiLite('source')" ONMOUSEOUT="unLite('source')" ONCLICK="optClick('/source/')">Sources</A></TD></TR>
<TR ID="opt_place"><TD><A ONMOUSEOVER="hiLite('place')" ONMOUSEOUT="unLite('place')" ONCLICK="optClick('/place/')">Places</A></TD></TR>
<TR ID="opt_repository"><TD><A ONMOUSEOVER="hiLite('repsoitory')" ONMOUSEOUT="unLite('repository')" ONCLICK="optClick('/repository/')">Repository</A></TD></TR>
<TR ID="opt_tag"><TD><A ONMOUSEOVER="hiLite('tag')" ONMOUSEOUT="unLite('tag')" ONCLICK="optClick('/tag/')">Tags</A></TD></TR>
</TABLE>
</DIV>
</li>
{% else %}
<a href="/">{{title.0}}</a></li>
{% endif %}
{% endif %}
{% endfor %}
{% if user.is_authenticated %}
{% if next %}
<li><a href="/logout/?next={{next}}">Logout</a></li>
{% else %}
<li><a href="/logout">Logout</a></li>
{% endif %}
{% if user.is_superuser %}
<li><a href="/admin">Admin</a></li>
{% endif %}
{% else %}
{% if next %}
<li><a href="/login/?next={{next}}">Login</a></li>
{% else %}
<li><a href="/login/">Login</a></li>
{% endif %}
{% endif %}
</ul>
{% endblock %}
</div>
</div>
<div class="grampsweb">
{% for message in messages %}
<font color="red">{{message}}</font><br/>
{% endfor %}
{% if message %}
<div id="system_message" class="{{ message_type }}">
<font color="red">{{message}}</font><br/>
</div>
{% endif %}
{% block content %}
{% endblock %}
<div class="content">
</div>
</div>
<div id="footer">
{% block footer %}
<p id="createdate">
<a href="http://www.gramps-project.org/wiki/index.php?title=Gramps-Connect">Gramps-Connect, version {{gramps_version}}</a>.
</p>
<p id="copyright">&copy; 2009-2015 <a href="http://www.gramps-project.org/">www.gramps-project.org</a>
</p>
{% endblock %}
</div>
</body>
</html>
-38
View File
@@ -1,38 +0,0 @@
{% extends "gramps-base.html" %}
{% load my_tags %}
{% block title %}{{sitename}}{% endblock %}
{% block heading %}{{sitename}}{% endblock %}
{% block content %}
<p> &nbsp; </p>
<p id="description">Welcome to <b>{{sitename}}</b>, a new web-based collaboration tool.
{% if user.is_authenticated %}
You are now logged in
as <a href="/user/{{user.username}}">{{user.username}}</a>.
{% endif %}
</p>
<p id="description">
Database information:</p>
<table class="infolist surname">
<tr>
<th>Item</th>
<th>Count</th>
</tr>
{% for view in views %}
<tr class="{% cycle odd,even %}">
{% if view.2 %}
<td align="left"><a href="/{{view.1}}">{{view.0}}</a></td>
<td align="left"><a href="/{{view.1}}">{{view.1|table_count}}</td>
{% endif %}
</tr>
{% endfor %}
</table>
{% endblock %}
-36
View File
@@ -1,36 +0,0 @@
<div class="pagination">
<span class="step-links">
<form method="post">{% csrf_token %}
<div id="alphanav" style="padding: 0pt 0 0pt 0;">
<ul>
{% ifequal page.number 1 %}
<li><input type="button" value="<<" disabled="disabled"></li>
{% else %}
<li><input type="button" value="<<" onclick="document.location.href='?page=1{{search_query}}'"></li>
{% endifequal %}
{% if page.has_previous %}
<li><input type="button" value="<" onclick="document.location.href='?page={{page.previous_page_number}}{{search_query}}'"></li>
{% else %}
<li><input type="button" value="<" disabled="disabled"></li>
{% endif %}
<span class="current">
<li>Page {{ page.number }} of {{ page.paginator.num_pages }}</li>
</span>
{% if page.has_next %}
<li><input type="button" value=">" onclick="document.location.href='?page={{page.next_page_number}}{{search_query}}'"></li>
{% else %}
<li><input type="button" value=">" disabled="disabled"></li>
{% endif %}
{% ifequal page.number page.paginator.num_pages %}
<li><input type="button" value=">>" disabled="disabled"></li>
{% else %}
<li><input type="button" value=">>" onclick="document.location.href='?page={{page.paginator.num_pages}}{{search_query}}'"></li>
{% endifequal %}
<b>Matches</b>: {{page.paginator.count}}/{{total}} <b>Showing</b>: {{results_this_page}}
</ul>
</div>
</span>
</div>
-51
View File
@@ -1,51 +0,0 @@
{% extends "view_page_detail.html" %}
{% load my_tags %}
{% block content %}
<script type="text/javascript">
$(function(){
$('#tabs').tabs({
'select': function(event, ui){
document.location.hash = ui.panel.id;
}
});
});
</script>
<div class="content" id="IndividualDetail">
{% include "detail_breadcrumb.html" %}
<div id="summaryarea">
<table class="infolist" style="width:90%;"> {% comment %} 4 cols {% endcomment %}
<tbody>
{% if pickform.errors %}
<hr>
<p id="error">The following fields have errors. Please correct and try again.</p>
<div id="error">{{pickform.errors}}</div>
<hr>
{% endif %}
<form method="post">{% csrf_token %}
<tr>
<td class="ColumnAttribute">Pick:</td>
{% if user.is_authenticated %}
<td class="ColumnValue" id="data">{{pickform.picklist}}</td>
{% else %}
<td class="ColumnValue" id="data"></td>
{% endif %}
</tr>
</tbody>
</table>
{% if user.is_superuser %}
{% make_button "Cancel" "/%s/%s" object_type object_handle args %}
<input type="hidden" name="action" value="save-share"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Save"/>
{% else %}
{% endif %}
</form>
{% endblock %}
-34
View File
@@ -1,34 +0,0 @@
{% extends "view_page_detail.html" %}
{% load my_tags %}
{% block content %}
<div class="content" id="IndividualDetail">
{% include "detail_breadcrumb.html" %}
<h2>Temporary Reference Detail</h2>
<div id="summaryarea">
<table class="infolist" style="width:90%;">
<trbody>
{% if form.errors %}
<hr>
<p id="error">The following fields have errors. Please correct and try again.</p>
<div id="error">{{form.errors}}</div>
<hr>
{% endif %}
<form method="post">{% csrf_token %}
{% for f in form.forms %}
<tr>
{{f}}
</tr>
{% endfor %}
</table>
</div>
</div>
</form>
{% make_button "Go to reference" url %}
{% make_button "Go back" referenced_by %}
{% endblock %}
-39
View File
@@ -1,39 +0,0 @@
{% extends "gramps-base.html" %}
{% block title %}Gramps Connect - login {% endblock %}
{% block heading %}Gramps - login {% endblock %}
{% block content %}
<h2>User Login</h2>
{% if form.errors %}
<p id="description">Your username or password were not valid. Please try again.</p>
{% else %}
<p id="description">Enter your login ID and password below. </p>
{% endif %}
<form method="post" action=".">{% csrf_token %}
<table>
<tr>
<td>
<label for="id_username">Username: </label>
</td>
<td>
{{form.username}}
</td>
</tr>
<tr>
<td>
<label for="id_password">Password: </label>
</td>
<td>
{{form.password}}
</td>
</tr>
</table>
{% if next %}
<input type="hidden" name="next" value="{{next}}" />
{% else %}
<input type="hidden" name="next" value="/" />
{% endif %}
<input type="submit" value="Login" />
</form>
{% endblock %}
-5
View File
@@ -1,5 +0,0 @@
{% for header in headers %}<th{{ header.class_attr }}>
{% if header.sortable %}<a href="{{ header.url|escape }}">{% endif %}
{{ header.text }}
{% if header.sortable %}</a>{% endif %}
</th>{% endfor %}
-47
View File
@@ -1,47 +0,0 @@
{% extends "gramps-base.html" %}
{% load my_tags %}
{% block title %}{{sitename}} - user page {% endblock %}
{% block heading %}{{sitename}} - user page {% endblock %}
{% block content %}
<p id="description">Details for <b>{{user.first_name}} {{user.last_name}}</b> ({{user.username}}):</p>
<p id="description">
<table>
<tr>
<td width="30%">User name: </td><td><em>{{user.username}}</em></td>
</tr>
<tr>
<td>Email: </td><td><a href="mailto:{{user.email}}"><em>{{user.email}}</a></em></td>
</tr>
<tr>
<td>Type: </td>
<td>
{% if user.is_superuser %}
<em>Administrator</em>
{% else %}
<em>User</em>
{% endif %}
</td>
</tr>
<tr>
<td>Last login: </td><td><em>{{user.last_login}}</em></td>
</tr>
</table>
{% if user.is_superuser %}
{% make_button "Edit Profile" "/admin/grampsdb/profile/%s" user.id %}
{% make_button "Edit User" "/admin/auth/user/%s" user.id %}
{% else %}
<em>User</em>
{% endif %}
</p>
{% endblock %}
-179
View File
@@ -1,179 +0,0 @@
{% extends "view_page_detail.html" %}
{% load my_tags %}
{% block content %}
<script type="text/javascript">
$(function(){
$('#tabs').tabs({
'select': function(event, ui){
document.location.hash = ui.panel.id;
}
});
$('#shared-tabs').tabs({
'select': function(event, ui){
document.location.hash = ui.panel.id;
}
});
});
</script>
<div class="content" id="IndividualDetail">
{% include "detail_breadcrumb.html" %}
{% if citationform.errors or sourceform.errors %}
<hr>
<p id="error">The following fields have errors. Please correct and try again.</p>
<div id="error">{{citationform.errors}}</div>
<div id="error">{{sourceform.errors}}</div>
<hr>
{% endif %}
<form method="post">{% csrf_token %}
<!-- Tabs -->
<h2>Citation information</h2>
<div class="ui-tabs ui-widget ui-widget-content ui-corner-all" id="tabs" style="border: none;">
<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
<li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active"><a class="tab-general" href="#tab-general">General</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-notes" href="#tab-notes">Note</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-media" href="#tab-media">Media</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-data" href="#tab-data">Data</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-references" href="#tab-references">Reference</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-history" href="#tab-history">History</a></li>
</ul>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom" id="tab-general" style="background-color: #f4f0ec;">
<table class="infolist" style="width:90%;">
<tr>
<td class="ColumnAttribute">{{citationform.text.label}}:</td>
<td class="ColumnValue" id="data" colspan="3"> {% render citationform.text user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{citationform.gramps_id.label}}:</td>
<td class="ColumnValue" id="data"> {% render citationform.gramps_id user action %}</td>
<td class="ColumnAttribute">{{citationform.private.label}}:</td>
<td class="ColumnValue" id="data"> {% render citationform.private user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{citationform.page.label}}:</td>
<td class="ColumnValue" id="data" colspan="3"> {% render citationform.page user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{citationform.confidence.label}}:</td>
<td class="ColumnValue" id="data" colspan="3"> {% render citationform.confidence user action %}</td>
</tr>
</table>
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-notes" style="background-color: #f4f0ec;">
{% note_table citation user action "/note/$act/citation/%s" citation.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-media" style="background-color: #f4f0ec;">
{% media_table citation user action "/media/$act/citation/%s" citation.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-data" style="background-color: #f4f0ec;">
{% data_table citation user action "/data/$act/citation/%s" citation.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-references" style="background-color: #f4f0ec;">
{% citation_reference_table citation user action %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-history" style="background-color: #f4f0ec;">
{% history_table citation user action %}
</div>
</div>
<p>Note: Any changes in the shared citation information will be reflected
in the citation itself, for all items that reference the citation.
</p>
<hr>
<h2>Source information (shared)</h2>
<div class="ui-tabs ui-widget ui-widget-content ui-corner-all" id="shared-tabs" style="border: none;">
<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
<li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active"><a class="tab-shared-general" href="#tab-shared-general">General</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-shared-notes" href="#tab-shared-notes">Notes</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-shared-media" href="#tab-shared-media">Media</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-shared-repositories" href="#tab-shared-repositories">Repositories</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-shared-references" href="#tab-shared-references">References</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-shared-history" href="#tab-shared-history">History</a></li>
</ul>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom" id="tab-shared-general" style="background-color: #f4f0ec;">
<table class="infolist" style="width:90%;">
<tr>
<td class="ColumnAttribute">{{sourceform.title.label}}:</td>
<td class="ColumnValue" id="data" colspan="3"> {% render sourceform.title user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{sourceform.author.label}}:</td>
<td class="ColumnValue" id="data" colspan="3"> {% render sourceform.author user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{sourceform.gramps_id.label}}:</td>
<td class="ColumnValue" id="data"> {% render sourceform.gramps_id user action %}</td>
<td class="ColumnAttribute">{{sourceform.private.label}}:</td>
<td class="ColumnValue" id="data"> {% render sourceform.private user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{sourceform.abbrev.label}}:</td>
<td class="ColumnValue" id="data" colspan="3"> {% render sourceform.abbrev user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{sourceform.pubinfo.label}}:</td>
<td class="ColumnValue" id="data" colspan="3"> {% render sourceform.pubinfo user action %}</td>
</tr>
</table>
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-shared-notes" style="background-color: #f4f0ec;">
{% note_table source user action "/note/$act/source/%s" source.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-shared-media" style="background-color: #f4f0ec;">
{% media_table source user action "/media/$act/source/%s" source.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-shared-repositories" style="background-color: #f4f0ec;">
{% repository_table source user action "/repository/$act/source/%s" source.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-shared-references" style="background-color: #f4f0ec;">
{% citation_reference_table source user action %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-shared-history" style="background-color: #f4f0ec;">
{% history_table source user action %}
</div>
</div>
<p>Note: Any changes in the shared source information will be reflected
in the source itself, for all items that reference the source.
</p>
<hr>
{% if user.is_superuser %}
{% if action == "edit" %}
{% make_button "Cancel" "/citation/%s" citation.handle args %}
<input type="hidden" name="action" value="save"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Save"/>
{% else %}
{% ifequal action "add" %}
{% make_button "Cancel" "/citation/" args %}
<input type="hidden" name="action" value="create"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Create"/>
{% else %}
<div style="background-color: lightgray; padding: 2px 0px 0px 2px; clear: both;">
{% make_button "+Add Citation" "/citation/add" args %}
{% make_button "?Edit Citation" "/citation/%s/edit" citation.handle args %}
{% make_button "-Delete Citation" "/citation/%s/delete" citation.handle args %}
</div>
{% endifequal %}
{% endif %}
{% else %}
{% endif %}
</form>
{% endblock %}
-48
View File
@@ -1,48 +0,0 @@
{% extends "view_page.html" %}
{% load my_tags %}
{% block table_data %}
<table cellspacing="0" class="infolist surname" width="90%">
<thead>
<tr>
<th>#</th>
<th>ID</th>
<th>Title</th>
<th>Pub Info</th>
<th>Author</th>
</tr>
</thead>
<tbody>
{% for source in page.object_list %}
<tr class="{% cycle odd,even %}">
<td>{{ forloop.counter|row_count:page }}</td>
<td><a href="/{{view}}/{{source.handle|escape}}{{args}}" class="browsecell"
>
<span class="grampsid">[{{source.gramps_id}}]</span></a>
{% if user.is_authenticated or source.public %}
<td><a href="/{{view}}/{{source.handle|escape}}{{args}}" class="browsecell"
>{{source.title|escape|nbsp}}</a>
<td><a href="/{{view}}/{{source.handle|escape}}{{args}}" class="browsecell"
>{{source.pubinfo|nbsp}}</a>
<td><a href="/{{view}}/{{source.handle|escape}}{{args}}" class="browsecell"
>{{source.author|nbsp}}</a>
{% else %}
<td></td>
<td></td>
<td></td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{% block admin_functions %}
{% if user.is_superuser %}
<div style="background-color: lightgray; padding: 2px 0px 0px 2px">
{% make_button "+Add Citation" "/citation/add" args %}
</div>
{% endif %}
{% endblock %}
-137
View File
@@ -1,137 +0,0 @@
{% extends "view_page_detail.html" %}
{% load my_tags %}
{% block content %}
<script type="text/javascript">
$(function(){
$('#tabs').tabs({
'select': function(event, ui){
document.location.hash = ui.panel.id;
}
});
});
</script>
<div class="content" id="IndividualDetail">
{% include "detail_breadcrumb.html" %}
<div id="summaryarea">
<table class="infolist" style="width:90%;">
<trbody>
{% if eventform.errors %}
<hr>
<p id="error">The following fields have errors. Please correct and try again.</p>
<div id="error">{{eventform.errors}}</div>
<hr>
{% endif %}
<form method="post" onsubmit="setReturnValues()">{% csrf_token %}
<tr>
<td class="ColumnAttribute">{{eventform.event_type.label}}:</td>
<td class="ColumnValue" id="data"> {% render eventform.event_type user action %}</td>
<td class="ColumnAttribute">{{eventform.text.label}}:</td>
<td class="ColumnValue" id="data">{% render eventform.text user action %}</td>
<td></td>
</tr>
<tr>
<td class="ColumnAttribute">Description:</td>
<td class="ColumnValue" id="data" colspan="3">{% render eventform.description user action %}</td>
<td></td>
</tr>
<tr>
<td class="ColumnAttribute">ID:</td>
<td class="ColumnValue" id="data" colspan="3">{% render eventform.gramps_id user action %}</td>
<td></td>
</tr>
<tr>
<td class="ColumnAttribute">Place:</td>
<td class="ColumnValue" id="data" colspan="3">
{% if action != "view" %}
<script type="text/javascript">
$(function() {
$('#place').flexbox('/json/?field=place', {
watermark: 'Place',
width: 600,
paging: {
pageSize: 10
},
initialValue: '{{event.place.get_selection_string}}',
initialId: '{{event.place.handle}}'
});
});
// </script>
<div id="place"></div>
{% else %}
<a href="/place/?search={{event.place}}">{{event.place}}</a>
{% endif %}
</td>
<td>
<td class="ColumnValue" id="data" colspan="3">{% render eventform.private user action %}
</td>
</tr>
</table>
</div>
</div>
{% if user.is_superuser %}
{% if action == "edit" %}
{% make_button "Cancel" "/event/%s" event.handle args %}
<input type="hidden" id="place_return" name="place_return" value=""/>
<input type="hidden" name="action" value="save"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Save"/>
{% else %}
{% ifequal action "add" %}
{% make_button "Cancel" "/event/" args %}
<input type="hidden" id="place_return" name="place_return" value=""/>
<input type="hidden" name="action" value="create"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Create"/>
{% else %}
<div style="background-color: lightgray; padding: 2px 0px 0px 2px; clear: both;">
{% make_button "+Add Event" "/event/add" args %}
{% make_button "?Edit Event" "/event/%s/edit" event.handle args %}
{% make_button "-Delete Event" "/event/%s/delete" event.handle args %}
</div>
{% endifequal %}
{% endif %}
{% else %}
{% endif %}
<!-- Tabs -->
<div class="ui-tabs ui-widget ui-widget-content ui-corner-all" id="tabs" style="border: none;">
<ul class="ui-tab-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
<li class="ui-state-default ui-corner-top ui-tab-selected ui-state-active"><a class="tab-sources" href="#tab-sources">Citation</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-notes" href="#tab-notes">Note</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-media" href="#tab-media">Media</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-attributes" href="#tab-attributes">Attribute</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-references" href="#tab-references">Reference</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-history" href="#tab-history">History</a></li>
</ul>
<div class="ui-tab-panel ui-widget-content ui-corner-bottom" id="tab-sources" style="background-color: #f4f0ec;">
{% citation_table event user action "/citation/$act/event/%s" event.handle %}
</div>
<div class="ui-tab-panel ui-widget-content ui-corner-bottom ui-tab-hide" id="tab-notes" style="background-color: #f4f0ec;">
{% note_table event user action "/note/$act/event/%s" event.handle %}
</div>
<div class="ui-tab-panel ui-widget-content ui-corner-bottom ui-tab-hide" id="tab-media" style="background-color: #f4f0ec;">
{% media_table event user action "/media/$act/event/%s" event.handle %}
</div>
<div class="ui-tab-panel ui-widget-content ui-corner-bottom ui-tab-hide" id="tab-attributes" style="background-color: #f4f0ec;">
{% attribute_table event user action "/attribute/$act/event/%s" event.handle %}
</div>
<div class="ui-tab-panel ui-widget-content ui-corner-bottom ui-tab-hide" id="tab-references" style="background-color: #f4f0ec;">
{% event_reference_table event user action %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-history" style="background-color: #f4f0ec;">
{% history_table event user action %}
</div>
</div>
</form>
{% endblock %}
-48
View File
@@ -1,48 +0,0 @@
{% extends "view_page.html" %}
{% load my_tags %}
{% block table_data %}
<table cellspacing="0" class="infolist surname" width="95%">
<thead>
<tr>
<th>#</th>
<th>ID</th>
<th>Event Type</th>
<th>Description</th>
<th>Date</th>
<th>Place</th>
</tr>
</thead>
<tbody>
{% for event in page.object_list %}
<tr class="{% cycle odd,even %}">
<td>{{ forloop.counter|row_count:page }}</td>
<td><a href="/{{view}}/{{event.handle|escape}}{{args}}" class="noThumb browsecell">
<span class="grampsid">[{{event.gramps_id}}]</span></a>
{% if user.is_authenticated or event.public %}
<td><a href="/{{view}}/{{event.handle|escape}}{{args}}" class="browsecell">{{event.event_type|nbsp}}</a>
<td><a href="/{{view}}/{{event.handle|escape}}{{args}}" class="browsecell">{{event.description|nbsp}}</a>
<td><a href="/{{view}}/{{event.handle|escape}}{{args}}" class="browsecell">{{event|date_as_text:user}}</a>
<td><a href="/{{view}}/{{event.handle|escape}}{{args}}" class="browsecell">{{event.place.title|nbsp}}</a>
{% else %}
<td><a href="/{{view}}/{{event.handle|escape}}{{args}}" class="browsecell">[Private]</a>
<td><a href="/{{view}}/{{event.handle|escape}}{{args}}" class="browsecell">[Private]</a>
<td><a href="/{{view}}/{{event.handle|escape}}{{args}}" class="browsecell">[Private]</a>
<td><a href="/{{view}}/{{event.handle|escape}}{{args}}" class="browsecell">[Private]</a>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{% block admin_functions %}
{% if user.is_superuser %}
<div style="background-color: lightgray; padding: 2px 0px 0px 2px">
{% make_button "+Add Event" "/event/add" args %}
</div>
{% endif %}
{% endblock %}
-71
View File
@@ -1,71 +0,0 @@
{% extends "view_page.html" %}
{% load my_tags %}
{% block table_data %}
<table cellspacing="0" class="infolist surname" width="95%">
<thead>
<tr>
<th>#</th>
<th>ID</th>
<th>Father</th>
<th>Mother</th>
<th>Relationship</th>
</tr>
</thead>
<tbody>
{% for family in page.object_list %}
<tr class="{% cycle odd,even %}">
<td><a href="/{{view}}/{{family.handle|escape}}{{args}}" class="browsecell"
{% if family.tags.all %}
style="color: {{family.tags.all.0.color|format_color}};"
{% endif %}
>{{ forloop.counter|row_count:page }}</a></td>
<td><a href="/{{view}}/{{family.handle|escape}}{{args}}" class="browsecell"
{% if family.tags.all %}
style="color: {{family.tags.all.0.color|format_color}};"
{% endif %}
><span class="grampsid">[{{family.gramps_id}}]</span></a>
<td><a href="/{{view}}/{{family.handle|escape}}{{args}}" class="browsecell"
{% if family.tags.all %}
style="color: {{family.tags.all.0.color|format_color}};"
{% endif %}
>{{family.father|make_name:user|nbsp}}</a>
<td><a href="/{{view}}/{{family.handle|escape}}{{args}}" class="browsecell"
{% if family.tags.all %}
style="color: {{family.tags.all.0.color|format_color}};"
{% endif %}
>{{family.mother|make_name:user|nbsp}}</a>
{% if user.is_authenticated or family.public %}
<td><a href="/{{view}}/{{family.handle|escape}}{{args}}" class="browsecell"
{% if family.tags.all %}
style="color: {{family.tags.all.0.color|format_color}};"
{% endif %}
>{{family.family_rel_type|escape|nbsp}}</a>
{% else %}
<td><a href="/{{view}}/{{family.handle|escape}}{{args}}" class="browsecell"
{% if family.tags.all %}
style="color: {{family.tags.all.0.color|format_color}};"
{% endif %}
>
{% if not family.public %}
[Private]
{% else %}
{{family.family_rel_type}}
{% endif %}
</a>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{% block admin_functions %}
{% if user.is_superuser %}
<div style="background-color: lightgray; padding: 2px 0px 0px 2px">
{% make_button "+Add Family" "/family/add" args %}
</div>
{% endif %}
{% endblock %}
-205
View File
@@ -1,205 +0,0 @@
{% extends "view_page_detail.html" %}
{% load my_tags %}
{% block content %}
<script type="text/javascript">
$(function(){
$('#tabs').tabs({
'select': function(event, ui){
document.location.hash = ui.panel.id;
}
});
});
</script>
<div class="content" id="IndividualDetail">
{% include "detail_breadcrumb.html" %}
<h2><a href="/person/{{family.father.handle}}">{{family.father|render_name:user}}</a> and <a href="/person/{{family.mother.handle}}">{{family.mother|render_name:user}}</a></h2>
<div id="summaryarea">
<table class="infolist" style="width:90%;"> {% comment %} 4 cols {% endcomment %}
<tbody>
{% if familyform.errors %}
<hr>
<p id="error">The following fields have errors. Please correct and try again.</p>
<div id="error">{{familyform.errors}}</div>
<hr>
{% endif %}
<form method="post" onsubmit="setReturnValues()">{% csrf_token %}
<tr>
<th colspan="2">Father</th>
<th colspan="2">Mother</th>
</tr>
<tr>
<td class="ColumnAttribute">Name:</td>
{% if user.is_authenticated or father.probably_alive %}
<td class="ColumnValue" id="data">
{% if action != "view" %}
<script type="text/javascript">
$(function() {
$('#father').flexbox('/json/?field=father', {
watermark: 'Father',
width: 300,
paging: {
pageSize: 10
},
initialValue: '{{family.father.get_selection_string}}',
initialId: '{{family.father.handle}}'
});
});
// </script>
<div id="father"></div>
{% else %}
{{family.father|render_name:user}}
{% endif %}
</td>
{% else %}
{{family.father|render_name:user}}
{% endif %}
</td>
<td class="ColumnAttribute">Name:</td>
{% if user.is_authenticated or family.mother.probably_alive %}
<td class="ColumnValue" id="data">
{% if action != "view" %}
<script type="text/javascript">
$(function() {
$('#mother').flexbox('/json/?field=mother', {
watermark: 'Mother',
width: 300,
paging: {
pageSize: 10
},
initialValue: '{{family.mother.get_selection_string}}',
initialId: '{{family.mother.handle}}'
});
});
// </script>
<div id="mother"></div>
{% else %}
{{family.mother|render_name:user}}
{% endif %}
{% else %}
{{family.mother|render_name:user}}
{% endif %}
</td>
</tr>
{% if user.is_authenticated or not familyform.father.probably_alive %}
<tr>
<td class="ColumnAttribute">Birth:</td>
<td class="ColumnValue" id="data">{{familyform.father.birth|date_as_text:user}}</td>
<td class="ColumnAttribute">Birth:</td>
<td class="ColumnValue" id="data">{{familyform.mother.birth|date_as_text:user}}</td>
</tr>
{% else %}
<tr>
<td class="ColumnAttribute">Death:</td>
<td class="ColumnValue" id="data">{{familyform.father.death|date_as_text:user}}</td>
<td class="ColumnAttribute">Death:</td>
<td class="ColumnValue" id="data">{{familyform.mother.death|date_as_text:user}}</td>
</tr>
{% endif %}
<tr>
<td class="ColumnAttribute">Death:</td>
<td class="ColumnValue" id="data">{{familyform.father.death|date_as_text:user}}</td>
<td class="ColumnAttribute">Death:</td>
<td class="ColumnValue" id="data">{{familyform.mother.death|date_as_text:user}}</td>
</tr>
</tbody>
</table>
<table class="infolist">
<tbody>
<tr>
<th colspan="4">Relationship information</th>
</tr>
<tr>
<td class="ColumnAttribute">{{familyform.gramps_id.label}}:</td>
<td class="ColumnValue" id="data">{% render familyform.gramps_id user action %}</td>
<td class="ColumnAttribute">{{familyform.family_rel_type.label}}:</td>
<td class="ColumnValue" id="data">{% render familyform.family_rel_type user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{familyform.tags.label}}:</td>
<td class="ColumnValue" id="data">{% render familyform.tags user action %}</td>
<td class="ColumnAttribute">{{familyform.private.label}}:</td>
<td class="ColumnValue" id="data">{% render familyform.private user action %}</td>
</tr>
</tbody>
</table>
</div>
</div>
{% if user.is_superuser %}
{% if action == "edit" %}
{% make_button "Cancel" "/family/%s" family.handle args %}
<input type="hidden" id="father_return" name="father_return" value=""/>
<input type="hidden" id="mother_return" name="mother_return" value=""/>
<input type="hidden" name="action" value="save"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Save"/>
{% else %}
{% ifequal action "add" %}
{% make_button "Cancel" "/family/" args %}
<input type="hidden" id="father_return" name="father_return" value=""/>
<input type="hidden" id="mother_return" name="mother_return" value=""/>
<input type="hidden" name="action" value="create"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Create"/>
{% else %}
<div style="background-color: lightgray; padding: 2px 0px 0px 2px; clear: both;">
{% make_button "+Add Family" "/family/add" args %}
{% make_button "?Edit Family" "/family/%s/edit" family.handle args %}
{% make_button "-Delete Family" "/family/%s/delete" family.handle args %}
</div>
{% endifequal %}
{% endif %}
{% else %}
{% endif %}
<!-- Tabs -->
<div class="ui-tabs ui-widget ui-widget-content ui-corner-all" id="tabs" style="border: none;">
<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
<li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active"><a class="tab-children" href="#tab-children">Children</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-events" href="#tab-events">Event</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-citations" href="#tab-citations">Citation</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-attributes" href="#tab-attributes">Attribute</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-notes" href="#tab-notes">Note</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-media" href="#tab-media">Media</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-lds" href="#tab-lds">LDS</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-history" href="#tab-history">History</a></li>
</ul>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom" id="tab-children" style="background-color: #f4f0ec;">
<!-- Events -->
{% children_table family user action "/person/$act/family/%s" family.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-events" style="background-color: #f4f0ec;">
{% event_table family user action "/event/$act/family/%s" family.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-citations" style="background-color: #f4f0ec;">
{% citation_table family user action "/citation/$act/family/%s" family.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-attributes" style="background-color: #f4f0ec;">
{% attribute_table family user action "/attribute/add/family/%s" family.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-notes" style="background-color: #f4f0ec;">
{% note_table family user action "/note/$act/family/%s" family.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-media" style="background-color: #f4f0ec;">
{% media_table family user action "/media/$act/family/%s" family.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-lds" style="background-color: #f4f0ec;">
{% lds_table family user action "/lds/add/family/%s" family.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-history" style="background-color: #f4f0ec;">
{% history_table family user action %}
</div>
</div>
</form>
{% endblock %}
-53
View File
@@ -1,53 +0,0 @@
{% extends "view_page.html" %}
{% load my_tags %}
{% block table_data %}
<table cellspacing="0" class="infolist surname" width="95%">
<thead>
<tr>
<th>#</th>
<th>ID</th>
<th>Description</th>
<th>File</th>
</tr>
</thead>
<tbody>
{% for media in page.object_list %}
<tr class="{% cycle odd,even %}">
<td>{{ forloop.counter|row_count:page }}</td>
<td><a href="/{{view}}/{{media.handle|escape}}{{args}}" class="noThumb browsecell"
{% if media.tags.all %}
style="color: {{media.tags.all.0.color|format_color}};"
{% endif %}
>
<span class="grampsid">[{{media.gramps_id}}]</span></a>
{% if user.is_authenticated or media.public %}
<td><a href="/{{view}}/{{media.handle|escape}}{{args}}" class="browsecell"
{% if media.tags.all %}
style="color: {{media.tags.all.0.color|format_color}};"
{% endif %}
>{{media.desc|escape}}</a>
<td><a href="/{{view}}/{{media.handle|escape}}{{args}}" class="browsecell"
{% if media.tags.all %}
style="color: {{media.tags.all.0.color|format_color}};"
{% endif %}
>{{media.path|escape}}</a>
{% else %}
<td></td>
<td></td>
<td></td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{% block admin_functions %}
{% if user.is_superuser %}
<div style="background-color: lightgray; padding: 2px 0px 0px 2px">
{% make_button "+Add Media" "/media/add" args %}
</div>
{% endif %}
{% endblock %}
-110
View File
@@ -1,110 +0,0 @@
{% extends "view_page_detail.html" %}
{% load my_tags %}
{% block content %}
<script type="text/javascript">
$(function(){
$('#tabs').tabs({
'select': function(event, ui){
document.location.hash = ui.panel.id;
}
});
});
</script>
<div class="content" id="IndividualDetail">
{% include "detail_breadcrumb.html" %}
<div id="summaryarea">
<table class="infolist" style="width:90%;">
<tbody>
{% if mediaform.errors %}
<hr>
<p id="error">The following fields have errors. Please correct and try again.</p>
<div id="error">{{mediaform.errors}}</div>
<hr>
{% endif %}
<form method="post">{% csrf_token %}
<tr>
<td class="ColumnAttribute">{{mediaform.desc.label}}:</td>
<td class="ColumnValue" id="data" colspan="3">{% render mediaform.desc user action %}</td>
<td rowspan="5">{% media_link media.handle user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{mediaform.gramps_id.label}}:</td>
<td class="ColumnValue" id="data">{% render mediaform.gramps_id user action %}</td>
<td class="ColumnAttribute">{{mediaform.private.label}}:</td>
<td class="ColumnValue" id="data">{% render mediaform.private user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{mediaform.text.label}}:</td>
<td class="ColumnValue" id="data" colspan="3">{% render mediaform.text user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{mediaform.path.label}}:</td>
<td class="ColumnValue" id="data" colspan="3">{% render mediaform.path user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{mediaform.tags.label}}:</td>
<td class="ColumnValue" id="data" colspan="3">{% render mediaform.tags user action %}</td>
</tr>
</table>
{% if user.is_superuser %}
{% if action == "edit" %}
{% make_button "Cancel" "/media/%s" media.handle args %}
<input type="hidden" name="action" value="save"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Save"/>
{% else %}
{% ifequal action "add" %}
{% make_button "Cancel" "/media/" args %}
<input type="hidden" name="action" value="create"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Create"/>
{% else %}
<div style="background-color: lightgray; padding: 2px 0px 0px 2px; clear: both;">
{% make_button "+Add Media" "/media/add" args %}
{% make_button "?Edit Media" "/media/%s/edit" media.handle args %}
{% make_button "-Delete Media" "/media/%s/delete" media.handle args %}
</div>
{% endifequal %}
{% endif %}
{% else %}
{% endif %}
<!-- Tabs -->
<div class="ui-tabs ui-widget ui-widget-content ui-corner-all" id="tabs" style="border: none;">
<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
<li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active"><a class="tab-sources" href="#tab-sources" style=":hover {color: black;}">Citation</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-attributes" href="#tab-attributes">Attribute</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-notes" href="#tab-notes">Note</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-references" href="#tab-references">Reference</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-history" href="#tab-history">History</a></li>
</ul>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-sources" style="background-color: #f4f0ec;">
{% citation_table media user action "/citation/$act/media/%s" media.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-notes" style="background-color: #f4f0ec;">
{% note_table media user action "/note/$act/media/%s" media.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-attributes" style="background-color: #f4f0ec;">
{% attribute_table media user action "/attribute/add/media/%s" media.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom" id="tab-references" style="background-color: #f4f0ec;">
{% media_reference_table media user action %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-history" style="background-color: #f4f0ec;">
{% history_table media user action %}
</div>
</div>
</form>
{% endblock %}
-148
View File
@@ -1,148 +0,0 @@
{% extends "view_page_detail.html" %}
{% load my_tags %}
{% block content %}
<script type="text/javascript">
$(function(){
$('#tabs').tabs({
'select': function(event, ui){
document.location.hash = ui.panel.id;
}
});
});
</script>
<div class="content" id="IndividualDetail">
{% filter breadcrumb %}
{% format "/browse|Browse" %} ||
{% format "/person|People" %} ||
{% format "/person/%s|Person [%s]" object.handle object.gramps_id %} ||
{% format "/person/%s/name/%s|Name #%s" object.handle order order %}
{% endfilter %}
<h3>{{nameform.model|make_name:user}} [{{person.gramps_id}}]</h3>
<div id="summaryarea">
<table class="infolist" style="width:90%;"> {% comment %} 4 cols {% endcomment %}
<tbody>
{% for error in nameform.errors %}
<p id="error">{{error}}</a><br>
{% endfor %}
<form method="post">{% csrf_token %}
<tr>
<td class="ColumnAttribute">{{surnameform.name_origin_type.label}}:</td>
<td class="ColumnValue" id="data">{% render surnameform.name_origin_type user action %}</td>
<td class="ColumnAttribute">{{nameform.name_type.label}}:</td>
<td class="ColumnValue" id="data">{% render nameform.name_type user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{surnameform.surname.label}}:</td>
<td class="ColumnValue" id="data">{% render surnameform.surname user action "get_focus" %}</td>
<td class="ColumnAttribute">{{surnameform.prefix.label}}:</td>
<td class="ColumnValue" id="data">{% render surnameform.prefix user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{nameform.first_name.label}}:</td>
<td class="ColumnValue" id="data">{% render nameform.first_name user action %}</td>
<td class="ColumnAttribute">{{nameform.nick.label}}:</td>
<td class="ColumnValue" id="data">{% render nameform.nick user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{nameform.title.label}}:</td>
<td class="ColumnValue" id="data">{% render nameform.title user action %}</td>
<td class="ColumnAttribute">{{nameform.suffix.label}}:</td>
<td class="ColumnValue" id="data">{% render nameform.suffix user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute"></td>
<td class="ColumnValue" id="data"></td>
<td class="ColumnAttribute">{{nameform.call.label}}:</td>
<td class="ColumnValue" id="data">{% render nameform.call user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{nameform.preferred.label}}:</td>
<td class="ColumnValue" id="data">{% render nameform.preferred user action %}</td>
<td class="ColumnAttribute">{{nameform.private.label}}:</td>
<td class="ColumnValue" id="data">{% render nameform.private user action %}</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- Tabs -->
<div class="ui-tabs ui-widget ui-widget-content ui-corner-all" id="tabs" style="border: none;">
<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
<li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active"><a class="tab-general" href="#tab-general">General</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-surnames" href="#tab-surnames">Surname</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-names" href="#tab-names">Alternate Names</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-citations" href="#tab-citations">Citation</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-notes" href="#tab-notes">Note</a></li>
</ul>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom"
id="tab-general" style="background-color: #f4f0ec;">
<div style="overflow: auto; height:150px;">
<table border="1">
<tr><td style="background-color: #FFF2C5;">{{nameform.group_as.label}}: </td>
<td>{% render nameform.group_as user action %}</td>
</tr>
<tr><td style="background-color: #FFF2C5;">{{nameform.sort_as.label}}: </td>
<td>{% render nameform.sort_as user action %}</td>
</tr>
<tr><td style="background-color: #FFF2C5;">{{nameform.display_as.label}}: </td>
<td>{% render nameform.display_as user action %}</td>
</tr>
<tr><td style="background-color: #FFF2C5;">{{nameform.text.label}}: </td>
<td>{% render nameform.text user action %}</td>
</tr>
</table>
</div>
&nbsp;
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-surnames" style="background-color: #f4f0ec;">
{% surname_table person user action "/person/%s/name/%s/surname/add" person.handle nameform.model.order %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-names" style="background-color: #f4f0ec;">
{% name_table person user action "/person/%s/name" person.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-citations" style="background-color: #f4f0ec;">
{% citation_table nameform.model user action "/citation/add/person/%s/name/%s" person.handle nameform.model.order %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom
ui-tabs-hide" id="tab-notes" style="background-color: #f4f0ec;">
{% note_table nameform.model user action "/note/$act/person/%s/name/%s" person.handle nameform.model.order %}
</div>
</div>
{% if user.is_superuser %}
{% ifequal action "add" %}
{% make_button "Cancel" "/person/%s" person.handle args "#tab-names" %}
<input type="hidden" name="action" value="create"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Create"/>
{% else %}
{% ifequal action "edit" %}
{% make_button "Cancel" "/person/" args "#tab-names" %}
<input type="hidden" name="action" value="save"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Save"/>
{% else %}
<div style="background-color: lightgray; padding: 2px 0px 0px 2px; clear: both;">
{% make_button "+Add Name" "/person/%s/name/add" person.handle args %}
{% make_button "?Edit Name" "/person/%s/name/%s/edit" person.handle order args %}
{% make_button "-Delete Name" "/person/%s/name/%s/delete" person.handle order args %}
</div>
{% endifequal %}
{% endifequal %}
{% else %}
{% endif %}
</form>
{% endblock %}
-117
View File
@@ -1,117 +0,0 @@
{% extends "view_page_detail.html" %}
{% load my_tags %}
{% block content %}
<script type="text/javascript">
$(function(){
$('#tabs').tabs({
'select': function(event, ui){
document.location.hash = ui.panel.id;
}
});
$('.wysiwyg').htmlarea({
toolbar: [
"bold", "italic", "underline",
"|", "forecolor", "superscript", "p",
"|", "link", "unlink",
"|", "html"
]
});
// FIXME: add font, fontsize, backcolor
// FIXME: find easier way:
$('.jHtmlArea').contents().find('iframe').contents().find('body').css({"background-color": "white"});
});
function setnotetext() {
document.getElementById('notetext').value = $('.jHtmlArea').contents().find('iframe').contents().find('body').html();
}
</script>
<div class="content" id="IndividualDetail">
{% include "detail_breadcrumb.html" %}
<div id="summaryarea">
<table class="infolist" style="width:90%;">
<tbody>
{% if noteform.errors %}
<hr>
<p id="error">The following fields have errors. Please correct and try again.</p>
<div id="error">{{noteform.errors}}</div>
<hr>
{% endif %}
<form method="post" onsubmit="setnotetext()">{% csrf_token %}
<tr>
<td class="ColumnAttribute">{{noteform.notetext.label}}:</td>
<td class="ColumnValue" id="data" colspan="3">
{% if action == "edit" or action == "add" %}
<input type="hidden" id="notetext" name="notetext" value=""></input>
{% render noteform.notetext user action %}
{% else %}
<div style="overflow-y: scroll; height: 100px;">{{notetext|safe}}</div>
{% endif %}
</td>
</tr>
</tr>
<tr>
<td></td>
<td></td>
<td class="ColumnAttribute">{{noteform.preformatted.label}}:</td>
<td class="ColumnValue" id="data">{% render noteform.preformatted user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{noteform.gramps_id.label}}:</td>
<td class="ColumnValue" id="data"> {% render noteform.gramps_id user action %}</td>
<td class="ColumnAttribute">{{noteform.note_type.label}}:</td>
<td class="ColumnValue" id="data">{% render noteform.note_type user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{noteform.tags.label}}:</td>
<td class="ColumnValue" id="data" colspan="4">{% render noteform.tags user action %}</td>
</tr>
</table>
{% if user.is_superuser %}
{% if action == "edit" %}
{% make_button "Cancel" "/note/%s" note.handle args %}
<input type="hidden" name="action" value="save"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Save"/>
{% else %}
{% ifequal action "add" %}
{% make_button "Cancel" "/note/" args %}
<input type="hidden" name="action" value="create"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Create"/>
{% else %}
<div style="background-color: lightgray; padding: 2px 0px 0px 2px; clear: both;">
{% make_button "+Add Note" "/note/add" args %}
{% make_button "?Edit Note" "/note/%s/edit" note.handle args %}
{% make_button "-Delete Note" "/note/%s/delete" note.handle args %}
</div>
{% endifequal %}
{% endif %}
{% else %}
{% endif %}
<!-- Tabs -->
<div class="ui-tabs ui-widget ui-widget-content ui-corner-all" id="tabs" style="border: none;">
<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
<li class="ui-corner-top ui-state-default"><a class="tab-references" href="#tab-references">Reference</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-history" href="#tab-history">History</a></li>
</ul>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-references" style="background-color: #f4f0ec;">
{% note_reference_table note user action %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-history" style="background-color: #f4f0ec;">
{% history_table note user action %}
</div>
</div>
</div>
</div>
</form>
{% endblock %}
-53
View File
@@ -1,53 +0,0 @@
{% extends "view_page.html" %}
{% load my_tags %}
{% block table_data %}
<table cellspacing="0" class="infolist surname" width="95%">
<thead>
<tr>
<th>#</th>
<th>ID</th>
<th>Note Type</th>
<th>Text</th>
</tr>
</thead>
<tbody>
{% for note in page.object_list %}
<tr class="{% cycle odd,even %}">
<td>{{ forloop.counter|row_count:page }}</td>
<td><a href="/{{view}}/{{note.handle|escape}}{{args}}" class="noThumb browsecell"
{% if note.tags.all %}
style="color: {{note.tags.all.0.color|format_color}};"
{% endif %}
>
<span class="grampsid">[{{note.gramps_id}}]</span></a>
{% if user.is_authenticated or note.public %}
<td><a href="/{{view}}/{{note.handle|escape}}{{args}}" class="browsecell"
{% if note.tags.all %}
style="color: {{note.tags.all.0.color|format_color}};"
{% endif %}
>{{note.note_type|escape|nbsp}}</a>
<td><a href="/{{view}}/{{note.handle|escape}}{{args}}" class="browsecell"
{% if note.tags.all %}
style="color: {{note.tags.all.0.color|format_color}};"
{% endif %}
>{{note.text|preview:70|nbsp}}</a>
{% else %}
<td>[Private]</td>
<td>[Private]</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{% block admin_functions %}
{% if user.is_superuser %}
<div style="background-color: lightgray; padding: 2px 0px 0px 2px">
{% make_button "+Add Note" "/note/add" args %}
</div>
{% endif %}
{% endblock %}
-28
View File
@@ -1,28 +0,0 @@
{% extends "gramps-base.html" %}
{% load my_tags %}
{% block title %}{{sitename}}: {{tview}} view {% endblock %}
{% block heading %}{{sitename}}: {{tview}} view {% endblock %}
{% block content %}
<div id="description" style="padding: 10pt 10pt 10pt 10pt;">
<form name="SearchForm">
{% if tview != "Report" %}
{% filter breadcrumb %}
{% format "/browse|Browse" %} ||
{% format "/%s|%s" view tviews %}
{% endfilter %}
{% endif %}
<input type="submit" value="Search:"></input>
<input autocomplete="off" name="search" id="get_focus" type="text" size="50" value="{{search}}"></input>
<br/><i>Available search terms</i>: <b>{{search_terms}}</b>
</form>
</div>
{% paginator %}
<div style="overflow:auto; height:300px;width:800px;">
{% block table_data %} <table></table> {% endblock %}
</div>
{% include "paginator.html" %}
{% block admin_functions %}{% endblock %}
{% endblock %}
-6
View File
@@ -1,6 +0,0 @@
{% extends "gramps-base.html" %}
{% load my_tags %}
{% block title %}{{sitename}}: {{tview}} detail {% endblock %}
{% block heading %}{{sitename}}: {{tview}} detail {% endblock %}
{% block content %}
{% endblock %}
-68
View File
@@ -1,68 +0,0 @@
{% extends "view_page.html" %}
{% load my_tags %}
{% block table_data %}
<table cellspacing="0" class="infolist surname" width="95%">
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>ID</th>
<th>Gender</th>
<th>Birth Date</th>
<th>Death Date</th>
</tr>
</thead>
<tbody>
{% for name in page.object_list %}
<tr class="{% cycle odd,even %}" style="">
{% if name.person %}
<td><a href="{{name.person.handle}}/{{args}}" class="noThumb browsecell"
{% if name.person.tags.all %}
style="color: {{name.person.tags.all.0.color|format_color}};"
{% endif %}
>{{ forloop.counter|row_count:page }}</a>
</td>
<td><a href="{{name.person.handle}}/{{args}}" class="noThumb browsecell"
{% if name.person.tags.all %}
style="color: {{name.person.tags.all.0.color|format_color}};"
{% endif %}
>{{name|make_name:user}} &nbsp;</a>
</td>
<td><a href="{{name.person.handle}}/{{args}}" class="grampsid browsecell"
{% if name.person.tags.all %}
style="color: {{name.person.tags.all.0.color|format_color}};"
{% endif %}
>[{{name.person.gramps_id}}]</a></td>
<td><a href="{{name.person.handle}}/{{args}}" class="noThumb browsecell"
{% if name.person.tags.all %}
style="color: {{name.person.tags.all.0.color|format_color}};"
{% endif %}
>{{name.person.gender_type}} &nbsp;</a></td>
<td><a href="{{name.person.handle}}/{{args}}" class="noThumb browsecell"
{% if name.person.tags.all %}
style="color: {{name.person.tags.all.0.color|format_color}};"
{% endif %}
>{{name.person.birth|date_as_text:user}} &nbsp;</a></td>
<td><a href="{{name.person.handle}}/{{args}}" class="noThumb browsecell"
{% if name.person.tags.all %}
style="color: {{name.person.tags.all.0.color|format_color}};"
{% endif %}
>{{name.person.death|date_as_text:user}} &nbsp;</a></td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{% block admin_functions %}
{% if user.is_superuser %}
<div style="background-color: lightgray; padding: 2px 0px 0px 2px">
{% make_button "+Add Person" "/person/add" args %}
</div>
{% endif %}
{% endblock %}
-175
View File
@@ -1,175 +0,0 @@
{% extends "view_page_detail.html" %}
{% load my_tags %}
{% block content %}
<script type="text/javascript">
$(function(){
$('#tabs').tabs({
'select': function(event, ui){
document.location.hash = ui.panel.id;
}
});
});
</script>
<div class="content" id="IndividualDetail">
{% include "detail_breadcrumb.html" %}
<div id="summaryarea">
<table class="infolist" style="width:90%;"> {% comment %} 5 cols {% endcomment %}
<tbody>
{% if personform.errors or nameform.errors or surnameform.errors or logform.errors %}
<hr>
<p id="error">The following fields have errors. Please correct and try again.</p>
<div id="error">
{{personform.errors}}
{{nameform.errors}}
{{surnameform.errors}}
{{logform.errors}}
</div>
<hr>
{% endif %}
<form method="post">{% csrf_token %}
<tr>
<td colspan="4" id="subtitle">{{nameform|render_name:user}}</td>
<td class="ColumnAttribute">{{nameform.name_type.label}}:</td>
<td class="ColumnValue" id="data">{% render nameform.name_type user action %}</td>
</tr>
<tr><td id="rowspace"></td></tr>
<tr>
<td class="ColumnAttribute">{{nameform.title.label}}:</td>
<td class="ColumnValue" id="data">{% render nameform.title user action "get_focus" %}</td>
<td class="ColumnAttribute">{{nameform.nick.label}}:</td>
<td class="ColumnValue" id="data">{% render nameform.nick user action %}</td>
<td class="ColumnAttribute">{{nameform.call.label}}:</td>
<td class="ColumnValue" id="data">{% render nameform.call user action %}</td>
</tr>
<tr><td id="rowspace"></td></tr>
<tr>
<td class="ColumnAttribute">{{nameform.first_name.label}}:</td>
<td class="ColumnValue" id="data" colspan="4">{% render nameform.first_name user action None "/person/?search=given%%3D%s" nameform.model.first_name %}</td>
<td class="ColumnValue" id="data">{% render nameform.suffix user action %}</td>
</tr>
<tr><td id="rowspace"></td></tr>
<tr>
<td class="ColumnAttribute">{{surnameform.surname.label}}:</td>
<td class="ColumnValue" id="data">{% render surnameform.prefix user action %}
<td class="ColumnValue" id="data" colspan="2">{% render surnameform.surname user action None "/person/?search=surname%%3D%s" surnameform.model.surname %}</td>
<td class="ColumnAttribute">{{surnameform.name_origin_type.label}}:</td>
<td class="ColumnValue" id="data" colspan="2">{% render surnameform.name_origin_type user action %}</td>
</tr>
<tr><td id="rowspace"></td></tr>
<tr>
<td class="ColumnAttribute">{{personform.gender_type.label}}:</td>
<td class="ColumnValue" id="data">{% render personform.gender_type user action None "/person/?search=gender%%3D%s" personform.model.gender_type %}</td>
<td class="ColumnAttribute">{{personform.gramps_id.label}}:</td>
<td class="ColumnValue" id="data">{% render personform.gramps_id user action %}</td>
<td class="ColumnAttribute">{{personform.tags.label}}:</td>
<td class="ColumnValue" id="data" rowspan="3">{% render personform.tags user action %}</td>
</tr>
<tr><td id="rowspace"></td></tr>
<tr>
<td class="ColumnAttribute">{{personform.private.label}}:</td>
<td class="ColumnValue" id="data">{% render personform.private user action %}</td>
<td class="ColumnAttribute">{{personform.probably_alive.label}}:</td>
<td class="ColumnValue" id="data">{% if person.probably_alive %}Yes{% else %}No{% endif %}</td>
</tr>
</tbody>
</table>
</div>
</div>
{% if logform %}
<table>
{{logform.as_table}}
</table>
{% endif %}
{% if user.is_superuser %}
{% if action == "edit" %}
{% make_button "Cancel" "/person/%s" person.handle args %}
<input type="hidden" name="action" value="save"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Save"/>
{% else %}
{% ifequal action "add" %}
{% make_button "Cancel" "/person/" args %}
<input type="hidden" name="action" value="create"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Create"/>
{% else %}
<div style="background-color: lightgray; padding: 2px 0px 0px 2px; clear: both;">
{% make_button "+Add Person" "/person/add" args %}
{% make_button "?Edit Person" "/person/%s/edit" person.handle args %}
{% make_button "-Delete Person" "/person/%s/delete" person.handle args %}
</div>
{% endifequal %}
{% endif %}
{% else %}
{% endif %}
<!-- Tabs -->
<div class="ui-tabs ui-widget ui-widget-content ui-corner-all" id="tabs" style="border: none;">
<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
<li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active"><a class="tab-events" href="#tab-events">Event</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-references" href="#tab-references">Family</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-names" href="#tab-names">Name</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-citations" href="#tab-citations">Citation</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-attributes" href="#tab-attributes">Attribute</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-addresses" href="#tab-addresses">Address</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-notes" href="#tab-notes">Note</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-media" href="#tab-media">Media</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-internet" href="#tab-internet">Internet</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-association" href="#tab-association">Association</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-lds" href="#tab-lds">LDS</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-history" href="#tab-history">History</a></li>
</ul>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom" id="tab-events" style="background-color: #f4f0ec;">
<!-- Events -->
{% event_table person user action "/event/$act/person/%s" person.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-names" style="background-color: #f4f0ec;">
{% name_table person user action "/person/%s/name" person.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-citations" style="background-color: #f4f0ec;">
{% citation_table person user action "/citation/$act/person/%s" person.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-attributes" style="background-color: #f4f0ec;">
{% attribute_table person user action "/attribute/$act/person/%s" person.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-addresses" style="background-color: #f4f0ec;">
{% address_table person user action "/place/$act/person/%s" person.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom
ui-tabs-hide" id="tab-notes" style="background-color: #f4f0ec;">
{% note_table person user action "/note/$act/person/%s" person.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-media" style="background-color: #f4f0ec;">
{% media_table person user action "/media/$act/person/%s" person.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-internet" style="background-color: #f4f0ec;">
{% internet_table person user action "/person/%s/$act/internet" person.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-association" style="background-color: #f4f0ec;">
{% association_table person user action "/person/%s/$act/association" person.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-lds" style="background-color: #f4f0ec;">
{% lds_table person user action "/person/%s/$act/lds" person.handle %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-references" style="background-color: #f4f0ec;">
{% person_reference_table person user action %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-history" style="background-color: #f4f0ec;">
{% history_table person user action %}
</div>
</div>
</form>
{% endblock %}
-148
View File
@@ -1,148 +0,0 @@
{% extends "view_page_detail.html" %}
{% load my_tags %}
{% block content %}
<script type="text/javascript">
$(function(){
$('#tabs').tabs({
'select': function(event, ui){
document.location.hash = ui.panel.id;
}
});
});
</script>
<div class="content" id="IndividualDetail">
{% include "detail_breadcrumb.html" %}
<div id="summaryarea">
<table class="infolist" style="width:90%;">
<trbody>
{% if placeform.errors %}
<hr>
<p id="error">The following fields have errors. Please correct and try again.</p>
<div id="error">{{placeform.errors}}</div>
<hr>
{% endif %}
<form method="post">{% csrf_token %}
<tr>
<td class="ColumnAttribute">{{placeform.title.label}}:</td>
<td class="Columnvalue" id="data" colpan="3"> {% render placeform.title user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{placeform.lat.label}}:</td>
<td class="ColumnValue" id="data">{% render placeform.lat user action %}</td>
<td class="ColumnAttribute">{{placeform.long.label}}:</td>
<td class="ColumnValue" id="data">{% render placeform.long user action %}</td>
</tr>
<tr>
<td class="ColumnAttribute">{{placeform.gramps_id.label}}:</td>
<td class="ColumnValue" id="data">{% render placeform.gramps_id user action %}</td>
<td class="ColumnAttribute">{{placeform.private.label}}:</td>
<td class="ColumnValue" id="data">{% render placeform.private user action %}</td>
</tr>
</table>
<!-- Tabs -->
<div class="ui-tabs ui-widget ui-widget-content ui-corner-all" id="tabs" style="border: none;">
<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
<li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active"><a class="tab-locations" href="#tab-locations">Location</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-alternatelocations" href="#tab-alternatelocations">Alternate Locations</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-citations" href="#tab-citations">Citation</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-notes" href="#tab-notes">Note</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-media" href="#tab-media">Media</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-internet" href="#tab-internet">Internet</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-references" href="#tab-references">Reference</a></li>
<li class="ui-corner-top ui-state-default"><a class="tab-history" href="#tab-history">History</a></li>
</ul>
<div class="ui-tab-panel ui-widget-content ui-corner-bottom" id="tab-locations" style="background-color: #f4f0ec;">
<table class="infolist" style="width:90%;">
<tr>
<td class="ColumnAttribute">Street:</td>
<td class="Columnvalue" id="data" colspan="3"> FIXME </td>
</tr>
<tr>
<td class="ColumnAttribute">Locality:</td>
<td class="Columnvalue" id="data"> FIXME </td>
<td class="ColumnAttribute">Church parish:</td>
<td class="Columnvalue" id="data"> FIXME </td>
</tr>
<tr>
<td class="ColumnAttribute">City:</td>
<td class="Columnvalue" id="data"> FIXME </td>
<td class="ColumnAttribute">State:</td>
<td class="Columnvalue" id="data"> FIXME </td>
</tr>
<tr>
<td class="ColumnAttribute">County:</td>
<td class="Columnvalue" id="data"> FIXME </td>
<td class="ColumnAttribute">ZIP/Postal code:</td>
<td class="Columnvalue" id="data"> FIXME </td>
</tr>
<tr>
<td class="ColumnAttribute">Country:</td>
<td class="Columnvalue" id="data"> FIXME </td>
<td class="ColumnAttribute">Phone:</td>
<td class="Columnvalue" id="data"> FIXME </td>
</tr>
</table>
</div>
<div class="ui-tab-panel ui-widget-content ui-corner-bottom ui-tab-hide" id="tab-alternatelocations" style="background-color: #f4f0ec;">
{% location_table place user action "/location/$act/place/%s" place.handle %}
</div>
<div class="ui-tab-panel ui-widget-content ui-corner-bottom ui-tab-hide" id="tab-citations" style="background-color: #f4f0ec;">
{% citation_table place user action "/citation/$act/place/%s" place.handle %}
</div>
<div class="ui-tab-panel ui-widget-content ui-corner-bottom ui-tab-hide" id="tab-notes" style="background-color: #f4f0ec;">
{% note_table place user action "/note/$act/place/%s" place.handle %}
</div>
<div class="ui-tab-panel ui-widget-content ui-corner-bottom ui-tab-hide" id="tab-media" style="background-color: #f4f0ec;">
{% media_table place user action "/media/$act/place/%s" place.handle %}
</div>
<div class="ui-tab-panel ui-widget-content ui-corner-bottom ui-tab-hide" id="tab-internet" style="background-color: #f4f0ec;">
{% internet_table place user action "/internet/$act/place/%s" place.handle %}
</div>
<div class="ui-tab-panel ui-widget-content ui-corner-bottom ui-tab-hide" id="tab-references" style="background-color: #f4f0ec;">
{% place_reference_table place user action %}
</div>
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-history" style="background-color: #f4f0ec;">
{% history_table place user action %}
</div>
</div>
</div>
</div>
{% if user.is_superuser %}
{% if action == "edit" %}
{% make_button "Cancel" "/place/%s" place.handle args %}
<input type="hidden" name="action" value="save"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Save"/>
{% else %}
{% ifequal action "add" %}
{% make_button "Cancel" "/place/" args %}
<input type="hidden" name="action" value="create"/>
<input type="hidden" name="search" value="{{search}}"/>
<input type="hidden" name="page" value="{{page}}"/>
<input type="submit" value="Create"/>
{% else %}
<div style="background-color: lightgray; padding: 2px 0px 0px 2px; clear: both;">
{% make_button "+Add Place" "/place/add" args %}
{% make_button "?Edit Place" "/place/%s/edit" place.handle args %}
{% make_button "-Delete Place" "/place/%s/delete" place.handle args %}
</div>
{% endifequal %}
{% endif %}
{% else %}
{% endif %}
</form>
{% endblock %}
-38
View File
@@ -1,38 +0,0 @@
{% extends "view_page.html" %}
{% load my_tags %}
{% block table_data %}
<table cellspacing="0" class="infolist surname" width="95%">
<thead>
<tr>
<th>#</th>
<th>ID</th>
<th>Title</th>
</tr>
</thead>
<tbody>
{% for place in page.object_list %}
<tr class="{% cycle odd,even %}">
<td>{{ forloop.counter|row_count:page }}</td>
<td><a href="/{{view}}/{{place.handle|escape}}{{args}}" class="noThumb browsecell">
<span class="grampsid">[{{place.gramps_id}}]</span></a>
{% if user.is_authenticated or place.public %}
<td><a href="/{{view}}/{{place.handle|escape}}{{args}}" class="browsecell">{{place.title|escape|nbsp}}</a>
{% else %}
<td></td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{% block admin_functions %}
{% if user.is_superuser %}
<div style="background-color: lightgray; padding: 2px 0px 0px 2px">
{% make_button "+Add Places" "/place/add" args %}
</div>
{% endif %}
{% endblock %}
-35
View File
@@ -1,35 +0,0 @@
{% extends "view_page.html" %}
{% load my_tags %}
{% block table_data %}
<table cellspacing="0" class="infolist surname" width="95%">
<thead>
<tr>
<th>#</th>
<th>Report Name</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
{% for report in page.object_list %}
<tr class="{% cycle odd,even %}">
<td>{{ forloop.counter|row_count:page }}</td>
<td><a href="/{{view}}/{{report.handle|escape}}" class="noThumb browsecell">
<span class="grampsid">{{report.name}}</span></a>
{% if user.is_authenticated %}
<td></td>
<td></td>
{% else %}
<td></td>
<td></td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
-51
View File
@@ -1,51 +0,0 @@
{% extends "view_page_detail.html" %}
{% load my_tags %}
{% block content %}
<div class="content" id="IndividualDetail">
{% include "detail_breadcrumb.html" %}
<div id="summaryarea">
<form name="RunForm" action="/report/{{report.handle}}/run">
<table class="infolist" style="width:90%;">
<tr>
<td class="ColumnAttribute">Name:</td>
<td class="ColumnValue" id="data" colspan="5">{{report.name}} </td>
</tr>
<tr>
<td class="ColumnAttribute">Type:</td>
<td class="ColumnValue" id="data">{{report.report_type}}</td>
</tr>
<td class="ColumnAttribute">Options:</td>
<td class="ColumnValue" id="data">
<textarea autocomplete="off" name="options" id="get_focus" cols="70" rows="20">
{% if report.options %}{{report.options}}{% else %}{% endif %}
</textarea>
<br>
<i>Hint</i>: use Gramps CLI options such as output file format <b>off=pdf</b>, <b>off=ged</b>, or <b>off=gramps</b>
</td>
</tr>
<td class="ColumnValue">
<input type="submit" value="Run"></input>
</td>
<td>
</td>
</form>
</tr>
<tr>
<td class="ColumnAttribute">Help:</td>
<td class="ColumnValue" id="data">
{{help|safe}}
</td>
</tr>
</table>
</div>
</div>
{% endblock %}
-42
View File
@@ -1,42 +0,0 @@
{% extends "view_page.html" %}
{% load my_tags %}
{% block table_data %}
<table cellspacing="0" class="infolist surname" width="95%">
<thead>
<tr>
<th>#</th>
<th>ID</th>
<th>Type</th>
<th>Name</th>
</tr>
</thead>
<tbody>
{% for repository in page.object_list %}
<tr class="{% cycle odd,even %}">
<td>{{ forloop.counter|row_count:page }}</td>
<td><a href="/{{view}}/{{repository.handle|escape}}{{args}}" class="noThumb browsecell">
<span class="grampsid">[{{repository.gramps_id}}]</span></a>
{% if user.is_authenticated or repository.public %}
<td><a href="/{{view}}/{{repository.handle|escape}}{{args}}" class="browsecell">{{repository.repository_type|escape|nbsp}}</a>
<td><a href="/{{view}}/{{repository.handle|escape}}{{args}}" class="browsecell">{{repository.name|escape|nbsp}}</a>
{% else %}
<td></td>
<td></td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{% block admin_functions %}
{% if user.is_superuser %}
<div style="background-color: lightgray; padding: 2px 0px 0px 2px">
{% make_button "+Add Repository" "/repository/add" args %}
</div>
{% endif %}
{% endblock %}

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