Compare commits
50 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a94f3100df | |||
| 5d341a684e | |||
| 26723c1b60 | |||
| de7430eeb8 | |||
| 89ffc6b4cc | |||
| a18120f17d | |||
| 2846fc7dc5 | |||
| e6c5232ae8 | |||
| e7ab8b322b | |||
| fde34bb53b | |||
| 60c0843861 | |||
| 2ae2ca5c7d | |||
| 9747d1deea | |||
| e52d0a7a90 | |||
| eefd3e13e4 | |||
| 918317434f | |||
| 8dfc5381cd | |||
| 6511a80b47 | |||
| a5074e9478 | |||
| b90808525c | |||
| fedfabc87e | |||
| 891b9d2e34 | |||
| 3b0579afc3 | |||
| 5e763026a4 | |||
| de706de317 | |||
| b884dc0e4c | |||
| aaba2ec347 | |||
| bdd44b57fd | |||
| 8deb444a6c | |||
| ca3158a6ff | |||
| 53a9cfc83f | |||
| 92fc8f8dcb | |||
| 7a488c2fd4 | |||
| 98ff7693f3 | |||
| 6b7258dfe0 | |||
| aceee07544 | |||
| 9e670d51bd | |||
| 8e97b25f38 | |||
| 6aeeafe74d | |||
| 4189799d45 | |||
| 5bfe514f45 | |||
| aa35dbfb82 | |||
| 784ab0c3c7 | |||
| 5847bb0e17 | |||
| 08ac0b0996 | |||
| c38ccf22ed | |||
| 1866b7ace1 | |||
| 27b7676caa | |||
| c273926941 | |||
| ba8392923a |
@@ -1,18 +0,0 @@
|
||||
# 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
|
||||
|
||||
# don't mess with line endings for test files
|
||||
*.vcs -text
|
||||
*.ged -text
|
||||
*.GED -text
|
||||
*.csv -text
|
||||
*.DEF -text
|
||||
*.IXI -text
|
||||
*.REM -text
|
||||
@@ -8,7 +8,7 @@ dist/
|
||||
|
||||
# Gramps
|
||||
data/tips.xml
|
||||
data/holidays.xml
|
||||
gramps/plugins/lib/holidays.xml
|
||||
po/.intltool-merge-cache
|
||||
docs/_build/
|
||||
|
||||
@@ -18,10 +18,4 @@ tags
|
||||
|
||||
# Testing
|
||||
test/data
|
||||
|
||||
# Windows image file caches
|
||||
Thumbs.db
|
||||
ehthumbs.db
|
||||
|
||||
# Glade temp files
|
||||
*~
|
||||
gramps/webapp/grampsdb/fixtures/initial_data.json
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
<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> <niememat@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>
|
||||
|
||||
@@ -1,378 +0,0 @@
|
||||
[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
|
||||
@@ -1,129 +1,29 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2015-2015 Doug Blank
|
||||
# Copyright (C) 2016 DaAwesomeP
|
||||
# Copyright (C) 2016 QuLogic
|
||||
# Copyright (C) 2016 Tim G L Lyons
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
# After changing this file, check it on:
|
||||
# http://lint.travis-ci.org/
|
||||
|
||||
sudo: required
|
||||
dist: trusty
|
||||
language: python
|
||||
python:
|
||||
- 3.3 # This is irrelevant, because the virtualenv is not used at all
|
||||
|
||||
# FIXME: The minimum requirement for Gramps is Python 3.2, so a test environment
|
||||
# for Python 3.2 should be added to this environment which is Python 3.3. It
|
||||
# will not be possible to run coverage under Python 3.2, because coverage is
|
||||
# Python 3.3 (or above) only.
|
||||
|
||||
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
|
||||
- python3-pyicu
|
||||
- python3-coverage
|
||||
- python3-jsonschema
|
||||
# lxml dependencies. for merge_ref_test to work
|
||||
# - libxml2-dev
|
||||
# - libxslt1-dev
|
||||
- libxml2-utils
|
||||
- python3-lxml
|
||||
- python-libxml2
|
||||
# ubuntu 14.04 requires this in addition to libxml2-dev and
|
||||
# libxslt1-dev for compiling lxml.
|
||||
# https://github.com/deanmalmgren/textract/issues/19
|
||||
- zlib1g-dev
|
||||
|
||||
before_install:
|
||||
language: c
|
||||
#python:
|
||||
# - 3.3
|
||||
# - 3.4
|
||||
|
||||
install:
|
||||
# The working directory is set to /home/travis/build/gramps-project/gramps
|
||||
# by the automatic git checkout.
|
||||
- git clone --depth=50 --branch=maintenance/gramps42 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
|
||||
|
||||
# Download Sean Ross-Ross's Pure Python module containing a framework to
|
||||
# manipulate and analyze python ast�s and bytecode. This is loaded to
|
||||
# /home/travis/build/gramps-project/gramps/meta
|
||||
# FIXME: This should be loaded from the release directory at
|
||||
# https://pypi.python.org/pypi/meta
|
||||
- git clone -b master https://github.com/srossross/meta
|
||||
- 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
|
||||
|
||||
# Build Gramps package. This seems to copy everything to
|
||||
# /home/travis/build/scripts-3.3
|
||||
- python setup.py build
|
||||
|
||||
before_script:
|
||||
# Create the Gramps database directory.
|
||||
- mkdir -p ~/.gramps/grampsdb/
|
||||
# set PYTHONPATH so the directly installed module (meta) is picked up from
|
||||
# /home/travis/build/gramps-project/gramps/meta
|
||||
- export PYTHONPATH=meta
|
||||
# set module exclusions. --exclude=TestUser because of older version of mock
|
||||
# without configure_mock
|
||||
- export EXCLUDE="--exclude=TestcaseGenerator"
|
||||
# --exclude=merge_ref_test"
|
||||
# set GRAMPS_RESOURCES for locale, data,image and documentation
|
||||
- export GRAMPS_RESOURCES=.
|
||||
# Install addons
|
||||
- mkdir -p ~/.gramps/gramps50/plugins/
|
||||
- wget https://github.com/gramps-project/addons/raw/master/gramps50/download/CliMerge.addon.tgz
|
||||
- tar -C ~/.gramps/gramps50/plugins -xzf CliMerge.addon.tgz
|
||||
- wget https://github.com/gramps-project/addons/raw/master/gramps50/download/ExportRaw.addon.tgz
|
||||
- tar -C ~/.gramps/gramps50/plugins -xzf ExportRaw.addon.tgz
|
||||
#before_script:
|
||||
# - sudo Xvfb :99 -ac &
|
||||
# - export DISPLAY=:99
|
||||
|
||||
script:
|
||||
# Ignore the virtualenv entirely. Use nosetests3, python3 (3.4.0) and coverage
|
||||
# from /usr/bin. Use libraries from /usr/lib/python3.4,
|
||||
# /usr/local/lib/python3.4/dist-packages and /usr/lib/python3/dist-packages
|
||||
- nosetests3 --nologcapture --with-coverage --cover-package=gramps $EXCLUDE
|
||||
gramps
|
||||
# FIXME: This should have run from the current directory, rather than from
|
||||
# gramps, because there is some test code in that directory.
|
||||
|
||||
# give an error for any trailing whitespace
|
||||
- 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:
|
||||
# apt-get installs python3-coverage, but codecov only invokes coverage, so make
|
||||
# a link
|
||||
- sudo ln /usr/bin/python3-coverage /usr/bin/coverage
|
||||
|
||||
# We have to use the bash script because the apt-get coverage does not install
|
||||
# codecov. If we used pip to install codecov, it would run inside the
|
||||
# virtualenv, and that doesn't work. Change the path to ensure that codecov
|
||||
# picks up coverage from /usr/bin, rather than from
|
||||
# /home/travis/virtualenv/python3.3.6/bin/
|
||||
- PATH=/usr/bin:$PATH bash <(curl -s https://codecov.io/bash)
|
||||
- mkdir -p /home/travis/.gramps/grampsdb/
|
||||
- DJANGO_SETTINGS_MODULE=gramps.webapp.settings nosetests3 --exclude=TestcaseGenerator --exclude=vcard --exclude=merge_ref_test gramps
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
See developer documentation at:
|
||||
https://gramps-project.org/wiki/index.php?title=Portal:Developers
|
||||
https://gramps-project.org/wiki/index.php?title=Brief_introduction_to_Git#Making_a_patchfile
|
||||
https://gramps-project.org/wiki/index.php?title=Brief_introduction_to_Git#Making_a_PR
|
||||
|
||||
If you are interested in translating:
|
||||
* The Gramps program to your language see:
|
||||
https://gramps-project.org/wiki/index.php?title=Translating_Gramps
|
||||
https://gramps-project.org/wiki/index.php?title=Portal:Translators
|
||||
|
||||
* The Gramps user manual to your language see:
|
||||
https://gramps-project.org/wiki/index.php?title=Translating_the_Gramps_User_manual
|
||||
@@ -1,746 +0,0 @@
|
||||
2018-12-20 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/configure.py, gramps/gui/display.py,
|
||||
gramps/gui/glade/book.glade, gramps/gui/glade/styleeditor.glade,
|
||||
gramps/gui/plug/report/_bookdialog.py,
|
||||
gramps/gui/plug/report/_styleeditor.py,
|
||||
gramps/gui/selectors/selectperson.py,
|
||||
gramps/gui/selectors/selectrepository.py,
|
||||
gramps/gui/widgets/grampletpane.py,
|
||||
gramps/gui/widgets/reorderfam.py,
|
||||
gramps/plugins/tool/mediamanager.py,
|
||||
gramps/plugins/tool/relcalc.glade, gramps/plugins/tool/relcalc.py,
|
||||
po/ar.po, po/bg.po, po/br.po, po/ca.po, po/cs.po, po/da.po,
|
||||
po/de.po, po/el.po, po/en_GB.po, po/eo.po, po/es.po, po/fi.po,
|
||||
po/fr.po, po/ga.po, po/gramps.pot, po/he.po, po/hr.po, po/hu.po,
|
||||
po/is.po, po/it.po, po/ja.po, po/lt.po, po/mk.po, po/nb.po,
|
||||
po/nl.po, po/nn.po, po/pl.po, po/pt_BR.po, po/pt_PT.po, po/ro.po,
|
||||
po/ru.po, po/sk.po, po/sl.po, po/sq.po, po/sr.po, po/sr_Latn.po,
|
||||
po/sv.po, po/ta.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po,
|
||||
po/zh_HK.po, po/zh_TW.po: Help issues for bug 9042 (#738) * Media Manager: add help button and remove '...' Issue #9042 * Edit/Preferences: add Help button Issue #9042 * Style Editor, Document Styles dialog: add help buttons Issue #9042 * Fix Select Person dialog Help button URL Issue #9042 * Fix Select Repository dialog Help button URL Issue #9042 * Relationship Calculator: Add help button Issue #9042 * Reorder Relationships dialog; add Help button Issue #9042 * Generate Book Dialog; Fix Help URL Issue #9042 * Manage Book dialog; add help button Issue #9042 * Fix Detached Gramplets Help button URL when 'help_url' not in .gpr Issue #9042 * Fix help URLs when they contain illegal characters and to match
|
||||
wiki section targetID algorithm Issue #9042
|
||||
|
||||
2018-12-20 prculley <paulr2787@gmail.com>
|
||||
|
||||
* po/hu.po: Updated Hungarian translation
|
||||
|
||||
2018-12-20 milotype <43657314+milotype@users.noreply.github.com>
|
||||
|
||||
* gramps/gen/datehandler/_date_hr.py, po/hr.po: Croatian
|
||||
localisation updates (#741) * Update/Completion Croatian translation This is a big update. The croatian translation is now 100% complete.
|
||||
Translated all missing strings, made lots of corrections, improved
|
||||
consistency in the wording, tested thoroughly. Also, it will work
|
||||
with the updated datehandler file "_date_hr.py", which i'll be
|
||||
updating simultaneously. * Croatian Datehandler update Made changes to fit croatian specific date handling. Also because
|
||||
i've updated the hr.po file. I've tested it with the present
|
||||
"_datedisplay.py" of the maintainance/gramps50 branch. Basically it would be great, if next to the obligatory "display_iso"
|
||||
format, only two more formats would show up in the croatian
|
||||
drop-down menus: "dd_dformat01" (numerical) and "dd_dformat04".
|
||||
Other formats are unneeded. 9. 5. 2018. => ordinal numbers, all separated by spaces 9. svibnja 2018. => ordinal numbers and genitiv month's form, all
|
||||
separated by spaces
|
||||
|
||||
2018-12-20 Nick Hall <nick-h@gramps-project.org>
|
||||
|
||||
* gramps/gen/db/generic.py: Fix contents of enclosed_by secondary
|
||||
dbapi column (#742) The enclosed_by column should contain the first value in the list
|
||||
instead of the last. Resolves #10907.
|
||||
|
||||
2018-12-18 Leonhaeuser <mirko@leonhaeuser.de>
|
||||
|
||||
* po/de.po: update German translation
|
||||
|
||||
2018-12-15 SNoiraud <serge.noiraud@laposte.net>
|
||||
|
||||
* gramps/plugins/mapservices/googlemap.py: Google maps URL problem Fixes #10772
|
||||
|
||||
2018-12-09 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/plug/docbackend/docbackend.py: Fix ODT reports with
|
||||
links when run in non-English languages Fixes #10911
|
||||
|
||||
2018-12-06 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/plug/report/_reportdialog.py: Allow addon Reports to
|
||||
specify a help button URL for options dialog Fixes #10910
|
||||
|
||||
2018-12-01 Nick Hall <nick-h@gramps-project.org>
|
||||
|
||||
* gramps/plugins/db/dbapi/dbapi.py, gramps/plugins/tool/rebuild.py:
|
||||
Fix Rebuild Secondary Indexes tool for dbapi backends For dbapi backends, this tool will update the secondary columns that
|
||||
are used for indexing. Resolves #10757.
|
||||
|
||||
2018-11-15 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/db/dbapi/dbapi.py: Fix dbapi set_name_group_mapping
|
||||
to properly close transaction Fixes #10730
|
||||
|
||||
2018-10-24 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/datehandler/_date_ru.py: Fix Russian date handler crash
|
||||
when Russian .po isn't present Fixes #10855
|
||||
|
||||
2018-12-04 Leonhaeuser <mirko@leonhaeuser.de>
|
||||
|
||||
* po/de.po: update German translation
|
||||
|
||||
2018-12-04 vantu5z <vantu5z@mail.ru>
|
||||
|
||||
* po/ru.po: update Russian translation
|
||||
|
||||
2018-11-29 niememat <niememat@gmail.com>
|
||||
|
||||
* po/fi.po: Update finnish translation
|
||||
|
||||
2018-11-28 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/plug/quick/_quicktable.py: Fix Quickview for missing
|
||||
table data on some Gtk Versions (#593) Issue #10448 Issue #7867
|
||||
|
||||
2018-11-28 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/cli/arghandler.py, gramps/gui/grampsgui.py: Fix startup
|
||||
messages with bad filename (#720) Fixes #10885
|
||||
|
||||
2018-11-28 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/selectors/selectplace.py,
|
||||
gramps/gui/views/treemodels/placemodel.py,
|
||||
gramps/plugins/lib/libplaceview.py: Restrict Place view Name col to
|
||||
the primary name (#673) while allowing searchbar to find alt and primary names related to Issue #9276 while allowing searchbar to find alt and primary names. Currently, the Place View and Place Selector name column shows a
|
||||
comma separated list of the primary and alt names for a place. With
|
||||
the advent of GeoNames and Gov data, the alt names lists are getting
|
||||
populated with (sometimes long) lists of (sometimes duplicated)
|
||||
names. This doesn't look very good in the view. I've gotten a couple
|
||||
of email complaints about this. The Name column was originally extended (for Gramps50) to include
|
||||
alt names to allow the use of the top search bar (enabled when
|
||||
sidebar is turned off via 'View/Sidebar'), to perform a search
|
||||
through all the alt names as well as primary name.
|
||||
https://gramps-project.org/bugs/view.php?id=9276 This PR creates a new (hidden) column in the place model containing
|
||||
the full name list, and reverts the 'Name' column to the primary
|
||||
name. It also modifies the PlaceSelector and PlaceView classes to
|
||||
cause the search bar to use the new (hidden) column.
|
||||
|
||||
2018-11-28 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/filters/sidebar/_personsidebarfilter.py: Fix Person
|
||||
Sidebarfilter when using 'Event' and Reg expressions (#729) Fixes #10659
|
||||
|
||||
2018-11-28 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/tool/finddupes.py: Fix Find Duplicate People;
|
||||
exception when deleting someone shown (#728) outside of the tool Fixes #10875
|
||||
|
||||
2018-11-28 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* data/tests/exp_sample_ged.ged,
|
||||
gramps/plugins/export/exportgedcom.py,
|
||||
gramps/plugins/test/exports_test.py: Gedcom export, upgrade OBJE
|
||||
handling to Gedcom 5.5.1 style (#702) Fixes #10797
|
||||
|
||||
2018-11-28 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* data/tests/imp_sample_csv.gramps,
|
||||
gramps/plugins/importer/importcsv.py: Fix CSV import to set marriage
|
||||
event role to family (#725) Fixes #9952
|
||||
|
||||
2018-11-28 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* data/tips.xml.in, po/ar.po, po/bg.po, po/br.po, po/ca.po,
|
||||
po/cs.po, po/da.po, po/de.po, po/el.po, po/en_GB.po, po/eo.po,
|
||||
po/es.po, po/fi.po, po/fr.po, po/ga.po, po/gramps.pot, po/he.po,
|
||||
po/hr.po, po/hu.po, po/is.po, po/it.po, po/ja.po, po/lt.po,
|
||||
po/mk.po, po/nb.po, po/nl.po, po/nn.po, po/pl.po, po/pt_BR.po,
|
||||
po/pt_PT.po, po/ro.po, po/ru.po, po/sk.po, po/sl.po, po/sq.po,
|
||||
po/sr.po, po/sr_Latn.po, po/sv.po, po/ta.po, po/tr.po, po/uk.po,
|
||||
po/vi.po, po/zh_CN.po, po/zh_HK.po, po/zh_TW.po: Update gramps
|
||||
bugtracker URL in all po files (#710) Fixes #10543
|
||||
|
||||
2018-11-28 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* data/css/Web_Basic-Ash.css, data/css/Web_Basic-Blue.css,
|
||||
data/css/Web_Basic-Cypress.css, data/css/Web_Basic-Lilac.css,
|
||||
data/css/Web_Basic-Peach.css, data/css/Web_Basic-Spruce.css,
|
||||
data/css/Web_Mainz.css, data/css/Web_Nebraska.css: Narrative Web :
|
||||
thumbnails bad alignment. (#691) * Narrative Web : thumbnails bad alignment. Fixes #10854 also solves the following problems in the Nebraska style sheet : 1 - float parameter has no value "center" 2 - "[" instead of ";" at end of line 1100 * overlapping with long titles
|
||||
|
||||
2018-11-28 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/views/treemodels/citationlistmodel.py: Fix typo in
|
||||
CitationListModel for sort change (#730)
|
||||
|
||||
2018-11-28 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* gramps/plugins/gramplet/todo.py: Fix Adding "ToDo" note crash when
|
||||
no active object (#685) * Fix Adding "ToDo" note crash when no active object Fixes #10795 * Better message when no active object. * resolve conflict: Fixes #10795
|
||||
|
||||
2018-11-28 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/views/treemodels/citationbasemodel.py,
|
||||
gramps/gui/views/treemodels/citationlistmodel.py: Fix Citation List
|
||||
view Source Last Changed Column to sort properly (#723) Fixes #10893
|
||||
|
||||
2018-11-28 pmraps <43935667+pmraps@users.noreply.github.com>
|
||||
|
||||
* po/pt_PT.po: some pt_PT.po translation changes (#703) * some header changes * more changes
|
||||
|
||||
2018-11-28 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/viewmanager.py: Fix for re-entrant main window close
|
||||
when user hits 'x' again (#724) Fixes #10897
|
||||
|
||||
2018-11-28 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/managedwindow.py: Fix exception when closing early
|
||||
editor in tree of editors (#706) Fixes #10876
|
||||
|
||||
2018-11-28 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* gramps/plugins/webreport/basepage.py: Narrative Web: thumbnails
|
||||
problems in some cases. (#722) Fixes #10890
|
||||
|
||||
2018-11-27 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/plug/report/_bookdialog.py: Fix 'Generate Book' dialog
|
||||
for crash on 'x' close (#726) Fixes #10901
|
||||
|
||||
2018-11-27 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/gramplet/todo.py: Fix ToDo Gramplet for multiple
|
||||
attempts to edit a note (#719) Fixes #10645
|
||||
|
||||
2018-11-27 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/widgets/grampletpane.py: Fix Dashboard for multiple
|
||||
copies of a Gramplet (#718) * Fix Dashboard for multiple copies of a Gramplet Fixes #10650 * Fix Dashboard to recall minimized or undocked Gramplets
|
||||
|
||||
2018-11-27 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/displaystate.py: Fix Statusbar update to avoid
|
||||
intermittent exception on closed db (#716) Fixes #10882
|
||||
|
||||
2018-11-27 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/filters/_filterparser.py: Fix FilterParser for much
|
||||
older 3.x custom_filters.xml files (#715) Fixes #8075 Fixes #10669 Fixes #10516
|
||||
|
||||
2018-11-27 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/filters/rules/person/_isduplicatedancestorof.py: Fix
|
||||
IsDuplicatedAncestorOf filter rule to avoid crash on tree loop
|
||||
(#714) Fixes #10685
|
||||
|
||||
2018-11-28 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* gramps/plugins/webreport/person.py,
|
||||
gramps/plugins/webreport/place.py: Narrative web : use latest
|
||||
version from openlayers. (#713) Fixes #10884
|
||||
|
||||
2018-11-27 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/editors/editlink.py: Fix StyledTextEditor EditLink for
|
||||
root text changed to zero length (#709) in the background Fixes #9750
|
||||
|
||||
2018-11-27 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/simple/_simpleaccess.py: Fix AgeOnDate and some reports
|
||||
using SimpleAccess for missing surname (#708) Fixes #9958 Fixes #9800
|
||||
|
||||
2018-11-27 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/filters/rules/_rule.py: Fix crash when a filter with
|
||||
loop in definition is defined (#707) Fixes #10621
|
||||
|
||||
2018-11-27 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/proxy/referencedbyselection.py,
|
||||
gramps/plugins/gramplet/citations.py: Fix HandleErrors related to
|
||||
LDS (#697) * Fix ReferencedBySelection proxy for 'None' LDS Parents Fixes #10865 * Fix HandleError in Citations Gramplet for lds place missing
|
||||
|
||||
2018-11-27 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/lib/libplaceview.py: Change PlaceView drag from
|
||||
whole row to just icon during drag (#695) Fixes #10863
|
||||
|
||||
2018-11-27 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/editors/displaytabs/embeddedlist.py: Add drag Icon to
|
||||
drags from DisplayTabs Gramplet lists (#694) Fixes #10859
|
||||
|
||||
2018-11-27 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/glade/baseselector.glade,
|
||||
gramps/gui/glade/dbman.glade,
|
||||
gramps/gui/plug/report/_bookdialog.py,
|
||||
gramps/gui/selectors/baseselector.py,
|
||||
gramps/gui/selectors/selectcitation.py,
|
||||
gramps/gui/selectors/selectevent.py,
|
||||
gramps/gui/selectors/selectfamily.py,
|
||||
gramps/gui/selectors/selectnote.py,
|
||||
gramps/gui/selectors/selectobject.py,
|
||||
gramps/gui/selectors/selectperson.py,
|
||||
gramps/gui/selectors/selectplace.py,
|
||||
gramps/gui/selectors/selectrepository.py,
|
||||
gramps/gui/selectors/selectsource.py,
|
||||
gramps/plugins/tool/testcasegenerator.py: Fix dialogs for 'Help'
|
||||
button closes the dialog, and non-functional 'Help' (#727) * Fix Family Tree manager for 'Help' button closes dialog Fixes #10589 * Fix selectors for 'Help' button closes dialog Fixes #10589 * Fix 'Generate Book' dialog for 'Help' button closes dialog Fixes #10589 * Fix TestcaseGenerator for 'Help' button closes dialog Fixes #10589 * Fix Selectors to enable the 'Help' buttons to actually work Fixes #10589
|
||||
|
||||
2018-10-26 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/editors/editfamily.py: Avoid HandleError when dragging
|
||||
an Added Family from EditFamily Fixes #10858
|
||||
|
||||
2018-10-26 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/editors/editperson.py: Avoid HandleError when dragging
|
||||
an Added Person from EditPerson Fixes #10857
|
||||
|
||||
2018-10-20 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/clipboard.py: Fix Clipboard rows cannot be sorted via
|
||||
drag/drop Fixes #10849
|
||||
|
||||
2018-10-19 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/config.py, gramps/gui/dbloader.py,
|
||||
gramps/gui/plug/export/_exportassistant.py,
|
||||
gramps/gui/views/listview.py: Better default directory choices for
|
||||
import/export Use recent-export-dir as default for Export View instead of the
|
||||
console default directory, which can be where program resides (on
|
||||
Windows), or other inappropriate place. Use USER_HOME for default directory on 'Export' (recent-export-dir)
|
||||
if first run (default settings) rather than default directory, which
|
||||
can be where program resides (on Windows), or other inappropriate
|
||||
place. Use USER_HOME for default directory on 'Import' (recent-import-dir)
|
||||
if first run (default settings) rather than recent file which is
|
||||
generally set to the grampsdb path. Fixes #10802
|
||||
|
||||
2018-10-16 SNoiraud <serge.noiraud@laposte.net>
|
||||
|
||||
* gramps/plugins/docgen/htmldoc.py: Records Report: call name not
|
||||
underlined in HTML Fixes #10816
|
||||
|
||||
2018-11-20 Christophe <khrys63@gmail.com>
|
||||
|
||||
* po/fr.po: Fix French translation
|
||||
|
||||
2018-10-14 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/widgets/interactivesearchbox.py: Fix InteractiveSearch
|
||||
for find before model is populated Fixes #10844
|
||||
|
||||
2018-10-07 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/export/exportgedcom.py: Fix Gedcom export for
|
||||
incorrect escaping with @#DFRENCH R@ Fixes #10833
|
||||
|
||||
2018-10-06 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/textreport/detancestralreport.py,
|
||||
gramps/plugins/textreport/detdescendantreport.py,
|
||||
gramps/plugins/textreport/indivcomplete.py,
|
||||
gramps/plugins/webreport/basepage.py: Fix reports for shared event
|
||||
attribute and note errors Fixes #10720
|
||||
|
||||
2018-10-02 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/widgets/fanchart.py,
|
||||
gramps/gui/widgets/fanchartdesc.py: Fix Fan and Descendant Fan
|
||||
charts in Quadrant and Half Circle modes The Descendant Fan chart
|
||||
had several bugs: 1) a bug that affected the centering of the chart for these modes 2) the chart was drawn in the wrong quadrant 3) the centering of the chart for printing was incorrect (the legend was off the page some of the time). 4) the sizing of the chart for printing was incorrect (for very small charts of one generation, the legend would overwrite the chart). The Fan Chart for the quadrant view: 1) the centering of the chart for printing was incorrect (the legend was off the page some of the time). Fixes #10817
|
||||
|
||||
2018-09-30 Robin van der Vliet <info@robinvandervliet.com>
|
||||
|
||||
* gramps/plugins/rel/rel_nl.py: Fixed issues in the Dutch
|
||||
relationship calculator Fixed some issues in the Dutch relationship calculator and also
|
||||
extended the ordinal and removed lists till 50, just like the
|
||||
English lists. * Replaced huge lists by reusable lists. * Fixed bug in which uncles/aunts, nephews/nieces (niblings), siblings and cousins with an unknown gender show up as female. * Fixed some misspellings: drieëntwingste > drieëntwinTIgste vierentwingste > vierentwinTIgste edelovergrootOUD > edelovergroot edeloudvergroot > edeloudOvergroot
|
||||
|
||||
2018-11-15 Pär Ekholm <pelle.ekh@koping.net>
|
||||
|
||||
* po/sv.po: Update Swedish translation
|
||||
|
||||
2018-11-18 niememat <niememat@gmail.com>
|
||||
|
||||
* po/fi.po: Fix translation in Finnish
|
||||
|
||||
2018-11-10 niememat <niememat@gmail.com>
|
||||
|
||||
* po/fi.po: Update finnish translation
|
||||
|
||||
2018-11-09 vantu5z <vantu5z@mail.ru>
|
||||
|
||||
* po/ru.po: update Russian translation
|
||||
|
||||
2018-09-28 SNoiraud <serge.noiraud@laposte.net>
|
||||
|
||||
* data/css/Web_Basic-Ash.css, data/css/Web_Basic-Blue.css,
|
||||
data/css/Web_Basic-Cypress.css, data/css/Web_Basic-Lilac.css,
|
||||
data/css/Web_Basic-Peach.css, data/css/Web_Basic-Spruce.css,
|
||||
data/css/Web_Horizontal-Menus.css, data/css/Web_Mainz.css,
|
||||
data/css/Web_Nebraska.css, gramps/plugins/webreport/basepage.py:
|
||||
NarrativeWeb fixes Space between place, description and the event note when there are
|
||||
many sources. Change the css order between print and screen. The
|
||||
chosen theme can erase prior values. Add a width for the source
|
||||
column in all themes. Fixes #10810
|
||||
|
||||
2018-10-17 niememat <niememat@gmail.com>
|
||||
|
||||
* po/fi.po: Fix translation in Finnish
|
||||
|
||||
2018-10-07 Paul Franklin <pf.98052@gmail.com>
|
||||
|
||||
* gramps/plugins/drawreport/statisticschart.py,
|
||||
gramps/plugins/graph/gvfamilylines.py,
|
||||
gramps/plugins/graph/gvrelgraph.py,
|
||||
gramps/plugins/webreport/webcal.py: Setting the year as an ordinal
|
||||
number in Croatian With this commit, two more reports now show a year as an ordinal
|
||||
number in Croatian, and a year I missed before in webcal.py is now
|
||||
fixed. This commit also reverts the Croatian ordinal year fix in the
|
||||
gramps50 statisticschart.py since upon reflection I feel it would be
|
||||
better done in master, since then our translators will have until
|
||||
5.1.0 is released to do the two new strings the fix requires. Issue #10822
|
||||
|
||||
2018-10-07 Paul Franklin <pf.98052@gmail.com>
|
||||
|
||||
* gramps/plugins/textreport/indivcomplete.py: name-note is not being
|
||||
cleared in Complete Individual report I ran gramps with a fresh copy of the example.gramps tree, then ran
|
||||
the Complete Individual report. The options which matter are
|
||||
"Entire Database" and "Include Notes" but I also included the
|
||||
gramps-ID since that speeds up my work. Then I noticed that hundreds of names at the end of the output file
|
||||
all had the same note (N0001), whose text said it referred to a
|
||||
specific person. So I looked higher and the note inclusion started with I0044, the
|
||||
default person. It was real for him but not for the next person
|
||||
after him, or all the people after her. I introduced the problem when I fixed 10033, in d6a97cf90e. Note that this bug is independent of the CIR fix in p.r. 676 and
|
||||
still happens even after that pull request is applied.
|
||||
|
||||
2018-10-04 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/columnorder.py, gramps/gui/views/listview.py: Fix View
|
||||
Column sizing so last column size setting is maintained Fixes #10800
|
||||
|
||||
2018-08-06 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/views/listview.py: Fix view so column widths are
|
||||
preserved when using filters Fixes #10725
|
||||
|
||||
2018-08-29 vantu5z <vantu5z@mail.ru>
|
||||
|
||||
* po/ru.po: update Russian translation
|
||||
|
||||
2018-10-04 Paul Franklin <pf.98052@gmail.com>
|
||||
|
||||
* gramps/gen/display/place.py: fix typo in cbac98894bfa7e1969625efceccc19c4d5374a7e
|
||||
|
||||
2018-10-04 Paul Franklin <pf.98052@gmail.com>
|
||||
|
||||
* gramps/plugins/lib/libnarrate.py,
|
||||
gramps/plugins/textreport/detancestralreport.py,
|
||||
gramps/plugins/textreport/detdescendantreport.py: fix the
|
||||
place-format option in DDR and DAR The place-format option was added to the Detailed Descendant and
|
||||
Detailed Ancestor text reports in
|
||||
cbac98894bfa7e1969625efceccc19c4d5374a7e But those two reports use the Narrator class to show many of their
|
||||
places (and dates), and that class was not modified to use the
|
||||
user's custom place format. So if a user had created a custom place format and ran either of
|
||||
those two reports, their places would be shown inconsistently. This
|
||||
commit fixes that. (The non-detailed ancestor text report also uses Narrator to show
|
||||
its places but that report has not had the place-format option added
|
||||
to it, so this commit doesn't touch it.)
|
||||
|
||||
2018-10-04 Paul Franklin <pf.98052@gmail.com>
|
||||
|
||||
* gramps/plugins/drawreport/fanchart.py,
|
||||
gramps/plugins/drawreport/statisticschart.py,
|
||||
gramps/plugins/drawreport/timeline.py, po/hr.po: Setting the year as
|
||||
an ordinal number in Croatian With this commit, three more reports now show a year as an ordinal
|
||||
number in Croatian. Issue #10822
|
||||
|
||||
2018-05-09 prculley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/db/bsddb/read.py: Fix bsddb for person sort with
|
||||
empty Surname list Fixes #10078, #10577
|
||||
|
||||
2018-10-01 Paul Franklin <pf.98052@gmail.com>
|
||||
|
||||
* gramps/plugins/drawreport/calendarreport.py,
|
||||
gramps/plugins/textreport/birthdayreport.py,
|
||||
gramps/plugins/webreport/webcal.py, po/hr.po: Setting the year as an
|
||||
ordinal number in Croatian When I started investigating 10822, I saw some Croatian dates didn't
|
||||
seem to be working in 5.0.0, to my surprise. I believe I fixed that
|
||||
in the previous commit. With this commit, the three reports now show a year as an ordinal
|
||||
number in Croatian, so I consider 10822 fixed. If there are any additional problems displaying Croatian, please
|
||||
file additional bug reports ("one bug, one report"). Fixes #10822
|
||||
|
||||
2018-10-01 Paul Franklin <pf.98052@gmail.com>
|
||||
|
||||
* gramps/gen/datehandler/_date_hr.py,
|
||||
gramps/gen/datehandler/_datedisplay.py, po/hr.po: Setting the year
|
||||
as an ordinal number in Croatian When I started investigating 10822 I saw some Croatian dates didn't
|
||||
seem to be working in 5.0.0, to my surprise. There seems to have
|
||||
been some kind of regression from 4.2.8. But the Croatian translation for gramps hasn't been updated in about
|
||||
three years -- except by non-Croatians. So I don't know why some
|
||||
"translated" strings which control how dates are displayed were
|
||||
disabled (marked as "fuzzy") in this:
|
||||
6c67053e1fa22405bde0fae38e81de7ace222d41 Also, I saw some code in the 4.2.8 Croatian date handler which was
|
||||
not in the 5.0.0 Croatian date handler -- somehow. So I believe this commit fixes the Croatian date handler. Issue #10822
|
||||
|
||||
2018-09-30 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* gramps/plugins/webreport/webcal.py: Webcal: link problems in some
|
||||
cases (#661) * Webcal: link problems in some cases Year 2016 is highlighted by default instead of current year. Fixes #10801 * Webcal: Missing links when muliyear unselected
|
||||
|
||||
2018-09-29 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* gramps/plugins/view/geoclose.py: Geoclose: exception when a family
|
||||
has no father (#662)
|
||||
|
||||
2018-09-26 Paul Franklin <pf.98052@gmail.com>
|
||||
|
||||
* gramps/plugins/drawreport/descendtree.py: Report plugin krasch Load data.gramps, start with the default person (I0037, Edwin
|
||||
Michael Smith), run Family Descendant Tree, choose "Start with the
|
||||
parent(s) of the selected first", hit OK: .../descendtree.py", line 881, in start family2 = self.database.get_family_from_handle(family2_h) ... Or start with I0057 (Anna Louise Smith), run Family Descendant Tree,
|
||||
choose "Start with the parent(s) ...", hit OK: .../descendtree.py", line 773, in start family2 = self.database.get_family_from_handle(family2_h) ... Fixes #10811
|
||||
|
||||
2018-09-26 Paul Franklin <pf.98052@gmail.com>
|
||||
|
||||
* gramps/gen/datehandler/_date_is.py,
|
||||
gramps/gen/datehandler/_datedisplay.py: [unhandled exception parsing
|
||||
"future dates" in some locales] There is already a check in the MonitoredDate class for years which
|
||||
are more than one year in the future, so such a date is already
|
||||
going to be shown in red. But some locales use the "datetime" library to parse typed-in dates
|
||||
and that has a maximum year of datetime.MAXYEAR, 9999 currently, so
|
||||
dates greater than that produce a ValueError. Besides adding checks for that, I have also made it so that locales
|
||||
which don't need that library don't use it. Fixes #10815
|
||||
|
||||
2018-09-24 Paul Franklin <pf.98052@gmail.com>
|
||||
|
||||
* gramps/gen/datehandler/_date_nb.py: Julian/Gregorian calendar
|
||||
issue when entering only year as date when running gramps in Norwegian Fixes #10687
|
||||
|
||||
2018-09-23 Serge Noiraud <Serge.Noiraud@laposte.net>
|
||||
|
||||
* gramps/plugins/webreport/basepage.py: Events difficult to read
|
||||
(screen and mobile) (#658)
|
||||
|
||||
2018-09-17 Paul Franklin <pf.98052@gmail.com>
|
||||
|
||||
* gramps/gen/plug/report/stdoptions.py,
|
||||
gramps/plugins/textreport/placereport.py: fix typo in cf42e5a4b847e6881f180cd1b776fb02234768be and
|
||||
cbac98894bfa7e1969625efceccc19c4d5374a7e Fixes #10782
|
||||
|
||||
2018-09-08 Leonhaeuser <mirko@leonhaeuser.de>
|
||||
|
||||
* po/de.po: update German translation
|
||||
|
||||
2018-09-06 niememat <niememat@gmail.com>
|
||||
|
||||
* po/fi.po: New update for Finnish translation
|
||||
|
||||
2018-09-06 niememat <niememat@gmail.com>
|
||||
|
||||
* po/fi.po: Update finnish translation
|
||||
|
||||
2018-09-05 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/gramplet/statsgramplet.py: Fix and restore
|
||||
Statistics Gramplet to 4.2.x status (#653) Fixes #10754 A bit of history. bug 2060 was filed a long time ago (2008), and a
|
||||
patch was added to close it in 2016. I believe that the bug had
|
||||
already been patched by then, although I cannot be sure. The patch
|
||||
caused the Gramplet to update anytime the active-changed signal
|
||||
occurred on a person view. I suspect that this caused a fair amount
|
||||
of overhead on very large dbs as the entire person list was
|
||||
rescanned. In any event, Doug Blank recently removed the original scan code, as
|
||||
well as some useful functionality. And left behind a bug where a
|
||||
value was always zero. The users email list had some complaints
|
||||
about the lost functionality, and I also saw some recent complaints
|
||||
that the gender statistics were incorrect. Turns out that the db's
|
||||
genderstats data was incorrect, probably due to crashes after db
|
||||
updates. The Genderstats don't get saved until db closes normally.
|
||||
In addition, running the Genderstats rebuild tool, did not
|
||||
immediately appear to correct the situation, Gramps had to be
|
||||
restarted to show the updated results. I added the original statistics code back into the Gramplet,
|
||||
suitably updated for 5.0.x. So the Gramplet no longer depends on dbs
|
||||
genderstats, it scans for it now on its own. I removed the update on active-changed function, so overhead is only
|
||||
present on actual db updates (which have their own signals). I
|
||||
tested that the add, edit, and delete person changes do properly
|
||||
cause the statistics to update now. So the active-changed signal is
|
||||
not necessary.
|
||||
|
||||
2018-09-04 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/test/tools_test.py, gramps/plugins/tool/check.py:
|
||||
Fix Check and Repair to deal with bad references empty handle string
|
||||
(#657) Fixes #10783 Check and Repair tool doesn't fix bad references when the reference
|
||||
handle is an empty string. Found when rewriting the backlinks scan
|
||||
on same tool. I assumed that the prior checks had already corrected
|
||||
any bad forward references, and did not put in a test for them in my
|
||||
new code. The Travis test failed and when I debugged, I found that
|
||||
the tool had an exception on a handle that consisted of an empty
|
||||
string. Its interesting to note that when I changed the code, a lot more
|
||||
citation and source references were fixed in the test.
|
||||
|
||||
2018-09-04 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/tool/check.py: Speed up Check and Repair, backlinks
|
||||
check stage. (#656) Fixes #10618 * Speed up Check and Repair, backlinks check stage. * Fix Check and repair; backlinks scan to deal with bad references
|
||||
which should have been fixed in earlier checks!
|
||||
|
||||
2018-09-03 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/config.py, gramps/gen/datehandler/_date_ar.py,
|
||||
gramps/gen/datehandler/_date_bg.py,
|
||||
gramps/gen/datehandler/_date_ca.py,
|
||||
gramps/gen/datehandler/_date_da.py,
|
||||
gramps/gen/datehandler/_date_de.py,
|
||||
gramps/gen/datehandler/_date_el.py,
|
||||
gramps/gen/datehandler/_date_es.py,
|
||||
gramps/gen/datehandler/_date_fi.py,
|
||||
gramps/gen/datehandler/_date_hr.py,
|
||||
gramps/gen/datehandler/_date_hu.py,
|
||||
gramps/gen/datehandler/_date_is.py,
|
||||
gramps/gen/datehandler/_date_it.py,
|
||||
gramps/gen/datehandler/_date_ja.py,
|
||||
gramps/gen/datehandler/_date_lt.py,
|
||||
gramps/gen/datehandler/_date_nb.py,
|
||||
gramps/gen/datehandler/_date_nl.py,
|
||||
gramps/gen/datehandler/_date_pl.py,
|
||||
gramps/gen/datehandler/_date_pt.py,
|
||||
gramps/gen/datehandler/_date_ru.py,
|
||||
gramps/gen/datehandler/_date_sk.py,
|
||||
gramps/gen/datehandler/_date_sl.py,
|
||||
gramps/gen/datehandler/_date_sr.py,
|
||||
gramps/gen/datehandler/_date_sv.py,
|
||||
gramps/gen/datehandler/_date_uk.py,
|
||||
gramps/gen/datehandler/_date_zh_CN.py,
|
||||
gramps/gen/datehandler/_date_zh_TW.py,
|
||||
gramps/gen/datehandler/_dateparser.py, gramps/gen/display/name.py,
|
||||
gramps/gen/filters/rules/_changedsincebase.py,
|
||||
gramps/gen/lib/place.py, gramps/gen/mime/_winmime.py,
|
||||
gramps/gen/soundex.py, gramps/gen/utils/db.py, gramps/gui/dbman.py,
|
||||
gramps/gui/editors/editlink.py, gramps/plugins/docgen/latexdoc.py,
|
||||
gramps/plugins/docgen/rtfdoc.py,
|
||||
gramps/plugins/export/test/exportvcard_test.py,
|
||||
gramps/plugins/importer/importgeneweb.py,
|
||||
gramps/plugins/importer/importxml.py,
|
||||
gramps/plugins/importer/test/importvcard_test.py,
|
||||
gramps/plugins/tool/reorderids.py, setup.py,
|
||||
windows/nonAIO/builder/build_GrampsWin32.py,
|
||||
windows/nonAIO/builder/check_gtk_install.py,
|
||||
windows/nonAIO/builder/make_launcher.py,
|
||||
windows/nonAIO/check_gtk_install.py: Fix strings containing
|
||||
deprecated illegal escape sequences (#648) Python 3.6 and above has deprecated illegal string escape sequences.
|
||||
Escape sequences are preceded by a '\' and valid ones are "\n\t\r"
|
||||
etc. Illegal ones are not in the list
|
||||
|
||||
https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals.Previous to Python 3.6 these illegal sequences were ignored and the
|
||||
'\' was left in place. Pylint has been noting these for a while now. This PR corrects these sequences in Gramps. I used find . -name "*.py" | xargs -t -n 1 python3 -Wd -m py_compile 2>&1 |
|
||||
grep Depre to locate the failing strings.
|
||||
|
||||
2018-09-04 Ivan <vantu5z@mail.ru>
|
||||
|
||||
* gramps/plugins/gramplet/whatsnext.py: [Whatsnext] check if db is
|
||||
open (#651) Fixes #10732
|
||||
|
||||
2018-09-03 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/viewmanager.py,
|
||||
gramps/plugins/gramplet/statsgramplet.py,
|
||||
gramps/plugins/quickview/filterbyname.py,
|
||||
gramps/plugins/textreport/summary.py,
|
||||
gramps/plugins/webreport/statistics.py: Fix usage of posixpath;
|
||||
should be os.path for os independence (#650) Fixes #10740
|
||||
|
||||
2018-09-03 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/utils/file.py: Fix generate_checksum routine to avoid
|
||||
MemoryError crash (#649) with very large files and 32-bit OS Issue #10690
|
||||
|
||||
2018-09-03 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/views/bookmarks.py: Fix corrupted Bookmarks that can
|
||||
happen after Gramps crash (#655) Fixes #10759
|
||||
|
||||
2018-09-03 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gen/merge/mergefamilyquery.py: Fix Merge Family when same
|
||||
parent is missing from both families (#654) Fixes #10760
|
||||
|
||||
2018-09-03 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/views/pageview.py: Fix <ctrl>c in view to get selected
|
||||
item to clipboard (#652) Fixes #10682
|
||||
|
||||
2018-09-03 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/gramplet/quickviewgramplet.py: Fix Quickview
|
||||
Gramplet so updates work when changing active (#642) Fixes #10713
|
||||
|
||||
2018-09-03 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/gui/editors/editplaceref.py: Fix place reference editor for
|
||||
bad cut/paste on set_latlongitude (#644) Fixes #10719
|
||||
|
||||
2018-09-03 Paul Culley <paulr2787@gmail.com>
|
||||
|
||||
* gramps/plugins/tool/findloop.py: Fix Find Database Loop Tool (bad
|
||||
import of _collections) (#643) Fixes #10722
|
||||
|
||||
2018-09-03 niememat <niememat@gmail.com>
|
||||
|
||||
* po/fi.po: Fix translation in Finnish
|
||||
|
||||
2018-08-25 Bernard Banko <beernarrd@gmail.com>
|
||||
|
||||
* po/sl.po: Slovenian translation fixed to allow building mo
|
||||
|
||||
2018-08-25 Bernard Banko <beernarrd@gmail.com>
|
||||
|
||||
* po/sl.po: Slovenian translation updated
|
||||
|
||||
2018-08-18 niememat <niememat@gmail.com>
|
||||
|
||||
* po/fi.po: Fix translation in Finnish
|
||||
|
||||
2018-08-11 niememat <niememat@gmail.com>
|
||||
|
||||
* po/fi.po: Fix translation in Finnish
|
||||
|
||||
2018-08-09 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* mac/gramps.modules: Switch included moduleset to gitlab.gnome.org. Fixes bug #10733.
|
||||
|
||||
2018-08-08 Leonhaeuser <mirko@leonhaeuser.de>
|
||||
|
||||
* po/de.po: Reviewed German translation Thanks to bmendl
|
||||
|
||||
2018-08-08 niememat <niememat@gmail.com>
|
||||
|
||||
* po/fi.po: Fix translation in Finnish
|
||||
|
||||
2018-08-05 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* mac/gramps.bundle: File copy doesn't work if the glob can match
|
||||
directories.
|
||||
|
||||
2018-08-04 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* mac/gramps.bundle: Install the docs/gramps directory in the
|
||||
bundle. Fixes bug #10705.
|
||||
|
||||
2018-08-05 niememat <niememat@gmail.com>
|
||||
|
||||
* po/fi.po: Fix and updated translation in Finnish
|
||||
|
||||
2018-07-25 Ross Gammon <rossgammon@mail.dk>
|
||||
|
||||
* debian/changelog: Update the Debian changelog after the 5.0.0
|
||||
release
|
||||
|
||||
2018-07-25 John Ralls <jralls@ceridwen.us>
|
||||
|
||||
* mac/Info.plist, mac/gramps.modules: Release Gramps-5.0.0 on Mac.
|
||||
|
||||
2018-07-24 Nick Hall <nick-h@gramps-project.org>
|
||||
|
||||
* gramps/gen/const.py, gramps/version.py: Bump to 5.0.1
|
||||
|
||||
|
||||
|
||||
@@ -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?
|
||||
@@ -355,3 +355,4 @@ Since Gramps generates HTML pages, you can upload the pages to your personal web
|
||||
|
||||
**** End of Gramps Frequently Asked Questions ****
|
||||
|
||||
$Id$
|
||||
|
||||
@@ -25,5 +25,7 @@ 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()
|
||||
|
||||
@@ -33,11 +33,11 @@ all required and optional dependencies. Missing dependencies will
|
||||
result in runtime errors.
|
||||
|
||||
To build and install, whether from a tarball or git repo:
|
||||
python3 setup.py build
|
||||
sudo python3 setup.py install
|
||||
python setup.py build
|
||||
sudo python setup.py install
|
||||
|
||||
You can avoid using sudo for the install step by specifying a prefix to which you have write priviledge. The default is /usr/local, which is usually owned by root. You can learn of more options with
|
||||
python3 setup.py --help
|
||||
python setup.py --help
|
||||
|
||||
One can use gramps from the command line without installing it by
|
||||
setting the following environment variables, but that won't provide
|
||||
@@ -71,7 +71,7 @@ from the source directory.
|
||||
b) You installed Gramps, and want to start it from the PYTHONPATH. In this
|
||||
case use the command:
|
||||
|
||||
python3 -c 'from gramps.grampsapp import main; main()'
|
||||
python -c 'from gramps.grampsapp import main; main()'
|
||||
|
||||
The executable 'gramps' in /usr/local/bin or /usr/bin from a) does
|
||||
this for you.
|
||||
@@ -79,7 +79,7 @@ from the source directory.
|
||||
b) You downloaded the Gramps source code to a directory, and want to run it.
|
||||
You can start Gramps from the source code directory with
|
||||
|
||||
python3 Gramps.py
|
||||
python Gramps.py
|
||||
|
||||
See gramps/gen/const.py how Gramps finds its resource directories in case
|
||||
you encounter problems.
|
||||
@@ -90,17 +90,17 @@ If you would like to install Gramps without being root, or in an
|
||||
alternative location on windows, supply the --root argument to setup.py
|
||||
|
||||
For example:
|
||||
python3 setup.py install --root ~/test
|
||||
python setup.py install --root ~/test
|
||||
|
||||
Packager's issues
|
||||
------------------
|
||||
There is a MANIFEST.in file to indicate the work needed.
|
||||
To create a source distribution run:
|
||||
|
||||
python3 setup.py sdist
|
||||
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):
|
||||
|
||||
python3 setup.py install --resourcepath=/usr/share
|
||||
python setup.py install --resourcepath=/usr/share
|
||||
|
||||
@@ -0,0 +1,397 @@
|
||||
GNU Free Documentation License
|
||||
Version 1.2, November 2002
|
||||
|
||||
|
||||
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
|
||||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
0. PREAMBLE
|
||||
|
||||
The purpose of this License is to make a manual, textbook, or other
|
||||
functional and useful document "free" in the sense of freedom: to
|
||||
assure everyone the effective freedom to copy and redistribute it,
|
||||
with or without modifying it, either commercially or noncommercially.
|
||||
Secondarily, this License preserves for the author and publisher a way
|
||||
to get credit for their work, while not being considered responsible
|
||||
for modifications made by others.
|
||||
|
||||
This License is a kind of "copyleft", which means that derivative
|
||||
works of the document must themselves be free in the same sense. It
|
||||
complements the GNU General Public License, which is a copyleft
|
||||
license designed for free software.
|
||||
|
||||
We have designed this License in order to use it for manuals for free
|
||||
software, because free software needs free documentation: a free
|
||||
program should come with manuals providing the same freedoms that the
|
||||
software does. But this License is not limited to software manuals;
|
||||
it can be used for any textual work, regardless of subject matter or
|
||||
whether it is published as a printed book. We recommend this License
|
||||
principally for works whose purpose is instruction or reference.
|
||||
|
||||
|
||||
1. APPLICABILITY AND DEFINITIONS
|
||||
|
||||
This License applies to any manual or other work, in any medium, that
|
||||
contains a notice placed by the copyright holder saying it can be
|
||||
distributed under the terms of this License. Such a notice grants a
|
||||
world-wide, royalty-free license, unlimited in duration, to use that
|
||||
work under the conditions stated herein. The "Document", below,
|
||||
refers to any such manual or work. Any member of the public is a
|
||||
licensee, and is addressed as "you". You accept the license if you
|
||||
copy, modify or distribute the work in a way requiring permission
|
||||
under copyright law.
|
||||
|
||||
A "Modified Version" of the Document means any work containing the
|
||||
Document or a portion of it, either copied verbatim, or with
|
||||
modifications and/or translated into another language.
|
||||
|
||||
A "Secondary Section" is a named appendix or a front-matter section of
|
||||
the Document that deals exclusively with the relationship of the
|
||||
publishers or authors of the Document to the Document's overall subject
|
||||
(or to related matters) and contains nothing that could fall directly
|
||||
within that overall subject. (Thus, if the Document is in part a
|
||||
textbook of mathematics, a Secondary Section may not explain any
|
||||
mathematics.) The relationship could be a matter of historical
|
||||
connection with the subject or with related matters, or of legal,
|
||||
commercial, philosophical, ethical or political position regarding
|
||||
them.
|
||||
|
||||
The "Invariant Sections" are certain Secondary Sections whose titles
|
||||
are designated, as being those of Invariant Sections, in the notice
|
||||
that says that the Document is released under this License. If a
|
||||
section does not fit the above definition of Secondary then it is not
|
||||
allowed to be designated as Invariant. The Document may contain zero
|
||||
Invariant Sections. If the Document does not identify any Invariant
|
||||
Sections then there are none.
|
||||
|
||||
The "Cover Texts" are certain short passages of text that are listed,
|
||||
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
|
||||
the Document is released under this License. A Front-Cover Text may
|
||||
be at most 5 words, and a Back-Cover Text may be at most 25 words.
|
||||
|
||||
A "Transparent" copy of the Document means a machine-readable copy,
|
||||
represented in a format whose specification is available to the
|
||||
general public, that is suitable for revising the document
|
||||
straightforwardly with generic text editors or (for images composed of
|
||||
pixels) generic paint programs or (for drawings) some widely available
|
||||
drawing editor, and that is suitable for input to text formatters or
|
||||
for automatic translation to a variety of formats suitable for input
|
||||
to text formatters. A copy made in an otherwise Transparent file
|
||||
format whose markup, or absence of markup, has been arranged to thwart
|
||||
or discourage subsequent modification by readers is not Transparent.
|
||||
An image format is not Transparent if used for any substantial amount
|
||||
of text. A copy that is not "Transparent" is called "Opaque".
|
||||
|
||||
Examples of suitable formats for Transparent copies include plain
|
||||
ASCII without markup, Texinfo input format, LaTeX input format, SGML
|
||||
or XML using a publicly available DTD, and standard-conforming simple
|
||||
HTML, PostScript or PDF designed for human modification. Examples of
|
||||
transparent image formats include PNG, XCF and JPG. Opaque formats
|
||||
include proprietary formats that can be read and edited only by
|
||||
proprietary word processors, SGML or XML for which the DTD and/or
|
||||
processing tools are not generally available, and the
|
||||
machine-generated HTML, PostScript or PDF produced by some word
|
||||
processors for output purposes only.
|
||||
|
||||
The "Title Page" means, for a printed book, the title page itself,
|
||||
plus such following pages as are needed to hold, legibly, the material
|
||||
this License requires to appear in the title page. For works in
|
||||
formats which do not have any title page as such, "Title Page" means
|
||||
the text near the most prominent appearance of the work's title,
|
||||
preceding the beginning of the body of the text.
|
||||
|
||||
A section "Entitled XYZ" means a named subunit of the Document whose
|
||||
title either is precisely XYZ or contains XYZ in parentheses following
|
||||
text that translates XYZ in another language. (Here XYZ stands for a
|
||||
specific section name mentioned below, such as "Acknowledgements",
|
||||
"Dedications", "Endorsements", or "History".) To "Preserve the Title"
|
||||
of such a section when you modify the Document means that it remains a
|
||||
section "Entitled XYZ" according to this definition.
|
||||
|
||||
The Document may include Warranty Disclaimers next to the notice which
|
||||
states that this License applies to the Document. These Warranty
|
||||
Disclaimers are considered to be included by reference in this
|
||||
License, but only as regards disclaiming warranties: any other
|
||||
implication that these Warranty Disclaimers may have is void and has
|
||||
no effect on the meaning of this License.
|
||||
|
||||
|
||||
2. VERBATIM COPYING
|
||||
|
||||
You may copy and distribute the Document in any medium, either
|
||||
commercially or noncommercially, provided that this License, the
|
||||
copyright notices, and the license notice saying this License applies
|
||||
to the Document are reproduced in all copies, and that you add no other
|
||||
conditions whatsoever to those of this License. You may not use
|
||||
technical measures to obstruct or control the reading or further
|
||||
copying of the copies you make or distribute. However, you may accept
|
||||
compensation in exchange for copies. If you distribute a large enough
|
||||
number of copies you must also follow the conditions in section 3.
|
||||
|
||||
You may also lend copies, under the same conditions stated above, and
|
||||
you may publicly display copies.
|
||||
|
||||
|
||||
3. COPYING IN QUANTITY
|
||||
|
||||
If you publish printed copies (or copies in media that commonly have
|
||||
printed covers) of the Document, numbering more than 100, and the
|
||||
Document's license notice requires Cover Texts, you must enclose the
|
||||
copies in covers that carry, clearly and legibly, all these Cover
|
||||
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
|
||||
the back cover. Both covers must also clearly and legibly identify
|
||||
you as the publisher of these copies. The front cover must present
|
||||
the full title with all words of the title equally prominent and
|
||||
visible. You may add other material on the covers in addition.
|
||||
Copying with changes limited to the covers, as long as they preserve
|
||||
the title of the Document and satisfy these conditions, can be treated
|
||||
as verbatim copying in other respects.
|
||||
|
||||
If the required texts for either cover are too voluminous to fit
|
||||
legibly, you should put the first ones listed (as many as fit
|
||||
reasonably) on the actual cover, and continue the rest onto adjacent
|
||||
pages.
|
||||
|
||||
If you publish or distribute Opaque copies of the Document numbering
|
||||
more than 100, you must either include a machine-readable Transparent
|
||||
copy along with each Opaque copy, or state in or with each Opaque copy
|
||||
a computer-network location from which the general network-using
|
||||
public has access to download using public-standard network protocols
|
||||
a complete Transparent copy of the Document, free of added material.
|
||||
If you use the latter option, you must take reasonably prudent steps,
|
||||
when you begin distribution of Opaque copies in quantity, to ensure
|
||||
that this Transparent copy will remain thus accessible at the stated
|
||||
location until at least one year after the last time you distribute an
|
||||
Opaque copy (directly or through your agents or retailers) of that
|
||||
edition to the public.
|
||||
|
||||
It is requested, but not required, that you contact the authors of the
|
||||
Document well before redistributing any large number of copies, to give
|
||||
them a chance to provide you with an updated version of the Document.
|
||||
|
||||
|
||||
4. MODIFICATIONS
|
||||
|
||||
You may copy and distribute a Modified Version of the Document under
|
||||
the conditions of sections 2 and 3 above, provided that you release
|
||||
the Modified Version under precisely this License, with the Modified
|
||||
Version filling the role of the Document, thus licensing distribution
|
||||
and modification of the Modified Version to whoever possesses a copy
|
||||
of it. In addition, you must do these things in the Modified Version:
|
||||
|
||||
A. Use in the Title Page (and on the covers, if any) a title distinct
|
||||
from that of the Document, and from those of previous versions
|
||||
(which should, if there were any, be listed in the History section
|
||||
of the Document). You may use the same title as a previous version
|
||||
if the original publisher of that version gives permission.
|
||||
B. List on the Title Page, as authors, one or more persons or entities
|
||||
responsible for authorship of the modifications in the Modified
|
||||
Version, together with at least five of the principal authors of the
|
||||
Document (all of its principal authors, if it has fewer than five),
|
||||
unless they release you from this requirement.
|
||||
C. State on the Title page the name of the publisher of the
|
||||
Modified Version, as the publisher.
|
||||
D. Preserve all the copyright notices of the Document.
|
||||
E. Add an appropriate copyright notice for your modifications
|
||||
adjacent to the other copyright notices.
|
||||
F. Include, immediately after the copyright notices, a license notice
|
||||
giving the public permission to use the Modified Version under the
|
||||
terms of this License, in the form shown in the Addendum below.
|
||||
G. Preserve in that license notice the full lists of Invariant Sections
|
||||
and required Cover Texts given in the Document's license notice.
|
||||
H. Include an unaltered copy of this License.
|
||||
I. Preserve the section Entitled "History", Preserve its Title, and add
|
||||
to it an item stating at least the title, year, new authors, and
|
||||
publisher of the Modified Version as given on the Title Page. If
|
||||
there is no section Entitled "History" in the Document, create one
|
||||
stating the title, year, authors, and publisher of the Document as
|
||||
given on its Title Page, then add an item describing the Modified
|
||||
Version as stated in the previous sentence.
|
||||
J. Preserve the network location, if any, given in the Document for
|
||||
public access to a Transparent copy of the Document, and likewise
|
||||
the network locations given in the Document for previous versions
|
||||
it was based on. These may be placed in the "History" section.
|
||||
You may omit a network location for a work that was published at
|
||||
least four years before the Document itself, or if the original
|
||||
publisher of the version it refers to gives permission.
|
||||
K. For any section Entitled "Acknowledgements" or "Dedications",
|
||||
Preserve the Title of the section, and preserve in the section all
|
||||
the substance and tone of each of the contributor acknowledgements
|
||||
and/or dedications given therein.
|
||||
L. Preserve all the Invariant Sections of the Document,
|
||||
unaltered in their text and in their titles. Section numbers
|
||||
or the equivalent are not considered part of the section titles.
|
||||
M. Delete any section Entitled "Endorsements". Such a section
|
||||
may not be included in the Modified Version.
|
||||
N. Do not retitle any existing section to be Entitled "Endorsements"
|
||||
or to conflict in title with any Invariant Section.
|
||||
O. Preserve any Warranty Disclaimers.
|
||||
|
||||
If the Modified Version includes new front-matter sections or
|
||||
appendices that qualify as Secondary Sections and contain no material
|
||||
copied from the Document, you may at your option designate some or all
|
||||
of these sections as invariant. To do this, add their titles to the
|
||||
list of Invariant Sections in the Modified Version's license notice.
|
||||
These titles must be distinct from any other section titles.
|
||||
|
||||
You may add a section Entitled "Endorsements", provided it contains
|
||||
nothing but endorsements of your Modified Version by various
|
||||
parties--for example, statements of peer review or that the text has
|
||||
been approved by an organization as the authoritative definition of a
|
||||
standard.
|
||||
|
||||
You may add a passage of up to five words as a Front-Cover Text, and a
|
||||
passage of up to 25 words as a Back-Cover Text, to the end of the list
|
||||
of Cover Texts in the Modified Version. Only one passage of
|
||||
Front-Cover Text and one of Back-Cover Text may be added by (or
|
||||
through arrangements made by) any one entity. If the Document already
|
||||
includes a cover text for the same cover, previously added by you or
|
||||
by arrangement made by the same entity you are acting on behalf of,
|
||||
you may not add another; but you may replace the old one, on explicit
|
||||
permission from the previous publisher that added the old one.
|
||||
|
||||
The author(s) and publisher(s) of the Document do not by this License
|
||||
give permission to use their names for publicity for or to assert or
|
||||
imply endorsement of any Modified Version.
|
||||
|
||||
|
||||
5. COMBINING DOCUMENTS
|
||||
|
||||
You may combine the Document with other documents released under this
|
||||
License, under the terms defined in section 4 above for modified
|
||||
versions, provided that you include in the combination all of the
|
||||
Invariant Sections of all of the original documents, unmodified, and
|
||||
list them all as Invariant Sections of your combined work in its
|
||||
license notice, and that you preserve all their Warranty Disclaimers.
|
||||
|
||||
The combined work need only contain one copy of this License, and
|
||||
multiple identical Invariant Sections may be replaced with a single
|
||||
copy. If there are multiple Invariant Sections with the same name but
|
||||
different contents, make the title of each such section unique by
|
||||
adding at the end of it, in parentheses, the name of the original
|
||||
author or publisher of that section if known, or else a unique number.
|
||||
Make the same adjustment to the section titles in the list of
|
||||
Invariant Sections in the license notice of the combined work.
|
||||
|
||||
In the combination, you must combine any sections Entitled "History"
|
||||
in the various original documents, forming one section Entitled
|
||||
"History"; likewise combine any sections Entitled "Acknowledgements",
|
||||
and any sections Entitled "Dedications". You must delete all sections
|
||||
Entitled "Endorsements".
|
||||
|
||||
|
||||
6. COLLECTIONS OF DOCUMENTS
|
||||
|
||||
You may make a collection consisting of the Document and other documents
|
||||
released under this License, and replace the individual copies of this
|
||||
License in the various documents with a single copy that is included in
|
||||
the collection, provided that you follow the rules of this License for
|
||||
verbatim copying of each of the documents in all other respects.
|
||||
|
||||
You may extract a single document from such a collection, and distribute
|
||||
it individually under this License, provided you insert a copy of this
|
||||
License into the extracted document, and follow this License in all
|
||||
other respects regarding verbatim copying of that document.
|
||||
|
||||
|
||||
7. AGGREGATION WITH INDEPENDENT WORKS
|
||||
|
||||
A compilation of the Document or its derivatives with other separate
|
||||
and independent documents or works, in or on a volume of a storage or
|
||||
distribution medium, is called an "aggregate" if the copyright
|
||||
resulting from the compilation is not used to limit the legal rights
|
||||
of the compilation's users beyond what the individual works permit.
|
||||
When the Document is included an aggregate, this License does not
|
||||
apply to the other works in the aggregate which are not themselves
|
||||
derivative works of the Document.
|
||||
|
||||
If the Cover Text requirement of section 3 is applicable to these
|
||||
copies of the Document, then if the Document is less than one half of
|
||||
the entire aggregate, the Document's Cover Texts may be placed on
|
||||
covers that bracket the Document within the aggregate, or the
|
||||
electronic equivalent of covers if the Document is in electronic form.
|
||||
Otherwise they must appear on printed covers that bracket the whole
|
||||
aggregate.
|
||||
|
||||
|
||||
8. TRANSLATION
|
||||
|
||||
Translation is considered a kind of modification, so you may
|
||||
distribute translations of the Document under the terms of section 4.
|
||||
Replacing Invariant Sections with translations requires special
|
||||
permission from their copyright holders, but you may include
|
||||
translations of some or all Invariant Sections in addition to the
|
||||
original versions of these Invariant Sections. You may include a
|
||||
translation of this License, and all the license notices in the
|
||||
Document, and any Warranty Disclaimers, provided that you also include
|
||||
the original English version of this License and the original versions
|
||||
of those notices and disclaimers. In case of a disagreement between
|
||||
the translation and the original version of this License or a notice
|
||||
or disclaimer, the original version will prevail.
|
||||
|
||||
If a section in the Document is Entitled "Acknowledgements",
|
||||
"Dedications", or "History", the requirement (section 4) to Preserve
|
||||
its Title (section 1) will typically require changing the actual
|
||||
title.
|
||||
|
||||
|
||||
9. TERMINATION
|
||||
|
||||
You may not copy, modify, sublicense, or distribute the Document except
|
||||
as expressly provided for under this License. Any other attempt to
|
||||
copy, modify, sublicense or distribute the Document is void, and will
|
||||
automatically terminate your rights under this License. However,
|
||||
parties who have received copies, or rights, from you under this
|
||||
License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
|
||||
10. FUTURE REVISIONS OF THIS LICENSE
|
||||
|
||||
The Free Software Foundation may publish new, revised versions
|
||||
of the GNU Free Documentation License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns. See
|
||||
http://www.gnu.org/copyleft/.
|
||||
|
||||
Each version of the License is given a distinguishing version number.
|
||||
If the Document specifies that a particular numbered version of this
|
||||
License "or any later version" applies to it, you have the option of
|
||||
following the terms and conditions either of that specified version or
|
||||
of any later version that has been published (not as a draft) by the
|
||||
Free Software Foundation. If the Document does not specify a version
|
||||
number of this License, you may choose any version ever published (not
|
||||
as a draft) by the Free Software Foundation.
|
||||
|
||||
|
||||
ADDENDUM: How to use this License for your documents
|
||||
|
||||
To use this License in a document you have written, include a copy of
|
||||
the License in the document and put the following copyright and
|
||||
license notices just after the title page:
|
||||
|
||||
Copyright (c) YEAR YOUR NAME.
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.2
|
||||
or any later version published by the Free Software Foundation;
|
||||
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
|
||||
A copy of the license is included in the section entitled "GNU
|
||||
Free Documentation License".
|
||||
|
||||
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
|
||||
replace the "with...Texts." line with this:
|
||||
|
||||
with the Invariant Sections being LIST THEIR TITLES, with the
|
||||
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
|
||||
|
||||
If you have Invariant Sections without Cover Texts, or some other
|
||||
combination of the three, merge those two alternatives to suit the
|
||||
situation.
|
||||
|
||||
If your document contains nontrivial examples of program code, we
|
||||
recommend releasing these examples in parallel under your choice of
|
||||
free software license, such as the GNU General Public License,
|
||||
to permit their use in free software.
|
||||
@@ -1,20 +1,17 @@
|
||||
include ChangeLog
|
||||
include AUTHORS
|
||||
include COPYING
|
||||
include FAQ
|
||||
include Gramps.py
|
||||
include INSTALL
|
||||
include LICENSE
|
||||
include MANIFEST.in
|
||||
include NEWS
|
||||
include RELEASE_NOTES
|
||||
include TODO
|
||||
include CONTRIBUTING
|
||||
include TestPlan.txt
|
||||
recursive-include bash *
|
||||
recursive-include data *
|
||||
recursive-include debian *
|
||||
recursive-include docs *
|
||||
recursive-include example *
|
||||
recursive-include gramps *
|
||||
recursive-include help *
|
||||
recursive-include images *
|
||||
@@ -25,9 +22,11 @@ recursive-include windows *
|
||||
|
||||
# Remove files created in the build
|
||||
exclude data/tips.xml
|
||||
exclude data/holidays.xml
|
||||
exclude gramps/plugins/lib/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
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
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
|
||||
@@ -1,148 +0,0 @@
|
||||
The Gramps Project ( https://gramps-project.org ) [](https://travis-ci.org/gramps-project/gramps)[](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** 1.13.1 or greater - a 2D graphics library with support for multiple output devices. http://cairographics.org/
|
||||
* **Pycairo** 1.13.3 or greater - GObject Introspection bindings for cairo. https://github.com/pygobject/pycairo
|
||||
* **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/
|
||||
* **sqlite3** - Python bindings for SQLite Database library
|
||||
|
||||
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, so gir1.2-osmgpsmap-1.0.
|
||||
Without this the GeoView will not be active, see
|
||||
https://gramps-project.org/wiki/index.php?title=Gramps_5.0_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 or try graphviz and python3-pygraphviz from your packages.
|
||||
|
||||
* **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/)
|
||||
|
||||
* **Ghostscript**
|
||||
|
||||
Used by Graphviz reports to help create PDF's
|
||||
|
||||
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_5.0_Wiki_Manual_-_Manage_Family_Trees#Archiving_a_Family_Tree
|
||||
Only rcs is needed, NO python bindings are required
|
||||
|
||||
* **PIL**
|
||||
|
||||
Python Image Library (PILLOW) 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 (python-pygoocanvas, gir1.2-goocanvas-2.0).
|
||||
( https://gramps-project.org/wiki/index.php?title=Graph_View )
|
||||
|
||||
* **Network Chart** - Requires: networkx and pygraphviz
|
||||
( https://gramps-project.org/wiki/index.php?title=NetworkChart )
|
||||
|
||||
* **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
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
$Id$
|
||||
|
||||
UNSTABLE Gramps 4.0.0 Beta2 release.
|
||||
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
_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
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- $Id$ -->
|
||||
<authors xmlns:html="http://www.w3.org/1999/xhtml">
|
||||
<author title="author">
|
||||
Alex Roitman <<html:a href="mailto:shura@gramps-project.org">shura@gramps-project.org</html:a>>
|
||||
@@ -93,9 +94,6 @@
|
||||
<author title="contributor">
|
||||
Nick Hall <<html:a href="mailto:nick__hall@hotmail.com">nick__hall@hotmail.com</html:a>>
|
||||
</author>
|
||||
<author title="contributor">
|
||||
Paul Culley <<html:a href="mailto:paulr2787@gmail.com">paulr2787@gmail.com</html:a>>
|
||||
</author>
|
||||
<author title="contributor">
|
||||
Peter Landgren <<html:a href="mailto:peter.talken@telia.com">peter.talken@telia.com</html:a>>
|
||||
</author>
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright 2009 Serge Noiraud
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
GeoView Style Sheet
|
||||
Style Name: GeoView
|
||||
Style Author: Serge Noiraud (2009)
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
This file was created for GeoView usage.
|
||||
|
||||
# $Id$
|
||||
|
||||
GeoView Styles
|
||||
|
||||
----------------------------------------------------- */
|
||||
|
||||
#geo-map
|
||||
{
|
||||
margin-left:0px;
|
||||
margin-top:0px;
|
||||
margin-right:auto;
|
||||
margin-bottom:auto;
|
||||
}
|
||||
|
||||
/* InfoWindow */
|
||||
#geo-info {
|
||||
font-size:10pt;
|
||||
max-height:200px;
|
||||
max-width: 600px;
|
||||
min-width: 300px;
|
||||
text-align: left;
|
||||
padding-right: 6px;
|
||||
overflow-x: auto;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ Characteristic of this style is that it uses the full width of the browser
|
||||
window and that horizontal highlighting bars extend over the full width of
|
||||
the page.
|
||||
--------------------------------------------------------------------------------------------------
|
||||
# $Id$
|
||||
|
||||
NarrativeWeb Styles
|
||||
------------------------------------------------------------------------------------------------
|
||||
@@ -86,12 +87,6 @@ h1 {
|
||||
font-weight: bold;
|
||||
padding-left: 15px;
|
||||
}
|
||||
h2 {
|
||||
display:block;
|
||||
margin:0;
|
||||
padding:0;
|
||||
text-align: center;
|
||||
}
|
||||
h3 {
|
||||
font-size: large;
|
||||
padding-left: 15px;
|
||||
@@ -109,7 +104,6 @@ p#description {
|
||||
a {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a[href]:hover, a[href]:active {
|
||||
text-decoration: underline;
|
||||
@@ -331,10 +325,6 @@ table.IndividualList td.ColumnSurname {
|
||||
content: "";
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
#GalleryNav {
|
||||
@@ -426,7 +416,7 @@ div#SourceDetail {
|
||||
}
|
||||
.subsection {
|
||||
clear: both;
|
||||
overflow: visible;
|
||||
overflow: hidden;
|
||||
}
|
||||
.subsection p {
|
||||
margin: 0px;
|
||||
@@ -451,7 +441,8 @@ div#families table.attrlist td.ColumnType {
|
||||
----------------------------------------------------- */
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
width: 130px;
|
||||
max-width: 130px;
|
||||
max-height: 150px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.8em 0.5em;
|
||||
|
||||
@@ -134,6 +134,7 @@ h5, h6 {
|
||||
margin:1.3em 0 .5em 1em;
|
||||
}
|
||||
p#description {
|
||||
max-width: 800px;
|
||||
margin: 0;
|
||||
padding: 1em 20px;
|
||||
text-indent: 30px;
|
||||
@@ -288,6 +289,10 @@ table.infolist thead tr th {
|
||||
table.infolist tr td {
|
||||
border-bottom: dashed 1px #000;
|
||||
vertical-align: middle;
|
||||
padding: 6px 0 6px 10px;
|
||||
}
|
||||
table.infolist tr td a {
|
||||
display: block;
|
||||
}
|
||||
table.infolist tr.BeginLetter td, table.infolist tr.BeginSurname td {
|
||||
border-top: solid 1px #000;
|
||||
@@ -347,15 +352,15 @@ div#Individuals {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
div#Individuals table.IndividualList {
|
||||
div#Individuals table.individuallist {
|
||||
border-bottom: solid 1px #000;
|
||||
}
|
||||
div#Individuals table.IndividualList tbody tr td.ColumnSurname a:hover,
|
||||
div#Individuals table.IndividualList tbody tr td.ColumnSurname a:active {
|
||||
div#Individuals table.individuallist tbody tr td.ColumnSurname a:hover,
|
||||
div#Individuals table.individuallist tbody tr td.ColumnSurname a:active {
|
||||
cursor: default;
|
||||
background: none;
|
||||
}
|
||||
div#Individuals table.IndividualList tbody tr td.ColumnName a {
|
||||
div#Individuals table.individuallist tbody tr td.ColumnName a {
|
||||
vertical-align: middle;
|
||||
}
|
||||
div#Individuals div table.infolist tr td p {
|
||||
@@ -489,7 +494,7 @@ table.eventlist tbody tr td.ColumnNotes {
|
||||
width: 20%;
|
||||
}
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
width: 17%;
|
||||
}
|
||||
table.eventlist tbody tr td.ColumnPerson {
|
||||
width: 35%;
|
||||
@@ -1093,6 +1098,7 @@ div.Residence table.infolist tr td {
|
||||
margin: 0;
|
||||
float: left;
|
||||
width: 130px;
|
||||
height: 150px;
|
||||
text-align: center;
|
||||
}
|
||||
#indivgallery div.thumbnail a {
|
||||
@@ -1101,7 +1107,6 @@ div.Residence table.infolist tr td {
|
||||
padding: 0;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
#indivgallery div.thumbnail a img {
|
||||
padding: 0;
|
||||
@@ -1125,10 +1130,9 @@ div.narrative {
|
||||
}
|
||||
.narrative p {
|
||||
font: normal .9em/1.4em sans-serif;
|
||||
margin: 0.1em 0 0.2em 0;
|
||||
}
|
||||
i + div.grampsstylednote p {
|
||||
margin: 0.1em 0 0.2em 0;
|
||||
margin-top: .5em;
|
||||
margin-bottom: 0;
|
||||
padding: 0 20px 1em 20px;
|
||||
}
|
||||
|
||||
/* Subsections : References
|
||||
|
||||
@@ -50,6 +50,7 @@ Characteristic of this style is that it uses the full width of the browser
|
||||
window and that horizontal highlighting bars extend over the full width of
|
||||
the page.
|
||||
--------------------------------------------------------------------------------------------------
|
||||
# $Id$
|
||||
|
||||
NarrativeWeb Styles
|
||||
------------------------------------------------------------------------------------------------
|
||||
@@ -86,12 +87,6 @@ h1 {
|
||||
font-weight: bold;
|
||||
padding-left: 15px;
|
||||
}
|
||||
h2 {
|
||||
display:block;
|
||||
margin:0;
|
||||
padding:0;
|
||||
text-align: center;
|
||||
}
|
||||
h3 {
|
||||
font-size: large;
|
||||
padding-left: 15px;
|
||||
@@ -109,7 +104,6 @@ p#description {
|
||||
a {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a[href]:hover, a[href]:active {
|
||||
background-color: #9DBF9D;
|
||||
@@ -374,10 +368,6 @@ table.IndividualList td.ColumnSurname {
|
||||
content: "";
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
#GalleryNav {
|
||||
@@ -476,7 +466,7 @@ div#SourceDetail {
|
||||
}
|
||||
.subsection {
|
||||
clear: both;
|
||||
overflow: visible;
|
||||
overflow: hidden;
|
||||
}
|
||||
.subsection p {
|
||||
margin: 0px;
|
||||
@@ -501,7 +491,8 @@ div#families table.attrlist td.ColumnType {
|
||||
----------------------------------------------------- */
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
width: 130px;
|
||||
max-width: 130px;
|
||||
max-height: 150px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.8em 0.5em;
|
||||
|
||||
@@ -50,6 +50,7 @@ Characteristic of this style is that it uses the full width of the browser
|
||||
window and that horizontal highlighting bars extend over the full width of
|
||||
the page.
|
||||
--------------------------------------------------------------------------------------------------
|
||||
# $Id$
|
||||
|
||||
NarrativeWeb Styles
|
||||
------------------------------------------------------------------------------------------------
|
||||
@@ -86,12 +87,6 @@ h1 {
|
||||
font-weight: bold;
|
||||
padding-left: 15px;
|
||||
}
|
||||
h2 {
|
||||
display:block;
|
||||
margin:0;
|
||||
padding:0;
|
||||
text-align: center;
|
||||
}
|
||||
h3 {
|
||||
font-size: large;
|
||||
padding-left: 15px;
|
||||
@@ -110,7 +105,6 @@ p#description {
|
||||
a {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a[href]:hover, a[href]:active {
|
||||
background-color: #E0E0E9
|
||||
@@ -367,10 +361,6 @@ table.IndividualList td.ColumnSurname {
|
||||
content: "";
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
#GalleryNav {
|
||||
@@ -469,7 +459,7 @@ div#SourceDetail {
|
||||
}
|
||||
.subsection {
|
||||
clear: both;
|
||||
overflow: visible;
|
||||
overflow: hidden;
|
||||
}
|
||||
.subsection p {
|
||||
margin: 0px;
|
||||
@@ -494,7 +484,8 @@ div#families table.attrlist td.ColumnType {
|
||||
----------------------------------------------------- */
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
width: 130px;
|
||||
max-width: 130px;
|
||||
max-height: 150px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.8em 0.5em;
|
||||
|
||||
@@ -50,6 +50,7 @@ Characteristic of this style is that it uses the full width of the browser
|
||||
window and that horizontal highlighting bars extend over the full width of
|
||||
the page.
|
||||
--------------------------------------------------------------------------------------------------
|
||||
# $Id$
|
||||
|
||||
NarrativeWeb Styles
|
||||
------------------------------------------------------------------------------------------------
|
||||
@@ -86,12 +87,6 @@ h1 {
|
||||
font-weight: bold;
|
||||
padding-left: 15px;
|
||||
}
|
||||
h2 {
|
||||
display:block;
|
||||
margin:0;
|
||||
padding:0;
|
||||
text-align: center;
|
||||
}
|
||||
h3 {
|
||||
font-size: large;
|
||||
padding-left: 15px;
|
||||
@@ -110,7 +105,6 @@ p#description {
|
||||
a {
|
||||
color: #36220B;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a[href]:hover, a[href]:active {
|
||||
background-color: #FFE09F
|
||||
@@ -367,10 +361,6 @@ table.IndividualList td.ColumnSurname {
|
||||
content: "";
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
#GalleryNav {
|
||||
@@ -469,7 +459,7 @@ div#SourceDetail {
|
||||
}
|
||||
.subsection {
|
||||
clear: both;
|
||||
overflow: visible;
|
||||
overflow: hidden;
|
||||
}
|
||||
.subsection p {
|
||||
margin: 0px;
|
||||
@@ -494,7 +484,8 @@ div#families table.attrlist td.ColumnType {
|
||||
----------------------------------------------------- */
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
width: 130px;
|
||||
max-width: 130px;
|
||||
max-height: 150px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.8em 0.5em;
|
||||
|
||||
@@ -50,6 +50,7 @@ Characteristic of this style is that it uses the full width of the browser
|
||||
window and that horizontal highlighting bars extend over the full width of
|
||||
the page.
|
||||
--------------------------------------------------------------------------------------------------
|
||||
# $Id$
|
||||
|
||||
NarrativeWeb Styles
|
||||
------------------------------------------------------------------------------------------------
|
||||
@@ -86,12 +87,6 @@ h1 {
|
||||
font-weight: bold;
|
||||
padding-left: 15px;
|
||||
}
|
||||
h2 {
|
||||
display:block;
|
||||
margin:0;
|
||||
padding:0;
|
||||
text-align: center;
|
||||
}
|
||||
h3 {
|
||||
font-size: large;
|
||||
padding-left: 15px;
|
||||
@@ -110,7 +105,6 @@ p#description {
|
||||
a {
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a[href]:hover, a[href]:active {
|
||||
background-color: #EAEEF4
|
||||
@@ -367,10 +361,6 @@ table.IndividualList td.ColumnSurname {
|
||||
content: "";
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
#GalleryNav {
|
||||
@@ -469,7 +459,7 @@ div#SourceDetail {
|
||||
}
|
||||
.subsection {
|
||||
clear: both;
|
||||
overflow: visible;
|
||||
overflow: hidden;
|
||||
}
|
||||
.subsection p {
|
||||
margin: 0px;
|
||||
@@ -494,7 +484,8 @@ div#families table.attrlist td.ColumnType {
|
||||
----------------------------------------------------- */
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
width: 130px;
|
||||
max-width: 130px;
|
||||
max-height: 150px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.8em 0.5em;
|
||||
|
||||
@@ -25,6 +25,7 @@ GRAMPS Cascading Style Sheet
|
||||
Style Name: Web_Citations-Outline.css
|
||||
******************************************************
|
||||
|
||||
# $Id$
|
||||
|
||||
Source Citations Outline styles
|
||||
------------------------------------------------------ */
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
*************************************************
|
||||
GRAMPS Cascading Style Sheet
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
*************************************************
|
||||
GRAMPS Cascading Style Sheet
|
||||
|
||||
@@ -25,6 +25,7 @@ GRAMPS Cascading Style Sheet
|
||||
Style Name: Web_Navigation-Horizontal.css
|
||||
******************************************************
|
||||
|
||||
# $Id$
|
||||
|
||||
Body Element
|
||||
------------------------------------------------------ */
|
||||
@@ -32,6 +33,7 @@ body {
|
||||
background-color: #00029D;
|
||||
color: #00029D;
|
||||
width: 100%;
|
||||
padding: 0px 14px;
|
||||
}
|
||||
|
||||
/* Navigation Menus
|
||||
|
||||
@@ -54,6 +54,7 @@ Middle images/Web_Mainz_Mid.png
|
||||
Middle Light images/Web_Mainz_MidLight.png
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
# $Id$
|
||||
|
||||
NarrativeWeb Styles
|
||||
--------------------------------------------------------------------------------------------
|
||||
@@ -67,7 +68,7 @@ body {
|
||||
background: url(../images/Web_Mainz_Bkgd.png) black repeat;
|
||||
}
|
||||
body > div {
|
||||
width: 85%;
|
||||
width: 950px;
|
||||
margin: 0px auto;
|
||||
background: url(../images/Web_Mainz_Mid.png) #FFF2C6 repeat;
|
||||
overflow: hidden;
|
||||
@@ -90,12 +91,6 @@ h1 {
|
||||
font-style: italic;
|
||||
margin-left: 2em;
|
||||
}
|
||||
h2 {
|
||||
display:block;
|
||||
margin:0;
|
||||
padding:0;
|
||||
text-align: center;
|
||||
}
|
||||
h3 {
|
||||
font-size: xx-large;
|
||||
font-weight: normal;
|
||||
@@ -119,7 +114,6 @@ h4 {
|
||||
a {
|
||||
color: #7D5925;
|
||||
text-decoration: none;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a[href]:hover, a[href]:active {
|
||||
background-color: #FFFFE7;
|
||||
@@ -150,7 +144,7 @@ div#nav ul li, #subnavigation ul li {
|
||||
float: left;
|
||||
}
|
||||
div#nav ul li a, #subnavigation ul li a {
|
||||
display: run-in;
|
||||
display: block;
|
||||
padding: 0.4em 0.8em 0.3em 0.8em;
|
||||
font-size: smaller;
|
||||
font-family: sans-serif;
|
||||
@@ -313,10 +307,6 @@ table#SortByCount thead th.ColumnQuantity a:after {
|
||||
content: "";
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
-----------------------------------------------------------------*/
|
||||
#GalleryNav {
|
||||
@@ -437,7 +427,8 @@ div#families table.fixed_subtables table.eventlist th:last-child {
|
||||
}
|
||||
#indivgallery .thumbnail {
|
||||
float: left;
|
||||
width: 130px;
|
||||
max-width: 130px;
|
||||
max-height: 150px;
|
||||
font-size: smaller;
|
||||
text-align: center;
|
||||
margin: 0.5em;
|
||||
@@ -533,6 +524,7 @@ div#map_canvas {
|
||||
table.calendar {
|
||||
table-layout: fixed;
|
||||
empty-cells: show;
|
||||
width: 950px;
|
||||
margin: 0px auto;
|
||||
background: url(../images/Web_Mainz_Mid.png) #FFF2C6 repeat;
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@ gray #696969
|
||||
green #5D835F
|
||||
--------------------------------------------------------------------------------------------
|
||||
|
||||
# $Id$
|
||||
|
||||
NarrativeWeb Styles
|
||||
--------------------------------------------------------------------------------------------
|
||||
@@ -114,7 +115,7 @@ h1 {
|
||||
font:normal 2em/1.2em serif;
|
||||
}
|
||||
h2 {
|
||||
display:block;
|
||||
display:none;
|
||||
}
|
||||
h3 {
|
||||
font:normal 2em/1.2em serif;
|
||||
@@ -138,6 +139,7 @@ h5, h6 {
|
||||
|
||||
p#description {
|
||||
color:#542;
|
||||
max-width:800px;
|
||||
margin:0;
|
||||
padding:1em 20px;
|
||||
background-color:#FFF;
|
||||
@@ -276,6 +278,7 @@ table.infolist tr th a:hover {
|
||||
table.infolist tr td {
|
||||
font:normal 1.1em/1.4em serif;
|
||||
vertical-align:middle;
|
||||
padding:.1em 10px;
|
||||
}
|
||||
table.infolist tr td a {
|
||||
display:block;
|
||||
@@ -395,30 +398,30 @@ table.surname thead tr th.ColumnParents, table.surname tbody tr td.ColumnParents
|
||||
/* Individuals
|
||||
----------------------------------------------------- */
|
||||
#Individuals { }
|
||||
#Individuals table.IndividualList {
|
||||
#Individuals table.individuallist {
|
||||
border-bottom:solid 1px #A97;
|
||||
}
|
||||
#Individuals table.IndividualList tbody tr td {
|
||||
#Individuals table.individuallist tbody tr td {
|
||||
border-bottom:dashed 1px #C1B398;
|
||||
}
|
||||
#Individuals table.IndividualList tbody tr td a:hover {
|
||||
#Individuals table.individuallist tbody tr td a:hover {
|
||||
text-decoration:none;
|
||||
}
|
||||
table.IndividualList tbody tr td.ColumnSurname a:hover, table.IndividualList tbody tr td.ColumnSurname a:active {
|
||||
table.individuallist tbody tr td.ColumnSurname a:hover, table.individuallist tbody tr td.ColumnSurname a:active {
|
||||
cursor:default;
|
||||
color:black;
|
||||
background:none;
|
||||
}
|
||||
table.IndividualList tbody tr td.ColumnName {
|
||||
table.individuallist tbody tr td.ColumnName {
|
||||
padding:0;
|
||||
background-color:#FFF;
|
||||
}
|
||||
table.IndividualList tbody tr td.ColumnName a {
|
||||
table.individuallist tbody tr td.ColumnName a {
|
||||
display:block;
|
||||
padding:.1em .1em;
|
||||
padding:.6em 10px;
|
||||
vertical-align:middle;
|
||||
}
|
||||
table.IndividualList tbody tr td.ColumnName a:hover {
|
||||
table.individuallist tbody tr td.ColumnName a:hover {
|
||||
background-color:#C1B398;
|
||||
}
|
||||
#Individuals div table.infolist tr td p {
|
||||
@@ -576,10 +579,6 @@ table.relationships tbody tr td.ColumnPartner a:hover {
|
||||
content: "";
|
||||
}
|
||||
|
||||
table.eventlist tbody tr td.ColumnSources {
|
||||
width: 5%;
|
||||
}
|
||||
|
||||
/* Gallery
|
||||
----------------------------------------------------- */
|
||||
#Gallery { }
|
||||
@@ -736,7 +735,7 @@ table.download {
|
||||
width:100%;
|
||||
}
|
||||
table.download img {
|
||||
float:none;
|
||||
float:center;
|
||||
}
|
||||
table.download thead tr th {
|
||||
text-align:center;
|
||||
@@ -933,6 +932,7 @@ div#Addresses table.infolist tr td a, div#Addresses table.infolist tr td p a {
|
||||
margin:0;
|
||||
float:left;
|
||||
width:130px;
|
||||
height:150px;
|
||||
text-align:center;
|
||||
}
|
||||
#indivgallery .thumbnail a {
|
||||
@@ -940,7 +940,6 @@ div#Addresses table.infolist tr td a, div#Addresses table.infolist tr td p a {
|
||||
margin:0;
|
||||
padding:0;
|
||||
background:none;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
#indivgallery .thumbnail a img {
|
||||
margin:0;
|
||||
@@ -963,12 +962,11 @@ div#Addresses table.infolist tr td a, div#Addresses table.infolist tr td p a {
|
||||
div.narrative {
|
||||
padding-bottom:0;
|
||||
}
|
||||
i + div.grampsstylednote p {
|
||||
margin: 0.1em 0 0.2em 0;
|
||||
}
|
||||
.narrative p {
|
||||
margin: 0.1em 0 0.2em 0;
|
||||
font:normal .9em/1.4em sans-serif;
|
||||
margin-top:.5em;
|
||||
margin-bottom:0;
|
||||
padding:0 20px 1em 20px;
|
||||
}
|
||||
|
||||
/* Subsections : References
|
||||
@@ -1097,7 +1095,7 @@ div#pedigree {
|
||||
margin-right: 10px;
|
||||
}
|
||||
#footer p#copyright img {
|
||||
margin-right: 10px;
|
||||
margin-right: 10px[
|
||||
}
|
||||
#user_footer {
|
||||
width: 70%;
|
||||
|
||||
@@ -41,6 +41,7 @@ black #000
|
||||
white #FFF
|
||||
---------------------------------------------------------------------------------------------------
|
||||
|
||||
# $Id$
|
||||
|
||||
NarrativeWeb Styles
|
||||
--------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -45,6 +45,7 @@ Unknown #000
|
||||
Males Web_Gender_Male.png
|
||||
Females Web_Gender_Female.png
|
||||
|
||||
# $Id$
|
||||
|
||||
NarrativeWeb Styles
|
||||
-------------------------------------------------------------------------------------------- */
|
||||
@@ -155,6 +156,7 @@ h5, h6 {
|
||||
margin:1.3em 0 .5em 1em;
|
||||
}
|
||||
p#description {
|
||||
max-width:800px;
|
||||
margin:0;
|
||||
padding:1em 20px;
|
||||
}
|
||||
@@ -454,30 +456,30 @@ div#Individuals {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
div#Individuals table.IndividualList {
|
||||
div#Individuals table.individuallist {
|
||||
border-bottom: solid 1px #5D835F;
|
||||
}
|
||||
div#Individuals table.IndividualList tbody tr td {
|
||||
div#Individuals table.individuallist tbody tr td {
|
||||
border-bottom: dashed 1px #5D835F;
|
||||
background-color: #D8F3D6;
|
||||
}
|
||||
div#Individuals table.IndividualList tbody tr td a {
|
||||
div#Individuals table.individuallist tbody tr td a {
|
||||
display: block;
|
||||
padding: .6em 10px;
|
||||
}
|
||||
div#Individuals table.IndividualList tbody tr td.ColumnSurname a:hover,
|
||||
div#Individuals table.IndividualList tbody tr td.ColumnSurname a:active {
|
||||
div#Individuals table.individuallist tbody tr td.ColumnSurname a:hover,
|
||||
div#Individuals table.individuallist tbody tr td.ColumnSurname a:active {
|
||||
cursor:default;
|
||||
color: #000;
|
||||
background:none;
|
||||
}
|
||||
div#Individuals table.IndividualList tbody tr td.ColumnName {
|
||||
div#Individuals table.individuallist tbody tr td.ColumnName {
|
||||
background-color: #FFF;
|
||||
}
|
||||
div#Individuals table.IndividualList tbody tr td.ColumnName a {
|
||||
div#Individuals table.individuallist tbody tr td.ColumnName a {
|
||||
vertical-align:middle;
|
||||
}
|
||||
div#Individuals table.IndividualList tbody tr td.ColumnPartner {
|
||||
div#Individuals table.individuallist tbody tr td.ColumnPartner {
|
||||
background-color: #FFF;
|
||||
}
|
||||
div#Individuals div table.infolist tr td p {
|
||||
|
||||
@@ -45,9 +45,6 @@ Females Web_Gender_Female.png
|
||||
}
|
||||
#treeContainer {
|
||||
position:relative;
|
||||
display: table-cell;
|
||||
vertical-align: middle;
|
||||
overflow: visible;
|
||||
z-index:1;
|
||||
}
|
||||
#treeContainer div.boxbg {
|
||||
|
||||
@@ -29,6 +29,7 @@ Style Author: Stephane Charette and Jason Simanek
|
||||
Image Gallery
|
||||
-------------
|
||||
|
||||
# $Id$
|
||||
|
||||
ensure RegionBox <ol> is hidden and has no margins/padding that would shift the image */
|
||||
ol.RegionBox {
|
||||
|
||||
@@ -18,11 +18,13 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
###################################################### */
|
||||
body#FamilyMap {
|
||||
background-color: #000;
|
||||
padding: 0 14px;
|
||||
width: 965px;
|
||||
}
|
||||
|
||||
/* Family Maps
|
||||
@@ -31,11 +33,8 @@ body#FamilyMap {
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
border: solid 4px #000;
|
||||
margin: 0px auto;
|
||||
width: 800px;
|
||||
height: 400px;
|
||||
max-width: 90%;
|
||||
max-height: 90%;
|
||||
width: 931px;
|
||||
height: 1000px;
|
||||
}
|
||||
|
||||
/* Place Maps
|
||||
@@ -45,8 +44,6 @@ div#place_canvas {
|
||||
border: solid 4px #000;
|
||||
width: 500px;
|
||||
height: 400px;
|
||||
max-width: 90%;
|
||||
max-height: 90%;
|
||||
}
|
||||
button#drop {
|
||||
background-color: purple;
|
||||
|
||||
@@ -1,32 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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>
|
||||
<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>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!-- $Id$ -->
|
||||
|
||||
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
|
||||
<mime-type type="application/x-gramps">
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
|
||||
$Id$
|
||||
-->
|
||||
<xsl:stylesheet version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
|
||||
@@ -21,18 +21,19 @@
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
# $Id$
|
||||
-->
|
||||
|
||||
<!--
|
||||
This is the Document Type Definition file for v1.7.1
|
||||
This is the Document Type Definition file for v1.6.0
|
||||
of the GRAMPS XML genealogy data format.
|
||||
Please use the following formal public identifier to identify it:
|
||||
|
||||
"-//GRAMPS//DTD GRAMPS XML V1.7.1//EN"
|
||||
"-//GRAMPS//DTD GRAMPS XML V1.6.0//EN"
|
||||
|
||||
For example:
|
||||
<!DOCTYPE database PUBLIC "-//GRAMPS//DTD GRAMPS XML V1.7.1//EN"
|
||||
"http://gramps-project.org/xml/1.7.1/grampsxml.dtd"
|
||||
<!DOCTYPE database PUBLIC "-//GRAMPS//DTD GRAMPS XML V1.6.0//EN"
|
||||
"http://gramps-project.org/xml/1.6.0/grampsxml.dtd"
|
||||
[...]>
|
||||
-->
|
||||
|
||||
@@ -61,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.7.1/">
|
||||
<!ATTLIST database xmlns CDATA #FIXED "http://gramps-project.org/xml/1.6.0/">
|
||||
|
||||
|
||||
<!-- ************************************************************
|
||||
@@ -121,7 +122,6 @@ 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,8 +138,6 @@ 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
|
||||
@@ -198,13 +196,12 @@ 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 CDATA #IMPLIED
|
||||
frel CDATA #IMPLIED
|
||||
mrel (None|Birth|Adopted|Stepchild|Sponsored|Foster|Other|Unknown) #IMPLIED
|
||||
frel (None|Birth|Adopted|Stepchild|Sponsored|Foster|Other|Unknown) #IMPLIED
|
||||
>
|
||||
|
||||
<!ELEMENT type (#PCDATA)>
|
||||
@@ -251,25 +248,20 @@ PLACES
|
||||
|
||||
<!ELEMENT places (placeobj)*>
|
||||
|
||||
<!ELEMENT placeobj (ptitle?, pname+, code?, coord?, placeref*, location*,
|
||||
<!ELEMENT placeobj (ptitle?, code?, alt_name*, 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
|
||||
|
||||
@@ -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.7.1/"
|
||||
ns="http://gramps-project.org/xml/1.6.0/"
|
||||
xmlns="http://relaxng.org/ns/structure/1.0">
|
||||
|
||||
<start><element name="database">
|
||||
@@ -210,7 +210,16 @@
|
||||
</define>
|
||||
|
||||
<define name="child-rel">
|
||||
<text/>
|
||||
<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>
|
||||
</define>
|
||||
|
||||
<define name="name-content">
|
||||
@@ -221,7 +230,13 @@
|
||||
<optional><attribute name="priv">
|
||||
<ref name="priv-content"/>
|
||||
</attribute></optional>
|
||||
<optional><attribute name="type"><text/></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="sort"><text/></attribute></optional>
|
||||
<optional><attribute name="display"><text/></attribute></optional>
|
||||
<optional><element name="first"><text/></element></optional>
|
||||
@@ -250,7 +265,20 @@
|
||||
<value>1</value>
|
||||
<value>0</value>
|
||||
</choice></attribute></optional>
|
||||
<optional><attribute name="derivation"><text/></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="connector"><text/></attribute></optional>
|
||||
</define>
|
||||
|
||||
@@ -451,12 +479,11 @@
|
||||
|
||||
<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>
|
||||
@@ -745,12 +772,6 @@
|
||||
<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>
|
||||
|
||||
@@ -0,0 +1,859 @@
|
||||
/*!
|
||||
* 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 = '<<',
|
||||
prev = '<',
|
||||
next = '>',
|
||||
last = '>>',
|
||||
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);
|
||||
@@ -0,0 +1,36 @@
|
||||
<%@ 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>
|
||||
@@ -0,0 +1,9 @@
|
||||
|
||||
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
|
||||
@@ -0,0 +1,89 @@
|
||||
<!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>
|
||||
|
|
||||
<a href="http://jhtmlarea.codeplex.com/Release/ProjectReleases.aspx">Downloads</a>
|
||||
|
|
||||
<a href="http://jhtmlarea.codeplex.com/Thread/List.aspx">Discussions</a>
|
||||
|
|
||||
<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>
|
||||
@@ -0,0 +1,128 @@
|
||||
<!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>
|
||||
@@ -0,0 +1,117 @@
|
||||
/* 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
|
||||
|
After Width: | Height: | Size: 620 B |
@@ -0,0 +1,365 @@
|
||||
/*
|
||||
* 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);
|
||||
@@ -0,0 +1,403 @@
|
||||
/*
|
||||
* 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);
|
||||
@@ -0,0 +1,357 @@
|
||||
/*
|
||||
* 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);
|
||||
@@ -0,0 +1,189 @@
|
||||
/*
|
||||
* 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);
|
||||
@@ -0,0 +1,8 @@
|
||||
// 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);
|
||||
@@ -0,0 +1,6 @@
|
||||
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;}
|
||||
@@ -0,0 +1,6 @@
|
||||
body
|
||||
{
|
||||
background: #000;
|
||||
color: #fff;
|
||||
margin: 2px;
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
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;}
|
||||
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 964 B |
|
After Width: | Height: | Size: 942 B |
|
After Width: | Height: | Size: 260 B |
|
After Width: | Height: | Size: 251 B |
|
After Width: | Height: | Size: 178 B |
|
After Width: | Height: | Size: 104 B |
|
After Width: | Height: | Size: 125 B |
|
After Width: | Height: | Size: 105 B |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 90 B |
|
After Width: | Height: | Size: 129 B |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
@@ -0,0 +1,406 @@
|
||||
/*
|
||||
* 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; }
|
||||
@@ -474,9 +474,6 @@
|
||||
<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>
|
||||
|
||||
@@ -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*]] [**--remove=** *FAMILY_TREE_PATTERN*]
|
||||
[**-f** | **--format=** *FORMAT*]] [**-i** | **--import=** *FILE*
|
||||
[**-f** | **--format=** *FORMAT*]] [**-i** | **--import=** *...*]
|
||||
[**-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=** *FILE*
|
||||
Export data into *FILE* . For **gramps-xml** , **gedcom**
|
||||
, **wft** , **gramps-pkg** , and **geneweb** , the *FILE* is the
|
||||
|
||||
|
||||
**-e** , **--export=** *FICHIER*
|
||||
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/python3/dist-packages/gramps/*
|
||||
|
||||
|
||||
*${PREFIX}/lib/python/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.
|
||||
|
||||
|
||||
|
||||
@@ -13,10 +13,11 @@ 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=** *FICHIER*]
|
||||
[**-e** | **--export=** *FICHIER*] [**--remove=** *FAMILY_TREE_PATTERN*]
|
||||
[**-a** | **--action=** *ACTION* [*-p* | **--options=** *CHAÎNE‐
|
||||
[**-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‐
|
||||
OPTION*]] [*FICHIER*] [**--version**]
|
||||
|
||||
|
||||
@@ -60,7 +61,7 @@ gramps(1) @VERSION@ gramps(1)
|
||||
**geneweb** .
|
||||
|
||||
|
||||
**-l**
|
||||
**-l**
|
||||
Imprime une liste des arbres familiaux disponibles.
|
||||
|
||||
|
||||
@@ -91,11 +92,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.
|
||||
|
||||
@@ -120,7 +121,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**
|
||||
@@ -183,54 +184,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**
|
||||
|
||||
|
||||
@@ -264,11 +265,11 @@ gramps(1) @VERSION@ gramps(1)
|
||||
**FICHIERS**
|
||||
|
||||
*${PREFIX}/bin/gramps*
|
||||
|
||||
*${PREFIX}/lib/python3/dist-packages/gramps/*
|
||||
|
||||
|
||||
*${PREFIX}/lib/python/dist-packages/gramps/*
|
||||
|
||||
*${PREFIX}/share/*
|
||||
|
||||
|
||||
*${HOME}/.gramps*
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH FRENCH "" "" ""
|
||||
.TH "GRAMPS" "1" "09 March 2015" "4.2" "Gramps"
|
||||
.SH NAME
|
||||
French \-
|
||||
gramps \- Gramps Documentation
|
||||
.
|
||||
.nr rst2man-indent-level 0
|
||||
.
|
||||
@@ -30,6 +28,8 @@ 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,10 +42,11 @@ 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 \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‐
|
||||
[\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‐
|
||||
OPTION\fP]] [\fIFICHIER\fP] [\fB\-\-version\fP]
|
||||
.TP
|
||||
.B \fBDESCRIPTION\fP
|
||||
@@ -75,16 +76,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
|
||||
@@ -192,7 +193,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
|
||||
@@ -301,7 +302,7 @@ besoins
|
||||
.INDENT 3.5
|
||||
\fI${PREFIX}/bin/gramps\fP
|
||||
.sp
|
||||
\fI${PREFIX}/lib/python3/dist\-packages/gramps/\fP
|
||||
\fI${PREFIX}/lib/python/dist\-packages/gramps/\fP
|
||||
.sp
|
||||
\fI${PREFIX}/share/\fP
|
||||
.sp
|
||||
@@ -333,5 +334,10 @@ 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.
|
||||
.\"
|
||||
.
|
||||
|
||||
@@ -1,335 +1,332 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH ENGLISH "" "" ""
|
||||
.TH gramps 1 "@VERSION@" "December 2012" "@VERSION@"
|
||||
.SH NAME
|
||||
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]
|
||||
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,
|
||||
..
|
||||
.de1 INDENT
|
||||
.\" .rstReportMargin pre:
|
||||
. RS \\$1
|
||||
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
|
||||
. nr rst2man-indent-level +1
|
||||
.\" .rstReportMargin post:
|
||||
\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,
|
||||
..
|
||||
.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
|
||||
\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
|
||||
Print a list of known family trees.
|
||||
|
||||
.TP
|
||||
.B \fB\-L\fP
|
||||
Print a detailed list of known family trees.
|
||||
.TP
|
||||
.B \fB\-u\fP , \fB\-\-force\-unlock\fP
|
||||
.BI \-u,\-\^\-force-unlock
|
||||
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
|
||||
.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 \fIFILE\fP
|
||||
Export data into \fIFILE\fP . For \fBgramps\-xml\fP , \fBgedcom\fP
|
||||
, \fBwft\fP , \fBgramps\-pkg\fP , and \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
|
||||
.BI \-\^\-version
|
||||
Prints the version number of gramps and then exits
|
||||
.UNINDENT
|
||||
\" 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.
|
||||
.TP
|
||||
.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.
|
||||
.BI \-\^\-disable-sound
|
||||
Disable sound server usage
|
||||
.TP
|
||||
.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
|
||||
.BI \-\^\-enable-sound
|
||||
Enable sound server usage
|
||||
.TP
|
||||
.B \fBENVIRONMENT VARIABLES\fP
|
||||
.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
|
||||
The program checks whether these environment variables are set:
|
||||
.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
|
||||
|
||||
\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
|
||||
\fI${PREFIX}/bin/gramps\fP
|
||||
.sp
|
||||
\fI${PREFIX}/lib/python3/dist\-packages/gramps/\fP
|
||||
.sp
|
||||
.br
|
||||
\fI${PREFIX}/lib/python/dist\-packages/gramps/\fP
|
||||
.br
|
||||
\fI${PREFIX}/share/\fP
|
||||
.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
|
||||
.br
|
||||
\fI${HOME}/.gramps\fP
|
||||
|
||||
.SH AUTHORS
|
||||
Donald Allingham \fI<don@gramps-project.org>\fR
|
||||
.br
|
||||
\fIhttp://gramps.sourceforge.net\fR
|
||||
.LP
|
||||
This man page was originally written by:
|
||||
Brandon L. Griffith <\fI\%brandon@debian.org\fP>
|
||||
.br
|
||||
Brandon L. Griffith \fI<brandon@debian.org>\fR
|
||||
.br
|
||||
for inclusion in the Debian GNU/Linux system.
|
||||
.sp
|
||||
.LP
|
||||
This man page is currently maintained by:
|
||||
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
|
||||
.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
|
||||
The developer documentation can be found on the
|
||||
\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.
|
||||
.
|
||||
\fIhttp://developers.gramps-project.org\fR site.
|
||||
|
||||
@@ -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 = '5.0.0'
|
||||
VERSION = '4.2.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=================='Sphinx-build'=============================\n")
|
||||
print("\n=================='Shpinx-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 related translated versions.',
|
||||
|
||||
parser = ArgumentParser(
|
||||
description='This program aims to handle documentation'
|
||||
' and realted 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()
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
{% 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 %}
|
||||
@@ -0,0 +1,12 @@
|
||||
{% extends "admin/base_site.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block breadcrumbs %}<div class="breadcrumbs"><a href="/">{% trans "Home" %}</a> › {% 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 %}
|
||||
@@ -0,0 +1,21 @@
|
||||
{% 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 %}
|
||||
@@ -0,0 +1,30 @@
|
||||
{% extends "gramps-base.html" %}
|
||||
{% load my_tags %}
|
||||
|
||||
{% block title %}{{sitename}}{% endblock %}
|
||||
{% block heading %}{{sitename}}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<p> </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 %}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
{% 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 %}
|
||||
@@ -0,0 +1,399 @@
|
||||
{% 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">© 2009-2015 <a href="http://www.gramps-project.org/">www.gramps-project.org</a>
|
||||
</p>
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,38 @@
|
||||
{% extends "gramps-base.html" %}
|
||||
{% load my_tags %}
|
||||
|
||||
{% block title %}{{sitename}}{% endblock %}
|
||||
{% block heading %}{{sitename}}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<p> </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 %}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<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>
|
||||
|
||||